diff --git a/.github/calcrom/calcrom.pl b/.github/calcrom/calcrom.pl index 9fbd959945d8..cb8c5723ee49 100755 --- a/.github/calcrom/calcrom.pl +++ b/.github/calcrom/calcrom.pl @@ -1,5 +1,11 @@ #!/usr/bin/perl +# Usage: +# calcrom.pl [--data] +# +# mapfile: path to .map file output by LD +# data: set to output % breakdown of data + use IPC::Cmd qw[ run ]; use Getopt::Long; @@ -65,12 +71,13 @@ # 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]\\{5,7\\}\\|sub_[0-9a-fA-F]\\{5,7\\}'"; +my $undoc_regex = "'[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,7\\}'"; +# The above may be double counted here, and will need to be filtered out. +my $partial_doc_regex = "'_[0-28][0-9a-fA-F]\\{5,7\\}'"; my $count_cmd = "wc -l"; @@ -87,7 +94,7 @@ my $undocumented_as_string; (run ( - command => "$base_cmd | $undoc_cmd | $count_cmd", + command => "$base_cmd | grep $undoc_regex | $count_cmd", buffer => \$undocumented_as_string, timeout => 60 )) @@ -95,7 +102,7 @@ my $partial_documented_as_string; (run ( - command => "$base_cmd | $partial_doc_cmd | $count_cmd", + command => "$base_cmd | grep $partial_doc_regex | grep -v $undoc_regex | $count_cmd", buffer => \$partial_documented_as_string, timeout => 60 )) @@ -112,7 +119,7 @@ $partial_documented_as_string =~ s/^\s+|\s+$//g; my $partial_documented = $partial_documented_as_string + 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'"; + 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; @@ -126,9 +133,6 @@ my $srcPct = sprintf("%.4f", 100 * $src / $total); my $asmPct = sprintf("%.4f", 100 * $asm / $total); -# partial_documented is double-counting the unknown_* and sub_* symbols. -$partial_documented = $partial_documented - $undocumented; - my $documented = $total_syms - ($undocumented + $partial_documented); my $docPct = sprintf("%.4f", 100 * $documented / $total_syms); my $partialPct = sprintf("%.4f", 100 * $partial_documented / $total_syms); diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 942f1f1f58e7..5393aa155f6f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: repository: pret/agbcc - name: Install binutils - run: sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi + run: sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi libelf-dev # build-essential, git, and libpng-dev are already installed # gcc-arm-none-eabi is only needed for the modern build # as an alternative to dkP @@ -41,10 +41,15 @@ jobs: working-directory: agbcc - name: Agbcc - run: make -j${nproc} all + run: make -j${nproc} -O all - name: Modern env: MODERN: 1 COMPARE: 0 - run: make -j${nproc} all + run: make -j${nproc} -O all + + - name: Test + run: | + make -j${nproc} -O pokeemerald-test.elf + make -j${nproc} check diff --git a/INSTALL.md b/INSTALL.md index 5f2a1f05f14f..53d284107225 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -9,7 +9,7 @@ If you run into trouble, ask for help on Discord or IRC (see [README.md](README. ## Windows Windows has instructions for building with three possible terminals, providing 3 different options in case the user stumbles upon unexpected errors. -- [Windows 10 (WSL1)](#windows-10-wsl1) (**Fastest, highly recommended**, Windows 10 only) +- [Windows 10/11 (WSL1)](#windows-1011-wsl1) (**Fastest, highly recommended**, Windows 10 and 11 only) - [Windows (msys2)](#windows-msys2) (Second fastest) - [Windows (Cygwin)](#windows-cygwin) (Slowest) @@ -26,7 +26,7 @@ All of the Windows instructions assume that the default drive is C:\\. If this d **A note of caution**: As Windows 7 is officially unsupported by Microsoft and Windows 8 has very little usage, some maintainers are unwilling to maintain the Windows 7/8 instructions. Thus, these instructions may break in the future with fixes taking longer than fixes to the Windows 10 instructions. -## Windows 10 (WSL1) +## Windows 10/11 (WSL1) WSL1 is the preferred terminal to build **pokeemerald**. The following instructions will explain how to install WSL1 (referred to interchangeably as WSL). - If WSL (Debian or Ubuntu) is **not installed**, then go to [Installing WSL1](#Installing-WSL1). - Otherwise, if WSL is installed, but it **hasn't previously been set up for another decompilation project**, then go to [Setting up WSL1](#Setting-up-WSL1). @@ -358,7 +358,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for 1. If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run: ```bash - git clone https://github.com/pret/pokeemerald + git clone https://github.com/rh-hideout/pokeemerald-expansion ```
diff --git a/Makefile b/Makefile index 2644a9acd9e9..8e3ff29753f1 100644 --- a/Makefile +++ b/Makefile @@ -79,6 +79,9 @@ ELF = $(ROM:.gba=.elf) MAP = $(ROM:.gba=.map) SYM = $(ROM:.gba=.sym) +TESTELF = $(ROM:.gba=-test.elf) +HEADLESSELF = $(ROM:.gba=-test-headless.elf) + C_SUBDIR = src GFLIB_SUBDIR = gflib ASM_SUBDIR = asm @@ -88,6 +91,7 @@ SONG_SUBDIR = sound/songs MID_SUBDIR = sound/songs/midi SAMPLE_SUBDIR = sound/direct_sound_samples CRY_SUBDIR = sound/direct_sound_samples/cries +TEST_SUBDIR = test C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR) GFLIB_BUILDDIR = $(OBJ_DIR)/$(GFLIB_SUBDIR) @@ -95,6 +99,7 @@ ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR) DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR) SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR) MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR) +TEST_BUILDDIR = $(OBJ_DIR)/$(TEST_SUBDIR) ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) @@ -131,10 +136,14 @@ RAMSCRGEN := tools/ramscrgen/ramscrgen$(EXE) FIX := tools/gbafix/gbafix$(EXE) MAPJSON := tools/mapjson/mapjson$(EXE) JSONPROC := tools/jsonproc/jsonproc$(EXE) +PATCHELF := tools/patchelf/patchelf$(EXE) +ROMTEST ?= $(shell { command -v mgba-rom-test || command -v tools/mgba/mgba-rom-test$(EXE); } 2>/dev/null) +ROMTESTHYDRA := tools/mgba-rom-test-hydra/mgba-rom-test-hydra$(EXE) PERL := perl -TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*)) +TOOLDIRS := tools/aif2pcm tools/bin2c tools/gbafix tools/gbagfx tools/jsonproc tools/mapjson tools/mid2agb tools/preproc tools/ramscrgen tools/rsfont tools/scaninc +CHECKTOOLDIRS = tools/patchelf tools/mgba-rom-test-hydra TOOLBASE = $(TOOLDIRS:tools/%=%) TOOLS = $(foreach tool,$(TOOLBASE),tools/$(tool)/$(tool)$(EXE)) @@ -150,7 +159,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) libagbsyscall modern tidymodern tidynonmodern +.PHONY: all rom clean compare tidy tools check-tools mostlyclean clean-tools clean-check-tools $(TOOLDIRS) $(CHECKTOOLDIRS) libagbsyscall modern tidymodern tidynonmodern check infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -158,7 +167,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 libagbsyscall syms,$(MAKECMDGOALS))) +ifeq (,$(filter-out all rom compare modern check libagbsyscall syms,$(MAKECMDGOALS))) $(call infoshell, $(MAKE) -f make_tools.mk) else NODEP ?= 1 @@ -168,9 +177,9 @@ endif ifeq (,$(MAKECMDGOALS)) SCAN_DEPS ?= 1 else - # clean, tidy, tools, mostlyclean, clean-tools, $(TOOLDIRS), tidymodern, tidynonmodern don't even build the ROM + # clean, tidy, tools, check-tools, mostlyclean, clean-tools, clean-check-tools, $(TOOLDIRS), $(CHECKTOOLDIRS), tidymodern, tidynonmodern don't even build the ROM # libagbsyscall does its own thing - ifeq (,$(filter-out clean tidy tools mostlyclean clean-tools $(TOOLDIRS) tidymodern tidynonmodern libagbsyscall,$(MAKECMDGOALS))) + ifeq (,$(filter-out clean tidy tools mostlyclean clean-tools $(TOOLDIRS) clean-check-tools $(CHECKTOOLDIRS) tidymodern tidynonmodern libagbsyscall,$(MAKECMDGOALS))) SCAN_DEPS ?= 0 else SCAN_DEPS ?= 1 @@ -182,6 +191,11 @@ C_SRCS_IN := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) C_SRCS := $(foreach src,$(C_SRCS_IN),$(if $(findstring .inc.c,$(src)),,$(src))) C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) +TEST_SRCS_IN := $(wildcard $(TEST_SUBDIR)/*.c $(TEST_SUBDIR)/*/*.c $(TEST_SUBDIR)/*/*/*.c) +TEST_SRCS := $(foreach src,$(TEST_SRCS_IN),$(if $(findstring .inc.c,$(src)),,$(src))) +TEST_OBJS := $(patsubst $(TEST_SUBDIR)/%.c,$(TEST_BUILDDIR)/%.o,$(TEST_SRCS)) +TEST_OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(TEST_OBJS)) + GFLIB_SRCS := $(wildcard $(GFLIB_SUBDIR)/*.c) GFLIB_OBJS := $(patsubst $(GFLIB_SUBDIR)/%.c,$(GFLIB_BUILDDIR)/%.o,$(GFLIB_SRCS)) @@ -206,7 +220,7 @@ MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS)) OBJS := $(C_OBJS) $(GFLIB_OBJS) $(C_ASM_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) -SUBDIRS := $(sort $(dir $(OBJS))) +SUBDIRS := $(sort $(dir $(OBJS) $(dir $(TEST_OBJS)))) $(shell mkdir -p $(SUBDIRS)) endif @@ -216,11 +230,16 @@ all: rom tools: $(TOOLDIRS) +check-tools: $(CHECKTOOLDIRS) + syms: $(SYM) $(TOOLDIRS): @$(MAKE) -C $@ +$(CHECKTOOLDIRS): + @$(MAKE) -C $@ + rom: $(ROM) ifeq ($(COMPARE),1) @$(SHA1) rom.sha1 @@ -229,11 +248,14 @@ endif # For contributors to make sure a change didn't affect the contents of the ROM. compare: all -clean: mostlyclean clean-tools +clean: mostlyclean clean-tools clean-check-tools clean-tools: @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) +clean-check-tools: + @$(foreach tooldir,$(CHECKTOOLDIRS),$(MAKE) clean -C $(tooldir);) + mostlyclean: tidynonmodern tidymodern rm -f $(SAMPLE_SUBDIR)/*.bin rm -f $(CRY_SUBDIR)/*.bin @@ -407,6 +429,14 @@ $(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt) $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt $(RAMSCRGEN) ewram_data $< ENGLISH > $@ +# NOTE: Based on C_DEP above, but without NODEP and KEEP_TEMPS handling. +define TEST_DEP +$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib -I test $2) + @echo "$$(CC1) -o $$@ $$<" + @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - +endef +$(foreach src, $(TEST_SRCS), $(eval $(call TEST_DEP,$(patsubst $(TEST_SUBDIR)/%.c,$(TEST_BUILDDIR)/%.o,$(src)),$(src),$(patsubst $(TEST_SUBDIR)/%.c,%,$(src))))) + ifeq ($(MODERN),0) LD_SCRIPT := ld_script.txt LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld @@ -429,6 +459,28 @@ $(ROM): $(ELF) modern: all +LD_SCRIPT_TEST := ld_script_test.txt + +$(OBJ_DIR)/ld_script_test.ld: $(LD_SCRIPT_TEST) $(LD_SCRIPT_DEPS) + cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT_TEST) > ld_script_test.ld + +$(TESTELF): $(OBJ_DIR)/ld_script_test.ld $(OBJS) $(TEST_OBJS) libagbsyscall check-tools + @echo "cd $(OBJ_DIR) && $(LD) -T ld_script_test.ld -o ../../$@ " + @cd $(OBJ_DIR) && $(LD) $(TESTLDFLAGS) -T ld_script_test.ld -o ../../$@ $(OBJS_REL) $(TEST_OBJS_REL) $(LIB) + $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent + $(PATCHELF) $(TESTELF) gTestRunnerArgv "$(TESTS)\0" + +ifeq ($(GITHUB_REPOSITORY_OWNER),rh-hideout) +TEST_SKIP_IS_FAIL := \x01 +else +TEST_SKIP_IS_FAIL := \x00 +endif + +check: $(TESTELF) + @cp $< $(HEADLESSELF) + $(PATCHELF) $(HEADLESSELF) gTestRunnerHeadless '\x01' gTestRunnerSkipIsFail "$(TEST_SKIP_IS_FAIL)" + $(ROMTESTHYDRA) $(ROMTEST) $(HEADLESSELF) + libagbsyscall: @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc index a98a344fa1bf..6ff38769068c 100644 --- a/asm/macros/battle_anim_script.inc +++ b/asm/macros/battle_anim_script.inc @@ -270,6 +270,50 @@ .macro stopsound .byte 0x2f .endm + + @ same as createvisualtask except takes in battlerargindex, which is the battle anim arg index of the battler to loop through + .macro createvisualtaskontargets addr:req, priority:req, battlerargindex:req, argv:vararg + .byte 0x30 + .4byte \addr + .byte \priority + .byte \battlerargindex + .byte (.Lcreatetask_\@_2 - .Lcreatetask_\@_1) / 2 @ num_args +.Lcreatetask_\@_1: + .2byte \argv +.Lcreatetask_\@_2: + .endm + + @ same as createsprite except takes in battlerargindex, which is the battle anim arg index of the battler to loop through + .macro createspriteontargets template:req, anim_battler:req, subpriority_offset:req, battlerargindex:req, argv:vararg + .byte 0x31 + .4byte \template + .if \anim_battler == ANIM_TARGET + .byte 0x80 | (\subpriority_offset & 0x7F) + .else + .byte (\subpriority_offset & 0x7F) + .endif + .byte \battlerargindex + .byte (.Lsprite_\@_2 - .Lsprite_\@_1) / 2 +.Lsprite_\@_1: + .2byte \argv +.Lsprite_\@_2: + .endm + + @ does not overwrite gBattleAnimArgs[battlerargindex], some sprite templates are too dependent on the value (e.g. heal block) + .macro createspriteontargets_onpos template:req, anim_battler:req, subpriority_offset:req, battlerargindex:req, argv:vararg + .byte 0x32 + .4byte \template + .if \anim_battler == ANIM_TARGET + .byte 0x80 | (\subpriority_offset & 0x7F) + .else + .byte (\subpriority_offset & 0x7F) + .endif + .byte \battlerargindex + .byte (.Lsprite_\@_2 - .Lsprite_\@_1) / 2 +.Lsprite_\@_1: + .2byte \argv +.Lsprite_\@_2: + .endm @ useful macros .macro jumpreteq value:req, ptr:req diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 1a6641e76241..4f11fc78b8ef 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -3,9 +3,9 @@ .byte 0x0 .endm - .macro accuracycheck failPtr:req, move:req + .macro accuracycheck failInstr:req, move:req .byte 0x1 - .4byte \failPtr + .4byte \failInstr .2byte \move .endm @@ -116,11 +116,11 @@ .4byte NULL .endm - .macro tryfaintmon_spikes battler:req, ptr:req + .macro tryfaintmon_spikes battler:req, instr:req .byte 0x19 .byte \battler .byte TRUE - .4byte \ptr + .4byte \instr .endm .macro dofaintanimation battler:req @@ -133,65 +133,65 @@ .byte \battler .endm - .macro jumpifstatus battler:req, status1:req, ptr:req + .macro jumpifstatus battler:req, flags:req, jumpInstr:req .byte 0x1c .byte \battler - .4byte \status1 - .4byte \ptr + .4byte \flags + .4byte \jumpInstr .endm - .macro jumpifstatus2 battler:req, status2:req, ptr:req + .macro jumpifstatus2 battler:req, flags:req, jumpInstr:req .byte 0x1d .byte \battler - .4byte \status2 - .4byte \ptr + .4byte \flags + .4byte \jumpInstr .endm - .macro jumpifability battler:req, ability:req, ptr:req + .macro jumpifability battler:req, ability:req, jumpInstr:req .byte 0x1e .byte \battler .2byte \ability - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifsideaffecting battler:req, sidestatus:req, ptr:req + .macro jumpifsideaffecting battler:req, flags:req, jumpInstr:req .byte 0x1f .byte \battler - .4byte \sidestatus - .4byte \ptr + .4byte \flags + .4byte \jumpInstr .endm - .macro jumpifstat battler:req, ifflag:req, stat:req, value:req, ptr + .macro jumpifstat battler:req, comparison:req, stat:req, value:req, jumpInstr:req .byte 0x20 .byte \battler - .byte \ifflag + .byte \comparison .byte \stat .byte \value - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifstatus3condition battler:req, status3:req, condition:req, ptr:req + .macro jumpifstatus3condition battler:req, flags:req, jumpIfTrue:req, jumpInstr:req .byte 0x21 .byte \battler - .4byte \status3 - .byte \condition - .4byte \ptr + .4byte \flags + .byte \jumpIfTrue + .4byte \jumpInstr .endm - .macro jumpbasedontype battler:req, type:req, case:req, ptr:req + .macro jumpbasedontype battler:req, type:req, jumpIfType:req, jumpInstr:req .byte 0x22 .byte \battler .byte \type - .byte \case - .4byte \ptr + .byte \jumpIfType + .4byte \jumpInstr .endm - .macro jumpiftype battler:req, type:req, ptr:req - jumpbasedontype \battler, \type, 1, \ptr + .macro jumpiftype battler:req, type:req, jumpInstr:req + jumpbasedontype \battler, \type, TRUE, \jumpInstr .endm - .macro jumpifnottype battler:req, type:req, ptr:req - jumpbasedontype \battler, \type, 0, \ptr + .macro jumpifnottype battler:req, type:req, jumpInstr:req + jumpbasedontype \battler, \type, FALSE, \jumpInstr .endm .macro getexp battler:req @@ -199,9 +199,9 @@ .byte \battler .endm - .macro checkteamslost ptr:req + .macro checkteamslost jumpInstr:req .byte 0x24 - .4byte \ptr + .4byte \jumpInstr .endm .macro movevaluescleanup @@ -213,72 +213,72 @@ .byte \value .endm - .macro decrementmultihit value:req + .macro decrementmultihit loopInstr:req .byte 0x27 - .4byte \value + .4byte \loopInstr .endm - .macro goto ptr:req + .macro goto instr:req .byte 0x28 - .4byte \ptr + .4byte \instr .endm - .macro jumpifbyte ifflag:req, val:req, byte:req, ptr:req + .macro jumpifbyte comparison:req, bytePtr:req, value:req, jumpInstr:req .byte 0x29 - .byte \ifflag - .4byte \val - .byte \byte - .4byte \ptr + .byte \comparison + .4byte \bytePtr + .byte \value + .4byte \jumpInstr .endm - .macro jumpifhalfword ifflag:req, val:req, hword:req, ptr:req + .macro jumpifhalfword comparison:req, halfwordPtr:req, value:req, jumpInstr:req .byte 0x2a - .byte \ifflag - .4byte \val - .2byte \hword - .4byte \ptr + .byte \comparison + .4byte \halfwordPtr + .2byte \value + .4byte \jumpInstr .endm - .macro jumpifword ifflag:req, val:req, word:req, ptr:req + .macro jumpifword comparison:req, wordPtr:req, value:req, jumpInstr:req .byte 0x2b - .byte \ifflag - .4byte \val - .4byte \word - .4byte \ptr + .byte \comparison + .4byte \wordPtr + .4byte \value + .4byte \jumpInstr .endm - .macro jumpifarrayequal val1:req, val2:req, size:req, ptr:req + .macro jumpifarrayequal array1:req, array2:req, size:req, jumpInstr:req .byte 0x2c - .4byte \val1 - .4byte \val2 + .4byte \array1 + .4byte \array2 .byte \size - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifarraynotequal val1:req, val2:req, size:req, ptr:req + .macro jumpifarraynotequal array1:req, array2:req, size:req, jumpInstr:req .byte 0x2d - .4byte \val1 - .4byte \val2 + .4byte \array1 + .4byte \array2 .byte \size - .4byte \ptr + .4byte \jumpInstr .endm - .macro setbyte ptr:req, byte:req + .macro setbyte bytePtr:req, value:req .byte 0x2e - .4byte \ptr - .byte \byte + .4byte \bytePtr + .byte \value .endm - .macro addbyte ptr:req, byte:req + .macro addbyte bytePtr:req, value:req .byte 0x2f - .4byte \ptr - .byte \byte + .4byte \bytePtr + .byte \value .endm - .macro subbyte ptr:req, byte:req + .macro subbyte bytePtr:req, value:req .byte 0x30 - .4byte \ptr - .byte \byte + .4byte \bytePtr + .byte \value .endm .macro copyarray dest:req, src:req, size:req @@ -288,53 +288,53 @@ .byte \size .endm - .macro copyarraywithindex dest:req, src:req, index:req, size:req + .macro copyarraywithindex dest:req, src:req, indexPtr:req, size:req .byte 0x32 .4byte \dest .4byte \src - .4byte \index + .4byte \indexPtr .byte \size .endm - .macro orbyte ptr:req, byte:req + .macro orbyte bytePtr:req, value:req .byte 0x33 - .4byte \ptr - .byte \byte + .4byte \bytePtr + .byte \value .endm - .macro orhalfword ptr:req, hword:req + .macro orhalfword halfwordPtr:req, value:req .byte 0x34 - .4byte \ptr - .2byte \hword + .4byte \halfwordPtr + .2byte \value .endm - .macro orword ptr:req, word:req + .macro orword wordPtr:req, value:req .byte 0x35 - .4byte \ptr - .4byte \word + .4byte \wordPtr + .4byte \value .endm - .macro bicbyte ptr:req, byte:req + .macro bicbyte bytePtr:req, value:req .byte 0x36 - .4byte \ptr - .byte \byte + .4byte \bytePtr + .byte \value .endm - .macro bichalfword ptr:req, hword:req + .macro bichalfword halfwordPtr:req, value:req .byte 0x37 - .4byte \ptr - .2byte \hword + .4byte \halfwordPtr + .2byte \value .endm - .macro bicword ptr:req, word:req + .macro bicword wordPtr:req, value:req .byte 0x38 - .4byte \ptr - .4byte \word + .4byte \wordPtr + .4byte \value .endm - .macro pause time:req + .macro pause frames:req .byte 0x39 - .2byte \time + .2byte \frames .endm .macro waitstate @@ -362,53 +362,53 @@ .byte 0x3f .endm - .macro jumpifaffectedbyprotect ptr:req + .macro jumpifaffectedbyprotect failInstr:req .byte 0x40 - .4byte \ptr + .4byte \failInstr .endm - .macro call ptr:req + .macro call instr:req .byte 0x41 - .4byte \ptr + .4byte \instr .endm .macro setroost .byte 0x42 .endm - .macro jumpifabilitypresent ability:req, ptr:req + .macro jumpifabilitypresent ability:req, jumpInstr:req .byte 0x43 .2byte \ability - .4byte \ptr + .4byte \jumpInstr .endm .macro endselectionscript .byte 0x44 .endm - .macro playanimation battler:req, animType:req, arg=NULL + .macro playanimation battler:req, animId:req, argPtr=NULL .byte 0x45 .byte \battler - .byte \animType - .4byte \arg + .byte \animId + .4byte \argPtr .endm - .macro playanimation_var battler:req, animType:req, arg=NULL + .macro playanimation_var battler:req, animIdPtr:req, argPtr=NULL .byte 0x46 .byte \battler - .4byte \animType - .4byte \arg + .4byte \animIdPtr + .4byte \argPtr .endm .macro setgraphicalstatchangevalues .byte 0x47 .endm - .macro playstatchangeanimation battler:req, stats:req, statchange:req + .macro playstatchangeanimation battler:req, stats:req, flags:req .byte 0x48 .byte \battler .byte \stats - .byte \statchange + .byte \flags .endm .macro moveend endMode:req, endState:req @@ -449,9 +449,9 @@ moveend 2, \to .endm - .macro sethealblock ptr:req + .macro sethealblock failInstr:req .byte 0x4a - .4byte \ptr + .4byte \failInstr .endm .macro returnatktoball @@ -468,22 +468,22 @@ .byte \battler .endm - .macro switchinanim battler:req, dontclearsubstitutebit:req + .macro switchinanim battler:req, dontClearSubstitute:req .byte 0x4e .byte \battler - .byte \dontclearsubstitutebit + .byte \dontClearSubstitute .endm - .macro jumpifcantswitch battler:req, ptr:req + .macro jumpifcantswitch battler:req, jumpInstr:req .byte 0x4f .byte \battler - .4byte \ptr + .4byte \jumpInstr .endm - .macro openpartyscreen battler:req, ptr:req + .macro openpartyscreen battler:req, failInstr:req .byte 0x50 .byte \battler - .4byte \ptr + .4byte \failInstr .endm .macro switchhandleorder battler:req, state:req @@ -526,21 +526,21 @@ .byte \battler .endm - .macro handlelearnnewmove learnedMovePtr:req, nothingToLearnPtr:req, isFirstMove:req + .macro handlelearnnewmove learnedMoveInstr:req, nothingToLearnInstr:req, isFirstMove:req .byte 0x59 - .4byte \learnedMovePtr - .4byte \nothingToLearnPtr + .4byte \learnedMoveInstr + .4byte \nothingToLearnInstr .byte \isFirstMove .endm - .macro yesnoboxlearnmove forgotMovePtr:req + .macro yesnoboxlearnmove forgotMoveInstr:req .byte 0x5a - .4byte \forgotMovePtr + .4byte \forgotMoveInstr .endm - .macro yesnoboxstoplearningmove noPtr:req + .macro yesnoboxstoplearningmove noInstr:req .byte 0x5b - .4byte \noPtr + .4byte \noInstr .endm .macro hitanimation battler:req @@ -607,9 +607,9 @@ .byte 0x68 .endm - .macro setgravity ptr:req + .macro setgravity failInstr:req .byte 0x69 - .4byte \ptr + .4byte \failInstr .endm .macro removeitem battler:req @@ -647,9 +647,9 @@ .byte 0x71 .endm - .macro jumpifplayerran ptr:req + .macro jumpifplayerran jumpInstr:req .byte 0x72 - .4byte \ptr + .4byte \jumpInstr .endm .macro hpthresholds battler:req @@ -684,14 +684,14 @@ .byte 0x79 .endm - .macro jumpifnexttargetvalid ptr:req + .macro jumpifnexttargetvalid jumpInstr:req .byte 0x7a - .4byte \ptr + .4byte \jumpInstr .endm - .macro tryhealhalfhealth ptr:req, battler:req + .macro tryhealhalfhealth failInstr:req, battler:req .byte 0x7b - .4byte \ptr + .4byte \failInstr .byte \battler .endm @@ -716,24 +716,24 @@ .byte \mode .endm - .macro trysetrest ptr:req + .macro trysetrest failInstr:req .byte 0x81 - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifnotfirstturn ptr:req + .macro jumpifnotfirstturn jumpInstr:req .byte 0x82 - .4byte \ptr + .4byte \jumpInstr .endm - .macro setmiracleeye ptr:req + .macro setmiracleeye failInstr:req .byte 0x83 - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifcantmakeasleep ptr:req + .macro jumpifuproarwakes jumpInstr:req .byte 0x84 - .4byte \ptr + .4byte \jumpInstr .endm .macro stockpile id:req @@ -741,24 +741,24 @@ .byte \id .endm - .macro stockpiletobasedamage ptr:req + .macro stockpiletobasedamage failInstr:req .byte 0x86 - .4byte \ptr + .4byte \failInstr .endm - .macro stockpiletohpheal ptr:req + .macro stockpiletohpheal failInstr:req .byte 0x87 - .4byte \ptr + .4byte \failInstr .endm .macro setdrainedhp .byte 0x88 .endm - .macro statbuffchange flags:req, jumpptr:req + .macro statbuffchange flags:req, failInstr:req .byte 0x89 .2byte \flags - .4byte \jumpptr + .4byte \failInstr .endm .macro normalisebuffs @@ -773,23 +773,23 @@ .byte 0x8c .endm - .macro setmultihitcounter val:req + .macro setmultihitcounter value:req .byte 0x8d - .byte \val + .byte \value .endm .macro initmultihitstring .byte 0x8e .endm - .macro forcerandomswitch ptr:req + .macro forcerandomswitch failInstr:req .byte 0x8f - .4byte \ptr + .4byte \failInstr .endm - .macro tryconversiontypechange ptr:req + .macro tryconversiontypechange failInstr:req .byte 0x90 - .4byte \ptr + .4byte \failInstr .endm .macro givepaydaymoney @@ -800,9 +800,9 @@ .byte 0x92 .endm - .macro tryKO ptr:req + .macro tryKO failInstr:req .byte 0x93 - .4byte \ptr + .4byte \failInstr .endm .macro damagetohalftargethp @@ -817,9 +817,9 @@ .byte 0x96 .endm - .macro tryinfatuating ptr:req + .macro tryinfatuating failInstr:req .byte 0x97 - .4byte \ptr + .4byte \failInstr .endm .macro updatestatusicon battler:req @@ -843,9 +843,9 @@ .byte 0x9c .endm - .macro mimicattackcopy ptr:req + .macro mimicattackcopy failInstr:req .byte 0x9d - .4byte \ptr + .4byte \failInstr .endm .macro metronome @@ -860,48 +860,48 @@ .byte 0xa0 .endm - .macro counterdamagecalculator ptr:req + .macro counterdamagecalculator failInstr:req .byte 0xa1 - .4byte \ptr + .4byte \failInstr .endm - .macro mirrorcoatdamagecalculator ptr:req + .macro mirrorcoatdamagecalculator failInstr:req .byte 0xa2 - .4byte \ptr + .4byte \failInstr .endm - .macro disablelastusedattack ptr:req + .macro disablelastusedattack failInstr:req .byte 0xa3 - .4byte \ptr + .4byte \failInstr .endm - .macro trysetencore ptr:req + .macro trysetencore failInstr:req .byte 0xa4 - .4byte \ptr + .4byte \failInstr .endm - .macro painsplitdmgcalc ptr:req + .macro painsplitdmgcalc failInstr:req .byte 0xa5 - .4byte \ptr + .4byte \failInstr .endm - .macro settypetorandomresistance ptr:req + .macro settypetorandomresistance failInstr:req .byte 0xa6 - .4byte \ptr + .4byte \failInstr .endm .macro setalwayshitflag .byte 0xa7 .endm - .macro copymovepermanently ptr:req + .macro copymovepermanently failInstr:req .byte 0xa8 - .4byte \ptr + .4byte \failInstr .endm - .macro trychoosesleeptalkmove ptr:req + .macro trychoosesleeptalkmove failInstr:req .byte 0xa9 - .4byte \ptr + .4byte \failInstr .endm .macro setdestinybond @@ -912,56 +912,56 @@ .byte 0xab .endm - .macro settailwind ptr:req + .macro settailwind failInstr:req .byte 0xac - .4byte \ptr + .4byte \failInstr .endm - .macro tryspiteppreduce ptr:req + .macro tryspiteppreduce failInstr:req .byte 0xad - .4byte \ptr + .4byte \failInstr .endm .macro healpartystatus .byte 0xae .endm - .macro cursetarget ptr:req + .macro cursetarget failInstr:req .byte 0xaf - .4byte \ptr + .4byte \failInstr .endm - .macro trysetspikes ptr:req + .macro trysetspikes failInstr:req .byte 0xb0 - .4byte \ptr + .4byte \failInstr .endm .macro setforesight .byte 0xb1 .endm - .macro trysetperishsong ptr:req + .macro trysetperishsong failInstr:req .byte 0xb2 - .4byte \ptr + .4byte \failInstr .endm .macro handlerollout .byte 0xb3 .endm - .macro jumpifconfusedandstatmaxed stat:req, ptr:req + .macro jumpifconfusedandstatmaxed stat:req, jumpInstr:req .byte 0xb4 .byte \stat - .4byte \ptr + .4byte \jumpInstr .endm .macro handlefurycutter .byte 0xb5 .endm - .macro setembargo ptr:req + .macro setembargo failInstr:req .byte 0xb6 - .4byte \ptr + .4byte \failInstr .endm .macro presentdamagecalculation @@ -976,23 +976,23 @@ .byte 0xb9 .endm - .macro jumpifnopursuitswitchdmg ptr:req + .macro jumpifnopursuitswitchdmg jumpInstr:req .byte 0xba - .4byte \ptr + .4byte \jumpInstr .endm .macro setsunny .byte 0xbb .endm - .macro maxattackhalvehp ptr:req + .macro maxattackhalvehp failInstr:req .byte 0xbc - .4byte \ptr + .4byte \failInstr .endm - .macro copyfoestats ptr:req + .macro copyfoestats unused:req .byte 0xbd - .4byte \ptr + .4byte \unused .endm .macro rapidspinfree @@ -1003,29 +1003,29 @@ .byte 0xbf .endm - .macro recoverbasedonsunlight ptr:req + .macro recoverbasedonsunlight failInstr:req .byte 0xc0 - .4byte \ptr + .4byte \failInstr .endm - .macro setstickyweb ptr:req + .macro setstickyweb failInstr:req .byte 0xc1 - .4byte \ptr + .4byte \failInstr .endm .macro selectfirstvalidtarget .byte 0xc2 .endm - .macro trysetfutureattack ptr:req + .macro trysetfutureattack failInstr:req .byte 0xc3 - .4byte \ptr + .4byte \failInstr .endm - .macro trydobeatup endPtr:req, failPtr:req + .macro trydobeatup endInstr, failInstr .byte 0xc4 - .4byte \endPtr - .4byte \failPtr + .4byte \endInstr + .4byte \failInstr .endm .macro setsemiinvulnerablebit @@ -1044,9 +1044,9 @@ .byte 0xc8 .endm - .macro trymemento ptr:req + .macro trymemento failInstr:req .byte 0xc9 - .4byte \ptr + .4byte \failInstr .endm .macro setforcedtarget @@ -1061,108 +1061,108 @@ .byte 0xcc .endm - .macro cureifburnedparalysedorpoisoned ptr:req + .macro cureifburnedparalysedorpoisoned failInstr:req .byte 0xcd - .4byte \ptr + .4byte \failInstr .endm - .macro settorment ptr:req + .macro settorment failInstr:req .byte 0xce - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifnodamage ptr:req + .macro jumpifnodamage jumpInstr:req .byte 0xcf - .4byte \ptr + .4byte \jumpInstr .endm - .macro settaunt ptr:req + .macro settaunt failInstr:req .byte 0xd0 - .4byte \ptr + .4byte \failInstr .endm - .macro trysethelpinghand ptr:req + .macro trysethelpinghand failInstr:req .byte 0xd1 - .4byte \ptr + .4byte \failInstr .endm - .macro tryswapitems ptr:req + .macro tryswapitems failInstr:req .byte 0xd2 - .4byte \ptr + .4byte \failInstr .endm - .macro trycopyability ptr:req + .macro trycopyability failInstr:req .byte 0xd3 - .4byte \ptr + .4byte \failInstr .endm - .macro trywish turnNumber:req, ptr:req + .macro trywish turnNumber:req, failInstr:req .byte 0xd4 .byte \turnNumber - .4byte \ptr + .4byte \failInstr .endm - .macro settoxicspikes ptr:req + .macro settoxicspikes failInstr:req .byte 0xd5 - .4byte \ptr + .4byte \failInstr .endm - .macro setgastroacid ptr:req + .macro setgastroacid failInstr:req .byte 0xd6 - .4byte \ptr + .4byte \failInstr .endm - .macro setyawn ptr:req + .macro setyawn failInstr:req .byte 0xd7 - .4byte \ptr + .4byte \failInstr .endm - .macro setdamagetohealthdifference ptr:req + .macro setdamagetohealthdifference failInstr:req .byte 0xd8 - .4byte \ptr + .4byte \failInstr .endm .macro setroom .byte 0xd9 .endm - .macro tryswapabilities ptr:req + .macro tryswapabilities failInstr:req .byte 0xda - .4byte \ptr + .4byte \failInstr .endm - .macro tryimprison ptr:req + .macro tryimprison failInstr:req .byte 0xdb - .4byte \ptr + .4byte \failInstr .endm - .macro setstealthrock ptr:req + .macro setstealthrock failInstr:req .byte 0xdc - .4byte \ptr + .4byte \failInstr .endm - .macro setuserstatus3 flags:req, ptr:req + .macro setuserstatus3 flags:req, failInstr:req .byte 0xdd .4byte \flags - .4byte \ptr + .4byte \failInstr .endm - .macro assistattackselect ptr:req + .macro assistattackselect failInstr:req .byte 0xde - .4byte \ptr + .4byte \failInstr .endm - .macro trysetmagiccoat ptr:req + .macro trysetmagiccoat failInstr:req .byte 0xdf - .4byte \ptr + .4byte \failInstr .endm - .macro trysetsnatch ptr:req + .macro trysetsnatch failInstr:req .byte 0xe0 - .4byte \ptr + .4byte \failInstr .endm - .macro trygetintimidatetarget ptr:req + .macro unused2 ptr:req .byte 0xe1 .4byte \ptr .endm @@ -1172,10 +1172,10 @@ .byte \battler .endm - .macro jumpifhasnohp battler:req, ptr:req + .macro jumpifhasnohp battler:req, jumpInstr:req .byte 0xe3 .byte \battler - .4byte \ptr + .4byte \jumpInstr .endm .macro getsecretpowereffect @@ -1194,29 +1194,29 @@ .byte 0xe7 .endm - .macro settypebasedhalvers ptr:req + .macro settypebasedhalvers failInstr:req .byte 0xe8 - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifsubstituteblocks ptr:req + .macro jumpifsubstituteblocks jumpInstr:req .byte 0xe9 - .4byte \ptr + .4byte \jumpInstr .endm - .macro tryrecycleitem ptr:req + .macro tryrecycleitem failInstr:req .byte 0xea - .4byte \ptr + .4byte \failInstr .endm - .macro settypetoterrain ptr:req + .macro settypetoterrain failInstr:req .byte 0xeb - .4byte \ptr + .4byte \failInstr .endm - .macro pursuitdoubles ptr:req + .macro pursuitdoubles failInstr:req .byte 0xec - .4byte \ptr + .4byte \failInstr .endm .macro snatchsetbattlers @@ -1235,18 +1235,18 @@ .byte 0xf0 .endm - .macro trysetcaughtmondexflags ptr:req + .macro trysetcaughtmondexflags failInstr:req .byte 0xf1 - .4byte \ptr + .4byte \failInstr .endm .macro displaydexinfo .byte 0xf2 .endm - .macro trygivecaughtmonnick ptr:req + .macro trygivecaughtmonnick successInstr:req .byte 0xf3 - .4byte \ptr + .4byte \successInstr .endm .macro subattackerhpbydmg @@ -1270,9 +1270,9 @@ .byte \position .endm - .macro settelekinesis ptr:req + .macro settelekinesis failInstr:req .byte 0xf9 - .4byte \ptr + .4byte \failInstr .endm .macro swapstatstages stat:req @@ -1285,9 +1285,9 @@ .byte \stat .endm - .macro jumpifoppositegenders ptr:req + .macro jumpifoppositegenders jumpInstr:req .byte 0xfc - .4byte \ptr + .4byte \jumpInstr .endm .macro unused ptr:req @@ -1295,14 +1295,27 @@ .4byte \ptr .endm - .macro tryworryseed ptr:req + .macro tryworryseed failInstr:req .byte 0xfe - .4byte \ptr + .4byte \failInstr .endm - - .macro metalburstdamagecalculator ptr:req + + .macro callnative func:req .byte 0xff - .4byte \ptr + .4byte \func + .endm + +@ callnative macros + .macro metalburstdamagecalculator failInstr:req + callnative BS_CalcMetalBurstDmg + .4byte \failInstr + .endm + + .macro jumpifholdeffect battler:req, holdEffect:req, jumpInstr:req + callnative BS_JumpIfHoldEffect + .byte \battler + .2byte \holdEffect + .4byte \jumpInstr .endm @ various command changed to more readable macros @@ -1326,8 +1339,8 @@ various \battler, VARIOUS_GET_BATTLER_FAINTED .endm - .macro resetintimidatetracebits battler:req - various \battler, VARIOUS_RESET_INTIMIDATE_TRACE_BITS + .macro resetswitchinabilitybits battler:req + various \battler, VARIOUS_RESET_SWITCH_IN_ABILITY_BITS .endm .macro updatechoicemoveonlvlup battler:req @@ -1467,82 +1480,82 @@ .2byte \move .endm - .macro setluckychant battler:req, ptr:req + .macro setluckychant battler:req, failInstr:req various \battler VARIOUS_SET_LUCKY_CHANT - .4byte \ptr + .4byte \failInstr .endm - .macro suckerpunchcheck ptr:req + .macro suckerpunchcheck failInstr:req various BS_ATTACKER, VARIOUS_SUCKER_PUNCH_CHECK - .4byte \ptr + .4byte \failInstr .endm - .macro setabilitysimple battler:req, ptr:req + .macro setabilitysimple battler:req, failInstr:req various \battler VARIOUS_SET_SIMPLE_BEAM - .4byte \ptr + .4byte \failInstr .endm - .macro tryentrainment ptr:req + .macro tryentrainment failInstr:req various BS_ATTACKER, VARIOUS_TRY_ENTRAINMENT - .4byte \ptr + .4byte \failInstr .endm .macro setlastusedability battler:req various \battler, VARIOUS_SET_LAST_USED_ABILITY .endm - .macro tryhealpulse battler:req, ptr:req + .macro tryhealpulse battler:req, failInstr:req various \battler, VARIOUS_TRY_HEAL_PULSE - .4byte \ptr + .4byte \failInstr .endm - .macro tryquash ptr:req + .macro tryquash failInstr:req various BS_ATTACKER, VARIOUS_TRY_QUASH - .4byte \ptr + .4byte \failInstr .endm - .macro tryafteryou ptr:req + .macro tryafteryou failInstr:req various BS_ATTACKER, VARIOUS_AFTER_YOU - .4byte \ptr + .4byte \failInstr .endm - .macro trybestow ptr:req + .macro trybestow failInstr:req various BS_ATTACKER, VARIOUS_BESTOW - .4byte \ptr + .4byte \failInstr .endm .macro invertstatstages battler:req various \battler, VARIOUS_INVERT_STAT_STAGES .endm - .macro setterrain ptr:req + .macro setterrain failInstr:req various BS_ATTACKER, VARIOUS_SET_TERRAIN - .4byte \ptr + .4byte \failInstr .endm - .macro trymefirst ptr:req + .macro trymefirst failInstr:req various BS_ATTACKER, VARIOUS_TRY_ME_FIRST - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifbattleend ptr:req + .macro jumpifbattleend jumpInstr:req various BS_ATTACKER, VARIOUS_JUMP_IF_BATTLE_END - .4byte \ptr + .4byte \jumpInstr .endm - .macro tryelectrify ptr:req + .macro tryelectrify failInstr:req various BS_ATTACKER, VARIOUS_TRY_ELECTRIFY - .4byte \ptr + .4byte \failInstr .endm - .macro tryreflecttype ptr:req + .macro tryreflecttype failInstr:req various BS_ATTACKER, VARIOUS_TRY_REFLECT_TYPE - .4byte \ptr + .4byte \failInstr .endm - .macro trysoak ptr:req + .macro trysoak failInstr:req various BS_ATTACKER, VARIOUS_TRY_SOAK - .4byte \ptr + .4byte \failInstr .endm .macro handlemegaevo battler:req, case:req @@ -1560,33 +1573,33 @@ .byte \case .endm - .macro jumpifcantuselastresort battler:req, ptr:req + .macro jumpifcantuselastresort battler:req, jumpInstr:req various \battler, VARIOUS_TRY_LAST_RESORT - .4byte \ptr + .4byte \jumpInstr .endm .macro argumentstatuseffect various BS_ATTACKER, VARIOUS_ARGUMENT_STATUS_EFFECT .endm - .macro tryhitswitchtarget ptr:req + .macro tryhitswitchtarget failInstr:req various BS_ATTACKER, VARIOUS_TRY_HIT_SWITCH_TARGET - .4byte \ptr + .4byte \failInstr .endm - .macro tryautotomize battler:req, ptr:req + .macro tryautotomize battler:req, failInstr:req various \battler, VARIOUS_TRY_AUTOTOMIZE - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifcantusesynchronoise ptr:req + .macro jumpifcantusesynchronoise jumpInstr:req various BS_ATTACKER, VARIOUS_TRY_SYNCHRONOISE - .4byte \ptr + .4byte \jumpInstr .endm - .macro trycopycat ptr:req + .macro trycopycat failInstr:req various BS_ATTACKER, VARIOUS_TRY_COPYCAT - .4byte \ptr + .4byte \failInstr .endm .macro showabilitypopup battler:req @@ -1597,20 +1610,20 @@ various \battler, VARIOUS_UPDATE_ABILITY_POPUP .endm - .macro defogclear battler:req, clear:req, ptr:req + .macro defogclear battler:req, clear:req, failInstr:req various \battler, VARIOUS_DEFOG .byte \clear - .4byte \ptr + .4byte \failInstr .endm - .macro jumpiftargetally ptr:req + .macro jumpiftargetally jumpInstr:req various BS_ATTACKER, VARIOUS_JUMP_IF_TARGET_ALLY - .4byte \ptr + .4byte \jumpInstr .endm - .macro trypsychoshift ptr:req + .macro trypsychoshift failInstr:req various BS_ATTACKER, VARIOUS_PSYCHO_SHIFT - .4byte \ptr + .4byte \failInstr .endm .macro curestatus battler:req @@ -1625,14 +1638,14 @@ various BS_ATTACKER, VARIOUS_ARGUMENT_TO_MOVE_EFFECT .endm - .macro jumpifnotgrounded battler:req, ptr:req + .macro jumpifnotgrounded battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_NOT_GROUNDED - .4byte \ptr + .4byte \jumpInstr .endm - .macro handletrainerslidemsg battler:req, field:req + .macro handletrainerslidemsg battler:req, case:req various \battler, VARIOUS_HANDLE_TRAINER_SLIDE_MSG - .byte \field + .byte \case .endm .macro trytrainerslidefirstdownmsg battler:req @@ -1647,14 +1660,14 @@ various \battler, VARIOUS_SET_AURORA_VEIL .endm - .macro trysetthirdtype battler:req, ptr:req + .macro trysetthirdtype battler:req, failInstr:req various \battler, VARIOUS_TRY_THIRD_TYPE - .4byte \ptr + .4byte \failInstr .endm - .macro tryaccupressure battler:req, ptr:req + .macro tryaccupressure battler:req, failInstr:req various \battler, VARIOUS_ACUPRESSURE - .4byte \ptr + .4byte \failInstr .endm .macro setpowder battler:req @@ -1669,24 +1682,24 @@ various \battler, VARIOUS_GRAVITY_ON_AIRBORNE_MONS .endm - .macro checkgrassyterrainheal battler:req, ptr:req + .macro checkgrassyterrainheal battler:req, failInstr:req various \battler, VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifnotberry battler:req, ptr:req + .macro jumpifnotberry battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_NOT_BERRY - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifroarfails ptr:req + .macro jumpifroarfails jumpInstr:req various BS_ATTACKER, VARIOUS_JUMP_IF_ROAR_FAILS - .4byte \ptr + .4byte \jumpInstr .endm - .macro tryinstruct ptr:req + .macro tryinstruct failInstr:req various BS_ATTACKER, VARIOUS_TRY_INSTRUCT - .4byte \ptr + .4byte \failInstr .endm .macro settracedability battler:req @@ -1701,19 +1714,19 @@ various \battler, VARIOUS_TRY_ILLUSION_OFF .endm - .macro spriteignore0hp val:req + .macro spriteignore0hp value:req various BS_ATTACKER, VARIOUS_SET_SPRITEIGNORE0HP - .byte \val + .byte \value .endm - .macro getstatvalue battler:req, statId:req + .macro getstatvalue battler:req, stat:req various \battler, VARIOUS_GET_STAT_VALUE - .byte \statId + .byte \stat .endm - .macro jumpiffullhp battler:req, ptr:req + .macro jumpiffullhp battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_FULL_HP - .4byte \ptr + .4byte \jumpInstr .endm .macro losetype battler:req, type:req @@ -1725,60 +1738,60 @@ various \battler, VARIOUS_TRY_FRISK .endm - .macro jumpifshieldsdown battler:req, ptr:req + .macro jumpifshieldsdown battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED - .4byte \ptr + .4byte \jumpInstr .endm - .macro trypoisontype attacker:req, target:req, ptr:req + .macro trypoisontype attacker:req, target:req, failInstr:req various \attacker, VARIOUS_POISON_TYPE_IMMUNITY .byte \target - .4byte \ptr + .4byte \failInstr .endm - .macro tryparalyzetype attacker:req, target:req, ptr:req + .macro tryparalyzetype attacker:req, target:req, failInstr:req various \attacker, VARIOUS_PARALYZE_TYPE_IMMUNITY .byte \target - .4byte \ptr + .4byte \failInstr .endm - .macro trysetfairylock ptr:req + .macro trysetfairylock failInstr:req various BS_ATTACKER, VARIOUS_TRY_FAIRY_LOCK - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifnoally battler:req, ptr:req + .macro jumpifnoally battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_NO_ALLY - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifnoholdeffect battler:req, holdEffet:req, ptr:req + .macro jumpifnoholdeffect battler:req, holdEffect:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_NO_HOLD_EFFECT - .byte \holdEffet - .4byte \ptr + .byte \holdEffect + .4byte \jumpInstr .endm - .macro infatuatewithbattler battler1:req, battler2:req - various \battler1, VARIOUS_INFATUATE_WITH_BATTLER - .byte \battler2 + .macro infatuatewithbattler battler:req, infatuateWith:req + various \battler, VARIOUS_INFATUATE_WITH_BATTLER + .byte \infatuateWith .endm .macro setlastuseditem battler:req various \battler, VARIOUS_SET_LAST_USED_ITEM .endm - .macro jumpifabsent battler:req, ptr:req + .macro jumpifabsent battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_ABSENT - .4byte \ptr + .4byte \jumpInstr .endm .macro destroyabilitypopup various BS_ABILITY_BATTLER, VARIOUS_DESTROY_ABILITY_POPUP .endm - .macro gettotemboost ptr:req + .macro gettotemboost jumpInstr:req various BS_ATTACKER, VARIOUS_TOTEM_BOOST - .4byte \ptr + .4byte \jumpInstr .endm .macro tryactivategrimneigh, battler:req @@ -1789,9 +1802,9 @@ various BS_ATTACKER, VARIOUS_SET_Z_EFFECT .endm - .macro consumeberry battler:req, frombattler:req + .macro consumeberry battler:req, fromBattler:req various \battler, VARIOUS_CONSUME_BERRY - .byte \frombattler + .byte \fromBattler .endm .macro activateitemeffects battler:req @@ -1802,44 +1815,44 @@ various 0, VARIOUS_PICKPOCKET .endm - .macro doterrainseed battler:req, ptr:req + .macro doterrainseed battler:req, failInstr:req various \battler, VARIOUS_TERRAIN_SEED - .4byte \ptr + .4byte \failInstr .endm .macro makeinvisible battler:req various \battler, VARIOUS_MAKE_INVISIBLE .endm - .macro tryroomservice battler:req, ptr:req + .macro tryroomservice battler:req, failInstr:req various \battler, VARIOUS_ROOM_SERVICE - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifterrainaffected battler:req, terrainFlags:req, ptr:req + .macro jumpifterrainaffected battler:req, terrainFlags:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_TERRAIN_AFFECTED .4byte \terrainFlags - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifpranksterblocked battler:req, ptr:req + .macro jumpifpranksterblocked battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_PRANKSTER_BLOCKED - .4byte \ptr + .4byte \jumpInstr .endm - .macro eeriespellppreduce ptr:req + .macro eeriespellppreduce failInstr:req various BS_TARGET, VARIOUS_EERIE_SPELL_PP_REDUCE - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifteamhealthy battler:req, ptr:req + .macro jumpifteamhealthy battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_TEAM_HEALTHY - .4byte \ptr + .4byte \jumpInstr .endm - .macro tryhealquarterhealth battler:req, ptr:req + .macro tryhealquarterhealth battler:req, failInstr:req various \battler, VARIOUS_TRY_HEAL_QUARTER_HP - .4byte \ptr + .4byte \failInstr .endm .macro removeterrain @@ -1854,78 +1867,73 @@ various BS_TARGET, VARIOUS_SET_ATTACKER_STICKY_WEB_USER .endm - .macro getrototillertargets ptr:req + .macro getrototillertargets failInstr:req various BS_ATTACKER, VARIOUS_GET_ROTOTILLER_TARGETS - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifnotrototilleraffected battler:req, ptr:req + .macro jumpifnotrototilleraffected battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED - .4byte \ptr + .4byte \jumpInstr .endm .macro tryactivatebattlebond battler:req various \battler, VARIOUS_TRY_ACTIVATE_BATTLE_BOND .endm - .macro jumpifcantreverttoprimal ptr:req + .macro jumpifcantreverttoprimal jumpInstr:req various BS_ATTACKER, VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL - .4byte \ptr + .4byte \jumpInstr .endm .macro applyplasmafists various BS_ATTACKER, VARIOUS_APPLY_PLASMA_FISTS .endm - .macro jumpifweatheraffected battler:req, weather:req, ptr:req + .macro jumpifweatheraffected battler:req, flags:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_WEATHER_AFFECTED - .4byte \weather - .4byte \ptr + .4byte \flags + .4byte \jumpInstr .endm - .macro jumpifspecies battler:req, species:req, ptr:req + .macro jumpifspecies battler:req, species:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_SPECIES .2byte \species - .4byte \ptr + .4byte \jumpInstr .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 + .macro trynoretreat battler:req, failInstr:req various \battler, VARIOUS_TRY_NO_RETREAT - .4byte \ptr + .4byte \failInstr .endm - .macro trytarshot battler:req, ptr:req + .macro trytarshot battler:req, failInstr:req various \battler, VARIOUS_TRY_TAR_SHOT - .4byte \ptr + .4byte \failInstr .endm - .macro cantarshotwork battler:req, ptr:req + .macro cantarshotwork battler:req, failInstr:req various \battler, VARIOUS_CAN_TAR_SHOT_WORK - .4byte \ptr + .4byte \failInstr .endm - .macro checkpoltergeist battler:req, ptr:req + .macro checkpoltergeist battler:req, failInstr:req various \battler, VARIOUS_CHECK_POLTERGEIST - .4byte \ptr + .4byte \failInstr .endm - .macro setoctolock battler:req, ptr:req + .macro setoctolock battler:req, failInstr:req various \battler, VARIOUS_SET_OCTOLOCK - .4byte \ptr + .4byte \failInstr .endm - .macro cutonethirdhpraisestats ptr:req + .macro cutonethirdhpraisestats failInstr:req various BS_ATTACKER, VARIOUS_CUT_1_3_HP_RAISE_STATS - .4byte \ptr + .4byte \failInstr .endm .macro photongeysercheck battler:req @@ -1935,10 +1943,35 @@ .macro shellsidearmcheck various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK .endm + + .macro jumpifrodaffected battler:req, jumpInstr:req + various \battler, VARIOUS_JUMP_IF_ROD + .4byte \jumpInstr + .endm - .macro jumpifcantfling battler:req, ptr:req + .macro jumpifabsorbaffected battler:req, jumpInstr:req + various \battler, VARIOUS_JUMP_IF_ABSORB + .4byte \jumpInstr + .endm + + .macro jumpifmotoraffected battler:req, jumpInstr:req + various \battler, VARIOUS_JUMP_IF_MOTOR + .4byte \jumpInstr + .endm + + .macro jumpifteanoberry jumpInstr:req + various BS_ATTACKER, VARIOUS_TEATIME_TARGETS + .4byte \jumpInstr + .endm + + .macro jumpifteainvulnerable battler:req, jumpInstr:req + various \battler, VARIOUS_TEATIME_INVUL + .4byte \jumpInstr + .endm + + .macro jumpifcantfling battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_CANT_FLING - .4byte \ptr + .4byte \jumpInstr .endm .macro curecertainstatuses battler:req @@ -1949,15 +1982,15 @@ various \battler, VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES .endm - .macro jumpiflastuseditemberry ptr:req + .macro jumpiflastuseditemberry jumpInstr:req various BS_ATTACKER, VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpiflastuseditemholdeffect battler:req, holdEffect:req, ptr:req + .macro jumpiflastuseditemholdeffect battler:req, holdEffect:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT .byte \holdEffect - .4byte \ptr + .4byte \jumpInstr .endm .macro savebattleritem battler:req @@ -1988,10 +2021,32 @@ various \battler, VARIOUS_GET_BATTLER_SIDE .endm - .macro checkparentalbondcounter counter:req, ptr:req + .macro checkparentalbondcounter counter:req, jumpInstr:req various BS_ATTACKER, VARIOUS_CHECK_PARENTAL_BOND_COUNTER .byte \counter - .4byte \ptr + .4byte \jumpInstr + .endm + .macro swapstats stat:req + various BS_ATTACKER, VARIOUS_SWAP_STATS + .byte \stat + .endm + + .macro trywindriderpower battler:req, failInstr:req + various \battler, VARIOUS_TRY_WIND_RIDER_POWER + .4byte \failInstr + .endm + + .macro activateweatherchangeabilities battler:req + various \battler, VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES + .endm + + .macro activateterrainchangeabilities battler:req + various \battler, VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES + .endm + + .macro jumpifnovalidtargets jumpInstr:req + various BS_ATTACKER, VARIOUS_JUMP_IF_NO_VALID_TARGETS + .4byte \jumpInstr .endm @ helpful macros @@ -2036,44 +2091,44 @@ copyarray \dst, \src, 0x4 .endm - .macro jumpifbytenotequal byte1:req, byte2:req, jumpptr:req - jumpifarraynotequal \byte1, \byte2, 0x1, \jumpptr + .macro jumpifbytenotequal byte1:req, byte2:req, jumpInstr:req + jumpifarraynotequal \byte1, \byte2, 0x1, \jumpInstr .endm - .macro jumpifbyteequal byte1:req, byte2:req, jumpptr:req - jumpifarrayequal \byte1, \byte2, 0x1, \jumpptr + .macro jumpifbyteequal byte1:req, byte2:req, jumpInstr:req + jumpifarrayequal \byte1, \byte2, 0x1, \jumpInstr .endm - .macro jumpifmove move:req, jumpptr:req - jumpifhalfword CMP_EQUAL, gCurrentMove, \move, \jumpptr + .macro jumpifmove move:req, jumpInstr:req + jumpifhalfword CMP_EQUAL, gCurrentMove, \move, \jumpInstr .endm - .macro jumpifnotmove move:req, jumpptr:req - jumpifhalfword CMP_NOT_EQUAL, gCurrentMove, \move, \jumpptr + .macro jumpifnotmove move:req, jumpInstr:req + jumpifhalfword CMP_NOT_EQUAL, gCurrentMove, \move, \jumpInstr .endm - .macro jumpifnotchosenmove move:req, jumpptr:req - jumpifhalfword CMP_NOT_EQUAL, gChosenMove, \move, \jumpptr + .macro jumpifnotchosenmove move:req, jumpInstr:req + jumpifhalfword CMP_NOT_EQUAL, gChosenMove, \move, \jumpInstr .endm - .macro jumpifstatus3 battler:req, status:req, jumpptr:req - jumpifstatus3condition \battler, \status, FALSE, \jumpptr + .macro jumpifstatus3 battler:req, flags:req, jumpInstr:req + jumpifstatus3condition \battler, \flags, FALSE, \jumpInstr .endm - .macro jumpifnostatus3 battler:req, status:req, jumpptr:req - jumpifstatus3condition \battler, \status, TRUE, \jumpptr + .macro jumpifnostatus3 battler:req, flags:req, jumpInstr:req + jumpifstatus3condition \battler, \flags, TRUE, \jumpInstr .endm - .macro jumpifmovehadnoeffect jumpptr:req - jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpptr + .macro jumpifmovehadnoeffect jumpInstr:req + jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpInstr .endm - .macro jumpifbattletype flags:req, jumpptr:req - jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr + .macro jumpifbattletype flags:req, jumpInstr:req + jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpInstr .endm - .macro jumpifnotbattletype flags:req, jumpptr:req - jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr + .macro jumpifnotbattletype flags:req, jumpInstr:req + jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpInstr .endm .macro dmg_1_8_targethp @@ -2092,42 +2147,42 @@ manipulatedamage DMG_1_2_ATTACKER_HP .endm - .macro jumpifflowerveil jumpptr:req + .macro jumpifflowerveil jumpInstr:req jumpifnottype BS_TARGET, TYPE_GRASS, 1f - jumpifability BS_TARGET_SIDE, ABILITY_FLOWER_VEIL, \jumpptr + jumpifability BS_TARGET_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr 1: .endm - .macro jumpifflowerveilattacker jumpptr:req + .macro jumpifflowerveilattacker jumpInstr:req jumpifnottype BS_ATTACKER, TYPE_GRASS, 1f - jumpifability BS_ATTACKER_SIDE, ABILITY_FLOWER_VEIL, \jumpptr + jumpifability BS_ATTACKER_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr 1: .endm - .macro setallytonexttarget jumpptr:req + .macro setallytonexttarget jumpInstr:req jumpifbyte CMP_GREATER_THAN, gBattlerTarget, 0x1, 1f addbyte gBattlerTarget, 0x2 - goto \jumpptr + goto \jumpInstr 1: subbyte gBattlerTarget, 0x2 - goto \jumpptr + goto \jumpInstr .endm - .macro jumpifleafguardprotected battler:req, jumpptr:req + .macro jumpifleafguardprotected battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED - .4byte \jumpptr + .4byte \jumpInstr .endm - .macro jumpifsafeguard jumpptr:req + .macro jumpifsafeguard jumpInstr:req jumpifability BS_ATTACKER, ABILITY_INFILTRATOR, 1f - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, \jumpptr + jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, \jumpInstr 1: .endm @ Will jump to script pointer if the target weighs less than 200 kg, or 441 lbs. - .macro jumpifunder200 battler:req, ptr:req + .macro jumpifunder200 battler:req, failInstr:req various \battler, VARIOUS_JUMP_IF_UNDER_200 - .4byte \ptr + .4byte \failInstr .endm @ Sets the sky drop status and does all other necessary operations @@ -2137,9 +2192,9 @@ @ 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 + .macro clearskydrop failInstr:req various 0, VARIOUS_CLEAR_SKY_DROP - .4byte \ptr + .4byte \failInstr .endm @ Accounts for if the target of Sky Drop was in confuse_lock when the attacker falls asleep due to Yawn. @@ -2151,3 +2206,39 @@ .macro trysymbiosis various BS_ATTACKER, VARIOUS_TRY_SYMBIOSIS .endm + + @ Tries to increase or decrease a battler's stat's stat stage by a specified amount. If impossible, jumps to \script. + .macro modifybattlerstatstage battler:req, stat:req, mode:req, amount:req, script:req, animation:req, customString + + @ \mode parameters + INCREASE = FALSE + DECREASE = TRUE + + @ \animation parameters + ANIM_OFF = FALSE + ANIM_ON = TRUE + + setstatchanger \stat, \amount, \mode + statbuffchange STAT_CHANGE_ALLOW_PTR, \script + setgraphicalstatchangevalues + .if \animation == TRUE + playanimation \battler, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + .endif + .ifnb \customString + printstring \customString + .else + .if \mode == DECREASE + printfromtable gStatDownStringIds + .else + .if \mode == INCREASE + printfromtable gStatUpStringIds + .endif + .endif + .endif + waitmessage B_WAIT_TIME_LONG + .endm + + .macro jumpifemergencyexited battler:req, jumpInstr:req + various \battler, VARIOUS_JUMP_IF_EMERGENCY_EXITED + .4byte \jumpInstr + .endm diff --git a/charmap.txt b/charmap.txt index 2cb67a86136e..99aca4c1849d 100644 --- a/charmap.txt +++ b/charmap.txt @@ -426,13 +426,13 @@ SHADOW = FC 03 @ same as fc 01 COLOR_HIGHLIGHT_SHADOW = FC 04 @ takes 3 bytes PALETTE = FC 05 @ used in credits FONT = FC 06 @ Given a font id, or use font constants below instead -RESET_SIZE = FC 07 +RESET_FONT = 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 +SHIFT_RIGHT = FC 0D SHIFT_DOWN = FC 0E FILL_WINDOW = FC 0F PLAY_SE = FC 10 diff --git a/common_syms/main.txt b/common_syms/main.txt index a620083d19de..f1f8076adf9d 100644 --- a/common_syms/main.txt +++ b/common_syms/main.txt @@ -7,3 +7,4 @@ gIntrTable gLinkVSyncDisabled IntrMain_Buffer gPcmDmaCounter +gAgbMainLoop_sp diff --git a/common_syms/window.txt b/common_syms/window.txt index 416d9d732531..24c093a22612 100644 --- a/common_syms/window.txt +++ b/common_syms/window.txt @@ -1,5 +1,2 @@ -gUnusedWindowVar1 -gUnusedWindowVar2 gTransparentTileNumber -gUnusedWindowVar3 gWindowBgTilemapBuffers diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index ff407c0c462b..71bd93d70a11 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -1,4 +1,5 @@ #include "config.h" +#include "config/battle.h" #include "constants/battle.h" #include "constants/battle_anim.h" #include "constants/rgb.h" @@ -7,7 +8,6 @@ #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" @@ -805,6 +805,55 @@ gBattleAnims_Moves:: .4byte Move_SANDSEAR_STORM .4byte Move_LUNAR_BLESSING .4byte Move_TAKE_HEART +@@@@@@@@@@@@ GEN 9 @@@@@@@@@@@@ + .4byte Move_TERA_BLAST + .4byte Move_SILK_TRAP + .4byte Move_AXE_KICK + .4byte Move_LAST_RESPECTS + .4byte Move_LUMINA_CRASH + .4byte Move_ORDER_UP + .4byte Move_JET_PUNCH + .4byte Move_SPICY_EXTRACT + .4byte Move_SPIN_OUT + .4byte Move_POPULATION_BOMB + .4byte Move_ICE_SPINNER + .4byte Move_GLAIVE_RUSH + .4byte Move_REVIVAL_BLESSING + .4byte Move_SALT_CURE + .4byte Move_TRIPLE_DIVE + .4byte Move_MORTAL_SPIN + .4byte Move_DOODLE + .4byte Move_FILLET_AWAY + .4byte Move_KOWTOW_CLEAVE + .4byte Move_FLOWER_TRICK + .4byte Move_TORCH_SONG + .4byte Move_AQUA_STEP + .4byte Move_RAGING_BULL + .4byte Move_MAKE_IT_RAIN + .4byte Move_RUINATION + .4byte Move_COLLISION_COURSE + .4byte Move_ELECTRO_DRIFT + .4byte Move_SHED_TAIL + .4byte Move_CHILLY_RECEPTION + .4byte Move_TIDY_UP + .4byte Move_SNOWSCAPE + .4byte Move_POUNCE + .4byte Move_TRAILBLAZE + .4byte Move_CHILLING_WATER + .4byte Move_HYPER_DRILL + .4byte Move_TWIN_BEAM + .4byte Move_RAGE_FIST + .4byte Move_ARMOR_CANNON + .4byte Move_BITTER_BLADE + .4byte Move_DOUBLE_SHOCK + .4byte Move_GIGATON_HAMMER + .4byte Move_COMEUPPANCE + .4byte Move_AQUA_CUTTER + .4byte Move_BLAZING_TORQUE + .4byte Move_WICKED_TORQUE + .4byte Move_NOXIOUS_TORQUE + .4byte Move_COMBAT_TORQUE + .4byte Move_MAGICAL_TORQUE @@@@ Z MOVES .4byte Move_BREAKNECK_BLITZ .4byte Move_ALL_OUT_PUMMELING @@ -1020,7 +1069,7 @@ Move_HAMMER_ARM: Move_GYRO_BALL: loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK waitforvisualfinish playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 @@ -1196,7 +1245,7 @@ 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_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, FALSE createvisualtask AnimTask_DefenseCurlDeformMon, 5 waitforvisualfinish setarg 7, -1 @@ -1211,7 +1260,7 @@ Move_METAL_BURST: createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 20, 192 createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224 waitforvisualfinish - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 1 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, TRUE waitforvisualfinish end @@ -1443,22 +1492,22 @@ 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 + createspriteontargets_onpos gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 2, 0, -5, ANIM_TARGET, 0 delay 7 - createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, -15, 10, 1, 0 + createspriteontargets_onpos gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 2, -15, 10, ANIM_TARGET, 0 delay 7 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1 | 4, 4, 2, 12, 0, RGB_BLACK - createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 0, -5, 1, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_SIDE, 4, 2, 12, 0, RGB_BLACK + createspriteontargets_onpos gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 2, 0, -5, ANIM_TARGET, 0 delay 7 - createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, -15, 10, 1, 0 + createspriteontargets_onpos gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 2, -15, 10, ANIM_TARGET, 0 delay 7 - createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, -15, -15, 1, 0 + createspriteontargets_onpos gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 2, -15, -15, ANIM_TARGET, 0 delay 7 - createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 10, -5, 1, 0 + createspriteontargets_onpos gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 2, 10, -5, ANIM_TARGET, 0 delay 7 waitforvisualfinish delay 11 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1 | 4, 4, 2, 0, 12, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_SIDE, 4, 2, 0, 12, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET end @@ -2595,7 +2644,6 @@ GigaImpactContinuity: 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 @@ -2987,24 +3035,24 @@ Move_MUD_BOMB: end Move_PSYCHO_CUT: - loadspritegfx ANIM_TAG_SPIRAL - loadspritegfx ANIM_TAG_PSYCHO_CUT + loadspritegfx ANIM_TAG_SPIRAL + loadspritegfx ANIM_TAG_PSYCHO_CUT loadspritegfx ANIM_TAG_CROSS_IMPACT - monbg ANIM_ATK_PARTNER + monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CROSS_IMPACT, 0, 9, 9, RGB_PURPLE createvisualtask AnimTask_SwayMon, 5, 0, 6, 2048, 2, ANIM_ATTACKER 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, + clearmonbg ANIM_ATK_PARTNER + waitforvisualfinish + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, createsprite gPsychoCutSpriteTemplate, ANIM_TARGET, 2, 20, 0, -8, 0, 20 - waitforvisualfinish + waitforvisualfinish createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1 createsprite gCrossImpactSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 20 createvisualtask AnimTask_BlendBattleAnimPal, 1, 1, 2, 4, 0, RGB_BLACK @@ -3048,7 +3096,7 @@ Move_ZEN_HEADBUTT: Move_MIRROR_SHOT: loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 1, 0, 0 + createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK waitforvisualfinish loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT @@ -3112,7 +3160,7 @@ Move_FLASH_CANNON: 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 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 15, 1 waitforvisualfinish clearmonbg ANIM_TARGET end @@ -3583,7 +3631,7 @@ 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 + createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK waitforvisualfinish createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -3597,7 +3645,7 @@ Move_IRON_HEAD: 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 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, TRUE waitforvisualfinish end @@ -4284,12 +4332,12 @@ Move_SPACIAL_REND: 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 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 0, 10, 0xff40, 0xf0, 0x28 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 0, 10, SOUND_PAN_ATTACKER, 0xff60, 0x28 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 0, 10, 0xff40, 0xff90, 0x28 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 0, 10, 0xa0, 0x30, 0x28 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 0, 10, 0xff20, 0xffe0, 0x28 + createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 0, 10, 0x70, 0xff80, 0x28 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 waitforvisualfinish restorebg @@ -4572,18 +4620,18 @@ 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_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, FALSE + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, FALSE + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATK_PARTNER, FALSE + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_DEF_PARTNER, FALSE 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 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, TRUE + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, TRUE + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATK_PARTNER, TRUE + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_DEF_PARTNER, TRUE waitforvisualfinish clearmonbg ANIM_ATTACKER invisible 0 @@ -4599,7 +4647,7 @@ ShadowForceAttack: playsewithpan SOUND_PAN_ATTACKER, 192 createvisualtask AnimTask_NightShadeClone, 5, 85 delay 70 - createvisualtask AnimTask_ShakeMon2 2, 1, 2, 0, 12, 1 + createvisualtask AnimTask_ShakeMon2 2, ANIM_TARGET, 2, 0, 12, 1 createvisualtask AnimTask_BlendColorCycle 2, 4, 0, 2, 0, 13, 0 waitforvisualfinish clearmonbg ANIM_ATTACKER @@ -4961,7 +5009,7 @@ 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 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK waitforvisualfinish monbg ANIM_TARGET setalpha 12, 8 @@ -5046,7 +5094,7 @@ Move_ELECTRO_BALL: 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 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 8, 1 call ElectricityEffect waitforvisualfinish clearmonbg ANIM_TARGET @@ -5069,7 +5117,7 @@ Move_SOAK: playsewithpan SE_M_BUBBLE, 192 delay 30 playsewithpan SE_M_WATERFALL, 63 - createvisualtask AnimTask_ShakeMon2, 5, 1, 4, 0, 17, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 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 @@ -6357,11 +6405,7 @@ Move_ELECTROWEB: 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 + call ElectricityEffect_OnTargets Move_ELECTROWEB_Wait: waitforvisualfinish end @@ -9230,16 +9274,16 @@ Move_EERIE_IMPULSE:: Move_VENOM_DRENCH:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfffb 0x1 0xfffb 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfffb 0x1 0xfffb 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x5 0x0 0x6 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x5 0x0 0x6 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x13 0x1 0xa 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x13 0x1 0xa 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe9 0x2 0xfff6 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe9 0x2 0xfff6 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 call AcidDrench @@ -9248,28 +9292,28 @@ Move_VENOM_DRENCH:: clearmonbg ANIM_DEF_PARTNER end AcidDrench: - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1c 0x1 0xa 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1c 0x1 0xa 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfff6 0x1 0xfffb 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfff6 0x1 0xfffb 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xa 0x0 0x6 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xa 0x0 0x6 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x18 0x1 0xa 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x18 0x1 0xa 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe0 0x2 0xfff6 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe0 0x2 0xfff6 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1e 0x2 0xa 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1e 0x2 0xa 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 return @@ -10030,7 +10074,7 @@ Move_LIGHT_OF_RUIN:: 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 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 call LightOfRuinBeam call LightOfRuinBeam call LightOfRuinBeam @@ -10127,6 +10171,7 @@ Move_ORIGIN_PULSE:: 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 + createvisualtaskontargets AnimTask_ShakeMon2, 5, 0, ANIM_TARGET, 2, 0, 18, 1 monbg ANIM_DEF_PARTNER launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0xffb0 0xfff0 0x1 0x1 stopsound @@ -12168,7 +12213,7 @@ Move_FLEUR_CANNON:: 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 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 call FleurCannonBeam call FleurCannonBeam call FleurCannonBeam @@ -12701,7 +12746,7 @@ Move_MOONGEIST_BEAM:: 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 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 call MoongeistBeamOrbs call MoongeistBeamOrbs call MoongeistBeamOrbs @@ -13429,7 +13474,18 @@ Move_DRAGON_DARTS:: end Move_TEATIME:: - goto Move_MILK_DRINK + loadspritegfx ANIM_TAG_TEAPOT + loadspritegfx ANIM_TAG_THOUGHT_BUBBLE + createsprite gThoughtBubbleSpriteTemplate, ANIM_ATTACKER, 11, 0, 100 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_ATTACKER + delay 6 + createsprite gTeapotSpriteTemplate, ANIM_ATTACKER, 12, 0 + createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 + createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATK_PARTNER, 2, 0 + delay 24 + loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 22, 3 + waitforvisualfinish + end Move_OCTOLOCK:: loadspritegfx ANIM_TAG_TENDRILS @@ -13943,11 +13999,12 @@ Move_STRANGE_STEAM:: 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 + createsprite gStrangeSteamPinkCloudTemplate, ANIM_TARGET, 2, 0xf, 0xf, 0x14, 0, 0 + createsprite gStrangeSteamGreenCloudTemplate, ANIM_TARGET, 2, 0xf, 0xf, 0x14, 0xa, 0x5 + createsprite gStrangeSteamPinkCloudTemplate, ANIM_TARGET, 2, 0xf, 0xf, 0x14, 0xfff6, 0xfffb + delay 0x1 + createsprite gStrangeSteamGreenCloudTemplate, ANIM_TARGET, 2, 0xf, 0xf, 0x14, 0x14, 0xa + createsprite gStrangeSteamBlueCloudTemplate, ANIM_TARGET, 2, 0xf, 0xf, 0x14, 0xffec, 0xfff6 delay 0x2 return @@ -14046,7 +14103,7 @@ Move_ETERNA_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 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK delay 48 loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_GUST @@ -14310,6 +14367,21 @@ Move_SCORCHING_SANDS:: Move_JUNGLE_HEALING:: goto Move_AROMATHERAPY + +Move_SILK_TRAP:: + loadspritegfx ANIM_TAG_PROTECT + loadspritegfx ANIM_TAG_SPIDER_WEB + splitbgprio ANIM_ATTACKER + playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET + createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, FALSE + waitforvisualfinish + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 10, 10, RGB_LIME_GREEN + monbg ANIM_ATK_PARTNER + waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 + createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 24, 0, 90 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + end Move_WICKED_BLOW:: Move_SURGING_STRIKES:: @@ -14345,6 +14417,53 @@ Move_WILDBOLT_STORM:: Move_SANDSEAR_STORM:: Move_LUNAR_BLESSING:: Move_TAKE_HEART:: +Move_TERA_BLAST:: +Move_AXE_KICK:: +Move_LAST_RESPECTS:: +Move_LUMINA_CRASH:: +Move_ORDER_UP:: +Move_JET_PUNCH:: +Move_SPICY_EXTRACT:: +Move_SPIN_OUT:: +Move_POPULATION_BOMB:: +Move_ICE_SPINNER:: +Move_GLAIVE_RUSH:: +Move_REVIVAL_BLESSING:: +Move_SALT_CURE:: +Move_TRIPLE_DIVE:: +Move_MORTAL_SPIN:: +Move_DOODLE:: +Move_FILLET_AWAY:: +Move_KOWTOW_CLEAVE:: +Move_FLOWER_TRICK:: +Move_TORCH_SONG:: +Move_AQUA_STEP:: +Move_RAGING_BULL:: +Move_MAKE_IT_RAIN:: +Move_RUINATION:: +Move_COLLISION_COURSE:: +Move_ELECTRO_DRIFT:: +Move_SHED_TAIL:: +Move_CHILLY_RECEPTION:: +Move_TIDY_UP:: +Move_SNOWSCAPE:: +Move_POUNCE:: +Move_TRAILBLAZE:: +Move_CHILLING_WATER:: +Move_HYPER_DRILL:: +Move_TWIN_BEAM:: +Move_RAGE_FIST:: +Move_ARMOR_CANNON:: +Move_BITTER_BLADE:: +Move_DOUBLE_SHOCK:: +Move_GIGATON_HAMMER:: +Move_COMEUPPANCE:: +Move_AQUA_CUTTER:: +Move_BLAZING_TORQUE:: +Move_WICKED_TORQUE:: +Move_NOXIOUS_TORQUE:: +Move_COMBAT_TORQUE:: +Move_MAGICAL_TORQUE:: end @to do @@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ @@ -15386,11 +15505,11 @@ FuryCutterStrongest: Move_SELF_DESTRUCT: loadspritegfx ANIM_TAG_EXPLOSION 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 - createvisualtask AnimTask_ShakeMon2, 5, 7, 6, 0, 38, 1 - createvisualtask AnimTask_ShakeMon2, 5, 8, 6, 0, 38, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 6, 0, 38, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_RIGHT, 6, 0, 38, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_OPPONENT_LEFT, 6, 0, 38, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_OPPONENT_RIGHT, 6, 0, 38, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_ATTACKER_FORCE, 6, 0, 38, 1 call SelfDestructExplode call SelfDestructExplode waitforvisualfinish @@ -15552,11 +15671,11 @@ RisingWaterHitEffect: Move_EXPLOSION: loadspritegfx ANIM_TAG_EXPLOSION createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 9, RGB(26, 8, 8), 8, RGB_BLACK, 8 - createvisualtask AnimTask_ShakeMon2, 5, 4, 8, 0, 40, 1 - createvisualtask AnimTask_ShakeMon2, 5, 5, 8, 0, 40, 1 - createvisualtask AnimTask_ShakeMon2, 5, 6, 8, 0, 40, 1 - createvisualtask AnimTask_ShakeMon2, 5, 7, 8, 0, 40, 1 - createvisualtask AnimTask_ShakeMon2, 5, 8, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_RIGHT, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_OPPONENT_LEFT, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_OPPONENT_RIGHT, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_ATTACKER_FORCE, 8, 0, 40, 1 call Explosion1 call Explosion1 waitforvisualfinish @@ -15585,12 +15704,12 @@ Explosion1: Move_DEFENSE_CURL: loadspritegfx ANIM_TAG_ECLIPSING_ORB loopsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, 18, 3 - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 0 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, FALSE createvisualtask AnimTask_DefenseCurlDeformMon, 5 waitforvisualfinish createsprite gEclipsingOrbSpriteTemplate, ANIM_ATTACKER, 2, 0, 6, 0, 1 waitforvisualfinish - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 1 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, TRUE waitforvisualfinish end @@ -17844,22 +17963,22 @@ Move_LUSTER_PURGE: waitforvisualfinish createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(0, 0, 23) waitforvisualfinish - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA @@ -18284,7 +18403,7 @@ Move_AERIAL_ACE: Move_IRON_DEFENSE: loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 2, RGB_WHITEALPHA, 14, RGB_WHITEALPHA, 0 waitforvisualfinish end @@ -18297,7 +18416,7 @@ Move_BLOCK: Move_HOWL: loadspritegfx ANIM_TAG_NOISE_LINE - createvisualtask AnimTask_DeepInhale, 2, 0 + createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER delay 12 call RoarEffect createvisualtask SoundTask_PlayCryHighPitch, 2, ANIM_ATTACKER, 3 @@ -18496,7 +18615,7 @@ Move_SHOCK_WAVE: Move_HARDEN: loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK waitforvisualfinish end @@ -19557,7 +19676,7 @@ HydroPumpBeams: createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, -16 delay 1 return -HydroPumpHitSplats : +HydroPumpHitSplats: createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 15, ANIM_TARGET, 1 createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, -15, ANIM_TARGET, 1 return @@ -21011,7 +21130,11 @@ 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 +.if B_UPDATED_MOVE_DATA >= GEN_5 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_DEF_SIDE, 6, 2, 0, 12, RGB(26, 0, 26) +.else createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 6, 2, 0, 12, RGB(26, 0, 26) +.endif waitforvisualfinish blendoff clearmonbg ANIM_DEF_PARTNER @@ -21131,7 +21254,7 @@ Move_STEEL_WING: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK waitforvisualfinish monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -21157,7 +21280,7 @@ Move_STEEL_WING: Move_IRON_TAIL: loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 1, 0, 0 + createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK waitforvisualfinish monbg ANIM_TARGET setalpha 12, 8 @@ -21167,7 +21290,7 @@ Move_IRON_TAIL: createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 1 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, TRUE clearmonbg ANIM_TARGET blendoff waitforvisualfinish @@ -21187,7 +21310,7 @@ Move_POISON_TAIL: createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 1 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, TRUE clearmonbg ANIM_TARGET blendoff call PoisonBubblesEffect @@ -21197,7 +21320,7 @@ Move_POISON_TAIL: Move_METAL_CLAW: loadspritegfx ANIM_TAG_CLAW_SLASH loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK waitforvisualfinish createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 delay 2 @@ -21859,16 +21982,16 @@ Move_PERISH_SONG: panse SE_M_PERISH_SONG, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 delay 80 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 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_PLAYER_LEFT, FALSE + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_PLAYER_RIGHT, FALSE + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_OPPONENT_LEFT, FALSE + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_OPPONENT_RIGHT, FALSE delay 100 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 - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 7, 1 + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_PLAYER_LEFT, TRUE + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_PLAYER_RIGHT, TRUE + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_OPPONENT_LEFT, TRUE + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_OPPONENT_RIGHT, TRUE waitforvisualfinish end @@ -22014,7 +22137,7 @@ Move_ENCORE: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_TAG_HAND createvisualtask AnimTask_CreateSpotlight, 2 - createvisualtask AnimTask_HardwarePaletteFade, 2, 248, 3, 0, 10, 0 + createvisualtask AnimTask_HardwarePaletteFade, 2, BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN, 3, 0, 10, FALSE waitforvisualfinish createsprite gSpotlightSpriteTemplate, ANIM_TARGET, 2, 0, -8 createsprite gClappingHandSpriteTemplate, ANIM_ATTACKER, 2, -2, 0, 0, 0, 9 @@ -22025,7 +22148,7 @@ Move_ENCORE: createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_ENCORE2, SOUND_PAN_TARGET createvisualtask AnimTask_SwayMon, 5, 1, 8, 1536, 5, ANIM_TARGET waitforvisualfinish - createvisualtask AnimTask_HardwarePaletteFade, 2, 248, 3, 10, 0, 1 + createvisualtask AnimTask_HardwarePaletteFade, 2, BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN, 3, 10, 0, TRUE waitforvisualfinish createvisualtask AnimTask_RemoveSpotlight, 2 end @@ -22276,7 +22399,7 @@ Move_HYPER_BEAM: delay 30 createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 15, 0, 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB(31, 0, 0), 16, 0, 0 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 call HyperBeamOrbs call HyperBeamOrbs call HyperBeamOrbs @@ -22320,7 +22443,7 @@ Move_FLATTER: loadspritegfx ANIM_TAG_CONFETTI createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_ENCORE2, SOUND_PAN_TARGET createvisualtask AnimTask_CreateSpotlight, 2 - createvisualtask AnimTask_HardwarePaletteFade, 2, 248, 3, 0, 10, 0 + createvisualtask AnimTask_HardwarePaletteFade, 2, BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN, 3, 0, 10, FALSE waitforvisualfinish createsprite gFlatterSpotlightSpriteTemplate, ANIM_TARGET, 2, 0, -8, 80 delay 0 @@ -22351,7 +22474,7 @@ Move_FLATTER: delay 5 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_FLATTER, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_HardwarePaletteFade, 2, 248, 3, 10, 0, 1 + createvisualtask AnimTask_HardwarePaletteFade, 2, BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN, 3, 10, 0, TRUE waitforvisualfinish createvisualtask AnimTask_RemoveSpotlight, 2 end @@ -23249,15 +23372,15 @@ Move_OVERHEAT: waitforvisualfinish createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -5, 3, ANIM_TARGET, 0 playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 10, 0, 25, 1 + createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 10, 0, 25, 1 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, -5, ANIM_TARGET, 0 + createspriteontargets gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 2, 8, -5, ANIM_TARGET, 0 playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, 10, ANIM_TARGET, 0 + createspriteontargets gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 2, 10, 10, ANIM_TARGET, 0 playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 0 + createspriteontargets gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 2, 0, 0, ANIM_TARGET, 0 playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET createvisualtask AnimTask_CopyPalFadedToUnfaded, 5, 1 delay 1 @@ -23632,10 +23755,10 @@ Move_TWISTER: createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_DEF_PARTNER, 3, 0, 12, 1 delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 @@ -24083,21 +24206,40 @@ WaterBubblesEffectLong: ElectricityEffect: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET ElectricityEffectNoSound: - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_TARGET + return + +ElectricityEffect_OnTargets: + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, 5, 0, 5, 0, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, -5, 10, 5, 1, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, 15, 20, 5, 2, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, -15, -10, 5, 0, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, 25, 0, 5, 1, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, -8, 8, 5, 2, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, 2, -8, 5, 0, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, -20, 15, 5, 1, ANIM_TARGET return ConfusionEffect: @@ -24841,7 +24983,7 @@ General_StrongWinds:: General_PrimalReversion:: launchtask AnimTask_PrimalReversion 0x5 0x0 jumpargeq 0x0, ITEM_RED_ORB, General_PrimalReversion_Omega - jumpargeq 0x1, ITEM_BLUE_ORB, General_PrimalReversion_Alpha + jumpargeq 0x0, ITEM_BLUE_ORB, General_PrimalReversion_Alpha General_PrimalReversion_Alpha: loadspritegfx ANIM_TAG_ALPHA_STONE loadspritegfx ANIM_TAG_MEGA_PARTICLES diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 63719e2b6160..ae92aba7cf07 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1,4 +1,5 @@ #include "config.h" +#include "config/battle.h" #include "constants/global.h" #include "constants/battle.h" #include "constants/pokemon.h" @@ -12,7 +13,6 @@ #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" @@ -250,7 +250,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHit @ EFFECT_GYRO_BALL .4byte BattleScript_EffectHit @ EFFECT_ECHOED_VOICE .4byte BattleScript_EffectHit @ EFFECT_PAYBACK - .4byte BattleScript_EffectHit @ EFFECT_ROUND + .4byte BattleScript_EffectRound @ EFFECT_ROUND .4byte BattleScript_EffectHit @ EFFECT_BRINE .4byte BattleScript_EffectHit @ EFFECT_VENOSHOCK .4byte BattleScript_EffectHit @ EFFECT_RETALIATE @@ -301,7 +301,6 @@ gBattleScriptsForMoveEffects:: .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 @@ -410,8 +409,118 @@ gBattleScriptsForMoveEffects:: .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 + .4byte BattleScript_EffectHitSetRemoveTerrain @ EFFECT_HIT_SET_REMOVE_TERRAIN .4byte BattleScript_EffectDarkVoid @ EFFECT_DARK_VOID + .4byte BattleScript_EffectSleepHit @ EFFECT_SLEEP_HIT + .4byte BattleScript_EffectDoubleShock @ EFFECT_DOUBLE_SHOCK + .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT + .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE + .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME + .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY + +BattleScript_EffectAttackUpUserAlly: + jumpifnoally BS_ATTACKER, BattleScript_EffectAttackUp + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_EffectAttackUpUserAlly_Works + jumpifstat BS_ATTACKER_PARTNER, CMP_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_ButItFailed +BattleScript_EffectAttackUpUserAlly_Works: + attackanimation + waitanimation + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAttackUpUserAlly_TryAlly + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectAttackUpUserAllyUser_PrintString + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_EffectAttackUpUserAllyUser_PrintString: + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectAttackUpUserAlly_TryAlly: + setallytonexttarget BattleScript_EffectAttackUpUserAlly_TryAlly_ +BattleScript_EffectAttackUpUserAlly_End: + goto BattleScript_MoveEnd +BattleScript_EffectAttackUpUserAlly_TryAlly_: + setstatchanger STAT_ATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAttackUpUserAlly_End + jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectAttackUpUserAlly_AllyAnim + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_TARGETSTATWONTGOHIGHER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_EffectAttackUpUserAlly_End +BattleScript_EffectAttackUpUserAlly_AllyAnim: + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_EffectAttackUpUserAlly_End + +BattleScript_EffectTeatime:: + attackcanceler + attackstring + ppreduce + jumpifteanoberry BattleScript_ButItFailed +@ at least one battler is affected + attackanimation + waitanimation +BattleScript_TeatimeLoop: + jumpifteainvulnerable BS_TARGET, BattleScript_Teatimevul + jumpifrodaffected BS_TARGET, BattleScript_Teatimerod + jumpifabsorbaffected BS_TARGET, BattleScript_Teatimesorb + jumpifmotoraffected BS_TARGET, BattleScript_Teatimemotor + orword gHitMarker, HITMARKER_NO_ANIMATIONS | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE + setbyte sBERRY_OVERRIDE, TRUE @ override the requirements for eating berries + consumeberry BS_TARGET, TRUE @ consume the berry, then restore the item from changedItems + bicword gHitMarker, HITMARKER_NO_ANIMATIONS | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE + setbyte sBERRY_OVERRIDE, FALSE + removeitem BS_TARGET + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_TeatimeLoop + moveendcase MOVEEND_CLEAR_BITS + goto BattleScript_MoveEnd +BattleScript_Teatimevul: + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_TeatimeLoop + moveendcase MOVEEND_CLEAR_BITS + goto BattleScript_MoveEnd +BattleScript_Teatimesorb: + copybyte gBattlerAbility, gBattlerTarget + call BattleScript_AbilityPopUp + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_TeatimeLoop + moveendcase MOVEEND_CLEAR_BITS + goto BattleScript_MoveEnd +BattleScript_Teatimerod: + copybyte gBattlerAbility, gBattlerTarget + call BattleScript_AbilityPopUp + playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_BY_TWO + setstatchanger STAT_SPATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TeatimeBuffer + printfromtable gStatUpStringIds + waitmessage 0x40 + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_TeatimeLoop + moveendcase MOVEEND_CLEAR_BITS + goto BattleScript_MoveEnd +BattleScript_Teatimemotor: + copybyte gBattlerAbility, gBattlerTarget + call BattleScript_AbilityPopUp + playstatchangeanimation BS_TARGET, BIT_SPEED, STAT_CHANGE_BY_TWO + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TeatimeBuffer + printfromtable gStatUpStringIds + waitmessage 0x40 + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_TeatimeLoop + moveendcase MOVEEND_CLEAR_BITS + goto BattleScript_MoveEnd +BattleScript_TeatimeBuffer: + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_TeatimeLoop + moveendcase MOVEEND_CLEAR_BITS + goto BattleScript_MoveEnd BattleScript_AffectionBasedEndurance:: playanimation BS_TARGET, B_ANIM_AFFECTION_HANGED_ON @@ -1212,8 +1321,12 @@ BattleScript_JungleHealingTryRestoreAlly: goto BattleScript_MoveEnd BattleScript_EffectAttackerDefenseDownHit: + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT, BattleScript_NoMoveEffect setmoveeffect MOVE_EFFECT_DEF_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit +BattleScript_NoMoveEffect: + setmoveeffect 0 + goto BattleScript_EffectHit BattleScript_EffectRelicSong: setmoveeffect MOVE_EFFECT_RELIC_SONG | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN @@ -1280,6 +1393,23 @@ BattleScript_BurnUpRemoveType:: printstring STRINGID_ATTACKERLOSTFIRETYPE waitmessage B_WAIT_TIME_LONG return + +BattleScript_EffectDoubleShock: + attackcanceler + attackstring + ppreduce + jumpiftype BS_ATTACKER, TYPE_ELECTRIC, BattleScript_DoubleShockWorks + goto BattleScript_ButItFailed + +BattleScript_DoubleShockWorks: + setmoveeffect MOVE_EFFECT_DOUBLE_SHOCK | MOVE_EFFECT_CERTAIN + goto BattleScript_EffectHit + +BattleScript_DoubleShockRemoveType:: + losetype BS_ATTACKER, TYPE_ELECTRIC + printstring STRINGID_ATTACKERLOSTELECTRICTYPE + waitmessage B_WAIT_TIME_LONG + return BattleScript_EffectPurify: attackcanceler @@ -2326,6 +2456,38 @@ BattleScript_QuiverDanceTrySpeed:: BattleScript_QuiverDanceEnd:: goto BattleScript_MoveEnd +BattleScript_EffectVictoryDance: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_VictoryDanceDoMoveAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_VictoryDanceDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_VictoryDanceDoMoveAnim:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED, 0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_VictoryDanceTryDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_VictoryDanceTryDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VictoryDanceTryDef:: + setstatchanger STAT_DEF, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_VictoryDanceTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_VictoryDanceTrySpeed + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VictoryDanceTrySpeed:: + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_VictoryDanceEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_VictoryDanceEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VictoryDanceEnd:: + goto BattleScript_MoveEnd + BattleScript_EffectSpeedUpHit: setmoveeffect MOVE_EFFECT_SPD_PLUS_1 | MOVE_EFFECT_AFFECTS_USER goto BattleScript_EffectHit @@ -2403,24 +2565,8 @@ BattleScript_EffectPsychicTerrain: printfromtable gTerrainStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainAbilities 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: @@ -2679,10 +2825,10 @@ BattleScript_EffectSpeedSwap: attackstring ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON - swapstatstages STAT_SPEED + swapstats STAT_SPEED attackanimation waitanimation - printstring STRINGID_PKMNSWITCHEDSTATCHANGES + printstring STRINGID_ATTACKERSWITCHEDSTATWITHTARGET waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -2823,8 +2969,38 @@ BattleScript_EffectTailwind: waitanimation printstring STRINGID_TAILWINDBLEW waitmessage B_WAIT_TIME_LONG + call BattleScript_TryTailwindAbilitiesLoop goto BattleScript_MoveEnd +BattleScript_TryTailwindAbilitiesLoop: + savetarget + setbyte gBattlerTarget, 0 +BattleScript_TryTailwindAbilitiesLoop_Iter: + trywindriderpower BS_TARGET, BattleScript_TryTailwindAbilitiesLoop_Increment + jumpifability BS_TARGET, ABILITY_WIND_RIDER, BattleScript_TryTailwindAbilitiesLoop_WindRider + jumpifability BS_TARGET, ABILITY_WIND_POWER, BattleScript_TryTailwindAbilitiesLoop_WindPower +BattleScript_TryTailwindAbilitiesLoop_Increment: + addbyte gBattlerTarget, 0x1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TryTailwindAbilitiesLoop_Iter +BattleScript_TryTailwindAbilitiesLoop_Ret: + restoretarget + return + +BattleScript_TryTailwindAbilitiesLoop_WindRider: + call BattleScript_AbilityPopUp + modifybattlerstatstage BS_TARGET, STAT_ATK, INCREASE, 1, BattleScript_TryTailwindAbilitiesLoop_Increment, ANIM_ON + goto BattleScript_TryTailwindAbilitiesLoop_Increment + +BattleScript_TryTailwindAbilitiesLoop_WindPower: + call BattleScript_AbilityPopUp + copybyte sSAVED_BATTLER, gBattlerAttacker + copybyte gBattlerAttacker, gBattlerTarget + setcharge + printstring STRINGID_BEINGHITCHARGEDPKMNWITHPOWER + waitmessage B_WAIT_TIME_LONG + copybyte gBattlerAttacker, sSAVED_BATTLER + goto BattleScript_TryTailwindAbilitiesLoop_Increment + BattleScript_EffectMircleEye: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE @@ -2912,6 +3088,7 @@ BattleScript_EffectHitEscape: resultmessage waitmessage B_WAIT_TIME_LONG jumpifmovehadnoeffect BattleScript_MoveEnd + jumpifability BS_TARGET, ABILITY_GUARD_DOG, BattleScript_MoveEnd seteffectwithchance tryfaintmon BS_TARGET moveendto MOVEEND_ATTACKER_VISIBLE @@ -2920,6 +3097,7 @@ BattleScript_EffectHitEscape: jumpifbyte CMP_NOT_EQUAL gBattleOutcome 0, BattleScript_HitEscapeEnd jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_HitEscapeEnd jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_HitEscapeEnd + jumpifemergencyexited BS_TARGET, BattleScript_HitEscapeEnd openpartyscreen BS_ATTACKER, BattleScript_HitEscapeEnd switchoutabilities BS_ATTACKER waitstate @@ -2946,6 +3124,10 @@ BattleScript_EffectPlaceholder: printstring STRINGID_NOTDONEYET goto BattleScript_MoveEnd +BattleScript_EffectRound: + setmoveeffect MOVE_EFFECT_ROUND + goto BattleScript_EffectHit + BattleScript_EffectHit:: BattleScript_HitFromAtkCanceler:: attackcanceler @@ -3031,12 +3213,15 @@ BattleScript_EffectSleep:: ppreduce jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_AlreadyAsleep - jumpifcantmakeasleep BattleScript_CantMakeAsleep - jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects + jumpifuproarwakes BattleScript_CantMakeAsleep + jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_InsomniaProtects + jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_InsomniaProtects + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect jumpifflowerveil BattleScript_FlowerVeilProtects jumpifability BS_TARGET_SIDE, ABILITY_SWEET_VEIL, BattleScript_SweetVeilProtects - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects - jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect 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 @@ -3116,15 +3301,23 @@ BattleScript_PastelVeilProtects: orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd -BattleScript_LeafGuardProtectsRet:: +BattleScript_AbilityProtectsDoesntAffectRet:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printstring STRINGID_ITDOESNTAFFECT waitmessage B_WAIT_TIME_LONG return -BattleScript_LeafGuardProtects: - call BattleScript_LeafGuardProtectsRet +BattleScript_AbilityProtectsDoesntAffect: + call BattleScript_AbilityProtectsDoesntAffectRet + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_InsomniaProtects: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNSTAYEDAWAKEUSING + waitmessage B_WAIT_TIME_LONG orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd @@ -3201,6 +3394,10 @@ BattleScript_EffectBurnHit:: setmoveeffect MOVE_EFFECT_BURN goto BattleScript_EffectHit +BattleScript_EffectSleepHit:: + setmoveeffect MOVE_EFFECT_SLEEP + goto BattleScript_EffectHit + BattleScript_EffectFreezeHit:: setmoveeffect MOVE_EFFECT_FREEZE goto BattleScript_EffectHit @@ -3433,7 +3630,7 @@ BattleScript_MirrorArmorReflect:: call BattleScript_AbilityPopUp jumpifsubstituteblocks BattleScript_AbilityNoSpecificStatLoss BattleScript_MirrorArmorReflectStatLoss: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorArmorReflectEnd + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_MIRROR_ARMOR | 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: @@ -3498,6 +3695,7 @@ BattleScript_EffectRoar:: attackstring ppreduce jumpifroarfails BattleScript_ButItFailed + jumpifability BS_TARGET, ABILITY_GUARD_DOG, 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 @@ -3621,11 +3819,12 @@ BattleScript_EffectToxic:: attackstring ppreduce jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected - jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect jumpifability BS_TARGET_SIDE, ABILITY_PASTEL_VEIL, BattleScript_PastelVeilProtects jumpifflowerveil BattleScript_FlowerVeilProtects - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects - jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed @@ -3683,7 +3882,9 @@ BattleScript_EffectRest:: ppreduce jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_RestIsAlreadyAsleep jumpifability BS_ATTACKER, ABILITY_COMATOSE, BattleScript_RestIsAlreadyAsleep - jumpifcantmakeasleep BattleScript_RestCantSleep + jumpifuproarwakes BattleScript_RestCantSleep + jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_InsomniaProtects + jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_InsomniaProtects trysetrest BattleScript_AlreadyAtFullHp pause B_WAIT_TIME_SHORT printfromtable gRestUsedStringIds @@ -3959,11 +4160,12 @@ BattleScript_EffectPoison:: attackstring ppreduce jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected - jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect jumpifability BS_TARGET_SIDE, ABILITY_PASTEL_VEIL, BattleScript_PastelVeilProtects jumpifflowerveil BattleScript_FlowerVeilProtects - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects - jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned jumpifstatus BS_TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned @@ -3985,15 +4187,17 @@ BattleScript_EffectParalyze: attackstring ppreduce jumpifability BS_TARGET, ABILITY_LIMBER, BattleScript_LimberProtected - jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect jumpifflowerveil BattleScript_FlowerVeilProtects - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects - jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifsubstituteblocks BattleScript_ButItFailed typecalc BattleScript_BattleScript_EffectParalyzeNoTypeCalc: jumpifmovehadnoeffect BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_AlreadyParalyzed + jumpifabsorbaffected BS_TARGET, BattleScript_VoltAbsorbHeal tryparalyzetype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents @@ -4007,6 +4211,11 @@ BattleScript_BattleScript_EffectParalyzeNoTypeCalc: resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd + +BattleScript_VoltAbsorbHeal: + copybyte gBattlerAbility, gBattlerTarget + tryhealquarterhealth BS_TARGET BattleScript_MonMadeMoveUseless @ Check if max hp + goto BattleScript_MoveHPDrain BattleScript_AlreadyParalyzed: setalreadystatusedmoveattempt BS_ATTACKER @@ -4970,6 +5179,10 @@ BattleScript_EffectAttackUpHit:: setmoveeffect MOVE_EFFECT_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER goto BattleScript_EffectHit +BattleScript_EffectSpecialAttackUpHit:: + setmoveeffect MOVE_EFFECT_SP_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER + goto BattleScript_EffectHit + BattleScript_EffectAllStatsUpHit:: setmoveeffect MOVE_EFFECT_ALL_STATS_UP | MOVE_EFFECT_AFFECTS_USER goto BattleScript_EffectHit @@ -5122,10 +5335,18 @@ BattleScript_EffectTeleportNew: BattleScript_EffectTeleportNewEnd: goto BattleScript_MoveEnd -.if B_BEAT_UP < GEN_5 BattleScript_EffectBeatUp:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE +.if B_BEAT_UP >= GEN_5 + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + trydobeatup + goto BattleScript_HitFromAtkAnimation +.else attackstring pause B_WAIT_TIME_SHORT ppreduce @@ -5155,12 +5376,6 @@ BattleScript_BeatUpAttack:: goto BattleScript_BeatUpLoop BattleScript_BeatUpEnd:: end -.else -BattleScript_EffectBeatUp:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - addbyte gBattleCommunication, 1 - goto BattleScript_HitFromAtkString .endif BattleScript_EffectSemiInvulnerable:: @@ -5408,10 +5623,11 @@ BattleScript_EffectWillOWisp:: 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 + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect jumpifflowerveil BattleScript_FlowerVeilProtects - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects - jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE @@ -5503,6 +5719,9 @@ BattleScript_EffectFollowMe:: attackcanceler attackstring ppreduce + .if B_UPDATED_MOVE_DATA >= GEN_6 + jumpifnotbattletype BATTLE_TYPE_DOUBLE, BattleScript_ButItFailed + .endif setforcedtarget attackanimation waitanimation @@ -5698,26 +5917,28 @@ BattleScript_EffectYawn:: attackcanceler attackstring ppreduce - jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_PrintBankAbilityMadeIneffective - jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_PrintBankAbilityMadeIneffective - jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_PrintBankAbilityMadeIneffective + jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_PrintBattlerAbilityMadeIneffective + jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_PrintBattlerAbilityMadeIneffective + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_PrintBattlerAbilityMadeIneffective + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect jumpifflowerveil BattleScript_FlowerVeilProtects - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects - jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifsubstituteblocks BattleScript_ButItFailed jumpifsafeguard BattleScript_SafeguardProtected accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON - jumpifcantmakeasleep BattleScript_ButItFailed + jumpifuproarwakes BattleScript_ButItFailed setyawn BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNWASMADEDROWSY waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_PrintBankAbilityMadeIneffective:: +BattleScript_PrintBattlerAbilityMadeIneffective:: copybyte sBATTLER, gBattlerAbility BattleScript_PrintAbilityMadeIneffective:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXMADEITINEFFECTIVE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -6128,7 +6349,7 @@ BattleScript_FaintedMonTryChoose: jumpifbyte CMP_EQUAL, gBattleCommunication, PARTY_SIZE, BattleScript_FaintedMonSendOutNew @ Switch Pokémon before opponent atknameinbuff1 - resetintimidatetracebits BS_ATTACKER + resetswitchinabilitybits BS_ATTACKER hpthresholds2 BS_ATTACKER printstring STRINGID_RETURNMON switchoutabilities BS_ATTACKER @@ -6555,12 +6776,14 @@ BattleScript_OverworldWeatherStarts:: printfromtable gWeatherStartsStringIds waitmessage B_WAIT_TIME_LONG playanimation_var BS_ATTACKER, sB_ANIM_ARG1 + call BattleScript_WeatherFormChanges end3 BattleScript_OverworldTerrain:: printfromtable gTerrainStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_TerrainSeedLoop end3 BattleScript_SideStatusWoreOff:: @@ -6583,6 +6806,27 @@ BattleScript_TailwindEnds:: waitmessage B_WAIT_TIME_LONG end2 +BattleScript_WindPowerActivatesEnd2:: + setbyte gBattlerAttacker, 0 +BattleScript_WindPowerLoop: + printstring STRINGID_EMPTYSTRING3 + jumpifability BS_ATTACKER, ABILITY_WIND_POWER, BattleScript_WindPowerLoop_Cont + goto BattleScript_WindPowerIncrement +BattleScript_WindPowerLoop_Cont: + jumpifstatus3 BS_ATTACKER, STATUS3_CHARGED_UP, BattleScript_WindPowerIncrement + goto BattleScript_WindPower_Activate +BattleScript_WindPower_Activate: + call BattleScript_AbilityPopUp + setcharge + printstring STRINGID_BEINGHITCHARGEDPKMNWITHPOWER + waitmessage B_WAIT_TIME_LONG +BattleScript_WindPowerIncrement: + addbyte gBattlerAttacker, 1 + jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_WindPowerLoop +BattleScript_WindPowerEnd: + destroyabilitypopup + end2 + BattleScript_TrickRoomEnds:: printstring STRINGID_TRICKROOMENDS waitmessage B_WAIT_TIME_LONG @@ -6996,6 +7240,7 @@ BattleScript_GulpMissileGulping:: tryfaintmon BS_ATTACKER getbattlerfainted BS_ATTACKER jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_GulpMissileNoSecondEffectGulping + jumpifholdeffect BS_ATTACKER, HOLD_EFFECT_CLEAR_AMULET, 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 @@ -7023,6 +7268,70 @@ BattleScript_GulpMissileGorgingTargetDefenseCantGoLower: waitmessage B_WAIT_TIME_LONG return +BattleScript_SeedSowerActivates:: + 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_ActivateTerrainAbilities + call BattleScript_TerrainSeedLoop + return + +BattleScript_AngerShellActivates:: + call BattleScript_AbilityPopUp + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_AngerShellTryDef + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_AngerShellTryDef + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_ButItFailed +BattleScript_AngerShellTryDef:: + setbyte sSTAT_ANIM_PLAYED, FALSE + modifybattlerstatstage BS_ATTACKER, STAT_DEF, DECREASE, 1, BattleScript_AngerShellTrySpDef, ANIM_ON +BattleScript_AngerShellTrySpDef: + modifybattlerstatstage BS_ATTACKER, STAT_SPDEF, DECREASE, 1, BattleScript_AngerShellTryAttack, ANIM_ON +BattleScript_AngerShellTryAttack: + setbyte sSTAT_ANIM_PLAYED, FALSE + modifybattlerstatstage BS_ATTACKER, STAT_ATK, INCREASE, 1, BattleScript_AngerShellTrySpAtk, ANIM_ON +BattleScript_AngerShellTrySpAtk: + modifybattlerstatstage BS_ATTACKER, STAT_SPATK, INCREASE, 1, BattleScript_AngerShellTrySpeed, ANIM_ON +BattleScript_AngerShellTrySpeed: + modifybattlerstatstage BS_ATTACKER, STAT_SPEED, INCREASE, 1, BattleScript_AngerShellRet, ANIM_ON +BattleScript_AngerShellRet: + return + +BattleScript_WindPowerActivates:: +.if B_CHECK_IF_CHARGED_UP == TRUE + jumpifstatus3 BS_ATTACKER, STATUS3_CHARGED_UP, BattleScript_WindPowerActivates_Ret +.endif + call BattleScript_AbilityPopUp + setcharge + printstring STRINGID_BEINGHITCHARGEDPKMNWITHPOWER + waitmessage B_WAIT_TIME_LONG +BattleScript_WindPowerActivates_Ret: + return + +BattleScript_ToxicDebrisActivates:: + call BattleScript_AbilityPopUp + pause B_WAIT_TIME_SHORT + settoxicspikes BattleScript_ToxicDebrisRet + printstring STRINGID_POISONSPIKESSCATTERED + waitmessage B_WAIT_TIME_LONG +BattleScript_ToxicDebrisRet: + return + +BattleScript_EarthEaterActivates:: + call BattleScript_AbilityPopUp + pause B_WAIT_TIME_LONG + tryhealquarterhealth BS_TARGET, BattleScript_EarthEaterRet + orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + printstring STRINGID_PKMNREGAINEDHEALTH + waitmessage B_WAIT_TIME_LONG +BattleScript_EarthEaterRet: + return + BattleScript_PerishSongCountGoesDown:: printstring STRINGID_PKMNPERISHCOUNTFELL waitmessage B_WAIT_TIME_LONG @@ -7374,11 +7683,14 @@ BattleScript_GrudgeTakesPp:: printstring STRINGID_PKMNLOSTPPGRUDGE waitmessage B_WAIT_TIME_LONG return - + BattleScript_MagicCoatBounce:: attackstring ppreduce pause B_WAIT_TIME_SHORT + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0, BattleScript_MagicCoatBounce_Print + call BattleScript_AbilityPopUp +BattleScript_MagicCoatBounce_Print: printfromtable gMagicCoatBounceStringIds waitmessage B_WAIT_TIME_LONG orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_ALLOW_NO_PP @@ -7544,6 +7856,17 @@ BattleScript_BallFetch:: waitmessage B_WAIT_TIME_LONG end3 +BattleScript_CudChewActivates:: + pause B_WAIT_TIME_SHORTEST + call BattleScript_AbilityPopUp + setbyte sBERRY_OVERRIDE, 1 @ override the requirements for eating berries + consumeberry BS_TARGET, FALSE + orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + setbyte sBERRY_OVERRIDE, 0 + end3 + BattleScript_TargetFormChange:: pause 5 copybyte gBattlerAbility, gBattlerTarget @@ -7557,6 +7880,35 @@ BattleScript_TargetFormChange:: handleformchange BS_TARGET, 2 return +BattleScript_TargetFormChangeWithString:: + 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, NULL + waitanimation + handleformchange BS_TARGET, 2 + printstring STRINGID_PKMNTRANSFORMED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_BattlerFormChangeWithStringEnd3:: + pause 5 + call BattleScript_AbilityPopUp + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + handleformchange BS_SCRIPTING, 0 + handleformchange BS_SCRIPTING, 1 + playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE, NULL + waitanimation + handleformchange BS_SCRIPTING, 2 + printstring STRINGID_PKMNTRANSFORMED + waitmessage B_WAIT_TIME_LONG + end3 + BattleScript_IllusionOff:: spriteignore0hp TRUE playanimation BS_TARGET, B_ANIM_ILLUSION_OFF @@ -7613,6 +7965,16 @@ BattleScript_AftermathDmg:: waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER return + +BattleScript_DampPreventsAftermath:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + pause 40 + copybyte gBattlerAbility, sBATTLER + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNSABILITYPREVENTSABILITY + waitmessage B_WAIT_TIME_LONG + return BattleScript_MoveUsedIsAsleep:: printstring STRINGID_PKMNFASTASLEEP @@ -8154,6 +8516,7 @@ BattleScript_WeatherFormChanges:: setbyte sBATTLER, 0 BattleScript_WeatherFormChangesLoop:: tryweatherformdatachange + activateweatherchangeabilities BS_SCRIPTING addbyte sBATTLER, 1 jumpifbytenotequal sBATTLER, gBattlersCount, BattleScript_WeatherFormChangesLoop return @@ -8198,19 +8561,17 @@ BattleScript_TryAdrenalineOrb: BattleScript_TryAdrenalineOrbRet: return -BattleScript_IntimidateActivatesEnd3:: - call BattleScript_PauseIntimidateActivates - end3 - -BattleScript_PauseIntimidateActivates: - pause B_WAIT_TIME_SHORT BattleScript_IntimidateActivates:: + jumpifnovalidtargets BattleScript_IntimidateEnd + showabilitypopup BS_ATTACKER + pause B_WAIT_TIME_LONG + destroyabilitypopup setbyte gBattlerTarget, 0 - call BattleScript_AbilityPopUp -BattleScript_IntimidateActivatesLoop: - setstatchanger STAT_ATK, 1, TRUE - trygetintimidatetarget BattleScript_IntimidateActivatesReturn - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_IntimidateActivatesLoopIncrement +BattleScript_IntimidateLoop: + jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_IntimidateLoopIncrement + jumpiftargetally BattleScript_IntimidateLoopIncrement + jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_IntimidateLoopIncrement + jumpifholdeffect BS_TARGET, HOLD_EFFECT_CLEAR_AMULET, BattleScript_IntimidatePrevented_Item jumpifability BS_TARGET, ABILITY_CLEAR_BODY, BattleScript_IntimidatePrevented jumpifability BS_TARGET, ABILITY_HYPER_CUTTER, BattleScript_IntimidatePrevented jumpifability BS_TARGET, ABILITY_WHITE_SMOKE, BattleScript_IntimidatePrevented @@ -8220,27 +8581,43 @@ BattleScript_IntimidateActivatesLoop: 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 + jumpifability BS_TARGET, ABILITY_GUARD_DOG, BattleScript_IntimidateInReverse +BattleScript_IntimidateEffect: + copybyte sBATTLER, gBattlerAttacker + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_IntimidateLoopIncrement setgraphicalstatchangevalues playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printstring STRINGID_PKMNCUTSATTACKWITH waitmessage B_WAIT_TIME_LONG + copybyte sBATTLER, gBattlerTarget call BattleScript_TryAdrenalineOrb -BattleScript_IntimidateActivatesLoopIncrement: +BattleScript_IntimidateLoopIncrement: addbyte gBattlerTarget, 1 - goto BattleScript_IntimidateActivatesLoop -BattleScript_IntimidateActivatesReturn: - return + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_IntimidateLoop +BattleScript_IntimidateEnd: + destroyabilitypopup + pause B_WAIT_TIME_MED + end3 + BattleScript_IntimidatePrevented: - pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp + pause B_WAIT_TIME_LONG +BattleScript_IntimidatePrevented_Item: setbyte gBattleCommunication STAT_ATK - stattextbuffer BS_ATTACKER + stattextbuffer BS_TARGET printstring STRINGID_STATWASNOTLOWERED waitmessage B_WAIT_TIME_LONG call BattleScript_TryAdrenalineOrb - goto BattleScript_IntimidateActivatesLoopIncrement + goto BattleScript_IntimidateLoopIncrement + +BattleScript_IntimidateInReverse: + copybyte sBATTLER, gBattlerTarget + copybyte gBattlerAbility, gBattlerTarget + call BattleScript_AbilityPopUp + pause B_WAIT_TIME_SHORT + modifybattlerstatstage BS_TARGET, STAT_ATK, INCREASE, 1, BattleScript_IntimidateLoopIncrement, ANIM_ON + call BattleScript_TryAdrenalineOrb + goto BattleScript_IntimidateLoopIncrement BattleScript_DroughtActivates:: pause B_WAIT_TIME_SHORT @@ -8299,12 +8676,55 @@ BattleScript_DeltaStreamActivates:: playanimation BS_ATTACKER, B_ANIM_STRONG_WINDS end3 +BattleScript_ProtosynthesisActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_SUNLIGHTACTIVATEDABILITY + waitmessage B_WAIT_TIME_MED + printstring STRINGID_STATWASHEIGHTENED + waitmessage B_WAIT_TIME_MED + end3 + +BattleScript_QuarkDriveActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_ELECTRICTERRAINACTIVATEDABILITY + waitmessage B_WAIT_TIME_MED + printstring STRINGID_STATWASHEIGHTENED + waitmessage B_WAIT_TIME_MED + end3 + +BattleScript_RuinAbilityActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_SupremeOverlordActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_CostarActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNCOPIEDSTATCHANGES + waitmessage B_WAIT_TIME_LONG + end3 + BattleScript_AttackWeakenedByStrongWinds:: pause B_WAIT_TIME_SHORT printstring STRINGID_ATTACKWEAKENEDBSTRONGWINDS waitmessage B_WAIT_TIME_LONG return +BattleScript_MimicryActivates_End3:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_BATTLERTYPECHANGEDTO + waitmessage B_WAIT_TIME_SHORT + end3 + BattleScript_SnowWarningActivates:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp @@ -8325,6 +8745,29 @@ BattleScript_TerrainSeedLoop_NextBattler: addbyte gBattlerTarget, 0x1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TerrainSeedLoopIter restoretarget + call BattleScript_ActivateSwitchInAbilities + return + +BattleScript_ActivateSwitchInAbilities: + copybyte sBATTLER, gBattlerAttacker + setbyte gBattlerAttacker, 0 +BattleScript_ActivateSwitchInAbilities_Loop: + switchinabilities BS_ATTACKER +BattleScript_ActivateSwitchInAbilities_Increment: + addbyte gBattlerAttacker, 1 + jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_ActivateSwitchInAbilities_Loop + copybyte gBattlerAttacker, sBATTLER + return + +BattleScript_ActivateTerrainAbilities: + copybyte sBATTLER, gBattlerAttacker + setbyte gBattlerAttacker, 0 +BattleScript_ActivateTerrainAbilities_Loop: + activateterrainchangeabilities BS_ATTACKER +BattleScript_ActivateTerrainAbilities_Increment: + addbyte gBattlerAttacker, 1 + jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_ActivateTerrainAbilities_Loop + copybyte gBattlerAttacker, sBATTLER return BattleScript_ElectricSurgeActivates:: @@ -8333,6 +8776,7 @@ BattleScript_ElectricSurgeActivates:: printstring STRINGID_TERRAINBECOMESELECTRIC waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainAbilities call BattleScript_TerrainSeedLoop end3 @@ -8342,6 +8786,7 @@ BattleScript_MistySurgeActivates:: printstring STRINGID_TERRAINBECOMESMISTY waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainAbilities call BattleScript_TerrainSeedLoop end3 @@ -8351,6 +8796,7 @@ BattleScript_GrassySurgeActivates:: printstring STRINGID_TERRAINBECOMESGRASSY waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainAbilities call BattleScript_TerrainSeedLoop end3 @@ -8360,6 +8806,7 @@ BattleScript_PsychicSurgeActivates:: printstring STRINGID_TERRAINBECOMESPSYCHIC waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainAbilities call BattleScript_TerrainSeedLoop end3 @@ -8440,8 +8887,15 @@ BattleScript_MoveStatDrain:: setgraphicalstatchangevalues playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 waitanimation +.if B_ABSORBING_ABILITY_STRING >= GEN_5 + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveStatDrain_Cont + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +.else printstring STRINGID_TARGETABILITYSTATRAISE waitmessage B_WAIT_TIME_LONG +.endif +BattleScript_MoveStatDrain_Cont: clearsemiinvulnerablebit tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd @@ -8532,6 +8986,16 @@ BattleScript_SoundproofProtected:: orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE goto BattleScript_MoveEnd +BattleScript_IceFaceNullsDamage:: + attackstring + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + call BattleScript_TargetFormChangeWithString + goto BattleScript_MoveEnd + BattleScript_DazzlingProtected:: attackstring ppreduce @@ -8590,12 +9054,6 @@ BattleScript_ColorChangeActivates:: waitmessage B_WAIT_TIME_LONG return -BattleScript_MimicryActivatesEnd3:: - call BattleScript_AbilityPopUp - printstring STRINGID_BATTLERTYPECHANGEDTO - waitmessage B_WAIT_TIME_LONG - end3 - BattleScript_ProteanActivates:: pause B_WAIT_TIME_SHORTEST call BattleScript_AbilityPopUp @@ -9621,7 +10079,7 @@ BattleScript_ExtremeEvoboostSpDef:: BattleScript_ExtremeEvoboostEnd:: goto BattleScript_MoveEnd -BattleScript_EffectTerrainHit: +BattleScript_EffectHitSetRemoveTerrain: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring @@ -9643,6 +10101,7 @@ BattleScript_EffectTerrainHit: setterrain BattleScript_TryFaint playanimation BS_ATTACKER, B_ANIM_RESTORE_BG printfromtable gTerrainStringIds + call BattleScript_ActivateTerrainAbilities BattleScript_TryFaint: tryfaintmon BS_TARGET goto BattleScript_MoveEnd @@ -9741,6 +10200,35 @@ BattleScript_DarkTypePreventsPrankster:: orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT goto BattleScript_MoveEnd +BattleScript_WellBakedBodyActivates:: + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + showabilitypopup BS_TARGET + orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + modifybattlerstatstage BS_TARGET, STAT_DEF, INCREASE, 1, BattleScript_WellBakedBodyEnd, ANIM_ON +BattleScript_WellBakedBodyEnd: + goto BattleScript_MoveEnd + +BattleScript_WindRiderActivatesMoveEnd:: + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + showabilitypopup BS_TARGET + orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + modifybattlerstatstage BS_TARGET, STAT_ATK, INCREASE, 1, BattleScript_WindRiderActivatesMoveEnd_End, ANIM_ON +BattleScript_WindRiderActivatesMoveEnd_End: + goto BattleScript_MoveEnd + +BattleScript_GoodAsGoldActivates:: + attackstring + ppreduce + showabilitypopup BS_TARGET + pause B_WAIT_TIME_SHORT + printstring STRINGID_ITDOESNTAFFECT + waitmessage B_WAIT_TIME_MED + goto BattleScript_MoveEnd + BattleScript_PastelVeilActivates:: setbyte gBattleCommunication, 0 setbyte gBattleCommunication + 1, 0 diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index c1dfde61d873..9b26cbd0d7d0 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -1,8 +1,8 @@ +#include "config/battle.h" #include "constants/battle.h" #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" diff --git a/data/event_scripts.s b/data/event_scripts.s index d77b9b9de504..35d0cae2f96e 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1,8 +1,9 @@ +#include "config/battle.h" +#include "config/item.h" #include "constants/global.h" #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" @@ -30,7 +31,6 @@ #include "constants/frontier_util.h" #include "constants/game_stat.h" #include "constants/item.h" -#include "constants/item_config.h" #include "constants/items.h" #include "constants/heal_locations.h" #include "constants/layouts.h" diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc index 4e7284fd0637..e99c7f88e8b0 100644 --- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc @@ -411,7 +411,13 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeLinkMultisChallenge:: special LoadPlayerParty closemessage delay 2 +@ The command tower_save ultimately calls TrySavingData(SAVE_LINK), which writes data in SaveBlock1 and SaveBlock2 +@ to the flash, but not data in PokemonStorage. The SaveGame script that follows asks the player to do a full save, +@ which they can opt out of. As a result the player can save their party and quit without having saved the PC. +@ This allows players to clone pokemon and their held items by withdrawing them (or erase them by despositing). +.ifndef BUGFIX tower_save 0 +.endif call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed diff --git a/data/maps/BattleFrontier_Lounge7/scripts.inc b/data/maps/BattleFrontier_Lounge7/scripts.inc index 9528dd11da77..467f6ba9ae44 100644 --- a/data/maps/BattleFrontier_Lounge7/scripts.inc +++ b/data/maps/BattleFrontier_Lounge7/scripts.inc @@ -145,6 +145,7 @@ 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 @@ -168,6 +169,7 @@ 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 diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index 68d3124d9508..d2174eee99bf 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -48,21 +48,24 @@ BirthIsland_Exterior_EventScript_Triangle:: special DoDeoxysRockInteraction waitstate switch VAR_RESULT - case 0, BirthIsland_Exterior_EventScript_NotSolved1 - case 1, BirthIsland_Exterior_EventScript_NotSolved2 - case 2, BirthIsland_Exterior_EventScript_Deoxys - case 3, BirthIsland_Exterior_EventScript_NotSolved3 + case DEOXYS_ROCK_FAILED, BirthIsland_Exterior_EventScript_Failed + case DEOXYS_ROCK_PROGRESSED, BirthIsland_Exterior_EventScript_Progressed + case DEOXYS_ROCK_SOLVED, BirthIsland_Exterior_EventScript_Deoxys + case DEOXYS_ROCK_COMPLETE, BirthIsland_Exterior_EventScript_Complete end -BirthIsland_Exterior_EventScript_NotSolved1:: +@ The actual rock triangle movement is handled by DoDeoxysRockInteraction. +@ Unless the player has solved the puzzle and needs to encounter Deoxys, +@ there's nothing else the script needs to do. +BirthIsland_Exterior_EventScript_Failed:: release end -BirthIsland_Exterior_EventScript_NotSolved2:: +BirthIsland_Exterior_EventScript_Progressed:: release end -BirthIsland_Exterior_EventScript_NotSolved3:: +BirthIsland_Exterior_EventScript_Complete:: release end diff --git a/data/maps/PetalburgCity/scripts.inc b/data/maps/PetalburgCity/scripts.inc index 3609b26226f2..a9dd1014f265 100644 --- a/data/maps/PetalburgCity/scripts.inc +++ b/data/maps/PetalburgCity/scripts.inc @@ -38,7 +38,7 @@ PetalburgCity_OnFrame: PetalburgCity_EventScript_WallyTutorial:: lockall special SavePlayerParty - special PutZigzagoonInPlayerParty + special LoadWallyZigzagoon applymovement LOCALID_WALLY, PetalburgCity_Movement_WallyTutorialWally applymovement OBJ_EVENT_ID_PLAYER, PetalburgCity_Movement_WallyTutorialPlayer waitmovement 0 diff --git a/data/scripts/repel.inc b/data/scripts/repel.inc index fc32df1d9c1f..ab7924bd2131 100644 --- a/data/scripts/repel.inc +++ b/data/scripts/repel.inc @@ -19,6 +19,7 @@ EventScript_RepelUseAnother: lock msgbox Text_UseAnotherRepel, MSGBOX_YESNO .if I_REPEL_LURE_MENU == TRUE + goto_if_eq VAR_RESULT, NO, EventScript_RepelWoreOff_End callnative TryDrawRepelMenu goto_if_eq VAR_RESULT, FALSE, EventScript_RepelWoreOff_Chose waitstate @@ -68,6 +69,7 @@ EventScript_LureUseAnother: lock msgbox Text_UseAnotherLure, MSGBOX_YESNO .if I_REPEL_LURE_MENU == TRUE + goto_if_eq VAR_RESULT, NO, EventScript_LureWoreOff_End callnative TryDrawLureMenu goto_if_eq VAR_RESULT, FALSE, EventScript_LureWoreOff_Chose waitstate diff --git a/data/sound_data.s b/data/sound_data.s index 1bc29958082f..39bef4b332f1 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 "include/config/pokemon.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 a1b2fd201634..8e81ff847b25 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -258,7 +258,7 @@ gSpecials:: def_special CallSlateportTentFunction def_special ChoosePartyForBattleFrontier def_special ValidateEReaderTrainer - def_special GetBestBattleTowerStreak + def_special GetBattleTowerSinglesStreak def_special ReducePlayerPartyToSelectedMons def_special BedroomPC def_special PlayerPC @@ -311,7 +311,7 @@ gSpecials:: def_special TryUpdateRusturfTunnelState def_special IsGrassTypeInParty def_special DoContestHallWarp - def_special PutZigzagoonInPlayerParty + def_special LoadWallyZigzagoon def_special IsStarterInParty def_special CopyCurSecretBaseOwnerName_StrVar1 def_special ScriptCheckFreePokemonStorageSpace @@ -430,7 +430,7 @@ gSpecials:: def_special ShowWirelessCommunicationScreen def_special InitUnionRoom def_special BufferUnionRoomPlayerName - def_special RetrieveWonderNewsVal + def_special WonderNews_GetRewardInfo def_special ChooseMonForWirelessMinigame def_special Script_ResetUnionRoomTrade def_special IsBadEggInParty diff --git a/gflib/bg.c b/gflib/bg.c index f300e4609d85..968c46272f21 100644 --- a/gflib/bg.c +++ b/gflib/bg.c @@ -1053,7 +1053,7 @@ void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 widt 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 & (MAPGRID_COLLISION_MASK | MAPGRID_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & MAPGRID_METATILE_ID_MASK); + firstTileNum = (firstTileNum & 0xFC00) + ((firstTileNum + tileNumDelta) & 0x3FF); } } break; @@ -1064,7 +1064,7 @@ void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 widt for (x16 = x; x16 < (x + width); x16++) { ((u8 *)sGpuBgConfigs2[bg].tilemap)[(y16 * mode3) + x16] = firstTileNum; - firstTileNum = (firstTileNum & (MAPGRID_COLLISION_MASK | MAPGRID_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & MAPGRID_METATILE_ID_MASK); + firstTileNum = (firstTileNum & 0xFC00) + ((firstTileNum + tileNumDelta) & 0x3FF); } } break; diff --git a/gflib/characters.h b/gflib/characters.h index 714904aa42cb..8ed440e63a91 100644 --- a/gflib/characters.h +++ b/gflib/characters.h @@ -212,13 +212,13 @@ #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_RESET_FONT 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_RIGHT 0x0D #define EXT_CTRL_CODE_SHIFT_DOWN 0x0E #define EXT_CTRL_CODE_FILL_WINDOW 0x0F #define EXT_CTRL_CODE_PLAY_SE 0x10 diff --git a/gflib/sprite.c b/gflib/sprite.c index cbcd6fb7c0fb..c489eb6a4c34 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -1615,7 +1615,7 @@ void LoadSpritePalettes(const struct SpritePalette *palettes) void DoLoadSpritePalette(const u16 *src, u16 paletteOffset) { - LoadPalette(src, paletteOffset + 0x100, 32); + LoadPalette(src, OBJ_PLTT_OFFSET + paletteOffset, PLTT_SIZE_4BPP); } u8 AllocSpritePalette(u16 tag) diff --git a/gflib/string_util.c b/gflib/string_util.c index 4bf8d946db0f..8d969d1bf5b8 100644 --- a/gflib/string_util.c +++ b/gflib/string_util.c @@ -354,7 +354,7 @@ u8 *StringExpandPlaceholders(u8 *dest, const u8 *src) switch (c) { - case EXT_CTRL_CODE_RESET_SIZE: + case EXT_CTRL_CODE_RESET_FONT: case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: case EXT_CTRL_CODE_FILL_WINDOW: case EXT_CTRL_CODE_JPN: @@ -665,13 +665,13 @@ u8 GetExtCtrlCodeLength(u8 code) [EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW] = 4, [EXT_CTRL_CODE_PALETTE] = 2, [EXT_CTRL_CODE_FONT] = 2, - [EXT_CTRL_CODE_RESET_SIZE] = 1, + [EXT_CTRL_CODE_RESET_FONT] = 1, [EXT_CTRL_CODE_PAUSE] = 2, [EXT_CTRL_CODE_PAUSE_UNTIL_PRESS] = 1, [EXT_CTRL_CODE_WAIT_SE] = 1, [EXT_CTRL_CODE_PLAY_BGM] = 3, [EXT_CTRL_CODE_ESCAPE] = 2, - [EXT_CTRL_CODE_SHIFT_TEXT] = 2, + [EXT_CTRL_CODE_SHIFT_RIGHT] = 2, [EXT_CTRL_CODE_SHIFT_DOWN] = 2, [EXT_CTRL_CODE_FILL_WINDOW] = 1, [EXT_CTRL_CODE_PLAY_SE] = 3, diff --git a/gflib/text.c b/gflib/text.c index e7a7d5957b3b..86dca38291fe 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -1009,7 +1009,7 @@ static u16 RenderText(struct TextPrinter *textPrinter) subStruct->fontId = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; return RENDER_REPEAT; - case EXT_CTRL_CODE_RESET_SIZE: + case EXT_CTRL_CODE_RESET_FONT: return RENDER_REPEAT; case EXT_CTRL_CODE_PAUSE: textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar; @@ -1042,7 +1042,7 @@ static u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.currentChar++; PlaySE(currChar); return RENDER_REPEAT; - case EXT_CTRL_CODE_SHIFT_TEXT: + case EXT_CTRL_CODE_SHIFT_RIGHT: textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; return RENDER_REPEAT; @@ -1271,7 +1271,7 @@ static u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpaci case EXT_CTRL_CODE_FONT: case EXT_CTRL_CODE_PAUSE: case EXT_CTRL_CODE_ESCAPE: - case EXT_CTRL_CODE_SHIFT_TEXT: + case EXT_CTRL_CODE_SHIFT_RIGHT: case EXT_CTRL_CODE_SHIFT_DOWN: case EXT_CTRL_CODE_CLEAR: case EXT_CTRL_CODE_SKIP: @@ -1279,7 +1279,7 @@ static u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpaci case EXT_CTRL_CODE_MIN_LETTER_SPACING: ++strPos; break; - case EXT_CTRL_CODE_RESET_SIZE: + case EXT_CTRL_CODE_RESET_FONT: case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: case EXT_CTRL_CODE_WAIT_SE: case EXT_CTRL_CODE_FILL_WINDOW: @@ -1413,7 +1413,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) case EXT_CTRL_CODE_PALETTE: case EXT_CTRL_CODE_PAUSE: case EXT_CTRL_CODE_ESCAPE: - case EXT_CTRL_CODE_SHIFT_TEXT: + case EXT_CTRL_CODE_SHIFT_RIGHT: case EXT_CTRL_CODE_SHIFT_DOWN: ++str; break; @@ -1444,7 +1444,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) case EXT_CTRL_CODE_ENG: isJapanese = 0; break; - case EXT_CTRL_CODE_RESET_SIZE: + case EXT_CTRL_CODE_RESET_FONT: case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: case EXT_CTRL_CODE_WAIT_SE: case EXT_CTRL_CODE_FILL_WINDOW: @@ -1556,7 +1556,7 @@ u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str) case EXT_CTRL_CODE_PALETTE: case EXT_CTRL_CODE_PAUSE: case EXT_CTRL_CODE_ESCAPE: - case EXT_CTRL_CODE_SHIFT_TEXT: + case EXT_CTRL_CODE_SHIFT_RIGHT: case EXT_CTRL_CODE_SHIFT_DOWN: case EXT_CTRL_CODE_CLEAR: case EXT_CTRL_CODE_SKIP: @@ -1564,7 +1564,7 @@ u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str) case EXT_CTRL_CODE_MIN_LETTER_SPACING: ++strPos; break; - case EXT_CTRL_CODE_RESET_SIZE: + case EXT_CTRL_CODE_RESET_FONT: case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS: case EXT_CTRL_CODE_WAIT_SE: case EXT_CTRL_CODE_FILL_WINDOW: diff --git a/gflib/window.c b/gflib/window.c index ff9e8a6e01cb..1621a08842b7 100644 --- a/gflib/window.c +++ b/gflib/window.c @@ -4,11 +4,8 @@ #include "bg.h" #include "blit.h" -u32 gUnusedWindowVar1; -u32 gUnusedWindowVar2; // This global is set to 0 and never changed. u8 gTransparentTileNumber; -u32 gUnusedWindowVar3; void *gWindowBgTilemapBuffers[NUM_BACKGROUNDS]; extern u32 gWindowTileAutoAllocEnabled; diff --git a/gflib/window.h b/gflib/window.h index 583e7e167372..0000dd864df3 100644 --- a/gflib/window.h +++ b/gflib/window.h @@ -74,8 +74,5 @@ void CopyWindowToVram8Bit(u8 windowId, u8 mode); extern struct Window gWindows[]; extern void *gWindowBgTilemapBuffers[]; -extern u32 gUnusedWindowVar1; -extern u32 gUnusedWindowVar2; -extern u32 gUnusedWindowVar3; #endif // GUARD_WINDOW_H diff --git a/graphics/battle_anims/backgrounds/giga_impact_contest.bin b/graphics/battle_anims/backgrounds/giga_impact_contest.bin index 03c709bb9080..ce383cf24095 100644 --- a/graphics/battle_anims/backgrounds/giga_impact_contest.bin +++ b/graphics/battle_anims/backgrounds/giga_impact_contest.bin @@ -1,3 +1,3 @@ -ˆ$‡$†$…$„$ƒ$‚$$€$€ ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž D!E!F!G!H!I!@!˜$—$–$•$”$“$’$‘$$ ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ ú û ü ý þ ÿ ò ¨$§$¦$¥$¤$£$¢$¡$ $  ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ -! ! ! !!!!¸$·$¶$µ$´$³$²$±$°$° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ !!!!!!!È$Ç$Æ$Å$Ä$Ã$Â$Á$À$À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï *!+!,!-!.!/!"!Ø$×$Ö$Õ$Ô$Ó$Ò$Ñ$Ð$Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß :!;!!?!2!è$ç$æ$å$ä$ã$â$á$à$à á â ã ä å æ ç è é ê ë ì í î ï J!K!L!M!N!O!B!è,ç,æ,å,ä,ã,â,á,à,à(á(â(ã(ä(å(æ(ç(è(é(ê(ë(ì(í(î(ï(J)K)L)M)N)O)B)Ø,×,Ö,Õ,Ô,Ó,Ò,Ñ,Ð,Ð(Ñ(Ò(Ó(Ô(Õ(Ö(×(Ø(Ù(Ú(Û(Ü(Ý(Þ(ß(:);)<)=)>)?)2)È,Ç,Æ,Å,Ä,Ã,Â,Á,À,À(Á(Â(Ã(Ä(Å(Æ(Ç(È(É(Ê(Ë(Ì(Í(Î(Ï(*)+),)-).)/)")¸,·,¶,µ,´,³,²,±,°,°(±(²(³(´(µ(¶(·(¸(¹(º(»(¼(½(¾(¿()))))))¨,§,¦,¥,¤,£,¢,¡, , (¡(¢(£(¤(¥(¦(§(¨(©(ª(«(¬(­(®(¯( -) ) ) ))))˜,—,–,•,”,“,’,‘,,(‘(’(“(”(•(–(—(˜(™(š(›(œ((ž(Ÿ(ú(û(ü(ý(þ(ÿ(ò(ˆ,‡,†,…,„,ƒ,‚,,€,€((‚(ƒ(„(…(†(‡(ˆ(‰(Š(‹(Œ((Ž((D)E)F)G)H)I)@) \ No newline at end of file +         $$ $$$$$ +             $$ $$$$$        ! " # $ % & ' (  ) * + , ,$+$*$)$ ($'$&$%$- . / 0 1 2 3 4 5 6 7 8 9 : ; < = > >$=$<$;$:$9$8$7$6$ ? @ A B C D E E F F$E E D$C$B$A$@$?$G H I J K L M N O P Q E E E E Q$P$O$N$M$L$K$R S T U V W X Y Z [ \ ] ^ _ ` a b E E E E E E E E b$a$`$_$^$ c d e f g h i j k ^(_(`(a(b(E E E E E E E E b,a,`,_,^, c(d(e(f(g(h(i(j(k( K(L(M(N(O(P(Q(E E E E Q,P,O,N,M,L,K,R(S(T( U(V(W(X(Y(Z([(\(](?(@(A(B(C(D(E E F(F,E E D,C,B,A,@,?,G(H(I(J( 6(7(8(9(:(;(<(=(>(>,=,<,;,:,9,8,7,6, %(&('((( )(*(+(,(,,+,*,), (,',&,%,-(.( /(0(1( 2(3(4(5( ((((( ((,, ,,,,, ((( (((( ( !("(#($( ((((( ((,, ,,,,, +( ( ( (( (( \ No newline at end of file diff --git a/graphics/battle_anims/backgrounds/giga_impact_contest.png b/graphics/battle_anims/backgrounds/giga_impact_contest.png new file mode 100644 index 000000000000..80698b8d8b0f Binary files /dev/null and b/graphics/battle_anims/backgrounds/giga_impact_contest.png differ diff --git a/graphics/battle_anims/sprites/new/teapot.pal b/graphics/battle_anims/sprites/new/teapot.pal new file mode 100644 index 000000000000..f8319ce12167 --- /dev/null +++ b/graphics/battle_anims/sprites/new/teapot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +10 247 12 +144 141 173 +255 255 255 +207 232 255 +106 104 120 +190 211 255 +166 169 214 +214 171 113 +162 119 89 +72 71 81 +251 255 211 +232 207 121 +255 255 153 +124 86 73 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/sprites/new/teapot.png b/graphics/battle_anims/sprites/new/teapot.png new file mode 100644 index 000000000000..6be0680dfce1 Binary files /dev/null and b/graphics/battle_anims/sprites/new/teapot.png differ diff --git a/graphics/battle_frontier/tourney_info_card.png b/graphics/battle_frontier/tourney_info_card.png index a3c225c89d27..e6fff76ae9f7 100644 Binary files a/graphics/battle_frontier/tourney_info_card.png and b/graphics/battle_frontier/tourney_info_card.png differ diff --git a/graphics/battle_interface/ability_pop_up.png b/graphics/battle_interface/ability_pop_up.png index 92971a7a51f0..ede0a7b5d7e3 100644 Binary files a/graphics/battle_interface/ability_pop_up.png and b/graphics/battle_interface/ability_pop_up.png differ diff --git a/graphics/battle_interface/ball_caught_indicator.png b/graphics/battle_interface/ball_caught_indicator.png new file mode 100644 index 000000000000..5473d53df88c Binary files /dev/null and b/graphics/battle_interface/ball_caught_indicator.png differ diff --git a/graphics/battle_interface/ball_display_unused_extra.png b/graphics/battle_interface/ball_display_unused_extra.png deleted file mode 100644 index 4eb765d28041..000000000000 Binary files a/graphics/battle_interface/ball_display_unused_extra.png and /dev/null differ diff --git a/graphics/battle_interface/status.png b/graphics/battle_interface/status.png new file mode 100644 index 000000000000..9fae45b71fff Binary files /dev/null and b/graphics/battle_interface/status.png differ diff --git a/graphics/battle_interface/status2.png b/graphics/battle_interface/status2.png index a412e160e58e..af7ce05d3bad 100644 Binary files a/graphics/battle_interface/status2.png and b/graphics/battle_interface/status2.png differ diff --git a/graphics/battle_interface/status3.png b/graphics/battle_interface/status3.png index 8a0db03219f6..d0febfb17c50 100644 Binary files a/graphics/battle_interface/status3.png and b/graphics/battle_interface/status3.png differ diff --git a/graphics/battle_interface/status4.png b/graphics/battle_interface/status4.png index e267940be7bb..9704a36119d4 100644 Binary files a/graphics/battle_interface/status4.png and b/graphics/battle_interface/status4.png differ diff --git a/graphics/battle_interface/status_brn.png b/graphics/battle_interface/status_brn.png deleted file mode 100644 index 8f13fe6de2ab..000000000000 Binary files a/graphics/battle_interface/status_brn.png and /dev/null differ diff --git a/graphics/battle_interface/status_frz.png b/graphics/battle_interface/status_frz.png deleted file mode 100644 index ce10db3e4e87..000000000000 Binary files a/graphics/battle_interface/status_frz.png and /dev/null differ diff --git a/graphics/battle_interface/status_par.png b/graphics/battle_interface/status_par.png deleted file mode 100644 index 904b13242ff8..000000000000 Binary files a/graphics/battle_interface/status_par.png and /dev/null differ diff --git a/graphics/battle_interface/status_psn.png b/graphics/battle_interface/status_psn.png deleted file mode 100644 index 700e7038a1a8..000000000000 Binary files a/graphics/battle_interface/status_psn.png and /dev/null differ diff --git a/graphics/battle_interface/status_slp.png b/graphics/battle_interface/status_slp.png deleted file mode 100644 index bcbd16d1db11..000000000000 Binary files a/graphics/battle_interface/status_slp.png and /dev/null differ diff --git a/graphics/berry_crush/crusher.pal b/graphics/berry_crush/crusher.pal deleted file mode 100644 index 13ea34e59e85..000000000000 --- a/graphics/berry_crush/crusher.pal +++ /dev/null @@ -1,147 +0,0 @@ -JASC-PAL -0100 -144 -98 172 180 -255 213 156 -255 197 139 -255 164 106 -238 131 82 -222 123 74 -213 98 49 -197 82 41 -156 213 189 -123 180 156 -222 156 255 -172 123 222 -255 0 255 -255 0 255 -230 230 255 -65 74 90 -156 148 172 -255 213 156 -255 197 139 -255 164 106 -238 131 82 -222 123 74 -213 98 49 -197 82 41 -255 238 0 -230 189 0 -180 180 180 -139 139 139 -255 0 255 -255 0 255 -230 230 255 -65 74 90 -156 148 172 -255 213 156 -255 197 139 -255 164 106 -238 131 82 -222 123 74 -213 98 49 -197 82 41 -197 213 246 -255 255 255 -238 238 246 -205 205 213 -255 0 255 -255 0 255 -230 230 255 -65 74 90 -255 180 255 -164 172 172 -98 106 115 -123 131 139 -139 148 156 -148 222 164 -156 189 222 -197 213 246 -180 164 115 -205 189 148 -213 205 172 -230 222 189 -246 238 205 -139 123 74 -74 131 189 -65 74 90 -0 0 0 -148 222 164 -164 230 172 -180 238 189 -197 246 205 -213 255 222 -238 255 238 -255 255 255 -65 180 238 -255 255 255 -0 197 57 -255 255 255 -246 213 0 -255 0 255 -246 238 205 -139 123 74 -255 164 106 -164 172 172 -98 106 115 -123 131 139 -139 148 156 -115 156 189 -156 189 222 -197 213 246 -180 164 115 -205 189 148 -213 205 172 -230 222 189 -246 238 205 -139 123 74 -74 131 189 -65 74 90 -0 0 0 -148 222 164 -164 230 172 -180 238 189 -197 246 205 -213 255 222 -238 255 238 -255 255 255 -189 65 255 -255 255 255 -123 123 123 -255 0 255 -246 238 205 -139 123 74 -180 189 189 -255 255 255 -0 0 255 -164 172 172 -98 106 115 -123 131 139 -139 148 156 -115 156 189 -156 189 222 -148 222 164 -180 164 115 -205 189 148 -213 205 172 -230 222 189 -246 238 205 -139 123 74 -74 131 189 -65 74 90 -98 172 180 -41 41 57 -213 213 222 -205 205 205 -238 238 238 -0 0 0 -0 0 0 -0 0 0 -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/berry_crush/crusher.png b/graphics/berry_crush/crusher.png index 6e43adb27bf0..6a57360a7198 100644 Binary files a/graphics/berry_crush/crusher.png and b/graphics/berry_crush/crusher.png differ diff --git a/graphics/cable_car/bg.pal b/graphics/cable_car/bg.pal deleted file mode 100644 index d543b4cce99f..000000000000 --- a/graphics/cable_car/bg.pal +++ /dev/null @@ -1,67 +0,0 @@ -JASC-PAL -0100 -64 -0 0 0 -230 106 189 -230 106 189 -230 106 189 -230 106 189 -230 106 189 -230 106 189 -255 230 139 -238 205 123 -222 189 115 -205 172 106 -189 156 98 -180 139 90 -230 106 189 -230 106 189 -230 106 189 -0 0 0 -189 255 148 -156 222 98 -131 197 74 -106 164 49 -82 115 24 -57 82 0 -230 106 189 -230 106 189 -230 106 189 -230 106 189 -230 106 189 -230 106 189 -230 106 189 -230 106 189 -230 106 189 -0 0 0 -213 238 255 -189 230 255 -164 222 255 -139 213 255 -115 205 255 -98 205 255 -197 205 222 -189 189 197 -180 164 164 -156 131 131 -131 90 90 -123 65 65 -230 106 189 -230 106 189 -230 106 189 -0 0 0 -197 205 246 -172 189 238 -156 172 238 -131 156 230 -115 139 230 -98 123 230 -65 74 106 -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/cable_car/bg.png b/graphics/cable_car/bg.png index f268ea9904e8..6a21ca3542e7 100644 Binary files a/graphics/cable_car/bg.png and b/graphics/cable_car/bg.png differ diff --git a/graphics/contest/interface.png b/graphics/contest/interface.png index 5e3b404621a0..f4ad5b8544c4 100644 Binary files a/graphics/contest/interface.png and b/graphics/contest/interface.png differ diff --git a/graphics/contest/interface_audience.pal b/graphics/contest/interface_audience.pal deleted file mode 100644 index 3fb17479029a..000000000000 --- a/graphics/contest/interface_audience.pal +++ /dev/null @@ -1,259 +0,0 @@ -JASC-PAL -0100 -256 -0 0 0 -255 255 255 -230 230 230 -197 197 197 -148 148 148 -74 65 82 -0 255 0 -0 255 0 -65 74 123 -139 123 131 -82 82 197 -189 82 74 -131 74 98 -74 74 131 -131 139 222 -106 164 164 -0 0 0 -115 123 156 -90 65 57 -148 197 106 -123 98 65 -131 123 49 -222 189 148 -164 131 106 -115 164 82 -164 148 57 -90 106 139 -180 172 82 -82 139 49 -255 230 189 -222 131 41 -246 246 222 -205 148 115 -255 106 115 -255 57 57 -156 0 0 -164 222 255 -106 148 255 -49 82 255 -255 255 115 -246 222 65 -230 106 0 -255 255 255 -189 189 197 -131 131 139 -98 98 123 -65 74 106 -41 49 90 -0 0 0 -255 255 115 -246 222 90 -238 189 65 -238 164 41 -230 131 16 -230 106 0 -255 41 0 -255 148 82 -255 255 164 -255 255 255 -189 189 197 -131 131 139 -98 98 123 -65 74 106 -41 49 90 -0 0 0 -255 131 106 -197 24 16 -164 222 255 -106 148 255 -49 82 255 -255 197 255 -255 139 255 -213 0 139 -148 255 164 -65 205 57 -246 222 65 -230 106 0 -255 255 255 -65 74 106 -65 74 106 -197 255 255 -246 246 90 -205 205 65 -255 255 180 -180 180 24 -74 65 82 -255 255 255 -156 156 156 -255 156 156 -0 0 0 -255 255 255 -255 148 148 -255 123 98 -255 0 0 -148 148 148 -0 0 0 -197 255 255 -246 246 90 -205 205 65 -255 255 180 -180 180 24 -74 65 82 -255 255 255 -156 156 156 -255 156 156 -0 0 0 -255 255 255 -255 148 148 -255 123 98 -255 0 0 -148 148 148 -0 0 0 -197 255 255 -246 246 90 -205 205 65 -255 255 180 -180 180 24 -74 65 82 -255 255 255 -156 156 156 -255 156 156 -0 0 0 -255 255 255 -255 148 148 -255 123 98 -255 0 0 -148 148 148 -0 0 0 -197 255 255 -213 255 213 -156 222 148 -222 255 230 -123 189 115 -74 65 82 -255 255 255 -156 156 156 -255 156 156 -0 0 0 -255 255 255 -255 148 148 -255 123 98 -255 0 0 -148 148 148 -0 0 0 -0 172 255 -0 0 0 -255 255 255 -230 230 213 -0 0 0 -197 197 197 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -197 255 255 -0 0 0 -0 0 0 -0 0 0 -65 0 0 -123 0 0 -189 0 0 -255 8 0 -255 65 0 -255 123 0 -255 189 0 -255 255 0 -255 255 123 -255 255 255 -189 189 197 -131 131 139 -98 98 123 -65 74 106 -41 49 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 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -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/contest/results_screen/tiles.pal b/graphics/contest/results_screen/tiles.pal deleted file mode 100644 index 869aef9e1f19..000000000000 --- a/graphics/contest/results_screen/tiles.pal +++ /dev/null @@ -1,259 +0,0 @@ -JASC-PAL -0100 -256 -0 0 0 -255 255 255 -189 189 197 -131 131 139 -98 98 123 -65 74 106 -41 49 90 -255 106 115 -255 57 57 -205 32 0 -246 213 0 -255 123 98 -156 180 90 -164 148 57 -90 106 139 -180 172 82 -0 0 0 -255 255 255 -189 189 197 -131 131 139 -98 98 123 -65 74 106 -41 49 90 -164 222 255 -106 148 255 -24 57 205 -246 213 0 -255 123 98 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -189 189 197 -131 131 139 -98 98 123 -65 74 106 -41 49 90 -255 197 255 -255 139 255 -213 0 139 -246 213 0 -255 123 98 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -189 189 197 -131 131 139 -98 98 123 -65 74 106 -41 49 90 -180 255 197 -148 255 164 -65 172 57 -246 213 0 -255 123 98 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -189 189 197 -131 131 139 -98 98 123 -65 74 106 -41 49 90 -255 255 164 -246 213 0 -230 106 0 -246 213 0 -255 123 98 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -197 255 255 -255 255 255 -213 213 213 -131 131 139 -98 98 123 -65 74 106 -41 49 90 -164 222 255 -106 148 255 -49 82 255 -180 255 197 -148 255 164 -65 172 57 -0 0 0 -0 0 0 -0 0 0 -197 255 255 -255 255 255 -213 213 213 -131 131 139 -98 98 123 -65 74 106 -41 49 90 -255 139 230 -255 139 230 -255 49 156 -255 255 0 -255 255 0 -189 172 0 -41 49 90 -41 49 90 -0 0 0 -197 123 131 -255 255 255 -230 246 255 -205 238 255 -180 238 255 -156 230 255 -139 230 255 -255 205 230 -255 255 139 -255 230 255 -255 255 197 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -197 255 255 -255 255 255 -213 213 213 -131 131 139 -98 98 123 -65 74 106 -41 49 90 -255 172 197 -255 172 172 -255 180 148 -255 189 123 -255 197 98 -255 205 82 -156 156 156 -156 156 156 -156 156 156 -197 255 255 -255 255 255 -213 213 213 -131 131 139 -98 98 123 -65 74 106 -41 49 90 -164 222 255 -106 148 255 -49 82 255 -180 255 197 -148 255 164 -65 172 57 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -164 222 255 -106 230 222 -49 238 189 -0 255 156 -0 255 156 -82 255 98 -164 255 49 -255 255 0 -255 172 16 -255 90 32 -255 8 57 -230 57 106 -205 115 156 -180 164 205 -164 222 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -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/contest/results_screen/tiles.png b/graphics/contest/results_screen/tiles.png index 106b975cf4f9..bb6aa701e8ff 100644 Binary files a/graphics/contest/results_screen/tiles.png and b/graphics/contest/results_screen/tiles.png differ diff --git a/graphics/door_anims/battle_dome_pre_battle_room.png b/graphics/door_anims/battle_dome_pre_battle_room.png index 6e4e7ee183d5..114ed3a0082c 100644 Binary files a/graphics/door_anims/battle_dome_pre_battle_room.png and b/graphics/door_anims/battle_dome_pre_battle_room.png differ diff --git a/graphics/door_anims/dewford.png b/graphics/door_anims/dewford.png index 86ac1fe4a673..708b52ccb903 100644 Binary files a/graphics/door_anims/dewford.png and b/graphics/door_anims/dewford.png differ diff --git a/graphics/door_anims/fallarbor_dark_roof.png b/graphics/door_anims/fallarbor_dark_roof.png index ec43e37f985c..0785945d3ce6 100644 Binary files a/graphics/door_anims/fallarbor_dark_roof.png and b/graphics/door_anims/fallarbor_dark_roof.png differ diff --git a/graphics/door_anims/lilycove_dept_store_elevator.png b/graphics/door_anims/lilycove_dept_store_elevator.png index 8285e69c428f..2929e300bf92 100644 Binary files a/graphics/door_anims/lilycove_dept_store_elevator.png and b/graphics/door_anims/lilycove_dept_store_elevator.png differ diff --git a/graphics/door_anims/littleroot.png b/graphics/door_anims/littleroot.png index 8c1ca34a5238..599517ceb14a 100644 Binary files a/graphics/door_anims/littleroot.png and b/graphics/door_anims/littleroot.png differ diff --git a/graphics/door_anims/mossdeep.png b/graphics/door_anims/mossdeep.png index 163b2d6dd7f4..2970d4d3b3d6 100644 Binary files a/graphics/door_anims/mossdeep.png and b/graphics/door_anims/mossdeep.png differ diff --git a/graphics/door_anims/oldale.png b/graphics/door_anims/oldale.png index cf637918af74..81f50d94d535 100644 Binary files a/graphics/door_anims/oldale.png and b/graphics/door_anims/oldale.png differ diff --git a/graphics/door_anims/poke_mart.png b/graphics/door_anims/poke_mart.png index 2d9b7d319085..12a1760690c4 100644 Binary files a/graphics/door_anims/poke_mart.png and b/graphics/door_anims/poke_mart.png differ diff --git a/graphics/door_anims/slateport.png b/graphics/door_anims/slateport.png index 1283395eac6e..c82b5a67813c 100644 Binary files a/graphics/door_anims/slateport.png and b/graphics/door_anims/slateport.png differ diff --git a/graphics/door_anims/trainer_hill_roof_elevator.png b/graphics/door_anims/trainer_hill_roof_elevator.png index dc9c6bcee9d6..a143b8c59084 100644 Binary files a/graphics/door_anims/trainer_hill_roof_elevator.png and b/graphics/door_anims/trainer_hill_roof_elevator.png differ diff --git a/graphics/door_anims/verdanturf.png b/graphics/door_anims/verdanturf.png index 204a47612e98..aff9a0f58d4b 100644 Binary files a/graphics/door_anims/verdanturf.png and b/graphics/door_anims/verdanturf.png differ diff --git a/graphics/intro/scene_1/bg.pal b/graphics/expansion_intro/credits.pal similarity index 55% rename from graphics/intro/scene_1/bg.pal rename to graphics/expansion_intro/credits.pal index 95145b854d92..5f6c06d72b83 100644 --- a/graphics/intro/scene_1/bg.pal +++ b/graphics/expansion_intro/credits.pal @@ -2,101 +2,116 @@ JASC-PAL 0100 256 0 0 0 -24 90 0 -49 115 0 -65 139 0 -90 172 0 -164 172 255 -164 197 255 -139 213 255 +255 255 255 +222 222 222 +222 222 214 +198 198 198 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +247 247 247 +231 231 231 +222 222 222 +222 222 214 +214 214 214 +198 198 198 +181 181 181 +165 165 165 +148 148 148 +132 132 132 +115 115 115 +99 99 99 +82 82 82 +66 66 66 +49 49 49 +33 33 33 +16 16 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 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -148 205 98 -180 255 131 -164 238 98 0 0 0 -24 90 0 -49 115 0 -65 139 0 -90 172 0 -164 172 255 -164 197 255 -139 213 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -148 205 98 -180 255 131 -164 238 98 0 0 0 -24 82 0 -32 90 0 -41 98 0 -49 115 0 -57 123 0 -65 139 0 -74 148 0 -82 156 0 -90 172 0 -0 16 0 -8 41 0 -16 57 0 -123 197 16 -180 255 131 -164 238 98 0 0 0 -24 82 0 -32 90 0 -41 98 0 -49 115 0 -57 123 0 -65 139 0 -74 148 0 -82 156 0 -90 172 0 -8 24 8 -8 41 0 -16 57 0 -148 205 98 -98 172 74 -238 255 238 0 0 0 -24 90 0 -49 115 0 -65 139 0 -90 172 0 -164 172 255 -164 197 255 -139 213 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -148 205 98 -180 255 131 -164 238 98 0 0 0 -255 255 255 -246 246 238 -238 246 230 -230 246 222 -205 238 222 -180 230 230 -172 213 238 -131 205 238 -180 180 156 -213 213 230 -205 197 213 -189 230 115 -156 213 98 -222 230 222 -115 172 98 0 0 0 0 0 0 0 0 0 @@ -114,21 +129,6 @@ JASC-PAL 0 0 0 0 0 0 0 0 0 -156 246 0 -65 90 156 -49 115 255 -82 82 82 -98 98 98 -115 115 115 -131 131 131 -148 148 148 -164 164 164 -180 180 180 -197 197 197 -213 213 213 -230 230 230 -255 255 255 -255 255 255 0 0 0 0 0 0 0 0 0 diff --git a/graphics/expansion_intro/powered_by.bin b/graphics/expansion_intro/powered_by.bin new file mode 100644 index 000000000000..13187db91138 Binary files /dev/null and b/graphics/expansion_intro/powered_by.bin differ diff --git a/graphics/expansion_intro/powered_by.png b/graphics/expansion_intro/powered_by.png new file mode 100644 index 000000000000..b422f6e568b8 Binary files /dev/null and b/graphics/expansion_intro/powered_by.png differ diff --git a/graphics/expansion_intro/rhh_credits.bin b/graphics/expansion_intro/rhh_credits.bin new file mode 100644 index 000000000000..44ec5e7e42e2 Binary files /dev/null and b/graphics/expansion_intro/rhh_credits.bin differ diff --git a/graphics/expansion_intro/rhh_credits.png b/graphics/expansion_intro/rhh_credits.png new file mode 100644 index 000000000000..02e1dd3b6e87 Binary files /dev/null and b/graphics/expansion_intro/rhh_credits.png differ diff --git a/graphics/expansion_intro/sprites/dizzy_egg.png b/graphics/expansion_intro/sprites/dizzy_egg.png new file mode 100644 index 000000000000..cd03ffc152ed Binary files /dev/null and b/graphics/expansion_intro/sprites/dizzy_egg.png differ diff --git a/graphics/expansion_intro/sprites/porygon.png b/graphics/expansion_intro/sprites/porygon.png new file mode 100644 index 000000000000..020198df673f Binary files /dev/null and b/graphics/expansion_intro/sprites/porygon.png differ diff --git a/graphics/expansion_intro/sprites/shiny.pal b/graphics/expansion_intro/sprites/shiny.pal new file mode 100644 index 000000000000..1950f6e0baac --- /dev/null +++ b/graphics/expansion_intro/sprites/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +199 225 209 +248 248 248 +197 197 197 +139 213 238 +89 189 230 +7 172 213 +7 131 164 +7 89 114 +246 213 246 +238 172 238 +255 97 207 +197 56 165 +123 40 88 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/frontier_pass/bg.pal b/graphics/frontier_pass/bg.pal deleted file mode 100644 index 2bfcff098bfb..000000000000 --- a/graphics/frontier_pass/bg.pal +++ /dev/null @@ -1,131 +0,0 @@ -JASC-PAL -0100 -128 -57 74 74 -255 255 255 -205 205 205 -164 164 164 -123 123 123 -98 98 115 -57 74 74 -230 246 255 -98 41 65 -255 255 230 -230 230 197 -255 32 32 -98 164 222 -82 139 197 -74 115 172 -74 98 106 -139 98 115 -255 255 255 -230 255 222 -164 164 164 -123 123 123 -98 98 115 -41 57 65 -57 106 139 -65 139 197 -180 230 156 -148 238 131 -131 222 115 -82 172 74 -106 189 255 -205 205 205 -0 0 0 -139 98 115 -238 255 246 -213 238 230 -164 164 164 -123 123 123 -98 98 115 -41 57 65 -57 106 139 -65 139 197 -189 213 205 -148 180 164 -106 148 123 -65 115 90 -106 189 255 -205 205 205 -0 0 0 -139 98 115 -255 246 230 -246 230 213 -205 156 90 -180 131 65 -98 98 115 -41 57 65 -57 106 139 -65 139 197 -230 189 139 -205 156 115 -180 131 82 -156 106 41 -106 189 255 -205 205 205 -0 0 0 -139 98 115 -246 246 255 -230 230 238 -189 189 197 -156 156 156 -156 106 41 -41 57 65 -57 106 139 -65 139 197 -230 230 238 -189 189 197 -156 156 156 -123 123 123 -106 189 255 -205 205 205 -0 0 0 -139 98 115 -246 246 222 -246 238 172 -164 164 164 -123 123 123 -98 98 115 -41 57 65 -57 106 139 -65 139 197 -246 230 139 -230 213 49 -213 197 57 -156 115 57 -106 189 255 -205 205 205 -0 0 0 -0 0 0 -106 131 238 -139 164 213 -189 205 205 -213 197 131 -246 222 164 -172 131 131 -148 98 106 -115 106 148 -106 123 197 -197 230 230 -139 189 131 -106 156 74 -148 222 189 -238 156 131 -238 246 255 -0 0 0 -123 148 189 -65 74 106 -106 98 115 -82 90 180 -139 123 139 -164 172 189 -106 148 131 -180 205 213 -156 156 156 -213 238 230 -255 255 255 -213 180 172 -222 230 238 -213 205 156 -0 0 0 diff --git a/graphics/frontier_pass/bg.png b/graphics/frontier_pass/bg.png index 520c34b3dd97..9e7c59c97054 100644 Binary files a/graphics/frontier_pass/bg.png and b/graphics/frontier_pass/bg.png differ diff --git a/graphics/frontier_pass/map_screen.png b/graphics/frontier_pass/map_screen.png index 5d2b4467f9b6..64061d45a964 100644 Binary files a/graphics/frontier_pass/map_screen.png and b/graphics/frontier_pass/map_screen.png differ diff --git a/graphics/interface/red_arrow.png b/graphics/interface/arrow_cursor.png similarity index 100% rename from graphics/interface/red_arrow.png rename to graphics/interface/arrow_cursor.png diff --git a/graphics/interface/menu_info.png b/graphics/interface/menu_info.png index b16d008cb345..a7439e2a06dc 100644 Binary files a/graphics/interface/menu_info.png and b/graphics/interface/menu_info.png differ diff --git a/graphics/interface/selector_outline.png b/graphics/interface/outline_cursor.png similarity index 100% rename from graphics/interface/selector_outline.png rename to graphics/interface/outline_cursor.png diff --git a/graphics/interface/red.pal b/graphics/interface/red.pal new file mode 100644 index 000000000000..f820b52bb0a6 --- /dev/null +++ b/graphics/interface/red.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 164 197 +255 82 0 +131 32 0 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 diff --git a/graphics/interface/red_arrow_other.png b/graphics/interface/scroll_indicator.png similarity index 100% rename from graphics/interface/red_arrow_other.png rename to graphics/interface/scroll_indicator.png diff --git a/graphics/intro/scene_1/bg.png b/graphics/intro/scene_1/bg.png index 0419014633ad..df9f920ba5e3 100644 Binary files a/graphics/intro/scene_1/bg.png and b/graphics/intro/scene_1/bg.png differ diff --git a/graphics/link/wireless_info_screen.pal b/graphics/link/wireless_info_screen.pal deleted file mode 100644 index 8e0bc0581888..000000000000 --- a/graphics/link/wireless_info_screen.pal +++ /dev/null @@ -1,259 +0,0 @@ -JASC-PAL -0100 -256 -0 0 0 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -57 57 57 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -74 246 255 -57 57 57 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -74 246 255 -57 213 230 -57 57 57 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -74 246 255 -57 213 230 -49 180 205 -0 32 98 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -90 90 90 -90 90 90 -90 90 90 -74 246 255 -57 213 230 -49 180 205 -41 148 180 -0 32 98 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -90 90 90 -90 90 90 -74 246 255 -57 213 230 -49 180 205 -41 148 180 -24 123 164 -0 32 98 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -90 90 90 -74 246 255 -57 213 230 -49 180 205 -41 148 180 -24 123 164 -16 90 139 -0 32 98 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -74 246 255 -57 213 230 -49 180 205 -41 148 180 -24 123 164 -16 90 139 -8 57 115 -0 32 98 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -57 213 230 -49 180 205 -41 148 180 -24 123 164 -16 90 139 -8 57 115 -8 57 115 -57 57 57 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -49 180 205 -41 148 180 -24 123 164 -16 90 139 -8 57 115 -8 57 115 -90 90 90 -57 57 57 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -41 148 180 -24 123 164 -16 90 139 -8 57 115 -8 57 115 -90 90 90 -90 90 90 -57 57 57 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -24 123 164 -16 90 139 -8 57 115 -8 57 115 -90 90 90 -90 90 90 -90 90 90 -57 57 57 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -16 90 139 -8 57 115 -8 57 115 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -57 57 57 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -8 57 115 -8 57 115 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -57 57 57 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 -0 0 0 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -90 90 90 -57 57 57 -172 123 0 -90 90 90 -57 57 57 -164 164 164 -255 180 0 -106 106 106 -74 74 74 diff --git a/graphics/link/wireless_info_screen.png b/graphics/link/wireless_info_screen.png deleted file mode 100644 index 796b2771a36c..000000000000 Binary files a/graphics/link/wireless_info_screen.png and /dev/null differ diff --git a/graphics/misc/mirage_tower.png b/graphics/misc/mirage_tower.png index 69ac6a51e0a4..c851953d2172 100644 Binary files a/graphics/misc/mirage_tower.png and b/graphics/misc/mirage_tower.png differ diff --git a/graphics/party_menu/bg.pal b/graphics/party_menu/bg.pal deleted file mode 100644 index 0b4b30f81c55..000000000000 --- a/graphics/party_menu/bg.pal +++ /dev/null @@ -1,179 +0,0 @@ -JASC-PAL -0100 -176 -123 156 115 -255 255 255 -106 106 106 -0 0 0 -65 205 255 -0 139 189 -49 189 238 -255 156 148 -189 90 82 -222 123 115 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -139 148 123 -74 74 98 -65 156 148 -139 156 41 -205 213 123 -180 180 90 -82 65 74 -32 16 24 -255 0 255 -255 0 255 -255 255 255 -230 238 139 -98 90 0 -255 0 255 -255 0 255 -115 90 180 -139 148 123 -255 115 49 -65 156 148 -139 156 41 -205 213 123 -180 180 90 -82 65 74 -82 82 90 -255 0 255 -255 0 255 -255 255 255 -123 205 180 -57 148 123 -255 0 255 -255 0 255 -164 115 246 -123 156 115 -74 74 98 -115 115 115 -255 255 255 -131 197 222 -57 148 222 -41 123 180 -131 197 222 -41 123 180 -115 255 172 -90 213 131 -65 205 255 -0 98 148 -82 82 82 -255 213 82 -255 180 65 -123 156 115 -74 74 98 -115 115 115 -255 255 255 -213 197 90 -197 164 24 -156 156 32 -213 197 90 -156 156 32 -255 230 57 -205 172 8 -255 156 148 -156 65 57 -82 82 82 -255 213 82 -255 180 65 -123 156 115 -74 74 98 -115 115 115 -255 255 255 -213 164 32 -197 106 16 -164 74 0 -213 164 32 -164 74 0 -255 115 49 -197 57 0 -255 0 255 -255 0 255 -82 82 82 -255 213 82 -255 180 65 -123 156 115 -255 115 49 -115 115 115 -255 255 255 -180 255 164 -123 222 131 -123 156 98 -255 115 49 -255 115 49 -255 0 255 -255 0 255 -255 0 255 -255 0 255 -82 82 82 -255 213 82 -255 180 65 -57 156 255 -255 115 49 -115 115 115 -255 255 255 -172 238 255 -123 213 238 -74 172 205 -255 115 49 -255 115 49 -255 0 255 -255 0 255 -255 0 255 -255 0 255 -82 82 82 -255 213 82 -255 180 65 -57 156 255 -255 115 49 -115 115 115 -255 255 255 -246 246 148 -246 230 98 -222 197 32 -255 115 49 -255 115 49 -255 0 255 -255 0 255 -255 0 255 -255 0 255 -82 82 82 -255 213 82 -255 180 65 -57 156 255 -255 115 49 -115 115 115 -255 255 255 -255 213 222 -255 189 148 -238 164 131 -255 115 49 -255 115 49 -255 0 255 -255 0 255 -255 0 255 -255 0 255 -82 82 82 -255 213 82 -255 180 65 -57 156 255 -255 255 115 -115 115 115 -255 255 255 -180 255 164 -123 222 131 -131 172 106 -255 255 115 -255 255 115 -255 0 255 -255 0 255 -255 0 255 -255 0 255 -82 82 82 -255 213 82 -255 180 65 diff --git a/graphics/party_menu/bg.png b/graphics/party_menu/bg.png index c58f3aae98d8..21d1e5ef107b 100644 Binary files a/graphics/party_menu/bg.png and b/graphics/party_menu/bg.png differ diff --git a/graphics/picture_frame/beauty.png b/graphics/picture_frame/beauty.png index 72e9d0ab760a..2a9c2d644c4e 100644 Binary files a/graphics/picture_frame/beauty.png and b/graphics/picture_frame/beauty.png differ diff --git a/graphics/picture_frame/cool.png b/graphics/picture_frame/cool.png index 33f2baf094b6..cd2910c388df 100644 Binary files a/graphics/picture_frame/cool.png and b/graphics/picture_frame/cool.png differ diff --git a/graphics/picture_frame/cute.png b/graphics/picture_frame/cute.png index 38e6ba209a9f..6d689c918d10 100644 Binary files a/graphics/picture_frame/cute.png and b/graphics/picture_frame/cute.png differ diff --git a/graphics/picture_frame/lobby.png b/graphics/picture_frame/lobby.png index 2f04105ff043..bfa6c0dd9ed5 100644 Binary files a/graphics/picture_frame/lobby.png and b/graphics/picture_frame/lobby.png differ diff --git a/graphics/picture_frame/smart.png b/graphics/picture_frame/smart.png index 93fbf373f585..4c8c4fe60562 100644 Binary files a/graphics/picture_frame/smart.png and b/graphics/picture_frame/smart.png differ diff --git a/graphics/picture_frame/tough.png b/graphics/picture_frame/tough.png index c7db2e3be6db..4efccc288e4e 100644 Binary files a/graphics/picture_frame/tough.png and b/graphics/picture_frame/tough.png differ diff --git a/graphics/pokemon/abomasnow/anim_front.png b/graphics/pokemon/abomasnow/anim_front.png index b7b43b1fd9bc..3ba7033b87f8 100644 Binary files a/graphics/pokemon/abomasnow/anim_front.png and b/graphics/pokemon/abomasnow/anim_front.png differ diff --git a/graphics/pokemon/abomasnow/front.png b/graphics/pokemon/abomasnow/front.png index 49a9d06496ce..eec72b647671 100644 Binary files a/graphics/pokemon/abomasnow/front.png and b/graphics/pokemon/abomasnow/front.png differ diff --git a/graphics/pokemon/abomasnow/normal.pal b/graphics/pokemon/abomasnow/normal.pal index 4408f90cd99e..764cb356cccf 100644 --- a/graphics/pokemon/abomasnow/normal.pal +++ b/graphics/pokemon/abomasnow/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 80 88 -112 160 144 -16 16 16 -64 120 112 -88 104 136 +32 96 88 +80 160 144 +32 40 48 +40 128 112 +96 112 128 248 248 248 -200 200 224 -168 168 192 -168 104 192 -128 72 144 -216 168 208 -152 144 176 -16 16 16 +192 208 216 +168 184 200 +152 112 224 +96 64 184 +216 160 240 +144 152 176 +0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/abra/anim_front.png b/graphics/pokemon/abra/anim_front.png index 927be7344d68..fbbf2d583603 100644 Binary files a/graphics/pokemon/abra/anim_front.png and b/graphics/pokemon/abra/anim_front.png differ diff --git a/graphics/pokemon/abra/front.png b/graphics/pokemon/abra/front.png index 362022801bb5..0880fbb48e8a 100644 Binary files a/graphics/pokemon/abra/front.png and b/graphics/pokemon/abra/front.png differ diff --git a/graphics/pokemon/abra/normal.pal b/graphics/pokemon/abra/normal.pal index 5b75ffb31934..8c4d72e5cd2b 100644 --- a/graphics/pokemon/abra/normal.pal +++ b/graphics/pokemon/abra/normal.pal @@ -4,14 +4,14 @@ JASC-PAL 152 208 160 88 56 8 120 96 24 -240 208 80 -64 48 40 -192 160 56 -248 232 168 -152 120 32 -160 128 112 +255 230 41 +90 57 8 +205 189 32 +246 246 164 +168 136 24 +172 131 41 16 16 16 -104 80 72 +131 98 8 208 176 80 176 160 152 0 0 0 diff --git a/graphics/pokemon/absol/anim_front.png b/graphics/pokemon/absol/anim_front.png index 896b8bca92bc..9a53d575c960 100644 Binary files a/graphics/pokemon/absol/anim_front.png and b/graphics/pokemon/absol/anim_front.png differ diff --git a/graphics/pokemon/absol/normal.pal b/graphics/pokemon/absol/normal.pal index 281044a79fb1..ad45e777e424 100644 --- a/graphics/pokemon/absol/normal.pal +++ b/graphics/pokemon/absol/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 72 112 -24 32 56 -104 120 176 -72 88 128 -16 16 16 -128 144 176 -248 248 248 -88 96 120 -168 176 224 -200 224 248 -120 56 56 -208 56 64 -224 136 144 +65 74 106 +41 57 57 +115 123 172 +82 90 123 +0 0 0 +139 139 172 +255 255 255 +98 98 131 +180 180 213 +213 222 238 +123 41 49 +205 41 32 +255 123 115 0 0 0 0 0 0 diff --git a/graphics/pokemon/accelgor/anim_front.png b/graphics/pokemon/accelgor/anim_front.png index d7a8355caff4..353aa67e0475 100644 Binary files a/graphics/pokemon/accelgor/anim_front.png and b/graphics/pokemon/accelgor/anim_front.png differ diff --git a/graphics/pokemon/accelgor/front.png b/graphics/pokemon/accelgor/front.png index 5d5fbc1a5586..1f55e29acdbe 100644 Binary files a/graphics/pokemon/accelgor/front.png and b/graphics/pokemon/accelgor/front.png differ diff --git a/graphics/pokemon/accelgor/normal.pal b/graphics/pokemon/accelgor/normal.pal index 8be8b068563e..50360984e1fc 100644 --- a/graphics/pokemon/accelgor/normal.pal +++ b/graphics/pokemon/accelgor/normal.pal @@ -3,16 +3,16 @@ JASC-PAL 16 152 208 160 112 40 48 -168 64 80 -248 96 120 +192 56 104 +248 72 120 16 16 16 -168 128 104 -112 200 112 -80 136 72 -32 40 48 -40 56 80 -112 136 184 -88 104 128 +160 128 104 +64 176 88 +80 120 64 +56 40 24 +40 56 104 +104 128 192 +88 96 128 184 184 200 248 248 248 0 0 0 diff --git a/graphics/pokemon/aerodactyl/anim_front.png b/graphics/pokemon/aerodactyl/anim_front.png index 42874a632991..2d36a2ad26c2 100644 Binary files a/graphics/pokemon/aerodactyl/anim_front.png and b/graphics/pokemon/aerodactyl/anim_front.png differ diff --git a/graphics/pokemon/aerodactyl/front.png b/graphics/pokemon/aerodactyl/front.png index 65a1496f418d..36181a6c2647 100644 Binary files a/graphics/pokemon/aerodactyl/front.png and b/graphics/pokemon/aerodactyl/front.png differ diff --git a/graphics/pokemon/aerodactyl/normal.pal b/graphics/pokemon/aerodactyl/normal.pal index 7f67f0390841..08e33fcd6ad0 100644 --- a/graphics/pokemon/aerodactyl/normal.pal +++ b/graphics/pokemon/aerodactyl/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 104 128 -72 56 80 -184 184 224 -152 144 160 -128 96 144 -152 120 184 -176 136 208 +115 98 131 +65 49 98 +189 189 222 +156 139 172 +115 82 148 +148 98 205 +172 131 222 16 16 16 248 248 248 200 200 200 -56 112 80 -104 56 72 -168 112 120 -224 160 160 +49 115 41 +131 32 65 +205 57 74 +230 139 156 72 56 80 diff --git a/graphics/pokemon/aggron/anim_front.png b/graphics/pokemon/aggron/anim_front.png index 0267406818d5..08a5913a765a 100644 Binary files a/graphics/pokemon/aggron/anim_front.png and b/graphics/pokemon/aggron/anim_front.png differ diff --git a/graphics/pokemon/aggron/front.png b/graphics/pokemon/aggron/front.png index bb07d0a9dc44..0d59202cac6f 100644 Binary files a/graphics/pokemon/aggron/front.png and b/graphics/pokemon/aggron/front.png differ diff --git a/graphics/pokemon/aggron/normal.pal b/graphics/pokemon/aggron/normal.pal index 0f22972a7d3a..6c0edcb15d78 100644 --- a/graphics/pokemon/aggron/normal.pal +++ b/graphics/pokemon/aggron/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 128 144 -80 96 104 +88 88 96 16 16 16 248 248 248 -192 200 200 -152 160 176 -160 168 160 -72 168 208 -128 128 136 +200 200 200 +160 160 168 +168 168 168 +104 192 248 +136 136 136 104 104 104 -64 64 80 -160 104 128 -224 168 192 +80 80 72 +160 48 64 +224 80 80 192 200 200 0 0 0 diff --git a/graphics/pokemon/aipom/anim_front.png b/graphics/pokemon/aipom/anim_front.png index 88b55fdd0e96..c3e884d875b7 100644 Binary files a/graphics/pokemon/aipom/anim_front.png and b/graphics/pokemon/aipom/anim_front.png differ diff --git a/graphics/pokemon/aipom/front.png b/graphics/pokemon/aipom/front.png index 384ef85657d4..227584fcba51 100644 Binary files a/graphics/pokemon/aipom/front.png and b/graphics/pokemon/aipom/front.png differ diff --git a/graphics/pokemon/aipom/normal.pal b/graphics/pokemon/aipom/normal.pal index a9004ed8f636..795f51debd98 100644 --- a/graphics/pokemon/aipom/normal.pal +++ b/graphics/pokemon/aipom/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 72 128 -88 32 96 -184 128 192 -152 96 184 -16 16 16 -152 136 104 -208 184 128 -248 232 176 +128 64 168 +80 32 104 +184 120 216 +160 88 192 +0 0 0 +184 136 96 +216 176 112 +248 232 160 248 248 248 -80 144 152 -40 104 120 -120 104 72 168 168 160 +88 88 88 +136 104 64 +192 192 192 0 0 0 0 0 0 diff --git a/graphics/pokemon/alakazam/anim_front.png b/graphics/pokemon/alakazam/anim_front.png index 22364b3e7dc0..2f49747fb706 100644 Binary files a/graphics/pokemon/alakazam/anim_front.png and b/graphics/pokemon/alakazam/anim_front.png differ diff --git a/graphics/pokemon/alakazam/front.png b/graphics/pokemon/alakazam/front.png index 3fcd5981bbdd..9632f20dd9ba 100644 Binary files a/graphics/pokemon/alakazam/front.png and b/graphics/pokemon/alakazam/front.png differ diff --git a/graphics/pokemon/alakazam/normal.pal b/graphics/pokemon/alakazam/normal.pal index 611683409da6..de1ad1131ddc 100644 --- a/graphics/pokemon/alakazam/normal.pal +++ b/graphics/pokemon/alakazam/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 96 24 -240 208 88 -192 160 56 +112 88 8 +255 238 41 +213 189 16 16 16 16 -248 232 168 -104 72 80 -56 32 48 -200 184 168 -160 128 112 +255 246 172 +131 98 8 +82 49 8 +213 180 82 +180 131 41 88 88 88 248 248 248 176 176 168 -216 216 208 +216 216 216 96 96 88 -112 88 8 +80 48 8 diff --git a/graphics/pokemon/alomomola/anim_front.png b/graphics/pokemon/alomomola/anim_front.png index 8fdf9da30bfe..641299c3f239 100644 Binary files a/graphics/pokemon/alomomola/anim_front.png and b/graphics/pokemon/alomomola/anim_front.png differ diff --git a/graphics/pokemon/alomomola/front.png b/graphics/pokemon/alomomola/front.png index 80a1cfb33746..bbf90238b4b6 100644 Binary files a/graphics/pokemon/alomomola/front.png and b/graphics/pokemon/alomomola/front.png differ diff --git a/graphics/pokemon/alomomola/normal.pal b/graphics/pokemon/alomomola/normal.pal index 932beea0b2b2..19be0387909e 100644 --- a/graphics/pokemon/alomomola/normal.pal +++ b/graphics/pokemon/alomomola/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 72 96 -248 192 200 -176 96 112 +136 64 96 +248 184 184 +192 88 120 16 16 16 -96 56 72 -232 144 168 -224 120 152 +96 56 64 +248 136 168 +240 112 128 248 232 240 248 208 224 -200 144 152 -16 32 56 -48 72 112 -192 144 88 +224 136 152 +0 40 48 +0 80 96 +152 136 16 248 248 248 -136 64 96 +0 0 0 diff --git a/graphics/pokemon/altaria/anim_front.png b/graphics/pokemon/altaria/anim_front.png index c3d4b0611fe5..56ae85998036 100644 Binary files a/graphics/pokemon/altaria/anim_front.png and b/graphics/pokemon/altaria/anim_front.png differ diff --git a/graphics/pokemon/altaria/front.png b/graphics/pokemon/altaria/front.png index f2386c3ae3c9..d22c4b80c397 100644 Binary files a/graphics/pokemon/altaria/front.png and b/graphics/pokemon/altaria/front.png differ diff --git a/graphics/pokemon/altaria/normal.pal b/graphics/pokemon/altaria/normal.pal index 5039733eca69..040e4b0141e3 100644 --- a/graphics/pokemon/altaria/normal.pal +++ b/graphics/pokemon/altaria/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 120 152 -16 16 16 -48 160 200 -112 200 240 -40 88 112 -160 224 248 +72 96 144 +0 0 0 +16 152 200 +88 192 248 +40 56 88 +152 216 248 248 248 248 -120 136 168 -208 224 240 +112 112 152 +216 224 232 168 176 192 -192 200 232 -173 90 140 -239 165 206 +200 200 224 +224 104 120 +168 56 80 0 0 0 0 0 0 diff --git a/graphics/pokemon/ambipom/anim_front.png b/graphics/pokemon/ambipom/anim_front.png index b037e445a88d..0cfc584398a7 100644 Binary files a/graphics/pokemon/ambipom/anim_front.png and b/graphics/pokemon/ambipom/anim_front.png differ diff --git a/graphics/pokemon/ambipom/front.png b/graphics/pokemon/ambipom/front.png index fac8c0cadea2..064cbb4e6045 100644 Binary files a/graphics/pokemon/ambipom/front.png and b/graphics/pokemon/ambipom/front.png differ diff --git a/graphics/pokemon/ambipom/normal.pal b/graphics/pokemon/ambipom/normal.pal index 5da71c6f2929..86a9c39483e2 100644 --- a/graphics/pokemon/ambipom/normal.pal +++ b/graphics/pokemon/ambipom/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -128 56 56 -168 72 72 -240 104 104 +112 72 64 +168 80 64 +248 112 88 16 16 16 -208 176 120 -248 224 160 -120 104 64 -56 40 88 -112 72 136 -168 120 184 -136 96 160 +216 184 112 +248 232 160 +136 104 64 +80 32 104 +128 56 168 +176 96 224 +152 72 192 168 144 96 248 248 248 168 168 160 diff --git a/graphics/pokemon/amoonguss/anim_front.png b/graphics/pokemon/amoonguss/anim_front.png index 8f6e3daaba29..e959d5ce5a72 100644 Binary files a/graphics/pokemon/amoonguss/anim_front.png and b/graphics/pokemon/amoonguss/anim_front.png differ diff --git a/graphics/pokemon/amoonguss/front.png b/graphics/pokemon/amoonguss/front.png index fc6ffa783ed9..baec9f8dda24 100644 Binary files a/graphics/pokemon/amoonguss/front.png and b/graphics/pokemon/amoonguss/front.png differ diff --git a/graphics/pokemon/amoonguss/normal.pal b/graphics/pokemon/amoonguss/normal.pal index fb605cb67218..1a27c77ef277 100644 --- a/graphics/pokemon/amoonguss/normal.pal +++ b/graphics/pokemon/amoonguss/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 136 112 88 -72 56 48 -16 16 16 -184 200 176 -96 80 64 -144 144 120 -160 56 80 -208 88 120 +64 48 48 +0 0 0 +200 192 192 +96 72 64 +152 144 128 +168 48 96 +216 80 136 184 184 200 -96 40 56 -240 160 200 -176 112 136 -40 32 40 +104 48 72 +248 168 200 +216 136 160 +40 24 24 0 0 0 0 0 0 diff --git a/graphics/pokemon/ampharos/anim_front.png b/graphics/pokemon/ampharos/anim_front.png index 0defd4e3e676..1b3930f64a13 100644 Binary files a/graphics/pokemon/ampharos/anim_front.png and b/graphics/pokemon/ampharos/anim_front.png differ diff --git a/graphics/pokemon/ampharos/front.png b/graphics/pokemon/ampharos/front.png index 21701e861194..cc9711f87d9d 100644 Binary files a/graphics/pokemon/ampharos/front.png and b/graphics/pokemon/ampharos/front.png differ diff --git a/graphics/pokemon/ampharos/normal.pal b/graphics/pokemon/ampharos/normal.pal index e883c96899ce..dd9818d6b055 100644 --- a/graphics/pokemon/ampharos/normal.pal +++ b/graphics/pokemon/ampharos/normal.pal @@ -4,16 +4,16 @@ JASC-PAL 152 208 160 16 16 16 88 80 88 -208 160 48 -168 128 40 -112 88 40 -208 48 72 -248 208 72 -224 88 112 +248 192 16 +200 136 16 +128 88 48 +192 0 0 +248 232 72 +248 32 32 248 248 248 -136 24 40 -184 168 176 -232 224 216 +168 0 0 +176 176 176 +224 224 224 248 176 160 127 63 75 198 121 121 diff --git a/graphics/pokemon/anorith/anim_front.png b/graphics/pokemon/anorith/anim_front.png index 0abc0fd604e9..9149708503a7 100644 Binary files a/graphics/pokemon/anorith/anim_front.png and b/graphics/pokemon/anorith/anim_front.png differ diff --git a/graphics/pokemon/anorith/front.png b/graphics/pokemon/anorith/front.png index bb410b16765c..e08948a30678 100644 Binary files a/graphics/pokemon/anorith/front.png and b/graphics/pokemon/anorith/front.png differ diff --git a/graphics/pokemon/anorith/normal.pal b/graphics/pokemon/anorith/normal.pal index 6129409de1a0..b82fc5775b39 100644 --- a/graphics/pokemon/anorith/normal.pal +++ b/graphics/pokemon/anorith/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 0 176 232 16 16 16 -168 176 184 -96 96 96 -144 176 152 -120 152 112 -136 56 56 -232 104 112 -208 72 80 -192 216 200 +176 176 184 +104 104 120 +136 168 136 +112 136 112 +112 56 64 +248 80 80 +216 48 72 +168 200 168 216 216 216 248 248 248 -88 112 80 +88 112 88 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/arbok/anim_front.png b/graphics/pokemon/arbok/anim_front.png index 508beb8bda01..351274bd8776 100644 Binary files a/graphics/pokemon/arbok/anim_front.png and b/graphics/pokemon/arbok/anim_front.png differ diff --git a/graphics/pokemon/arbok/front.png b/graphics/pokemon/arbok/front.png index 2980a8a49c8a..b9fe8eaf836a 100644 Binary files a/graphics/pokemon/arbok/front.png and b/graphics/pokemon/arbok/front.png differ diff --git a/graphics/pokemon/arbok/normal.pal b/graphics/pokemon/arbok/normal.pal index 75cee0e401b2..8ef9ad315018 100644 --- a/graphics/pokemon/arbok/normal.pal +++ b/graphics/pokemon/arbok/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -160 144 184 -208 184 224 -128 104 136 -88 56 96 -192 192 192 -248 248 248 -160 56 96 -208 120 152 -128 48 32 -184 64 56 -224 160 176 -192 152 56 -128 104 136 +164 131 197 +197 164 238 +123 98 172 +82 57 123 +197 197 197 +255 255 255 +156 16 0 +197 65 24 +156 16 0 +197 65 24 +246 115 74 +197 180 0 +120 96 168 0 0 0 diff --git a/graphics/pokemon/arcanine/anim_front.png b/graphics/pokemon/arcanine/anim_front.png index 9b504f241006..907e6d12b7c3 100644 Binary files a/graphics/pokemon/arcanine/anim_front.png and b/graphics/pokemon/arcanine/anim_front.png differ diff --git a/graphics/pokemon/arcanine/back.png b/graphics/pokemon/arcanine/back.png index a527a59e9ef3..feb3343d7195 100644 Binary files a/graphics/pokemon/arcanine/back.png and b/graphics/pokemon/arcanine/back.png differ diff --git a/graphics/pokemon/arcanine/front.png b/graphics/pokemon/arcanine/front.png index 8385425e37fc..f5c33c8728c2 100644 Binary files a/graphics/pokemon/arcanine/front.png and b/graphics/pokemon/arcanine/front.png differ diff --git a/graphics/pokemon/arcanine/normal.pal b/graphics/pokemon/arcanine/normal.pal index 943342cf991f..0d552ffc3b8f 100644 --- a/graphics/pokemon/arcanine/normal.pal +++ b/graphics/pokemon/arcanine/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 80 48 +148 98 32 16 16 16 -240 208 168 -192 160 128 -96 64 48 -240 144 72 -184 112 64 +255 246 148 +238 197 115 +98 16 0 +238 115 49 +197 82 90 216 216 208 248 248 240 88 104 112 -232 160 120 -158 90 117 -0 0 0 +255 156 106 +168 48 16 +148 98 32 0 0 0 0 0 0 diff --git a/graphics/pokemon/arcanine/shiny.pal b/graphics/pokemon/arcanine/shiny.pal index a60089517e40..e6ce73d7f126 100644 --- a/graphics/pokemon/arcanine/shiny.pal +++ b/graphics/pokemon/arcanine/shiny.pal @@ -14,6 +14,6 @@ JASC-PAL 128 104 96 240 240 144 181 78 66 -0 0 0 +176 144 64 0 0 0 0 0 0 diff --git a/graphics/pokemon/arceus/anim_front.png b/graphics/pokemon/arceus/anim_front.png index 8e1f8a5380aa..867c4730ca9e 100644 Binary files a/graphics/pokemon/arceus/anim_front.png and b/graphics/pokemon/arceus/anim_front.png differ diff --git a/graphics/pokemon/arceus/bug/normal.pal b/graphics/pokemon/arceus/bug/normal.pal index c4d61c164705..052761abc12c 100644 --- a/graphics/pokemon/arceus/bug/normal.pal +++ b/graphics/pokemon/arceus/bug/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -72 116 40 -136 208 112 -80 72 88 -48 40 56 -40 76 32 -48 100 56 -232 160 232 -192 116 192 -112 164 56 +80 128 48 +144 224 120 +96 96 112 +56 64 80 +48 96 40 +48 112 56 +248 168 248 +200 112 208 +112 168 56 248 248 248 diff --git a/graphics/pokemon/arceus/dark/normal.pal b/graphics/pokemon/arceus/dark/normal.pal index 8adb3fa6fbcc..12401f0ade05 100644 --- a/graphics/pokemon/arceus/dark/normal.pal +++ b/graphics/pokemon/arceus/dark/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -68 78 92 -160 164 176 -88 72 80 -64 44 56 -32 44 56 -24 28 24 -232 84 64 -160 56 32 -104 112 128 +72 88 104 +144 152 176 +104 80 96 +72 48 64 +56 64 80 +32 40 40 +248 104 0 +200 0 56 +96 104 120 248 248 248 diff --git a/graphics/pokemon/arceus/dragon/normal.pal b/graphics/pokemon/arceus/dragon/normal.pal index 7c0332135339..1020ebdbc090 100644 --- a/graphics/pokemon/arceus/dragon/normal.pal +++ b/graphics/pokemon/arceus/dragon/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -96 6 124 -192 108 232 -56 116 88 -16 84 40 -96 6 124 -160 32 32 -72 192 72 -56 128 56 -152 44 192 +128 16 160 +184 80 224 +64 104 88 +32 80 56 +104 0 144 +200 0 56 +0 224 0 +0 160 0 +144 32 184 248 248 248 diff --git a/graphics/pokemon/arceus/electric/normal.pal b/graphics/pokemon/arceus/electric/normal.pal index 37cec5e5b847..39637518163d 100644 --- a/graphics/pokemon/arceus/electric/normal.pal +++ b/graphics/pokemon/arceus/electric/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -160 156 56 -240 236 136 -92 90 40 -56 48 16 -92 90 40 -160 32 32 -224 180 40 -168 120 32 -208 200 80 +184 160 24 +248 240 88 +112 96 56 +80 64 32 +128 112 0 +192 0 0 +240 128 0 +208 96 0 +224 200 56 248 248 248 diff --git a/graphics/pokemon/arceus/fairy/normal.pal b/graphics/pokemon/arceus/fairy/normal.pal index 89bedb760b88..c81dfb067464 100644 --- a/graphics/pokemon/arceus/fairy/normal.pal +++ b/graphics/pokemon/arceus/fairy/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -160 92 112 -248 188 208 -136 52 88 -104 16 64 -96 60 72 -32 60 192 -232 160 208 -192 116 160 -216 140 160 +216 112 144 +248 200 248 +184 112 144 +120 72 96 +136 72 104 +96 56 96 +248 64 144 +200 64 120 +240 144 176 248 248 248 diff --git a/graphics/pokemon/arceus/fighting/normal.pal b/graphics/pokemon/arceus/fighting/normal.pal index 37faf20e972f..c093262bbe2b 100644 --- a/graphics/pokemon/arceus/fighting/normal.pal +++ b/graphics/pokemon/arceus/fighting/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -112 48 32 -192 116 80 -80 72 88 -48 40 56 -80 24 16 -160 32 32 -224 180 40 -168 120 32 -160 72 48 +104 24 8 +184 80 32 +96 96 112 +56 64 80 +88 16 0 +200 0 56 +240 184 0 +176 112 0 +152 56 32 248 248 248 diff --git a/graphics/pokemon/arceus/fire/normal.pal b/graphics/pokemon/arceus/fire/normal.pal index d351203fcc24..05cba4390ee8 100644 --- a/graphics/pokemon/arceus/fire/normal.pal +++ b/graphics/pokemon/arceus/fire/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -172 38 20 -248 148 32 -112 60 56 -80 28 24 -120 16 8 -172 38 20 -224 208 40 -168 136 32 -216 84 8 +216 48 16 +248 144 32 +128 32 32 +80 16 0 +160 24 16 +200 0 0 +248 232 0 +208 120 0 +248 96 16 248 248 248 diff --git a/graphics/pokemon/arceus/flying/normal.pal b/graphics/pokemon/arceus/flying/normal.pal index 233059fe5854..3d62c829b46f 100644 --- a/graphics/pokemon/arceus/flying/normal.pal +++ b/graphics/pokemon/arceus/flying/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -104 112 168 -184 196 248 -80 72 88 -48 40 56 -64 72 120 -48 148 176 -208 244 240 -144 144 168 -144 156 208 +104 112 176 +192 200 248 +96 96 112 +56 64 80 +72 80 144 +48 144 184 +232 232 248 +168 168 176 +144 152 216 248 248 248 diff --git a/graphics/pokemon/arceus/front.png b/graphics/pokemon/arceus/front.png index 72349052d968..c143e4e69baf 100644 Binary files a/graphics/pokemon/arceus/front.png and b/graphics/pokemon/arceus/front.png differ diff --git a/graphics/pokemon/arceus/ghost/normal.pal b/graphics/pokemon/arceus/ghost/normal.pal index 307884148be6..92061f25c210 100644 --- a/graphics/pokemon/arceus/ghost/normal.pal +++ b/graphics/pokemon/arceus/ghost/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -80 46 128 -176 120 224 -80 46 128 -48 32 80 -48 16 104 -184 188 88 -232 84 64 -160 56 32 -120 80 184 +88 40 144 +168 96 232 +80 48 136 +64 24 120 +72 32 128 +248 248 0 +240 64 0 +168 32 0 +120 80 192 248 248 248 diff --git a/graphics/pokemon/arceus/grass/normal.pal b/graphics/pokemon/arceus/grass/normal.pal index d62d422dd694..898495631a1b 100644 --- a/graphics/pokemon/arceus/grass/normal.pal +++ b/graphics/pokemon/arceus/grass/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -64 144 40 -160 252 112 -56 120 64 -28 90 32 -28 90 32 -208 40 48 -224 208 40 -168 136 32 -88 196 56 +64 152 48 +120 248 56 +56 112 80 +24 80 48 +40 104 48 +200 0 64 +248 232 0 +200 176 0 +88 208 56 248 248 248 diff --git a/graphics/pokemon/arceus/ground/normal.pal b/graphics/pokemon/arceus/ground/normal.pal index 832180a3a351..b0ffc9a02cd6 100644 --- a/graphics/pokemon/arceus/ground/normal.pal +++ b/graphics/pokemon/arceus/ground/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -152 104 32 -216 180 88 -88 84 48 -56 48 16 -112 64 16 -160 32 32 -164 172 200 -128 128 160 -192 140 56 +176 104 24 +224 184 88 +104 88 56 +72 64 32 +144 64 0 +192 0 0 +184 184 200 +128 128 144 +200 144 56 248 248 248 diff --git a/graphics/pokemon/arceus/ice/normal.pal b/graphics/pokemon/arceus/ice/normal.pal index 06f187980153..f74dbc1faec9 100644 --- a/graphics/pokemon/arceus/ice/normal.pal +++ b/graphics/pokemon/arceus/ice/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 80 144 184 -176 252 248 -88 136 160 -36 76 96 -36 76 96 -160 32 32 -192 192 232 -136 136 168 -112 184 232 +168 248 248 +72 144 168 +40 96 128 +40 80 96 +200 0 56 +232 232 248 +192 192 200 +128 200 248 248 248 248 diff --git a/graphics/pokemon/arceus/normal.pal b/graphics/pokemon/arceus/normal.pal index f602de85c85d..7c27348932ed 100644 --- a/graphics/pokemon/arceus/normal.pal +++ b/graphics/pokemon/arceus/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -160 144 56 -248 216 144 -80 72 88 -48 40 56 -104 88 32 -160 32 32 -72 192 72 -56 128 56 -208 176 80 +184 160 24 +248 240 88 +96 96 112 +56 64 80 +128 112 0 +200 0 56 +0 224 0 +0 160 0 +224 200 56 248 248 248 diff --git a/graphics/pokemon/arceus/poison/normal.pal b/graphics/pokemon/arceus/poison/normal.pal index 7f7a066ccb06..ce8edcc00d48 100644 --- a/graphics/pokemon/arceus/poison/normal.pal +++ b/graphics/pokemon/arceus/poison/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -136 60 152 -216 132 224 -80 72 88 -48 40 56 -88 32 112 -160 32 32 -224 156 216 -184 108 192 +128 48 144 +224 128 232 +96 96 112 +56 64 80 +80 24 96 +200 0 56 +248 160 248 +200 96 216 176 96 184 248 248 248 diff --git a/graphics/pokemon/arceus/psychic/normal.pal b/graphics/pokemon/arceus/psychic/normal.pal index fbb92c93ba71..0c330517a839 100644 --- a/graphics/pokemon/arceus/psychic/normal.pal +++ b/graphics/pokemon/arceus/psychic/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -192 44 88 -248 132 168 -80 72 88 -48 40 56 -112 20 48 -160 32 32 -72 192 72 -56 128 56 -232 92 128 +200 24 72 +248 128 176 +96 96 112 +56 64 80 +152 0 48 +200 0 56 +0 224 0 +0 160 0 +240 72 112 248 248 248 diff --git a/graphics/pokemon/arceus/rock/normal.pal b/graphics/pokemon/arceus/rock/normal.pal index ec5fd85f414a..60f8739e8164 100644 --- a/graphics/pokemon/arceus/rock/normal.pal +++ b/graphics/pokemon/arceus/rock/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -104 96 56 -176 172 128 -80 72 88 -48 40 56 -72 64 24 -64 108 64 -208 188 136 -160 144 88 -144 140 96 +112 104 64 +184 176 136 +96 96 112 +56 64 80 +96 88 48 +96 96 96 +224 200 120 +184 152 80 +144 144 96 248 248 248 diff --git a/graphics/pokemon/arceus/steel/normal.pal b/graphics/pokemon/arceus/steel/normal.pal index 703f66ffcd01..b1c1451824c1 100644 --- a/graphics/pokemon/arceus/steel/normal.pal +++ b/graphics/pokemon/arceus/steel/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -128 132 136 -224 228 224 -80 72 88 -48 40 56 -72 76 80 -48 100 56 -224 220 40 -160 152 32 -176 180 184 +128 128 136 +232 232 248 +96 96 112 +56 64 80 +88 88 96 +96 96 96 +240 240 0 +168 168 0 +184 184 192 248 248 248 diff --git a/graphics/pokemon/arceus/water/normal.pal b/graphics/pokemon/arceus/water/normal.pal index b3be4a519815..61cd5c15b9af 100644 --- a/graphics/pokemon/arceus/water/normal.pal +++ b/graphics/pokemon/arceus/water/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 112 152 -224 224 216 +232 232 240 16 16 16 -160 168 192 +184 184 192 72 72 96 -8 92 176 -72 204 248 -64 80 108 -24 56 88 +8 96 200 +24 176 248 +0 56 168 +0 40 136 16 48 120 -208 40 48 -40 204 216 -32 148 160 -24 144 224 +200 0 56 +0 232 248 +0 168 208 +8 144 248 248 248 248 diff --git a/graphics/pokemon/archen/anim_front.png b/graphics/pokemon/archen/anim_front.png index db62a555832a..128c3cf07ed0 100644 Binary files a/graphics/pokemon/archen/anim_front.png and b/graphics/pokemon/archen/anim_front.png differ diff --git a/graphics/pokemon/archen/front.png b/graphics/pokemon/archen/front.png index 35b7f39a62a6..ebd166254a37 100644 Binary files a/graphics/pokemon/archen/front.png and b/graphics/pokemon/archen/front.png differ diff --git a/graphics/pokemon/archen/normal.pal b/graphics/pokemon/archen/normal.pal index 103f02d98368..5aa6ad2bd6ae 100644 --- a/graphics/pokemon/archen/normal.pal +++ b/graphics/pokemon/archen/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 40 48 -24 72 96 -224 88 88 -40 152 216 -160 64 64 -16 16 16 +80 48 48 +16 48 104 +216 80 72 +48 128 240 +144 64 64 +0 0 0 224 224 224 -168 160 152 -32 112 144 -40 40 40 -80 64 48 -168 128 72 -248 192 112 +152 152 168 +48 80 152 +56 56 56 +80 64 40 +184 144 80 +240 200 96 0 0 0 0 0 0 diff --git a/graphics/pokemon/archeops/anim_front.png b/graphics/pokemon/archeops/anim_front.png index 6824ee95bc94..12b90b0fc39b 100644 Binary files a/graphics/pokemon/archeops/anim_front.png and b/graphics/pokemon/archeops/anim_front.png differ diff --git a/graphics/pokemon/archeops/front.png b/graphics/pokemon/archeops/front.png index 314c7def79e1..bbbf6e3a24f9 100644 Binary files a/graphics/pokemon/archeops/front.png and b/graphics/pokemon/archeops/front.png differ diff --git a/graphics/pokemon/archeops/normal.pal b/graphics/pokemon/archeops/normal.pal index 0b8de41c33c7..11de5740813d 100644 --- a/graphics/pokemon/archeops/normal.pal +++ b/graphics/pokemon/archeops/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -24 64 88 -40 112 152 -40 152 224 +16 48 104 +48 80 152 +48 128 240 248 248 248 -152 144 144 -80 64 32 -176 128 80 -248 192 112 -232 96 88 -160 72 64 -0 176 160 -0 112 104 -160 88 96 -96 48 56 +152 152 168 +96 80 40 +184 144 80 +240 200 96 +216 80 72 +152 72 72 +16 160 144 +8 104 88 +128 64 80 +80 48 48 diff --git a/graphics/pokemon/ariados/anim_front.png b/graphics/pokemon/ariados/anim_front.png index 913cbe6e6d93..c579c4c01492 100644 Binary files a/graphics/pokemon/ariados/anim_front.png and b/graphics/pokemon/ariados/anim_front.png differ diff --git a/graphics/pokemon/ariados/front.png b/graphics/pokemon/ariados/front.png index 2c7dde50e6bf..8d11202a2c91 100644 Binary files a/graphics/pokemon/ariados/front.png and b/graphics/pokemon/ariados/front.png differ diff --git a/graphics/pokemon/ariados/normal.pal b/graphics/pokemon/ariados/normal.pal index 4b2b177a3055..5939c4fcbac3 100644 --- a/graphics/pokemon/ariados/normal.pal +++ b/graphics/pokemon/ariados/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 64 24 -248 200 120 -16 16 16 -200 144 72 -128 104 184 -176 152 216 -80 64 120 -120 24 32 -176 56 72 -232 88 104 -248 128 144 +104 80 24 +248 216 64 +0 0 0 +192 176 72 +152 88 192 +184 128 224 +96 48 152 +136 32 0 +200 40 56 +240 72 112 +240 136 152 104 104 104 -176 176 168 +184 184 184 248 248 248 80 0 0 diff --git a/graphics/pokemon/armaldo/anim_front.png b/graphics/pokemon/armaldo/anim_front.png index 1a88f3cd621d..372cd2cfec28 100644 Binary files a/graphics/pokemon/armaldo/anim_front.png and b/graphics/pokemon/armaldo/anim_front.png differ diff --git a/graphics/pokemon/armaldo/front.png b/graphics/pokemon/armaldo/front.png index 18899c0e2ca3..2ab629340582 100644 Binary files a/graphics/pokemon/armaldo/front.png and b/graphics/pokemon/armaldo/front.png differ diff --git a/graphics/pokemon/armaldo/normal.pal b/graphics/pokemon/armaldo/normal.pal index 67cd6265516b..1de332d93470 100644 --- a/graphics/pokemon/armaldo/normal.pal +++ b/graphics/pokemon/armaldo/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 104 136 +80 104 144 16 16 16 -176 200 232 -48 48 56 -128 168 216 -96 96 104 -160 160 160 +160 184 216 +56 64 80 +136 168 208 +104 104 120 +176 176 184 248 248 248 -88 128 168 -208 216 232 -160 40 48 -224 80 88 -200 168 96 -248 224 120 -96 96 104 +104 136 176 +216 216 216 +160 24 32 +232 72 96 +216 176 96 +248 216 104 +104 104 120 diff --git a/graphics/pokemon/aron/anim_front.png b/graphics/pokemon/aron/anim_front.png index 921be8f6ff5e..06cd54cf82c6 100644 Binary files a/graphics/pokemon/aron/anim_front.png and b/graphics/pokemon/aron/anim_front.png differ diff --git a/graphics/pokemon/aron/front.png b/graphics/pokemon/aron/front.png index a676b8334857..72b0da8ec860 100644 Binary files a/graphics/pokemon/aron/front.png and b/graphics/pokemon/aron/front.png differ diff --git a/graphics/pokemon/aron/normal.pal b/graphics/pokemon/aron/normal.pal index 427e630434dd..a3a7d4aea58a 100644 --- a/graphics/pokemon/aron/normal.pal +++ b/graphics/pokemon/aron/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -80 104 104 -200 208 208 -144 160 160 -32 56 64 -240 240 240 +80 88 104 +208 208 216 +136 144 152 +56 56 72 +248 248 248 16 16 16 96 96 96 -40 128 160 -80 192 232 -64 88 104 -96 128 144 +48 104 152 +104 184 248 +80 80 96 +112 120 144 56 56 64 0 0 0 0 0 0 diff --git a/graphics/pokemon/articuno/anim_front.png b/graphics/pokemon/articuno/anim_front.png index 892ad5b5ee73..80cacd7391f3 100644 Binary files a/graphics/pokemon/articuno/anim_front.png and b/graphics/pokemon/articuno/anim_front.png differ diff --git a/graphics/pokemon/articuno/front.png b/graphics/pokemon/articuno/front.png index a54f2dfe1f45..71b411a3806c 100644 Binary files a/graphics/pokemon/articuno/front.png and b/graphics/pokemon/articuno/front.png differ diff --git a/graphics/pokemon/articuno/normal.pal b/graphics/pokemon/articuno/normal.pal index 6b41f9855dfe..eaaff4482d09 100644 --- a/graphics/pokemon/articuno/normal.pal +++ b/graphics/pokemon/articuno/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 80 128 -152 208 248 -80 136 168 -96 176 232 +32 82 156 +148 197 255 +41 115 189 +123 164 255 16 16 16 8 48 80 32 136 176 -168 192 192 +148 197 255 248 248 248 -96 64 48 -80 56 40 -184 160 152 -128 120 112 -200 240 248 +184 40 56 +90 57 24 +180 148 115 +139 106 82 +200 224 248 192 200 200 diff --git a/graphics/pokemon/audino/anim_front.png b/graphics/pokemon/audino/anim_front.png index b62b9882b802..cbdbde0422b4 100644 Binary files a/graphics/pokemon/audino/anim_front.png and b/graphics/pokemon/audino/anim_front.png differ diff --git a/graphics/pokemon/audino/front.png b/graphics/pokemon/audino/front.png index 809b56792e39..5aad0eb990cb 100644 Binary files a/graphics/pokemon/audino/front.png and b/graphics/pokemon/audino/front.png differ diff --git a/graphics/pokemon/audino/normal.pal b/graphics/pokemon/audino/normal.pal index f9cd2a5001b7..f14fd9a540e9 100644 --- a/graphics/pokemon/audino/normal.pal +++ b/graphics/pokemon/audino/normal.pal @@ -12,8 +12,8 @@ JASC-PAL 16 16 16 248 248 248 160 136 96 -112 96 88 -200 184 184 -232 224 216 +96 96 104 +208 208 224 +232 232 240 0 0 0 0 0 0 diff --git a/graphics/pokemon/axew/anim_front.png b/graphics/pokemon/axew/anim_front.png index 2eea59fc91b6..43d4825ee8df 100644 Binary files a/graphics/pokemon/axew/anim_front.png and b/graphics/pokemon/axew/anim_front.png differ diff --git a/graphics/pokemon/axew/front.png b/graphics/pokemon/axew/front.png index 3d349d3fef70..993b4432146f 100644 Binary files a/graphics/pokemon/axew/front.png and b/graphics/pokemon/axew/front.png differ diff --git a/graphics/pokemon/axew/normal.pal b/graphics/pokemon/axew/normal.pal index 2e00670b85a4..1b6c96532cd9 100644 --- a/graphics/pokemon/axew/normal.pal +++ b/graphics/pokemon/axew/normal.pal @@ -9,10 +9,10 @@ JASC-PAL 16 16 16 120 160 112 88 104 88 -184 72 72 +200 0 0 248 248 248 -192 184 176 -88 48 48 +176 176 208 +96 0 0 128 208 112 208 232 160 144 144 104 diff --git a/graphics/pokemon/azelf/anim_front.png b/graphics/pokemon/azelf/anim_front.png index 6a1f9aba27dd..36dc5a992420 100644 Binary files a/graphics/pokemon/azelf/anim_front.png and b/graphics/pokemon/azelf/anim_front.png differ diff --git a/graphics/pokemon/azelf/front.png b/graphics/pokemon/azelf/front.png index 82646121bfca..67d155bbf058 100644 Binary files a/graphics/pokemon/azelf/front.png and b/graphics/pokemon/azelf/front.png differ diff --git a/graphics/pokemon/azelf/normal.pal b/graphics/pokemon/azelf/normal.pal index ad64742b0a4b..bee2e3d8bbb8 100644 --- a/graphics/pokemon/azelf/normal.pal +++ b/graphics/pokemon/azelf/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 72 88 -56 112 128 -80 160 176 +56 72 112 +64 96 144 +88 144 192 16 16 16 -96 56 56 -224 104 96 +88 56 64 +232 64 64 168 64 64 248 248 248 -112 184 200 -128 160 184 -176 216 248 -240 200 32 -80 112 128 +112 168 224 +144 152 192 +176 200 240 +248 176 32 +120 112 144 168 136 64 -48 64 72 +64 64 64 diff --git a/graphics/pokemon/azumarill/anim_front.png b/graphics/pokemon/azumarill/anim_front.png index b28b18636041..eaeaf0c8e725 100644 Binary files a/graphics/pokemon/azumarill/anim_front.png and b/graphics/pokemon/azumarill/anim_front.png differ diff --git a/graphics/pokemon/azumarill/front.png b/graphics/pokemon/azumarill/front.png index a21ca7a5acab..6513b5f21158 100644 Binary files a/graphics/pokemon/azumarill/front.png and b/graphics/pokemon/azumarill/front.png differ diff --git a/graphics/pokemon/azumarill/normal.pal b/graphics/pokemon/azumarill/normal.pal index 4fcf284effd7..f67789782b76 100644 --- a/graphics/pokemon/azumarill/normal.pal +++ b/graphics/pokemon/azumarill/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 80 96 -40 120 168 -80 176 216 +48 80 144 +72 144 224 +112 184 248 16 16 16 -120 48 56 -208 72 80 -216 104 104 -32 144 208 +152 0 8 +200 40 0 +232 80 0 +80 176 240 248 248 248 -128 88 104 +168 48 32 120 200 232 -192 136 168 -200 184 184 -208 208 200 +232 128 120 +192 192 208 +216 224 248 80 176 208 diff --git a/graphics/pokemon/azurill/anim_front.png b/graphics/pokemon/azurill/anim_front.png index 79b48f5e165b..3c6b62c47a86 100644 Binary files a/graphics/pokemon/azurill/anim_front.png and b/graphics/pokemon/azurill/anim_front.png differ diff --git a/graphics/pokemon/azurill/front.png b/graphics/pokemon/azurill/front.png index e4e7e7e2f4e2..269e181dcfe4 100644 Binary files a/graphics/pokemon/azurill/front.png and b/graphics/pokemon/azurill/front.png differ diff --git a/graphics/pokemon/azurill/normal.pal b/graphics/pokemon/azurill/normal.pal index aaa7caeca014..db48624d1b3b 100644 --- a/graphics/pokemon/azurill/normal.pal +++ b/graphics/pokemon/azurill/normal.pal @@ -1,18 +1,18 @@ JASC-PAL 0100 16 -152 208 160 -40 96 128 -48 144 192 -128 192 232 -72 168 224 +248 248 192 +56 88 184 +64 120 248 +104 176 248 +88 144 248 16 16 16 -168 88 152 -208 128 152 -168 208 232 +192 72 64 +240 120 112 +160 216 248 48 112 176 -216 232 248 -56 56 88 +224 240 248 +48 64 88 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/bagon/anim_front.png b/graphics/pokemon/bagon/anim_front.png index 784d38eeccc0..fd6e28672078 100644 Binary files a/graphics/pokemon/bagon/anim_front.png and b/graphics/pokemon/bagon/anim_front.png differ diff --git a/graphics/pokemon/bagon/front.png b/graphics/pokemon/bagon/front.png index 3a84b0fa5847..21314fe08212 100644 Binary files a/graphics/pokemon/bagon/front.png and b/graphics/pokemon/bagon/front.png differ diff --git a/graphics/pokemon/bagon/normal.pal b/graphics/pokemon/bagon/normal.pal index a2b6e4a4a6cf..3f04b4fe525a 100644 --- a/graphics/pokemon/bagon/normal.pal +++ b/graphics/pokemon/bagon/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -136 120 120 -96 88 88 -232 232 224 -200 200 192 +128 144 144 +72 80 96 +240 240 248 +208 200 216 16 16 16 -160 160 152 -88 136 160 +160 152 176 +88 128 168 248 224 144 192 160 96 -120 176 200 -160 208 224 +96 168 224 +144 208 248 128 112 80 232 232 224 124 74 95 diff --git a/graphics/pokemon/baltoy/anim_front.png b/graphics/pokemon/baltoy/anim_front.png index cf4b1a85180d..0227496d03dd 100644 Binary files a/graphics/pokemon/baltoy/anim_front.png and b/graphics/pokemon/baltoy/anim_front.png differ diff --git a/graphics/pokemon/baltoy/front.png b/graphics/pokemon/baltoy/front.png index 2529be0cff04..c1bdd8e9060f 100644 Binary files a/graphics/pokemon/baltoy/front.png and b/graphics/pokemon/baltoy/front.png differ diff --git a/graphics/pokemon/baltoy/normal.pal b/graphics/pokemon/baltoy/normal.pal index e8fa0056fde1..a1c829101447 100644 --- a/graphics/pokemon/baltoy/normal.pal +++ b/graphics/pokemon/baltoy/normal.pal @@ -3,14 +3,14 @@ JASC-PAL 16 152 208 160 16 16 16 -96 80 64 -240 224 184 -176 160 112 -208 200 136 -152 128 96 -152 64 72 -216 96 88 -248 128 112 +96 80 80 +224 224 168 +152 144 72 +192 192 96 +128 128 96 +160 32 64 +216 64 96 +240 128 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/banette/anim_front.png b/graphics/pokemon/banette/anim_front.png index 4929293c3b7f..8a7618396c58 100644 Binary files a/graphics/pokemon/banette/anim_front.png and b/graphics/pokemon/banette/anim_front.png differ diff --git a/graphics/pokemon/banette/front.png b/graphics/pokemon/banette/front.png index c80fc20e1d03..48a48753ec09 100644 Binary files a/graphics/pokemon/banette/front.png and b/graphics/pokemon/banette/front.png differ diff --git a/graphics/pokemon/banette/normal.pal b/graphics/pokemon/banette/normal.pal index 04008aaf2341..0c367bb88eec 100644 --- a/graphics/pokemon/banette/normal.pal +++ b/graphics/pokemon/banette/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 80 80 -48 48 56 -160 152 152 -128 120 120 -16 16 16 -184 176 176 -192 56 96 +88 80 96 +56 48 64 +152 152 160 +120 120 128 +0 0 0 +176 168 184 +168 40 56 192 64 88 248 248 248 -248 128 136 -64 56 32 -160 136 80 -208 168 72 -112 88 48 -240 216 128 +224 96 112 +80 56 0 +160 120 16 +208 152 56 +120 88 40 +232 184 88 diff --git a/graphics/pokemon/barboach/anim_front.png b/graphics/pokemon/barboach/anim_front.png index d6dddc94fe18..a1805b0a8321 100644 Binary files a/graphics/pokemon/barboach/anim_front.png and b/graphics/pokemon/barboach/anim_front.png differ diff --git a/graphics/pokemon/barboach/front.png b/graphics/pokemon/barboach/front.png index 7985630004a3..78f0c69eb764 100644 Binary files a/graphics/pokemon/barboach/front.png and b/graphics/pokemon/barboach/front.png differ diff --git a/graphics/pokemon/barboach/normal.pal b/graphics/pokemon/barboach/normal.pal index 9dd20f6009d8..b16d2dabb6df 100644 --- a/graphics/pokemon/barboach/normal.pal +++ b/graphics/pokemon/barboach/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -40 128 152 -48 104 120 -88 176 208 -16 16 16 -120 200 240 +16 112 168 +48 88 128 +48 176 224 +0 0 0 +96 200 240 40 48 64 -80 80 88 -208 224 224 -176 192 200 -64 152 184 -144 144 168 +80 80 80 +208 208 216 +184 184 192 +32 144 184 +136 144 160 232 240 240 0 0 0 0 0 0 diff --git a/graphics/pokemon/basculin/anim_front.png b/graphics/pokemon/basculin/anim_front.png index 800c4e257b7f..2981cdbdc373 100644 Binary files a/graphics/pokemon/basculin/anim_front.png and b/graphics/pokemon/basculin/anim_front.png differ diff --git a/graphics/pokemon/basculin/blue_striped/front.png b/graphics/pokemon/basculin/blue_striped/front.png index 5f3a435b6bb2..cd6e6cda1b0e 100644 Binary files a/graphics/pokemon/basculin/blue_striped/front.png and b/graphics/pokemon/basculin/blue_striped/front.png differ diff --git a/graphics/pokemon/basculin/blue_striped/normal.pal b/graphics/pokemon/basculin/blue_striped/normal.pal index 58da0489d088..5eb98ee61298 100644 --- a/graphics/pokemon/basculin/blue_striped/normal.pal +++ b/graphics/pokemon/basculin/blue_striped/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 +152 208 160 16 16 16 -98 117 113 -222 239 222 -172 183 163 -52 49 56 -78 86 76 -0 99 122 -0 143 183 -50 81 59 -83 178 102 -71 130 77 -255 255 255 +96 96 96 +224 224 224 +160 160 160 +32 48 56 +64 80 80 +0 72 152 +32 128 208 +24 72 24 +64 160 80 +40 112 48 +248 248 248 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/basculin/front.png b/graphics/pokemon/basculin/front.png index 81af37ca8987..ac3f6ded33d0 100644 Binary files a/graphics/pokemon/basculin/front.png and b/graphics/pokemon/basculin/front.png differ diff --git a/graphics/pokemon/basculin/normal.pal b/graphics/pokemon/basculin/normal.pal index 6857b146030c..d20ada23c8df 100644 --- a/graphics/pokemon/basculin/normal.pal +++ b/graphics/pokemon/basculin/normal.pal @@ -3,16 +3,16 @@ JASC-PAL 16 152 208 160 16 16 16 -96 112 112 -216 232 216 -168 176 160 -48 48 56 -72 80 72 -144 56 48 -240 80 80 -80 176 96 -48 80 56 -64 128 72 +96 96 96 +224 224 224 +160 160 160 +32 48 56 +64 80 80 +152 32 24 +248 88 72 +64 160 80 +24 72 24 +40 112 48 248 248 248 0 0 0 0 0 0 diff --git a/graphics/pokemon/bastiodon/anim_front.png b/graphics/pokemon/bastiodon/anim_front.png index c887532c0ca8..3a36e62a3c9a 100644 Binary files a/graphics/pokemon/bastiodon/anim_front.png and b/graphics/pokemon/bastiodon/anim_front.png differ diff --git a/graphics/pokemon/bastiodon/front.png b/graphics/pokemon/bastiodon/front.png index 5d78b408018c..c662e853c17b 100644 Binary files a/graphics/pokemon/bastiodon/front.png and b/graphics/pokemon/bastiodon/front.png differ diff --git a/graphics/pokemon/bastiodon/icon.png b/graphics/pokemon/bastiodon/icon.png index 62cea4b65382..f44b735872a3 100644 Binary files a/graphics/pokemon/bastiodon/icon.png and b/graphics/pokemon/bastiodon/icon.png differ diff --git a/graphics/pokemon/bastiodon/normal.pal b/graphics/pokemon/bastiodon/normal.pal index 9a404744ac75..cd8635b50ded 100644 --- a/graphics/pokemon/bastiodon/normal.pal +++ b/graphics/pokemon/bastiodon/normal.pal @@ -12,7 +12,7 @@ JASC-PAL 248 208 120 104 96 64 32 32 32 -168 96 104 +176 56 72 248 248 248 0 0 0 0 0 0 diff --git a/graphics/pokemon/bayleef/anim_front.png b/graphics/pokemon/bayleef/anim_front.png index 0a5158ccf6ee..3b5b90f511e1 100644 Binary files a/graphics/pokemon/bayleef/anim_front.png and b/graphics/pokemon/bayleef/anim_front.png differ diff --git a/graphics/pokemon/bayleef/front.png b/graphics/pokemon/bayleef/front.png index 3d2e48acfedb..24cec2bcbfb8 100644 Binary files a/graphics/pokemon/bayleef/front.png and b/graphics/pokemon/bayleef/front.png differ diff --git a/graphics/pokemon/bayleef/normal.pal b/graphics/pokemon/bayleef/normal.pal index dc76e97d7847..2602bc25770f 100644 --- a/graphics/pokemon/bayleef/normal.pal +++ b/graphics/pokemon/bayleef/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 56 24 -96 112 64 -144 184 88 -112 152 72 +40 80 8 +80 120 8 +136 184 48 +104 152 16 16 16 16 -152 128 80 -88 72 32 -248 224 128 -208 184 112 +168 128 40 +104 80 0 +248 232 160 +216 184 112 248 248 248 -248 232 184 -152 56 48 -224 120 112 -144 144 144 -0 0 0 +248 240 200 +208 56 0 +208 136 80 +96 96 96 +192 192 192 diff --git a/graphics/pokemon/beartic/anim_front.png b/graphics/pokemon/beartic/anim_front.png index 26444777bb4b..136ca5ec0277 100644 Binary files a/graphics/pokemon/beartic/anim_front.png and b/graphics/pokemon/beartic/anim_front.png differ diff --git a/graphics/pokemon/beautifly/anim_front.png b/graphics/pokemon/beautifly/anim_front.png index de198b039640..018925f0213c 100644 Binary files a/graphics/pokemon/beautifly/anim_front.png and b/graphics/pokemon/beautifly/anim_front.png differ diff --git a/graphics/pokemon/beautifly/front.png b/graphics/pokemon/beautifly/front.png index 00f74fd73314..41d5bc0ca9fd 100644 Binary files a/graphics/pokemon/beautifly/front.png and b/graphics/pokemon/beautifly/front.png differ diff --git a/graphics/pokemon/beautifly/normal.pal b/graphics/pokemon/beautifly/normal.pal index 55c4b51ae357..5ae2f12e5975 100644 --- a/graphics/pokemon/beautifly/normal.pal +++ b/graphics/pokemon/beautifly/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 56 56 -176 160 160 -72 72 72 -16 16 16 -120 104 104 -96 88 88 -152 120 80 -248 200 72 -224 160 72 -168 48 80 -224 64 64 -232 216 216 -96 208 248 -0 176 240 +56 56 48 +168 168 160 +80 80 80 +0 0 0 +96 96 96 +104 96 96 +160 128 64 +248 208 40 +232 168 88 +160 72 64 +240 40 56 +224 216 216 +136 208 248 +80 160 248 248 248 232 diff --git a/graphics/pokemon/beedrill/anim_front.png b/graphics/pokemon/beedrill/anim_front.png index 2284c252f47e..05e48a56c9d0 100644 Binary files a/graphics/pokemon/beedrill/anim_front.png and b/graphics/pokemon/beedrill/anim_front.png differ diff --git a/graphics/pokemon/beedrill/front.png b/graphics/pokemon/beedrill/front.png index f6828a1f1f58..e1f22b5a7df5 100644 Binary files a/graphics/pokemon/beedrill/front.png and b/graphics/pokemon/beedrill/front.png differ diff --git a/graphics/pokemon/beedrill/normal.pal b/graphics/pokemon/beedrill/normal.pal index 75cf527c622b..5dcebed760f5 100644 --- a/graphics/pokemon/beedrill/normal.pal +++ b/graphics/pokemon/beedrill/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 112 152 -184 168 192 -248 248 248 +139 123 148 +189 172 197 +255 255 255 24 24 24 -216 200 240 -72 64 104 -120 88 32 -200 144 48 -248 224 136 -232 192 56 -120 32 40 -176 48 56 -224 120 104 -160 112 32 +222 205 246 +82 90 123 +131 74 0 +230 148 32 +255 246 164 +255 205 74 +156 0 8 +213 24 49 +255 148 106 +180 98 16 232 224 248 diff --git a/graphics/pokemon/beheeyem/anim_front.png b/graphics/pokemon/beheeyem/anim_front.png index 1ff4d1c5c406..f61201cbbd84 100644 Binary files a/graphics/pokemon/beheeyem/anim_front.png and b/graphics/pokemon/beheeyem/anim_front.png differ diff --git a/graphics/pokemon/beheeyem/front.png b/graphics/pokemon/beheeyem/front.png index 0e9579a44a7e..b8817b50b9cf 100644 Binary files a/graphics/pokemon/beheeyem/front.png and b/graphics/pokemon/beheeyem/front.png differ diff --git a/graphics/pokemon/beheeyem/normal.pal b/graphics/pokemon/beheeyem/normal.pal index 3194944afc30..57d9a9b39b61 100644 --- a/graphics/pokemon/beheeyem/normal.pal +++ b/graphics/pokemon/beheeyem/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 80 88 -200 144 128 -88 48 56 -160 104 96 +136 80 56 +216 152 120 +96 64 40 +160 96 72 16 16 16 40 40 40 -16 112 72 -64 192 120 -176 128 136 -112 96 112 -224 184 168 -120 40 24 -224 88 80 -248 232 88 -0 0 0 +32 96 40 +32 152 56 +192 160 120 +136 88 56 +224 192 160 +136 40 40 +200 0 0 +56 176 32 +224 200 0 diff --git a/graphics/pokemon/beldum/anim_front.png b/graphics/pokemon/beldum/anim_front.png index 158f4ede22f9..e8437e4403f8 100644 Binary files a/graphics/pokemon/beldum/anim_front.png and b/graphics/pokemon/beldum/anim_front.png differ diff --git a/graphics/pokemon/beldum/front.png b/graphics/pokemon/beldum/front.png index cebf0961d7cd..065d7a8548c0 100644 Binary files a/graphics/pokemon/beldum/front.png and b/graphics/pokemon/beldum/front.png differ diff --git a/graphics/pokemon/beldum/normal.pal b/graphics/pokemon/beldum/normal.pal index f9dc9c185ffd..a811b8fe9b97 100644 --- a/graphics/pokemon/beldum/normal.pal +++ b/graphics/pokemon/beldum/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 144 176 -40 72 96 -144 184 208 -64 112 144 +88 160 248 +64 72 128 +128 208 248 +56 96 184 16 16 16 -120 168 200 +72 128 216 248 104 104 -152 72 72 +136 72 72 248 248 248 -240 104 112 -216 216 216 -168 168 176 -96 104 112 -144 152 160 +216 72 80 +224 224 224 +200 200 200 +128 128 128 +176 176 176 0 0 0 diff --git a/graphics/pokemon/bellossom/anim_front.png b/graphics/pokemon/bellossom/anim_front.png index dd690aee8535..e46c11c0d20a 100644 Binary files a/graphics/pokemon/bellossom/anim_front.png and b/graphics/pokemon/bellossom/anim_front.png differ diff --git a/graphics/pokemon/bellossom/front.png b/graphics/pokemon/bellossom/front.png index eb57b8189e1d..c0b1a0e3d349 100644 Binary files a/graphics/pokemon/bellossom/front.png and b/graphics/pokemon/bellossom/front.png differ diff --git a/graphics/pokemon/bellossom/normal.pal b/graphics/pokemon/bellossom/normal.pal index a31ae17fd883..995ebad76b1f 100644 --- a/graphics/pokemon/bellossom/normal.pal +++ b/graphics/pokemon/bellossom/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -112 32 16 -232 128 72 +128 0 0 +240 104 0 16 16 16 -248 224 120 -192 160 72 -120 96 32 -208 64 32 +248 240 128 +208 168 72 +144 112 16 +208 32 0 80 120 32 -176 216 128 -152 168 96 +184 232 136 +144 192 64 248 248 248 -88 112 48 -24 64 24 -64 120 72 -104 168 96 +96 128 40 +8 96 56 +48 144 64 +72 208 80 diff --git a/graphics/pokemon/bellsprout/anim_front.png b/graphics/pokemon/bellsprout/anim_front.png index db998a093fe9..d148f8134313 100644 Binary files a/graphics/pokemon/bellsprout/anim_front.png and b/graphics/pokemon/bellsprout/anim_front.png differ diff --git a/graphics/pokemon/bellsprout/front.png b/graphics/pokemon/bellsprout/front.png index e58788796597..492c8b29f84e 100644 Binary files a/graphics/pokemon/bellsprout/front.png and b/graphics/pokemon/bellsprout/front.png differ diff --git a/graphics/pokemon/bellsprout/normal.pal b/graphics/pokemon/bellsprout/normal.pal index 5091b3e65fe1..3a2a60032c9e 100644 --- a/graphics/pokemon/bellsprout/normal.pal +++ b/graphics/pokemon/bellsprout/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 136 104 -248 248 176 -240 240 88 -96 80 64 -208 200 72 +148 106 65 +255 255 255 +255 238 164 +90 57 0 +230 189 131 248 248 248 16 16 16 -128 104 80 -136 64 56 -240 184 184 -48 104 48 -232 160 160 -152 208 112 -184 120 120 -96 168 104 +144 104 64 +115 32 0 +230 139 148 +65 106 16 +213 98 106 +123 197 82 +180 65 49 +98 164 65 diff --git a/graphics/pokemon/bibarel/anim_front.png b/graphics/pokemon/bibarel/anim_front.png index 6b826dfa387d..c9a7d403186e 100644 Binary files a/graphics/pokemon/bibarel/anim_front.png and b/graphics/pokemon/bibarel/anim_front.png differ diff --git a/graphics/pokemon/bibarel/front.png b/graphics/pokemon/bibarel/front.png index 648ce53af871..1963eb81a15e 100644 Binary files a/graphics/pokemon/bibarel/front.png and b/graphics/pokemon/bibarel/front.png differ diff --git a/graphics/pokemon/bibarel/normal.pal b/graphics/pokemon/bibarel/normal.pal index c8f3547b5bb3..71a5f280ae8d 100644 --- a/graphics/pokemon/bibarel/normal.pal +++ b/graphics/pokemon/bibarel/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 56 32 -192 136 64 +88 56 48 +184 128 72 16 16 16 -136 88 40 -240 208 136 -176 160 104 -192 176 176 +136 88 48 +224 208 152 +168 144 120 +192 192 176 248 248 248 -88 72 64 -232 136 128 -240 64 64 56 48 40 +232 64 32 +176 24 16 +64 56 48 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/bidoof/anim_front.png b/graphics/pokemon/bidoof/anim_front.png index 31677a01f2d8..23c31878132a 100644 Binary files a/graphics/pokemon/bidoof/anim_front.png and b/graphics/pokemon/bidoof/anim_front.png differ diff --git a/graphics/pokemon/bidoof/front.png b/graphics/pokemon/bidoof/front.png index ef0db513df5d..299e487496b3 100644 Binary files a/graphics/pokemon/bidoof/front.png and b/graphics/pokemon/bidoof/front.png differ diff --git a/graphics/pokemon/bidoof/normal.pal b/graphics/pokemon/bidoof/normal.pal index df2d84a3ec94..018af64139da 100644 --- a/graphics/pokemon/bidoof/normal.pal +++ b/graphics/pokemon/bidoof/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 48 24 -136 88 40 -184 128 80 -112 80 32 +64 48 16 +152 96 48 +192 136 64 +96 72 48 16 16 16 -184 184 120 -248 224 168 +200 184 128 +248 232 184 248 248 248 -80 64 56 -224 80 80 -160 48 48 -192 192 184 +88 64 40 +232 88 72 +200 184 128 +200 192 192 128 128 128 0 0 0 0 0 0 diff --git a/graphics/pokemon/bisharp/anim_front.png b/graphics/pokemon/bisharp/anim_front.png index c96d283504f9..d75b02373456 100644 Binary files a/graphics/pokemon/bisharp/anim_front.png and b/graphics/pokemon/bisharp/anim_front.png differ diff --git a/graphics/pokemon/bisharp/front.png b/graphics/pokemon/bisharp/front.png index 95d12bf26eef..003da831f914 100644 Binary files a/graphics/pokemon/bisharp/front.png and b/graphics/pokemon/bisharp/front.png differ diff --git a/graphics/pokemon/bisharp/normal.pal b/graphics/pokemon/bisharp/normal.pal index 58c6f51a1e77..c7ec7b46840b 100644 --- a/graphics/pokemon/bisharp/normal.pal +++ b/graphics/pokemon/bisharp/normal.pal @@ -4,16 +4,16 @@ JASC-PAL 152 208 160 80 64 32 64 64 64 -152 112 56 -248 200 88 +152 112 32 +248 200 64 16 16 16 -224 208 224 -144 128 128 -72 32 40 -168 152 152 -176 80 80 -120 40 48 -64 64 72 +224 224 224 +128 128 128 +104 24 24 +168 168 168 +192 48 48 +144 48 64 +64 64 80 96 96 112 -40 32 48 +40 40 48 248 248 248 diff --git a/graphics/pokemon/blastoise/anim_front.png b/graphics/pokemon/blastoise/anim_front.png index a9203ec43bb5..26034c90ed0c 100644 Binary files a/graphics/pokemon/blastoise/anim_front.png and b/graphics/pokemon/blastoise/anim_front.png differ diff --git a/graphics/pokemon/blastoise/back.png b/graphics/pokemon/blastoise/back.png index 7c800350da09..672de5497540 100644 Binary files a/graphics/pokemon/blastoise/back.png and b/graphics/pokemon/blastoise/back.png differ diff --git a/graphics/pokemon/blastoise/front.png b/graphics/pokemon/blastoise/front.png index 0522432ac05a..0419463d831c 100644 Binary files a/graphics/pokemon/blastoise/front.png and b/graphics/pokemon/blastoise/front.png differ diff --git a/graphics/pokemon/blastoise/normal.pal b/graphics/pokemon/blastoise/normal.pal index 1721e21c9e76..08c1997369f3 100644 --- a/graphics/pokemon/blastoise/normal.pal +++ b/graphics/pokemon/blastoise/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -80 120 176 -48 72 112 -168 184 224 -120 160 208 -72 72 72 -16 16 16 -200 200 208 -104 80 56 -144 144 144 -160 120 80 -248 248 248 -192 160 120 -248 224 192 -216 184 144 -136 96 64 +248 192 248 +32 98 172 +8 57 98 +148 172 230 +90 139 205 +74 74 74 +0 0 0 +205 205 213 +90 57 24 +148 148 148 +139 98 65 +255 255 255 +213 172 74 +246 213 156 +213 172 74 +156 136 80 diff --git a/graphics/pokemon/blastoise/shiny.pal b/graphics/pokemon/blastoise/shiny.pal index 505ad84942e2..ff27dbbdc5b2 100644 --- a/graphics/pokemon/blastoise/shiny.pal +++ b/graphics/pokemon/blastoise/shiny.pal @@ -15,5 +15,5 @@ JASC-PAL 248 248 248 184 176 96 240 224 192 -216 184 144 +189 180 90 112 144 72 diff --git a/graphics/pokemon/blaziken/anim_front.png b/graphics/pokemon/blaziken/anim_front.png index 8a2416fd3cf9..7e2077423039 100644 Binary files a/graphics/pokemon/blaziken/anim_front.png and b/graphics/pokemon/blaziken/anim_front.png differ diff --git a/graphics/pokemon/blaziken/front.png b/graphics/pokemon/blaziken/front.png index 21300b80f1be..5336ff9b32db 100644 Binary files a/graphics/pokemon/blaziken/front.png and b/graphics/pokemon/blaziken/front.png differ diff --git a/graphics/pokemon/blaziken/normal.pal b/graphics/pokemon/blaziken/normal.pal index 01614decbead..66f80cf62cfc 100644 --- a/graphics/pokemon/blaziken/normal.pal +++ b/graphics/pokemon/blaziken/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -216 64 40 +184 64 64 16 16 16 -216 184 136 -168 144 104 -232 120 96 -248 136 96 -248 240 216 -104 96 80 -112 40 32 -248 216 104 +192 176 144 +144 128 96 +240 96 96 +248 128 96 +224 224 176 +96 80 72 +128 40 40 +248 216 96 40 120 208 -208 168 96 +224 160 80 160 136 120 248 248 248 136 96 56 diff --git a/graphics/pokemon/blissey/anim_front.png b/graphics/pokemon/blissey/anim_front.png index 96a74a308790..81bbd243cc28 100644 Binary files a/graphics/pokemon/blissey/anim_front.png and b/graphics/pokemon/blissey/anim_front.png differ diff --git a/graphics/pokemon/blissey/front.png b/graphics/pokemon/blissey/front.png index 2a0263161742..629594beb48c 100644 Binary files a/graphics/pokemon/blissey/front.png and b/graphics/pokemon/blissey/front.png differ diff --git a/graphics/pokemon/blissey/normal.pal b/graphics/pokemon/blissey/normal.pal index 7fbdbf991686..19ff811eb2e6 100644 --- a/graphics/pokemon/blissey/normal.pal +++ b/graphics/pokemon/blissey/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 48 88 -128 80 112 -248 192 208 +136 56 64 +192 88 96 +248 192 200 16 16 16 -248 160 184 -200 120 152 +248 168 192 +216 128 160 248 248 248 56 40 80 -216 112 112 -80 112 112 -176 224 216 -128 176 176 +208 72 96 +104 104 104 +216 208 208 +176 176 176 248 160 184 0 0 0 0 0 0 diff --git a/graphics/pokemon/blitzle/anim_front.png b/graphics/pokemon/blitzle/anim_front.png index 62857f3fe582..73f4dcc8b3a6 100644 Binary files a/graphics/pokemon/blitzle/anim_front.png and b/graphics/pokemon/blitzle/anim_front.png differ diff --git a/graphics/pokemon/blitzle/front.png b/graphics/pokemon/blitzle/front.png index 4d4c121f7ab1..8eb3033d290a 100644 Binary files a/graphics/pokemon/blitzle/front.png and b/graphics/pokemon/blitzle/front.png differ diff --git a/graphics/pokemon/blitzle/normal.pal b/graphics/pokemon/blitzle/normal.pal index 242e3fa48cbd..543f4b4ad1fa 100644 --- a/graphics/pokemon/blitzle/normal.pal +++ b/graphics/pokemon/blitzle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 88 88 -232 224 216 -40 32 32 -48 176 208 -48 40 40 +80 80 80 +248 248 248 +24 32 32 +0 168 216 +40 40 40 16 16 16 -152 128 48 -240 216 88 -48 120 136 -64 56 64 -136 128 112 -200 192 176 -136 128 112 +136 112 32 +248 224 0 +0 88 152 +56 56 56 +120 120 120 +200 200 200 +120 120 120 0 0 0 0 0 0 diff --git a/graphics/pokemon/boldore/anim_front.png b/graphics/pokemon/boldore/anim_front.png index 5fe8379dc7f1..c0d5ec5e2759 100644 Binary files a/graphics/pokemon/boldore/anim_front.png and b/graphics/pokemon/boldore/anim_front.png differ diff --git a/graphics/pokemon/boldore/front.png b/graphics/pokemon/boldore/front.png index 63f20d0b2230..d5fef1c2fb1a 100644 Binary files a/graphics/pokemon/boldore/front.png and b/graphics/pokemon/boldore/front.png differ diff --git a/graphics/pokemon/boldore/normal.pal b/graphics/pokemon/boldore/normal.pal index b65f3a7746fb..ef0f4a880a07 100644 --- a/graphics/pokemon/boldore/normal.pal +++ b/graphics/pokemon/boldore/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -40 56 96 +40 56 104 16 16 16 -64 80 128 -24 32 56 -80 40 32 -224 80 56 -136 56 40 -240 112 80 -128 96 40 -168 120 48 -248 200 96 +64 80 136 +32 40 56 +112 48 32 +200 72 56 +168 40 24 +248 104 80 +88 64 32 +152 120 16 +248 200 64 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/bonsly/anim_front.png b/graphics/pokemon/bonsly/anim_front.png index c44a6eebe120..0744736800e4 100644 Binary files a/graphics/pokemon/bonsly/anim_front.png and b/graphics/pokemon/bonsly/anim_front.png differ diff --git a/graphics/pokemon/bonsly/front.png b/graphics/pokemon/bonsly/front.png index e038a994e6a8..328a0b031557 100644 Binary files a/graphics/pokemon/bonsly/front.png and b/graphics/pokemon/bonsly/front.png differ diff --git a/graphics/pokemon/bonsly/normal.pal b/graphics/pokemon/bonsly/normal.pal index 26e43311e5f8..86c2976ebfeb 100644 --- a/graphics/pokemon/bonsly/normal.pal +++ b/graphics/pokemon/bonsly/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 88 56 -72 128 80 -184 208 128 -72 184 112 +48 88 24 +88 136 88 +152 216 120 +72 192 64 0 0 0 -120 88 72 -64 48 32 -168 120 80 -200 160 104 -240 216 120 -216 184 48 -200 112 120 +128 104 64 +80 64 48 +168 128 88 +192 160 72 +248 232 120 +240 200 56 +160 64 72 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/bouffalant/anim_front.png b/graphics/pokemon/bouffalant/anim_front.png index 7e0fbb9e7bac..116a6eebe75d 100644 Binary files a/graphics/pokemon/bouffalant/anim_front.png and b/graphics/pokemon/bouffalant/anim_front.png differ diff --git a/graphics/pokemon/bouffalant/front.png b/graphics/pokemon/bouffalant/front.png index 57e397209eb0..e3562d81616d 100644 Binary files a/graphics/pokemon/bouffalant/front.png and b/graphics/pokemon/bouffalant/front.png differ diff --git a/graphics/pokemon/bouffalant/normal.pal b/graphics/pokemon/bouffalant/normal.pal index 721ce9202285..9dce91e75c0b 100644 --- a/graphics/pokemon/bouffalant/normal.pal +++ b/graphics/pokemon/bouffalant/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 56 48 -96 80 72 -16 16 16 -72 48 24 -152 104 56 -104 72 40 -128 104 88 -200 176 128 -232 192 80 -248 240 200 -160 128 56 -56 56 64 -112 96 112 -152 160 168 -200 176 128 +49 41 32 +74 65 49 +0 0 0 +74 49 24 +148 106 49 +106 74 41 +156 131 90 +246 213 156 +255 197 74 +255 246 205 +172 139 41 +57 57 65 +106 106 115 +156 164 164 +189 164 123 diff --git a/graphics/pokemon/braviary/anim_front.png b/graphics/pokemon/braviary/anim_front.png index c6c6194e69d1..7cfc167a5170 100644 Binary files a/graphics/pokemon/braviary/anim_front.png and b/graphics/pokemon/braviary/anim_front.png differ diff --git a/graphics/pokemon/braviary/front.png b/graphics/pokemon/braviary/front.png index 4e37d13a0de4..8efa81512e58 100644 Binary files a/graphics/pokemon/braviary/front.png and b/graphics/pokemon/braviary/front.png differ diff --git a/graphics/pokemon/braviary/normal.pal b/graphics/pokemon/braviary/normal.pal index a7c143390844..080f4c38e764 100644 --- a/graphics/pokemon/braviary/normal.pal +++ b/graphics/pokemon/braviary/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 24 24 -104 40 40 -160 56 56 +72 16 0 +112 32 32 +160 48 48 16 16 16 -56 40 56 -80 72 104 -176 168 136 -248 240 224 -240 224 184 -88 64 40 -176 168 152 -64 48 64 -168 128 72 -248 200 104 -32 104 176 +64 48 32 +80 80 112 +160 144 104 +224 224 224 +208 200 168 +96 80 32 +168 168 176 +48 48 72 +184 152 16 +232 208 88 +24 96 168 diff --git a/graphics/pokemon/breloom/anim_front.png b/graphics/pokemon/breloom/anim_front.png index 630ddd030652..7dd5f4869116 100644 Binary files a/graphics/pokemon/breloom/anim_front.png and b/graphics/pokemon/breloom/anim_front.png differ diff --git a/graphics/pokemon/breloom/front.png b/graphics/pokemon/breloom/front.png index 1556680ca6fc..ebfe14335fd8 100644 Binary files a/graphics/pokemon/breloom/front.png and b/graphics/pokemon/breloom/front.png differ diff --git a/graphics/pokemon/breloom/normal.pal b/graphics/pokemon/breloom/normal.pal index 105e8d9b6272..e51660a7a1d3 100644 --- a/graphics/pokemon/breloom/normal.pal +++ b/graphics/pokemon/breloom/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -48 80 40 -136 184 128 -96 144 88 -128 32 40 -240 120 128 -16 16 16 -200 64 80 +32 80 48 +128 176 112 +96 144 80 +128 32 56 +240 96 104 +0 0 0 +184 48 72 176 152 120 96 72 56 -208 184 144 -232 216 184 +216 184 136 +240 216 168 248 248 248 -153 96 121 -204 148 190 +168 16 0 +232 64 48 0 0 0 diff --git a/graphics/pokemon/bronzong/anim_front.png b/graphics/pokemon/bronzong/anim_front.png index 1eaf22900285..6ac7575edeb8 100644 Binary files a/graphics/pokemon/bronzong/anim_front.png and b/graphics/pokemon/bronzong/anim_front.png differ diff --git a/graphics/pokemon/bronzong/front.png b/graphics/pokemon/bronzong/front.png index 3d27ef4e588a..8ede6d683bd4 100644 Binary files a/graphics/pokemon/bronzong/front.png and b/graphics/pokemon/bronzong/front.png differ diff --git a/graphics/pokemon/bronzong/normal.pal b/graphics/pokemon/bronzong/normal.pal index d61b8f8c3640..68fd123fb42a 100644 --- a/graphics/pokemon/bronzong/normal.pal +++ b/graphics/pokemon/bronzong/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 120 120 -32 64 72 -136 216 200 -88 184 168 +32 112 128 +32 72 88 +112 208 232 +64 168 200 16 16 16 -80 152 144 -136 168 152 -152 208 192 -192 240 224 -56 96 96 -136 88 88 -224 96 88 +48 144 176 +136 168 176 +160 192 200 +184 208 216 +24 88 112 +152 104 120 +248 72 72 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/bronzor/anim_front.png b/graphics/pokemon/bronzor/anim_front.png index bdefc0d5a58d..e9d219a3896e 100644 Binary files a/graphics/pokemon/bronzor/anim_front.png and b/graphics/pokemon/bronzor/anim_front.png differ diff --git a/graphics/pokemon/bronzor/front.png b/graphics/pokemon/bronzor/front.png index 15b9a837216f..71a928cc3b4e 100644 Binary files a/graphics/pokemon/bronzor/front.png and b/graphics/pokemon/bronzor/front.png differ diff --git a/graphics/pokemon/bronzor/normal.pal b/graphics/pokemon/bronzor/normal.pal index 770eb182aa56..3bc74c7f7b5f 100644 --- a/graphics/pokemon/bronzor/normal.pal +++ b/graphics/pokemon/bronzor/normal.pal @@ -2,14 +2,14 @@ JASC-PAL 0100 16 152 208 160 -24 56 64 -48 136 152 -32 88 112 -88 176 184 +16 56 72 +40 128 160 +24 88 120 +64 160 192 16 16 16 -240 184 96 +248 216 112 144 176 136 -128 200 200 +96 192 224 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/budew/anim_front.png b/graphics/pokemon/budew/anim_front.png index 089eddb32fc2..1c8e447f5762 100644 Binary files a/graphics/pokemon/budew/anim_front.png and b/graphics/pokemon/budew/anim_front.png differ diff --git a/graphics/pokemon/budew/front.png b/graphics/pokemon/budew/front.png index 3b232c4b16f2..09a81838ad52 100644 Binary files a/graphics/pokemon/budew/front.png and b/graphics/pokemon/budew/front.png differ diff --git a/graphics/pokemon/budew/normal.pal b/graphics/pokemon/budew/normal.pal index 8db24b7b67e1..0e710e61d413 100644 --- a/graphics/pokemon/budew/normal.pal +++ b/graphics/pokemon/budew/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -112 160 56 +112 160 72 192 224 144 16 16 16 56 88 40 -128 200 80 -120 120 48 -232 232 104 -152 168 64 -40 72 32 -64 112 48 -80 144 64 +120 208 88 +144 128 0 +248 232 104 +224 184 56 +32 80 72 +48 120 96 +72 144 112 160 200 120 216 120 128 0 0 0 diff --git a/graphics/pokemon/buizel/anim_front.png b/graphics/pokemon/buizel/anim_front.png index 2cca44ba6671..3cdc6e3272a2 100644 Binary files a/graphics/pokemon/buizel/anim_front.png and b/graphics/pokemon/buizel/anim_front.png differ diff --git a/graphics/pokemon/buizel/front.png b/graphics/pokemon/buizel/front.png index 4794f1d58a7f..e52b77c57136 100644 Binary files a/graphics/pokemon/buizel/front.png and b/graphics/pokemon/buizel/front.png differ diff --git a/graphics/pokemon/buizel/normal.pal b/graphics/pokemon/buizel/normal.pal index dfab66d4b9bd..592c4dd20821 100644 --- a/graphics/pokemon/buizel/normal.pal +++ b/graphics/pokemon/buizel/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -168 80 40 -232 128 56 +168 88 32 +232 120 24 96 56 32 24 24 24 -64 112 128 -208 176 104 -104 192 232 -248 232 176 +32 96 160 +216 192 128 +96 184 224 +240 240 176 248 248 248 96 88 88 216 216 232 -248 208 56 -192 152 48 +248 216 0 +224 160 48 200 104 40 0 0 0 diff --git a/graphics/pokemon/bulbasaur/anim_front.png b/graphics/pokemon/bulbasaur/anim_front.png index c0a4f5d8fd0b..ad2a2f4eca0f 100644 Binary files a/graphics/pokemon/bulbasaur/anim_front.png and b/graphics/pokemon/bulbasaur/anim_front.png differ diff --git a/graphics/pokemon/bulbasaur/back.png b/graphics/pokemon/bulbasaur/back.png index c19e3c171318..a16779fc73d4 100644 Binary files a/graphics/pokemon/bulbasaur/back.png and b/graphics/pokemon/bulbasaur/back.png differ diff --git a/graphics/pokemon/bulbasaur/front.png b/graphics/pokemon/bulbasaur/front.png index 9c43bed4ab1c..cd7a485b97f2 100644 Binary files a/graphics/pokemon/bulbasaur/front.png and b/graphics/pokemon/bulbasaur/front.png differ diff --git a/graphics/pokemon/bulbasaur/normal.pal b/graphics/pokemon/bulbasaur/normal.pal index dea43adff989..2df2358d9e25 100644 --- a/graphics/pokemon/bulbasaur/normal.pal +++ b/graphics/pokemon/bulbasaur/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -208 248 184 +248 192 248 40 96 48 -112 184 112 +96 192 112 16 16 16 -72 136 72 -152 208 160 -40 80 64 -80 144 128 -160 216 184 -56 120 88 -96 184 144 -160 40 48 +56 144 72 +144 216 144 +24 72 72 +56 144 144 +128 232 192 +48 112 112 +96 208 176 +168 0 48 248 248 248 248 104 96 -104 64 88 -184 120 152 +160 48 16 +200 200 200 diff --git a/graphics/pokemon/bulbasaur/shiny.pal b/graphics/pokemon/bulbasaur/shiny.pal index fa53f927f4f6..30895158bd89 100644 --- a/graphics/pokemon/bulbasaur/shiny.pal +++ b/graphics/pokemon/bulbasaur/shiny.pal @@ -16,4 +16,4 @@ JASC-PAL 248 248 248 248 128 120 184 56 48 -248 128 120 +200 200 200 diff --git a/graphics/pokemon/buneary/anim_front.png b/graphics/pokemon/buneary/anim_front.png index 927b92507620..5d6bb799d94f 100644 Binary files a/graphics/pokemon/buneary/anim_front.png and b/graphics/pokemon/buneary/anim_front.png differ diff --git a/graphics/pokemon/buneary/front.png b/graphics/pokemon/buneary/front.png index f204cb0205eb..efb01359d430 100644 Binary files a/graphics/pokemon/buneary/front.png and b/graphics/pokemon/buneary/front.png differ diff --git a/graphics/pokemon/buneary/normal.pal b/graphics/pokemon/buneary/normal.pal index 3bab71a53237..499f3a9acfc0 100644 --- a/graphics/pokemon/buneary/normal.pal +++ b/graphics/pokemon/buneary/normal.pal @@ -10,8 +10,8 @@ JASC-PAL 16 16 16 136 88 56 112 64 72 -216 144 152 -168 96 112 +248 136 160 +192 88 120 248 248 248 56 40 24 0 0 0 diff --git a/graphics/pokemon/burmy/anim_front.png b/graphics/pokemon/burmy/anim_front.png index 5eaebd47e246..8047a7896048 100644 Binary files a/graphics/pokemon/burmy/anim_front.png and b/graphics/pokemon/burmy/anim_front.png differ diff --git a/graphics/pokemon/burmy/front.png b/graphics/pokemon/burmy/front.png index 9612600e4446..20e449da8702 100644 Binary files a/graphics/pokemon/burmy/front.png and b/graphics/pokemon/burmy/front.png differ diff --git a/graphics/pokemon/burmy/normal.pal b/graphics/pokemon/burmy/normal.pal index 6895b8b9c076..f7de8d3ec7f4 100644 --- a/graphics/pokemon/burmy/normal.pal +++ b/graphics/pokemon/burmy/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 40 48 -136 136 120 -56 56 56 -88 88 96 +41 41 49 +90 90 90 +57 57 65 +131 131 123 16 16 16 -32 64 32 -112 160 80 -72 120 48 -248 200 48 -160 128 24 -152 112 72 -88 64 40 +49 74 57 +123 156 74 +82 115 65 +255 213 74 +156 139 41 +139 106 74 +98 74 57 192 152 104 0 0 0 0 0 0 diff --git a/graphics/pokemon/burmy/sandy_cloak/anim_front.png b/graphics/pokemon/burmy/sandy_cloak/anim_front.png index 0819e2b4c367..32c1ceb46398 100644 Binary files a/graphics/pokemon/burmy/sandy_cloak/anim_front.png and b/graphics/pokemon/burmy/sandy_cloak/anim_front.png differ diff --git a/graphics/pokemon/burmy/sandy_cloak/front.png b/graphics/pokemon/burmy/sandy_cloak/front.png index 4dadea3dfa58..13f9c353ad0d 100644 Binary files a/graphics/pokemon/burmy/sandy_cloak/front.png and b/graphics/pokemon/burmy/sandy_cloak/front.png differ diff --git a/graphics/pokemon/burmy/sandy_cloak/normal.pal b/graphics/pokemon/burmy/sandy_cloak/normal.pal index 498bc6ef4093..e88cc7b0cd1a 100644 --- a/graphics/pokemon/burmy/sandy_cloak/normal.pal +++ b/graphics/pokemon/burmy/sandy_cloak/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 40 48 -136 136 120 -56 56 56 -88 88 96 +41 41 49 +132 132 123 +58 58 66 +90 90 90 16 16 16 -136 128 88 -240 216 144 -96 80 80 -176 152 104 -248 200 48 -160 128 24 -96 104 112 -128 152 152 +132 115 99 +214 197 115 +99 82 82 +173 148 115 +255 214 74 +156 140 41 +99 107 107 +132 140 140 240 216 144 0 0 0 diff --git a/graphics/pokemon/burmy/trash_cloak/anim_front.png b/graphics/pokemon/burmy/trash_cloak/anim_front.png index d24fb3427630..ec25c45f3676 100644 Binary files a/graphics/pokemon/burmy/trash_cloak/anim_front.png and b/graphics/pokemon/burmy/trash_cloak/anim_front.png differ diff --git a/graphics/pokemon/burmy/trash_cloak/front.png b/graphics/pokemon/burmy/trash_cloak/front.png index 585d07238171..39004627d58c 100644 Binary files a/graphics/pokemon/burmy/trash_cloak/front.png and b/graphics/pokemon/burmy/trash_cloak/front.png differ diff --git a/graphics/pokemon/burmy/trash_cloak/normal.pal b/graphics/pokemon/burmy/trash_cloak/normal.pal index 68533a009eea..3be75e1e9ee5 100644 --- a/graphics/pokemon/burmy/trash_cloak/normal.pal +++ b/graphics/pokemon/burmy/trash_cloak/normal.pal @@ -9,8 +9,8 @@ JASC-PAL 16 16 16 136 80 88 96 64 72 -192 104 112 -232 160 144 +176 104 120 +240 144 152 248 200 48 160 128 24 120 120 128 diff --git a/graphics/pokemon/butterfree/anim_front.png b/graphics/pokemon/butterfree/anim_front.png index 58e1f5e10658..27b059980170 100644 Binary files a/graphics/pokemon/butterfree/anim_front.png and b/graphics/pokemon/butterfree/anim_front.png differ diff --git a/graphics/pokemon/butterfree/front.png b/graphics/pokemon/butterfree/front.png index fe1b9ceea2aa..9f98ee7a355e 100644 Binary files a/graphics/pokemon/butterfree/front.png and b/graphics/pokemon/butterfree/front.png differ diff --git a/graphics/pokemon/butterfree/normal.pal b/graphics/pokemon/butterfree/normal.pal index e3eb5312f470..ab84ea009923 100644 --- a/graphics/pokemon/butterfree/normal.pal +++ b/graphics/pokemon/butterfree/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -40 32 56 -72 56 112 -144 128 168 -232 232 248 -96 88 144 -184 184 224 -216 88 80 -96 48 56 -232 168 160 +0 0 0 +49 49 82 +90 74 115 +131 131 189 +238 238 255 +115 98 172 +189 189 230 +230 98 131 +98 49 57 +255 156 180 48 48 80 -184 56 48 -56 128 160 -96 184 208 +222 49 49 +82 123 197 +106 189 205 240 248 248 diff --git a/graphics/pokemon/cacnea/anim_front.png b/graphics/pokemon/cacnea/anim_front.png index ede9c40b8ccc..5d0969d8fee3 100644 Binary files a/graphics/pokemon/cacnea/anim_front.png and b/graphics/pokemon/cacnea/anim_front.png differ diff --git a/graphics/pokemon/cacnea/front.png b/graphics/pokemon/cacnea/front.png index 5cf6efd8fb93..2fa30c173079 100644 Binary files a/graphics/pokemon/cacnea/front.png and b/graphics/pokemon/cacnea/front.png differ diff --git a/graphics/pokemon/cacnea/normal.pal b/graphics/pokemon/cacnea/normal.pal index d669aeda04fa..85eb8be5c04b 100644 --- a/graphics/pokemon/cacnea/normal.pal +++ b/graphics/pokemon/cacnea/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 0 176 232 16 16 16 -128 112 64 -248 224 144 -224 184 88 -48 80 32 -112 184 128 -72 144 88 -72 112 80 -152 192 112 -112 152 80 -184 224 160 -72 112 48 -40 40 40 +136 104 56 +248 224 56 +240 184 24 +32 80 0 +96 184 104 +48 144 72 +24 104 48 +144 192 80 +112 152 56 +184 216 120 +72 112 16 +0 56 16 248 248 248 0 0 0 diff --git a/graphics/pokemon/cacturne/anim_front.png b/graphics/pokemon/cacturne/anim_front.png index 3d391e864805..b9ab8625d1bf 100644 Binary files a/graphics/pokemon/cacturne/anim_front.png and b/graphics/pokemon/cacturne/anim_front.png differ diff --git a/graphics/pokemon/cacturne/front.png b/graphics/pokemon/cacturne/front.png index 97a1373a9de4..0e7587f6f71c 100644 Binary files a/graphics/pokemon/cacturne/front.png and b/graphics/pokemon/cacturne/front.png differ diff --git a/graphics/pokemon/cacturne/normal.pal b/graphics/pokemon/cacturne/normal.pal index 70cdb6a14310..2584eaab4a85 100644 --- a/graphics/pokemon/cacturne/normal.pal +++ b/graphics/pokemon/cacturne/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -32 80 32 +32 82 0 16 16 16 -144 176 112 -104 160 104 -56 96 64 -40 120 56 -24 104 32 -64 128 72 -168 208 144 -176 136 56 -80 80 80 -248 200 88 -128 160 104 -192 232 176 +139 189 98 +98 180 106 +74 115 16 +49 148 82 +24 106 32 +74 164 82 +164 213 115 +139 106 57 +82 82 82 +246 205 0 +123 164 98 +189 238 131 104 104 104 diff --git a/graphics/pokemon/camerupt/anim_front.png b/graphics/pokemon/camerupt/anim_front.png index 77f13e14ea03..394f96e9f11e 100644 Binary files a/graphics/pokemon/camerupt/anim_front.png and b/graphics/pokemon/camerupt/anim_front.png differ diff --git a/graphics/pokemon/camerupt/front.png b/graphics/pokemon/camerupt/front.png index 631f354164b8..9baaa98c7783 100644 Binary files a/graphics/pokemon/camerupt/front.png and b/graphics/pokemon/camerupt/front.png differ diff --git a/graphics/pokemon/camerupt/normal.pal b/graphics/pokemon/camerupt/normal.pal index d97bf53f39d0..13fea610636e 100644 --- a/graphics/pokemon/camerupt/normal.pal +++ b/graphics/pokemon/camerupt/normal.pal @@ -7,9 +7,9 @@ JASC-PAL 224 200 184 24 24 24 248 248 248 -112 56 40 -216 120 96 -176 88 56 +112 40 56 +232 104 72 +192 56 32 112 192 224 64 144 176 232 160 136 diff --git a/graphics/pokemon/carnivine/anim_front.png b/graphics/pokemon/carnivine/anim_front.png index fabccf9ac396..ef9f5a154835 100644 Binary files a/graphics/pokemon/carnivine/anim_front.png and b/graphics/pokemon/carnivine/anim_front.png differ diff --git a/graphics/pokemon/carnivine/front.png b/graphics/pokemon/carnivine/front.png index eb977bbaaaa5..2d26ac90484e 100644 Binary files a/graphics/pokemon/carnivine/front.png and b/graphics/pokemon/carnivine/front.png differ diff --git a/graphics/pokemon/carnivine/normal.pal b/graphics/pokemon/carnivine/normal.pal index b6bd7da6d4a4..6330295d72a1 100644 --- a/graphics/pokemon/carnivine/normal.pal +++ b/graphics/pokemon/carnivine/normal.pal @@ -8,12 +8,12 @@ JASC-PAL 136 160 88 16 16 16 248 248 248 -128 48 48 +152 32 72 56 24 16 32 56 24 -224 80 80 +224 40 24 64 104 48 -184 152 56 +192 152 48 112 104 40 -240 200 72 +240 200 48 96 104 72 diff --git a/graphics/pokemon/carracosta/anim_front.png b/graphics/pokemon/carracosta/anim_front.png index 42a2e992f27a..e93c3cb39ae1 100644 Binary files a/graphics/pokemon/carracosta/anim_front.png and b/graphics/pokemon/carracosta/anim_front.png differ diff --git a/graphics/pokemon/carracosta/front.png b/graphics/pokemon/carracosta/front.png index d064205ee12b..7297c4b24f39 100644 Binary files a/graphics/pokemon/carracosta/front.png and b/graphics/pokemon/carracosta/front.png differ diff --git a/graphics/pokemon/carracosta/normal.pal b/graphics/pokemon/carracosta/normal.pal index fd2b5d0422d4..8371a3af40c7 100644 --- a/graphics/pokemon/carracosta/normal.pal +++ b/graphics/pokemon/carracosta/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 48 64 -104 112 136 -16 16 16 -72 112 144 -88 152 208 -56 72 96 -72 72 96 -128 184 232 -72 88 120 -144 200 208 +40 48 56 +96 112 128 +0 0 0 +56 112 152 +72 144 208 +40 56 96 +64 72 88 +88 168 224 +80 88 104 +160 200 208 224 224 224 56 96 128 -0 0 0 +40 56 96 0 0 0 0 0 0 diff --git a/graphics/pokemon/carvanha/anim_front.png b/graphics/pokemon/carvanha/anim_front.png index 9f616c400926..d2383d1275b3 100644 Binary files a/graphics/pokemon/carvanha/anim_front.png and b/graphics/pokemon/carvanha/anim_front.png differ diff --git a/graphics/pokemon/carvanha/front.png b/graphics/pokemon/carvanha/front.png index f6a33d69ab83..b5b9ec4d1bfc 100644 Binary files a/graphics/pokemon/carvanha/front.png and b/graphics/pokemon/carvanha/front.png differ diff --git a/graphics/pokemon/carvanha/normal.pal b/graphics/pokemon/carvanha/normal.pal index 6ac96e80069e..d12d83d8d0c2 100644 --- a/graphics/pokemon/carvanha/normal.pal +++ b/graphics/pokemon/carvanha/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 80 56 +96 72 56 248 248 248 16 16 16 -248 232 120 -176 144 88 -224 184 96 -104 48 56 -160 72 72 -24 64 136 -48 112 168 -16 40 80 -224 72 88 -248 120 128 -200 200 232 -211 139 161 +232 200 96 +200 168 40 +216 184 56 +120 56 56 +184 56 64 +56 80 144 +80 112 184 +40 56 80 +240 64 72 +248 128 128 +160 184 208 +224 104 120 diff --git a/graphics/pokemon/cascoon/anim_front.png b/graphics/pokemon/cascoon/anim_front.png index f5165017ede0..c1eb0e0d8b2a 100644 Binary files a/graphics/pokemon/cascoon/anim_front.png and b/graphics/pokemon/cascoon/anim_front.png differ diff --git a/graphics/pokemon/cascoon/front.png b/graphics/pokemon/cascoon/front.png index 9f5867c09938..54081095cc1d 100644 Binary files a/graphics/pokemon/cascoon/front.png and b/graphics/pokemon/cascoon/front.png differ diff --git a/graphics/pokemon/cascoon/normal.pal b/graphics/pokemon/cascoon/normal.pal index 1134f1eeffd2..5dcc0e9e2838 100644 --- a/graphics/pokemon/cascoon/normal.pal +++ b/graphics/pokemon/cascoon/normal.pal @@ -9,11 +9,11 @@ JASC-PAL 240 216 240 184 152 184 168 168 176 -168 72 80 -112 40 40 +184 48 80 +136 0 32 232 224 248 -240 128 128 -144 8 40 +248 104 128 +128 0 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/caterpie/anim_front.png b/graphics/pokemon/caterpie/anim_front.png index 877ed1ac186d..1762f778d004 100644 Binary files a/graphics/pokemon/caterpie/anim_front.png and b/graphics/pokemon/caterpie/anim_front.png differ diff --git a/graphics/pokemon/caterpie/front.png b/graphics/pokemon/caterpie/front.png index 44b30824c2a8..7ee00f7b364d 100644 Binary files a/graphics/pokemon/caterpie/front.png and b/graphics/pokemon/caterpie/front.png differ diff --git a/graphics/pokemon/caterpie/normal.pal b/graphics/pokemon/caterpie/normal.pal index 1c8bf2bb0f29..76bf98f547e5 100644 --- a/graphics/pokemon/caterpie/normal.pal +++ b/graphics/pokemon/caterpie/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 56 32 -240 104 64 -248 176 152 -192 80 48 -72 120 56 -168 216 152 -16 16 16 -56 88 40 -112 200 88 -96 160 72 -248 224 128 -216 184 72 -136 120 40 -104 184 80 -248 224 128 +123 57 74 +255 123 65 +255 180 57 +255 65 65 +32 123 74 +172 246 65 +0 0 0 +24 90 65 +106 213 49 +49 172 65 +246 238 139 +213 189 131 +123 131 74 +72 200 40 +240 232 136 diff --git a/graphics/pokemon/celebi/anim_front.png b/graphics/pokemon/celebi/anim_front.png index d6ffb512f9e8..e6b312384c16 100644 Binary files a/graphics/pokemon/celebi/anim_front.png and b/graphics/pokemon/celebi/anim_front.png differ diff --git a/graphics/pokemon/celebi/front.png b/graphics/pokemon/celebi/front.png index d88004802eb1..492be76a9e53 100644 Binary files a/graphics/pokemon/celebi/front.png and b/graphics/pokemon/celebi/front.png differ diff --git a/graphics/pokemon/celebi/normal.pal b/graphics/pokemon/celebi/normal.pal index 9a17d2a1eb0a..a5aef9a6d1b8 100644 --- a/graphics/pokemon/celebi/normal.pal +++ b/graphics/pokemon/celebi/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 248 160 176 -104 152 80 -144 200 112 +112 160 48 +160 216 80 16 16 16 -40 144 192 -104 184 216 -40 104 160 -72 96 56 -200 240 224 -216 248 184 -160 192 152 +80 136 168 +136 176 200 +0 96 176 +72 112 32 +192 216 224 +248 248 216 +176 192 88 248 248 248 -184 224 168 +216 232 144 104 112 128 176 176 184 -163 106 106 +192 0 0 diff --git a/graphics/pokemon/chandelure/anim_front.png b/graphics/pokemon/chandelure/anim_front.png index 97a34c8fd86f..847bc7815aa8 100644 Binary files a/graphics/pokemon/chandelure/anim_front.png and b/graphics/pokemon/chandelure/anim_front.png differ diff --git a/graphics/pokemon/chandelure/front.png b/graphics/pokemon/chandelure/front.png index 66032c7a954f..4dfc4d1898cc 100644 Binary files a/graphics/pokemon/chandelure/front.png and b/graphics/pokemon/chandelure/front.png differ diff --git a/graphics/pokemon/chandelure/normal.pal b/graphics/pokemon/chandelure/normal.pal index ca8912667e3b..aa3fc312f7c4 100644 --- a/graphics/pokemon/chandelure/normal.pal +++ b/graphics/pokemon/chandelure/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -72 56 136 -96 96 176 -136 184 224 +64 40 176 +112 80 224 +168 160 240 16 16 16 -48 40 40 -72 72 72 -184 208 240 +48 48 48 +88 88 88 +192 208 208 248 248 248 120 136 136 -240 200 48 -72 72 72 +248 224 32 +0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/chansey/anim_front.png b/graphics/pokemon/chansey/anim_front.png index d83d55c92925..ca17d1a70053 100644 Binary files a/graphics/pokemon/chansey/anim_front.png and b/graphics/pokemon/chansey/anim_front.png differ diff --git a/graphics/pokemon/chansey/front.png b/graphics/pokemon/chansey/front.png index 2c2ab8541555..4dd2e2fe277c 100644 Binary files a/graphics/pokemon/chansey/front.png and b/graphics/pokemon/chansey/front.png differ diff --git a/graphics/pokemon/chansey/normal.pal b/graphics/pokemon/chansey/normal.pal index 9e745b501982..698af3b6168e 100644 --- a/graphics/pokemon/chansey/normal.pal +++ b/graphics/pokemon/chansey/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -168 120 160 -112 72 104 -248 216 240 -248 200 232 -136 72 80 -208 128 136 -248 152 176 +230 123 131 +139 65 65 +255 230 230 +255 213 222 +139 65 65 +238 123 123 +246 164 156 248 248 248 16 16 16 -56 136 184 -216 168 192 -184 160 144 -112 96 80 -232 216 208 +139 65 65 +246 164 180 +172 164 115 +115 106 74 +230 222 189 0 0 0 diff --git a/graphics/pokemon/charizard/anim_front.png b/graphics/pokemon/charizard/anim_front.png index 4c74163507d4..f3b62d8fd530 100644 Binary files a/graphics/pokemon/charizard/anim_front.png and b/graphics/pokemon/charizard/anim_front.png differ diff --git a/graphics/pokemon/charizard/back.png b/graphics/pokemon/charizard/back.png index 60f010405d85..6782e1e752a6 100644 Binary files a/graphics/pokemon/charizard/back.png and b/graphics/pokemon/charizard/back.png differ diff --git a/graphics/pokemon/charizard/front.png b/graphics/pokemon/charizard/front.png index afb68a6e036c..a6792d551ca1 100644 Binary files a/graphics/pokemon/charizard/front.png and b/graphics/pokemon/charizard/front.png differ diff --git a/graphics/pokemon/charizard/normal.pal b/graphics/pokemon/charizard/normal.pal index f9e888220759..db32d4324cd4 100644 --- a/graphics/pokemon/charizard/normal.pal +++ b/graphics/pokemon/charizard/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 232 64 32 -96 56 32 +128 48 24 240 160 16 -248 184 136 +232 176 88 248 224 104 -184 104 64 +205 82 65 16 16 16 -240 144 64 -0 72 80 -0 112 136 +238 131 41 +8 64 80 +32 112 144 200 200 200 248 248 248 -168 96 104 -248 224 152 -216 184 112 +0 128 248 +238 222 123 +238 180 90 diff --git a/graphics/pokemon/charizard/shiny.pal b/graphics/pokemon/charizard/shiny.pal index 2b40c3c208b4..dce3f7832a17 100644 --- a/graphics/pokemon/charizard/shiny.pal +++ b/graphics/pokemon/charizard/shiny.pal @@ -14,6 +14,6 @@ JASC-PAL 184 32 64 200 200 200 248 248 248 -208 80 16 +192 0 0 216 216 184 184 184 168 diff --git a/graphics/pokemon/charmander/anim_front.png b/graphics/pokemon/charmander/anim_front.png index 9788e3d3ee30..66904b580d8a 100644 Binary files a/graphics/pokemon/charmander/anim_front.png and b/graphics/pokemon/charmander/anim_front.png differ diff --git a/graphics/pokemon/charmander/front.png b/graphics/pokemon/charmander/front.png index f25d5032097f..eb0a9590d997 100644 Binary files a/graphics/pokemon/charmander/front.png and b/graphics/pokemon/charmander/front.png differ diff --git a/graphics/pokemon/charmander/normal.pal b/graphics/pokemon/charmander/normal.pal index c1dfa5299c2f..d365db83085c 100644 --- a/graphics/pokemon/charmander/normal.pal +++ b/graphics/pokemon/charmander/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 112 72 -112 64 40 -240 152 96 -232 192 160 +216 80 56 +136 40 0 +248 144 64 +248 192 96 16 16 16 -32 104 128 -72 136 168 +16 64 136 +48 168 232 248 248 248 248 208 80 232 56 24 240 160 0 -168 88 128 -208 184 152 -248 232 192 +192 96 104 +224 200 136 +248 232 200 176 176 176 diff --git a/graphics/pokemon/charmeleon/anim_front.png b/graphics/pokemon/charmeleon/anim_front.png index 0d1206a9ff1b..570b506692ab 100644 Binary files a/graphics/pokemon/charmeleon/anim_front.png and b/graphics/pokemon/charmeleon/anim_front.png differ diff --git a/graphics/pokemon/charmeleon/front.png b/graphics/pokemon/charmeleon/front.png index 9e963a684c81..bdbd577e223d 100644 Binary files a/graphics/pokemon/charmeleon/front.png and b/graphics/pokemon/charmeleon/front.png differ diff --git a/graphics/pokemon/charmeleon/normal.pal b/graphics/pokemon/charmeleon/normal.pal index 28e262a7a15c..c72de3517e78 100644 --- a/graphics/pokemon/charmeleon/normal.pal +++ b/graphics/pokemon/charmeleon/normal.pal @@ -5,15 +5,15 @@ JASC-PAL 248 208 80 248 160 0 232 56 24 -112 40 32 -184 72 48 -232 104 80 +144 32 16 +208 56 56 +248 80 72 16 16 16 104 104 104 248 248 248 176 176 176 -96 136 160 -232 152 136 -232 200 184 -224 184 160 -192 152 120 +0 88 248 +248 128 104 +232 200 176 +200 168 120 +184 152 104 diff --git a/graphics/pokemon/chatot/anim_front.png b/graphics/pokemon/chatot/anim_front.png index e769ef2d6a6d..a7b9fa5bcf02 100644 Binary files a/graphics/pokemon/chatot/anim_front.png and b/graphics/pokemon/chatot/anim_front.png differ diff --git a/graphics/pokemon/chatot/front.png b/graphics/pokemon/chatot/front.png index cb40baa3d418..41d53718e40c 100644 Binary files a/graphics/pokemon/chatot/front.png and b/graphics/pokemon/chatot/front.png differ diff --git a/graphics/pokemon/chatot/normal.pal b/graphics/pokemon/chatot/normal.pal index 35758891c147..0588ebcb5058 100644 --- a/graphics/pokemon/chatot/normal.pal +++ b/graphics/pokemon/chatot/normal.pal @@ -8,12 +8,12 @@ JASC-PAL 0 0 0 224 240 240 160 176 176 -232 120 136 -160 64 72 -40 136 200 -24 64 104 -40 104 144 -168 128 48 -240 200 104 -40 104 56 +224 120 152 +192 24 80 +40 144 200 +32 48 120 +40 96 176 +160 136 32 +240 208 64 +32 96 16 0 0 0 diff --git a/graphics/pokemon/cherrim/normal/anim_front.png b/graphics/pokemon/cherrim/normal/anim_front.png index 5b10c48d1d9c..591396454727 100644 Binary files a/graphics/pokemon/cherrim/normal/anim_front.png and b/graphics/pokemon/cherrim/normal/anim_front.png differ diff --git a/graphics/pokemon/cherrim/normal/normal.pal b/graphics/pokemon/cherrim/normal/normal.pal index b04e7c0e6df4..1a91fdc24cbc 100644 --- a/graphics/pokemon/cherrim/normal/normal.pal +++ b/graphics/pokemon/cherrim/normal/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 48 64 -200 88 112 -216 136 136 +120 40 72 +200 80 120 +216 112 144 16 16 16 -152 64 80 +160 56 96 16 80 16 48 120 48 56 168 56 -96 192 96 -96 56 112 -152 120 176 -120 88 152 -56 32 72 +88 192 88 +104 64 120 +152 120 184 +128 88 168 +72 40 64 0 0 0 0 0 0 diff --git a/graphics/pokemon/cherrim/sunshine/front.png b/graphics/pokemon/cherrim/sunshine/front.png index 42c7893893e3..8c65c561c6d3 100644 Binary files a/graphics/pokemon/cherrim/sunshine/front.png and b/graphics/pokemon/cherrim/sunshine/front.png differ diff --git a/graphics/pokemon/cherrim/sunshine/normal.pal b/graphics/pokemon/cherrim/sunshine/normal.pal index 434b8ec780d7..a90df821074b 100644 --- a/graphics/pokemon/cherrim/sunshine/normal.pal +++ b/graphics/pokemon/cherrim/sunshine/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -88 48 56 -152 80 88 -248 192 184 +144 32 64 +200 56 104 +248 192 224 16 16 16 -192 120 128 -248 168 160 +224 128 168 +248 160 200 248 96 128 248 224 240 -120 104 40 -208 176 80 -248 224 136 +152 104 16 +216 176 88 +248 224 112 40 112 48 48 160 56 200 56 104 diff --git a/graphics/pokemon/cherubi/anim_front.png b/graphics/pokemon/cherubi/anim_front.png index ed64f3405240..c8908ed7757c 100644 Binary files a/graphics/pokemon/cherubi/anim_front.png and b/graphics/pokemon/cherubi/anim_front.png differ diff --git a/graphics/pokemon/cherubi/front.png b/graphics/pokemon/cherubi/front.png index 6aaa22267568..75b735e577a5 100644 Binary files a/graphics/pokemon/cherubi/front.png and b/graphics/pokemon/cherubi/front.png differ diff --git a/graphics/pokemon/cherubi/normal.pal b/graphics/pokemon/cherubi/normal.pal index f001b9d03dbe..1fe243b8cc76 100644 --- a/graphics/pokemon/cherubi/normal.pal +++ b/graphics/pokemon/cherubi/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 112 48 -88 200 96 -24 72 32 -56 168 56 -48 136 48 +57 115 74 +115 205 90 +49 65 82 +82 164 74 +65 148 65 16 16 16 -112 16 56 -184 64 88 -232 96 120 -144 32 88 -56 32 32 -248 168 152 -248 248 248 +106 57 74 +172 65 106 +222 98 131 +131 49 82 +65 49 49 +255 139 172 +255 255 255 0 0 0 0 0 0 diff --git a/graphics/pokemon/chikorita/anim_front.png b/graphics/pokemon/chikorita/anim_front.png index 038f845b6b81..ebba2d94f30d 100644 Binary files a/graphics/pokemon/chikorita/anim_front.png and b/graphics/pokemon/chikorita/anim_front.png differ diff --git a/graphics/pokemon/chikorita/front.png b/graphics/pokemon/chikorita/front.png index 40200bfa0a5a..687e8ee3639f 100644 Binary files a/graphics/pokemon/chikorita/front.png and b/graphics/pokemon/chikorita/front.png differ diff --git a/graphics/pokemon/chikorita/normal.pal b/graphics/pokemon/chikorita/normal.pal index 9cc099b62a6d..0cda9b7dd968 100644 --- a/graphics/pokemon/chikorita/normal.pal +++ b/graphics/pokemon/chikorita/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -0 176 232 -72 136 72 -32 88 32 -128 208 112 -88 168 80 -8 8 8 -80 96 56 -128 152 88 -200 232 144 -240 248 168 -176 184 112 +192 192 248 +80 136 32 +64 96 24 +144 208 96 +104 176 72 +0 0 0 +96 96 56 +152 152 88 +224 232 168 +240 240 208 +184 200 120 192 192 192 248 248 248 -96 32 56 -152 56 64 -200 104 112 +96 64 88 +192 40 40 +232 120 120 diff --git a/graphics/pokemon/chimchar/anim_front.png b/graphics/pokemon/chimchar/anim_front.png index 86c266d0d96f..4e6879f524d9 100644 Binary files a/graphics/pokemon/chimchar/anim_front.png and b/graphics/pokemon/chimchar/anim_front.png differ diff --git a/graphics/pokemon/chimchar/front.png b/graphics/pokemon/chimchar/front.png index 7d09db46518f..1a0e606a8758 100644 Binary files a/graphics/pokemon/chimchar/front.png and b/graphics/pokemon/chimchar/front.png differ diff --git a/graphics/pokemon/chimchar/normal.pal b/graphics/pokemon/chimchar/normal.pal index 8a65f6fa1dff..42ac104af666 100644 --- a/graphics/pokemon/chimchar/normal.pal +++ b/graphics/pokemon/chimchar/normal.pal @@ -2,10 +2,10 @@ JASC-PAL 0100 16 152 208 160 -152 88 40 -208 120 40 -104 56 8 -240 152 56 +176 104 40 +216 128 0 +120 64 16 +248 168 80 16 16 16 144 120 80 208 176 120 diff --git a/graphics/pokemon/chimecho/anim_front.png b/graphics/pokemon/chimecho/anim_front.png index 01cd83e59031..991130d1b990 100644 Binary files a/graphics/pokemon/chimecho/anim_front.png and b/graphics/pokemon/chimecho/anim_front.png differ diff --git a/graphics/pokemon/chimecho/front.png b/graphics/pokemon/chimecho/front.png index 19d3b806eaa4..7d9992580895 100644 Binary files a/graphics/pokemon/chimecho/front.png and b/graphics/pokemon/chimecho/front.png differ diff --git a/graphics/pokemon/chimecho/normal.pal b/graphics/pokemon/chimecho/normal.pal index 698f769f8218..3b3e590f2486 100644 --- a/graphics/pokemon/chimecho/normal.pal +++ b/graphics/pokemon/chimecho/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 120 80 +160 112 80 248 248 248 -248 232 168 +248 224 144 16 16 16 -240 208 112 -200 168 120 +248 208 88 +224 160 72 80 104 112 -208 232 248 -160 200 224 -152 72 88 -120 152 168 -232 104 120 -128 40 56 -240 208 112 +192 224 248 +152 192 224 +176 64 88 +104 144 176 +240 80 120 +120 40 64 +248 208 88 0 0 0 diff --git a/graphics/pokemon/chinchou/anim_front.png b/graphics/pokemon/chinchou/anim_front.png index 25d4fd97e7ab..370a5a99d32e 100644 Binary files a/graphics/pokemon/chinchou/anim_front.png and b/graphics/pokemon/chinchou/anim_front.png differ diff --git a/graphics/pokemon/chinchou/front.png b/graphics/pokemon/chinchou/front.png index ac68315e37ef..348090d34855 100644 Binary files a/graphics/pokemon/chinchou/front.png and b/graphics/pokemon/chinchou/front.png differ diff --git a/graphics/pokemon/chinchou/normal.pal b/graphics/pokemon/chinchou/normal.pal index 12749df0d8fb..a2d9c8aca000 100644 --- a/graphics/pokemon/chinchou/normal.pal +++ b/graphics/pokemon/chinchou/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 104 184 -64 80 144 -96 136 224 -192 168 88 -240 224 128 -200 208 240 -24 40 80 -16 16 16 -128 120 80 -80 72 40 -248 224 184 -232 200 96 -136 160 232 -184 96 96 +88 112 192 +40 80 144 +120 152 216 +184 152 32 +240 216 56 +184 192 232 +8 40 88 +0 0 0 +128 96 80 +80 40 24 +248 232 128 +216 184 48 +144 160 224 +176 0 0 0 0 0 diff --git a/graphics/pokemon/chingling/anim_front.png b/graphics/pokemon/chingling/anim_front.png index 738e9cb5429b..d564a3fa2988 100644 Binary files a/graphics/pokemon/chingling/anim_front.png and b/graphics/pokemon/chingling/anim_front.png differ diff --git a/graphics/pokemon/chingling/front.png b/graphics/pokemon/chingling/front.png index 89060a363876..d8092f393e8f 100644 Binary files a/graphics/pokemon/chingling/front.png and b/graphics/pokemon/chingling/front.png differ diff --git a/graphics/pokemon/chingling/normal.pal b/graphics/pokemon/chingling/normal.pal index 46e51c7f1971..06fd1ce75ecd 100644 --- a/graphics/pokemon/chingling/normal.pal +++ b/graphics/pokemon/chingling/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 32 24 -168 56 56 -232 88 88 -200 216 232 -144 160 184 -16 16 16 -80 72 40 -232 208 64 -176 152 48 -248 224 120 -128 112 48 -248 248 248 +106 57 49 +172 82 49 +230 98 82 +213 213 246 +164 164 205 +0 0 0 +98 82 74 +255 213 90 +189 156 74 +255 230 148 +131 106 74 +255 255 255 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/cinccino/anim_front.png b/graphics/pokemon/cinccino/anim_front.png index 971054fb0c5e..013385d78d45 100644 Binary files a/graphics/pokemon/cinccino/anim_front.png and b/graphics/pokemon/cinccino/anim_front.png differ diff --git a/graphics/pokemon/cinccino/front.png b/graphics/pokemon/cinccino/front.png index 9c1b5c6971e5..12d953daf51f 100644 Binary files a/graphics/pokemon/cinccino/front.png and b/graphics/pokemon/cinccino/front.png differ diff --git a/graphics/pokemon/cinccino/normal.pal b/graphics/pokemon/cinccino/normal.pal index f2cc37dc8383..fcc63c5f629f 100644 --- a/graphics/pokemon/cinccino/normal.pal +++ b/graphics/pokemon/cinccino/normal.pal @@ -1,17 +1,17 @@ JASC-PAL 0100 16 -153 210 164 -189 180 180 -254 255 255 -125 130 153 -201 185 196 -65 67 81 -173 90 133 +152 208 160 +184 176 176 +248 248 248 +128 120 112 +184 168 152 +80 72 64 +208 80 80 16 16 16 -237 113 132 -184 197 237 -58 45 43 +232 128 128 +216 200 216 +0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/clamperl/anim_front.png b/graphics/pokemon/clamperl/anim_front.png index 54d2e38cba55..d857bf65d774 100644 Binary files a/graphics/pokemon/clamperl/anim_front.png and b/graphics/pokemon/clamperl/anim_front.png differ diff --git a/graphics/pokemon/clamperl/front.png b/graphics/pokemon/clamperl/front.png index 2c93e5903070..dab2d9881d39 100644 Binary files a/graphics/pokemon/clamperl/front.png and b/graphics/pokemon/clamperl/front.png differ diff --git a/graphics/pokemon/clamperl/normal.pal b/graphics/pokemon/clamperl/normal.pal index eb3fcb764663..ee5b68988d9c 100644 --- a/graphics/pokemon/clamperl/normal.pal +++ b/graphics/pokemon/clamperl/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 96 160 -24 56 96 -104 144 208 +56 96 184 +56 56 96 +104 128 224 16 16 16 248 248 248 -184 208 248 +192 216 208 128 136 136 -56 96 152 -136 72 80 -112 184 224 -232 136 144 +48 64 120 +112 72 88 +112 152 208 +232 120 152 248 168 168 -200 232 248 -152 216 248 +184 216 248 +144 192 248 0 0 0 diff --git a/graphics/pokemon/claydol/anim_front.png b/graphics/pokemon/claydol/anim_front.png index c327f949f6e7..bada994ffcc4 100644 Binary files a/graphics/pokemon/claydol/anim_front.png and b/graphics/pokemon/claydol/anim_front.png differ diff --git a/graphics/pokemon/claydol/front.png b/graphics/pokemon/claydol/front.png index e4adecf65e2e..cc2f1c16e7bb 100644 Binary files a/graphics/pokemon/claydol/front.png and b/graphics/pokemon/claydol/front.png differ diff --git a/graphics/pokemon/claydol/normal.pal b/graphics/pokemon/claydol/normal.pal index 6583cb9ad353..c36497707698 100644 --- a/graphics/pokemon/claydol/normal.pal +++ b/graphics/pokemon/claydol/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 48 48 -112 96 96 +72 64 56 +112 104 104 16 16 16 88 80 80 -32 32 24 -208 192 200 -168 152 168 +40 40 32 +192 192 208 +152 144 168 248 248 248 -120 48 64 -232 128 136 -224 96 104 -248 160 160 -248 224 144 -176 160 112 -56 48 48 +120 32 72 +248 128 152 +232 88 128 +248 168 200 +248 208 144 +160 144 104 +72 64 56 diff --git a/graphics/pokemon/clefable/anim_front.png b/graphics/pokemon/clefable/anim_front.png index c351630708f6..279172929aba 100644 Binary files a/graphics/pokemon/clefable/anim_front.png and b/graphics/pokemon/clefable/anim_front.png differ diff --git a/graphics/pokemon/clefable/back.png b/graphics/pokemon/clefable/back.png index 2d7cbbdef7a2..11b37f35f842 100644 Binary files a/graphics/pokemon/clefable/back.png and b/graphics/pokemon/clefable/back.png differ diff --git a/graphics/pokemon/clefable/front.png b/graphics/pokemon/clefable/front.png index a4bc1111d055..2ac06ddfc3da 100644 Binary files a/graphics/pokemon/clefable/front.png and b/graphics/pokemon/clefable/front.png differ diff --git a/graphics/pokemon/clefable/normal.pal b/graphics/pokemon/clefable/normal.pal index 6b40f550cc28..242352f05361 100644 --- a/graphics/pokemon/clefable/normal.pal +++ b/graphics/pokemon/clefable/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 80 64 +82 65 57 16 16 16 -136 120 104 -136 88 80 -168 120 104 -240 208 200 -208 176 168 -184 112 136 -104 72 80 -224 144 160 +123 106 98 +139 74 82 +222 98 98 +255 197 180 +238 148 148 +189 90 123 +82 49 74 +213 123 164 248 248 248 -128 128 128 -184 152 144 -136 72 80 +131 131 131 +213 123 139 +222 57 90 104 72 80 diff --git a/graphics/pokemon/clefable/shiny.pal b/graphics/pokemon/clefable/shiny.pal index 11daecf72403..0ab423cdcb7b 100644 --- a/graphics/pokemon/clefable/shiny.pal +++ b/graphics/pokemon/clefable/shiny.pal @@ -15,5 +15,5 @@ JASC-PAL 248 248 248 128 128 128 208 136 152 -184 96 96 +222 57 90 80 48 72 diff --git a/graphics/pokemon/clefairy/anim_front.png b/graphics/pokemon/clefairy/anim_front.png index 20b777edcacd..5f7e02a6e0bf 100644 Binary files a/graphics/pokemon/clefairy/anim_front.png and b/graphics/pokemon/clefairy/anim_front.png differ diff --git a/graphics/pokemon/clefairy/front.png b/graphics/pokemon/clefairy/front.png index b0606bf7b644..4e959bd4ee16 100644 Binary files a/graphics/pokemon/clefairy/front.png and b/graphics/pokemon/clefairy/front.png differ diff --git a/graphics/pokemon/clefairy/normal.pal b/graphics/pokemon/clefairy/normal.pal index b8106ff81f0b..ac2d66f749de 100644 --- a/graphics/pokemon/clefairy/normal.pal +++ b/graphics/pokemon/clefairy/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 80 88 -184 128 136 -248 216 224 -136 104 72 -88 56 40 -176 144 112 +156 82 82 +230 123 123 +255 213 189 +115 74 57 +90 49 32 +156 131 115 16 16 16 -240 176 184 -144 144 144 -248 248 248 -216 136 192 -64 120 168 -176 72 136 +255 172 172 +148 148 148 +255 255 255 +238 65 57 +148 148 148 +176 56 40 0 0 0 0 0 0 diff --git a/graphics/pokemon/cleffa/anim_front.png b/graphics/pokemon/cleffa/anim_front.png index cda348916ed2..2f3e541f7e2c 100644 Binary files a/graphics/pokemon/cleffa/anim_front.png and b/graphics/pokemon/cleffa/anim_front.png differ diff --git a/graphics/pokemon/cleffa/front.png b/graphics/pokemon/cleffa/front.png index 876b912b2f59..a8d989f263c2 100644 Binary files a/graphics/pokemon/cleffa/front.png and b/graphics/pokemon/cleffa/front.png differ diff --git a/graphics/pokemon/cleffa/normal.pal b/graphics/pokemon/cleffa/normal.pal index 386cfca653ea..d6dafd7980d9 100644 --- a/graphics/pokemon/cleffa/normal.pal +++ b/graphics/pokemon/cleffa/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 112 112 -248 208 184 -232 176 168 -200 144 144 +168 80 80 +248 208 200 +248 160 160 +200 128 128 80 48 40 -96 72 48 -144 112 72 +88 48 32 +112 72 56 16 16 16 -192 160 120 +152 128 112 248 248 248 248 112 80 248 152 120 -200 96 96 +192 64 64 0 0 0 0 0 0 diff --git a/graphics/pokemon/cloyster/anim_front.png b/graphics/pokemon/cloyster/anim_front.png index aec8a00ee8a2..bce084388f96 100644 Binary files a/graphics/pokemon/cloyster/anim_front.png and b/graphics/pokemon/cloyster/anim_front.png differ diff --git a/graphics/pokemon/cloyster/front.png b/graphics/pokemon/cloyster/front.png index deae322b0b2a..6c4a65eb699f 100644 Binary files a/graphics/pokemon/cloyster/front.png and b/graphics/pokemon/cloyster/front.png differ diff --git a/graphics/pokemon/cloyster/normal.pal b/graphics/pokemon/cloyster/normal.pal index c7ee3b9697ac..725b26809660 100644 --- a/graphics/pokemon/cloyster/normal.pal +++ b/graphics/pokemon/cloyster/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 96 136 -176 168 216 -144 136 192 -56 48 72 +123 82 131 +213 189 238 +172 123 189 +74 32 82 16 16 16 -192 192 192 -48 48 72 +197 197 197 +65 65 65 248 248 248 -144 160 176 -88 96 112 -40 32 56 -112 112 168 -64 64 120 -128 112 192 -144 120 168 +148 148 148 +98 98 98 +82 41 90 +131 90 164 +106 65 131 +164 123 189 +120 96 176 diff --git a/graphics/pokemon/cobalion/anim_front.png b/graphics/pokemon/cobalion/anim_front.png index 4ed828e5bd58..556761a0db39 100644 Binary files a/graphics/pokemon/cobalion/anim_front.png and b/graphics/pokemon/cobalion/anim_front.png differ diff --git a/graphics/pokemon/cobalion/front.png b/graphics/pokemon/cobalion/front.png index 4d6ef8f2f0d3..c57b709d3636 100644 Binary files a/graphics/pokemon/cobalion/front.png and b/graphics/pokemon/cobalion/front.png differ diff --git a/graphics/pokemon/cobalion/normal.pal b/graphics/pokemon/cobalion/normal.pal index d93596c7cf56..6d392558769d 100644 --- a/graphics/pokemon/cobalion/normal.pal +++ b/graphics/pokemon/cobalion/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -104 72 48 -160 112 80 +153 204 153 +128 104 64 +168 144 56 0 0 0 -224 168 112 -40 32 32 -16 72 80 -56 56 56 -32 160 176 -104 96 88 +224 200 120 +32 32 32 +16 80 88 +80 80 80 +24 168 176 +104 104 104 248 248 248 -112 144 152 -40 112 120 -160 200 216 -88 88 88 -176 168 160 +136 176 192 +48 120 136 +192 216 232 +96 96 96 +184 184 184 diff --git a/graphics/pokemon/cofagrigus/anim_front.png b/graphics/pokemon/cofagrigus/anim_front.png index e473ae3171b5..5724f0e22429 100644 Binary files a/graphics/pokemon/cofagrigus/anim_front.png and b/graphics/pokemon/cofagrigus/anim_front.png differ diff --git a/graphics/pokemon/cofagrigus/front.png b/graphics/pokemon/cofagrigus/front.png index 69a27ba08881..c48dbdaa4450 100644 Binary files a/graphics/pokemon/cofagrigus/front.png and b/graphics/pokemon/cofagrigus/front.png differ diff --git a/graphics/pokemon/cofagrigus/normal.pal b/graphics/pokemon/cofagrigus/normal.pal index 263c7a5d0e6b..e52a4c18c408 100644 --- a/graphics/pokemon/cofagrigus/normal.pal +++ b/graphics/pokemon/cofagrigus/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -56 64 56 +56 56 64 16 16 16 -88 144 176 -40 64 80 -72 104 120 +48 144 168 +40 72 72 +32 104 120 248 248 248 -248 208 112 -176 136 80 -112 88 64 -232 120 104 -128 56 56 +248 184 48 +176 128 48 +104 88 32 +248 48 32 +152 32 64 120 120 120 176 184 176 0 0 0 diff --git a/graphics/pokemon/combee/anim_front.png b/graphics/pokemon/combee/anim_front.png index 2c07de33979e..cc85ef4c9b7d 100644 Binary files a/graphics/pokemon/combee/anim_front.png and b/graphics/pokemon/combee/anim_front.png differ diff --git a/graphics/pokemon/combee/anim_frontf.png b/graphics/pokemon/combee/anim_frontf.png deleted file mode 100644 index 45acd64e3a7f..000000000000 Binary files a/graphics/pokemon/combee/anim_frontf.png and /dev/null differ diff --git a/graphics/pokemon/combee/back.png b/graphics/pokemon/combee/back.png index 1366cb1f835c..89dfa4f0ce31 100644 Binary files a/graphics/pokemon/combee/back.png and b/graphics/pokemon/combee/back.png differ diff --git a/graphics/pokemon/combee/front.png b/graphics/pokemon/combee/front.png index ab591053b356..4c1368df4b8c 100644 Binary files a/graphics/pokemon/combee/front.png and b/graphics/pokemon/combee/front.png differ diff --git a/graphics/pokemon/combee/normal.pal b/graphics/pokemon/combee/normal.pal index badc688613f0..ae331aac6e8d 100644 --- a/graphics/pokemon/combee/normal.pal +++ b/graphics/pokemon/combee/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -56 56 56 -96 112 120 -168 192 216 -216 224 232 -232 128 64 -112 80 16 -248 184 64 -160 120 40 -232 72 64 +56 56 64 +80 88 112 +192 192 216 +240 240 248 +240 112 0 +104 88 0 +248 208 8 +168 128 0 +248 208 0 176 88 32 200 144 40 -0 0 0 +248 208 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/combee/normalf.pal b/graphics/pokemon/combee/normalf.pal new file mode 100644 index 000000000000..045177137379 --- /dev/null +++ b/graphics/pokemon/combee/normalf.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +56 56 64 +80 88 112 +192 192 216 +240 240 248 +240 112 0 +104 88 0 +248 208 8 +168 128 0 +224 56 56 +176 88 32 +200 144 40 +240 112 136 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/combee/shiny.pal b/graphics/pokemon/combee/shiny.pal index 91e9abeeeaaa..8fe9e48ce4b6 100644 --- a/graphics/pokemon/combee/shiny.pal +++ b/graphics/pokemon/combee/shiny.pal @@ -11,9 +11,9 @@ JASC-PAL 104 56 0 248 136 88 160 56 32 -152 40 40 +248 136 88 176 40 16 200 88 48 -0 0 0 +248 136 88 0 0 0 0 0 0 diff --git a/graphics/pokemon/combee/shinyf.pal b/graphics/pokemon/combee/shinyf.pal new file mode 100644 index 000000000000..54b0e92cf466 --- /dev/null +++ b/graphics/pokemon/combee/shinyf.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +56 56 64 +80 88 112 +184 184 208 +232 232 248 +232 88 32 +104 56 0 +248 136 88 +160 56 32 +248 0 0 +176 40 16 +200 88 48 +192 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/combusken/anim_front.png b/graphics/pokemon/combusken/anim_front.png index c26350450d1f..96cdd9d798af 100644 Binary files a/graphics/pokemon/combusken/anim_front.png and b/graphics/pokemon/combusken/anim_front.png differ diff --git a/graphics/pokemon/combusken/front.png b/graphics/pokemon/combusken/front.png index c587f1f2c002..2c2b6a5a1b2e 100644 Binary files a/graphics/pokemon/combusken/front.png and b/graphics/pokemon/combusken/front.png differ diff --git a/graphics/pokemon/combusken/normal.pal b/graphics/pokemon/combusken/normal.pal index 2a84f18b07ad..d97e531d7c38 100644 --- a/graphics/pokemon/combusken/normal.pal +++ b/graphics/pokemon/combusken/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -216 104 48 +216 88 40 24 24 24 -248 144 88 -144 48 8 -144 112 56 -208 184 96 -248 224 160 -160 80 48 +248 120 72 +152 48 16 +152 112 40 +232 184 72 +232 216 112 +208 48 48 248 248 248 104 104 112 216 216 200 -176 160 144 +152 136 128 88 72 72 -136 120 104 +128 112 104 0 0 0 diff --git a/graphics/pokemon/conkeldurr/anim_front.png b/graphics/pokemon/conkeldurr/anim_front.png index b021370d208c..1e15ffd29622 100644 Binary files a/graphics/pokemon/conkeldurr/anim_front.png and b/graphics/pokemon/conkeldurr/anim_front.png differ diff --git a/graphics/pokemon/conkeldurr/front.png b/graphics/pokemon/conkeldurr/front.png index 447368c02b23..bfa9221f99f0 100644 Binary files a/graphics/pokemon/conkeldurr/front.png and b/graphics/pokemon/conkeldurr/front.png differ diff --git a/graphics/pokemon/conkeldurr/normal.pal b/graphics/pokemon/conkeldurr/normal.pal index 0be98550a926..e9986fc14206 100644 --- a/graphics/pokemon/conkeldurr/normal.pal +++ b/graphics/pokemon/conkeldurr/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 96 72 -72 56 56 -176 144 112 +136 104 88 +88 56 32 +192 152 112 16 16 16 -88 48 64 -184 104 160 -136 72 104 +112 48 80 +192 104 176 +152 72 128 136 144 152 104 104 112 48 48 56 248 248 248 -104 32 48 -168 56 72 +112 40 64 +168 40 64 0 0 0 0 0 0 diff --git a/graphics/pokemon/corphish/anim_front.png b/graphics/pokemon/corphish/anim_front.png index 8ea96591039c..7cd114961ede 100644 Binary files a/graphics/pokemon/corphish/anim_front.png and b/graphics/pokemon/corphish/anim_front.png differ diff --git a/graphics/pokemon/corphish/front.png b/graphics/pokemon/corphish/front.png index 13c9c09d8e39..3a78a7b0113d 100644 Binary files a/graphics/pokemon/corphish/front.png and b/graphics/pokemon/corphish/front.png differ diff --git a/graphics/pokemon/corphish/normal.pal b/graphics/pokemon/corphish/normal.pal index 4d12bad512bd..f1e3e95786f1 100644 --- a/graphics/pokemon/corphish/normal.pal +++ b/graphics/pokemon/corphish/normal.pal @@ -3,14 +3,14 @@ JASC-PAL 16 152 208 160 16 16 16 -160 64 40 -240 184 160 -224 96 56 -112 48 24 -232 136 96 -208 176 144 -176 152 120 -240 224 192 +160 56 32 +248 152 144 +224 80 8 +104 56 64 +240 112 80 +200 176 144 +168 152 128 +224 224 200 248 248 248 128 104 80 200 200 200 diff --git a/graphics/pokemon/corsola/anim_front.png b/graphics/pokemon/corsola/anim_front.png index ef828b5e2cad..b3b460e69246 100644 Binary files a/graphics/pokemon/corsola/anim_front.png and b/graphics/pokemon/corsola/anim_front.png differ diff --git a/graphics/pokemon/corsola/front.png b/graphics/pokemon/corsola/front.png index 30ab14423e61..b82fbceb5e48 100644 Binary files a/graphics/pokemon/corsola/front.png and b/graphics/pokemon/corsola/front.png differ diff --git a/graphics/pokemon/corsola/normal.pal b/graphics/pokemon/corsola/normal.pal index 5e2e3434585e..4f899432f95e 100644 --- a/graphics/pokemon/corsola/normal.pal +++ b/graphics/pokemon/corsola/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 72 88 -248 192 184 +200 32 72 +248 200 224 16 16 16 -248 152 160 -216 104 120 -248 120 136 -96 56 72 +248 160 192 +224 96 144 +240 120 184 +144 0 32 224 224 232 40 48 96 -176 224 232 -144 80 104 -144 184 200 -96 128 144 +216 224 240 +232 80 104 +168 192 216 +88 120 168 144 80 104 0 0 0 diff --git a/graphics/pokemon/cottonee/anim_front.png b/graphics/pokemon/cottonee/anim_front.png index 9daa48775ba3..d2abe0c67a90 100644 Binary files a/graphics/pokemon/cottonee/anim_front.png and b/graphics/pokemon/cottonee/anim_front.png differ diff --git a/graphics/pokemon/cottonee/front.png b/graphics/pokemon/cottonee/front.png index b66802def900..0e807ff42e0f 100644 Binary files a/graphics/pokemon/cottonee/front.png and b/graphics/pokemon/cottonee/front.png differ diff --git a/graphics/pokemon/cottonee/normal.pal b/graphics/pokemon/cottonee/normal.pal index f42407dfe2cb..3b42ec646a87 100644 --- a/graphics/pokemon/cottonee/normal.pal +++ b/graphics/pokemon/cottonee/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 160 136 -216 232 200 -112 120 104 -80 80 88 +165 173 132 +222 230 197 +123 132 107 +74 90 82 16 16 16 -232 232 240 -192 192 208 -56 120 72 -40 80 64 -80 184 104 -184 96 48 -248 248 248 -224 136 88 +255 255 255 +206 206 214 +66 123 66 +25 74 25 +82 165 74 +173 107 16 +255 255 255 +230 132 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/cradily/anim_front.png b/graphics/pokemon/cradily/anim_front.png index 370899f39340..b12899e3eabb 100644 Binary files a/graphics/pokemon/cradily/anim_front.png and b/graphics/pokemon/cradily/anim_front.png differ diff --git a/graphics/pokemon/cradily/front.png b/graphics/pokemon/cradily/front.png index c2e3e952d1b7..0280dedf9bf9 100644 Binary files a/graphics/pokemon/cradily/front.png and b/graphics/pokemon/cradily/front.png differ diff --git a/graphics/pokemon/cradily/normal.pal b/graphics/pokemon/cradily/normal.pal index b6b3ca6609aa..fb26a40186fd 100644 --- a/graphics/pokemon/cradily/normal.pal +++ b/graphics/pokemon/cradily/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -128 56 64 +144 64 96 248 208 232 -232 184 168 -208 112 120 -16 16 16 -192 128 120 -128 192 128 -64 104 48 -168 216 168 -96 152 88 -232 200 104 -240 216 168 -184 152 80 -136 112 48 +248 152 168 +200 96 144 +0 0 0 +232 104 136 +120 192 112 +56 104 80 +160 224 136 +80 152 88 +240 208 64 +248 240 120 +200 160 48 +160 120 16 0 0 0 diff --git a/graphics/pokemon/cranidos/anim_front.png b/graphics/pokemon/cranidos/anim_front.png index 4c40d1e27c33..4cfea0dd4a68 100644 Binary files a/graphics/pokemon/cranidos/anim_front.png and b/graphics/pokemon/cranidos/anim_front.png differ diff --git a/graphics/pokemon/cranidos/front.png b/graphics/pokemon/cranidos/front.png index f0d534a60e4e..000533a92450 100644 Binary files a/graphics/pokemon/cranidos/front.png and b/graphics/pokemon/cranidos/front.png differ diff --git a/graphics/pokemon/cranidos/normal.pal b/graphics/pokemon/cranidos/normal.pal index 8cac83fe8695..73f9d7b45b3d 100644 --- a/graphics/pokemon/cranidos/normal.pal +++ b/graphics/pokemon/cranidos/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 136 144 +112 120 136 248 248 248 -208 208 216 -40 72 96 +208 216 224 +40 72 112 16 16 16 -64 104 136 -72 136 184 -64 80 96 -168 184 192 -128 144 160 -120 184 216 -104 112 128 -240 120 112 -176 56 48 -178 103 103 +56 96 152 +72 128 184 +72 88 104 +160 176 184 +128 144 152 +112 168 232 +96 112 128 +200 96 96 +168 64 64 +168 16 0 diff --git a/graphics/pokemon/crawdaunt/anim_front.png b/graphics/pokemon/crawdaunt/anim_front.png index 83573963d267..a9a6ce7fb1fe 100644 Binary files a/graphics/pokemon/crawdaunt/anim_front.png and b/graphics/pokemon/crawdaunt/anim_front.png differ diff --git a/graphics/pokemon/crawdaunt/front.png b/graphics/pokemon/crawdaunt/front.png index 127f889b707c..ede486992dcc 100644 Binary files a/graphics/pokemon/crawdaunt/front.png and b/graphics/pokemon/crawdaunt/front.png differ diff --git a/graphics/pokemon/crawdaunt/normal.pal b/graphics/pokemon/crawdaunt/normal.pal index 731f1a5cf48f..114ecd22ad94 100644 --- a/graphics/pokemon/crawdaunt/normal.pal +++ b/graphics/pokemon/crawdaunt/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -192 160 88 -120 96 48 +240 152 24 +120 88 48 248 248 248 -16 16 16 -248 224 128 -112 32 24 -176 56 48 -232 88 72 -224 152 152 -232 208 192 -184 168 144 -24 72 104 -48 128 176 -112 96 80 -104 168 232 +0 0 0 +248 224 88 +136 40 40 +200 48 48 +232 80 80 +240 136 136 +216 216 216 +176 168 160 +24 64 104 +64 112 168 +96 88 88 +80 152 240 diff --git a/graphics/pokemon/cresselia/anim_front.png b/graphics/pokemon/cresselia/anim_front.png index 8e84b970ef41..23e1a2ab93f0 100644 Binary files a/graphics/pokemon/cresselia/anim_front.png and b/graphics/pokemon/cresselia/anim_front.png differ diff --git a/graphics/pokemon/cresselia/front.png b/graphics/pokemon/cresselia/front.png index 88b7dba0623a..56a6f004f710 100644 Binary files a/graphics/pokemon/cresselia/front.png and b/graphics/pokemon/cresselia/front.png differ diff --git a/graphics/pokemon/cresselia/normal.pal b/graphics/pokemon/cresselia/normal.pal index 187fdee2b0d6..190705d9b04a 100644 --- a/graphics/pokemon/cresselia/normal.pal +++ b/graphics/pokemon/cresselia/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 88 64 +104 80 48 16 16 16 -240 224 208 -184 144 88 -240 200 136 -136 72 104 -184 104 144 -216 160 184 -88 48 80 -240 216 208 +248 232 184 +168 144 88 +248 208 112 +136 64 120 +192 88 152 +208 136 200 +80 56 88 +224 192 232 248 248 248 -136 168 208 -104 128 160 -64 88 112 +128 144 240 +80 104 176 +56 64 120 192 176 176 diff --git a/graphics/pokemon/croagunk/anim_front.png b/graphics/pokemon/croagunk/anim_front.png index 3d4d81f7c396..84c7edb09a5e 100644 Binary files a/graphics/pokemon/croagunk/anim_front.png and b/graphics/pokemon/croagunk/anim_front.png differ diff --git a/graphics/pokemon/croagunk/front.png b/graphics/pokemon/croagunk/front.png index 1c34d1791852..6725ae39e7f7 100644 Binary files a/graphics/pokemon/croagunk/front.png and b/graphics/pokemon/croagunk/front.png differ diff --git a/graphics/pokemon/croagunk/normal.pal b/graphics/pokemon/croagunk/normal.pal index 5ebbaf6e13f5..99a60ec65de3 100644 --- a/graphics/pokemon/croagunk/normal.pal +++ b/graphics/pokemon/croagunk/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 72 120 +72 72 136 16 16 16 128 152 248 -72 120 192 -88 80 80 -56 48 48 -248 192 72 -168 128 32 -128 72 32 -232 136 80 -232 192 136 +104 112 208 +80 80 80 +48 48 64 +248 208 24 +176 136 24 +152 56 56 +232 128 64 +240 200 160 248 248 248 -184 176 168 -136 120 120 +176 176 192 +120 120 136 56 56 80 diff --git a/graphics/pokemon/crobat/anim_front.png b/graphics/pokemon/crobat/anim_front.png index 653b3517003b..abf3b22be46e 100644 Binary files a/graphics/pokemon/crobat/anim_front.png and b/graphics/pokemon/crobat/anim_front.png differ diff --git a/graphics/pokemon/crobat/front.png b/graphics/pokemon/crobat/front.png index 8c7b36bbfd71..e0b69bad7856 100644 Binary files a/graphics/pokemon/crobat/front.png and b/graphics/pokemon/crobat/front.png differ diff --git a/graphics/pokemon/crobat/normal.pal b/graphics/pokemon/crobat/normal.pal index 24271759090f..c8b2897700ca 100644 --- a/graphics/pokemon/crobat/normal.pal +++ b/graphics/pokemon/crobat/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -72 40 96 -104 72 128 -160 128 192 +96 24 120 +120 72 152 +176 120 200 16 16 16 -40 72 88 -56 112 120 -128 96 168 -80 160 176 -176 152 40 -248 216 88 -184 24 24 +8 64 104 +32 104 144 +160 88 200 +72 152 184 +208 144 0 +248 208 0 +176 0 0 104 104 104 160 160 160 248 248 248 diff --git a/graphics/pokemon/croconaw/anim_front.png b/graphics/pokemon/croconaw/anim_front.png index 27a97b7a1337..bdd5340fd5ed 100644 Binary files a/graphics/pokemon/croconaw/anim_front.png and b/graphics/pokemon/croconaw/anim_front.png differ diff --git a/graphics/pokemon/croconaw/front.png b/graphics/pokemon/croconaw/front.png index 9876f80eb3b0..b1cd5b3b64f1 100644 Binary files a/graphics/pokemon/croconaw/front.png and b/graphics/pokemon/croconaw/front.png differ diff --git a/graphics/pokemon/croconaw/normal.pal b/graphics/pokemon/croconaw/normal.pal index be301424b4b7..95fb4e4502b2 100644 --- a/graphics/pokemon/croconaw/normal.pal +++ b/graphics/pokemon/croconaw/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 24 48 -248 168 160 +128 0 8 +248 136 128 16 16 16 -240 72 96 -176 48 72 -48 88 104 -72 144 152 -112 208 216 -176 224 216 +240 80 88 +200 40 56 +32 96 120 +32 136 184 +104 200 200 +136 232 224 248 248 248 -128 40 56 -232 120 120 -88 72 32 -192 168 96 -248 224 128 +120 0 0 +224 64 32 +104 80 0 +200 184 96 +248 224 136 diff --git a/graphics/pokemon/crustle/anim_front.png b/graphics/pokemon/crustle/anim_front.png index 91434933af41..8ff103bcf8e0 100644 Binary files a/graphics/pokemon/crustle/anim_front.png and b/graphics/pokemon/crustle/anim_front.png differ diff --git a/graphics/pokemon/crustle/front.png b/graphics/pokemon/crustle/front.png index eb37ec8914e5..44fa563a2821 100644 Binary files a/graphics/pokemon/crustle/front.png and b/graphics/pokemon/crustle/front.png differ diff --git a/graphics/pokemon/crustle/normal.pal b/graphics/pokemon/crustle/normal.pal index 8e676bf9ec26..371a48520c1c 100644 --- a/graphics/pokemon/crustle/normal.pal +++ b/graphics/pokemon/crustle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 88 72 -160 128 112 -80 64 56 -248 168 80 +136 104 72 +168 152 128 +88 64 48 +240 184 56 16 16 16 -176 120 64 -80 40 32 -184 88 64 -216 128 96 +192 136 24 +104 40 24 +232 128 72 +248 184 120 248 248 248 56 56 56 -136 64 48 -56 40 40 +184 80 48 +56 48 32 0 0 0 0 0 0 diff --git a/graphics/pokemon/cryogonal/anim_front.png b/graphics/pokemon/cryogonal/anim_front.png index 30063cb47f70..52361173111d 100644 Binary files a/graphics/pokemon/cryogonal/anim_front.png and b/graphics/pokemon/cryogonal/anim_front.png differ diff --git a/graphics/pokemon/cryogonal/front.png b/graphics/pokemon/cryogonal/front.png index 245b8c270f64..e3cd4c10f1fe 100644 Binary files a/graphics/pokemon/cryogonal/front.png and b/graphics/pokemon/cryogonal/front.png differ diff --git a/graphics/pokemon/cryogonal/normal.pal b/graphics/pokemon/cryogonal/normal.pal index cd61187d7d1b..10063fa01ced 100644 --- a/graphics/pokemon/cryogonal/normal.pal +++ b/graphics/pokemon/cryogonal/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 88 152 -80 120 184 +48 64 160 +80 96 192 16 16 16 -136 152 208 +120 136 192 248 248 248 -40 56 80 +40 48 88 96 128 208 -184 200 232 -152 192 232 -208 224 248 -88 160 224 -128 208 248 -40 104 184 +160 176 208 +136 168 248 +200 216 248 +96 160 232 +128 208 232 +64 104 240 32 64 160 0 0 0 diff --git a/graphics/pokemon/cubchoo/anim_front.png b/graphics/pokemon/cubchoo/anim_front.png index 51cec38309f4..3350209b843c 100644 Binary files a/graphics/pokemon/cubchoo/anim_front.png and b/graphics/pokemon/cubchoo/anim_front.png differ diff --git a/graphics/pokemon/cubchoo/front.png b/graphics/pokemon/cubchoo/front.png index a0844fd4b538..82e5e9194ea2 100644 Binary files a/graphics/pokemon/cubchoo/front.png and b/graphics/pokemon/cubchoo/front.png differ diff --git a/graphics/pokemon/cubchoo/normal.pal b/graphics/pokemon/cubchoo/normal.pal index 8715e5d726e9..9d187e7ec936 100644 --- a/graphics/pokemon/cubchoo/normal.pal +++ b/graphics/pokemon/cubchoo/normal.pal @@ -8,12 +8,12 @@ JASC-PAL 16 16 16 40 56 88 72 112 160 -120 192 240 -56 56 56 +120 168 224 +56 72 72 248 248 248 -72 144 208 -104 96 96 -152 168 224 +96 128 200 +136 144 144 +192 192 200 232 240 248 152 224 248 0 0 0 diff --git a/graphics/pokemon/cubone/anim_front.png b/graphics/pokemon/cubone/anim_front.png index 48605d96d129..5b98b8d8abe2 100644 Binary files a/graphics/pokemon/cubone/anim_front.png and b/graphics/pokemon/cubone/anim_front.png differ diff --git a/graphics/pokemon/cubone/front.png b/graphics/pokemon/cubone/front.png index c321969d191e..ddf94b1a049d 100644 Binary files a/graphics/pokemon/cubone/front.png and b/graphics/pokemon/cubone/front.png differ diff --git a/graphics/pokemon/cubone/normal.pal b/graphics/pokemon/cubone/normal.pal index 8d8b3ad56b8e..8613b94a2263 100644 --- a/graphics/pokemon/cubone/normal.pal +++ b/graphics/pokemon/cubone/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -128 136 144 +139 131 106 248 248 248 -16 16 16 -192 200 200 -80 80 96 -152 120 88 -208 168 104 -80 64 48 -192 168 144 -240 224 176 -216 232 232 +41 41 41 +197 197 213 +82 82 57 +148 106 90 +197 156 74 +82 57 16 +200 168 136 +240 208 176 +224 224 232 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/cyndaquil/anim_front.png b/graphics/pokemon/cyndaquil/anim_front.png index a0d3affc4ed0..bfdf5a6223ac 100644 Binary files a/graphics/pokemon/cyndaquil/anim_front.png and b/graphics/pokemon/cyndaquil/anim_front.png differ diff --git a/graphics/pokemon/cyndaquil/front.png b/graphics/pokemon/cyndaquil/front.png index 8ca05c4ff169..448a51f8a91c 100644 Binary files a/graphics/pokemon/cyndaquil/front.png and b/graphics/pokemon/cyndaquil/front.png differ diff --git a/graphics/pokemon/cyndaquil/normal.pal b/graphics/pokemon/cyndaquil/normal.pal index bd9296ca7528..f5182e5eed41 100644 --- a/graphics/pokemon/cyndaquil/normal.pal +++ b/graphics/pokemon/cyndaquil/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 56 40 -232 88 48 -32 64 72 -48 112 120 -104 144 144 -240 152 40 +216 0 0 +248 56 0 +16 56 80 +48 104 128 +96 168 184 +248 152 0 16 16 16 -248 200 56 +248 216 16 16 40 48 -168 144 96 -248 216 152 -112 88 48 +200 168 80 +248 240 160 +120 96 32 216 176 120 168 168 168 248 248 248 diff --git a/graphics/pokemon/darkrai/anim_front.png b/graphics/pokemon/darkrai/anim_front.png index 81cf1e35ba27..741c69af0513 100644 Binary files a/graphics/pokemon/darkrai/anim_front.png and b/graphics/pokemon/darkrai/anim_front.png differ diff --git a/graphics/pokemon/darkrai/front.png b/graphics/pokemon/darkrai/front.png index 29f627df0432..e3f284abdd46 100644 Binary files a/graphics/pokemon/darkrai/front.png and b/graphics/pokemon/darkrai/front.png differ diff --git a/graphics/pokemon/darkrai/normal.pal b/graphics/pokemon/darkrai/normal.pal index 66020cc4b4a0..7edcd825d3a9 100644 --- a/graphics/pokemon/darkrai/normal.pal +++ b/graphics/pokemon/darkrai/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 112 112 -192 176 176 -88 80 80 +128 128 128 +192 200 208 +64 64 88 16 16 16 -48 40 48 -224 224 216 -80 24 24 -152 56 48 -40 112 120 -40 200 192 +48 40 56 +224 232 240 +96 0 0 +144 40 64 +16 136 168 +40 232 248 248 248 248 -208 104 96 +232 16 24 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/darmanitan/anim_front.png b/graphics/pokemon/darmanitan/anim_front.png index ddfe2a62a30e..7fa8675a37cd 100644 Binary files a/graphics/pokemon/darmanitan/anim_front.png and b/graphics/pokemon/darmanitan/anim_front.png differ diff --git a/graphics/pokemon/darmanitan/front.png b/graphics/pokemon/darmanitan/front.png index 502461632e9e..137b407ba9da 100644 Binary files a/graphics/pokemon/darmanitan/front.png and b/graphics/pokemon/darmanitan/front.png differ diff --git a/graphics/pokemon/darmanitan/normal.pal b/graphics/pokemon/darmanitan/normal.pal index 42af847557df..04d244d4b744 100644 --- a/graphics/pokemon/darmanitan/normal.pal +++ b/graphics/pokemon/darmanitan/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 48 32 -224 72 64 +184 0 0 +232 16 16 184 144 40 -248 200 56 -120 104 40 -112 40 40 -168 56 48 -64 24 24 -16 16 16 -184 112 72 -168 152 144 -248 152 96 -80 72 72 +232 200 16 +104 88 16 +136 24 40 +168 32 24 +96 24 24 +0 0 0 +176 120 72 +136 136 152 +232 160 104 +72 72 80 240 240 240 -104 56 56 +80 56 32 diff --git a/graphics/pokemon/darmanitan/zen_mode/anim_front.png b/graphics/pokemon/darmanitan/zen_mode/anim_front.png index 0cf85936856d..6cc10f7ac132 100644 Binary files a/graphics/pokemon/darmanitan/zen_mode/anim_front.png and b/graphics/pokemon/darmanitan/zen_mode/anim_front.png differ diff --git a/graphics/pokemon/darmanitan/zen_mode/front.png b/graphics/pokemon/darmanitan/zen_mode/front.png index d4e403d0f52c..84ace43cf945 100644 Binary files a/graphics/pokemon/darmanitan/zen_mode/front.png and b/graphics/pokemon/darmanitan/zen_mode/front.png differ diff --git a/graphics/pokemon/darmanitan/zen_mode/normal.pal b/graphics/pokemon/darmanitan/zen_mode/normal.pal index 393e9ba2bf9f..9695dddf6a5a 100644 --- a/graphics/pokemon/darmanitan/zen_mode/normal.pal +++ b/graphics/pokemon/darmanitan/zen_mode/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 80 96 -88 168 192 -96 72 56 -184 112 64 -248 176 104 +32 82 98 +82 156 172 +123 82 41 +172 106 41 +230 164 98 0 0 0 -72 104 120 -168 208 240 -72 72 80 -152 152 160 +65 90 98 +180 213 238 +74 74 82 +156 156 164 240 240 240 -64 120 144 -128 168 200 +57 123 139 +123 164 189 0 0 0 0 0 0 diff --git a/graphics/pokemon/darumaka/anim_front.png b/graphics/pokemon/darumaka/anim_front.png index 1b3a1f874a4f..7d0b10c8c206 100644 Binary files a/graphics/pokemon/darumaka/anim_front.png and b/graphics/pokemon/darumaka/anim_front.png differ diff --git a/graphics/pokemon/darumaka/front.png b/graphics/pokemon/darumaka/front.png index fb8c71b50a83..92a3645d24ef 100644 Binary files a/graphics/pokemon/darumaka/front.png and b/graphics/pokemon/darumaka/front.png differ diff --git a/graphics/pokemon/darumaka/normal.pal b/graphics/pokemon/darumaka/normal.pal index 73fe3d46b84c..14fb73ec40f9 100644 --- a/graphics/pokemon/darumaka/normal.pal +++ b/graphics/pokemon/darumaka/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -144 104 40 +144 112 16 96 64 48 -16 16 16 -240 184 80 -184 136 64 -144 48 48 -192 64 64 -80 24 24 -168 96 40 -232 152 88 +0 0 0 +248 200 32 +200 160 24 +152 40 40 +200 48 48 +88 24 24 +168 88 40 +248 144 80 88 88 88 248 248 248 160 160 168 diff --git a/graphics/pokemon/deerling/anim_front.png b/graphics/pokemon/deerling/anim_front.png index cfc1c74ea387..2bf2f1b297ba 100644 Binary files a/graphics/pokemon/deerling/anim_front.png and b/graphics/pokemon/deerling/anim_front.png differ diff --git a/graphics/pokemon/deerling/autumn/normal.pal b/graphics/pokemon/deerling/autumn/normal.pal index 7c7880a96af3..32058c780976 100644 --- a/graphics/pokemon/deerling/autumn/normal.pal +++ b/graphics/pokemon/deerling/autumn/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -109 59 35 +152 208 160 +128 72 16 0 0 0 -173 94 55 -191 157 47 -255 214 50 -122 84 24 -237 129 71 -255 235 193 -145 116 132 -81 66 57 -255 255 255 -186 162 130 -73 68 73 -127 114 108 +160 112 32 +200 152 8 +248 216 80 +120 80 16 +232 128 24 +240 232 192 +152 120 88 +80 64 24 +248 248 248 +184 160 136 +48 48 48 +80 80 80 0 0 0 diff --git a/graphics/pokemon/deerling/front.png b/graphics/pokemon/deerling/front.png index 1b204cc2aea7..cade6f0dbfdf 100644 Binary files a/graphics/pokemon/deerling/front.png and b/graphics/pokemon/deerling/front.png differ diff --git a/graphics/pokemon/deerling/normal.pal b/graphics/pokemon/deerling/normal.pal index cc6ab4a71b07..e61755715dbe 100644 --- a/graphics/pokemon/deerling/normal.pal +++ b/graphics/pokemon/deerling/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 56 88 +136 64 64 0 0 0 -184 96 112 -184 152 40 -248 208 48 -120 80 24 -232 152 160 -248 232 192 -144 112 128 -80 64 56 +176 104 104 +200 152 8 +248 216 80 +120 80 16 +248 152 168 +240 232 192 +152 120 88 +80 64 24 248 248 248 -184 160 128 -72 64 72 -120 112 104 +184 160 136 +48 48 48 +80 80 80 0 0 0 diff --git a/graphics/pokemon/deerling/summer/normal.pal b/graphics/pokemon/deerling/summer/normal.pal index 3435fd868a34..240d90f182e6 100644 --- a/graphics/pokemon/deerling/summer/normal.pal +++ b/graphics/pokemon/deerling/summer/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -32 81 32 +152 208 160 +48 80 48 0 0 0 -56 135 54 -191 157 47 -255 214 50 -122 84 24 -72 188 66 -255 235 193 -145 116 132 -81 66 57 -255 255 255 -186 162 130 -73 68 73 -127 114 108 +48 120 64 +200 152 8 +248 216 80 +120 80 16 +64 176 64 +240 232 192 +152 120 88 +80 64 24 +248 248 248 +184 160 136 +48 48 48 +80 80 80 0 0 0 diff --git a/graphics/pokemon/deerling/winter/normal.pal b/graphics/pokemon/deerling/winter/normal.pal index 59d1a46c430c..2aa19e299c25 100644 --- a/graphics/pokemon/deerling/winter/normal.pal +++ b/graphics/pokemon/deerling/winter/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -71 60 46 +152 208 160 +88 80 64 0 0 0 -130 89 84 -191 157 47 -255 214 50 -122 84 24 -175 127 119 -255 235 193 -145 116 132 -81 66 57 -255 255 255 -186 162 130 -73 68 73 -127 114 108 +120 80 72 +200 152 8 +248 216 80 +120 80 16 +168 128 96 +240 232 192 +152 120 88 +80 64 24 +248 248 248 +184 160 136 +48 48 48 +80 80 80 0 0 0 diff --git a/graphics/pokemon/deino/anim_front.png b/graphics/pokemon/deino/anim_front.png index 5482bd67a30b..d0a21c0a2f0c 100644 Binary files a/graphics/pokemon/deino/anim_front.png and b/graphics/pokemon/deino/anim_front.png differ diff --git a/graphics/pokemon/deino/front.png b/graphics/pokemon/deino/front.png index e3f13a0f7ca8..835771003ab1 100644 Binary files a/graphics/pokemon/deino/front.png and b/graphics/pokemon/deino/front.png differ diff --git a/graphics/pokemon/deino/normal.pal b/graphics/pokemon/deino/normal.pal index cc79f1a449aa..69d66dd53452 100644 --- a/graphics/pokemon/deino/normal.pal +++ b/graphics/pokemon/deino/normal.pal @@ -2,13 +2,13 @@ JASC-PAL 0100 16 152 208 160 -48 40 40 -88 80 80 +40 32 40 +80 80 80 16 16 16 64 56 64 -40 56 80 -96 144 200 -80 104 136 +24 48 104 +96 144 216 +56 96 160 112 72 88 184 112 128 112 56 80 diff --git a/graphics/pokemon/delcatty/anim_front.png b/graphics/pokemon/delcatty/anim_front.png index 1e80be259c86..01ccb1292ed9 100644 Binary files a/graphics/pokemon/delcatty/anim_front.png and b/graphics/pokemon/delcatty/anim_front.png differ diff --git a/graphics/pokemon/delcatty/front.png b/graphics/pokemon/delcatty/front.png index cb049001eaa6..bdb666e0399a 100644 Binary files a/graphics/pokemon/delcatty/front.png and b/graphics/pokemon/delcatty/front.png differ diff --git a/graphics/pokemon/delcatty/normal.pal b/graphics/pokemon/delcatty/normal.pal index 3a4c87efaf61..087fc1ccfb08 100644 --- a/graphics/pokemon/delcatty/normal.pal +++ b/graphics/pokemon/delcatty/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 72 120 -88 48 80 -192 136 192 -16 16 16 -152 96 152 -224 192 120 -120 96 72 -248 240 208 -80 48 48 -248 232 160 +96 72 120 +64 40 96 +160 112 192 +0 0 0 +128 80 160 +224 176 96 +112 80 56 +248 240 184 +80 80 88 +248 216 136 240 240 216 -136 104 104 -216 176 120 +152 152 152 +200 144 72 0 0 0 0 0 0 diff --git a/graphics/pokemon/delibird/anim_front.png b/graphics/pokemon/delibird/anim_front.png index fa64c96ffc2c..c093ee531dca 100644 Binary files a/graphics/pokemon/delibird/anim_front.png and b/graphics/pokemon/delibird/anim_front.png differ diff --git a/graphics/pokemon/delibird/front.png b/graphics/pokemon/delibird/front.png index cbe357d8a31e..a0eaf79af0fe 100644 Binary files a/graphics/pokemon/delibird/front.png and b/graphics/pokemon/delibird/front.png differ diff --git a/graphics/pokemon/delibird/normal.pal b/graphics/pokemon/delibird/normal.pal index 0e1996243ace..e279c6e768ae 100644 --- a/graphics/pokemon/delibird/normal.pal +++ b/graphics/pokemon/delibird/normal.pal @@ -7,13 +7,13 @@ JASC-PAL 248 248 248 16 16 16 168 168 176 -216 88 80 -160 48 32 -152 136 72 -96 88 32 -248 224 112 -200 192 200 -96 32 16 -200 48 40 +216 48 48 +168 24 0 +200 136 40 +120 64 0 +248 200 64 +208 208 208 +120 24 0 +192 40 24 0 0 0 0 0 0 diff --git a/graphics/pokemon/deoxys/anim_front.png b/graphics/pokemon/deoxys/anim_front.png index 87f6a6faef05..d2f3e9938189 100644 Binary files a/graphics/pokemon/deoxys/anim_front.png and b/graphics/pokemon/deoxys/anim_front.png differ diff --git a/graphics/pokemon/deoxys/attack/anim_front.png b/graphics/pokemon/deoxys/attack/anim_front.png index f731109ae0f0..0b43a9fe11e1 100644 Binary files a/graphics/pokemon/deoxys/attack/anim_front.png and b/graphics/pokemon/deoxys/attack/anim_front.png differ diff --git a/graphics/pokemon/deoxys/attack/front.png b/graphics/pokemon/deoxys/attack/front.png index c61f3adb942c..5080dd28eb4b 100644 Binary files a/graphics/pokemon/deoxys/attack/front.png and b/graphics/pokemon/deoxys/attack/front.png differ diff --git a/graphics/pokemon/deoxys/attack/normal.pal b/graphics/pokemon/deoxys/attack/normal.pal index a478fcd1124a..246d4784a280 100644 --- a/graphics/pokemon/deoxys/attack/normal.pal +++ b/graphics/pokemon/deoxys/attack/normal.pal @@ -2,15 +2,15 @@ JASC-PAL 0100 16 248 160 176 -64 40 32 -224 112 64 -160 80 56 +96 56 56 +248 112 72 +184 104 104 24 24 24 -128 192 192 -72 144 160 -152 112 144 -48 80 96 -96 64 112 +104 200 224 +80 144 176 +152 96 176 +56 80 96 +112 56 136 248 248 248 192 192 208 88 80 80 diff --git a/graphics/pokemon/deoxys/defense/anim_front.png b/graphics/pokemon/deoxys/defense/anim_front.png index ee4259be5bf0..2ee6e0c527ed 100644 Binary files a/graphics/pokemon/deoxys/defense/anim_front.png and b/graphics/pokemon/deoxys/defense/anim_front.png differ diff --git a/graphics/pokemon/deoxys/defense/front.png b/graphics/pokemon/deoxys/defense/front.png index 7cd7365bcf16..2e21b5592ed6 100644 Binary files a/graphics/pokemon/deoxys/defense/front.png and b/graphics/pokemon/deoxys/defense/front.png differ diff --git a/graphics/pokemon/deoxys/defense/normal.pal b/graphics/pokemon/deoxys/defense/normal.pal index b2b609f25034..8b37f5111e5f 100644 --- a/graphics/pokemon/deoxys/defense/normal.pal +++ b/graphics/pokemon/deoxys/defense/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 248 160 176 -64 40 32 -160 80 56 -224 112 64 +96 56 56 +192 104 104 +248 112 72 96 64 48 240 176 144 -128 192 192 -72 144 160 -48 80 96 -152 112 144 +104 200 224 +80 144 176 +56 80 96 +152 96 176 24 24 24 248 248 248 192 192 208 -96 64 112 +112 56 136 0 0 0 0 0 0 diff --git a/graphics/pokemon/deoxys/front.png b/graphics/pokemon/deoxys/front.png index 5e02cd1c5ffd..5c2c25314e59 100644 Binary files a/graphics/pokemon/deoxys/front.png and b/graphics/pokemon/deoxys/front.png differ diff --git a/graphics/pokemon/deoxys/normal.pal b/graphics/pokemon/deoxys/normal.pal index 5948f302e4db..59124c56a955 100644 --- a/graphics/pokemon/deoxys/normal.pal +++ b/graphics/pokemon/deoxys/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 248 160 176 -160 80 56 -240 176 144 -224 112 64 +184 104 104 +248 176 144 +248 112 72 96 56 56 -128 192 192 +104 200 224 88 56 48 56 80 96 -72 144 160 -152 112 144 +80 144 176 +152 96 176 24 24 24 248 248 248 192 192 208 -96 64 112 +112 56 136 88 80 80 120 120 112 diff --git a/graphics/pokemon/deoxys/speed/anim_front.png b/graphics/pokemon/deoxys/speed/anim_front.png index c6f490d2f25f..947052f81d3a 100644 Binary files a/graphics/pokemon/deoxys/speed/anim_front.png and b/graphics/pokemon/deoxys/speed/anim_front.png differ diff --git a/graphics/pokemon/deoxys/speed/front.png b/graphics/pokemon/deoxys/speed/front.png index 922acc0b29b0..776d0083b368 100644 Binary files a/graphics/pokemon/deoxys/speed/front.png and b/graphics/pokemon/deoxys/speed/front.png differ diff --git a/graphics/pokemon/deoxys/speed/normal.pal b/graphics/pokemon/deoxys/speed/normal.pal index c3dcd2101814..dad052e1daf5 100644 --- a/graphics/pokemon/deoxys/speed/normal.pal +++ b/graphics/pokemon/deoxys/speed/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 248 160 176 -48 80 96 -72 144 160 -128 192 192 -64 40 32 -224 112 64 +56 80 96 +80 144 176 +104 200 224 +96 56 56 +248 112 72 24 24 24 -160 80 56 +192 104 104 192 192 208 -152 112 144 +152 96 176 248 248 248 -96 64 112 +112 56 136 88 80 80 120 120 112 0 0 0 diff --git a/graphics/pokemon/dewgong/anim_front.png b/graphics/pokemon/dewgong/anim_front.png index f42ded8c7f25..a767395501cf 100644 Binary files a/graphics/pokemon/dewgong/anim_front.png and b/graphics/pokemon/dewgong/anim_front.png differ diff --git a/graphics/pokemon/dewgong/front.png b/graphics/pokemon/dewgong/front.png index afaaaf5c32a7..62201eaab32d 100644 Binary files a/graphics/pokemon/dewgong/front.png and b/graphics/pokemon/dewgong/front.png differ diff --git a/graphics/pokemon/dewgong/normal.pal b/graphics/pokemon/dewgong/normal.pal index 11622f8d6d18..15ddd52bd502 100644 --- a/graphics/pokemon/dewgong/normal.pal +++ b/graphics/pokemon/dewgong/normal.pal @@ -3,15 +3,15 @@ JASC-PAL 16 153 210 164 106 123 164 -69 73 96 -161 167 204 -219 235 249 +65 82 98 +156 164 189 +230 230 246 16 16 16 -192 207 226 +213 205 238 255 255 255 -114 92 75 -137 93 117 -211 139 173 +131 123 123 +112 40 40 +232 128 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/dewott/anim_front.png b/graphics/pokemon/dewott/anim_front.png index 7410cb4e8783..8ea90c880bb4 100644 Binary files a/graphics/pokemon/dewott/anim_front.png and b/graphics/pokemon/dewott/anim_front.png differ diff --git a/graphics/pokemon/dewott/front.png b/graphics/pokemon/dewott/front.png index f30e2f395327..d8665e601ea5 100644 Binary files a/graphics/pokemon/dewott/front.png and b/graphics/pokemon/dewott/front.png differ diff --git a/graphics/pokemon/dewott/normal.pal b/graphics/pokemon/dewott/normal.pal index c1c858ea86e6..3ffe4198c668 100644 --- a/graphics/pokemon/dewott/normal.pal +++ b/graphics/pokemon/dewott/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 80 88 -16 16 16 -128 216 224 -88 144 152 -72 72 80 -248 248 248 -208 120 112 -136 64 64 -48 48 56 -48 64 104 -56 96 152 -240 224 152 -104 88 48 -160 144 96 +49 90 115 +0 0 0 +82 189 189 +32 139 148 +74 74 74 +255 255 255 +197 82 90 +115 57 57 +49 49 49 +41 57 106 +49 82 139 +238 213 139 +123 90 16 +197 148 41 192 200 216 diff --git a/graphics/pokemon/dialga/anim_front.png b/graphics/pokemon/dialga/anim_front.png index cfb10e9c5477..c4234913be7e 100644 Binary files a/graphics/pokemon/dialga/anim_front.png and b/graphics/pokemon/dialga/anim_front.png differ diff --git a/graphics/pokemon/dialga/front.png b/graphics/pokemon/dialga/front.png index b1c79e98bfa2..e4a6172ace57 100644 Binary files a/graphics/pokemon/dialga/front.png and b/graphics/pokemon/dialga/front.png differ diff --git a/graphics/pokemon/dialga/normal.pal b/graphics/pokemon/dialga/normal.pal index 71226dfeb1b7..102e0ff122af 100644 --- a/graphics/pokemon/dialga/normal.pal +++ b/graphics/pokemon/dialga/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 136 176 -16 16 16 -72 72 96 -176 200 216 -48 56 104 -32 24 72 -232 240 240 -96 160 184 -160 216 224 -56 88 136 -248 88 88 +136 160 176 +8 8 8 +64 64 80 +192 208 224 +32 88 144 +32 64 104 +232 240 248 +96 160 200 +152 216 248 +56 120 176 +248 80 64 88 96 112 -184 96 104 -40 72 160 -80 112 144 +168 16 0 +32 72 248 +64 112 152 diff --git a/graphics/pokemon/diglett/anim_front.png b/graphics/pokemon/diglett/anim_front.png index 973cdf7cc4ba..a652b66458b2 100644 Binary files a/graphics/pokemon/diglett/anim_front.png and b/graphics/pokemon/diglett/anim_front.png differ diff --git a/graphics/pokemon/diglett/front.png b/graphics/pokemon/diglett/front.png index c10f9ff074e3..4e527ef5e57c 100644 Binary files a/graphics/pokemon/diglett/front.png and b/graphics/pokemon/diglett/front.png differ diff --git a/graphics/pokemon/diglett/normal.pal b/graphics/pokemon/diglett/normal.pal index b83bc4b5b724..0e0e4694ce87 100644 --- a/graphics/pokemon/diglett/normal.pal +++ b/graphics/pokemon/diglett/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 104 80 -208 168 144 -176 128 104 -80 56 40 -248 248 248 +164 90 90 +222 156 90 +197 115 65 +90 49 24 +255 255 255 16 16 16 -168 96 136 -120 56 96 -240 200 224 -216 136 184 -96 96 104 -136 136 144 -56 56 56 -176 184 192 +213 57 74 +115 0 24 +255 172 148 +255 106 90 +131 123 74 +180 172 115 +90 82 32 +230 230 180 0 0 0 diff --git a/graphics/pokemon/ditto/anim_front.png b/graphics/pokemon/ditto/anim_front.png index 692a080f3a1c..f93a8adc4f00 100644 Binary files a/graphics/pokemon/ditto/anim_front.png and b/graphics/pokemon/ditto/anim_front.png differ diff --git a/graphics/pokemon/ditto/front.png b/graphics/pokemon/ditto/front.png index 03ce29b08e48..73603b303d3a 100644 Binary files a/graphics/pokemon/ditto/front.png and b/graphics/pokemon/ditto/front.png differ diff --git a/graphics/pokemon/ditto/normal.pal b/graphics/pokemon/ditto/normal.pal index 3fc5e998e761..3709b13ee0a6 100644 --- a/graphics/pokemon/ditto/normal.pal +++ b/graphics/pokemon/ditto/normal.pal @@ -2,14 +2,14 @@ JASC-PAL 0100 16 152 208 160 -184 152 216 -136 112 168 -232 208 248 -200 176 224 -96 56 128 -8 8 8 -152 128 184 -198 119 119 +192 120 224 +152 88 176 +248 200 248 +224 160 240 +88 24 144 +0 0 0 +176 104 200 +192 120 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/dodrio/anim_front.png b/graphics/pokemon/dodrio/anim_front.png index 0f09d9b66403..43c37974feb8 100644 Binary files a/graphics/pokemon/dodrio/anim_front.png and b/graphics/pokemon/dodrio/anim_front.png differ diff --git a/graphics/pokemon/dodrio/front.png b/graphics/pokemon/dodrio/front.png index e4617feddd47..5184438f4985 100644 Binary files a/graphics/pokemon/dodrio/front.png and b/graphics/pokemon/dodrio/front.png differ diff --git a/graphics/pokemon/dodrio/normal.pal b/graphics/pokemon/dodrio/normal.pal index 0d05314c0a3f..1569ba019dfa 100644 --- a/graphics/pokemon/dodrio/normal.pal +++ b/graphics/pokemon/dodrio/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 64 64 +65 65 65 16 16 16 -104 104 104 -160 104 80 -88 48 32 -224 152 112 +131 131 131 +164 123 90 +90 65 32 +205 156 82 248 248 248 -112 72 56 -240 200 168 -176 136 128 -120 80 112 -200 128 176 -152 64 56 -232 120 112 -240 168 168 +98 90 65 +238 222 172 +180 164 123 +180 65 65 +246 131 164 +180 65 65 +246 131 164 +255 213 230 diff --git a/graphics/pokemon/doduo/anim_front.png b/graphics/pokemon/doduo/anim_front.png index 7039733ed4f2..bda88f3de1ac 100644 Binary files a/graphics/pokemon/doduo/anim_front.png and b/graphics/pokemon/doduo/anim_front.png differ diff --git a/graphics/pokemon/doduo/front.png b/graphics/pokemon/doduo/front.png index 1a626f16f636..6222a7e271e9 100644 Binary files a/graphics/pokemon/doduo/front.png and b/graphics/pokemon/doduo/front.png differ diff --git a/graphics/pokemon/doduo/normal.pal b/graphics/pokemon/doduo/normal.pal index e2b1ed4d77bc..594e03325540 100644 --- a/graphics/pokemon/doduo/normal.pal +++ b/graphics/pokemon/doduo/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 48 24 -152 104 64 -208 136 88 -224 168 128 +80 56 24 +144 104 88 +184 136 80 +216 168 112 16 16 16 248 248 248 -96 64 40 +96 80 16 96 96 96 -168 128 104 -240 200 168 -192 128 160 -64 64 64 +160 128 72 +232 216 168 216 184 136 0 0 0 0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/donphan/anim_front.png b/graphics/pokemon/donphan/anim_front.png index 25f7fcf0accb..a051ebc2b3c1 100644 Binary files a/graphics/pokemon/donphan/anim_front.png and b/graphics/pokemon/donphan/anim_front.png differ diff --git a/graphics/pokemon/donphan/front.png b/graphics/pokemon/donphan/front.png index 182ab384fabb..cb344b85bc2e 100644 Binary files a/graphics/pokemon/donphan/front.png and b/graphics/pokemon/donphan/front.png differ diff --git a/graphics/pokemon/donphan/normal.pal b/graphics/pokemon/donphan/normal.pal index df4ceec1b21b..b397df3f9307 100644 --- a/graphics/pokemon/donphan/normal.pal +++ b/graphics/pokemon/donphan/normal.pal @@ -9,9 +9,9 @@ JASC-PAL 16 16 16 128 160 176 192 216 232 -104 32 72 +128 32 40 72 104 120 -184 48 88 +192 64 16 144 168 184 248 248 248 176 184 184 diff --git a/graphics/pokemon/dragonair/anim_front.png b/graphics/pokemon/dragonair/anim_front.png index d7d319d8bb72..0868dd485a64 100644 Binary files a/graphics/pokemon/dragonair/anim_front.png and b/graphics/pokemon/dragonair/anim_front.png differ diff --git a/graphics/pokemon/dragonair/front.png b/graphics/pokemon/dragonair/front.png index 73cb2160976c..91fea694e261 100644 Binary files a/graphics/pokemon/dragonair/front.png and b/graphics/pokemon/dragonair/front.png differ diff --git a/graphics/pokemon/dragonair/normal.pal b/graphics/pokemon/dragonair/normal.pal index 8e130137794f..1f5a7c704a70 100644 --- a/graphics/pokemon/dragonair/normal.pal +++ b/graphics/pokemon/dragonair/normal.pal @@ -4,16 +4,16 @@ JASC-PAL 152 208 160 160 152 176 248 248 248 -96 80 96 -200 216 216 -24 48 96 -64 120 160 -104 160 216 +88 80 88 +216 208 216 +24 48 112 +72 104 192 +88 136 232 8 8 8 -152 200 240 -88 144 192 -120 40 88 -184 96 144 +120 168 248 +80 104 200 +128 8 56 +176 8 72 24 40 120 -32 104 176 -96 168 232 +64 88 248 +120 200 248 diff --git a/graphics/pokemon/dragonite/anim_front.png b/graphics/pokemon/dragonite/anim_front.png index 7eaa373932fe..2e067903b80e 100644 Binary files a/graphics/pokemon/dragonite/anim_front.png and b/graphics/pokemon/dragonite/anim_front.png differ diff --git a/graphics/pokemon/dragonite/front.png b/graphics/pokemon/dragonite/front.png index 6d1caf8beed3..6bffee898003 100644 Binary files a/graphics/pokemon/dragonite/front.png and b/graphics/pokemon/dragonite/front.png differ diff --git a/graphics/pokemon/dragonite/normal.pal b/graphics/pokemon/dragonite/normal.pal index e269aad02f4a..665b93fbb102 100644 --- a/graphics/pokemon/dragonite/normal.pal +++ b/graphics/pokemon/dragonite/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 96 56 -248 232 192 -200 136 64 -216 192 144 -248 200 136 -240 168 88 +152 88 72 +255 238 189 +213 139 49 +238 189 139 +248 200 104 +238 180 74 88 56 32 248 248 248 -208 208 184 +200 200 200 16 16 16 -112 112 72 -16 88 88 -24 128 128 -56 184 168 -152 128 88 +96 96 96 +16 65 49 +24 106 98 +32 164 123 +172 139 65 diff --git a/graphics/pokemon/drapion/anim_front.png b/graphics/pokemon/drapion/anim_front.png index edd0a9502866..624556e4e4fb 100644 Binary files a/graphics/pokemon/drapion/anim_front.png and b/graphics/pokemon/drapion/anim_front.png differ diff --git a/graphics/pokemon/drapion/front.png b/graphics/pokemon/drapion/front.png index 3f0cc0f4c9c0..57734a284423 100644 Binary files a/graphics/pokemon/drapion/front.png and b/graphics/pokemon/drapion/front.png differ diff --git a/graphics/pokemon/drapion/normal.pal b/graphics/pokemon/drapion/normal.pal index b7d47ea42f40..1b476677ccb4 100644 --- a/graphics/pokemon/drapion/normal.pal +++ b/graphics/pokemon/drapion/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 40 104 -112 64 128 +74 49 98 +123 65 123 16 16 16 -40 16 48 -136 88 152 -192 120 192 -224 160 200 -0 144 168 -24 88 96 -136 168 192 -248 248 248 -192 208 224 -136 56 128 +57 24 57 +139 90 156 +197 123 180 +222 148 205 +16 139 172 +41 90 98 +156 172 180 +255 255 255 +213 205 230 +131 49 123 0 0 0 0 0 0 diff --git a/graphics/pokemon/dratini/anim_front.png b/graphics/pokemon/dratini/anim_front.png index f34ac70d8b2d..4b3f1a6c0ee3 100644 Binary files a/graphics/pokemon/dratini/anim_front.png and b/graphics/pokemon/dratini/anim_front.png differ diff --git a/graphics/pokemon/dratini/front.png b/graphics/pokemon/dratini/front.png index 57c8d94b5662..ee6f3bc45017 100644 Binary files a/graphics/pokemon/dratini/front.png and b/graphics/pokemon/dratini/front.png differ diff --git a/graphics/pokemon/dratini/normal.pal b/graphics/pokemon/dratini/normal.pal index bb6334623973..0367cec18987 100644 --- a/graphics/pokemon/dratini/normal.pal +++ b/graphics/pokemon/dratini/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 128 144 -240 232 232 -200 192 184 +152 144 136 +248 248 248 +208 200 208 88 88 88 -88 104 176 -40 48 88 -160 192 232 -112 144 184 +88 96 184 +40 48 128 +160 176 240 +112 128 208 248 248 248 -16 16 16 -120 48 120 -184 120 184 +0 0 0 +72 24 104 +96 56 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/drifblim/anim_front.png b/graphics/pokemon/drifblim/anim_front.png index 177cce55dd62..9ed62c8595c8 100644 Binary files a/graphics/pokemon/drifblim/anim_front.png and b/graphics/pokemon/drifblim/anim_front.png differ diff --git a/graphics/pokemon/drifblim/front.png b/graphics/pokemon/drifblim/front.png index eb766375ee60..f6cf9d5f9d64 100644 Binary files a/graphics/pokemon/drifblim/front.png and b/graphics/pokemon/drifblim/front.png differ diff --git a/graphics/pokemon/drifblim/normal.pal b/graphics/pokemon/drifblim/normal.pal index 8c3533930be0..fc8ae23dd8d8 100644 --- a/graphics/pokemon/drifblim/normal.pal +++ b/graphics/pokemon/drifblim/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -200 184 176 +192 192 224 248 248 248 -96 88 88 +88 88 96 16 16 16 -88 72 104 -120 96 152 -64 48 72 -160 136 168 -224 80 80 +88 64 120 +128 80 168 +64 56 88 +152 112 216 +224 72 80 96 80 56 -184 152 56 -232 200 96 -168 144 176 -216 192 224 -136 48 48 +184 152 0 +248 216 8 +160 128 192 +208 176 248 +144 56 88 diff --git a/graphics/pokemon/drifloon/anim_front.png b/graphics/pokemon/drifloon/anim_front.png index f7bd5aa4fe04..feb7b51fa4f6 100644 Binary files a/graphics/pokemon/drifloon/anim_front.png and b/graphics/pokemon/drifloon/anim_front.png differ diff --git a/graphics/pokemon/drifloon/front.png b/graphics/pokemon/drifloon/front.png index 76536179d61b..dea6e88717ea 100644 Binary files a/graphics/pokemon/drifloon/front.png and b/graphics/pokemon/drifloon/front.png differ diff --git a/graphics/pokemon/drifloon/normal.pal b/graphics/pokemon/drifloon/normal.pal index 8d6797178b47..a1359193237a 100644 --- a/graphics/pokemon/drifloon/normal.pal +++ b/graphics/pokemon/drifloon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 200 216 +192 208 224 248 248 248 -72 96 112 +88 88 96 16 16 16 -112 80 120 -152 112 176 -80 64 96 -200 160 208 -56 40 72 -208 168 64 -128 104 40 -240 208 96 +120 64 160 +144 104 224 +96 48 128 +192 176 248 +72 48 104 +200 176 0 +136 104 32 +248 216 8 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/drilbur/anim_front.png b/graphics/pokemon/drilbur/anim_front.png index e7ff763c56c9..f6073ae88351 100644 Binary files a/graphics/pokemon/drilbur/anim_front.png and b/graphics/pokemon/drilbur/anim_front.png differ diff --git a/graphics/pokemon/drilbur/front.png b/graphics/pokemon/drilbur/front.png index b55412a8e3f2..1bb3bb20d883 100644 Binary files a/graphics/pokemon/drilbur/front.png and b/graphics/pokemon/drilbur/front.png differ diff --git a/graphics/pokemon/drilbur/normal.pal b/graphics/pokemon/drilbur/normal.pal index 9d401f41fab4..75efa8cdbd37 100644 --- a/graphics/pokemon/drilbur/normal.pal +++ b/graphics/pokemon/drilbur/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 104 96 -56 48 48 +96 96 96 +48 48 48 16 16 16 248 248 248 -176 160 144 -216 200 200 -232 144 136 -192 112 96 -88 72 64 -72 72 96 -96 96 136 -128 64 72 -208 112 112 -128 112 104 +160 160 160 +208 208 208 +232 152 136 +200 120 104 +64 64 64 +72 72 88 +96 104 128 +128 40 64 +168 80 80 +88 88 88 0 0 0 diff --git a/graphics/pokemon/drowzee/anim_front.png b/graphics/pokemon/drowzee/anim_front.png index 22b551c8ce2f..3bab74224045 100644 Binary files a/graphics/pokemon/drowzee/anim_front.png and b/graphics/pokemon/drowzee/anim_front.png differ diff --git a/graphics/pokemon/drowzee/front.png b/graphics/pokemon/drowzee/front.png index 2c158d2c4b92..b1296df0e26b 100644 Binary files a/graphics/pokemon/drowzee/front.png and b/graphics/pokemon/drowzee/front.png differ diff --git a/graphics/pokemon/drowzee/normal.pal b/graphics/pokemon/drowzee/normal.pal index 145024f56447..0ea8f35c4c58 100644 --- a/graphics/pokemon/drowzee/normal.pal +++ b/graphics/pokemon/drowzee/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 128 24 -96 80 16 -240 200 64 -56 48 40 -184 152 48 -248 224 152 -16 16 16 -120 72 88 +168 136 0 +112 88 0 +240 232 0 +80 56 32 +208 168 72 +248 232 112 +0 0 0 +104 80 64 248 248 248 -128 72 88 -200 120 144 -120 112 96 -160 152 136 -88 72 64 +136 32 56 +232 56 56 +136 112 88 +176 152 120 +104 80 64 0 0 0 diff --git a/graphics/pokemon/druddigon/anim_front.png b/graphics/pokemon/druddigon/anim_front.png index 5c4989f1de20..25fffae7f0cc 100644 Binary files a/graphics/pokemon/druddigon/anim_front.png and b/graphics/pokemon/druddigon/anim_front.png differ diff --git a/graphics/pokemon/druddigon/front.png b/graphics/pokemon/druddigon/front.png index b0643a41810e..a522546a2b80 100644 Binary files a/graphics/pokemon/druddigon/front.png and b/graphics/pokemon/druddigon/front.png differ diff --git a/graphics/pokemon/druddigon/normal.pal b/graphics/pokemon/druddigon/normal.pal index 0e25f85645d2..3fdd0d60d224 100644 --- a/graphics/pokemon/druddigon/normal.pal +++ b/graphics/pokemon/druddigon/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -0 56 80 -0 120 152 -0 88 104 +0 56 72 +0 120 168 +0 88 120 80 16 48 -136 32 56 -192 48 80 +144 0 64 +208 0 64 248 248 248 -232 176 112 -176 168 168 -208 120 136 -152 112 64 -80 64 48 -232 184 136 +232 192 0 +176 176 176 +208 80 112 +136 120 88 +96 80 48 +208 184 104 104 104 104 diff --git a/graphics/pokemon/ducklett/anim_front.png b/graphics/pokemon/ducklett/anim_front.png index 18993276959b..59d600e5ed14 100644 Binary files a/graphics/pokemon/ducklett/anim_front.png and b/graphics/pokemon/ducklett/anim_front.png differ diff --git a/graphics/pokemon/ducklett/front.png b/graphics/pokemon/ducklett/front.png index 7f0fd9423a55..f86b61a3d517 100644 Binary files a/graphics/pokemon/ducklett/front.png and b/graphics/pokemon/ducklett/front.png differ diff --git a/graphics/pokemon/ducklett/normal.pal b/graphics/pokemon/ducklett/normal.pal index 7fd7527042f7..d28a791b3383 100644 --- a/graphics/pokemon/ducklett/normal.pal +++ b/graphics/pokemon/ducklett/normal.pal @@ -1,18 +1,18 @@ JASC-PAL 0100 16 -152 208 160 -88 128 120 -72 104 96 -152 224 216 -128 176 168 +248 192 248 +64 136 184 +48 72 112 +144 216 240 +96 176 200 16 16 16 -80 152 168 +64 136 184 248 248 248 -184 152 64 -120 104 56 -248 216 112 -80 184 216 +168 160 96 +104 104 64 +248 240 72 +88 176 232 32 104 104 0 0 0 0 0 0 diff --git a/graphics/pokemon/dugtrio/anim_front.png b/graphics/pokemon/dugtrio/anim_front.png index 511ecaeffd8c..12a88a418bec 100644 Binary files a/graphics/pokemon/dugtrio/anim_front.png and b/graphics/pokemon/dugtrio/anim_front.png differ diff --git a/graphics/pokemon/dugtrio/front.png b/graphics/pokemon/dugtrio/front.png index 0a9afd978245..60051cd79ce7 100644 Binary files a/graphics/pokemon/dugtrio/front.png and b/graphics/pokemon/dugtrio/front.png differ diff --git a/graphics/pokemon/dugtrio/normal.pal b/graphics/pokemon/dugtrio/normal.pal index 3cc63312f37a..834d6d4db283 100644 --- a/graphics/pokemon/dugtrio/normal.pal +++ b/graphics/pokemon/dugtrio/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 104 80 -208 168 144 -80 56 40 -176 128 104 -248 248 248 +164 90 90 +222 156 90 +90 49 24 +197 115 65 +255 255 255 16 16 16 -120 56 96 -240 200 224 -216 136 184 -168 96 136 -96 96 104 -136 136 144 -56 56 56 -176 184 192 +115 0 24 +255 172 148 +255 106 90 +213 57 74 +131 123 74 +180 172 115 +90 82 32 +230 230 180 0 0 0 diff --git a/graphics/pokemon/dunsparce/anim_front.png b/graphics/pokemon/dunsparce/anim_front.png index 6b29ff012e22..b2216c6e2fbe 100644 Binary files a/graphics/pokemon/dunsparce/anim_front.png and b/graphics/pokemon/dunsparce/anim_front.png differ diff --git a/graphics/pokemon/dunsparce/front.png b/graphics/pokemon/dunsparce/front.png index d097d92d28cf..660f5e1a1156 100644 Binary files a/graphics/pokemon/dunsparce/front.png and b/graphics/pokemon/dunsparce/front.png differ diff --git a/graphics/pokemon/dunsparce/normal.pal b/graphics/pokemon/dunsparce/normal.pal index 5a2d1aae3899..0aadd552dffc 100644 --- a/graphics/pokemon/dunsparce/normal.pal +++ b/graphics/pokemon/dunsparce/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 88 64 -248 224 136 -200 184 80 -160 144 56 +240 224 120 +216 184 56 +184 136 32 16 16 16 -112 104 96 +88 96 112 240 248 248 -192 184 184 -224 216 208 -104 192 192 -248 232 200 -56 152 168 -48 112 120 -163 110 138 +184 200 224 +208 224 240 +104 184 200 +248 240 192 +48 136 160 +32 104 128 +168 32 32 0 0 0 diff --git a/graphics/pokemon/duosion/anim_front.png b/graphics/pokemon/duosion/anim_front.png index edd0ce9fabc9..e8c48d6c05fa 100644 Binary files a/graphics/pokemon/duosion/anim_front.png and b/graphics/pokemon/duosion/anim_front.png differ diff --git a/graphics/pokemon/duosion/front.png b/graphics/pokemon/duosion/front.png index 7c463f848e4c..acf0c1c0d239 100644 Binary files a/graphics/pokemon/duosion/front.png and b/graphics/pokemon/duosion/front.png differ diff --git a/graphics/pokemon/duosion/normal.pal b/graphics/pokemon/duosion/normal.pal index 990c6486b19b..9af82073ece4 100644 --- a/graphics/pokemon/duosion/normal.pal +++ b/graphics/pokemon/duosion/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -56 136 104 -112 184 136 -96 128 88 -48 104 80 -208 232 168 -168 168 128 +64 152 96 +88 176 120 +96 120 96 +48 120 72 +192 216 176 +152 184 136 16 16 16 -184 232 184 +128 216 160 224 248 216 -160 88 88 -112 56 72 -0 0 0 +112 56 56 +176 64 64 +128 216 160 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/durant/anim_front.png b/graphics/pokemon/durant/anim_front.png index 236346e11b32..46e975814b3b 100644 Binary files a/graphics/pokemon/durant/anim_front.png and b/graphics/pokemon/durant/anim_front.png differ diff --git a/graphics/pokemon/durant/front.png b/graphics/pokemon/durant/front.png index efd8d0ced086..0320e654f912 100644 Binary files a/graphics/pokemon/durant/front.png and b/graphics/pokemon/durant/front.png differ diff --git a/graphics/pokemon/durant/normal.pal b/graphics/pokemon/durant/normal.pal index ae4b4bfd4c74..4b438dc85b1a 100644 --- a/graphics/pokemon/durant/normal.pal +++ b/graphics/pokemon/durant/normal.pal @@ -1,17 +1,17 @@ JASC-PAL 0100 16 -152 208 160 -136 128 144 -168 168 184 -200 200 224 -64 64 72 -24 24 32 -40 40 48 -88 88 96 -128 24 32 -192 64 72 -0 0 0 +153 204 153 +136 136 136 +170 170 187 +204 204 221 +68 68 68 +17 17 34 +34 34 51 +85 85 102 +128 32 0 +208 56 24 +255 255 255 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/dusclops/anim_front.png b/graphics/pokemon/dusclops/anim_front.png index 5fe60bbed3a3..fee45d14a3ed 100644 Binary files a/graphics/pokemon/dusclops/anim_front.png and b/graphics/pokemon/dusclops/anim_front.png differ diff --git a/graphics/pokemon/dusclops/front.png b/graphics/pokemon/dusclops/front.png index b2c01d0290f0..58a0d15abb07 100644 Binary files a/graphics/pokemon/dusclops/front.png and b/graphics/pokemon/dusclops/front.png differ diff --git a/graphics/pokemon/dusclops/normal.pal b/graphics/pokemon/dusclops/normal.pal index 882f3c79e77c..481bff7a640b 100644 --- a/graphics/pokemon/dusclops/normal.pal +++ b/graphics/pokemon/dusclops/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 72 56 -152 136 120 -80 64 48 -224 208 192 -200 184 160 +104 88 72 +152 144 128 +80 56 48 +216 208 192 +184 176 160 16 16 16 -112 112 104 -176 176 160 -144 144 128 -80 80 72 +96 96 88 +160 160 144 +136 136 120 +72 72 72 128 104 104 248 248 248 -240 128 136 -224 80 88 +248 104 120 +216 16 64 24 24 24 diff --git a/graphics/pokemon/dusknoir/anim_front.png b/graphics/pokemon/dusknoir/anim_front.png index 59c490a6dec2..abbef6aac90a 100644 Binary files a/graphics/pokemon/dusknoir/anim_front.png and b/graphics/pokemon/dusknoir/anim_front.png differ diff --git a/graphics/pokemon/dusknoir/front.png b/graphics/pokemon/dusknoir/front.png index ad418e102732..95a5ccea9840 100644 Binary files a/graphics/pokemon/dusknoir/front.png and b/graphics/pokemon/dusknoir/front.png differ diff --git a/graphics/pokemon/dusknoir/normal.pal b/graphics/pokemon/dusknoir/normal.pal index 65731923d5a4..ce4803194a8a 100644 --- a/graphics/pokemon/dusknoir/normal.pal +++ b/graphics/pokemon/dusknoir/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 72 40 -160 120 72 -216 184 120 +96 72 48 +152 120 40 +224 176 48 64 56 56 16 16 16 -104 96 88 -168 176 160 -128 128 112 +96 88 96 +168 160 152 +128 112 112 88 88 72 176 144 56 224 192 56 -208 208 184 +200 200 168 232 64 64 40 40 32 0 0 0 diff --git a/graphics/pokemon/duskull/anim_front.png b/graphics/pokemon/duskull/anim_front.png index 89d92ec388ed..ede00efffc08 100644 Binary files a/graphics/pokemon/duskull/anim_front.png and b/graphics/pokemon/duskull/anim_front.png differ diff --git a/graphics/pokemon/duskull/front.png b/graphics/pokemon/duskull/front.png index 1e337d3acc07..33903c773d5e 100644 Binary files a/graphics/pokemon/duskull/front.png and b/graphics/pokemon/duskull/front.png differ diff --git a/graphics/pokemon/duskull/normal.pal b/graphics/pokemon/duskull/normal.pal index 657950b54b07..9b027e69f3df 100644 --- a/graphics/pokemon/duskull/normal.pal +++ b/graphics/pokemon/duskull/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 120 112 -40 56 40 -72 88 80 -160 168 160 -16 16 16 -248 240 224 +104 104 88 +48 48 40 +72 72 64 +128 128 112 +8 8 8 +248 248 224 216 208 168 176 176 144 -152 152 112 +144 136 112 232 224 192 -240 184 184 -232 80 96 -104 88 80 -0 0 0 -0 0 0 +248 72 16 +176 48 80 +248 96 32 +248 248 248 +8 8 8 diff --git a/graphics/pokemon/dustox/anim_front.png b/graphics/pokemon/dustox/anim_front.png index 8ed2b9a206fb..3a47c01e7de6 100644 Binary files a/graphics/pokemon/dustox/anim_front.png and b/graphics/pokemon/dustox/anim_front.png differ diff --git a/graphics/pokemon/dustox/front.png b/graphics/pokemon/dustox/front.png index d1d4927b94e3..356320c18db1 100644 Binary files a/graphics/pokemon/dustox/front.png and b/graphics/pokemon/dustox/front.png differ diff --git a/graphics/pokemon/dustox/normal.pal b/graphics/pokemon/dustox/normal.pal index e2f17b0e284a..cc1a726616ad 100644 --- a/graphics/pokemon/dustox/normal.pal +++ b/graphics/pokemon/dustox/normal.pal @@ -2,10 +2,10 @@ JASC-PAL 0100 16 144 144 248 -144 112 48 -248 216 112 +152 104 56 +248 232 112 80 64 88 -192 160 88 +208 176 80 16 16 16 144 112 160 248 184 232 diff --git a/graphics/pokemon/dwebble/anim_front.png b/graphics/pokemon/dwebble/anim_front.png index ef81e4864b56..087dc3ff7a31 100644 Binary files a/graphics/pokemon/dwebble/anim_front.png and b/graphics/pokemon/dwebble/anim_front.png differ diff --git a/graphics/pokemon/dwebble/front.png b/graphics/pokemon/dwebble/front.png index 6be5250a1835..560295f560f1 100644 Binary files a/graphics/pokemon/dwebble/front.png and b/graphics/pokemon/dwebble/front.png differ diff --git a/graphics/pokemon/dwebble/normal.pal b/graphics/pokemon/dwebble/normal.pal index 1b74d2b54bba..45efc6c546fd 100644 --- a/graphics/pokemon/dwebble/normal.pal +++ b/graphics/pokemon/dwebble/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 104 96 -72 72 80 -200 184 152 -152 136 128 +120 112 112 +88 80 72 +192 184 128 +160 152 136 16 16 16 248 248 248 -56 56 56 -232 128 72 -168 88 48 -80 56 32 -248 184 152 -128 80 56 +64 64 64 +232 152 72 +192 96 32 +96 64 40 +248 184 120 +144 96 72 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/eelektrik/anim_front.png b/graphics/pokemon/eelektrik/anim_front.png index 5823c55de9f4..567a58c2b2b0 100644 Binary files a/graphics/pokemon/eelektrik/anim_front.png and b/graphics/pokemon/eelektrik/anim_front.png differ diff --git a/graphics/pokemon/eelektrik/front.png b/graphics/pokemon/eelektrik/front.png index 4189c85ebd7a..6bb7cc764f94 100644 Binary files a/graphics/pokemon/eelektrik/front.png and b/graphics/pokemon/eelektrik/front.png differ diff --git a/graphics/pokemon/eelektrik/normal.pal b/graphics/pokemon/eelektrik/normal.pal index 64a26e74e8e4..4e64a32a9d96 100644 --- a/graphics/pokemon/eelektrik/normal.pal +++ b/graphics/pokemon/eelektrik/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -176 160 112 -120 104 72 -248 232 176 +192 168 120 +128 112 64 +232 216 160 24 24 32 -48 64 88 -72 96 128 -112 24 16 -160 64 64 -232 112 104 -176 152 40 -240 208 48 +16 56 72 +32 88 96 +112 32 0 +176 72 40 +216 112 80 +216 176 0 +248 208 0 248 248 248 184 184 184 0 0 0 diff --git a/graphics/pokemon/eelektross/anim_front.png b/graphics/pokemon/eelektross/anim_front.png index bb8037f8c90d..938f781a5618 100644 Binary files a/graphics/pokemon/eelektross/anim_front.png and b/graphics/pokemon/eelektross/anim_front.png differ diff --git a/graphics/pokemon/eelektross/front.png b/graphics/pokemon/eelektross/front.png index 3b7931c0bda0..b1ae70adb048 100644 Binary files a/graphics/pokemon/eelektross/front.png and b/graphics/pokemon/eelektross/front.png differ diff --git a/graphics/pokemon/eelektross/normal.pal b/graphics/pokemon/eelektross/normal.pal index 90f3d7bf0a6f..37f8ca946107 100644 --- a/graphics/pokemon/eelektross/normal.pal +++ b/graphics/pokemon/eelektross/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 248 120 0 -48 64 80 +16 48 64 0 32 48 -64 96 136 -144 152 184 +32 96 112 +112 176 200 16 16 24 -96 104 80 -176 152 104 -184 160 64 -248 224 88 -240 232 160 -232 88 88 -160 64 64 -152 144 136 +128 112 64 +192 168 120 +216 176 0 +248 208 0 +232 216 160 +216 112 80 +152 48 16 +128 128 128 248 248 248 0 0 0 diff --git a/graphics/pokemon/eevee/anim_front.png b/graphics/pokemon/eevee/anim_front.png index 59d53bacce1b..7f45d8592eef 100644 Binary files a/graphics/pokemon/eevee/anim_front.png and b/graphics/pokemon/eevee/anim_front.png differ diff --git a/graphics/pokemon/eevee/anim_frontf.png b/graphics/pokemon/eevee/anim_frontf.png index e923202b400a..2f9da3756e18 100644 Binary files a/graphics/pokemon/eevee/anim_frontf.png and b/graphics/pokemon/eevee/anim_frontf.png differ diff --git a/graphics/pokemon/eevee/front.png b/graphics/pokemon/eevee/front.png index 9833109f7b86..1773de2aaf1a 100644 Binary files a/graphics/pokemon/eevee/front.png and b/graphics/pokemon/eevee/front.png differ diff --git a/graphics/pokemon/eevee/frontf.png b/graphics/pokemon/eevee/frontf.png new file mode 100644 index 000000000000..3eb2e2c96fb2 Binary files /dev/null and b/graphics/pokemon/eevee/frontf.png differ diff --git a/graphics/pokemon/eevee/normal.pal b/graphics/pokemon/eevee/normal.pal index 6bd8aad58fe1..ecb4209481a0 100644 --- a/graphics/pokemon/eevee/normal.pal +++ b/graphics/pokemon/eevee/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -152 96 56 -96 72 56 -208 136 72 -16 16 16 -56 40 24 -96 48 8 -176 152 112 -224 192 136 +165 99 74 +115 74 74 +214 156 74 +0 0 0 +82 49 33 +82 49 33 +189 156 123 +230 197 148 248 248 248 -248 216 160 +255 230 173 224 184 120 96 72 56 0 0 0 diff --git a/graphics/pokemon/ekans/anim_front.png b/graphics/pokemon/ekans/anim_front.png index d7d2241ba5a5..1441532a474e 100644 Binary files a/graphics/pokemon/ekans/anim_front.png and b/graphics/pokemon/ekans/anim_front.png differ diff --git a/graphics/pokemon/ekans/front.png b/graphics/pokemon/ekans/front.png index 1afc146254fb..ebfd623efaf5 100644 Binary files a/graphics/pokemon/ekans/front.png and b/graphics/pokemon/ekans/front.png differ diff --git a/graphics/pokemon/ekans/normal.pal b/graphics/pokemon/ekans/normal.pal index fa10d90fa3ae..54db617b6ded 100644 --- a/graphics/pokemon/ekans/normal.pal +++ b/graphics/pokemon/ekans/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 32 64 -144 80 128 -224 160 224 -184 120 184 -96 56 88 -160 128 104 -248 232 176 +90 16 74 +164 74 139 +238 164 213 +205 98 180 +123 49 106 +180 123 49 +255 213 106 16 16 16 -200 176 112 -144 80 88 +230 172 90 +156 16 0 88 72 48 -192 120 128 -240 176 200 +197 65 24 +246 115 74 248 224 152 0 0 0 diff --git a/graphics/pokemon/electabuzz/anim_front.png b/graphics/pokemon/electabuzz/anim_front.png index c718c76486c8..a1f470a0a93c 100644 Binary files a/graphics/pokemon/electabuzz/anim_front.png and b/graphics/pokemon/electabuzz/anim_front.png differ diff --git a/graphics/pokemon/electabuzz/front.png b/graphics/pokemon/electabuzz/front.png index 4a77ab9c8785..0459ecb3bc41 100644 Binary files a/graphics/pokemon/electabuzz/front.png and b/graphics/pokemon/electabuzz/front.png differ diff --git a/graphics/pokemon/electabuzz/normal.pal b/graphics/pokemon/electabuzz/normal.pal index 724c755c74ec..7a072e9d8e0d 100644 --- a/graphics/pokemon/electabuzz/normal.pal +++ b/graphics/pokemon/electabuzz/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -168 136 72 -16 16 16 -248 232 168 -248 208 96 -88 64 48 -72 104 128 -16 48 72 +192 160 16 +0 0 0 +248 240 176 +248 224 56 +104 88 24 +88 104 120 +56 64 80 248 248 248 200 200 216 -160 104 104 -224 144 144 -200 160 72 -0 0 0 +176 56 104 +224 96 144 +224 192 80 +248 240 176 0 0 0 0 0 0 diff --git a/graphics/pokemon/electivire/anim_front.png b/graphics/pokemon/electivire/anim_front.png index 78bc8c04828b..a5f05a7e8b95 100644 Binary files a/graphics/pokemon/electivire/anim_front.png and b/graphics/pokemon/electivire/anim_front.png differ diff --git a/graphics/pokemon/electivire/front.png b/graphics/pokemon/electivire/front.png index 42f378b602b0..41bf884b5e4b 100644 Binary files a/graphics/pokemon/electivire/front.png and b/graphics/pokemon/electivire/front.png differ diff --git a/graphics/pokemon/electivire/normal.pal b/graphics/pokemon/electivire/normal.pal index 03836274f285..e751bd37ecd4 100644 --- a/graphics/pokemon/electivire/normal.pal +++ b/graphics/pokemon/electivire/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 24 24 -8 8 8 -200 72 72 -216 120 104 -40 32 40 -128 120 72 -240 200 104 -80 72 64 -248 232 192 -176 144 80 +112 24 0 +0 0 0 +176 56 24 +240 80 56 +48 40 40 +152 128 72 +248 216 32 +88 72 64 +248 232 144 +192 168 64 248 248 248 -80 72 72 104 104 104 -192 176 184 +176 176 192 +0 0 0 0 0 0 diff --git a/graphics/pokemon/electrike/anim_front.png b/graphics/pokemon/electrike/anim_front.png index 7c25c7c89b93..b1acce4c958a 100644 Binary files a/graphics/pokemon/electrike/anim_front.png and b/graphics/pokemon/electrike/anim_front.png differ diff --git a/graphics/pokemon/electrike/front.png b/graphics/pokemon/electrike/front.png index 74f7cd3344d7..3e2b74a7522a 100644 Binary files a/graphics/pokemon/electrike/front.png and b/graphics/pokemon/electrike/front.png differ diff --git a/graphics/pokemon/electrike/normal.pal b/graphics/pokemon/electrike/normal.pal index 6d3244c0f492..e179c60e944c 100644 --- a/graphics/pokemon/electrike/normal.pal +++ b/graphics/pokemon/electrike/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -136 112 64 -248 216 112 +128 104 64 +248 232 64 16 16 16 -112 152 96 -72 104 64 -176 232 168 -144 208 136 -208 176 88 -136 184 120 -176 184 216 +96 152 96 +56 88 80 +176 232 152 +128 208 120 +200 160 56 +96 184 96 +184 184 192 248 248 248 -136 80 104 -200 128 160 -88 96 112 -176 232 168 +128 72 96 +224 104 160 +96 96 96 +176 232 152 diff --git a/graphics/pokemon/electrode/anim_front.png b/graphics/pokemon/electrode/anim_front.png index 10d09ecb750e..f5fee30396ec 100644 Binary files a/graphics/pokemon/electrode/anim_front.png and b/graphics/pokemon/electrode/anim_front.png differ diff --git a/graphics/pokemon/electrode/front.png b/graphics/pokemon/electrode/front.png index 15aecc817d30..6de7d5e090f2 100644 Binary files a/graphics/pokemon/electrode/front.png and b/graphics/pokemon/electrode/front.png differ diff --git a/graphics/pokemon/electrode/normal.pal b/graphics/pokemon/electrode/normal.pal index a6073872e811..293f41bffb7d 100644 --- a/graphics/pokemon/electrode/normal.pal +++ b/graphics/pokemon/electrode/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -80 88 120 -152 160 176 -232 232 232 +90 82 82 +164 156 156 +238 238 238 248 248 248 -192 200 208 +205 205 222 16 16 16 -168 96 112 -240 120 112 -240 152 144 -112 48 56 -208 112 112 +213 49 65 +255 82 32 +255 131 90 +131 16 16 +238 65 49 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/elekid/anim_front.png b/graphics/pokemon/elekid/anim_front.png index cc05d9068fb1..3b38ebfa2a81 100644 Binary files a/graphics/pokemon/elekid/anim_front.png and b/graphics/pokemon/elekid/anim_front.png differ diff --git a/graphics/pokemon/elekid/front.png b/graphics/pokemon/elekid/front.png index 7261262a9b98..dc1c694b23e0 100644 Binary files a/graphics/pokemon/elekid/front.png and b/graphics/pokemon/elekid/front.png differ diff --git a/graphics/pokemon/elekid/normal.pal b/graphics/pokemon/elekid/normal.pal index 1035472af4a4..0c1a77d4aa95 100644 --- a/graphics/pokemon/elekid/normal.pal +++ b/graphics/pokemon/elekid/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 72 32 -144 112 72 -240 224 144 -192 160 64 +120 80 0 +176 104 0 +248 216 88 +200 136 0 16 16 16 160 160 160 248 248 248 200 200 200 -104 104 96 -216 184 80 -56 56 48 -127 81 77 -193 142 135 +96 96 96 +240 176 0 +48 48 48 +168 16 0 +232 64 48 0 0 0 0 0 0 diff --git a/graphics/pokemon/elgyem/anim_front.png b/graphics/pokemon/elgyem/anim_front.png index 019ce1dfa31f..2900d3b3e813 100644 Binary files a/graphics/pokemon/elgyem/anim_front.png and b/graphics/pokemon/elgyem/anim_front.png differ diff --git a/graphics/pokemon/elgyem/front.png b/graphics/pokemon/elgyem/front.png index b034ed9ed1c7..f1a930f82a6d 100644 Binary files a/graphics/pokemon/elgyem/front.png and b/graphics/pokemon/elgyem/front.png differ diff --git a/graphics/pokemon/elgyem/normal.pal b/graphics/pokemon/elgyem/normal.pal index fcc15c2862a7..29f2d2365699 100644 --- a/graphics/pokemon/elgyem/normal.pal +++ b/graphics/pokemon/elgyem/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 248 160 176 -56 96 88 -72 120 104 -96 152 144 -136 216 216 +32 90 82 +57 115 82 +98 148 131 +164 205 189 16 16 16 -64 56 64 -112 104 112 -40 112 72 -248 248 248 -64 184 120 -120 56 48 -208 88 80 -248 232 88 -120 120 56 +65 65 65 +106 106 115 +16 82 41 +255 255 255 +32 156 16 +123 41 41 +205 0 0 +230 205 0 +106 98 16 0 0 0 diff --git a/graphics/pokemon/emboar/anim_front.png b/graphics/pokemon/emboar/anim_front.png index 6040135f8573..ad36ed955374 100644 Binary files a/graphics/pokemon/emboar/anim_front.png and b/graphics/pokemon/emboar/anim_front.png differ diff --git a/graphics/pokemon/emboar/front.png b/graphics/pokemon/emboar/front.png index 2ae4b79e413a..009ecfd4de55 100644 Binary files a/graphics/pokemon/emboar/front.png and b/graphics/pokemon/emboar/front.png differ diff --git a/graphics/pokemon/emboar/normal.pal b/graphics/pokemon/emboar/normal.pal index 4058c56494c0..ebd2efcaa103 100644 --- a/graphics/pokemon/emboar/normal.pal +++ b/graphics/pokemon/emboar/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 24 24 -40 32 40 -224 64 64 -56 48 56 -112 48 16 -224 112 56 -160 80 48 +120 24 16 +32 32 32 +224 48 40 +48 48 48 +112 40 0 +232 96 32 +184 80 32 16 16 16 -224 144 16 -168 168 192 -232 192 72 +232 136 8 +168 168 168 +232 184 8 240 240 240 -152 48 48 -112 80 16 -168 136 48 +160 56 48 +120 88 8 +176 136 32 diff --git a/graphics/pokemon/emolga/anim_front.png b/graphics/pokemon/emolga/anim_front.png index 14f44870bd79..97b86d00be5d 100644 Binary files a/graphics/pokemon/emolga/anim_front.png and b/graphics/pokemon/emolga/anim_front.png differ diff --git a/graphics/pokemon/emolga/front.png b/graphics/pokemon/emolga/front.png index 8f296f15f07f..23a5856b4bef 100644 Binary files a/graphics/pokemon/emolga/front.png and b/graphics/pokemon/emolga/front.png differ diff --git a/graphics/pokemon/emolga/normal.pal b/graphics/pokemon/emolga/normal.pal index 4d72d2e48dbb..92cb1b11675c 100644 --- a/graphics/pokemon/emolga/normal.pal +++ b/graphics/pokemon/emolga/normal.pal @@ -6,11 +6,11 @@ JASC-PAL 88 80 88 32 32 40 16 16 16 -192 152 48 +208 160 48 192 184 184 -160 120 24 +176 136 8 248 248 248 -248 200 56 +248 208 0 152 152 112 152 144 144 112 64 88 diff --git a/graphics/pokemon/empoleon/anim_front.png b/graphics/pokemon/empoleon/anim_front.png index 85d41c60270c..697609916a54 100644 Binary files a/graphics/pokemon/empoleon/anim_front.png and b/graphics/pokemon/empoleon/anim_front.png differ diff --git a/graphics/pokemon/empoleon/front.png b/graphics/pokemon/empoleon/front.png index 8cf43c9380dc..3b3dff0bc288 100644 Binary files a/graphics/pokemon/empoleon/front.png and b/graphics/pokemon/empoleon/front.png differ diff --git a/graphics/pokemon/empoleon/normal.pal b/graphics/pokemon/empoleon/normal.pal index 0b49c0a5e2a4..b026b6f74f97 100644 --- a/graphics/pokemon/empoleon/normal.pal +++ b/graphics/pokemon/empoleon/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -184 128 56 -248 200 128 -96 80 32 -240 176 96 +184 136 104 +248 224 128 +120 80 64 +232 200 96 16 16 16 -56 64 72 -40 72 120 -64 112 184 -32 32 40 -120 176 232 -232 232 232 +40 64 80 +40 88 144 +80 136 224 +32 40 48 +152 200 248 +232 232 248 216 232 248 32 32 40 0 0 0 diff --git a/graphics/pokemon/entei/anim_front.png b/graphics/pokemon/entei/anim_front.png index 10472e1332db..267cc4cb6476 100644 Binary files a/graphics/pokemon/entei/anim_front.png and b/graphics/pokemon/entei/anim_front.png differ diff --git a/graphics/pokemon/entei/front.png b/graphics/pokemon/entei/front.png index bdd6c1f7eb03..efed934d7f75 100644 Binary files a/graphics/pokemon/entei/front.png and b/graphics/pokemon/entei/front.png differ diff --git a/graphics/pokemon/entei/normal.pal b/graphics/pokemon/entei/normal.pal index eda697433022..5c26ab549394 100644 --- a/graphics/pokemon/entei/normal.pal +++ b/graphics/pokemon/entei/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 32 8 -248 192 40 -144 72 32 -200 112 56 -248 216 120 +80 40 0 +248 200 0 +128 80 40 +168 112 80 +248 224 144 16 16 16 -176 144 40 -184 24 24 -168 152 144 -128 24 16 -200 80 72 +192 136 0 +216 0 0 +168 168 168 +152 0 0 +232 64 64 248 248 248 -208 208 200 -96 80 96 -104 56 24 +208 208 208 +80 80 88 +104 64 56 diff --git a/graphics/pokemon/escavalier/anim_front.png b/graphics/pokemon/escavalier/anim_front.png index a296de1aa327..78d215a428eb 100644 Binary files a/graphics/pokemon/escavalier/anim_front.png and b/graphics/pokemon/escavalier/anim_front.png differ diff --git a/graphics/pokemon/escavalier/front.png b/graphics/pokemon/escavalier/front.png index 72bb5ca644ea..eb56edb91244 100644 Binary files a/graphics/pokemon/escavalier/front.png and b/graphics/pokemon/escavalier/front.png differ diff --git a/graphics/pokemon/escavalier/normal.pal b/graphics/pokemon/escavalier/normal.pal index ee4897d93eca..3aa60cf27a7b 100644 --- a/graphics/pokemon/escavalier/normal.pal +++ b/graphics/pokemon/escavalier/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 32 48 -224 72 96 -160 48 64 +128 8 8 +232 40 80 +184 32 80 16 16 16 -136 128 120 -192 184 176 -80 72 56 -112 96 88 -176 104 24 -176 128 48 -240 192 80 +144 144 152 +192 192 192 +56 64 72 +104 104 104 +224 88 16 +184 152 24 +248 216 24 248 248 248 -120 96 48 -40 104 152 -32 72 112 +112 96 32 +24 88 184 +40 72 128 diff --git a/graphics/pokemon/espeon/anim_front.png b/graphics/pokemon/espeon/anim_front.png index e9aeb6713912..1010130c1bc0 100644 Binary files a/graphics/pokemon/espeon/anim_front.png and b/graphics/pokemon/espeon/anim_front.png differ diff --git a/graphics/pokemon/espeon/front.png b/graphics/pokemon/espeon/front.png index d2cc671fb29a..9c0cc5bba9d6 100644 Binary files a/graphics/pokemon/espeon/front.png and b/graphics/pokemon/espeon/front.png differ diff --git a/graphics/pokemon/espeon/normal.pal b/graphics/pokemon/espeon/normal.pal index 8c1c52e7ed67..2c4844e872ee 100644 --- a/graphics/pokemon/espeon/normal.pal +++ b/graphics/pokemon/espeon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 56 72 -232 184 216 +120 72 120 +232 184 232 16 16 16 -168 120 136 -208 152 184 -56 80 104 -72 120 160 -200 64 64 +176 120 176 +224 160 208 +48 64 112 +72 112 176 +192 32 80 248 248 248 -104 72 168 -160 32 56 -160 144 208 -120 88 112 -155 49 106 -175 91 136 +128 96 176 +136 32 80 +192 192 192 +144 88 136 +168 16 0 +232 64 48 diff --git a/graphics/pokemon/excadrill/anim_front.png b/graphics/pokemon/excadrill/anim_front.png index bf9970785ec1..4a07a4d87f3c 100644 Binary files a/graphics/pokemon/excadrill/anim_front.png and b/graphics/pokemon/excadrill/anim_front.png differ diff --git a/graphics/pokemon/excadrill/front.png b/graphics/pokemon/excadrill/front.png index 437845c119ae..35cb0a1723cb 100644 Binary files a/graphics/pokemon/excadrill/front.png and b/graphics/pokemon/excadrill/front.png differ diff --git a/graphics/pokemon/excadrill/normal.pal b/graphics/pokemon/excadrill/normal.pal index f393e696d559..a193d953e376 100644 --- a/graphics/pokemon/excadrill/normal.pal +++ b/graphics/pokemon/excadrill/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 80 80 -216 208 208 +96 96 96 +208 208 208 16 16 16 -160 152 152 -56 48 48 +160 160 160 +64 48 40 88 72 64 -40 32 32 -112 56 72 -168 72 80 +40 32 24 +128 64 64 +184 64 64 248 248 248 -176 96 96 -224 136 144 +200 112 104 +232 128 120 128 40 48 0 0 0 0 0 0 diff --git a/graphics/pokemon/exeggcute/anim_front.png b/graphics/pokemon/exeggcute/anim_front.png index 5ce0963fe5d7..dc17ffb12b8e 100644 Binary files a/graphics/pokemon/exeggcute/anim_front.png and b/graphics/pokemon/exeggcute/anim_front.png differ diff --git a/graphics/pokemon/exeggcute/front.png b/graphics/pokemon/exeggcute/front.png index 8257e5bf3811..730bd6e12264 100644 Binary files a/graphics/pokemon/exeggcute/front.png and b/graphics/pokemon/exeggcute/front.png differ diff --git a/graphics/pokemon/exeggcute/normal.pal b/graphics/pokemon/exeggcute/normal.pal index b9fa9d86a0f6..5b12b18d4db2 100644 --- a/graphics/pokemon/exeggcute/normal.pal +++ b/graphics/pokemon/exeggcute/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -192 136 152 -136 56 88 -248 200 200 +197 115 148 +139 32 32 +255 213 222 16 16 16 -248 216 128 -216 184 56 +255 238 139 +205 139 8 248 248 248 -248 232 232 -216 216 216 -184 120 152 -232 176 176 +255 238 238 +222 222 222 +224 176 184 +232 192 192 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/exeggutor/anim_front.png b/graphics/pokemon/exeggutor/anim_front.png index 01911928886c..c55e603a0fe5 100644 Binary files a/graphics/pokemon/exeggutor/anim_front.png and b/graphics/pokemon/exeggutor/anim_front.png differ diff --git a/graphics/pokemon/exeggutor/front.png b/graphics/pokemon/exeggutor/front.png index d5aa3ce24e98..2ea8935be4e8 100644 Binary files a/graphics/pokemon/exeggutor/front.png and b/graphics/pokemon/exeggutor/front.png differ diff --git a/graphics/pokemon/exeggutor/normal.pal b/graphics/pokemon/exeggutor/normal.pal index f680838c9323..7430557a4c36 100644 --- a/graphics/pokemon/exeggutor/normal.pal +++ b/graphics/pokemon/exeggutor/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -48 96 64 +82 98 41 16 16 16 -72 152 96 -144 208 112 -88 184 120 -80 72 56 -200 192 128 -248 240 176 -248 248 200 +115 172 49 +189 255 115 +156 213 74 +82 65 16 +230 172 90 +255 246 139 +248 248 168 248 248 248 -120 120 72 -160 104 120 -136 120 96 -216 144 168 -192 168 144 +123 82 16 +164 106 32 +139 115 65 +230 172 90 +180 156 74 diff --git a/graphics/pokemon/exploud/anim_front.png b/graphics/pokemon/exploud/anim_front.png index 0b0fc2aabb72..c467275429a6 100644 Binary files a/graphics/pokemon/exploud/anim_front.png and b/graphics/pokemon/exploud/anim_front.png differ diff --git a/graphics/pokemon/exploud/front.png b/graphics/pokemon/exploud/front.png index c5e3bddb2f4d..03eb4fa59ba6 100644 Binary files a/graphics/pokemon/exploud/front.png and b/graphics/pokemon/exploud/front.png differ diff --git a/graphics/pokemon/exploud/normal.pal b/graphics/pokemon/exploud/normal.pal index da7be42054c4..b36fd399c61f 100644 --- a/graphics/pokemon/exploud/normal.pal +++ b/graphics/pokemon/exploud/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 136 80 -248 216 120 -16 16 16 -208 176 104 -88 80 120 -192 200 232 -152 160 216 -112 120 176 -112 40 80 -136 56 104 -232 128 128 -168 88 128 +160 120 32 +248 224 104 +0 0 0 +224 176 80 +80 72 136 +184 184 232 +160 160 216 +120 112 176 +88 32 88 +120 48 96 +224 112 152 +176 64 120 248 248 248 136 136 136 -200 144 168 +184 192 208 diff --git a/graphics/pokemon/farfetchd/anim_front.png b/graphics/pokemon/farfetchd/anim_front.png index 10073f5343df..c96acae39a80 100644 Binary files a/graphics/pokemon/farfetchd/anim_front.png and b/graphics/pokemon/farfetchd/anim_front.png differ diff --git a/graphics/pokemon/farfetchd/front.png b/graphics/pokemon/farfetchd/front.png index 6844e857290d..9616f035f61d 100644 Binary files a/graphics/pokemon/farfetchd/front.png and b/graphics/pokemon/farfetchd/front.png differ diff --git a/graphics/pokemon/farfetchd/normal.pal b/graphics/pokemon/farfetchd/normal.pal index 901576f958d7..8e8af671193f 100644 --- a/graphics/pokemon/farfetchd/normal.pal +++ b/graphics/pokemon/farfetchd/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 112 104 -88 72 64 -192 152 136 +132 107 33 +90 58 0 +181 148 82 16 16 16 -88 128 56 -232 224 192 -144 184 40 -192 184 152 -208 216 176 -200 168 160 +0 156 33 +230 230 165 +66 222 66 +197 206 132 +214 214 214 +230 197 123 248 248 248 -200 216 112 -248 208 120 -248 184 40 -184 136 32 +206 255 140 +255 222 107 +247 181 66 +189 115 25 diff --git a/graphics/pokemon/fearow/anim_front.png b/graphics/pokemon/fearow/anim_front.png index b0b4626d079e..9a9e669e09c0 100644 Binary files a/graphics/pokemon/fearow/anim_front.png and b/graphics/pokemon/fearow/anim_front.png differ diff --git a/graphics/pokemon/fearow/back.png b/graphics/pokemon/fearow/back.png index a2999d37338b..6ab9e169eff2 100644 Binary files a/graphics/pokemon/fearow/back.png and b/graphics/pokemon/fearow/back.png differ diff --git a/graphics/pokemon/fearow/front.png b/graphics/pokemon/fearow/front.png index ec674d6346de..6cb779e78e7a 100644 Binary files a/graphics/pokemon/fearow/front.png and b/graphics/pokemon/fearow/front.png differ diff --git a/graphics/pokemon/fearow/normal.pal b/graphics/pokemon/fearow/normal.pal index 48cc7dd7d36b..43c311727d1b 100644 --- a/graphics/pokemon/fearow/normal.pal +++ b/graphics/pokemon/fearow/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 88 48 -80 48 32 -224 192 152 -16 16 16 -176 112 56 -208 144 80 -112 32 32 -208 80 64 -144 72 56 -224 136 128 -208 184 152 -248 248 248 -168 144 112 -240 184 200 -200 144 144 +139 82 49 +98 57 32 +213 164 90 +0 0 0 +180 115 32 +123 32 32 +230 65 65 +180 32 32 +255 131 106 +98 90 57 +230 213 180 +255 255 255 +238 213 180 +172 164 106 +208 128 128 diff --git a/graphics/pokemon/fearow/shiny.pal b/graphics/pokemon/fearow/shiny.pal index 4d0161920627..7b60073d713c 100644 --- a/graphics/pokemon/fearow/shiny.pal +++ b/graphics/pokemon/fearow/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 136 48 -96 96 32 -208 216 88 -16 16 16 -176 184 32 -208 216 88 -136 48 0 -248 160 0 -208 120 0 -248 232 64 -224 208 176 -248 248 248 -168 160 104 -248 232 64 -248 160 0 +139 139 49 +98 57 32 +213 222 90 +0 0 0 +180 189 32 +139 49 0 +255 164 0 +213 123 0 +255 238 65 +98 98 57 +230 222 180 +255 255 255 +238 246 197 +172 172 106 +208 128 128 diff --git a/graphics/pokemon/feebas/anim_front.png b/graphics/pokemon/feebas/anim_front.png index 46874f95ff5e..f08426d73383 100644 Binary files a/graphics/pokemon/feebas/anim_front.png and b/graphics/pokemon/feebas/anim_front.png differ diff --git a/graphics/pokemon/feebas/front.png b/graphics/pokemon/feebas/front.png index 014124a8ebb5..2b746a493ec7 100644 Binary files a/graphics/pokemon/feebas/front.png and b/graphics/pokemon/feebas/front.png differ diff --git a/graphics/pokemon/feebas/normal.pal b/graphics/pokemon/feebas/normal.pal index 365a9f2a48a6..13358ec6546d 100644 --- a/graphics/pokemon/feebas/normal.pal +++ b/graphics/pokemon/feebas/normal.pal @@ -15,5 +15,5 @@ JASC-PAL 144 120 88 216 224 240 248 248 248 -240 160 168 -224 112 120 +248 120 128 +200 80 112 diff --git a/graphics/pokemon/feraligatr/anim_front.png b/graphics/pokemon/feraligatr/anim_front.png index 853c80e2ede6..d644a30ae3da 100644 Binary files a/graphics/pokemon/feraligatr/anim_front.png and b/graphics/pokemon/feraligatr/anim_front.png differ diff --git a/graphics/pokemon/feraligatr/front.png b/graphics/pokemon/feraligatr/front.png index 30307772e21d..dda82ea74953 100644 Binary files a/graphics/pokemon/feraligatr/front.png and b/graphics/pokemon/feraligatr/front.png differ diff --git a/graphics/pokemon/feraligatr/normal.pal b/graphics/pokemon/feraligatr/normal.pal index 16320dcd57dc..166ae9add605 100644 --- a/graphics/pokemon/feraligatr/normal.pal +++ b/graphics/pokemon/feraligatr/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 40 40 -248 160 136 +128 0 8 +248 136 128 16 16 16 240 80 88 -24 88 120 -96 200 232 -64 152 168 -152 232 240 +8 104 144 +64 208 232 +40 152 184 +136 232 248 248 248 248 192 192 192 248 184 112 -112 88 40 -240 216 152 -192 168 112 +128 88 0 +248 224 136 +200 184 96 0 0 0 diff --git a/graphics/pokemon/ferroseed/anim_front.png b/graphics/pokemon/ferroseed/anim_front.png index 51b2ae0ae6f4..4c5275b5ca00 100644 Binary files a/graphics/pokemon/ferroseed/anim_front.png and b/graphics/pokemon/ferroseed/anim_front.png differ diff --git a/graphics/pokemon/ferroseed/front.png b/graphics/pokemon/ferroseed/front.png index f7c87b2ddfdc..8242059a063f 100644 Binary files a/graphics/pokemon/ferroseed/front.png and b/graphics/pokemon/ferroseed/front.png differ diff --git a/graphics/pokemon/ferroseed/normal.pal b/graphics/pokemon/ferroseed/normal.pal index 58ca62664916..db9e02ebeee0 100644 --- a/graphics/pokemon/ferroseed/normal.pal +++ b/graphics/pokemon/ferroseed/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 80 72 -96 176 120 +16 64 32 +0 176 88 16 16 16 88 88 88 -192 192 200 -56 128 80 +176 184 184 +32 104 64 136 136 136 -48 48 56 +64 64 64 232 232 232 200 200 200 -184 120 56 -248 168 80 -0 0 0 +176 136 64 +232 184 72 +176 184 184 0 0 0 0 0 0 diff --git a/graphics/pokemon/ferrothorn/anim_front.png b/graphics/pokemon/ferrothorn/anim_front.png index 7542019e7af5..ccec2bda8f9f 100644 Binary files a/graphics/pokemon/ferrothorn/anim_front.png and b/graphics/pokemon/ferrothorn/anim_front.png differ diff --git a/graphics/pokemon/ferrothorn/front.png b/graphics/pokemon/ferrothorn/front.png index 2f43f4e9c085..eeee76f769cc 100644 Binary files a/graphics/pokemon/ferrothorn/front.png and b/graphics/pokemon/ferrothorn/front.png differ diff --git a/graphics/pokemon/ferrothorn/normal.pal b/graphics/pokemon/ferrothorn/normal.pal index c02ea55faebd..284ef0063eb5 100644 --- a/graphics/pokemon/ferrothorn/normal.pal +++ b/graphics/pokemon/ferrothorn/normal.pal @@ -3,16 +3,16 @@ JASC-PAL 16 152 208 160 88 88 88 -16 16 16 -48 48 56 -136 128 136 -40 72 64 -192 192 200 -56 128 80 -104 176 128 +0 0 0 +48 48 48 +128 128 136 +24 80 48 +176 184 184 +32 136 80 +0 176 88 248 248 248 -184 120 56 -240 152 72 +192 136 40 +232 184 72 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/finneon/anim_front.png b/graphics/pokemon/finneon/anim_front.png index 7e8e99a0e725..c18dd41cf0c5 100644 Binary files a/graphics/pokemon/finneon/anim_front.png and b/graphics/pokemon/finneon/anim_front.png differ diff --git a/graphics/pokemon/finneon/front.png b/graphics/pokemon/finneon/front.png index 063d58973104..635dcfc7e99a 100644 Binary files a/graphics/pokemon/finneon/front.png and b/graphics/pokemon/finneon/front.png differ diff --git a/graphics/pokemon/finneon/normal.pal b/graphics/pokemon/finneon/normal.pal index 3cb0afe37350..cc4af552a3fc 100644 --- a/graphics/pokemon/finneon/normal.pal +++ b/graphics/pokemon/finneon/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -80 120 120 -144 216 208 -32 40 48 -200 232 224 +80 104 136 +144 208 224 +40 40 56 +192 224 240 16 16 8 112 160 160 -144 64 104 -224 136 152 -200 88 136 -80 112 112 -48 72 80 +112 64 120 +168 136 184 +192 72 144 +64 104 128 +48 64 88 232 248 248 16 16 16 0 0 0 diff --git a/graphics/pokemon/flaaffy/anim_front.png b/graphics/pokemon/flaaffy/anim_front.png index 6cf5bc557f9f..0cc7d0439e64 100644 Binary files a/graphics/pokemon/flaaffy/anim_front.png and b/graphics/pokemon/flaaffy/anim_front.png differ diff --git a/graphics/pokemon/flaaffy/front.png b/graphics/pokemon/flaaffy/front.png index 0a6382039c31..373ff986f292 100644 Binary files a/graphics/pokemon/flaaffy/front.png and b/graphics/pokemon/flaaffy/front.png differ diff --git a/graphics/pokemon/flaaffy/normal.pal b/graphics/pokemon/flaaffy/normal.pal index 1581a2a70427..9b678134244e 100644 --- a/graphics/pokemon/flaaffy/normal.pal +++ b/graphics/pokemon/flaaffy/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 184 184 -248 248 240 -112 136 136 -208 216 216 +176 176 208 +248 248 248 +128 112 136 +200 216 240 16 16 16 -80 80 80 -144 88 104 -248 144 176 -216 120 152 -248 176 192 -120 56 72 -48 104 144 -72 136 168 -88 192 232 -48 88 120 +72 72 88 +208 96 120 +248 176 200 +248 136 152 +248 200 208 +136 32 48 +64 112 168 +80 128 192 +128 192 248 +40 64 136 diff --git a/graphics/pokemon/flareon/anim_front.png b/graphics/pokemon/flareon/anim_front.png index e76a63044611..1a13e5df4da9 100644 Binary files a/graphics/pokemon/flareon/anim_front.png and b/graphics/pokemon/flareon/anim_front.png differ diff --git a/graphics/pokemon/flareon/front.png b/graphics/pokemon/flareon/front.png index b587918dd868..40ef80eea5df 100644 Binary files a/graphics/pokemon/flareon/front.png and b/graphics/pokemon/flareon/front.png differ diff --git a/graphics/pokemon/flareon/normal.pal b/graphics/pokemon/flareon/normal.pal index 6d80e3fedd61..e16f62e9cb74 100644 --- a/graphics/pokemon/flareon/normal.pal +++ b/graphics/pokemon/flareon/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -104 88 56 -224 200 128 -248 232 152 -96 40 32 -176 152 96 -16 16 16 -192 80 32 -136 48 56 -240 120 64 -0 56 80 +115 90 65 +255 205 148 +255 238 164 +115 32 24 +197 164 106 +0 0 0 +222 74 57 +164 65 65 +255 115 90 +0 0 0 248 248 248 0 0 0 0 0 0 diff --git a/graphics/pokemon/floatzel/anim_front.png b/graphics/pokemon/floatzel/anim_front.png index 1b66fe15d3ac..d5dd3a61f6b8 100644 Binary files a/graphics/pokemon/floatzel/anim_front.png and b/graphics/pokemon/floatzel/anim_front.png differ diff --git a/graphics/pokemon/floatzel/front.png b/graphics/pokemon/floatzel/front.png index 64759500b062..6ff6ec136213 100644 Binary files a/graphics/pokemon/floatzel/front.png and b/graphics/pokemon/floatzel/front.png differ diff --git a/graphics/pokemon/floatzel/normal.pal b/graphics/pokemon/floatzel/normal.pal index 7494e2886ed2..c92f189e8977 100644 --- a/graphics/pokemon/floatzel/normal.pal +++ b/graphics/pokemon/floatzel/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 48 24 -232 128 80 -168 80 40 +120 64 32 +232 120 24 +168 88 32 24 24 24 -248 224 168 -192 168 112 +240 240 176 +200 184 128 120 104 40 248 248 248 -200 160 40 +224 160 48 96 96 80 -248 216 80 -56 120 152 -96 200 224 -200 96 48 +248 216 0 +32 96 160 +96 184 224 +200 104 24 248 248 248 diff --git a/graphics/pokemon/flygon/anim_front.png b/graphics/pokemon/flygon/anim_front.png index 4a9d71d599c7..dcc03a1c5b37 100644 Binary files a/graphics/pokemon/flygon/anim_front.png and b/graphics/pokemon/flygon/anim_front.png differ diff --git a/graphics/pokemon/flygon/front.png b/graphics/pokemon/flygon/front.png index cd2bc9fb3d0e..64b9467a5d94 100644 Binary files a/graphics/pokemon/flygon/front.png and b/graphics/pokemon/flygon/front.png differ diff --git a/graphics/pokemon/flygon/normal.pal b/graphics/pokemon/flygon/normal.pal index 5c5bf302fdfa..f9b4b8a31382 100644 --- a/graphics/pokemon/flygon/normal.pal +++ b/graphics/pokemon/flygon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 176 176 176 -56 96 56 -88 160 88 +48 88 88 +104 160 112 88 120 80 16 16 16 -136 200 136 -136 48 56 -224 104 112 +144 208 152 +128 40 56 +216 96 112 248 248 248 -176 72 96 -184 208 136 -232 144 160 -128 168 96 +200 56 72 +176 216 112 +248 160 176 +136 160 80 128 184 96 216 248 136 -88 96 64 +80 96 32 diff --git a/graphics/pokemon/foongus/anim_front.png b/graphics/pokemon/foongus/anim_front.png index 8bf943daa7f6..8c7b13ecf105 100644 Binary files a/graphics/pokemon/foongus/anim_front.png and b/graphics/pokemon/foongus/anim_front.png differ diff --git a/graphics/pokemon/foongus/front.png b/graphics/pokemon/foongus/front.png index fe85bd399ff7..0d584f1da7cf 100644 Binary files a/graphics/pokemon/foongus/front.png and b/graphics/pokemon/foongus/front.png differ diff --git a/graphics/pokemon/foongus/normal.pal b/graphics/pokemon/foongus/normal.pal index cd7a381b502d..78b7900af750 100644 --- a/graphics/pokemon/foongus/normal.pal +++ b/graphics/pokemon/foongus/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 64 64 -232 96 88 +120 48 48 +216 88 80 16 16 16 -168 72 64 -120 104 88 -80 64 56 -184 160 144 -240 224 208 -160 88 120 +152 56 56 +104 72 48 +64 40 40 +192 176 152 +248 240 224 +152 56 120 128 104 96 -216 120 168 -0 0 0 +208 96 152 +16 16 16 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/forretress/anim_front.png b/graphics/pokemon/forretress/anim_front.png index 77dccba4dce9..3ddc37f385e4 100644 Binary files a/graphics/pokemon/forretress/anim_front.png and b/graphics/pokemon/forretress/anim_front.png differ diff --git a/graphics/pokemon/forretress/front.png b/graphics/pokemon/forretress/front.png index 99f779de8121..dde5eac09e51 100644 Binary files a/graphics/pokemon/forretress/front.png and b/graphics/pokemon/forretress/front.png differ diff --git a/graphics/pokemon/forretress/normal.pal b/graphics/pokemon/forretress/normal.pal index 5fe04b7038c6..56fce78f928c 100644 --- a/graphics/pokemon/forretress/normal.pal +++ b/graphics/pokemon/forretress/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -168 136 152 -248 224 216 -88 72 96 +152 120 144 +232 216 224 +80 64 96 16 16 16 -224 184 208 +208 184 192 160 24 24 -184 64 64 -104 24 16 +208 64 56 +120 24 24 248 248 248 -208 112 112 +248 96 96 88 80 80 248 224 216 0 0 0 diff --git a/graphics/pokemon/fraxure/anim_front.png b/graphics/pokemon/fraxure/anim_front.png index 70fac2dd2fca..de1d6b8dafe6 100644 Binary files a/graphics/pokemon/fraxure/anim_front.png and b/graphics/pokemon/fraxure/anim_front.png differ diff --git a/graphics/pokemon/fraxure/front.png b/graphics/pokemon/fraxure/front.png index 8add7891a535..5171acb525bd 100644 Binary files a/graphics/pokemon/fraxure/front.png and b/graphics/pokemon/fraxure/front.png differ diff --git a/graphics/pokemon/fraxure/normal.pal b/graphics/pokemon/fraxure/normal.pal index 67bffd94e722..90a3d97bfaa5 100644 --- a/graphics/pokemon/fraxure/normal.pal +++ b/graphics/pokemon/fraxure/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 64 40 +48 72 40 16 16 16 -72 144 80 -56 96 56 -112 112 120 -88 80 88 -96 32 32 -192 104 96 -48 48 56 +72 136 72 +64 104 56 +112 112 112 +88 88 80 +96 0 0 +216 64 64 +56 56 56 248 248 248 -128 56 56 -160 144 152 -96 72 80 -120 112 112 -208 120 136 +176 32 32 +152 152 152 +120 40 48 +120 120 120 +232 128 120 diff --git a/graphics/pokemon/frillish/anim_front.png b/graphics/pokemon/frillish/anim_front.png index 908c66ace00e..161c4bfb1b12 100644 Binary files a/graphics/pokemon/frillish/anim_front.png and b/graphics/pokemon/frillish/anim_front.png differ diff --git a/graphics/pokemon/frillish/anim_frontf.png b/graphics/pokemon/frillish/anim_frontf.png index ae2c2ecee1bc..b3fa9621b3f3 100644 Binary files a/graphics/pokemon/frillish/anim_frontf.png and b/graphics/pokemon/frillish/anim_frontf.png differ diff --git a/graphics/pokemon/frillish/back.png b/graphics/pokemon/frillish/back.png index 70886b6b5c88..ee17f90cdb78 100644 Binary files a/graphics/pokemon/frillish/back.png and b/graphics/pokemon/frillish/back.png differ diff --git a/graphics/pokemon/frillish/backf.png b/graphics/pokemon/frillish/backf.png index ac2074aa6d83..fcfd88dceed2 100644 Binary files a/graphics/pokemon/frillish/backf.png and b/graphics/pokemon/frillish/backf.png differ diff --git a/graphics/pokemon/frillish/front.png b/graphics/pokemon/frillish/front.png index 9631e306001a..cd48a39ac990 100644 Binary files a/graphics/pokemon/frillish/front.png and b/graphics/pokemon/frillish/front.png differ diff --git a/graphics/pokemon/frillish/frontf.png b/graphics/pokemon/frillish/frontf.png new file mode 100644 index 000000000000..88713ea3aed5 Binary files /dev/null and b/graphics/pokemon/frillish/frontf.png differ diff --git a/graphics/pokemon/frillish/normal.pal b/graphics/pokemon/frillish/normal.pal index a6fdeb9f9fb2..33cbd2d10c11 100644 --- a/graphics/pokemon/frillish/normal.pal +++ b/graphics/pokemon/frillish/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -56 104 128 +56 88 104 16 16 16 -136 176 208 -184 240 240 -104 168 208 -144 224 232 +176 192 224 +208 224 248 +88 160 192 +128 208 248 248 248 248 -64 112 184 -232 96 80 -0 0 0 +56 96 192 +216 40 16 +56 88 104 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/frillish/normalf.pal b/graphics/pokemon/frillish/normalf.pal index 252ae04b6cf8..2932ece56c7b 100644 --- a/graphics/pokemon/frillish/normalf.pal +++ b/graphics/pokemon/frillish/normalf.pal @@ -2,15 +2,15 @@ JASC-PAL 0100 16 153 210 164 -132 87 106 +160 64 96 16 16 16 -185 166 216 -252 214 232 -190 139 198 -255 186 215 +216 184 192 +248 224 232 +192 128 160 +248 184 216 255 255 255 -242 112 92 -115 149 209 +168 48 64 +88 160 200 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/froslass/anim_front.png b/graphics/pokemon/froslass/anim_front.png index ea5207baae54..b6ef59fd4aca 100644 Binary files a/graphics/pokemon/froslass/anim_front.png and b/graphics/pokemon/froslass/anim_front.png differ diff --git a/graphics/pokemon/froslass/front.png b/graphics/pokemon/froslass/front.png index 3ad383321ab8..28597b4285f6 100644 Binary files a/graphics/pokemon/froslass/front.png and b/graphics/pokemon/froslass/front.png differ diff --git a/graphics/pokemon/froslass/normal.pal b/graphics/pokemon/froslass/normal.pal index 7d4fd3b87caf..eba1feb42701 100644 --- a/graphics/pokemon/froslass/normal.pal +++ b/graphics/pokemon/froslass/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 152 160 -152 200 184 -72 80 88 -160 152 136 -72 104 120 -248 248 240 -216 208 200 -128 80 160 -96 56 112 +80 120 176 +112 176 208 +64 64 104 +136 136 168 +64 80 136 +248 248 248 +192 200 216 +112 48 160 +72 48 112 16 16 16 -192 168 48 -248 224 104 -104 56 48 -176 72 40 -208 128 96 +216 144 56 +248 208 88 +104 48 48 +192 40 32 +224 120 72 diff --git a/graphics/pokemon/furret/anim_front.png b/graphics/pokemon/furret/anim_front.png index 14e651c69a37..bd0119c5684b 100644 Binary files a/graphics/pokemon/furret/anim_front.png and b/graphics/pokemon/furret/anim_front.png differ diff --git a/graphics/pokemon/furret/back.png b/graphics/pokemon/furret/back.png index 1c035910c234..1f93600abde0 100644 Binary files a/graphics/pokemon/furret/back.png and b/graphics/pokemon/furret/back.png differ diff --git a/graphics/pokemon/furret/front.png b/graphics/pokemon/furret/front.png index 5e4fc0364120..bab4d95b6bcb 100644 Binary files a/graphics/pokemon/furret/front.png and b/graphics/pokemon/furret/front.png differ diff --git a/graphics/pokemon/furret/normal.pal b/graphics/pokemon/furret/normal.pal index c927ef516040..661f34207a42 100644 --- a/graphics/pokemon/furret/normal.pal +++ b/graphics/pokemon/furret/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 40 40 -192 160 128 -112 72 56 -16 16 16 -232 200 152 -152 96 80 -160 128 104 -152 112 80 -248 216 184 +80 40 32 +208 176 104 +120 64 56 +32 32 40 +192 152 64 +232 208 160 +152 96 72 +168 128 40 +248 248 192 248 248 248 -32 96 80 -96 64 88 -224 112 112 -0 0 0 +112 112 112 +152 0 0 +248 144 96 +120 64 56 0 0 0 diff --git a/graphics/pokemon/furret/shiny.pal b/graphics/pokemon/furret/shiny.pal index b221862e527c..75a750fcab6a 100644 --- a/graphics/pokemon/furret/shiny.pal +++ b/graphics/pokemon/furret/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 16 64 +112 0 56 248 176 184 160 48 104 -16 16 16 -248 224 200 +32 32 40 +232 152 160 +248 232 216 216 88 136 -224 144 152 216 112 120 248 232 240 248 248 248 112 112 112 -152 56 56 +152 0 0 248 144 96 -0 0 0 +120 64 56 0 0 0 diff --git a/graphics/pokemon/gabite/anim_front.png b/graphics/pokemon/gabite/anim_front.png index 64dd7fd428ab..da2701ab0fcc 100644 Binary files a/graphics/pokemon/gabite/anim_front.png and b/graphics/pokemon/gabite/anim_front.png differ diff --git a/graphics/pokemon/gabite/front.png b/graphics/pokemon/gabite/front.png index 59ab36b06ad1..3495a5f183fe 100644 Binary files a/graphics/pokemon/gabite/front.png and b/graphics/pokemon/gabite/front.png differ diff --git a/graphics/pokemon/gabite/normal.pal b/graphics/pokemon/gabite/normal.pal index 300521aa60ba..6e64e91d8200 100644 --- a/graphics/pokemon/gabite/normal.pal +++ b/graphics/pokemon/gabite/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 80 120 -40 48 80 -88 112 168 -128 120 176 -168 168 232 -128 144 184 -16 16 16 -248 200 56 -160 128 32 -80 24 16 -160 56 40 +56 72 136 +16 40 80 +88 104 184 +136 136 184 +176 184 240 +112 136 200 +16 24 32 +248 248 24 +216 152 24 +88 16 0 +168 48 72 248 248 248 -216 96 72 -136 128 120 -200 192 184 +216 88 40 +112 120 128 +192 200 208 diff --git a/graphics/pokemon/gallade/anim_front.png b/graphics/pokemon/gallade/anim_front.png index dd3d07c4ecce..b2da036ff1c7 100644 Binary files a/graphics/pokemon/gallade/anim_front.png and b/graphics/pokemon/gallade/anim_front.png differ diff --git a/graphics/pokemon/gallade/front.png b/graphics/pokemon/gallade/front.png index 9582159149f5..93f2001594b4 100644 Binary files a/graphics/pokemon/gallade/front.png and b/graphics/pokemon/gallade/front.png differ diff --git a/graphics/pokemon/gallade/normal.pal b/graphics/pokemon/gallade/normal.pal index 0514a63f3a35..5f3e73587b81 100644 --- a/graphics/pokemon/gallade/normal.pal +++ b/graphics/pokemon/gallade/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 80 56 +56 80 80 16 16 16 -56 128 72 -96 152 152 -112 200 192 -56 112 104 -80 176 120 -152 128 128 -224 216 216 +64 128 88 +112 144 160 +120 192 176 +80 120 128 +88 176 104 +112 128 168 +200 200 224 248 248 248 -200 184 184 -112 40 64 -248 144 152 -208 72 96 +160 176 200 +128 40 72 +248 120 144 +208 72 112 248 248 248 diff --git a/graphics/pokemon/galvantula/anim_front.png b/graphics/pokemon/galvantula/anim_front.png index 5aa7dca3c304..20b458676602 100644 Binary files a/graphics/pokemon/galvantula/anim_front.png and b/graphics/pokemon/galvantula/anim_front.png differ diff --git a/graphics/pokemon/galvantula/front.png b/graphics/pokemon/galvantula/front.png index fb0ec315271b..980ca86f9fa5 100644 Binary files a/graphics/pokemon/galvantula/front.png and b/graphics/pokemon/galvantula/front.png differ diff --git a/graphics/pokemon/galvantula/normal.pal b/graphics/pokemon/galvantula/normal.pal index 10c8be6f9b59..e8975e877879 100644 --- a/graphics/pokemon/galvantula/normal.pal +++ b/graphics/pokemon/galvantula/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -79 85 122 -49 50 81 -102 121 186 +152 208 160 +40 56 120 +24 40 64 +56 80 176 16 16 16 -57 57 65 -178 142 71 -244 200 97 -175 143 186 -96 74 52 -132 110 72 -135 101 127 -255 255 255 -181 181 239 +56 56 64 +200 168 0 +248 216 80 +152 128 152 +104 80 56 +152 128 24 +112 104 104 +248 248 248 +0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/garbodor/anim_front.png b/graphics/pokemon/garbodor/anim_front.png index c8cb7329cbdf..b211c33cb8ff 100644 Binary files a/graphics/pokemon/garbodor/anim_front.png and b/graphics/pokemon/garbodor/anim_front.png differ diff --git a/graphics/pokemon/garbodor/front.png b/graphics/pokemon/garbodor/front.png index 0d6dd06ca652..959931034f84 100644 Binary files a/graphics/pokemon/garbodor/front.png and b/graphics/pokemon/garbodor/front.png differ diff --git a/graphics/pokemon/garbodor/normal.pal b/graphics/pokemon/garbodor/normal.pal index 6770ac733f7d..a6e27fa2a699 100644 --- a/graphics/pokemon/garbodor/normal.pal +++ b/graphics/pokemon/garbodor/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 112 88 -88 72 72 -16 16 16 -168 144 128 -184 64 120 -224 96 160 -40 128 120 -40 176 176 +120 104 88 +88 72 64 +0 0 0 +160 136 112 +184 48 120 +232 80 160 +24 104 128 +0 168 208 24 56 40 -80 112 88 -56 80 64 -168 184 192 -96 104 128 +40 104 72 +24 72 48 +184 184 184 +112 112 112 248 248 248 -0 0 0 +160 136 112 diff --git a/graphics/pokemon/garchomp/anim_front.png b/graphics/pokemon/garchomp/anim_front.png index 240708b95fc1..de7f101ea5ae 100644 Binary files a/graphics/pokemon/garchomp/anim_front.png and b/graphics/pokemon/garchomp/anim_front.png differ diff --git a/graphics/pokemon/garchomp/front.png b/graphics/pokemon/garchomp/front.png index 285c1b42ef59..e84e0270ff80 100644 Binary files a/graphics/pokemon/garchomp/front.png and b/graphics/pokemon/garchomp/front.png differ diff --git a/graphics/pokemon/garchomp/normal.pal b/graphics/pokemon/garchomp/normal.pal index 67980342378a..610ed93b52b1 100644 --- a/graphics/pokemon/garchomp/normal.pal +++ b/graphics/pokemon/garchomp/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 72 104 -184 144 32 -32 40 64 -128 136 168 -248 200 72 -88 104 152 +64 64 136 +192 144 16 +40 40 80 +120 120 200 +248 208 24 +88 96 168 16 16 16 248 248 248 -120 112 112 -200 184 184 -104 64 72 -224 88 64 -184 104 112 -88 24 8 -160 56 32 +112 120 128 +192 200 208 +104 56 88 +224 72 48 +184 112 120 +88 16 0 +184 56 64 diff --git a/graphics/pokemon/gardevoir/anim_front.png b/graphics/pokemon/gardevoir/anim_front.png index f3e85d0427bc..2b539caeea82 100644 Binary files a/graphics/pokemon/gardevoir/anim_front.png and b/graphics/pokemon/gardevoir/anim_front.png differ diff --git a/graphics/pokemon/gardevoir/front.png b/graphics/pokemon/gardevoir/front.png index f03c7de872df..2bfc838793f2 100644 Binary files a/graphics/pokemon/gardevoir/front.png and b/graphics/pokemon/gardevoir/front.png differ diff --git a/graphics/pokemon/gardevoir/normal.pal b/graphics/pokemon/gardevoir/normal.pal index 94ea8ef6ccda..e3030295a821 100644 --- a/graphics/pokemon/gardevoir/normal.pal +++ b/graphics/pokemon/gardevoir/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -0 176 232 -48 112 48 -96 168 88 -192 232 176 -128 200 128 +248 128 0 +48 120 64 +112 192 112 +184 240 144 +136 232 136 16 16 16 -120 112 160 -232 232 240 -248 144 152 +120 136 176 +240 240 248 +248 120 144 248 248 248 -192 184 216 -216 80 96 +200 200 232 +216 72 112 160 176 200 -120 48 56 +128 40 72 0 0 0 0 0 0 diff --git a/graphics/pokemon/gastly/anim_front.png b/graphics/pokemon/gastly/anim_front.png index 83037875d033..ff6c6591aee7 100644 Binary files a/graphics/pokemon/gastly/anim_front.png and b/graphics/pokemon/gastly/anim_front.png differ diff --git a/graphics/pokemon/gastly/front.png b/graphics/pokemon/gastly/front.png index 63bb5b5721ee..eca993908e9b 100644 Binary files a/graphics/pokemon/gastly/front.png and b/graphics/pokemon/gastly/front.png differ diff --git a/graphics/pokemon/gastly/normal.pal b/graphics/pokemon/gastly/normal.pal index 19d4c82570fa..7541f1751724 100644 --- a/graphics/pokemon/gastly/normal.pal +++ b/graphics/pokemon/gastly/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 144 176 -136 104 136 -112 64 112 -16 8 8 +213 172 205 +189 148 180 +139 98 131 +57 41 57 16 16 16 -56 40 40 -96 80 72 +115 74 106 +139 98 131 112 72 104 -248 248 248 -120 56 56 -184 80 88 +255 255 255 +180 41 16 +222 82 57 208 168 192 216 216 216 -152 88 112 -192 144 168 +180 41 16 +222 82 57 diff --git a/graphics/pokemon/gastrodon/anim_front.png b/graphics/pokemon/gastrodon/anim_front.png index fa48c288c420..c47a0e86b3cb 100644 Binary files a/graphics/pokemon/gastrodon/anim_front.png and b/graphics/pokemon/gastrodon/anim_front.png differ diff --git a/graphics/pokemon/gastrodon/back.png b/graphics/pokemon/gastrodon/back.png index d16eab76f7ca..a20c30c77e0e 100644 Binary files a/graphics/pokemon/gastrodon/back.png and b/graphics/pokemon/gastrodon/back.png differ diff --git a/graphics/pokemon/gastrodon/east_sea/anim_front.png b/graphics/pokemon/gastrodon/east_sea/anim_front.png index a71fed66f789..6e8ab451b5c4 100644 Binary files a/graphics/pokemon/gastrodon/east_sea/anim_front.png and b/graphics/pokemon/gastrodon/east_sea/anim_front.png differ diff --git a/graphics/pokemon/gastrodon/east_sea/back.png b/graphics/pokemon/gastrodon/east_sea/back.png index 3cf0717335a8..f200a3997a12 100644 Binary files a/graphics/pokemon/gastrodon/east_sea/back.png and b/graphics/pokemon/gastrodon/east_sea/back.png differ diff --git a/graphics/pokemon/gastrodon/east_sea/front.png b/graphics/pokemon/gastrodon/east_sea/front.png index f156301b619e..ca68f56d3a0b 100644 Binary files a/graphics/pokemon/gastrodon/east_sea/front.png and b/graphics/pokemon/gastrodon/east_sea/front.png differ diff --git a/graphics/pokemon/gastrodon/east_sea/normal.pal b/graphics/pokemon/gastrodon/east_sea/normal.pal index 1bf21b13c5c6..2f2405e45b92 100644 --- a/graphics/pokemon/gastrodon/east_sea/normal.pal +++ b/graphics/pokemon/gastrodon/east_sea/normal.pal @@ -8,12 +8,12 @@ JASC-PAL 51 104 47 115 186 126 49 49 41 -160 140 59 -252 231 95 -84 79 53 +160 144 56 +248 224 112 +80 72 56 115 98 98 255 255 255 -50 145 158 -65 206 219 -35 94 102 -0 0 0 +104 120 168 +104 176 248 +88 80 120 +168 56 80 diff --git a/graphics/pokemon/gastrodon/east_sea/shiny.pal b/graphics/pokemon/gastrodon/east_sea/shiny.pal index 68e4a6d27594..e5d9166a744d 100644 --- a/graphics/pokemon/gastrodon/east_sea/shiny.pal +++ b/graphics/pokemon/gastrodon/east_sea/shiny.pal @@ -16,4 +16,4 @@ JASC-PAL 101 145 155 131 222 222 81 94 119 -0 0 0 +168 56 80 diff --git a/graphics/pokemon/gastrodon/front.png b/graphics/pokemon/gastrodon/front.png index 97f5c4d695fe..b28352aed30e 100644 Binary files a/graphics/pokemon/gastrodon/front.png and b/graphics/pokemon/gastrodon/front.png differ diff --git a/graphics/pokemon/gastrodon/normal.pal b/graphics/pokemon/gastrodon/normal.pal index 13b5459440de..c9428d8bd2d7 100644 --- a/graphics/pokemon/gastrodon/normal.pal +++ b/graphics/pokemon/gastrodon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 48 32 +72 56 56 16 16 16 -152 112 64 -112 80 40 -184 152 104 +160 104 56 +104 72 56 +192 144 72 48 48 40 -152 136 64 -248 224 88 -80 72 48 +160 136 56 +248 216 112 +80 72 56 112 96 96 248 248 248 -184 96 128 -240 152 192 -96 48 64 -0 0 0 +168 96 144 +248 136 192 +104 56 80 +168 56 80 diff --git a/graphics/pokemon/gastrodon/shiny.pal b/graphics/pokemon/gastrodon/shiny.pal index 8e8be79eaca7..8b58c4c871ce 100644 --- a/graphics/pokemon/gastrodon/shiny.pal +++ b/graphics/pokemon/gastrodon/shiny.pal @@ -16,4 +16,4 @@ JASC-PAL 216 112 104 248 168 160 104 48 48 -0 0 0 +168 56 80 diff --git a/graphics/pokemon/genesect/anim_front.png b/graphics/pokemon/genesect/anim_front.png index ebded3024aa8..b83f0d786b98 100644 Binary files a/graphics/pokemon/genesect/anim_front.png and b/graphics/pokemon/genesect/anim_front.png differ diff --git a/graphics/pokemon/genesect/burn_drive/normal.pal b/graphics/pokemon/genesect/burn_drive/normal.pal index bb265f06e1cb..7c6721d6245d 100644 --- a/graphics/pokemon/genesect/burn_drive/normal.pal +++ b/graphics/pokemon/genesect/burn_drive/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 48 104 -120 72 128 -168 120 184 +80 40 72 +112 64 136 +152 88 192 16 16 16 -224 192 232 -102 21 18 -244 79 53 -168 50 42 -152 120 144 -112 56 48 -232 96 80 -136 80 56 +200 176 248 +72 0 0 +248 0 0 +176 0 0 +160 128 184 +112 48 40 +240 80 32 +176 64 32 248 248 248 112 112 112 0 0 0 diff --git a/graphics/pokemon/genesect/chill_drive/normal.pal b/graphics/pokemon/genesect/chill_drive/normal.pal index 9413f8cf5162..555a29e77ad8 100644 --- a/graphics/pokemon/genesect/chill_drive/normal.pal +++ b/graphics/pokemon/genesect/chill_drive/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 48 104 -120 72 128 -168 120 184 +80 40 72 +112 64 136 +152 88 192 16 16 16 -224 192 232 -85 87 96 -227 229 239 -150 154 165 -152 120 144 -112 56 48 -232 96 80 -136 80 56 +200 176 248 +72 72 72 +248 248 248 +176 176 176 +160 128 184 +112 48 40 +240 80 32 +176 64 32 248 248 248 112 112 112 0 0 0 diff --git a/graphics/pokemon/genesect/douse_drive/normal.pal b/graphics/pokemon/genesect/douse_drive/normal.pal index 4657de7fe0c4..418458adb191 100644 --- a/graphics/pokemon/genesect/douse_drive/normal.pal +++ b/graphics/pokemon/genesect/douse_drive/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 48 104 -120 72 128 -168 120 184 +80 40 72 +112 64 136 +152 88 192 16 16 16 -224 192 232 -18 88 102 -53 193 244 -42 143 168 -152 120 144 -112 56 48 -232 96 80 -136 80 56 +200 176 248 +0 64 72 +0 200 248 +0 128 176 +160 128 184 +112 48 40 +240 80 32 +176 64 32 248 248 248 112 112 112 0 0 0 diff --git a/graphics/pokemon/genesect/front.png b/graphics/pokemon/genesect/front.png index 40cc15d0516b..fff9ce8854de 100644 Binary files a/graphics/pokemon/genesect/front.png and b/graphics/pokemon/genesect/front.png differ diff --git a/graphics/pokemon/genesect/normal.pal b/graphics/pokemon/genesect/normal.pal index 98b6b9cf1e52..59230abc586e 100644 --- a/graphics/pokemon/genesect/normal.pal +++ b/graphics/pokemon/genesect/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -72 48 107 -121 74 135 -169 122 191 +152 208 160 +80 40 72 +112 64 136 +152 88 192 16 16 16 -228 192 234 -104 61 18 -247 170 54 -170 111 42 -155 125 144 -114 57 51 -234 97 82 -140 83 63 -255 255 255 -115 115 115 +200 176 248 +104 72 8 +232 184 0 +192 128 0 +160 128 184 +112 48 40 +240 80 32 +176 64 32 +248 248 248 +112 112 112 0 0 0 diff --git a/graphics/pokemon/genesect/shock_drive/normal.pal b/graphics/pokemon/genesect/shock_drive/normal.pal index 7df38ccbd1ac..e67c671f5b7e 100644 --- a/graphics/pokemon/genesect/shock_drive/normal.pal +++ b/graphics/pokemon/genesect/shock_drive/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 48 104 -120 72 128 -168 120 184 +80 40 72 +112 64 136 +152 88 192 16 16 16 -224 192 232 -102 88 18 -244 235 53 -168 151 42 -152 120 144 -112 56 48 -232 96 80 -136 80 56 +200 176 248 +72 64 8 +248 248 0 +176 176 0 +160 128 184 +112 48 40 +240 80 32 +176 64 32 248 248 248 112 112 112 0 0 0 diff --git a/graphics/pokemon/gengar/anim_front.png b/graphics/pokemon/gengar/anim_front.png index 2d646a7bf576..038bc71fcbc1 100644 Binary files a/graphics/pokemon/gengar/anim_front.png and b/graphics/pokemon/gengar/anim_front.png differ diff --git a/graphics/pokemon/gengar/front.png b/graphics/pokemon/gengar/front.png index bf06bd8fab5e..2c47843a2605 100644 Binary files a/graphics/pokemon/gengar/front.png and b/graphics/pokemon/gengar/front.png differ diff --git a/graphics/pokemon/gengar/normal.pal b/graphics/pokemon/gengar/normal.pal index 851c8f48a4a5..16892bb23c23 100644 --- a/graphics/pokemon/gengar/normal.pal +++ b/graphics/pokemon/gengar/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 72 120 -144 136 192 +90 74 156 +180 139 189 16 16 16 -112 104 168 -40 40 64 -80 80 160 -232 104 96 -248 144 144 -184 168 184 -248 240 248 -104 96 120 -216 208 216 -168 72 56 -40 40 64 +148 115 180 +74 41 74 +123 98 164 +255 90 90 +255 148 148 +189 172 189 +255 246 255 +106 98 123 +222 213 222 +168 16 16 +72 40 72 0 0 0 diff --git a/graphics/pokemon/geodude/anim_front.png b/graphics/pokemon/geodude/anim_front.png index 8c3970a41628..e5e28131d6e8 100644 Binary files a/graphics/pokemon/geodude/anim_front.png and b/graphics/pokemon/geodude/anim_front.png differ diff --git a/graphics/pokemon/geodude/front.png b/graphics/pokemon/geodude/front.png index 44aa52516fe1..8b94b33685ff 100644 Binary files a/graphics/pokemon/geodude/front.png and b/graphics/pokemon/geodude/front.png differ diff --git a/graphics/pokemon/geodude/normal.pal b/graphics/pokemon/geodude/normal.pal index 281606f80527..29e9e7409564 100644 --- a/graphics/pokemon/geodude/normal.pal +++ b/graphics/pokemon/geodude/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -112 96 112 -56 40 56 -200 200 176 -184 176 160 -152 144 120 +106 106 82 +65 57 49 +197 213 172 +180 180 156 +156 148 131 16 16 16 -200 216 200 -248 248 248 +205 222 205 +255 255 255 56 40 56 -132 72 90 -186 132 156 +136 16 16 +232 128 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/gible/anim_front.png b/graphics/pokemon/gible/anim_front.png index 3c268714efc6..459d543f28d8 100644 Binary files a/graphics/pokemon/gible/anim_front.png and b/graphics/pokemon/gible/anim_front.png differ diff --git a/graphics/pokemon/gible/front.png b/graphics/pokemon/gible/front.png index eea25b497e87..d3d5b48739a3 100644 Binary files a/graphics/pokemon/gible/front.png and b/graphics/pokemon/gible/front.png differ diff --git a/graphics/pokemon/gible/normal.pal b/graphics/pokemon/gible/normal.pal index f5668f01dae4..602482b455b9 100644 --- a/graphics/pokemon/gible/normal.pal +++ b/graphics/pokemon/gible/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 40 64 80 -104 152 168 -168 192 192 -80 104 120 +80 144 168 +136 192 208 +64 104 128 16 16 16 -96 192 216 +64 208 216 248 248 248 208 200 192 -80 152 160 -96 56 64 +56 168 192 +120 32 24 112 24 16 -184 120 144 -224 88 64 -160 56 32 +200 104 120 +216 88 40 +168 56 16 96 88 88 diff --git a/graphics/pokemon/gigalith/anim_front.png b/graphics/pokemon/gigalith/anim_front.png index f49973964394..67f9a51f2fea 100644 Binary files a/graphics/pokemon/gigalith/anim_front.png and b/graphics/pokemon/gigalith/anim_front.png differ diff --git a/graphics/pokemon/gigalith/front.png b/graphics/pokemon/gigalith/front.png index 51d57f766d7e..9cf2b0446929 100644 Binary files a/graphics/pokemon/gigalith/front.png and b/graphics/pokemon/gigalith/front.png differ diff --git a/graphics/pokemon/gigalith/normal.pal b/graphics/pokemon/gigalith/normal.pal index 939ad60be823..96c182254ff5 100644 --- a/graphics/pokemon/gigalith/normal.pal +++ b/graphics/pokemon/gigalith/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 32 32 -240 144 112 -16 16 16 -152 56 48 -232 88 80 -32 32 48 -48 48 88 -72 80 128 -160 112 48 -248 192 72 -32 32 40 -144 128 128 -88 80 80 +104 32 32 +232 112 112 +8 8 8 +152 48 48 +224 48 48 +32 40 64 +40 56 104 +64 80 136 +168 128 24 +216 184 88 +24 24 32 +128 128 128 +72 72 72 0 0 0 0 0 0 diff --git a/graphics/pokemon/girafarig/anim_front.png b/graphics/pokemon/girafarig/anim_front.png index 441dbd4db69c..d39510467b13 100644 Binary files a/graphics/pokemon/girafarig/anim_front.png and b/graphics/pokemon/girafarig/anim_front.png differ diff --git a/graphics/pokemon/girafarig/front.png b/graphics/pokemon/girafarig/front.png index 76d56b97d122..2a43c76e5d49 100644 Binary files a/graphics/pokemon/girafarig/front.png and b/graphics/pokemon/girafarig/front.png differ diff --git a/graphics/pokemon/girafarig/normal.pal b/graphics/pokemon/girafarig/normal.pal index cead7b5f17cc..98cf2c5bc9f9 100644 --- a/graphics/pokemon/girafarig/normal.pal +++ b/graphics/pokemon/girafarig/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 72 64 +64 72 112 248 248 248 -192 200 168 -160 152 112 -96 64 24 -144 104 40 -208 136 32 -248 192 80 -240 144 152 -184 88 104 -48 24 24 +168 176 208 +104 136 176 +72 56 56 +152 120 64 +208 144 56 +248 200 96 +200 104 144 +152 56 88 +72 56 56 16 16 16 -136 88 88 -80 48 40 -104 72 72 +144 120 104 +96 80 80 +136 112 88 diff --git a/graphics/pokemon/giratina/anim_front.png b/graphics/pokemon/giratina/anim_front.png index 7bf2e97f847d..af1332ed575a 100644 Binary files a/graphics/pokemon/giratina/anim_front.png and b/graphics/pokemon/giratina/anim_front.png differ diff --git a/graphics/pokemon/giratina/front.png b/graphics/pokemon/giratina/front.png index 33ed6ece981a..d0004746a901 100644 Binary files a/graphics/pokemon/giratina/front.png and b/graphics/pokemon/giratina/front.png differ diff --git a/graphics/pokemon/giratina/normal.pal b/graphics/pokemon/giratina/normal.pal index be4ff55cd22f..6aa922c8e1e0 100644 --- a/graphics/pokemon/giratina/normal.pal +++ b/graphics/pokemon/giratina/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 24 8 -40 48 56 -80 72 24 -184 80 80 -240 224 176 -136 48 48 -168 136 56 -96 88 104 -224 192 88 -144 136 144 -192 192 184 +80 16 0 +56 56 72 +112 80 0 +248 64 80 +248 248 208 +160 32 56 +200 152 0 +104 104 120 +248 208 0 +144 144 160 +192 200 208 16 16 16 -120 96 48 -64 64 80 +168 120 0 +72 72 88 0 0 0 diff --git a/graphics/pokemon/giratina/origin/anim_front.png b/graphics/pokemon/giratina/origin/anim_front.png index 788853e9dbfd..8dd5d89a0df2 100644 Binary files a/graphics/pokemon/giratina/origin/anim_front.png and b/graphics/pokemon/giratina/origin/anim_front.png differ diff --git a/graphics/pokemon/giratina/origin/front.png b/graphics/pokemon/giratina/origin/front.png index a86079135b45..14f631d09516 100644 Binary files a/graphics/pokemon/giratina/origin/front.png and b/graphics/pokemon/giratina/origin/front.png differ diff --git a/graphics/pokemon/giratina/origin/normal.pal b/graphics/pokemon/giratina/origin/normal.pal index daf42489b5d5..9285df19103f 100644 --- a/graphics/pokemon/giratina/origin/normal.pal +++ b/graphics/pokemon/giratina/origin/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 24 32 -48 48 56 -184 80 80 -136 48 48 -72 24 8 -80 72 24 -80 72 80 -224 192 88 -120 96 48 -168 144 72 -184 192 200 -136 144 136 -240 224 176 -8 8 8 -104 104 112 +40 40 40 +56 56 72 +248 64 80 +160 32 56 +88 48 16 +112 80 0 +72 72 88 +248 208 0 +168 120 0 +200 152 0 +192 200 208 +144 144 160 +248 232 192 +0 0 0 +104 104 120 diff --git a/graphics/pokemon/glaceon/anim_front.png b/graphics/pokemon/glaceon/anim_front.png index 06e9ac43d19f..a175e8a4395e 100644 Binary files a/graphics/pokemon/glaceon/anim_front.png and b/graphics/pokemon/glaceon/anim_front.png differ diff --git a/graphics/pokemon/glaceon/front.png b/graphics/pokemon/glaceon/front.png index 36dd1d595abe..463bd723d766 100644 Binary files a/graphics/pokemon/glaceon/front.png and b/graphics/pokemon/glaceon/front.png differ diff --git a/graphics/pokemon/glaceon/normal.pal b/graphics/pokemon/glaceon/normal.pal index d3e2fcf428e6..bd4ad34a5b65 100644 --- a/graphics/pokemon/glaceon/normal.pal +++ b/graphics/pokemon/glaceon/normal.pal @@ -3,16 +3,16 @@ JASC-PAL 16 152 208 160 80 112 120 -120 160 152 -160 224 224 +120 152 176 +144 224 232 16 16 16 -16 56 64 -56 136 152 -88 184 200 -32 104 112 +56 56 80 +80 96 152 +80 152 216 +64 88 104 232 248 248 -112 67 89 -163 107 137 +168 56 80 +224 104 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/glalie/anim_front.png b/graphics/pokemon/glalie/anim_front.png index 9d7727bd0bb7..4b05ec51d7bf 100644 Binary files a/graphics/pokemon/glalie/anim_front.png and b/graphics/pokemon/glalie/anim_front.png differ diff --git a/graphics/pokemon/glalie/front.png b/graphics/pokemon/glalie/front.png index 9371d35d295c..cb6ecd4925a3 100644 Binary files a/graphics/pokemon/glalie/front.png and b/graphics/pokemon/glalie/front.png differ diff --git a/graphics/pokemon/glalie/normal.pal b/graphics/pokemon/glalie/normal.pal index 81be19c29942..539d396c3193 100644 --- a/graphics/pokemon/glalie/normal.pal +++ b/graphics/pokemon/glalie/normal.pal @@ -11,9 +11,9 @@ JASC-PAL 200 208 232 168 176 224 80 88 120 -48 136 168 -120 184 208 -176 208 224 +40 128 184 +96 184 232 +160 216 248 248 248 248 0 0 0 0 0 0 diff --git a/graphics/pokemon/glameow/anim_front.png b/graphics/pokemon/glameow/anim_front.png index e2a988684ae5..d03df5738132 100644 Binary files a/graphics/pokemon/glameow/anim_front.png and b/graphics/pokemon/glameow/anim_front.png differ diff --git a/graphics/pokemon/glameow/front.png b/graphics/pokemon/glameow/front.png index 38d6b068877f..bd72d82c12a5 100644 Binary files a/graphics/pokemon/glameow/front.png and b/graphics/pokemon/glameow/front.png differ diff --git a/graphics/pokemon/glameow/normal.pal b/graphics/pokemon/glameow/normal.pal index 3b80e4edd0ea..82cb3f86ef28 100644 --- a/graphics/pokemon/glameow/normal.pal +++ b/graphics/pokemon/glameow/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 64 80 +64 64 80 16 16 16 248 248 248 160 160 192 -184 200 216 +200 200 216 88 112 136 -136 152 176 +136 152 184 80 88 96 -168 88 112 -240 120 152 -168 184 192 +208 72 128 +248 120 152 +168 176 200 104 80 112 -56 120 192 -240 192 88 +40 112 208 +248 216 112 192 152 72 diff --git a/graphics/pokemon/gligar/anim_front.png b/graphics/pokemon/gligar/anim_front.png index fea961a0880a..d3daf460fcbd 100644 Binary files a/graphics/pokemon/gligar/anim_front.png and b/graphics/pokemon/gligar/anim_front.png differ diff --git a/graphics/pokemon/gligar/front.png b/graphics/pokemon/gligar/front.png index c6a1e3f9f6c9..5164cb452bf5 100644 Binary files a/graphics/pokemon/gligar/front.png and b/graphics/pokemon/gligar/front.png differ diff --git a/graphics/pokemon/gligar/normal.pal b/graphics/pokemon/gligar/normal.pal index 7ddd7733def7..77bb9f9ef9db 100644 --- a/graphics/pokemon/gligar/normal.pal +++ b/graphics/pokemon/gligar/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 56 96 -240 168 208 +82 41 98 +222 148 197 16 16 16 -224 128 184 -184 96 152 -72 88 112 -248 248 248 -168 184 192 -56 96 160 -32 56 96 -64 136 200 -184 96 104 -120 64 72 -248 152 160 +205 98 164 +164 74 131 +74 90 115 +255 255 255 +172 189 197 +32 115 164 +32 65 115 +49 148 189 +139 41 49 +139 41 49 +197 115 139 0 0 0 diff --git a/graphics/pokemon/gliscor/anim_front.png b/graphics/pokemon/gliscor/anim_front.png index 136265168068..8c12ed4ef868 100644 Binary files a/graphics/pokemon/gliscor/anim_front.png and b/graphics/pokemon/gliscor/anim_front.png differ diff --git a/graphics/pokemon/gliscor/front.png b/graphics/pokemon/gliscor/front.png index fb9f0d640b83..24be70580480 100644 Binary files a/graphics/pokemon/gliscor/front.png and b/graphics/pokemon/gliscor/front.png differ diff --git a/graphics/pokemon/gliscor/normal.pal b/graphics/pokemon/gliscor/normal.pal index 21465ec01530..13b9917f1075 100644 --- a/graphics/pokemon/gliscor/normal.pal +++ b/graphics/pokemon/gliscor/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 104 136 -144 152 200 -48 56 80 -176 184 208 -120 128 168 +88 96 160 +152 136 232 +40 48 96 +176 160 248 +112 120 192 248 248 248 16 16 16 -80 32 24 -160 48 48 -232 80 80 -152 128 24 -240 208 56 -48 56 64 -176 160 248 -152 80 112 +112 8 0 +168 32 48 +216 56 104 +168 144 0 +248 216 0 +64 64 80 +192 80 144 +104 104 120 diff --git a/graphics/pokemon/gloom/anim_front.png b/graphics/pokemon/gloom/anim_front.png index 9961368e8c33..9f9ea94c6b77 100644 Binary files a/graphics/pokemon/gloom/anim_front.png and b/graphics/pokemon/gloom/anim_front.png differ diff --git a/graphics/pokemon/gloom/front.png b/graphics/pokemon/gloom/front.png index 9bfaeb2da09d..dfadc6841f8f 100644 Binary files a/graphics/pokemon/gloom/front.png and b/graphics/pokemon/gloom/front.png differ diff --git a/graphics/pokemon/gloom/normal.pal b/graphics/pokemon/gloom/normal.pal index d9b4b2f125b7..6d66df35cad0 100644 --- a/graphics/pokemon/gloom/normal.pal +++ b/graphics/pokemon/gloom/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 24 16 -136 64 48 -224 184 176 -168 88 72 +88 40 0 +131 57 24 +205 115 74 +172 82 57 16 16 16 -224 144 112 -216 104 64 +255 189 65 +255 115 0 240 232 184 -176 72 40 -136 48 16 -48 96 128 -24 48 72 -104 144 168 -136 120 192 -176 168 184 +197 115 41 +139 57 24 +74 106 123 +16 49 74 +123 131 164 +180 90 197 +156 164 205 diff --git a/graphics/pokemon/golbat/anim_front.png b/graphics/pokemon/golbat/anim_front.png index 06f1401f5bf1..661f81d46b72 100644 Binary files a/graphics/pokemon/golbat/anim_front.png and b/graphics/pokemon/golbat/anim_front.png differ diff --git a/graphics/pokemon/golbat/front.png b/graphics/pokemon/golbat/front.png index 8a5445300481..a18aad36517b 100644 Binary files a/graphics/pokemon/golbat/front.png and b/graphics/pokemon/golbat/front.png differ diff --git a/graphics/pokemon/golbat/normal.pal b/graphics/pokemon/golbat/normal.pal index b230ccfdaba6..048e118a7986 100644 --- a/graphics/pokemon/golbat/normal.pal +++ b/graphics/pokemon/golbat/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 112 144 -16 48 72 -16 16 16 -112 184 216 -56 152 192 -160 80 160 -112 64 112 -88 32 72 -184 120 192 -80 80 80 -208 208 208 -248 248 248 -96 96 96 +98 131 205 +57 57 123 +0 0 0 +172 205 255 +90 172 238 +172 82 172 +148 57 123 +98 16 82 +205 106 180 +98 98 98 +213 213 213 +255 255 255 +0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/goldeen/anim_front.png b/graphics/pokemon/goldeen/anim_front.png index 12283190538e..327ab59c3df4 100644 Binary files a/graphics/pokemon/goldeen/anim_front.png and b/graphics/pokemon/goldeen/anim_front.png differ diff --git a/graphics/pokemon/goldeen/front.png b/graphics/pokemon/goldeen/front.png index 09bac5324543..4f4b6db93922 100644 Binary files a/graphics/pokemon/goldeen/front.png and b/graphics/pokemon/goldeen/front.png differ diff --git a/graphics/pokemon/goldeen/normal.pal b/graphics/pokemon/goldeen/normal.pal index 694684b85dfc..ed88a1b59919 100644 --- a/graphics/pokemon/goldeen/normal.pal +++ b/graphics/pokemon/goldeen/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 80 96 +80 80 88 248 248 248 -152 136 168 -240 232 248 -208 200 232 -248 184 176 +136 136 144 +232 232 232 +208 208 216 +248 192 120 16 16 16 -240 136 104 -208 184 160 -208 72 48 -136 56 40 -32 120 120 -120 192 200 -160 88 104 -232 136 160 +232 120 64 +200 176 120 +208 64 16 +168 16 0 +0 104 96 +64 168 160 +168 80 112 +240 128 136 diff --git a/graphics/pokemon/golduck/anim_front.png b/graphics/pokemon/golduck/anim_front.png index 013adf608c6c..e48d067353e4 100644 Binary files a/graphics/pokemon/golduck/anim_front.png and b/graphics/pokemon/golduck/anim_front.png differ diff --git a/graphics/pokemon/golduck/front.png b/graphics/pokemon/golduck/front.png index 20ba1a1044ca..e670ad751977 100644 Binary files a/graphics/pokemon/golduck/front.png and b/graphics/pokemon/golduck/front.png differ diff --git a/graphics/pokemon/golduck/normal.pal b/graphics/pokemon/golduck/normal.pal index 46418a6286b1..9caf6c3b4dbb 100644 --- a/graphics/pokemon/golduck/normal.pal +++ b/graphics/pokemon/golduck/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 80 112 -136 184 224 +49 82 106 +139 172 213 16 16 16 -72 136 176 -208 80 48 -248 248 248 -136 40 24 -248 144 112 -208 208 208 -136 112 56 -248 232 208 -184 168 128 -232 216 152 -120 64 88 +123 123 180 +222 24 24 +255 255 255 +139 0 0 +255 172 172 +213 213 213 +115 106 16 +255 255 164 +164 164 57 +213 213 106 +139 0 0 160 216 248 diff --git a/graphics/pokemon/golem/anim_front.png b/graphics/pokemon/golem/anim_front.png index c5dc51991ac3..cd5af1012fd2 100644 Binary files a/graphics/pokemon/golem/anim_front.png and b/graphics/pokemon/golem/anim_front.png differ diff --git a/graphics/pokemon/golem/front.png b/graphics/pokemon/golem/front.png index 46902682a207..d885469e2b26 100644 Binary files a/graphics/pokemon/golem/front.png and b/graphics/pokemon/golem/front.png differ diff --git a/graphics/pokemon/golem/normal.pal b/graphics/pokemon/golem/normal.pal index c86f4f465d02..0006a7dca597 100644 --- a/graphics/pokemon/golem/normal.pal +++ b/graphics/pokemon/golem/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 64 56 -128 136 128 -112 104 96 -160 168 160 +65 74 16 +139 148 65 +98 106 32 +180 189 98 16 16 16 -112 112 112 -248 248 248 -88 72 72 -200 200 200 -192 168 168 -152 128 128 -216 192 184 -136 64 56 -208 88 80 -184 112 144 +115 115 115 +255 255 255 +90 74 16 +205 205 205 +213 180 90 +156 139 82 +246 222 139 +180 0 0 +255 82 82 +168 32 0 diff --git a/graphics/pokemon/golett/anim_front.png b/graphics/pokemon/golett/anim_front.png index c76316ec8d13..3f096e4a4941 100644 Binary files a/graphics/pokemon/golett/anim_front.png and b/graphics/pokemon/golett/anim_front.png differ diff --git a/graphics/pokemon/golett/front.png b/graphics/pokemon/golett/front.png index 30bf6d41c8f2..f58715bb95d6 100644 Binary files a/graphics/pokemon/golett/front.png and b/graphics/pokemon/golett/front.png differ diff --git a/graphics/pokemon/golett/normal.pal b/graphics/pokemon/golett/normal.pal index 494d34de47b5..3e3aa05db4f2 100644 --- a/graphics/pokemon/golett/normal.pal +++ b/graphics/pokemon/golett/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -33 89 82 -16 65 81 -106 186 186 -65 109 103 -87 150 147 -45 128 153 +152 208 160 +16 104 96 +0 72 80 +128 200 200 +40 136 136 +88 168 160 +40 128 136 24 24 32 -47 98 109 -255 220 150 -89 61 39 -173 131 90 -130 93 63 -221 194 110 -183 156 82 +16 104 120 +248 232 160 +104 64 0 +192 152 80 +152 112 40 +216 200 144 +216 216 120 0 0 0 diff --git a/graphics/pokemon/golurk/anim_front.png b/graphics/pokemon/golurk/anim_front.png index 1fb78e0ae3fb..fe862d33f811 100644 Binary files a/graphics/pokemon/golurk/anim_front.png and b/graphics/pokemon/golurk/anim_front.png differ diff --git a/graphics/pokemon/golurk/front.png b/graphics/pokemon/golurk/front.png index 8edfc59bab34..225a6a1426ff 100644 Binary files a/graphics/pokemon/golurk/front.png and b/graphics/pokemon/golurk/front.png differ diff --git a/graphics/pokemon/golurk/normal.pal b/graphics/pokemon/golurk/normal.pal index 94e239cf5ddd..d54b5c8622d4 100644 --- a/graphics/pokemon/golurk/normal.pal +++ b/graphics/pokemon/golurk/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -32 88 104 -32 56 72 -40 120 144 +153 210 164 +24 88 120 +16 80 96 +40 120 136 16 16 16 -56 96 104 -120 176 184 -80 136 128 -248 216 152 +40 120 136 +128 192 200 +88 160 160 +248 232 160 184 168 112 -224 192 120 -96 64 40 -192 152 104 -152 104 64 +216 200 144 +104 64 0 +192 152 80 +152 112 40 0 0 0 0 0 0 diff --git a/graphics/pokemon/gorebyss/anim_front.png b/graphics/pokemon/gorebyss/anim_front.png index a99317bde43b..b5a4ffcfee13 100644 Binary files a/graphics/pokemon/gorebyss/anim_front.png and b/graphics/pokemon/gorebyss/anim_front.png differ diff --git a/graphics/pokemon/gorebyss/front.png b/graphics/pokemon/gorebyss/front.png index 94abd8742cfd..09a8a3587fed 100644 Binary files a/graphics/pokemon/gorebyss/front.png and b/graphics/pokemon/gorebyss/front.png differ diff --git a/graphics/pokemon/gorebyss/normal.pal b/graphics/pokemon/gorebyss/normal.pal index 50066960a1dc..fd79ddb97d6d 100644 --- a/graphics/pokemon/gorebyss/normal.pal +++ b/graphics/pokemon/gorebyss/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 80 112 +144 72 88 248 248 248 224 216 208 -248 184 208 -240 152 184 -16 16 16 -216 112 160 -104 64 112 -216 176 224 -176 128 184 -144 96 152 -248 216 224 +240 168 200 +240 136 192 +0 0 0 +208 96 160 +96 56 104 +216 152 248 +176 112 224 +152 88 184 +248 200 216 200 184 168 -120 104 96 -176 128 184 +200 112 248 +168 104 208 diff --git a/graphics/pokemon/gothita/anim_front.png b/graphics/pokemon/gothita/anim_front.png index 46d451da6cb0..32e68ddf4627 100644 Binary files a/graphics/pokemon/gothita/anim_front.png and b/graphics/pokemon/gothita/anim_front.png differ diff --git a/graphics/pokemon/gothita/front.png b/graphics/pokemon/gothita/front.png index e545a3989b5a..e7052bf8d077 100644 Binary files a/graphics/pokemon/gothita/front.png and b/graphics/pokemon/gothita/front.png differ diff --git a/graphics/pokemon/gothita/normal.pal b/graphics/pokemon/gothita/normal.pal index 9406c182e5f3..b795c61f87f3 100644 --- a/graphics/pokemon/gothita/normal.pal +++ b/graphics/pokemon/gothita/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 40 40 -80 72 64 +48 48 48 +64 64 64 24 24 24 -112 104 96 -184 176 168 +112 112 112 +176 176 176 248 248 248 -200 144 208 -144 96 136 -72 48 72 -24 80 112 -80 176 216 -120 48 48 -216 88 88 +200 136 184 +144 104 128 +88 48 72 +8 72 136 +56 160 248 +120 72 64 +248 104 72 0 0 0 0 0 0 diff --git a/graphics/pokemon/gothitelle/anim_front.png b/graphics/pokemon/gothitelle/anim_front.png index 4974cf0c389b..e4ae46937f46 100644 Binary files a/graphics/pokemon/gothitelle/anim_front.png and b/graphics/pokemon/gothitelle/anim_front.png differ diff --git a/graphics/pokemon/gothitelle/front.png b/graphics/pokemon/gothitelle/front.png index 728da9edf87f..7178f82fbdc3 100644 Binary files a/graphics/pokemon/gothitelle/front.png and b/graphics/pokemon/gothitelle/front.png differ diff --git a/graphics/pokemon/gothitelle/normal.pal b/graphics/pokemon/gothitelle/normal.pal index acce41e3907e..ed07a68cecbe 100644 --- a/graphics/pokemon/gothitelle/normal.pal +++ b/graphics/pokemon/gothitelle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 24 24 -64 56 64 +48 48 48 +80 80 80 16 16 16 -120 104 96 -40 32 40 -168 160 152 +120 120 120 +56 56 56 +176 176 176 248 248 248 -184 120 168 -144 88 128 -208 160 200 -0 112 152 -8 184 240 -152 48 48 -232 88 88 +184 128 160 +144 88 120 +224 168 216 +8 112 200 +56 160 248 +152 80 64 +248 104 72 0 0 0 diff --git a/graphics/pokemon/gothorita/anim_front.png b/graphics/pokemon/gothorita/anim_front.png index 0cd24f1bdf21..c58ba1a19ad4 100644 Binary files a/graphics/pokemon/gothorita/anim_front.png and b/graphics/pokemon/gothorita/anim_front.png differ diff --git a/graphics/pokemon/gothorita/front.png b/graphics/pokemon/gothorita/front.png index b6fa0cb50704..7f6f07418257 100644 Binary files a/graphics/pokemon/gothorita/front.png and b/graphics/pokemon/gothorita/front.png differ diff --git a/graphics/pokemon/gothorita/normal.pal b/graphics/pokemon/gothorita/normal.pal index db3a7cbe8b1d..975e044cd2df 100644 --- a/graphics/pokemon/gothorita/normal.pal +++ b/graphics/pokemon/gothorita/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 24 24 24 -112 104 104 -184 168 168 +112 112 112 +176 176 176 248 248 248 -40 32 32 -48 48 56 -152 104 136 -192 144 208 -8 112 160 -8 192 240 -120 48 48 -184 72 72 +40 40 40 +64 64 64 +144 104 128 +200 136 184 +8 72 136 +56 160 248 +120 72 64 +248 104 72 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/granbull/anim_front.png b/graphics/pokemon/granbull/anim_front.png index 8b67749d97ce..492e0031aff3 100644 Binary files a/graphics/pokemon/granbull/anim_front.png and b/graphics/pokemon/granbull/anim_front.png differ diff --git a/graphics/pokemon/granbull/front.png b/graphics/pokemon/granbull/front.png index 3c3a0d72e403..9ad102c742c5 100644 Binary files a/graphics/pokemon/granbull/front.png and b/graphics/pokemon/granbull/front.png differ diff --git a/graphics/pokemon/granbull/normal.pal b/graphics/pokemon/granbull/normal.pal index 194de62fd2f8..e8999b66a6b5 100644 --- a/graphics/pokemon/granbull/normal.pal +++ b/graphics/pokemon/granbull/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 56 72 -240 176 208 -144 96 120 -184 128 160 +96 56 88 +208 168 208 +136 88 128 +168 128 168 16 16 16 208 208 216 248 248 248 -120 112 112 -56 56 56 -128 72 80 -224 112 112 -216 152 200 +120 128 128 +64 72 80 +168 16 0 +248 88 64 +192 136 200 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/graveler/anim_front.png b/graphics/pokemon/graveler/anim_front.png index 52bd60e1bdd1..f00ad98d8f11 100644 Binary files a/graphics/pokemon/graveler/anim_front.png and b/graphics/pokemon/graveler/anim_front.png differ diff --git a/graphics/pokemon/graveler/front.png b/graphics/pokemon/graveler/front.png index 61807e94fbbc..c6dcfbe9fb7b 100644 Binary files a/graphics/pokemon/graveler/front.png and b/graphics/pokemon/graveler/front.png differ diff --git a/graphics/pokemon/graveler/normal.pal b/graphics/pokemon/graveler/normal.pal index a78a6b5b181c..7a0929c16fb7 100644 --- a/graphics/pokemon/graveler/normal.pal +++ b/graphics/pokemon/graveler/normal.pal @@ -2,14 +2,14 @@ JASC-PAL 0100 16 152 208 160 -48 56 56 -216 208 184 -176 176 152 -136 136 112 -96 96 104 -16 16 16 -248 248 248 -184 104 128 +74 65 49 +213 213 172 +180 180 156 +148 139 123 +106 106 82 +0 0 0 +255 255 255 +189 74 57 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/grimer/anim_front.png b/graphics/pokemon/grimer/anim_front.png index 646e1f80a177..7cc6b2453dab 100644 Binary files a/graphics/pokemon/grimer/anim_front.png and b/graphics/pokemon/grimer/anim_front.png differ diff --git a/graphics/pokemon/grimer/front.png b/graphics/pokemon/grimer/front.png index 350c05fbed1b..b99fbb299c7c 100644 Binary files a/graphics/pokemon/grimer/front.png and b/graphics/pokemon/grimer/front.png differ diff --git a/graphics/pokemon/grimer/normal.pal b/graphics/pokemon/grimer/normal.pal index 9b8dd0a98ec2..b7c371b4864a 100644 --- a/graphics/pokemon/grimer/normal.pal +++ b/graphics/pokemon/grimer/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -136 112 152 -200 168 224 -80 56 96 -232 208 240 -168 128 192 +156 106 156 +222 172 222 +98 57 123 +238 222 238 +180 139 180 16 16 16 -104 80 120 +123 74 131 248 248 248 -120 128 160 -56 56 56 -152 168 200 +131 139 156 +65 74 90 +172 180 189 208 208 216 0 0 0 0 0 0 diff --git a/graphics/pokemon/grotle/anim_front.png b/graphics/pokemon/grotle/anim_front.png index f66f753c379c..6a740b732ded 100644 Binary files a/graphics/pokemon/grotle/anim_front.png and b/graphics/pokemon/grotle/anim_front.png differ diff --git a/graphics/pokemon/grotle/front.png b/graphics/pokemon/grotle/front.png index cabbca1bb518..f52ebe6d63a3 100644 Binary files a/graphics/pokemon/grotle/front.png and b/graphics/pokemon/grotle/front.png differ diff --git a/graphics/pokemon/grotle/normal.pal b/graphics/pokemon/grotle/normal.pal index 454c896154d3..2b6352a0ebcd 100644 --- a/graphics/pokemon/grotle/normal.pal +++ b/graphics/pokemon/grotle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 128 64 +56 136 64 56 88 40 -88 168 112 -16 16 16 -88 72 48 -168 120 72 -128 96 56 -208 176 56 -224 192 104 -96 128 72 -152 184 120 -120 168 96 +96 176 104 +16 16 24 +96 72 56 +176 128 80 +136 104 64 +216 176 64 +232 208 64 +104 136 72 +168 192 96 +144 168 88 248 248 248 208 208 208 144 144 144 diff --git a/graphics/pokemon/groudon/anim_front.png b/graphics/pokemon/groudon/anim_front.png index eb917bd75824..c38e0b206abc 100644 Binary files a/graphics/pokemon/groudon/anim_front.png and b/graphics/pokemon/groudon/anim_front.png differ diff --git a/graphics/pokemon/groudon/front.png b/graphics/pokemon/groudon/front.png index 9838355202bb..56e10fbccb11 100644 Binary files a/graphics/pokemon/groudon/front.png and b/graphics/pokemon/groudon/front.png differ diff --git a/graphics/pokemon/groudon/normal.pal b/graphics/pokemon/groudon/normal.pal index 4a3338b1f497..5291f38d9ef0 100644 --- a/graphics/pokemon/groudon/normal.pal +++ b/graphics/pokemon/groudon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -104 16 24 -248 152 136 -208 64 56 -248 104 80 -144 32 24 -176 48 32 -248 216 88 -112 88 80 +0 0 0 +120 32 40 +248 184 184 +248 32 40 +248 112 104 +152 40 40 +184 48 48 +248 200 48 +112 96 96 248 248 248 -136 104 48 -184 176 208 -56 48 40 -144 128 120 -168 152 144 +152 104 48 +184 184 208 +56 56 56 +144 128 136 +168 152 160 diff --git a/graphics/pokemon/grovyle/anim_front.png b/graphics/pokemon/grovyle/anim_front.png index ebb3dc0f37ad..c488a0aff718 100644 Binary files a/graphics/pokemon/grovyle/anim_front.png and b/graphics/pokemon/grovyle/anim_front.png differ diff --git a/graphics/pokemon/grovyle/front.png b/graphics/pokemon/grovyle/front.png index eecc7c93960f..810306218539 100644 Binary files a/graphics/pokemon/grovyle/front.png and b/graphics/pokemon/grovyle/front.png differ diff --git a/graphics/pokemon/grovyle/normal.pal b/graphics/pokemon/grovyle/normal.pal index b39fcc3a2717..754b6274728d 100644 --- a/graphics/pokemon/grovyle/normal.pal +++ b/graphics/pokemon/grovyle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 200 128 216 -40 64 40 -80 152 88 -64 112 64 +48 80 48 +80 152 72 +64 112 72 16 16 16 56 96 48 -88 168 96 -128 208 136 -64 136 64 -192 144 40 -248 224 136 -128 32 32 -208 80 80 +96 168 72 +136 208 120 +80 144 56 +200 144 8 +240 232 104 +120 48 56 +200 56 64 88 112 56 -240 120 120 +240 80 96 0 0 0 diff --git a/graphics/pokemon/growlithe/anim_front.png b/graphics/pokemon/growlithe/anim_front.png index d77fc1b158f7..a3e0fbe5bdd7 100644 Binary files a/graphics/pokemon/growlithe/anim_front.png and b/graphics/pokemon/growlithe/anim_front.png differ diff --git a/graphics/pokemon/growlithe/back.png b/graphics/pokemon/growlithe/back.png index ff46b992b509..7c7d03df432a 100644 Binary files a/graphics/pokemon/growlithe/back.png and b/graphics/pokemon/growlithe/back.png differ diff --git a/graphics/pokemon/growlithe/front.png b/graphics/pokemon/growlithe/front.png index 84d6e929fc66..b16a79c7bb27 100644 Binary files a/graphics/pokemon/growlithe/front.png and b/graphics/pokemon/growlithe/front.png differ diff --git a/graphics/pokemon/growlithe/normal.pal b/graphics/pokemon/growlithe/normal.pal index a19d76585261..7517c292900d 100644 --- a/graphics/pokemon/growlithe/normal.pal +++ b/graphics/pokemon/growlithe/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 80 56 -240 208 168 -184 152 120 +115 98 32 +255 246 164 +197 172 98 16 16 16 -208 176 136 -184 112 64 -112 64 32 -232 160 112 -224 136 72 -136 112 88 -48 56 64 +222 205 123 +197 82 82 +115 57 16 +255 180 82 +238 139 74 +115 98 32 +106 106 106 88 88 120 248 248 240 216 216 208 -183 123 135 +168 48 16 diff --git a/graphics/pokemon/grumpig/anim_front.png b/graphics/pokemon/grumpig/anim_front.png index 8aaa19b7c349..4bc3a84cfcb7 100644 Binary files a/graphics/pokemon/grumpig/anim_front.png and b/graphics/pokemon/grumpig/anim_front.png differ diff --git a/graphics/pokemon/grumpig/front.png b/graphics/pokemon/grumpig/front.png index 9df84fba8d9e..c5b65ca3b3c4 100644 Binary files a/graphics/pokemon/grumpig/front.png and b/graphics/pokemon/grumpig/front.png differ diff --git a/graphics/pokemon/grumpig/normal.pal b/graphics/pokemon/grumpig/normal.pal index c1f82cf8139f..d4366275dbd3 100644 --- a/graphics/pokemon/grumpig/normal.pal +++ b/graphics/pokemon/grumpig/normal.pal @@ -7,13 +7,13 @@ JASC-PAL 96 96 96 16 16 16 120 120 128 -184 128 184 -152 96 104 -192 160 208 -216 184 224 +184 96 168 +144 56 72 +208 128 200 +224 160 216 112 88 120 -200 120 136 +200 80 104 248 248 248 -232 152 168 +224 112 136 216 192 232 -248 184 192 +248 152 168 diff --git a/graphics/pokemon/gulpin/anim_front.png b/graphics/pokemon/gulpin/anim_front.png index c4974b675f5c..a85959ee7b46 100644 Binary files a/graphics/pokemon/gulpin/anim_front.png and b/graphics/pokemon/gulpin/anim_front.png differ diff --git a/graphics/pokemon/gulpin/front.png b/graphics/pokemon/gulpin/front.png index f13058f54675..d1efac94dc98 100644 Binary files a/graphics/pokemon/gulpin/front.png and b/graphics/pokemon/gulpin/front.png differ diff --git a/graphics/pokemon/gulpin/normal.pal b/graphics/pokemon/gulpin/normal.pal index 8ffe5b374739..377c234f0463 100644 --- a/graphics/pokemon/gulpin/normal.pal +++ b/graphics/pokemon/gulpin/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 0 176 232 -160 136 64 -248 224 168 -16 16 16 -240 208 88 -216 176 48 -56 88 56 -88 152 88 -112 176 112 -144 208 144 -168 232 168 -56 56 48 +168 144 72 +240 232 152 +0 0 0 +240 216 64 +200 168 16 +72 104 56 +112 160 96 +136 184 112 +160 216 144 +200 232 176 +64 64 64 104 104 104 0 0 0 0 0 0 diff --git a/graphics/pokemon/gurdurr/anim_front.png b/graphics/pokemon/gurdurr/anim_front.png index 868a94171071..1e455d093ff6 100644 Binary files a/graphics/pokemon/gurdurr/anim_front.png and b/graphics/pokemon/gurdurr/anim_front.png differ diff --git a/graphics/pokemon/gurdurr/front.png b/graphics/pokemon/gurdurr/front.png index 73f778d6b506..710ec3b85e3f 100644 Binary files a/graphics/pokemon/gurdurr/front.png and b/graphics/pokemon/gurdurr/front.png differ diff --git a/graphics/pokemon/gurdurr/normal.pal b/graphics/pokemon/gurdurr/normal.pal index 1a67fe5be15f..835ac8aef664 100644 --- a/graphics/pokemon/gurdurr/normal.pal +++ b/graphics/pokemon/gurdurr/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 +152 208 160 16 16 16 -122 36 49 -196 94 101 -173 69 79 -63 24 42 -89 79 66 -158 138 115 -196 183 157 -109 49 84 -165 82 131 -211 110 177 -255 255 255 -115 41 65 -173 55 73 +128 40 56 +216 80 88 +184 56 72 +96 24 48 +88 56 64 +152 136 128 +192 184 168 +112 48 80 +152 72 128 +208 104 176 +248 248 248 +112 40 64 +168 40 64 0 0 0 diff --git a/graphics/pokemon/gyarados/anim_front.png b/graphics/pokemon/gyarados/anim_front.png index 0db69d82aa07..688fed9fecc5 100644 Binary files a/graphics/pokemon/gyarados/anim_front.png and b/graphics/pokemon/gyarados/anim_front.png differ diff --git a/graphics/pokemon/gyarados/front.png b/graphics/pokemon/gyarados/front.png index 45009b5c9b41..3c0edf57d6ff 100644 Binary files a/graphics/pokemon/gyarados/front.png and b/graphics/pokemon/gyarados/front.png differ diff --git a/graphics/pokemon/gyarados/normal.pal b/graphics/pokemon/gyarados/normal.pal index 991d74930eea..23fb1929769e 100644 --- a/graphics/pokemon/gyarados/normal.pal +++ b/graphics/pokemon/gyarados/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 24 24 -96 96 128 -40 96 112 -168 184 224 -24 64 80 -40 176 224 -32 128 160 -240 240 240 -152 224 248 -248 216 160 -184 160 120 -88 72 48 -104 48 48 -160 96 112 -224 144 176 +25 25 25 +115 123 123 +25 99 148 +214 222 247 +25 66 115 +66 181 239 +33 140 173 +247 247 247 +123 214 239 +247 230 173 +206 181 123 +90 66 33 +107 25 33 +189 49 99 +239 99 66 diff --git a/graphics/pokemon/happiny/anim_front.png b/graphics/pokemon/happiny/anim_front.png index 91b98794911f..7ae898ab1660 100644 Binary files a/graphics/pokemon/happiny/anim_front.png and b/graphics/pokemon/happiny/anim_front.png differ diff --git a/graphics/pokemon/happiny/front.png b/graphics/pokemon/happiny/front.png index 0d957955c4cc..547c652edfee 100644 Binary files a/graphics/pokemon/happiny/front.png and b/graphics/pokemon/happiny/front.png differ diff --git a/graphics/pokemon/happiny/normal.pal b/graphics/pokemon/happiny/normal.pal index 896e3ecd9c00..e7bbb9af524d 100644 --- a/graphics/pokemon/happiny/normal.pal +++ b/graphics/pokemon/happiny/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -144 112 112 -192 136 144 -248 184 192 +160 88 120 +192 136 160 +248 192 208 16 16 16 -104 72 80 -232 128 152 -160 96 104 +112 64 88 +216 104 152 +160 80 120 248 248 248 -200 184 184 -224 192 192 +200 184 192 +192 192 192 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/hariyama/anim_front.png b/graphics/pokemon/hariyama/anim_front.png index abec77e9edb6..7b55b728e8ea 100644 Binary files a/graphics/pokemon/hariyama/anim_front.png and b/graphics/pokemon/hariyama/anim_front.png differ diff --git a/graphics/pokemon/hariyama/front.png b/graphics/pokemon/hariyama/front.png index 619abaeb3434..4a21a2a0b146 100644 Binary files a/graphics/pokemon/hariyama/front.png and b/graphics/pokemon/hariyama/front.png differ diff --git a/graphics/pokemon/hariyama/normal.pal b/graphics/pokemon/hariyama/normal.pal index cb5bef2fcc2a..6ed66591279c 100644 --- a/graphics/pokemon/hariyama/normal.pal +++ b/graphics/pokemon/hariyama/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -232 152 120 -120 72 56 -216 128 88 -168 112 88 -192 168 144 -240 224 200 -224 200 176 -56 64 112 -96 104 152 -120 104 80 -248 248 248 -152 112 56 -248 216 112 -216 160 96 +0 0 0 +238 156 98 +131 74 49 +213 131 90 +180 106 82 +213 180 131 +246 230 197 +230 213 164 +57 65 106 +139 106 82 +98 98 148 +255 255 255 +172 123 74 +255 213 123 +213 164 98 diff --git a/graphics/pokemon/haunter/anim_front.png b/graphics/pokemon/haunter/anim_front.png index 62b5431d5041..03156dfa4c42 100644 Binary files a/graphics/pokemon/haunter/anim_front.png and b/graphics/pokemon/haunter/anim_front.png differ diff --git a/graphics/pokemon/haunter/front.png b/graphics/pokemon/haunter/front.png index abf047ebef3e..f9434ad095ad 100644 Binary files a/graphics/pokemon/haunter/front.png and b/graphics/pokemon/haunter/front.png differ diff --git a/graphics/pokemon/haunter/normal.pal b/graphics/pokemon/haunter/normal.pal index 38e187f5856c..79ac421466e0 100644 --- a/graphics/pokemon/haunter/normal.pal +++ b/graphics/pokemon/haunter/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -88 64 104 -144 128 176 -56 40 56 +128 88 136 +192 152 200 +80 64 96 16 16 16 -104 88 136 +168 128 192 248 248 248 112 112 112 -168 72 120 -224 112 168 +176 24 96 +216 88 160 208 208 208 -104 48 80 +104 0 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/haxorus/anim_front.png b/graphics/pokemon/haxorus/anim_front.png index 0ab43ae82e5f..d189fdc676c2 100644 Binary files a/graphics/pokemon/haxorus/anim_front.png and b/graphics/pokemon/haxorus/anim_front.png differ diff --git a/graphics/pokemon/haxorus/front.png b/graphics/pokemon/haxorus/front.png index 3187fbb4c44d..e5c216c13082 100644 Binary files a/graphics/pokemon/haxorus/front.png and b/graphics/pokemon/haxorus/front.png differ diff --git a/graphics/pokemon/haxorus/normal.pal b/graphics/pokemon/haxorus/normal.pal index c4730d845536..0e10e61a6984 100644 --- a/graphics/pokemon/haxorus/normal.pal +++ b/graphics/pokemon/haxorus/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -80 16 16 +80 0 0 16 16 16 -144 32 32 -56 48 56 -176 72 48 -56 56 24 -184 168 88 -80 72 80 -152 144 40 -112 104 40 -32 32 40 +136 0 0 +56 56 72 +192 0 0 +64 64 0 +184 192 80 +80 80 96 +160 168 24 +96 104 16 +40 40 56 248 248 248 0 0 0 0 0 0 diff --git a/graphics/pokemon/heatmor/anim_front.png b/graphics/pokemon/heatmor/anim_front.png index 0789d83331e5..b9c5088ab890 100644 Binary files a/graphics/pokemon/heatmor/anim_front.png and b/graphics/pokemon/heatmor/anim_front.png differ diff --git a/graphics/pokemon/heatmor/front.png b/graphics/pokemon/heatmor/front.png index 708dc0d57a5a..0b912da48b18 100644 Binary files a/graphics/pokemon/heatmor/front.png and b/graphics/pokemon/heatmor/front.png differ diff --git a/graphics/pokemon/heatmor/normal.pal b/graphics/pokemon/heatmor/normal.pal index 70d0fd758280..cf4f3678a9d6 100644 --- a/graphics/pokemon/heatmor/normal.pal +++ b/graphics/pokemon/heatmor/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 88 72 -64 64 56 -128 56 48 -160 136 104 -184 80 72 -200 144 48 -232 168 64 +120 96 80 +80 48 32 +136 48 48 +160 136 112 +192 72 64 +224 136 64 +248 192 64 248 248 248 -16 16 16 -96 40 32 -160 112 40 0 0 0 +96 24 16 +160 136 72 +96 24 16 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/heatran/anim_front.png b/graphics/pokemon/heatran/anim_front.png index 086fc0460423..afc5dbe4191d 100644 Binary files a/graphics/pokemon/heatran/anim_front.png and b/graphics/pokemon/heatran/anim_front.png differ diff --git a/graphics/pokemon/heatran/front.png b/graphics/pokemon/heatran/front.png index 5bff3348a934..e446b445dc12 100644 Binary files a/graphics/pokemon/heatran/front.png and b/graphics/pokemon/heatran/front.png differ diff --git a/graphics/pokemon/heatran/normal.pal b/graphics/pokemon/heatran/normal.pal index f9a324244edd..fd73b92b34a2 100644 --- a/graphics/pokemon/heatran/normal.pal +++ b/graphics/pokemon/heatran/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 56 32 16 -96 48 24 -136 72 40 +128 64 88 +168 88 64 24 24 24 104 112 120 -224 224 200 -192 192 176 -192 104 32 -248 136 40 -152 136 136 +224 224 232 +192 192 192 +200 128 40 +248 160 16 +144 144 144 248 248 248 -80 72 72 -176 80 32 -240 104 32 +80 80 80 +176 64 40 +248 80 56 0 0 0 diff --git a/graphics/pokemon/heracross/anim_front.png b/graphics/pokemon/heracross/anim_front.png index 5e90a642c7c0..426443655098 100644 Binary files a/graphics/pokemon/heracross/anim_front.png and b/graphics/pokemon/heracross/anim_front.png differ diff --git a/graphics/pokemon/heracross/front.png b/graphics/pokemon/heracross/front.png index 2ba9232e252d..db9b244da3e6 100644 Binary files a/graphics/pokemon/heracross/front.png and b/graphics/pokemon/heracross/front.png differ diff --git a/graphics/pokemon/heracross/normal.pal b/graphics/pokemon/heracross/normal.pal index 51a68f1e06c5..7f4cde957b32 100644 --- a/graphics/pokemon/heracross/normal.pal +++ b/graphics/pokemon/heracross/normal.pal @@ -3,13 +3,13 @@ JASC-PAL 16 152 208 160 16 16 16 -136 184 216 -32 56 80 -80 144 176 -40 96 144 -104 80 48 -240 208 152 -224 168 88 +144 184 248 +48 56 96 +104 144 192 +64 96 144 +104 88 32 +248 216 88 +184 152 48 248 248 248 96 96 96 152 152 152 diff --git a/graphics/pokemon/herdier/anim_front.png b/graphics/pokemon/herdier/anim_front.png index a99c0355958a..e0d73d729a8d 100644 Binary files a/graphics/pokemon/herdier/anim_front.png and b/graphics/pokemon/herdier/anim_front.png differ diff --git a/graphics/pokemon/herdier/front.png b/graphics/pokemon/herdier/front.png index a705795c60df..b28db7c31971 100644 Binary files a/graphics/pokemon/herdier/front.png and b/graphics/pokemon/herdier/front.png differ diff --git a/graphics/pokemon/herdier/normal.pal b/graphics/pokemon/herdier/normal.pal index c4216fed549c..37d84df47329 100644 --- a/graphics/pokemon/herdier/normal.pal +++ b/graphics/pokemon/herdier/normal.pal @@ -4,7 +4,7 @@ JASC-PAL 152 208 160 136 80 56 216 136 96 -80 48 40 +72 48 16 16 16 16 248 216 160 24 24 32 @@ -14,6 +14,6 @@ JASC-PAL 160 160 160 248 248 248 192 192 192 +56 56 56 40 48 72 -0 0 0 -0 0 0 +56 72 112 diff --git a/graphics/pokemon/hippopotas/anim_front.png b/graphics/pokemon/hippopotas/anim_front.png index 8de30eae6984..74eba5613fb1 100644 Binary files a/graphics/pokemon/hippopotas/anim_front.png and b/graphics/pokemon/hippopotas/anim_front.png differ diff --git a/graphics/pokemon/hippopotas/anim_frontf.png b/graphics/pokemon/hippopotas/anim_frontf.png deleted file mode 100644 index 8a0b675bb39f..000000000000 Binary files a/graphics/pokemon/hippopotas/anim_frontf.png and /dev/null differ diff --git a/graphics/pokemon/hippopotas/back.png b/graphics/pokemon/hippopotas/back.png index 0657cc93c42c..b34d3d7209e1 100644 Binary files a/graphics/pokemon/hippopotas/back.png and b/graphics/pokemon/hippopotas/back.png differ diff --git a/graphics/pokemon/hippopotas/backf.png b/graphics/pokemon/hippopotas/backf.png deleted file mode 100644 index 1a7413613839..000000000000 Binary files a/graphics/pokemon/hippopotas/backf.png and /dev/null differ diff --git a/graphics/pokemon/hippopotas/front.png b/graphics/pokemon/hippopotas/front.png index 42a2b0fd4549..ea6fc85848c6 100644 Binary files a/graphics/pokemon/hippopotas/front.png and b/graphics/pokemon/hippopotas/front.png differ diff --git a/graphics/pokemon/hippopotas/iconf.png b/graphics/pokemon/hippopotas/iconf.png new file mode 100644 index 000000000000..cfb2b90fd2e4 Binary files /dev/null and b/graphics/pokemon/hippopotas/iconf.png differ diff --git a/graphics/pokemon/hippowdon/backf.png b/graphics/pokemon/hippowdon/backf.png deleted file mode 100644 index 1cfc725e938a..000000000000 Binary files a/graphics/pokemon/hippowdon/backf.png and /dev/null differ diff --git a/graphics/pokemon/hippowdon/iconf.png b/graphics/pokemon/hippowdon/iconf.png new file mode 100644 index 000000000000..80460903abe5 Binary files /dev/null and b/graphics/pokemon/hippowdon/iconf.png differ diff --git a/graphics/pokemon/hitmonchan/anim_front.png b/graphics/pokemon/hitmonchan/anim_front.png index 674667d8d343..71d40fb78516 100644 Binary files a/graphics/pokemon/hitmonchan/anim_front.png and b/graphics/pokemon/hitmonchan/anim_front.png differ diff --git a/graphics/pokemon/hitmonchan/front.png b/graphics/pokemon/hitmonchan/front.png index 2c2d04ad64c6..0721d04c05ae 100644 Binary files a/graphics/pokemon/hitmonchan/front.png and b/graphics/pokemon/hitmonchan/front.png differ diff --git a/graphics/pokemon/hitmonchan/normal.pal b/graphics/pokemon/hitmonchan/normal.pal index 14af602a8d04..2124609315a3 100644 --- a/graphics/pokemon/hitmonchan/normal.pal +++ b/graphics/pokemon/hitmonchan/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 72 72 -200 168 144 +90 65 16 +205 180 123 16 16 16 -160 136 112 -224 192 168 -248 240 248 -72 72 112 -64 120 160 -176 72 64 -232 152 144 -224 120 112 -120 24 24 -144 136 176 -176 168 208 -137 79 86 +164 139 115 +238 213 156 +255 246 255 +98 74 115 +98 74 115 +189 49 74 +255 148 90 +230 98 74 +139 32 0 +164 156 164 +197 180 197 +232 128 120 diff --git a/graphics/pokemon/hitmonlee/anim_front.png b/graphics/pokemon/hitmonlee/anim_front.png index 97dc31acc4bc..89d69129da82 100644 Binary files a/graphics/pokemon/hitmonlee/anim_front.png and b/graphics/pokemon/hitmonlee/anim_front.png differ diff --git a/graphics/pokemon/hitmonlee/front.png b/graphics/pokemon/hitmonlee/front.png index 07f4e155fee0..080b6fd7bf5e 100644 Binary files a/graphics/pokemon/hitmonlee/front.png and b/graphics/pokemon/hitmonlee/front.png differ diff --git a/graphics/pokemon/hitmonlee/normal.pal b/graphics/pokemon/hitmonlee/normal.pal index 1345645b7b22..ef9db09638d4 100644 --- a/graphics/pokemon/hitmonlee/normal.pal +++ b/graphics/pokemon/hitmonlee/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 80 72 -152 112 104 -192 152 144 -88 48 48 -224 184 176 -88 80 80 -16 16 16 +131 90 57 +164 123 115 +205 164 131 +98 57 24 +238 197 164 +115 98 98 +41 41 41 248 248 248 208 200 200 -88 72 48 -176 168 128 -224 208 160 -216 200 112 +90 74 41 +189 180 106 +238 230 180 +189 180 106 240 224 168 0 0 0 diff --git a/graphics/pokemon/hitmontop/anim_front.png b/graphics/pokemon/hitmontop/anim_front.png index af13cbe26777..65ef049e1090 100644 Binary files a/graphics/pokemon/hitmontop/anim_front.png and b/graphics/pokemon/hitmontop/anim_front.png differ diff --git a/graphics/pokemon/hitmontop/front.png b/graphics/pokemon/hitmontop/front.png index eb63c61b3c85..28118af282cf 100644 Binary files a/graphics/pokemon/hitmontop/front.png and b/graphics/pokemon/hitmontop/front.png differ diff --git a/graphics/pokemon/hitmontop/normal.pal b/graphics/pokemon/hitmontop/normal.pal index b19e8919847d..c8cb22d51085 100644 --- a/graphics/pokemon/hitmontop/normal.pal +++ b/graphics/pokemon/hitmontop/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 144 128 -104 104 88 +144 144 152 +96 96 104 248 248 248 -192 192 208 -56 104 152 -64 136 200 -120 176 224 -24 72 120 -112 72 48 +200 200 200 +72 112 192 +96 152 216 +136 184 232 +80 88 144 +128 88 40 16 16 16 -216 152 120 -168 120 96 -224 176 144 -144 144 152 +216 184 128 +176 136 88 +248 216 152 +0 0 0 0 0 0 diff --git a/graphics/pokemon/ho_oh/anim_front.png b/graphics/pokemon/ho_oh/anim_front.png index 5682e95144b5..8bc726f7904c 100644 Binary files a/graphics/pokemon/ho_oh/anim_front.png and b/graphics/pokemon/ho_oh/anim_front.png differ diff --git a/graphics/pokemon/ho_oh/front.png b/graphics/pokemon/ho_oh/front.png index fae8fd1468eb..4c32adca93bf 100644 Binary files a/graphics/pokemon/ho_oh/front.png and b/graphics/pokemon/ho_oh/front.png differ diff --git a/graphics/pokemon/ho_oh/normal.pal b/graphics/pokemon/ho_oh/normal.pal index af86f06a696b..d4c1f1dfa41e 100644 --- a/graphics/pokemon/ho_oh/normal.pal +++ b/graphics/pokemon/ho_oh/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -96 112 40 -152 200 96 -176 32 24 -120 24 16 -208 232 184 -248 112 96 +64 104 56 +120 200 72 +176 40 32 +136 32 32 +168 240 168 +248 104 88 16 16 16 -248 64 32 -184 120 32 -240 240 128 -248 152 32 -112 72 32 -192 208 192 +248 48 8 +168 96 32 +248 248 128 +248 176 16 +112 64 32 +208 208 208 248 248 248 -72 80 120 +112 112 128 diff --git a/graphics/pokemon/honchkrow/anim_front.png b/graphics/pokemon/honchkrow/anim_front.png index d9047ae416a8..b7cff5cf2e99 100644 Binary files a/graphics/pokemon/honchkrow/anim_front.png and b/graphics/pokemon/honchkrow/anim_front.png differ diff --git a/graphics/pokemon/honchkrow/front.png b/graphics/pokemon/honchkrow/front.png index f86b5a6c53b3..9681f682fb7c 100644 Binary files a/graphics/pokemon/honchkrow/front.png and b/graphics/pokemon/honchkrow/front.png differ diff --git a/graphics/pokemon/honchkrow/normal.pal b/graphics/pokemon/honchkrow/normal.pal index 03cfdeb0000f..a4971698b73e 100644 --- a/graphics/pokemon/honchkrow/normal.pal +++ b/graphics/pokemon/honchkrow/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 104 136 -32 64 88 -24 40 48 +64 96 152 +48 64 96 +40 40 64 16 16 16 -72 16 16 -144 32 40 -160 136 64 -184 168 168 +72 32 32 +136 48 56 +168 144 56 +160 160 176 248 248 248 -232 200 80 -208 48 64 -80 80 40 -240 232 224 -96 96 96 -56 56 56 +240 216 56 +216 80 88 +88 88 56 +232 232 240 +80 80 80 +48 48 56 diff --git a/graphics/pokemon/hoothoot/anim_front.png b/graphics/pokemon/hoothoot/anim_front.png index 7f4aab679179..585fc6518a63 100644 Binary files a/graphics/pokemon/hoothoot/anim_front.png and b/graphics/pokemon/hoothoot/anim_front.png differ diff --git a/graphics/pokemon/hoothoot/back.png b/graphics/pokemon/hoothoot/back.png index 9f3a48701eef..c51927615ce4 100644 Binary files a/graphics/pokemon/hoothoot/back.png and b/graphics/pokemon/hoothoot/back.png differ diff --git a/graphics/pokemon/hoothoot/front.png b/graphics/pokemon/hoothoot/front.png index 5269906bb4ff..0cc0353801b4 100644 Binary files a/graphics/pokemon/hoothoot/front.png and b/graphics/pokemon/hoothoot/front.png differ diff --git a/graphics/pokemon/hoothoot/normal.pal b/graphics/pokemon/hoothoot/normal.pal index 758787e5f0e3..213e6acaa0ee 100644 --- a/graphics/pokemon/hoothoot/normal.pal +++ b/graphics/pokemon/hoothoot/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -56 56 56 -152 112 88 -120 88 72 -72 40 32 -176 136 96 -208 176 128 -240 96 72 -72 56 72 -232 176 192 -152 120 128 -208 176 144 -248 208 176 +64 64 64 +152 104 48 +120 88 80 +80 48 0 +184 136 64 +200 160 120 +104 48 24 +184 88 40 +240 96 48 +232 168 144 +216 184 152 +248 224 192 248 248 248 -136 136 136 +120 120 120 diff --git a/graphics/pokemon/hoothoot/shiny.pal b/graphics/pokemon/hoothoot/shiny.pal index 85bf196e6b0e..44b4e4912f62 100644 --- a/graphics/pokemon/hoothoot/shiny.pal +++ b/graphics/pokemon/hoothoot/shiny.pal @@ -4,16 +4,16 @@ JASC-PAL 152 208 160 16 16 16 64 64 64 -200 168 64 +216 184 72 192 136 72 120 72 16 232 208 64 -248 240 144 -240 96 48 +248 232 120 104 48 24 +184 88 40 +240 96 48 232 168 144 -216 112 72 -216 224 136 +232 248 128 240 248 192 248 248 248 120 120 120 diff --git a/graphics/pokemon/hoppip/anim_front.png b/graphics/pokemon/hoppip/anim_front.png index 63f77907d092..bea636b46f47 100644 Binary files a/graphics/pokemon/hoppip/anim_front.png and b/graphics/pokemon/hoppip/anim_front.png differ diff --git a/graphics/pokemon/hoppip/front.png b/graphics/pokemon/hoppip/front.png index 32329fcca4a7..42f0e5c8e632 100644 Binary files a/graphics/pokemon/hoppip/front.png and b/graphics/pokemon/hoppip/front.png differ diff --git a/graphics/pokemon/hoppip/normal.pal b/graphics/pokemon/hoppip/normal.pal index 7806f8311457..76c92f1f5249 100644 --- a/graphics/pokemon/hoppip/normal.pal +++ b/graphics/pokemon/hoppip/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 0 176 232 -96 144 56 -120 200 64 -168 232 112 -64 88 32 -16 16 16 -176 88 112 -248 152 176 -112 40 64 -240 112 152 -240 224 112 -248 208 40 +82 131 57 +98 189 90 +156 222 90 +65 90 16 +0 0 0 +180 98 115 +246 156 180 +139 8 57 +255 123 148 +255 255 0 +255 197 0 40 40 40 0 0 0 0 0 0 diff --git a/graphics/pokemon/horsea/anim_front.png b/graphics/pokemon/horsea/anim_front.png index bf91109b19a7..3094e370429e 100644 Binary files a/graphics/pokemon/horsea/anim_front.png and b/graphics/pokemon/horsea/anim_front.png differ diff --git a/graphics/pokemon/horsea/front.png b/graphics/pokemon/horsea/front.png index 45cb87cdec07..5ea743f224f6 100644 Binary files a/graphics/pokemon/horsea/front.png and b/graphics/pokemon/horsea/front.png differ diff --git a/graphics/pokemon/horsea/normal.pal b/graphics/pokemon/horsea/normal.pal index e25c6bb05927..ef39fd81c494 100644 --- a/graphics/pokemon/horsea/normal.pal +++ b/graphics/pokemon/horsea/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 88 112 -64 152 184 -112 208 240 -184 240 248 +57 82 98 +106 148 180 +164 197 238 +189 222 255 16 16 16 248 248 248 -208 208 208 -216 88 72 -144 128 96 -248 240 192 -208 192 136 -176 56 56 +213 213 213 +255 115 115 +156 131 74 +255 255 172 +222 197 74 +255 115 115 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/houndoom/anim_front.png b/graphics/pokemon/houndoom/anim_front.png index 8b96b911a4f0..b2cfcd7029cc 100644 Binary files a/graphics/pokemon/houndoom/anim_front.png and b/graphics/pokemon/houndoom/anim_front.png differ diff --git a/graphics/pokemon/houndoom/front.png b/graphics/pokemon/houndoom/front.png index a8abb7999eea..8ebef8181f3e 100644 Binary files a/graphics/pokemon/houndoom/front.png and b/graphics/pokemon/houndoom/front.png differ diff --git a/graphics/pokemon/houndoom/normal.pal b/graphics/pokemon/houndoom/normal.pal index 8212f9464626..55f44c4fd14c 100644 --- a/graphics/pokemon/houndoom/normal.pal +++ b/graphics/pokemon/houndoom/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 96 88 -224 200 184 -168 152 144 +112 104 112 +208 208 208 +160 160 160 248 248 248 -8 8 8 -32 24 32 -80 72 64 -48 40 40 -176 80 48 -224 136 96 -168 72 80 +0 0 0 +24 32 40 +72 72 80 +48 48 56 +160 88 72 +240 152 128 +152 40 56 96 40 16 -72 16 24 -80 72 64 +96 16 16 +72 72 80 0 0 0 diff --git a/graphics/pokemon/houndour/anim_front.png b/graphics/pokemon/houndour/anim_front.png index e737a34c1232..2cf035d0383a 100644 Binary files a/graphics/pokemon/houndour/anim_front.png and b/graphics/pokemon/houndour/anim_front.png differ diff --git a/graphics/pokemon/houndour/back.png b/graphics/pokemon/houndour/back.png index 36af7e431191..daf5f91b481c 100644 Binary files a/graphics/pokemon/houndour/back.png and b/graphics/pokemon/houndour/back.png differ diff --git a/graphics/pokemon/houndour/front.png b/graphics/pokemon/houndour/front.png index 7a83778a47a6..39d1ce974229 100644 Binary files a/graphics/pokemon/houndour/front.png and b/graphics/pokemon/houndour/front.png differ diff --git a/graphics/pokemon/houndour/normal.pal b/graphics/pokemon/houndour/normal.pal index 228decda8d8c..6d940707f487 100644 --- a/graphics/pokemon/houndour/normal.pal +++ b/graphics/pokemon/houndour/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 32 40 -72 72 64 -24 16 16 -152 144 152 +40 40 48 +72 72 80 +16 24 32 +160 152 168 248 248 248 8 8 8 -136 56 16 +112 64 40 184 184 200 -240 160 128 -208 104 64 -122 63 71 -0 0 0 -0 0 0 +240 160 120 +168 112 80 +40 40 40 +176 120 88 +168 16 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/houndour/shiny.pal b/graphics/pokemon/houndour/shiny.pal index 1ee0abc0fdce..38ada23be889 100644 --- a/graphics/pokemon/houndour/shiny.pal +++ b/graphics/pokemon/houndour/shiny.pal @@ -13,7 +13,7 @@ JASC-PAL 248 224 112 176 136 56 178 75 44 -0 0 0 +168 16 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/huntail/anim_front.png b/graphics/pokemon/huntail/anim_front.png index 6d231eac0709..e3aa0efab118 100644 Binary files a/graphics/pokemon/huntail/anim_front.png and b/graphics/pokemon/huntail/anim_front.png differ diff --git a/graphics/pokemon/huntail/front.png b/graphics/pokemon/huntail/front.png index e10f98f1d0cd..9a5c28850be1 100644 Binary files a/graphics/pokemon/huntail/front.png and b/graphics/pokemon/huntail/front.png differ diff --git a/graphics/pokemon/huntail/normal.pal b/graphics/pokemon/huntail/normal.pal index 0651b07403f4..9987a3b3165d 100644 --- a/graphics/pokemon/huntail/normal.pal +++ b/graphics/pokemon/huntail/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 88 112 -136 200 240 +40 96 120 +136 200 232 16 16 16 -80 152 192 -128 80 56 -200 128 80 -248 184 128 +72 152 184 +160 88 32 +208 128 0 +232 168 96 192 200 224 248 248 248 -184 224 248 +176 232 240 144 136 136 112 72 88 -184 120 136 -216 160 168 +192 112 144 +240 144 176 160 128 144 diff --git a/graphics/pokemon/hydreigon/anim_front.png b/graphics/pokemon/hydreigon/anim_front.png index 4fa0d96811ff..b4e3432f00b2 100644 Binary files a/graphics/pokemon/hydreigon/anim_front.png and b/graphics/pokemon/hydreigon/anim_front.png differ diff --git a/graphics/pokemon/hydreigon/front.png b/graphics/pokemon/hydreigon/front.png index 67a7fa51eecd..68aa66cd87f3 100644 Binary files a/graphics/pokemon/hydreigon/front.png and b/graphics/pokemon/hydreigon/front.png differ diff --git a/graphics/pokemon/hydreigon/normal.pal b/graphics/pokemon/hydreigon/normal.pal index f40c3ff93d6d..f07d5f03c5c0 100644 --- a/graphics/pokemon/hydreigon/normal.pal +++ b/graphics/pokemon/hydreigon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 40 40 +40 32 40 64 56 64 16 16 16 -88 80 80 -120 48 88 -168 88 128 -56 24 40 -40 56 80 -96 144 200 -80 104 136 -72 56 88 -144 88 96 +80 80 80 +136 40 96 +184 80 120 +96 32 64 +24 48 104 +88 128 200 +56 88 152 +96 56 104 +144 88 120 224 216 216 -48 40 40 +40 32 40 0 0 0 diff --git a/graphics/pokemon/hypno/anim_front.png b/graphics/pokemon/hypno/anim_front.png index 64ba1fb56017..d96bd7613db4 100644 Binary files a/graphics/pokemon/hypno/anim_front.png and b/graphics/pokemon/hypno/anim_front.png differ diff --git a/graphics/pokemon/hypno/front.png b/graphics/pokemon/hypno/front.png index 72c602e06ae2..391eaba23088 100644 Binary files a/graphics/pokemon/hypno/front.png and b/graphics/pokemon/hypno/front.png differ diff --git a/graphics/pokemon/hypno/normal.pal b/graphics/pokemon/hypno/normal.pal index 1adb09313fa4..be159251d45a 100644 --- a/graphics/pokemon/hypno/normal.pal +++ b/graphics/pokemon/hypno/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 96 80 +136 96 48 104 80 0 -248 216 56 -16 16 16 -168 136 32 +240 216 0 +0 0 0 +176 144 32 88 64 40 -248 224 128 -208 176 56 +248 232 112 +216 184 64 128 144 160 -64 72 88 +80 88 104 248 248 248 -168 176 200 -208 208 232 -0 0 0 +152 168 184 +200 216 232 +160 128 88 0 0 0 diff --git a/graphics/pokemon/igglybuff/anim_front.png b/graphics/pokemon/igglybuff/anim_front.png index 8e4ec65260e6..e96608aa13ed 100644 Binary files a/graphics/pokemon/igglybuff/anim_front.png and b/graphics/pokemon/igglybuff/anim_front.png differ diff --git a/graphics/pokemon/igglybuff/front.png b/graphics/pokemon/igglybuff/front.png index 36b1c62f6e68..2d0dad2a891e 100644 Binary files a/graphics/pokemon/igglybuff/front.png and b/graphics/pokemon/igglybuff/front.png differ diff --git a/graphics/pokemon/igglybuff/normal.pal b/graphics/pokemon/igglybuff/normal.pal index 50244b91b191..4bf00fcd7991 100644 --- a/graphics/pokemon/igglybuff/normal.pal +++ b/graphics/pokemon/igglybuff/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -136 72 88 -248 240 232 -248 208 208 -176 96 120 +136 64 64 +248 200 208 +248 168 184 +200 104 96 16 16 16 -192 152 168 -224 72 88 -144 64 64 +240 120 144 +224 40 16 +136 0 0 248 248 248 -224 144 168 -168 80 112 +184 0 0 +128 0 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/illumise/anim_front.png b/graphics/pokemon/illumise/anim_front.png index 48878163aa0d..8759e917110a 100644 Binary files a/graphics/pokemon/illumise/anim_front.png and b/graphics/pokemon/illumise/anim_front.png differ diff --git a/graphics/pokemon/illumise/front.png b/graphics/pokemon/illumise/front.png index ce620bfd121d..f91f5c93559b 100644 Binary files a/graphics/pokemon/illumise/front.png and b/graphics/pokemon/illumise/front.png differ diff --git a/graphics/pokemon/illumise/normal.pal b/graphics/pokemon/illumise/normal.pal index 7f7ab47925e7..b1f415775ad5 100644 --- a/graphics/pokemon/illumise/normal.pal +++ b/graphics/pokemon/illumise/normal.pal @@ -1,19 +1,259 @@ JASC-PAL 0100 -16 +256 152 208 160 152 128 80 -208 176 104 -240 216 144 +224 176 72 +248 224 112 16 16 16 -160 112 176 -96 72 120 +152 80 184 +104 88 144 248 248 248 -200 152 208 -80 112 120 -112 184 208 -168 216 240 +200 136 216 +88 104 136 +136 168 200 +176 208 240 168 192 232 -0 136 176 +0 88 208 56 56 56 120 120 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 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/infernape/anim_front.png b/graphics/pokemon/infernape/anim_front.png index 521883ce5eda..b808e3ab3784 100644 Binary files a/graphics/pokemon/infernape/anim_front.png and b/graphics/pokemon/infernape/anim_front.png differ diff --git a/graphics/pokemon/infernape/front.png b/graphics/pokemon/infernape/front.png index 7177880c9272..6bb4d332cfde 100644 Binary files a/graphics/pokemon/infernape/front.png and b/graphics/pokemon/infernape/front.png differ diff --git a/graphics/pokemon/infernape/normal.pal b/graphics/pokemon/infernape/normal.pal index e2f6bad8d5a8..9dad1bf3f533 100644 --- a/graphics/pokemon/infernape/normal.pal +++ b/graphics/pokemon/infernape/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 56 40 -40 64 96 +104 56 16 +24 64 120 16 16 16 -128 96 24 -192 160 56 -224 72 56 -248 128 48 -64 112 152 -248 224 120 -168 96 64 -216 128 88 -184 184 176 -120 112 112 +128 88 8 +192 152 32 +224 56 64 +240 136 72 +56 112 160 +248 216 80 +160 96 64 +224 136 88 +184 192 216 +112 112 128 248 248 248 128 40 48 diff --git a/graphics/pokemon/ivysaur/anim_front.png b/graphics/pokemon/ivysaur/anim_front.png index 0b31c81a3fde..35c0596b2c8b 100644 Binary files a/graphics/pokemon/ivysaur/anim_front.png and b/graphics/pokemon/ivysaur/anim_front.png differ diff --git a/graphics/pokemon/ivysaur/back.png b/graphics/pokemon/ivysaur/back.png index 5e74b5e01d15..4ec8a61a17cb 100644 Binary files a/graphics/pokemon/ivysaur/back.png and b/graphics/pokemon/ivysaur/back.png differ diff --git a/graphics/pokemon/ivysaur/front.png b/graphics/pokemon/ivysaur/front.png index 6bd7e051904c..4259abad05e7 100644 Binary files a/graphics/pokemon/ivysaur/front.png and b/graphics/pokemon/ivysaur/front.png differ diff --git a/graphics/pokemon/ivysaur/normal.pal b/graphics/pokemon/ivysaur/normal.pal index 7b785bc77f50..8ce5c7c84573 100644 --- a/graphics/pokemon/ivysaur/normal.pal +++ b/graphics/pokemon/ivysaur/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -109 57 76 -204 85 103 -255 170 182 -255 122 133 +152 208 160 +120 48 40 +216 64 88 +248 176 168 +248 120 120 16 16 16 -22 63 75 -121 200 145 -71 120 95 -87 164 101 -174 228 230 -111 193 196 -66 143 166 -255 255 255 -163 125 146 -160 104 67 +16 64 72 +120 216 112 +48 128 80 +96 176 88 +128 232 216 +88 208 184 +32 144 128 +248 248 248 +160 48 16 +224 80 56 diff --git a/graphics/pokemon/ivysaur/shiny.pal b/graphics/pokemon/ivysaur/shiny.pal index 09594ff8a9b4..27e7a2bed71e 100644 --- a/graphics/pokemon/ivysaur/shiny.pal +++ b/graphics/pokemon/ivysaur/shiny.pal @@ -15,5 +15,5 @@ JASC-PAL 164 213 74 123 164 49 255 255 255 -186 144 72 -197 115 57 +160 48 16 +224 80 56 diff --git a/graphics/pokemon/jellicent/anim_front.png b/graphics/pokemon/jellicent/anim_front.png index 68d6543db9c7..4e08f51dd7db 100644 Binary files a/graphics/pokemon/jellicent/anim_front.png and b/graphics/pokemon/jellicent/anim_front.png differ diff --git a/graphics/pokemon/jellicent/anim_frontf.png b/graphics/pokemon/jellicent/anim_frontf.png index 110df92f5238..d94a329aa6ce 100644 Binary files a/graphics/pokemon/jellicent/anim_frontf.png and b/graphics/pokemon/jellicent/anim_frontf.png differ diff --git a/graphics/pokemon/jellicent/front.png b/graphics/pokemon/jellicent/front.png index 7e02040b7aa9..584c7f09b8e7 100644 Binary files a/graphics/pokemon/jellicent/front.png and b/graphics/pokemon/jellicent/front.png differ diff --git a/graphics/pokemon/jellicent/frontf.png b/graphics/pokemon/jellicent/frontf.png new file mode 100644 index 000000000000..7c40aad47919 Binary files /dev/null and b/graphics/pokemon/jellicent/frontf.png differ diff --git a/graphics/pokemon/jellicent/normal.pal b/graphics/pokemon/jellicent/normal.pal index d3264487d64b..e7b7da677351 100644 --- a/graphics/pokemon/jellicent/normal.pal +++ b/graphics/pokemon/jellicent/normal.pal @@ -7,8 +7,8 @@ JASC-PAL 16 16 16 200 232 248 56 104 176 -56 152 216 -96 200 240 +56 128 200 +56 192 240 168 224 248 208 240 248 232 64 56 diff --git a/graphics/pokemon/jellicent/normalf.pal b/graphics/pokemon/jellicent/normalf.pal index 8acd5fa05b32..06e1a2895d24 100644 --- a/graphics/pokemon/jellicent/normalf.pal +++ b/graphics/pokemon/jellicent/normalf.pal @@ -2,15 +2,15 @@ JASC-PAL 0100 16 153 210 164 -105 135 191 -237 103 83 +40 80 160 +224 72 40 255 222 247 -204 140 195 -122 83 97 +216 128 176 +120 56 80 16 16 16 -177 173 206 -255 178 212 -247 220 242 +200 160 192 +248 160 208 +248 224 248 255 255 255 0 0 0 0 0 0 diff --git a/graphics/pokemon/jigglypuff/anim_front.png b/graphics/pokemon/jigglypuff/anim_front.png index a45e4d02fbf0..d6eb61c1ded4 100644 Binary files a/graphics/pokemon/jigglypuff/anim_front.png and b/graphics/pokemon/jigglypuff/anim_front.png differ diff --git a/graphics/pokemon/jigglypuff/front.png b/graphics/pokemon/jigglypuff/front.png index 7ebec3b9f72e..af3a2d78bdab 100644 Binary files a/graphics/pokemon/jigglypuff/front.png and b/graphics/pokemon/jigglypuff/front.png differ diff --git a/graphics/pokemon/jigglypuff/normal.pal b/graphics/pokemon/jigglypuff/normal.pal index 2986235fd42b..6f4d96e9d23e 100644 --- a/graphics/pokemon/jigglypuff/normal.pal +++ b/graphics/pokemon/jigglypuff/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -122 69 82 -249 194 208 -211 143 156 +152 208 160 +164 16 32 +255 172 164 +230 115 131 16 16 16 -58 68 89 +115 65 24 255 255 255 -3 153 173 -0 109 134 -125 203 216 -212 213 216 -147 88 121 -188 120 163 +115 98 222 +65 49 156 +148 131 255 +205 189 255 +168 16 0 +232 64 48 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/jirachi/anim_front.png b/graphics/pokemon/jirachi/anim_front.png index 1a3676c6903e..bd070398dacb 100644 Binary files a/graphics/pokemon/jirachi/anim_front.png and b/graphics/pokemon/jirachi/anim_front.png differ diff --git a/graphics/pokemon/jirachi/front.png b/graphics/pokemon/jirachi/front.png index df7a02d4271f..0d94f9c43565 100644 Binary files a/graphics/pokemon/jirachi/front.png and b/graphics/pokemon/jirachi/front.png differ diff --git a/graphics/pokemon/jirachi/normal.pal b/graphics/pokemon/jirachi/normal.pal index 198bafa24c5e..cb3591f003e5 100644 --- a/graphics/pokemon/jirachi/normal.pal +++ b/graphics/pokemon/jirachi/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 136 56 -16 16 16 -248 232 184 -248 232 120 -216 192 96 -80 176 184 -56 112 120 -136 208 200 -192 208 232 -240 240 248 +168 128 48 +0 0 0 +248 248 144 +248 224 88 +224 184 80 +80 168 200 +48 120 136 +96 208 216 +192 200 216 +224 232 240 248 248 248 -88 96 112 -144 152 168 +104 112 112 +152 160 168 0 0 0 0 0 0 diff --git a/graphics/pokemon/jolteon/anim_front.png b/graphics/pokemon/jolteon/anim_front.png index 5c1090a1824a..b5c8be0af95e 100644 Binary files a/graphics/pokemon/jolteon/anim_front.png and b/graphics/pokemon/jolteon/anim_front.png differ diff --git a/graphics/pokemon/jolteon/front.png b/graphics/pokemon/jolteon/front.png index 18a3cc813563..92ee1f72cc67 100644 Binary files a/graphics/pokemon/jolteon/front.png and b/graphics/pokemon/jolteon/front.png differ diff --git a/graphics/pokemon/jolteon/normal.pal b/graphics/pokemon/jolteon/normal.pal index 7cf44ca0c2da..0655e391cec6 100644 --- a/graphics/pokemon/jolteon/normal.pal +++ b/graphics/pokemon/jolteon/normal.pal @@ -3,16 +3,16 @@ JASC-PAL 16 152 208 160 16 16 16 -88 72 40 -216 168 64 -168 136 56 +90 74 16 +205 172 74 +172 139 57 152 120 64 -248 224 136 -248 208 88 -56 16 96 +255 255 139 +255 222 82 +72 8 128 248 248 248 -72 72 80 -192 200 208 +82 82 82 +197 197 197 128 128 136 0 0 0 0 0 0 diff --git a/graphics/pokemon/joltik/anim_front.png b/graphics/pokemon/joltik/anim_front.png index 1681d6457559..f591acb210b8 100644 Binary files a/graphics/pokemon/joltik/anim_front.png and b/graphics/pokemon/joltik/anim_front.png differ diff --git a/graphics/pokemon/joltik/front.png b/graphics/pokemon/joltik/front.png index 877833842c68..845a9a104745 100644 Binary files a/graphics/pokemon/joltik/front.png and b/graphics/pokemon/joltik/front.png differ diff --git a/graphics/pokemon/joltik/normal.pal b/graphics/pokemon/joltik/normal.pal index 9c746ebb46f4..1001c4e66474 100644 --- a/graphics/pokemon/joltik/normal.pal +++ b/graphics/pokemon/joltik/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -104 88 48 -240 208 88 +112 80 8 +240 216 64 16 16 16 -176 144 64 -16 24 88 +200 168 8 +8 48 96 128 136 80 216 216 232 -56 96 176 -48 72 136 -136 120 64 +96 104 224 +48 88 192 +160 128 8 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/jumpluff/anim_front.png b/graphics/pokemon/jumpluff/anim_front.png index fd3a5c5c47bc..f78886dc543b 100644 Binary files a/graphics/pokemon/jumpluff/anim_front.png and b/graphics/pokemon/jumpluff/anim_front.png differ diff --git a/graphics/pokemon/jumpluff/front.png b/graphics/pokemon/jumpluff/front.png index 537797f7358e..3a092274185d 100644 Binary files a/graphics/pokemon/jumpluff/front.png and b/graphics/pokemon/jumpluff/front.png differ diff --git a/graphics/pokemon/jumpluff/normal.pal b/graphics/pokemon/jumpluff/normal.pal index d73f61924897..4ba1e9cc6d92 100644 --- a/graphics/pokemon/jumpluff/normal.pal +++ b/graphics/pokemon/jumpluff/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 120 40 -208 168 88 -248 232 184 -232 208 152 -248 240 224 -72 120 32 +176 136 48 +208 184 88 +248 240 176 +232 224 152 +248 248 216 +40 128 72 16 16 16 -128 200 64 -72 96 168 -96 128 208 -32 48 104 -136 160 224 -224 88 112 -208 56 88 -128 72 88 +128 200 120 +56 112 192 +112 152 248 +24 72 112 +136 176 248 +232 64 80 +192 48 64 +168 0 0 diff --git a/graphics/pokemon/jynx/anim_front.png b/graphics/pokemon/jynx/anim_front.png index 4b8819bdaf5c..de426d41a553 100644 Binary files a/graphics/pokemon/jynx/anim_front.png and b/graphics/pokemon/jynx/anim_front.png differ diff --git a/graphics/pokemon/jynx/front.png b/graphics/pokemon/jynx/front.png index 967094bb8c39..430f9ad28ff5 100644 Binary files a/graphics/pokemon/jynx/front.png and b/graphics/pokemon/jynx/front.png differ diff --git a/graphics/pokemon/jynx/normal.pal b/graphics/pokemon/jynx/normal.pal index 26614b682348..a4e996cb4881 100644 --- a/graphics/pokemon/jynx/normal.pal +++ b/graphics/pokemon/jynx/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 120 88 -232 216 144 -200 176 120 -248 240 224 -16 16 16 -80 56 96 -160 128 200 -184 192 208 +139 98 74 +255 230 82 +222 172 49 +255 246 189 +0 0 0 +98 65 131 +180 106 222 +189 189 205 248 248 248 -232 80 80 -248 136 112 -128 96 152 -168 64 64 -112 56 48 -96 96 120 +246 49 90 +255 115 115 +148 74 189 +189 49 98 +131 41 74 +98 98 123 diff --git a/graphics/pokemon/kabuto/anim_front.png b/graphics/pokemon/kabuto/anim_front.png index f38ca8c304f3..d738475e9cc4 100644 Binary files a/graphics/pokemon/kabuto/anim_front.png and b/graphics/pokemon/kabuto/anim_front.png differ diff --git a/graphics/pokemon/kabuto/front.png b/graphics/pokemon/kabuto/front.png index 796fecab22f6..47d4d3df8941 100644 Binary files a/graphics/pokemon/kabuto/front.png and b/graphics/pokemon/kabuto/front.png differ diff --git a/graphics/pokemon/kabuto/normal.pal b/graphics/pokemon/kabuto/normal.pal index e4b54c67742d..827f32924c1d 100644 --- a/graphics/pokemon/kabuto/normal.pal +++ b/graphics/pokemon/kabuto/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 80 56 -208 168 128 -184 128 72 -8 16 16 -72 48 24 -160 112 64 -136 136 136 -248 152 160 -248 80 104 -136 96 72 -200 152 72 -248 192 88 -8 48 96 +120 80 40 +208 160 80 +192 128 40 +0 0 0 +72 40 0 +160 104 40 +192 192 200 +248 136 168 +248 72 128 +136 112 0 +184 160 0 +232 192 0 +16 56 104 88 64 0 -248 208 160 +248 232 88 diff --git a/graphics/pokemon/kabutops/anim_front.png b/graphics/pokemon/kabutops/anim_front.png index e02ba3313df3..5c7a73a85153 100644 Binary files a/graphics/pokemon/kabutops/anim_front.png and b/graphics/pokemon/kabutops/anim_front.png differ diff --git a/graphics/pokemon/kabutops/front.png b/graphics/pokemon/kabutops/front.png index 5c4da1600b91..d89cb33cae9c 100644 Binary files a/graphics/pokemon/kabutops/front.png and b/graphics/pokemon/kabutops/front.png differ diff --git a/graphics/pokemon/kabutops/normal.pal b/graphics/pokemon/kabutops/normal.pal index d1c6ccac8191..cdc54fd4c799 100644 --- a/graphics/pokemon/kabutops/normal.pal +++ b/graphics/pokemon/kabutops/normal.pal @@ -3,15 +3,15 @@ JASC-PAL 16 152 208 160 144 144 144 -80 72 96 -216 208 208 +80 80 80 +224 224 208 16 16 16 -176 160 160 -192 152 104 -64 32 24 -176 120 72 -112 72 56 -152 104 64 +176 176 176 +200 160 112 +80 48 24 +184 136 64 +120 80 40 +152 112 48 248 248 248 224 224 208 0 0 0 diff --git a/graphics/pokemon/kadabra/anim_front.png b/graphics/pokemon/kadabra/anim_front.png index ad2375c590be..67f232894c12 100644 Binary files a/graphics/pokemon/kadabra/anim_front.png and b/graphics/pokemon/kadabra/anim_front.png differ diff --git a/graphics/pokemon/kadabra/front.png b/graphics/pokemon/kadabra/front.png index 7d9405a159c2..db50edf46eab 100644 Binary files a/graphics/pokemon/kadabra/front.png and b/graphics/pokemon/kadabra/front.png differ diff --git a/graphics/pokemon/kadabra/normal.pal b/graphics/pokemon/kadabra/normal.pal index 33f5713b41c4..a69a8d21ceee 100644 --- a/graphics/pokemon/kadabra/normal.pal +++ b/graphics/pokemon/kadabra/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 96 24 -88 56 8 -240 208 80 -192 160 56 +139 115 16 +98 74 8 +255 238 41 +213 189 8 16 16 16 -192 104 80 -64 48 40 -160 128 112 -232 232 216 +230 57 41 +90 57 8 +164 115 41 +216 216 216 248 248 248 88 88 88 -104 80 72 -192 192 176 -248 232 168 -176 160 152 +123 82 8 +176 176 176 +248 248 184 +200 168 168 diff --git a/graphics/pokemon/kakuna/anim_front.png b/graphics/pokemon/kakuna/anim_front.png index 5b05370134c0..e86330ea38fe 100644 Binary files a/graphics/pokemon/kakuna/anim_front.png and b/graphics/pokemon/kakuna/anim_front.png differ diff --git a/graphics/pokemon/kakuna/front.png b/graphics/pokemon/kakuna/front.png index eeddca62b267..0115ad4f9f6d 100644 Binary files a/graphics/pokemon/kakuna/front.png and b/graphics/pokemon/kakuna/front.png differ diff --git a/graphics/pokemon/kakuna/normal.pal b/graphics/pokemon/kakuna/normal.pal index 36d4ef2e2b2b..91ff072e5530 100644 --- a/graphics/pokemon/kakuna/normal.pal +++ b/graphics/pokemon/kakuna/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -208 168 72 -168 136 56 -240 216 96 -248 240 184 -128 104 40 -80 64 24 -56 56 56 -104 104 104 +222 164 82 +180 123 0 +246 213 74 +255 246 205 +139 90 0 +90 57 0 +57 57 57 +106 106 106 16 16 16 -248 248 248 +255 255 255 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/kangaskhan/anim_front.png b/graphics/pokemon/kangaskhan/anim_front.png index 93360644918e..d0b912052008 100644 Binary files a/graphics/pokemon/kangaskhan/anim_front.png and b/graphics/pokemon/kangaskhan/anim_front.png differ diff --git a/graphics/pokemon/kangaskhan/front.png b/graphics/pokemon/kangaskhan/front.png index a21da5940d7b..ba1d27af6925 100644 Binary files a/graphics/pokemon/kangaskhan/front.png and b/graphics/pokemon/kangaskhan/front.png differ diff --git a/graphics/pokemon/kangaskhan/normal.pal b/graphics/pokemon/kangaskhan/normal.pal index 53a18732f710..ebc1af260eb8 100644 --- a/graphics/pokemon/kangaskhan/normal.pal +++ b/graphics/pokemon/kangaskhan/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 56 40 -80 88 88 -136 136 128 -248 232 176 -216 200 136 +82 65 16 +106 106 82 +139 148 98 +255 255 148 +238 213 156 16 16 16 248 248 248 200 200 200 -192 144 128 -136 104 96 -200 56 72 -216 184 168 -184 184 248 -128 128 168 +189 148 115 +148 115 106 +189 24 24 +222 172 131 +222 180 213 +148 106 139 144 96 104 diff --git a/graphics/pokemon/karrablast/anim_front.png b/graphics/pokemon/karrablast/anim_front.png index 5bd755b9aa1c..218596a3c0fb 100644 Binary files a/graphics/pokemon/karrablast/anim_front.png and b/graphics/pokemon/karrablast/anim_front.png differ diff --git a/graphics/pokemon/karrablast/front.png b/graphics/pokemon/karrablast/front.png index 4809f53671ee..4d2edf923b30 100644 Binary files a/graphics/pokemon/karrablast/front.png and b/graphics/pokemon/karrablast/front.png differ diff --git a/graphics/pokemon/karrablast/normal.pal b/graphics/pokemon/karrablast/normal.pal index 90da9068fcd5..8b929294d355 100644 --- a/graphics/pokemon/karrablast/normal.pal +++ b/graphics/pokemon/karrablast/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 96 144 -16 48 88 -40 128 200 -80 152 232 +56 80 128 +32 56 88 +48 104 248 +80 136 248 16 16 16 112 208 248 40 40 56 80 80 88 -80 144 168 -192 144 56 -248 208 96 -208 112 8 +64 144 168 +176 152 24 +248 216 24 +192 80 0 248 248 248 -104 80 40 +112 96 32 0 0 0 diff --git a/graphics/pokemon/kecleon/anim_front.png b/graphics/pokemon/kecleon/anim_front.png index 55b6430facdd..43f9475309ce 100644 Binary files a/graphics/pokemon/kecleon/anim_front.png and b/graphics/pokemon/kecleon/anim_front.png differ diff --git a/graphics/pokemon/kecleon/front.png b/graphics/pokemon/kecleon/front.png index a2d3857b3d66..2674a0d165ed 100644 Binary files a/graphics/pokemon/kecleon/front.png and b/graphics/pokemon/kecleon/front.png differ diff --git a/graphics/pokemon/kecleon/normal.pal b/graphics/pokemon/kecleon/normal.pal index 0f2042b43aca..881dfde035db 100644 --- a/graphics/pokemon/kecleon/normal.pal +++ b/graphics/pokemon/kecleon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -144 120 80 -72 88 48 -16 16 16 -248 232 176 -192 160 88 -160 192 80 -128 152 56 -240 200 104 -208 224 96 -176 208 136 -208 232 168 -248 248 248 -192 64 104 -224 120 136 +136 120 88 +64 96 64 +0 0 0 +240 232 120 +184 160 80 +120 184 80 +96 144 80 +216 192 88 192 216 120 +160 216 112 +184 232 152 +248 248 248 +160 64 128 +208 96 168 +120 184 80 diff --git a/graphics/pokemon/keldeo/anim_front.png b/graphics/pokemon/keldeo/anim_front.png index 2e0c040d55dd..02b1af6ca03b 100644 Binary files a/graphics/pokemon/keldeo/anim_front.png and b/graphics/pokemon/keldeo/anim_front.png differ diff --git a/graphics/pokemon/keldeo/front.png b/graphics/pokemon/keldeo/front.png index c7a14c9d0d09..ffc17bf57c70 100644 Binary files a/graphics/pokemon/keldeo/front.png and b/graphics/pokemon/keldeo/front.png differ diff --git a/graphics/pokemon/keldeo/normal.pal b/graphics/pokemon/keldeo/normal.pal index 04f8532d25e2..bfdaee6f3175 100644 --- a/graphics/pokemon/keldeo/normal.pal +++ b/graphics/pokemon/keldeo/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 248 160 176 -96 32 16 +120 48 40 32 32 32 -144 48 32 -232 80 40 -112 104 72 -32 48 88 -248 240 160 -64 104 176 -192 176 104 -48 72 128 -80 144 168 -112 200 248 +168 48 32 +216 64 32 +104 104 80 +24 40 88 +248 240 184 +72 104 200 +176 168 128 +48 72 136 +32 120 160 +96 184 248 80 80 80 248 248 248 -184 224 248 +168 216 248 diff --git a/graphics/pokemon/keldeo/resolute/front.png b/graphics/pokemon/keldeo/resolute/front.png index 3567dd571c90..8e83b810a775 100644 Binary files a/graphics/pokemon/keldeo/resolute/front.png and b/graphics/pokemon/keldeo/resolute/front.png differ diff --git a/graphics/pokemon/keldeo/resolute/normal.pal b/graphics/pokemon/keldeo/resolute/normal.pal index 8755c6d0739c..ebd6220fc78c 100644 --- a/graphics/pokemon/keldeo/resolute/normal.pal +++ b/graphics/pokemon/keldeo/resolute/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -255 163 177 +248 160 176 16 16 16 -74 82 82 -112 204 249 -255 159 63 -53 75 132 -147 53 36 -65 99 186 -237 75 35 -109 198 115 -32 49 91 -81 142 163 -255 245 160 -196 178 107 -255 255 255 -112 109 76 +72 80 80 +96 184 248 +248 144 32 +48 72 136 +128 56 40 +72 104 200 +216 72 48 +56 176 56 +24 48 96 +32 128 136 +248 240 168 +176 168 112 +248 248 248 +96 88 40 diff --git a/graphics/pokemon/kingdra/anim_front.png b/graphics/pokemon/kingdra/anim_front.png index 26de28c0fad4..a44cd577d636 100644 Binary files a/graphics/pokemon/kingdra/anim_front.png and b/graphics/pokemon/kingdra/anim_front.png differ diff --git a/graphics/pokemon/kingdra/front.png b/graphics/pokemon/kingdra/front.png index ad460d1d58cf..bdce13253dd5 100644 Binary files a/graphics/pokemon/kingdra/front.png and b/graphics/pokemon/kingdra/front.png differ diff --git a/graphics/pokemon/kingdra/normal.pal b/graphics/pokemon/kingdra/normal.pal index fc22768bcc11..363bc2365608 100644 --- a/graphics/pokemon/kingdra/normal.pal +++ b/graphics/pokemon/kingdra/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 136 168 +64 136 192 16 16 16 144 216 240 -40 80 96 +64 88 136 88 176 216 184 240 248 248 248 248 -176 32 64 -128 128 112 -200 200 184 -248 192 104 -192 144 72 -120 80 24 +176 16 48 +128 128 128 +200 200 200 +248 224 184 +216 168 120 +128 104 96 0 0 0 0 0 0 diff --git a/graphics/pokemon/kingler/anim_front.png b/graphics/pokemon/kingler/anim_front.png index 68b62ea35eaf..d2544716323c 100644 Binary files a/graphics/pokemon/kingler/anim_front.png and b/graphics/pokemon/kingler/anim_front.png differ diff --git a/graphics/pokemon/kingler/front.png b/graphics/pokemon/kingler/front.png index 33b8facfa564..50c9aa102edb 100644 Binary files a/graphics/pokemon/kingler/front.png and b/graphics/pokemon/kingler/front.png differ diff --git a/graphics/pokemon/kingler/normal.pal b/graphics/pokemon/kingler/normal.pal index 5e87e4876a98..d05177eee124 100644 --- a/graphics/pokemon/kingler/normal.pal +++ b/graphics/pokemon/kingler/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 56 40 -240 136 72 -168 88 64 +131 41 8 +255 139 82 +180 90 74 16 16 16 -248 176 144 -48 40 40 -200 160 176 -88 72 72 -88 80 72 -248 216 208 -144 120 120 -248 248 248 -184 184 224 +246 197 139 +74 49 32 +222 172 156 +115 82 16 +90 65 49 +255 246 222 +164 106 65 +255 255 255 +189 189 230 0 0 0 0 0 0 diff --git a/graphics/pokemon/kirlia/anim_front.png b/graphics/pokemon/kirlia/anim_front.png index 5fce4981f5d7..17813ae7fed5 100644 Binary files a/graphics/pokemon/kirlia/anim_front.png and b/graphics/pokemon/kirlia/anim_front.png differ diff --git a/graphics/pokemon/kirlia/front.png b/graphics/pokemon/kirlia/front.png index bdd17fa07561..c1858f769715 100644 Binary files a/graphics/pokemon/kirlia/front.png and b/graphics/pokemon/kirlia/front.png differ diff --git a/graphics/pokemon/kirlia/normal.pal b/graphics/pokemon/kirlia/normal.pal index 2e32eebee1f0..fe98a72d6d4e 100644 --- a/graphics/pokemon/kirlia/normal.pal +++ b/graphics/pokemon/kirlia/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 192 160 232 -120 48 56 -64 112 56 -232 152 152 -200 80 96 +128 40 72 +48 120 64 +248 120 144 +208 72 112 16 16 16 -176 224 168 -104 168 96 -128 200 120 +176 240 144 +112 184 112 +136 224 136 248 248 248 -128 112 168 -200 184 224 +112 128 168 +200 200 224 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/klang/anim_front.png b/graphics/pokemon/klang/anim_front.png index 09aca36c7256..8bd05ce4810a 100644 Binary files a/graphics/pokemon/klang/anim_front.png and b/graphics/pokemon/klang/anim_front.png differ diff --git a/graphics/pokemon/klang/front.png b/graphics/pokemon/klang/front.png index c464483b5fb5..6cfd82984db1 100644 Binary files a/graphics/pokemon/klang/front.png and b/graphics/pokemon/klang/front.png differ diff --git a/graphics/pokemon/klang/normal.pal b/graphics/pokemon/klang/normal.pal index 198a041931c2..7f77a59c2d5d 100644 --- a/graphics/pokemon/klang/normal.pal +++ b/graphics/pokemon/klang/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 64 80 -40 48 48 +72 72 72 +40 40 40 16 16 16 -96 104 112 -192 192 216 -144 152 168 +104 104 112 +208 216 232 +160 160 168 248 248 248 -32 80 72 -24 168 160 -112 120 136 +48 96 96 +40 168 184 +112 112 136 16 56 64 -24 120 104 +40 136 144 144 144 176 0 0 0 0 0 0 diff --git a/graphics/pokemon/klink/anim_front.png b/graphics/pokemon/klink/anim_front.png index fb7fc123fdb3..76c5db96bc86 100644 Binary files a/graphics/pokemon/klink/anim_front.png and b/graphics/pokemon/klink/anim_front.png differ diff --git a/graphics/pokemon/klink/front.png b/graphics/pokemon/klink/front.png index 9bcdde9fa02c..3af6a70b0b4a 100644 Binary files a/graphics/pokemon/klink/front.png and b/graphics/pokemon/klink/front.png differ diff --git a/graphics/pokemon/klink/normal.pal b/graphics/pokemon/klink/normal.pal index baafa69670c9..8116f0a42cd8 100644 --- a/graphics/pokemon/klink/normal.pal +++ b/graphics/pokemon/klink/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -64 64 80 +72 72 72 16 16 16 -96 104 112 -192 192 216 -40 48 48 -144 144 168 +104 104 112 +208 216 232 +40 40 40 +144 144 144 248 248 248 -24 120 104 -24 168 160 -152 152 176 +48 96 96 +40 168 184 +144 144 176 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/klinklang/anim_front.png b/graphics/pokemon/klinklang/anim_front.png index 20d59dbe5be4..1f0a60ec3aa4 100644 Binary files a/graphics/pokemon/klinklang/anim_front.png and b/graphics/pokemon/klinklang/anim_front.png differ diff --git a/graphics/pokemon/klinklang/front.png b/graphics/pokemon/klinklang/front.png index 6ef6ee846bab..f49e126ee421 100644 Binary files a/graphics/pokemon/klinklang/front.png and b/graphics/pokemon/klinklang/front.png differ diff --git a/graphics/pokemon/klinklang/normal.pal b/graphics/pokemon/klinklang/normal.pal index 1da9eae7765c..1a053507dfda 100644 --- a/graphics/pokemon/klinklang/normal.pal +++ b/graphics/pokemon/klinklang/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 64 80 -40 48 48 +72 72 72 +40 40 40 16 16 16 -96 104 112 -192 192 216 -144 152 168 +104 104 112 +208 216 232 +160 160 168 248 248 248 -32 80 72 -24 168 160 -112 120 136 +48 96 96 +40 168 184 +112 112 136 16 56 64 -24 120 104 +40 136 144 144 144 176 -136 80 64 -240 112 96 +144 72 72 +216 80 80 diff --git a/graphics/pokemon/koffing/anim_front.png b/graphics/pokemon/koffing/anim_front.png index 7021de3e6d84..fbe8c25e6ef0 100644 Binary files a/graphics/pokemon/koffing/anim_front.png and b/graphics/pokemon/koffing/anim_front.png differ diff --git a/graphics/pokemon/koffing/front.png b/graphics/pokemon/koffing/front.png index f147b1a2a582..621724a6ed01 100644 Binary files a/graphics/pokemon/koffing/front.png and b/graphics/pokemon/koffing/front.png differ diff --git a/graphics/pokemon/koffing/normal.pal b/graphics/pokemon/koffing/normal.pal index ea5f8059696c..3bc7ed3d8697 100644 --- a/graphics/pokemon/koffing/normal.pal +++ b/graphics/pokemon/koffing/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -192 184 128 -224 216 152 -152 144 88 -96 88 136 -176 176 224 -144 144 208 -48 48 88 +238 213 106 +246 238 148 +197 180 41 +115 90 156 +205 189 238 +172 148 205 +74 41 90 16 16 16 248 248 248 216 216 216 -144 88 104 -208 112 144 -192 176 168 -240 224 200 +180 90 123 +238 115 139 +205 205 172 +246 238 205 0 0 0 diff --git a/graphics/pokemon/krabby/anim_front.png b/graphics/pokemon/krabby/anim_front.png index 023b9cc6ebce..294beebb2ae7 100644 Binary files a/graphics/pokemon/krabby/anim_front.png and b/graphics/pokemon/krabby/anim_front.png differ diff --git a/graphics/pokemon/krabby/front.png b/graphics/pokemon/krabby/front.png index 9a90c7cdfc2b..31b8a2215cb6 100644 Binary files a/graphics/pokemon/krabby/front.png and b/graphics/pokemon/krabby/front.png differ diff --git a/graphics/pokemon/krabby/normal.pal b/graphics/pokemon/krabby/normal.pal index dd22042ad2f9..04c1672e7990 100644 --- a/graphics/pokemon/krabby/normal.pal +++ b/graphics/pokemon/krabby/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 96 56 -240 136 72 -248 176 144 -112 56 40 +222 57 57 +255 115 49 +255 164 98 +156 41 8 16 16 16 -80 64 56 -200 160 176 -96 80 80 -160 128 128 -240 216 200 +90 65 32 +205 172 139 +115 82 16 +172 131 74 +255 230 197 248 248 248 -216 216 216 +222 222 222 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/kricketot/anim_front.png b/graphics/pokemon/kricketot/anim_front.png index d8ea9fd565ec..7bf0fd3973c2 100644 Binary files a/graphics/pokemon/kricketot/anim_front.png and b/graphics/pokemon/kricketot/anim_front.png differ diff --git a/graphics/pokemon/kricketot/front.png b/graphics/pokemon/kricketot/front.png index 5c7b05726124..e158a0a796fd 100644 Binary files a/graphics/pokemon/kricketot/front.png and b/graphics/pokemon/kricketot/front.png differ diff --git a/graphics/pokemon/kricketot/normal.pal b/graphics/pokemon/kricketot/normal.pal index 1d3a0c765f63..290a5c95ca27 100644 --- a/graphics/pokemon/kricketot/normal.pal +++ b/graphics/pokemon/kricketot/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 64 72 -104 104 112 -136 144 152 +80 72 64 +120 112 96 +152 152 144 16 16 16 -120 120 56 -248 232 176 +136 104 8 +248 232 168 88 32 0 -176 64 40 -224 112 88 -216 184 120 -152 80 40 -128 48 24 +176 72 56 +224 104 96 +224 192 104 +144 80 24 +104 64 32 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/kricketune/anim_front.png b/graphics/pokemon/kricketune/anim_front.png index 1025b4cae889..47cefb0a6a8d 100644 Binary files a/graphics/pokemon/kricketune/anim_front.png and b/graphics/pokemon/kricketune/anim_front.png differ diff --git a/graphics/pokemon/kricketune/anim_frontf.png b/graphics/pokemon/kricketune/anim_frontf.png index b05954ee68e7..530ec9f767fb 100644 Binary files a/graphics/pokemon/kricketune/anim_frontf.png and b/graphics/pokemon/kricketune/anim_frontf.png differ diff --git a/graphics/pokemon/kricketune/front.png b/graphics/pokemon/kricketune/front.png index 7863c919d5c3..65de302a5371 100644 Binary files a/graphics/pokemon/kricketune/front.png and b/graphics/pokemon/kricketune/front.png differ diff --git a/graphics/pokemon/kricketune/normal.pal b/graphics/pokemon/kricketune/normal.pal index 59b3500dea20..8e79a2a57600 100644 --- a/graphics/pokemon/kricketune/normal.pal +++ b/graphics/pokemon/kricketune/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 32 16 -232 88 64 -160 56 40 +98 49 0 +222 90 82 +156 65 49 16 16 16 -40 40 48 -56 64 64 -248 248 248 -88 88 104 -152 56 24 -240 208 136 -104 40 16 -184 152 96 -120 96 40 +49 41 57 +82 74 65 +255 255 255 +123 115 98 +148 82 24 +255 213 131 +90 57 32 +189 156 98 +139 106 8 0 0 0 0 0 0 diff --git a/graphics/pokemon/krokorok/anim_front.png b/graphics/pokemon/krokorok/anim_front.png index 1872a7068a76..43af22d239b5 100644 Binary files a/graphics/pokemon/krokorok/anim_front.png and b/graphics/pokemon/krokorok/anim_front.png differ diff --git a/graphics/pokemon/krokorok/front.png b/graphics/pokemon/krokorok/front.png index 4a54195b0a39..ab3c240f1725 100644 Binary files a/graphics/pokemon/krokorok/front.png and b/graphics/pokemon/krokorok/front.png differ diff --git a/graphics/pokemon/krokorok/normal.pal b/graphics/pokemon/krokorok/normal.pal index 280c267ccbf1..f330a4382f33 100644 --- a/graphics/pokemon/krokorok/normal.pal +++ b/graphics/pokemon/krokorok/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 104 72 -72 56 32 -192 152 104 -216 184 144 -48 48 56 -176 176 184 +139 115 49 +82 57 16 +197 156 90 +222 189 131 +41 41 49 +180 180 189 24 24 32 16 16 16 -88 88 104 -248 248 248 -152 80 96 -224 120 136 -192 192 192 +90 90 106 +255 255 255 +205 115 123 +238 148 164 +197 197 197 48 48 56 0 0 0 diff --git a/graphics/pokemon/krookodile/anim_front.png b/graphics/pokemon/krookodile/anim_front.png index 6412d21ff8cc..530488b9b250 100644 Binary files a/graphics/pokemon/krookodile/anim_front.png and b/graphics/pokemon/krookodile/anim_front.png differ diff --git a/graphics/pokemon/krookodile/front.png b/graphics/pokemon/krookodile/front.png index 084b2c5ce4b2..3654e8360b16 100644 Binary files a/graphics/pokemon/krookodile/front.png and b/graphics/pokemon/krookodile/front.png differ diff --git a/graphics/pokemon/krookodile/normal.pal b/graphics/pokemon/krookodile/normal.pal index e0e18285b94d..2c4607a2d18e 100644 --- a/graphics/pokemon/krookodile/normal.pal +++ b/graphics/pokemon/krookodile/normal.pal @@ -6,8 +6,8 @@ JASC-PAL 80 40 32 136 48 64 24 24 32 -224 120 112 -192 80 80 +232 120 112 +200 80 80 16 16 16 80 80 96 248 248 248 @@ -15,5 +15,5 @@ JASC-PAL 80 80 88 200 112 128 136 144 136 -184 192 200 +192 200 200 0 0 0 diff --git a/graphics/pokemon/kyogre/anim_front.png b/graphics/pokemon/kyogre/anim_front.png index 8a5e88a6bda8..4cb8355bbb04 100644 Binary files a/graphics/pokemon/kyogre/anim_front.png and b/graphics/pokemon/kyogre/anim_front.png differ diff --git a/graphics/pokemon/kyogre/front.png b/graphics/pokemon/kyogre/front.png index 3dd7cd90b0db..59ceadbf77e3 100644 Binary files a/graphics/pokemon/kyogre/front.png and b/graphics/pokemon/kyogre/front.png differ diff --git a/graphics/pokemon/kyogre/normal.pal b/graphics/pokemon/kyogre/normal.pal index cf30ae76c8de..989581da20c8 100644 --- a/graphics/pokemon/kyogre/normal.pal +++ b/graphics/pokemon/kyogre/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 96 112 +88 80 104 16 16 16 216 216 216 -128 144 168 -24 40 64 -24 88 160 -48 120 176 -224 32 56 -16 56 112 -160 24 72 +128 144 160 +48 56 112 +56 96 176 +72 128 208 +240 16 16 +40 80 144 +160 48 96 112 40 56 -112 160 216 -168 200 240 -200 216 232 -248 200 80 +88 160 248 +128 200 248 +184 200 208 +248 200 48 diff --git a/graphics/pokemon/kyurem/anim_front.png b/graphics/pokemon/kyurem/anim_front.png index 6cdcb4b74f13..19f0080b9dc4 100644 Binary files a/graphics/pokemon/kyurem/anim_front.png and b/graphics/pokemon/kyurem/anim_front.png differ diff --git a/graphics/pokemon/kyurem/black/anim_front.png b/graphics/pokemon/kyurem/black/anim_front.png index 71013f7a3f11..97c8fa214808 100644 Binary files a/graphics/pokemon/kyurem/black/anim_front.png and b/graphics/pokemon/kyurem/black/anim_front.png differ diff --git a/graphics/pokemon/kyurem/black/front.png b/graphics/pokemon/kyurem/black/front.png index ccba4d35a37c..45b31238fde4 100644 Binary files a/graphics/pokemon/kyurem/black/front.png and b/graphics/pokemon/kyurem/black/front.png differ diff --git a/graphics/pokemon/kyurem/black/normal.pal b/graphics/pokemon/kyurem/black/normal.pal index bdb3fe453bec..9dcc1bb5a8be 100644 --- a/graphics/pokemon/kyurem/black/normal.pal +++ b/graphics/pokemon/kyurem/black/normal.pal @@ -3,9 +3,9 @@ JASC-PAL 16 153 210 164 36 39 43 -173 228 247 +184 224 248 16 16 16 -123 157 160 +128 152 184 156 166 173 57 62 66 60 84 96 @@ -13,7 +13,7 @@ JASC-PAL 23 29 33 0 197 255 0 106 189 -255 212 25 -132 99 0 +248 224 0 +136 112 40 71 78 89 230 230 222 diff --git a/graphics/pokemon/kyurem/front.png b/graphics/pokemon/kyurem/front.png index bf93cdbc6c88..c558f9172309 100644 Binary files a/graphics/pokemon/kyurem/front.png and b/graphics/pokemon/kyurem/front.png differ diff --git a/graphics/pokemon/kyurem/normal.pal b/graphics/pokemon/kyurem/normal.pal index 2aa2a657a3fb..f64ed244349f 100644 --- a/graphics/pokemon/kyurem/normal.pal +++ b/graphics/pokemon/kyurem/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 128 128 -72 80 104 -144 176 184 -200 232 240 -120 112 120 -240 232 136 -168 224 232 -64 72 88 +104 128 144 +16 56 80 +160 176 200 +216 240 248 +112 112 120 +248 224 0 +184 224 248 +64 64 80 16 16 16 144 152 168 -152 136 80 -200 184 80 +136 112 40 +200 176 0 248 248 248 200 200 200 -0 0 0 +112 112 120 diff --git a/graphics/pokemon/kyurem/white/anim_front.png b/graphics/pokemon/kyurem/white/anim_front.png index b55d6c89a778..0f2185688635 100644 Binary files a/graphics/pokemon/kyurem/white/anim_front.png and b/graphics/pokemon/kyurem/white/anim_front.png differ diff --git a/graphics/pokemon/kyurem/white/front.png b/graphics/pokemon/kyurem/white/front.png index 7e7314e767e5..7b587c7d2099 100644 Binary files a/graphics/pokemon/kyurem/white/front.png and b/graphics/pokemon/kyurem/white/front.png differ diff --git a/graphics/pokemon/kyurem/white/normal.pal b/graphics/pokemon/kyurem/white/normal.pal index cc136a09e651..560f651774ff 100644 --- a/graphics/pokemon/kyurem/white/normal.pal +++ b/graphics/pokemon/kyurem/white/normal.pal @@ -2,9 +2,9 @@ JASC-PAL 0100 16 153 210 164 -173 228 247 -123 157 160 -255 255 255 +184 224 248 +128 152 184 +248 248 248 16 16 16 156 166 173 71 78 89 @@ -12,8 +12,8 @@ JASC-PAL 60 84 96 230 74 66 148 41 33 -198 181 169 -122 109 101 +184 184 208 +128 128 128 255 173 99 -255 212 25 +248 224 0 255 222 58 diff --git a/graphics/pokemon/lairon/anim_front.png b/graphics/pokemon/lairon/anim_front.png index 3e3a0850a208..79c345af427c 100644 Binary files a/graphics/pokemon/lairon/anim_front.png and b/graphics/pokemon/lairon/anim_front.png differ diff --git a/graphics/pokemon/lairon/front.png b/graphics/pokemon/lairon/front.png index 0242ce501449..de830e3064f6 100644 Binary files a/graphics/pokemon/lairon/front.png and b/graphics/pokemon/lairon/front.png differ diff --git a/graphics/pokemon/lairon/normal.pal b/graphics/pokemon/lairon/normal.pal index 680a9a6ba308..8923b7cee4ec 100644 --- a/graphics/pokemon/lairon/normal.pal +++ b/graphics/pokemon/lairon/normal.pal @@ -3,9 +3,9 @@ JASC-PAL 16 152 208 160 104 104 120 -120 120 144 +120 128 144 248 248 248 -192 192 216 +192 208 216 16 16 16 64 72 80 152 152 176 @@ -13,7 +13,7 @@ JASC-PAL 104 104 104 168 168 168 136 136 136 -80 184 224 -152 88 120 -208 152 176 +104 184 248 +168 56 72 +224 104 104 104 104 104 diff --git a/graphics/pokemon/lampent/anim_front.png b/graphics/pokemon/lampent/anim_front.png index 5f4a228ad0d7..766dc2d32e9b 100644 Binary files a/graphics/pokemon/lampent/anim_front.png and b/graphics/pokemon/lampent/anim_front.png differ diff --git a/graphics/pokemon/lampent/front.png b/graphics/pokemon/lampent/front.png index c6c1fdd9333e..2d249ae93ec9 100644 Binary files a/graphics/pokemon/lampent/front.png and b/graphics/pokemon/lampent/front.png differ diff --git a/graphics/pokemon/lampent/normal.pal b/graphics/pokemon/lampent/normal.pal index ef554b7fec34..d7bae894cf81 100644 --- a/graphics/pokemon/lampent/normal.pal +++ b/graphics/pokemon/lampent/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -40 40 40 -48 56 64 -168 192 216 -112 112 200 -112 120 136 -136 120 160 -160 168 216 -136 120 48 -240 208 56 -192 224 248 +0 0 0 +48 48 48 +72 72 72 +192 200 208 +128 104 224 +128 128 128 +144 136 168 +192 184 240 +120 104 8 +248 224 32 +216 224 232 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/landorus/anim_front.png b/graphics/pokemon/landorus/anim_front.png index db5da4a3910e..762c5cd2e7c1 100644 Binary files a/graphics/pokemon/landorus/anim_front.png and b/graphics/pokemon/landorus/anim_front.png differ diff --git a/graphics/pokemon/landorus/back.png b/graphics/pokemon/landorus/back.png index 35216e5fe8c0..f70121ac4f8d 100644 Binary files a/graphics/pokemon/landorus/back.png and b/graphics/pokemon/landorus/back.png differ diff --git a/graphics/pokemon/landorus/front.png b/graphics/pokemon/landorus/front.png index 074644e0d7d4..e16bea46b676 100644 Binary files a/graphics/pokemon/landorus/front.png and b/graphics/pokemon/landorus/front.png differ diff --git a/graphics/pokemon/landorus/normal.pal b/graphics/pokemon/landorus/normal.pal index 228b5ffa57ff..bbacdca83740 100644 --- a/graphics/pokemon/landorus/normal.pal +++ b/graphics/pokemon/landorus/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -112 96 88 -16 16 16 -248 248 248 -176 160 160 -80 40 48 -176 80 88 -152 88 56 -240 128 72 -56 48 40 -248 192 136 -56 48 48 -88 64 56 -120 96 80 -112 56 80 +153 204 153 +128 96 72 +17 17 17 +255 255 255 +176 176 184 +85 34 51 +184 72 80 +160 88 56 +240 120 64 +51 51 34 +248 200 96 +51 51 51 +96 64 48 +119 51 85 +128 128 128 0 0 0 diff --git a/graphics/pokemon/landorus/shiny.pal b/graphics/pokemon/landorus/shiny.pal index a1c09aa11eea..25f3ac5c93ca 100644 --- a/graphics/pokemon/landorus/shiny.pal +++ b/graphics/pokemon/landorus/shiny.pal @@ -15,5 +15,5 @@ JASC-PAL 56 32 16 72 48 32 120 72 40 -168 80 32 +128 128 128 0 0 0 diff --git a/graphics/pokemon/landorus/therian/anim_front.png b/graphics/pokemon/landorus/therian/anim_front.png index cbe0fa0011c5..2ea9efd8b504 100644 Binary files a/graphics/pokemon/landorus/therian/anim_front.png and b/graphics/pokemon/landorus/therian/anim_front.png differ diff --git a/graphics/pokemon/landorus/therian/front.png b/graphics/pokemon/landorus/therian/front.png index 81f5550c2a1b..47f617e4f04a 100644 Binary files a/graphics/pokemon/landorus/therian/front.png and b/graphics/pokemon/landorus/therian/front.png differ diff --git a/graphics/pokemon/landorus/therian/normal.pal b/graphics/pokemon/landorus/therian/normal.pal index 92f0fccd25a4..e2e389aba385 100644 --- a/graphics/pokemon/landorus/therian/normal.pal +++ b/graphics/pokemon/landorus/therian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 72 56 +96 64 48 16 16 16 -208 88 96 -136 112 88 -56 40 32 -120 112 104 +184 72 80 +128 96 72 +72 40 24 +112 112 112 248 248 248 -192 176 168 -104 40 48 -88 48 32 -248 136 56 -168 88 40 -136 56 64 -240 192 112 +176 176 184 +112 48 56 +96 48 16 +240 120 64 +160 88 56 +144 48 64 +248 200 96 0 0 0 diff --git a/graphics/pokemon/lanturn/anim_front.png b/graphics/pokemon/lanturn/anim_front.png index 339e7f4769a3..69166b66bc60 100644 Binary files a/graphics/pokemon/lanturn/anim_front.png and b/graphics/pokemon/lanturn/anim_front.png differ diff --git a/graphics/pokemon/lanturn/front.png b/graphics/pokemon/lanturn/front.png index 714ac438c529..d17887059057 100644 Binary files a/graphics/pokemon/lanturn/front.png and b/graphics/pokemon/lanturn/front.png differ diff --git a/graphics/pokemon/lanturn/normal.pal b/graphics/pokemon/lanturn/normal.pal index be80edb4cac1..792d90f29ee8 100644 --- a/graphics/pokemon/lanturn/normal.pal +++ b/graphics/pokemon/lanturn/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 136 120 88 -248 224 120 -224 192 96 -88 112 168 -144 176 240 -192 160 80 +248 216 96 +224 184 48 +88 112 192 +144 160 224 +176 136 32 48 56 96 -112 136 216 +120 152 216 16 16 16 248 248 248 80 64 40 -184 200 240 -120 80 88 -224 112 112 -224 64 40 +184 192 232 +160 48 72 +232 96 88 +168 0 0 diff --git a/graphics/pokemon/lapras/anim_front.png b/graphics/pokemon/lapras/anim_front.png index f96adda66ad4..ac69884f41db 100644 Binary files a/graphics/pokemon/lapras/anim_front.png and b/graphics/pokemon/lapras/anim_front.png differ diff --git a/graphics/pokemon/lapras/front.png b/graphics/pokemon/lapras/front.png index 81cb4f41ab73..d02409eb99a3 100644 Binary files a/graphics/pokemon/lapras/front.png and b/graphics/pokemon/lapras/front.png differ diff --git a/graphics/pokemon/lapras/normal.pal b/graphics/pokemon/lapras/normal.pal index ed20b3cfe7cb..52f74091be00 100644 --- a/graphics/pokemon/lapras/normal.pal +++ b/graphics/pokemon/lapras/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 64 96 -8 8 8 -56 168 216 -40 128 160 -104 192 232 -232 232 240 -104 80 64 -144 136 160 -216 184 144 -136 160 144 -80 80 104 -168 176 200 -248 224 176 -173 117 147 +24 65 82 +0 0 0 +65 164 230 +57 123 164 +115 197 246 +246 238 230 +90 74 65 +164 148 148 +222 197 131 +139 164 148 +82 82 106 +213 205 197 +240 216 168 +232 128 120 0 0 0 diff --git a/graphics/pokemon/larvesta/anim_front.png b/graphics/pokemon/larvesta/anim_front.png index a727183a9fb6..9c3ddea2af50 100644 Binary files a/graphics/pokemon/larvesta/anim_front.png and b/graphics/pokemon/larvesta/anim_front.png differ diff --git a/graphics/pokemon/larvesta/front.png b/graphics/pokemon/larvesta/front.png index 98f44e0356d3..b2e83baacfcf 100644 Binary files a/graphics/pokemon/larvesta/front.png and b/graphics/pokemon/larvesta/front.png differ diff --git a/graphics/pokemon/larvesta/normal.pal b/graphics/pokemon/larvesta/normal.pal index 4d561ca5f989..9cebf0069fa3 100644 --- a/graphics/pokemon/larvesta/normal.pal +++ b/graphics/pokemon/larvesta/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 56 40 -176 80 80 -232 104 72 +104 32 0 +168 40 8 +208 56 24 16 16 24 -112 112 136 +128 128 136 248 248 248 -152 160 176 -80 72 80 -200 208 224 -24 192 240 -0 152 192 -160 120 72 -72 56 40 -128 88 48 -56 48 48 +176 176 176 +80 80 88 +216 216 224 +0 208 248 +0 136 216 +176 120 56 +88 64 16 +136 96 40 +48 48 56 diff --git a/graphics/pokemon/larvitar/anim_front.png b/graphics/pokemon/larvitar/anim_front.png index aa5bc0cf7c7b..5a52aa731793 100644 Binary files a/graphics/pokemon/larvitar/anim_front.png and b/graphics/pokemon/larvitar/anim_front.png differ diff --git a/graphics/pokemon/larvitar/front.png b/graphics/pokemon/larvitar/front.png index 1cdc121f5a63..1974d284314b 100644 Binary files a/graphics/pokemon/larvitar/front.png and b/graphics/pokemon/larvitar/front.png differ diff --git a/graphics/pokemon/larvitar/normal.pal b/graphics/pokemon/larvitar/normal.pal index f4c8732dee30..abd92bbc4f70 100644 --- a/graphics/pokemon/larvitar/normal.pal +++ b/graphics/pokemon/larvitar/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -64 80 40 -168 208 136 -128 144 96 +72 88 56 +168 200 152 +120 152 96 16 16 16 248 248 248 -184 56 48 -216 104 104 -80 16 16 -128 40 40 +216 40 40 +232 120 136 +104 0 16 +168 24 24 192 192 192 -130 67 88 -188 103 103 +168 16 0 +232 32 24 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/latias/anim_front.png b/graphics/pokemon/latias/anim_front.png index 8f957670756e..658003aea266 100644 Binary files a/graphics/pokemon/latias/anim_front.png and b/graphics/pokemon/latias/anim_front.png differ diff --git a/graphics/pokemon/latias/front.png b/graphics/pokemon/latias/front.png index 9f01891c39f9..cb84e81c036c 100644 Binary files a/graphics/pokemon/latias/front.png and b/graphics/pokemon/latias/front.png differ diff --git a/graphics/pokemon/latias/normal.pal b/graphics/pokemon/latias/normal.pal index 684fb2555bd2..daefa4d8af54 100644 --- a/graphics/pokemon/latias/normal.pal +++ b/graphics/pokemon/latias/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 120 152 +120 120 160 232 232 248 16 16 16 -192 208 232 +200 200 232 152 168 200 -120 48 64 -232 120 112 -168 72 80 +136 40 72 +248 96 96 +184 64 64 216 144 160 -192 88 88 -200 152 72 +200 72 80 +200 160 72 248 248 248 -240 200 144 -144 200 224 -64 144 176 +248 200 88 +112 168 248 +64 120 200 diff --git a/graphics/pokemon/latios/anim_front.png b/graphics/pokemon/latios/anim_front.png index dcfd19658cf5..5e952f1569ed 100644 Binary files a/graphics/pokemon/latios/anim_front.png and b/graphics/pokemon/latios/anim_front.png differ diff --git a/graphics/pokemon/latios/front.png b/graphics/pokemon/latios/front.png index 9455b9aba865..283e968b7066 100644 Binary files a/graphics/pokemon/latios/front.png and b/graphics/pokemon/latios/front.png differ diff --git a/graphics/pokemon/latios/normal.pal b/graphics/pokemon/latios/normal.pal index 1486bd38ddb2..6dee309f1d42 100644 --- a/graphics/pokemon/latios/normal.pal +++ b/graphics/pokemon/latios/normal.pal @@ -4,16 +4,16 @@ JASC-PAL 152 208 160 152 128 144 104 80 104 -224 208 208 -176 168 168 +224 216 208 +176 176 168 232 224 224 -32 104 160 +72 96 176 16 16 16 32 64 96 -112 176 224 +80 168 248 160 216 240 -64 136 192 -200 48 88 +80 112 216 +200 56 88 248 248 248 -248 112 120 +248 88 80 0 0 0 diff --git a/graphics/pokemon/leafeon/anim_front.png b/graphics/pokemon/leafeon/anim_front.png index d6b2958d4d2f..b3e39fc61040 100644 Binary files a/graphics/pokemon/leafeon/anim_front.png and b/graphics/pokemon/leafeon/anim_front.png differ diff --git a/graphics/pokemon/leafeon/front.png b/graphics/pokemon/leafeon/front.png index 9d60262504f9..7ea19f1b55a0 100644 Binary files a/graphics/pokemon/leafeon/front.png and b/graphics/pokemon/leafeon/front.png differ diff --git a/graphics/pokemon/leafeon/normal.pal b/graphics/pokemon/leafeon/normal.pal index d5c2bf08c981..8ebfc35cf116 100644 --- a/graphics/pokemon/leafeon/normal.pal +++ b/graphics/pokemon/leafeon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -56 112 80 -128 200 152 -80 160 112 +48 96 88 +104 184 136 +48 152 112 16 16 16 -104 64 24 -176 104 32 +88 64 32 +144 96 48 56 40 24 -88 88 64 -128 160 112 -248 224 160 -208 176 120 -128 104 72 -176 152 104 +96 80 64 +136 168 120 +232 208 152 +208 176 112 +128 104 64 +184 144 96 232 248 248 -0 0 0 +64 56 64 diff --git a/graphics/pokemon/leavanny/anim_front.png b/graphics/pokemon/leavanny/anim_front.png index f39280c35231..103cdd8608e0 100644 Binary files a/graphics/pokemon/leavanny/anim_front.png and b/graphics/pokemon/leavanny/anim_front.png differ diff --git a/graphics/pokemon/leavanny/front.png b/graphics/pokemon/leavanny/front.png index 109dbfd7fba3..fe45f277dbfd 100644 Binary files a/graphics/pokemon/leavanny/front.png and b/graphics/pokemon/leavanny/front.png differ diff --git a/graphics/pokemon/leavanny/normal.pal b/graphics/pokemon/leavanny/normal.pal index 2c0b25863b82..51a8d96f7229 100644 --- a/graphics/pokemon/leavanny/normal.pal +++ b/graphics/pokemon/leavanny/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -128 112 24 -248 224 96 -72 96 48 -136 192 64 -104 144 56 -248 232 160 -128 56 48 +0 0 0 +136 120 16 +248 240 32 +64 96 48 +120 200 8 +88 152 48 +248 248 152 +128 48 64 248 248 248 -248 80 72 -192 168 72 -8 56 8 -48 104 48 -64 136 56 +248 48 72 +184 168 16 +16 64 56 +24 112 72 +40 152 80 0 0 0 diff --git a/graphics/pokemon/ledian/anim_front.png b/graphics/pokemon/ledian/anim_front.png index a6121329b36b..57d90f93be59 100644 Binary files a/graphics/pokemon/ledian/anim_front.png and b/graphics/pokemon/ledian/anim_front.png differ diff --git a/graphics/pokemon/ledian/front.png b/graphics/pokemon/ledian/front.png index 0c67c611f954..a51f2884e99b 100644 Binary files a/graphics/pokemon/ledian/front.png and b/graphics/pokemon/ledian/front.png differ diff --git a/graphics/pokemon/ledian/normal.pal b/graphics/pokemon/ledian/normal.pal index 782d0bea67c8..370e37e2c590 100644 --- a/graphics/pokemon/ledian/normal.pal +++ b/graphics/pokemon/ledian/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -64 64 64 -168 32 56 -248 112 136 -104 8 24 -232 56 88 -16 48 88 +80 80 80 +192 56 88 +248 128 128 +112 32 16 +248 72 64 +0 64 112 248 248 248 -32 104 160 -176 184 176 -136 128 88 -192 168 104 -248 224 136 -224 232 224 -64 64 64 +0 128 184 +176 176 176 +160 120 0 +200 176 56 +240 224 112 +208 208 208 +80 80 80 diff --git a/graphics/pokemon/ledyba/anim_front.png b/graphics/pokemon/ledyba/anim_front.png index 8e279aac91e5..38bdd1df2e74 100644 Binary files a/graphics/pokemon/ledyba/anim_front.png and b/graphics/pokemon/ledyba/anim_front.png differ diff --git a/graphics/pokemon/ledyba/front.png b/graphics/pokemon/ledyba/front.png index 0f9954371bf3..10e52bbc70c4 100644 Binary files a/graphics/pokemon/ledyba/front.png and b/graphics/pokemon/ledyba/front.png differ diff --git a/graphics/pokemon/ledyba/normal.pal b/graphics/pokemon/ledyba/normal.pal index 0d2673a79928..eb13383dae62 100644 --- a/graphics/pokemon/ledyba/normal.pal +++ b/graphics/pokemon/ledyba/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -88 88 88 -96 40 24 -176 80 48 -248 112 56 -240 168 112 +88 80 80 +104 40 24 +176 64 48 +240 88 24 +248 152 32 208 200 200 248 248 248 168 160 160 -208 184 120 -248 224 144 -248 240 176 -128 112 72 -96 128 192 -80 80 112 +208 176 120 +248 224 152 +248 248 184 +160 120 0 +104 96 176 +72 48 112 diff --git a/graphics/pokemon/lickilicky/anim_front.png b/graphics/pokemon/lickilicky/anim_front.png index 4583e67865f2..38f23ec49b7d 100644 Binary files a/graphics/pokemon/lickilicky/anim_front.png and b/graphics/pokemon/lickilicky/anim_front.png differ diff --git a/graphics/pokemon/lickilicky/front.png b/graphics/pokemon/lickilicky/front.png index e13d04878ec9..e9905f1a650d 100644 Binary files a/graphics/pokemon/lickilicky/front.png and b/graphics/pokemon/lickilicky/front.png differ diff --git a/graphics/pokemon/lickilicky/normal.pal b/graphics/pokemon/lickilicky/normal.pal index f2b0888bcf1f..b97fcd3ec831 100644 --- a/graphics/pokemon/lickilicky/normal.pal +++ b/graphics/pokemon/lickilicky/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 72 96 -176 96 112 +144 64 96 +184 80 112 248 160 176 -224 120 144 +224 112 144 16 16 16 -88 48 56 +96 40 56 248 248 248 -128 64 64 -232 128 128 -176 96 96 -240 176 160 -200 184 176 -152 128 120 -240 208 96 -192 160 56 +144 56 64 +240 120 88 +192 88 88 +248 176 136 +208 200 216 +136 136 168 +248 224 120 +200 168 72 diff --git a/graphics/pokemon/lickitung/anim_front.png b/graphics/pokemon/lickitung/anim_front.png index f9fc845b5abd..1a6c1aa9cf65 100644 Binary files a/graphics/pokemon/lickitung/anim_front.png and b/graphics/pokemon/lickitung/anim_front.png differ diff --git a/graphics/pokemon/lickitung/front.png b/graphics/pokemon/lickitung/front.png index 6fe4a06adfe5..6a7177e793cc 100644 Binary files a/graphics/pokemon/lickitung/front.png and b/graphics/pokemon/lickitung/front.png differ diff --git a/graphics/pokemon/lickitung/normal.pal b/graphics/pokemon/lickitung/normal.pal index 71caa52c5c8d..520baee770b3 100644 --- a/graphics/pokemon/lickitung/normal.pal +++ b/graphics/pokemon/lickitung/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 88 104 -88 56 72 -208 128 136 -248 160 176 +176 64 80 +120 24 16 +232 112 136 +248 152 168 248 248 248 -248 184 200 +248 200 208 200 192 200 -216 192 144 +224 208 112 16 16 16 -152 88 104 -192 136 152 -240 184 200 -248 232 168 -112 104 80 +152 72 96 +208 136 168 +248 184 216 +248 248 176 +128 120 32 0 0 0 diff --git a/graphics/pokemon/liepard/anim_front.png b/graphics/pokemon/liepard/anim_front.png index e89dd63dc46b..ce2932e71b6b 100644 Binary files a/graphics/pokemon/liepard/anim_front.png and b/graphics/pokemon/liepard/anim_front.png differ diff --git a/graphics/pokemon/liepard/front.png b/graphics/pokemon/liepard/front.png index 3d3962ead758..2a9d2abca2d0 100644 Binary files a/graphics/pokemon/liepard/front.png and b/graphics/pokemon/liepard/front.png differ diff --git a/graphics/pokemon/liepard/normal.pal b/graphics/pokemon/liepard/normal.pal index ef4c0822ad4d..4e448f1b444a 100644 --- a/graphics/pokemon/liepard/normal.pal +++ b/graphics/pokemon/liepard/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 64 104 +88 64 112 48 32 56 -112 80 144 +128 96 144 16 16 16 -152 64 80 -224 96 128 -200 152 64 +184 56 128 +224 120 152 +200 160 24 136 120 8 -248 200 88 +240 208 64 248 248 248 -40 112 48 +8 120 64 200 200 200 -80 64 24 -72 176 88 +88 80 16 +0 192 88 0 0 0 diff --git a/graphics/pokemon/lileep/anim_front.png b/graphics/pokemon/lileep/anim_front.png index 8845eb190de1..87ba440c21ff 100644 Binary files a/graphics/pokemon/lileep/anim_front.png and b/graphics/pokemon/lileep/anim_front.png differ diff --git a/graphics/pokemon/lileep/front.png b/graphics/pokemon/lileep/front.png index d934bde9c31c..21f36a6ea4c8 100644 Binary files a/graphics/pokemon/lileep/front.png and b/graphics/pokemon/lileep/front.png differ diff --git a/graphics/pokemon/lileep/normal.pal b/graphics/pokemon/lileep/normal.pal index 0d0f54a6ccbb..0de38554ea5b 100644 --- a/graphics/pokemon/lileep/normal.pal +++ b/graphics/pokemon/lileep/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 56 72 -240 176 184 -200 136 136 -176 96 112 -72 48 112 -112 96 160 -8 8 8 -64 64 72 -88 72 48 -240 216 128 -184 152 96 -152 128 200 -184 168 216 -120 56 72 +128 56 88 +232 168 176 +200 112 144 +184 80 128 +96 56 128 +112 96 176 0 0 0 +56 56 64 +104 80 32 +232 208 96 +208 160 48 +152 128 200 +176 168 224 +112 112 112 +128 56 88 diff --git a/graphics/pokemon/lilligant/anim_front.png b/graphics/pokemon/lilligant/anim_front.png index 064196051874..0c8a907e7fc6 100644 Binary files a/graphics/pokemon/lilligant/anim_front.png and b/graphics/pokemon/lilligant/anim_front.png differ diff --git a/graphics/pokemon/lilligant/front.png b/graphics/pokemon/lilligant/front.png index bceb122ba8d3..170a97c17059 100644 Binary files a/graphics/pokemon/lilligant/front.png and b/graphics/pokemon/lilligant/front.png differ diff --git a/graphics/pokemon/lilligant/normal.pal b/graphics/pokemon/lilligant/normal.pal index 07030e3214c8..0f90d838072e 100644 --- a/graphics/pokemon/lilligant/normal.pal +++ b/graphics/pokemon/lilligant/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -96 64 16 -224 120 64 -160 88 56 -168 144 64 -232 208 72 -32 64 32 -48 120 48 +112 64 32 +248 104 56 +184 96 56 +184 160 80 +248 216 64 +48 88 48 +72 128 72 248 176 152 248 248 248 -64 176 64 -56 80 32 -176 224 120 -128 160 96 -184 168 168 +56 168 56 +80 96 40 +192 232 120 +152 176 96 +200 192 184 diff --git a/graphics/pokemon/lillipup/anim_front.png b/graphics/pokemon/lillipup/anim_front.png index 5c3be492e1f4..0a68cc53349e 100644 Binary files a/graphics/pokemon/lillipup/anim_front.png and b/graphics/pokemon/lillipup/anim_front.png differ diff --git a/graphics/pokemon/lillipup/front.png b/graphics/pokemon/lillipup/front.png index 5e7b88b3e3e1..50bf52ed1565 100644 Binary files a/graphics/pokemon/lillipup/front.png and b/graphics/pokemon/lillipup/front.png differ diff --git a/graphics/pokemon/lillipup/normal.pal b/graphics/pokemon/lillipup/normal.pal index cc49552dd107..37d2ca02bf78 100644 --- a/graphics/pokemon/lillipup/normal.pal +++ b/graphics/pokemon/lillipup/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 96 72 -216 136 96 -80 48 48 -16 16 16 -248 208 136 -96 80 56 -176 144 96 +144 88 64 +216 144 88 +72 48 16 +0 0 0 +232 200 144 +96 72 24 +176 136 72 200 200 200 -56 56 56 -88 88 80 +56 64 72 +80 88 112 248 248 248 -24 24 24 -232 96 88 -56 72 120 -40 48 72 +40 40 40 +216 88 88 +144 88 64 +0 0 0 diff --git a/graphics/pokemon/linoone/anim_front.png b/graphics/pokemon/linoone/anim_front.png index e5d8553a0532..f2882dd04841 100644 Binary files a/graphics/pokemon/linoone/anim_front.png and b/graphics/pokemon/linoone/anim_front.png differ diff --git a/graphics/pokemon/linoone/front.png b/graphics/pokemon/linoone/front.png index abbcda76a87d..955510bdd5c0 100644 Binary files a/graphics/pokemon/linoone/front.png and b/graphics/pokemon/linoone/front.png differ diff --git a/graphics/pokemon/linoone/normal.pal b/graphics/pokemon/linoone/normal.pal index b9225a728242..4f2dce5d155b 100644 --- a/graphics/pokemon/linoone/normal.pal +++ b/graphics/pokemon/linoone/normal.pal @@ -3,11 +3,11 @@ JASC-PAL 16 152 208 160 88 80 72 -136 104 80 -160 128 112 +128 104 88 +160 136 120 184 160 144 216 200 184 -96 72 56 +88 72 56 24 24 24 144 128 120 48 120 152 diff --git a/graphics/pokemon/litwick/anim_front.png b/graphics/pokemon/litwick/anim_front.png index 9fdac284a46d..10189cd52b71 100644 Binary files a/graphics/pokemon/litwick/anim_front.png and b/graphics/pokemon/litwick/anim_front.png differ diff --git a/graphics/pokemon/litwick/front.png b/graphics/pokemon/litwick/front.png index 184132b93f85..e0b19ccb67b3 100644 Binary files a/graphics/pokemon/litwick/front.png and b/graphics/pokemon/litwick/front.png differ diff --git a/graphics/pokemon/litwick/normal.pal b/graphics/pokemon/litwick/normal.pal index 79059ac37fde..0169128b2915 100644 --- a/graphics/pokemon/litwick/normal.pal +++ b/graphics/pokemon/litwick/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 56 112 -104 104 184 +56 40 112 +112 80 224 152 136 224 -168 192 224 -16 16 16 -88 104 128 +192 184 240 +0 0 0 +112 112 112 248 248 248 -168 184 224 -224 232 248 -136 128 56 -248 208 56 -168 184 224 +200 192 200 +224 224 248 +120 104 8 +248 224 32 +0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/lombre/anim_front.png b/graphics/pokemon/lombre/anim_front.png index de10b0b67993..cb0fef9c4d22 100644 Binary files a/graphics/pokemon/lombre/anim_front.png and b/graphics/pokemon/lombre/anim_front.png differ diff --git a/graphics/pokemon/lombre/front.png b/graphics/pokemon/lombre/front.png index ee45798f2254..022c1c0081be 100644 Binary files a/graphics/pokemon/lombre/front.png and b/graphics/pokemon/lombre/front.png differ diff --git a/graphics/pokemon/lombre/normal.pal b/graphics/pokemon/lombre/normal.pal index 8b0be582303c..c8271ae0000f 100644 --- a/graphics/pokemon/lombre/normal.pal +++ b/graphics/pokemon/lombre/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 248 192 8 -48 80 32 -16 16 16 -80 152 40 -120 176 56 -168 208 112 -248 248 248 -128 136 152 -72 136 112 -128 184 160 -152 48 56 -216 96 96 -240 128 136 -176 224 200 +65 82 32 +0 0 0 +106 139 57 +139 172 57 +172 213 98 +255 255 255 +131 139 156 +74 148 98 +123 189 156 +148 49 65 +205 65 98 +255 115 148 +172 222 180 0 0 0 0 0 0 diff --git a/graphics/pokemon/lopunny/anim_front.png b/graphics/pokemon/lopunny/anim_front.png index 96be9f7c198a..5bef7124368a 100644 Binary files a/graphics/pokemon/lopunny/anim_front.png and b/graphics/pokemon/lopunny/anim_front.png differ diff --git a/graphics/pokemon/lopunny/front.png b/graphics/pokemon/lopunny/front.png index d039dceaf914..44e188d0fd9c 100644 Binary files a/graphics/pokemon/lopunny/front.png and b/graphics/pokemon/lopunny/front.png differ diff --git a/graphics/pokemon/lopunny/normal.pal b/graphics/pokemon/lopunny/normal.pal index 490c6c38d66e..712971742d08 100644 --- a/graphics/pokemon/lopunny/normal.pal +++ b/graphics/pokemon/lopunny/normal.pal @@ -5,15 +5,15 @@ JASC-PAL 120 112 80 248 224 160 16 16 16 -80 56 48 -176 120 88 -136 88 56 +80 56 56 +176 120 72 +136 88 64 120 56 64 192 168 112 -176 96 104 +192 88 120 96 72 64 248 248 248 -224 120 136 +208 120 152 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/lotad/anim_front.png b/graphics/pokemon/lotad/anim_front.png index 1bec5a74acd6..cadc74768ee0 100644 Binary files a/graphics/pokemon/lotad/anim_front.png and b/graphics/pokemon/lotad/anim_front.png differ diff --git a/graphics/pokemon/lotad/front.png b/graphics/pokemon/lotad/front.png index 2cec3a6777e7..efc92a04b843 100644 Binary files a/graphics/pokemon/lotad/front.png and b/graphics/pokemon/lotad/front.png differ diff --git a/graphics/pokemon/lotad/normal.pal b/graphics/pokemon/lotad/normal.pal index ef3049e58c4e..8387dd97a14e 100644 --- a/graphics/pokemon/lotad/normal.pal +++ b/graphics/pokemon/lotad/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 208 216 216 -32 80 48 -16 16 16 -96 184 128 -64 112 80 -64 152 96 -56 96 120 -48 144 176 -136 208 136 -200 176 104 +48 80 24 +0 0 0 +96 176 104 +48 120 64 +56 144 56 +56 80 104 +48 128 160 +128 200 120 +216 176 56 144 120 64 -120 184 216 +96 152 216 248 248 248 144 176 216 -248 224 128 +248 216 120 0 0 0 diff --git a/graphics/pokemon/loudred/anim_front.png b/graphics/pokemon/loudred/anim_front.png index ca1ecbb146e8..71912b382f13 100644 Binary files a/graphics/pokemon/loudred/anim_front.png and b/graphics/pokemon/loudred/anim_front.png differ diff --git a/graphics/pokemon/loudred/front.png b/graphics/pokemon/loudred/front.png index 84e93592de7f..29c1e1bafdcb 100644 Binary files a/graphics/pokemon/loudred/front.png and b/graphics/pokemon/loudred/front.png differ diff --git a/graphics/pokemon/loudred/normal.pal b/graphics/pokemon/loudred/normal.pal index 44ef7c24a8bf..d45bbf07634c 100644 --- a/graphics/pokemon/loudred/normal.pal +++ b/graphics/pokemon/loudred/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 96 152 -168 168 216 -48 56 88 -128 128 192 -16 16 16 -152 64 112 -184 104 144 -224 152 184 +112 96 144 +176 168 224 +64 64 104 +128 128 184 +0 0 0 +136 48 88 +192 72 128 +208 112 176 248 248 248 200 200 200 -136 112 56 -208 176 96 -248 224 136 -96 40 72 +152 120 48 +208 168 48 +248 216 112 +96 40 64 112 112 112 diff --git a/graphics/pokemon/lucario/anim_front.png b/graphics/pokemon/lucario/anim_front.png index 821008a0055c..3425fd37bde0 100644 Binary files a/graphics/pokemon/lucario/anim_front.png and b/graphics/pokemon/lucario/anim_front.png differ diff --git a/graphics/pokemon/lucario/front.png b/graphics/pokemon/lucario/front.png index 464c51971d2a..c4b7a41c2dbf 100644 Binary files a/graphics/pokemon/lucario/front.png and b/graphics/pokemon/lucario/front.png differ diff --git a/graphics/pokemon/lucario/normal.pal b/graphics/pokemon/lucario/normal.pal index b86db220c510..87be39f7a376 100644 --- a/graphics/pokemon/lucario/normal.pal +++ b/graphics/pokemon/lucario/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 64 80 -88 160 192 +16 72 120 +72 152 232 16 16 16 -64 112 136 +40 112 152 56 48 48 -80 80 80 -128 128 120 -200 200 200 -232 64 64 +88 88 88 +128 128 128 +208 208 208 +216 64 64 248 248 248 -160 144 96 +224 224 152 72 64 32 -248 216 144 -178 107 124 +176 176 96 +160 48 48 0 0 0 diff --git a/graphics/pokemon/ludicolo/anim_front.png b/graphics/pokemon/ludicolo/anim_front.png index 9da05f6e9458..2796df8df849 100644 Binary files a/graphics/pokemon/ludicolo/anim_front.png and b/graphics/pokemon/ludicolo/anim_front.png differ diff --git a/graphics/pokemon/ludicolo/front.png b/graphics/pokemon/ludicolo/front.png index 8adc45edbda1..98ac42818610 100644 Binary files a/graphics/pokemon/ludicolo/front.png and b/graphics/pokemon/ludicolo/front.png differ diff --git a/graphics/pokemon/ludicolo/normal.pal b/graphics/pokemon/ludicolo/normal.pal index d272de6a2213..4fa18931ac61 100644 --- a/graphics/pokemon/ludicolo/normal.pal +++ b/graphics/pokemon/ludicolo/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 192 192 240 -16 16 16 -120 96 80 -248 224 160 -184 160 120 -224 200 128 -128 144 72 -80 96 48 -160 136 112 -200 232 168 -144 192 96 -176 224 120 +0 0 0 +120 104 88 +248 240 144 +200 192 128 +232 224 152 +112 144 88 +72 104 72 +168 136 104 +200 248 136 +152 192 96 +168 224 112 248 248 248 240 168 120 -136 72 88 -208 136 160 +160 72 72 +224 120 160 diff --git a/graphics/pokemon/lugia/anim_front.png b/graphics/pokemon/lugia/anim_front.png index f3432c3fccea..fbe467fb6c97 100644 Binary files a/graphics/pokemon/lugia/anim_front.png and b/graphics/pokemon/lugia/anim_front.png differ diff --git a/graphics/pokemon/lugia/front.png b/graphics/pokemon/lugia/front.png index 5ce94a1d0b80..124a6f626ee8 100644 Binary files a/graphics/pokemon/lugia/front.png and b/graphics/pokemon/lugia/front.png differ diff --git a/graphics/pokemon/lugia/normal.pal b/graphics/pokemon/lugia/normal.pal index 7611934fb368..ff5f67433caa 100644 --- a/graphics/pokemon/lugia/normal.pal +++ b/graphics/pokemon/lugia/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 160 192 -80 88 112 +152 168 224 +96 112 120 248 248 248 16 16 16 -216 216 248 -40 48 112 -64 88 168 +208 224 240 +40 48 136 +80 88 168 176 192 240 -96 120 192 -176 200 248 -136 152 232 -200 112 112 -104 72 112 -80 112 192 -32 80 128 +128 128 192 +168 184 232 +112 136 232 +232 144 144 +176 64 80 +80 120 184 +0 64 128 diff --git a/graphics/pokemon/lumineon/anim_front.png b/graphics/pokemon/lumineon/anim_front.png index b177ef90e386..29ef5dd7b6b8 100644 Binary files a/graphics/pokemon/lumineon/anim_front.png and b/graphics/pokemon/lumineon/anim_front.png differ diff --git a/graphics/pokemon/lumineon/front.png b/graphics/pokemon/lumineon/front.png index 9ba9095e382a..3aae9837fd0e 100644 Binary files a/graphics/pokemon/lumineon/front.png and b/graphics/pokemon/lumineon/front.png differ diff --git a/graphics/pokemon/lumineon/normal.pal b/graphics/pokemon/lumineon/normal.pal index cc07c568e6c3..d7dbfc5ca506 100644 --- a/graphics/pokemon/lumineon/normal.pal +++ b/graphics/pokemon/lumineon/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -80 120 120 +80 104 136 16 16 16 -216 240 224 -144 224 216 -104 160 160 -48 72 80 -32 48 48 -136 56 96 -208 88 144 +192 224 240 +144 208 224 +112 144 168 +48 64 88 +40 40 56 +112 64 120 +192 72 144 232 248 248 -32 48 48 +40 40 56 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/lunatone/anim_front.png b/graphics/pokemon/lunatone/anim_front.png index fd0a0896df83..20b840401c09 100644 Binary files a/graphics/pokemon/lunatone/anim_front.png and b/graphics/pokemon/lunatone/anim_front.png differ diff --git a/graphics/pokemon/lunatone/front.png b/graphics/pokemon/lunatone/front.png index 0d15a6f5bd91..279f1578d141 100644 Binary files a/graphics/pokemon/lunatone/front.png and b/graphics/pokemon/lunatone/front.png differ diff --git a/graphics/pokemon/lunatone/normal.pal b/graphics/pokemon/lunatone/normal.pal index 669f1764f33e..e3819cbc3b34 100644 --- a/graphics/pokemon/lunatone/normal.pal +++ b/graphics/pokemon/lunatone/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -176 160 112 -144 128 88 -232 216 168 -112 104 56 -208 192 128 -72 64 64 +176 160 80 +144 128 56 +232 216 136 +128 104 64 +200 184 104 +56 64 56 16 16 16 -160 56 64 -224 128 136 -200 88 96 +128 16 40 +208 88 112 +176 32 56 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/luvdisc/anim_front.png b/graphics/pokemon/luvdisc/anim_front.png index 0d94cb274d57..631ab8f09449 100644 Binary files a/graphics/pokemon/luvdisc/anim_front.png and b/graphics/pokemon/luvdisc/anim_front.png differ diff --git a/graphics/pokemon/luvdisc/front.png b/graphics/pokemon/luvdisc/front.png index fe0d78bde2b7..24ac5a6f933e 100644 Binary files a/graphics/pokemon/luvdisc/front.png and b/graphics/pokemon/luvdisc/front.png differ diff --git a/graphics/pokemon/luvdisc/normal.pal b/graphics/pokemon/luvdisc/normal.pal index 63040db6623e..cb3de3258d0e 100644 --- a/graphics/pokemon/luvdisc/normal.pal +++ b/graphics/pokemon/luvdisc/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 80 88 -112 48 48 -248 184 184 -16 16 16 -248 152 160 -232 120 136 -192 136 136 -24 64 112 +160 104 80 +112 56 48 +248 192 208 +0 0 0 +240 144 176 +224 112 152 +192 112 136 +48 72 168 248 248 248 -40 96 160 -232 192 192 -232 152 152 +40 88 240 +224 168 216 +240 128 192 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/luxio/anim_front.png b/graphics/pokemon/luxio/anim_front.png index 52d080c68792..8b9ffd23381c 100644 Binary files a/graphics/pokemon/luxio/anim_front.png and b/graphics/pokemon/luxio/anim_front.png differ diff --git a/graphics/pokemon/luxio/front.png b/graphics/pokemon/luxio/front.png index 262b34256ac9..f8a883afcb0e 100644 Binary files a/graphics/pokemon/luxio/front.png and b/graphics/pokemon/luxio/front.png differ diff --git a/graphics/pokemon/luxio/normal.pal b/graphics/pokemon/luxio/normal.pal index f9d318695211..54698e4f48cb 100644 --- a/graphics/pokemon/luxio/normal.pal +++ b/graphics/pokemon/luxio/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 88 32 -248 184 48 -184 136 32 +112 96 80 +248 224 88 +176 152 88 16 16 16 -40 40 40 -72 64 72 -96 96 104 -48 80 104 -120 184 208 -80 128 144 +48 48 64 +72 72 96 +96 96 120 +72 72 112 +120 168 240 +96 120 176 248 248 248 -184 56 48 -216 96 88 -165 104 134 +144 56 80 +224 72 80 +168 56 80 0 0 0 diff --git a/graphics/pokemon/luxray/anim_front.png b/graphics/pokemon/luxray/anim_front.png index ba7dd22391bd..93a073ce4413 100644 Binary files a/graphics/pokemon/luxray/anim_front.png and b/graphics/pokemon/luxray/anim_front.png differ diff --git a/graphics/pokemon/luxray/front.png b/graphics/pokemon/luxray/front.png index 7e097b93be55..12381ea362b6 100644 Binary files a/graphics/pokemon/luxray/front.png and b/graphics/pokemon/luxray/front.png differ diff --git a/graphics/pokemon/luxray/normal.pal b/graphics/pokemon/luxray/normal.pal index c45620af96fc..302dceb37327 100644 --- a/graphics/pokemon/luxray/normal.pal +++ b/graphics/pokemon/luxray/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 88 32 -248 192 40 +112 96 80 +248 224 88 16 16 16 -48 40 40 -96 96 104 -184 136 24 -72 64 72 -88 136 152 -104 184 208 -216 64 56 -152 48 40 -48 88 96 -117 80 103 -248 248 248 +48 48 64 +96 96 120 +176 152 88 +72 72 96 +96 120 176 +120 168 240 +224 72 80 +144 56 80 +72 72 112 +168 56 80 +0 0 0 0 0 0 diff --git a/graphics/pokemon/machamp/anim_front.png b/graphics/pokemon/machamp/anim_front.png index f14f25261a53..8778b19b1864 100644 Binary files a/graphics/pokemon/machamp/anim_front.png and b/graphics/pokemon/machamp/anim_front.png differ diff --git a/graphics/pokemon/machamp/back.png b/graphics/pokemon/machamp/back.png index e5039056367f..a5744c58c286 100644 Binary files a/graphics/pokemon/machamp/back.png and b/graphics/pokemon/machamp/back.png differ diff --git a/graphics/pokemon/machamp/front.png b/graphics/pokemon/machamp/front.png index b93e9b2998ed..205ae8640225 100644 Binary files a/graphics/pokemon/machamp/front.png and b/graphics/pokemon/machamp/front.png differ diff --git a/graphics/pokemon/machamp/normal.pal b/graphics/pokemon/machamp/normal.pal index 819376de53fb..b08105e3080d 100644 --- a/graphics/pokemon/machamp/normal.pal +++ b/graphics/pokemon/machamp/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 72 96 -112 128 152 -152 176 208 -8 8 8 -104 96 80 -224 200 192 -160 144 128 -168 64 48 +65 82 98 +131 139 148 +164 180 180 +0 0 0 +112 96 72 +74 74 98 +172 156 65 +184 0 0 248 248 248 -120 104 56 -240 224 152 -88 72 32 -200 184 128 -200 136 160 -160 72 112 +128 112 40 +240 232 152 +80 64 0 +200 192 96 +224 80 56 +168 48 16 diff --git a/graphics/pokemon/machamp/shiny.pal b/graphics/pokemon/machamp/shiny.pal index 24be63926ec0..3bbeb67226bb 100644 --- a/graphics/pokemon/machamp/shiny.pal +++ b/graphics/pokemon/machamp/shiny.pal @@ -7,7 +7,7 @@ JASC-PAL 152 184 88 8 8 8 80 64 24 -216 208 144 +49 74 0 160 152 80 184 32 32 248 248 248 diff --git a/graphics/pokemon/machoke/anim_front.png b/graphics/pokemon/machoke/anim_front.png index 19b90e39dd41..3286b07fcbfd 100644 Binary files a/graphics/pokemon/machoke/anim_front.png and b/graphics/pokemon/machoke/anim_front.png differ diff --git a/graphics/pokemon/machoke/front.png b/graphics/pokemon/machoke/front.png index d07d6b2e9c41..509b980e29e8 100644 Binary files a/graphics/pokemon/machoke/front.png and b/graphics/pokemon/machoke/front.png differ diff --git a/graphics/pokemon/machoke/normal.pal b/graphics/pokemon/machoke/normal.pal index 969e84c081ab..1dab6bec2d0d 100644 --- a/graphics/pokemon/machoke/normal.pal +++ b/graphics/pokemon/machoke/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 88 72 +82 57 0 16 16 16 -216 184 168 -160 144 128 -112 120 152 -152 160 200 -56 64 104 -176 184 224 -192 56 80 +238 230 139 +205 189 98 +139 115 180 +189 156 230 +106 49 131 +205 189 230 +197 0 0 248 248 248 -216 120 136 +156 57 123 240 224 120 72 72 96 200 176 96 -128 112 40 +131 115 41 diff --git a/graphics/pokemon/machop/anim_front.png b/graphics/pokemon/machop/anim_front.png index 04f4710f1396..ed54423a33e8 100644 Binary files a/graphics/pokemon/machop/anim_front.png and b/graphics/pokemon/machop/anim_front.png differ diff --git a/graphics/pokemon/machop/front.png b/graphics/pokemon/machop/front.png index 5622c5cda42c..867cb8c3fc40 100644 Binary files a/graphics/pokemon/machop/front.png and b/graphics/pokemon/machop/front.png differ diff --git a/graphics/pokemon/machop/normal.pal b/graphics/pokemon/machop/normal.pal index 7b6e3f252551..7274f6250ef6 100644 --- a/graphics/pokemon/machop/normal.pal +++ b/graphics/pokemon/machop/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 96 80 -224 200 192 -160 144 128 -200 176 160 -16 16 16 -144 192 208 -80 120 120 -192 216 224 -40 64 72 -248 248 248 -248 128 136 -152 56 56 -112 152 168 -200 112 144 -216 152 192 +107 82 33 +239 230 140 +173 156 90 +206 189 99 +0 0 0 +148 189 189 +90 123 107 +173 214 197 +41 74 82 +255 255 255 +239 82 82 +181 0 0 +115 165 165 +240 80 80 +255 132 140 diff --git a/graphics/pokemon/magby/anim_front.png b/graphics/pokemon/magby/anim_front.png index 46f2849b780f..19c543b8b52b 100644 Binary files a/graphics/pokemon/magby/anim_front.png and b/graphics/pokemon/magby/anim_front.png differ diff --git a/graphics/pokemon/magby/front.png b/graphics/pokemon/magby/front.png index edfea5d28e67..389af0d033c0 100644 Binary files a/graphics/pokemon/magby/front.png and b/graphics/pokemon/magby/front.png differ diff --git a/graphics/pokemon/magby/normal.pal b/graphics/pokemon/magby/normal.pal index dc9714179dec..2fe14eed8c28 100644 --- a/graphics/pokemon/magby/normal.pal +++ b/graphics/pokemon/magby/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -192 80 80 -128 56 64 -232 120 120 +216 56 56 +144 48 32 +240 104 104 16 16 16 192 192 192 248 248 248 -112 104 96 +112 112 120 248 248 176 -184 168 80 -240 224 120 -120 104 40 +224 184 48 +248 232 72 +152 112 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/magcargo/anim_front.png b/graphics/pokemon/magcargo/anim_front.png index ea7eb07a51d6..5d7450fabb5d 100644 Binary files a/graphics/pokemon/magcargo/anim_front.png and b/graphics/pokemon/magcargo/anim_front.png differ diff --git a/graphics/pokemon/magcargo/front.png b/graphics/pokemon/magcargo/front.png index ba4a5b0f18ee..dda50c3f80f2 100644 Binary files a/graphics/pokemon/magcargo/front.png and b/graphics/pokemon/magcargo/front.png differ diff --git a/graphics/pokemon/magcargo/normal.pal b/graphics/pokemon/magcargo/normal.pal index 077ffed5b6a3..a5b18324046a 100644 --- a/graphics/pokemon/magcargo/normal.pal +++ b/graphics/pokemon/magcargo/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 56 56 -232 72 72 -200 184 88 -248 232 152 -112 24 16 -88 96 136 -48 56 80 +184 48 40 +232 64 64 +232 184 8 +248 232 120 +144 32 0 +96 104 144 +56 64 88 16 16 16 -112 136 176 -144 112 40 -168 184 216 -168 104 56 -248 144 120 -240 104 24 -144 56 32 +120 136 176 +200 104 40 +168 176 200 +160 104 88 +248 128 112 +248 128 112 +144 32 0 diff --git a/graphics/pokemon/magikarp/anim_front.png b/graphics/pokemon/magikarp/anim_front.png index e137bed53dae..6b7d130f6b04 100644 Binary files a/graphics/pokemon/magikarp/anim_front.png and b/graphics/pokemon/magikarp/anim_front.png differ diff --git a/graphics/pokemon/magikarp/front.png b/graphics/pokemon/magikarp/front.png index ecbf65c5b78f..198730e7e0fb 100644 Binary files a/graphics/pokemon/magikarp/front.png and b/graphics/pokemon/magikarp/front.png differ diff --git a/graphics/pokemon/magikarp/normal.pal b/graphics/pokemon/magikarp/normal.pal index 67f48c918568..b96d5fa4fdf1 100644 --- a/graphics/pokemon/magikarp/normal.pal +++ b/graphics/pokemon/magikarp/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 88 56 -248 184 96 -184 64 48 -232 96 72 +123 98 82 +248 216 40 +189 57 57 +240 96 24 248 248 248 -96 80 80 -160 144 144 -128 24 8 -248 144 120 -16 16 16 -208 200 200 -192 128 128 -248 176 176 -136 80 88 -208 144 72 +82 82 98 +139 139 164 +131 0 65 +248 152 96 +0 0 0 +200 200 208 +255 156 98 +255 230 197 +184 56 56 +192 168 112 diff --git a/graphics/pokemon/magmar/anim_front.png b/graphics/pokemon/magmar/anim_front.png index f50d29b1ff9e..a57d2c848c12 100644 Binary files a/graphics/pokemon/magmar/anim_front.png and b/graphics/pokemon/magmar/anim_front.png differ diff --git a/graphics/pokemon/magmar/front.png b/graphics/pokemon/magmar/front.png index 4b9790260b33..85c08d04fdbc 100644 Binary files a/graphics/pokemon/magmar/front.png and b/graphics/pokemon/magmar/front.png differ diff --git a/graphics/pokemon/magmar/normal.pal b/graphics/pokemon/magmar/normal.pal index af613221e8f5..82ab177c4883 100644 --- a/graphics/pokemon/magmar/normal.pal +++ b/graphics/pokemon/magmar/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 128 72 -120 80 48 -248 208 104 -200 160 80 -248 232 160 -232 88 40 +197 123 16 +123 82 49 +255 238 74 +230 189 49 +255 246 205 +255 74 49 16 16 16 -80 40 24 -168 72 40 -248 160 64 -64 72 88 +106 32 32 +205 16 65 +255 139 98 +98 98 98 248 248 248 -248 192 152 -192 192 192 -200 152 120 +255 205 189 +197 197 197 +255 139 98 diff --git a/graphics/pokemon/magmortar/anim_front.png b/graphics/pokemon/magmortar/anim_front.png index d49fea810401..3f0531e117f2 100644 Binary files a/graphics/pokemon/magmortar/anim_front.png and b/graphics/pokemon/magmortar/anim_front.png differ diff --git a/graphics/pokemon/magmortar/front.png b/graphics/pokemon/magmortar/front.png index c367b03c66fc..38f46e85e5c6 100644 Binary files a/graphics/pokemon/magmortar/front.png and b/graphics/pokemon/magmortar/front.png differ diff --git a/graphics/pokemon/magmortar/normal.pal b/graphics/pokemon/magmortar/normal.pal index ad68218836ab..3008ddcb6423 100644 --- a/graphics/pokemon/magmortar/normal.pal +++ b/graphics/pokemon/magmortar/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 96 40 -248 192 80 -208 152 48 -192 64 40 -152 64 40 -232 112 80 -88 32 16 -216 80 48 +128 96 32 +248 192 56 +200 160 56 +208 48 48 +168 56 80 +240 96 48 +104 48 40 +224 64 48 16 16 16 -248 144 136 -72 64 64 -200 96 88 -216 200 192 -248 248 248 +248 144 160 +72 72 64 +192 88 104 200 208 224 +248 248 248 +0 0 0 diff --git a/graphics/pokemon/magnemite/anim_front.png b/graphics/pokemon/magnemite/anim_front.png index ff31f3a2e876..cca53cadd956 100644 Binary files a/graphics/pokemon/magnemite/anim_front.png and b/graphics/pokemon/magnemite/anim_front.png differ diff --git a/graphics/pokemon/magnemite/front.png b/graphics/pokemon/magnemite/front.png index 2a262e550bcb..b1e7dad9f0eb 100644 Binary files a/graphics/pokemon/magnemite/front.png and b/graphics/pokemon/magnemite/front.png differ diff --git a/graphics/pokemon/magnemite/normal.pal b/graphics/pokemon/magnemite/normal.pal index b0e534a53fe3..50084032ff45 100644 --- a/graphics/pokemon/magnemite/normal.pal +++ b/graphics/pokemon/magnemite/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 136 136 -255 255 255 -208 208 208 -80 72 72 +139 139 139 +222 255 230 +213 213 213 +82 74 74 16 16 16 -56 48 48 -232 96 80 -136 40 32 -128 168 184 -192 224 232 -64 96 112 -96 184 208 -32 112 152 +57 49 49 +255 139 74 +238 24 0 +139 180 164 +180 213 189 +90 131 98 +82 205 246 +41 131 172 168 168 168 -220 244 244 +255 255 255 diff --git a/graphics/pokemon/magneton/anim_front.png b/graphics/pokemon/magneton/anim_front.png index fcae6a5b082b..f54516b9585f 100644 Binary files a/graphics/pokemon/magneton/anim_front.png and b/graphics/pokemon/magneton/anim_front.png differ diff --git a/graphics/pokemon/magneton/front.png b/graphics/pokemon/magneton/front.png index 26a1f7f98222..89642398acc8 100644 Binary files a/graphics/pokemon/magneton/front.png and b/graphics/pokemon/magneton/front.png differ diff --git a/graphics/pokemon/magneton/normal.pal b/graphics/pokemon/magneton/normal.pal index 81567fb716a5..55f2f9d992a7 100644 --- a/graphics/pokemon/magneton/normal.pal +++ b/graphics/pokemon/magneton/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 72 72 -56 48 48 -232 96 80 +82 74 74 +57 49 49 +255 139 74 16 16 16 -136 40 32 -136 136 136 -96 184 208 -232 248 248 -32 112 152 +238 24 0 +139 139 139 +82 205 246 +213 213 213 +41 131 172 208 208 208 -64 96 112 -184 208 224 -112 160 176 +74 98 74 +180 213 189 +131 156 156 248 248 248 168 168 168 diff --git a/graphics/pokemon/magnezone/anim_front.png b/graphics/pokemon/magnezone/anim_front.png index 5025b27a916f..c9230b368653 100644 Binary files a/graphics/pokemon/magnezone/anim_front.png and b/graphics/pokemon/magnezone/anim_front.png differ diff --git a/graphics/pokemon/magnezone/front.png b/graphics/pokemon/magnezone/front.png index a39214b39da8..1a2b3ff38079 100644 Binary files a/graphics/pokemon/magnezone/front.png and b/graphics/pokemon/magnezone/front.png differ diff --git a/graphics/pokemon/magnezone/normal.pal b/graphics/pokemon/magnezone/normal.pal index 7c2a64fd5edf..f908270175c3 100644 --- a/graphics/pokemon/magnezone/normal.pal +++ b/graphics/pokemon/magnezone/normal.pal @@ -14,6 +14,6 @@ JASC-PAL 128 160 176 208 232 232 72 104 136 -248 120 112 -208 64 64 -72 184 224 +248 64 64 +192 32 32 +80 200 240 diff --git a/graphics/pokemon/makuhita/anim_front.png b/graphics/pokemon/makuhita/anim_front.png index 67ab86958936..aca8179e6966 100644 Binary files a/graphics/pokemon/makuhita/anim_front.png and b/graphics/pokemon/makuhita/anim_front.png differ diff --git a/graphics/pokemon/makuhita/front.png b/graphics/pokemon/makuhita/front.png index bba80cbf8e5a..438ac8283e94 100644 Binary files a/graphics/pokemon/makuhita/front.png and b/graphics/pokemon/makuhita/front.png differ diff --git a/graphics/pokemon/makuhita/normal.pal b/graphics/pokemon/makuhita/normal.pal index 3247e3e1aa4a..a12e77f50690 100644 --- a/graphics/pokemon/makuhita/normal.pal +++ b/graphics/pokemon/makuhita/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 96 48 -248 216 120 +120 88 56 +248 216 104 16 16 16 -208 176 104 -248 232 168 +216 176 96 +248 232 136 232 192 112 -152 128 72 -224 136 136 -192 104 104 +160 128 64 +216 104 136 +192 72 120 152 80 64 -112 120 128 -72 72 88 -40 48 56 +120 120 120 +80 80 80 +56 64 64 0 0 0 0 0 0 diff --git a/graphics/pokemon/mamoswine/anim_front.png b/graphics/pokemon/mamoswine/anim_front.png index efbfbfd7ad8b..dd42d13b6895 100644 Binary files a/graphics/pokemon/mamoswine/anim_front.png and b/graphics/pokemon/mamoswine/anim_front.png differ diff --git a/graphics/pokemon/mamoswine/front.png b/graphics/pokemon/mamoswine/front.png index 95cf6118e503..2b7945603019 100644 Binary files a/graphics/pokemon/mamoswine/front.png and b/graphics/pokemon/mamoswine/front.png differ diff --git a/graphics/pokemon/mamoswine/normal.pal b/graphics/pokemon/mamoswine/normal.pal index b6f1be665e3f..edd63691f2c6 100644 --- a/graphics/pokemon/mamoswine/normal.pal +++ b/graphics/pokemon/mamoswine/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 72 48 -168 120 72 -64 48 24 -240 232 232 -48 40 40 -48 112 120 -152 136 136 -208 192 184 -80 176 184 +112 72 64 +152 104 72 +64 48 48 +248 248 248 +56 48 48 +64 88 136 +136 136 144 +184 184 192 +80 144 192 8 16 8 96 80 80 -240 208 160 -224 160 168 -160 112 112 -200 160 120 +224 216 168 +224 144 184 +160 96 120 +176 160 128 diff --git a/graphics/pokemon/manaphy/anim_front.png b/graphics/pokemon/manaphy/anim_front.png index 91d1cf799a83..b9934eee73ba 100644 Binary files a/graphics/pokemon/manaphy/anim_front.png and b/graphics/pokemon/manaphy/anim_front.png differ diff --git a/graphics/pokemon/manaphy/front.png b/graphics/pokemon/manaphy/front.png index 141d5ac17756..ed6a5e4b27e9 100644 Binary files a/graphics/pokemon/manaphy/front.png and b/graphics/pokemon/manaphy/front.png differ diff --git a/graphics/pokemon/manaphy/normal.pal b/graphics/pokemon/manaphy/normal.pal index d10258796965..ff28c82cc217 100644 --- a/graphics/pokemon/manaphy/normal.pal +++ b/graphics/pokemon/manaphy/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 160 184 -96 200 224 -56 120 136 +24 152 208 +104 192 240 +48 120 168 16 16 16 -176 224 232 -32 88 112 -248 248 232 -248 216 144 -216 176 72 +152 224 248 +40 72 128 +200 232 248 +248 216 80 +224 168 80 248 248 248 -160 32 32 -232 128 136 -208 64 64 -160 32 32 +168 56 40 +216 128 152 +224 64 16 +0 0 0 0 0 0 diff --git a/graphics/pokemon/mandibuzz/anim_front.png b/graphics/pokemon/mandibuzz/anim_front.png index 738ed41162d1..701457ff3b9e 100644 Binary files a/graphics/pokemon/mandibuzz/anim_front.png and b/graphics/pokemon/mandibuzz/anim_front.png differ diff --git a/graphics/pokemon/mandibuzz/front.png b/graphics/pokemon/mandibuzz/front.png index 257bcfc57746..acd99e1e3042 100644 Binary files a/graphics/pokemon/mandibuzz/front.png and b/graphics/pokemon/mandibuzz/front.png differ diff --git a/graphics/pokemon/mandibuzz/normal.pal b/graphics/pokemon/mandibuzz/normal.pal index dc3d6922c976..4afa2c7f4ee9 100644 --- a/graphics/pokemon/mandibuzz/normal.pal +++ b/graphics/pokemon/mandibuzz/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -96 80 72 +96 72 64 88 80 56 -232 208 168 -168 152 120 -104 56 64 -208 120 136 -152 88 88 +232 232 192 +176 160 128 +128 48 64 +224 128 144 +176 80 96 248 248 248 -216 88 80 -144 128 120 -64 48 48 -144 112 88 -192 160 128 -96 80 72 +208 56 32 +120 120 112 +72 48 48 +144 120 96 +192 168 128 +80 80 80 diff --git a/graphics/pokemon/manectric/anim_front.png b/graphics/pokemon/manectric/anim_front.png index 7938ff8d6cbc..ce1293dad8c8 100644 Binary files a/graphics/pokemon/manectric/anim_front.png and b/graphics/pokemon/manectric/anim_front.png differ diff --git a/graphics/pokemon/manectric/front.png b/graphics/pokemon/manectric/front.png index e90b2e206120..c82e63447c20 100644 Binary files a/graphics/pokemon/manectric/front.png and b/graphics/pokemon/manectric/front.png differ diff --git a/graphics/pokemon/manectric/normal.pal b/graphics/pokemon/manectric/normal.pal index d17ab5520e2e..85745430c8fa 100644 --- a/graphics/pokemon/manectric/normal.pal +++ b/graphics/pokemon/manectric/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -104 96 64 -232 216 128 -176 160 104 -136 128 80 -56 80 88 -120 176 208 -56 128 160 -104 152 176 -176 64 64 +112 96 80 +248 232 96 +192 168 88 +160 120 88 +72 80 88 +112 176 208 +88 128 168 +96 152 192 +200 32 32 248 248 248 -224 120 112 -152 200 232 +248 112 112 +144 200 216 184 184 224 0 0 0 diff --git a/graphics/pokemon/mankey/anim_front.png b/graphics/pokemon/mankey/anim_front.png index cf48e19ad048..453750f97fcb 100644 Binary files a/graphics/pokemon/mankey/anim_front.png and b/graphics/pokemon/mankey/anim_front.png differ diff --git a/graphics/pokemon/mankey/front.png b/graphics/pokemon/mankey/front.png index 3cfb62fb3ef5..576a813eb7e2 100644 Binary files a/graphics/pokemon/mankey/front.png and b/graphics/pokemon/mankey/front.png differ diff --git a/graphics/pokemon/mankey/normal.pal b/graphics/pokemon/mankey/normal.pal index a4b348bb5534..b0b0e0fbf553 100644 --- a/graphics/pokemon/mankey/normal.pal +++ b/graphics/pokemon/mankey/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 72 48 -200 152 128 +115 65 0 +222 164 115 16 16 16 -168 120 104 -248 216 192 -208 176 152 +197 115 74 +246 222 180 +213 172 156 248 248 248 248 120 104 -192 120 144 -200 88 64 -240 168 192 -240 216 224 +180 65 49 +238 115 98 +238 115 98 +238 180 139 248 192 168 248 232 224 104 72 48 diff --git a/graphics/pokemon/mantine/anim_front.png b/graphics/pokemon/mantine/anim_front.png index 44c24dafe7c2..603f1e029534 100644 Binary files a/graphics/pokemon/mantine/anim_front.png and b/graphics/pokemon/mantine/anim_front.png differ diff --git a/graphics/pokemon/mantine/front.png b/graphics/pokemon/mantine/front.png index bd793e2bdc28..ed3bd56b13f3 100644 Binary files a/graphics/pokemon/mantine/front.png and b/graphics/pokemon/mantine/front.png differ diff --git a/graphics/pokemon/mantine/normal.pal b/graphics/pokemon/mantine/normal.pal index 6d8c28ad5917..c4b95fecfbcc 100644 --- a/graphics/pokemon/mantine/normal.pal +++ b/graphics/pokemon/mantine/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -40 48 88 -56 88 128 -48 64 88 -232 200 232 -176 144 168 -104 136 168 -104 80 96 -200 160 192 +48 56 88 +72 96 128 +64 64 96 +208 200 200 +168 152 168 +104 144 152 +80 88 104 +192 176 184 248 248 248 104 88 136 -96 104 136 -184 192 208 136 144 176 +168 176 200 +0 0 0 0 0 0 diff --git a/graphics/pokemon/mantyke/anim_front.png b/graphics/pokemon/mantyke/anim_front.png index 37bfbc8167fa..9a3162211107 100644 Binary files a/graphics/pokemon/mantyke/anim_front.png and b/graphics/pokemon/mantyke/anim_front.png differ diff --git a/graphics/pokemon/mantyke/front.png b/graphics/pokemon/mantyke/front.png index bd781d22b951..b06a66d0a4cf 100644 Binary files a/graphics/pokemon/mantyke/front.png and b/graphics/pokemon/mantyke/front.png differ diff --git a/graphics/pokemon/mantyke/normal.pal b/graphics/pokemon/mantyke/normal.pal index eb3114cf4777..6b91b55cc34e 100644 --- a/graphics/pokemon/mantyke/normal.pal +++ b/graphics/pokemon/mantyke/normal.pal @@ -13,7 +13,7 @@ JASC-PAL 72 96 112 128 176 192 96 144 160 -120 72 80 -208 136 144 +168 56 80 +224 104 120 8 48 80 208 216 224 diff --git a/graphics/pokemon/maractus/anim_front.png b/graphics/pokemon/maractus/anim_front.png index a6feea12cb7a..da44901b8be5 100644 Binary files a/graphics/pokemon/maractus/anim_front.png and b/graphics/pokemon/maractus/anim_front.png differ diff --git a/graphics/pokemon/maractus/front.png b/graphics/pokemon/maractus/front.png index 4eb69ffbedb9..3ba7400be962 100644 Binary files a/graphics/pokemon/maractus/front.png and b/graphics/pokemon/maractus/front.png differ diff --git a/graphics/pokemon/maractus/normal.pal b/graphics/pokemon/maractus/normal.pal index b72b1e6728c6..7beb50c616f8 100644 --- a/graphics/pokemon/maractus/normal.pal +++ b/graphics/pokemon/maractus/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 120 224 248 -152 56 104 -224 112 176 -32 64 32 -112 104 32 -248 208 48 -128 208 104 -88 144 72 +176 48 112 +224 104 160 +32 72 32 +128 112 16 +248 208 0 +88 208 104 +64 152 72 16 16 16 -40 120 120 -40 88 80 -16 48 40 -168 136 40 -208 80 160 +16 136 112 +24 96 80 +8 56 48 +176 152 16 +200 72 136 0 0 0 0 0 0 diff --git a/graphics/pokemon/mareep/anim_front.png b/graphics/pokemon/mareep/anim_front.png index d6800dcc6cc9..5c67de509447 100644 Binary files a/graphics/pokemon/mareep/anim_front.png and b/graphics/pokemon/mareep/anim_front.png differ diff --git a/graphics/pokemon/mareep/front.png b/graphics/pokemon/mareep/front.png index 5cc3b22668b4..703f09066289 100644 Binary files a/graphics/pokemon/mareep/front.png and b/graphics/pokemon/mareep/front.png differ diff --git a/graphics/pokemon/mareep/normal.pal b/graphics/pokemon/mareep/normal.pal index dabbcd7b0dbb..eaefbe9350d8 100644 --- a/graphics/pokemon/mareep/normal.pal +++ b/graphics/pokemon/mareep/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 112 48 -192 168 120 +224 168 0 +200 176 136 248 248 248 -248 136 48 -128 104 64 +248 216 0 +128 112 80 16 16 16 -248 232 176 -224 200 144 +248 224 184 +224 200 160 56 64 64 -200 152 40 -248 208 80 +224 168 16 +248 216 8 136 144 144 -24 72 120 -56 112 160 -88 152 208 +0 72 144 +80 128 184 +112 160 240 diff --git a/graphics/pokemon/marill/anim_front.png b/graphics/pokemon/marill/anim_front.png index d76e7ef7f485..e9815f489490 100644 Binary files a/graphics/pokemon/marill/anim_front.png and b/graphics/pokemon/marill/anim_front.png differ diff --git a/graphics/pokemon/marill/front.png b/graphics/pokemon/marill/front.png index 9e4a7d85202a..d56a82fc4d0a 100644 Binary files a/graphics/pokemon/marill/front.png and b/graphics/pokemon/marill/front.png differ diff --git a/graphics/pokemon/marill/normal.pal b/graphics/pokemon/marill/normal.pal index e2e596fbb436..cf71923a68ef 100644 --- a/graphics/pokemon/marill/normal.pal +++ b/graphics/pokemon/marill/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 136 184 -48 176 232 -128 216 248 -16 72 88 -32 160 184 -120 40 24 -168 56 32 -224 72 48 +40 152 240 +112 200 248 +168 232 248 +48 80 184 +72 168 240 +144 24 0 +216 72 0 +240 128 0 16 16 16 248 248 248 -192 224 232 +224 224 232 56 64 64 -176 184 192 +200 200 216 0 0 0 0 0 0 diff --git a/graphics/pokemon/marowak/anim_front.png b/graphics/pokemon/marowak/anim_front.png index b8e5db85f0b8..f1a22033ed46 100644 Binary files a/graphics/pokemon/marowak/anim_front.png and b/graphics/pokemon/marowak/anim_front.png differ diff --git a/graphics/pokemon/marowak/front.png b/graphics/pokemon/marowak/front.png index 2bbd3fd91a52..8d9488612deb 100644 Binary files a/graphics/pokemon/marowak/front.png and b/graphics/pokemon/marowak/front.png differ diff --git a/graphics/pokemon/marowak/normal.pal b/graphics/pokemon/marowak/normal.pal index 5244888c47e1..6aa7063f2079 100644 --- a/graphics/pokemon/marowak/normal.pal +++ b/graphics/pokemon/marowak/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 128 152 +139 139 106 248 248 248 16 16 16 -192 192 200 -80 80 96 +197 197 205 +82 74 57 224 224 232 -88 64 32 -192 144 88 -144 112 72 +90 65 16 +197 156 74 +148 106 82 224 176 120 176 144 136 120 88 80 -176 160 128 -128 112 88 -224 200 160 +230 148 82 +189 115 57 +246 197 148 diff --git a/graphics/pokemon/marshtomp/anim_front.png b/graphics/pokemon/marshtomp/anim_front.png index e22036ac3391..384e5aa3e27c 100644 Binary files a/graphics/pokemon/marshtomp/anim_front.png and b/graphics/pokemon/marshtomp/anim_front.png differ diff --git a/graphics/pokemon/marshtomp/front.png b/graphics/pokemon/marshtomp/front.png index 34e4339764ca..ead3658eda44 100644 Binary files a/graphics/pokemon/marshtomp/front.png and b/graphics/pokemon/marshtomp/front.png differ diff --git a/graphics/pokemon/marshtomp/normal.pal b/graphics/pokemon/marshtomp/normal.pal index bc1510d06c7e..fe172506c6fb 100644 --- a/graphics/pokemon/marshtomp/normal.pal +++ b/graphics/pokemon/marshtomp/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -168 224 24 -64 88 112 +248 192 248 +80 80 104 16 16 16 -96 128 152 -64 144 152 -88 168 176 -128 192 200 -176 216 224 -32 88 88 -224 112 56 -192 232 232 -232 144 112 -144 80 40 -144 192 192 -158 104 125 -221 153 181 +128 128 152 +32 144 144 +72 168 168 +144 216 216 +176 240 240 +8 88 88 +232 104 8 +176 208 240 +240 136 48 +144 64 16 +168 176 208 +136 48 80 +192 96 120 diff --git a/graphics/pokemon/masquerain/anim_front.png b/graphics/pokemon/masquerain/anim_front.png index 3099b73617e5..7508ae76d6c9 100644 Binary files a/graphics/pokemon/masquerain/anim_front.png and b/graphics/pokemon/masquerain/anim_front.png differ diff --git a/graphics/pokemon/masquerain/front.png b/graphics/pokemon/masquerain/front.png index f670562c331c..853e08a17202 100644 Binary files a/graphics/pokemon/masquerain/front.png and b/graphics/pokemon/masquerain/front.png differ diff --git a/graphics/pokemon/masquerain/normal.pal b/graphics/pokemon/masquerain/normal.pal index 220d0eac4cb9..bd8d9c4c7cd9 100644 --- a/graphics/pokemon/masquerain/normal.pal +++ b/graphics/pokemon/masquerain/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 80 48 -208 112 72 -16 16 16 -248 144 104 -208 224 248 +152 72 32 +224 104 40 +0 0 0 +248 144 96 +216 216 224 248 248 240 -56 96 128 -176 88 112 +32 88 112 +176 72 128 232 240 248 -136 48 72 -136 168 200 -176 208 224 -208 112 72 -248 144 104 -0 0 0 +136 32 72 +136 160 200 +192 200 224 +16 16 16 +224 104 40 +248 144 96 diff --git a/graphics/pokemon/mawile/anim_front.png b/graphics/pokemon/mawile/anim_front.png index 0f19d84fbc90..b19c8fceb34e 100644 Binary files a/graphics/pokemon/mawile/anim_front.png and b/graphics/pokemon/mawile/anim_front.png differ diff --git a/graphics/pokemon/mawile/front.png b/graphics/pokemon/mawile/front.png index 23d1d990b4c1..9f8bddbfd539 100644 Binary files a/graphics/pokemon/mawile/front.png and b/graphics/pokemon/mawile/front.png differ diff --git a/graphics/pokemon/mawile/normal.pal b/graphics/pokemon/mawile/normal.pal index 4c8430642b03..40493d6be335 100644 --- a/graphics/pokemon/mawile/normal.pal +++ b/graphics/pokemon/mawile/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -112 112 112 +112 112 120 80 72 72 168 160 160 88 88 88 248 224 160 -240 216 144 -208 168 104 -136 104 56 +240 208 136 +216 160 72 +120 88 40 200 200 200 160 40 64 -144 80 104 +152 72 104 248 104 112 248 248 248 0 0 0 diff --git a/graphics/pokemon/medicham/anim_front.png b/graphics/pokemon/medicham/anim_front.png index 61baf93a4995..ca6c359703de 100644 Binary files a/graphics/pokemon/medicham/anim_front.png and b/graphics/pokemon/medicham/anim_front.png differ diff --git a/graphics/pokemon/medicham/front.png b/graphics/pokemon/medicham/front.png index 39ea40adf4c8..63734b124bd3 100644 Binary files a/graphics/pokemon/medicham/front.png and b/graphics/pokemon/medicham/front.png differ diff --git a/graphics/pokemon/medicham/normal.pal b/graphics/pokemon/medicham/normal.pal index f6cbfc550699..64be81c67ad7 100644 --- a/graphics/pokemon/medicham/normal.pal +++ b/graphics/pokemon/medicham/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 40 64 +131 65 74 16 16 16 -200 88 112 -224 104 128 -232 136 160 -80 72 72 -224 232 232 -136 128 136 -176 160 160 -208 200 200 -248 224 176 -248 200 104 -184 64 104 -248 248 248 -168 128 72 +205 90 115 +230 115 139 +238 156 164 +82 65 74 +222 222 222 +139 131 139 +172 164 172 +197 197 197 +246 222 131 +238 189 90 +180 74 90 +255 255 255 +164 115 41 diff --git a/graphics/pokemon/meditite/anim_front.png b/graphics/pokemon/meditite/anim_front.png index 07af59579b2d..2059f18cb3fd 100644 Binary files a/graphics/pokemon/meditite/anim_front.png and b/graphics/pokemon/meditite/anim_front.png differ diff --git a/graphics/pokemon/meditite/front.png b/graphics/pokemon/meditite/front.png index 1704dbf66dcc..c1c0dcd06fb1 100644 Binary files a/graphics/pokemon/meditite/front.png and b/graphics/pokemon/meditite/front.png differ diff --git a/graphics/pokemon/meditite/normal.pal b/graphics/pokemon/meditite/normal.pal index e06e2ec86628..d31714ed43e0 100644 --- a/graphics/pokemon/meditite/normal.pal +++ b/graphics/pokemon/meditite/normal.pal @@ -13,7 +13,7 @@ JASC-PAL 120 208 240 32 136 176 88 176 216 -216 96 104 -152 64 104 -208 144 176 +208 80 80 +128 64 72 +208 80 112 0 0 0 diff --git a/graphics/pokemon/meganium/anim_front.png b/graphics/pokemon/meganium/anim_front.png index fe346e4e4aac..6352e96e29e1 100644 Binary files a/graphics/pokemon/meganium/anim_front.png and b/graphics/pokemon/meganium/anim_front.png differ diff --git a/graphics/pokemon/meganium/front.png b/graphics/pokemon/meganium/front.png index f251fa5f0ab5..2a813e11888c 100644 Binary files a/graphics/pokemon/meganium/front.png and b/graphics/pokemon/meganium/front.png differ diff --git a/graphics/pokemon/meganium/normal.pal b/graphics/pokemon/meganium/normal.pal index 74ae02e570b2..d594136b80c5 100644 --- a/graphics/pokemon/meganium/normal.pal +++ b/graphics/pokemon/meganium/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -0 176 232 -248 216 88 -80 64 32 -192 160 72 -144 168 88 -80 96 32 -208 240 144 -168 216 112 +248 192 248 +248 216 32 +96 72 0 +224 168 0 +152 168 80 +80 104 24 +208 232 136 +184 208 104 16 16 16 248 248 248 -168 56 72 -96 32 56 -248 160 168 -224 88 112 +248 56 88 +120 16 56 +240 160 152 +200 32 56 200 200 200 104 104 104 diff --git a/graphics/pokemon/meloetta/anim_front.png b/graphics/pokemon/meloetta/anim_front.png index cb47885f2743..59587eedba70 100644 Binary files a/graphics/pokemon/meloetta/anim_front.png and b/graphics/pokemon/meloetta/anim_front.png differ diff --git a/graphics/pokemon/meloetta/front.png b/graphics/pokemon/meloetta/front.png index 8aa81c4eb1e1..fad54a0b0bd8 100644 Binary files a/graphics/pokemon/meloetta/front.png and b/graphics/pokemon/meloetta/front.png differ diff --git a/graphics/pokemon/meloetta/normal.pal b/graphics/pokemon/meloetta/normal.pal index 64a721011de4..8904e42dc94a 100644 --- a/graphics/pokemon/meloetta/normal.pal +++ b/graphics/pokemon/meloetta/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 48 64 -144 120 128 +64 56 48 +128 128 128 16 16 16 -96 80 96 -104 120 72 -168 184 128 -232 224 184 -40 112 120 -232 240 248 -160 168 192 -88 168 176 -112 128 160 -248 248 248 -232 136 144 -160 96 112 +96 96 96 +72 112 48 +120 176 88 +200 240 152 +64 136 120 +248 248 240 +192 192 192 +48 192 160 +144 144 144 +216 120 136 +176 80 96 +88 80 80 diff --git a/graphics/pokemon/meloetta/pirouette/front.png b/graphics/pokemon/meloetta/pirouette/front.png index aeeed60d3759..a3b532860bd6 100644 Binary files a/graphics/pokemon/meloetta/pirouette/front.png and b/graphics/pokemon/meloetta/pirouette/front.png differ diff --git a/graphics/pokemon/meloetta/pirouette/normal.pal b/graphics/pokemon/meloetta/pirouette/normal.pal index c04de22ebe2e..79b38fcd5f86 100644 --- a/graphics/pokemon/meloetta/pirouette/normal.pal +++ b/graphics/pokemon/meloetta/pirouette/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 64 72 +64 64 64 16 16 16 -144 120 120 -104 88 104 -168 80 64 -120 48 40 -232 120 80 +128 128 128 +96 96 96 +168 80 56 +112 64 56 +232 112 80 64 48 48 248 248 240 -168 176 208 -168 64 88 -240 152 136 -224 80 104 +192 192 192 +192 48 88 +248 128 168 +240 80 120 88 80 80 -112 96 104 +144 120 88 diff --git a/graphics/pokemon/meowth/anim_front.png b/graphics/pokemon/meowth/anim_front.png index 7452c00f771c..b6ebbfab9a3a 100644 Binary files a/graphics/pokemon/meowth/anim_front.png and b/graphics/pokemon/meowth/anim_front.png differ diff --git a/graphics/pokemon/meowth/back.png b/graphics/pokemon/meowth/back.png index b3153d495027..7c87e642fdb4 100644 Binary files a/graphics/pokemon/meowth/back.png and b/graphics/pokemon/meowth/back.png differ diff --git a/graphics/pokemon/meowth/front.png b/graphics/pokemon/meowth/front.png index 5f64308be8fe..2b450d3dc7cb 100644 Binary files a/graphics/pokemon/meowth/front.png and b/graphics/pokemon/meowth/front.png differ diff --git a/graphics/pokemon/meowth/normal.pal b/graphics/pokemon/meowth/normal.pal index aee303ee1d88..13334947014e 100644 --- a/graphics/pokemon/meowth/normal.pal +++ b/graphics/pokemon/meowth/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 104 56 -240 232 176 +152 104 0 +248 224 128 16 16 16 -112 72 40 +148 90 0 248 248 248 -248 216 144 -192 160 72 -184 128 64 -200 176 128 -224 224 224 -192 120 144 -216 160 104 -248 248 200 -112 72 40 +248 208 0 +200 160 0 +192 120 8 +216 184 56 +216 216 216 +255 115 82 +232 152 48 +148 65 0 +213 90 57 0 0 0 diff --git a/graphics/pokemon/meowth/shiny.pal b/graphics/pokemon/meowth/shiny.pal index 396e16873ce8..0aba58a22852 100644 --- a/graphics/pokemon/meowth/shiny.pal +++ b/graphics/pokemon/meowth/shiny.pal @@ -3,7 +3,7 @@ JASC-PAL 16 152 208 160 144 72 24 -248 216 144 +255 205 131 16 16 16 136 72 24 248 248 248 @@ -14,6 +14,6 @@ JASC-PAL 224 224 224 248 112 80 248 128 144 -248 232 176 -152 56 72 +172 41 57 +213 90 57 0 0 0 diff --git a/graphics/pokemon/mesprit/anim_front.png b/graphics/pokemon/mesprit/anim_front.png index 90fc9da6d6ad..bd48e34c8fb4 100644 Binary files a/graphics/pokemon/mesprit/anim_front.png and b/graphics/pokemon/mesprit/anim_front.png differ diff --git a/graphics/pokemon/mesprit/front.png b/graphics/pokemon/mesprit/front.png index 00f88ef29864..0ca08f734d97 100644 Binary files a/graphics/pokemon/mesprit/front.png and b/graphics/pokemon/mesprit/front.png differ diff --git a/graphics/pokemon/mesprit/normal.pal b/graphics/pokemon/mesprit/normal.pal index 5e261f0e6a51..b6d67710a70d 100644 --- a/graphics/pokemon/mesprit/normal.pal +++ b/graphics/pokemon/mesprit/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -104 56 80 -224 120 160 -248 160 184 -168 96 136 -224 104 96 +128 64 104 +232 112 168 +248 144 200 +176 80 128 +232 64 64 88 56 64 -88 120 144 +120 112 144 248 248 248 -168 208 240 -128 160 184 -176 48 48 -248 208 48 -176 144 24 -48 64 72 +176 200 240 +144 152 192 +168 64 64 +248 176 32 +168 136 64 +64 64 64 diff --git a/graphics/pokemon/metagross/anim_front.png b/graphics/pokemon/metagross/anim_front.png index 7f5e2f0f9715..c04a8b3e7de9 100644 Binary files a/graphics/pokemon/metagross/anim_front.png and b/graphics/pokemon/metagross/anim_front.png differ diff --git a/graphics/pokemon/metagross/front.png b/graphics/pokemon/metagross/front.png index 6d8b543dbb9a..43a762538075 100644 Binary files a/graphics/pokemon/metagross/front.png and b/graphics/pokemon/metagross/front.png differ diff --git a/graphics/pokemon/metagross/normal.pal b/graphics/pokemon/metagross/normal.pal index cf0c73a968bd..4ac88a6bd1a4 100644 --- a/graphics/pokemon/metagross/normal.pal +++ b/graphics/pokemon/metagross/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -40 64 88 +48 56 112 16 16 16 -152 200 216 -120 168 192 -80 136 160 -48 96 128 -192 192 192 -160 160 160 -104 96 104 -208 208 216 +128 208 240 +88 160 248 +72 128 216 +56 96 176 +208 208 208 +168 168 168 +112 104 112 +224 224 224 200 216 240 248 72 80 160 24 40 diff --git a/graphics/pokemon/metang/anim_front.png b/graphics/pokemon/metang/anim_front.png index 91f908d528c1..c70198db7bb9 100644 Binary files a/graphics/pokemon/metang/anim_front.png and b/graphics/pokemon/metang/anim_front.png differ diff --git a/graphics/pokemon/metang/front.png b/graphics/pokemon/metang/front.png index ded638dec5c0..da3998543111 100644 Binary files a/graphics/pokemon/metang/front.png and b/graphics/pokemon/metang/front.png differ diff --git a/graphics/pokemon/metang/normal.pal b/graphics/pokemon/metang/normal.pal index 398ac026c729..b4949b927416 100644 --- a/graphics/pokemon/metang/normal.pal +++ b/graphics/pokemon/metang/normal.pal @@ -6,14 +6,14 @@ JASC-PAL 192 192 200 16 16 16 248 248 248 -32 72 88 +48 56 112 144 152 160 -64 128 152 -136 184 208 -96 152 176 -48 104 128 -192 72 88 -112 48 64 -232 128 136 +72 128 216 +136 208 248 +96 160 248 +56 96 176 +216 72 80 +136 72 72 +248 104 104 200 200 200 0 0 0 diff --git a/graphics/pokemon/metapod/anim_front.png b/graphics/pokemon/metapod/anim_front.png index bb5ffc2b6af4..ae952f0b0370 100644 Binary files a/graphics/pokemon/metapod/anim_front.png and b/graphics/pokemon/metapod/anim_front.png differ diff --git a/graphics/pokemon/metapod/front.png b/graphics/pokemon/metapod/front.png index 049384e47495..cde83b1f0fca 100644 Binary files a/graphics/pokemon/metapod/front.png and b/graphics/pokemon/metapod/front.png differ diff --git a/graphics/pokemon/metapod/normal.pal b/graphics/pokemon/metapod/normal.pal index 017e3f94b38e..8bdd97c5e614 100644 --- a/graphics/pokemon/metapod/normal.pal +++ b/graphics/pokemon/metapod/normal.pal @@ -2,13 +2,13 @@ JASC-PAL 0100 16 152 208 160 -88 112 48 -200 224 168 -56 80 24 -152 208 80 -112 144 72 -16 16 16 -120 160 56 +72 104 80 +176 224 80 +56 80 56 +128 192 72 +104 136 88 +0 0 0 +104 160 72 248 248 248 0 0 0 0 0 0 diff --git a/graphics/pokemon/mew/anim_front.png b/graphics/pokemon/mew/anim_front.png index cb160cc42430..8ce4efeb2147 100644 Binary files a/graphics/pokemon/mew/anim_front.png and b/graphics/pokemon/mew/anim_front.png differ diff --git a/graphics/pokemon/mew/front.png b/graphics/pokemon/mew/front.png index cae789231c5a..9451dacfab1f 100644 Binary files a/graphics/pokemon/mew/front.png and b/graphics/pokemon/mew/front.png differ diff --git a/graphics/pokemon/mew/normal.pal b/graphics/pokemon/mew/normal.pal index 11c00326b037..872a4b8d862f 100644 --- a/graphics/pokemon/mew/normal.pal +++ b/graphics/pokemon/mew/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -160 104 120 -248 200 208 -208 144 152 -80 40 48 -240 168 184 +180 98 148 +255 213 238 +238 131 180 +106 49 90 +255 180 213 0 0 0 248 240 248 -104 144 184 -56 104 160 -48 64 96 +131 172 246 +41 98 230 +24 57 106 240 176 128 0 0 0 0 0 0 diff --git a/graphics/pokemon/mewtwo/anim_front.png b/graphics/pokemon/mewtwo/anim_front.png index 63a2ccf0732a..149ec23227fe 100644 Binary files a/graphics/pokemon/mewtwo/anim_front.png and b/graphics/pokemon/mewtwo/anim_front.png differ diff --git a/graphics/pokemon/mewtwo/front.png b/graphics/pokemon/mewtwo/front.png index 4f03a6ba837b..a725bdb4ab72 100644 Binary files a/graphics/pokemon/mewtwo/front.png and b/graphics/pokemon/mewtwo/front.png differ diff --git a/graphics/pokemon/mewtwo/normal.pal b/graphics/pokemon/mewtwo/normal.pal index 9e499ccb2737..c938e5394862 100644 --- a/graphics/pokemon/mewtwo/normal.pal +++ b/graphics/pokemon/mewtwo/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -144 120 160 -224 208 232 -64 48 80 -184 168 192 -8 8 8 -232 224 232 -120 80 112 -160 104 152 +131 123 156 +222 213 230 +57 57 82 +180 172 197 +0 0 0 +238 230 238 +106 49 156 +148 65 189 240 240 240 -184 120 184 -80 40 80 +180 74 238 +57 32 82 216 216 216 248 248 248 0 0 0 diff --git a/graphics/pokemon/mienfoo/anim_front.png b/graphics/pokemon/mienfoo/anim_front.png index 504a6a53a13e..9e772faa4147 100644 Binary files a/graphics/pokemon/mienfoo/anim_front.png and b/graphics/pokemon/mienfoo/anim_front.png differ diff --git a/graphics/pokemon/mienfoo/front.png b/graphics/pokemon/mienfoo/front.png index 9df2fe780407..51cc46adaf42 100644 Binary files a/graphics/pokemon/mienfoo/front.png and b/graphics/pokemon/mienfoo/front.png differ diff --git a/graphics/pokemon/mienfoo/normal.pal b/graphics/pokemon/mienfoo/normal.pal index 9a72c936f8ee..2f60aa6c6427 100644 --- a/graphics/pokemon/mienfoo/normal.pal +++ b/graphics/pokemon/mienfoo/normal.pal @@ -3,14 +3,14 @@ JASC-PAL 16 152 208 160 144 120 80 -248 232 160 -208 192 120 +240 240 136 +200 184 120 96 72 40 -176 160 88 +176 160 80 128 128 144 160 64 88 16 16 16 -224 96 120 +216 96 120 248 248 248 104 32 56 104 48 72 diff --git a/graphics/pokemon/mienshao/anim_front.png b/graphics/pokemon/mienshao/anim_front.png index 181f6570b5c2..598dad2d0505 100644 Binary files a/graphics/pokemon/mienshao/anim_front.png and b/graphics/pokemon/mienshao/anim_front.png differ diff --git a/graphics/pokemon/mienshao/front.png b/graphics/pokemon/mienshao/front.png index f7b7fa0b543e..6c1ca33a3714 100644 Binary files a/graphics/pokemon/mienshao/front.png and b/graphics/pokemon/mienshao/front.png differ diff --git a/graphics/pokemon/mienshao/normal.pal b/graphics/pokemon/mienshao/normal.pal index e7dc996ebd6a..68a6f4c096b8 100644 --- a/graphics/pokemon/mienshao/normal.pal +++ b/graphics/pokemon/mienshao/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 104 88 -216 152 88 -16 16 16 -112 96 88 -168 144 136 -224 208 200 -72 64 104 -128 104 144 -168 136 208 -136 0 40 -56 24 24 -248 208 160 +88 64 48 +200 136 80 +0 0 0 +112 80 96 +184 160 160 +232 216 216 +80 64 96 +128 96 168 +168 136 192 +160 32 32 +72 32 32 +248 168 96 248 248 248 -48 48 64 +64 64 64 0 0 0 diff --git a/graphics/pokemon/mightyena/anim_front.png b/graphics/pokemon/mightyena/anim_front.png index c24c2e6e4b9e..90f55dfdf7c6 100644 Binary files a/graphics/pokemon/mightyena/anim_front.png and b/graphics/pokemon/mightyena/anim_front.png differ diff --git a/graphics/pokemon/mightyena/front.png b/graphics/pokemon/mightyena/front.png index 930edfb6cbca..e7ddfbcf7775 100644 Binary files a/graphics/pokemon/mightyena/front.png and b/graphics/pokemon/mightyena/front.png differ diff --git a/graphics/pokemon/mightyena/normal.pal b/graphics/pokemon/mightyena/normal.pal index 1b7279b44468..d531b1ddec05 100644 --- a/graphics/pokemon/mightyena/normal.pal +++ b/graphics/pokemon/mightyena/normal.pal @@ -4,13 +4,13 @@ JASC-PAL 152 208 160 8 8 8 80 80 80 -144 144 144 -192 192 208 +144 144 152 +184 184 192 56 64 64 32 32 32 208 96 104 -240 232 120 -160 152 56 +240 240 88 +184 136 64 152 56 64 200 112 152 248 248 248 diff --git a/graphics/pokemon/milotic/anim_front.png b/graphics/pokemon/milotic/anim_front.png index 67f9c89d9ceb..ac2450522d9c 100644 Binary files a/graphics/pokemon/milotic/anim_front.png and b/graphics/pokemon/milotic/anim_front.png differ diff --git a/graphics/pokemon/milotic/back.png b/graphics/pokemon/milotic/back.png index 7a701f79dc64..74525da17889 100644 Binary files a/graphics/pokemon/milotic/back.png and b/graphics/pokemon/milotic/back.png differ diff --git a/graphics/pokemon/milotic/front.png b/graphics/pokemon/milotic/front.png index 9ece7373e5a7..08f338984f2b 100644 Binary files a/graphics/pokemon/milotic/front.png and b/graphics/pokemon/milotic/front.png differ diff --git a/graphics/pokemon/milotic/normal.pal b/graphics/pokemon/milotic/normal.pal index 46e53fc41c46..0fd44096c3bb 100644 --- a/graphics/pokemon/milotic/normal.pal +++ b/graphics/pokemon/milotic/normal.pal @@ -3,13 +3,13 @@ JASC-PAL 16 152 208 160 232 112 120 -56 48 56 +48 48 48 176 56 72 120 104 64 248 224 168 216 192 136 -24 120 160 -88 176 208 +8 120 160 +56 168 216 104 32 40 248 240 224 240 96 112 diff --git a/graphics/pokemon/miltank/anim_front.png b/graphics/pokemon/miltank/anim_front.png index e32aa2e0e98e..97eb281ed2cf 100644 Binary files a/graphics/pokemon/miltank/anim_front.png and b/graphics/pokemon/miltank/anim_front.png differ diff --git a/graphics/pokemon/miltank/front.png b/graphics/pokemon/miltank/front.png index 7a58f3c09875..4ac2687e133c 100644 Binary files a/graphics/pokemon/miltank/front.png and b/graphics/pokemon/miltank/front.png differ diff --git a/graphics/pokemon/miltank/normal.pal b/graphics/pokemon/miltank/normal.pal index 53d81ff573cf..3d87da5b9863 100644 --- a/graphics/pokemon/miltank/normal.pal +++ b/graphics/pokemon/miltank/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 +200 200 248 72 88 96 16 16 16 248 248 248 -160 168 144 +112 120 128 40 48 56 152 88 96 -240 152 168 -176 168 120 -184 120 128 +248 176 192 +200 176 96 +224 128 152 104 56 64 -32 104 176 -248 192 192 -240 224 152 +32 88 192 +248 192 208 +232 240 168 88 88 56 -200 184 128 +216 200 120 diff --git a/graphics/pokemon/mime_jr/anim_front.png b/graphics/pokemon/mime_jr/anim_front.png index cbc2640af37e..bd97d354db71 100644 Binary files a/graphics/pokemon/mime_jr/anim_front.png and b/graphics/pokemon/mime_jr/anim_front.png differ diff --git a/graphics/pokemon/mime_jr/front.png b/graphics/pokemon/mime_jr/front.png index 792bb0c50391..c3519f6c9f08 100644 Binary files a/graphics/pokemon/mime_jr/front.png and b/graphics/pokemon/mime_jr/front.png differ diff --git a/graphics/pokemon/mime_jr/normal.pal b/graphics/pokemon/mime_jr/normal.pal index ee536e5610e8..bd513b08b83a 100644 --- a/graphics/pokemon/mime_jr/normal.pal +++ b/graphics/pokemon/mime_jr/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 96 96 +104 96 104 248 248 248 -216 208 200 -176 160 152 +216 208 216 +184 168 184 +0 0 0 +16 48 72 +16 72 112 +64 112 160 +104 56 48 +248 200 200 +216 160 160 +192 96 96 +192 32 72 +232 88 56 0 0 0 -32 40 56 -64 80 96 -104 128 160 -96 64 72 -240 208 224 -208 160 176 -168 120 128 -168 64 48 -224 112 88 -144 80 88 diff --git a/graphics/pokemon/minccino/anim_front.png b/graphics/pokemon/minccino/anim_front.png index 3d99edfabce6..f2942a2cb329 100644 Binary files a/graphics/pokemon/minccino/anim_front.png and b/graphics/pokemon/minccino/anim_front.png differ diff --git a/graphics/pokemon/minccino/front.png b/graphics/pokemon/minccino/front.png index ee86c993c665..a9b05cdc0460 100644 Binary files a/graphics/pokemon/minccino/front.png and b/graphics/pokemon/minccino/front.png differ diff --git a/graphics/pokemon/minccino/normal.pal b/graphics/pokemon/minccino/normal.pal index f21720de77e6..3de570e3d576 100644 --- a/graphics/pokemon/minccino/normal.pal +++ b/graphics/pokemon/minccino/normal.pal @@ -2,15 +2,15 @@ JASC-PAL 0100 16 153 210 164 -71 59 54 -155 138 140 -254 255 255 -229 225 220 -204 191 185 +80 72 64 +136 128 120 +248 240 248 +216 200 192 +184 176 160 16 16 16 -135 63 68 -175 86 93 -237 106 117 +184 40 40 +208 80 80 +232 128 128 175 86 93 237 106 117 0 0 0 diff --git a/graphics/pokemon/minun/anim_front.png b/graphics/pokemon/minun/anim_front.png index 071d727efd7c..f309898b2721 100644 Binary files a/graphics/pokemon/minun/anim_front.png and b/graphics/pokemon/minun/anim_front.png differ diff --git a/graphics/pokemon/minun/front.png b/graphics/pokemon/minun/front.png index d45777b2837c..fa72433dc2be 100644 Binary files a/graphics/pokemon/minun/front.png and b/graphics/pokemon/minun/front.png differ diff --git a/graphics/pokemon/minun/normal.pal b/graphics/pokemon/minun/normal.pal index 3a5593d7af0d..548dccf1792c 100644 --- a/graphics/pokemon/minun/normal.pal +++ b/graphics/pokemon/minun/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 112 152 -136 200 232 +64 80 216 +112 152 240 16 16 16 -56 152 208 -248 240 184 +88 128 232 +248 232 176 120 112 80 -176 152 104 +176 152 96 248 248 248 -208 192 128 -24 56 96 -160 78 110 -219 149 179 +224 192 112 +0 0 0 +168 56 80 +224 104 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/misdreavus/anim_front.png b/graphics/pokemon/misdreavus/anim_front.png index 5227084c88ed..e59ff75f0ac5 100644 Binary files a/graphics/pokemon/misdreavus/anim_front.png and b/graphics/pokemon/misdreavus/anim_front.png differ diff --git a/graphics/pokemon/misdreavus/front.png b/graphics/pokemon/misdreavus/front.png index ec3d2cbf0063..b46d709a9694 100644 Binary files a/graphics/pokemon/misdreavus/front.png and b/graphics/pokemon/misdreavus/front.png differ diff --git a/graphics/pokemon/misdreavus/normal.pal b/graphics/pokemon/misdreavus/normal.pal index 65fa9a3222c6..01e0dd52a491 100644 --- a/graphics/pokemon/misdreavus/normal.pal +++ b/graphics/pokemon/misdreavus/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 72 104 +152 56 72 16 16 16 -216 112 128 -64 32 48 -72 136 152 -32 40 80 -32 80 104 -48 104 128 -192 144 88 -144 56 64 -248 200 112 -248 72 96 +216 96 160 +96 24 64 +72 128 160 +24 40 64 +48 72 96 +56 96 128 +184 144 48 +160 40 88 +232 224 96 +216 64 128 248 248 248 112 16 48 0 0 0 diff --git a/graphics/pokemon/mismagius/anim_front.png b/graphics/pokemon/mismagius/anim_front.png index 41643309d4ec..4d86748a12a8 100644 Binary files a/graphics/pokemon/mismagius/anim_front.png and b/graphics/pokemon/mismagius/anim_front.png differ diff --git a/graphics/pokemon/mismagius/front.png b/graphics/pokemon/mismagius/front.png index cd6a67d65b94..5d68e8b7042b 100644 Binary files a/graphics/pokemon/mismagius/front.png and b/graphics/pokemon/mismagius/front.png differ diff --git a/graphics/pokemon/mismagius/normal.pal b/graphics/pokemon/mismagius/normal.pal index 9f98866aef5a..f013bf063ede 100644 --- a/graphics/pokemon/mismagius/normal.pal +++ b/graphics/pokemon/mismagius/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 40 96 -144 72 128 -208 120 184 -32 24 56 +88 64 96 +128 80 128 +176 96 176 +48 32 56 16 16 16 -120 88 152 -80 56 104 -160 136 48 +104 72 144 +72 56 88 +200 152 0 248 248 248 -152 72 72 -240 216 80 -224 104 96 -32 32 56 -224 104 96 +144 56 88 +240 216 56 +232 56 16 +0 0 0 +0 0 0 0 0 0 diff --git a/graphics/pokemon/moltres/anim_front.png b/graphics/pokemon/moltres/anim_front.png index 3ba2a59da15f..15a0232230f9 100644 Binary files a/graphics/pokemon/moltres/anim_front.png and b/graphics/pokemon/moltres/anim_front.png differ diff --git a/graphics/pokemon/moltres/front.png b/graphics/pokemon/moltres/front.png index 27e2865898a5..e8d2f0e43c48 100644 Binary files a/graphics/pokemon/moltres/front.png and b/graphics/pokemon/moltres/front.png differ diff --git a/graphics/pokemon/moltres/normal.pal b/graphics/pokemon/moltres/normal.pal index 2114a47a75a9..a675d27dc603 100644 --- a/graphics/pokemon/moltres/normal.pal +++ b/graphics/pokemon/moltres/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 48 24 -216 104 64 -88 64 32 -248 184 88 -16 8 8 -192 144 72 -240 160 112 -248 200 112 -248 208 152 -56 56 112 +213 8 8 +238 98 57 +115 65 16 +255 197 74 +0 0 0 +222 148 16 +255 164 74 +255 213 98 +255 238 98 +0 0 0 248 248 248 -80 56 56 -144 104 104 -208 160 128 -96 96 96 +82 57 41 +139 98 74 +180 139 98 +98 98 98 diff --git a/graphics/pokemon/monferno/anim_front.png b/graphics/pokemon/monferno/anim_front.png index 2c35e3b4a83c..7d4167c6b5b2 100644 Binary files a/graphics/pokemon/monferno/anim_front.png and b/graphics/pokemon/monferno/anim_front.png differ diff --git a/graphics/pokemon/monferno/front.png b/graphics/pokemon/monferno/front.png index cff833cd45ee..08ac29b532a9 100644 Binary files a/graphics/pokemon/monferno/front.png and b/graphics/pokemon/monferno/front.png differ diff --git a/graphics/pokemon/monferno/normal.pal b/graphics/pokemon/monferno/normal.pal index 3d841fd2f477..d6dae19c0554 100644 --- a/graphics/pokemon/monferno/normal.pal +++ b/graphics/pokemon/monferno/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -184 56 48 -72 48 8 -120 88 64 -224 184 152 -144 96 32 -184 144 120 -200 120 48 -224 152 80 -24 80 112 -40 136 176 -200 192 184 +216 56 8 +88 48 16 +136 112 64 +232 200 168 +152 96 64 +192 152 120 +208 136 32 +232 160 64 +16 72 152 +8 120 192 +216 224 224 16 16 16 248 248 248 -240 192 48 +248 200 64 96 96 112 diff --git a/graphics/pokemon/mothim/anim_front.png b/graphics/pokemon/mothim/anim_front.png index b634f24fd3eb..591ffd651232 100644 Binary files a/graphics/pokemon/mothim/anim_front.png and b/graphics/pokemon/mothim/anim_front.png differ diff --git a/graphics/pokemon/mothim/front.png b/graphics/pokemon/mothim/front.png index 4aa22d601b86..b18fffe171cb 100644 Binary files a/graphics/pokemon/mothim/front.png and b/graphics/pokemon/mothim/front.png differ diff --git a/graphics/pokemon/mothim/shiny.pal b/graphics/pokemon/mothim/shiny.pal index 31bd384bd73c..7c5d2000a63a 100644 --- a/graphics/pokemon/mothim/shiny.pal +++ b/graphics/pokemon/mothim/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 80 104 -80 160 208 -232 232 136 -200 192 64 -136 128 32 +115 65 32 +230 106 41 +246 213 123 +189 156 98 +106 90 74 16 16 16 -40 120 152 -192 200 208 -80 88 104 -128 136 152 -40 48 40 -88 112 88 -56 72 48 +164 74 0 +205 205 205 +98 98 98 +148 148 148 +57 41 41 +106 90 90 +74 57 57 0 0 0 0 0 0 diff --git a/graphics/pokemon/mr_mime/anim_front.png b/graphics/pokemon/mr_mime/anim_front.png index 52a3423c82c9..0b80ad02be5e 100644 Binary files a/graphics/pokemon/mr_mime/anim_front.png and b/graphics/pokemon/mr_mime/anim_front.png differ diff --git a/graphics/pokemon/mr_mime/front.png b/graphics/pokemon/mr_mime/front.png index 7ee2f715eeb3..1ea6f3cbab57 100644 Binary files a/graphics/pokemon/mr_mime/front.png and b/graphics/pokemon/mr_mime/front.png differ diff --git a/graphics/pokemon/mr_mime/normal.pal b/graphics/pokemon/mr_mime/normal.pal index 5e5302ea4c9f..2affaeea887a 100644 --- a/graphics/pokemon/mr_mime/normal.pal +++ b/graphics/pokemon/mr_mime/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 40 56 -32 72 112 -80 136 168 +16 49 74 +16 74 115 +98 139 189 16 16 16 -104 64 72 -248 224 224 -248 200 208 -216 168 176 +106 57 49 +255 238 238 +255 205 205 +222 164 164 248 248 248 -184 192 200 -240 96 136 -112 56 64 -168 88 104 -248 136 168 -158 98 128 +205 205 213 +255 90 106 +115 49 57 +189 74 115 +255 172 180 +208 48 32 diff --git a/graphics/pokemon/mudkip/anim_front.png b/graphics/pokemon/mudkip/anim_front.png index cb9228cc60e2..dbc9857e04b3 100644 Binary files a/graphics/pokemon/mudkip/anim_front.png and b/graphics/pokemon/mudkip/anim_front.png differ diff --git a/graphics/pokemon/mudkip/front.png b/graphics/pokemon/mudkip/front.png index 7cd675391235..7c83c421f115 100644 Binary files a/graphics/pokemon/mudkip/front.png and b/graphics/pokemon/mudkip/front.png differ diff --git a/graphics/pokemon/mudkip/normal.pal b/graphics/pokemon/mudkip/normal.pal index 546160fc1b5a..54e0e6ad6d98 100644 --- a/graphics/pokemon/mudkip/normal.pal +++ b/graphics/pokemon/mudkip/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 88 128 -56 160 208 -104 192 240 -40 120 160 +64 160 216 +120 200 232 +48 104 144 16 16 16 160 176 224 192 208 232 104 128 160 168 224 248 -144 88 24 -208 120 48 -240 152 72 +168 88 32 +232 128 48 +248 168 64 248 248 248 88 72 64 0 0 0 diff --git a/graphics/pokemon/muk/anim_front.png b/graphics/pokemon/muk/anim_front.png index 55923479f07e..8f78e22e91cf 100644 Binary files a/graphics/pokemon/muk/anim_front.png and b/graphics/pokemon/muk/anim_front.png differ diff --git a/graphics/pokemon/muk/front.png b/graphics/pokemon/muk/front.png index b93a156766f5..4bb6d0a84e86 100644 Binary files a/graphics/pokemon/muk/front.png and b/graphics/pokemon/muk/front.png differ diff --git a/graphics/pokemon/muk/normal.pal b/graphics/pokemon/muk/normal.pal index c65ff71c8a85..f35af64a4ede 100644 --- a/graphics/pokemon/muk/normal.pal +++ b/graphics/pokemon/muk/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -104 80 112 -200 176 216 -184 152 200 -144 120 168 -72 56 72 +123 74 131 +230 189 238 +197 164 205 +164 123 172 +90 49 115 16 16 16 248 248 248 -152 184 208 -64 72 96 -120 128 152 +172 180 189 +65 74 90 +131 139 156 224 208 232 0 0 0 0 0 0 diff --git a/graphics/pokemon/munchlax/anim_front.png b/graphics/pokemon/munchlax/anim_front.png index 9fd77f96d6e8..1174fb3838ea 100644 Binary files a/graphics/pokemon/munchlax/anim_front.png and b/graphics/pokemon/munchlax/anim_front.png differ diff --git a/graphics/pokemon/munchlax/front.png b/graphics/pokemon/munchlax/front.png index e1115ff57dbf..243df8dd060a 100644 Binary files a/graphics/pokemon/munchlax/front.png and b/graphics/pokemon/munchlax/front.png differ diff --git a/graphics/pokemon/munchlax/normal.pal b/graphics/pokemon/munchlax/normal.pal index bb75ff1275c3..be89d69f2bd7 100644 --- a/graphics/pokemon/munchlax/normal.pal +++ b/graphics/pokemon/munchlax/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 88 104 +32 88 112 32 56 64 -72 120 152 +48 120 152 16 16 16 -120 152 168 +48 144 176 200 200 200 248 248 248 -248 216 168 -192 160 128 +240 224 184 +216 168 136 88 64 56 112 112 120 128 96 72 160 128 112 -117 76 87 -209 150 171 +168 56 80 +224 104 120 diff --git a/graphics/pokemon/munna/anim_front.png b/graphics/pokemon/munna/anim_front.png index 5dd7796f8b6a..c7d84bd9b3b5 100644 Binary files a/graphics/pokemon/munna/anim_front.png and b/graphics/pokemon/munna/anim_front.png differ diff --git a/graphics/pokemon/munna/front.png b/graphics/pokemon/munna/front.png index 15708a05812f..3abe09025e01 100644 Binary files a/graphics/pokemon/munna/front.png and b/graphics/pokemon/munna/front.png differ diff --git a/graphics/pokemon/munna/normal.pal b/graphics/pokemon/munna/normal.pal index 84bdc2b71a1f..f6a7e60ba550 100644 --- a/graphics/pokemon/munna/normal.pal +++ b/graphics/pokemon/munna/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 224 224 -192 136 144 -248 192 208 -120 72 88 -136 88 136 -248 224 216 -168 120 184 +200 136 184 +248 192 200 +128 64 96 +128 88 144 +248 208 216 +168 120 200 16 16 16 -248 120 160 -224 112 144 -144 56 64 +240 136 208 +216 120 184 +168 40 64 248 248 248 -240 64 88 -224 160 176 -88 64 96 +216 40 64 +224 168 192 +96 72 104 0 0 0 diff --git a/graphics/pokemon/murkrow/anim_front.png b/graphics/pokemon/murkrow/anim_front.png index 7a5cb8d716ce..5866a2d55601 100644 Binary files a/graphics/pokemon/murkrow/anim_front.png and b/graphics/pokemon/murkrow/anim_front.png differ diff --git a/graphics/pokemon/murkrow/front.png b/graphics/pokemon/murkrow/front.png index b3885b6048d2..de8f7cd5d2bc 100644 Binary files a/graphics/pokemon/murkrow/front.png and b/graphics/pokemon/murkrow/front.png differ diff --git a/graphics/pokemon/murkrow/normal.pal b/graphics/pokemon/murkrow/normal.pal index 809e1d57d881..4d1ccb7b6c02 100644 --- a/graphics/pokemon/murkrow/normal.pal +++ b/graphics/pokemon/murkrow/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 40 56 -48 96 136 +40 40 64 +64 96 152 16 16 16 -32 64 88 -152 56 56 -176 144 96 -232 104 72 -72 128 176 -88 64 40 -240 200 128 +48 64 96 +112 40 56 +176 152 32 +208 64 80 +112 136 184 +88 72 32 +232 208 128 248 248 248 -216 176 112 +208 184 80 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/musharna/anim_front.png b/graphics/pokemon/musharna/anim_front.png index 7b00fd511afd..f75dd3b0cbfb 100644 Binary files a/graphics/pokemon/musharna/anim_front.png and b/graphics/pokemon/musharna/anim_front.png differ diff --git a/graphics/pokemon/musharna/front.png b/graphics/pokemon/musharna/front.png index 6512dddae660..75addd0950be 100644 Binary files a/graphics/pokemon/musharna/front.png and b/graphics/pokemon/musharna/front.png differ diff --git a/graphics/pokemon/musharna/normal.pal b/graphics/pokemon/musharna/normal.pal index eb9ef349670b..a59c683c5574 100644 --- a/graphics/pokemon/musharna/normal.pal +++ b/graphics/pokemon/musharna/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 80 112 -240 128 152 -56 56 88 -144 128 200 -144 96 96 +168 80 112 +216 120 184 +72 72 96 +144 120 216 +152 88 96 16 16 16 -248 200 192 -112 96 152 -200 152 152 +248 192 200 +104 96 160 +200 152 144 80 80 80 -184 104 120 -96 48 72 +184 112 168 +104 48 72 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/natu/anim_front.png b/graphics/pokemon/natu/anim_front.png index 45e680c82163..4ba2a6eee529 100644 Binary files a/graphics/pokemon/natu/anim_front.png and b/graphics/pokemon/natu/anim_front.png differ diff --git a/graphics/pokemon/natu/front.png b/graphics/pokemon/natu/front.png index e770f43796ef..c77e0f9bd7a5 100644 Binary files a/graphics/pokemon/natu/front.png and b/graphics/pokemon/natu/front.png differ diff --git a/graphics/pokemon/natu/normal.pal b/graphics/pokemon/natu/normal.pal index fa49b7d6ff97..0d9796fa5f04 100644 --- a/graphics/pokemon/natu/normal.pal +++ b/graphics/pokemon/natu/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 0 176 232 -128 24 40 -232 88 104 -200 56 72 -104 160 48 -72 104 40 -120 200 56 -168 216 128 +128 40 0 +248 88 88 +216 40 88 +72 144 64 +40 104 40 +112 184 64 +144 216 64 16 16 16 128 96 32 -240 208 96 -200 160 48 +248 224 40 +216 168 40 248 248 248 80 80 80 200 200 200 diff --git a/graphics/pokemon/nidoking/anim_front.png b/graphics/pokemon/nidoking/anim_front.png index dc8328aa0bce..79d0a35426e8 100644 Binary files a/graphics/pokemon/nidoking/anim_front.png and b/graphics/pokemon/nidoking/anim_front.png differ diff --git a/graphics/pokemon/nidoking/front.png b/graphics/pokemon/nidoking/front.png index 4112f41a5371..e230190a25ff 100644 Binary files a/graphics/pokemon/nidoking/front.png and b/graphics/pokemon/nidoking/front.png differ diff --git a/graphics/pokemon/nidoking/normal.pal b/graphics/pokemon/nidoking/normal.pal index 0f018514128d..84b8d0f6c69a 100644 --- a/graphics/pokemon/nidoking/normal.pal +++ b/graphics/pokemon/nidoking/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 48 88 -208 144 208 +90 41 106 +222 148 246 16 16 16 -192 120 184 -144 88 136 -72 112 112 -40 80 88 -80 152 160 -248 248 248 -176 176 192 -128 64 88 -112 112 88 -224 112 152 -240 240 240 -208 200 208 +213 115 238 +164 82 148 +41 123 148 +0 74 98 +65 148 197 +255 255 255 +197 197 164 +172 16 0 +115 115 90 +230 65 49 +230 230 213 +232 232 216 diff --git a/graphics/pokemon/nidoqueen/anim_front.png b/graphics/pokemon/nidoqueen/anim_front.png index 5e55246fa318..0f69643ebb62 100644 Binary files a/graphics/pokemon/nidoqueen/anim_front.png and b/graphics/pokemon/nidoqueen/anim_front.png differ diff --git a/graphics/pokemon/nidoqueen/front.png b/graphics/pokemon/nidoqueen/front.png index 3c593c585c9c..f4592932e07a 100644 Binary files a/graphics/pokemon/nidoqueen/front.png and b/graphics/pokemon/nidoqueen/front.png differ diff --git a/graphics/pokemon/nidoqueen/normal.pal b/graphics/pokemon/nidoqueen/normal.pal index 7be03f2aa328..3901338e3740 100644 --- a/graphics/pokemon/nidoqueen/normal.pal +++ b/graphics/pokemon/nidoqueen/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 112 144 -120 168 192 -48 64 80 +98 139 172 +90 180 205 +49 74 74 16 16 16 -160 128 104 -96 88 48 -96 72 56 -160 200 232 +189 172 90 +115 90 41 +115 90 41 +156 213 222 208 208 208 248 248 248 -184 176 128 -224 208 152 -248 232 192 -130 91 99 -216 153 175 +189 172 90 +230 205 139 +238 230 164 +112 40 40 +232 128 120 diff --git a/graphics/pokemon/nidoran_f/anim_front.png b/graphics/pokemon/nidoran_f/anim_front.png index 1cf3106f64b0..8261f4d77368 100644 Binary files a/graphics/pokemon/nidoran_f/anim_front.png and b/graphics/pokemon/nidoran_f/anim_front.png differ diff --git a/graphics/pokemon/nidoran_f/front.png b/graphics/pokemon/nidoran_f/front.png index 6b6f116aaab7..d47802a0da7a 100644 Binary files a/graphics/pokemon/nidoran_f/front.png and b/graphics/pokemon/nidoran_f/front.png differ diff --git a/graphics/pokemon/nidoran_f/normal.pal b/graphics/pokemon/nidoran_f/normal.pal index 439c5290aa02..6f2e8898b310 100644 --- a/graphics/pokemon/nidoran_f/normal.pal +++ b/graphics/pokemon/nidoran_f/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 128 184 -64 64 120 -152 176 216 -200 216 240 -56 104 144 -32 152 160 +115 131 172 +90 65 131 +172 172 205 +213 213 255 +52 109 179 +65 139 230 16 16 16 248 248 248 -176 48 40 -232 232 248 -248 112 80 -216 216 216 +189 49 74 +238 238 255 +255 82 65 +222 222 222 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/nidoran_m/anim_front.png b/graphics/pokemon/nidoran_m/anim_front.png index e36c4ddd18ec..5f0990c40292 100644 Binary files a/graphics/pokemon/nidoran_m/anim_front.png and b/graphics/pokemon/nidoran_m/anim_front.png differ diff --git a/graphics/pokemon/nidoran_m/front.png b/graphics/pokemon/nidoran_m/front.png index 13f935c68dc7..3b1084e3dcf6 100644 Binary files a/graphics/pokemon/nidoran_m/front.png and b/graphics/pokemon/nidoran_m/front.png differ diff --git a/graphics/pokemon/nidoran_m/normal.pal b/graphics/pokemon/nidoran_m/normal.pal index 8534782caf03..711acdb79fea 100644 --- a/graphics/pokemon/nidoran_m/normal.pal +++ b/graphics/pokemon/nidoran_m/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 96 160 -200 136 208 -104 56 104 +189 98 197 +230 156 213 +98 65 106 16 16 16 -224 168 232 -24 96 88 -16 136 128 -200 200 200 -240 120 96 -248 248 248 -216 40 56 -0 0 0 +238 189 238 +0 98 65 +0 164 115 +205 205 205 +255 106 82 +255 255 255 +222 65 41 +176 24 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/nidorina/anim_front.png b/graphics/pokemon/nidorina/anim_front.png index 4d282ca4561d..51ba5cb07041 100644 Binary files a/graphics/pokemon/nidorina/anim_front.png and b/graphics/pokemon/nidorina/anim_front.png differ diff --git a/graphics/pokemon/nidorina/front.png b/graphics/pokemon/nidorina/front.png index da526a47fd57..957a5d3aeea6 100644 Binary files a/graphics/pokemon/nidorina/front.png and b/graphics/pokemon/nidorina/front.png differ diff --git a/graphics/pokemon/nidorina/normal.pal b/graphics/pokemon/nidorina/normal.pal index 6341a73ff038..bab15d82f2ad 100644 --- a/graphics/pokemon/nidorina/normal.pal +++ b/graphics/pokemon/nidorina/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 153 210 164 -91 143 173 -186 220 226 -44 76 114 +90 148 180 +197 230 238 +57 90 98 16 16 16 -141 190 201 -32 60 102 -51 115 178 -85 150 193 +139 197 205 +24 57 115 +55 95 176 +72 128 240 255 255 255 214 214 214 -201 47 30 -255 145 117 -232 72 56 +197 32 16 +255 156 139 +238 74 57 131 131 131 0 0 0 diff --git a/graphics/pokemon/nidorino/anim_front.png b/graphics/pokemon/nidorino/anim_front.png index 4ab2ddbaab64..9fd1786bc33f 100644 Binary files a/graphics/pokemon/nidorino/anim_front.png and b/graphics/pokemon/nidorino/anim_front.png differ diff --git a/graphics/pokemon/nidorino/front.png b/graphics/pokemon/nidorino/front.png index 4c54219195c8..16b304216e80 100644 Binary files a/graphics/pokemon/nidorino/front.png and b/graphics/pokemon/nidorino/front.png differ diff --git a/graphics/pokemon/nidorino/normal.pal b/graphics/pokemon/nidorino/normal.pal index be5b928927f2..a668ac118cf8 100644 --- a/graphics/pokemon/nidorino/normal.pal +++ b/graphics/pokemon/nidorino/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 56 96 -184 136 192 +90 57 98 +205 131 222 16 16 16 -208 176 216 -144 96 152 -72 120 120 -80 160 160 +230 172 238 +148 90 180 +0 148 98 +74 205 164 248 248 248 128 128 128 192 192 192 -88 56 88 -145 82 101 -204 138 162 +144 88 176 +168 40 40 +232 128 120 0 0 0 0 0 0 diff --git a/graphics/pokemon/nincada/anim_front.png b/graphics/pokemon/nincada/anim_front.png index 7852df8d3091..261fbc0982e2 100644 Binary files a/graphics/pokemon/nincada/anim_front.png and b/graphics/pokemon/nincada/anim_front.png differ diff --git a/graphics/pokemon/nincada/front.png b/graphics/pokemon/nincada/front.png index b7239dcee34c..1c408a81d256 100644 Binary files a/graphics/pokemon/nincada/front.png and b/graphics/pokemon/nincada/front.png differ diff --git a/graphics/pokemon/nincada/normal.pal b/graphics/pokemon/nincada/normal.pal index cfd79f8ec580..e6dd6a53dac5 100644 --- a/graphics/pokemon/nincada/normal.pal +++ b/graphics/pokemon/nincada/normal.pal @@ -2,11 +2,11 @@ JASC-PAL 0100 16 0 176 232 -112 144 72 +64 120 80 24 24 24 -216 232 168 +176 216 112 104 104 96 -168 200 112 +112 168 88 240 248 248 120 128 144 184 192 208 diff --git a/graphics/pokemon/ninetales/anim_front.png b/graphics/pokemon/ninetales/anim_front.png index a3bcf64b4e77..2959ce9fe588 100644 Binary files a/graphics/pokemon/ninetales/anim_front.png and b/graphics/pokemon/ninetales/anim_front.png differ diff --git a/graphics/pokemon/ninetales/front.png b/graphics/pokemon/ninetales/front.png index bdae540fc0ab..4c14bd887c11 100644 Binary files a/graphics/pokemon/ninetales/front.png and b/graphics/pokemon/ninetales/front.png differ diff --git a/graphics/pokemon/ninetales/normal.pal b/graphics/pokemon/ninetales/normal.pal index 64191711a394..021c1577538e 100644 --- a/graphics/pokemon/ninetales/normal.pal +++ b/graphics/pokemon/ninetales/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -176 160 104 -112 96 56 -248 232 144 +205 156 74 +131 98 24 +246 230 123 16 16 16 -216 192 112 -176 72 48 -248 248 248 -224 112 88 -232 184 88 -224 152 48 -175 105 127 +230 197 82 +180 16 0 +255 255 255 +255 106 41 +255 172 49 +255 148 16 +168 16 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/ninjask/anim_front.png b/graphics/pokemon/ninjask/anim_front.png index 04bc142f4113..bca98030c0ae 100644 Binary files a/graphics/pokemon/ninjask/anim_front.png and b/graphics/pokemon/ninjask/anim_front.png differ diff --git a/graphics/pokemon/ninjask/front.png b/graphics/pokemon/ninjask/front.png index 7f601890006e..f7c0d20dc49d 100644 Binary files a/graphics/pokemon/ninjask/front.png and b/graphics/pokemon/ninjask/front.png differ diff --git a/graphics/pokemon/ninjask/normal.pal b/graphics/pokemon/ninjask/normal.pal index 94fb08586ea9..d8dda49bfee8 100644 --- a/graphics/pokemon/ninjask/normal.pal +++ b/graphics/pokemon/ninjask/normal.pal @@ -5,15 +5,15 @@ JASC-PAL 144 144 152 96 96 96 248 248 248 -16 16 16 -128 48 48 -200 48 64 -216 72 88 -184 176 208 +0 0 0 +152 32 64 +192 48 80 +216 48 88 +168 176 176 128 56 56 -136 96 56 -216 208 232 -248 216 104 -208 168 96 +128 96 64 +216 216 208 +248 208 96 +224 168 72 56 56 56 -120 112 128 +120 120 120 diff --git a/graphics/pokemon/noctowl/anim_front.png b/graphics/pokemon/noctowl/anim_front.png index 5e052f2a9b7d..e6ff6d21061b 100644 Binary files a/graphics/pokemon/noctowl/anim_front.png and b/graphics/pokemon/noctowl/anim_front.png differ diff --git a/graphics/pokemon/noctowl/back.png b/graphics/pokemon/noctowl/back.png index 1453fabec367..3900e31bbf8f 100644 Binary files a/graphics/pokemon/noctowl/back.png and b/graphics/pokemon/noctowl/back.png differ diff --git a/graphics/pokemon/noctowl/front.png b/graphics/pokemon/noctowl/front.png index 68af918f70f4..6665234c049e 100644 Binary files a/graphics/pokemon/noctowl/front.png and b/graphics/pokemon/noctowl/front.png differ diff --git a/graphics/pokemon/noctowl/normal.pal b/graphics/pokemon/noctowl/normal.pal index 88ca3a7430f7..cf763b733f73 100644 --- a/graphics/pokemon/noctowl/normal.pal +++ b/graphics/pokemon/noctowl/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 104 80 -80 48 40 -240 216 152 -112 72 64 -200 176 120 -48 32 24 -184 128 104 +176 120 80 +96 64 48 +240 224 168 +120 88 72 +216 184 144 +64 40 32 +200 144 112 16 16 16 -152 128 112 +96 96 96 248 248 248 -168 40 48 +192 48 24 +152 0 0 192 192 192 -128 80 56 -224 168 144 +144 88 56 160 128 104 diff --git a/graphics/pokemon/noctowl/shiny.pal b/graphics/pokemon/noctowl/shiny.pal index 0bb0f2890715..033b7f62feba 100644 --- a/graphics/pokemon/noctowl/shiny.pal +++ b/graphics/pokemon/noctowl/shiny.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 160 168 48 -128 80 16 -240 240 176 -176 104 32 +136 80 16 +240 248 144 +184 104 16 224 224 112 -64 48 8 +80 56 0 200 208 72 16 16 16 -128 128 128 +96 96 96 248 248 248 -144 16 16 +192 48 24 +152 0 0 192 192 192 112 120 0 -224 224 112 208 152 48 diff --git a/graphics/pokemon/nosepass/anim_front.png b/graphics/pokemon/nosepass/anim_front.png index 046b3d532d3d..accd29014787 100644 Binary files a/graphics/pokemon/nosepass/anim_front.png and b/graphics/pokemon/nosepass/anim_front.png differ diff --git a/graphics/pokemon/nosepass/front.png b/graphics/pokemon/nosepass/front.png index 9d876776c738..695577233002 100644 Binary files a/graphics/pokemon/nosepass/front.png and b/graphics/pokemon/nosepass/front.png differ diff --git a/graphics/pokemon/nosepass/normal.pal b/graphics/pokemon/nosepass/normal.pal index 4e626c98f512..1cb62baaabff 100644 --- a/graphics/pokemon/nosepass/normal.pal +++ b/graphics/pokemon/nosepass/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -64 80 152 -40 48 88 -136 160 216 -88 112 184 -168 192 232 -16 16 16 -160 40 48 -208 72 80 -240 160 160 -240 104 112 -88 24 32 +65 82 156 +49 49 74 +139 164 230 +98 123 189 +172 189 246 +0 0 0 +156 49 74 +222 82 82 +255 148 148 +255 106 123 +90 24 32 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/numel/anim_front.png b/graphics/pokemon/numel/anim_front.png index 3fd2c74f32cc..b94c34a1aebe 100644 Binary files a/graphics/pokemon/numel/anim_front.png and b/graphics/pokemon/numel/anim_front.png differ diff --git a/graphics/pokemon/numel/front.png b/graphics/pokemon/numel/front.png index 610bf14a9e3d..2df10f3c71b9 100644 Binary files a/graphics/pokemon/numel/front.png and b/graphics/pokemon/numel/front.png differ diff --git a/graphics/pokemon/numel/normal.pal b/graphics/pokemon/numel/normal.pal index 4cf321fb0836..63829ec5468c 100644 --- a/graphics/pokemon/numel/normal.pal +++ b/graphics/pokemon/numel/normal.pal @@ -4,16 +4,16 @@ JASC-PAL 0 176 232 24 24 24 112 96 80 -248 216 120 -216 168 96 +240 216 80 +216 176 72 144 120 80 -64 104 64 -144 216 176 -112 184 120 -240 232 200 -208 192 144 +72 104 80 +144 224 152 +112 192 96 +240 240 160 +208 208 144 248 248 248 208 200 216 -96 152 96 +88 144 88 0 0 0 0 0 0 diff --git a/graphics/pokemon/nuzleaf/anim_front.png b/graphics/pokemon/nuzleaf/anim_front.png index ebdd431db129..796a50b3144f 100644 Binary files a/graphics/pokemon/nuzleaf/anim_front.png and b/graphics/pokemon/nuzleaf/anim_front.png differ diff --git a/graphics/pokemon/nuzleaf/front.png b/graphics/pokemon/nuzleaf/front.png index 1cbe64867ce9..173398f52818 100644 Binary files a/graphics/pokemon/nuzleaf/front.png and b/graphics/pokemon/nuzleaf/front.png differ diff --git a/graphics/pokemon/nuzleaf/normal.pal b/graphics/pokemon/nuzleaf/normal.pal index b6fdb2223e30..debc6d0b42b4 100644 --- a/graphics/pokemon/nuzleaf/normal.pal +++ b/graphics/pokemon/nuzleaf/normal.pal @@ -2,10 +2,10 @@ JASC-PAL 0100 16 0 176 232 -40 112 80 -120 200 160 -88 168 120 -56 136 96 +56 112 56 +136 208 120 +96 176 96 +88 152 72 16 16 16 128 120 104 160 104 80 @@ -16,4 +16,4 @@ JASC-PAL 184 168 152 200 200 232 248 248 248 -176 112 128 +184 88 104 diff --git a/graphics/pokemon/octillery/anim_front.png b/graphics/pokemon/octillery/anim_front.png index de9ffd250246..f7e1aec68d3d 100644 Binary files a/graphics/pokemon/octillery/anim_front.png and b/graphics/pokemon/octillery/anim_front.png differ diff --git a/graphics/pokemon/octillery/front.png b/graphics/pokemon/octillery/front.png index eb8a71c03aa0..2fc250c8d162 100644 Binary files a/graphics/pokemon/octillery/front.png and b/graphics/pokemon/octillery/front.png differ diff --git a/graphics/pokemon/octillery/normal.pal b/graphics/pokemon/octillery/normal.pal index 7ba40e531807..804bec18022b 100644 --- a/graphics/pokemon/octillery/normal.pal +++ b/graphics/pokemon/octillery/normal.pal @@ -6,7 +6,7 @@ JASC-PAL 96 32 24 208 168 56 248 216 96 -160 48 40 +192 48 40 240 64 56 16 16 16 240 120 104 diff --git a/graphics/pokemon/oddish/anim_front.png b/graphics/pokemon/oddish/anim_front.png index cf28c6f3345b..9634703b10ff 100644 Binary files a/graphics/pokemon/oddish/anim_front.png and b/graphics/pokemon/oddish/anim_front.png differ diff --git a/graphics/pokemon/oddish/front.png b/graphics/pokemon/oddish/front.png index a78bfd33e059..3ced8e7058e7 100644 Binary files a/graphics/pokemon/oddish/front.png and b/graphics/pokemon/oddish/front.png differ diff --git a/graphics/pokemon/oddish/normal.pal b/graphics/pokemon/oddish/normal.pal index 29fd79b9ec9b..30c3a26452fe 100644 --- a/graphics/pokemon/oddish/normal.pal +++ b/graphics/pokemon/oddish/normal.pal @@ -1,17 +1,17 @@ JASC-PAL 0100 16 -153 210 164 -59 145 36 -59 96 40 -68 181 48 -134 198 109 +248 192 192 +139 172 49 +74 90 32 +156 213 74 +197 230 123 16 16 16 -63 109 140 -105 150 173 -126 178 204 -234 72 60 -41 65 89 +90 106 131 +115 148 164 +148 180 197 +238 57 49 +41 57 74 178 92 121 214 149 172 0 0 0 diff --git a/graphics/pokemon/omanyte/anim_front.png b/graphics/pokemon/omanyte/anim_front.png index 95912686bf71..9a51401e8de3 100644 Binary files a/graphics/pokemon/omanyte/anim_front.png and b/graphics/pokemon/omanyte/anim_front.png differ diff --git a/graphics/pokemon/omanyte/front.png b/graphics/pokemon/omanyte/front.png index 0bec6af81e5b..177d0f0b66bc 100644 Binary files a/graphics/pokemon/omanyte/front.png and b/graphics/pokemon/omanyte/front.png differ diff --git a/graphics/pokemon/omanyte/normal.pal b/graphics/pokemon/omanyte/normal.pal index 622829ed851a..696dba994159 100644 --- a/graphics/pokemon/omanyte/normal.pal +++ b/graphics/pokemon/omanyte/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 88 56 -152 144 104 -232 224 160 -192 184 136 -248 240 200 -16 16 8 -64 136 152 -40 88 96 -136 208 224 -80 176 192 +98 82 49 +152 128 104 +230 222 131 +197 172 115 +255 238 197 +0 0 0 +65 106 172 +57 65 131 +98 189 246 +57 156 205 248 248 248 -184 184 184 -88 88 88 +192 192 192 +104 104 104 152 224 240 0 0 0 diff --git a/graphics/pokemon/omastar/anim_front.png b/graphics/pokemon/omastar/anim_front.png index 7d57973e9753..42d693d72b33 100644 Binary files a/graphics/pokemon/omastar/anim_front.png and b/graphics/pokemon/omastar/anim_front.png differ diff --git a/graphics/pokemon/omastar/front.png b/graphics/pokemon/omastar/front.png index bac3d51bf893..87796c37d589 100644 Binary files a/graphics/pokemon/omastar/front.png and b/graphics/pokemon/omastar/front.png differ diff --git a/graphics/pokemon/omastar/normal.pal b/graphics/pokemon/omastar/normal.pal index fdc66b01f91e..1ca4d096582b 100644 --- a/graphics/pokemon/omastar/normal.pal +++ b/graphics/pokemon/omastar/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 80 72 -232 216 168 -16 16 8 -184 168 120 -144 128 96 -248 240 216 -48 104 128 -48 72 88 -120 200 224 -72 152 168 -248 232 152 -184 168 104 +96 80 64 +224 216 128 +0 0 0 +192 168 112 +152 128 104 +248 232 192 +64 104 168 +56 64 128 +96 184 240 +56 152 200 +248 240 152 248 248 248 -88 0 48 +64 64 64 +168 0 0 0 0 0 diff --git a/graphics/pokemon/onix/anim_front.png b/graphics/pokemon/onix/anim_front.png index d9f79fab81b0..ea35bcfc9b81 100644 Binary files a/graphics/pokemon/onix/anim_front.png and b/graphics/pokemon/onix/anim_front.png differ diff --git a/graphics/pokemon/onix/front.png b/graphics/pokemon/onix/front.png index 806b0c5aca3b..6cba5adc4d0d 100644 Binary files a/graphics/pokemon/onix/front.png and b/graphics/pokemon/onix/front.png differ diff --git a/graphics/pokemon/onix/normal.pal b/graphics/pokemon/onix/normal.pal index 5bd1b7e4d8b8..339177663363 100644 --- a/graphics/pokemon/onix/normal.pal +++ b/graphics/pokemon/onix/normal.pal @@ -2,12 +2,12 @@ JASC-PAL 0100 16 152 208 160 -56 56 72 -104 104 120 -192 192 200 -144 136 152 +82 74 74 +131 123 123 +246 238 238 +189 180 180 16 16 16 -168 176 192 +222 213 213 248 248 248 248 248 248 0 0 0 diff --git a/graphics/pokemon/oshawott/anim_front.png b/graphics/pokemon/oshawott/anim_front.png index 4b8fbcf86e5a..d1fbab7f97f6 100644 Binary files a/graphics/pokemon/oshawott/anim_front.png and b/graphics/pokemon/oshawott/anim_front.png differ diff --git a/graphics/pokemon/oshawott/front.png b/graphics/pokemon/oshawott/front.png index a244e07d841e..4a0a0004aa5b 100644 Binary files a/graphics/pokemon/oshawott/front.png and b/graphics/pokemon/oshawott/front.png differ diff --git a/graphics/pokemon/oshawott/normal.pal b/graphics/pokemon/oshawott/normal.pal index 1c743f619f53..2839bcc484dd 100644 --- a/graphics/pokemon/oshawott/normal.pal +++ b/graphics/pokemon/oshawott/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 72 88 -112 144 176 -248 248 248 -64 96 144 -112 128 168 -40 64 80 -16 16 16 -136 96 48 -192 144 88 -184 200 232 -40 104 112 -112 200 192 -56 152 160 -120 104 64 +74 74 74 +139 139 156 +255 255 255 +49 65 106 +74 106 172 +41 65 82 +0 0 0 +139 90 49 +197 148 41 +197 197 205 +32 90 98 +41 189 197 +32 148 156 +139 90 49 248 224 144 diff --git a/graphics/pokemon/pachirisu/anim_front.png b/graphics/pokemon/pachirisu/anim_front.png index 45d9f3843159..8af3f81c89db 100644 Binary files a/graphics/pokemon/pachirisu/anim_front.png and b/graphics/pokemon/pachirisu/anim_front.png differ diff --git a/graphics/pokemon/pachirisu/front.png b/graphics/pokemon/pachirisu/front.png index 0096f3f58219..7d60cf8dfb55 100644 Binary files a/graphics/pokemon/pachirisu/front.png and b/graphics/pokemon/pachirisu/front.png differ diff --git a/graphics/pokemon/pachirisu/normal.pal b/graphics/pokemon/pachirisu/normal.pal index 680ae079f5ec..c8c18447f194 100644 --- a/graphics/pokemon/pachirisu/normal.pal +++ b/graphics/pokemon/pachirisu/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 96 112 -128 208 216 -80 160 176 -112 120 136 -232 240 248 +72 64 88 +120 176 224 +96 120 152 +120 120 128 +240 240 240 16 16 16 -184 200 208 -72 88 96 +200 192 192 +88 80 72 248 208 96 -128 88 120 -176 160 80 -216 152 168 +128 80 56 +192 160 96 +232 128 88 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/palkia/anim_front.png b/graphics/pokemon/palkia/anim_front.png index 3b408c2a6f44..73c70a694999 100644 Binary files a/graphics/pokemon/palkia/anim_front.png and b/graphics/pokemon/palkia/anim_front.png differ diff --git a/graphics/pokemon/palkia/front.png b/graphics/pokemon/palkia/front.png index 16ae684d58c9..4e2d3f513cc4 100644 Binary files a/graphics/pokemon/palkia/front.png and b/graphics/pokemon/palkia/front.png differ diff --git a/graphics/pokemon/palkia/normal.pal b/graphics/pokemon/palkia/normal.pal index 724a400a5305..6dea576dcca7 100644 --- a/graphics/pokemon/palkia/normal.pal +++ b/graphics/pokemon/palkia/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 104 120 -136 120 128 -232 224 224 -184 160 168 +112 112 120 +160 152 176 +240 232 248 +208 184 216 216 224 248 176 184 216 144 144 160 -176 96 176 -120 64 128 -40 48 72 +192 104 216 +136 80 144 +56 56 56 240 232 248 248 248 248 -200 112 136 +248 80 64 16 16 16 248 176 168 diff --git a/graphics/pokemon/palpitoad/anim_front.png b/graphics/pokemon/palpitoad/anim_front.png index 8a7f2e8adf4f..27fba830e7db 100644 Binary files a/graphics/pokemon/palpitoad/anim_front.png and b/graphics/pokemon/palpitoad/anim_front.png differ diff --git a/graphics/pokemon/palpitoad/front.png b/graphics/pokemon/palpitoad/front.png index 84d79d36de76..05b2a8b24cdc 100644 Binary files a/graphics/pokemon/palpitoad/front.png and b/graphics/pokemon/palpitoad/front.png differ diff --git a/graphics/pokemon/palpitoad/normal.pal b/graphics/pokemon/palpitoad/normal.pal index 3cea44ce6120..60ac03fa73c4 100644 --- a/graphics/pokemon/palpitoad/normal.pal +++ b/graphics/pokemon/palpitoad/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 112 104 -16 16 16 -152 224 208 -88 168 168 -64 56 64 -40 32 40 -104 88 88 -40 128 192 -16 64 96 -48 96 136 -192 176 192 +24 96 112 +0 0 0 +128 224 208 +80 160 176 +64 64 64 +40 40 40 +96 96 96 +8 144 208 +16 64 120 +40 104 168 +192 192 192 248 248 248 -128 96 64 -176 144 104 -248 216 152 +144 88 72 +192 152 128 +248 216 184 diff --git a/graphics/pokemon/panpour/anim_front.png b/graphics/pokemon/panpour/anim_front.png index 82852a4c8aa1..84233aa35776 100644 Binary files a/graphics/pokemon/panpour/anim_front.png and b/graphics/pokemon/panpour/anim_front.png differ diff --git a/graphics/pokemon/panpour/front.png b/graphics/pokemon/panpour/front.png index aa54ff9ff775..bc17b1fbcb20 100644 Binary files a/graphics/pokemon/panpour/front.png and b/graphics/pokemon/panpour/front.png differ diff --git a/graphics/pokemon/panpour/normal.pal b/graphics/pokemon/panpour/normal.pal index 7800417a2fdf..ffee370219ea 100644 --- a/graphics/pokemon/panpour/normal.pal +++ b/graphics/pokemon/panpour/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 72 96 -16 16 16 -32 112 120 -48 136 152 -56 192 224 -112 208 216 +0 56 112 +0 0 0 +32 112 152 +24 136 168 +40 176 216 +152 224 232 248 248 248 -184 152 88 +200 160 88 80 80 80 -248 208 120 -120 96 48 -160 120 64 +248 200 120 +112 80 32 +160 120 56 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/pansage/anim_front.png b/graphics/pokemon/pansage/anim_front.png index a0ce10916fc6..9eb2397d1ff2 100644 Binary files a/graphics/pokemon/pansage/anim_front.png and b/graphics/pokemon/pansage/anim_front.png differ diff --git a/graphics/pokemon/pansage/front.png b/graphics/pokemon/pansage/front.png index 59962b064878..63e3125ca28d 100644 Binary files a/graphics/pokemon/pansage/front.png and b/graphics/pokemon/pansage/front.png differ diff --git a/graphics/pokemon/pansage/normal.pal b/graphics/pokemon/pansage/normal.pal index 1bfb0afca7ed..130477fb3385 100644 --- a/graphics/pokemon/pansage/normal.pal +++ b/graphics/pokemon/pansage/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -32 80 56 -16 16 16 -48 112 72 -64 160 104 -248 208 112 -192 160 88 -112 208 152 +24 72 40 +0 0 0 +8 112 48 +24 160 80 +248 200 120 +200 160 88 +128 200 152 248 248 248 192 192 192 80 80 80 128 128 128 -128 104 56 -120 72 96 -192 112 128 +112 80 32 +176 96 120 +240 152 168 160 120 56 diff --git a/graphics/pokemon/pansear/anim_front.png b/graphics/pokemon/pansear/anim_front.png index dea9e1dffe65..0510243a90c2 100644 Binary files a/graphics/pokemon/pansear/anim_front.png and b/graphics/pokemon/pansear/anim_front.png differ diff --git a/graphics/pokemon/pansear/front.png b/graphics/pokemon/pansear/front.png index d3138f97d3b5..c7dc3a5b8fce 100644 Binary files a/graphics/pokemon/pansear/front.png and b/graphics/pokemon/pansear/front.png differ diff --git a/graphics/pokemon/pansear/normal.pal b/graphics/pokemon/pansear/normal.pal index 85a73a6dd71b..90eee6914f7a 100644 --- a/graphics/pokemon/pansear/normal.pal +++ b/graphics/pokemon/pansear/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 48 56 -216 88 80 -16 16 16 -168 64 64 -240 152 40 +120 48 48 +224 80 64 +0 0 0 +184 64 56 +240 144 64 248 248 248 80 80 80 192 192 192 -248 216 136 -176 144 88 +248 200 120 +200 160 88 128 128 128 -104 80 48 +112 80 32 160 120 56 0 0 0 0 0 0 diff --git a/graphics/pokemon/paras/anim_front.png b/graphics/pokemon/paras/anim_front.png index 4d8251989a2a..3b00df10a2b8 100644 Binary files a/graphics/pokemon/paras/anim_front.png and b/graphics/pokemon/paras/anim_front.png differ diff --git a/graphics/pokemon/paras/back.png b/graphics/pokemon/paras/back.png index a0e9981f5e61..8e22aadc51bd 100644 Binary files a/graphics/pokemon/paras/back.png and b/graphics/pokemon/paras/back.png differ diff --git a/graphics/pokemon/paras/front.png b/graphics/pokemon/paras/front.png index 1724f0b6eb3d..b79705ba5486 100644 Binary files a/graphics/pokemon/paras/front.png and b/graphics/pokemon/paras/front.png differ diff --git a/graphics/pokemon/paras/normal.pal b/graphics/pokemon/paras/normal.pal index 0757a91a0193..08c060f7a121 100644 --- a/graphics/pokemon/paras/normal.pal +++ b/graphics/pokemon/paras/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 80 112 -96 56 64 -224 112 152 -224 168 88 -248 200 152 +189 65 65 +98 41 41 +246 106 106 +197 180 32 +255 213 82 16 16 16 -104 56 32 -48 24 8 -232 136 64 -168 144 72 -176 96 64 -240 160 112 -88 88 88 -248 240 248 -200 200 200 +112 72 24 +57 41 16 +230 131 41 +255 246 255 +180 98 32 +255 172 98 +90 90 90 +205 205 205 +164 164 205 diff --git a/graphics/pokemon/paras/shiny.pal b/graphics/pokemon/paras/shiny.pal index 0eda93cf358a..d5b733479a1e 100644 --- a/graphics/pokemon/paras/shiny.pal +++ b/graphics/pokemon/paras/shiny.pal @@ -11,7 +11,7 @@ JASC-PAL 104 40 16 56 32 8 224 96 48 -168 144 72 +255 246 255 176 48 40 240 144 96 88 88 88 diff --git a/graphics/pokemon/parasect/anim_front.png b/graphics/pokemon/parasect/anim_front.png index 98051569ec8b..f424edf0c331 100644 Binary files a/graphics/pokemon/parasect/anim_front.png and b/graphics/pokemon/parasect/anim_front.png differ diff --git a/graphics/pokemon/parasect/front.png b/graphics/pokemon/parasect/front.png index 8f9a86b119d3..5a841ffbcc85 100644 Binary files a/graphics/pokemon/parasect/front.png and b/graphics/pokemon/parasect/front.png differ diff --git a/graphics/pokemon/parasect/normal.pal b/graphics/pokemon/parasect/normal.pal index 5d22262caf66..0d82fc25c7a3 100644 --- a/graphics/pokemon/parasect/normal.pal +++ b/graphics/pokemon/parasect/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 32 72 -232 144 176 -208 112 152 -248 192 48 +120 8 8 +248 104 104 +240 48 48 +248 208 80 16 16 16 240 152 152 -232 160 40 -168 72 120 -96 56 24 -160 96 56 +208 200 48 +192 48 64 +96 16 0 +176 64 56 248 240 248 -232 136 64 -224 224 240 -168 176 192 +216 104 48 +208 208 208 +152 136 160 0 0 0 diff --git a/graphics/pokemon/patrat/anim_front.png b/graphics/pokemon/patrat/anim_front.png index dd72e2e5b82c..68bf54bc48d0 100644 Binary files a/graphics/pokemon/patrat/anim_front.png and b/graphics/pokemon/patrat/anim_front.png differ diff --git a/graphics/pokemon/patrat/front.png b/graphics/pokemon/patrat/front.png index e4bb97d898c7..3bc72d582fa2 100644 Binary files a/graphics/pokemon/patrat/front.png and b/graphics/pokemon/patrat/front.png differ diff --git a/graphics/pokemon/patrat/normal.pal b/graphics/pokemon/patrat/normal.pal index d7c871fae44e..4eed1549562c 100644 --- a/graphics/pokemon/patrat/normal.pal +++ b/graphics/pokemon/patrat/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 88 56 -80 56 32 -168 120 72 -200 152 112 +120 80 72 +80 64 48 +152 104 48 +184 128 64 16 16 16 64 56 48 -232 72 64 +240 72 72 160 48 48 -248 184 40 -144 128 120 +248 152 40 +152 128 112 248 248 248 176 152 128 -216 192 160 -200 184 176 +208 184 144 +184 184 184 144 112 72 diff --git a/graphics/pokemon/pawniard/anim_front.png b/graphics/pokemon/pawniard/anim_front.png index 53ea2cf82ebd..7fc6d3b7242b 100644 Binary files a/graphics/pokemon/pawniard/anim_front.png and b/graphics/pokemon/pawniard/anim_front.png differ diff --git a/graphics/pokemon/pawniard/front.png b/graphics/pokemon/pawniard/front.png index b6ddd98405dd..4d5434548ed7 100644 Binary files a/graphics/pokemon/pawniard/front.png and b/graphics/pokemon/pawniard/front.png differ diff --git a/graphics/pokemon/pawniard/normal.pal b/graphics/pokemon/pawniard/normal.pal index b02c73517979..b0af3a933a6e 100644 --- a/graphics/pokemon/pawniard/normal.pal +++ b/graphics/pokemon/pawniard/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 8 24 -16 16 16 -168 80 80 +96 0 0 +0 0 0 +184 64 64 248 248 248 -104 32 40 +136 32 24 80 80 88 176 192 200 -32 32 40 -96 104 112 -248 160 72 -56 56 72 -168 104 56 +40 40 48 +96 96 96 +224 136 64 +64 64 80 +136 88 56 40 40 40 0 0 0 0 0 0 diff --git a/graphics/pokemon/pelipper/anim_front.png b/graphics/pokemon/pelipper/anim_front.png index 212ee7e96f67..d99325b030aa 100644 Binary files a/graphics/pokemon/pelipper/anim_front.png and b/graphics/pokemon/pelipper/anim_front.png differ diff --git a/graphics/pokemon/pelipper/front.png b/graphics/pokemon/pelipper/front.png index c4b09f09745b..145bb8e25bd5 100644 Binary files a/graphics/pokemon/pelipper/front.png and b/graphics/pokemon/pelipper/front.png differ diff --git a/graphics/pokemon/pelipper/normal.pal b/graphics/pokemon/pelipper/normal.pal index f5dc1e8af88f..4aff65045a33 100644 --- a/graphics/pokemon/pelipper/normal.pal +++ b/graphics/pokemon/pelipper/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 96 120 +48 96 136 16 16 16 -80 152 192 -184 216 240 -96 192 224 -192 216 232 -96 104 128 +88 160 200 +160 224 248 +120 200 232 +200 208 232 +112 112 128 248 248 248 -120 96 48 -248 224 144 -176 144 88 -224 184 112 -248 232 216 -176 120 136 -160 184 216 +136 64 48 +248 216 72 +192 120 48 +240 176 48 +248 248 168 +200 64 80 +152 176 192 diff --git a/graphics/pokemon/persian/anim_front.png b/graphics/pokemon/persian/anim_front.png index 84e680836fd3..ed960deab5b5 100644 Binary files a/graphics/pokemon/persian/anim_front.png and b/graphics/pokemon/persian/anim_front.png differ diff --git a/graphics/pokemon/persian/front.png b/graphics/pokemon/persian/front.png index 41fd212116bf..650de8dd74ed 100644 Binary files a/graphics/pokemon/persian/front.png and b/graphics/pokemon/persian/front.png differ diff --git a/graphics/pokemon/persian/normal.pal b/graphics/pokemon/persian/normal.pal index 143470ddcfe0..073415db2d01 100644 --- a/graphics/pokemon/persian/normal.pal +++ b/graphics/pokemon/persian/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -96 80 48 -152 120 96 -200 176 136 -208 168 128 -152 128 88 -240 216 160 -224 88 72 +128 80 0 +144 120 32 +216 176 104 +184 160 72 +176 128 40 +248 224 128 +240 80 64 248 248 248 -248 152 136 -168 48 32 +248 184 152 +160 16 0 216 216 216 -248 248 200 -137 93 113 -211 152 169 +248 248 168 +136 0 0 +232 64 48 diff --git a/graphics/pokemon/petilil/anim_front.png b/graphics/pokemon/petilil/anim_front.png index 4c0888055f18..f3975326648f 100644 Binary files a/graphics/pokemon/petilil/anim_front.png and b/graphics/pokemon/petilil/anim_front.png differ diff --git a/graphics/pokemon/petilil/front.png b/graphics/pokemon/petilil/front.png index 96c0708adb52..735abb0fc26e 100644 Binary files a/graphics/pokemon/petilil/front.png and b/graphics/pokemon/petilil/front.png differ diff --git a/graphics/pokemon/petilil/normal.pal b/graphics/pokemon/petilil/normal.pal index 017ab544a765..075f7727e889 100644 --- a/graphics/pokemon/petilil/normal.pal +++ b/graphics/pokemon/petilil/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 88 48 -72 184 96 -56 128 64 +48 88 48 +56 168 56 +56 128 72 16 16 16 -160 168 88 -104 112 56 -200 224 128 -184 176 176 +152 184 72 +96 120 48 +192 232 120 +200 200 184 248 248 248 -160 96 80 -112 24 32 -176 192 112 +184 136 144 +120 48 56 +176 208 96 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/phanpy/anim_front.png b/graphics/pokemon/phanpy/anim_front.png index 7f8ab87fc923..480c6bf5db04 100644 Binary files a/graphics/pokemon/phanpy/anim_front.png and b/graphics/pokemon/phanpy/anim_front.png differ diff --git a/graphics/pokemon/phanpy/front.png b/graphics/pokemon/phanpy/front.png index aedd945237a2..22ef30963160 100644 Binary files a/graphics/pokemon/phanpy/front.png and b/graphics/pokemon/phanpy/front.png differ diff --git a/graphics/pokemon/phanpy/normal.pal b/graphics/pokemon/phanpy/normal.pal index cc8705954b51..34fc47eff9a4 100644 --- a/graphics/pokemon/phanpy/normal.pal +++ b/graphics/pokemon/phanpy/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 248 160 176 -80 144 144 -48 112 112 -144 224 224 -112 208 208 +64 152 144 +72 120 128 +160 224 224 +136 216 208 16 16 16 -112 40 16 -184 72 40 -232 112 88 +128 0 0 +184 56 48 +240 104 80 248 248 248 -96 184 184 +104 184 184 136 136 136 208 208 208 -127 82 90 -191 105 105 +168 16 0 +232 64 48 0 0 0 diff --git a/graphics/pokemon/phione/anim_front.png b/graphics/pokemon/phione/anim_front.png index e86b7ce3d954..a2b680ab0316 100644 Binary files a/graphics/pokemon/phione/anim_front.png and b/graphics/pokemon/phione/anim_front.png differ diff --git a/graphics/pokemon/phione/front.png b/graphics/pokemon/phione/front.png index 6241787c0846..10f7d01b5203 100644 Binary files a/graphics/pokemon/phione/front.png and b/graphics/pokemon/phione/front.png differ diff --git a/graphics/pokemon/phione/normal.pal b/graphics/pokemon/phione/normal.pal index df7697ede498..54af1570df2a 100644 --- a/graphics/pokemon/phione/normal.pal +++ b/graphics/pokemon/phione/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 120 136 -40 80 112 -104 192 200 +48 120 168 +56 80 152 +104 192 240 16 16 16 -80 152 168 -168 224 216 -224 232 224 -32 112 160 +24 152 208 +152 224 248 +200 232 248 +24 104 216 248 248 248 72 80 104 -144 136 128 -160 32 32 -232 136 136 -208 64 64 +144 136 152 +168 56 40 +216 128 152 +224 64 16 0 0 0 diff --git a/graphics/pokemon/pichu/anim_front.png b/graphics/pokemon/pichu/anim_front.png index decfbed2e281..4421c167d616 100644 Binary files a/graphics/pokemon/pichu/anim_front.png and b/graphics/pokemon/pichu/anim_front.png differ diff --git a/graphics/pokemon/pichu/front.png b/graphics/pokemon/pichu/front.png index 8e743945bb67..f8974c37b8ee 100644 Binary files a/graphics/pokemon/pichu/front.png and b/graphics/pokemon/pichu/front.png differ diff --git a/graphics/pokemon/pichu/normal.pal b/graphics/pokemon/pichu/normal.pal index e837eb8c32a7..dd2dc02dc84a 100644 --- a/graphics/pokemon/pichu/normal.pal +++ b/graphics/pokemon/pichu/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -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 +32 32 49 +82 65 65 +164 123 8 +197 172 16 +246 230 82 +131 90 41 +246 238 148 +98 74 16 +148 139 123 +238 230 205 +230 123 148 +139 32 32 +189 41 41 0 0 0 0 0 0 diff --git a/graphics/pokemon/pichu/spiky_eared/anim_front.png b/graphics/pokemon/pichu/spiky_eared/anim_front.png new file mode 100644 index 000000000000..2721dc8bf2b2 Binary files /dev/null and b/graphics/pokemon/pichu/spiky_eared/anim_front.png differ diff --git a/graphics/pokemon/pichu/spiky_eared/back.png b/graphics/pokemon/pichu/spiky_eared/back.png index 4198a751e3e5..7ab9bb92fbbc 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 3eeb371a06a5..c16e4c56fe5a 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 e837eb8c32a7..e6f3db55bbf5 100644 --- a/graphics/pokemon/pichu/spiky_eared/normal.pal +++ b/graphics/pokemon/pichu/spiky_eared/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -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 +32 32 49 +65 65 82 +164 123 8 +246 230 82 +197 172 16 0 0 0 +98 74 16 +131 90 41 +246 238 148 +148 139 123 +238 230 205 +230 123 148 +139 32 32 +189 41 41 0 0 0 diff --git a/graphics/pokemon/pichu/spiky_eared/shiny.pal b/graphics/pokemon/pichu/spiky_eared/shiny.pal index 65504fdf9590..071dc35d8fcd 100644 --- a/graphics/pokemon/pichu/spiky_eared/shiny.pal +++ b/graphics/pokemon/pichu/spiky_eared/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -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 +32 32 49 +82 65 65 +189 123 0 +255 213 0 +222 156 57 0 0 0 +90 32 0 +139 74 0 +255 238 106 +148 139 123 +238 230 205 +255 49 65 +139 32 32 +189 41 41 0 0 0 diff --git a/graphics/pokemon/pidgeot/anim_front.png b/graphics/pokemon/pidgeot/anim_front.png index 634a9f25a269..e926c550cec2 100644 Binary files a/graphics/pokemon/pidgeot/anim_front.png and b/graphics/pokemon/pidgeot/anim_front.png differ diff --git a/graphics/pokemon/pidgeot/back.png b/graphics/pokemon/pidgeot/back.png index 73a389c6de1f..fabbbefe27f3 100644 Binary files a/graphics/pokemon/pidgeot/back.png and b/graphics/pokemon/pidgeot/back.png differ diff --git a/graphics/pokemon/pidgeot/front.png b/graphics/pokemon/pidgeot/front.png index 9576ab1ad596..0efed3108f98 100644 Binary files a/graphics/pokemon/pidgeot/front.png and b/graphics/pokemon/pidgeot/front.png differ diff --git a/graphics/pokemon/pidgeot/normal.pal b/graphics/pokemon/pidgeot/normal.pal index 6af4e4fd0931..c387bd5b868e 100644 --- a/graphics/pokemon/pidgeot/normal.pal +++ b/graphics/pokemon/pidgeot/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 56 32 +90 57 41 16 16 16 -184 136 56 -120 88 40 -200 184 136 -240 224 152 -248 232 168 -248 192 88 -240 80 40 -112 48 32 -184 56 24 -192 176 192 -248 248 248 -240 168 184 -192 120 136 +172 123 90 +115 82 74 +230 180 98 +255 230 139 +248 240 120 +248 152 112 +238 98 65 +139 57 32 +213 49 24 +197 180 197 +255 255 255 +230 164 156 +189 123 123 diff --git a/graphics/pokemon/pidgeot/shiny.pal b/graphics/pokemon/pidgeot/shiny.pal index 38af03ee54bb..5b47a0d5d27a 100644 --- a/graphics/pokemon/pidgeot/shiny.pal +++ b/graphics/pokemon/pidgeot/shiny.pal @@ -9,7 +9,7 @@ JASC-PAL 232 200 96 248 248 144 248 248 144 -232 200 96 +248 248 96 248 216 48 192 96 0 240 168 32 diff --git a/graphics/pokemon/pidgeotto/anim_front.png b/graphics/pokemon/pidgeotto/anim_front.png index 4769ba49e760..ddae428c4784 100644 Binary files a/graphics/pokemon/pidgeotto/anim_front.png and b/graphics/pokemon/pidgeotto/anim_front.png differ diff --git a/graphics/pokemon/pidgeotto/back.png b/graphics/pokemon/pidgeotto/back.png index fa56e6eb67cd..bf79cc14a7a4 100644 Binary files a/graphics/pokemon/pidgeotto/back.png and b/graphics/pokemon/pidgeotto/back.png differ diff --git a/graphics/pokemon/pidgeotto/front.png b/graphics/pokemon/pidgeotto/front.png index 992de7b997da..aecc7f2422ee 100644 Binary files a/graphics/pokemon/pidgeotto/front.png and b/graphics/pokemon/pidgeotto/front.png differ diff --git a/graphics/pokemon/pidgeotto/normal.pal b/graphics/pokemon/pidgeotto/normal.pal index 276a73847178..6c8b9ef6f057 100644 --- a/graphics/pokemon/pidgeotto/normal.pal +++ b/graphics/pokemon/pidgeotto/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 40 48 -184 56 72 -232 112 80 -16 16 16 -232 160 136 -168 112 48 +123 49 32 +197 49 41 +238 98 65 +32 32 32 +144 64 72 +131 82 49 248 248 248 -88 56 32 +65 41 32 120 120 128 -232 192 216 -192 128 152 -192 168 112 -208 192 144 -240 232 176 -208 152 88 +255 172 115 +213 213 222 +172 123 90 +230 189 90 +255 230 139 +172 123 90 diff --git a/graphics/pokemon/pidgeotto/shiny.pal b/graphics/pokemon/pidgeotto/shiny.pal index ed42ee40bb47..8281977d4588 100644 --- a/graphics/pokemon/pidgeotto/shiny.pal +++ b/graphics/pokemon/pidgeotto/shiny.pal @@ -6,7 +6,7 @@ JASC-PAL 232 152 16 248 216 48 16 16 16 -248 248 120 +112 104 16 112 128 48 248 248 248 48 56 16 diff --git a/graphics/pokemon/pidgey/anim_front.png b/graphics/pokemon/pidgey/anim_front.png index f3c7166b8677..393024270e18 100644 Binary files a/graphics/pokemon/pidgey/anim_front.png and b/graphics/pokemon/pidgey/anim_front.png differ diff --git a/graphics/pokemon/pidgey/back.png b/graphics/pokemon/pidgey/back.png index 8147c1d489ce..2097d2dee8ff 100644 Binary files a/graphics/pokemon/pidgey/back.png and b/graphics/pokemon/pidgey/back.png differ diff --git a/graphics/pokemon/pidgey/front.png b/graphics/pokemon/pidgey/front.png index 7392b5480bcd..44cddf449b25 100644 Binary files a/graphics/pokemon/pidgey/front.png and b/graphics/pokemon/pidgey/front.png differ diff --git a/graphics/pokemon/pidgey/normal.pal b/graphics/pokemon/pidgey/normal.pal index ca4a0c381ac4..da639746deca 100644 --- a/graphics/pokemon/pidgey/normal.pal +++ b/graphics/pokemon/pidgey/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 64 32 -192 136 64 -144 96 40 -120 104 48 -216 200 136 +128 72 48 +205 131 90 +164 98 90 +164 98 90 +230 189 98 16 16 16 -240 232 152 +255 238 156 128 128 128 -128 56 64 +189 41 32 184 184 184 -224 176 184 +255 172 115 248 248 248 -192 120 136 -192 168 104 +238 98 65 +205 131 90 64 32 16 diff --git a/graphics/pokemon/pidove/anim_front.png b/graphics/pokemon/pidove/anim_front.png index 134efb10bda6..bf1c539f88a3 100644 Binary files a/graphics/pokemon/pidove/anim_front.png and b/graphics/pokemon/pidove/anim_front.png differ diff --git a/graphics/pokemon/pidove/front.png b/graphics/pokemon/pidove/front.png index 94399e9fa76f..590619087540 100644 Binary files a/graphics/pokemon/pidove/front.png and b/graphics/pokemon/pidove/front.png differ diff --git a/graphics/pokemon/pidove/normal.pal b/graphics/pokemon/pidove/normal.pal index 369d91c429d3..0c6a212490e2 100644 --- a/graphics/pokemon/pidove/normal.pal +++ b/graphics/pokemon/pidove/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 128 128 128 -80 72 72 -16 16 16 -200 192 184 +72 72 72 +0 0 0 +192 192 200 160 160 160 -192 96 96 -208 144 40 -224 176 104 -152 104 24 -232 160 144 -112 56 80 +184 96 96 +208 144 24 +248 184 40 +160 104 16 +248 152 152 +104 48 56 248 248 248 -48 40 40 -24 24 32 -224 224 216 +40 40 40 +32 32 40 +216 216 216 diff --git a/graphics/pokemon/pignite/anim_front.png b/graphics/pokemon/pignite/anim_front.png index 74ef4a0d986b..78f10f1578f3 100644 Binary files a/graphics/pokemon/pignite/anim_front.png and b/graphics/pokemon/pignite/anim_front.png differ diff --git a/graphics/pokemon/pignite/front.png b/graphics/pokemon/pignite/front.png index b0a7ea374afd..39c020d57d6c 100644 Binary files a/graphics/pokemon/pignite/front.png and b/graphics/pokemon/pignite/front.png differ diff --git a/graphics/pokemon/pignite/normal.pal b/graphics/pokemon/pignite/normal.pal index d4a19b093222..7b1d26924f94 100644 --- a/graphics/pokemon/pignite/normal.pal +++ b/graphics/pokemon/pignite/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -72 48 48 +80 48 40 248 248 248 -208 184 184 -176 88 48 -232 112 56 -112 56 32 -240 192 48 +192 168 160 +184 88 48 +232 112 40 +120 56 40 +232 192 56 176 136 40 -96 88 32 -200 56 56 -48 32 32 -72 72 80 -48 40 56 -208 184 184 +112 96 16 +200 64 56 +56 32 32 +72 72 72 +56 56 56 +0 0 0 diff --git a/graphics/pokemon/pikachu/anim_front.png b/graphics/pokemon/pikachu/anim_front.png index 8fa27c7a7f99..6deb20d71bb8 100644 Binary files a/graphics/pokemon/pikachu/anim_front.png and b/graphics/pokemon/pikachu/anim_front.png differ diff --git a/graphics/pokemon/pikachu/front.png b/graphics/pokemon/pikachu/front.png index 304cb5b0e420..9a320c286607 100644 Binary files a/graphics/pokemon/pikachu/front.png and b/graphics/pokemon/pikachu/front.png differ diff --git a/graphics/pokemon/pikachu/normal.pal b/graphics/pokemon/pikachu/normal.pal index 6f0793caaa36..8f402fd44720 100644 --- a/graphics/pokemon/pikachu/normal.pal +++ b/graphics/pokemon/pikachu/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -48 32 32 -88 56 32 -88 72 72 -200 168 88 -120 88 48 -248 216 120 -160 128 72 -248 232 176 -248 248 248 -232 112 80 -208 80 56 -152 88 96 -208 112 144 +0 0 0 +41 41 41 +99 49 8 +82 82 90 +247 189 33 +156 82 0 +247 230 82 +222 148 0 +255 247 165 +255 255 255 +230 90 66 +197 33 25 +168 48 16 +224 80 56 0 0 0 diff --git a/graphics/pokemon/piloswine/anim_front.png b/graphics/pokemon/piloswine/anim_front.png index 1e30fabae11a..b02c23d17e8a 100644 Binary files a/graphics/pokemon/piloswine/anim_front.png and b/graphics/pokemon/piloswine/anim_front.png differ diff --git a/graphics/pokemon/piloswine/front.png b/graphics/pokemon/piloswine/front.png index bd10b265507b..1969f28ae650 100644 Binary files a/graphics/pokemon/piloswine/front.png and b/graphics/pokemon/piloswine/front.png differ diff --git a/graphics/pokemon/piloswine/normal.pal b/graphics/pokemon/piloswine/normal.pal index 4d412a38ac64..2e1071439682 100644 --- a/graphics/pokemon/piloswine/normal.pal +++ b/graphics/pokemon/piloswine/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 88 64 -56 40 24 -200 152 128 -176 120 96 -168 112 80 +120 96 80 +64 56 48 +192 152 112 +168 128 88 +144 112 88 16 16 16 112 48 64 -232 136 136 -216 208 200 -176 168 160 -176 88 96 +240 144 152 +200 208 208 +184 176 176 +176 96 112 72 72 64 248 248 248 -96 64 56 +96 72 64 0 0 0 diff --git a/graphics/pokemon/pineco/anim_front.png b/graphics/pokemon/pineco/anim_front.png index e72439b44754..e2704f189d61 100644 Binary files a/graphics/pokemon/pineco/anim_front.png and b/graphics/pokemon/pineco/anim_front.png differ diff --git a/graphics/pokemon/pineco/front.png b/graphics/pokemon/pineco/front.png index c30fe45162fc..eec63a8ec7b1 100644 Binary files a/graphics/pokemon/pineco/front.png and b/graphics/pokemon/pineco/front.png differ diff --git a/graphics/pokemon/pineco/normal.pal b/graphics/pokemon/pineco/normal.pal index 66db8e2131b3..dae14d2d0395 100644 --- a/graphics/pokemon/pineco/normal.pal +++ b/graphics/pokemon/pineco/normal.pal @@ -2,15 +2,15 @@ JASC-PAL 0100 16 248 160 176 -40 64 88 -64 112 104 -112 168 160 -80 144 136 +32 72 96 +56 128 160 +112 184 160 +80 168 176 248 248 248 16 16 16 152 160 160 -192 64 56 -184 216 200 +248 72 56 +152 224 192 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/pinsir/anim_front.png b/graphics/pokemon/pinsir/anim_front.png index d2d701911ecb..9dd53e423fd9 100644 Binary files a/graphics/pokemon/pinsir/anim_front.png and b/graphics/pokemon/pinsir/anim_front.png differ diff --git a/graphics/pokemon/pinsir/front.png b/graphics/pokemon/pinsir/front.png index 5b5bd29efcdf..6ef852cffb71 100644 Binary files a/graphics/pokemon/pinsir/front.png and b/graphics/pokemon/pinsir/front.png differ diff --git a/graphics/pokemon/pinsir/normal.pal b/graphics/pokemon/pinsir/normal.pal index 1a1d2e6c4be4..9e89703bd802 100644 --- a/graphics/pokemon/pinsir/normal.pal +++ b/graphics/pokemon/pinsir/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 64 56 -128 112 96 -216 216 216 -176 160 144 -184 176 184 +74 65 57 +131 115 98 +238 230 205 +180 164 148 +213 197 180 248 248 248 -16 16 16 -112 88 80 -168 144 136 -224 192 192 -64 48 40 -144 112 112 +0 0 0 +131 106 82 +197 172 139 +230 213 180 +90 65 49 +164 139 106 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/piplup/anim_front.png b/graphics/pokemon/piplup/anim_front.png index f029f576a630..1ed77ba1db7d 100644 Binary files a/graphics/pokemon/piplup/anim_front.png and b/graphics/pokemon/piplup/anim_front.png differ diff --git a/graphics/pokemon/piplup/front.png b/graphics/pokemon/piplup/front.png index ada0b7ac509f..c2ce15cdc70e 100644 Binary files a/graphics/pokemon/piplup/front.png and b/graphics/pokemon/piplup/front.png differ diff --git a/graphics/pokemon/piplup/normal.pal b/graphics/pokemon/piplup/normal.pal index cae959ee2a4e..3f2fc38e2cb8 100644 --- a/graphics/pokemon/piplup/normal.pal +++ b/graphics/pokemon/piplup/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 96 144 -32 64 104 -80 152 208 -48 120 184 -144 208 216 +32 96 152 +16 72 112 +104 160 224 +48 136 208 +152 208 240 208 208 216 248 248 248 128 136 152 -112 160 184 +96 160 192 16 16 16 -168 144 40 -248 224 144 -232 192 24 -96 80 24 +168 128 56 +248 224 192 +240 200 64 +96 72 16 56 96 112 diff --git a/graphics/pokemon/plusle/anim_front.png b/graphics/pokemon/plusle/anim_front.png index 5d93d6f479b0..35b92aca3df3 100644 Binary files a/graphics/pokemon/plusle/anim_front.png and b/graphics/pokemon/plusle/anim_front.png differ diff --git a/graphics/pokemon/plusle/front.png b/graphics/pokemon/plusle/front.png index e38768d4ecf3..87b7612197d7 100644 Binary files a/graphics/pokemon/plusle/front.png and b/graphics/pokemon/plusle/front.png differ diff --git a/graphics/pokemon/plusle/normal.pal b/graphics/pokemon/plusle/normal.pal index f178cf4c8d05..95aa41e20810 100644 --- a/graphics/pokemon/plusle/normal.pal +++ b/graphics/pokemon/plusle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -168 48 64 -232 72 80 -240 136 136 +176 48 48 +216 72 64 +232 128 128 16 16 16 -248 240 184 -120 104 80 -208 192 128 -176 152 112 +248 232 176 +120 96 80 +224 192 112 +176 152 96 248 248 248 -88 16 72 -160 72 104 -216 144 176 +168 64 40 +168 56 80 +224 104 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/politoed/anim_front.png b/graphics/pokemon/politoed/anim_front.png index c2c5bbe1f011..15378c27c8f9 100644 Binary files a/graphics/pokemon/politoed/anim_front.png and b/graphics/pokemon/politoed/anim_front.png differ diff --git a/graphics/pokemon/politoed/front.png b/graphics/pokemon/politoed/front.png index a780e1c66329..74d705c1060b 100644 Binary files a/graphics/pokemon/politoed/front.png and b/graphics/pokemon/politoed/front.png differ diff --git a/graphics/pokemon/politoed/normal.pal b/graphics/pokemon/politoed/normal.pal index 16a5e2efb979..8b75ced724e0 100644 --- a/graphics/pokemon/politoed/normal.pal +++ b/graphics/pokemon/politoed/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 112 136 -128 168 192 +56 88 128 +80 128 192 16 16 16 -104 136 56 -64 96 16 -184 224 144 -128 200 64 +104 160 16 +48 112 0 +184 232 112 +136 200 24 248 248 248 200 200 200 -120 56 64 -128 112 48 -248 232 112 -232 112 128 -208 192 88 -248 144 160 +176 24 48 +136 88 0 +248 224 104 +224 104 48 +208 176 96 +248 144 192 diff --git a/graphics/pokemon/poliwag/anim_front.png b/graphics/pokemon/poliwag/anim_front.png index a9ce5d5fe2cb..53a5e3754018 100644 Binary files a/graphics/pokemon/poliwag/anim_front.png and b/graphics/pokemon/poliwag/anim_front.png differ diff --git a/graphics/pokemon/poliwag/front.png b/graphics/pokemon/poliwag/front.png index d848b68417c5..ebfcf3350f90 100644 Binary files a/graphics/pokemon/poliwag/front.png and b/graphics/pokemon/poliwag/front.png differ diff --git a/graphics/pokemon/poliwag/normal.pal b/graphics/pokemon/poliwag/normal.pal index f3362e8ebff8..09bad1cd360f 100644 --- a/graphics/pokemon/poliwag/normal.pal +++ b/graphics/pokemon/poliwag/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 56 104 -144 176 224 -96 144 192 -56 96 144 -248 248 248 +24 57 115 +139 164 230 +82 131 197 +57 90 131 +255 255 255 16 16 16 -88 104 112 -152 184 208 -248 208 240 -232 160 200 -200 112 160 -208 224 240 -64 120 176 +98 98 98 +180 172 189 +255 189 172 +255 106 106 +189 90 74 +205 205 205 +57 115 172 0 0 0 0 0 0 diff --git a/graphics/pokemon/poliwhirl/anim_front.png b/graphics/pokemon/poliwhirl/anim_front.png index 9f84a7a50e8e..87cb52b3a54a 100644 Binary files a/graphics/pokemon/poliwhirl/anim_front.png and b/graphics/pokemon/poliwhirl/anim_front.png differ diff --git a/graphics/pokemon/poliwhirl/front.png b/graphics/pokemon/poliwhirl/front.png index ec5080c2c68c..38ae21a4be10 100644 Binary files a/graphics/pokemon/poliwhirl/front.png and b/graphics/pokemon/poliwhirl/front.png differ diff --git a/graphics/pokemon/poliwhirl/normal.pal b/graphics/pokemon/poliwhirl/normal.pal index deb63b8513cd..ac25d75a660a 100644 --- a/graphics/pokemon/poliwhirl/normal.pal +++ b/graphics/pokemon/poliwhirl/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 64 96 -56 88 136 -88 136 192 +32 57 98 +82 90 131 +115 131 197 248 248 248 -64 120 168 +115 131 197 80 80 80 -168 176 200 -16 16 16 -128 168 216 +184 184 192 +15 15 15 +136 160 224 120 120 120 136 152 160 -232 240 240 -192 208 224 +240 240 248 +213 213 222 0 0 0 0 0 0 diff --git a/graphics/pokemon/poliwrath/anim_front.png b/graphics/pokemon/poliwrath/anim_front.png index 38c2f262165c..3e63a0c1a6dc 100644 Binary files a/graphics/pokemon/poliwrath/anim_front.png and b/graphics/pokemon/poliwrath/anim_front.png differ diff --git a/graphics/pokemon/poliwrath/front.png b/graphics/pokemon/poliwrath/front.png index f0c1294120ef..dfe5bd56e7dc 100644 Binary files a/graphics/pokemon/poliwrath/front.png and b/graphics/pokemon/poliwrath/front.png differ diff --git a/graphics/pokemon/poliwrath/normal.pal b/graphics/pokemon/poliwrath/normal.pal index c7fe30cbd5e7..e1f44100ad60 100644 --- a/graphics/pokemon/poliwrath/normal.pal +++ b/graphics/pokemon/poliwrath/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 96 136 -128 168 216 -32 56 104 -80 136 192 +82 90 131 +180 189 230 +32 57 90 +115 131 197 16 16 16 -248 248 248 -200 208 232 -168 176 200 -72 80 80 -120 120 128 -232 240 248 -144 160 168 +255 255 255 +213 213 222 +189 189 189 +82 82 82 +123 123 123 +232 232 248 +164 164 164 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/ponyta/anim_front.png b/graphics/pokemon/ponyta/anim_front.png index 9acfb59e268a..d46f4d1637c1 100644 Binary files a/graphics/pokemon/ponyta/anim_front.png and b/graphics/pokemon/ponyta/anim_front.png differ diff --git a/graphics/pokemon/ponyta/front.png b/graphics/pokemon/ponyta/front.png index 1642342525df..5e60ecaecb2d 100644 Binary files a/graphics/pokemon/ponyta/front.png and b/graphics/pokemon/ponyta/front.png differ diff --git a/graphics/pokemon/ponyta/normal.pal b/graphics/pokemon/ponyta/normal.pal index 83729cebe40d..d2af3d8c90a5 100644 --- a/graphics/pokemon/ponyta/normal.pal +++ b/graphics/pokemon/ponyta/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -232 80 40 -240 176 24 -248 216 80 -176 56 56 -136 112 80 -96 80 48 -248 240 200 +230 90 41 +255 156 24 +255 222 82 +238 49 49 +139 82 49 +115 49 49 +255 238 205 16 16 16 160 72 72 -224 208 144 -184 168 112 -248 248 248 -32 64 112 -88 120 168 -152 176 224 +230 205 139 +197 156 106 +255 255 255 +65 74 131 +115 123 164 +197 197 213 diff --git a/graphics/pokemon/poochyena/anim_front.png b/graphics/pokemon/poochyena/anim_front.png index 236e6cd26b64..46b6da0d1752 100644 Binary files a/graphics/pokemon/poochyena/anim_front.png and b/graphics/pokemon/poochyena/anim_front.png differ diff --git a/graphics/pokemon/poochyena/front.png b/graphics/pokemon/poochyena/front.png index 4050b67a416f..03cc345b06c9 100644 Binary files a/graphics/pokemon/poochyena/front.png and b/graphics/pokemon/poochyena/front.png differ diff --git a/graphics/pokemon/poochyena/normal.pal b/graphics/pokemon/poochyena/normal.pal index 46106af3a87a..39e07462ab2d 100644 --- a/graphics/pokemon/poochyena/normal.pal +++ b/graphics/pokemon/poochyena/normal.pal @@ -7,8 +7,8 @@ JASC-PAL 184 192 192 144 152 160 48 56 56 -184 152 48 -248 208 104 +176 176 32 +240 240 88 104 24 40 248 248 248 184 40 64 diff --git a/graphics/pokemon/porygon/anim_front.png b/graphics/pokemon/porygon/anim_front.png index d3e88d2b3b45..bd6c3310338f 100644 Binary files a/graphics/pokemon/porygon/anim_front.png and b/graphics/pokemon/porygon/anim_front.png differ diff --git a/graphics/pokemon/porygon/front.png b/graphics/pokemon/porygon/front.png index ee054bf4f3fb..52d47ce11b97 100644 Binary files a/graphics/pokemon/porygon/front.png and b/graphics/pokemon/porygon/front.png differ diff --git a/graphics/pokemon/porygon/normal.pal b/graphics/pokemon/porygon/normal.pal index 5dc5232da48f..6993dda1e13a 100644 --- a/graphics/pokemon/porygon/normal.pal +++ b/graphics/pokemon/porygon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 64 72 -16 16 8 -232 88 104 -248 208 216 -248 168 184 +184 48 80 +0 0 0 +248 96 96 +240 208 192 +232 168 152 248 248 248 192 192 192 -32 80 88 -56 128 136 -160 224 232 -56 176 184 -104 32 40 +8 88 112 +0 120 144 +136 208 232 +8 168 208 +120 40 64 120 120 128 88 184 224 0 0 0 diff --git a/graphics/pokemon/porygon2/anim_front.png b/graphics/pokemon/porygon2/anim_front.png index e85aa8307d49..566ebfecb875 100644 Binary files a/graphics/pokemon/porygon2/anim_front.png and b/graphics/pokemon/porygon2/anim_front.png differ diff --git a/graphics/pokemon/porygon2/front.png b/graphics/pokemon/porygon2/front.png index cbf576553640..84f153fc72d9 100644 Binary files a/graphics/pokemon/porygon2/front.png and b/graphics/pokemon/porygon2/front.png differ diff --git a/graphics/pokemon/porygon2/normal.pal b/graphics/pokemon/porygon2/normal.pal index ff5557ac9701..3b164bd13ef0 100644 --- a/graphics/pokemon/porygon2/normal.pal +++ b/graphics/pokemon/porygon2/normal.pal @@ -3,14 +3,14 @@ JASC-PAL 16 152 208 160 160 56 88 -232 88 120 +232 88 96 88 48 56 -56 112 160 -240 152 168 +48 112 152 +248 144 176 248 248 248 -144 208 240 -72 160 200 -40 72 112 +136 216 248 +72 152 216 +40 56 96 16 16 16 192 208 232 104 104 120 diff --git a/graphics/pokemon/porygon_z/anim_front.png b/graphics/pokemon/porygon_z/anim_front.png index 7d6b66fc36b6..6ec9f0d12147 100644 Binary files a/graphics/pokemon/porygon_z/anim_front.png and b/graphics/pokemon/porygon_z/anim_front.png differ diff --git a/graphics/pokemon/porygon_z/front.png b/graphics/pokemon/porygon_z/front.png index 71280133fa3b..1f39bffa578b 100644 Binary files a/graphics/pokemon/porygon_z/front.png and b/graphics/pokemon/porygon_z/front.png differ diff --git a/graphics/pokemon/porygon_z/normal.pal b/graphics/pokemon/porygon_z/normal.pal index a4c0318331d7..1f4f3129cc81 100644 --- a/graphics/pokemon/porygon_z/normal.pal +++ b/graphics/pokemon/porygon_z/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 32 48 -160 48 72 -224 112 120 +88 56 72 +144 64 104 +232 88 96 16 16 16 -208 80 96 -240 160 152 +184 72 104 +248 144 176 248 248 248 -32 80 104 -48 120 152 -248 208 112 -160 208 208 -104 176 192 -104 88 72 -184 144 64 +48 56 96 +48 112 152 +248 208 96 +136 208 248 +72 152 208 +96 96 64 +176 144 72 0 0 0 diff --git a/graphics/pokemon/primeape/anim_front.png b/graphics/pokemon/primeape/anim_front.png index a06385df1fba..dbb5d7f0d926 100644 Binary files a/graphics/pokemon/primeape/anim_front.png and b/graphics/pokemon/primeape/anim_front.png differ diff --git a/graphics/pokemon/primeape/front.png b/graphics/pokemon/primeape/front.png index 77f95f5ee36e..199c8ff23da9 100644 Binary files a/graphics/pokemon/primeape/front.png and b/graphics/pokemon/primeape/front.png differ diff --git a/graphics/pokemon/primeape/normal.pal b/graphics/pokemon/primeape/normal.pal index 8690860e93d8..015a68508115 100644 --- a/graphics/pokemon/primeape/normal.pal +++ b/graphics/pokemon/primeape/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 48 48 -144 96 96 -192 144 104 -16 16 16 -96 64 48 -240 208 192 -64 64 64 -208 176 152 -112 112 112 -248 240 224 -200 136 152 +90 49 0 +156 106 106 +205 139 90 +0 0 0 +98 74 32 +255 230 180 +65 65 65 +230 189 156 +123 123 123 +255 255 213 +255 148 90 248 248 248 -176 112 136 -240 168 200 +189 74 49 +255 148 90 224 176 136 diff --git a/graphics/pokemon/prinplup/anim_front.png b/graphics/pokemon/prinplup/anim_front.png index fd19649e184f..b4180798f8be 100644 Binary files a/graphics/pokemon/prinplup/anim_front.png and b/graphics/pokemon/prinplup/anim_front.png differ diff --git a/graphics/pokemon/prinplup/front.png b/graphics/pokemon/prinplup/front.png index 9dd05921af4f..a4b84554dda4 100644 Binary files a/graphics/pokemon/prinplup/front.png and b/graphics/pokemon/prinplup/front.png differ diff --git a/graphics/pokemon/prinplup/normal.pal b/graphics/pokemon/prinplup/normal.pal index 8148637dd83c..ce088843cdba 100644 --- a/graphics/pokemon/prinplup/normal.pal +++ b/graphics/pokemon/prinplup/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 136 40 -128 104 32 -248 216 128 -232 184 80 +184 136 104 +120 80 64 +248 224 128 +232 200 96 16 16 16 -32 56 104 -48 88 144 -112 160 168 -144 200 208 +32 64 104 +32 88 144 +96 152 240 +152 200 248 216 232 248 248 248 248 56 120 176 -224 216 208 -120 176 184 -72 104 120 +184 200 216 +128 176 248 +0 0 0 diff --git a/graphics/pokemon/probopass/anim_front.png b/graphics/pokemon/probopass/anim_front.png index b6e8b7b80d7c..bcca97230a13 100644 Binary files a/graphics/pokemon/probopass/anim_front.png and b/graphics/pokemon/probopass/anim_front.png differ diff --git a/graphics/pokemon/probopass/front.png b/graphics/pokemon/probopass/front.png index 78303af59ddd..21916b3762d0 100644 Binary files a/graphics/pokemon/probopass/front.png and b/graphics/pokemon/probopass/front.png differ diff --git a/graphics/pokemon/probopass/normal.pal b/graphics/pokemon/probopass/normal.pal index fa756aabec42..6a4d6d266e57 100644 --- a/graphics/pokemon/probopass/normal.pal +++ b/graphics/pokemon/probopass/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 48 48 +102 48 40 16 16 16 -224 136 136 -200 88 88 -144 64 64 -56 48 48 +232 120 136 +224 88 96 +184 48 80 +40 56 72 192 200 216 248 248 248 -48 72 104 -72 104 136 -144 192 224 -88 136 176 -120 160 184 -80 72 72 +24 72 128 +56 96 168 +128 176 248 +88 120 208 +112 152 232 +56 72 88 0 0 0 diff --git a/graphics/pokemon/psyduck/anim_front.png b/graphics/pokemon/psyduck/anim_front.png index 7512a86cce30..0b89ba3742e9 100644 Binary files a/graphics/pokemon/psyduck/anim_front.png and b/graphics/pokemon/psyduck/anim_front.png differ diff --git a/graphics/pokemon/psyduck/front.png b/graphics/pokemon/psyduck/front.png index f9f2961ae33b..523d33781499 100644 Binary files a/graphics/pokemon/psyduck/front.png and b/graphics/pokemon/psyduck/front.png differ diff --git a/graphics/pokemon/psyduck/normal.pal b/graphics/pokemon/psyduck/normal.pal index 2add9047806a..7e2179a0b27c 100644 --- a/graphics/pokemon/psyduck/normal.pal +++ b/graphics/pokemon/psyduck/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 120 120 +123 123 123 16 16 16 -136 96 48 -224 168 96 -248 208 128 -248 224 168 -192 176 144 -248 248 248 -128 104 72 -248 232 208 -232 208 176 -0 0 0 +148 90 16 +230 164 82 +255 213 74 +255 230 164 +222 180 82 +255 255 255 +131 90 0 +255 238 189 +246 222 139 +248 232 184 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/pupitar/anim_front.png b/graphics/pokemon/pupitar/anim_front.png index cb7cffbfa470..c6e09e2d9c61 100644 Binary files a/graphics/pokemon/pupitar/anim_front.png and b/graphics/pokemon/pupitar/anim_front.png differ diff --git a/graphics/pokemon/pupitar/front.png b/graphics/pokemon/pupitar/front.png index 9cd2257d1adf..cc7fda7150e1 100644 Binary files a/graphics/pokemon/pupitar/front.png and b/graphics/pokemon/pupitar/front.png differ diff --git a/graphics/pokemon/pupitar/normal.pal b/graphics/pokemon/pupitar/normal.pal index 256d175bf7dd..08f030422a26 100644 --- a/graphics/pokemon/pupitar/normal.pal +++ b/graphics/pokemon/pupitar/normal.pal @@ -2,14 +2,14 @@ JASC-PAL 0100 16 248 160 176 -56 72 112 +64 88 120 16 16 16 -160 176 216 -192 200 224 -120 136 176 -176 168 168 +168 184 216 +208 216 232 +120 144 184 +168 168 168 248 248 248 -176 32 64 +176 64 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/purrloin/anim_front.png b/graphics/pokemon/purrloin/anim_front.png index 466461933fd4..466fc9105473 100644 Binary files a/graphics/pokemon/purrloin/anim_front.png and b/graphics/pokemon/purrloin/anim_front.png differ diff --git a/graphics/pokemon/purrloin/front.png b/graphics/pokemon/purrloin/front.png index 4b01c3f96586..0d329d15c920 100644 Binary files a/graphics/pokemon/purrloin/front.png and b/graphics/pokemon/purrloin/front.png differ diff --git a/graphics/pokemon/purrloin/normal.pal b/graphics/pokemon/purrloin/normal.pal index b897e66e27c7..312600cf097b 100644 --- a/graphics/pokemon/purrloin/normal.pal +++ b/graphics/pokemon/purrloin/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 32 56 -112 80 136 +56 24 64 +120 80 120 16 16 16 -96 48 64 -208 88 152 +96 56 64 +216 112 152 240 232 192 -208 200 144 +216 200 136 248 248 248 -56 160 72 -112 208 112 -80 56 88 -160 144 112 -112 88 80 +8 184 96 +144 248 184 +96 56 104 +176 160 120 +120 104 72 0 0 0 0 0 0 diff --git a/graphics/pokemon/purugly/anim_front.png b/graphics/pokemon/purugly/anim_front.png index 12959a417580..674df91b8d6a 100644 Binary files a/graphics/pokemon/purugly/anim_front.png and b/graphics/pokemon/purugly/anim_front.png differ diff --git a/graphics/pokemon/purugly/front.png b/graphics/pokemon/purugly/front.png index c611eca72d45..4d8a5da49de4 100644 Binary files a/graphics/pokemon/purugly/front.png and b/graphics/pokemon/purugly/front.png differ diff --git a/graphics/pokemon/purugly/normal.pal b/graphics/pokemon/purugly/normal.pal index e7c17667ad9b..4c9f993bd4aa 100644 --- a/graphics/pokemon/purugly/normal.pal +++ b/graphics/pokemon/purugly/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -144 104 168 -96 72 112 -136 152 176 -72 80 96 -184 96 120 -104 112 136 -240 128 160 -168 184 192 -248 240 240 -48 48 80 -176 152 88 -240 200 120 -208 192 192 -176 152 144 +120 88 160 +80 56 104 +128 144 176 +80 88 96 +208 80 136 +104 112 128 +248 120 152 +160 168 192 +232 248 248 +64 64 80 +168 160 112 +248 224 96 +200 200 216 +152 152 184 diff --git a/graphics/pokemon/pyroar/normalf.pal b/graphics/pokemon/pyroar/normalf.pal deleted file mode 100644 index 63998f2958ae..000000000000 --- a/graphics/pokemon/pyroar/normalf.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -152 208 160 -176 128 32 -120 0 0 -248 208 88 -224 80 64 -176 40 24 -32 24 24 -0 0 0 -88 72 64 -56 40 48 -176 128 80 -96 72 40 -232 176 112 -248 248 248 -0 168 192 -248 216 168 diff --git a/graphics/pokemon/pyroar/shinyf.pal b/graphics/pokemon/pyroar/shinyf.pal deleted file mode 100644 index d39b2ea820eb..000000000000 --- a/graphics/pokemon/pyroar/shinyf.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -152 208 160 -184 96 32 -112 0 0 -248 168 88 -224 64 48 -176 40 0 -56 40 32 -0 0 0 -120 104 80 -72 56 48 -168 136 96 -96 72 56 -224 192 144 -248 248 248 -192 64 40 -248 216 168 diff --git a/graphics/pokemon/quagsire/anim_front.png b/graphics/pokemon/quagsire/anim_front.png index c9d23bfb1eec..a940e3378c5b 100644 Binary files a/graphics/pokemon/quagsire/anim_front.png and b/graphics/pokemon/quagsire/anim_front.png differ diff --git a/graphics/pokemon/quagsire/back.png b/graphics/pokemon/quagsire/back.png index 249cd0b469c8..b961bbb22b39 100644 Binary files a/graphics/pokemon/quagsire/back.png and b/graphics/pokemon/quagsire/back.png differ diff --git a/graphics/pokemon/quagsire/front.png b/graphics/pokemon/quagsire/front.png index ac3c92a83c61..41b4ad26b3e7 100644 Binary files a/graphics/pokemon/quagsire/front.png and b/graphics/pokemon/quagsire/front.png differ diff --git a/graphics/pokemon/quagsire/normal.pal b/graphics/pokemon/quagsire/normal.pal index 4935b2f88bd5..fe56a925d0b6 100644 --- a/graphics/pokemon/quagsire/normal.pal +++ b/graphics/pokemon/quagsire/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 96 112 -104 152 176 -128 208 232 -168 224 240 +64 80 128 +96 152 184 +128 208 240 +168 224 248 240 240 240 16 16 16 -16 40 48 -48 120 136 -40 72 80 -104 88 160 +24 64 56 +48 144 160 +24 88 104 +104 88 136 96 120 160 -135 80 78 -221 128 128 +168 16 0 +232 64 48 0 0 0 0 0 0 diff --git a/graphics/pokemon/quilava/anim_front.png b/graphics/pokemon/quilava/anim_front.png index c986379fc497..1c2709eb4fa1 100644 Binary files a/graphics/pokemon/quilava/anim_front.png and b/graphics/pokemon/quilava/anim_front.png differ diff --git a/graphics/pokemon/quilava/front.png b/graphics/pokemon/quilava/front.png index ec04cca18d7d..061f319982b8 100644 Binary files a/graphics/pokemon/quilava/front.png and b/graphics/pokemon/quilava/front.png differ diff --git a/graphics/pokemon/quilava/normal.pal b/graphics/pokemon/quilava/normal.pal index 7296a78f76f8..c6f175d1e4ff 100644 --- a/graphics/pokemon/quilava/normal.pal +++ b/graphics/pokemon/quilava/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -168 40 32 -240 104 24 -240 208 32 -248 144 16 -48 104 112 -40 72 80 -96 144 128 +216 0 0 +248 88 0 +248 208 0 +248 152 0 +40 104 104 +40 64 96 +56 136 144 16 16 16 -136 16 32 +168 0 0 248 248 248 -176 144 96 -248 216 160 -216 176 120 -112 88 48 +176 152 80 +248 232 160 +224 200 104 +136 96 32 16 48 56 diff --git a/graphics/pokemon/qwilfish/anim_front.png b/graphics/pokemon/qwilfish/anim_front.png index 6849e809ebff..3d12f6a11651 100644 Binary files a/graphics/pokemon/qwilfish/anim_front.png and b/graphics/pokemon/qwilfish/anim_front.png differ diff --git a/graphics/pokemon/qwilfish/front.png b/graphics/pokemon/qwilfish/front.png index 11cf43c4aee7..6fd19c1346fb 100644 Binary files a/graphics/pokemon/qwilfish/front.png and b/graphics/pokemon/qwilfish/front.png differ diff --git a/graphics/pokemon/qwilfish/normal.pal b/graphics/pokemon/qwilfish/normal.pal index 09aba772e07c..ce431cfb9242 100644 --- a/graphics/pokemon/qwilfish/normal.pal +++ b/graphics/pokemon/qwilfish/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 56 56 -104 168 168 +24 72 80 +112 168 176 16 16 16 -56 128 128 -48 88 88 +64 128 144 +56 96 96 192 200 200 248 248 248 -120 48 56 -248 168 176 -184 104 120 -216 232 152 -192 200 128 +144 0 0 +248 160 144 +208 80 96 +216 216 144 +192 192 120 160 168 104 -80 80 40 +104 80 48 0 0 0 diff --git a/graphics/pokemon/raichu/anim_front.png b/graphics/pokemon/raichu/anim_front.png index 256e22ecc687..792c3ffa63ea 100644 Binary files a/graphics/pokemon/raichu/anim_front.png and b/graphics/pokemon/raichu/anim_front.png differ diff --git a/graphics/pokemon/raichu/front.png b/graphics/pokemon/raichu/front.png index 8f0753c3e903..3b50a2318422 100644 Binary files a/graphics/pokemon/raichu/front.png and b/graphics/pokemon/raichu/front.png differ diff --git a/graphics/pokemon/raichu/normal.pal b/graphics/pokemon/raichu/normal.pal index c197eb9594ba..6594ba18bbd2 100644 --- a/graphics/pokemon/raichu/normal.pal +++ b/graphics/pokemon/raichu/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 32 16 -136 80 32 -16 16 16 -96 56 32 -208 168 80 -96 64 32 -248 216 104 -248 168 56 -192 136 48 -248 232 208 -144 104 32 -160 88 104 -224 184 128 -96 96 104 -56 56 64 +90 41 41 +139 98 16 +0 0 0 +115 65 49 +255 189 0 +148 65 65 +255 222 90 +246 172 41 +222 123 49 +255 238 213 +189 90 49 +189 24 8 +255 213 90 +98 98 106 +57 57 65 diff --git a/graphics/pokemon/raikou/anim_front.png b/graphics/pokemon/raikou/anim_front.png index 301932fa36d3..070a852664a5 100644 Binary files a/graphics/pokemon/raikou/anim_front.png and b/graphics/pokemon/raikou/anim_front.png differ diff --git a/graphics/pokemon/raikou/front.png b/graphics/pokemon/raikou/front.png index 20db4c97b6bc..b729a2c3758f 100644 Binary files a/graphics/pokemon/raikou/front.png and b/graphics/pokemon/raikou/front.png differ diff --git a/graphics/pokemon/raikou/normal.pal b/graphics/pokemon/raikou/normal.pal index ab4065e9b524..94fb14e43531 100644 --- a/graphics/pokemon/raikou/normal.pal +++ b/graphics/pokemon/raikou/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 96 120 -112 104 104 -192 136 160 -96 48 72 +128 104 160 +104 104 104 +184 136 192 +80 40 104 248 248 248 -168 152 152 +160 160 160 16 16 16 -200 192 216 -136 208 224 -192 64 64 -240 192 56 -184 152 40 -120 96 24 -248 216 120 +208 208 208 +152 208 248 +192 0 0 +248 200 64 +208 152 40 +136 96 16 +248 232 144 88 88 96 diff --git a/graphics/pokemon/ralts/anim_front.png b/graphics/pokemon/ralts/anim_front.png index 241a51338608..0e5f893b5d50 100644 Binary files a/graphics/pokemon/ralts/anim_front.png and b/graphics/pokemon/ralts/anim_front.png differ diff --git a/graphics/pokemon/ralts/front.png b/graphics/pokemon/ralts/front.png index b3e0d845e911..6831c3897e27 100644 Binary files a/graphics/pokemon/ralts/front.png and b/graphics/pokemon/ralts/front.png differ diff --git a/graphics/pokemon/ralts/normal.pal b/graphics/pokemon/ralts/normal.pal index 0074af16141e..c859137ae280 100644 --- a/graphics/pokemon/ralts/normal.pal +++ b/graphics/pokemon/ralts/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -112 48 56 -248 144 152 -176 96 104 +128 40 72 +248 120 144 +208 72 112 16 16 16 -104 168 88 -56 112 56 -160 224 152 -112 200 112 -184 192 232 -120 128 176 +112 184 112 +48 120 64 +176 240 144 +136 224 136 +200 200 224 +152 144 192 240 240 248 120 136 176 -0 0 0 -0 0 0 -0 0 0 +128 40 72 +248 120 144 +208 72 112 diff --git a/graphics/pokemon/rampardos/anim_front.png b/graphics/pokemon/rampardos/anim_front.png index d00352823e4d..3c912158e364 100644 Binary files a/graphics/pokemon/rampardos/anim_front.png and b/graphics/pokemon/rampardos/anim_front.png differ diff --git a/graphics/pokemon/rampardos/front.png b/graphics/pokemon/rampardos/front.png index e81e6f927c17..09fa06dfbabc 100644 Binary files a/graphics/pokemon/rampardos/front.png and b/graphics/pokemon/rampardos/front.png differ diff --git a/graphics/pokemon/rampardos/normal.pal b/graphics/pokemon/rampardos/normal.pal index b2a2910d7428..2857896318d1 100644 --- a/graphics/pokemon/rampardos/normal.pal +++ b/graphics/pokemon/rampardos/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 144 144 +120 128 128 248 248 248 16 16 16 -208 208 192 -56 128 192 +184 208 216 +56 128 208 32 64 96 -56 56 64 -48 96 144 -128 176 200 -120 120 128 -88 80 88 -160 152 152 -232 112 96 -184 56 48 -152 80 80 +64 64 64 +32 88 160 +112 168 232 +128 128 120 +96 96 88 +152 152 144 +240 80 96 +176 40 48 +168 32 32 diff --git a/graphics/pokemon/rapidash/anim_front.png b/graphics/pokemon/rapidash/anim_front.png index ab45abb0f201..c4ee2d83f1a6 100644 Binary files a/graphics/pokemon/rapidash/anim_front.png and b/graphics/pokemon/rapidash/anim_front.png differ diff --git a/graphics/pokemon/rapidash/front.png b/graphics/pokemon/rapidash/front.png index 6d66933beace..d0fb296f50a2 100644 Binary files a/graphics/pokemon/rapidash/front.png and b/graphics/pokemon/rapidash/front.png differ diff --git a/graphics/pokemon/rapidash/normal.pal b/graphics/pokemon/rapidash/normal.pal index bdcccb3c0b98..a55c358abd7f 100644 --- a/graphics/pokemon/rapidash/normal.pal +++ b/graphics/pokemon/rapidash/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -240 176 24 -224 96 64 -208 40 32 -248 216 80 -96 80 48 -248 240 200 +255 156 24 +230 98 41 +222 16 16 +255 222 82 +139 82 49 +255 230 197 16 16 16 -176 160 120 -224 200 144 +197 148 106 +238 197 139 168 72 64 -152 176 224 -248 248 248 +197 197 197 +255 255 255 248 160 152 -88 120 168 -32 64 112 +115 123 131 +65 74 82 diff --git a/graphics/pokemon/raticate/anim_front.png b/graphics/pokemon/raticate/anim_front.png index 52b2096eded7..c6d38b5c2256 100644 Binary files a/graphics/pokemon/raticate/anim_front.png and b/graphics/pokemon/raticate/anim_front.png differ diff --git a/graphics/pokemon/raticate/back.png b/graphics/pokemon/raticate/back.png index e6c252a2e990..dadf090ba067 100644 Binary files a/graphics/pokemon/raticate/back.png and b/graphics/pokemon/raticate/back.png differ diff --git a/graphics/pokemon/raticate/front.png b/graphics/pokemon/raticate/front.png index b86a81e21f34..3d2d33ea5c7d 100644 Binary files a/graphics/pokemon/raticate/front.png and b/graphics/pokemon/raticate/front.png differ diff --git a/graphics/pokemon/raticate/normal.pal b/graphics/pokemon/raticate/normal.pal index 572654b6f481..b02c703c29c6 100644 --- a/graphics/pokemon/raticate/normal.pal +++ b/graphics/pokemon/raticate/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 88 56 -176 136 88 -224 176 128 +148 82 16 +197 131 82 +255 205 156 16 16 16 -104 56 0 -192 128 48 -152 96 40 -216 160 88 -184 192 200 -248 248 248 -128 88 40 -248 216 168 -208 168 120 -112 112 112 -176 136 88 +106 57 0 +197 148 57 +164 115 41 +222 180 74 +180 180 180 +255 255 255 +131 90 41 +246 246 164 +238 205 115 +115 115 115 +164 131 49 diff --git a/graphics/pokemon/rattata/anim_front.png b/graphics/pokemon/rattata/anim_front.png index 312339af27cd..47d2ebff134e 100644 Binary files a/graphics/pokemon/rattata/anim_front.png and b/graphics/pokemon/rattata/anim_front.png differ diff --git a/graphics/pokemon/rattata/front.png b/graphics/pokemon/rattata/front.png index d83960d42d62..eebe101f9a38 100644 Binary files a/graphics/pokemon/rattata/front.png and b/graphics/pokemon/rattata/front.png differ diff --git a/graphics/pokemon/rattata/normal.pal b/graphics/pokemon/rattata/normal.pal index 0a157b921dfb..8c69af29f783 100644 --- a/graphics/pokemon/rattata/normal.pal +++ b/graphics/pokemon/rattata/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 80 136 -168 112 184 -184 144 208 -72 48 80 +139 74 139 +180 115 189 +213 148 213 +74 41 65 16 16 16 -208 184 152 -240 216 176 -200 200 200 -152 120 96 -216 88 80 -248 248 248 -184 48 64 -104 88 64 -88 88 88 -120 80 136 +205 172 98 +238 222 180 +205 205 205 +164 115 8 +230 90 115 +255 255 255 +164 24 57 +98 74 8 +90 90 90 +0 0 0 diff --git a/graphics/pokemon/rayquaza/anim_front.png b/graphics/pokemon/rayquaza/anim_front.png index 421846fee72e..c1c78f9a1e02 100644 Binary files a/graphics/pokemon/rayquaza/anim_front.png and b/graphics/pokemon/rayquaza/anim_front.png differ diff --git a/graphics/pokemon/rayquaza/front.png b/graphics/pokemon/rayquaza/front.png index 2c6b78b54156..57123a773dc9 100644 Binary files a/graphics/pokemon/rayquaza/front.png and b/graphics/pokemon/rayquaza/front.png differ diff --git a/graphics/pokemon/rayquaza/normal.pal b/graphics/pokemon/rayquaza/normal.pal index 8e3925548b81..550aeed437a6 100644 --- a/graphics/pokemon/rayquaza/normal.pal +++ b/graphics/pokemon/rayquaza/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -40 128 80 -16 64 40 -152 208 176 -16 16 16 -104 176 136 -112 40 48 -216 96 104 -248 248 120 -200 160 72 -152 112 120 +72 128 112 +40 80 64 +144 216 176 +0 0 0 +88 184 136 +112 40 56 +224 80 112 +248 240 0 +200 184 0 +152 40 80 248 248 248 -200 144 160 -192 208 232 +184 96 136 +216 208 232 0 0 0 0 0 0 diff --git a/graphics/pokemon/regice/anim_front.png b/graphics/pokemon/regice/anim_front.png index 2b75a7a83c57..7e28e59c4c13 100644 Binary files a/graphics/pokemon/regice/anim_front.png and b/graphics/pokemon/regice/anim_front.png differ diff --git a/graphics/pokemon/regice/front.png b/graphics/pokemon/regice/front.png index c569fed4a300..e369c63446ed 100644 Binary files a/graphics/pokemon/regice/front.png and b/graphics/pokemon/regice/front.png differ diff --git a/graphics/pokemon/regice/normal.pal b/graphics/pokemon/regice/normal.pal index 25e85b77db03..886f453c77fc 100644 --- a/graphics/pokemon/regice/normal.pal +++ b/graphics/pokemon/regice/normal.pal @@ -4,15 +4,15 @@ JASC-PAL 152 208 160 104 176 208 56 104 136 -64 136 160 -24 24 24 -192 232 248 -32 72 88 -144 208 232 -232 240 240 -248 240 200 -240 216 120 -208 176 64 +88 128 168 +0 0 0 +184 232 248 +40 56 120 +152 200 248 +248 248 248 +248 248 168 +248 224 0 +200 176 32 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/regigigas/anim_front.png b/graphics/pokemon/regigigas/anim_front.png index e040ff3f3934..125b269d1bfc 100644 Binary files a/graphics/pokemon/regigigas/anim_front.png and b/graphics/pokemon/regigigas/anim_front.png differ diff --git a/graphics/pokemon/regigigas/front.png b/graphics/pokemon/regigigas/front.png index d064a5e88c46..7cb87a1ccf84 100644 Binary files a/graphics/pokemon/regigigas/front.png and b/graphics/pokemon/regigigas/front.png differ diff --git a/graphics/pokemon/regigigas/normal.pal b/graphics/pokemon/regigigas/normal.pal index 7137dc6868e9..4db68a82566a 100644 --- a/graphics/pokemon/regigigas/normal.pal +++ b/graphics/pokemon/regigigas/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 88 40 -56 128 80 -184 152 64 -240 208 112 +120 96 32 +32 128 104 +200 152 80 +248 216 88 24 24 32 -64 168 112 +72 160 96 32 80 48 -240 240 248 -64 56 56 +248 248 248 +56 72 88 104 120 136 -208 200 208 -168 160 176 +216 200 216 +168 168 200 232 64 40 -32 176 168 -128 120 120 +88 200 248 +104 120 136 diff --git a/graphics/pokemon/regirock/anim_front.png b/graphics/pokemon/regirock/anim_front.png index 341f6ccf9f09..88bfa4ff08d2 100644 Binary files a/graphics/pokemon/regirock/anim_front.png and b/graphics/pokemon/regirock/anim_front.png differ diff --git a/graphics/pokemon/regirock/front.png b/graphics/pokemon/regirock/front.png index 95c25b5fa0fa..4ba1f41d8005 100644 Binary files a/graphics/pokemon/regirock/front.png and b/graphics/pokemon/regirock/front.png differ diff --git a/graphics/pokemon/regirock/normal.pal b/graphics/pokemon/regirock/normal.pal index 1ffdbb844ab5..a921fc1907fd 100644 --- a/graphics/pokemon/regirock/normal.pal +++ b/graphics/pokemon/regirock/normal.pal @@ -3,16 +3,16 @@ JASC-PAL 16 152 208 160 24 24 24 -120 56 40 -192 120 88 +136 56 32 +216 120 80 232 152 136 -152 88 56 -72 40 40 -224 208 200 -136 104 112 -176 160 152 -168 136 136 -248 160 104 +184 72 48 +56 48 56 +216 200 200 +144 112 128 +168 152 160 +160 144 144 +240 176 144 192 176 168 0 0 0 0 0 0 diff --git a/graphics/pokemon/registeel/anim_front.png b/graphics/pokemon/registeel/anim_front.png index 28169d5ac67a..acf975f9ffe7 100644 Binary files a/graphics/pokemon/registeel/anim_front.png and b/graphics/pokemon/registeel/anim_front.png differ diff --git a/graphics/pokemon/registeel/front.png b/graphics/pokemon/registeel/front.png index 29bbb7388076..844ab20c0788 100644 Binary files a/graphics/pokemon/registeel/front.png and b/graphics/pokemon/registeel/front.png differ diff --git a/graphics/pokemon/registeel/normal.pal b/graphics/pokemon/registeel/normal.pal index 80390a06bae8..e69a7bf26106 100644 --- a/graphics/pokemon/registeel/normal.pal +++ b/graphics/pokemon/registeel/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 112 136 -64 56 72 +128 128 120 +72 72 72 24 24 24 -176 160 176 -224 216 224 -136 128 128 +176 168 168 +216 216 216 +128 136 128 248 248 248 -168 160 160 -208 192 208 -248 152 152 -224 72 80 -80 72 80 +184 184 184 +208 200 208 +248 152 160 +248 64 64 +72 88 88 56 64 80 0 0 0 0 0 0 diff --git a/graphics/pokemon/relicanth/anim_front.png b/graphics/pokemon/relicanth/anim_front.png index a56d7aeeabbe..575db345cbe7 100644 Binary files a/graphics/pokemon/relicanth/anim_front.png and b/graphics/pokemon/relicanth/anim_front.png differ diff --git a/graphics/pokemon/relicanth/front.png b/graphics/pokemon/relicanth/front.png index 55f47eba23db..552b2421d56e 100644 Binary files a/graphics/pokemon/relicanth/front.png and b/graphics/pokemon/relicanth/front.png differ diff --git a/graphics/pokemon/relicanth/normal.pal b/graphics/pokemon/relicanth/normal.pal index 269e3f960bc6..a8d6118eec03 100644 --- a/graphics/pokemon/relicanth/normal.pal +++ b/graphics/pokemon/relicanth/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 72 56 -216 184 160 -184 160 136 +104 80 64 +232 200 160 +200 176 144 80 64 56 -16 16 16 +0 0 0 80 64 64 -176 160 136 -144 112 80 -144 120 120 -48 32 40 -160 136 112 -240 208 176 -112 96 96 -216 80 96 -158 101 133 +176 152 152 +136 112 72 +152 128 120 +56 40 40 +176 144 104 +248 232 200 +120 104 96 +232 72 112 +168 32 0 diff --git a/graphics/pokemon/remoraid/anim_front.png b/graphics/pokemon/remoraid/anim_front.png index 440f044bf3fa..daf58f3c395c 100644 Binary files a/graphics/pokemon/remoraid/anim_front.png and b/graphics/pokemon/remoraid/anim_front.png differ diff --git a/graphics/pokemon/remoraid/front.png b/graphics/pokemon/remoraid/front.png index f42ae8f122ff..8cf4b866415b 100644 Binary files a/graphics/pokemon/remoraid/front.png and b/graphics/pokemon/remoraid/front.png differ diff --git a/graphics/pokemon/remoraid/normal.pal b/graphics/pokemon/remoraid/normal.pal index aa4a9d29f3da..45c205c22c5e 100644 --- a/graphics/pokemon/remoraid/normal.pal +++ b/graphics/pokemon/remoraid/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 248 160 176 -72 136 128 -56 96 88 -136 192 168 -216 248 232 -224 232 208 -128 136 152 -168 224 192 +96 136 160 +40 88 128 +128 192 176 +208 240 240 +232 232 248 +128 128 152 +176 216 208 16 16 16 248 248 248 -128 168 144 -184 184 160 +136 168 184 +184 184 200 72 80 96 -104 56 80 +136 16 8 0 0 0 0 0 0 diff --git a/graphics/pokemon/reshiram/anim_front.png b/graphics/pokemon/reshiram/anim_front.png index b9f8df136144..f0bbac2064dc 100644 Binary files a/graphics/pokemon/reshiram/anim_front.png and b/graphics/pokemon/reshiram/anim_front.png differ diff --git a/graphics/pokemon/reshiram/front.png b/graphics/pokemon/reshiram/front.png index 4d5be4a8b3a2..22d7be6e50c2 100644 Binary files a/graphics/pokemon/reshiram/front.png and b/graphics/pokemon/reshiram/front.png differ diff --git a/graphics/pokemon/reshiram/normal.pal b/graphics/pokemon/reshiram/normal.pal index d8fbc1b912df..81a266c504f1 100644 --- a/graphics/pokemon/reshiram/normal.pal +++ b/graphics/pokemon/reshiram/normal.pal @@ -1,17 +1,17 @@ JASC-PAL 0100 16 -152 208 160 +24 24 24 64 72 96 -112 128 168 +112 120 152 0 0 0 -168 192 216 +184 184 216 248 248 248 -208 232 232 -56 176 240 -88 80 96 -168 152 192 -120 104 144 +224 224 232 +56 176 248 +72 72 104 +192 192 216 +120 120 152 208 40 8 248 88 48 248 160 48 diff --git a/graphics/pokemon/reuniclus/anim_front.png b/graphics/pokemon/reuniclus/anim_front.png index d83e335647dc..9f9f38975cf4 100644 Binary files a/graphics/pokemon/reuniclus/anim_front.png and b/graphics/pokemon/reuniclus/anim_front.png differ diff --git a/graphics/pokemon/reuniclus/front.png b/graphics/pokemon/reuniclus/front.png index b1b8f974a5db..d189c0bf4002 100644 Binary files a/graphics/pokemon/reuniclus/front.png and b/graphics/pokemon/reuniclus/front.png differ diff --git a/graphics/pokemon/reuniclus/normal.pal b/graphics/pokemon/reuniclus/normal.pal index 94fac9f68b86..17ed37ea8b05 100644 --- a/graphics/pokemon/reuniclus/normal.pal +++ b/graphics/pokemon/reuniclus/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -56 136 104 -48 104 80 -112 184 136 -96 128 64 -152 176 128 -208 232 184 +64 136 88 +48 96 64 +88 176 120 +72 136 96 +152 184 136 +208 232 192 16 16 16 248 248 248 -224 120 120 -168 96 88 -224 192 136 -168 152 104 -136 88 88 -216 120 120 -184 232 184 +216 96 96 +160 80 80 +216 184 120 +192 160 96 +112 56 56 +192 80 80 +160 224 168 diff --git a/graphics/pokemon/rhydon/anim_front.png b/graphics/pokemon/rhydon/anim_front.png index bb1bca9334f5..bd8e5391e0b3 100644 Binary files a/graphics/pokemon/rhydon/anim_front.png and b/graphics/pokemon/rhydon/anim_front.png differ diff --git a/graphics/pokemon/rhydon/front.png b/graphics/pokemon/rhydon/front.png index 6b21040f2b7d..3c71e500efb6 100644 Binary files a/graphics/pokemon/rhydon/front.png and b/graphics/pokemon/rhydon/front.png differ diff --git a/graphics/pokemon/rhydon/normal.pal b/graphics/pokemon/rhydon/normal.pal index 5424356f22b1..2658775bce25 100644 --- a/graphics/pokemon/rhydon/normal.pal +++ b/graphics/pokemon/rhydon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 112 136 -56 64 80 -152 168 192 +139 139 148 +82 82 90 +197 197 189 16 16 16 -184 200 216 +230 230 222 248 248 248 224 224 216 -104 80 56 -232 200 176 -184 160 128 -128 48 40 -184 88 80 -160 112 128 -216 152 168 -96 64 104 +115 90 49 +255 238 197 +180 164 115 +164 49 16 +230 82 57 +160 48 16 +230 82 57 +115 32 16 diff --git a/graphics/pokemon/rhyhorn/anim_front.png b/graphics/pokemon/rhyhorn/anim_front.png index 2f047251ce44..99cdb4107d0d 100644 Binary files a/graphics/pokemon/rhyhorn/anim_front.png and b/graphics/pokemon/rhyhorn/anim_front.png differ diff --git a/graphics/pokemon/rhyhorn/front.png b/graphics/pokemon/rhyhorn/front.png index 0dbb06a1a1cd..78cb30c3ff4c 100644 Binary files a/graphics/pokemon/rhyhorn/front.png and b/graphics/pokemon/rhyhorn/front.png differ diff --git a/graphics/pokemon/rhyhorn/normal.pal b/graphics/pokemon/rhyhorn/normal.pal index 98b99f009eae..19493646a002 100644 --- a/graphics/pokemon/rhyhorn/normal.pal +++ b/graphics/pokemon/rhyhorn/normal.pal @@ -2,15 +2,15 @@ JASC-PAL 0100 16 152 208 160 -120 136 152 -80 88 112 -192 208 216 -48 48 64 +139 148 156 +98 98 131 +222 230 230 +57 57 82 248 248 248 -152 176 192 +164 189 197 16 16 16 -160 72 64 -88 24 24 +172 57 41 +88 8 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/rhyperior/anim_front.png b/graphics/pokemon/rhyperior/anim_front.png index 1e495e5938e0..3d07661e3f54 100644 Binary files a/graphics/pokemon/rhyperior/anim_front.png and b/graphics/pokemon/rhyperior/anim_front.png differ diff --git a/graphics/pokemon/rhyperior/front.png b/graphics/pokemon/rhyperior/front.png index bebbcbebc0bf..7c20072cf7ae 100644 Binary files a/graphics/pokemon/rhyperior/front.png and b/graphics/pokemon/rhyperior/front.png differ diff --git a/graphics/pokemon/rhyperior/normal.pal b/graphics/pokemon/rhyperior/normal.pal index 180856bd16a6..7a73748cae9c 100644 --- a/graphics/pokemon/rhyperior/normal.pal +++ b/graphics/pokemon/rhyperior/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 128 120 -176 152 160 -80 56 56 -248 248 232 -216 192 208 -112 80 88 +128 104 120 +144 136 168 +56 56 72 +248 248 248 +200 200 224 +88 72 96 16 16 16 -88 40 16 -184 80 32 -224 120 64 +80 48 0 +192 64 0 +240 80 0 160 40 32 -144 64 24 +144 56 0 48 40 48 -160 112 128 +144 56 0 72 48 56 diff --git a/graphics/pokemon/riolu/anim_front.png b/graphics/pokemon/riolu/anim_front.png index a9a658a6e1db..091e0dd92aa5 100644 Binary files a/graphics/pokemon/riolu/anim_front.png and b/graphics/pokemon/riolu/anim_front.png differ diff --git a/graphics/pokemon/riolu/front.png b/graphics/pokemon/riolu/front.png index 4b3fd126a9e0..fbba5f54b6d8 100644 Binary files a/graphics/pokemon/riolu/front.png and b/graphics/pokemon/riolu/front.png differ diff --git a/graphics/pokemon/riolu/normal.pal b/graphics/pokemon/riolu/normal.pal index ce1aff2b5111..e19d06c531bf 100644 --- a/graphics/pokemon/riolu/normal.pal +++ b/graphics/pokemon/riolu/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -40 64 88 -56 112 136 -88 160 184 +16 72 120 +40 112 152 +72 152 232 56 56 56 88 88 88 -160 64 24 -232 88 16 +160 48 48 +216 64 64 248 248 248 -128 120 80 -240 208 136 +136 128 56 +216 192 112 128 128 128 176 176 176 -112 72 80 -232 127 127 +224 104 120 +168 56 80 diff --git a/graphics/pokemon/roggenrola/anim_front.png b/graphics/pokemon/roggenrola/anim_front.png index 4269969b1e7a..6094a9110692 100644 Binary files a/graphics/pokemon/roggenrola/anim_front.png and b/graphics/pokemon/roggenrola/anim_front.png differ diff --git a/graphics/pokemon/roggenrola/front.png b/graphics/pokemon/roggenrola/front.png index 29b11c739e9f..b63929ad291e 100644 Binary files a/graphics/pokemon/roggenrola/front.png and b/graphics/pokemon/roggenrola/front.png differ diff --git a/graphics/pokemon/roggenrola/normal.pal b/graphics/pokemon/roggenrola/normal.pal index 0b7d48cfb4a6..5918cc98ee66 100644 --- a/graphics/pokemon/roggenrola/normal.pal +++ b/graphics/pokemon/roggenrola/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -64 48 32 -16 16 16 -160 120 80 -112 72 48 -24 40 64 -72 96 128 -40 64 96 -104 72 32 -184 136 56 -248 200 104 +56 32 24 +0 0 0 +120 88 72 +88 64 48 +24 32 56 +64 80 136 +40 56 104 +88 64 32 +152 112 16 +248 184 72 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/roselia/anim_front.png b/graphics/pokemon/roselia/anim_front.png index f88bab17d24f..270ab0bf0a99 100644 Binary files a/graphics/pokemon/roselia/anim_front.png and b/graphics/pokemon/roselia/anim_front.png differ diff --git a/graphics/pokemon/roselia/front.png b/graphics/pokemon/roselia/front.png index 71d9f59efd93..ea92a4474cc7 100644 Binary files a/graphics/pokemon/roselia/front.png and b/graphics/pokemon/roselia/front.png differ diff --git a/graphics/pokemon/roselia/normal.pal b/graphics/pokemon/roselia/normal.pal index 8aecad98ec4e..e81a669a7a26 100644 --- a/graphics/pokemon/roselia/normal.pal +++ b/graphics/pokemon/roselia/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -216 216 216 -64 152 72 -144 216 152 -40 80 40 -104 192 104 +128 128 248 +88 144 80 +160 216 112 +56 80 40 +112 192 88 16 16 16 216 240 176 160 192 144 -152 72 80 -248 168 168 -216 120 128 -200 160 88 -16 96 136 -120 200 240 -248 224 120 -48 152 208 +160 48 72 +248 160 184 +240 88 128 +200 160 32 +40 88 144 +96 184 248 +240 224 72 +80 144 208 diff --git a/graphics/pokemon/roserade/anim_front.png b/graphics/pokemon/roserade/anim_front.png index d83256932960..b34276d0eff7 100644 Binary files a/graphics/pokemon/roserade/anim_front.png and b/graphics/pokemon/roserade/anim_front.png differ diff --git a/graphics/pokemon/roserade/front.png b/graphics/pokemon/roserade/front.png index 016046f4e08c..34c283b96777 100644 Binary files a/graphics/pokemon/roserade/front.png and b/graphics/pokemon/roserade/front.png differ diff --git a/graphics/pokemon/roserade/normal.pal b/graphics/pokemon/roserade/normal.pal index 64b594ca524b..329cc52ac062 100644 --- a/graphics/pokemon/roserade/normal.pal +++ b/graphics/pokemon/roserade/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 120 208 240 -104 160 136 -240 240 248 -184 200 224 -40 72 48 -64 120 80 +112 152 136 +248 248 248 +208 200 216 +40 80 80 +40 120 80 0 0 0 -88 160 104 -224 200 104 -168 64 88 -112 48 64 -240 96 120 -152 216 168 -56 80 120 -104 136 208 -64 96 176 +56 152 96 +240 208 72 +184 64 104 +120 56 88 +248 96 128 +160 224 168 +64 72 128 +80 112 232 +72 88 184 diff --git a/graphics/pokemon/rotom/anim_front.png b/graphics/pokemon/rotom/anim_front.png index 4f680637e9d1..1579cd38651b 100644 Binary files a/graphics/pokemon/rotom/anim_front.png and b/graphics/pokemon/rotom/anim_front.png differ diff --git a/graphics/pokemon/rotom/fan/anim_front.png b/graphics/pokemon/rotom/fan/anim_front.png index b73f33893bbb..aea9383a631f 100644 Binary files a/graphics/pokemon/rotom/fan/anim_front.png and b/graphics/pokemon/rotom/fan/anim_front.png differ diff --git a/graphics/pokemon/rotom/fan/front.png b/graphics/pokemon/rotom/fan/front.png index ddb10b0b825d..30f58175ea80 100644 Binary files a/graphics/pokemon/rotom/fan/front.png and b/graphics/pokemon/rotom/fan/front.png differ diff --git a/graphics/pokemon/rotom/fan/normal.pal b/graphics/pokemon/rotom/fan/normal.pal index 21ca78cf36ac..dbeac936789c 100644 --- a/graphics/pokemon/rotom/fan/normal.pal +++ b/graphics/pokemon/rotom/fan/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -200 152 80 -240 208 112 -248 232 168 +208 168 0 +248 224 88 +248 232 160 248 248 248 -176 88 48 +192 72 24 120 56 32 -248 112 64 -248 160 128 +232 112 40 +248 168 128 16 16 16 -88 80 96 +72 72 80 184 184 184 -248 192 136 -208 136 56 -48 40 40 +248 216 112 +224 112 24 +40 40 40 0 0 0 diff --git a/graphics/pokemon/rotom/front.png b/graphics/pokemon/rotom/front.png index 2c99d4afc401..f6141a7097e2 100644 Binary files a/graphics/pokemon/rotom/front.png and b/graphics/pokemon/rotom/front.png differ diff --git a/graphics/pokemon/rotom/frost/anim_front.png b/graphics/pokemon/rotom/frost/anim_front.png index 9b1266cfcd71..019aa481e745 100644 Binary files a/graphics/pokemon/rotom/frost/anim_front.png and b/graphics/pokemon/rotom/frost/anim_front.png differ diff --git a/graphics/pokemon/rotom/frost/front.png b/graphics/pokemon/rotom/frost/front.png index 1e91c69156d2..d94fd9376bb1 100644 Binary files a/graphics/pokemon/rotom/frost/front.png and b/graphics/pokemon/rotom/frost/front.png differ diff --git a/graphics/pokemon/rotom/frost/normal.pal b/graphics/pokemon/rotom/frost/normal.pal index 6e774c738e6a..9844e99f6ceb 100644 --- a/graphics/pokemon/rotom/frost/normal.pal +++ b/graphics/pokemon/rotom/frost/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 104 168 -168 136 192 -176 88 48 +176 80 200 +200 112 248 +192 72 24 120 56 32 -248 160 128 -248 112 64 +248 168 128 +232 112 40 16 16 16 248 248 248 -176 152 192 -120 88 152 +144 128 216 +104 56 168 184 184 184 -80 72 72 +72 72 80 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/rotom/heat/anim_front.png b/graphics/pokemon/rotom/heat/anim_front.png index 6172556cc604..5d96fda88d7b 100644 Binary files a/graphics/pokemon/rotom/heat/anim_front.png and b/graphics/pokemon/rotom/heat/anim_front.png differ diff --git a/graphics/pokemon/rotom/heat/front.png b/graphics/pokemon/rotom/heat/front.png index fb519b2e5aa7..59878b8bb889 100644 Binary files a/graphics/pokemon/rotom/heat/front.png and b/graphics/pokemon/rotom/heat/front.png differ diff --git a/graphics/pokemon/rotom/heat/normal.pal b/graphics/pokemon/rotom/heat/normal.pal index 09854ef928f0..f03c9ec60072 100644 --- a/graphics/pokemon/rotom/heat/normal.pal +++ b/graphics/pokemon/rotom/heat/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -168 32 64 -224 72 72 -240 136 136 +184 40 40 +248 64 48 +248 152 144 248 248 248 -176 88 48 +192 72 24 120 56 32 -248 112 64 -248 160 128 +232 112 40 +248 168 128 184 184 184 -232 128 128 -200 64 56 +248 112 112 +200 48 56 16 16 16 -56 56 56 -120 120 128 +40 40 40 +72 72 80 0 0 0 diff --git a/graphics/pokemon/rotom/mow/anim_front.png b/graphics/pokemon/rotom/mow/anim_front.png index 93c327839124..550ddfc73830 100644 Binary files a/graphics/pokemon/rotom/mow/anim_front.png and b/graphics/pokemon/rotom/mow/anim_front.png differ diff --git a/graphics/pokemon/rotom/mow/front.png b/graphics/pokemon/rotom/mow/front.png index 302f1af1d672..41031736f68e 100644 Binary files a/graphics/pokemon/rotom/mow/front.png and b/graphics/pokemon/rotom/mow/front.png differ diff --git a/graphics/pokemon/rotom/mow/normal.pal b/graphics/pokemon/rotom/mow/normal.pal index 7d59d22671e8..f199d83f9edf 100644 --- a/graphics/pokemon/rotom/mow/normal.pal +++ b/graphics/pokemon/rotom/mow/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 152 56 -144 184 72 -176 88 48 +0 152 0 +0 200 0 +192 72 24 120 56 32 -248 112 64 -248 160 128 +232 112 40 +248 168 128 16 16 16 -80 72 80 +72 72 80 248 248 248 -160 192 104 -192 184 176 -120 160 56 -184 216 144 +32 176 80 +184 184 184 +8 120 64 +136 240 168 40 40 40 0 0 0 diff --git a/graphics/pokemon/rotom/normal.pal b/graphics/pokemon/rotom/normal.pal index 172105d9c90e..dc8026c5da08 100644 --- a/graphics/pokemon/rotom/normal.pal +++ b/graphics/pokemon/rotom/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 160 176 -112 200 200 -176 88 48 +40 168 184 +88 192 184 +192 72 24 120 56 32 -248 112 64 -248 160 128 +232 112 40 +248 168 128 16 16 16 248 248 248 184 184 184 -96 152 232 -24 88 160 -176 232 232 +48 120 232 +8 64 168 +184 240 232 72 72 80 0 0 0 0 0 0 diff --git a/graphics/pokemon/rotom/wash/anim_front.png b/graphics/pokemon/rotom/wash/anim_front.png index f526b215e548..d0e54071c9be 100644 Binary files a/graphics/pokemon/rotom/wash/anim_front.png and b/graphics/pokemon/rotom/wash/anim_front.png differ diff --git a/graphics/pokemon/rotom/wash/front.png b/graphics/pokemon/rotom/wash/front.png index 8c01db3c5d0a..5313d0302c21 100644 Binary files a/graphics/pokemon/rotom/wash/front.png and b/graphics/pokemon/rotom/wash/front.png differ diff --git a/graphics/pokemon/rotom/wash/normal.pal b/graphics/pokemon/rotom/wash/normal.pal index 1070cb148461..d7ae28e2bbd7 100644 --- a/graphics/pokemon/rotom/wash/normal.pal +++ b/graphics/pokemon/rotom/wash/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 144 168 -48 168 192 -176 88 48 -248 112 64 +8 72 192 +72 120 248 +192 72 24 +232 112 40 120 56 32 -248 160 128 +248 168 128 248 248 248 184 184 184 -104 192 216 +48 120 232 16 16 16 -136 208 224 -80 80 72 -48 48 48 -32 144 168 -0 0 0 +136 184 240 +72 72 80 +8 64 168 +40 40 40 +8 72 192 diff --git a/graphics/pokemon/rufflet/anim_front.png b/graphics/pokemon/rufflet/anim_front.png index 522129e9509d..4e1e1edc8796 100644 Binary files a/graphics/pokemon/rufflet/anim_front.png and b/graphics/pokemon/rufflet/anim_front.png differ diff --git a/graphics/pokemon/rufflet/front.png b/graphics/pokemon/rufflet/front.png index 7a89fcb8e8ce..b3e83329b02a 100644 Binary files a/graphics/pokemon/rufflet/front.png and b/graphics/pokemon/rufflet/front.png differ diff --git a/graphics/pokemon/rufflet/normal.pal b/graphics/pokemon/rufflet/normal.pal index f4b4c21303c4..0a981145176b 100644 --- a/graphics/pokemon/rufflet/normal.pal +++ b/graphics/pokemon/rufflet/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 120 168 -16 16 16 -128 104 88 +104 128 144 +0 0 0 +128 112 96 248 248 248 -64 64 48 -240 240 208 -184 168 136 -160 64 64 -224 96 88 -88 88 112 -48 56 80 -248 208 144 -168 136 96 +80 72 56 +240 232 208 +184 176 152 +168 72 72 +216 88 88 +72 96 112 +40 64 80 +232 200 88 +184 152 56 168 176 192 0 0 0 diff --git a/graphics/pokemon/sableye/anim_front.png b/graphics/pokemon/sableye/anim_front.png index a67c5172d3bc..827f9c28b81b 100644 Binary files a/graphics/pokemon/sableye/anim_front.png and b/graphics/pokemon/sableye/anim_front.png differ diff --git a/graphics/pokemon/sableye/front.png b/graphics/pokemon/sableye/front.png index 24c705294cf3..02d95cca08df 100644 Binary files a/graphics/pokemon/sableye/front.png and b/graphics/pokemon/sableye/front.png differ diff --git a/graphics/pokemon/sableye/normal.pal b/graphics/pokemon/sableye/normal.pal index cf010347d0be..471538fa8cc5 100644 --- a/graphics/pokemon/sableye/normal.pal +++ b/graphics/pokemon/sableye/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 40 136 -184 160 208 -16 16 16 +56 48 120 +144 136 208 +0 0 0 24 16 56 -128 96 168 -96 64 144 -128 184 216 -176 216 232 +112 96 176 +88 64 160 +128 192 208 +176 224 240 120 136 176 248 248 248 -64 136 168 +64 144 160 192 16 32 -248 168 176 -232 72 80 +248 144 168 +248 72 88 0 0 0 diff --git a/graphics/pokemon/salamence/anim_front.png b/graphics/pokemon/salamence/anim_front.png index 70cc7c0f8c7e..977f43a6f845 100644 Binary files a/graphics/pokemon/salamence/anim_front.png and b/graphics/pokemon/salamence/anim_front.png differ diff --git a/graphics/pokemon/salamence/front.png b/graphics/pokemon/salamence/front.png index ccb50e4e5ef5..6f1a13419d2b 100644 Binary files a/graphics/pokemon/salamence/front.png and b/graphics/pokemon/salamence/front.png differ diff --git a/graphics/pokemon/salamence/normal.pal b/graphics/pokemon/salamence/normal.pal index eee5f13af457..9da83c8278a3 100644 --- a/graphics/pokemon/salamence/normal.pal +++ b/graphics/pokemon/salamence/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 40 48 -216 136 152 -192 88 96 -152 56 72 +96 40 40 +224 128 144 +192 80 104 +160 56 72 24 24 24 -24 96 120 -48 128 152 -128 200 216 -72 160 184 -184 168 168 +40 96 120 +64 128 152 +128 200 232 +72 160 208 +184 184 176 248 248 248 96 56 64 152 88 104 128 144 144 -224 216 224 +240 240 232 diff --git a/graphics/pokemon/samurott/anim_front.png b/graphics/pokemon/samurott/anim_front.png index 3bf85693d9b8..ee43614bfb25 100644 Binary files a/graphics/pokemon/samurott/anim_front.png and b/graphics/pokemon/samurott/anim_front.png differ diff --git a/graphics/pokemon/samurott/front.png b/graphics/pokemon/samurott/front.png index 769657fcf421..ceef8bab9da2 100644 Binary files a/graphics/pokemon/samurott/front.png and b/graphics/pokemon/samurott/front.png differ diff --git a/graphics/pokemon/samurott/normal.pal b/graphics/pokemon/samurott/normal.pal index 8eacbf6f652d..213b132b7729 100644 --- a/graphics/pokemon/samurott/normal.pal +++ b/graphics/pokemon/samurott/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -112 96 64 -208 192 120 -240 224 168 -160 144 96 +120 96 64 +216 200 120 +248 232 144 +168 144 88 72 64 80 248 248 248 -128 168 176 -32 64 104 -40 96 168 -224 104 72 -192 184 200 -96 120 120 +128 160 160 +24 56 96 +32 88 152 +208 80 96 +192 192 200 +88 112 112 32 48 72 0 0 0 diff --git a/graphics/pokemon/sandile/anim_front.png b/graphics/pokemon/sandile/anim_front.png index a396e9581790..40d559ea2078 100644 Binary files a/graphics/pokemon/sandile/anim_front.png and b/graphics/pokemon/sandile/anim_front.png differ diff --git a/graphics/pokemon/sandile/front.png b/graphics/pokemon/sandile/front.png index 14b1f76bf2d8..21ff3c968a3c 100644 Binary files a/graphics/pokemon/sandile/front.png and b/graphics/pokemon/sandile/front.png differ diff --git a/graphics/pokemon/sandile/normal.pal b/graphics/pokemon/sandile/normal.pal index 1c62e6c79848..b079c8061ae0 100644 --- a/graphics/pokemon/sandile/normal.pal +++ b/graphics/pokemon/sandile/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -152 112 72 +139 115 49 32 32 32 -240 216 176 -80 56 32 +222 189 131 +82 57 16 16 16 16 -216 160 112 -72 72 80 -176 168 168 -80 80 96 -176 96 104 +197 156 90 +65 65 74 +180 180 189 +82 82 98 +205 115 123 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/sandshrew/anim_front.png b/graphics/pokemon/sandshrew/anim_front.png index 9f8bbf63d353..be1d37650342 100644 Binary files a/graphics/pokemon/sandshrew/anim_front.png and b/graphics/pokemon/sandshrew/anim_front.png differ diff --git a/graphics/pokemon/sandshrew/back.png b/graphics/pokemon/sandshrew/back.png index 5375da9d6072..f8a0c9ce2431 100644 Binary files a/graphics/pokemon/sandshrew/back.png and b/graphics/pokemon/sandshrew/back.png differ diff --git a/graphics/pokemon/sandshrew/front.png b/graphics/pokemon/sandshrew/front.png index 4e6be966e83a..a3a6ea88f65a 100644 Binary files a/graphics/pokemon/sandshrew/front.png and b/graphics/pokemon/sandshrew/front.png differ diff --git a/graphics/pokemon/sandshrew/normal.pal b/graphics/pokemon/sandshrew/normal.pal index 9468fd84aaad..a2d45c33be98 100644 --- a/graphics/pokemon/sandshrew/normal.pal +++ b/graphics/pokemon/sandshrew/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 72 32 -232 192 88 -184 176 160 +131 98 16 +238 222 16 +205 189 180 16 16 16 -192 152 80 -144 112 48 +205 180 0 +176 128 16 232 232 200 -8 80 120 +16 56 120 248 248 248 -0 112 184 -216 216 192 -128 128 128 40 120 200 -16 56 120 -128 96 16 +232 216 200 +128 128 128 +200 200 200 +115 74 24 +0 0 0 diff --git a/graphics/pokemon/sandshrew/shiny.pal b/graphics/pokemon/sandshrew/shiny.pal index ac8291fe5207..4ee0966b0502 100644 --- a/graphics/pokemon/sandshrew/shiny.pal +++ b/graphics/pokemon/sandshrew/shiny.pal @@ -14,6 +14,6 @@ JASC-PAL 48 96 144 216 208 200 128 128 128 -48 96 144 -24 48 88 -64 96 64 +200 200 200 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/sandslash/anim_front.png b/graphics/pokemon/sandslash/anim_front.png index 5409c3aa6538..99b6417fb9eb 100644 Binary files a/graphics/pokemon/sandslash/anim_front.png and b/graphics/pokemon/sandslash/anim_front.png differ diff --git a/graphics/pokemon/sandslash/back.png b/graphics/pokemon/sandslash/back.png index 13efe9433b3f..cb4b5697c867 100644 Binary files a/graphics/pokemon/sandslash/back.png and b/graphics/pokemon/sandslash/back.png differ diff --git a/graphics/pokemon/sandslash/front.png b/graphics/pokemon/sandslash/front.png index 5c2e6da904ce..bbbf311b5e0f 100644 Binary files a/graphics/pokemon/sandslash/front.png and b/graphics/pokemon/sandslash/front.png differ diff --git a/graphics/pokemon/sandslash/normal.pal b/graphics/pokemon/sandslash/normal.pal index f79c67d109ca..ff473ca5e1ec 100644 --- a/graphics/pokemon/sandslash/normal.pal +++ b/graphics/pokemon/sandslash/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 40 16 -152 104 40 +74 57 16 +172 131 49 16 16 16 -128 104 56 -112 72 24 -192 152 72 -80 64 32 -232 184 80 -248 248 248 -136 136 136 -216 200 176 +148 123 0 +139 98 24 +213 172 32 +90 74 0 +246 213 32 +255 255 255 +139 139 139 +222 213 180 200 200 208 48 48 72 -80 80 80 -216 200 176 +82 82 82 +0 0 0 diff --git a/graphics/pokemon/sandslash/shiny.pal b/graphics/pokemon/sandslash/shiny.pal index fe701e536062..86e888dbb7cd 100644 --- a/graphics/pokemon/sandslash/shiny.pal +++ b/graphics/pokemon/sandslash/shiny.pal @@ -13,7 +13,7 @@ JASC-PAL 248 248 248 136 136 136 216 200 184 -216 200 184 +200 200 208 48 48 72 80 80 80 -216 200 176 +255 0 0 diff --git a/graphics/pokemon/sawk/anim_front.png b/graphics/pokemon/sawk/anim_front.png index 7b16d08edf0a..9ee0741031d6 100644 Binary files a/graphics/pokemon/sawk/anim_front.png and b/graphics/pokemon/sawk/anim_front.png differ diff --git a/graphics/pokemon/sawk/front.png b/graphics/pokemon/sawk/front.png index c40a996728cf..a3ab005487ad 100644 Binary files a/graphics/pokemon/sawk/front.png and b/graphics/pokemon/sawk/front.png differ diff --git a/graphics/pokemon/sawk/normal.pal b/graphics/pokemon/sawk/normal.pal index 4ab8bcb88391..fccc99becbaf 100644 --- a/graphics/pokemon/sawk/normal.pal +++ b/graphics/pokemon/sawk/normal.pal @@ -2,12 +2,12 @@ JASC-PAL 0100 16 152 208 160 -32 64 96 -104 152 208 -56 96 136 +24 72 96 +80 136 232 +24 88 152 16 16 16 40 40 40 -56 128 192 +56 104 192 64 64 64 112 168 160 144 216 216 diff --git a/graphics/pokemon/sawsbuck/anim_front.png b/graphics/pokemon/sawsbuck/anim_front.png index 87f828dbff43..fa28352ddc29 100644 Binary files a/graphics/pokemon/sawsbuck/anim_front.png and b/graphics/pokemon/sawsbuck/anim_front.png differ diff --git a/graphics/pokemon/sawsbuck/autumn/front.png b/graphics/pokemon/sawsbuck/autumn/front.png index 9a3284010d31..97c43db22c53 100644 Binary files a/graphics/pokemon/sawsbuck/autumn/front.png and b/graphics/pokemon/sawsbuck/autumn/front.png differ diff --git a/graphics/pokemon/sawsbuck/autumn/normal.pal b/graphics/pokemon/sawsbuck/autumn/normal.pal index 330a22f954cf..12bcb1a06946 100644 --- a/graphics/pokemon/sawsbuck/autumn/normal.pal +++ b/graphics/pokemon/sawsbuck/autumn/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -119 50 50 -81 34 46 -0 0 0 -186 79 78 -51 30 15 -247 212 123 -30 20 10 -86 53 36 -65 32 16 -119 77 53 -61 35 34 -158 127 75 -249 159 79 -222 222 222 -172 172 172 +152 208 160 +128 32 48 +88 24 24 +16 16 16 +184 56 56 +72 16 8 +216 192 104 +48 16 16 +96 56 32 +64 32 16 +120 88 48 +64 32 24 +160 120 72 +216 144 40 +216 216 216 +168 168 168 diff --git a/graphics/pokemon/sawsbuck/front.png b/graphics/pokemon/sawsbuck/front.png index eb18835d6736..71aed05e3793 100644 Binary files a/graphics/pokemon/sawsbuck/front.png and b/graphics/pokemon/sawsbuck/front.png differ diff --git a/graphics/pokemon/sawsbuck/normal.pal b/graphics/pokemon/sawsbuck/normal.pal index 2564dd71c2b7..4120eb595dce 100644 --- a/graphics/pokemon/sawsbuck/normal.pal +++ b/graphics/pokemon/sawsbuck/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 48 16 16 -0 0 0 -168 88 104 -112 56 64 -48 24 8 -240 208 120 -232 128 144 -80 48 32 -56 32 32 -248 152 72 -112 72 48 -152 120 72 +16 16 16 +200 64 96 +112 24 48 +72 16 8 +216 192 104 +248 112 152 +96 56 32 +64 32 24 +216 144 40 +120 88 48 +160 120 72 216 216 216 168 168 168 -24 16 8 +0 0 0 diff --git a/graphics/pokemon/sawsbuck/summer/front.png b/graphics/pokemon/sawsbuck/summer/front.png index 9e84b66e1375..96a0c150c487 100644 Binary files a/graphics/pokemon/sawsbuck/summer/front.png and b/graphics/pokemon/sawsbuck/summer/front.png differ diff --git a/graphics/pokemon/sawsbuck/summer/normal.pal b/graphics/pokemon/sawsbuck/summer/normal.pal index 2fa072e32cbe..dd20a7bcc55f 100644 --- a/graphics/pokemon/sawsbuck/summer/normal.pal +++ b/graphics/pokemon/sawsbuck/summer/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -34 58 37 -0 0 0 -46 145 76 -40 96 54 -247 212 123 -51 30 15 -86 53 36 -119 77 53 -61 35 34 -158 127 75 -249 159 79 -222 222 222 -172 172 172 -30 20 10 +152 208 160 +24 56 40 +16 16 16 +8 136 64 +24 88 48 +216 192 104 +72 16 8 +96 56 32 +120 88 48 +64 32 24 +160 120 72 +216 144 40 +216 216 216 +168 168 168 +48 16 16 0 0 0 diff --git a/graphics/pokemon/sawsbuck/winter/back.png b/graphics/pokemon/sawsbuck/winter/back.png index 89fb13912142..607a9ee99c54 100644 Binary files a/graphics/pokemon/sawsbuck/winter/back.png and b/graphics/pokemon/sawsbuck/winter/back.png differ diff --git a/graphics/pokemon/sawsbuck/winter/front.png b/graphics/pokemon/sawsbuck/winter/front.png index 92f7000bbafb..d97aa2a90d05 100644 Binary files a/graphics/pokemon/sawsbuck/winter/front.png and b/graphics/pokemon/sawsbuck/winter/front.png differ diff --git a/graphics/pokemon/sawsbuck/winter/normal.pal b/graphics/pokemon/sawsbuck/winter/normal.pal index b0d26c0f162d..76ad023bd02d 100644 --- a/graphics/pokemon/sawsbuck/winter/normal.pal +++ b/graphics/pokemon/sawsbuck/winter/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -135 116 121 -76 61 72 -49 16 16 +152 208 160 +104 104 104 +64 72 64 +48 16 16 0 0 0 -255 255 255 -178 160 153 -51 30 15 -247 212 123 -119 77 53 -65 32 16 -86 53 36 -61 35 34 -158 127 75 -249 159 79 -222 222 222 +248 248 248 +168 168 168 +72 16 8 +216 192 104 +120 88 48 +64 32 24 +96 56 32 +160 120 72 +216 144 40 +216 216 216 +96 56 32 diff --git a/graphics/pokemon/sawsbuck/winter/shiny.pal b/graphics/pokemon/sawsbuck/winter/shiny.pal index feb2911d9642..32f04a54e15b 100644 --- a/graphics/pokemon/sawsbuck/winter/shiny.pal +++ b/graphics/pokemon/sawsbuck/winter/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 +152 208 160 104 104 104 64 72 64 -49 16 16 +48 16 16 0 0 0 -255 255 255 +248 248 248 168 168 168 -74 16 8 -247 212 123 -178 114 49 -65 32 16 -130 67 23 -84 35 16 -183 167 84 -222 205 41 -222 222 222 +72 16 8 +216 192 104 +176 104 32 +64 32 24 +128 64 16 +160 120 72 +216 200 40 +216 216 216 +96 56 32 diff --git a/graphics/pokemon/sceptile/anim_front.png b/graphics/pokemon/sceptile/anim_front.png index ce0372adca00..c297cf7298bf 100644 Binary files a/graphics/pokemon/sceptile/anim_front.png and b/graphics/pokemon/sceptile/anim_front.png differ diff --git a/graphics/pokemon/sceptile/front.png b/graphics/pokemon/sceptile/front.png index 0d038b387815..f49aef7653b9 100644 Binary files a/graphics/pokemon/sceptile/front.png and b/graphics/pokemon/sceptile/front.png differ diff --git a/graphics/pokemon/sceptile/normal.pal b/graphics/pokemon/sceptile/normal.pal index 91cd9737d70b..bc16e8557ff2 100644 --- a/graphics/pokemon/sceptile/normal.pal +++ b/graphics/pokemon/sceptile/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -200 128 216 -40 80 40 -168 216 184 -80 160 80 -80 112 80 -112 200 120 +192 192 248 +32 72 32 +176 232 144 +64 152 64 +56 128 56 +128 200 104 16 16 16 -216 184 96 -248 224 128 -184 88 72 -232 112 96 +200 152 8 +232 224 64 +192 32 32 +232 72 56 112 88 40 -80 152 88 -128 176 128 -40 80 40 -80 112 80 +40 128 48 +72 168 72 +24 96 40 +0 0 0 diff --git a/graphics/pokemon/scizor/anim_front.png b/graphics/pokemon/scizor/anim_front.png index 0b49c6b8d685..c5e6b302b67b 100644 Binary files a/graphics/pokemon/scizor/anim_front.png and b/graphics/pokemon/scizor/anim_front.png differ diff --git a/graphics/pokemon/scizor/front.png b/graphics/pokemon/scizor/front.png index be2df146147b..f872c488b4e7 100644 Binary files a/graphics/pokemon/scizor/front.png and b/graphics/pokemon/scizor/front.png differ diff --git a/graphics/pokemon/scizor/normal.pal b/graphics/pokemon/scizor/normal.pal index f67d67b6a7e4..a8c921b19dbd 100644 --- a/graphics/pokemon/scizor/normal.pal +++ b/graphics/pokemon/scizor/normal.pal @@ -2,15 +2,15 @@ JASC-PAL 0100 16 152 208 160 -88 24 32 -224 104 104 +96 40 40 +240 104 104 16 16 16 -152 40 40 -200 64 64 -104 104 112 -176 184 224 +160 40 40 +208 56 56 +112 112 136 +184 184 216 248 248 248 -48 48 56 +56 56 72 248 192 88 144 144 160 152 104 32 diff --git a/graphics/pokemon/scolipede/anim_front.png b/graphics/pokemon/scolipede/anim_front.png index aa4078abc93a..9ed55dab02ca 100644 Binary files a/graphics/pokemon/scolipede/anim_front.png and b/graphics/pokemon/scolipede/anim_front.png differ diff --git a/graphics/pokemon/scolipede/front.png b/graphics/pokemon/scolipede/front.png index 5a133202f8d6..7d254636f9ec 100644 Binary files a/graphics/pokemon/scolipede/front.png and b/graphics/pokemon/scolipede/front.png differ diff --git a/graphics/pokemon/scolipede/normal.pal b/graphics/pokemon/scolipede/normal.pal index 857618fda843..1eeb0e21e0e0 100644 --- a/graphics/pokemon/scolipede/normal.pal +++ b/graphics/pokemon/scolipede/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -64 32 40 -184 64 96 -112 56 104 -160 80 152 +96 16 16 +192 24 88 +104 32 104 +136 56 152 168 40 120 56 16 32 -112 40 64 -32 40 32 -80 88 80 +152 16 64 +32 40 48 +64 72 96 88 48 88 -240 160 80 -56 64 56 +216 160 80 +56 56 72 0 0 0 -208 136 56 +128 104 24 diff --git a/graphics/pokemon/scrafty/anim_front.png b/graphics/pokemon/scrafty/anim_front.png index 3e0e821e6260..d150e429844b 100644 Binary files a/graphics/pokemon/scrafty/anim_front.png and b/graphics/pokemon/scrafty/anim_front.png differ diff --git a/graphics/pokemon/scrafty/front.png b/graphics/pokemon/scrafty/front.png index ea1d8f764bb2..642dcb966519 100644 Binary files a/graphics/pokemon/scrafty/front.png and b/graphics/pokemon/scrafty/front.png differ diff --git a/graphics/pokemon/scrafty/normal.pal b/graphics/pokemon/scrafty/normal.pal index bfc329bbee19..2b1a6c3fa5b6 100644 --- a/graphics/pokemon/scrafty/normal.pal +++ b/graphics/pokemon/scrafty/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 32 32 -232 128 112 +120 56 40 +224 96 112 32 32 32 -168 72 64 -176 96 64 -248 136 80 -120 64 40 -72 64 72 +216 40 56 +192 88 24 +240 120 32 +120 56 40 +72 72 72 168 168 168 248 248 248 216 216 216 -88 96 104 -96 72 48 -240 184 96 -176 128 72 +96 96 96 +104 80 40 +240 200 16 +176 144 24 diff --git a/graphics/pokemon/scraggy/anim_front.png b/graphics/pokemon/scraggy/anim_front.png index 33c0a6f4feb0..fde3828d24f9 100644 Binary files a/graphics/pokemon/scraggy/anim_front.png and b/graphics/pokemon/scraggy/anim_front.png differ diff --git a/graphics/pokemon/scraggy/front.png b/graphics/pokemon/scraggy/front.png index da995ce5e0e1..1cade69cc91c 100644 Binary files a/graphics/pokemon/scraggy/front.png and b/graphics/pokemon/scraggy/front.png differ diff --git a/graphics/pokemon/scraggy/normal.pal b/graphics/pokemon/scraggy/normal.pal index c0b65e6c173d..d796f276c8d4 100644 --- a/graphics/pokemon/scraggy/normal.pal +++ b/graphics/pokemon/scraggy/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 64 56 -104 40 40 -232 96 88 -120 88 64 +176 40 48 +112 32 40 +224 56 64 +120 96 8 32 32 32 -192 144 72 -248 192 96 +184 152 0 +248 200 0 64 64 64 248 248 248 -104 96 88 -176 160 152 +96 96 88 +168 168 160 120 112 80 -192 176 120 -248 232 152 +192 184 128 +248 240 176 0 0 0 diff --git a/graphics/pokemon/scyther/anim_front.png b/graphics/pokemon/scyther/anim_front.png index 673dc2d2213e..c253d771b796 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 abf81a063243..af7420c5614d 100644 Binary files a/graphics/pokemon/scyther/front.png and b/graphics/pokemon/scyther/front.png differ diff --git a/graphics/pokemon/scyther/normal.pal b/graphics/pokemon/scyther/normal.pal index 5d2fb2e2be80..c1e4c692eddb 100644 --- a/graphics/pokemon/scyther/normal.pal +++ b/graphics/pokemon/scyther/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -48 80 56 -192 224 136 +65 90 32 +189 230 115 16 16 16 -136 120 80 -248 232 208 -136 208 120 -224 208 168 -96 152 96 -208 232 232 -248 248 248 -160 176 200 -104 104 112 +156 139 49 +255 246 213 +139 205 115 +230 213 172 +90 156 74 +222 222 222 +255 255 255 +189 189 189 +115 115 115 232 216 176 224 208 168 0 0 0 diff --git a/graphics/pokemon/seadra/anim_front.png b/graphics/pokemon/seadra/anim_front.png index c882fe365eb1..5c64799f7bcb 100644 Binary files a/graphics/pokemon/seadra/anim_front.png and b/graphics/pokemon/seadra/anim_front.png differ diff --git a/graphics/pokemon/seadra/front.png b/graphics/pokemon/seadra/front.png index b22465680fbb..c782ae3e1516 100644 Binary files a/graphics/pokemon/seadra/front.png and b/graphics/pokemon/seadra/front.png differ diff --git a/graphics/pokemon/seadra/normal.pal b/graphics/pokemon/seadra/normal.pal index 6a9b23a8086f..c8e35d939264 100644 --- a/graphics/pokemon/seadra/normal.pal +++ b/graphics/pokemon/seadra/normal.pal @@ -2,15 +2,15 @@ JASC-PAL 0100 16 152 208 160 -64 152 192 -56 104 136 -168 232 248 +106 131 156 +74 106 131 +172 213 238 16 16 16 -104 200 232 -128 104 96 -248 224 176 +131 172 205 +123 98 32 +255 255 172 248 248 248 -200 184 144 +222 197 82 48 56 96 128 168 200 0 0 0 diff --git a/graphics/pokemon/seaking/anim_front.png b/graphics/pokemon/seaking/anim_front.png index a4261b84d6c4..d67854c5182f 100644 Binary files a/graphics/pokemon/seaking/anim_front.png and b/graphics/pokemon/seaking/anim_front.png differ diff --git a/graphics/pokemon/seaking/front.png b/graphics/pokemon/seaking/front.png index f4173bae83b0..f61a6a0fc2c1 100644 Binary files a/graphics/pokemon/seaking/front.png and b/graphics/pokemon/seaking/front.png differ diff --git a/graphics/pokemon/seaking/normal.pal b/graphics/pokemon/seaking/normal.pal index 906dd52e3307..56ac07e6d30d 100644 --- a/graphics/pokemon/seaking/normal.pal +++ b/graphics/pokemon/seaking/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 128 152 -184 192 208 -240 240 248 -80 80 80 +123 131 139 +189 189 205 +246 246 255 +82 82 90 16 16 16 -224 192 160 -184 72 56 -128 40 16 -240 104 72 -240 144 120 -200 224 224 -88 88 112 -128 72 80 -240 168 192 -184 120 144 +255 222 189 +197 65 41 +148 49 24 +230 115 65 +246 148 98 +222 222 230 +90 90 98 +164 57 65 +255 197 205 +246 123 90 diff --git a/graphics/pokemon/sealeo/anim_front.png b/graphics/pokemon/sealeo/anim_front.png index 84dcfe7eecfb..027ef6de190e 100644 Binary files a/graphics/pokemon/sealeo/anim_front.png and b/graphics/pokemon/sealeo/anim_front.png differ diff --git a/graphics/pokemon/sealeo/front.png b/graphics/pokemon/sealeo/front.png index ff628ded9a13..87d8fdb2fc3d 100644 Binary files a/graphics/pokemon/sealeo/front.png and b/graphics/pokemon/sealeo/front.png differ diff --git a/graphics/pokemon/sealeo/normal.pal b/graphics/pokemon/sealeo/normal.pal index 32796e4a6946..b09e7af8b8c0 100644 --- a/graphics/pokemon/sealeo/normal.pal +++ b/graphics/pokemon/sealeo/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 160 200 -24 136 160 -40 88 112 -96 192 232 -152 216 240 +88 144 216 +72 112 176 +72 80 112 +120 192 248 +176 224 248 16 16 16 248 248 248 -128 104 88 -136 144 176 -176 184 216 -216 216 240 -232 208 168 -200 176 152 -248 232 192 -183 119 139 +120 96 80 +120 128 168 +184 184 208 +216 216 248 +232 200 168 +184 152 120 +248 224 184 +224 104 120 diff --git a/graphics/pokemon/seedot/anim_front.png b/graphics/pokemon/seedot/anim_front.png index 5ab60fc697f2..8f99f309031e 100644 Binary files a/graphics/pokemon/seedot/anim_front.png and b/graphics/pokemon/seedot/anim_front.png differ diff --git a/graphics/pokemon/seedot/front.png b/graphics/pokemon/seedot/front.png index 2cde824a5685..2ffd8d6668c8 100644 Binary files a/graphics/pokemon/seedot/front.png and b/graphics/pokemon/seedot/front.png differ diff --git a/graphics/pokemon/seedot/normal.pal b/graphics/pokemon/seedot/normal.pal index ac54e53d48ac..c0cd306d9f77 100644 --- a/graphics/pokemon/seedot/normal.pal +++ b/graphics/pokemon/seedot/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 72 72 -128 112 120 -16 16 16 -176 168 168 -216 208 208 -56 40 40 -120 96 80 -200 176 128 -168 136 112 -224 200 152 -248 232 176 -88 64 48 +82 82 74 +123 115 106 +0 0 0 +172 172 172 +213 213 213 +49 49 41 +131 98 90 +189 172 131 +172 148 115 +222 189 148 +255 238 189 +82 57 49 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/seel/anim_front.png b/graphics/pokemon/seel/anim_front.png index 37f1d1247f5c..4361b9086a6c 100644 Binary files a/graphics/pokemon/seel/anim_front.png and b/graphics/pokemon/seel/anim_front.png differ diff --git a/graphics/pokemon/seel/front.png b/graphics/pokemon/seel/front.png index 31590d82a4e6..d2cc2bc3148a 100644 Binary files a/graphics/pokemon/seel/front.png and b/graphics/pokemon/seel/front.png differ diff --git a/graphics/pokemon/seel/normal.pal b/graphics/pokemon/seel/normal.pal index b9de9a39fa16..2868415702a7 100644 --- a/graphics/pokemon/seel/normal.pal +++ b/graphics/pokemon/seel/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 96 112 -144 160 192 -224 232 248 -184 208 232 +65 82 131 +148 156 180 +230 230 246 +213 205 238 16 16 16 248 248 248 -56 144 128 -104 80 40 -176 144 88 -240 216 176 -120 64 112 -160 120 152 -232 176 224 +41 172 164 +106 90 16 +180 148 65 +246 230 189 +136 48 32 +208 112 88 +248 168 168 200 176 128 0 0 0 diff --git a/graphics/pokemon/seismitoad/anim_front.png b/graphics/pokemon/seismitoad/anim_front.png index 2db9eaf7a96f..9446c095d37d 100644 Binary files a/graphics/pokemon/seismitoad/anim_front.png and b/graphics/pokemon/seismitoad/anim_front.png differ diff --git a/graphics/pokemon/seismitoad/front.png b/graphics/pokemon/seismitoad/front.png index e0b386e5c417..e87b7a4a0475 100644 Binary files a/graphics/pokemon/seismitoad/front.png and b/graphics/pokemon/seismitoad/front.png differ diff --git a/graphics/pokemon/seismitoad/normal.pal b/graphics/pokemon/seismitoad/normal.pal index 27dec4986b34..22d9ac2a4116 100644 --- a/graphics/pokemon/seismitoad/normal.pal +++ b/graphics/pokemon/seismitoad/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 104 96 -16 16 16 +24 96 112 +0 0 0 64 64 64 -80 152 136 -104 208 200 -88 88 104 -32 32 40 -24 56 88 -48 136 200 -48 104 144 -128 48 48 +80 160 136 +112 224 200 +96 96 96 +40 40 40 +16 64 120 +8 144 208 +40 104 168 +176 56 32 192 192 192 -200 88 80 +232 88 56 0 0 0 0 0 0 diff --git a/graphics/pokemon/sentret/anim_front.png b/graphics/pokemon/sentret/anim_front.png index e3edb08b8068..820a036ac72b 100644 Binary files a/graphics/pokemon/sentret/anim_front.png and b/graphics/pokemon/sentret/anim_front.png differ diff --git a/graphics/pokemon/sentret/front.png b/graphics/pokemon/sentret/front.png index d83ba97d1bbe..6505891305bd 100644 Binary files a/graphics/pokemon/sentret/front.png and b/graphics/pokemon/sentret/front.png differ diff --git a/graphics/pokemon/sentret/normal.pal b/graphics/pokemon/sentret/normal.pal index 0402183a6ef0..1e09bf2d7d81 100644 --- a/graphics/pokemon/sentret/normal.pal +++ b/graphics/pokemon/sentret/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 48 40 -32 24 16 -104 72 64 +72 48 32 +56 8 0 +96 64 48 16 16 16 -160 72 80 -232 104 120 -128 88 72 -208 152 136 -184 120 96 -248 232 184 -160 104 88 -48 24 16 -192 176 144 +176 32 64 +216 64 72 +136 88 64 +200 160 128 +184 128 88 +248 248 248 +160 112 72 +56 24 16 +200 200 192 0 0 0 0 0 0 diff --git a/graphics/pokemon/serperior/anim_front.png b/graphics/pokemon/serperior/anim_front.png index 30fb8818d295..1056e166c84a 100644 Binary files a/graphics/pokemon/serperior/anim_front.png and b/graphics/pokemon/serperior/anim_front.png differ diff --git a/graphics/pokemon/serperior/front.png b/graphics/pokemon/serperior/front.png index ec2a8e5da2ec..8f26506a6ced 100644 Binary files a/graphics/pokemon/serperior/front.png and b/graphics/pokemon/serperior/front.png differ diff --git a/graphics/pokemon/serperior/normal.pal b/graphics/pokemon/serperior/normal.pal index e4a3df792b7d..af892b12e18c 100644 --- a/graphics/pokemon/serperior/normal.pal +++ b/graphics/pokemon/serperior/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 128 208 232 -112 96 48 -232 200 56 -176 144 48 -168 144 136 -24 144 96 -0 104 64 +104 112 56 +248 200 40 +208 152 8 +136 136 168 +24 152 72 +16 112 56 8 16 16 248 248 248 -136 208 160 -200 184 184 -104 152 120 -112 40 24 -224 80 56 -0 72 40 -0 72 40 +152 208 152 +192 192 208 +112 160 112 +144 56 0 +248 128 0 +16 80 40 +24 152 72 diff --git a/graphics/pokemon/servine/anim_front.png b/graphics/pokemon/servine/anim_front.png index f4fda6a379c6..05e7e6d81469 100644 Binary files a/graphics/pokemon/servine/anim_front.png and b/graphics/pokemon/servine/anim_front.png differ diff --git a/graphics/pokemon/servine/front.png b/graphics/pokemon/servine/front.png index fb91132b9741..ab5a141b957c 100644 Binary files a/graphics/pokemon/servine/front.png and b/graphics/pokemon/servine/front.png differ diff --git a/graphics/pokemon/servine/normal.pal b/graphics/pokemon/servine/normal.pal index fd968a5d3128..c3ec729c59f8 100644 --- a/graphics/pokemon/servine/normal.pal +++ b/graphics/pokemon/servine/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 72 32 -96 184 88 +16 80 40 +40 192 72 248 208 48 136 112 48 -56 136 56 -240 240 192 +32 144 56 +248 240 184 16 16 16 248 248 248 -168 160 128 -120 48 48 -192 80 80 -128 112 112 +192 184 96 +112 64 16 +184 72 32 +136 120 48 184 152 40 0 0 0 0 0 0 diff --git a/graphics/pokemon/seviper/anim_front.png b/graphics/pokemon/seviper/anim_front.png index 42fcc1309c64..364385b87a61 100644 Binary files a/graphics/pokemon/seviper/anim_front.png and b/graphics/pokemon/seviper/anim_front.png differ diff --git a/graphics/pokemon/seviper/front.png b/graphics/pokemon/seviper/front.png index baf054fa2b1c..c80d9c80fd70 100644 Binary files a/graphics/pokemon/seviper/front.png and b/graphics/pokemon/seviper/front.png differ diff --git a/graphics/pokemon/seviper/normal.pal b/graphics/pokemon/seviper/normal.pal index 37b9945713cc..a8a6215bef12 100644 --- a/graphics/pokemon/seviper/normal.pal +++ b/graphics/pokemon/seviper/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 112 48 -72 88 112 -48 64 88 -200 160 72 +184 88 56 +72 80 104 +56 64 80 +224 160 72 240 208 136 -96 120 136 -56 48 80 -16 16 16 -112 96 136 -104 48 48 -168 80 72 -152 136 192 -240 136 120 +96 104 136 +72 48 80 +0 0 0 +112 88 144 +96 24 24 +168 64 56 +160 112 224 +208 80 72 248 248 248 80 88 112 diff --git a/graphics/pokemon/sewaddle/anim_front.png b/graphics/pokemon/sewaddle/anim_front.png index 26ad02e8db2c..3a46aa599559 100644 Binary files a/graphics/pokemon/sewaddle/anim_front.png and b/graphics/pokemon/sewaddle/anim_front.png differ diff --git a/graphics/pokemon/sewaddle/front.png b/graphics/pokemon/sewaddle/front.png index a744bffad84c..7f01fe90c945 100644 Binary files a/graphics/pokemon/sewaddle/front.png and b/graphics/pokemon/sewaddle/front.png differ diff --git a/graphics/pokemon/sewaddle/normal.pal b/graphics/pokemon/sewaddle/normal.pal index 23b34cc08e7a..00ac01e7a391 100644 --- a/graphics/pokemon/sewaddle/normal.pal +++ b/graphics/pokemon/sewaddle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 16 16 -72 88 40 -104 144 48 -144 200 56 -200 152 64 -136 104 48 -248 216 144 -248 192 88 +0 0 0 +56 96 24 +88 152 48 +144 200 8 +208 168 0 +152 120 8 +248 240 168 +248 216 48 248 248 248 -96 80 72 -240 136 24 +72 72 72 +224 128 8 144 80 24 -200 184 168 -248 168 88 +200 200 208 +248 168 72 0 0 0 diff --git a/graphics/pokemon/sharpedo/anim_front.png b/graphics/pokemon/sharpedo/anim_front.png index 008c2d6b908b..cf261cd4aae7 100644 Binary files a/graphics/pokemon/sharpedo/anim_front.png and b/graphics/pokemon/sharpedo/anim_front.png differ diff --git a/graphics/pokemon/sharpedo/front.png b/graphics/pokemon/sharpedo/front.png index 14a2a91ca4f7..67db44c34fad 100644 Binary files a/graphics/pokemon/sharpedo/front.png and b/graphics/pokemon/sharpedo/front.png differ diff --git a/graphics/pokemon/sharpedo/normal.pal b/graphics/pokemon/sharpedo/normal.pal index 7b1655e8fa09..36e0ce843d4f 100644 --- a/graphics/pokemon/sharpedo/normal.pal +++ b/graphics/pokemon/sharpedo/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -0 64 96 -64 128 176 -8 96 136 -0 40 72 +48 64 112 +80 112 184 +56 80 144 +40 56 80 16 16 16 -192 160 112 -232 200 120 +168 168 144 +248 216 96 248 248 248 -160 64 104 -216 48 96 -208 216 232 -168 168 192 -208 136 160 +168 56 80 +248 0 56 +224 216 240 +168 160 176 +224 104 120 144 120 104 0 0 0 diff --git a/graphics/pokemon/shaymin/anim_front.png b/graphics/pokemon/shaymin/anim_front.png index e59994d7441b..82ae306265fb 100644 Binary files a/graphics/pokemon/shaymin/anim_front.png and b/graphics/pokemon/shaymin/anim_front.png differ diff --git a/graphics/pokemon/shaymin/front.png b/graphics/pokemon/shaymin/front.png index 069bee40d0d0..f8e316903569 100644 Binary files a/graphics/pokemon/shaymin/front.png and b/graphics/pokemon/shaymin/front.png differ diff --git a/graphics/pokemon/shaymin/normal.pal b/graphics/pokemon/shaymin/normal.pal index 3af83a641425..53068c4d6968 100644 --- a/graphics/pokemon/shaymin/normal.pal +++ b/graphics/pokemon/shaymin/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 152 80 -80 104 56 -168 200 96 +136 168 96 +88 112 64 +168 216 96 248 216 96 -128 72 88 -232 144 136 +128 72 104 +232 136 160 80 80 104 184 192 208 248 248 248 16 16 16 64 152 56 -216 112 128 +200 104 136 32 112 48 32 56 40 144 144 176 diff --git a/graphics/pokemon/shaymin/sky/anim_front.png b/graphics/pokemon/shaymin/sky/anim_front.png index 0cb7a632b09b..541477651a92 100644 Binary files a/graphics/pokemon/shaymin/sky/anim_front.png and b/graphics/pokemon/shaymin/sky/anim_front.png differ diff --git a/graphics/pokemon/shaymin/sky/front.png b/graphics/pokemon/shaymin/sky/front.png index 0b544105fe93..190c4ebf69b3 100644 Binary files a/graphics/pokemon/shaymin/sky/front.png and b/graphics/pokemon/shaymin/sky/front.png differ diff --git a/graphics/pokemon/shaymin/sky/normal.pal b/graphics/pokemon/shaymin/sky/normal.pal index 07f4e6401482..2b71401c12e1 100644 --- a/graphics/pokemon/shaymin/sky/normal.pal +++ b/graphics/pokemon/shaymin/sky/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 168 80 -88 104 56 -176 200 120 -160 136 160 -72 64 56 +120 168 32 +56 104 16 +152 208 32 +144 144 168 +80 80 88 16 16 16 -248 240 232 -216 192 184 +248 248 248 +200 200 208 248 248 248 56 120 48 120 168 88 -160 64 64 -216 80 80 -112 48 40 +184 72 88 +240 72 64 +120 56 80 0 0 0 diff --git a/graphics/pokemon/shedinja/anim_front.png b/graphics/pokemon/shedinja/anim_front.png index 9560d75a53f8..897127dffd67 100644 Binary files a/graphics/pokemon/shedinja/anim_front.png and b/graphics/pokemon/shedinja/anim_front.png differ diff --git a/graphics/pokemon/shedinja/front.png b/graphics/pokemon/shedinja/front.png index 9bf0e8ca4292..9c217d773865 100644 Binary files a/graphics/pokemon/shedinja/front.png and b/graphics/pokemon/shedinja/front.png differ diff --git a/graphics/pokemon/shedinja/normal.pal b/graphics/pokemon/shedinja/normal.pal index b212ce0f6b6c..78be62b12bb7 100644 --- a/graphics/pokemon/shedinja/normal.pal +++ b/graphics/pokemon/shedinja/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 176 224 -120 128 168 +160 160 200 +128 144 168 248 248 248 -208 224 248 -80 64 56 -216 176 104 -176 136 80 -24 24 24 -248 208 128 -144 120 112 -112 88 80 +208 208 224 +88 80 64 +216 176 112 +176 144 88 +16 16 16 +240 208 128 +144 128 120 +112 104 88 184 176 168 -176 160 144 -176 160 144 +168 152 136 +168 152 136 0 0 0 diff --git a/graphics/pokemon/shelgon/anim_front.png b/graphics/pokemon/shelgon/anim_front.png index 551c19906a2f..d3a746fce712 100644 Binary files a/graphics/pokemon/shelgon/anim_front.png and b/graphics/pokemon/shelgon/anim_front.png differ diff --git a/graphics/pokemon/shelgon/front.png b/graphics/pokemon/shelgon/front.png index b042523e1d34..713ba522690f 100644 Binary files a/graphics/pokemon/shelgon/front.png and b/graphics/pokemon/shelgon/front.png differ diff --git a/graphics/pokemon/shelgon/normal.pal b/graphics/pokemon/shelgon/normal.pal index 6dc51d422fa7..8d21991d6f4e 100644 --- a/graphics/pokemon/shelgon/normal.pal +++ b/graphics/pokemon/shelgon/normal.pal @@ -7,13 +7,13 @@ JASC-PAL 208 216 224 168 160 176 120 112 136 -96 88 96 +80 88 80 72 56 72 -216 192 128 -248 232 192 -144 136 136 -184 64 80 +232 224 96 +248 248 200 +120 120 112 +168 40 64 96 48 56 -192 112 120 +184 64 80 144 144 160 0 0 0 diff --git a/graphics/pokemon/shellder/anim_front.png b/graphics/pokemon/shellder/anim_front.png index b63e9a48f613..ec58b85d150a 100644 Binary files a/graphics/pokemon/shellder/anim_front.png and b/graphics/pokemon/shellder/anim_front.png differ diff --git a/graphics/pokemon/shellder/front.png b/graphics/pokemon/shellder/front.png index 5b3e211b117b..4c3e7f5228d0 100644 Binary files a/graphics/pokemon/shellder/front.png and b/graphics/pokemon/shellder/front.png differ diff --git a/graphics/pokemon/shellder/normal.pal b/graphics/pokemon/shellder/normal.pal index c05187339c62..462bd5ee49f3 100644 --- a/graphics/pokemon/shellder/normal.pal +++ b/graphics/pokemon/shellder/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -96 72 128 -184 176 224 -120 112 192 -152 152 216 +112 88 136 +216 216 240 +152 136 192 +192 184 232 16 16 16 -56 40 88 -104 104 104 +72 56 96 +128 128 144 248 248 248 -104 48 56 -160 112 120 -216 144 160 +120 16 48 +192 96 104 +232 168 176 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/shellos/anim_front.png b/graphics/pokemon/shellos/anim_front.png index 3d39bc795340..f548e886cd10 100644 Binary files a/graphics/pokemon/shellos/anim_front.png and b/graphics/pokemon/shellos/anim_front.png differ diff --git a/graphics/pokemon/shellos/east_sea/anim_front.png b/graphics/pokemon/shellos/east_sea/anim_front.png index db306c3cdd16..0ba32780303c 100644 Binary files a/graphics/pokemon/shellos/east_sea/anim_front.png and b/graphics/pokemon/shellos/east_sea/anim_front.png differ diff --git a/graphics/pokemon/shellos/east_sea/front.png b/graphics/pokemon/shellos/east_sea/front.png index 4700dca46cde..79d1c97cc6e6 100644 Binary files a/graphics/pokemon/shellos/east_sea/front.png and b/graphics/pokemon/shellos/east_sea/front.png differ diff --git a/graphics/pokemon/shellos/east_sea/normal.pal b/graphics/pokemon/shellos/east_sea/normal.pal index 64d5e8fd9e49..82ebd332f4ef 100644 --- a/graphics/pokemon/shellos/east_sea/normal.pal +++ b/graphics/pokemon/shellos/east_sea/normal.pal @@ -6,14 +6,14 @@ JASC-PAL 206 211 186 255 255 255 16 16 16 -50 185 209 -45 96 114 -123 224 207 -52 137 150 -247 223 118 -168 148 67 +104 176 240 +80 80 120 +128 224 248 +104 120 168 +248 224 112 +160 136 56 89 82 53 131 153 76 76 91 41 -182 209 119 +176 208 120 0 0 0 diff --git a/graphics/pokemon/shellos/front.png b/graphics/pokemon/shellos/front.png index 0eab6cf86913..0d1be14f6a07 100644 Binary files a/graphics/pokemon/shellos/front.png and b/graphics/pokemon/shellos/front.png differ diff --git a/graphics/pokemon/shellos/normal.pal b/graphics/pokemon/shellos/normal.pal index 55212a56bfc2..e5f6ceb505c8 100644 --- a/graphics/pokemon/shellos/normal.pal +++ b/graphics/pokemon/shellos/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 56 96 +112 64 104 16 16 16 -240 136 184 -216 80 144 +248 136 192 +224 80 160 104 56 80 -168 96 128 -240 184 184 -240 216 112 -168 144 64 +168 96 144 +248 176 224 +248 216 112 +160 136 56 248 248 248 -88 80 48 -200 176 176 -128 112 112 +80 72 56 +176 176 192 +112 112 120 232 232 232 -160 64 120 +168 48 136 diff --git a/graphics/pokemon/shelmet/anim_front.png b/graphics/pokemon/shelmet/anim_front.png index 93b0b8b18f2c..a655e54d1384 100644 Binary files a/graphics/pokemon/shelmet/anim_front.png and b/graphics/pokemon/shelmet/anim_front.png differ diff --git a/graphics/pokemon/shelmet/front.png b/graphics/pokemon/shelmet/front.png index e3abb63bc5b0..e881e714955f 100644 Binary files a/graphics/pokemon/shelmet/front.png and b/graphics/pokemon/shelmet/front.png differ diff --git a/graphics/pokemon/shelmet/normal.pal b/graphics/pokemon/shelmet/normal.pal index c5c862321bdf..cd858c1027e7 100644 --- a/graphics/pokemon/shelmet/normal.pal +++ b/graphics/pokemon/shelmet/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 112 96 -216 200 184 -96 80 72 +88 88 120 +192 192 208 +40 48 88 16 16 16 -176 152 144 +144 144 168 56 48 48 96 104 136 56 72 112 -96 24 48 -160 64 72 -208 80 96 -248 96 120 +96 0 32 +176 32 72 +216 48 96 +248 72 120 80 128 72 248 248 248 112 200 112 diff --git a/graphics/pokemon/shieldon/anim_front.png b/graphics/pokemon/shieldon/anim_front.png index 5ce78d198b53..43e59272e25a 100644 Binary files a/graphics/pokemon/shieldon/anim_front.png and b/graphics/pokemon/shieldon/anim_front.png differ diff --git a/graphics/pokemon/shiftry/anim_front.png b/graphics/pokemon/shiftry/anim_front.png index 33cbb68fe801..f813d71d1aab 100644 Binary files a/graphics/pokemon/shiftry/anim_front.png and b/graphics/pokemon/shiftry/anim_front.png differ diff --git a/graphics/pokemon/shiftry/front.png b/graphics/pokemon/shiftry/front.png index 82df0118bde0..15e263cb9436 100644 Binary files a/graphics/pokemon/shiftry/front.png and b/graphics/pokemon/shiftry/front.png differ diff --git a/graphics/pokemon/shiftry/normal.pal b/graphics/pokemon/shiftry/normal.pal index 733e980ce761..f10000fcb3a4 100644 --- a/graphics/pokemon/shiftry/normal.pal +++ b/graphics/pokemon/shiftry/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 0 176 232 -88 64 48 -224 168 128 +96 64 40 +224 176 136 112 104 128 16 16 16 -152 104 56 -16 96 48 -192 136 88 +152 104 72 +56 104 40 +192 136 104 248 248 248 -88 176 112 -24 136 64 +104 200 112 +72 144 88 176 176 208 216 224 248 240 224 128 diff --git a/graphics/pokemon/shinx/anim_front.png b/graphics/pokemon/shinx/anim_front.png index 16221a2a2110..c46f6c259ff9 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/front.png b/graphics/pokemon/shinx/front.png index a148720172d8..f6d437c6e55f 100644 Binary files a/graphics/pokemon/shinx/front.png and b/graphics/pokemon/shinx/front.png differ diff --git a/graphics/pokemon/shinx/normal.pal b/graphics/pokemon/shinx/normal.pal index 467dbc77596c..78ad0357ef00 100644 --- a/graphics/pokemon/shinx/normal.pal +++ b/graphics/pokemon/shinx/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 80 88 -80 128 144 -104 184 200 -96 88 48 +64 64 104 +96 120 176 +120 168 240 +112 96 80 16 16 16 -192 144 32 -248 192 48 +176 152 88 +248 224 88 248 248 248 -240 96 96 -144 48 48 -80 80 88 -48 48 48 -147 88 104 +224 72 80 +144 56 80 +72 72 96 +48 48 64 +224 104 120 0 0 0 0 0 0 diff --git a/graphics/pokemon/shroomish/anim_front.png b/graphics/pokemon/shroomish/anim_front.png index 597fe846cbed..d06679fdb8d2 100644 Binary files a/graphics/pokemon/shroomish/anim_front.png and b/graphics/pokemon/shroomish/anim_front.png differ diff --git a/graphics/pokemon/shroomish/front.png b/graphics/pokemon/shroomish/front.png index 120a7902f52a..0a4389204629 100644 Binary files a/graphics/pokemon/shroomish/front.png and b/graphics/pokemon/shroomish/front.png differ diff --git a/graphics/pokemon/shroomish/normal.pal b/graphics/pokemon/shroomish/normal.pal index e80a8e783d03..c72c8dfc7570 100644 --- a/graphics/pokemon/shroomish/normal.pal +++ b/graphics/pokemon/shroomish/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 0 176 232 112 96 72 -88 72 56 -232 200 168 -16 16 16 -184 160 128 -120 176 144 -160 200 168 -104 152 120 -248 224 200 -56 96 72 -153 96 121 -204 148 190 +88 72 64 +232 208 176 +0 0 0 +192 160 128 +144 176 120 +192 192 144 +128 152 120 +240 232 208 +80 104 64 +168 40 40 +232 128 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/shuckle/anim_front.png b/graphics/pokemon/shuckle/anim_front.png index cba7aac7626a..619f3b978c74 100644 Binary files a/graphics/pokemon/shuckle/anim_front.png and b/graphics/pokemon/shuckle/anim_front.png differ diff --git a/graphics/pokemon/shuckle/back.png b/graphics/pokemon/shuckle/back.png index 6c74f0e2513c..235287795558 100644 Binary files a/graphics/pokemon/shuckle/back.png and b/graphics/pokemon/shuckle/back.png differ diff --git a/graphics/pokemon/shuckle/front.png b/graphics/pokemon/shuckle/front.png index d8eab34e0d76..0b00c414d1de 100644 Binary files a/graphics/pokemon/shuckle/front.png and b/graphics/pokemon/shuckle/front.png differ diff --git a/graphics/pokemon/shuckle/normal.pal b/graphics/pokemon/shuckle/normal.pal index 3fc5a946972c..7b9d396bec46 100644 --- a/graphics/pokemon/shuckle/normal.pal +++ b/graphics/pokemon/shuckle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -192 152 48 -248 224 160 -248 200 72 -112 96 32 +184 136 40 +248 248 88 +232 192 72 +112 80 16 16 16 16 112 24 16 -104 88 56 +104 104 104 248 248 248 -192 176 128 +192 192 192 176 40 40 -224 104 96 +224 72 64 248 224 160 -0 0 0 +168 168 168 0 0 0 0 0 0 diff --git a/graphics/pokemon/shuckle/shiny.pal b/graphics/pokemon/shuckle/shiny.pal index 24d9d5f19194..f831af379134 100644 --- a/graphics/pokemon/shuckle/shiny.pal +++ b/graphics/pokemon/shuckle/shiny.pal @@ -14,6 +14,6 @@ JASC-PAL 24 96 208 72 152 248 176 200 240 -0 0 0 +104 136 208 0 0 0 0 0 0 diff --git a/graphics/pokemon/shuppet/anim_front.png b/graphics/pokemon/shuppet/anim_front.png index 196c57e51698..fe5e682d36a9 100644 Binary files a/graphics/pokemon/shuppet/anim_front.png and b/graphics/pokemon/shuppet/anim_front.png differ diff --git a/graphics/pokemon/shuppet/front.png b/graphics/pokemon/shuppet/front.png index 4fda57b31304..e2633121a5cc 100644 Binary files a/graphics/pokemon/shuppet/front.png and b/graphics/pokemon/shuppet/front.png differ diff --git a/graphics/pokemon/shuppet/normal.pal b/graphics/pokemon/shuppet/normal.pal index 39015d185878..18c3428437db 100644 --- a/graphics/pokemon/shuppet/normal.pal +++ b/graphics/pokemon/shuppet/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 88 128 -16 16 16 -160 160 216 -120 120 176 -64 64 96 -96 104 152 -40 40 72 -96 144 168 -64 112 168 -136 208 232 +99 90 140 +0 0 0 +165 173 214 +132 132 173 +58 74 123 +115 115 156 +25 49 90 +66 140 173 +66 115 173 +115 181 214 184 224 240 -184 160 72 -248 208 80 -142 82 116 -214 130 175 +181 140 0 +230 189 82 +181 49 123 +255 115 189 diff --git a/graphics/pokemon/sigilyph/anim_front.png b/graphics/pokemon/sigilyph/anim_front.png index a9c0736cd83b..db53519b7282 100644 Binary files a/graphics/pokemon/sigilyph/anim_front.png and b/graphics/pokemon/sigilyph/anim_front.png differ diff --git a/graphics/pokemon/sigilyph/back.png b/graphics/pokemon/sigilyph/back.png index 09fe68d3919c..e1528d21140c 100644 Binary files a/graphics/pokemon/sigilyph/back.png and b/graphics/pokemon/sigilyph/back.png differ diff --git a/graphics/pokemon/sigilyph/front.png b/graphics/pokemon/sigilyph/front.png index 373f63a048fa..8ce63b8376d2 100644 Binary files a/graphics/pokemon/sigilyph/front.png and b/graphics/pokemon/sigilyph/front.png differ diff --git a/graphics/pokemon/sigilyph/normal.pal b/graphics/pokemon/sigilyph/normal.pal index 3fdaae47cb7b..aa021fdd1cd9 100644 --- a/graphics/pokemon/sigilyph/normal.pal +++ b/graphics/pokemon/sigilyph/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 104 144 +40 120 136 16 16 16 -120 168 208 -216 56 56 -248 184 64 -136 56 72 -168 112 48 -96 72 40 -56 48 48 +72 168 224 +216 0 0 +248 192 8 +144 80 112 +152 120 24 +96 64 16 +48 48 48 248 248 248 -80 176 88 -160 152 144 -40 104 64 -248 184 64 +56 160 72 +144 144 144 +48 112 56 +0 0 0 0 0 0 diff --git a/graphics/pokemon/sigilyph/shiny.pal b/graphics/pokemon/sigilyph/shiny.pal index db05b0891a4c..c747e6c86cd5 100644 --- a/graphics/pokemon/sigilyph/shiny.pal +++ b/graphics/pokemon/sigilyph/shiny.pal @@ -1,7 +1,7 @@ JASC-PAL 0100 16 -152 208 160 +120 192 168 160 104 48 16 16 16 248 168 72 @@ -15,5 +15,5 @@ JASC-PAL 160 136 80 208 192 136 96 80 48 -192 216 104 +0 0 0 0 0 0 diff --git a/graphics/pokemon/silcoon/anim_front.png b/graphics/pokemon/silcoon/anim_front.png index 94b2bf97abd0..8fb93f1fcdf7 100644 Binary files a/graphics/pokemon/silcoon/anim_front.png and b/graphics/pokemon/silcoon/anim_front.png differ diff --git a/graphics/pokemon/silcoon/front.png b/graphics/pokemon/silcoon/front.png index c26d8efe20e1..e6f2a614cd4e 100644 Binary files a/graphics/pokemon/silcoon/front.png and b/graphics/pokemon/silcoon/front.png differ diff --git a/graphics/pokemon/silcoon/normal.pal b/graphics/pokemon/silcoon/normal.pal index f43a07f6cadc..cb6b793aabe5 100644 --- a/graphics/pokemon/silcoon/normal.pal +++ b/graphics/pokemon/silcoon/normal.pal @@ -8,8 +8,8 @@ JASC-PAL 192 208 224 16 16 16 168 184 176 -152 56 64 -224 88 96 +176 24 56 +248 80 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/simipour/anim_front.png b/graphics/pokemon/simipour/anim_front.png index f7a31691c2f1..927aeb1eb0ad 100644 Binary files a/graphics/pokemon/simipour/anim_front.png and b/graphics/pokemon/simipour/anim_front.png differ diff --git a/graphics/pokemon/simipour/front.png b/graphics/pokemon/simipour/front.png index 56a3f754748b..3ea50454c9d7 100644 Binary files a/graphics/pokemon/simipour/front.png and b/graphics/pokemon/simipour/front.png differ diff --git a/graphics/pokemon/simipour/normal.pal b/graphics/pokemon/simipour/normal.pal index 0cc05ef5f385..846b3976bb03 100644 --- a/graphics/pokemon/simipour/normal.pal +++ b/graphics/pokemon/simipour/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 72 96 -40 104 136 -16 16 16 -48 136 152 -48 184 216 -120 208 224 +0 56 112 +16 104 136 +0 0 0 +32 136 160 +40 176 216 +152 224 232 248 248 248 -192 160 96 -144 128 88 -192 176 168 -248 208 112 +200 160 88 +160 120 56 +192 192 192 +248 200 120 80 80 80 56 56 56 -96 80 64 +112 80 32 152 152 152 diff --git a/graphics/pokemon/simisage/anim_front.png b/graphics/pokemon/simisage/anim_front.png index 1b3a09c1498b..d9601c955dd7 100644 Binary files a/graphics/pokemon/simisage/anim_front.png and b/graphics/pokemon/simisage/anim_front.png differ diff --git a/graphics/pokemon/simisage/front.png b/graphics/pokemon/simisage/front.png index 44f7b6ada1c5..22e5dff398f1 100644 Binary files a/graphics/pokemon/simisage/front.png and b/graphics/pokemon/simisage/front.png differ diff --git a/graphics/pokemon/simisage/normal.pal b/graphics/pokemon/simisage/normal.pal index 8e2676bed78b..953226776526 100644 --- a/graphics/pokemon/simisage/normal.pal +++ b/graphics/pokemon/simisage/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -32 80 56 -16 16 16 -48 168 104 -40 120 72 -248 208 112 -144 128 64 -176 144 96 +24 72 40 +0 0 0 +24 160 80 +8 112 48 +248 200 120 +200 160 88 +160 120 56 248 248 248 -168 152 144 -136 208 160 +152 152 152 +128 200 152 80 80 80 -208 192 192 -104 88 32 +192 192 192 +112 80 32 0 0 0 0 0 0 diff --git a/graphics/pokemon/simisear/anim_front.png b/graphics/pokemon/simisear/anim_front.png index 89bdf1153a92..7426fffe70da 100644 Binary files a/graphics/pokemon/simisear/anim_front.png and b/graphics/pokemon/simisear/anim_front.png differ diff --git a/graphics/pokemon/simisear/front.png b/graphics/pokemon/simisear/front.png index 4259f5f49d04..c8ce5ef588a8 100644 Binary files a/graphics/pokemon/simisear/front.png and b/graphics/pokemon/simisear/front.png differ diff --git a/graphics/pokemon/simisear/normal.pal b/graphics/pokemon/simisear/normal.pal index 73ae069ffb2e..42c14f4bd7d1 100644 --- a/graphics/pokemon/simisear/normal.pal +++ b/graphics/pokemon/simisear/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 48 56 -16 16 16 -224 88 88 -168 72 64 -224 144 40 +120 48 48 +8 8 8 +224 80 64 +184 64 56 +240 144 64 248 248 248 -160 144 144 +152 152 152 80 80 80 -192 160 80 -192 176 168 -240 200 120 -152 128 64 -104 88 40 +200 160 88 +192 192 192 +248 200 120 +160 120 56 +112 80 32 0 0 0 0 0 0 diff --git a/graphics/pokemon/skarmory/anim_front.png b/graphics/pokemon/skarmory/anim_front.png index 44b7f8da12e9..ea1033f3e0c7 100644 Binary files a/graphics/pokemon/skarmory/anim_front.png and b/graphics/pokemon/skarmory/anim_front.png differ diff --git a/graphics/pokemon/skarmory/front.png b/graphics/pokemon/skarmory/front.png index f66f968d4af2..719acd0f8f7c 100644 Binary files a/graphics/pokemon/skarmory/front.png and b/graphics/pokemon/skarmory/front.png differ diff --git a/graphics/pokemon/skarmory/normal.pal b/graphics/pokemon/skarmory/normal.pal index 53ebc0422399..22e83a220407 100644 --- a/graphics/pokemon/skarmory/normal.pal +++ b/graphics/pokemon/skarmory/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 144 168 -224 224 248 -56 64 104 -184 200 232 -160 176 216 +120 144 184 +216 232 248 +48 80 120 +184 200 224 +152 176 208 16 16 16 -120 24 32 -160 48 48 -232 88 104 -96 104 152 -208 56 72 -176 168 48 -248 248 96 -184 120 136 +144 16 24 +192 48 72 +248 128 144 +96 120 168 +232 88 96 +200 144 0 +248 216 0 +128 24 32 248 248 248 diff --git a/graphics/pokemon/skiploom/anim_front.png b/graphics/pokemon/skiploom/anim_front.png index 710e60deb978..873e2c86fe5e 100644 Binary files a/graphics/pokemon/skiploom/anim_front.png and b/graphics/pokemon/skiploom/anim_front.png differ diff --git a/graphics/pokemon/skiploom/front.png b/graphics/pokemon/skiploom/front.png index c8d8cc5474b3..8bbabfd30b26 100644 Binary files a/graphics/pokemon/skiploom/front.png and b/graphics/pokemon/skiploom/front.png differ diff --git a/graphics/pokemon/skiploom/normal.pal b/graphics/pokemon/skiploom/normal.pal index 545ace0e2450..4ead4707f68c 100644 --- a/graphics/pokemon/skiploom/normal.pal +++ b/graphics/pokemon/skiploom/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -112 96 40 -16 16 16 -248 232 128 -232 208 88 -184 168 80 -200 208 192 -248 248 248 -64 104 16 -120 200 56 -168 224 120 -112 160 48 -240 72 64 -144 128 64 -176 184 168 +136 80 0 0 0 0 +248 232 0 +248 208 0 +240 160 24 +176 208 216 +248 248 248 +24 104 0 +144 200 48 +176 232 104 +112 168 24 +248 0 64 +200 128 0 +152 80 0 +152 168 184 diff --git a/graphics/pokemon/skitty/anim_front.png b/graphics/pokemon/skitty/anim_front.png index 42c19ca61f46..7f0c1ab4ed8e 100644 Binary files a/graphics/pokemon/skitty/anim_front.png and b/graphics/pokemon/skitty/anim_front.png differ diff --git a/graphics/pokemon/skitty/front.png b/graphics/pokemon/skitty/front.png index 1242c7a3e98a..2a7321c26823 100644 Binary files a/graphics/pokemon/skitty/front.png and b/graphics/pokemon/skitty/front.png differ diff --git a/graphics/pokemon/skitty/normal.pal b/graphics/pokemon/skitty/normal.pal index d0413c239c7c..482ce24eca27 100644 --- a/graphics/pokemon/skitty/normal.pal +++ b/graphics/pokemon/skitty/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 104 56 -248 240 176 -232 208 144 +120 96 64 +240 216 168 +232 184 120 16 16 16 -152 72 80 -248 184 176 -232 144 144 -216 120 120 -168 112 176 -104 56 136 -192 168 112 -192 128 152 +152 48 64 +240 152 176 +232 120 144 +208 88 120 +136 56 144 +104 48 112 +200 136 88 +216 96 128 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/skorupi/anim_front.png b/graphics/pokemon/skorupi/anim_front.png index bf20b1b24d27..2120db4b0f68 100644 Binary files a/graphics/pokemon/skorupi/anim_front.png and b/graphics/pokemon/skorupi/anim_front.png differ diff --git a/graphics/pokemon/skorupi/front.png b/graphics/pokemon/skorupi/front.png index 0395737aca07..480051932f5c 100644 Binary files a/graphics/pokemon/skorupi/front.png and b/graphics/pokemon/skorupi/front.png differ diff --git a/graphics/pokemon/skorupi/normal.pal b/graphics/pokemon/skorupi/normal.pal index 1c98bdc2581f..4b71afccbbce 100644 --- a/graphics/pokemon/skorupi/normal.pal +++ b/graphics/pokemon/skorupi/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -136 112 104 -248 248 240 +136 136 136 +248 248 248 16 16 16 -56 64 120 -224 208 200 +64 64 112 +208 208 224 104 120 176 -152 168 216 -200 176 168 -40 32 80 -88 104 152 +144 152 232 +176 176 208 +40 40 48 +104 104 176 40 96 112 48 168 184 40 40 48 diff --git a/graphics/pokemon/skuntank/anim_front.png b/graphics/pokemon/skuntank/anim_front.png index b9172b0f58d4..52caa25adc04 100644 Binary files a/graphics/pokemon/skuntank/anim_front.png and b/graphics/pokemon/skuntank/anim_front.png differ diff --git a/graphics/pokemon/skuntank/front.png b/graphics/pokemon/skuntank/front.png index a6d0f5f8bc21..d188535e26b7 100644 Binary files a/graphics/pokemon/skuntank/front.png and b/graphics/pokemon/skuntank/front.png differ diff --git a/graphics/pokemon/skuntank/normal.pal b/graphics/pokemon/skuntank/normal.pal index e42858906970..c76b89826283 100644 --- a/graphics/pokemon/skuntank/normal.pal +++ b/graphics/pokemon/skuntank/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 48 72 -136 112 144 -96 72 112 +72 56 96 +136 112 176 +104 80 136 16 16 16 -48 24 56 -176 152 128 -248 224 168 -88 80 64 +48 40 64 +176 152 120 +232 216 168 +96 88 64 248 248 248 -184 200 208 -160 80 40 -232 120 72 -120 56 24 -152 88 96 -232 136 136 +176 176 208 +176 88 48 +240 136 72 +128 72 48 +104 96 112 +0 0 0 diff --git a/graphics/pokemon/slaking/anim_front.png b/graphics/pokemon/slaking/anim_front.png index c488092fbae2..1b0ddece353f 100644 Binary files a/graphics/pokemon/slaking/anim_front.png and b/graphics/pokemon/slaking/anim_front.png differ diff --git a/graphics/pokemon/slaking/back.png b/graphics/pokemon/slaking/back.png index f646172518b8..9e541ebc144c 100644 Binary files a/graphics/pokemon/slaking/back.png and b/graphics/pokemon/slaking/back.png differ diff --git a/graphics/pokemon/slaking/front.png b/graphics/pokemon/slaking/front.png index b99bc6c6f170..bc7ed93b02e7 100644 Binary files a/graphics/pokemon/slaking/front.png and b/graphics/pokemon/slaking/front.png differ diff --git a/graphics/pokemon/slaking/normal.pal b/graphics/pokemon/slaking/normal.pal index 95c095135c23..835251a5123d 100644 --- a/graphics/pokemon/slaking/normal.pal +++ b/graphics/pokemon/slaking/normal.pal @@ -4,16 +4,16 @@ JASC-PAL 152 208 160 16 16 16 88 64 48 -96 104 120 +88 96 120 232 232 248 -168 136 112 -128 96 72 -192 200 224 -232 208 176 -184 168 144 +160 128 104 +120 96 72 +208 208 232 +232 216 184 +184 176 144 248 248 248 -120 56 80 -224 144 160 -184 96 120 -64 48 48 +144 64 88 +216 128 152 +200 88 128 +0 0 0 0 0 0 diff --git a/graphics/pokemon/slakoth/anim_front.png b/graphics/pokemon/slakoth/anim_front.png index b15f5d039dc3..32085285f7c8 100644 Binary files a/graphics/pokemon/slakoth/anim_front.png and b/graphics/pokemon/slakoth/anim_front.png differ diff --git a/graphics/pokemon/slakoth/front.png b/graphics/pokemon/slakoth/front.png index 737b8dbae247..e40b34fb2761 100644 Binary files a/graphics/pokemon/slakoth/front.png and b/graphics/pokemon/slakoth/front.png differ diff --git a/graphics/pokemon/slakoth/normal.pal b/graphics/pokemon/slakoth/normal.pal index 15dd6bc1c006..f9b089f45959 100644 --- a/graphics/pokemon/slakoth/normal.pal +++ b/graphics/pokemon/slakoth/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 64 48 -16 16 16 -232 216 200 -200 184 160 -176 152 128 -112 80 56 -168 120 96 +80 56 40 +0 0 0 +216 200 184 +192 176 144 +176 152 120 +104 72 32 +136 112 80 200 200 200 152 152 152 248 248 248 -224 144 144 -168 104 104 -120 64 64 +224 136 144 +184 88 104 +120 56 80 64 64 64 0 0 0 diff --git a/graphics/pokemon/slowbro/anim_front.png b/graphics/pokemon/slowbro/anim_front.png index 2e4c70678316..0030c95633ba 100644 Binary files a/graphics/pokemon/slowbro/anim_front.png and b/graphics/pokemon/slowbro/anim_front.png differ diff --git a/graphics/pokemon/slowbro/front.png b/graphics/pokemon/slowbro/front.png index 9c7144bb8e6e..c0d69e069dbc 100644 Binary files a/graphics/pokemon/slowbro/front.png and b/graphics/pokemon/slowbro/front.png differ diff --git a/graphics/pokemon/slowbro/normal.pal b/graphics/pokemon/slowbro/normal.pal index cdb6101e6eac..ae4d12a99203 100644 --- a/graphics/pokemon/slowbro/normal.pal +++ b/graphics/pokemon/slowbro/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 56 72 -200 120 136 -232 144 168 +123 49 49 +230 106 123 +255 148 148 24 24 24 -248 184 192 +255 189 172 248 248 248 216 216 208 -72 96 128 -120 152 168 -128 104 72 -168 200 216 -248 216 200 -232 200 160 -192 168 120 -184 128 160 +82 82 90 +139 148 148 +131 90 32 +180 189 189 +255 238 180 +238 213 131 +205 164 98 +232 80 40 diff --git a/graphics/pokemon/slowking/anim_front.png b/graphics/pokemon/slowking/anim_front.png index 853d6180cae9..d9740c00773d 100644 Binary files a/graphics/pokemon/slowking/anim_front.png and b/graphics/pokemon/slowking/anim_front.png differ diff --git a/graphics/pokemon/slowking/front.png b/graphics/pokemon/slowking/front.png index 928c6925d349..d9af555c2570 100644 Binary files a/graphics/pokemon/slowking/front.png and b/graphics/pokemon/slowking/front.png differ diff --git a/graphics/pokemon/slowking/normal.pal b/graphics/pokemon/slowking/normal.pal index f0d76fb462a2..a001414d9abd 100644 --- a/graphics/pokemon/slowking/normal.pal +++ b/graphics/pokemon/slowking/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -104 96 112 -216 232 224 -168 168 152 -96 48 56 +96 96 104 +208 208 208 +168 160 160 +120 48 48 248 248 248 -224 120 120 -168 80 96 -248 168 168 -112 96 48 -184 168 104 -248 240 160 -184 80 72 -232 120 88 +224 104 120 +168 64 80 +248 144 144 +128 88 32 +200 160 96 +232 208 128 +224 64 32 +248 88 72 176 176 168 diff --git a/graphics/pokemon/slowpoke/anim_front.png b/graphics/pokemon/slowpoke/anim_front.png index 2a4da7d8a7d8..61740747b518 100644 Binary files a/graphics/pokemon/slowpoke/anim_front.png and b/graphics/pokemon/slowpoke/anim_front.png differ diff --git a/graphics/pokemon/slowpoke/back.png b/graphics/pokemon/slowpoke/back.png index 96e62c4bf056..e2ff691a06f3 100644 Binary files a/graphics/pokemon/slowpoke/back.png and b/graphics/pokemon/slowpoke/back.png differ diff --git a/graphics/pokemon/slowpoke/front.png b/graphics/pokemon/slowpoke/front.png index 592a56f53921..aa53f9c55500 100644 Binary files a/graphics/pokemon/slowpoke/front.png and b/graphics/pokemon/slowpoke/front.png differ diff --git a/graphics/pokemon/slowpoke/normal.pal b/graphics/pokemon/slowpoke/normal.pal index 28586dd73b90..b07163f93aa1 100644 --- a/graphics/pokemon/slowpoke/normal.pal +++ b/graphics/pokemon/slowpoke/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 88 104 -200 120 136 -248 184 192 -232 144 168 -104 56 64 +168 64 80 +216 96 120 +248 160 160 +248 128 144 +120 32 48 104 96 96 208 200 200 248 248 248 16 16 16 -208 176 128 -128 104 72 -248 216 200 -232 200 160 -248 232 232 -240 192 208 +216 160 96 +136 88 24 +248 224 176 +232 192 136 +248 224 176 +0 0 0 diff --git a/graphics/pokemon/slugma/anim_front.png b/graphics/pokemon/slugma/anim_front.png index 3ddbf4f6e50c..98d0bd14cee6 100644 Binary files a/graphics/pokemon/slugma/anim_front.png and b/graphics/pokemon/slugma/anim_front.png differ diff --git a/graphics/pokemon/slugma/front.png b/graphics/pokemon/slugma/front.png index 643357be0c85..a64ce0042ae8 100644 Binary files a/graphics/pokemon/slugma/front.png and b/graphics/pokemon/slugma/front.png differ diff --git a/graphics/pokemon/slugma/normal.pal b/graphics/pokemon/slugma/normal.pal index 91d80b1b5be8..11a0e10c2005 100644 --- a/graphics/pokemon/slugma/normal.pal +++ b/graphics/pokemon/slugma/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -184 48 32 -104 32 16 -240 144 104 +200 48 24 +120 24 0 +248 144 112 16 16 16 -232 80 64 +232 72 64 240 112 104 -248 232 136 +248 232 120 248 248 248 -200 184 80 -248 232 136 +232 184 8 +248 232 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/smeargle/anim_front.png b/graphics/pokemon/smeargle/anim_front.png index 53c7cd6cbc0d..9a62395ccd5c 100644 Binary files a/graphics/pokemon/smeargle/anim_front.png and b/graphics/pokemon/smeargle/anim_front.png differ diff --git a/graphics/pokemon/smeargle/front.png b/graphics/pokemon/smeargle/front.png index d2eacc4a9bcc..1804f2514c01 100644 Binary files a/graphics/pokemon/smeargle/front.png and b/graphics/pokemon/smeargle/front.png differ diff --git a/graphics/pokemon/smeargle/normal.pal b/graphics/pokemon/smeargle/normal.pal index e55b273d03a0..2d9f37a4a51d 100644 --- a/graphics/pokemon/smeargle/normal.pal +++ b/graphics/pokemon/smeargle/normal.pal @@ -9,11 +9,11 @@ JASC-PAL 184 160 136 16 16 16 248 248 248 -96 128 48 -152 184 112 +24 152 0 +104 216 64 144 144 152 -128 168 88 +64 192 24 144 120 104 -64 96 16 +8 96 0 176 64 64 232 128 128 diff --git a/graphics/pokemon/smoochum/anim_front.png b/graphics/pokemon/smoochum/anim_front.png index 53c16714d1d6..c9d2b13b0844 100644 Binary files a/graphics/pokemon/smoochum/anim_front.png and b/graphics/pokemon/smoochum/anim_front.png differ diff --git a/graphics/pokemon/smoochum/front.png b/graphics/pokemon/smoochum/front.png index 6d64ea327a39..6f492748097e 100644 Binary files a/graphics/pokemon/smoochum/front.png and b/graphics/pokemon/smoochum/front.png differ diff --git a/graphics/pokemon/smoochum/normal.pal b/graphics/pokemon/smoochum/normal.pal index b5e84f7c0780..162bb5da4ff3 100644 --- a/graphics/pokemon/smoochum/normal.pal +++ b/graphics/pokemon/smoochum/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 112 32 -240 216 104 -208 184 96 -16 16 16 -144 40 80 -184 88 128 +144 128 24 +248 224 88 +216 200 48 +0 0 0 +136 16 88 +192 88 144 208 208 208 -240 120 168 +240 128 176 248 248 248 -72 136 128 -248 160 176 -248 224 160 -136 112 72 -208 184 136 -168 160 72 +48 128 104 +248 176 176 +240 224 168 +136 128 72 +216 192 128 +184 168 40 diff --git a/graphics/pokemon/sneasel/anim_front.png b/graphics/pokemon/sneasel/anim_front.png index 2666f8775eea..72da2a55e224 100644 Binary files a/graphics/pokemon/sneasel/anim_front.png and b/graphics/pokemon/sneasel/anim_front.png differ diff --git a/graphics/pokemon/sneasel/front.png b/graphics/pokemon/sneasel/front.png index bd730da20397..d422fe52e447 100644 Binary files a/graphics/pokemon/sneasel/front.png and b/graphics/pokemon/sneasel/front.png differ diff --git a/graphics/pokemon/sneasel/normal.pal b/graphics/pokemon/sneasel/normal.pal index 78967e7dc9ae..10165115fc20 100644 --- a/graphics/pokemon/sneasel/normal.pal +++ b/graphics/pokemon/sneasel/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 32 48 -184 64 88 -24 56 72 -232 96 96 -40 96 120 -72 152 168 -16 16 16 -56 136 152 -200 152 80 -248 192 96 -168 176 184 -240 240 248 -56 56 72 -248 144 152 +128 32 80 +192 40 112 +32 48 88 +240 80 112 +48 96 112 +56 144 168 0 0 0 +64 128 152 +160 120 56 +216 200 112 +184 184 192 +240 240 248 +72 72 72 +248 88 120 +248 144 160 diff --git a/graphics/pokemon/snivy/anim_front.png b/graphics/pokemon/snivy/anim_front.png index 59b26b7aa297..893d974a254f 100644 Binary files a/graphics/pokemon/snivy/anim_front.png and b/graphics/pokemon/snivy/anim_front.png differ diff --git a/graphics/pokemon/snivy/front.png b/graphics/pokemon/snivy/front.png index 19a181c0fffa..040a32f832c3 100644 Binary files a/graphics/pokemon/snivy/front.png and b/graphics/pokemon/snivy/front.png differ diff --git a/graphics/pokemon/snivy/normal.pal b/graphics/pokemon/snivy/normal.pal index 6c79186ce3ea..1a3499e6aa19 100644 --- a/graphics/pokemon/snivy/normal.pal +++ b/graphics/pokemon/snivy/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -16 64 24 -80 184 80 +0 80 0 +0 176 0 8 8 8 -248 200 48 -240 248 168 -96 104 80 -176 168 112 -176 144 40 -152 56 56 -88 16 16 +248 216 40 +248 240 184 +136 120 48 +192 184 96 +192 152 0 +144 56 0 +88 32 0 248 248 248 -184 112 80 -56 120 56 -136 112 48 +216 120 64 +8 128 0 +0 0 0 0 0 0 diff --git a/graphics/pokemon/snorlax/anim_front.png b/graphics/pokemon/snorlax/anim_front.png index 87ff8eb73140..cfcd8e4aedc4 100644 Binary files a/graphics/pokemon/snorlax/anim_front.png and b/graphics/pokemon/snorlax/anim_front.png differ diff --git a/graphics/pokemon/snorlax/front.png b/graphics/pokemon/snorlax/front.png index b2d7776d5c97..62b04645a558 100644 Binary files a/graphics/pokemon/snorlax/front.png and b/graphics/pokemon/snorlax/front.png differ diff --git a/graphics/pokemon/snorlax/normal.pal b/graphics/pokemon/snorlax/normal.pal index 421db579cd1a..b639f9037efe 100644 --- a/graphics/pokemon/snorlax/normal.pal +++ b/graphics/pokemon/snorlax/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 8 -16 48 56 -72 144 168 -16 88 120 -32 64 80 -112 168 192 -216 192 176 -248 232 208 +16 57 65 +82 139 172 +49 90 123 +16 57 65 +115 164 189 +230 197 172 +246 230 189 248 248 248 112 112 112 -160 128 104 -232 208 184 +164 115 82 +246 213 189 200 200 200 -96 80 64 +98 65 32 16 48 56 diff --git a/graphics/pokemon/snorunt/anim_front.png b/graphics/pokemon/snorunt/anim_front.png index ff0a10b7665b..a3bef621ce41 100644 Binary files a/graphics/pokemon/snorunt/anim_front.png and b/graphics/pokemon/snorunt/anim_front.png differ diff --git a/graphics/pokemon/snorunt/front.png b/graphics/pokemon/snorunt/front.png index 4950af81468b..02c9560981d5 100644 Binary files a/graphics/pokemon/snorunt/front.png and b/graphics/pokemon/snorunt/front.png differ diff --git a/graphics/pokemon/snorunt/normal.pal b/graphics/pokemon/snorunt/normal.pal index 7e422617f698..28932d73c4d9 100644 --- a/graphics/pokemon/snorunt/normal.pal +++ b/graphics/pokemon/snorunt/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -192 160 80 -120 104 48 -248 232 168 -232 208 120 -16 16 16 -224 120 72 -48 40 40 -80 72 72 -168 96 64 -120 104 104 -96 216 248 -56 152 184 +200 136 88 +144 96 72 +248 232 160 +232 192 104 +0 0 0 +248 112 88 +56 48 48 +72 72 72 +176 88 48 +112 112 112 +136 208 248 +64 144 208 216 216 216 248 248 248 176 168 168 diff --git a/graphics/pokemon/snover/anim_front.png b/graphics/pokemon/snover/anim_front.png index 6b510dcab445..f666d58b36d7 100644 Binary files a/graphics/pokemon/snover/anim_front.png and b/graphics/pokemon/snover/anim_front.png differ diff --git a/graphics/pokemon/snover/front.png b/graphics/pokemon/snover/front.png index e11a3b995a59..9dff7b2a51dd 100644 Binary files a/graphics/pokemon/snover/front.png and b/graphics/pokemon/snover/front.png differ diff --git a/graphics/pokemon/snover/normal.pal b/graphics/pokemon/snover/normal.pal index 5a37debe8953..ba3cd07ba598 100644 --- a/graphics/pokemon/snover/normal.pal +++ b/graphics/pokemon/snover/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 168 224 24 -128 160 184 -88 112 136 +144 160 168 +104 120 128 248 248 248 -16 16 16 -184 208 224 -40 72 80 -96 160 144 -64 120 112 -128 200 176 -80 72 56 -112 104 80 -152 128 104 -64 120 112 +32 32 40 +200 216 216 +40 88 88 +72 152 136 +56 112 120 +136 208 168 +88 72 64 +112 88 72 +136 112 80 +56 112 120 0 0 0 0 0 0 diff --git a/graphics/pokemon/snubbull/anim_front.png b/graphics/pokemon/snubbull/anim_front.png index b4f411269185..b74b9d6a5224 100644 Binary files a/graphics/pokemon/snubbull/anim_front.png and b/graphics/pokemon/snubbull/anim_front.png differ diff --git a/graphics/pokemon/snubbull/front.png b/graphics/pokemon/snubbull/front.png index 4e3f2c60f528..fa6456d891f2 100644 Binary files a/graphics/pokemon/snubbull/front.png and b/graphics/pokemon/snubbull/front.png differ diff --git a/graphics/pokemon/snubbull/normal.pal b/graphics/pokemon/snubbull/normal.pal index 31f88d4cca1e..434cbb11cd75 100644 --- a/graphics/pokemon/snubbull/normal.pal +++ b/graphics/pokemon/snubbull/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -80 72 72 -200 96 112 -144 48 64 -112 112 112 -248 144 160 -248 176 184 +72 88 88 +232 104 120 +168 48 64 +112 128 128 +248 168 176 +248 192 192 216 216 216 248 248 248 -112 152 176 -136 208 240 -88 64 40 -152 128 104 -248 200 144 -132 76 86 +112 168 224 +176 216 240 +88 48 8 +184 104 8 +248 176 80 +168 0 0 diff --git a/graphics/pokemon/solosis/anim_front.png b/graphics/pokemon/solosis/anim_front.png index 250ea1b98fdf..b1130a2bc57f 100644 Binary files a/graphics/pokemon/solosis/anim_front.png and b/graphics/pokemon/solosis/anim_front.png differ diff --git a/graphics/pokemon/solosis/front.png b/graphics/pokemon/solosis/front.png index 0c233bf788a6..6be1e5a0685a 100644 Binary files a/graphics/pokemon/solosis/front.png and b/graphics/pokemon/solosis/front.png differ diff --git a/graphics/pokemon/solosis/normal.pal b/graphics/pokemon/solosis/normal.pal index 94dde5274061..d35894cc360d 100644 --- a/graphics/pokemon/solosis/normal.pal +++ b/graphics/pokemon/solosis/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -56 136 104 -112 184 136 -184 232 184 +64 136 88 +88 176 120 +144 224 168 248 248 248 88 128 88 -208 232 168 +200 224 184 16 16 16 -104 96 56 -176 160 104 -232 216 128 -160 168 120 -112 56 72 -48 104 80 -160 88 88 -176 192 136 +104 96 40 +160 152 48 +224 216 112 +152 168 136 +144 48 72 +48 96 64 +192 64 80 +176 200 160 diff --git a/graphics/pokemon/solrock/anim_front.png b/graphics/pokemon/solrock/anim_front.png index 8156f736c706..a8ea53f013df 100644 Binary files a/graphics/pokemon/solrock/anim_front.png and b/graphics/pokemon/solrock/anim_front.png differ diff --git a/graphics/pokemon/solrock/front.png b/graphics/pokemon/solrock/front.png index e24e84149273..24336f16be3a 100644 Binary files a/graphics/pokemon/solrock/front.png and b/graphics/pokemon/solrock/front.png differ diff --git a/graphics/pokemon/solrock/normal.pal b/graphics/pokemon/solrock/normal.pal index 973515b65a8d..28fde096af34 100644 --- a/graphics/pokemon/solrock/normal.pal +++ b/graphics/pokemon/solrock/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 72 32 +96 72 24 16 16 16 -240 216 144 -216 192 88 -184 152 72 +240 224 96 +216 176 24 +192 144 64 232 216 104 -144 112 56 -152 80 32 -208 96 56 -136 64 32 -216 120 80 -240 152 96 -216 32 40 +152 104 32 +168 72 32 +208 80 24 +160 80 0 +232 96 32 +240 136 80 +192 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/spearow/anim_front.png b/graphics/pokemon/spearow/anim_front.png index 44dac4526b30..c52e1ce2af7c 100644 Binary files a/graphics/pokemon/spearow/anim_front.png and b/graphics/pokemon/spearow/anim_front.png differ diff --git a/graphics/pokemon/spearow/back.png b/graphics/pokemon/spearow/back.png index f0a62997a7e2..6d5395837577 100644 Binary files a/graphics/pokemon/spearow/back.png and b/graphics/pokemon/spearow/back.png differ diff --git a/graphics/pokemon/spearow/front.png b/graphics/pokemon/spearow/front.png index 3d73670a1af7..052422e9ad18 100644 Binary files a/graphics/pokemon/spearow/front.png and b/graphics/pokemon/spearow/front.png differ diff --git a/graphics/pokemon/spearow/normal.pal b/graphics/pokemon/spearow/normal.pal index 14354042c8a5..8eda920f0433 100644 --- a/graphics/pokemon/spearow/normal.pal +++ b/graphics/pokemon/spearow/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 72 48 -160 104 64 -64 40 24 -200 144 104 -16 16 16 -216 80 72 -160 56 64 -224 208 176 -248 248 248 -224 184 176 -224 144 136 -184 136 128 -120 40 40 -184 160 136 -72 64 64 +156 82 24 +197 106 32 +106 65 24 +238 172 82 +0 0 0 +238 82 74 +172 65 74 +230 213 180 +255 255 255 +255 213 205 +255 164 139 +197 180 156 +123 41 41 +139 123 98 +98 82 74 diff --git a/graphics/pokemon/spearow/shiny.pal b/graphics/pokemon/spearow/shiny.pal index 240a50c94bc9..9f44b1ba5bdb 100644 --- a/graphics/pokemon/spearow/shiny.pal +++ b/graphics/pokemon/spearow/shiny.pal @@ -13,7 +13,7 @@ JASC-PAL 248 248 248 248 248 160 240 232 96 -248 216 24 +201 191 147 160 104 32 144 136 104 80 72 56 diff --git a/graphics/pokemon/spheal/anim_front.png b/graphics/pokemon/spheal/anim_front.png index 5cc50c5c9da9..31c4d81d1a4f 100644 Binary files a/graphics/pokemon/spheal/anim_front.png and b/graphics/pokemon/spheal/anim_front.png differ diff --git a/graphics/pokemon/spheal/front.png b/graphics/pokemon/spheal/front.png index 40f4ad27789b..2063a772bd86 100644 Binary files a/graphics/pokemon/spheal/front.png and b/graphics/pokemon/spheal/front.png differ diff --git a/graphics/pokemon/spheal/normal.pal b/graphics/pokemon/spheal/normal.pal index 2ad58f410d2c..866fa339250e 100644 --- a/graphics/pokemon/spheal/normal.pal +++ b/graphics/pokemon/spheal/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 56 72 120 -112 144 200 -136 168 224 -72 112 184 -168 192 232 -32 32 32 +104 136 216 +144 168 240 +72 104 184 +168 192 248 +0 0 0 248 248 248 -102 93 71 -247 232 200 -214 194 145 -178 160 116 -130 93 102 -237 166 181 +104 88 48 +240 224 184 +200 184 128 +160 144 104 +168 56 80 +224 104 120 0 0 0 0 0 0 diff --git a/graphics/pokemon/spinarak/anim_front.png b/graphics/pokemon/spinarak/anim_front.png index 6b8097233c7d..d5837da994cc 100644 Binary files a/graphics/pokemon/spinarak/anim_front.png and b/graphics/pokemon/spinarak/anim_front.png differ diff --git a/graphics/pokemon/spinarak/front.png b/graphics/pokemon/spinarak/front.png index 7d1f51def66b..36c6e8f60d4b 100644 Binary files a/graphics/pokemon/spinarak/front.png and b/graphics/pokemon/spinarak/front.png differ diff --git a/graphics/pokemon/spinarak/normal.pal b/graphics/pokemon/spinarak/normal.pal index aad0bb3a3644..22db1c2ce942 100644 --- a/graphics/pokemon/spinarak/normal.pal +++ b/graphics/pokemon/spinarak/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 0 176 232 16 16 16 -56 80 32 -40 88 96 -160 216 120 -192 232 144 -128 168 88 +48 72 16 +40 96 96 +136 224 48 +168 240 96 +80 176 104 96 152 160 112 88 32 -192 160 72 +192 176 24 72 72 72 248 248 248 -248 208 96 +248 224 72 200 192 192 144 48 40 248 88 72 diff --git a/graphics/pokemon/spiritomb/anim_front.png b/graphics/pokemon/spiritomb/anim_front.png index 6a70d9239f22..8342c4220dba 100644 Binary files a/graphics/pokemon/spiritomb/anim_front.png and b/graphics/pokemon/spiritomb/anim_front.png differ diff --git a/graphics/pokemon/spiritomb/front.png b/graphics/pokemon/spiritomb/front.png index e2ad070a8e2c..bcfd704f6363 100644 Binary files a/graphics/pokemon/spiritomb/front.png and b/graphics/pokemon/spiritomb/front.png differ diff --git a/graphics/pokemon/spiritomb/normal.pal b/graphics/pokemon/spiritomb/normal.pal index 4f53eb76c38c..0b612defc24b 100644 --- a/graphics/pokemon/spiritomb/normal.pal +++ b/graphics/pokemon/spiritomb/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -208 136 168 -160 104 128 -88 184 64 -152 208 128 -240 224 120 -56 96 48 -80 120 56 +192 112 184 +160 80 152 +96 176 64 +184 208 64 +248 216 16 +48 96 72 +72 136 64 16 16 16 48 64 48 -120 72 96 -104 64 80 -80 72 64 -184 160 136 -152 136 112 -136 112 96 +112 72 120 +80 64 104 +80 64 80 +176 152 144 +152 128 104 +128 104 96 diff --git a/graphics/pokemon/spoink/anim_front.png b/graphics/pokemon/spoink/anim_front.png index a1e84f375cf0..0e40632d4b18 100644 Binary files a/graphics/pokemon/spoink/anim_front.png and b/graphics/pokemon/spoink/anim_front.png differ diff --git a/graphics/pokemon/spoink/front.png b/graphics/pokemon/spoink/front.png index 2f59eb3971eb..4d5e236fe3fd 100644 Binary files a/graphics/pokemon/spoink/front.png and b/graphics/pokemon/spoink/front.png differ diff --git a/graphics/pokemon/spoink/normal.pal b/graphics/pokemon/spoink/normal.pal index 8c3c5fbb8a49..5b55893ab586 100644 --- a/graphics/pokemon/spoink/normal.pal +++ b/graphics/pokemon/spoink/normal.pal @@ -2,9 +2,9 @@ JASC-PAL 0100 16 152 208 160 -208 120 128 -232 144 152 -240 184 184 +192 96 120 +232 128 168 +240 160 184 144 80 80 248 208 224 248 248 248 diff --git a/graphics/pokemon/squirtle/anim_front.png b/graphics/pokemon/squirtle/anim_front.png index a7559113d6ef..5c32cf67fa27 100644 Binary files a/graphics/pokemon/squirtle/anim_front.png and b/graphics/pokemon/squirtle/anim_front.png differ diff --git a/graphics/pokemon/squirtle/back.png b/graphics/pokemon/squirtle/back.png index 42cbb8f5e3d7..a57207153f15 100644 Binary files a/graphics/pokemon/squirtle/back.png and b/graphics/pokemon/squirtle/back.png differ diff --git a/graphics/pokemon/squirtle/front.png b/graphics/pokemon/squirtle/front.png index 5920ee165b2b..2148e227fdcc 100644 Binary files a/graphics/pokemon/squirtle/front.png and b/graphics/pokemon/squirtle/front.png differ diff --git a/graphics/pokemon/squirtle/normal.pal b/graphics/pokemon/squirtle/normal.pal index bbe75688dd5f..b2282cee8b17 100644 --- a/graphics/pokemon/squirtle/normal.pal +++ b/graphics/pokemon/squirtle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 152 184 -40 96 112 -176 216 232 -120 192 208 +90 156 164 +41 115 131 +180 230 238 +139 197 205 16 16 16 208 200 200 248 248 248 -184 88 128 +131 41 0 88 64 32 -168 96 72 -136 112 72 -184 160 128 -240 208 152 -80 48 40 -200 144 136 +189 106 0 +205 123 41 +230 172 90 +255 213 106 +98 41 0 +213 148 82 diff --git a/graphics/pokemon/squirtle/shiny.pal b/graphics/pokemon/squirtle/shiny.pal index f069e2dfac72..ff20b8f51586 100644 --- a/graphics/pokemon/squirtle/shiny.pal +++ b/graphics/pokemon/squirtle/shiny.pal @@ -9,7 +9,7 @@ JASC-PAL 16 16 16 208 200 200 248 248 248 -200 80 160 +128 56 0 128 56 0 88 168 40 200 136 32 diff --git a/graphics/pokemon/stantler/anim_front.png b/graphics/pokemon/stantler/anim_front.png index 1e36c8a5c1d7..e0ce71ad7fe2 100644 Binary files a/graphics/pokemon/stantler/anim_front.png and b/graphics/pokemon/stantler/anim_front.png differ diff --git a/graphics/pokemon/stantler/front.png b/graphics/pokemon/stantler/front.png index 0fc22dd1996a..3c4e0b08f806 100644 Binary files a/graphics/pokemon/stantler/front.png and b/graphics/pokemon/stantler/front.png differ diff --git a/graphics/pokemon/stantler/normal.pal b/graphics/pokemon/stantler/normal.pal index 64b959b5816a..fade238f1d91 100644 --- a/graphics/pokemon/stantler/normal.pal +++ b/graphics/pokemon/stantler/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 104 80 -248 216 112 -88 64 56 -176 152 88 +152 96 80 +248 232 136 +104 64 24 +224 168 24 16 16 16 -72 48 80 -184 160 168 -128 104 136 -176 128 104 -216 160 136 +72 72 72 +176 176 176 +120 120 120 +184 128 96 +232 168 120 248 248 248 -120 72 40 -248 232 184 -184 168 136 +120 64 32 +248 248 168 +248 216 128 0 0 0 diff --git a/graphics/pokemon/staraptor/anim_front.png b/graphics/pokemon/staraptor/anim_front.png index 33c16a6888f5..4620e6cfdc36 100644 Binary files a/graphics/pokemon/staraptor/anim_front.png and b/graphics/pokemon/staraptor/anim_front.png differ diff --git a/graphics/pokemon/staraptor/front.png b/graphics/pokemon/staraptor/front.png index 5387fee5fe77..dbb5a2f9592f 100644 Binary files a/graphics/pokemon/staraptor/front.png and b/graphics/pokemon/staraptor/front.png differ diff --git a/graphics/pokemon/staraptor/normal.pal b/graphics/pokemon/staraptor/normal.pal index bbe481816709..0e4196241bdd 100644 --- a/graphics/pokemon/staraptor/normal.pal +++ b/graphics/pokemon/staraptor/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 40 40 -112 96 88 +56 56 56 +120 104 120 16 16 16 -80 72 64 -168 56 40 -232 88 64 -64 48 56 -144 112 128 -104 88 88 -184 176 168 -240 232 232 -112 80 40 -248 168 88 -192 120 56 +88 80 88 +152 64 64 +240 80 64 +80 56 72 +152 128 136 +112 88 96 +176 176 176 +248 248 248 +120 64 32 +248 144 40 +184 96 0 0 0 0 diff --git a/graphics/pokemon/staravia/anim_front.png b/graphics/pokemon/staravia/anim_front.png index fc451c052121..5f8db161de3d 100644 Binary files a/graphics/pokemon/staravia/anim_front.png and b/graphics/pokemon/staravia/anim_front.png differ diff --git a/graphics/pokemon/staravia/front.png b/graphics/pokemon/staravia/front.png index ce01062bae3a..bd7c8ab4f143 100644 Binary files a/graphics/pokemon/staravia/front.png and b/graphics/pokemon/staravia/front.png differ diff --git a/graphics/pokemon/staravia/normal.pal b/graphics/pokemon/staravia/normal.pal index ec0bd1984965..f57c2fd0b78c 100644 --- a/graphics/pokemon/staravia/normal.pal +++ b/graphics/pokemon/staravia/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 56 40 40 -88 80 72 +88 80 88 16 16 16 -160 128 128 +152 128 136 240 240 240 -168 184 192 -192 96 32 -224 128 72 -128 64 24 -112 88 88 -56 48 56 -147 99 111 +176 176 176 +184 96 0 +248 144 40 +120 64 32 +112 88 96 +56 56 56 +248 88 64 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/starly/anim_front.png b/graphics/pokemon/starly/anim_front.png index d05ad5d57125..1235ff408fce 100644 Binary files a/graphics/pokemon/starly/anim_front.png and b/graphics/pokemon/starly/anim_front.png differ diff --git a/graphics/pokemon/starly/back.png b/graphics/pokemon/starly/back.png index 96d3309ce407..89148bc9f85e 100644 Binary files a/graphics/pokemon/starly/back.png and b/graphics/pokemon/starly/back.png differ diff --git a/graphics/pokemon/starly/front.png b/graphics/pokemon/starly/front.png index 28aa86e57260..c188a7ff5a01 100644 Binary files a/graphics/pokemon/starly/front.png and b/graphics/pokemon/starly/front.png differ diff --git a/graphics/pokemon/starly/normal.pal b/graphics/pokemon/starly/normal.pal index ae7a09f366c6..2d0c723a3f25 100644 --- a/graphics/pokemon/starly/normal.pal +++ b/graphics/pokemon/starly/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 64 56 +80 72 72 16 16 16 -112 96 96 +136 112 112 24 24 32 184 176 168 248 248 248 -224 216 208 +208 216 216 120 72 24 240 128 56 176 88 40 -152 128 128 +168 152 152 112 88 88 112 96 96 -144 96 104 +248 80 64 0 0 0 diff --git a/graphics/pokemon/starmie/anim_front.png b/graphics/pokemon/starmie/anim_front.png index bf69ae037265..0a912a022536 100644 Binary files a/graphics/pokemon/starmie/anim_front.png and b/graphics/pokemon/starmie/anim_front.png differ diff --git a/graphics/pokemon/starmie/front.png b/graphics/pokemon/starmie/front.png index ba121899c89d..b3c4861d7301 100644 Binary files a/graphics/pokemon/starmie/front.png and b/graphics/pokemon/starmie/front.png differ diff --git a/graphics/pokemon/starmie/normal.pal b/graphics/pokemon/starmie/normal.pal index a05b36c5b13f..2a266fc3f751 100644 --- a/graphics/pokemon/starmie/normal.pal +++ b/graphics/pokemon/starmie/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 88 120 -64 48 80 -200 200 240 -128 120 168 -160 160 216 -16 16 16 -80 72 48 -248 216 96 -248 232 176 -184 160 80 -120 104 56 -240 176 176 -184 64 80 -224 112 112 -128 40 56 +90 82 156 +49 57 115 +213 172 238 +139 115 189 +180 139 213 +0 0 0 +90 65 49 +238 197 74 +255 230 148 +197 148 32 +148 115 65 +246 197 222 +205 32 90 +246 82 115 +139 16 82 diff --git a/graphics/pokemon/staryu/anim_front.png b/graphics/pokemon/staryu/anim_front.png index be579253ba65..38d62ffc8a00 100644 Binary files a/graphics/pokemon/staryu/anim_front.png and b/graphics/pokemon/staryu/anim_front.png differ diff --git a/graphics/pokemon/staryu/front.png b/graphics/pokemon/staryu/front.png index 4283d56fbdde..6739b8cb7024 100644 Binary files a/graphics/pokemon/staryu/front.png and b/graphics/pokemon/staryu/front.png differ diff --git a/graphics/pokemon/staryu/normal.pal b/graphics/pokemon/staryu/normal.pal index e410143a5e16..0b6d5cc3d2fd 100644 --- a/graphics/pokemon/staryu/normal.pal +++ b/graphics/pokemon/staryu/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 104 64 -80 48 32 -224 192 112 -16 16 16 -96 72 56 -176 128 72 -112 104 56 -248 240 192 -72 64 40 -248 216 88 -160 152 80 -240 128 120 -248 176 176 -168 48 72 +156 106 57 +98 49 49 +222 180 98 +0 0 0 +123 82 57 +213 156 82 +131 106 65 +255 246 164 +90 65 49 +238 222 49 +205 148 41 +246 65 65 +246 197 189 +172 32 16 248 248 248 diff --git a/graphics/pokemon/steelix/anim_front.png b/graphics/pokemon/steelix/anim_front.png index b60f12fda3e7..206cf665f0a1 100644 Binary files a/graphics/pokemon/steelix/anim_front.png and b/graphics/pokemon/steelix/anim_front.png differ diff --git a/graphics/pokemon/steelix/front.png b/graphics/pokemon/steelix/front.png index d86221a35cdd..a00376baf4c1 100644 Binary files a/graphics/pokemon/steelix/front.png and b/graphics/pokemon/steelix/front.png differ diff --git a/graphics/pokemon/steelix/normal.pal b/graphics/pokemon/steelix/normal.pal index 6eb8c5db359b..2986bbeab583 100644 --- a/graphics/pokemon/steelix/normal.pal +++ b/graphics/pokemon/steelix/normal.pal @@ -2,15 +2,15 @@ JASC-PAL 0100 16 152 208 160 -112 136 160 -88 88 136 +112 128 168 +72 96 136 16 16 16 -216 216 208 -168 184 208 -40 40 80 +216 216 232 +176 184 208 +56 56 80 248 248 248 -176 40 48 -216 216 208 +192 0 0 +216 216 232 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/stoutland/anim_front.png b/graphics/pokemon/stoutland/anim_front.png index 79aea7daf885..256f3911ab80 100644 Binary files a/graphics/pokemon/stoutland/anim_front.png and b/graphics/pokemon/stoutland/anim_front.png differ diff --git a/graphics/pokemon/stoutland/front.png b/graphics/pokemon/stoutland/front.png index fd1c8fd3bd26..bd5570182730 100644 Binary files a/graphics/pokemon/stoutland/front.png and b/graphics/pokemon/stoutland/front.png differ diff --git a/graphics/pokemon/stoutland/normal.pal b/graphics/pokemon/stoutland/normal.pal index 0b84f2f50885..a2ba428efa0f 100644 --- a/graphics/pokemon/stoutland/normal.pal +++ b/graphics/pokemon/stoutland/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 80 48 -184 120 72 -248 216 168 -64 40 32 +144 88 48 +184 128 80 +248 224 168 +72 48 16 16 16 16 -24 24 32 -64 72 96 -176 152 112 -240 232 216 +24 32 56 +72 72 104 +192 168 104 +248 248 248 192 192 192 -184 176 160 -40 40 56 -96 128 136 -72 88 96 +200 184 152 +48 56 72 +120 144 152 +88 104 104 32 48 48 diff --git a/graphics/pokemon/stunfisk/anim_front.png b/graphics/pokemon/stunfisk/anim_front.png index 84a1e28fc881..769ce41b7230 100644 Binary files a/graphics/pokemon/stunfisk/anim_front.png and b/graphics/pokemon/stunfisk/anim_front.png differ diff --git a/graphics/pokemon/stunfisk/front.png b/graphics/pokemon/stunfisk/front.png index 2444184fd9cb..4e46cfa8f64d 100644 Binary files a/graphics/pokemon/stunfisk/front.png and b/graphics/pokemon/stunfisk/front.png differ diff --git a/graphics/pokemon/stunfisk/normal.pal b/graphics/pokemon/stunfisk/normal.pal index 5a0f02b42f14..e9049ed2bd69 100644 --- a/graphics/pokemon/stunfisk/normal.pal +++ b/graphics/pokemon/stunfisk/normal.pal @@ -2,8 +2,8 @@ JASC-PAL 0100 16 152 208 160 -176 144 56 -248 224 112 +200 184 0 +248 248 0 112 88 32 8 16 24 64 48 40 diff --git a/graphics/pokemon/stunky/anim_front.png b/graphics/pokemon/stunky/anim_front.png index df7adec82ea0..2463e0b8dab4 100644 Binary files a/graphics/pokemon/stunky/anim_front.png and b/graphics/pokemon/stunky/anim_front.png differ diff --git a/graphics/pokemon/stunky/front.png b/graphics/pokemon/stunky/front.png index cf124ce6aedc..da228e831ad1 100644 Binary files a/graphics/pokemon/stunky/front.png and b/graphics/pokemon/stunky/front.png differ diff --git a/graphics/pokemon/stunky/normal.pal b/graphics/pokemon/stunky/normal.pal index 0aa39fd8f40a..f33806dab46e 100644 --- a/graphics/pokemon/stunky/normal.pal +++ b/graphics/pokemon/stunky/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 48 80 +72 56 96 16 16 16 -104 80 120 -160 144 112 -248 216 168 -96 80 56 +104 80 136 +168 136 104 +232 216 176 +96 88 64 40 32 56 112 64 40 -224 120 72 +240 136 72 248 248 248 104 96 112 176 176 208 -168 88 48 +128 72 48 0 0 0 0 0 0 diff --git a/graphics/pokemon/sudowoodo/anim_front.png b/graphics/pokemon/sudowoodo/anim_front.png index d9ca431abe78..3eefcba5f0e1 100644 Binary files a/graphics/pokemon/sudowoodo/anim_front.png and b/graphics/pokemon/sudowoodo/anim_front.png differ diff --git a/graphics/pokemon/sudowoodo/front.png b/graphics/pokemon/sudowoodo/front.png index 27ec5d0d4781..df699a5c7cc7 100644 Binary files a/graphics/pokemon/sudowoodo/front.png and b/graphics/pokemon/sudowoodo/front.png differ diff --git a/graphics/pokemon/sudowoodo/normal.pal b/graphics/pokemon/sudowoodo/normal.pal index ec032d38cba4..4f6c86659b1d 100644 --- a/graphics/pokemon/sudowoodo/normal.pal +++ b/graphics/pokemon/sudowoodo/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -80 56 48 +80 64 48 16 16 16 -208 152 128 -184 128 104 -136 88 72 -48 80 24 -144 216 120 -104 184 80 -96 136 56 -160 104 80 -224 120 120 -232 192 80 -208 160 56 +216 176 144 +200 144 104 +128 104 64 +48 88 24 +152 216 120 +72 192 64 +88 136 88 +168 128 88 +248 128 128 +248 200 0 +224 176 72 136 96 72 -184 152 136 +192 160 72 diff --git a/graphics/pokemon/suicune/anim_front.png b/graphics/pokemon/suicune/anim_front.png index 099146ccbbb5..83c95cc1b7eb 100644 Binary files a/graphics/pokemon/suicune/anim_front.png and b/graphics/pokemon/suicune/anim_front.png differ diff --git a/graphics/pokemon/suicune/front.png b/graphics/pokemon/suicune/front.png index 7620858d70ba..b1ff2a84191d 100644 Binary files a/graphics/pokemon/suicune/front.png and b/graphics/pokemon/suicune/front.png differ diff --git a/graphics/pokemon/suicune/normal.pal b/graphics/pokemon/suicune/normal.pal index 659236c75fa8..266bc41ab5a8 100644 --- a/graphics/pokemon/suicune/normal.pal +++ b/graphics/pokemon/suicune/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 64 96 +40 72 120 16 16 16 -96 176 176 -104 128 160 -112 80 136 -72 40 96 -160 104 168 -192 136 184 -64 72 80 -120 136 144 +88 184 208 +72 128 176 +120 88 176 +80 56 120 +168 104 208 +192 144 216 +80 80 80 +128 128 128 248 248 248 -176 64 64 -144 216 216 +208 16 16 +152 224 248 216 216 216 -168 184 184 +184 184 184 diff --git a/graphics/pokemon/sunflora/anim_front.png b/graphics/pokemon/sunflora/anim_front.png index 512b852569d7..ce54002b81ec 100644 Binary files a/graphics/pokemon/sunflora/anim_front.png and b/graphics/pokemon/sunflora/anim_front.png differ diff --git a/graphics/pokemon/sunflora/front.png b/graphics/pokemon/sunflora/front.png index 5290aa354c87..ebdac3a02bb0 100644 Binary files a/graphics/pokemon/sunflora/front.png and b/graphics/pokemon/sunflora/front.png differ diff --git a/graphics/pokemon/sunflora/normal.pal b/graphics/pokemon/sunflora/normal.pal index 83fdabdb88a9..8425c047d624 100644 --- a/graphics/pokemon/sunflora/normal.pal +++ b/graphics/pokemon/sunflora/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -184 152 40 +216 160 24 16 16 16 -248 216 128 -112 80 24 -248 200 56 -216 200 128 -248 240 168 -176 120 48 -144 72 80 -216 112 120 -64 128 64 -40 96 40 -96 168 80 -144 208 128 +248 240 16 +128 88 16 +232 200 8 +224 216 88 +248 248 160 +192 120 32 +152 32 0 +216 56 0 +88 128 64 +80 96 40 +112 168 48 +168 216 88 0 0 0 diff --git a/graphics/pokemon/sunkern/anim_front.png b/graphics/pokemon/sunkern/anim_front.png index fc042e7e2b49..ec83fa963e66 100644 Binary files a/graphics/pokemon/sunkern/anim_front.png and b/graphics/pokemon/sunkern/anim_front.png differ diff --git a/graphics/pokemon/sunkern/front.png b/graphics/pokemon/sunkern/front.png index be19820d056f..72c2510ce02a 100644 Binary files a/graphics/pokemon/sunkern/front.png and b/graphics/pokemon/sunkern/front.png differ diff --git a/graphics/pokemon/sunkern/normal.pal b/graphics/pokemon/sunkern/normal.pal index d924c91c70ab..bd1479ef8354 100644 --- a/graphics/pokemon/sunkern/normal.pal +++ b/graphics/pokemon/sunkern/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -0 176 232 -88 152 64 -144 200 136 -48 96 32 -112 176 96 +248 128 248 +80 160 56 +160 240 56 +32 96 16 +112 208 40 16 16 16 -88 72 56 -240 216 112 -176 152 56 -216 192 72 +96 72 48 +248 248 0 +176 160 48 +208 200 48 248 248 248 -80 80 80 -64 48 32 +88 128 128 +72 56 40 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/surskit/anim_front.png b/graphics/pokemon/surskit/anim_front.png index 74a7089296a5..9745c2eb0fd0 100644 Binary files a/graphics/pokemon/surskit/anim_front.png and b/graphics/pokemon/surskit/anim_front.png differ diff --git a/graphics/pokemon/surskit/front.png b/graphics/pokemon/surskit/front.png index db20a260db51..32508e31f5b0 100644 Binary files a/graphics/pokemon/surskit/front.png and b/graphics/pokemon/surskit/front.png differ diff --git a/graphics/pokemon/surskit/normal.pal b/graphics/pokemon/surskit/normal.pal index 71c1ce3a99b4..bbd156ddaec4 100644 --- a/graphics/pokemon/surskit/normal.pal +++ b/graphics/pokemon/surskit/normal.pal @@ -2,11 +2,11 @@ JASC-PAL 0100 16 152 208 160 -176 136 64 -248 224 160 +176 136 0 +240 208 104 16 16 16 -216 184 88 -112 96 40 +216 160 0 +120 96 48 32 88 104 136 208 232 72 168 208 diff --git a/graphics/pokemon/swablu/anim_front.png b/graphics/pokemon/swablu/anim_front.png index 43b716977e09..43c738b5230b 100644 Binary files a/graphics/pokemon/swablu/anim_front.png and b/graphics/pokemon/swablu/anim_front.png differ diff --git a/graphics/pokemon/swablu/front.png b/graphics/pokemon/swablu/front.png index d2ebdd4dd9fc..b7d58d06b0e3 100644 Binary files a/graphics/pokemon/swablu/front.png and b/graphics/pokemon/swablu/front.png differ diff --git a/graphics/pokemon/swablu/normal.pal b/graphics/pokemon/swablu/normal.pal index 93b698a20066..4361d9645b4a 100644 --- a/graphics/pokemon/swablu/normal.pal +++ b/graphics/pokemon/swablu/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 144 184 -40 96 128 -112 200 240 -80 176 224 +16 152 200 +56 104 128 +120 200 248 +16 176 232 16 16 16 -128 160 176 -112 128 144 +152 152 192 +128 128 144 248 248 248 -184 208 224 +200 200 224 88 88 112 -240 248 248 -163 117 138 +248 248 240 +224 104 120 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/swadloon/anim_front.png b/graphics/pokemon/swadloon/anim_front.png index 4440cdf0eeaa..818802b1f593 100644 Binary files a/graphics/pokemon/swadloon/anim_front.png and b/graphics/pokemon/swadloon/anim_front.png differ diff --git a/graphics/pokemon/swadloon/front.png b/graphics/pokemon/swadloon/front.png index 04aec3675ed1..1b7f74db5f76 100644 Binary files a/graphics/pokemon/swadloon/front.png and b/graphics/pokemon/swadloon/front.png differ diff --git a/graphics/pokemon/swadloon/normal.pal b/graphics/pokemon/swadloon/normal.pal index 3c69b764ce52..b7eb1862e0a0 100644 --- a/graphics/pokemon/swadloon/normal.pal +++ b/graphics/pokemon/swadloon/normal.pal @@ -3,15 +3,15 @@ JASC-PAL 16 152 208 160 16 16 16 -56 80 24 -144 200 56 -112 152 48 -24 56 24 -56 112 48 -64 144 56 -184 160 72 -248 224 88 -56 48 40 +56 96 24 +144 200 8 +88 152 48 +16 64 56 +24 112 72 +40 152 80 +176 160 40 +248 232 56 +88 88 56 120 112 56 248 248 248 0 0 0 diff --git a/graphics/pokemon/swalot/anim_front.png b/graphics/pokemon/swalot/anim_front.png index c15602412ec7..20e234a6cff6 100644 Binary files a/graphics/pokemon/swalot/anim_front.png and b/graphics/pokemon/swalot/anim_front.png differ diff --git a/graphics/pokemon/swalot/front.png b/graphics/pokemon/swalot/front.png index a853b13fc49e..6ae76a4f36d8 100644 Binary files a/graphics/pokemon/swalot/front.png and b/graphics/pokemon/swalot/front.png differ diff --git a/graphics/pokemon/swalot/normal.pal b/graphics/pokemon/swalot/normal.pal index 28a45315bab7..cb2b60bb5383 100644 --- a/graphics/pokemon/swalot/normal.pal +++ b/graphics/pokemon/swalot/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 56 112 -128 104 176 -152 128 208 -184 160 208 -16 16 16 +96 64 112 +136 104 200 +168 128 232 +192 160 248 +0 0 0 248 248 248 -224 112 120 -136 112 64 -200 168 88 -248 216 112 -72 72 72 +224 48 88 +128 120 64 +216 176 64 +248 208 88 +80 80 80 48 48 48 104 104 104 -88 64 136 -173 78 82 +112 72 144 +168 0 0 diff --git a/graphics/pokemon/swampert/anim_front.png b/graphics/pokemon/swampert/anim_front.png index 7ecf488bcd96..26eedc617866 100644 Binary files a/graphics/pokemon/swampert/anim_front.png and b/graphics/pokemon/swampert/anim_front.png differ diff --git a/graphics/pokemon/swampert/front.png b/graphics/pokemon/swampert/front.png index 3966935c4b91..7a86a418d8d1 100644 Binary files a/graphics/pokemon/swampert/front.png and b/graphics/pokemon/swampert/front.png differ diff --git a/graphics/pokemon/swampert/normal.pal b/graphics/pokemon/swampert/normal.pal index ba7b6e3b6dfc..539768aa63a1 100644 --- a/graphics/pokemon/swampert/normal.pal +++ b/graphics/pokemon/swampert/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 24 24 24 -48 64 72 -80 96 120 -72 136 176 -48 80 112 -112 168 208 -112 72 48 -192 136 88 -240 168 104 -152 192 232 -200 120 160 -120 56 88 -144 176 184 -104 120 128 -208 232 232 +80 72 80 +104 104 136 +88 128 192 +88 88 136 +128 160 216 +128 72 40 +232 128 64 +240 176 64 +152 192 216 +192 96 120 +104 40 64 +168 184 176 +104 120 112 +216 232 224 diff --git a/graphics/pokemon/swanna/anim_front.png b/graphics/pokemon/swanna/anim_front.png index ae90cb66fac5..354bebb26ee6 100644 Binary files a/graphics/pokemon/swanna/anim_front.png and b/graphics/pokemon/swanna/anim_front.png differ diff --git a/graphics/pokemon/swanna/front.png b/graphics/pokemon/swanna/front.png index 5f8c04ccaa4f..e1b58cf394ce 100644 Binary files a/graphics/pokemon/swanna/front.png and b/graphics/pokemon/swanna/front.png differ diff --git a/graphics/pokemon/swanna/normal.pal b/graphics/pokemon/swanna/normal.pal index ebc9577d9b67..ffb9ad30dd82 100644 --- a/graphics/pokemon/swanna/normal.pal +++ b/graphics/pokemon/swanna/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 128 176 -88 104 128 -240 248 248 -16 16 16 -176 200 224 -104 104 112 -248 248 248 +148 156 172 +90 106 131 +255 255 255 +0 0 0 +180 197 213 +98 98 131 +239 123 156 56 64 88 -248 208 64 -104 104 64 -56 104 152 -80 144 200 -120 184 240 -56 72 104 -152 136 72 +246 246 74 +172 164 98 +65 115 172 +98 148 180 +164 205 238 +57 74 106 +106 106 65 diff --git a/graphics/pokemon/swanna/shiny.pal b/graphics/pokemon/swanna/shiny.pal index c57e468ebc52..506a9ff094aa 100644 --- a/graphics/pokemon/swanna/shiny.pal +++ b/graphics/pokemon/swanna/shiny.pal @@ -8,7 +8,7 @@ JASC-PAL 16 16 16 200 184 224 96 96 128 -248 248 248 +239 123 156 56 56 56 248 200 72 136 80 40 diff --git a/graphics/pokemon/swellow/anim_front.png b/graphics/pokemon/swellow/anim_front.png index 33999c5a69e7..83d0ae8ec60e 100644 Binary files a/graphics/pokemon/swellow/anim_front.png and b/graphics/pokemon/swellow/anim_front.png differ diff --git a/graphics/pokemon/swellow/front.png b/graphics/pokemon/swellow/front.png index 1f347b4800ff..32345b406635 100644 Binary files a/graphics/pokemon/swellow/front.png and b/graphics/pokemon/swellow/front.png differ diff --git a/graphics/pokemon/swellow/normal.pal b/graphics/pokemon/swellow/normal.pal index 58eedc906543..8dcf49a8506a 100644 --- a/graphics/pokemon/swellow/normal.pal +++ b/graphics/pokemon/swellow/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 32 56 -216 88 112 -160 56 88 -72 88 128 -48 56 96 -96 32 48 +41 41 82 +197 90 115 +156 49 82 +65 90 123 +41 65 98 +98 32 57 16 16 16 -96 80 56 -248 248 248 -184 184 208 -240 208 120 -248 248 144 -160 136 80 -48 48 56 -72 88 88 +82 65 32 +255 255 255 +180 180 213 +222 164 49 +230 180 98 +148 90 16 +49 49 57 +90 90 90 diff --git a/graphics/pokemon/swinub/anim_front.png b/graphics/pokemon/swinub/anim_front.png index 9ee564c1d5c7..ee4dae2537cd 100644 Binary files a/graphics/pokemon/swinub/anim_front.png and b/graphics/pokemon/swinub/anim_front.png differ diff --git a/graphics/pokemon/swinub/front.png b/graphics/pokemon/swinub/front.png index 8d96e08b658c..ec191500981b 100644 Binary files a/graphics/pokemon/swinub/front.png and b/graphics/pokemon/swinub/front.png differ diff --git a/graphics/pokemon/swinub/normal.pal b/graphics/pokemon/swinub/normal.pal index 7a67baa29f9a..f62275047350 100644 --- a/graphics/pokemon/swinub/normal.pal +++ b/graphics/pokemon/swinub/normal.pal @@ -2,15 +2,15 @@ JASC-PAL 0100 16 152 208 160 -88 48 24 -160 112 96 -112 72 56 +65 49 8 +156 123 106 +115 74 49 16 16 16 -208 152 120 -56 32 16 -240 144 152 -224 104 120 -160 80 88 +205 156 123 +57 41 0 +246 139 156 +180 115 123 +148 90 90 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/swoobat/anim_front.png b/graphics/pokemon/swoobat/anim_front.png index ca8972b27781..2b57a2e43cd6 100644 Binary files a/graphics/pokemon/swoobat/anim_front.png and b/graphics/pokemon/swoobat/anim_front.png differ diff --git a/graphics/pokemon/swoobat/front.png b/graphics/pokemon/swoobat/front.png index 4bb05cbc4fce..7a4ccae93c57 100644 Binary files a/graphics/pokemon/swoobat/front.png and b/graphics/pokemon/swoobat/front.png differ diff --git a/graphics/pokemon/swoobat/normal.pal b/graphics/pokemon/swoobat/normal.pal index c903f6096183..8d4e3b4006f7 100644 --- a/graphics/pokemon/swoobat/normal.pal +++ b/graphics/pokemon/swoobat/normal.pal @@ -2,9 +2,9 @@ JASC-PAL 0100 16 104 48 152 -48 40 40 +48 48 48 16 16 16 -80 64 72 +72 72 80 32 56 80 64 136 208 80 80 104 diff --git a/graphics/pokemon/taillow/anim_front.png b/graphics/pokemon/taillow/anim_front.png index d99d0d783de3..7e5c544439d6 100644 Binary files a/graphics/pokemon/taillow/anim_front.png and b/graphics/pokemon/taillow/anim_front.png differ diff --git a/graphics/pokemon/taillow/front.png b/graphics/pokemon/taillow/front.png index 76aa69920b8d..3e4be10eaa94 100644 Binary files a/graphics/pokemon/taillow/front.png and b/graphics/pokemon/taillow/front.png differ diff --git a/graphics/pokemon/taillow/normal.pal b/graphics/pokemon/taillow/normal.pal index 63cab53367f6..2277c5f72805 100644 --- a/graphics/pokemon/taillow/normal.pal +++ b/graphics/pokemon/taillow/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 56 112 -80 88 136 -160 72 80 -224 88 112 -32 32 56 +49 74 123 +90 106 156 +148 57 82 +205 82 115 +32 41 82 16 16 16 -176 184 208 -248 248 248 -64 64 64 -160 128 88 -248 232 176 -224 192 104 -96 80 56 +189 189 205 +255 255 255 +57 57 49 +164 115 49 +238 189 98 +230 148 16 +82 74 41 112 136 176 0 0 0 diff --git a/graphics/pokemon/tangela/anim_front.png b/graphics/pokemon/tangela/anim_front.png index b7d278024065..9785af465da7 100644 Binary files a/graphics/pokemon/tangela/anim_front.png and b/graphics/pokemon/tangela/anim_front.png differ diff --git a/graphics/pokemon/tangela/front.png b/graphics/pokemon/tangela/front.png index 0904495eef36..6115b5b62d4f 100644 Binary files a/graphics/pokemon/tangela/front.png and b/graphics/pokemon/tangela/front.png differ diff --git a/graphics/pokemon/tangela/normal.pal b/graphics/pokemon/tangela/normal.pal index 9455b1ee73e4..03893711c1a4 100644 --- a/graphics/pokemon/tangela/normal.pal +++ b/graphics/pokemon/tangela/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 96 128 -120 184 216 -80 136 176 -48 48 64 +65 123 148 +148 213 246 +90 164 205 +32 65 82 16 16 16 -80 72 72 -192 176 200 +82 82 82 +180 180 180 248 248 248 -112 40 40 -160 80 80 -240 152 136 -232 104 80 +115 41 41 +172 41 65 +255 131 131 +222 74 106 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/tangrowth/anim_front.png b/graphics/pokemon/tangrowth/anim_front.png index 170769a9204e..564dc5626c1f 100644 Binary files a/graphics/pokemon/tangrowth/anim_front.png and b/graphics/pokemon/tangrowth/anim_front.png differ diff --git a/graphics/pokemon/tangrowth/front.png b/graphics/pokemon/tangrowth/front.png index c43652a81053..ae389e74a8e4 100644 Binary files a/graphics/pokemon/tangrowth/front.png and b/graphics/pokemon/tangrowth/front.png differ diff --git a/graphics/pokemon/tangrowth/normal.pal b/graphics/pokemon/tangrowth/normal.pal index 451020c4c6ca..10fe2ebbc3a5 100644 --- a/graphics/pokemon/tangrowth/normal.pal +++ b/graphics/pokemon/tangrowth/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -152 56 88 -208 88 128 -80 24 48 -40 56 80 -56 88 112 -112 160 192 -72 120 160 +184 32 104 +208 88 144 +88 24 56 +24 56 96 +40 88 128 +80 152 192 +56 112 168 0 0 0 -80 80 88 +72 72 80 248 248 248 -40 48 56 +48 48 56 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/tauros/anim_front.png b/graphics/pokemon/tauros/anim_front.png index d1051ecc72d3..1b0092dd3a88 100644 Binary files a/graphics/pokemon/tauros/anim_front.png and b/graphics/pokemon/tauros/anim_front.png differ diff --git a/graphics/pokemon/tauros/front.png b/graphics/pokemon/tauros/front.png index 0f088d59dc26..0d47d8939b13 100644 Binary files a/graphics/pokemon/tauros/front.png and b/graphics/pokemon/tauros/front.png differ diff --git a/graphics/pokemon/tauros/normal.pal b/graphics/pokemon/tauros/normal.pal index ea90060c1cc3..5115a389e462 100644 --- a/graphics/pokemon/tauros/normal.pal +++ b/graphics/pokemon/tauros/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 56 96 -88 104 152 -16 16 16 -56 40 24 -120 104 88 -80 64 56 -128 88 64 -208 144 80 -160 152 136 -208 216 240 -152 160 184 -56 48 24 -232 184 120 -168 120 64 +57 57 74 +106 106 131 +0 0 0 +74 57 41 +139 106 82 +98 74 49 +139 98 32 +222 164 74 +172 139 115 +205 205 222 +156 156 172 +82 57 16 +230 197 123 +180 131 49 248 248 248 diff --git a/graphics/pokemon/teddiursa/anim_front.png b/graphics/pokemon/teddiursa/anim_front.png index cc6737bc9b7d..2c6e3f3b10e4 100644 Binary files a/graphics/pokemon/teddiursa/anim_front.png and b/graphics/pokemon/teddiursa/anim_front.png differ diff --git a/graphics/pokemon/teddiursa/front.png b/graphics/pokemon/teddiursa/front.png index 83302972d1b7..9412d0c7f3a6 100644 Binary files a/graphics/pokemon/teddiursa/front.png and b/graphics/pokemon/teddiursa/front.png differ diff --git a/graphics/pokemon/teddiursa/normal.pal b/graphics/pokemon/teddiursa/normal.pal index fea71f114f18..59d40c386c35 100644 --- a/graphics/pokemon/teddiursa/normal.pal +++ b/graphics/pokemon/teddiursa/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 56 24 -176 96 40 -232 136 64 -200 112 56 +106 65 24 +180 98 32 +255 131 57 +222 115 49 16 16 16 -240 224 168 -208 176 96 +255 255 255 +238 172 82 248 248 248 -248 224 120 -88 88 88 -176 176 168 -216 216 216 +255 230 164 +106 106 123 +180 180 189 +222 222 222 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/tentacool/anim_front.png b/graphics/pokemon/tentacool/anim_front.png index fe0bffbef023..e6ff75c7ab95 100644 Binary files a/graphics/pokemon/tentacool/anim_front.png and b/graphics/pokemon/tentacool/anim_front.png differ diff --git a/graphics/pokemon/tentacool/front.png b/graphics/pokemon/tentacool/front.png index 67396165bee1..6469576a4d2f 100644 Binary files a/graphics/pokemon/tentacool/front.png and b/graphics/pokemon/tentacool/front.png differ diff --git a/graphics/pokemon/tentacool/normal.pal b/graphics/pokemon/tentacool/normal.pal index 69a7e55a5f41..ab750d2edfa2 100644 --- a/graphics/pokemon/tentacool/normal.pal +++ b/graphics/pokemon/tentacool/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 88 112 -104 16 40 -152 208 240 -104 184 224 -168 40 72 -248 248 248 -232 184 200 -200 96 144 -48 144 192 -16 16 16 -208 208 208 -88 80 72 -200 184 176 -120 104 96 -168 152 136 +32 82 131 +106 16 16 +131 213 246 +106 180 230 +180 41 32 +255 255 255 +255 197 189 +255 82 74 +65 148 172 +0 0 0 +213 213 213 +82 82 32 +213 197 148 +131 131 65 +180 172 115 diff --git a/graphics/pokemon/tentacruel/anim_front.png b/graphics/pokemon/tentacruel/anim_front.png index 3c2ffa461e62..e4e7c3cc8e92 100644 Binary files a/graphics/pokemon/tentacruel/anim_front.png and b/graphics/pokemon/tentacruel/anim_front.png differ diff --git a/graphics/pokemon/tentacruel/front.png b/graphics/pokemon/tentacruel/front.png index 58112bc50b1f..52e70a7343ea 100644 Binary files a/graphics/pokemon/tentacruel/front.png and b/graphics/pokemon/tentacruel/front.png differ diff --git a/graphics/pokemon/tentacruel/normal.pal b/graphics/pokemon/tentacruel/normal.pal index 82ee96b36944..878043437b85 100644 --- a/graphics/pokemon/tentacruel/normal.pal +++ b/graphics/pokemon/tentacruel/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 88 112 -144 208 240 -104 16 40 -88 176 216 -48 144 184 +32 82 131 +131 205 230 +131 16 16 +106 180 230 +65 148 172 16 16 16 -200 96 144 -232 184 200 -248 248 248 -168 40 72 -208 208 208 -64 72 80 -168 168 152 -104 112 104 -216 200 184 +246 65 82 +255 189 172 +255 255 255 +180 41 32 +213 213 213 +82 82 32 +180 172 115 +131 131 65 +230 213 164 diff --git a/graphics/pokemon/tepig/anim_front.png b/graphics/pokemon/tepig/anim_front.png index 4c50ebcaf511..e2e6da880a34 100644 Binary files a/graphics/pokemon/tepig/anim_front.png and b/graphics/pokemon/tepig/anim_front.png differ diff --git a/graphics/pokemon/tepig/front.png b/graphics/pokemon/tepig/front.png index ebe16e580c58..0e706ecadc99 100644 Binary files a/graphics/pokemon/tepig/front.png and b/graphics/pokemon/tepig/front.png differ diff --git a/graphics/pokemon/tepig/normal.pal b/graphics/pokemon/tepig/normal.pal index f66c9090946e..6938b34afc93 100644 --- a/graphics/pokemon/tepig/normal.pal +++ b/graphics/pokemon/tepig/normal.pal @@ -3,12 +3,12 @@ JASC-PAL 16 152 208 160 16 16 16 -72 64 56 -40 32 40 +72 56 48 +48 32 32 104 56 40 176 88 56 -224 120 104 -200 80 72 +224 104 40 +200 64 56 144 120 40 240 128 72 248 200 64 diff --git a/graphics/pokemon/terrakion/anim_front.png b/graphics/pokemon/terrakion/anim_front.png index 5a16f12e5cb4..ec6c37876760 100644 Binary files a/graphics/pokemon/terrakion/anim_front.png and b/graphics/pokemon/terrakion/anim_front.png differ diff --git a/graphics/pokemon/terrakion/front.png b/graphics/pokemon/terrakion/front.png index de8a977f69c4..53b731785005 100644 Binary files a/graphics/pokemon/terrakion/front.png and b/graphics/pokemon/terrakion/front.png differ diff --git a/graphics/pokemon/terrakion/normal.pal b/graphics/pokemon/terrakion/normal.pal index 57ca72204ebb..84bbdb56ef35 100644 --- a/graphics/pokemon/terrakion/normal.pal +++ b/graphics/pokemon/terrakion/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 +153 204 153 +0 0 0 +64 56 48 +34 34 34 +96 80 72 +176 168 168 +51 51 51 +128 128 128 +160 104 56 +248 136 0 +176 160 128 +255 255 255 +216 200 168 +136 120 88 +80 72 72 0 0 0 -64 48 40 -40 32 32 -96 72 64 -160 168 184 -56 56 56 -128 120 120 -176 88 48 -248 144 88 -136 112 88 -248 248 248 -200 168 136 -88 80 88 -80 72 64 -40 32 32 diff --git a/graphics/pokemon/throh/anim_front.png b/graphics/pokemon/throh/anim_front.png index b51d87ad8bf7..d99b04374b1f 100644 Binary files a/graphics/pokemon/throh/anim_front.png and b/graphics/pokemon/throh/anim_front.png differ diff --git a/graphics/pokemon/throh/front.png b/graphics/pokemon/throh/front.png index 9c8fa4fcc492..82351e40bd82 100644 Binary files a/graphics/pokemon/throh/front.png and b/graphics/pokemon/throh/front.png differ diff --git a/graphics/pokemon/throh/normal.pal b/graphics/pokemon/throh/normal.pal index 73c16e87552e..45da3c8f5d60 100644 --- a/graphics/pokemon/throh/normal.pal +++ b/graphics/pokemon/throh/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -96 32 32 -208 88 80 +96 24 24 +216 88 88 16 16 16 -64 64 64 -144 56 48 -224 224 208 -40 40 40 -136 120 120 -184 176 152 +56 56 56 +168 48 48 +232 224 208 +40 40 32 +144 136 128 +192 184 168 240 240 240 -0 0 0 +216 88 88 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/thundurus/anim_front.png b/graphics/pokemon/thundurus/anim_front.png index 82089b223612..1a16e76c253a 100644 Binary files a/graphics/pokemon/thundurus/anim_front.png and b/graphics/pokemon/thundurus/anim_front.png differ diff --git a/graphics/pokemon/thundurus/front.png b/graphics/pokemon/thundurus/front.png index 455723e04802..b8ff39958f1f 100644 Binary files a/graphics/pokemon/thundurus/front.png and b/graphics/pokemon/thundurus/front.png differ diff --git a/graphics/pokemon/thundurus/normal.pal b/graphics/pokemon/thundurus/normal.pal index 653b89e32d2c..76ba74a070a4 100644 --- a/graphics/pokemon/thundurus/normal.pal +++ b/graphics/pokemon/thundurus/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -88 88 112 -248 248 248 -152 152 184 -16 16 16 -32 32 80 -96 88 176 -72 112 144 -56 56 120 -96 192 232 -56 56 64 -248 192 120 -48 48 64 -24 32 32 -88 88 96 -176 128 80 +153 204 153 +112 112 112 +255 255 255 +176 176 184 +17 17 17 +34 34 85 +102 85 170 +80 128 160 +51 51 119 +96 192 248 +48 48 48 +248 192 88 +24 24 24 +72 72 72 +170 136 85 +0 0 0 diff --git a/graphics/pokemon/thundurus/therian/anim_front.png b/graphics/pokemon/thundurus/therian/anim_front.png index 9d09a76b85dd..e87cf107b297 100644 Binary files a/graphics/pokemon/thundurus/therian/anim_front.png and b/graphics/pokemon/thundurus/therian/anim_front.png differ diff --git a/graphics/pokemon/thundurus/therian/front.png b/graphics/pokemon/thundurus/therian/front.png index 04888d1e713c..4d1543d595ce 100644 Binary files a/graphics/pokemon/thundurus/therian/front.png and b/graphics/pokemon/thundurus/therian/front.png differ diff --git a/graphics/pokemon/thundurus/therian/normal.pal b/graphics/pokemon/thundurus/therian/normal.pal index d6415c50fbc5..41ec8e38f122 100644 --- a/graphics/pokemon/thundurus/therian/normal.pal +++ b/graphics/pokemon/thundurus/therian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 104 112 +112 112 112 248 248 248 16 16 16 -32 24 80 -192 176 168 -88 72 160 -56 48 112 -80 128 152 -48 80 96 -112 184 232 -168 128 80 -232 200 144 -64 56 56 -32 32 40 -48 104 144 +24 40 80 +176 176 184 +88 72 168 +56 56 128 +80 128 160 +40 64 104 +96 192 248 +208 144 48 +248 192 88 +48 48 48 +32 32 32 +0 0 0 diff --git a/graphics/pokemon/timburr/anim_front.png b/graphics/pokemon/timburr/anim_front.png index caaee7540e4d..4e32b20fd9b4 100644 Binary files a/graphics/pokemon/timburr/anim_front.png and b/graphics/pokemon/timburr/anim_front.png differ diff --git a/graphics/pokemon/timburr/front.png b/graphics/pokemon/timburr/front.png index 8a7d351e415e..b79489a869fa 100644 Binary files a/graphics/pokemon/timburr/front.png and b/graphics/pokemon/timburr/front.png differ diff --git a/graphics/pokemon/timburr/normal.pal b/graphics/pokemon/timburr/normal.pal index 3cdc96b4e3eb..e9d711a7603e 100644 --- a/graphics/pokemon/timburr/normal.pal +++ b/graphics/pokemon/timburr/normal.pal @@ -4,16 +4,16 @@ JASC-PAL 152 208 160 88 80 72 16 16 16 -192 176 144 +192 184 168 112 48 80 -248 96 128 -152 128 104 -176 72 88 +248 120 136 +152 136 128 +192 88 112 64 72 80 192 192 192 248 248 248 120 112 112 -56 40 24 -96 56 24 -144 88 40 -200 152 96 +88 56 8 +120 80 8 +168 112 8 +216 176 96 diff --git a/graphics/pokemon/tirtouga/anim_front.png b/graphics/pokemon/tirtouga/anim_front.png index dc4a722e4042..37cdaff8e682 100644 Binary files a/graphics/pokemon/tirtouga/anim_front.png and b/graphics/pokemon/tirtouga/anim_front.png differ diff --git a/graphics/pokemon/tirtouga/front.png b/graphics/pokemon/tirtouga/front.png index 61446de0e931..3228a2f66984 100644 Binary files a/graphics/pokemon/tirtouga/front.png and b/graphics/pokemon/tirtouga/front.png differ diff --git a/graphics/pokemon/tirtouga/normal.pal b/graphics/pokemon/tirtouga/normal.pal index dac560816c55..752ec9327c90 100644 --- a/graphics/pokemon/tirtouga/normal.pal +++ b/graphics/pokemon/tirtouga/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 72 104 -104 160 208 +32 80 112 +72 152 216 16 16 16 48 56 72 -72 112 152 -112 120 144 -72 88 120 +48 112 168 +104 120 136 +80 96 112 224 224 224 136 200 216 -128 80 96 -168 112 120 -64 72 88 +192 96 120 +240 120 152 +56 72 80 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/togekiss/anim_front.png b/graphics/pokemon/togekiss/anim_front.png index 10a6c63bad5c..f902aff3b77f 100644 Binary files a/graphics/pokemon/togekiss/anim_front.png and b/graphics/pokemon/togekiss/anim_front.png differ diff --git a/graphics/pokemon/togekiss/front.png b/graphics/pokemon/togekiss/front.png index 6509b14ac3aa..0a699e780bbb 100644 Binary files a/graphics/pokemon/togekiss/front.png and b/graphics/pokemon/togekiss/front.png differ diff --git a/graphics/pokemon/togekiss/normal.pal b/graphics/pokemon/togekiss/normal.pal index 0c770d6a471a..6cce97f24915 100644 --- a/graphics/pokemon/togekiss/normal.pal +++ b/graphics/pokemon/togekiss/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -168 208 200 -136 160 160 -72 96 96 -216 240 240 -16 16 16 -32 144 216 -128 32 32 -200 72 64 -88 192 232 +184 192 216 +128 152 176 +72 88 112 232 232 248 -224 128 128 -24 104 152 +16 16 16 +64 128 232 +112 48 40 +200 72 48 +144 176 248 +248 248 248 +184 128 128 +80 88 168 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/togepi/anim_front.png b/graphics/pokemon/togepi/anim_front.png index e08da7b4b54a..07d7f05b89cf 100644 Binary files a/graphics/pokemon/togepi/anim_front.png and b/graphics/pokemon/togepi/anim_front.png differ diff --git a/graphics/pokemon/togepi/front.png b/graphics/pokemon/togepi/front.png index 0c6d162f72f6..e6520872b575 100644 Binary files a/graphics/pokemon/togepi/front.png and b/graphics/pokemon/togepi/front.png differ diff --git a/graphics/pokemon/togepi/normal.pal b/graphics/pokemon/togepi/normal.pal index bbac7b3f854f..0fb20049a461 100644 --- a/graphics/pokemon/togepi/normal.pal +++ b/graphics/pokemon/togepi/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 112 96 -16 16 16 -248 232 184 -184 176 128 -104 88 64 -240 216 152 -128 88 104 +144 112 88 +0 0 0 +240 232 192 +200 176 112 +112 72 72 +240 208 160 +168 32 32 248 248 248 -144 136 120 -232 224 208 -64 176 216 -240 104 80 -200 80 48 -208 200 176 -56 144 168 +120 136 144 +208 216 216 +72 128 192 +216 112 104 +192 64 64 +176 176 192 +48 96 168 diff --git a/graphics/pokemon/togetic/anim_front.png b/graphics/pokemon/togetic/anim_front.png index 629ea3c5016f..1079c2b01488 100644 Binary files a/graphics/pokemon/togetic/anim_front.png and b/graphics/pokemon/togetic/anim_front.png differ diff --git a/graphics/pokemon/togetic/front.png b/graphics/pokemon/togetic/front.png index 37434e8993c6..0bacb627e76f 100644 Binary files a/graphics/pokemon/togetic/front.png and b/graphics/pokemon/togetic/front.png differ diff --git a/graphics/pokemon/togetic/normal.pal b/graphics/pokemon/togetic/normal.pal index d49068655297..0b17314592fb 100644 --- a/graphics/pokemon/togetic/normal.pal +++ b/graphics/pokemon/togetic/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -112 120 120 -240 248 240 -16 16 16 -176 192 168 -224 232 216 -248 72 64 -176 56 48 -48 152 200 -48 112 152 -153 103 91 -196 138 129 +112 120 128 +248 248 248 +0 0 0 +168 192 184 +208 232 232 +216 64 56 +184 24 8 +40 144 224 +16 96 184 +192 48 32 +136 16 16 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/torchic/anim_front.png b/graphics/pokemon/torchic/anim_front.png index 241b673ae131..f7eb75e3de04 100644 Binary files a/graphics/pokemon/torchic/anim_front.png and b/graphics/pokemon/torchic/anim_front.png differ diff --git a/graphics/pokemon/torchic/front.png b/graphics/pokemon/torchic/front.png index 56ab67fd4e6f..b4e2066d1884 100644 Binary files a/graphics/pokemon/torchic/front.png and b/graphics/pokemon/torchic/front.png differ diff --git a/graphics/pokemon/torchic/normal.pal b/graphics/pokemon/torchic/normal.pal index 84d058a30953..1a2a98caa068 100644 --- a/graphics/pokemon/torchic/normal.pal +++ b/graphics/pokemon/torchic/normal.pal @@ -5,15 +5,15 @@ JASC-PAL 168 136 0 232 184 48 240 216 104 -24 24 24 +0 0 0 168 64 16 -248 152 32 -224 104 0 -248 184 112 +248 136 48 +224 88 32 +248 168 80 120 72 24 248 248 248 -168 144 56 -248 232 144 -216 200 96 +168 136 0 +240 216 104 +232 184 48 136 80 32 0 0 0 diff --git a/graphics/pokemon/torkoal/anim_front.png b/graphics/pokemon/torkoal/anim_front.png index 0a0162d4814c..71f1b97fc4be 100644 Binary files a/graphics/pokemon/torkoal/anim_front.png and b/graphics/pokemon/torkoal/anim_front.png differ diff --git a/graphics/pokemon/torkoal/front.png b/graphics/pokemon/torkoal/front.png index ff72e1c86db8..abe45c343231 100644 Binary files a/graphics/pokemon/torkoal/front.png and b/graphics/pokemon/torkoal/front.png differ diff --git a/graphics/pokemon/torkoal/normal.pal b/graphics/pokemon/torkoal/normal.pal index 15c05fb0ff47..4488371de3a7 100644 --- a/graphics/pokemon/torkoal/normal.pal +++ b/graphics/pokemon/torkoal/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -192 168 136 -240 240 216 -232 200 160 -144 136 136 -80 56 40 -240 160 128 -240 136 88 -160 88 48 -192 112 64 +184 168 160 +232 216 208 +208 200 192 +128 128 128 +88 48 56 +248 168 104 +232 128 64 +168 80 56 +200 96 72 56 56 56 -16 16 16 -96 88 88 -224 56 64 -240 152 152 +0 0 0 +96 96 96 +104 40 40 +248 32 32 0 0 0 diff --git a/graphics/pokemon/tornadus/anim_front.png b/graphics/pokemon/tornadus/anim_front.png index 6b9f6e478571..675dfa020e30 100644 Binary files a/graphics/pokemon/tornadus/anim_front.png and b/graphics/pokemon/tornadus/anim_front.png differ diff --git a/graphics/pokemon/tornadus/front.png b/graphics/pokemon/tornadus/front.png index 513895275b34..b121301ddf99 100644 Binary files a/graphics/pokemon/tornadus/front.png and b/graphics/pokemon/tornadus/front.png differ diff --git a/graphics/pokemon/tornadus/normal.pal b/graphics/pokemon/tornadus/normal.pal index 4d6c5ff02ed1..c0b2eca35831 100644 --- a/graphics/pokemon/tornadus/normal.pal +++ b/graphics/pokemon/tornadus/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 80 104 +112 112 112 248 248 248 16 16 16 -160 152 176 -120 80 168 -48 40 80 -64 104 64 -96 168 88 -80 56 112 -56 56 56 -248 208 120 -96 72 64 -176 128 80 -240 192 136 +176 176 184 +128 64 168 +64 32 80 +64 112 56 +72 152 64 +88 48 112 +40 72 48 +248 192 0 +104 64 40 +168 120 72 +216 176 104 0 0 0 diff --git a/graphics/pokemon/tornadus/therian/anim_front.png b/graphics/pokemon/tornadus/therian/anim_front.png index c0eb46fae424..574aa1cc7b08 100644 Binary files a/graphics/pokemon/tornadus/therian/anim_front.png and b/graphics/pokemon/tornadus/therian/anim_front.png differ diff --git a/graphics/pokemon/tornadus/therian/front.png b/graphics/pokemon/tornadus/therian/front.png index 9c47da33e0ed..b168d3bd95fc 100644 Binary files a/graphics/pokemon/tornadus/therian/front.png and b/graphics/pokemon/tornadus/therian/front.png differ diff --git a/graphics/pokemon/tornadus/therian/normal.pal b/graphics/pokemon/tornadus/therian/normal.pal index d5f0fdfe705b..dc8578fa0c55 100644 --- a/graphics/pokemon/tornadus/therian/normal.pal +++ b/graphics/pokemon/tornadus/therian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 64 120 +88 56 112 64 32 80 -144 96 168 +128 64 168 16 16 16 -112 104 112 +112 112 112 248 248 248 -192 176 168 -48 80 40 -112 160 80 -248 200 120 -72 120 56 -184 136 80 -120 88 56 -232 56 16 +176 176 184 +40 72 48 +72 152 64 +216 176 104 +64 112 56 +168 120 72 +104 64 40 +216 56 40 0 0 0 diff --git a/graphics/pokemon/torterra/anim_front.png b/graphics/pokemon/torterra/anim_front.png index cd41f4e315a9..cbc7c3e52f90 100644 Binary files a/graphics/pokemon/torterra/anim_front.png and b/graphics/pokemon/torterra/anim_front.png differ diff --git a/graphics/pokemon/torterra/front.png b/graphics/pokemon/torterra/front.png index ee1e5df760c4..2ef06d2f0a4d 100644 Binary files a/graphics/pokemon/torterra/front.png and b/graphics/pokemon/torterra/front.png differ diff --git a/graphics/pokemon/torterra/normal.pal b/graphics/pokemon/torterra/normal.pal index 82cf9dd2e205..48962babc0ef 100644 --- a/graphics/pokemon/torterra/normal.pal +++ b/graphics/pokemon/torterra/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 88 40 -64 136 88 -88 160 96 +24 96 24 +48 136 56 +64 168 64 16 16 16 160 160 160 -120 120 120 -216 216 216 -184 184 176 -80 56 32 -128 96 56 -176 128 72 +104 112 120 +224 224 224 +184 184 184 +96 72 56 +136 104 64 +176 128 80 56 88 40 72 80 88 -176 128 72 +176 128 80 0 0 0 diff --git a/graphics/pokemon/totodile/anim_front.png b/graphics/pokemon/totodile/anim_front.png index e7e0f11cd6fb..49e4fee75ad7 100644 Binary files a/graphics/pokemon/totodile/anim_front.png and b/graphics/pokemon/totodile/anim_front.png differ diff --git a/graphics/pokemon/totodile/front.png b/graphics/pokemon/totodile/front.png index 61c435e95b6b..ba9c9994b010 100644 Binary files a/graphics/pokemon/totodile/front.png and b/graphics/pokemon/totodile/front.png differ diff --git a/graphics/pokemon/totodile/normal.pal b/graphics/pokemon/totodile/normal.pal index 665f9c176ae8..bf7ef18aff0a 100644 --- a/graphics/pokemon/totodile/normal.pal +++ b/graphics/pokemon/totodile/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 208 152 184 -64 136 152 -32 72 88 -88 200 208 -144 232 232 +32 136 184 +40 88 128 +80 192 216 +152 224 248 16 16 16 248 248 248 64 64 72 176 176 176 -120 24 32 +120 24 0 152 80 88 -168 48 72 +200 64 32 232 120 120 -160 136 80 -240 208 120 +144 128 32 +248 224 136 184 104 104 diff --git a/graphics/pokemon/toxicroak/anim_front.png b/graphics/pokemon/toxicroak/anim_front.png index 9eaccecbc49a..105ad18cbdbe 100644 Binary files a/graphics/pokemon/toxicroak/anim_front.png and b/graphics/pokemon/toxicroak/anim_front.png differ diff --git a/graphics/pokemon/toxicroak/front.png b/graphics/pokemon/toxicroak/front.png index d21885a99f30..27acc59b7794 100644 Binary files a/graphics/pokemon/toxicroak/front.png and b/graphics/pokemon/toxicroak/front.png differ diff --git a/graphics/pokemon/toxicroak/normal.pal b/graphics/pokemon/toxicroak/normal.pal index 9b23239b3a6d..b18a334af271 100644 --- a/graphics/pokemon/toxicroak/normal.pal +++ b/graphics/pokemon/toxicroak/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 96 136 +72 72 136 16 16 16 -88 144 184 -160 200 200 -48 48 40 +104 112 208 +128 152 248 +48 48 64 80 80 80 -168 128 24 -240 184 48 -224 96 88 -160 64 56 -184 176 168 +176 136 24 +248 208 24 +224 80 88 +152 56 56 +176 176 192 248 248 248 56 56 80 -232 168 160 -136 120 120 +248 152 160 +120 120 136 diff --git a/graphics/pokemon/tranquill/anim_front.png b/graphics/pokemon/tranquill/anim_front.png index 8141ed76615f..a3063146b2ca 100644 Binary files a/graphics/pokemon/tranquill/anim_front.png and b/graphics/pokemon/tranquill/anim_front.png differ diff --git a/graphics/pokemon/tranquill/front.png b/graphics/pokemon/tranquill/front.png index b7b0789e04b4..2294a1f13ea1 100644 Binary files a/graphics/pokemon/tranquill/front.png and b/graphics/pokemon/tranquill/front.png differ diff --git a/graphics/pokemon/tranquill/normal.pal b/graphics/pokemon/tranquill/normal.pal index 5752e8a42f29..d85d078ae879 100644 --- a/graphics/pokemon/tranquill/normal.pal +++ b/graphics/pokemon/tranquill/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -40 32 32 -72 64 64 -16 16 16 -120 40 56 -208 72 96 -200 208 224 -120 120 120 +48 48 48 +72 72 72 +8 8 8 +136 32 48 +248 64 120 +216 216 216 +128 128 128 248 248 248 -160 168 176 +160 160 160 184 184 184 -240 176 72 -160 112 48 -144 144 152 -152 88 88 -216 120 128 +248 200 56 +152 120 8 +144 144 144 +184 96 96 +248 152 152 diff --git a/graphics/pokemon/trapinch/anim_front.png b/graphics/pokemon/trapinch/anim_front.png index a0f792c074c5..e8ee63af6835 100644 Binary files a/graphics/pokemon/trapinch/anim_front.png and b/graphics/pokemon/trapinch/anim_front.png differ diff --git a/graphics/pokemon/trapinch/front.png b/graphics/pokemon/trapinch/front.png index 110c9ab4eefe..a74591721569 100644 Binary files a/graphics/pokemon/trapinch/front.png and b/graphics/pokemon/trapinch/front.png differ diff --git a/graphics/pokemon/trapinch/normal.pal b/graphics/pokemon/trapinch/normal.pal index a771387d7a49..affb02664951 100644 --- a/graphics/pokemon/trapinch/normal.pal +++ b/graphics/pokemon/trapinch/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -168 96 64 -240 168 136 -240 136 88 -104 64 48 +192 88 72 +248 144 120 +232 112 64 +112 64 64 32 32 32 -216 224 232 +200 200 192 248 248 248 -184 184 208 -136 144 152 -72 72 88 +160 168 160 +128 128 128 +64 64 48 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/treecko/anim_front.png b/graphics/pokemon/treecko/anim_front.png index 728b53a330be..867137cfcb7d 100644 Binary files a/graphics/pokemon/treecko/anim_front.png and b/graphics/pokemon/treecko/anim_front.png differ diff --git a/graphics/pokemon/treecko/front.png b/graphics/pokemon/treecko/front.png index 67fb82a27648..6869c279b36d 100644 Binary files a/graphics/pokemon/treecko/front.png and b/graphics/pokemon/treecko/front.png differ diff --git a/graphics/pokemon/treecko/normal.pal b/graphics/pokemon/treecko/normal.pal index e2a879c93841..b655471e45c4 100644 --- a/graphics/pokemon/treecko/normal.pal +++ b/graphics/pokemon/treecko/normal.pal @@ -7,13 +7,13 @@ JASC-PAL 224 248 160 128 176 40 192 224 104 -168 136 32 +160 128 0 248 248 248 -248 208 56 -248 232 160 -224 72 96 -128 32 40 -240 128 136 -40 80 24 -80 128 56 -128 176 112 +248 160 32 +248 232 80 +224 72 104 +168 56 72 +240 96 120 +48 80 40 +56 104 56 +88 152 88 diff --git a/graphics/pokemon/tropius/anim_front.png b/graphics/pokemon/tropius/anim_front.png index 975e12732365..a8ce49059d56 100644 Binary files a/graphics/pokemon/tropius/anim_front.png and b/graphics/pokemon/tropius/anim_front.png differ diff --git a/graphics/pokemon/tropius/front.png b/graphics/pokemon/tropius/front.png index 2e6ea1addc98..4bece6d4037c 100644 Binary files a/graphics/pokemon/tropius/front.png and b/graphics/pokemon/tropius/front.png differ diff --git a/graphics/pokemon/tropius/normal.pal b/graphics/pokemon/tropius/normal.pal index 1d980f30cd7e..9bffa5d7795b 100644 --- a/graphics/pokemon/tropius/normal.pal +++ b/graphics/pokemon/tropius/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -88 136 80 -64 88 56 -88 176 104 +56 136 72 +32 96 32 +80 168 80 16 16 16 -144 200 152 -88 64 48 +104 192 104 +80 56 48 248 248 248 -152 120 96 -184 160 136 -120 96 80 -224 176 96 -248 224 136 -176 120 144 -88 64 48 +144 112 80 +176 144 104 +120 88 72 +232 184 56 +248 248 104 +224 104 136 0 0 0 +80 56 48 diff --git a/graphics/pokemon/trubbish/anim_front.png b/graphics/pokemon/trubbish/anim_front.png index 46c3ba76e28c..3ed705609b79 100644 Binary files a/graphics/pokemon/trubbish/anim_front.png and b/graphics/pokemon/trubbish/anim_front.png differ diff --git a/graphics/pokemon/trubbish/front.png b/graphics/pokemon/trubbish/front.png index f1b7eb3f7c1b..75fb61a266e0 100644 Binary files a/graphics/pokemon/trubbish/front.png and b/graphics/pokemon/trubbish/front.png differ diff --git a/graphics/pokemon/trubbish/normal.pal b/graphics/pokemon/trubbish/normal.pal index 0f5e78c365f4..4f2653379f87 100644 --- a/graphics/pokemon/trubbish/normal.pal +++ b/graphics/pokemon/trubbish/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -176 176 176 -88 120 96 +120 192 168 +40 104 72 16 16 16 -120 160 120 -32 56 40 -176 184 192 +72 136 104 +16 48 32 +160 192 168 248 248 248 -64 88 64 -80 64 56 -128 104 88 -176 152 128 -216 112 160 -40 128 120 -16 96 104 -160 64 104 +24 72 48 +80 72 56 +112 96 80 +160 136 112 +232 80 160 +0 136 224 +24 88 128 +184 48 120 0 0 0 diff --git a/graphics/pokemon/turtwig/anim_front.png b/graphics/pokemon/turtwig/anim_front.png index 91ac3ee83895..84e5fc8eb5d8 100644 Binary files a/graphics/pokemon/turtwig/anim_front.png and b/graphics/pokemon/turtwig/anim_front.png differ diff --git a/graphics/pokemon/turtwig/front.png b/graphics/pokemon/turtwig/front.png index 774f44c7d5c9..59d3efa89d40 100644 Binary files a/graphics/pokemon/turtwig/front.png and b/graphics/pokemon/turtwig/front.png differ diff --git a/graphics/pokemon/turtwig/normal.pal b/graphics/pokemon/turtwig/normal.pal index b1325eb3c32f..775b018c2c65 100644 --- a/graphics/pokemon/turtwig/normal.pal +++ b/graphics/pokemon/turtwig/normal.pal @@ -2,9 +2,9 @@ JASC-PAL 0100 16 152 208 160 -48 160 56 +56 160 64 56 88 40 -88 208 112 +120 208 104 104 80 48 16 16 16 168 120 64 diff --git a/graphics/pokemon/tympole/anim_front.png b/graphics/pokemon/tympole/anim_front.png index f0ba75c18d52..2d72a92d18ef 100644 Binary files a/graphics/pokemon/tympole/anim_front.png and b/graphics/pokemon/tympole/anim_front.png differ diff --git a/graphics/pokemon/tympole/front.png b/graphics/pokemon/tympole/front.png index dc6ccd1918cd..d1b5dfd48034 100644 Binary files a/graphics/pokemon/tympole/front.png and b/graphics/pokemon/tympole/front.png differ diff --git a/graphics/pokemon/tympole/normal.pal b/graphics/pokemon/tympole/normal.pal index 26fc0fc31f6b..1e707ef2521e 100644 --- a/graphics/pokemon/tympole/normal.pal +++ b/graphics/pokemon/tympole/normal.pal @@ -5,14 +5,14 @@ JASC-PAL 40 40 40 64 64 64 248 248 248 -248 216 160 -192 160 112 -16 16 16 -56 88 120 +248 216 184 +192 152 128 +0 0 0 +56 96 136 96 96 96 -144 112 72 -80 152 176 -96 200 240 +144 88 72 +112 144 192 +104 184 248 24 24 24 0 0 0 0 0 0 diff --git a/graphics/pokemon/tynamo/anim_front.png b/graphics/pokemon/tynamo/anim_front.png index 4dc1d12617fc..827e650ac7c4 100644 Binary files a/graphics/pokemon/tynamo/anim_front.png and b/graphics/pokemon/tynamo/anim_front.png differ diff --git a/graphics/pokemon/tynamo/front.png b/graphics/pokemon/tynamo/front.png index 8489c52f0ba6..47d48757ef77 100644 Binary files a/graphics/pokemon/tynamo/front.png and b/graphics/pokemon/tynamo/front.png differ diff --git a/graphics/pokemon/tynamo/normal.pal b/graphics/pokemon/tynamo/normal.pal index ee546581de59..7c53e6da9aff 100644 --- a/graphics/pokemon/tynamo/normal.pal +++ b/graphics/pokemon/tynamo/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -152 176 208 -120 136 176 -232 248 248 -80 120 144 +180 189 205 +156 164 180 +238 255 255 +123 131 148 24 24 32 -184 216 232 -184 80 88 -136 56 72 -248 224 128 -248 216 56 -240 96 88 +205 222 230 +205 74 0 +148 32 0 +255 230 123 +255 213 0 +246 131 90 176 184 200 0 0 0 0 0 0 diff --git a/graphics/pokemon/typhlosion/anim_front.png b/graphics/pokemon/typhlosion/anim_front.png index d2cde117eba1..a4f46ae24aad 100644 Binary files a/graphics/pokemon/typhlosion/anim_front.png and b/graphics/pokemon/typhlosion/anim_front.png differ diff --git a/graphics/pokemon/typhlosion/back.png b/graphics/pokemon/typhlosion/back.png index 30af3f6df710..3252c26e906c 100644 Binary files a/graphics/pokemon/typhlosion/back.png and b/graphics/pokemon/typhlosion/back.png differ diff --git a/graphics/pokemon/typhlosion/front.png b/graphics/pokemon/typhlosion/front.png index 292c6a309d09..79830374f872 100644 Binary files a/graphics/pokemon/typhlosion/front.png and b/graphics/pokemon/typhlosion/front.png differ diff --git a/graphics/pokemon/typhlosion/normal.pal b/graphics/pokemon/typhlosion/normal.pal index 6578eb2a9ff0..8315b8af8b55 100644 --- a/graphics/pokemon/typhlosion/normal.pal +++ b/graphics/pokemon/typhlosion/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -160 56 16 -248 88 16 -248 216 32 -224 168 16 -72 80 104 +216 0 0 +248 96 0 +248 216 0 +248 152 0 +40 88 120 24 40 48 -104 120 136 -168 144 88 -248 224 144 -88 72 40 +56 128 136 +160 136 72 +248 232 144 +104 80 40 16 16 16 248 248 248 -216 192 104 +208 192 112 128 72 72 -48 56 88 +48 64 112 diff --git a/graphics/pokemon/tyranitar/anim_front.png b/graphics/pokemon/tyranitar/anim_front.png index d080f270ce86..0c39b74f9bc2 100644 Binary files a/graphics/pokemon/tyranitar/anim_front.png and b/graphics/pokemon/tyranitar/anim_front.png differ diff --git a/graphics/pokemon/tyranitar/front.png b/graphics/pokemon/tyranitar/front.png index af5ffe0afcac..2032b956afb6 100644 Binary files a/graphics/pokemon/tyranitar/front.png and b/graphics/pokemon/tyranitar/front.png differ diff --git a/graphics/pokemon/tyranitar/normal.pal b/graphics/pokemon/tyranitar/normal.pal index c7ddf8e3704d..8773244e85ff 100644 --- a/graphics/pokemon/tyranitar/normal.pal +++ b/graphics/pokemon/tyranitar/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 248 160 176 -64 80 48 -168 192 128 +72 88 56 +168 200 152 16 16 16 -216 216 184 -128 144 96 +216 224 200 +112 152 96 248 248 248 -184 192 208 -88 96 112 -120 80 80 -224 136 136 -104 120 168 -48 64 104 -136 152 192 +192 192 192 +112 112 112 +144 40 0 +208 80 0 +104 128 168 +64 88 120 +144 168 208 0 0 0 0 0 0 diff --git a/graphics/pokemon/tyrogue/anim_front.png b/graphics/pokemon/tyrogue/anim_front.png index dce02b7ad284..b5c0a3d87617 100644 Binary files a/graphics/pokemon/tyrogue/anim_front.png and b/graphics/pokemon/tyrogue/anim_front.png differ diff --git a/graphics/pokemon/tyrogue/front.png b/graphics/pokemon/tyrogue/front.png index 27c3d8cd4595..0fcc422d5a3b 100644 Binary files a/graphics/pokemon/tyrogue/front.png and b/graphics/pokemon/tyrogue/front.png differ diff --git a/graphics/pokemon/tyrogue/normal.pal b/graphics/pokemon/tyrogue/normal.pal index a8540cb0482a..34d6db822fa4 100644 --- a/graphics/pokemon/tyrogue/normal.pal +++ b/graphics/pokemon/tyrogue/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 112 136 +152 104 152 112 64 96 192 152 184 -240 184 232 +232 192 248 16 16 16 248 248 248 160 128 64 224 160 64 -176 80 152 -160 144 136 -88 64 40 -176 136 104 -56 40 24 -136 96 56 +176 48 0 +152 152 168 +120 72 0 +208 152 72 +80 48 0 +160 120 64 216 208 200 diff --git a/graphics/pokemon/umbreon/anim_front.png b/graphics/pokemon/umbreon/anim_front.png index 658ff6b68946..74c7e1c79bff 100644 Binary files a/graphics/pokemon/umbreon/anim_front.png and b/graphics/pokemon/umbreon/anim_front.png differ diff --git a/graphics/pokemon/umbreon/front.png b/graphics/pokemon/umbreon/front.png index 4d5ddb188537..82a649940ec4 100644 Binary files a/graphics/pokemon/umbreon/front.png and b/graphics/pokemon/umbreon/front.png differ diff --git a/graphics/pokemon/umbreon/normal.pal b/graphics/pokemon/umbreon/normal.pal index 526761aeda9a..1019edcafa45 100644 --- a/graphics/pokemon/umbreon/normal.pal +++ b/graphics/pokemon/umbreon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 48 48 -88 96 104 +40 48 72 +96 96 120 16 16 16 -128 96 48 -240 208 120 -200 152 72 -64 72 72 -104 40 24 -248 232 216 -184 72 40 -24 32 40 -232 96 56 +80 80 0 +232 208 80 +176 144 40 +64 64 80 +128 32 16 +248 240 240 +192 48 48 +32 32 56 +248 64 64 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/unfezant/anim_front.png b/graphics/pokemon/unfezant/anim_front.png index 59ff1e4d685f..8e564674d1cc 100644 Binary files a/graphics/pokemon/unfezant/anim_front.png and b/graphics/pokemon/unfezant/anim_front.png differ diff --git a/graphics/pokemon/unfezant/anim_frontf.png b/graphics/pokemon/unfezant/anim_frontf.png index bd39fc3d12ae..46fbed1c25df 100644 Binary files a/graphics/pokemon/unfezant/anim_frontf.png and b/graphics/pokemon/unfezant/anim_frontf.png differ diff --git a/graphics/pokemon/unfezant/front.png b/graphics/pokemon/unfezant/front.png index 6227f4c9b225..cea0bc3ab067 100644 Binary files a/graphics/pokemon/unfezant/front.png and b/graphics/pokemon/unfezant/front.png differ diff --git a/graphics/pokemon/unfezant/frontf.png b/graphics/pokemon/unfezant/frontf.png new file mode 100644 index 000000000000..76e532526258 Binary files /dev/null and b/graphics/pokemon/unfezant/frontf.png differ diff --git a/graphics/pokemon/unfezant/normal.pal b/graphics/pokemon/unfezant/normal.pal index bb69c2c400c1..7310caf8ebab 100644 --- a/graphics/pokemon/unfezant/normal.pal +++ b/graphics/pokemon/unfezant/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -170 97 108 -219 189 54 -109 68 29 -98 98 98 -51 165 110 -96 50 72 -132 127 132 -49 49 53 -48 122 82 -158 60 79 -221 79 108 -164 166 173 +120 192 168 +168 96 104 +248 224 0 +96 72 48 +96 96 96 +56 168 112 +120 32 80 +120 128 136 +40 40 40 +48 120 80 +176 24 88 +248 64 120 +176 176 176 16 16 16 -75 75 81 -255 255 255 +64 64 80 +248 248 248 diff --git a/graphics/pokemon/unfezant/normalf.pal b/graphics/pokemon/unfezant/normalf.pal index a878e4c53301..c870fbffc567 100644 --- a/graphics/pokemon/unfezant/normalf.pal +++ b/graphics/pokemon/unfezant/normalf.pal @@ -1,18 +1,18 @@ JASC-PAL 0100 16 -153 210 164 +120 192 168 170 97 108 -219 189 54 +248 224 0 98 98 98 -158 110 55 +160 120 64 0 0 0 -132 127 132 -109 68 29 -49 49 53 +120 120 136 +96 72 48 +40 40 40 16 16 16 -164 166 173 -75 75 81 +176 176 176 +64 64 80 255 255 255 0 0 0 0 0 0 diff --git a/graphics/pokemon/ursaring/anim_front.png b/graphics/pokemon/ursaring/anim_front.png index 66f54bcef6fe..3a8e048b2535 100644 Binary files a/graphics/pokemon/ursaring/anim_front.png and b/graphics/pokemon/ursaring/anim_front.png differ diff --git a/graphics/pokemon/ursaring/front.png b/graphics/pokemon/ursaring/front.png index f85b56895a00..0229df2041e1 100644 Binary files a/graphics/pokemon/ursaring/front.png and b/graphics/pokemon/ursaring/front.png differ diff --git a/graphics/pokemon/ursaring/normal.pal b/graphics/pokemon/ursaring/normal.pal index 10e091cd8ac4..41bc6f31acae 100644 --- a/graphics/pokemon/ursaring/normal.pal +++ b/graphics/pokemon/ursaring/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 64 48 -144 88 64 -56 32 24 -112 128 136 +96 64 40 +144 80 32 +64 40 24 +120 120 136 16 16 16 -176 128 104 +184 112 64 248 248 248 -248 240 152 -168 184 176 -200 224 216 -240 208 104 -184 152 80 -104 56 64 -200 112 120 -248 240 152 +248 232 128 +176 176 184 +216 216 216 +240 192 96 +192 152 72 +128 24 48 +216 56 88 +248 232 128 diff --git a/graphics/pokemon/uxie/anim_front.png b/graphics/pokemon/uxie/anim_front.png index effb33d2d125..4753ea3cb856 100644 Binary files a/graphics/pokemon/uxie/anim_front.png and b/graphics/pokemon/uxie/anim_front.png differ diff --git a/graphics/pokemon/uxie/back.png b/graphics/pokemon/uxie/back.png index d5114c262fd7..5f6292d52898 100644 Binary files a/graphics/pokemon/uxie/back.png and b/graphics/pokemon/uxie/back.png differ diff --git a/graphics/pokemon/uxie/front.png b/graphics/pokemon/uxie/front.png index f45ac4e5f41e..3d923f443835 100644 Binary files a/graphics/pokemon/uxie/front.png and b/graphics/pokemon/uxie/front.png differ diff --git a/graphics/pokemon/uxie/normal.pal b/graphics/pokemon/uxie/normal.pal index bd46f4f88e8c..e3783dcaea3d 100644 --- a/graphics/pokemon/uxie/normal.pal +++ b/graphics/pokemon/uxie/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 96 56 -168 136 72 -240 200 104 -248 224 160 +112 88 64 +168 136 64 +240 192 112 +248 216 152 16 16 16 -224 104 96 -72 64 48 +232 64 64 +248 208 160 248 248 248 -176 48 48 -168 208 240 -128 160 192 -48 64 72 -96 120 152 -0 0 0 +168 64 64 +176 200 240 +144 152 192 +64 64 64 +120 112 144 +88 56 64 0 0 0 diff --git a/graphics/pokemon/vanillish/anim_front.png b/graphics/pokemon/vanillish/anim_front.png index fdd2bbf6e225..6ccecc5c85c7 100644 Binary files a/graphics/pokemon/vanillish/anim_front.png and b/graphics/pokemon/vanillish/anim_front.png differ diff --git a/graphics/pokemon/vanillish/front.png b/graphics/pokemon/vanillish/front.png index a9d589b279b7..eb3237a5c70a 100644 Binary files a/graphics/pokemon/vanillish/front.png and b/graphics/pokemon/vanillish/front.png differ diff --git a/graphics/pokemon/vanillish/normal.pal b/graphics/pokemon/vanillish/normal.pal index 5aa6c7fab8d9..61580bb7b2f3 100644 --- a/graphics/pokemon/vanillish/normal.pal +++ b/graphics/pokemon/vanillish/normal.pal @@ -5,14 +5,14 @@ JASC-PAL 120 136 184 248 248 248 72 80 112 -16 16 16 -160 176 224 -144 208 248 +0 0 0 +184 184 216 +160 216 240 120 176 200 -88 160 216 -48 80 152 -72 104 176 -192 200 232 +104 160 232 +56 64 112 +72 80 160 +208 208 232 40 96 168 32 80 120 0 0 0 diff --git a/graphics/pokemon/vanillite/anim_front.png b/graphics/pokemon/vanillite/anim_front.png index e63bdf23e3bb..a837f0dcd067 100644 Binary files a/graphics/pokemon/vanillite/anim_front.png and b/graphics/pokemon/vanillite/anim_front.png differ diff --git a/graphics/pokemon/vanillite/front.png b/graphics/pokemon/vanillite/front.png index 8aaabc8af092..dfcfb42c7910 100644 Binary files a/graphics/pokemon/vanillite/front.png and b/graphics/pokemon/vanillite/front.png differ diff --git a/graphics/pokemon/vanillite/normal.pal b/graphics/pokemon/vanillite/normal.pal index ba24b30c467e..58ca8c87befd 100644 --- a/graphics/pokemon/vanillite/normal.pal +++ b/graphics/pokemon/vanillite/normal.pal @@ -5,15 +5,15 @@ JASC-PAL 120 136 184 72 80 112 248 248 248 -16 16 16 -160 176 224 -192 200 232 -136 208 240 +0 0 0 +184 184 216 +208 208 232 +160 216 240 120 160 192 -88 144 208 +104 160 232 104 120 160 -32 56 136 -48 88 168 +48 56 96 +64 72 136 40 96 168 32 80 120 0 0 0 diff --git a/graphics/pokemon/vanilluxe/anim_front.png b/graphics/pokemon/vanilluxe/anim_front.png index 1993221f35b2..c2dc106e7fd5 100644 Binary files a/graphics/pokemon/vanilluxe/anim_front.png and b/graphics/pokemon/vanilluxe/anim_front.png differ diff --git a/graphics/pokemon/vanilluxe/front.png b/graphics/pokemon/vanilluxe/front.png index 7bda2d14efd9..168c54b67764 100644 Binary files a/graphics/pokemon/vanilluxe/front.png and b/graphics/pokemon/vanilluxe/front.png differ diff --git a/graphics/pokemon/vanilluxe/normal.pal b/graphics/pokemon/vanilluxe/normal.pal index 23d54f7ba51c..8a88dfe3c7bb 100644 --- a/graphics/pokemon/vanilluxe/normal.pal +++ b/graphics/pokemon/vanilluxe/normal.pal @@ -4,16 +4,16 @@ JASC-PAL 152 208 160 120 136 184 248 248 248 -160 176 224 +184 184 216 64 64 112 -16 16 16 +0 0 0 40 96 168 -88 160 216 -192 200 232 -144 208 248 +104 160 232 +208 208 232 +160 216 240 32 64 112 120 160 192 -96 80 152 -144 120 184 +88 72 120 +128 88 168 72 80 112 32 64 112 diff --git a/graphics/pokemon/vaporeon/anim_front.png b/graphics/pokemon/vaporeon/anim_front.png index 40c1f627ed4d..de15a8c7c8e1 100644 Binary files a/graphics/pokemon/vaporeon/anim_front.png and b/graphics/pokemon/vaporeon/anim_front.png differ diff --git a/graphics/pokemon/vaporeon/front.png b/graphics/pokemon/vaporeon/front.png index 7005e9439025..1ab0c7e466eb 100644 Binary files a/graphics/pokemon/vaporeon/front.png and b/graphics/pokemon/vaporeon/front.png differ diff --git a/graphics/pokemon/vaporeon/normal.pal b/graphics/pokemon/vaporeon/normal.pal index cdbd0427442e..90de2a96cb77 100644 --- a/graphics/pokemon/vaporeon/normal.pal +++ b/graphics/pokemon/vaporeon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 64 88 -32 112 152 -184 176 128 -112 104 64 -128 136 144 +16 74 98 +16 115 148 +189 172 90 +106 98 32 +139 139 139 16 16 16 -248 248 248 -248 240 168 -200 208 224 -112 200 224 -152 224 240 -80 160 176 -80 48 120 -120 56 104 -200 112 184 +255 255 255 +255 230 164 +205 205 205 +90 197 230 +131 222 255 +65 156 189 +82 16 115 +123 8 41 +213 82 115 diff --git a/graphics/pokemon/venipede/anim_front.png b/graphics/pokemon/venipede/anim_front.png index 7794ee605043..27bad5955c04 100644 Binary files a/graphics/pokemon/venipede/anim_front.png and b/graphics/pokemon/venipede/anim_front.png differ diff --git a/graphics/pokemon/venipede/front.png b/graphics/pokemon/venipede/front.png index c18a74559a08..ebabe585ceb1 100644 Binary files a/graphics/pokemon/venipede/front.png and b/graphics/pokemon/venipede/front.png differ diff --git a/graphics/pokemon/venipede/normal.pal b/graphics/pokemon/venipede/normal.pal index c4321b3a9770..28e4b09d7f19 100644 --- a/graphics/pokemon/venipede/normal.pal +++ b/graphics/pokemon/venipede/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 24 40 +96 32 48 16 16 16 -176 56 88 -128 40 64 -248 152 168 -200 96 112 -32 64 40 -32 40 56 -72 136 96 -56 96 64 -160 104 56 -240 168 80 -0 0 0 +184 48 80 +144 0 64 +248 144 160 +224 96 120 +8 72 56 +48 48 56 +0 144 88 +0 112 56 +184 136 8 +232 176 8 +0 128 255 0 0 0 0 0 0 diff --git a/graphics/pokemon/venomoth/anim_front.png b/graphics/pokemon/venomoth/anim_front.png index 1e75594488a7..834bf6fbcbcd 100644 Binary files a/graphics/pokemon/venomoth/anim_front.png and b/graphics/pokemon/venomoth/anim_front.png differ diff --git a/graphics/pokemon/venomoth/front.png b/graphics/pokemon/venomoth/front.png index b804c9154f46..895d4aeb97f6 100644 Binary files a/graphics/pokemon/venomoth/front.png and b/graphics/pokemon/venomoth/front.png differ diff --git a/graphics/pokemon/venomoth/normal.pal b/graphics/pokemon/venomoth/normal.pal index deda9413c4cf..92234d0a0c64 100644 --- a/graphics/pokemon/venomoth/normal.pal +++ b/graphics/pokemon/venomoth/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 112 88 120 -176 152 184 -240 216 248 -216 192 232 +156 139 189 +246 222 255 +213 172 222 16 16 16 -160 152 208 -64 56 104 -192 184 224 -104 104 160 +213 172 222 +98 74 115 +238 197 255 +156 139 189 248 248 248 -184 200 224 -96 80 64 -152 144 144 -200 192 192 +172 197 197 +98 82 57 +164 131 123 +197 172 139 224 224 224 diff --git a/graphics/pokemon/venonat/anim_front.png b/graphics/pokemon/venonat/anim_front.png index 619b9181867e..11187e0e127b 100644 Binary files a/graphics/pokemon/venonat/anim_front.png and b/graphics/pokemon/venonat/anim_front.png differ diff --git a/graphics/pokemon/venonat/front.png b/graphics/pokemon/venonat/front.png index 898b4ac407c5..738b8f161437 100644 Binary files a/graphics/pokemon/venonat/front.png and b/graphics/pokemon/venonat/front.png differ diff --git a/graphics/pokemon/venonat/normal.pal b/graphics/pokemon/venonat/normal.pal index 15dcf048ea2f..237a56d2635e 100644 --- a/graphics/pokemon/venonat/normal.pal +++ b/graphics/pokemon/venonat/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 120 120 -248 248 248 -208 208 216 +123 123 123 +255 255 255 +213 213 213 16 16 16 -72 64 144 -112 112 184 -80 24 48 -168 64 120 -216 96 144 -240 128 184 -48 48 80 -112 80 64 -216 184 152 -176 144 112 +98 74 123 +139 106 164 +82 16 16 +180 65 90 +255 90 90 +255 172 180 +49 41 82 +115 65 41 +238 189 156 +189 148 106 144 136 200 diff --git a/graphics/pokemon/venusaur/anim_front.png b/graphics/pokemon/venusaur/anim_front.png index e814e6278d34..9ba3e62add18 100644 Binary files a/graphics/pokemon/venusaur/anim_front.png and b/graphics/pokemon/venusaur/anim_front.png differ diff --git a/graphics/pokemon/venusaur/front.png b/graphics/pokemon/venusaur/front.png index 886fe6fa00a1..0d21e669d9a6 100644 Binary files a/graphics/pokemon/venusaur/front.png and b/graphics/pokemon/venusaur/front.png differ diff --git a/graphics/pokemon/venusaur/normal.pal b/graphics/pokemon/venusaur/normal.pal index 6c5c41d5b66e..d6751ffe01f0 100644 --- a/graphics/pokemon/venusaur/normal.pal +++ b/graphics/pokemon/venusaur/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -208 248 184 -88 64 40 -232 176 184 -232 104 120 -184 64 72 -136 104 72 -200 160 80 +248 192 248 +128 48 0 +248 184 184 +248 120 112 +216 64 64 +184 104 48 +216 184 40 16 16 16 -232 192 120 -32 80 80 -80 152 80 -120 192 112 -136 200 200 -72 168 168 -48 128 128 +248 232 80 +16 80 64 +88 152 56 +128 216 120 +88 208 192 +32 176 152 +16 120 104 248 248 248 diff --git a/graphics/pokemon/vespiquen/anim_front.png b/graphics/pokemon/vespiquen/anim_front.png index 80e6e4e2dbf5..abaa335c8c25 100644 Binary files a/graphics/pokemon/vespiquen/anim_front.png and b/graphics/pokemon/vespiquen/anim_front.png differ diff --git a/graphics/pokemon/vespiquen/front.png b/graphics/pokemon/vespiquen/front.png index 4ba80e4ff56c..cc731fc7bd93 100644 Binary files a/graphics/pokemon/vespiquen/front.png and b/graphics/pokemon/vespiquen/front.png differ diff --git a/graphics/pokemon/vespiquen/normal.pal b/graphics/pokemon/vespiquen/normal.pal index d6c43bd441a2..d806da4440c7 100644 --- a/graphics/pokemon/vespiquen/normal.pal +++ b/graphics/pokemon/vespiquen/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 88 104 -176 200 208 +80 88 112 +184 184 208 16 16 16 -48 40 40 -232 248 248 -96 80 32 -72 64 72 -248 184 64 -176 128 32 -224 88 80 -72 48 24 -144 48 48 -232 128 72 -144 80 40 +40 40 40 +232 232 248 +104 88 0 +64 64 72 +248 200 8 +176 136 0 +232 56 56 +104 40 0 +120 48 56 +232 112 0 +168 80 0 128 136 160 diff --git a/graphics/pokemon/vibrava/anim_front.png b/graphics/pokemon/vibrava/anim_front.png index 5cffff36f8aa..553f82207937 100644 Binary files a/graphics/pokemon/vibrava/anim_front.png and b/graphics/pokemon/vibrava/anim_front.png differ diff --git a/graphics/pokemon/vibrava/front.png b/graphics/pokemon/vibrava/front.png index c56c6e75427e..d3dca4c68f96 100644 Binary files a/graphics/pokemon/vibrava/front.png and b/graphics/pokemon/vibrava/front.png differ diff --git a/graphics/pokemon/vibrava/normal.pal b/graphics/pokemon/vibrava/normal.pal index 11144072b0f1..72ac12b22d49 100644 --- a/graphics/pokemon/vibrava/normal.pal +++ b/graphics/pokemon/vibrava/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 64 56 -16 16 16 -104 120 120 -72 88 80 -40 144 56 -80 184 88 -112 112 80 -176 176 112 -184 184 216 -248 248 248 -224 224 128 -248 248 176 -112 216 120 +57 57 65 +0 0 0 +106 115 115 +74 82 74 +74 148 74 +106 197 106 +115 115 82 +189 172 123 +189 189 222 +255 255 255 +230 213 139 +255 255 164 +148 222 131 0 0 0 0 0 0 diff --git a/graphics/pokemon/victini/anim_front.png b/graphics/pokemon/victini/anim_front.png index 1d037d955c64..a6b9408ee5ec 100644 Binary files a/graphics/pokemon/victini/anim_front.png and b/graphics/pokemon/victini/anim_front.png differ diff --git a/graphics/pokemon/victini/front.png b/graphics/pokemon/victini/front.png index 8129f758f382..6901f6fb3e3b 100644 Binary files a/graphics/pokemon/victini/front.png and b/graphics/pokemon/victini/front.png differ diff --git a/graphics/pokemon/victini/normal.pal b/graphics/pokemon/victini/normal.pal index 9654c51a1bfe..23e9a657e219 100644 --- a/graphics/pokemon/victini/normal.pal +++ b/graphics/pokemon/victini/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 168 -120 40 16 -248 112 56 -176 72 32 -16 16 16 -184 160 104 -96 80 56 -248 232 176 -48 40 40 -0 112 184 +152 208 160 +136 48 16 +248 104 24 +184 72 0 +0 0 0 +192 152 88 +104 72 16 +248 224 168 +56 56 56 +56 88 168 248 248 248 192 184 184 -128 192 208 -128 72 104 -224 120 128 -120 104 80 +112 168 248 +160 88 88 +192 112 112 +128 104 56 diff --git a/graphics/pokemon/victreebel/anim_front.png b/graphics/pokemon/victreebel/anim_front.png index 4bdbff1a5a94..a8ecbdb468da 100644 Binary files a/graphics/pokemon/victreebel/anim_front.png and b/graphics/pokemon/victreebel/anim_front.png differ diff --git a/graphics/pokemon/victreebel/back.png b/graphics/pokemon/victreebel/back.png index 9715fcca7d76..0626c35344ad 100644 Binary files a/graphics/pokemon/victreebel/back.png and b/graphics/pokemon/victreebel/back.png differ diff --git a/graphics/pokemon/victreebel/front.png b/graphics/pokemon/victreebel/front.png index 257de676aae8..f82a0e17fe9c 100644 Binary files a/graphics/pokemon/victreebel/front.png and b/graphics/pokemon/victreebel/front.png differ diff --git a/graphics/pokemon/victreebel/normal.pal b/graphics/pokemon/victreebel/normal.pal index 39cc05735135..ef9c409828cf 100644 --- a/graphics/pokemon/victreebel/normal.pal +++ b/graphics/pokemon/victreebel/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -88 72 56 -40 96 40 -136 112 88 -16 16 16 -112 208 120 -88 160 96 -168 112 104 -240 160 168 +98 82 41 +16 98 57 +164 123 49 +0 0 0 +139 197 123 +74 164 123 +197 90 32 +238 139 82 248 248 248 200 216 208 -192 192 72 +222 189 82 144 152 32 -224 216 72 -248 240 136 -168 176 56 +238 213 106 +246 238 148 +131 24 0 diff --git a/graphics/pokemon/victreebel/shiny.pal b/graphics/pokemon/victreebel/shiny.pal index 8193a9d839b9..1aac75ff4b54 100644 --- a/graphics/pokemon/victreebel/shiny.pal +++ b/graphics/pokemon/victreebel/shiny.pal @@ -16,4 +16,4 @@ JASC-PAL 144 152 32 216 248 88 232 248 152 -168 176 56 +0 40 152 diff --git a/graphics/pokemon/vigoroth/anim_front.png b/graphics/pokemon/vigoroth/anim_front.png index 9a394434c761..deb372530006 100644 Binary files a/graphics/pokemon/vigoroth/anim_front.png and b/graphics/pokemon/vigoroth/anim_front.png differ diff --git a/graphics/pokemon/vigoroth/front.png b/graphics/pokemon/vigoroth/front.png index 4b5669f8743b..b3840cd1b28f 100644 Binary files a/graphics/pokemon/vigoroth/front.png and b/graphics/pokemon/vigoroth/front.png differ diff --git a/graphics/pokemon/vigoroth/normal.pal b/graphics/pokemon/vigoroth/normal.pal index 0e6f9968fdc6..f9e53c8d1a77 100644 --- a/graphics/pokemon/vigoroth/normal.pal +++ b/graphics/pokemon/vigoroth/normal.pal @@ -3,15 +3,15 @@ JASC-PAL 16 152 208 160 104 48 40 -232 96 104 +248 72 88 72 64 64 -152 80 72 +152 64 72 16 16 16 200 200 208 248 248 248 152 120 96 120 96 72 -232 216 216 +224 224 224 136 120 120 88 56 32 160 80 120 diff --git a/graphics/pokemon/vileplume/anim_front.png b/graphics/pokemon/vileplume/anim_front.png index 1b75422cd6f9..0169b8f347ff 100644 Binary files a/graphics/pokemon/vileplume/anim_front.png and b/graphics/pokemon/vileplume/anim_front.png differ diff --git a/graphics/pokemon/vileplume/front.png b/graphics/pokemon/vileplume/front.png index 67ebc9fd31c9..4b0663612b37 100644 Binary files a/graphics/pokemon/vileplume/front.png and b/graphics/pokemon/vileplume/front.png differ diff --git a/graphics/pokemon/vileplume/normal.pal b/graphics/pokemon/vileplume/normal.pal index 08cb3260432f..f7f01cae2a8f 100644 --- a/graphics/pokemon/vileplume/normal.pal +++ b/graphics/pokemon/vileplume/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -152 56 72 -104 32 40 -224 128 144 -248 200 208 -200 88 104 -240 168 176 +189 49 74 +123 24 16 +255 98 98 +255 205 213 +238 49 49 +246 172 180 16 16 16 -224 144 88 -144 72 24 +255 164 41 +180 98 32 40 40 40 -200 112 56 -24 40 64 -48 72 112 -80 112 152 +197 139 32 +24 41 74 +57 82 82 +90 98 131 40 40 40 diff --git a/graphics/pokemon/virizion/anim_front.png b/graphics/pokemon/virizion/anim_front.png index 516c9423dd9f..0b7ef3bb8d9d 100644 Binary files a/graphics/pokemon/virizion/anim_front.png and b/graphics/pokemon/virizion/anim_front.png differ diff --git a/graphics/pokemon/virizion/front.png b/graphics/pokemon/virizion/front.png index fa808fc8a233..6c1f3a36ccc3 100644 Binary files a/graphics/pokemon/virizion/front.png and b/graphics/pokemon/virizion/front.png differ diff --git a/graphics/pokemon/virizion/normal.pal b/graphics/pokemon/virizion/normal.pal index 9dc688808a04..a4436e0dd607 100644 --- a/graphics/pokemon/virizion/normal.pal +++ b/graphics/pokemon/virizion/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -72 104 48 -40 64 32 -104 136 64 -152 208 96 +153 204 153 +74 98 41 +49 74 41 +98 139 16 +156 205 82 16 16 16 -64 72 80 -120 112 120 -248 136 136 -248 248 248 -104 48 72 -224 232 192 -208 80 96 -168 168 136 -104 104 72 +65 65 74 +106 115 123 +222 115 139 +255 255 255 +123 16 57 +246 246 213 +172 65 106 +172 180 106 +106 106 74 0 0 0 diff --git a/graphics/pokemon/volbeat/anim_front.png b/graphics/pokemon/volbeat/anim_front.png index 429e9b196e80..b635eae4e31a 100644 Binary files a/graphics/pokemon/volbeat/anim_front.png and b/graphics/pokemon/volbeat/anim_front.png differ diff --git a/graphics/pokemon/volbeat/front.png b/graphics/pokemon/volbeat/front.png index 11dc67ba3052..e4f17ee4d154 100644 Binary files a/graphics/pokemon/volbeat/front.png and b/graphics/pokemon/volbeat/front.png differ diff --git a/graphics/pokemon/volbeat/normal.pal b/graphics/pokemon/volbeat/normal.pal index 885328b623ad..87145254f8ce 100644 --- a/graphics/pokemon/volbeat/normal.pal +++ b/graphics/pokemon/volbeat/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 72 64 +72 72 80 16 16 16 216 216 216 -136 136 136 -120 104 56 -224 168 64 -248 224 120 -184 56 64 -136 32 40 -152 168 200 -56 72 104 -112 128 168 -216 88 88 +136 136 144 +136 104 80 +216 176 80 +248 224 80 +200 56 80 +136 48 72 +160 176 192 +72 80 104 +120 136 160 +224 80 96 248 248 248 -240 136 128 +240 128 112 diff --git a/graphics/pokemon/volcarona/anim_front.png b/graphics/pokemon/volcarona/anim_front.png index 9475a4064dfd..a200fe516d12 100644 Binary files a/graphics/pokemon/volcarona/anim_front.png and b/graphics/pokemon/volcarona/anim_front.png differ diff --git a/graphics/pokemon/volcarona/front.png b/graphics/pokemon/volcarona/front.png index 782ac12767d3..d36a22a25399 100644 Binary files a/graphics/pokemon/volcarona/front.png and b/graphics/pokemon/volcarona/front.png differ diff --git a/graphics/pokemon/volcarona/normal.pal b/graphics/pokemon/volcarona/normal.pal index 4ac0cab8f28c..a3d2bcfcd117 100644 --- a/graphics/pokemon/volcarona/normal.pal +++ b/graphics/pokemon/volcarona/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 64 56 -192 88 80 -96 40 40 -56 48 56 +160 40 8 +192 72 64 +120 32 0 +48 48 56 24 24 32 -240 112 64 -96 88 88 -176 160 152 -232 216 216 -0 112 152 -0 192 240 -56 72 88 -112 152 144 -160 224 224 -80 104 120 +232 112 24 +96 96 96 +176 176 176 +224 224 224 +0 104 160 +0 192 248 +24 80 96 +80 144 152 +144 200 208 +56 112 128 diff --git a/graphics/pokemon/voltorb/anim_front.png b/graphics/pokemon/voltorb/anim_front.png index fcd0ab765971..740cfa4f3d34 100644 Binary files a/graphics/pokemon/voltorb/anim_front.png and b/graphics/pokemon/voltorb/anim_front.png differ diff --git a/graphics/pokemon/voltorb/front.png b/graphics/pokemon/voltorb/front.png index c87c4dec0ff1..ad4385d1bb1d 100644 Binary files a/graphics/pokemon/voltorb/front.png and b/graphics/pokemon/voltorb/front.png differ diff --git a/graphics/pokemon/voltorb/normal.pal b/graphics/pokemon/voltorb/normal.pal index f59c1a4d424d..79af1efd7f6c 100644 --- a/graphics/pokemon/voltorb/normal.pal +++ b/graphics/pokemon/voltorb/normal.pal @@ -3,15 +3,15 @@ JASC-PAL 16 152 208 160 16 16 16 -120 48 56 -176 80 88 -224 112 104 -200 80 88 -248 144 144 -232 168 160 -200 48 96 -208 216 224 -176 184 200 +131 16 16 +213 49 65 +255 82 32 +238 65 49 +255 131 90 +255 172 156 +213 49 65 +222 213 213 +180 172 189 248 248 248 88 80 80 136 128 128 diff --git a/graphics/pokemon/vullaby/anim_front.png b/graphics/pokemon/vullaby/anim_front.png index da73a48bbcbc..4af9402a142a 100644 Binary files a/graphics/pokemon/vullaby/anim_front.png and b/graphics/pokemon/vullaby/anim_front.png differ diff --git a/graphics/pokemon/vullaby/front.png b/graphics/pokemon/vullaby/front.png index e4b46f175e06..a24b2aafbef5 100644 Binary files a/graphics/pokemon/vullaby/front.png and b/graphics/pokemon/vullaby/front.png differ diff --git a/graphics/pokemon/vullaby/normal.pal b/graphics/pokemon/vullaby/normal.pal index eb0b431a81c2..9bbe6e037226 100644 --- a/graphics/pokemon/vullaby/normal.pal +++ b/graphics/pokemon/vullaby/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 48 40 +56 40 40 16 16 16 -88 72 64 -104 56 64 -216 128 144 -152 88 96 +80 64 64 +128 48 64 +224 128 144 +176 80 96 248 248 248 -224 96 88 -136 120 120 -104 88 80 -168 144 112 -240 216 184 -80 64 48 -0 0 0 +200 48 24 +128 120 112 +104 88 88 +176 160 128 +232 232 192 +88 80 56 +104 88 88 0 0 0 diff --git a/graphics/pokemon/vulpix/anim_front.png b/graphics/pokemon/vulpix/anim_front.png index 322b00e4dccc..0b9401e5078f 100644 Binary files a/graphics/pokemon/vulpix/anim_front.png and b/graphics/pokemon/vulpix/anim_front.png differ diff --git a/graphics/pokemon/vulpix/front.png b/graphics/pokemon/vulpix/front.png index 53c4ced44928..39c5bdff3841 100644 Binary files a/graphics/pokemon/vulpix/front.png and b/graphics/pokemon/vulpix/front.png differ diff --git a/graphics/pokemon/vulpix/normal.pal b/graphics/pokemon/vulpix/normal.pal index 555aff127ae1..aefc8e87cfec 100644 --- a/graphics/pokemon/vulpix/normal.pal +++ b/graphics/pokemon/vulpix/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 40 16 -232 136 96 -216 112 64 -176 88 32 +115 32 0 +255 148 90 +222 115 41 +189 74 41 16 16 16 -96 56 48 -168 112 88 -200 136 112 -128 64 40 -184 96 64 -248 248 248 +115 49 0 +189 115 90 +230 148 106 +172 90 8 +205 123 41 +255 255 255 160 120 112 -128 80 80 -216 192 152 +168 0 0 +246 189 123 0 0 0 diff --git a/graphics/pokemon/wailmer/anim_front.png b/graphics/pokemon/wailmer/anim_front.png index 8d19af603cbd..b2f2a2690983 100644 Binary files a/graphics/pokemon/wailmer/anim_front.png and b/graphics/pokemon/wailmer/anim_front.png differ diff --git a/graphics/pokemon/wailmer/front.png b/graphics/pokemon/wailmer/front.png index 457887bdde7b..3c887adf8552 100644 Binary files a/graphics/pokemon/wailmer/front.png and b/graphics/pokemon/wailmer/front.png differ diff --git a/graphics/pokemon/wailmer/normal.pal b/graphics/pokemon/wailmer/normal.pal index d483af0d8599..b2007f524e85 100644 --- a/graphics/pokemon/wailmer/normal.pal +++ b/graphics/pokemon/wailmer/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -32 72 104 -88 160 192 -56 128 176 -16 88 136 -16 40 56 -16 16 16 -168 184 208 -240 216 160 -120 104 56 -248 248 248 -248 240 200 -120 136 168 -168 144 96 -208 184 120 +49 74 115 +98 156 205 +74 131 180 +49 90 148 +32 49 74 +0 0 0 +180 189 197 +238 213 164 +106 98 74 +255 255 255 +255 238 205 +131 139 156 +156 139 98 +205 180 131 0 0 0 diff --git a/graphics/pokemon/wailord/anim_front.png b/graphics/pokemon/wailord/anim_front.png index e0e37ad9798e..887ecbcf3682 100644 Binary files a/graphics/pokemon/wailord/anim_front.png and b/graphics/pokemon/wailord/anim_front.png differ diff --git a/graphics/pokemon/wailord/front.png b/graphics/pokemon/wailord/front.png index aef6d9b8cbc1..9f337fd82fa2 100644 Binary files a/graphics/pokemon/wailord/front.png and b/graphics/pokemon/wailord/front.png differ diff --git a/graphics/pokemon/wailord/normal.pal b/graphics/pokemon/wailord/normal.pal index 6323bf1f4895..b6b17ba688dc 100644 --- a/graphics/pokemon/wailord/normal.pal +++ b/graphics/pokemon/wailord/normal.pal @@ -1,18 +1,18 @@ JASC-PAL 0100 16 -152 208 160 -16 64 96 -24 104 152 +248 248 192 +40 56 152 +16 80 200 8 40 64 -64 168 224 -184 176 168 -104 96 88 -32 136 192 -152 144 136 -168 208 240 +88 128 240 +216 208 224 +128 112 128 +32 112 224 +176 168 176 +144 176 248 56 48 48 -224 208 200 +240 232 248 24 24 24 0 0 0 0 0 0 diff --git a/graphics/pokemon/walrein/anim_front.png b/graphics/pokemon/walrein/anim_front.png index d434f35d4680..9a087634e152 100644 Binary files a/graphics/pokemon/walrein/anim_front.png and b/graphics/pokemon/walrein/anim_front.png differ diff --git a/graphics/pokemon/walrein/front.png b/graphics/pokemon/walrein/front.png index 3ca4a3d41981..7dc56050a3a3 100644 Binary files a/graphics/pokemon/walrein/front.png and b/graphics/pokemon/walrein/front.png differ diff --git a/graphics/pokemon/walrein/normal.pal b/graphics/pokemon/walrein/normal.pal index cd33fcf124e2..dc70970ebf99 100644 --- a/graphics/pokemon/walrein/normal.pal +++ b/graphics/pokemon/walrein/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -32 72 96 -16 16 16 -160 208 240 -32 120 160 +248 192 192 +40 72 104 +0 0 0 +160 192 216 +48 120 160 248 248 248 -192 224 240 -128 176 208 -160 136 88 -248 216 120 -80 144 176 -224 192 136 -248 224 168 -168 104 128 -232 160 176 +192 208 248 +96 168 200 +160 128 88 +240 160 104 +64 144 192 +248 216 128 +248 248 160 +200 80 128 +232 152 176 0 0 0 diff --git a/graphics/pokemon/wartortle/anim_front.png b/graphics/pokemon/wartortle/anim_front.png index 1480f5f80325..3cd3f59e1807 100644 Binary files a/graphics/pokemon/wartortle/anim_front.png and b/graphics/pokemon/wartortle/anim_front.png differ diff --git a/graphics/pokemon/wartortle/back.png b/graphics/pokemon/wartortle/back.png index 3e47971cf70f..9bb691ccbc16 100644 Binary files a/graphics/pokemon/wartortle/back.png and b/graphics/pokemon/wartortle/back.png differ diff --git a/graphics/pokemon/wartortle/front.png b/graphics/pokemon/wartortle/front.png index ee548702f66e..4768f5f48066 100644 Binary files a/graphics/pokemon/wartortle/front.png and b/graphics/pokemon/wartortle/front.png differ diff --git a/graphics/pokemon/wartortle/normal.pal b/graphics/pokemon/wartortle/normal.pal index ff42ae4d497d..c2c7c0db7ebe 100644 --- a/graphics/pokemon/wartortle/normal.pal +++ b/graphics/pokemon/wartortle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 153 210 164 -152 174 220 +139 172 246 255 255 255 16 16 16 -171 208 219 -43 82 136 -85 137 200 -218 235 242 -192 205 235 -80 46 39 -145 112 87 -204 182 140 +189 197 230 +41 65 106 +98 123 197 +213 238 246 +172 197 255 +106 74 24 +148 98 98 +172 139 98 49 65 74 -255 239 206 -145 112 87 -184 157 137 +222 197 139 +200 48 0 +139 90 32 diff --git a/graphics/pokemon/wartortle/shiny.pal b/graphics/pokemon/wartortle/shiny.pal index 39b77faecaf1..b8ca2cfbc1ca 100644 --- a/graphics/pokemon/wartortle/shiny.pal +++ b/graphics/pokemon/wartortle/shiny.pal @@ -15,5 +15,5 @@ JASC-PAL 222 164 65 65 65 82 246 213 123 -164 98 32 -156 197 49 +192 24 0 +136 96 24 diff --git a/graphics/pokemon/watchog/anim_front.png b/graphics/pokemon/watchog/anim_front.png index 21bddd3c81ec..c47a88e1b1af 100644 Binary files a/graphics/pokemon/watchog/anim_front.png and b/graphics/pokemon/watchog/anim_front.png differ diff --git a/graphics/pokemon/watchog/front.png b/graphics/pokemon/watchog/front.png index 58affb580ae6..82cfc39e58bd 100644 Binary files a/graphics/pokemon/watchog/front.png and b/graphics/pokemon/watchog/front.png differ diff --git a/graphics/pokemon/watchog/normal.pal b/graphics/pokemon/watchog/normal.pal index 2dcff58a5c9e..282e96789bfa 100644 --- a/graphics/pokemon/watchog/normal.pal +++ b/graphics/pokemon/watchog/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -144 128 120 +128 128 128 248 248 248 -80 40 32 -144 72 56 -200 184 176 +88 40 56 +144 56 56 +184 184 184 +56 56 56 168 48 48 -64 56 64 -232 72 72 +240 72 72 240 176 40 128 120 96 -216 192 160 -176 152 128 -112 40 40 -184 128 32 +208 184 144 +176 152 112 +112 48 64 +184 128 64 diff --git a/graphics/pokemon/weavile/anim_front.png b/graphics/pokemon/weavile/anim_front.png index a09dde1ff457..c98cdf5647fe 100644 Binary files a/graphics/pokemon/weavile/anim_front.png and b/graphics/pokemon/weavile/anim_front.png differ diff --git a/graphics/pokemon/weavile/front.png b/graphics/pokemon/weavile/front.png index 6f8da6525cb6..90ad62cb994a 100644 Binary files a/graphics/pokemon/weavile/front.png and b/graphics/pokemon/weavile/front.png differ diff --git a/graphics/pokemon/weavile/normal.pal b/graphics/pokemon/weavile/normal.pal index 8e81acac3c27..4577a270282d 100644 --- a/graphics/pokemon/weavile/normal.pal +++ b/graphics/pokemon/weavile/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 40 80 -112 24 40 -240 72 104 +192 40 112 +128 32 80 +240 80 112 240 128 128 104 96 120 192 184 200 16 16 16 248 248 248 -136 128 168 -72 80 112 +112 128 184 +64 72 128 96 112 152 -40 40 64 +40 48 80 240 208 80 176 136 56 72 80 104 diff --git a/graphics/pokemon/weedle/anim_front.png b/graphics/pokemon/weedle/anim_front.png index 16b95eaa6da1..da10f827fc06 100644 Binary files a/graphics/pokemon/weedle/anim_front.png and b/graphics/pokemon/weedle/anim_front.png differ diff --git a/graphics/pokemon/weedle/front.png b/graphics/pokemon/weedle/front.png index 329f69e22d7b..12182258f850 100644 Binary files a/graphics/pokemon/weedle/front.png and b/graphics/pokemon/weedle/front.png differ diff --git a/graphics/pokemon/weedle/normal.pal b/graphics/pokemon/weedle/normal.pal index eefe5e0ddb27..b1d97250eba3 100644 --- a/graphics/pokemon/weedle/normal.pal +++ b/graphics/pokemon/weedle/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 136 144 -248 248 248 -88 88 96 -192 192 192 -128 88 48 -208 160 96 -168 112 64 -80 56 32 -224 192 160 +139 139 148 +255 255 255 +90 90 98 +197 197 197 +148 90 8 +238 172 65 +205 115 16 +106 57 8 +255 230 123 24 24 24 -152 72 104 -216 112 152 -232 184 208 -0 0 0 +156 41 32 +222 90 82 +238 156 139 +255 222 205 0 0 0 diff --git a/graphics/pokemon/weepinbell/anim_front.png b/graphics/pokemon/weepinbell/anim_front.png index e182c3582437..56d2b201225d 100644 Binary files a/graphics/pokemon/weepinbell/anim_front.png and b/graphics/pokemon/weepinbell/anim_front.png differ diff --git a/graphics/pokemon/weepinbell/back.png b/graphics/pokemon/weepinbell/back.png index b4745775c436..1f9ccd1a9553 100644 Binary files a/graphics/pokemon/weepinbell/back.png and b/graphics/pokemon/weepinbell/back.png differ diff --git a/graphics/pokemon/weepinbell/front.png b/graphics/pokemon/weepinbell/front.png index 10cba75a75dc..20b61b8d5f6f 100644 Binary files a/graphics/pokemon/weepinbell/front.png and b/graphics/pokemon/weepinbell/front.png differ diff --git a/graphics/pokemon/weepinbell/normal.pal b/graphics/pokemon/weepinbell/normal.pal index d489fda44486..27931063f3f4 100644 --- a/graphics/pokemon/weepinbell/normal.pal +++ b/graphics/pokemon/weepinbell/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -40 96 40 -88 160 96 -160 216 120 -96 88 72 -160 136 112 -16 16 16 -248 240 160 -240 232 80 -136 192 104 -200 192 72 -152 168 48 -248 248 248 -144 72 104 -232 168 176 -192 136 128 +8 90 49 +57 172 90 +156 222 131 +98 74 49 +164 123 49 +0 0 0 +255 246 172 +255 230 106 +106 197 82 +213 197 82 +123 41 41 +255 255 255 +180 65 74 +238 156 172 +205 106 131 diff --git a/graphics/pokemon/weepinbell/shiny.pal b/graphics/pokemon/weepinbell/shiny.pal index 700a346afafc..87c68f5b221b 100644 --- a/graphics/pokemon/weepinbell/shiny.pal +++ b/graphics/pokemon/weepinbell/shiny.pal @@ -12,7 +12,7 @@ JASC-PAL 216 248 88 184 224 64 184 200 56 -152 168 48 +144 88 104 248 248 248 152 104 120 232 200 208 diff --git a/graphics/pokemon/weezing/anim_front.png b/graphics/pokemon/weezing/anim_front.png index bcbed2919030..096b1f911246 100644 Binary files a/graphics/pokemon/weezing/anim_front.png and b/graphics/pokemon/weezing/anim_front.png differ diff --git a/graphics/pokemon/weezing/front.png b/graphics/pokemon/weezing/front.png index 1b5aba9c974d..d165c8478586 100644 Binary files a/graphics/pokemon/weezing/front.png and b/graphics/pokemon/weezing/front.png differ diff --git a/graphics/pokemon/weezing/normal.pal b/graphics/pokemon/weezing/normal.pal index 3c8be4decce0..715cd4c89adb 100644 --- a/graphics/pokemon/weezing/normal.pal +++ b/graphics/pokemon/weezing/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -184 184 136 -216 216 184 -152 152 96 -120 96 128 -168 144 200 -88 64 80 -144 120 168 -192 184 216 +197 213 139 +246 238 148 +197 180 41 +131 90 139 +189 139 205 +98 49 123 +164 106 180 +213 164 222 16 16 16 -248 248 248 -192 192 208 -208 192 176 -160 144 136 -136 88 88 -200 120 136 +255 255 255 +189 189 189 +172 164 82 +172 164 82 +156 82 98 +213 115 131 diff --git a/graphics/pokemon/whimsicott/anim_front.png b/graphics/pokemon/whimsicott/anim_front.png index 4b463db3a5ee..07001cccde79 100644 Binary files a/graphics/pokemon/whimsicott/anim_front.png and b/graphics/pokemon/whimsicott/anim_front.png differ diff --git a/graphics/pokemon/whimsicott/front.png b/graphics/pokemon/whimsicott/front.png index becc3c2863ed..013719675cc9 100644 Binary files a/graphics/pokemon/whimsicott/front.png and b/graphics/pokemon/whimsicott/front.png differ diff --git a/graphics/pokemon/whimsicott/normal.pal b/graphics/pokemon/whimsicott/normal.pal index 3a8406a84fdc..cce64c2b25bc 100644 --- a/graphics/pokemon/whimsicott/normal.pal +++ b/graphics/pokemon/whimsicott/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 128 96 -96 80 64 -248 240 200 -184 176 136 +172 148 90 +106 90 65 +230 222 205 +197 180 139 16 16 16 -32 80 40 -56 128 64 -80 184 104 -168 128 96 -64 48 40 -192 96 48 -128 96 72 -248 248 248 -248 152 96 -184 96 96 +24 74 24 +65 123 65 +82 164 74 +148 106 65 +82 57 41 +172 106 16 +115 82 65 +255 255 255 +230 131 0 +172 74 98 diff --git a/graphics/pokemon/whirlipede/anim_front.png b/graphics/pokemon/whirlipede/anim_front.png index 5ff49d921699..de69698e2e3a 100644 Binary files a/graphics/pokemon/whirlipede/anim_front.png and b/graphics/pokemon/whirlipede/anim_front.png differ diff --git a/graphics/pokemon/whirlipede/front.png b/graphics/pokemon/whirlipede/front.png index 92f12ebaa5f0..62433508296b 100644 Binary files a/graphics/pokemon/whirlipede/front.png and b/graphics/pokemon/whirlipede/front.png differ diff --git a/graphics/pokemon/whirlipede/normal.pal b/graphics/pokemon/whirlipede/normal.pal index 59a3b2795baa..3a0db5c8edcf 100644 --- a/graphics/pokemon/whirlipede/normal.pal +++ b/graphics/pokemon/whirlipede/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -72 64 96 -120 112 152 -16 16 16 -152 152 184 -208 112 120 -192 80 104 -72 72 80 -56 48 56 -32 32 32 -88 88 120 -176 120 64 -240 184 112 -144 72 96 -136 48 64 +88 72 96 +128 112 152 +0 0 0 +168 144 192 +184 80 144 +192 24 88 +64 64 80 +48 48 56 +40 40 40 +112 96 120 +224 168 16 +248 248 0 +144 56 112 +160 0 80 0 0 0 diff --git a/graphics/pokemon/whiscash/anim_front.png b/graphics/pokemon/whiscash/anim_front.png index 04ce0e89eb63..b11b3a8a73e9 100644 Binary files a/graphics/pokemon/whiscash/anim_front.png and b/graphics/pokemon/whiscash/anim_front.png differ diff --git a/graphics/pokemon/whiscash/front.png b/graphics/pokemon/whiscash/front.png index bfa4b5cbe585..d62e69f3c3aa 100644 Binary files a/graphics/pokemon/whiscash/front.png and b/graphics/pokemon/whiscash/front.png differ diff --git a/graphics/pokemon/whiscash/normal.pal b/graphics/pokemon/whiscash/normal.pal index aaad3dab8789..2aee971e4091 100644 --- a/graphics/pokemon/whiscash/normal.pal +++ b/graphics/pokemon/whiscash/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -192 160 96 -240 208 144 -112 96 56 -8 24 56 -32 48 112 -136 208 240 -96 168 216 -16 16 16 -96 104 168 -64 80 128 +192 160 64 +240 216 88 +104 88 64 +40 48 72 +56 72 152 +128 216 248 +112 168 224 +0 0 0 +96 120 200 +64 96 176 168 176 128 96 128 184 120 176 224 248 248 248 -153 100 125 +192 64 32 diff --git a/graphics/pokemon/whismur/anim_front.png b/graphics/pokemon/whismur/anim_front.png index 7fd9b596278f..098910d89cdd 100644 Binary files a/graphics/pokemon/whismur/anim_front.png and b/graphics/pokemon/whismur/anim_front.png differ diff --git a/graphics/pokemon/whismur/front.png b/graphics/pokemon/whismur/front.png index 5c6ef0e1c740..3a4c69d47bea 100644 Binary files a/graphics/pokemon/whismur/front.png and b/graphics/pokemon/whismur/front.png differ diff --git a/graphics/pokemon/whismur/normal.pal b/graphics/pokemon/whismur/normal.pal index a1e8740fff1c..fbbff8610e8b 100644 --- a/graphics/pokemon/whismur/normal.pal +++ b/graphics/pokemon/whismur/normal.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -128 80 120 -232 184 224 -208 144 200 -248 200 104 -152 112 48 -248 224 144 -192 152 80 -16 16 16 -168 112 160 -184 96 120 +128 64 104 +232 168 224 +208 128 200 +248 200 64 +160 112 24 +248 224 136 +208 152 0 +0 0 0 +168 80 160 +200 64 112 240 200 240 0 0 0 0 0 0 diff --git a/graphics/pokemon/wigglytuff/anim_front.png b/graphics/pokemon/wigglytuff/anim_front.png index 1fd7706d9e97..232f9c38c9c4 100644 Binary files a/graphics/pokemon/wigglytuff/anim_front.png and b/graphics/pokemon/wigglytuff/anim_front.png differ diff --git a/graphics/pokemon/wigglytuff/front.png b/graphics/pokemon/wigglytuff/front.png index 89d83fa5ca20..5f5ee7e91801 100644 Binary files a/graphics/pokemon/wigglytuff/front.png and b/graphics/pokemon/wigglytuff/front.png differ diff --git a/graphics/pokemon/wigglytuff/normal.pal b/graphics/pokemon/wigglytuff/normal.pal index 143b2f466fbe..9e5a19944915 100644 --- a/graphics/pokemon/wigglytuff/normal.pal +++ b/graphics/pokemon/wigglytuff/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 72 88 -248 248 248 -104 104 112 -224 216 232 +139 65 65 +255 255 255 +115 115 115 +230 222 230 16 16 16 -248 192 200 -208 144 160 -176 112 136 -248 224 224 -16 144 160 -0 104 136 -72 200 216 -96 40 72 -184 112 136 +255 172 189 +246 123 148 +205 106 98 +255 222 205 +82 164 139 +32 90 98 +148 222 205 +115 65 24 +230 49 49 0 0 0 diff --git a/graphics/pokemon/wingull/anim_front.png b/graphics/pokemon/wingull/anim_front.png index cb83f46af024..8580fac150a9 100644 Binary files a/graphics/pokemon/wingull/anim_front.png and b/graphics/pokemon/wingull/anim_front.png differ diff --git a/graphics/pokemon/wingull/front.png b/graphics/pokemon/wingull/front.png index b0a797561a16..dc5fe2e80aa5 100644 Binary files a/graphics/pokemon/wingull/front.png and b/graphics/pokemon/wingull/front.png differ diff --git a/graphics/pokemon/wingull/normal.pal b/graphics/pokemon/wingull/normal.pal index b98bdbac8164..445b41db60f2 100644 --- a/graphics/pokemon/wingull/normal.pal +++ b/graphics/pokemon/wingull/normal.pal @@ -6,14 +6,14 @@ JASC-PAL 0 0 0 248 248 248 192 208 232 -32 112 136 -120 200 240 -40 168 208 +40 104 144 +112 168 248 +48 152 208 128 144 144 -144 80 24 -232 168 120 +136 80 16 +248 168 48 48 48 48 -208 128 64 +216 128 0 176 168 192 64 72 64 155 90 110 diff --git a/graphics/pokemon/wobbuffet/anim_front.png b/graphics/pokemon/wobbuffet/anim_front.png index 358a507e5954..e5ca905e05af 100644 Binary files a/graphics/pokemon/wobbuffet/anim_front.png and b/graphics/pokemon/wobbuffet/anim_front.png differ diff --git a/graphics/pokemon/wobbuffet/front.png b/graphics/pokemon/wobbuffet/front.png index 9034d9ec5933..a8efd17ef78e 100644 Binary files a/graphics/pokemon/wobbuffet/front.png and b/graphics/pokemon/wobbuffet/front.png differ diff --git a/graphics/pokemon/wobbuffet/normal.pal b/graphics/pokemon/wobbuffet/normal.pal index 8a15d78514a4..de342b7518a0 100644 --- a/graphics/pokemon/wobbuffet/normal.pal +++ b/graphics/pokemon/wobbuffet/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -64 136 168 -32 88 112 -112 192 224 -72 168 216 -160 224 240 +32 128 200 +32 80 136 +128 192 240 +72 168 224 +168 224 248 16 16 16 -128 72 80 -184 96 96 -224 120 120 -48 48 56 -88 88 88 +160 56 56 +184 80 80 +208 96 96 +80 80 80 +128 128 128 248 248 248 -168 168 168 +192 192 192 0 0 0 0 0 0 diff --git a/graphics/pokemon/woobat/anim_front.png b/graphics/pokemon/woobat/anim_front.png index 3c198e33f707..675498484cb8 100644 Binary files a/graphics/pokemon/woobat/anim_front.png and b/graphics/pokemon/woobat/anim_front.png differ diff --git a/graphics/pokemon/woobat/front.png b/graphics/pokemon/woobat/front.png index 0769f47fd799..793607dc895f 100644 Binary files a/graphics/pokemon/woobat/front.png and b/graphics/pokemon/woobat/front.png differ diff --git a/graphics/pokemon/woobat/normal.pal b/graphics/pokemon/woobat/normal.pal index 313df462524d..9092ac11f6cf 100644 --- a/graphics/pokemon/woobat/normal.pal +++ b/graphics/pokemon/woobat/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 24 24 32 -48 40 40 +40 40 48 16 16 16 -80 72 72 -72 104 112 +64 72 88 +72 104 120 168 216 240 -128 184 208 -112 144 152 -120 72 72 -232 160 152 -200 112 120 +112 168 192 +104 144 168 +128 24 56 +240 168 176 +192 104 120 248 248 248 112 112 112 -232 128 136 -120 72 72 +200 40 64 +136 72 80 diff --git a/graphics/pokemon/wooper/anim_front.png b/graphics/pokemon/wooper/anim_front.png index 2ade34d3ef65..7e35c55c01f1 100644 Binary files a/graphics/pokemon/wooper/anim_front.png and b/graphics/pokemon/wooper/anim_front.png differ diff --git a/graphics/pokemon/wooper/back.png b/graphics/pokemon/wooper/back.png index b8d50ba5807a..1e33cd094287 100644 Binary files a/graphics/pokemon/wooper/back.png and b/graphics/pokemon/wooper/back.png differ diff --git a/graphics/pokemon/wooper/front.png b/graphics/pokemon/wooper/front.png index 0d74723f0fc6..ad14f25b21eb 100644 Binary files a/graphics/pokemon/wooper/front.png and b/graphics/pokemon/wooper/front.png differ diff --git a/graphics/pokemon/wooper/normal.pal b/graphics/pokemon/wooper/normal.pal index e047dfb4a29a..0fffdb9e5baf 100644 --- a/graphics/pokemon/wooper/normal.pal +++ b/graphics/pokemon/wooper/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 96 120 -208 152 168 -104 56 80 -88 128 152 -96 152 176 -184 216 232 -120 192 224 -184 120 160 +144 96 160 +232 112 224 +96 56 104 +56 120 192 +80 152 224 +152 208 240 +112 184 248 +208 88 208 16 16 16 248 248 248 -48 88 128 -32 48 88 -142 84 82 -224 123 123 +16 72 128 +16 40 112 +168 16 0 +232 64 48 0 0 0 diff --git a/graphics/pokemon/wormadam/anim_front.png b/graphics/pokemon/wormadam/anim_front.png index 9c65c439eedd..ebd4710346b4 100644 Binary files a/graphics/pokemon/wormadam/anim_front.png and b/graphics/pokemon/wormadam/anim_front.png differ diff --git a/graphics/pokemon/wormadam/front.png b/graphics/pokemon/wormadam/front.png index aa19c6c1b880..575460ac0be7 100644 Binary files a/graphics/pokemon/wormadam/front.png and b/graphics/pokemon/wormadam/front.png differ diff --git a/graphics/pokemon/wormadam/normal.pal b/graphics/pokemon/wormadam/normal.pal index 4ef4c830def1..fbc8687756fb 100644 --- a/graphics/pokemon/wormadam/normal.pal +++ b/graphics/pokemon/wormadam/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -88 88 96 -56 56 56 -136 136 120 -32 88 64 -16 56 32 -56 136 96 -232 240 224 -72 112 48 -168 184 120 -112 160 80 -40 72 32 +90 90 90 +57 57 65 +115 123 106 +57 82 65 +41 49 57 +74 115 74 +255 255 255 +82 115 65 +172 189 123 +123 156 74 +49 74 57 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/wormadam/sandy_cloak/anim_front.png b/graphics/pokemon/wormadam/sandy_cloak/anim_front.png index 7410c9ad28ac..51990c1a3086 100644 Binary files a/graphics/pokemon/wormadam/sandy_cloak/anim_front.png and b/graphics/pokemon/wormadam/sandy_cloak/anim_front.png differ diff --git a/graphics/pokemon/wormadam/sandy_cloak/front.png b/graphics/pokemon/wormadam/sandy_cloak/front.png index ecf9b7964669..5d08516fddb4 100644 Binary files a/graphics/pokemon/wormadam/sandy_cloak/front.png and b/graphics/pokemon/wormadam/sandy_cloak/front.png differ diff --git a/graphics/pokemon/wormadam/sandy_cloak/normal.pal b/graphics/pokemon/wormadam/sandy_cloak/normal.pal index 009475503941..0c3aeb435c00 100644 --- a/graphics/pokemon/wormadam/sandy_cloak/normal.pal +++ b/graphics/pokemon/wormadam/sandy_cloak/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -88 88 96 -56 56 56 -136 136 120 -56 48 24 -168 136 88 -120 88 48 -176 160 112 -248 248 248 -160 64 56 -232 208 136 -96 96 80 -232 112 88 -120 120 88 +90 90 90 +57 57 65 +115 123 106 +57 49 49 +164 123 90 +98 74 57 +172 148 115 +255 255 255 +139 74 57 +213 197 115 +98 82 82 +238 115 82 +131 115 98 0 0 0 diff --git a/graphics/pokemon/wormadam/trash_cloak/anim_front.png b/graphics/pokemon/wormadam/trash_cloak/anim_front.png index cdaa7fb026bb..d0b41b9df347 100644 Binary files a/graphics/pokemon/wormadam/trash_cloak/anim_front.png and b/graphics/pokemon/wormadam/trash_cloak/anim_front.png differ diff --git a/graphics/pokemon/wormadam/trash_cloak/front.png b/graphics/pokemon/wormadam/trash_cloak/front.png index 48670cbf8297..a15ba6b90670 100644 Binary files a/graphics/pokemon/wormadam/trash_cloak/front.png and b/graphics/pokemon/wormadam/trash_cloak/front.png differ diff --git a/graphics/pokemon/wormadam/trash_cloak/normal.pal b/graphics/pokemon/wormadam/trash_cloak/normal.pal index 707910aec909..9035a0f64da6 100644 --- a/graphics/pokemon/wormadam/trash_cloak/normal.pal +++ b/graphics/pokemon/wormadam/trash_cloak/normal.pal @@ -3,16 +3,16 @@ JASC-PAL 16 152 208 160 16 16 16 -88 88 96 -56 56 56 -136 136 120 -88 40 80 -192 96 160 -152 64 128 -112 64 80 -176 96 104 -248 248 248 -240 144 144 +90 90 90 +57 57 65 +115 123 106 +82 57 74 +197 90 156 +131 74 115 +123 74 90 +180 106 123 +255 255 255 +238 148 156 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/wurmple/anim_front.png b/graphics/pokemon/wurmple/anim_front.png index 86444326c1dd..d214a22e5524 100644 Binary files a/graphics/pokemon/wurmple/anim_front.png and b/graphics/pokemon/wurmple/anim_front.png differ diff --git a/graphics/pokemon/wurmple/front.png b/graphics/pokemon/wurmple/front.png index 8022d28524d6..bad155a3def5 100644 Binary files a/graphics/pokemon/wurmple/front.png and b/graphics/pokemon/wurmple/front.png differ diff --git a/graphics/pokemon/wurmple/normal.pal b/graphics/pokemon/wurmple/normal.pal index 15795c06ffa6..5710cd17989a 100644 --- a/graphics/pokemon/wurmple/normal.pal +++ b/graphics/pokemon/wurmple/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -184 64 72 -232 120 128 -112 32 48 -216 72 80 +216 40 80 +248 96 104 +128 40 40 +232 48 88 0 0 0 -184 152 96 -104 88 48 -248 224 128 -104 96 72 -232 216 200 -176 168 136 +184 136 72 +120 96 56 +248 224 112 +112 104 88 +224 224 200 +192 168 144 96 112 112 248 248 248 200 208 216 diff --git a/graphics/pokemon/wynaut/anim_front.png b/graphics/pokemon/wynaut/anim_front.png index 7239c23720d0..3dad81357f44 100644 Binary files a/graphics/pokemon/wynaut/anim_front.png and b/graphics/pokemon/wynaut/anim_front.png differ diff --git a/graphics/pokemon/wynaut/front.png b/graphics/pokemon/wynaut/front.png index 0da52676ab6a..197d67fdf8d4 100644 Binary files a/graphics/pokemon/wynaut/front.png and b/graphics/pokemon/wynaut/front.png differ diff --git a/graphics/pokemon/wynaut/normal.pal b/graphics/pokemon/wynaut/normal.pal index 4c5f2c233507..832ce361e2ef 100644 --- a/graphics/pokemon/wynaut/normal.pal +++ b/graphics/pokemon/wynaut/normal.pal @@ -2,15 +2,15 @@ JASC-PAL 0100 16 152 208 160 -48 80 88 -48 128 136 -184 224 232 -104 192 200 -16 16 16 -72 160 168 -160 64 64 +56 80 96 +56 120 160 +152 208 232 +104 184 216 +0 0 0 +72 152 184 +160 48 64 120 40 56 -240 136 128 +216 88 96 128 120 120 200 200 192 0 0 0 diff --git a/graphics/pokemon/xatu/anim_front.png b/graphics/pokemon/xatu/anim_front.png index 3ce8a4a3cb46..b6968e7758f1 100644 Binary files a/graphics/pokemon/xatu/anim_front.png and b/graphics/pokemon/xatu/anim_front.png differ diff --git a/graphics/pokemon/xatu/front.png b/graphics/pokemon/xatu/front.png index 58def347fa5b..93c794763291 100644 Binary files a/graphics/pokemon/xatu/front.png and b/graphics/pokemon/xatu/front.png differ diff --git a/graphics/pokemon/xatu/normal.pal b/graphics/pokemon/xatu/normal.pal index 26b002db4924..eb20bf6aea89 100644 --- a/graphics/pokemon/xatu/normal.pal +++ b/graphics/pokemon/xatu/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -104 152 48 -144 216 80 -72 104 40 -208 136 24 -120 184 48 -248 184 80 -120 88 32 +72 144 64 +144 208 64 +40 104 40 +176 136 32 +112 184 64 +248 184 48 +136 88 0 16 16 16 248 248 248 144 144 144 -64 64 64 -112 16 40 -152 40 64 -192 208 208 -232 64 88 +80 80 80 +128 40 0 +176 48 0 +200 200 200 +232 56 0 diff --git a/graphics/pokemon/yamask/anim_front.png b/graphics/pokemon/yamask/anim_front.png index 7b297063f9af..daf3ec638baa 100644 Binary files a/graphics/pokemon/yamask/anim_front.png and b/graphics/pokemon/yamask/anim_front.png differ diff --git a/graphics/pokemon/yamask/front.png b/graphics/pokemon/yamask/front.png index 58e6e3cd2070..28a564b55b48 100644 Binary files a/graphics/pokemon/yamask/front.png and b/graphics/pokemon/yamask/front.png differ diff --git a/graphics/pokemon/yamask/normal.pal b/graphics/pokemon/yamask/normal.pal index fa4586573dd6..7ce969a07028 100644 --- a/graphics/pokemon/yamask/normal.pal +++ b/graphics/pokemon/yamask/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -56 48 56 -80 80 88 +48 48 48 +80 80 80 16 16 16 -112 40 32 -216 64 64 +168 0 0 +248 0 0 88 0 0 -120 80 40 -248 200 128 -232 176 88 -168 120 64 +136 88 32 +248 216 120 +240 168 40 +200 128 16 216 216 216 -0 0 0 +48 48 48 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/yanma/anim_front.png b/graphics/pokemon/yanma/anim_front.png index 63821296ba95..cc4df48ea4a9 100644 Binary files a/graphics/pokemon/yanma/anim_front.png and b/graphics/pokemon/yanma/anim_front.png differ diff --git a/graphics/pokemon/yanma/front.png b/graphics/pokemon/yanma/front.png index cd4239010418..54d4f54cdad8 100644 Binary files a/graphics/pokemon/yanma/front.png and b/graphics/pokemon/yanma/front.png differ diff --git a/graphics/pokemon/yanma/normal.pal b/graphics/pokemon/yanma/normal.pal index 8d5f8f9f38a2..6912eb837e31 100644 --- a/graphics/pokemon/yanma/normal.pal +++ b/graphics/pokemon/yanma/normal.pal @@ -5,15 +5,15 @@ JASC-PAL 192 208 232 144 168 184 224 248 248 -248 168 128 -96 24 16 -224 80 64 +248 184 152 +120 48 0 +248 80 80 16 16 16 -168 48 24 -232 128 112 -56 72 32 -120 192 56 -96 136 48 -160 216 104 -120 120 152 -80 80 96 +192 64 56 +248 136 96 +56 88 40 +168 208 80 +96 152 48 +208 240 128 +104 120 128 +72 72 80 diff --git a/graphics/pokemon/yanmega/anim_front.png b/graphics/pokemon/yanmega/anim_front.png index 523fb4f73e6d..d50d34b73b22 100644 Binary files a/graphics/pokemon/yanmega/anim_front.png and b/graphics/pokemon/yanmega/anim_front.png differ diff --git a/graphics/pokemon/yanmega/front.png b/graphics/pokemon/yanmega/front.png index 11000dea1cbb..943aa095a7aa 100644 Binary files a/graphics/pokemon/yanmega/front.png and b/graphics/pokemon/yanmega/front.png differ diff --git a/graphics/pokemon/yanmega/normal.pal b/graphics/pokemon/yanmega/normal.pal index 5c85bb6ee085..f7758fee8296 100644 --- a/graphics/pokemon/yanmega/normal.pal +++ b/graphics/pokemon/yanmega/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 56 48 -224 104 96 -104 32 32 -184 184 160 +176 48 24 +240 88 80 +112 48 0 +160 168 192 248 248 248 -72 64 64 -136 120 120 +72 72 80 +120 120 128 16 16 16 -224 224 192 -32 48 24 -128 160 104 -96 120 64 -64 80 40 +192 200 224 +32 56 24 +112 152 96 +80 128 72 +56 88 40 40 40 48 -160 168 192 +0 0 0 diff --git a/graphics/pokemon/zangoose/anim_front.png b/graphics/pokemon/zangoose/anim_front.png index 1e431929becf..a7a863feba36 100644 Binary files a/graphics/pokemon/zangoose/anim_front.png and b/graphics/pokemon/zangoose/anim_front.png differ diff --git a/graphics/pokemon/zangoose/front.png b/graphics/pokemon/zangoose/front.png index 37b418a10db6..d9640b8428d2 100644 Binary files a/graphics/pokemon/zangoose/front.png and b/graphics/pokemon/zangoose/front.png differ diff --git a/graphics/pokemon/zangoose/normal.pal b/graphics/pokemon/zangoose/normal.pal index 6d0fd5ca53b3..dd141c40f774 100644 --- a/graphics/pokemon/zangoose/normal.pal +++ b/graphics/pokemon/zangoose/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 144 144 +139 148 148 16 16 16 -248 248 248 -136 40 56 -200 208 240 -176 56 80 -232 80 96 -88 96 112 -136 152 200 -224 96 136 -176 176 208 -248 136 168 -64 56 56 -120 104 104 -176 168 160 +255 255 255 +148 41 49 +205 222 246 +180 57 82 +230 74 106 +90 98 98 +139 156 205 +230 98 139 +172 180 205 +255 131 164 +41 49 49 +90 98 98 +139 148 148 diff --git a/graphics/pokemon/zapdos/anim_front.png b/graphics/pokemon/zapdos/anim_front.png index 730db559ba1e..f1079f7b70bd 100644 Binary files a/graphics/pokemon/zapdos/anim_front.png and b/graphics/pokemon/zapdos/anim_front.png differ diff --git a/graphics/pokemon/zapdos/front.png b/graphics/pokemon/zapdos/front.png index c2bddd8d494b..790791d6eb6e 100644 Binary files a/graphics/pokemon/zapdos/front.png and b/graphics/pokemon/zapdos/front.png differ diff --git a/graphics/pokemon/zapdos/normal.pal b/graphics/pokemon/zapdos/normal.pal index 82ccddda8ed5..7f2ac1295e43 100644 --- a/graphics/pokemon/zapdos/normal.pal +++ b/graphics/pokemon/zapdos/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 104 40 -248 224 168 -72 48 16 -0 32 56 -192 152 80 +156 123 16 +255 230 164 +82 57 16 +0 0 0 +213 172 8 8 16 16 -248 200 88 +255 213 65 248 248 248 -248 200 128 -240 168 80 -152 112 80 -128 104 88 -216 216 216 +255 189 106 +246 148 24 +197 106 24 +152 136 48 +222 222 222 104 104 104 163 48 48 diff --git a/graphics/pokemon/zebstrika/anim_front.png b/graphics/pokemon/zebstrika/anim_front.png index 252c65af97c8..db28f434fc57 100644 Binary files a/graphics/pokemon/zebstrika/anim_front.png and b/graphics/pokemon/zebstrika/anim_front.png differ diff --git a/graphics/pokemon/zebstrika/front.png b/graphics/pokemon/zebstrika/front.png index 9ced3a800245..8d097028270e 100644 Binary files a/graphics/pokemon/zebstrika/front.png and b/graphics/pokemon/zebstrika/front.png differ diff --git a/graphics/pokemon/zebstrika/normal.pal b/graphics/pokemon/zebstrika/normal.pal index 340931d5c2b7..7939301a7c2a 100644 --- a/graphics/pokemon/zebstrika/normal.pal +++ b/graphics/pokemon/zebstrika/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 88 88 -80 72 72 -168 144 144 -200 184 184 +64 80 88 +64 64 64 +160 160 160 +200 200 200 16 16 16 248 248 248 -120 104 104 -32 24 24 -0 128 160 -0 184 240 -152 136 48 -240 208 80 -56 40 48 +120 120 120 +24 32 32 +0 88 152 +0 168 216 +136 112 32 +248 224 0 +40 48 48 56 56 56 -80 72 72 +0 0 0 diff --git a/graphics/pokemon/zekrom/anim_front.png b/graphics/pokemon/zekrom/anim_front.png index fc445ff405b9..a987b70e3efd 100644 Binary files a/graphics/pokemon/zekrom/anim_front.png and b/graphics/pokemon/zekrom/anim_front.png differ diff --git a/graphics/pokemon/zekrom/front.png b/graphics/pokemon/zekrom/front.png index 2e3db00e2d4e..265903400a4c 100644 Binary files a/graphics/pokemon/zekrom/front.png and b/graphics/pokemon/zekrom/front.png differ diff --git a/graphics/pokemon/zekrom/normal.pal b/graphics/pokemon/zekrom/normal.pal index 362c6e7deb0a..2ad25e0bc826 100644 --- a/graphics/pokemon/zekrom/normal.pal +++ b/graphics/pokemon/zekrom/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -40 40 48 -24 96 112 -64 64 64 +248 248 248 +32 32 40 +0 104 184 +48 48 56 0 0 0 -96 232 248 -56 152 176 +104 240 248 +0 200 248 80 80 88 -24 32 32 +24 24 32 16 16 16 -192 64 64 -136 48 48 -216 200 200 +208 0 0 +144 0 0 +224 208 208 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/zigzagoon/anim_front.png b/graphics/pokemon/zigzagoon/anim_front.png index d0b6861dfd8b..9acce5453f03 100644 Binary files a/graphics/pokemon/zigzagoon/anim_front.png and b/graphics/pokemon/zigzagoon/anim_front.png differ diff --git a/graphics/pokemon/zigzagoon/front.png b/graphics/pokemon/zigzagoon/front.png index ffa3cd89cd84..da1a3a6ad88d 100644 Binary files a/graphics/pokemon/zigzagoon/front.png and b/graphics/pokemon/zigzagoon/front.png differ diff --git a/graphics/pokemon/zigzagoon/normal.pal b/graphics/pokemon/zigzagoon/normal.pal index 85e04e4817ee..e814e438667a 100644 --- a/graphics/pokemon/zigzagoon/normal.pal +++ b/graphics/pokemon/zigzagoon/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 96 80 -16 16 16 -184 168 152 -240 224 208 -184 160 136 -152 128 104 -96 88 72 -56 72 72 -248 248 248 -96 72 56 -128 96 56 -32 40 40 -192 192 184 +115 98 90 +0 0 0 +189 172 156 +230 222 205 +180 156 139 +148 123 106 +90 82 74 +65 65 65 +255 255 255 +82 65 49 +106 82 49 +32 32 41 +197 197 189 0 0 0 240 224 208 diff --git a/graphics/pokemon/zoroark/anim_front.png b/graphics/pokemon/zoroark/anim_front.png index 4ab1b0769670..1cec32288cfa 100644 Binary files a/graphics/pokemon/zoroark/anim_front.png and b/graphics/pokemon/zoroark/anim_front.png differ diff --git a/graphics/pokemon/zoroark/front.png b/graphics/pokemon/zoroark/front.png index d2828bb99868..365e9ca96cbd 100644 Binary files a/graphics/pokemon/zoroark/front.png and b/graphics/pokemon/zoroark/front.png differ diff --git a/graphics/pokemon/zoroark/normal.pal b/graphics/pokemon/zoroark/normal.pal index a3ff79c0cc4f..52adb20696bf 100644 --- a/graphics/pokemon/zoroark/normal.pal +++ b/graphics/pokemon/zoroark/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -56 48 64 -32 24 40 -104 32 40 -72 16 24 -160 40 56 -120 104 120 -88 80 104 -64 56 72 +40 48 64 +32 32 48 +120 40 64 +72 16 40 +168 16 64 +120 120 128 +96 96 104 +72 72 80 200 200 200 -48 120 104 -48 168 160 +48 128 128 +24 176 176 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/zorua/anim_front.png b/graphics/pokemon/zorua/anim_front.png index 6b16f5c23403..a01ab6211d63 100644 Binary files a/graphics/pokemon/zorua/anim_front.png and b/graphics/pokemon/zorua/anim_front.png differ diff --git a/graphics/pokemon/zorua/front.png b/graphics/pokemon/zorua/front.png index 544b99959483..58f3f3a7c5fa 100644 Binary files a/graphics/pokemon/zorua/front.png and b/graphics/pokemon/zorua/front.png differ diff --git a/graphics/pokemon/zorua/normal.pal b/graphics/pokemon/zorua/normal.pal index 83748686b18b..5c9bfcd1f542 100644 --- a/graphics/pokemon/zorua/normal.pal +++ b/graphics/pokemon/zorua/normal.pal @@ -1,17 +1,17 @@ JASC-PAL 0100 16 -152 208 160 -104 32 40 -160 40 56 -96 88 120 -40 32 48 +153 204 153 +104 32 56 +168 16 64 +88 88 112 +32 32 48 16 16 16 64 64 80 -48 176 160 +24 176 176 248 248 248 48 128 128 -64 48 80 +48 48 64 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/zubat/anim_front.png b/graphics/pokemon/zubat/anim_front.png index fecc35b77a9b..6cdc6af981ca 100644 Binary files a/graphics/pokemon/zubat/anim_front.png and b/graphics/pokemon/zubat/anim_front.png differ diff --git a/graphics/pokemon/zubat/front.png b/graphics/pokemon/zubat/front.png index e17298b25ac5..36d62770c779 100644 Binary files a/graphics/pokemon/zubat/front.png and b/graphics/pokemon/zubat/front.png differ diff --git a/graphics/pokemon/zubat/normal.pal b/graphics/pokemon/zubat/normal.pal index 2c4a19853694..13f001cc1316 100644 --- a/graphics/pokemon/zubat/normal.pal +++ b/graphics/pokemon/zubat/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -48 112 152 -136 184 216 -64 152 184 -24 64 80 -96 120 176 -160 88 168 -96 56 96 -192 120 192 -248 248 248 +99 123 181 +189 206 255 +140 181 239 +74 66 123 +99 123 181 +181 82 156 +115 33 90 +214 115 189 +255 255 255 208 208 208 -96 96 96 +99 99 99 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/zweilous/anim_front.png b/graphics/pokemon/zweilous/anim_front.png index afb5bc5f3ce2..622db80f66e0 100644 Binary files a/graphics/pokemon/zweilous/anim_front.png and b/graphics/pokemon/zweilous/anim_front.png differ diff --git a/graphics/pokemon/zweilous/front.png b/graphics/pokemon/zweilous/front.png index 976ad113291a..d6e4b809d91f 100644 Binary files a/graphics/pokemon/zweilous/front.png and b/graphics/pokemon/zweilous/front.png differ diff --git a/graphics/pokemon/zweilous/normal.pal b/graphics/pokemon/zweilous/normal.pal index b0795275a487..068f0e652366 100644 --- a/graphics/pokemon/zweilous/normal.pal +++ b/graphics/pokemon/zweilous/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 40 40 +40 32 40 64 56 64 -88 80 80 +80 80 80 16 16 16 -80 104 136 -40 56 80 -96 144 200 -136 88 112 +56 96 160 +24 48 104 +96 144 216 +144 88 120 224 216 216 -136 48 88 -72 32 56 -88 56 144 +152 56 104 +96 32 64 168 168 168 -48 40 40 +40 32 40 +0 0 0 0 0 0 diff --git a/graphics/pokemon_storage/box_bg1.pal b/graphics/pokemon_storage/box_bg1.pal deleted file mode 100644 index 52ac12110c06..000000000000 --- a/graphics/pokemon_storage/box_bg1.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -106 205 106 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/pokemon_storage/box_selection_popup_center.png b/graphics/pokemon_storage/box_selection_popup_center.png index f7ab30276eca..d0b90c578008 100644 Binary files a/graphics/pokemon_storage/box_selection_popup_center.png and b/graphics/pokemon_storage/box_selection_popup_center.png differ diff --git a/graphics/pokemon_storage/box_selection_popup_sides.png b/graphics/pokemon_storage/box_selection_popup_sides.png index a0140dc87b38..27b4dc10a81b 100644 Binary files a/graphics/pokemon_storage/box_selection_popup_sides.png and b/graphics/pokemon_storage/box_selection_popup_sides.png differ diff --git a/graphics/pokemon_storage/item_info_frame.png b/graphics/pokemon_storage/item_info_frame.png index 743e5244145f..734101a55eaa 100644 Binary files a/graphics/pokemon_storage/item_info_frame.png and b/graphics/pokemon_storage/item_info_frame.png differ diff --git a/graphics/pokemon_storage/menu.png b/graphics/pokemon_storage/menu.png index 204c075048b0..0a1ca913b080 100644 Binary files a/graphics/pokemon_storage/menu.png and b/graphics/pokemon_storage/menu.png differ diff --git a/graphics/pokemon_storage/party_menu.pal b/graphics/pokemon_storage/party_menu.pal new file mode 100644 index 000000000000..a827cfd4575e --- /dev/null +++ b/graphics/pokemon_storage/party_menu.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +131 172 180 +41 106 98 +82 98 115 +74 172 164 +57 139 139 +164 213 246 +115 189 98 +255 255 255 +123 189 255 +0 123 255 +41 90 164 +123 205 180 +8 74 65 +164 238 148 +65 82 90 diff --git a/graphics/pokemon_storage/bg.pal b/graphics/pokemon_storage/scrolling_bg.pal similarity index 100% rename from graphics/pokemon_storage/bg.pal rename to graphics/pokemon_storage/scrolling_bg.pal diff --git a/graphics/pokemon_storage/scrolling_bg.png b/graphics/pokemon_storage/scrolling_bg.png index 8be861a2670f..228e9ce6f75c 100644 Binary files a/graphics/pokemon_storage/scrolling_bg.png and b/graphics/pokemon_storage/scrolling_bg.png differ diff --git a/graphics/pokemon_storage/bg_move_items.pal b/graphics/pokemon_storage/scrolling_bg_move_items.pal similarity index 100% rename from graphics/pokemon_storage/bg_move_items.pal rename to graphics/pokemon_storage/scrolling_bg_move_items.pal diff --git a/graphics/rayquaza_scene/scene_1/clouds.pal b/graphics/rayquaza_scene/scene_1/clouds.pal deleted file mode 100644 index 4b1a354ce69d..000000000000 --- a/graphics/rayquaza_scene/scene_1/clouds.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -164 205 180 -82 82 90 -255 0 255 -205 115 0 -156 98 16 -98 82 32 -49 65 49 -0 49 65 -24 57 65 -49 65 74 -49 49 57 -74 74 82 -98 98 106 -115 115 131 -139 148 148 -0 0 0 -32 90 115 -131 131 131 -148 148 148 -172 172 172 -197 197 197 -0 0 0 -0 0 0 -0 0 0 -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/rayquaza_scene/scene_1/clouds.png b/graphics/rayquaza_scene/scene_1/clouds.png index a253f47ccdb3..be49741039c5 100644 Binary files a/graphics/rayquaza_scene/scene_1/clouds.png and b/graphics/rayquaza_scene/scene_1/clouds.png differ diff --git a/graphics/slot_machine/menu.pal b/graphics/slot_machine/menu.pal deleted file mode 100644 index 56a9d31d020f..000000000000 --- a/graphics/slot_machine/menu.pal +++ /dev/null @@ -1,83 +0,0 @@ -JASC-PAL -0100 -80 -0 0 0 -57 57 49 -230 230 230 -255 255 255 -131 213 172 -49 123 74 -90 172 106 -255 0 255 -90 172 106 -255 164 41 -255 98 57 -255 197 156 -172 57 0 -0 65 24 -98 98 90 -0 0 0 -222 222 222 -255 255 255 -131 213 172 -255 90 0 -222 41 0 -255 90 0 -222 41 0 -255 90 0 -222 41 0 -255 90 0 -222 41 0 -255 90 0 -222 41 0 -255 0 255 -156 0 0 -0 0 0 -0 0 0 -255 255 255 -74 74 213 -115 172 255 -115 164 74 -156 238 74 -230 65 24 -255 164 41 -255 238 32 -131 213 172 -189 189 189 -156 156 156 -123 123 123 -90 90 90 -65 65 65 -0 0 0 -255 0 255 -255 255 255 -65 164 82 -139 230 139 -139 230 139 -148 238 148 -164 246 164 -180 246 180 -189 246 189 -205 255 205 -255 0 255 -255 0 255 -255 0 255 -255 0 255 -255 0 255 -0 0 0 -222 222 222 -65 90 213 -90 172 106 -255 255 255 -131 213 172 -0 98 115 -90 90 0 -90 90 0 -156 16 0 -156 16 0 -106 156 246 -205 205 0 -205 205 0 -246 106 74 -246 106 74 -0 0 0 diff --git a/graphics/slot_machine/menu.png b/graphics/slot_machine/menu.png index 08aa5989d66f..035ec7fdfa78 100644 Binary files a/graphics/slot_machine/menu.png and b/graphics/slot_machine/menu.png differ diff --git a/graphics/starter_choose/birch_bag.png b/graphics/starter_choose/birch_bag.png deleted file mode 100644 index 86bfbbbc0a3a..000000000000 Binary files a/graphics/starter_choose/birch_bag.png and /dev/null differ diff --git a/graphics/starter_choose/birch_grass.png b/graphics/starter_choose/birch_grass.png deleted file mode 100644 index 838fa5f4c792..000000000000 Binary files a/graphics/starter_choose/birch_grass.png and /dev/null differ diff --git a/graphics/starter_choose/tiles.png b/graphics/starter_choose/tiles.png new file mode 100644 index 000000000000..175b30f9d165 Binary files /dev/null and b/graphics/starter_choose/tiles.png differ diff --git a/graphics/summary_screen/tiles.pal b/graphics/summary_screen/tiles.pal deleted file mode 100644 index badbfe53b31f..000000000000 --- a/graphics/summary_screen/tiles.pal +++ /dev/null @@ -1,131 +0,0 @@ -JASC-PAL -0100 -128 -180 180 115 -74 65 57 -255 255 255 -222 230 246 -213 213 189 -246 255 255 -115 106 98 -98 156 222 -74 148 189 -57 148 164 -32 148 139 -16 148 115 -156 222 164 -98 180 139 -49 139 115 -0 106 98 -180 180 115 -74 65 57 -255 255 255 -90 106 0 -123 139 32 -255 246 205 -115 106 98 -90 222 123 -90 205 98 -90 189 74 -98 172 49 -98 156 24 -238 164 255 -189 156 164 -148 148 82 -106 148 0 -180 180 115 -74 65 57 -255 255 255 -172 180 172 -205 205 197 -246 255 238 -115 106 98 -238 222 24 -213 189 57 -189 164 98 -164 139 131 -139 115 172 -205 222 123 -172 172 148 -139 131 180 -115 90 213 -180 180 115 -74 65 57 -255 255 255 -0 0 0 -0 0 0 -246 255 246 -115 106 98 -222 24 238 -189 16 238 -164 8 238 -131 8 246 -106 0 246 -172 222 222 -139 148 230 -106 74 238 -82 0 255 -180 180 115 -74 65 57 -148 32 172 -189 106 213 -230 189 255 -255 255 255 -213 148 246 -189 139 205 -255 230 255 -230 180 213 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -115 98 90 -180 180 115 -74 65 57 -255 255 255 -222 230 246 -246 246 222 -246 255 255 -115 106 98 -255 205 74 -230 164 98 -205 123 123 -180 82 148 -156 41 172 -230 156 255 -197 98 238 -164 49 222 -131 0 205 -98 180 106 -0 0 0 -213 213 205 -255 255 255 -98 98 98 -230 8 8 -255 189 115 -65 205 255 -0 139 189 -255 156 148 -189 90 82 -139 246 255 -24 164 213 -255 189 180 -213 115 106 -0 0 0 -98 180 106 -0 0 0 -213 213 205 -255 255 255 -98 98 98 -230 8 8 -255 189 115 -238 238 172 -164 164 98 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 0 0 -164 0 0 -255 255 255 diff --git a/graphics/summary_screen/tiles.png b/graphics/summary_screen/tiles.png index 2f9f8db855b6..915742f1a7c3 100644 Binary files a/graphics/summary_screen/tiles.png and b/graphics/summary_screen/tiles.png differ diff --git a/graphics/trainer_card/one_star.pal b/graphics/trainer_card/bronze.pal similarity index 100% rename from graphics/trainer_card/one_star.pal rename to graphics/trainer_card/bronze.pal diff --git a/graphics/trainer_card/card.png b/graphics/trainer_card/card.png deleted file mode 100644 index eab827246486..000000000000 Binary files a/graphics/trainer_card/card.png and /dev/null differ diff --git a/graphics/trainer_card/card_fr.png b/graphics/trainer_card/card_fr.png deleted file mode 100644 index 2fea60d09bc3..000000000000 Binary files a/graphics/trainer_card/card_fr.png and /dev/null differ diff --git a/graphics/trainer_card/two_stars.pal b/graphics/trainer_card/copper.pal similarity index 100% rename from graphics/trainer_card/two_stars.pal rename to graphics/trainer_card/copper.pal diff --git a/graphics/trainer_card/four_stars.pal b/graphics/trainer_card/four_stars.pal deleted file mode 100644 index 4e1d56b549e6..000000000000 --- a/graphics/trainer_card/four_stars.pal +++ /dev/null @@ -1,51 +0,0 @@ -JASC-PAL -0100 -48 -139 98 115 -246 246 222 -246 238 172 -164 164 164 -123 123 123 -98 98 115 -41 57 65 -57 106 139 -65 139 197 -246 230 139 -230 213 49 -213 197 57 -156 115 57 -106 189 255 -205 205 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 -0 0 0 -0 0 0 -106 180 213 -41 123 164 -0 0 0 -0 0 0 -98 98 115 -255 255 255 -230 230 238 -164 164 164 -123 123 123 -255 255 255 -230 230 238 -164 164 164 -123 123 123 -255 255 255 -230 230 238 -164 164 164 -123 123 123 -106 189 255 -205 205 205 -0 0 0 diff --git a/graphics/trainer_card/back_fr.bin b/graphics/trainer_card/frlg/back.bin similarity index 100% rename from graphics/trainer_card/back_fr.bin rename to graphics/trainer_card/frlg/back.bin diff --git a/graphics/trainer_card/badges_fr.png b/graphics/trainer_card/frlg/badges.png similarity index 100% rename from graphics/trainer_card/badges_fr.png rename to graphics/trainer_card/frlg/badges.png diff --git a/graphics/trainer_card/bg_fr.bin b/graphics/trainer_card/frlg/bg.bin similarity index 100% rename from graphics/trainer_card/bg_fr.bin rename to graphics/trainer_card/frlg/bg.bin diff --git a/graphics/trainer_card/0star_fr.pal b/graphics/trainer_card/frlg/blue.pal similarity index 100% rename from graphics/trainer_card/0star_fr.pal rename to graphics/trainer_card/frlg/blue.pal diff --git a/graphics/trainer_card/two_stars_fr.pal b/graphics/trainer_card/frlg/bronze.pal similarity index 100% rename from graphics/trainer_card/two_stars_fr.pal rename to graphics/trainer_card/frlg/bronze.pal diff --git a/graphics/trainer_card/female_bg_fr.pal b/graphics/trainer_card/frlg/female_bg.pal similarity index 100% rename from graphics/trainer_card/female_bg_fr.pal rename to graphics/trainer_card/frlg/female_bg.pal diff --git a/graphics/trainer_card/front_fr.bin b/graphics/trainer_card/frlg/front.bin similarity index 100% rename from graphics/trainer_card/front_fr.bin rename to graphics/trainer_card/frlg/front.bin diff --git a/graphics/trainer_card/front_link_fr.bin b/graphics/trainer_card/frlg/front_link.bin similarity index 100% rename from graphics/trainer_card/front_link_fr.bin rename to graphics/trainer_card/frlg/front_link.bin diff --git a/graphics/trainer_card/four_stars_fr.pal b/graphics/trainer_card/frlg/gold.pal similarity index 100% rename from graphics/trainer_card/four_stars_fr.pal rename to graphics/trainer_card/frlg/gold.pal diff --git a/graphics/trainer_card/one_star_fr.pal b/graphics/trainer_card/frlg/green.pal similarity index 100% rename from graphics/trainer_card/one_star_fr.pal rename to graphics/trainer_card/frlg/green.pal diff --git a/graphics/trainer_card/three_stars_fr.pal b/graphics/trainer_card/frlg/silver.pal similarity index 100% rename from graphics/trainer_card/three_stars_fr.pal rename to graphics/trainer_card/frlg/silver.pal diff --git a/graphics/trainer_card/stickers_fr.png b/graphics/trainer_card/frlg/stickers.png similarity index 100% rename from graphics/trainer_card/stickers_fr.png rename to graphics/trainer_card/frlg/stickers.png diff --git a/graphics/trainer_card/stickers_fr1.pal b/graphics/trainer_card/frlg/stickers1.pal similarity index 100% rename from graphics/trainer_card/stickers_fr1.pal rename to graphics/trainer_card/frlg/stickers1.pal diff --git a/graphics/trainer_card/stickers_fr2.pal b/graphics/trainer_card/frlg/stickers2.pal similarity index 100% rename from graphics/trainer_card/stickers_fr2.pal rename to graphics/trainer_card/frlg/stickers2.pal diff --git a/graphics/trainer_card/stickers_fr3.pal b/graphics/trainer_card/frlg/stickers3.pal similarity index 100% rename from graphics/trainer_card/stickers_fr3.pal rename to graphics/trainer_card/frlg/stickers3.pal diff --git a/graphics/trainer_card/stickers_fr4.pal b/graphics/trainer_card/frlg/stickers4.pal similarity index 100% rename from graphics/trainer_card/stickers_fr4.pal rename to graphics/trainer_card/frlg/stickers4.pal diff --git a/graphics/trainer_card/frlg/tiles.png b/graphics/trainer_card/frlg/tiles.png new file mode 100644 index 000000000000..5d2b11467f5e Binary files /dev/null and b/graphics/trainer_card/frlg/tiles.png differ diff --git a/graphics/trainer_card/gold.pal b/graphics/trainer_card/gold.pal index ebd175e974e8..4e1d56b549e6 100644 --- a/graphics/trainer_card/gold.pal +++ b/graphics/trainer_card/gold.pal @@ -1,19 +1,51 @@ JASC-PAL 0100 -16 +48 139 98 115 -246 197 0 -205 164 0 -246 197 0 -246 197 0 -246 197 0 -246 197 0 -246 197 0 +246 246 222 +246 238 172 +164 164 164 +123 123 123 +98 98 115 +41 57 65 +57 106 139 +65 139 197 +246 230 139 +230 213 49 +213 197 57 +156 115 57 +106 189 255 +205 205 205 0 0 0 0 0 0 -189 148 16 -255 213 82 0 0 0 0 0 0 -189 148 16 -246 197 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +106 180 213 +41 123 164 +0 0 0 +0 0 0 +98 98 115 +255 255 255 +230 230 238 +164 164 164 +123 123 123 +255 255 255 +230 230 238 +164 164 164 +123 123 123 +255 255 255 +230 230 238 +164 164 164 +123 123 123 +106 189 255 +205 205 205 +0 0 0 diff --git a/graphics/trainer_card/0star.pal b/graphics/trainer_card/green.pal similarity index 100% rename from graphics/trainer_card/0star.pal rename to graphics/trainer_card/green.pal diff --git a/graphics/trainer_card/three_stars.pal b/graphics/trainer_card/silver.pal similarity index 100% rename from graphics/trainer_card/three_stars.pal rename to graphics/trainer_card/silver.pal diff --git a/graphics/trainer_card/star.pal b/graphics/trainer_card/star.pal new file mode 100644 index 000000000000..ebd175e974e8 --- /dev/null +++ b/graphics/trainer_card/star.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 98 115 +246 197 0 +205 164 0 +246 197 0 +246 197 0 +246 197 0 +246 197 0 +246 197 0 +0 0 0 +0 0 0 +189 148 16 +255 213 82 +0 0 0 +0 0 0 +189 148 16 +246 197 0 diff --git a/graphics/trainer_card/tiles.png b/graphics/trainer_card/tiles.png new file mode 100644 index 000000000000..c12c7c2b4b9f Binary files /dev/null and b/graphics/trainer_card/tiles.png differ diff --git a/graphics/wireless_status_screen/anim_00.pal b/graphics/wireless_status_screen/anim_00.pal new file mode 100644 index 000000000000..7779155a60fc --- /dev/null +++ b/graphics/wireless_status_screen/anim_00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +74 246 255 +57 57 57 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_01.pal b/graphics/wireless_status_screen/anim_01.pal new file mode 100644 index 000000000000..30040b471b63 --- /dev/null +++ b/graphics/wireless_status_screen/anim_01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +74 246 255 +57 213 230 +57 57 57 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_02.pal b/graphics/wireless_status_screen/anim_02.pal new file mode 100644 index 000000000000..3b40e7681af4 --- /dev/null +++ b/graphics/wireless_status_screen/anim_02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +74 246 255 +57 213 230 +49 180 205 +0 32 98 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_03.pal b/graphics/wireless_status_screen/anim_03.pal new file mode 100644 index 000000000000..b0756a995dea --- /dev/null +++ b/graphics/wireless_status_screen/anim_03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +90 90 90 +90 90 90 +90 90 90 +74 246 255 +57 213 230 +49 180 205 +41 148 180 +0 32 98 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_04.pal b/graphics/wireless_status_screen/anim_04.pal new file mode 100644 index 000000000000..60916f08c0dc --- /dev/null +++ b/graphics/wireless_status_screen/anim_04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +90 90 90 +90 90 90 +74 246 255 +57 213 230 +49 180 205 +41 148 180 +24 123 164 +0 32 98 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_05.pal b/graphics/wireless_status_screen/anim_05.pal new file mode 100644 index 000000000000..b59dc5901a0d --- /dev/null +++ b/graphics/wireless_status_screen/anim_05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +90 90 90 +74 246 255 +57 213 230 +49 180 205 +41 148 180 +24 123 164 +16 90 139 +0 32 98 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_06.pal b/graphics/wireless_status_screen/anim_06.pal new file mode 100644 index 000000000000..3f14d81e79dd --- /dev/null +++ b/graphics/wireless_status_screen/anim_06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +74 246 255 +57 213 230 +49 180 205 +41 148 180 +24 123 164 +16 90 139 +8 57 115 +0 32 98 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_07.pal b/graphics/wireless_status_screen/anim_07.pal new file mode 100644 index 000000000000..e3da8baa6cd2 --- /dev/null +++ b/graphics/wireless_status_screen/anim_07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +57 213 230 +49 180 205 +41 148 180 +24 123 164 +16 90 139 +8 57 115 +8 57 115 +57 57 57 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_08.pal b/graphics/wireless_status_screen/anim_08.pal new file mode 100644 index 000000000000..1544a23039cd --- /dev/null +++ b/graphics/wireless_status_screen/anim_08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +49 180 205 +41 148 180 +24 123 164 +16 90 139 +8 57 115 +8 57 115 +90 90 90 +57 57 57 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_09.pal b/graphics/wireless_status_screen/anim_09.pal new file mode 100644 index 000000000000..8d3b1d4bc2a8 --- /dev/null +++ b/graphics/wireless_status_screen/anim_09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +41 148 180 +24 123 164 +16 90 139 +8 57 115 +8 57 115 +90 90 90 +90 90 90 +57 57 57 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_10.pal b/graphics/wireless_status_screen/anim_10.pal new file mode 100644 index 000000000000..5ab981ba354c --- /dev/null +++ b/graphics/wireless_status_screen/anim_10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +24 123 164 +16 90 139 +8 57 115 +8 57 115 +90 90 90 +90 90 90 +90 90 90 +57 57 57 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_11.pal b/graphics/wireless_status_screen/anim_11.pal new file mode 100644 index 000000000000..46ad1526978f --- /dev/null +++ b/graphics/wireless_status_screen/anim_11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +16 90 139 +8 57 115 +8 57 115 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +57 57 57 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_12.pal b/graphics/wireless_status_screen/anim_12.pal new file mode 100644 index 000000000000..d1e4bdd02861 --- /dev/null +++ b/graphics/wireless_status_screen/anim_12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +8 57 115 +8 57 115 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +57 57 57 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/wireless_status_screen/anim_13.pal b/graphics/wireless_status_screen/anim_13.pal new file mode 100644 index 000000000000..dd11346b72e2 --- /dev/null +++ b/graphics/wireless_status_screen/anim_13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +57 57 57 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics/link/wireless_info_screen.bin b/graphics/wireless_status_screen/bg.bin similarity index 100% rename from graphics/link/wireless_info_screen.bin rename to graphics/wireless_status_screen/bg.bin diff --git a/graphics/wireless_status_screen/bg.png b/graphics/wireless_status_screen/bg.png new file mode 100644 index 000000000000..4c453cf1a000 Binary files /dev/null and b/graphics/wireless_status_screen/bg.png differ diff --git a/graphics/wireless_status_screen/default.pal b/graphics/wireless_status_screen/default.pal new file mode 100644 index 000000000000..dd11346b72e2 --- /dev/null +++ b/graphics/wireless_status_screen/default.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +90 90 90 +57 57 57 +172 123 0 +90 90 90 +57 57 57 +164 164 164 +255 180 0 +106 106 106 +74 74 74 diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index f25a645792bc..56ceb4f4d915 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -109,40 +109,6 @@ $(TILESETGFXDIR)/secondary/pacifidlog/tiles.4bpp: %.4bpp: %.png $(TILESETGFXDIR)/secondary/sootopolis/tiles.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 328 -Wnum_tiles -SOOTOPOLISANIMDIR := $(TILESETGFXDIR)/secondary/sootopolis/anim - -$(SOOTOPOLISANIMDIR)/stormy_water/0.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/0_kyogre.4bpp \ - $(SOOTOPOLISANIMDIR)/stormy_water/0_groudon.4bpp - @cat $^ >$@ - -$(SOOTOPOLISANIMDIR)/stormy_water/1.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/1_kyogre.4bpp \ - $(SOOTOPOLISANIMDIR)/stormy_water/1_groudon.4bpp - @cat $^ >$@ - -$(SOOTOPOLISANIMDIR)/stormy_water/2.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/2_kyogre.4bpp \ - $(SOOTOPOLISANIMDIR)/stormy_water/2_groudon.4bpp - @cat $^ >$@ - -$(SOOTOPOLISANIMDIR)/stormy_water/3.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/3_kyogre.4bpp \ - $(SOOTOPOLISANIMDIR)/stormy_water/3_groudon.4bpp - @cat $^ >$@ - -$(SOOTOPOLISANIMDIR)/stormy_water/4.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/4_kyogre.4bpp \ - $(SOOTOPOLISANIMDIR)/stormy_water/4_groudon.4bpp - @cat $^ >$@ - -$(SOOTOPOLISANIMDIR)/stormy_water/5.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/5_kyogre.4bpp \ - $(SOOTOPOLISANIMDIR)/stormy_water/5_groudon.4bpp - @cat $^ >$@ - -$(SOOTOPOLISANIMDIR)/stormy_water/6.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/6_kyogre.4bpp \ - $(SOOTOPOLISANIMDIR)/stormy_water/6_groudon.4bpp - @cat $^ >$@ - -$(SOOTOPOLISANIMDIR)/stormy_water/7.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/7_kyogre.4bpp \ - $(SOOTOPOLISANIMDIR)/stormy_water/7_groudon.4bpp - @cat $^ >$@ - $(TILESETGFXDIR)/secondary/battle_frontier_outside_west/tiles.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 508 -Wnum_tiles @@ -685,10 +651,7 @@ $(WALLPAPERGFXDIR)/ludicolo/tiles.4bpp: $(WALLPAPERGFXDIR)/friends_frame2.4bpp $ $(WALLPAPERGFXDIR)/whiscash/tiles.4bpp: $(WALLPAPERGFXDIR)/friends_frame2.4bpp $(WALLPAPERGFXDIR)/whiscash/bg.4bpp @cat $^ >$@ -$(OBJEVENTGFXDIR)/pics/effects/unknown_4F6D38/0.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 11 -Wnum_tiles - -$(INTERFACEGFXDIR)/selector_outline.4bpp: %.4bpp: %.png +$(INTERFACEGFXDIR)/outline_cursor.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 8 -Wnum_tiles $(BATTRANSGFXDIR)/frontier_logo_center.4bpp: %.4bpp: %.png @@ -728,9 +691,6 @@ $(POKEDEXGFXDIR)/region_map.8bpp: %.8bpp: %.png $(POKEDEXGFXDIR)/region_map_affine.8bpp: %.8bpp: %.png $(GFX) $< $@ -num_tiles 233 -Wnum_tiles -$(STARTERGFXDIR)/birch_help.4bpp: $(STARTERGFXDIR)/birch_bag.4bpp $(STARTERGFXDIR)/birch_grass.4bpp - @cat $^ >$@ - $(NAMINGGFXDIR)/cursor.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 5 -Wnum_tiles diff --git a/include/battle.h b/include/battle.h index 5d9f57e436c5..8be922384f3a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -53,7 +53,7 @@ struct ResourceFlags #define RESOURCE_FLAG_FLASH_FIRE 0x1 #define RESOURCE_FLAG_ROOST 0x2 #define RESOURCE_FLAG_UNBURDEN 0x4 -#define RESOURCE_FLAG_INTIMIDATED 0x8 +#define RESOURCE_FLAG_UNUSED 0x8 #define RESOURCE_FLAG_TRACED 0x10 #define RESOURCE_FLAG_EMERGENCY_EXIT 0x20 #define RESOURCE_FLAG_NEUTRALIZING_GAS 0x40 @@ -70,20 +70,15 @@ struct DisableStruct s8 stockpileBeforeDef; s8 stockpileBeforeSpDef; u8 substituteHP; - u8 disableTimer:4; - u8 disableTimerStartValue:4; u8 encoredMovePos; + u8 disableTimer:4; u8 encoreTimer:4; - u8 encoreTimerStartValue:4; u8 perishSongTimer:4; - u8 perishSongTimerStartValue:4; u8 furyCutterCounter; u8 rolloutTimer:4; u8 rolloutTimerStartValue:4; u8 chargeTimer:4; - u8 chargeTimerStartValue:4; u8 tauntTimer:4; - u8 tauntTimer2:4; u8 battlerPreventingEscape; u8 battlerWithSureHit; u8 isFirstTurn; @@ -99,11 +94,12 @@ struct DisableStruct u8 healBlockTimer; u8 laserFocusTimer; u8 throatChopTimer; - u8 usedMoves:4; u8 wrapTurns; + u8 usedMoves:4; u8 noRetreat:1; u8 tarShot:1; u8 octolock:1; + u8 cudChew:1; }; struct ProtectStruct @@ -147,6 +143,7 @@ struct ProtectStruct u16 quickDraw:1; u16 beakBlastCharge:1; u16 quash:1; + u16 silkTrapped:1; u32 physicalDmg; u32 specialDmg; u8 physicalBattlerId; @@ -155,41 +152,46 @@ struct ProtectStruct struct SpecialStatus { + s32 dmg; + s32 physicalDmg; + s32 specialDmg; + u8 physicalBattlerId; + u8 specialBattlerId; + u8 changedStatsBattlerId; // Battler that was responsible for the latest stat change. Can be self. u8 statLowered:1; u8 lightningRodRedirected:1; u8 restoredBattlerSprite: 1; - u8 intimidatedMon:1; u8 traced:1; u8 ppNotAffectedByPressure:1; u8 faintedHasReplacement:1; u8 focusBanded:1; - // End of byte u8 focusSashed:1; + // End of byte u8 sturdied:1; u8 stormDrainRedirected:1; u8 switchInAbilityDone:1; u8 switchInItemDone:1; u8 instructedChosenTarget:3; - // End of byte u8 berryReduced:1; + // End of byte + u8 gemParam; + // End of byte u8 gemBoost:1; u8 rototillerAffected:1; // to be affected by rototiller u8 parentalBondState:2; u8 multiHitOn:1; - // End of byte, two bits unused - 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. + // End of byte + u8 damagedMons:4; // Mons that have been damaged directly by using a move, includes substitute. + u8 dancerUsedMove:1; + u8 dancerOriginalTarget:3; + // End of byte + u8 weatherAbilityDone:1; + u8 terrainAbilityDone:1; + u8 emergencyExited:1; + u8 afterYou:1; }; struct SideTimer @@ -240,7 +242,7 @@ struct WishFutureKnock u8 wishCounter[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. + u8 knockedOffMons[NUM_BATTLE_SIDES]; // Each battler is represented by a bit. }; struct AI_SavedBattleMon @@ -451,9 +453,9 @@ struct BattleTv_Mon struct BattleTv { - struct BattleTv_Mon mon[2][PARTY_SIZE]; // [side][partyId] - struct BattleTv_Position pos[2][2]; // [side][flank] - struct BattleTv_Side side[2]; // [side] + struct BattleTv_Mon mon[NUM_BATTLE_SIDES][PARTY_SIZE]; + struct BattleTv_Position pos[NUM_BATTLE_SIDES][2]; // [side][flank] + struct BattleTv_Side side[NUM_BATTLE_SIDES]; }; struct BattleTvMovePoints @@ -483,7 +485,6 @@ struct MegaEvolutionData u8 battlerId; bool8 playerSelect; u8 triggerSpriteId; - bool8 isWishMegaEvo; }; struct Illusion @@ -570,20 +571,19 @@ struct BattleStruct u8 wallyWaitFrames; u8 wallyMoveFrames; u16 lastTakenMove[MAX_BATTLERS_COUNT]; // Last move that a battler was hit with. - u16 hpOnSwitchout[2]; + u16 hpOnSwitchout[NUM_BATTLE_SIDES]; u32 savedBattleTypeFlags; u16 abilityPreventingSwitchout; u8 hpScale; u16 synchronizeMoveEffect; bool8 anyMonHasTransformed; void (*savedCallback)(void); - u16 usedHeldItems[PARTY_SIZE][2]; // For each party member and side. For harvest, recycle + u16 usedHeldItems[PARTY_SIZE][NUM_BATTLE_SIDES]; // 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]; u16 changedItems[MAX_BATTLERS_COUNT]; - u8 intimidateBattler; u8 switchInItemsCounter; u8 arenaTurnCounter; u8 turnSideTracker; @@ -611,7 +611,7 @@ struct BattleStruct u8 debugBattler; u8 magnitudeBasePower; u8 presentBasePower; - u8 roostTypes[MAX_BATTLERS_COUNT][3]; + u8 roostTypes[MAX_BATTLERS_COUNT][2]; u8 savedBattlerTarget; bool8 ateBoost[MAX_BATTLERS_COUNT]; u8 activeAbilityPopUps; // as bits for each battler @@ -650,8 +650,11 @@ struct BattleStruct 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 beatUpSlot:3; u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit. u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching) + bool8 allowedToChangeFormInWeather[PARTY_SIZE][2]; // For each party member and side, used by Ice Face. + u8 battleBondTransformed[NUM_BATTLE_SIDES]; // Bitfield for each party. }; #define F_DYNAMIC_TYPE_1 (1 << 6) @@ -681,6 +684,13 @@ struct BattleStruct gBattleMons[battlerId].type2 = type; \ gBattleMons[battlerId].type3 = TYPE_MYSTERY; \ } +#define RESTORE_BATTLER_TYPE(battlerId) \ +{ \ + gBattleMons[battlerId].type1 = gSpeciesInfo[gBattleMons[battlerId].species].types[0]; \ + gBattleMons[battlerId].type2 = gSpeciesInfo[gBattleMons[battlerId].species].types[1]; \ + gBattleMons[battlerId].type3 = TYPE_MYSTERY; \ +} + #define IS_BATTLER_PROTECTED(battlerId)(gProtectStructs[battlerId].protected \ || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_WIDE_GUARD \ @@ -690,7 +700,8 @@ struct BattleStruct || gProtectStructs[battlerId].spikyShielded \ || gProtectStructs[battlerId].kingsShielded \ || gProtectStructs[battlerId].banefulBunkered \ - || gProtectStructs[battlerId].obstructed) \ + || gProtectStructs[battlerId].obstructed \ + || gProtectStructs[battlerId].silkTrapped) #define GET_STAT_BUFF_ID(n)((n & 7)) // first three bits 0x1, 0x2, 0x4 #define GET_STAT_BUFF_VALUE_WITH_SIGN(n)((n & 0xF8)) @@ -916,8 +927,8 @@ extern u16 gMoveResultFlags; extern u32 gHitMarker; extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT]; extern u8 gUnusedFirstBattleVar2; -extern u32 gSideStatuses[2]; -extern struct SideTimer gSideTimers[2]; +extern u32 gSideStatuses[NUM_BATTLE_SIDES]; +extern struct SideTimer gSideTimers[NUM_BATTLE_SIDES]; extern u32 gStatuses3[MAX_BATTLERS_COUNT]; extern u32 gStatuses4[MAX_BATTLERS_COUNT]; extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT]; diff --git a/include/battle_anim.h b/include/battle_anim.h index 883934f14ff8..a3677bd98fbd 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -5,6 +5,14 @@ #include "constants/battle_anim.h" #include "task.h" +enum +{ + ANIM_TYPE_GENERAL, + ANIM_TYPE_MOVE, + ANIM_TYPE_STATUS, + ANIM_TYPE_SPECIAL, +}; + enum { BG_ANIM_SCREEN_SIZE, @@ -54,7 +62,7 @@ extern u16 gAnimMoveIndex; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); -void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim); +void LaunchBattleAnimation(u32 animType, u32 animId); void DestroyAnimSprite(struct Sprite *sprite); void DestroyAnimVisualTask(u8 taskId); void DestroyAnimSoundTask(u8 taskId); @@ -152,7 +160,7 @@ void AnimThrowProjectile(struct Sprite *sprite); 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 Trade_MoveSelectedMonToTarget(struct Sprite *sprite); void DestroyAnimVisualTaskAndDisableBlend(u8 taskId); void DestroySpriteAndFreeResources_(struct Sprite *sprite); void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId); diff --git a/include/battle_bg.h b/include/battle_bg.h index d0110efa2a9c..1b32c7395d9e 100644 --- a/include/battle_bg.h +++ b/include/battle_bg.h @@ -1,7 +1,6 @@ #ifndef GUARD_BATTLE_BG_H #define GUARD_BATTLE_BG_H -#if P_ENABLE_DEBUG == TRUE struct BattleBackground { const void *tileset; @@ -10,7 +9,6 @@ struct BattleBackground const void *entryTilemap; const void *palette; }; -#endif void BattleInitBgsAndWindows(void); void InitBattleBgsVideo(void); diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h index 3e940995dcf5..491d5fefd1f4 100644 --- a/include/battle_gfx_sfx_util.h +++ b/include/battle_gfx_sfx_util.h @@ -23,7 +23,7 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId); void ClearSpritesHealthboxAnimData(void); void CopyAllBattleSpritesInvisibilities(void); void CopyBattleSpriteInvisibility(u8 battlerId); -void HandleSpeciesGfxDataChange(u8 attacker, u8 target, bool8 notTransform, bool32 megaEvo); +void HandleSpeciesGfxDataChange(u8 attacker, u8 target, bool8 notTransform, bool32 megaEvo, bool8 trackEnemyPersonality); void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite); void LoadBattleMonGfxAndAnimate(u8 battlerId, bool8 loadMonSprite, u8 spriteId); void TrySetBehindSubstituteSpriteBit(u8 battlerId, u16 move); diff --git a/include/battle_message.h b/include/battle_message.h index 5cbf8f522b33..9f6905abd358 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -1,8 +1,6 @@ #ifndef GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H -#include "constants/battle_config.h" - #if B_EXPANDED_ABILITY_NAMES == TRUE #define TEXT_BUFF_ARRAY_COUNT 17 #else diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index 44185a11a3fc..60fd9b156ba4 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -43,6 +43,7 @@ u16 GetNaturePowerMove(void); u16 GetSecretPowerMoveEffect(void); void StealTargetItem(u8 battlerStealer, u8 battlerItem); u8 GetCatchingBattler(void); +u32 GetHighestStatId(u32 battlerId); extern void (* const gBattleScriptingCommandsTable[])(void); extern const u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4]; diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 23f18e3bedf0..18c1911e52e4 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -152,7 +152,6 @@ extern const u8 BattleScript_ShedSkinActivates[]; extern const u8 BattleScript_WeatherFormChanges[]; extern const u8 BattleScript_WeatherFormChangesLoop[]; extern const u8 BattleScript_WeatherFormChange[]; -extern const u8 BattleScript_IntimidateActivatesEnd3[]; extern const u8 BattleScript_IntimidateActivates[]; extern const u8 BattleScript_DroughtActivates[]; extern const u8 BattleScript_TookAttack[]; @@ -433,6 +432,26 @@ extern const u8 BattleScript_SymbiosisActivates[]; extern const u8 BattleScript_MultiHitPrintStrings[]; extern const u8 BattleScript_BurnUpRemoveType[]; extern const u8 BattleScript_TargetAbilityStatRaiseRet[]; +extern const u8 BattleScript_DoubleShockRemoveType[]; +extern const u8 BattleScript_SeedSowerActivates[]; +extern const u8 BattleScript_AngerShellActivates[]; +extern const u8 BattleScript_WellBakedBodyActivates[]; +extern const u8 BattleScript_WindRiderActivatesMoveEnd[]; +extern const u8 BattleScript_WindPowerActivates[]; +extern const u8 BattleScript_WindPowerActivatesEnd2[]; +extern const u8 BattleScript_ProtosynthesisActivates[]; +extern const u8 BattleScript_QuarkDriveActivates[]; +extern const u8 BattleScript_GoodAsGoldActivates[]; +extern const u8 BattleScript_RuinAbilityActivates[]; +extern const u8 BattleScript_CudChewActivates[]; +extern const u8 BattleScript_SupremeOverlordActivates[]; +extern const u8 BattleScript_CostarActivates[]; +extern const u8 BattleScript_ToxicDebrisActivates[]; +extern const u8 BattleScript_EarthEaterActivates[]; +extern const u8 BattleScript_MimicryActivates_End3[]; +extern const u8 BattleScript_IceFaceNullsDamage[]; +extern const u8 BattleScript_BattlerFormChangeWithStringEnd3[]; +extern const u8 BattleScript_DampPreventsAftermath[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/battle_util.h b/include/battle_util.h index 3f516daba155..0661081e43b8 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -26,16 +26,15 @@ #define ABILITYEFFECT_MOVE_END_ATTACKER 4 #define ABILITYEFFECT_MOVE_END 5 #define ABILITYEFFECT_IMMUNITY 6 -#define ABILITYEFFECT_WEATHER_FORM 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 +#define ABILITYEFFECT_SYNCHRONIZE 7 +#define ABILITYEFFECT_ATK_SYNCHRONIZE 8 +#define ABILITYEFFECT_TRACE1 9 +#define ABILITYEFFECT_TRACE2 10 +#define ABILITYEFFECT_MOVE_END_OTHER 11 +#define ABILITYEFFECT_NEUTRALIZINGGAS 12 +#define ABILITYEFFECT_FIELD_SPORT 13 // Only used if B_SPORT_TURNS < GEN_6 +#define ABILITYEFFECT_ON_WEATHER 14 +#define ABILITYEFFECT_ON_TERRAIN 15 // 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 @@ -65,6 +64,35 @@ struct TypePower u16 effect; }; +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, + CANCELLER_PARALYSED, + CANCELLER_IN_LOVE, + CANCELLER_BIDE, + CANCELLER_THAW, + CANCELLER_POWDER_MOVE, + CANCELLER_POWDER_STATUS, + CANCELLER_THROAT_CHOP, + CANCELLER_MULTIHIT_MOVES, + CANCELLER_Z_MOVES, + CANCELLER_END, + CANCELLER_PSYCHIC_TERRAIN, + CANCELLER_END2, +}; + extern const struct TypePower gNaturalGiftTable[]; void HandleAction_ThrowBall(void); @@ -144,6 +172,7 @@ u16 CalcTypeEffectivenessMultiplier(u16 move, u8 moveType, u8 battlerAtk, u8 bat u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef); u16 GetTypeModifier(u8 atkType, u8 defType); s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId); +s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp); u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId); u16 GetPrimalReversionSpecies(u16 preEvoSpecies, u16 heldItemId); u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4); @@ -152,6 +181,7 @@ void UndoMegaEvolution(u32 monId); void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut); bool32 DoBattlersShareType(u32 battler1, u32 battler2); bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId); +u32 GetIllusionMonSpecies(u32 battlerId); struct Pokemon *GetIllusionMonPtr(u32 battlerId); void ClearIllusionMon(u32 battlerId); bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId); @@ -181,9 +211,6 @@ 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); bool8 IsMoveAffectedByParentalBond(u16 move, u8 battlerId); @@ -204,5 +231,8 @@ bool32 CanBeFrozen(u8 battlerId); bool32 CanBeConfused(u8 battlerId); bool32 IsBattlerTerrainAffected(u8 battlerId, u32 terrainFlag); u32 GetBattlerFriendshipScore(u8 battlerId); +u32 CountBattlerStatIncreases(u8 battlerId, bool32 countEvasionAcc); +bool32 IsMyceliumMightOnField(void); +bool8 ChangeTypeBasedOnTerrain(u8 battlerId); #endif // GUARD_BATTLE_UTIL_H diff --git a/include/config.h b/include/config.h index ad8b3268fc81..2ad84f29cd43 100644 --- a/include/config.h +++ b/include/config.h @@ -70,6 +70,10 @@ #define GEN_6 3 #define GEN_7 4 #define GEN_8 5 +#define GEN_9 6 #define GEN_LATEST GEN_8 +// General settings +#define EXPANSION_INTRO TRUE // If TRUE, a custom RHH intro will play after the vanilla copyright screen. + #endif // GUARD_CONFIG_H diff --git a/include/constants/battle_config.h b/include/config/battle.h similarity index 95% rename from include/constants/battle_config.h rename to include/config/battle.h index 956ee1601a1a..6dea72b4061c 100644 --- a/include/constants/battle_config.h +++ b/include/config/battle.h @@ -1,5 +1,5 @@ -#ifndef GUARD_CONSTANTS_BATTLE_CONFIG_H -#define GUARD_CONSTANTS_BATTLE_CONFIG_H +#ifndef GUARD_CONFIG_BATTLE_H +#define GUARD_CONFIG_BATTLE_H // Calculation settings #define B_CRIT_CHANCE GEN_LATEST // 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. @@ -30,6 +30,7 @@ #define B_SPORT_DMG_REDUCTION GEN_LATEST // In Gen5+, Water/Mud Sport reduce Fire/Electric Damage by 67% instead of 50%. #define B_EXPLOSION_DEFENSE GEN_LATEST // In Gen5+, Self-Destruct and Explosion don't halve the targets' defense. #define B_PARENTAL_BOND_DMG GEN_LATEST // In Gen7+, Parental Bond's second hit does 25% of the initial hits damage. Before, it did 50%. +#define B_MULTIPLE_TARGETS_DMG GEN_LATEST // In Gen4+, damage dealt by moves that hit multiple targets at once is reduced to 75%. Before, it was 50%. // Type settings #define B_GHOSTS_ESCAPE GEN_LATEST // In Gen6+, abilities like Shadow Tag or moves like Mean Look fail on Ghost-type Pokémon. They can also escape any Wild Battle. @@ -38,6 +39,7 @@ #define B_STEEL_RESISTANCES GEN_LATEST // In Gen6+, Steel-type Pokémon are no longer resistant to Dark-type and Ghost-type moves. #define B_PRANKSTER_DARK_TYPES GEN_LATEST // In Gen7+, Prankster-elevated status moves do not affect Dark type Pokémon. #define B_SHEER_COLD_IMMUNITY GEN_LATEST // In Gen7+, Ice-types are immune to Sheer Cold +#define B_ROOST_PURE_FLYING GEN_LATEST // In Gen5+, Roost makes pure Flying-types into Normal-type. // Turn settings #define B_BINDING_TURNS GEN_LATEST // In Gen5+, binding moves last for 4-5 turns instead of 2-5 turns. (With Grip Claw, 7 and 5 turns respectively.) @@ -92,6 +94,7 @@ #define B_TELEPORT_BEHAVIOR GEN_LATEST // In Gen7+, starting with Pokémon LGPE, Teleport allows the user to swap out with another party member. #define B_BEAT_UP GEN_LATEST // In Gen5+, Beat Up uses a different formula to calculate its damage, and deals Dark-type damage. Prior to Gen 5, each hit also announces the party member's name. #define B_DARK_VOID_FAIL GEN_LATEST // In Gen7+, only Darkrai can use Dark Void. +#define B_BURN_HIT_THAW GEN_LATEST // In Gen6+, damaging moves with a chance of burn will thaw the target, regardless if they're fire-type moves or not. // Ability settings #define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. @@ -109,6 +112,8 @@ #define B_PLUS_MINUS_INTERACTION GEN_LATEST // In Gen5+, Plus and Minus can be activated with themselves and the opposite ability. Before, only the opposing ability could activate it. #define B_WEATHER_FORMS GEN_LATEST // In Gen5+, Castform and Cherrim revert to their base form upon losing their respective ability. Cherrim needs Flower Gift to swap forms. #define B_SYMBIOSIS_GEMS GEN_LATEST // In Gen7+, Symbiosis passes an item after a gem-boosted attack. Previously, items are passed before the gem-boosted attack hits, making the item effect apply. +#define B_CHECK_IF_CHARGED_UP TRUE // If set to TRUE, certain abilities such as Electromorphosis WILL check if the STATUS3_CHARGED_UP status flag is applied. +#define B_ABSORBING_ABILITY_STRING GEN_LATEST // In Gen5+, the abilities that absorb moves of a certain type use a generic string for stat increases and decreases. // Item settings #define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. @@ -179,6 +184,7 @@ #define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) #define B_AFFECTION_MECHANICS FALSE // In Gen6+, there's a stat called affection that can trigger different effects in battle. From LGPE onwards, those effects use friendship instead. #define B_TRAINER_CLASS_POKE_BALLS GEN_LATEST // In Gen7+, trainers will use certain types of Poké Balls depending on their trainer class. +#define B_OBEDIENCE_MECHANICS GEN_LATEST // In PLA+ (here Gen8+), obedience restrictions also apply to non-outsider Pokémon, albeit based on their level met rather than actual level // Animation Settings #define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle. @@ -197,6 +203,4 @@ #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 +#endif // GUARD_CONFIG_BATTLE_H diff --git a/include/config/debug.h b/include/config/debug.h new file mode 100644 index 000000000000..b427fcb5137b --- /dev/null +++ b/include/config/debug.h @@ -0,0 +1,21 @@ +#ifndef GUARD_CONFIG_DEBUG_H +#define GUARD_CONFIG_DEBUG_H + +// Overworld Debug +#define DEBUG_OVERWORLD_MENU TRUE // Enables a overworld debug menu for changing flags, variables, giving pokemon and more, accessed by holding R and pressing START while in the overworld by default. +#define DEBUG_OVERWORLD_HELD_KEYS (R_BUTTON) // The keys required to be held to open the debug menu. +#define DEBUG_OVERWORLD_TRIGGER_EVENT pressedStartButton // The event that opens the menu when holding the key(s) defined in DEBUG_OVERWORLD_HELD_KEYS. +#define DEBUG_OVERWORLD_IN_MENU FALSE // Replaces the overworld debug menu button combination with a start menu entry (above Pokédex). + +// Debug Flags +// To use the following debug features, 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 DEBUG_FLAG_NO_COLLISION 0 // If this flag is set, the debug function in the Utility submenu to disable player collision can be used. + +// Battle Debug Menu +#define DEBUG_BATTLE_MENU TRUE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button. + +// Pokémon Debug +#define DEBUG_POKEMON_MENU TRUE // Enables a debug menu for pokemon sprites and icons, accessed by pressing SELECT in the summary screen. + +#endif // GUARD_CONFIG_DEBUG_H diff --git a/include/constants/item_config.h b/include/config/item.h similarity index 91% rename from include/constants/item_config.h rename to include/config/item.h index e645b301daba..031af3724183 100644 --- a/include/constants/item_config.h +++ b/include/config/item.h @@ -1,5 +1,5 @@ -#ifndef GUARD_CONSTANTS_ITEM_CONFIG_H -#define GUARD_CONSTANTS_ITEM_CONFIG_H +#ifndef GUARD_CONFIG_ITEM_H +#define GUARD_CONFIG_ITEM_H // 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. @@ -14,4 +14,4 @@ #define VAR_LAST_REPEL_LURE_USED 0 // If this var has been assigned, last Repel/Lure used will be saved and the player will get prompted with the vanilla repel YES/NO option, unless I_REPEL_LURE_MENU is set to TRUE. #define I_REPEL_LURE_MENU TRUE // If TRUE, the player is able to choose which Repel/Lure to use once the previous one runs out. Cursor position is saved by VAR_LAST_REPEL_LURE_USED if not 0. -#endif // GUARD_CONSTANTS_ITEM_CONFIG_H +#endif // GUARD_CONFIG_ITEM_H diff --git a/include/config/overworld.h b/include/config/overworld.h new file mode 100644 index 000000000000..fb438431b326 --- /dev/null +++ b/include/config/overworld.h @@ -0,0 +1,13 @@ +#ifndef GUARD_CONFIG_OVERWORLD_H +#define GUARD_CONFIG_OVERWORLD_H + +// Movement config +#define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. + +// Overworld flags +// To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. +// Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. +#define OW_FLAG_NO_ENCOUNTER 0 // If this flag is set, wild encounters will be disabled. +#define OW_FLAG_NO_TRAINER_SEE 0 // If this flag is set, trainers will not battle the player unless they're talked to. + +#endif // GUARD_CONFIG_OVERWORLD_H diff --git a/include/config/pokemon.h b/include/config/pokemon.h new file mode 100644 index 000000000000..ce5faf2a6ec9 --- /dev/null +++ b/include/config/pokemon.h @@ -0,0 +1,41 @@ +#ifndef GUARD_CONFIG_POKEMON_H +#define GUARD_CONFIG_POKEMON_H + +// Species data settings +#define P_UPDATED_TYPES GEN_LATEST // Since Gen 6, several Pokémon were changed to be partially or fully Fairy type. +#define P_UPDATED_STATS GEN_LATEST // Since Gen 6, Pokémon stats are updated with each passing generation. +#define P_UPDATED_ABILITIES GEN_LATEST // Since Gen 6, certain Pokémon have their abilities changed. +#define P_UPDATED_EGG_GROUPS GEN_LATEST // Since Gen 8, certain Pokémon have gained new egg groups. + +// Breeding settings +#define P_NIDORAN_M_DITTO_BREED GEN_LATEST // Since Gen 5, when Nidoran♂ breeds with Ditto it can produce Nidoran♀ offspring. Before, it would only yield male offspring. This change also applies to Volbeat. +#define P_INCENSE_BREEDING GEN_LATEST // Since Gen 9, cross-generation Baby Pokémon don't require Incense being held by the parents to be obtained via breeding. +#define P_EGG_HATCH_LEVEL GEN_LATEST // Since Gen 4, Pokémon will hatch from eggs at level 1 instead of 5. +#define P_BALL_INHERITING GEN_LATEST // Since Gen 6, Eggs from the Daycare will inherit the Poké Ball from their mother. From Gen7 onwards, the father can pass it down as well, as long as it's of the same species as the mother. + +// Species-specific settings +#define P_SHEDINJA_BALL GEN_LATEST // Since Gen 4, Shedinja requires a Poké Ball for its evolution. In Gen 3, Shedinja inherits Nincada's Ball. +#define P_KADABRA_EVERSTONE GEN_LATEST // Since Gen 4, Kadabra can evolve even when holding an Everstone. +#define P_HIPPO_GENDER_DIFF_ICONS TRUE // If TRUE, will give Hippopotas and Hippowdon custom icons for their female forms. +#define P_SHUCKLE_BERRY_JUICE TRUE // In Gen 2, Shuckle had a 1/16 chance of converting Berry that it's holding into Berry Juice. Setting this to TRUE will allow to do this with an Oran Berry, which is the spiritual succesor of the Berry item. + +// Other settings +#define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs. + +// 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 P_FLAG_FORCE_SHINY 0 // If this flag is set, all wild and gift Pokémon will forced into being Shiny. +#define P_FLAG_FORCE_NO_SHINY 0 // If this flag is set, all wild and gift Pokémon will forced into NOT being Shiny. + +// Modifying the latest generation WILL change the saveblock due to Dex flags and will require a new save file. +// Forms are kept based on the base species, Eg: Meowth and Persian will keep all of their forms, but Perrserker will not be available if P_GEN_8_POKEMON is set to FALSE. +// If you're disabling a generation previous to others (eg: Gen 5 but not Gen 6, 7 and 8), +// remember to update NATIONAL_DEX enum in include/constants/pokedex.h to avoid players from softlocking in the non-existant entries. +#define P_GEN_4_POKEMON TRUE // Generation 4 Pokémon (DPPt, HGSS) +#define P_GEN_5_POKEMON TRUE // Generation 5 Pokémon (BW, B2W2) +#define P_GEN_6_POKEMON TRUE // Generation 6 Pokémon (XY, ORAS) +#define P_GEN_7_POKEMON TRUE // Generation 7 Pokémon (SM, USUM, LGPE) +#define P_GEN_8_POKEMON TRUE // Generation 8 Pokémon (SwSh, BDSP, LA) + +#endif // GUARD_CONFIG_POKEMON_H diff --git a/include/constants/abilities.h b/include/constants/abilities.h index 23b9fe2b7235..94e5986f776d 100644 --- a/include/constants/abilities.h +++ b/include/constants/abilities.h @@ -292,6 +292,41 @@ #define ABILITIES_COUNT_GEN8 268 -#define ABILITIES_COUNT ABILITIES_COUNT_GEN8 +// Gen 9 +#define ABILITY_LINGERING_AROMA 268 +#define ABILITY_SEED_SOWER 269 +#define ABILITY_THERMAL_EXCHANGE 270 +#define ABILITY_ANGER_SHELL 271 +#define ABILITY_PURIFYING_SALT 272 +#define ABILITY_WELL_BAKED_BODY 273 +#define ABILITY_WIND_RIDER 274 +#define ABILITY_GUARD_DOG 275 +#define ABILITY_ROCKY_PAYLOAD 276 +#define ABILITY_WIND_POWER 277 +#define ABILITY_ZERO_TO_HERO 278 +#define ABILITY_COMMANDER 279 +#define ABILITY_ELECTROMORPHOSIS 280 +#define ABILITY_PROTOSYNTHESIS 281 +#define ABILITY_QUARK_DRIVE 282 +#define ABILITY_GOOD_AS_GOLD 283 +#define ABILITY_VESSEL_OF_RUIN 284 +#define ABILITY_SWORD_OF_RUIN 285 +#define ABILITY_TABLETS_OF_RUIN 286 +#define ABILITY_BEADS_OF_RUIN 287 +#define ABILITY_ORICHALCUM_PULSE 288 +#define ABILITY_HADRON_ENGINE 289 +#define ABILITY_OPPORTUNIST 290 +#define ABILITY_CUD_CHEW 291 +#define ABILITY_SHARPNESS 292 +#define ABILITY_SUPREME_OVERLORD 293 +#define ABILITY_COSTAR 294 +#define ABILITY_TOXIC_DEBRIS 295 +#define ABILITY_ARMOR_TAIL 296 +#define ABILITY_EARTH_EATER 297 +#define ABILITY_MYCELIUM_MIGHT 298 + +#define ABILITIES_COUNT_GEN9 299 + +#define ABILITIES_COUNT ABILITIES_COUNT_GEN9 #endif // GUARD_CONSTANTS_ABILITIES_H diff --git a/include/constants/battle.h b/include/constants/battle.h index 366471e47af5..c24178cd08ad 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -36,6 +36,7 @@ #define B_SIDE_PLAYER 0 #define B_SIDE_OPPONENT 1 +#define NUM_BATTLE_SIDES 2 #define B_FLANK_LEFT 0 #define B_FLANK_RIGHT 1 @@ -298,79 +299,81 @@ #define ENUM_WEATHER_STRONG_WINDS 7 // Move Effects -#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 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 PRIMARY_STATUS_MOVE_EFFECT MOVE_EFFECT_TOXIC // All above move effects apply primary status -#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_BURN_UP 0xE // MOVE_EFFECT_BURN_UP replaces unused MOVE_EFFECT_RECOIL_25 so that stat change animations don't break -#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_SCALE_SHOT 0x26 // MOVE_EFFECT_SCALE_SHOT replaces unused MOVE_EFFECT_RECOIL_33 so that stat change animations don't break -#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_CLEAR_SMOG 0x38 -#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x39 -#define MOVE_EFFECT_SMACK_DOWN 0x3A -#define MOVE_EFFECT_FLAME_BURST 0x3B -#define MOVE_EFFECT_FEINT 0x3C -#define MOVE_EFFECT_SPECTRAL_THIEF 0x3D -#define MOVE_EFFECT_V_CREATE 0x3E -#define MOVE_EFFECT_HAPPY_HOUR 0x3F -#define MOVE_EFFECT_CORE_ENFORCER 0x40 -#define MOVE_EFFECT_THROAT_CHOP 0x41 -#define MOVE_EFFECT_INCINERATE 0x42 -#define MOVE_EFFECT_BUG_BITE 0x43 -#define MOVE_EFFECT_RECOIL_HP_25 0x44 -#define MOVE_EFFECT_RELIC_SONG 0x45 -#define MOVE_EFFECT_TRAP_BOTH 0x46 - -#define NUM_MOVE_EFFECTS 0x47 +#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_BURN_UP 14 // MOVE_EFFECT_BURN_UP replaces unused MOVE_EFFECT_RECOIL_25 so that stat change animations don't break +#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_STATUS 36 +#define MOVE_EFFECT_ATK_DEF_DOWN 37 +#define MOVE_EFFECT_SCALE_SHOT 38 // MOVE_EFFECT_SCALE_SHOT replaces unused MOVE_EFFECT_RECOIL_33 so that stat change animations don't break +#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_DEF_SPDEF_DOWN 55 +#define MOVE_EFFECT_CLEAR_SMOG 56 +#define MOVE_EFFECT_SP_ATK_TWO_DOWN 57 +#define MOVE_EFFECT_SMACK_DOWN 58 +#define MOVE_EFFECT_FLAME_BURST 59 +#define MOVE_EFFECT_FEINT 60 +#define MOVE_EFFECT_SPECTRAL_THIEF 61 +#define MOVE_EFFECT_V_CREATE 62 +#define MOVE_EFFECT_HAPPY_HOUR 63 +#define MOVE_EFFECT_CORE_ENFORCER 64 +#define MOVE_EFFECT_THROAT_CHOP 65 +#define MOVE_EFFECT_INCINERATE 66 +#define MOVE_EFFECT_BUG_BITE 67 +#define MOVE_EFFECT_RECOIL_HP_25 68 +#define MOVE_EFFECT_RELIC_SONG 69 +#define MOVE_EFFECT_TRAP_BOTH 70 +#define MOVE_EFFECT_DOUBLE_SHOCK 71 +#define MOVE_EFFECT_ROUND 72 + +#define NUM_MOVE_EFFECTS 73 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 52b20ecaa43a..4316191a2ee3 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -394,12 +394,21 @@ #define ANIM_TAG_OMEGA_SYMBOL (ANIM_SPRITES_START + 382) #define ANIM_TAG_STEEL_BEAM (ANIM_SPRITES_START + 383) #define ANIM_TAG_POLTERGEIST (ANIM_SPRITES_START + 384) +#define ANIM_TAG_TEAPOT (ANIM_SPRITES_START + 385) + // battlers -#define ANIM_ATTACKER 0 -#define ANIM_TARGET 1 -#define ANIM_ATK_PARTNER 2 -#define ANIM_DEF_PARTNER 3 +#define ANIM_ATTACKER 0 +#define ANIM_TARGET 1 +#define ANIM_ATK_PARTNER 2 +#define ANIM_DEF_PARTNER 3 + +// Below are used by AnimTask_ShakeMon2 and AnimTask_SetGrayscaleOrOriginalPal +#define ANIM_PLAYER_LEFT (MAX_BATTLERS_COUNT + 0) +#define ANIM_PLAYER_RIGHT (MAX_BATTLERS_COUNT + 1) +#define ANIM_OPPONENT_LEFT (MAX_BATTLERS_COUNT + 2) +#define ANIM_OPPONENT_RIGHT (MAX_BATTLERS_COUNT + 3) +#define ANIM_ATTACKER_FORCE (MAX_BATTLERS_COUNT + 4) // stereo panning constants [0-255] // diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index d38e7108d3c4..beab881512ea 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -282,118 +282,123 @@ #define EFFECT_QUIVER_DANCE 276 #define EFFECT_COIL 277 #define EFFECT_ELECTRIFY 278 -#define EFFECT_SCALD 279 -#define EFFECT_REFLECT_TYPE 280 -#define EFFECT_SOAK 281 -#define EFFECT_GROWTH 282 -#define EFFECT_CLOSE_COMBAT 283 -#define EFFECT_LAST_RESORT 284 -#define EFFECT_RECOIL_33_STATUS 285 -#define EFFECT_FLINCH_STATUS 286 -#define EFFECT_RECOIL_50 287 -#define EFFECT_SHELL_SMASH 288 -#define EFFECT_SHIFT_GEAR 289 -#define EFFECT_DEFENSE_UP_3 290 -#define EFFECT_NOBLE_ROAR 291 -#define EFFECT_VENOM_DRENCH 292 -#define EFFECT_TOXIC_THREAD 293 -#define EFFECT_CLEAR_SMOG 294 -#define EFFECT_HIT_SWITCH_TARGET 295 -#define EFFECT_FINAL_GAMBIT 296 -#define EFFECT_CHANGE_TYPE_ON_ITEM 297 -#define EFFECT_AUTOTOMIZE 298 -#define EFFECT_COPYCAT 299 -#define EFFECT_DEFOG 300 -#define EFFECT_HIT_ENEMY_HEAL_ALLY 301 -#define EFFECT_SMACK_DOWN 302 -#define EFFECT_SYNCHRONOISE 303 -#define EFFECT_PSYCHO_SHIFT 304 -#define EFFECT_POWER_TRICK 305 -#define EFFECT_FLAME_BURST 306 -#define EFFECT_AFTER_YOU 307 -#define EFFECT_BESTOW 308 -#define EFFECT_ROTOTILLER 309 -#define EFFECT_FLOWER_SHIELD 310 -#define EFFECT_HIT_PREVENT_ESCAPE 311 -#define EFFECT_SPEED_SWAP 312 -#define EFFECT_DEFENSE_UP2_HIT 313 -#define EFFECT_REVELATION_DANCE 314 -#define EFFECT_AURORA_VEIL 315 -#define EFFECT_THIRD_TYPE 316 -#define EFFECT_FEINT 317 -#define EFFECT_SPARKLING_ARIA 318 -#define EFFECT_ACUPRESSURE 319 -#define EFFECT_AROMATIC_MIST 320 -#define EFFECT_POWDER 321 -#define EFFECT_SP_ATTACK_UP_HIT 322 -#define EFFECT_BELCH 323 -#define EFFECT_PARTING_SHOT 324 -#define EFFECT_SPECTRAL_THIEF 325 -#define EFFECT_V_CREATE 326 -#define EFFECT_MAT_BLOCK 327 -#define EFFECT_STOMPING_TANTRUM 328 -#define EFFECT_CORE_ENFORCER 329 -#define EFFECT_INSTRUCT 330 -#define EFFECT_THROAT_CHOP 331 -#define EFFECT_LASER_FOCUS 332 -#define EFFECT_MAGNETIC_FLUX 333 -#define EFFECT_GEAR_UP 334 -#define EFFECT_INCINERATE 335 -#define EFFECT_BUG_BITE 336 -#define EFFECT_STRENGTH_SAP 337 -#define EFFECT_MIND_BLOWN 338 -#define EFFECT_PURIFY 339 -#define EFFECT_BURN_UP 340 -#define EFFECT_SHORE_UP 341 -#define EFFECT_GEOMANCY 342 -#define EFFECT_FAIRY_LOCK 343 -#define EFFECT_ALLY_SWITCH 344 -#define EFFECT_RELIC_SONG 345 -#define EFFECT_ATTACKER_DEFENSE_DOWN_HIT 346 -#define EFFECT_BODY_PRESS 347 -#define EFFECT_EERIE_SPELL 348 -#define EFFECT_JUNGLE_HEALING 349 -#define EFFECT_COACHING 350 -#define EFFECT_LASH_OUT 351 -#define EFFECT_GRASSY_GLIDE 352 -#define EFFECT_REMOVE_TERRAIN 353 -#define EFFECT_DYNAMAX_DOUBLE_DMG 354 -#define EFFECT_DECORATE 355 -#define EFFECT_SNIPE_SHOT 356 -#define EFFECT_RECOIL_HP_25 357 -#define EFFECT_STUFF_CHEEKS 358 -#define EFFECT_GRAV_APPLE 359 -#define EFFECT_EVASION_UP_HIT 360 -#define EFFECT_GLITZY_GLOW 361 -#define EFFECT_BADDY_BAD 362 -#define EFFECT_SAPPY_SEED 363 -#define EFFECT_FREEZY_FROST 364 -#define EFFECT_SPARKLY_SWIRL 365 -#define EFFECT_PLASMA_FISTS 366 -#define EFFECT_HYPERSPACE_FURY 367 -#define EFFECT_AURA_WHEEL 368 -#define EFFECT_PHOTON_GEYSER 369 -#define EFFECT_SHELL_SIDE_ARM 370 -#define EFFECT_TERRAIN_PULSE 371 -#define EFFECT_JAW_LOCK 372 -#define EFFECT_NO_RETREAT 373 -#define EFFECT_TAR_SHOT 374 -#define EFFECT_POLTERGEIST 375 -#define EFFECT_OCTOLOCK 376 -#define EFFECT_CLANGOROUS_SOUL 377 -#define EFFECT_BOLT_BEAK 378 -#define EFFECT_SKY_DROP 379 -#define EFFECT_EXPANDING_FORCE 380 -#define EFFECT_SCALE_SHOT 381 -#define EFFECT_METEOR_BEAM 382 -#define EFFECT_RISING_VOLTAGE 383 -#define EFFECT_BEAK_BLAST 384 -#define EFFECT_COURT_CHANGE 385 -#define EFFECT_STEEL_BEAM 386 -#define EFFECT_EXTREME_EVOBOOST 387 -#define EFFECT_DAMAGE_SET_TERRAIN 388 // genesis supernova -#define EFFECT_DARK_VOID 389 +#define EFFECT_REFLECT_TYPE 279 +#define EFFECT_SOAK 280 +#define EFFECT_GROWTH 281 +#define EFFECT_CLOSE_COMBAT 282 +#define EFFECT_LAST_RESORT 283 +#define EFFECT_RECOIL_33_STATUS 284 +#define EFFECT_FLINCH_STATUS 285 +#define EFFECT_RECOIL_50 286 +#define EFFECT_SHELL_SMASH 287 +#define EFFECT_SHIFT_GEAR 288 +#define EFFECT_DEFENSE_UP_3 289 +#define EFFECT_NOBLE_ROAR 290 +#define EFFECT_VENOM_DRENCH 291 +#define EFFECT_TOXIC_THREAD 292 +#define EFFECT_CLEAR_SMOG 293 +#define EFFECT_HIT_SWITCH_TARGET 294 +#define EFFECT_FINAL_GAMBIT 295 +#define EFFECT_CHANGE_TYPE_ON_ITEM 296 +#define EFFECT_AUTOTOMIZE 297 +#define EFFECT_COPYCAT 298 +#define EFFECT_DEFOG 299 +#define EFFECT_HIT_ENEMY_HEAL_ALLY 300 +#define EFFECT_SMACK_DOWN 301 +#define EFFECT_SYNCHRONOISE 302 +#define EFFECT_PSYCHO_SHIFT 303 +#define EFFECT_POWER_TRICK 304 +#define EFFECT_FLAME_BURST 305 +#define EFFECT_AFTER_YOU 306 +#define EFFECT_BESTOW 307 +#define EFFECT_ROTOTILLER 308 +#define EFFECT_FLOWER_SHIELD 309 +#define EFFECT_HIT_PREVENT_ESCAPE 310 +#define EFFECT_SPEED_SWAP 311 +#define EFFECT_DEFENSE_UP2_HIT 312 +#define EFFECT_REVELATION_DANCE 313 +#define EFFECT_AURORA_VEIL 314 +#define EFFECT_THIRD_TYPE 315 +#define EFFECT_FEINT 316 +#define EFFECT_SPARKLING_ARIA 317 +#define EFFECT_ACUPRESSURE 318 +#define EFFECT_AROMATIC_MIST 319 +#define EFFECT_POWDER 320 +#define EFFECT_SP_ATTACK_UP_HIT 321 +#define EFFECT_BELCH 322 +#define EFFECT_PARTING_SHOT 323 +#define EFFECT_SPECTRAL_THIEF 324 +#define EFFECT_V_CREATE 325 +#define EFFECT_MAT_BLOCK 326 +#define EFFECT_STOMPING_TANTRUM 327 +#define EFFECT_CORE_ENFORCER 328 +#define EFFECT_INSTRUCT 329 +#define EFFECT_THROAT_CHOP 330 +#define EFFECT_LASER_FOCUS 331 +#define EFFECT_MAGNETIC_FLUX 332 +#define EFFECT_GEAR_UP 333 +#define EFFECT_INCINERATE 334 +#define EFFECT_BUG_BITE 335 +#define EFFECT_STRENGTH_SAP 336 +#define EFFECT_MIND_BLOWN 337 +#define EFFECT_PURIFY 338 +#define EFFECT_BURN_UP 339 +#define EFFECT_SHORE_UP 340 +#define EFFECT_GEOMANCY 341 +#define EFFECT_FAIRY_LOCK 342 +#define EFFECT_ALLY_SWITCH 343 +#define EFFECT_RELIC_SONG 344 +#define EFFECT_ATTACKER_DEFENSE_DOWN_HIT 345 +#define EFFECT_BODY_PRESS 346 +#define EFFECT_EERIE_SPELL 347 +#define EFFECT_JUNGLE_HEALING 348 +#define EFFECT_COACHING 349 +#define EFFECT_LASH_OUT 350 +#define EFFECT_GRASSY_GLIDE 351 +#define EFFECT_REMOVE_TERRAIN 352 +#define EFFECT_DYNAMAX_DOUBLE_DMG 353 +#define EFFECT_DECORATE 354 +#define EFFECT_SNIPE_SHOT 355 +#define EFFECT_RECOIL_HP_25 356 +#define EFFECT_STUFF_CHEEKS 357 +#define EFFECT_GRAV_APPLE 358 +#define EFFECT_EVASION_UP_HIT 359 +#define EFFECT_GLITZY_GLOW 360 +#define EFFECT_BADDY_BAD 361 +#define EFFECT_SAPPY_SEED 362 +#define EFFECT_FREEZY_FROST 363 +#define EFFECT_SPARKLY_SWIRL 364 +#define EFFECT_PLASMA_FISTS 365 +#define EFFECT_HYPERSPACE_FURY 366 +#define EFFECT_AURA_WHEEL 367 +#define EFFECT_PHOTON_GEYSER 368 +#define EFFECT_SHELL_SIDE_ARM 369 +#define EFFECT_TERRAIN_PULSE 370 +#define EFFECT_JAW_LOCK 371 +#define EFFECT_NO_RETREAT 372 +#define EFFECT_TAR_SHOT 373 +#define EFFECT_POLTERGEIST 374 +#define EFFECT_OCTOLOCK 375 +#define EFFECT_CLANGOROUS_SOUL 376 +#define EFFECT_BOLT_BEAK 377 +#define EFFECT_SKY_DROP 378 +#define EFFECT_EXPANDING_FORCE 379 +#define EFFECT_SCALE_SHOT 380 +#define EFFECT_METEOR_BEAM 381 +#define EFFECT_RISING_VOLTAGE 382 +#define EFFECT_BEAK_BLAST 383 +#define EFFECT_COURT_CHANGE 384 +#define EFFECT_STEEL_BEAM 385 +#define EFFECT_EXTREME_EVOBOOST 386 +#define EFFECT_HIT_SET_REMOVE_TERRAIN 387 // genesis supernova +#define EFFECT_DARK_VOID 388 +#define EFFECT_SLEEP_HIT 389 +#define EFFECT_DOUBLE_SHOCK 390 +#define EFFECT_SPECIAL_ATTACK_UP_HIT 391 +#define EFFECT_VICTORY_DANCE 392 +#define EFFECT_TEATIME 393 +#define EFFECT_ATTACK_UP_USER_ALLY 394 // Howl 8th Gen -#define NUM_BATTLE_MOVE_EFFECTS 389 +#define NUM_BATTLE_MOVE_EFFECTS 395 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_pyramid.h b/include/constants/battle_pyramid.h index 297f3b1fff59..ac80a2d7d399 100644 --- a/include/constants/battle_pyramid.h +++ b/include/constants/battle_pyramid.h @@ -1,7 +1,7 @@ #ifndef GUARD_CONSTANTS_BATTLE_PYRAMID_H #define GUARD_CONSTANTS_BATTLE_PYRAMID_H -#define TOTAL_ROUNDS 20 +#define TOTAL_PYRAMID_ROUNDS 20 #define PICKUP_ITEMS_PER_ROUND 10 #define HINT_EXIT_DIRECTION 0 diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 06a09fc17970..68e927d75fcd 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -74,6 +74,7 @@ #define BS_PLAYER2 13 // for Cmd_updatestatusicon #define BS_OPPONENT2 14 #define BS_ABILITY_BATTLER 15 +#define BS_ATTACKER_PARTNER 16 // Cmd_accuracycheck #define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF @@ -93,7 +94,7 @@ #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_RESET_SWITCH_IN_ABILITY_BITS 5 #define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6 #define VARIOUS_RESET_PLAYER_FAINTED 7 #define VARIOUS_PALACE_FLAVOR_TEXT 8 @@ -216,36 +217,46 @@ #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 -#define VARIOUS_TRY_SYMBIOSIS 154 -#define VARIOUS_CAN_TELEPORT 155 -#define VARIOUS_GET_BATTLER_SIDE 156 -#define VARIOUS_CHECK_PARENTAL_BOND_COUNTER 157 +#define VARIOUS_PHOTON_GEYSER_CHECK 128 +#define VARIOUS_SHELL_SIDE_ARM_CHECK 129 +#define VARIOUS_TRY_NO_RETREAT 130 +#define VARIOUS_TRY_TAR_SHOT 131 +#define VARIOUS_CAN_TAR_SHOT_WORK 132 +#define VARIOUS_CHECK_POLTERGEIST 133 +#define VARIOUS_SET_OCTOLOCK 134 +#define VARIOUS_CUT_1_3_HP_RAISE_STATS 135 +#define VARIOUS_TRY_END_NEUTRALIZING_GAS 136 +#define VARIOUS_JUMP_IF_UNDER_200 137 +#define VARIOUS_SET_SKY_DROP 138 +#define VARIOUS_CLEAR_SKY_DROP 139 +#define VARIOUS_SKY_DROP_YAWN 140 +#define VARIOUS_JUMP_IF_CANT_FLING 141 +#define VARIOUS_JUMP_IF_HOLD_EFFECT 142 +#define VARIOUS_CURE_CERTAIN_STATUSES 143 +#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 144 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 145 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 146 +#define VARIOUS_SAVE_BATTLER_ITEM 147 +#define VARIOUS_RESTORE_BATTLER_ITEM 148 +#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 149 +#define VARIOUS_SET_BEAK_BLAST 150 +#define VARIOUS_SWAP_SIDE_STATUSES 151 +#define VARIOUS_SET_Z_EFFECT 152 +#define VARIOUS_TRY_SYMBIOSIS 153 +#define VARIOUS_CAN_TELEPORT 154 +#define VARIOUS_GET_BATTLER_SIDE 155 +#define VARIOUS_CHECK_PARENTAL_BOND_COUNTER 156 +#define VARIOUS_SWAP_STATS 157 +#define VARIOUS_JUMP_IF_ROD 158 +#define VARIOUS_JUMP_IF_ABSORB 159 +#define VARIOUS_JUMP_IF_MOTOR 160 +#define VARIOUS_TEATIME_INVUL 161 +#define VARIOUS_TEATIME_TARGETS 162 +#define VARIOUS_TRY_WIND_RIDER_POWER 163 +#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 164 +#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 165 +#define VARIOUS_JUMP_IF_NO_VALID_TARGETS 166 +#define VARIOUS_JUMP_IF_EMERGENCY_EXITED 167 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 @@ -263,6 +274,7 @@ // Cmd_statbuffchange #define STAT_CHANGE_ALLOW_PTR (1 << 0) // If set, allow use of jumpptr. Set in every use of statbuffchange +#define STAT_CHANGE_MIRROR_ARMOR (1 << 1) // Stat change redirection caused by Mirror Armor ability. #define STAT_CHANGE_NOT_PROTECT_AFFECTED (1 << 5) #define STAT_CHANGE_UPDATE_MOVE_EFFECT (1 << 6) diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 4bce51a4553b..3f8853024f07 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -630,8 +630,17 @@ #define STRINGID_ATTACKERHEALEDITSBURN 628 #define STRINGID_ATTACKERMELTEDTHEICE 629 #define STRINGID_TARGETTOUGHEDITOUT 630 - -#define BATTLESTRINGS_COUNT 631 +#define STRINGID_ATTACKERLOSTELECTRICTYPE 631 +#define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 632 +#define STRINGID_BEINGHITCHARGEDPKMNWITHPOWER 633 +#define STRINGID_SUNLIGHTACTIVATEDABILITY 634 +#define STRINGID_STATWASHEIGHTENED 635 +#define STRINGID_ELECTRICTERRAINACTIVATEDABILITY 636 +#define STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT 637 +#define STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN 638 +#define STRINGID_PKMNSABILITYPREVENTSABILITY 639 + +#define BATTLESTRINGS_COUNT 640 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, @@ -732,7 +741,6 @@ // gUproarAwakeStringIds #define B_MSG_CANT_SLEEP_UPROAR 0 #define B_MSG_UPROAR_KEPT_AWAKE 1 -#define B_MSG_STAYED_AWAKE_USING 2 // gUproarOverTurnStringIds #define B_MSG_UPROAR_CONTINUES 0 diff --git a/include/constants/daycare.h b/include/constants/daycare.h index 9af7e6f79c7e..782bbe95463c 100644 --- a/include/constants/daycare.h +++ b/include/constants/daycare.h @@ -13,8 +13,11 @@ #define DAYCARE_ONE_MON 2 #define DAYCARE_TWO_MONS 3 -#define INHERITED_IV_COUNT 3 +#if P_EGG_HATCH_LEVEL >= GEN_4 +#define EGG_HATCH_LEVEL 1 +#else #define EGG_HATCH_LEVEL 5 +#endif #define EGG_GENDER_MALE 0x8000 // used to create a male egg from a female-only parent species (e.g. Nidoran) #define DAYCARE_LEVEL_MENU_EXIT 5 diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h index f98cedbb710d..b5875b88149e 100644 --- a/include/constants/easy_chat.h +++ b/include/constants/easy_chat.h @@ -53,1048 +53,1048 @@ #define EC_NUM_GROUPS 22 // TRAINER -#define EC_WORD_I_CHOOSE_YOU (EC_GROUP_TRAINER << 9) | 0x0 -#define EC_WORD_GOTCHA (EC_GROUP_TRAINER << 9) | 0x1 -#define EC_WORD_TRADE (EC_GROUP_TRAINER << 9) | 0x2 -#define EC_WORD_SAPPHIRE (EC_GROUP_TRAINER << 9) | 0x3 -#define EC_WORD_EVOLVE (EC_GROUP_TRAINER << 9) | 0x4 -#define EC_WORD_ENCYCLOPEDIA (EC_GROUP_TRAINER << 9) | 0x5 -#define EC_WORD_NATURE (EC_GROUP_TRAINER << 9) | 0x6 -#define EC_WORD_CENTER (EC_GROUP_TRAINER << 9) | 0x7 -#define EC_WORD_EGG (EC_GROUP_TRAINER << 9) | 0x8 -#define EC_WORD_LINK (EC_GROUP_TRAINER << 9) | 0x9 -#define EC_WORD_SP_ABILITY (EC_GROUP_TRAINER << 9) | 0xa -#define EC_WORD_TRAINER (EC_GROUP_TRAINER << 9) | 0xb -#define EC_WORD_VERSION (EC_GROUP_TRAINER << 9) | 0xc -#define EC_WORD_POKENAV (EC_GROUP_TRAINER << 9) | 0xd -#define EC_WORD_POKEMON (EC_GROUP_TRAINER << 9) | 0xe -#define EC_WORD_GET (EC_GROUP_TRAINER << 9) | 0xf -#define EC_WORD_POKEDEX (EC_GROUP_TRAINER << 9) | 0x10 -#define EC_WORD_RUBY (EC_GROUP_TRAINER << 9) | 0x11 -#define EC_WORD_LEVEL (EC_GROUP_TRAINER << 9) | 0x12 -#define EC_WORD_RED (EC_GROUP_TRAINER << 9) | 0x13 -#define EC_WORD_GREEN (EC_GROUP_TRAINER << 9) | 0x14 -#define EC_WORD_BAG (EC_GROUP_TRAINER << 9) | 0x15 -#define EC_WORD_FLAME (EC_GROUP_TRAINER << 9) | 0x16 -#define EC_WORD_GOLD (EC_GROUP_TRAINER << 9) | 0x17 -#define EC_WORD_LEAF (EC_GROUP_TRAINER << 9) | 0x18 -#define EC_WORD_SILVER (EC_GROUP_TRAINER << 9) | 0x19 -#define EC_WORD_EMERALD (EC_GROUP_TRAINER << 9) | 0x1a +#define EC_WORD_I_CHOOSE_YOU ((EC_GROUP_TRAINER << EC_MASK_BITS) | 0) +#define EC_WORD_GOTCHA ((EC_GROUP_TRAINER << EC_MASK_BITS) | 1) +#define EC_WORD_TRADE ((EC_GROUP_TRAINER << EC_MASK_BITS) | 2) +#define EC_WORD_SAPPHIRE ((EC_GROUP_TRAINER << EC_MASK_BITS) | 3) +#define EC_WORD_EVOLVE ((EC_GROUP_TRAINER << EC_MASK_BITS) | 4) +#define EC_WORD_ENCYCLOPEDIA ((EC_GROUP_TRAINER << EC_MASK_BITS) | 5) +#define EC_WORD_NATURE ((EC_GROUP_TRAINER << EC_MASK_BITS) | 6) +#define EC_WORD_CENTER ((EC_GROUP_TRAINER << EC_MASK_BITS) | 7) +#define EC_WORD_EGG ((EC_GROUP_TRAINER << EC_MASK_BITS) | 8) +#define EC_WORD_LINK ((EC_GROUP_TRAINER << EC_MASK_BITS) | 9) +#define EC_WORD_SP_ABILITY ((EC_GROUP_TRAINER << EC_MASK_BITS) | 10) +#define EC_WORD_TRAINER ((EC_GROUP_TRAINER << EC_MASK_BITS) | 11) +#define EC_WORD_VERSION ((EC_GROUP_TRAINER << EC_MASK_BITS) | 12) +#define EC_WORD_POKENAV ((EC_GROUP_TRAINER << EC_MASK_BITS) | 13) +#define EC_WORD_POKEMON ((EC_GROUP_TRAINER << EC_MASK_BITS) | 14) +#define EC_WORD_GET ((EC_GROUP_TRAINER << EC_MASK_BITS) | 15) +#define EC_WORD_POKEDEX ((EC_GROUP_TRAINER << EC_MASK_BITS) | 16) +#define EC_WORD_RUBY ((EC_GROUP_TRAINER << EC_MASK_BITS) | 17) +#define EC_WORD_LEVEL ((EC_GROUP_TRAINER << EC_MASK_BITS) | 18) +#define EC_WORD_RED ((EC_GROUP_TRAINER << EC_MASK_BITS) | 19) +#define EC_WORD_GREEN ((EC_GROUP_TRAINER << EC_MASK_BITS) | 20) +#define EC_WORD_BAG ((EC_GROUP_TRAINER << EC_MASK_BITS) | 21) +#define EC_WORD_FLAME ((EC_GROUP_TRAINER << EC_MASK_BITS) | 22) +#define EC_WORD_GOLD ((EC_GROUP_TRAINER << EC_MASK_BITS) | 23) +#define EC_WORD_LEAF ((EC_GROUP_TRAINER << EC_MASK_BITS) | 24) +#define EC_WORD_SILVER ((EC_GROUP_TRAINER << EC_MASK_BITS) | 25) +#define EC_WORD_EMERALD ((EC_GROUP_TRAINER << EC_MASK_BITS) | 26) // STATUS -#define EC_WORD_DARK (EC_GROUP_STATUS << 9) | 0x0 -#define EC_WORD_STENCH (EC_GROUP_STATUS << 9) | 0x1 -#define EC_WORD_THICK_FAT (EC_GROUP_STATUS << 9) | 0x2 -#define EC_WORD_RAIN_DISH (EC_GROUP_STATUS << 9) | 0x3 -#define EC_WORD_DRIZZLE (EC_GROUP_STATUS << 9) | 0x4 -#define EC_WORD_ARENA_TRAP (EC_GROUP_STATUS << 9) | 0x5 -#define EC_WORD_INTIMIDATE (EC_GROUP_STATUS << 9) | 0x6 -#define EC_WORD_ROCK_HEAD (EC_GROUP_STATUS << 9) | 0x7 -#define EC_WORD_COLOR (EC_GROUP_STATUS << 9) | 0x8 -#define EC_WORD_ALT_COLOR (EC_GROUP_STATUS << 9) | 0x9 -#define EC_WORD_ROCK (EC_GROUP_STATUS << 9) | 0xa -#define EC_WORD_BEAUTIFUL (EC_GROUP_STATUS << 9) | 0xb -#define EC_WORD_BEAUTY (EC_GROUP_STATUS << 9) | 0xc -#define EC_WORD_AIR_LOCK (EC_GROUP_STATUS << 9) | 0xd -#define EC_WORD_PSYCHIC (EC_GROUP_STATUS << 9) | 0xe -#define EC_WORD_HYPER_CUTTER (EC_GROUP_STATUS << 9) | 0xf -#define EC_WORD_FIGHTING (EC_GROUP_STATUS << 9) | 0x10 -#define EC_WORD_SHADOW_TAG (EC_GROUP_STATUS << 9) | 0x11 -#define EC_WORD_SMART (EC_GROUP_STATUS << 9) | 0x12 -#define EC_WORD_SMARTNESS (EC_GROUP_STATUS << 9) | 0x13 -#define EC_WORD_SPEED_BOOST (EC_GROUP_STATUS << 9) | 0x14 -#define EC_WORD_COOL (EC_GROUP_STATUS << 9) | 0x15 -#define EC_WORD_COOLNESS (EC_GROUP_STATUS << 9) | 0x16 -#define EC_WORD_BATTLE_ARMOR (EC_GROUP_STATUS << 9) | 0x17 -#define EC_WORD_CUTE (EC_GROUP_STATUS << 9) | 0x18 -#define EC_WORD_CUTENESS (EC_GROUP_STATUS << 9) | 0x19 -#define EC_WORD_STURDY (EC_GROUP_STATUS << 9) | 0x1a -#define EC_WORD_SUCTION_CUPS (EC_GROUP_STATUS << 9) | 0x1b -#define EC_WORD_GRASS (EC_GROUP_STATUS << 9) | 0x1c -#define EC_WORD_CLEAR_BODY (EC_GROUP_STATUS << 9) | 0x1d -#define EC_WORD_TORRENT (EC_GROUP_STATUS << 9) | 0x1e -#define EC_WORD_GHOST (EC_GROUP_STATUS << 9) | 0x1f -#define EC_WORD_ICE (EC_GROUP_STATUS << 9) | 0x20 -#define EC_WORD_GUTS (EC_GROUP_STATUS << 9) | 0x21 -#define EC_WORD_ROUGH_SKIN (EC_GROUP_STATUS << 9) | 0x22 -#define EC_WORD_SHELL_ARMOR (EC_GROUP_STATUS << 9) | 0x23 -#define EC_WORD_NATURAL_CURE (EC_GROUP_STATUS << 9) | 0x24 -#define EC_WORD_DAMP (EC_GROUP_STATUS << 9) | 0x25 -#define EC_WORD_GROUND (EC_GROUP_STATUS << 9) | 0x26 -#define EC_WORD_LIMBER (EC_GROUP_STATUS << 9) | 0x27 -#define EC_WORD_MAGNET_PULL (EC_GROUP_STATUS << 9) | 0x28 -#define EC_WORD_WHITE_SMOKE (EC_GROUP_STATUS << 9) | 0x29 -#define EC_WORD_SYNCHRONIZE (EC_GROUP_STATUS << 9) | 0x2a -#define EC_WORD_OVERGROW (EC_GROUP_STATUS << 9) | 0x2b -#define EC_WORD_SWIFT_SWIM (EC_GROUP_STATUS << 9) | 0x2c -#define EC_WORD_SAND_STREAM (EC_GROUP_STATUS << 9) | 0x2d -#define EC_WORD_SAND_VEIL (EC_GROUP_STATUS << 9) | 0x2e -#define EC_WORD_KEEN_EYE (EC_GROUP_STATUS << 9) | 0x2f -#define EC_WORD_INNER_FOCUS (EC_GROUP_STATUS << 9) | 0x30 -#define EC_WORD_STATIC (EC_GROUP_STATUS << 9) | 0x31 -#define EC_WORD_TYPE (EC_GROUP_STATUS << 9) | 0x32 -#define EC_WORD_TOUGH (EC_GROUP_STATUS << 9) | 0x33 -#define EC_WORD_TOUGHNESS (EC_GROUP_STATUS << 9) | 0x34 -#define EC_WORD_SHED_SKIN (EC_GROUP_STATUS << 9) | 0x35 -#define EC_WORD_HUGE_POWER (EC_GROUP_STATUS << 9) | 0x36 -#define EC_WORD_VOLT_ABSORB (EC_GROUP_STATUS << 9) | 0x37 -#define EC_WORD_WATER_ABSORB (EC_GROUP_STATUS << 9) | 0x38 -#define EC_WORD_ELECTRIC (EC_GROUP_STATUS << 9) | 0x39 -#define EC_WORD_FORECAST (EC_GROUP_STATUS << 9) | 0x3a -#define EC_WORD_SERENE_GRACE (EC_GROUP_STATUS << 9) | 0x3b -#define EC_WORD_POISON (EC_GROUP_STATUS << 9) | 0x3c -#define EC_WORD_POISON_POINT (EC_GROUP_STATUS << 9) | 0x3d -#define EC_WORD_DRAGON (EC_GROUP_STATUS << 9) | 0x3e -#define EC_WORD_TRACE (EC_GROUP_STATUS << 9) | 0x3f -#define EC_WORD_OBLIVIOUS (EC_GROUP_STATUS << 9) | 0x40 -#define EC_WORD_TRUANT (EC_GROUP_STATUS << 9) | 0x41 -#define EC_WORD_RUN_AWAY (EC_GROUP_STATUS << 9) | 0x42 -#define EC_WORD_STICKY_HOLD (EC_GROUP_STATUS << 9) | 0x43 -#define EC_WORD_CLOUD_NINE (EC_GROUP_STATUS << 9) | 0x44 -#define EC_WORD_NORMAL (EC_GROUP_STATUS << 9) | 0x45 -#define EC_WORD_STEEL (EC_GROUP_STATUS << 9) | 0x46 -#define EC_WORD_ILLUMINATE (EC_GROUP_STATUS << 9) | 0x47 -#define EC_WORD_EARLY_BIRD (EC_GROUP_STATUS << 9) | 0x48 -#define EC_WORD_HUSTLE (EC_GROUP_STATUS << 9) | 0x49 -#define EC_WORD_SHINE (EC_GROUP_STATUS << 9) | 0x4a -#define EC_WORD_FLYING (EC_GROUP_STATUS << 9) | 0x4b -#define EC_WORD_DROUGHT (EC_GROUP_STATUS << 9) | 0x4c -#define EC_WORD_LIGHTNINGROD (EC_GROUP_STATUS << 9) | 0x4d -#define EC_WORD_COMPOUNDEYES (EC_GROUP_STATUS << 9) | 0x4e -#define EC_WORD_MARVEL_SCALE (EC_GROUP_STATUS << 9) | 0x4f -#define EC_WORD_WONDER_GUARD (EC_GROUP_STATUS << 9) | 0x50 -#define EC_WORD_INSOMNIA (EC_GROUP_STATUS << 9) | 0x51 -#define EC_WORD_LEVITATE (EC_GROUP_STATUS << 9) | 0x52 -#define EC_WORD_PLUS (EC_GROUP_STATUS << 9) | 0x53 -#define EC_WORD_PRESSURE (EC_GROUP_STATUS << 9) | 0x54 -#define EC_WORD_LIQUID_OOZE (EC_GROUP_STATUS << 9) | 0x55 -#define EC_WORD_COLOR_CHANGE (EC_GROUP_STATUS << 9) | 0x56 -#define EC_WORD_SOUNDPROOF (EC_GROUP_STATUS << 9) | 0x57 -#define EC_WORD_EFFECT_SPORE (EC_GROUP_STATUS << 9) | 0x58 -#define EC_WORD_PKRS (EC_GROUP_STATUS << 9) | 0x59 -#define EC_WORD_FIRE (EC_GROUP_STATUS << 9) | 0x5a -#define EC_WORD_FLAME_BODY (EC_GROUP_STATUS << 9) | 0x5b -#define EC_WORD_MINUS (EC_GROUP_STATUS << 9) | 0x5c -#define EC_WORD_OWN_TEMPO (EC_GROUP_STATUS << 9) | 0x5d -#define EC_WORD_MAGMA_ARMOR (EC_GROUP_STATUS << 9) | 0x5e -#define EC_WORD_WATER (EC_GROUP_STATUS << 9) | 0x5f -#define EC_WORD_WATER_VEIL (EC_GROUP_STATUS << 9) | 0x60 -#define EC_WORD_BUG (EC_GROUP_STATUS << 9) | 0x61 -#define EC_WORD_SWARM (EC_GROUP_STATUS << 9) | 0x62 -#define EC_WORD_CUTE_CHARM (EC_GROUP_STATUS << 9) | 0x63 -#define EC_WORD_IMMUNITY (EC_GROUP_STATUS << 9) | 0x64 -#define EC_WORD_BLAZE (EC_GROUP_STATUS << 9) | 0x65 -#define EC_WORD_PICKUP (EC_GROUP_STATUS << 9) | 0x66 -#define EC_WORD_PATTERN (EC_GROUP_STATUS << 9) | 0x67 -#define EC_WORD_FLASH_FIRE (EC_GROUP_STATUS << 9) | 0x68 -#define EC_WORD_VITAL_SPIRIT (EC_GROUP_STATUS << 9) | 0x69 -#define EC_WORD_CHLOROPHYLL (EC_GROUP_STATUS << 9) | 0x6a -#define EC_WORD_PURE_POWER (EC_GROUP_STATUS << 9) | 0x6b -#define EC_WORD_SHIELD_DUST (EC_GROUP_STATUS << 9) | 0x6c +#define EC_WORD_DARK ((EC_GROUP_STATUS << EC_MASK_BITS) | 0) +#define EC_WORD_STENCH ((EC_GROUP_STATUS << EC_MASK_BITS) | 1) +#define EC_WORD_THICK_FAT ((EC_GROUP_STATUS << EC_MASK_BITS) | 2) +#define EC_WORD_RAIN_DISH ((EC_GROUP_STATUS << EC_MASK_BITS) | 3) +#define EC_WORD_DRIZZLE ((EC_GROUP_STATUS << EC_MASK_BITS) | 4) +#define EC_WORD_ARENA_TRAP ((EC_GROUP_STATUS << EC_MASK_BITS) | 5) +#define EC_WORD_INTIMIDATE ((EC_GROUP_STATUS << EC_MASK_BITS) | 6) +#define EC_WORD_ROCK_HEAD ((EC_GROUP_STATUS << EC_MASK_BITS) | 7) +#define EC_WORD_COLOR ((EC_GROUP_STATUS << EC_MASK_BITS) | 8) +#define EC_WORD_ALT_COLOR ((EC_GROUP_STATUS << EC_MASK_BITS) | 9) +#define EC_WORD_ROCK ((EC_GROUP_STATUS << EC_MASK_BITS) | 10) +#define EC_WORD_BEAUTIFUL ((EC_GROUP_STATUS << EC_MASK_BITS) | 11) +#define EC_WORD_BEAUTY ((EC_GROUP_STATUS << EC_MASK_BITS) | 12) +#define EC_WORD_AIR_LOCK ((EC_GROUP_STATUS << EC_MASK_BITS) | 13) +#define EC_WORD_PSYCHIC ((EC_GROUP_STATUS << EC_MASK_BITS) | 14) +#define EC_WORD_HYPER_CUTTER ((EC_GROUP_STATUS << EC_MASK_BITS) | 15) +#define EC_WORD_FIGHTING ((EC_GROUP_STATUS << EC_MASK_BITS) | 16) +#define EC_WORD_SHADOW_TAG ((EC_GROUP_STATUS << EC_MASK_BITS) | 17) +#define EC_WORD_SMART ((EC_GROUP_STATUS << EC_MASK_BITS) | 18) +#define EC_WORD_SMARTNESS ((EC_GROUP_STATUS << EC_MASK_BITS) | 19) +#define EC_WORD_SPEED_BOOST ((EC_GROUP_STATUS << EC_MASK_BITS) | 20) +#define EC_WORD_COOL ((EC_GROUP_STATUS << EC_MASK_BITS) | 21) +#define EC_WORD_COOLNESS ((EC_GROUP_STATUS << EC_MASK_BITS) | 22) +#define EC_WORD_BATTLE_ARMOR ((EC_GROUP_STATUS << EC_MASK_BITS) | 23) +#define EC_WORD_CUTE ((EC_GROUP_STATUS << EC_MASK_BITS) | 24) +#define EC_WORD_CUTENESS ((EC_GROUP_STATUS << EC_MASK_BITS) | 25) +#define EC_WORD_STURDY ((EC_GROUP_STATUS << EC_MASK_BITS) | 26) +#define EC_WORD_SUCTION_CUPS ((EC_GROUP_STATUS << EC_MASK_BITS) | 27) +#define EC_WORD_GRASS ((EC_GROUP_STATUS << EC_MASK_BITS) | 28) +#define EC_WORD_CLEAR_BODY ((EC_GROUP_STATUS << EC_MASK_BITS) | 29) +#define EC_WORD_TORRENT ((EC_GROUP_STATUS << EC_MASK_BITS) | 30) +#define EC_WORD_GHOST ((EC_GROUP_STATUS << EC_MASK_BITS) | 31) +#define EC_WORD_ICE ((EC_GROUP_STATUS << EC_MASK_BITS) | 32) +#define EC_WORD_GUTS ((EC_GROUP_STATUS << EC_MASK_BITS) | 33) +#define EC_WORD_ROUGH_SKIN ((EC_GROUP_STATUS << EC_MASK_BITS) | 34) +#define EC_WORD_SHELL_ARMOR ((EC_GROUP_STATUS << EC_MASK_BITS) | 35) +#define EC_WORD_NATURAL_CURE ((EC_GROUP_STATUS << EC_MASK_BITS) | 36) +#define EC_WORD_DAMP ((EC_GROUP_STATUS << EC_MASK_BITS) | 37) +#define EC_WORD_GROUND ((EC_GROUP_STATUS << EC_MASK_BITS) | 38) +#define EC_WORD_LIMBER ((EC_GROUP_STATUS << EC_MASK_BITS) | 39) +#define EC_WORD_MAGNET_PULL ((EC_GROUP_STATUS << EC_MASK_BITS) | 40) +#define EC_WORD_WHITE_SMOKE ((EC_GROUP_STATUS << EC_MASK_BITS) | 41) +#define EC_WORD_SYNCHRONIZE ((EC_GROUP_STATUS << EC_MASK_BITS) | 42) +#define EC_WORD_OVERGROW ((EC_GROUP_STATUS << EC_MASK_BITS) | 43) +#define EC_WORD_SWIFT_SWIM ((EC_GROUP_STATUS << EC_MASK_BITS) | 44) +#define EC_WORD_SAND_STREAM ((EC_GROUP_STATUS << EC_MASK_BITS) | 45) +#define EC_WORD_SAND_VEIL ((EC_GROUP_STATUS << EC_MASK_BITS) | 46) +#define EC_WORD_KEEN_EYE ((EC_GROUP_STATUS << EC_MASK_BITS) | 47) +#define EC_WORD_INNER_FOCUS ((EC_GROUP_STATUS << EC_MASK_BITS) | 48) +#define EC_WORD_STATIC ((EC_GROUP_STATUS << EC_MASK_BITS) | 49) +#define EC_WORD_TYPE ((EC_GROUP_STATUS << EC_MASK_BITS) | 50) +#define EC_WORD_TOUGH ((EC_GROUP_STATUS << EC_MASK_BITS) | 51) +#define EC_WORD_TOUGHNESS ((EC_GROUP_STATUS << EC_MASK_BITS) | 52) +#define EC_WORD_SHED_SKIN ((EC_GROUP_STATUS << EC_MASK_BITS) | 53) +#define EC_WORD_HUGE_POWER ((EC_GROUP_STATUS << EC_MASK_BITS) | 54) +#define EC_WORD_VOLT_ABSORB ((EC_GROUP_STATUS << EC_MASK_BITS) | 55) +#define EC_WORD_WATER_ABSORB ((EC_GROUP_STATUS << EC_MASK_BITS) | 56) +#define EC_WORD_ELECTRIC ((EC_GROUP_STATUS << EC_MASK_BITS) | 57) +#define EC_WORD_FORECAST ((EC_GROUP_STATUS << EC_MASK_BITS) | 58) +#define EC_WORD_SERENE_GRACE ((EC_GROUP_STATUS << EC_MASK_BITS) | 59) +#define EC_WORD_POISON ((EC_GROUP_STATUS << EC_MASK_BITS) | 60) +#define EC_WORD_POISON_POINT ((EC_GROUP_STATUS << EC_MASK_BITS) | 61) +#define EC_WORD_DRAGON ((EC_GROUP_STATUS << EC_MASK_BITS) | 62) +#define EC_WORD_TRACE ((EC_GROUP_STATUS << EC_MASK_BITS) | 63) +#define EC_WORD_OBLIVIOUS ((EC_GROUP_STATUS << EC_MASK_BITS) | 64) +#define EC_WORD_TRUANT ((EC_GROUP_STATUS << EC_MASK_BITS) | 65) +#define EC_WORD_RUN_AWAY ((EC_GROUP_STATUS << EC_MASK_BITS) | 66) +#define EC_WORD_STICKY_HOLD ((EC_GROUP_STATUS << EC_MASK_BITS) | 67) +#define EC_WORD_CLOUD_NINE ((EC_GROUP_STATUS << EC_MASK_BITS) | 68) +#define EC_WORD_NORMAL ((EC_GROUP_STATUS << EC_MASK_BITS) | 69) +#define EC_WORD_STEEL ((EC_GROUP_STATUS << EC_MASK_BITS) | 70) +#define EC_WORD_ILLUMINATE ((EC_GROUP_STATUS << EC_MASK_BITS) | 71) +#define EC_WORD_EARLY_BIRD ((EC_GROUP_STATUS << EC_MASK_BITS) | 72) +#define EC_WORD_HUSTLE ((EC_GROUP_STATUS << EC_MASK_BITS) | 73) +#define EC_WORD_SHINE ((EC_GROUP_STATUS << EC_MASK_BITS) | 74) +#define EC_WORD_FLYING ((EC_GROUP_STATUS << EC_MASK_BITS) | 75) +#define EC_WORD_DROUGHT ((EC_GROUP_STATUS << EC_MASK_BITS) | 76) +#define EC_WORD_LIGHTNINGROD ((EC_GROUP_STATUS << EC_MASK_BITS) | 77) +#define EC_WORD_COMPOUNDEYES ((EC_GROUP_STATUS << EC_MASK_BITS) | 78) +#define EC_WORD_MARVEL_SCALE ((EC_GROUP_STATUS << EC_MASK_BITS) | 79) +#define EC_WORD_WONDER_GUARD ((EC_GROUP_STATUS << EC_MASK_BITS) | 80) +#define EC_WORD_INSOMNIA ((EC_GROUP_STATUS << EC_MASK_BITS) | 81) +#define EC_WORD_LEVITATE ((EC_GROUP_STATUS << EC_MASK_BITS) | 82) +#define EC_WORD_PLUS ((EC_GROUP_STATUS << EC_MASK_BITS) | 83) +#define EC_WORD_PRESSURE ((EC_GROUP_STATUS << EC_MASK_BITS) | 84) +#define EC_WORD_LIQUID_OOZE ((EC_GROUP_STATUS << EC_MASK_BITS) | 85) +#define EC_WORD_COLOR_CHANGE ((EC_GROUP_STATUS << EC_MASK_BITS) | 86) +#define EC_WORD_SOUNDPROOF ((EC_GROUP_STATUS << EC_MASK_BITS) | 87) +#define EC_WORD_EFFECT_SPORE ((EC_GROUP_STATUS << EC_MASK_BITS) | 88) +#define EC_WORD_PKRS ((EC_GROUP_STATUS << EC_MASK_BITS) | 89) +#define EC_WORD_FIRE ((EC_GROUP_STATUS << EC_MASK_BITS) | 90) +#define EC_WORD_FLAME_BODY ((EC_GROUP_STATUS << EC_MASK_BITS) | 91) +#define EC_WORD_MINUS ((EC_GROUP_STATUS << EC_MASK_BITS) | 92) +#define EC_WORD_OWN_TEMPO ((EC_GROUP_STATUS << EC_MASK_BITS) | 93) +#define EC_WORD_MAGMA_ARMOR ((EC_GROUP_STATUS << EC_MASK_BITS) | 94) +#define EC_WORD_WATER ((EC_GROUP_STATUS << EC_MASK_BITS) | 95) +#define EC_WORD_WATER_VEIL ((EC_GROUP_STATUS << EC_MASK_BITS) | 96) +#define EC_WORD_BUG ((EC_GROUP_STATUS << EC_MASK_BITS) | 97) +#define EC_WORD_SWARM ((EC_GROUP_STATUS << EC_MASK_BITS) | 98) +#define EC_WORD_CUTE_CHARM ((EC_GROUP_STATUS << EC_MASK_BITS) | 99) +#define EC_WORD_IMMUNITY ((EC_GROUP_STATUS << EC_MASK_BITS) | 100) +#define EC_WORD_BLAZE ((EC_GROUP_STATUS << EC_MASK_BITS) | 101) +#define EC_WORD_PICKUP ((EC_GROUP_STATUS << EC_MASK_BITS) | 102) +#define EC_WORD_PATTERN ((EC_GROUP_STATUS << EC_MASK_BITS) | 103) +#define EC_WORD_FLASH_FIRE ((EC_GROUP_STATUS << EC_MASK_BITS) | 104) +#define EC_WORD_VITAL_SPIRIT ((EC_GROUP_STATUS << EC_MASK_BITS) | 105) +#define EC_WORD_CHLOROPHYLL ((EC_GROUP_STATUS << EC_MASK_BITS) | 106) +#define EC_WORD_PURE_POWER ((EC_GROUP_STATUS << EC_MASK_BITS) | 107) +#define EC_WORD_SHIELD_DUST ((EC_GROUP_STATUS << EC_MASK_BITS) | 108) // BATTLE -#define EC_WORD_MATCH_UP (EC_GROUP_BATTLE << 9) | 0x0 -#define EC_WORD_GO (EC_GROUP_BATTLE << 9) | 0x1 -#define EC_WORD_NO_1 (EC_GROUP_BATTLE << 9) | 0x2 -#define EC_WORD_DECIDE (EC_GROUP_BATTLE << 9) | 0x3 -#define EC_WORD_LET_ME_WIN (EC_GROUP_BATTLE << 9) | 0x4 -#define EC_WORD_WINS (EC_GROUP_BATTLE << 9) | 0x5 -#define EC_WORD_WIN (EC_GROUP_BATTLE << 9) | 0x6 -#define EC_WORD_WON (EC_GROUP_BATTLE << 9) | 0x7 -#define EC_WORD_IF_I_WIN (EC_GROUP_BATTLE << 9) | 0x8 -#define EC_WORD_WHEN_I_WIN (EC_GROUP_BATTLE << 9) | 0x9 -#define EC_WORD_CAN_T_WIN (EC_GROUP_BATTLE << 9) | 0xa -#define EC_WORD_CAN_WIN (EC_GROUP_BATTLE << 9) | 0xb -#define EC_WORD_NO_MATCH (EC_GROUP_BATTLE << 9) | 0xc -#define EC_WORD_SPIRIT (EC_GROUP_BATTLE << 9) | 0xd -#define EC_WORD_DECIDED (EC_GROUP_BATTLE << 9) | 0xe -#define EC_WORD_TRUMP_CARD (EC_GROUP_BATTLE << 9) | 0xf -#define EC_WORD_TAKE_THAT (EC_GROUP_BATTLE << 9) | 0x10 -#define EC_WORD_COME_ON (EC_GROUP_BATTLE << 9) | 0x11 -#define EC_WORD_ATTACK (EC_GROUP_BATTLE << 9) | 0x12 -#define EC_WORD_SURRENDER (EC_GROUP_BATTLE << 9) | 0x13 -#define EC_WORD_GUTSY (EC_GROUP_BATTLE << 9) | 0x14 -#define EC_WORD_TALENT (EC_GROUP_BATTLE << 9) | 0x15 -#define EC_WORD_STRATEGY (EC_GROUP_BATTLE << 9) | 0x16 -#define EC_WORD_SMITE (EC_GROUP_BATTLE << 9) | 0x17 -#define EC_WORD_MATCH (EC_GROUP_BATTLE << 9) | 0x18 -#define EC_WORD_VICTORY (EC_GROUP_BATTLE << 9) | 0x19 -#define EC_WORD_OFFENSIVE (EC_GROUP_BATTLE << 9) | 0x1a -#define EC_WORD_SENSE (EC_GROUP_BATTLE << 9) | 0x1b -#define EC_WORD_VERSUS (EC_GROUP_BATTLE << 9) | 0x1c -#define EC_WORD_FIGHTS (EC_GROUP_BATTLE << 9) | 0x1d -#define EC_WORD_POWER (EC_GROUP_BATTLE << 9) | 0x1e -#define EC_WORD_CHALLENGE (EC_GROUP_BATTLE << 9) | 0x1f -#define EC_WORD_STRONG (EC_GROUP_BATTLE << 9) | 0x20 -#define EC_WORD_TOO_STRONG (EC_GROUP_BATTLE << 9) | 0x21 -#define EC_WORD_GO_EASY (EC_GROUP_BATTLE << 9) | 0x22 -#define EC_WORD_FOE (EC_GROUP_BATTLE << 9) | 0x23 -#define EC_WORD_GENIUS (EC_GROUP_BATTLE << 9) | 0x24 -#define EC_WORD_LEGEND (EC_GROUP_BATTLE << 9) | 0x25 -#define EC_WORD_ESCAPE (EC_GROUP_BATTLE << 9) | 0x26 -#define EC_WORD_AIM (EC_GROUP_BATTLE << 9) | 0x27 -#define EC_WORD_BATTLE (EC_GROUP_BATTLE << 9) | 0x28 -#define EC_WORD_FIGHT (EC_GROUP_BATTLE << 9) | 0x29 -#define EC_WORD_RESUSCITATE (EC_GROUP_BATTLE << 9) | 0x2a -#define EC_WORD_POINTS (EC_GROUP_BATTLE << 9) | 0x2b -#define EC_WORD_SERIOUS (EC_GROUP_BATTLE << 9) | 0x2c -#define EC_WORD_GIVE_UP (EC_GROUP_BATTLE << 9) | 0x2d -#define EC_WORD_LOSS (EC_GROUP_BATTLE << 9) | 0x2e -#define EC_WORD_IF_I_LOSE (EC_GROUP_BATTLE << 9) | 0x2f -#define EC_WORD_LOST (EC_GROUP_BATTLE << 9) | 0x30 -#define EC_WORD_LOSE (EC_GROUP_BATTLE << 9) | 0x31 -#define EC_WORD_GUARD (EC_GROUP_BATTLE << 9) | 0x32 -#define EC_WORD_PARTNER (EC_GROUP_BATTLE << 9) | 0x33 -#define EC_WORD_REJECT (EC_GROUP_BATTLE << 9) | 0x34 -#define EC_WORD_ACCEPT (EC_GROUP_BATTLE << 9) | 0x35 -#define EC_WORD_INVINCIBLE (EC_GROUP_BATTLE << 9) | 0x36 -#define EC_WORD_RECEIVED (EC_GROUP_BATTLE << 9) | 0x37 -#define EC_WORD_EASY (EC_GROUP_BATTLE << 9) | 0x38 -#define EC_WORD_WEAK (EC_GROUP_BATTLE << 9) | 0x39 -#define EC_WORD_TOO_WEAK (EC_GROUP_BATTLE << 9) | 0x3a -#define EC_WORD_PUSHOVER (EC_GROUP_BATTLE << 9) | 0x3b -#define EC_WORD_LEADER (EC_GROUP_BATTLE << 9) | 0x3c -#define EC_WORD_RULE (EC_GROUP_BATTLE << 9) | 0x3d -#define EC_WORD_MOVE (EC_GROUP_BATTLE << 9) | 0x3e +#define EC_WORD_MATCH_UP ((EC_GROUP_BATTLE << EC_MASK_BITS) | 0) +#define EC_WORD_GO ((EC_GROUP_BATTLE << EC_MASK_BITS) | 1) +#define EC_WORD_NO_1 ((EC_GROUP_BATTLE << EC_MASK_BITS) | 2) +#define EC_WORD_DECIDE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 3) +#define EC_WORD_LET_ME_WIN ((EC_GROUP_BATTLE << EC_MASK_BITS) | 4) +#define EC_WORD_WINS ((EC_GROUP_BATTLE << EC_MASK_BITS) | 5) +#define EC_WORD_WIN ((EC_GROUP_BATTLE << EC_MASK_BITS) | 6) +#define EC_WORD_WON ((EC_GROUP_BATTLE << EC_MASK_BITS) | 7) +#define EC_WORD_IF_I_WIN ((EC_GROUP_BATTLE << EC_MASK_BITS) | 8) +#define EC_WORD_WHEN_I_WIN ((EC_GROUP_BATTLE << EC_MASK_BITS) | 9) +#define EC_WORD_CAN_T_WIN ((EC_GROUP_BATTLE << EC_MASK_BITS) | 10) +#define EC_WORD_CAN_WIN ((EC_GROUP_BATTLE << EC_MASK_BITS) | 11) +#define EC_WORD_NO_MATCH ((EC_GROUP_BATTLE << EC_MASK_BITS) | 12) +#define EC_WORD_SPIRIT ((EC_GROUP_BATTLE << EC_MASK_BITS) | 13) +#define EC_WORD_DECIDED ((EC_GROUP_BATTLE << EC_MASK_BITS) | 14) +#define EC_WORD_TRUMP_CARD ((EC_GROUP_BATTLE << EC_MASK_BITS) | 15) +#define EC_WORD_TAKE_THAT ((EC_GROUP_BATTLE << EC_MASK_BITS) | 16) +#define EC_WORD_COME_ON ((EC_GROUP_BATTLE << EC_MASK_BITS) | 17) +#define EC_WORD_ATTACK ((EC_GROUP_BATTLE << EC_MASK_BITS) | 18) +#define EC_WORD_SURRENDER ((EC_GROUP_BATTLE << EC_MASK_BITS) | 19) +#define EC_WORD_GUTSY ((EC_GROUP_BATTLE << EC_MASK_BITS) | 20) +#define EC_WORD_TALENT ((EC_GROUP_BATTLE << EC_MASK_BITS) | 21) +#define EC_WORD_STRATEGY ((EC_GROUP_BATTLE << EC_MASK_BITS) | 22) +#define EC_WORD_SMITE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 23) +#define EC_WORD_MATCH ((EC_GROUP_BATTLE << EC_MASK_BITS) | 24) +#define EC_WORD_VICTORY ((EC_GROUP_BATTLE << EC_MASK_BITS) | 25) +#define EC_WORD_OFFENSIVE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 26) +#define EC_WORD_SENSE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 27) +#define EC_WORD_VERSUS ((EC_GROUP_BATTLE << EC_MASK_BITS) | 28) +#define EC_WORD_FIGHTS ((EC_GROUP_BATTLE << EC_MASK_BITS) | 29) +#define EC_WORD_POWER ((EC_GROUP_BATTLE << EC_MASK_BITS) | 30) +#define EC_WORD_CHALLENGE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 31) +#define EC_WORD_STRONG ((EC_GROUP_BATTLE << EC_MASK_BITS) | 32) +#define EC_WORD_TOO_STRONG ((EC_GROUP_BATTLE << EC_MASK_BITS) | 33) +#define EC_WORD_GO_EASY ((EC_GROUP_BATTLE << EC_MASK_BITS) | 34) +#define EC_WORD_FOE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 35) +#define EC_WORD_GENIUS ((EC_GROUP_BATTLE << EC_MASK_BITS) | 36) +#define EC_WORD_LEGEND ((EC_GROUP_BATTLE << EC_MASK_BITS) | 37) +#define EC_WORD_ESCAPE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 38) +#define EC_WORD_AIM ((EC_GROUP_BATTLE << EC_MASK_BITS) | 39) +#define EC_WORD_BATTLE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 40) +#define EC_WORD_FIGHT ((EC_GROUP_BATTLE << EC_MASK_BITS) | 41) +#define EC_WORD_RESUSCITATE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 42) +#define EC_WORD_POINTS ((EC_GROUP_BATTLE << EC_MASK_BITS) | 43) +#define EC_WORD_SERIOUS ((EC_GROUP_BATTLE << EC_MASK_BITS) | 44) +#define EC_WORD_GIVE_UP ((EC_GROUP_BATTLE << EC_MASK_BITS) | 45) +#define EC_WORD_LOSS ((EC_GROUP_BATTLE << EC_MASK_BITS) | 46) +#define EC_WORD_IF_I_LOSE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 47) +#define EC_WORD_LOST ((EC_GROUP_BATTLE << EC_MASK_BITS) | 48) +#define EC_WORD_LOSE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 49) +#define EC_WORD_GUARD ((EC_GROUP_BATTLE << EC_MASK_BITS) | 50) +#define EC_WORD_PARTNER ((EC_GROUP_BATTLE << EC_MASK_BITS) | 51) +#define EC_WORD_REJECT ((EC_GROUP_BATTLE << EC_MASK_BITS) | 52) +#define EC_WORD_ACCEPT ((EC_GROUP_BATTLE << EC_MASK_BITS) | 53) +#define EC_WORD_INVINCIBLE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 54) +#define EC_WORD_RECEIVED ((EC_GROUP_BATTLE << EC_MASK_BITS) | 55) +#define EC_WORD_EASY ((EC_GROUP_BATTLE << EC_MASK_BITS) | 56) +#define EC_WORD_WEAK ((EC_GROUP_BATTLE << EC_MASK_BITS) | 57) +#define EC_WORD_TOO_WEAK ((EC_GROUP_BATTLE << EC_MASK_BITS) | 58) +#define EC_WORD_PUSHOVER ((EC_GROUP_BATTLE << EC_MASK_BITS) | 59) +#define EC_WORD_LEADER ((EC_GROUP_BATTLE << EC_MASK_BITS) | 60) +#define EC_WORD_RULE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 61) +#define EC_WORD_MOVE ((EC_GROUP_BATTLE << EC_MASK_BITS) | 62) // GREETINGS -#define EC_WORD_THANKS (EC_GROUP_GREETINGS << 9) | 0x0 -#define EC_WORD_YES (EC_GROUP_GREETINGS << 9) | 0x1 -#define EC_WORD_HERE_GOES (EC_GROUP_GREETINGS << 9) | 0x2 -#define EC_WORD_HERE_I_COME (EC_GROUP_GREETINGS << 9) | 0x3 -#define EC_WORD_HERE_IT_IS (EC_GROUP_GREETINGS << 9) | 0x4 -#define EC_WORD_YEAH (EC_GROUP_GREETINGS << 9) | 0x5 -#define EC_WORD_WELCOME (EC_GROUP_GREETINGS << 9) | 0x6 -#define EC_WORD_OI (EC_GROUP_GREETINGS << 9) | 0x7 -#define EC_WORD_HOW_DO (EC_GROUP_GREETINGS << 9) | 0x8 -#define EC_WORD_CONGRATS (EC_GROUP_GREETINGS << 9) | 0x9 -#define EC_WORD_GIVE_ME (EC_GROUP_GREETINGS << 9) | 0xa -#define EC_WORD_SORRY (EC_GROUP_GREETINGS << 9) | 0xb -#define EC_WORD_APOLOGIZE (EC_GROUP_GREETINGS << 9) | 0xc -#define EC_WORD_FORGIVE (EC_GROUP_GREETINGS << 9) | 0xd -#define EC_WORD_HEY_THERE (EC_GROUP_GREETINGS << 9) | 0xe -#define EC_WORD_HELLO (EC_GROUP_GREETINGS << 9) | 0xf -#define EC_WORD_GOOD_BYE (EC_GROUP_GREETINGS << 9) | 0x10 -#define EC_WORD_THANK_YOU (EC_GROUP_GREETINGS << 9) | 0x11 -#define EC_WORD_I_VE_ARRIVED (EC_GROUP_GREETINGS << 9) | 0x12 -#define EC_WORD_PARDON (EC_GROUP_GREETINGS << 9) | 0x13 -#define EC_WORD_EXCUSE (EC_GROUP_GREETINGS << 9) | 0x14 -#define EC_WORD_SEE_YA (EC_GROUP_GREETINGS << 9) | 0x15 -#define EC_WORD_EXCUSE_ME (EC_GROUP_GREETINGS << 9) | 0x16 -#define EC_WORD_WELL_THEN (EC_GROUP_GREETINGS << 9) | 0x17 -#define EC_WORD_GO_AHEAD (EC_GROUP_GREETINGS << 9) | 0x18 -#define EC_WORD_APPRECIATE (EC_GROUP_GREETINGS << 9) | 0x19 -#define EC_WORD_HEY_QUES (EC_GROUP_GREETINGS << 9) | 0x1a -#define EC_WORD_WHAT_S_UP_QUES (EC_GROUP_GREETINGS << 9) | 0x1b -#define EC_WORD_HUH_QUES (EC_GROUP_GREETINGS << 9) | 0x1c -#define EC_WORD_NO (EC_GROUP_GREETINGS << 9) | 0x1d -#define EC_WORD_HI (EC_GROUP_GREETINGS << 9) | 0x1e -#define EC_WORD_YEAH_YEAH (EC_GROUP_GREETINGS << 9) | 0x1f -#define EC_WORD_BYE_BYE (EC_GROUP_GREETINGS << 9) | 0x20 -#define EC_WORD_MEET_YOU (EC_GROUP_GREETINGS << 9) | 0x21 -#define EC_WORD_HEY (EC_GROUP_GREETINGS << 9) | 0x22 -#define EC_WORD_SMELL (EC_GROUP_GREETINGS << 9) | 0x23 -#define EC_WORD_LISTENING (EC_GROUP_GREETINGS << 9) | 0x24 -#define EC_WORD_HOO_HAH (EC_GROUP_GREETINGS << 9) | 0x25 -#define EC_WORD_YAHOO (EC_GROUP_GREETINGS << 9) | 0x26 -#define EC_WORD_YO (EC_GROUP_GREETINGS << 9) | 0x27 -#define EC_WORD_COME_OVER (EC_GROUP_GREETINGS << 9) | 0x28 -#define EC_WORD_COUNT_ON (EC_GROUP_GREETINGS << 9) | 0x29 +#define EC_WORD_THANKS ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 0) +#define EC_WORD_YES ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 1) +#define EC_WORD_HERE_GOES ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 2) +#define EC_WORD_HERE_I_COME ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 3) +#define EC_WORD_HERE_IT_IS ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 4) +#define EC_WORD_YEAH ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 5) +#define EC_WORD_WELCOME ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 6) +#define EC_WORD_OI ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 7) +#define EC_WORD_HOW_DO ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 8) +#define EC_WORD_CONGRATS ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 9) +#define EC_WORD_GIVE_ME ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 10) +#define EC_WORD_SORRY ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 11) +#define EC_WORD_APOLOGIZE ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 12) +#define EC_WORD_FORGIVE ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 13) +#define EC_WORD_HEY_THERE ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 14) +#define EC_WORD_HELLO ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 15) +#define EC_WORD_GOOD_BYE ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 16) +#define EC_WORD_THANK_YOU ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 17) +#define EC_WORD_I_VE_ARRIVED ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 18) +#define EC_WORD_PARDON ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 19) +#define EC_WORD_EXCUSE ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 20) +#define EC_WORD_SEE_YA ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 21) +#define EC_WORD_EXCUSE_ME ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 22) +#define EC_WORD_WELL_THEN ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 23) +#define EC_WORD_GO_AHEAD ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 24) +#define EC_WORD_APPRECIATE ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 25) +#define EC_WORD_HEY_QUES ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 26) +#define EC_WORD_WHAT_S_UP_QUES ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 27) +#define EC_WORD_HUH_QUES ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 28) +#define EC_WORD_NO ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 29) +#define EC_WORD_HI ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 30) +#define EC_WORD_YEAH_YEAH ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 31) +#define EC_WORD_BYE_BYE ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 32) +#define EC_WORD_MEET_YOU ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 33) +#define EC_WORD_HEY ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 34) +#define EC_WORD_SMELL ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 35) +#define EC_WORD_LISTENING ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 36) +#define EC_WORD_HOO_HAH ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 37) +#define EC_WORD_YAHOO ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 38) +#define EC_WORD_YO ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 39) +#define EC_WORD_COME_OVER ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 40) +#define EC_WORD_COUNT_ON ((EC_GROUP_GREETINGS << EC_MASK_BITS) | 41) // PEOPLE -#define EC_WORD_OPPONENT (EC_GROUP_PEOPLE << 9) | 0x0 -#define EC_WORD_I (EC_GROUP_PEOPLE << 9) | 0x1 -#define EC_WORD_YOU (EC_GROUP_PEOPLE << 9) | 0x2 -#define EC_WORD_YOURS (EC_GROUP_PEOPLE << 9) | 0x3 -#define EC_WORD_SON (EC_GROUP_PEOPLE << 9) | 0x4 -#define EC_WORD_YOUR (EC_GROUP_PEOPLE << 9) | 0x5 -#define EC_WORD_YOU_RE (EC_GROUP_PEOPLE << 9) | 0x6 -#define EC_WORD_YOU_VE (EC_GROUP_PEOPLE << 9) | 0x7 -#define EC_WORD_MOTHER (EC_GROUP_PEOPLE << 9) | 0x8 -#define EC_WORD_GRANDFATHER (EC_GROUP_PEOPLE << 9) | 0x9 -#define EC_WORD_UNCLE (EC_GROUP_PEOPLE << 9) | 0xa -#define EC_WORD_FATHER (EC_GROUP_PEOPLE << 9) | 0xb -#define EC_WORD_BOY (EC_GROUP_PEOPLE << 9) | 0xc -#define EC_WORD_ADULT (EC_GROUP_PEOPLE << 9) | 0xd -#define EC_WORD_BROTHER (EC_GROUP_PEOPLE << 9) | 0xe -#define EC_WORD_SISTER (EC_GROUP_PEOPLE << 9) | 0xf -#define EC_WORD_GRANDMOTHER (EC_GROUP_PEOPLE << 9) | 0x10 -#define EC_WORD_AUNT (EC_GROUP_PEOPLE << 9) | 0x11 -#define EC_WORD_PARENT (EC_GROUP_PEOPLE << 9) | 0x12 -#define EC_WORD_MAN (EC_GROUP_PEOPLE << 9) | 0x13 -#define EC_WORD_ME (EC_GROUP_PEOPLE << 9) | 0x14 -#define EC_WORD_GIRL (EC_GROUP_PEOPLE << 9) | 0x15 -#define EC_WORD_BABE (EC_GROUP_PEOPLE << 9) | 0x16 -#define EC_WORD_FAMILY (EC_GROUP_PEOPLE << 9) | 0x17 -#define EC_WORD_HER (EC_GROUP_PEOPLE << 9) | 0x18 -#define EC_WORD_HIM (EC_GROUP_PEOPLE << 9) | 0x19 -#define EC_WORD_HE (EC_GROUP_PEOPLE << 9) | 0x1a -#define EC_WORD_PLACE (EC_GROUP_PEOPLE << 9) | 0x1b -#define EC_WORD_DAUGHTER (EC_GROUP_PEOPLE << 9) | 0x1c -#define EC_WORD_HIS (EC_GROUP_PEOPLE << 9) | 0x1d -#define EC_WORD_HE_S (EC_GROUP_PEOPLE << 9) | 0x1e -#define EC_WORD_AREN_T (EC_GROUP_PEOPLE << 9) | 0x1f -#define EC_WORD_SIBLINGS (EC_GROUP_PEOPLE << 9) | 0x20 -#define EC_WORD_KID (EC_GROUP_PEOPLE << 9) | 0x21 -#define EC_WORD_CHILDREN (EC_GROUP_PEOPLE << 9) | 0x22 -#define EC_WORD_MR (EC_GROUP_PEOPLE << 9) | 0x23 -#define EC_WORD_MRS (EC_GROUP_PEOPLE << 9) | 0x24 -#define EC_WORD_MYSELF (EC_GROUP_PEOPLE << 9) | 0x25 -#define EC_WORD_I_WAS (EC_GROUP_PEOPLE << 9) | 0x26 -#define EC_WORD_TO_ME (EC_GROUP_PEOPLE << 9) | 0x27 -#define EC_WORD_MY (EC_GROUP_PEOPLE << 9) | 0x28 -#define EC_WORD_I_AM (EC_GROUP_PEOPLE << 9) | 0x29 -#define EC_WORD_I_VE (EC_GROUP_PEOPLE << 9) | 0x2a -#define EC_WORD_WHO (EC_GROUP_PEOPLE << 9) | 0x2b -#define EC_WORD_SOMEONE (EC_GROUP_PEOPLE << 9) | 0x2c -#define EC_WORD_WHO_WAS (EC_GROUP_PEOPLE << 9) | 0x2d -#define EC_WORD_TO_WHOM (EC_GROUP_PEOPLE << 9) | 0x2e -#define EC_WORD_WHOSE (EC_GROUP_PEOPLE << 9) | 0x2f -#define EC_WORD_WHO_IS (EC_GROUP_PEOPLE << 9) | 0x30 -#define EC_WORD_IT_S (EC_GROUP_PEOPLE << 9) | 0x31 -#define EC_WORD_LADY (EC_GROUP_PEOPLE << 9) | 0x32 -#define EC_WORD_FRIEND (EC_GROUP_PEOPLE << 9) | 0x33 -#define EC_WORD_ALLY (EC_GROUP_PEOPLE << 9) | 0x34 -#define EC_WORD_PERSON (EC_GROUP_PEOPLE << 9) | 0x35 -#define EC_WORD_DUDE (EC_GROUP_PEOPLE << 9) | 0x36 -#define EC_WORD_THEY (EC_GROUP_PEOPLE << 9) | 0x37 -#define EC_WORD_THEY_WERE (EC_GROUP_PEOPLE << 9) | 0x38 -#define EC_WORD_TO_THEM (EC_GROUP_PEOPLE << 9) | 0x39 -#define EC_WORD_THEIR (EC_GROUP_PEOPLE << 9) | 0x3a -#define EC_WORD_THEY_RE (EC_GROUP_PEOPLE << 9) | 0x3b -#define EC_WORD_THEY_VE (EC_GROUP_PEOPLE << 9) | 0x3c -#define EC_WORD_WE (EC_GROUP_PEOPLE << 9) | 0x3d -#define EC_WORD_BEEN (EC_GROUP_PEOPLE << 9) | 0x3e -#define EC_WORD_TO_US (EC_GROUP_PEOPLE << 9) | 0x3f -#define EC_WORD_OUR (EC_GROUP_PEOPLE << 9) | 0x40 -#define EC_WORD_WE_RE (EC_GROUP_PEOPLE << 9) | 0x41 -#define EC_WORD_RIVAL (EC_GROUP_PEOPLE << 9) | 0x42 -#define EC_WORD_WE_VE (EC_GROUP_PEOPLE << 9) | 0x43 -#define EC_WORD_WOMAN (EC_GROUP_PEOPLE << 9) | 0x44 -#define EC_WORD_SHE (EC_GROUP_PEOPLE << 9) | 0x45 -#define EC_WORD_SHE_WAS (EC_GROUP_PEOPLE << 9) | 0x46 -#define EC_WORD_TO_HER (EC_GROUP_PEOPLE << 9) | 0x47 -#define EC_WORD_HERS (EC_GROUP_PEOPLE << 9) | 0x48 -#define EC_WORD_SHE_IS (EC_GROUP_PEOPLE << 9) | 0x49 -#define EC_WORD_SOME (EC_GROUP_PEOPLE << 9) | 0x4a +#define EC_WORD_OPPONENT ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 0) +#define EC_WORD_I ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 1) +#define EC_WORD_YOU ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 2) +#define EC_WORD_YOURS ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 3) +#define EC_WORD_SON ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 4) +#define EC_WORD_YOUR ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 5) +#define EC_WORD_YOU_RE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 6) +#define EC_WORD_YOU_VE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 7) +#define EC_WORD_MOTHER ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 8) +#define EC_WORD_GRANDFATHER ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 9) +#define EC_WORD_UNCLE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 10) +#define EC_WORD_FATHER ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 11) +#define EC_WORD_BOY ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 12) +#define EC_WORD_ADULT ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 13) +#define EC_WORD_BROTHER ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 14) +#define EC_WORD_SISTER ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 15) +#define EC_WORD_GRANDMOTHER ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 16) +#define EC_WORD_AUNT ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 17) +#define EC_WORD_PARENT ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 18) +#define EC_WORD_MAN ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 19) +#define EC_WORD_ME ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 20) +#define EC_WORD_GIRL ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 21) +#define EC_WORD_BABE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 22) +#define EC_WORD_FAMILY ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 23) +#define EC_WORD_HER ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 24) +#define EC_WORD_HIM ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 25) +#define EC_WORD_HE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 26) +#define EC_WORD_PLACE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 27) +#define EC_WORD_DAUGHTER ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 28) +#define EC_WORD_HIS ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 29) +#define EC_WORD_HE_S ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 30) +#define EC_WORD_AREN_T ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 31) +#define EC_WORD_SIBLINGS ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 32) +#define EC_WORD_KID ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 33) +#define EC_WORD_CHILDREN ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 34) +#define EC_WORD_MR ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 35) +#define EC_WORD_MRS ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 36) +#define EC_WORD_MYSELF ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 37) +#define EC_WORD_I_WAS ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 38) +#define EC_WORD_TO_ME ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 39) +#define EC_WORD_MY ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 40) +#define EC_WORD_I_AM ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 41) +#define EC_WORD_I_VE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 42) +#define EC_WORD_WHO ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 43) +#define EC_WORD_SOMEONE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 44) +#define EC_WORD_WHO_WAS ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 45) +#define EC_WORD_TO_WHOM ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 46) +#define EC_WORD_WHOSE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 47) +#define EC_WORD_WHO_IS ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 48) +#define EC_WORD_IT_S ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 49) +#define EC_WORD_LADY ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 50) +#define EC_WORD_FRIEND ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 51) +#define EC_WORD_ALLY ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 52) +#define EC_WORD_PERSON ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 53) +#define EC_WORD_DUDE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 54) +#define EC_WORD_THEY ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 55) +#define EC_WORD_THEY_WERE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 56) +#define EC_WORD_TO_THEM ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 57) +#define EC_WORD_THEIR ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 58) +#define EC_WORD_THEY_RE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 59) +#define EC_WORD_THEY_VE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 60) +#define EC_WORD_WE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 61) +#define EC_WORD_BEEN ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 62) +#define EC_WORD_TO_US ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 63) +#define EC_WORD_OUR ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 64) +#define EC_WORD_WE_RE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 65) +#define EC_WORD_RIVAL ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 66) +#define EC_WORD_WE_VE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 67) +#define EC_WORD_WOMAN ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 68) +#define EC_WORD_SHE ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 69) +#define EC_WORD_SHE_WAS ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 70) +#define EC_WORD_TO_HER ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 71) +#define EC_WORD_HERS ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 72) +#define EC_WORD_SHE_IS ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 73) +#define EC_WORD_SOME ((EC_GROUP_PEOPLE << EC_MASK_BITS) | 74) // VOICES -#define EC_WORD_EXCL (EC_GROUP_VOICES << 9) | 0x0 -#define EC_WORD_EXCL_EXCL (EC_GROUP_VOICES << 9) | 0x1 -#define EC_WORD_QUES_EXCL (EC_GROUP_VOICES << 9) | 0x2 -#define EC_WORD_QUES (EC_GROUP_VOICES << 9) | 0x3 -#define EC_WORD_ELLIPSIS (EC_GROUP_VOICES << 9) | 0x4 -#define EC_WORD_ELLIPSIS_EXCL (EC_GROUP_VOICES << 9) | 0x5 -#define EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS (EC_GROUP_VOICES << 9) | 0x6 -#define EC_WORD_DASH (EC_GROUP_VOICES << 9) | 0x7 -#define EC_WORD_DASH_DASH_DASH (EC_GROUP_VOICES << 9) | 0x8 -#define EC_WORD_UH_OH (EC_GROUP_VOICES << 9) | 0x9 -#define EC_WORD_WAAAH (EC_GROUP_VOICES << 9) | 0xa -#define EC_WORD_AHAHA (EC_GROUP_VOICES << 9) | 0xb -#define EC_WORD_OH_QUES (EC_GROUP_VOICES << 9) | 0xc -#define EC_WORD_NOPE (EC_GROUP_VOICES << 9) | 0xd -#define EC_WORD_URGH (EC_GROUP_VOICES << 9) | 0xe -#define EC_WORD_HMM (EC_GROUP_VOICES << 9) | 0xf -#define EC_WORD_WHOAH (EC_GROUP_VOICES << 9) | 0x10 -#define EC_WORD_WROOOAAR_EXCL (EC_GROUP_VOICES << 9) | 0x11 -#define EC_WORD_WOW (EC_GROUP_VOICES << 9) | 0x12 -#define EC_WORD_GIGGLE (EC_GROUP_VOICES << 9) | 0x13 -#define EC_WORD_SIGH (EC_GROUP_VOICES << 9) | 0x14 -#define EC_WORD_UNBELIEVABLE (EC_GROUP_VOICES << 9) | 0x15 -#define EC_WORD_CRIES (EC_GROUP_VOICES << 9) | 0x16 -#define EC_WORD_AGREE (EC_GROUP_VOICES << 9) | 0x17 -#define EC_WORD_EH_QUES (EC_GROUP_VOICES << 9) | 0x18 -#define EC_WORD_CRY (EC_GROUP_VOICES << 9) | 0x19 -#define EC_WORD_EHEHE (EC_GROUP_VOICES << 9) | 0x1a -#define EC_WORD_OI_OI_OI (EC_GROUP_VOICES << 9) | 0x1b -#define EC_WORD_OH_YEAH (EC_GROUP_VOICES << 9) | 0x1c -#define EC_WORD_OH (EC_GROUP_VOICES << 9) | 0x1d -#define EC_WORD_OOPS (EC_GROUP_VOICES << 9) | 0x1e -#define EC_WORD_SHOCKED (EC_GROUP_VOICES << 9) | 0x1f -#define EC_WORD_EEK (EC_GROUP_VOICES << 9) | 0x20 -#define EC_WORD_GRAAAH (EC_GROUP_VOICES << 9) | 0x21 -#define EC_WORD_GWAHAHAHA (EC_GROUP_VOICES << 9) | 0x22 -#define EC_WORD_WAY (EC_GROUP_VOICES << 9) | 0x23 -#define EC_WORD_TCH (EC_GROUP_VOICES << 9) | 0x24 -#define EC_WORD_HEHE (EC_GROUP_VOICES << 9) | 0x25 -#define EC_WORD_HAH (EC_GROUP_VOICES << 9) | 0x26 -#define EC_WORD_YUP (EC_GROUP_VOICES << 9) | 0x27 -#define EC_WORD_HAHAHA (EC_GROUP_VOICES << 9) | 0x28 -#define EC_WORD_AIYEEH (EC_GROUP_VOICES << 9) | 0x29 -#define EC_WORD_HIYAH (EC_GROUP_VOICES << 9) | 0x2a -#define EC_WORD_FUFUFU (EC_GROUP_VOICES << 9) | 0x2b -#define EC_WORD_LOL (EC_GROUP_VOICES << 9) | 0x2c -#define EC_WORD_SNORT (EC_GROUP_VOICES << 9) | 0x2d -#define EC_WORD_HUMPH (EC_GROUP_VOICES << 9) | 0x2e -#define EC_WORD_HEHEHE (EC_GROUP_VOICES << 9) | 0x2f -#define EC_WORD_HEH (EC_GROUP_VOICES << 9) | 0x30 -#define EC_WORD_HOHOHO (EC_GROUP_VOICES << 9) | 0x31 -#define EC_WORD_UH_HUH (EC_GROUP_VOICES << 9) | 0x32 -#define EC_WORD_OH_DEAR (EC_GROUP_VOICES << 9) | 0x33 -#define EC_WORD_ARRGH (EC_GROUP_VOICES << 9) | 0x34 -#define EC_WORD_MUFUFU (EC_GROUP_VOICES << 9) | 0x35 -#define EC_WORD_MMM (EC_GROUP_VOICES << 9) | 0x36 -#define EC_WORD_OH_KAY (EC_GROUP_VOICES << 9) | 0x37 -#define EC_WORD_OKAY (EC_GROUP_VOICES << 9) | 0x38 -#define EC_WORD_LALALA (EC_GROUP_VOICES << 9) | 0x39 -#define EC_WORD_YAY (EC_GROUP_VOICES << 9) | 0x3a -#define EC_WORD_AWW (EC_GROUP_VOICES << 9) | 0x3b -#define EC_WORD_WOWEE (EC_GROUP_VOICES << 9) | 0x3c -#define EC_WORD_GWAH (EC_GROUP_VOICES << 9) | 0x3d -#define EC_WORD_WAHAHAHA (EC_GROUP_VOICES << 9) | 0x3e +#define EC_WORD_EXCL ((EC_GROUP_VOICES << EC_MASK_BITS) | 0) +#define EC_WORD_EXCL_EXCL ((EC_GROUP_VOICES << EC_MASK_BITS) | 1) +#define EC_WORD_QUES_EXCL ((EC_GROUP_VOICES << EC_MASK_BITS) | 2) +#define EC_WORD_QUES ((EC_GROUP_VOICES << EC_MASK_BITS) | 3) +#define EC_WORD_ELLIPSIS ((EC_GROUP_VOICES << EC_MASK_BITS) | 4) +#define EC_WORD_ELLIPSIS_EXCL ((EC_GROUP_VOICES << EC_MASK_BITS) | 5) +#define EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS ((EC_GROUP_VOICES << EC_MASK_BITS) | 6) +#define EC_WORD_DASH ((EC_GROUP_VOICES << EC_MASK_BITS) | 7) +#define EC_WORD_DASH_DASH_DASH ((EC_GROUP_VOICES << EC_MASK_BITS) | 8) +#define EC_WORD_UH_OH ((EC_GROUP_VOICES << EC_MASK_BITS) | 9) +#define EC_WORD_WAAAH ((EC_GROUP_VOICES << EC_MASK_BITS) | 10) +#define EC_WORD_AHAHA ((EC_GROUP_VOICES << EC_MASK_BITS) | 11) +#define EC_WORD_OH_QUES ((EC_GROUP_VOICES << EC_MASK_BITS) | 12) +#define EC_WORD_NOPE ((EC_GROUP_VOICES << EC_MASK_BITS) | 13) +#define EC_WORD_URGH ((EC_GROUP_VOICES << EC_MASK_BITS) | 14) +#define EC_WORD_HMM ((EC_GROUP_VOICES << EC_MASK_BITS) | 15) +#define EC_WORD_WHOAH ((EC_GROUP_VOICES << EC_MASK_BITS) | 16) +#define EC_WORD_WROOOAAR_EXCL ((EC_GROUP_VOICES << EC_MASK_BITS) | 17) +#define EC_WORD_WOW ((EC_GROUP_VOICES << EC_MASK_BITS) | 18) +#define EC_WORD_GIGGLE ((EC_GROUP_VOICES << EC_MASK_BITS) | 19) +#define EC_WORD_SIGH ((EC_GROUP_VOICES << EC_MASK_BITS) | 20) +#define EC_WORD_UNBELIEVABLE ((EC_GROUP_VOICES << EC_MASK_BITS) | 21) +#define EC_WORD_CRIES ((EC_GROUP_VOICES << EC_MASK_BITS) | 22) +#define EC_WORD_AGREE ((EC_GROUP_VOICES << EC_MASK_BITS) | 23) +#define EC_WORD_EH_QUES ((EC_GROUP_VOICES << EC_MASK_BITS) | 24) +#define EC_WORD_CRY ((EC_GROUP_VOICES << EC_MASK_BITS) | 25) +#define EC_WORD_EHEHE ((EC_GROUP_VOICES << EC_MASK_BITS) | 26) +#define EC_WORD_OI_OI_OI ((EC_GROUP_VOICES << EC_MASK_BITS) | 27) +#define EC_WORD_OH_YEAH ((EC_GROUP_VOICES << EC_MASK_BITS) | 28) +#define EC_WORD_OH ((EC_GROUP_VOICES << EC_MASK_BITS) | 29) +#define EC_WORD_OOPS ((EC_GROUP_VOICES << EC_MASK_BITS) | 30) +#define EC_WORD_SHOCKED ((EC_GROUP_VOICES << EC_MASK_BITS) | 31) +#define EC_WORD_EEK ((EC_GROUP_VOICES << EC_MASK_BITS) | 32) +#define EC_WORD_GRAAAH ((EC_GROUP_VOICES << EC_MASK_BITS) | 33) +#define EC_WORD_GWAHAHAHA ((EC_GROUP_VOICES << EC_MASK_BITS) | 34) +#define EC_WORD_WAY ((EC_GROUP_VOICES << EC_MASK_BITS) | 35) +#define EC_WORD_TCH ((EC_GROUP_VOICES << EC_MASK_BITS) | 36) +#define EC_WORD_HEHE ((EC_GROUP_VOICES << EC_MASK_BITS) | 37) +#define EC_WORD_HAH ((EC_GROUP_VOICES << EC_MASK_BITS) | 38) +#define EC_WORD_YUP ((EC_GROUP_VOICES << EC_MASK_BITS) | 39) +#define EC_WORD_HAHAHA ((EC_GROUP_VOICES << EC_MASK_BITS) | 40) +#define EC_WORD_AIYEEH ((EC_GROUP_VOICES << EC_MASK_BITS) | 41) +#define EC_WORD_HIYAH ((EC_GROUP_VOICES << EC_MASK_BITS) | 42) +#define EC_WORD_FUFUFU ((EC_GROUP_VOICES << EC_MASK_BITS) | 43) +#define EC_WORD_LOL ((EC_GROUP_VOICES << EC_MASK_BITS) | 44) +#define EC_WORD_SNORT ((EC_GROUP_VOICES << EC_MASK_BITS) | 45) +#define EC_WORD_HUMPH ((EC_GROUP_VOICES << EC_MASK_BITS) | 46) +#define EC_WORD_HEHEHE ((EC_GROUP_VOICES << EC_MASK_BITS) | 47) +#define EC_WORD_HEH ((EC_GROUP_VOICES << EC_MASK_BITS) | 48) +#define EC_WORD_HOHOHO ((EC_GROUP_VOICES << EC_MASK_BITS) | 49) +#define EC_WORD_UH_HUH ((EC_GROUP_VOICES << EC_MASK_BITS) | 50) +#define EC_WORD_OH_DEAR ((EC_GROUP_VOICES << EC_MASK_BITS) | 51) +#define EC_WORD_ARRGH ((EC_GROUP_VOICES << EC_MASK_BITS) | 52) +#define EC_WORD_MUFUFU ((EC_GROUP_VOICES << EC_MASK_BITS) | 53) +#define EC_WORD_MMM ((EC_GROUP_VOICES << EC_MASK_BITS) | 54) +#define EC_WORD_OH_KAY ((EC_GROUP_VOICES << EC_MASK_BITS) | 55) +#define EC_WORD_OKAY ((EC_GROUP_VOICES << EC_MASK_BITS) | 56) +#define EC_WORD_LALALA ((EC_GROUP_VOICES << EC_MASK_BITS) | 57) +#define EC_WORD_YAY ((EC_GROUP_VOICES << EC_MASK_BITS) | 58) +#define EC_WORD_AWW ((EC_GROUP_VOICES << EC_MASK_BITS) | 59) +#define EC_WORD_WOWEE ((EC_GROUP_VOICES << EC_MASK_BITS) | 60) +#define EC_WORD_GWAH ((EC_GROUP_VOICES << EC_MASK_BITS) | 61) +#define EC_WORD_WAHAHAHA ((EC_GROUP_VOICES << EC_MASK_BITS) | 62) // SPEECH -#define EC_WORD_LISTEN (EC_GROUP_SPEECH << 9) | 0x0 -#define EC_WORD_NOT_VERY (EC_GROUP_SPEECH << 9) | 0x1 -#define EC_WORD_MEAN (EC_GROUP_SPEECH << 9) | 0x2 -#define EC_WORD_LIE (EC_GROUP_SPEECH << 9) | 0x3 -#define EC_WORD_LAY (EC_GROUP_SPEECH << 9) | 0x4 -#define EC_WORD_RECOMMEND (EC_GROUP_SPEECH << 9) | 0x5 -#define EC_WORD_NITWIT (EC_GROUP_SPEECH << 9) | 0x6 -#define EC_WORD_QUITE (EC_GROUP_SPEECH << 9) | 0x7 -#define EC_WORD_FROM (EC_GROUP_SPEECH << 9) | 0x8 -#define EC_WORD_FEELING (EC_GROUP_SPEECH << 9) | 0x9 -#define EC_WORD_BUT (EC_GROUP_SPEECH << 9) | 0xa -#define EC_WORD_HOWEVER (EC_GROUP_SPEECH << 9) | 0xb -#define EC_WORD_CASE (EC_GROUP_SPEECH << 9) | 0xc -#define EC_WORD_THE (EC_GROUP_SPEECH << 9) | 0xd -#define EC_WORD_MISS (EC_GROUP_SPEECH << 9) | 0xe -#define EC_WORD_HOW (EC_GROUP_SPEECH << 9) | 0xf -#define EC_WORD_HIT (EC_GROUP_SPEECH << 9) | 0x10 -#define EC_WORD_ENOUGH (EC_GROUP_SPEECH << 9) | 0x11 -#define EC_WORD_A_LOT (EC_GROUP_SPEECH << 9) | 0x12 -#define EC_WORD_A_LITTLE (EC_GROUP_SPEECH << 9) | 0x13 -#define EC_WORD_ABSOLUTELY (EC_GROUP_SPEECH << 9) | 0x14 -#define EC_WORD_AND (EC_GROUP_SPEECH << 9) | 0x15 -#define EC_WORD_ONLY (EC_GROUP_SPEECH << 9) | 0x16 -#define EC_WORD_AROUND (EC_GROUP_SPEECH << 9) | 0x17 -#define EC_WORD_PROBABLY (EC_GROUP_SPEECH << 9) | 0x18 -#define EC_WORD_IF (EC_GROUP_SPEECH << 9) | 0x19 -#define EC_WORD_VERY (EC_GROUP_SPEECH << 9) | 0x1a -#define EC_WORD_A_TINY_BIT (EC_GROUP_SPEECH << 9) | 0x1b -#define EC_WORD_WILD (EC_GROUP_SPEECH << 9) | 0x1c -#define EC_WORD_THAT_S (EC_GROUP_SPEECH << 9) | 0x1d -#define EC_WORD_JUST (EC_GROUP_SPEECH << 9) | 0x1e -#define EC_WORD_EVEN_SO (EC_GROUP_SPEECH << 9) | 0x1f -#define EC_WORD_MUST_BE (EC_GROUP_SPEECH << 9) | 0x20 -#define EC_WORD_NATURALLY (EC_GROUP_SPEECH << 9) | 0x21 -#define EC_WORD_FOR_NOW (EC_GROUP_SPEECH << 9) | 0x22 -#define EC_WORD_UNDERSTOOD (EC_GROUP_SPEECH << 9) | 0x23 -#define EC_WORD_JOKING (EC_GROUP_SPEECH << 9) | 0x24 -#define EC_WORD_READY (EC_GROUP_SPEECH << 9) | 0x25 -#define EC_WORD_SOMETHING (EC_GROUP_SPEECH << 9) | 0x26 -#define EC_WORD_SOMEHOW (EC_GROUP_SPEECH << 9) | 0x27 -#define EC_WORD_ALTHOUGH (EC_GROUP_SPEECH << 9) | 0x28 -#define EC_WORD_ALSO (EC_GROUP_SPEECH << 9) | 0x29 -#define EC_WORD_PERFECT (EC_GROUP_SPEECH << 9) | 0x2a -#define EC_WORD_AS_MUCH_AS (EC_GROUP_SPEECH << 9) | 0x2b -#define EC_WORD_REALLY (EC_GROUP_SPEECH << 9) | 0x2c -#define EC_WORD_TRULY (EC_GROUP_SPEECH << 9) | 0x2d -#define EC_WORD_SERIOUSLY (EC_GROUP_SPEECH << 9) | 0x2e -#define EC_WORD_TOTALLY (EC_GROUP_SPEECH << 9) | 0x2f -#define EC_WORD_UNTIL (EC_GROUP_SPEECH << 9) | 0x30 -#define EC_WORD_AS_IF (EC_GROUP_SPEECH << 9) | 0x31 -#define EC_WORD_MOOD (EC_GROUP_SPEECH << 9) | 0x32 -#define EC_WORD_RATHER (EC_GROUP_SPEECH << 9) | 0x33 -#define EC_WORD_AWFULLY (EC_GROUP_SPEECH << 9) | 0x34 -#define EC_WORD_MODE (EC_GROUP_SPEECH << 9) | 0x35 -#define EC_WORD_MORE (EC_GROUP_SPEECH << 9) | 0x36 -#define EC_WORD_TOO_LATE (EC_GROUP_SPEECH << 9) | 0x37 -#define EC_WORD_FINALLY (EC_GROUP_SPEECH << 9) | 0x38 -#define EC_WORD_ANY (EC_GROUP_SPEECH << 9) | 0x39 -#define EC_WORD_INSTEAD (EC_GROUP_SPEECH << 9) | 0x3a -#define EC_WORD_FANTASTIC (EC_GROUP_SPEECH << 9) | 0x3b +#define EC_WORD_LISTEN ((EC_GROUP_SPEECH << EC_MASK_BITS) | 0) +#define EC_WORD_NOT_VERY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 1) +#define EC_WORD_MEAN ((EC_GROUP_SPEECH << EC_MASK_BITS) | 2) +#define EC_WORD_LIE ((EC_GROUP_SPEECH << EC_MASK_BITS) | 3) +#define EC_WORD_LAY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 4) +#define EC_WORD_RECOMMEND ((EC_GROUP_SPEECH << EC_MASK_BITS) | 5) +#define EC_WORD_NITWIT ((EC_GROUP_SPEECH << EC_MASK_BITS) | 6) +#define EC_WORD_QUITE ((EC_GROUP_SPEECH << EC_MASK_BITS) | 7) +#define EC_WORD_FROM ((EC_GROUP_SPEECH << EC_MASK_BITS) | 8) +#define EC_WORD_FEELING ((EC_GROUP_SPEECH << EC_MASK_BITS) | 9) +#define EC_WORD_BUT ((EC_GROUP_SPEECH << EC_MASK_BITS) | 10) +#define EC_WORD_HOWEVER ((EC_GROUP_SPEECH << EC_MASK_BITS) | 11) +#define EC_WORD_CASE ((EC_GROUP_SPEECH << EC_MASK_BITS) | 12) +#define EC_WORD_THE ((EC_GROUP_SPEECH << EC_MASK_BITS) | 13) +#define EC_WORD_MISS ((EC_GROUP_SPEECH << EC_MASK_BITS) | 14) +#define EC_WORD_HOW ((EC_GROUP_SPEECH << EC_MASK_BITS) | 15) +#define EC_WORD_HIT ((EC_GROUP_SPEECH << EC_MASK_BITS) | 16) +#define EC_WORD_ENOUGH ((EC_GROUP_SPEECH << EC_MASK_BITS) | 17) +#define EC_WORD_A_LOT ((EC_GROUP_SPEECH << EC_MASK_BITS) | 18) +#define EC_WORD_A_LITTLE ((EC_GROUP_SPEECH << EC_MASK_BITS) | 19) +#define EC_WORD_ABSOLUTELY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 20) +#define EC_WORD_AND ((EC_GROUP_SPEECH << EC_MASK_BITS) | 21) +#define EC_WORD_ONLY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 22) +#define EC_WORD_AROUND ((EC_GROUP_SPEECH << EC_MASK_BITS) | 23) +#define EC_WORD_PROBABLY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 24) +#define EC_WORD_IF ((EC_GROUP_SPEECH << EC_MASK_BITS) | 25) +#define EC_WORD_VERY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 26) +#define EC_WORD_A_TINY_BIT ((EC_GROUP_SPEECH << EC_MASK_BITS) | 27) +#define EC_WORD_WILD ((EC_GROUP_SPEECH << EC_MASK_BITS) | 28) +#define EC_WORD_THAT_S ((EC_GROUP_SPEECH << EC_MASK_BITS) | 29) +#define EC_WORD_JUST ((EC_GROUP_SPEECH << EC_MASK_BITS) | 30) +#define EC_WORD_EVEN_SO ((EC_GROUP_SPEECH << EC_MASK_BITS) | 31) +#define EC_WORD_MUST_BE ((EC_GROUP_SPEECH << EC_MASK_BITS) | 32) +#define EC_WORD_NATURALLY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 33) +#define EC_WORD_FOR_NOW ((EC_GROUP_SPEECH << EC_MASK_BITS) | 34) +#define EC_WORD_UNDERSTOOD ((EC_GROUP_SPEECH << EC_MASK_BITS) | 35) +#define EC_WORD_JOKING ((EC_GROUP_SPEECH << EC_MASK_BITS) | 36) +#define EC_WORD_READY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 37) +#define EC_WORD_SOMETHING ((EC_GROUP_SPEECH << EC_MASK_BITS) | 38) +#define EC_WORD_SOMEHOW ((EC_GROUP_SPEECH << EC_MASK_BITS) | 39) +#define EC_WORD_ALTHOUGH ((EC_GROUP_SPEECH << EC_MASK_BITS) | 40) +#define EC_WORD_ALSO ((EC_GROUP_SPEECH << EC_MASK_BITS) | 41) +#define EC_WORD_PERFECT ((EC_GROUP_SPEECH << EC_MASK_BITS) | 42) +#define EC_WORD_AS_MUCH_AS ((EC_GROUP_SPEECH << EC_MASK_BITS) | 43) +#define EC_WORD_REALLY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 44) +#define EC_WORD_TRULY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 45) +#define EC_WORD_SERIOUSLY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 46) +#define EC_WORD_TOTALLY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 47) +#define EC_WORD_UNTIL ((EC_GROUP_SPEECH << EC_MASK_BITS) | 48) +#define EC_WORD_AS_IF ((EC_GROUP_SPEECH << EC_MASK_BITS) | 49) +#define EC_WORD_MOOD ((EC_GROUP_SPEECH << EC_MASK_BITS) | 50) +#define EC_WORD_RATHER ((EC_GROUP_SPEECH << EC_MASK_BITS) | 51) +#define EC_WORD_AWFULLY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 52) +#define EC_WORD_MODE ((EC_GROUP_SPEECH << EC_MASK_BITS) | 53) +#define EC_WORD_MORE ((EC_GROUP_SPEECH << EC_MASK_BITS) | 54) +#define EC_WORD_TOO_LATE ((EC_GROUP_SPEECH << EC_MASK_BITS) | 55) +#define EC_WORD_FINALLY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 56) +#define EC_WORD_ANY ((EC_GROUP_SPEECH << EC_MASK_BITS) | 57) +#define EC_WORD_INSTEAD ((EC_GROUP_SPEECH << EC_MASK_BITS) | 58) +#define EC_WORD_FANTASTIC ((EC_GROUP_SPEECH << EC_MASK_BITS) | 59) // ENDINGS -#define EC_WORD_WILL (EC_GROUP_ENDINGS << 9) | 0x0 -#define EC_WORD_WILL_BE_HERE (EC_GROUP_ENDINGS << 9) | 0x1 -#define EC_WORD_OR (EC_GROUP_ENDINGS << 9) | 0x2 -#define EC_WORD_TIMES (EC_GROUP_ENDINGS << 9) | 0x3 -#define EC_WORD_WONDER (EC_GROUP_ENDINGS << 9) | 0x4 -#define EC_WORD_IS_IT_QUES (EC_GROUP_ENDINGS << 9) | 0x5 -#define EC_WORD_BE (EC_GROUP_ENDINGS << 9) | 0x6 -#define EC_WORD_GIMME (EC_GROUP_ENDINGS << 9) | 0x7 -#define EC_WORD_COULD (EC_GROUP_ENDINGS << 9) | 0x8 -#define EC_WORD_LIKELY_TO (EC_GROUP_ENDINGS << 9) | 0x9 -#define EC_WORD_WOULD (EC_GROUP_ENDINGS << 9) | 0xa -#define EC_WORD_IS (EC_GROUP_ENDINGS << 9) | 0xb -#define EC_WORD_ISN_T_IT_QUES (EC_GROUP_ENDINGS << 9) | 0xc -#define EC_WORD_LET_S (EC_GROUP_ENDINGS << 9) | 0xd -#define EC_WORD_OTHER (EC_GROUP_ENDINGS << 9) | 0xe -#define EC_WORD_ARE (EC_GROUP_ENDINGS << 9) | 0xf -#define EC_WORD_WAS (EC_GROUP_ENDINGS << 9) | 0x10 -#define EC_WORD_WERE (EC_GROUP_ENDINGS << 9) | 0x11 -#define EC_WORD_THOSE (EC_GROUP_ENDINGS << 9) | 0x12 -#define EC_WORD_ISN_T (EC_GROUP_ENDINGS << 9) | 0x13 -#define EC_WORD_WON_T (EC_GROUP_ENDINGS << 9) | 0x14 -#define EC_WORD_CAN_T (EC_GROUP_ENDINGS << 9) | 0x15 -#define EC_WORD_CAN (EC_GROUP_ENDINGS << 9) | 0x16 -#define EC_WORD_DON_T (EC_GROUP_ENDINGS << 9) | 0x17 -#define EC_WORD_DO (EC_GROUP_ENDINGS << 9) | 0x18 -#define EC_WORD_DOES (EC_GROUP_ENDINGS << 9) | 0x19 -#define EC_WORD_WHOM (EC_GROUP_ENDINGS << 9) | 0x1a -#define EC_WORD_WHICH (EC_GROUP_ENDINGS << 9) | 0x1b -#define EC_WORD_WASN_T (EC_GROUP_ENDINGS << 9) | 0x1c -#define EC_WORD_WEREN_T (EC_GROUP_ENDINGS << 9) | 0x1d -#define EC_WORD_HAVE (EC_GROUP_ENDINGS << 9) | 0x1e -#define EC_WORD_HAVEN_T (EC_GROUP_ENDINGS << 9) | 0x1f -#define EC_WORD_A (EC_GROUP_ENDINGS << 9) | 0x20 -#define EC_WORD_AN (EC_GROUP_ENDINGS << 9) | 0x21 -#define EC_WORD_NOT (EC_GROUP_ENDINGS << 9) | 0x22 -#define EC_WORD_THERE (EC_GROUP_ENDINGS << 9) | 0x23 -#define EC_WORD_OK_QUES (EC_GROUP_ENDINGS << 9) | 0x24 -#define EC_WORD_SO (EC_GROUP_ENDINGS << 9) | 0x25 -#define EC_WORD_MAYBE (EC_GROUP_ENDINGS << 9) | 0x26 -#define EC_WORD_ABOUT (EC_GROUP_ENDINGS << 9) | 0x27 -#define EC_WORD_OVER (EC_GROUP_ENDINGS << 9) | 0x28 -#define EC_WORD_IT (EC_GROUP_ENDINGS << 9) | 0x29 -#define EC_WORD_ALL (EC_GROUP_ENDINGS << 9) | 0x2a -#define EC_WORD_FOR (EC_GROUP_ENDINGS << 9) | 0x2b -#define EC_WORD_ON (EC_GROUP_ENDINGS << 9) | 0x2c -#define EC_WORD_OFF (EC_GROUP_ENDINGS << 9) | 0x2d -#define EC_WORD_AS (EC_GROUP_ENDINGS << 9) | 0x2e -#define EC_WORD_TO (EC_GROUP_ENDINGS << 9) | 0x2f -#define EC_WORD_WITH (EC_GROUP_ENDINGS << 9) | 0x30 -#define EC_WORD_BETTER (EC_GROUP_ENDINGS << 9) | 0x31 -#define EC_WORD_EVER (EC_GROUP_ENDINGS << 9) | 0x32 -#define EC_WORD_SINCE (EC_GROUP_ENDINGS << 9) | 0x33 -#define EC_WORD_OF (EC_GROUP_ENDINGS << 9) | 0x34 -#define EC_WORD_BELONGS_TO (EC_GROUP_ENDINGS << 9) | 0x35 -#define EC_WORD_AT (EC_GROUP_ENDINGS << 9) | 0x36 -#define EC_WORD_IN (EC_GROUP_ENDINGS << 9) | 0x37 -#define EC_WORD_OUT (EC_GROUP_ENDINGS << 9) | 0x38 -#define EC_WORD_TOO (EC_GROUP_ENDINGS << 9) | 0x39 -#define EC_WORD_LIKE (EC_GROUP_ENDINGS << 9) | 0x3a -#define EC_WORD_DID (EC_GROUP_ENDINGS << 9) | 0x3b -#define EC_WORD_DIDN_T (EC_GROUP_ENDINGS << 9) | 0x3c -#define EC_WORD_DOESN_T (EC_GROUP_ENDINGS << 9) | 0x3d -#define EC_WORD_WITHOUT (EC_GROUP_ENDINGS << 9) | 0x3e -#define EC_WORD_AFTER (EC_GROUP_ENDINGS << 9) | 0x3f -#define EC_WORD_BEFORE (EC_GROUP_ENDINGS << 9) | 0x40 -#define EC_WORD_WHILE (EC_GROUP_ENDINGS << 9) | 0x41 -#define EC_WORD_THAN (EC_GROUP_ENDINGS << 9) | 0x42 -#define EC_WORD_ONCE (EC_GROUP_ENDINGS << 9) | 0x43 -#define EC_WORD_ANYWHERE (EC_GROUP_ENDINGS << 9) | 0x44 +#define EC_WORD_WILL ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 0) +#define EC_WORD_WILL_BE_HERE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 1) +#define EC_WORD_OR ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 2) +#define EC_WORD_TIMES ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 3) +#define EC_WORD_WONDER ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 4) +#define EC_WORD_IS_IT_QUES ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 5) +#define EC_WORD_BE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 6) +#define EC_WORD_GIMME ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 7) +#define EC_WORD_COULD ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 8) +#define EC_WORD_LIKELY_TO ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 9) +#define EC_WORD_WOULD ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 10) +#define EC_WORD_IS ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 11) +#define EC_WORD_ISN_T_IT_QUES ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 12) +#define EC_WORD_LET_S ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 13) +#define EC_WORD_OTHER ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 14) +#define EC_WORD_ARE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 15) +#define EC_WORD_WAS ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 16) +#define EC_WORD_WERE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 17) +#define EC_WORD_THOSE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 18) +#define EC_WORD_ISN_T ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 19) +#define EC_WORD_WON_T ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 20) +#define EC_WORD_CAN_T ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 21) +#define EC_WORD_CAN ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 22) +#define EC_WORD_DON_T ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 23) +#define EC_WORD_DO ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 24) +#define EC_WORD_DOES ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 25) +#define EC_WORD_WHOM ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 26) +#define EC_WORD_WHICH ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 27) +#define EC_WORD_WASN_T ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 28) +#define EC_WORD_WEREN_T ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 29) +#define EC_WORD_HAVE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 30) +#define EC_WORD_HAVEN_T ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 31) +#define EC_WORD_A ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 32) +#define EC_WORD_AN ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 33) +#define EC_WORD_NOT ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 34) +#define EC_WORD_THERE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 35) +#define EC_WORD_OK_QUES ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 36) +#define EC_WORD_SO ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 37) +#define EC_WORD_MAYBE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 38) +#define EC_WORD_ABOUT ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 39) +#define EC_WORD_OVER ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 40) +#define EC_WORD_IT ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 41) +#define EC_WORD_ALL ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 42) +#define EC_WORD_FOR ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 43) +#define EC_WORD_ON ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 44) +#define EC_WORD_OFF ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 45) +#define EC_WORD_AS ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 46) +#define EC_WORD_TO ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 47) +#define EC_WORD_WITH ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 48) +#define EC_WORD_BETTER ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 49) +#define EC_WORD_EVER ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 50) +#define EC_WORD_SINCE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 51) +#define EC_WORD_OF ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 52) +#define EC_WORD_BELONGS_TO ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 53) +#define EC_WORD_AT ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 54) +#define EC_WORD_IN ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 55) +#define EC_WORD_OUT ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 56) +#define EC_WORD_TOO ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 57) +#define EC_WORD_LIKE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 58) +#define EC_WORD_DID ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 59) +#define EC_WORD_DIDN_T ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 60) +#define EC_WORD_DOESN_T ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 61) +#define EC_WORD_WITHOUT ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 62) +#define EC_WORD_AFTER ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 63) +#define EC_WORD_BEFORE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 64) +#define EC_WORD_WHILE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 65) +#define EC_WORD_THAN ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 66) +#define EC_WORD_ONCE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 67) +#define EC_WORD_ANYWHERE ((EC_GROUP_ENDINGS << EC_MASK_BITS) | 68) // FEELINGS -#define EC_WORD_MEET (EC_GROUP_FEELINGS << 9) | 0x0 -#define EC_WORD_PLAY (EC_GROUP_FEELINGS << 9) | 0x1 -#define EC_WORD_HURRIED (EC_GROUP_FEELINGS << 9) | 0x2 -#define EC_WORD_GOES (EC_GROUP_FEELINGS << 9) | 0x3 -#define EC_WORD_GIDDY (EC_GROUP_FEELINGS << 9) | 0x4 -#define EC_WORD_HAPPY (EC_GROUP_FEELINGS << 9) | 0x5 -#define EC_WORD_HAPPINESS (EC_GROUP_FEELINGS << 9) | 0x6 -#define EC_WORD_EXCITE (EC_GROUP_FEELINGS << 9) | 0x7 -#define EC_WORD_IMPORTANT (EC_GROUP_FEELINGS << 9) | 0x8 -#define EC_WORD_FUNNY (EC_GROUP_FEELINGS << 9) | 0x9 -#define EC_WORD_GOT (EC_GROUP_FEELINGS << 9) | 0xa -#define EC_WORD_GO_HOME (EC_GROUP_FEELINGS << 9) | 0xb -#define EC_WORD_DISAPPOINTED (EC_GROUP_FEELINGS << 9) | 0xc -#define EC_WORD_DISAPPOINTS (EC_GROUP_FEELINGS << 9) | 0xd -#define EC_WORD_SAD (EC_GROUP_FEELINGS << 9) | 0xe -#define EC_WORD_TRY (EC_GROUP_FEELINGS << 9) | 0xf -#define EC_WORD_TRIES (EC_GROUP_FEELINGS << 9) | 0x10 -#define EC_WORD_HEARS (EC_GROUP_FEELINGS << 9) | 0x11 -#define EC_WORD_THINK (EC_GROUP_FEELINGS << 9) | 0x12 -#define EC_WORD_HEAR (EC_GROUP_FEELINGS << 9) | 0x13 -#define EC_WORD_WANTS (EC_GROUP_FEELINGS << 9) | 0x14 -#define EC_WORD_MISHEARD (EC_GROUP_FEELINGS << 9) | 0x15 -#define EC_WORD_DISLIKE (EC_GROUP_FEELINGS << 9) | 0x16 -#define EC_WORD_ANGRY (EC_GROUP_FEELINGS << 9) | 0x17 -#define EC_WORD_ANGER (EC_GROUP_FEELINGS << 9) | 0x18 -#define EC_WORD_SCARY (EC_GROUP_FEELINGS << 9) | 0x19 -#define EC_WORD_LONESOME (EC_GROUP_FEELINGS << 9) | 0x1a -#define EC_WORD_DISAPPOINT (EC_GROUP_FEELINGS << 9) | 0x1b -#define EC_WORD_JOY (EC_GROUP_FEELINGS << 9) | 0x1c -#define EC_WORD_GETS (EC_GROUP_FEELINGS << 9) | 0x1d -#define EC_WORD_NEVER (EC_GROUP_FEELINGS << 9) | 0x1e -#define EC_WORD_DARN (EC_GROUP_FEELINGS << 9) | 0x1f -#define EC_WORD_DOWNCAST (EC_GROUP_FEELINGS << 9) | 0x20 -#define EC_WORD_INCREDIBLE (EC_GROUP_FEELINGS << 9) | 0x21 -#define EC_WORD_LIKES (EC_GROUP_FEELINGS << 9) | 0x22 -#define EC_WORD_DISLIKES (EC_GROUP_FEELINGS << 9) | 0x23 -#define EC_WORD_BORING (EC_GROUP_FEELINGS << 9) | 0x24 -#define EC_WORD_CARE (EC_GROUP_FEELINGS << 9) | 0x25 -#define EC_WORD_CARES (EC_GROUP_FEELINGS << 9) | 0x26 -#define EC_WORD_ALL_RIGHT (EC_GROUP_FEELINGS << 9) | 0x27 -#define EC_WORD_ADORE (EC_GROUP_FEELINGS << 9) | 0x28 -#define EC_WORD_DISASTER (EC_GROUP_FEELINGS << 9) | 0x29 -#define EC_WORD_ENJOY (EC_GROUP_FEELINGS << 9) | 0x2a -#define EC_WORD_ENJOYS (EC_GROUP_FEELINGS << 9) | 0x2b -#define EC_WORD_EAT (EC_GROUP_FEELINGS << 9) | 0x2c -#define EC_WORD_LACKING (EC_GROUP_FEELINGS << 9) | 0x2d -#define EC_WORD_BAD (EC_GROUP_FEELINGS << 9) | 0x2e -#define EC_WORD_HARD (EC_GROUP_FEELINGS << 9) | 0x2f -#define EC_WORD_TERRIBLE (EC_GROUP_FEELINGS << 9) | 0x30 -#define EC_WORD_SHOULD (EC_GROUP_FEELINGS << 9) | 0x31 -#define EC_WORD_NICE (EC_GROUP_FEELINGS << 9) | 0x32 -#define EC_WORD_DRINK (EC_GROUP_FEELINGS << 9) | 0x33 -#define EC_WORD_SURPRISE (EC_GROUP_FEELINGS << 9) | 0x34 -#define EC_WORD_FEAR (EC_GROUP_FEELINGS << 9) | 0x35 -#define EC_WORD_WANT (EC_GROUP_FEELINGS << 9) | 0x36 -#define EC_WORD_WAIT (EC_GROUP_FEELINGS << 9) | 0x37 -#define EC_WORD_SATISFIED (EC_GROUP_FEELINGS << 9) | 0x38 -#define EC_WORD_SEE (EC_GROUP_FEELINGS << 9) | 0x39 -#define EC_WORD_RARE (EC_GROUP_FEELINGS << 9) | 0x3a -#define EC_WORD_NEGATIVE (EC_GROUP_FEELINGS << 9) | 0x3b -#define EC_WORD_DONE (EC_GROUP_FEELINGS << 9) | 0x3c -#define EC_WORD_DANGER (EC_GROUP_FEELINGS << 9) | 0x3d -#define EC_WORD_DEFEATED (EC_GROUP_FEELINGS << 9) | 0x3e -#define EC_WORD_BEAT (EC_GROUP_FEELINGS << 9) | 0x3f -#define EC_WORD_GREAT (EC_GROUP_FEELINGS << 9) | 0x40 -#define EC_WORD_ROMANTIC (EC_GROUP_FEELINGS << 9) | 0x41 -#define EC_WORD_QUESTION (EC_GROUP_FEELINGS << 9) | 0x42 -#define EC_WORD_UNDERSTAND (EC_GROUP_FEELINGS << 9) | 0x43 -#define EC_WORD_UNDERSTANDS (EC_GROUP_FEELINGS << 9) | 0x44 +#define EC_WORD_MEET ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 0) +#define EC_WORD_PLAY ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 1) +#define EC_WORD_HURRIED ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 2) +#define EC_WORD_GOES ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 3) +#define EC_WORD_GIDDY ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 4) +#define EC_WORD_HAPPY ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 5) +#define EC_WORD_HAPPINESS ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 6) +#define EC_WORD_EXCITE ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 7) +#define EC_WORD_IMPORTANT ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 8) +#define EC_WORD_FUNNY ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 9) +#define EC_WORD_GOT ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 10) +#define EC_WORD_GO_HOME ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 11) +#define EC_WORD_DISAPPOINTED ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 12) +#define EC_WORD_DISAPPOINTS ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 13) +#define EC_WORD_SAD ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 14) +#define EC_WORD_TRY ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 15) +#define EC_WORD_TRIES ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 16) +#define EC_WORD_HEARS ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 17) +#define EC_WORD_THINK ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 18) +#define EC_WORD_HEAR ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 19) +#define EC_WORD_WANTS ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 20) +#define EC_WORD_MISHEARD ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 21) +#define EC_WORD_DISLIKE ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 22) +#define EC_WORD_ANGRY ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 23) +#define EC_WORD_ANGER ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 24) +#define EC_WORD_SCARY ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 25) +#define EC_WORD_LONESOME ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 26) +#define EC_WORD_DISAPPOINT ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 27) +#define EC_WORD_JOY ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 28) +#define EC_WORD_GETS ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 29) +#define EC_WORD_NEVER ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 30) +#define EC_WORD_DARN ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 31) +#define EC_WORD_DOWNCAST ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 32) +#define EC_WORD_INCREDIBLE ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 33) +#define EC_WORD_LIKES ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 34) +#define EC_WORD_DISLIKES ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 35) +#define EC_WORD_BORING ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 36) +#define EC_WORD_CARE ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 37) +#define EC_WORD_CARES ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 38) +#define EC_WORD_ALL_RIGHT ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 39) +#define EC_WORD_ADORE ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 40) +#define EC_WORD_DISASTER ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 41) +#define EC_WORD_ENJOY ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 42) +#define EC_WORD_ENJOYS ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 43) +#define EC_WORD_EAT ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 44) +#define EC_WORD_LACKING ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 45) +#define EC_WORD_BAD ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 46) +#define EC_WORD_HARD ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 47) +#define EC_WORD_TERRIBLE ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 48) +#define EC_WORD_SHOULD ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 49) +#define EC_WORD_NICE ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 50) +#define EC_WORD_DRINK ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 51) +#define EC_WORD_SURPRISE ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 52) +#define EC_WORD_FEAR ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 53) +#define EC_WORD_WANT ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 54) +#define EC_WORD_WAIT ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 55) +#define EC_WORD_SATISFIED ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 56) +#define EC_WORD_SEE ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 57) +#define EC_WORD_RARE ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 58) +#define EC_WORD_NEGATIVE ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 59) +#define EC_WORD_DONE ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 60) +#define EC_WORD_DANGER ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 61) +#define EC_WORD_DEFEATED ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 62) +#define EC_WORD_BEAT ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 63) +#define EC_WORD_GREAT ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 64) +#define EC_WORD_ROMANTIC ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 65) +#define EC_WORD_QUESTION ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 66) +#define EC_WORD_UNDERSTAND ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 67) +#define EC_WORD_UNDERSTANDS ((EC_GROUP_FEELINGS << EC_MASK_BITS) | 68) // CONDITIONS -#define EC_WORD_HOT (EC_GROUP_CONDITIONS << 9) | 0x0 -#define EC_WORD_EXISTS (EC_GROUP_CONDITIONS << 9) | 0x1 -#define EC_WORD_EXCESS (EC_GROUP_CONDITIONS << 9) | 0x2 -#define EC_WORD_APPROVED (EC_GROUP_CONDITIONS << 9) | 0x3 -#define EC_WORD_HAS (EC_GROUP_CONDITIONS << 9) | 0x4 -#define EC_WORD_GOOD (EC_GROUP_CONDITIONS << 9) | 0x5 -#define EC_WORD_LESS (EC_GROUP_CONDITIONS << 9) | 0x6 -#define EC_WORD_MOMENTUM (EC_GROUP_CONDITIONS << 9) | 0x7 -#define EC_WORD_GOING (EC_GROUP_CONDITIONS << 9) | 0x8 -#define EC_WORD_WEIRD (EC_GROUP_CONDITIONS << 9) | 0x9 -#define EC_WORD_BUSY (EC_GROUP_CONDITIONS << 9) | 0xa -#define EC_WORD_TOGETHER (EC_GROUP_CONDITIONS << 9) | 0xb -#define EC_WORD_FULL (EC_GROUP_CONDITIONS << 9) | 0xc -#define EC_WORD_ABSENT (EC_GROUP_CONDITIONS << 9) | 0xd -#define EC_WORD_BEING (EC_GROUP_CONDITIONS << 9) | 0xe -#define EC_WORD_NEED (EC_GROUP_CONDITIONS << 9) | 0xf -#define EC_WORD_TASTY (EC_GROUP_CONDITIONS << 9) | 0x10 -#define EC_WORD_SKILLED (EC_GROUP_CONDITIONS << 9) | 0x11 -#define EC_WORD_NOISY (EC_GROUP_CONDITIONS << 9) | 0x12 -#define EC_WORD_BIG (EC_GROUP_CONDITIONS << 9) | 0x13 -#define EC_WORD_LATE (EC_GROUP_CONDITIONS << 9) | 0x14 -#define EC_WORD_CLOSE (EC_GROUP_CONDITIONS << 9) | 0x15 -#define EC_WORD_DOCILE (EC_GROUP_CONDITIONS << 9) | 0x16 -#define EC_WORD_AMUSING (EC_GROUP_CONDITIONS << 9) | 0x17 -#define EC_WORD_ENTERTAINING (EC_GROUP_CONDITIONS << 9) | 0x18 -#define EC_WORD_PERFECTION (EC_GROUP_CONDITIONS << 9) | 0x19 -#define EC_WORD_PRETTY (EC_GROUP_CONDITIONS << 9) | 0x1a -#define EC_WORD_HEALTHY (EC_GROUP_CONDITIONS << 9) | 0x1b -#define EC_WORD_EXCELLENT (EC_GROUP_CONDITIONS << 9) | 0x1c -#define EC_WORD_UPSIDE_DOWN (EC_GROUP_CONDITIONS << 9) | 0x1d -#define EC_WORD_COLD (EC_GROUP_CONDITIONS << 9) | 0x1e -#define EC_WORD_REFRESHING (EC_GROUP_CONDITIONS << 9) | 0x1f -#define EC_WORD_UNAVOIDABLE (EC_GROUP_CONDITIONS << 9) | 0x20 -#define EC_WORD_MUCH (EC_GROUP_CONDITIONS << 9) | 0x21 -#define EC_WORD_OVERWHELMING (EC_GROUP_CONDITIONS << 9) | 0x22 -#define EC_WORD_FABULOUS (EC_GROUP_CONDITIONS << 9) | 0x23 -#define EC_WORD_ELSE (EC_GROUP_CONDITIONS << 9) | 0x24 -#define EC_WORD_EXPENSIVE (EC_GROUP_CONDITIONS << 9) | 0x25 -#define EC_WORD_CORRECT (EC_GROUP_CONDITIONS << 9) | 0x26 -#define EC_WORD_IMPOSSIBLE (EC_GROUP_CONDITIONS << 9) | 0x27 -#define EC_WORD_SMALL (EC_GROUP_CONDITIONS << 9) | 0x28 -#define EC_WORD_DIFFERENT (EC_GROUP_CONDITIONS << 9) | 0x29 -#define EC_WORD_TIRED (EC_GROUP_CONDITIONS << 9) | 0x2a -#define EC_WORD_SKILL (EC_GROUP_CONDITIONS << 9) | 0x2b -#define EC_WORD_TOP (EC_GROUP_CONDITIONS << 9) | 0x2c -#define EC_WORD_NON_STOP (EC_GROUP_CONDITIONS << 9) | 0x2d -#define EC_WORD_PREPOSTEROUS (EC_GROUP_CONDITIONS << 9) | 0x2e -#define EC_WORD_NONE (EC_GROUP_CONDITIONS << 9) | 0x2f -#define EC_WORD_NOTHING (EC_GROUP_CONDITIONS << 9) | 0x30 -#define EC_WORD_NATURAL (EC_GROUP_CONDITIONS << 9) | 0x31 -#define EC_WORD_BECOMES (EC_GROUP_CONDITIONS << 9) | 0x32 -#define EC_WORD_LUKEWARM (EC_GROUP_CONDITIONS << 9) | 0x33 -#define EC_WORD_FAST (EC_GROUP_CONDITIONS << 9) | 0x34 -#define EC_WORD_LOW (EC_GROUP_CONDITIONS << 9) | 0x35 -#define EC_WORD_AWFUL (EC_GROUP_CONDITIONS << 9) | 0x36 -#define EC_WORD_ALONE (EC_GROUP_CONDITIONS << 9) | 0x37 -#define EC_WORD_BORED (EC_GROUP_CONDITIONS << 9) | 0x38 -#define EC_WORD_SECRET (EC_GROUP_CONDITIONS << 9) | 0x39 -#define EC_WORD_MYSTERY (EC_GROUP_CONDITIONS << 9) | 0x3a -#define EC_WORD_LACKS (EC_GROUP_CONDITIONS << 9) | 0x3b -#define EC_WORD_BEST (EC_GROUP_CONDITIONS << 9) | 0x3c -#define EC_WORD_LOUSY (EC_GROUP_CONDITIONS << 9) | 0x3d -#define EC_WORD_MISTAKE (EC_GROUP_CONDITIONS << 9) | 0x3e -#define EC_WORD_KIND (EC_GROUP_CONDITIONS << 9) | 0x3f -#define EC_WORD_WELL (EC_GROUP_CONDITIONS << 9) | 0x40 -#define EC_WORD_WEAKENED (EC_GROUP_CONDITIONS << 9) | 0x41 -#define EC_WORD_SIMPLE (EC_GROUP_CONDITIONS << 9) | 0x42 -#define EC_WORD_SEEMS (EC_GROUP_CONDITIONS << 9) | 0x43 -#define EC_WORD_BADLY (EC_GROUP_CONDITIONS << 9) | 0x44 +#define EC_WORD_HOT ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 0) +#define EC_WORD_EXISTS ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 1) +#define EC_WORD_EXCESS ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 2) +#define EC_WORD_APPROVED ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 3) +#define EC_WORD_HAS ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 4) +#define EC_WORD_GOOD ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 5) +#define EC_WORD_LESS ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 6) +#define EC_WORD_MOMENTUM ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 7) +#define EC_WORD_GOING ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 8) +#define EC_WORD_WEIRD ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 9) +#define EC_WORD_BUSY ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 10) +#define EC_WORD_TOGETHER ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 11) +#define EC_WORD_FULL ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 12) +#define EC_WORD_ABSENT ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 13) +#define EC_WORD_BEING ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 14) +#define EC_WORD_NEED ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 15) +#define EC_WORD_TASTY ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 16) +#define EC_WORD_SKILLED ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 17) +#define EC_WORD_NOISY ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 18) +#define EC_WORD_BIG ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 19) +#define EC_WORD_LATE ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 20) +#define EC_WORD_CLOSE ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 21) +#define EC_WORD_DOCILE ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 22) +#define EC_WORD_AMUSING ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 23) +#define EC_WORD_ENTERTAINING ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 24) +#define EC_WORD_PERFECTION ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 25) +#define EC_WORD_PRETTY ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 26) +#define EC_WORD_HEALTHY ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 27) +#define EC_WORD_EXCELLENT ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 28) +#define EC_WORD_UPSIDE_DOWN ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 29) +#define EC_WORD_COLD ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 30) +#define EC_WORD_REFRESHING ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 31) +#define EC_WORD_UNAVOIDABLE ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 32) +#define EC_WORD_MUCH ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 33) +#define EC_WORD_OVERWHELMING ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 34) +#define EC_WORD_FABULOUS ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 35) +#define EC_WORD_ELSE ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 36) +#define EC_WORD_EXPENSIVE ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 37) +#define EC_WORD_CORRECT ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 38) +#define EC_WORD_IMPOSSIBLE ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 39) +#define EC_WORD_SMALL ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 40) +#define EC_WORD_DIFFERENT ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 41) +#define EC_WORD_TIRED ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 42) +#define EC_WORD_SKILL ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 43) +#define EC_WORD_TOP ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 44) +#define EC_WORD_NON_STOP ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 45) +#define EC_WORD_PREPOSTEROUS ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 46) +#define EC_WORD_NONE ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 47) +#define EC_WORD_NOTHING ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 48) +#define EC_WORD_NATURAL ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 49) +#define EC_WORD_BECOMES ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 50) +#define EC_WORD_LUKEWARM ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 51) +#define EC_WORD_FAST ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 52) +#define EC_WORD_LOW ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 53) +#define EC_WORD_AWFUL ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 54) +#define EC_WORD_ALONE ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 55) +#define EC_WORD_BORED ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 56) +#define EC_WORD_SECRET ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 57) +#define EC_WORD_MYSTERY ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 58) +#define EC_WORD_LACKS ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 59) +#define EC_WORD_BEST ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 60) +#define EC_WORD_LOUSY ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 61) +#define EC_WORD_MISTAKE ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 62) +#define EC_WORD_KIND ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 63) +#define EC_WORD_WELL ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 64) +#define EC_WORD_WEAKENED ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 65) +#define EC_WORD_SIMPLE ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 66) +#define EC_WORD_SEEMS ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 67) +#define EC_WORD_BADLY ((EC_GROUP_CONDITIONS << EC_MASK_BITS) | 68) // ACTIONS -#define EC_WORD_MEETS (EC_GROUP_ACTIONS << 9) | 0x0 -#define EC_WORD_CONCEDE (EC_GROUP_ACTIONS << 9) | 0x1 -#define EC_WORD_GIVE (EC_GROUP_ACTIONS << 9) | 0x2 -#define EC_WORD_GIVES (EC_GROUP_ACTIONS << 9) | 0x3 -#define EC_WORD_PLAYED (EC_GROUP_ACTIONS << 9) | 0x4 -#define EC_WORD_PLAYS (EC_GROUP_ACTIONS << 9) | 0x5 -#define EC_WORD_COLLECT (EC_GROUP_ACTIONS << 9) | 0x6 -#define EC_WORD_WALKING (EC_GROUP_ACTIONS << 9) | 0x7 -#define EC_WORD_WALKS (EC_GROUP_ACTIONS << 9) | 0x8 -#define EC_WORD_SAYS (EC_GROUP_ACTIONS << 9) | 0x9 -#define EC_WORD_WENT (EC_GROUP_ACTIONS << 9) | 0xa -#define EC_WORD_SAID (EC_GROUP_ACTIONS << 9) | 0xb -#define EC_WORD_WAKE_UP (EC_GROUP_ACTIONS << 9) | 0xc -#define EC_WORD_WAKES_UP (EC_GROUP_ACTIONS << 9) | 0xd -#define EC_WORD_ANGERS (EC_GROUP_ACTIONS << 9) | 0xe -#define EC_WORD_TEACH (EC_GROUP_ACTIONS << 9) | 0xf -#define EC_WORD_TEACHES (EC_GROUP_ACTIONS << 9) | 0x10 -#define EC_WORD_PLEASE (EC_GROUP_ACTIONS << 9) | 0x11 -#define EC_WORD_LEARN (EC_GROUP_ACTIONS << 9) | 0x12 -#define EC_WORD_CHANGE (EC_GROUP_ACTIONS << 9) | 0x13 -#define EC_WORD_STORY (EC_GROUP_ACTIONS << 9) | 0x14 -#define EC_WORD_TRUST (EC_GROUP_ACTIONS << 9) | 0x15 -#define EC_WORD_LAVISH (EC_GROUP_ACTIONS << 9) | 0x16 -#define EC_WORD_LISTENS (EC_GROUP_ACTIONS << 9) | 0x17 -#define EC_WORD_HEARING (EC_GROUP_ACTIONS << 9) | 0x18 -#define EC_WORD_TRAINS (EC_GROUP_ACTIONS << 9) | 0x19 -#define EC_WORD_CHOOSE (EC_GROUP_ACTIONS << 9) | 0x1a -#define EC_WORD_COME (EC_GROUP_ACTIONS << 9) | 0x1b -#define EC_WORD_CAME (EC_GROUP_ACTIONS << 9) | 0x1c -#define EC_WORD_SEARCH (EC_GROUP_ACTIONS << 9) | 0x1d -#define EC_WORD_MAKE (EC_GROUP_ACTIONS << 9) | 0x1e -#define EC_WORD_CAUSE (EC_GROUP_ACTIONS << 9) | 0x1f -#define EC_WORD_KNOW (EC_GROUP_ACTIONS << 9) | 0x20 -#define EC_WORD_KNOWS (EC_GROUP_ACTIONS << 9) | 0x21 -#define EC_WORD_REFUSE (EC_GROUP_ACTIONS << 9) | 0x22 -#define EC_WORD_STORES (EC_GROUP_ACTIONS << 9) | 0x23 -#define EC_WORD_BRAG (EC_GROUP_ACTIONS << 9) | 0x24 -#define EC_WORD_IGNORANT (EC_GROUP_ACTIONS << 9) | 0x25 -#define EC_WORD_THINKS (EC_GROUP_ACTIONS << 9) | 0x26 -#define EC_WORD_BELIEVE (EC_GROUP_ACTIONS << 9) | 0x27 -#define EC_WORD_SLIDE (EC_GROUP_ACTIONS << 9) | 0x28 -#define EC_WORD_EATS (EC_GROUP_ACTIONS << 9) | 0x29 -#define EC_WORD_USE (EC_GROUP_ACTIONS << 9) | 0x2a -#define EC_WORD_USES (EC_GROUP_ACTIONS << 9) | 0x2b -#define EC_WORD_USING (EC_GROUP_ACTIONS << 9) | 0x2c -#define EC_WORD_COULDN_T (EC_GROUP_ACTIONS << 9) | 0x2d -#define EC_WORD_CAPABLE (EC_GROUP_ACTIONS << 9) | 0x2e -#define EC_WORD_DISAPPEAR (EC_GROUP_ACTIONS << 9) | 0x2f -#define EC_WORD_APPEAR (EC_GROUP_ACTIONS << 9) | 0x30 -#define EC_WORD_THROW (EC_GROUP_ACTIONS << 9) | 0x31 -#define EC_WORD_WORRY (EC_GROUP_ACTIONS << 9) | 0x32 -#define EC_WORD_SLEPT (EC_GROUP_ACTIONS << 9) | 0x33 -#define EC_WORD_SLEEP (EC_GROUP_ACTIONS << 9) | 0x34 -#define EC_WORD_RELEASE (EC_GROUP_ACTIONS << 9) | 0x35 -#define EC_WORD_DRINKS (EC_GROUP_ACTIONS << 9) | 0x36 -#define EC_WORD_RUNS (EC_GROUP_ACTIONS << 9) | 0x37 -#define EC_WORD_RUN (EC_GROUP_ACTIONS << 9) | 0x38 -#define EC_WORD_WORKS (EC_GROUP_ACTIONS << 9) | 0x39 -#define EC_WORD_WORKING (EC_GROUP_ACTIONS << 9) | 0x3a -#define EC_WORD_TALKING (EC_GROUP_ACTIONS << 9) | 0x3b -#define EC_WORD_TALK (EC_GROUP_ACTIONS << 9) | 0x3c -#define EC_WORD_SINK (EC_GROUP_ACTIONS << 9) | 0x3d -#define EC_WORD_SMACK (EC_GROUP_ACTIONS << 9) | 0x3e -#define EC_WORD_PRETEND (EC_GROUP_ACTIONS << 9) | 0x3f -#define EC_WORD_PRAISE (EC_GROUP_ACTIONS << 9) | 0x40 -#define EC_WORD_OVERDO (EC_GROUP_ACTIONS << 9) | 0x41 -#define EC_WORD_SHOW (EC_GROUP_ACTIONS << 9) | 0x42 -#define EC_WORD_LOOKS (EC_GROUP_ACTIONS << 9) | 0x43 -#define EC_WORD_SEES (EC_GROUP_ACTIONS << 9) | 0x44 -#define EC_WORD_SEEK (EC_GROUP_ACTIONS << 9) | 0x45 -#define EC_WORD_OWN (EC_GROUP_ACTIONS << 9) | 0x46 -#define EC_WORD_TAKE (EC_GROUP_ACTIONS << 9) | 0x47 -#define EC_WORD_ALLOW (EC_GROUP_ACTIONS << 9) | 0x48 -#define EC_WORD_FORGET (EC_GROUP_ACTIONS << 9) | 0x49 -#define EC_WORD_FORGETS (EC_GROUP_ACTIONS << 9) | 0x4a -#define EC_WORD_APPEARS (EC_GROUP_ACTIONS << 9) | 0x4b -#define EC_WORD_FAINT (EC_GROUP_ACTIONS << 9) | 0x4c -#define EC_WORD_FAINTED (EC_GROUP_ACTIONS << 9) | 0x4d +#define EC_WORD_MEETS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 0) +#define EC_WORD_CONCEDE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 1) +#define EC_WORD_GIVE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 2) +#define EC_WORD_GIVES ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 3) +#define EC_WORD_PLAYED ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 4) +#define EC_WORD_PLAYS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 5) +#define EC_WORD_COLLECT ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 6) +#define EC_WORD_WALKING ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 7) +#define EC_WORD_WALKS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 8) +#define EC_WORD_SAYS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 9) +#define EC_WORD_WENT ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 10) +#define EC_WORD_SAID ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 11) +#define EC_WORD_WAKE_UP ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 12) +#define EC_WORD_WAKES_UP ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 13) +#define EC_WORD_ANGERS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 14) +#define EC_WORD_TEACH ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 15) +#define EC_WORD_TEACHES ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 16) +#define EC_WORD_PLEASE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 17) +#define EC_WORD_LEARN ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 18) +#define EC_WORD_CHANGE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 19) +#define EC_WORD_STORY ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 20) +#define EC_WORD_TRUST ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 21) +#define EC_WORD_LAVISH ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 22) +#define EC_WORD_LISTENS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 23) +#define EC_WORD_HEARING ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 24) +#define EC_WORD_TRAINS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 25) +#define EC_WORD_CHOOSE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 26) +#define EC_WORD_COME ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 27) +#define EC_WORD_CAME ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 28) +#define EC_WORD_SEARCH ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 29) +#define EC_WORD_MAKE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 30) +#define EC_WORD_CAUSE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 31) +#define EC_WORD_KNOW ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 32) +#define EC_WORD_KNOWS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 33) +#define EC_WORD_REFUSE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 34) +#define EC_WORD_STORES ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 35) +#define EC_WORD_BRAG ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 36) +#define EC_WORD_IGNORANT ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 37) +#define EC_WORD_THINKS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 38) +#define EC_WORD_BELIEVE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 39) +#define EC_WORD_SLIDE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 40) +#define EC_WORD_EATS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 41) +#define EC_WORD_USE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 42) +#define EC_WORD_USES ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 43) +#define EC_WORD_USING ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 44) +#define EC_WORD_COULDN_T ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 45) +#define EC_WORD_CAPABLE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 46) +#define EC_WORD_DISAPPEAR ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 47) +#define EC_WORD_APPEAR ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 48) +#define EC_WORD_THROW ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 49) +#define EC_WORD_WORRY ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 50) +#define EC_WORD_SLEPT ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 51) +#define EC_WORD_SLEEP ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 52) +#define EC_WORD_RELEASE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 53) +#define EC_WORD_DRINKS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 54) +#define EC_WORD_RUNS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 55) +#define EC_WORD_RUN ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 56) +#define EC_WORD_WORKS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 57) +#define EC_WORD_WORKING ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 58) +#define EC_WORD_TALKING ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 59) +#define EC_WORD_TALK ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 60) +#define EC_WORD_SINK ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 61) +#define EC_WORD_SMACK ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 62) +#define EC_WORD_PRETEND ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 63) +#define EC_WORD_PRAISE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 64) +#define EC_WORD_OVERDO ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 65) +#define EC_WORD_SHOW ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 66) +#define EC_WORD_LOOKS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 67) +#define EC_WORD_SEES ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 68) +#define EC_WORD_SEEK ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 69) +#define EC_WORD_OWN ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 70) +#define EC_WORD_TAKE ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 71) +#define EC_WORD_ALLOW ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 72) +#define EC_WORD_FORGET ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 73) +#define EC_WORD_FORGETS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 74) +#define EC_WORD_APPEARS ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 75) +#define EC_WORD_FAINT ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 76) +#define EC_WORD_FAINTED ((EC_GROUP_ACTIONS << EC_MASK_BITS) | 77) // LIFESTYLE -#define EC_WORD_CHORES (EC_GROUP_LIFESTYLE << 9) | 0x0 -#define EC_WORD_HOME (EC_GROUP_LIFESTYLE << 9) | 0x1 -#define EC_WORD_MONEY (EC_GROUP_LIFESTYLE << 9) | 0x2 -#define EC_WORD_ALLOWANCE (EC_GROUP_LIFESTYLE << 9) | 0x3 -#define EC_WORD_BATH (EC_GROUP_LIFESTYLE << 9) | 0x4 -#define EC_WORD_CONVERSATION (EC_GROUP_LIFESTYLE << 9) | 0x5 -#define EC_WORD_SCHOOL (EC_GROUP_LIFESTYLE << 9) | 0x6 -#define EC_WORD_COMMEMORATE (EC_GROUP_LIFESTYLE << 9) | 0x7 -#define EC_WORD_HABIT (EC_GROUP_LIFESTYLE << 9) | 0x8 -#define EC_WORD_GROUP (EC_GROUP_LIFESTYLE << 9) | 0x9 -#define EC_WORD_WORD (EC_GROUP_LIFESTYLE << 9) | 0xa -#define EC_WORD_STORE (EC_GROUP_LIFESTYLE << 9) | 0xb -#define EC_WORD_SERVICE (EC_GROUP_LIFESTYLE << 9) | 0xc -#define EC_WORD_WORK (EC_GROUP_LIFESTYLE << 9) | 0xd -#define EC_WORD_SYSTEM (EC_GROUP_LIFESTYLE << 9) | 0xe -#define EC_WORD_TRAIN (EC_GROUP_LIFESTYLE << 9) | 0xf -#define EC_WORD_CLASS (EC_GROUP_LIFESTYLE << 9) | 0x10 -#define EC_WORD_LESSONS (EC_GROUP_LIFESTYLE << 9) | 0x11 -#define EC_WORD_INFORMATION (EC_GROUP_LIFESTYLE << 9) | 0x12 -#define EC_WORD_LIVING (EC_GROUP_LIFESTYLE << 9) | 0x13 -#define EC_WORD_TEACHER (EC_GROUP_LIFESTYLE << 9) | 0x14 -#define EC_WORD_TOURNAMENT (EC_GROUP_LIFESTYLE << 9) | 0x15 -#define EC_WORD_LETTER (EC_GROUP_LIFESTYLE << 9) | 0x16 -#define EC_WORD_EVENT (EC_GROUP_LIFESTYLE << 9) | 0x17 -#define EC_WORD_DIGITAL (EC_GROUP_LIFESTYLE << 9) | 0x18 -#define EC_WORD_TEST (EC_GROUP_LIFESTYLE << 9) | 0x19 -#define EC_WORD_DEPT_STORE (EC_GROUP_LIFESTYLE << 9) | 0x1a -#define EC_WORD_TELEVISION (EC_GROUP_LIFESTYLE << 9) | 0x1b -#define EC_WORD_PHONE (EC_GROUP_LIFESTYLE << 9) | 0x1c -#define EC_WORD_ITEM (EC_GROUP_LIFESTYLE << 9) | 0x1d -#define EC_WORD_NAME (EC_GROUP_LIFESTYLE << 9) | 0x1e -#define EC_WORD_NEWS (EC_GROUP_LIFESTYLE << 9) | 0x1f -#define EC_WORD_POPULAR (EC_GROUP_LIFESTYLE << 9) | 0x20 -#define EC_WORD_PARTY (EC_GROUP_LIFESTYLE << 9) | 0x21 -#define EC_WORD_STUDY (EC_GROUP_LIFESTYLE << 9) | 0x22 -#define EC_WORD_MACHINE (EC_GROUP_LIFESTYLE << 9) | 0x23 -#define EC_WORD_MAIL (EC_GROUP_LIFESTYLE << 9) | 0x24 -#define EC_WORD_MESSAGE (EC_GROUP_LIFESTYLE << 9) | 0x25 -#define EC_WORD_PROMISE (EC_GROUP_LIFESTYLE << 9) | 0x26 -#define EC_WORD_DREAM (EC_GROUP_LIFESTYLE << 9) | 0x27 -#define EC_WORD_KINDERGARTEN (EC_GROUP_LIFESTYLE << 9) | 0x28 -#define EC_WORD_LIFE (EC_GROUP_LIFESTYLE << 9) | 0x29 -#define EC_WORD_RADIO (EC_GROUP_LIFESTYLE << 9) | 0x2a -#define EC_WORD_RENTAL (EC_GROUP_LIFESTYLE << 9) | 0x2b -#define EC_WORD_WORLD (EC_GROUP_LIFESTYLE << 9) | 0x2c +#define EC_WORD_CHORES ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 0) +#define EC_WORD_HOME ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 1) +#define EC_WORD_MONEY ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 2) +#define EC_WORD_ALLOWANCE ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 3) +#define EC_WORD_BATH ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 4) +#define EC_WORD_CONVERSATION ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 5) +#define EC_WORD_SCHOOL ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 6) +#define EC_WORD_COMMEMORATE ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 7) +#define EC_WORD_HABIT ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 8) +#define EC_WORD_GROUP ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 9) +#define EC_WORD_WORD ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 10) +#define EC_WORD_STORE ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 11) +#define EC_WORD_SERVICE ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 12) +#define EC_WORD_WORK ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 13) +#define EC_WORD_SYSTEM ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 14) +#define EC_WORD_TRAIN ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 15) +#define EC_WORD_CLASS ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 16) +#define EC_WORD_LESSONS ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 17) +#define EC_WORD_INFORMATION ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 18) +#define EC_WORD_LIVING ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 19) +#define EC_WORD_TEACHER ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 20) +#define EC_WORD_TOURNAMENT ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 21) +#define EC_WORD_LETTER ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 22) +#define EC_WORD_EVENT ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 23) +#define EC_WORD_DIGITAL ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 24) +#define EC_WORD_TEST ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 25) +#define EC_WORD_DEPT_STORE ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 26) +#define EC_WORD_TELEVISION ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 27) +#define EC_WORD_PHONE ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 28) +#define EC_WORD_ITEM ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 29) +#define EC_WORD_NAME ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 30) +#define EC_WORD_NEWS ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 31) +#define EC_WORD_POPULAR ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 32) +#define EC_WORD_PARTY ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 33) +#define EC_WORD_STUDY ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 34) +#define EC_WORD_MACHINE ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 35) +#define EC_WORD_MAIL ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 36) +#define EC_WORD_MESSAGE ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 37) +#define EC_WORD_PROMISE ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 38) +#define EC_WORD_DREAM ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 39) +#define EC_WORD_KINDERGARTEN ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 40) +#define EC_WORD_LIFE ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 41) +#define EC_WORD_RADIO ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 42) +#define EC_WORD_RENTAL ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 43) +#define EC_WORD_WORLD ((EC_GROUP_LIFESTYLE << EC_MASK_BITS) | 44) // HOBBIES -#define EC_WORD_IDOL (EC_GROUP_HOBBIES << 9) | 0x0 -#define EC_WORD_ANIME (EC_GROUP_HOBBIES << 9) | 0x1 -#define EC_WORD_SONG (EC_GROUP_HOBBIES << 9) | 0x2 -#define EC_WORD_MOVIE (EC_GROUP_HOBBIES << 9) | 0x3 -#define EC_WORD_SWEETS (EC_GROUP_HOBBIES << 9) | 0x4 -#define EC_WORD_CHAT (EC_GROUP_HOBBIES << 9) | 0x5 -#define EC_WORD_CHILD_S_PLAY (EC_GROUP_HOBBIES << 9) | 0x6 -#define EC_WORD_TOYS (EC_GROUP_HOBBIES << 9) | 0x7 -#define EC_WORD_MUSIC (EC_GROUP_HOBBIES << 9) | 0x8 -#define EC_WORD_CARDS (EC_GROUP_HOBBIES << 9) | 0x9 -#define EC_WORD_SHOPPING (EC_GROUP_HOBBIES << 9) | 0xa -#define EC_WORD_CAMERA (EC_GROUP_HOBBIES << 9) | 0xb -#define EC_WORD_VIEWING (EC_GROUP_HOBBIES << 9) | 0xc -#define EC_WORD_SPECTATOR (EC_GROUP_HOBBIES << 9) | 0xd -#define EC_WORD_GOURMET (EC_GROUP_HOBBIES << 9) | 0xe -#define EC_WORD_GAME (EC_GROUP_HOBBIES << 9) | 0xf -#define EC_WORD_RPG (EC_GROUP_HOBBIES << 9) | 0x10 -#define EC_WORD_COLLECTION (EC_GROUP_HOBBIES << 9) | 0x11 -#define EC_WORD_COMPLETE (EC_GROUP_HOBBIES << 9) | 0x12 -#define EC_WORD_MAGAZINE (EC_GROUP_HOBBIES << 9) | 0x13 -#define EC_WORD_WALK (EC_GROUP_HOBBIES << 9) | 0x14 -#define EC_WORD_BIKE (EC_GROUP_HOBBIES << 9) | 0x15 -#define EC_WORD_HOBBY (EC_GROUP_HOBBIES << 9) | 0x16 -#define EC_WORD_SPORTS (EC_GROUP_HOBBIES << 9) | 0x17 -#define EC_WORD_SOFTWARE (EC_GROUP_HOBBIES << 9) | 0x18 -#define EC_WORD_SONGS (EC_GROUP_HOBBIES << 9) | 0x19 -#define EC_WORD_DIET (EC_GROUP_HOBBIES << 9) | 0x1a -#define EC_WORD_TREASURE (EC_GROUP_HOBBIES << 9) | 0x1b -#define EC_WORD_TRAVEL (EC_GROUP_HOBBIES << 9) | 0x1c -#define EC_WORD_DANCE (EC_GROUP_HOBBIES << 9) | 0x1d -#define EC_WORD_CHANNEL (EC_GROUP_HOBBIES << 9) | 0x1e -#define EC_WORD_MAKING (EC_GROUP_HOBBIES << 9) | 0x1f -#define EC_WORD_FISHING (EC_GROUP_HOBBIES << 9) | 0x20 -#define EC_WORD_DATE (EC_GROUP_HOBBIES << 9) | 0x21 -#define EC_WORD_DESIGN (EC_GROUP_HOBBIES << 9) | 0x22 -#define EC_WORD_LOCOMOTIVE (EC_GROUP_HOBBIES << 9) | 0x23 -#define EC_WORD_PLUSH_DOLL (EC_GROUP_HOBBIES << 9) | 0x24 -#define EC_WORD_PC (EC_GROUP_HOBBIES << 9) | 0x25 -#define EC_WORD_FLOWERS (EC_GROUP_HOBBIES << 9) | 0x26 -#define EC_WORD_HERO (EC_GROUP_HOBBIES << 9) | 0x27 -#define EC_WORD_NAP (EC_GROUP_HOBBIES << 9) | 0x28 -#define EC_WORD_HEROINE (EC_GROUP_HOBBIES << 9) | 0x29 -#define EC_WORD_FASHION (EC_GROUP_HOBBIES << 9) | 0x2a -#define EC_WORD_ADVENTURE (EC_GROUP_HOBBIES << 9) | 0x2b -#define EC_WORD_BOARD (EC_GROUP_HOBBIES << 9) | 0x2c -#define EC_WORD_BALL (EC_GROUP_HOBBIES << 9) | 0x2d -#define EC_WORD_BOOK (EC_GROUP_HOBBIES << 9) | 0x2e -#define EC_WORD_FESTIVAL (EC_GROUP_HOBBIES << 9) | 0x2f -#define EC_WORD_COMICS (EC_GROUP_HOBBIES << 9) | 0x30 -#define EC_WORD_HOLIDAY (EC_GROUP_HOBBIES << 9) | 0x31 -#define EC_WORD_PLANS (EC_GROUP_HOBBIES << 9) | 0x32 -#define EC_WORD_TRENDY (EC_GROUP_HOBBIES << 9) | 0x33 -#define EC_WORD_VACATION (EC_GROUP_HOBBIES << 9) | 0x34 -#define EC_WORD_LOOK (EC_GROUP_HOBBIES << 9) | 0x35 +#define EC_WORD_IDOL ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 0) +#define EC_WORD_ANIME ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 1) +#define EC_WORD_SONG ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 2) +#define EC_WORD_MOVIE ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 3) +#define EC_WORD_SWEETS ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 4) +#define EC_WORD_CHAT ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 5) +#define EC_WORD_CHILD_S_PLAY ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 6) +#define EC_WORD_TOYS ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 7) +#define EC_WORD_MUSIC ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 8) +#define EC_WORD_CARDS ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 9) +#define EC_WORD_SHOPPING ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 10) +#define EC_WORD_CAMERA ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 11) +#define EC_WORD_VIEWING ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 12) +#define EC_WORD_SPECTATOR ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 13) +#define EC_WORD_GOURMET ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 14) +#define EC_WORD_GAME ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 15) +#define EC_WORD_RPG ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 16) +#define EC_WORD_COLLECTION ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 17) +#define EC_WORD_COMPLETE ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 18) +#define EC_WORD_MAGAZINE ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 19) +#define EC_WORD_WALK ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 20) +#define EC_WORD_BIKE ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 21) +#define EC_WORD_HOBBY ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 22) +#define EC_WORD_SPORTS ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 23) +#define EC_WORD_SOFTWARE ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 24) +#define EC_WORD_SONGS ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 25) +#define EC_WORD_DIET ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 26) +#define EC_WORD_TREASURE ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 27) +#define EC_WORD_TRAVEL ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 28) +#define EC_WORD_DANCE ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 29) +#define EC_WORD_CHANNEL ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 30) +#define EC_WORD_MAKING ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 31) +#define EC_WORD_FISHING ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 32) +#define EC_WORD_DATE ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 33) +#define EC_WORD_DESIGN ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 34) +#define EC_WORD_LOCOMOTIVE ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 35) +#define EC_WORD_PLUSH_DOLL ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 36) +#define EC_WORD_PC ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 37) +#define EC_WORD_FLOWERS ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 38) +#define EC_WORD_HERO ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 39) +#define EC_WORD_NAP ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 40) +#define EC_WORD_HEROINE ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 41) +#define EC_WORD_FASHION ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 42) +#define EC_WORD_ADVENTURE ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 43) +#define EC_WORD_BOARD ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 44) +#define EC_WORD_BALL ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 45) +#define EC_WORD_BOOK ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 46) +#define EC_WORD_FESTIVAL ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 47) +#define EC_WORD_COMICS ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 48) +#define EC_WORD_HOLIDAY ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 49) +#define EC_WORD_PLANS ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 50) +#define EC_WORD_TRENDY ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 51) +#define EC_WORD_VACATION ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 52) +#define EC_WORD_LOOK ((EC_GROUP_HOBBIES << EC_MASK_BITS) | 53) // TIME -#define EC_WORD_FALL (EC_GROUP_TIME << 9) | 0x0 -#define EC_WORD_MORNING (EC_GROUP_TIME << 9) | 0x1 -#define EC_WORD_TOMORROW (EC_GROUP_TIME << 9) | 0x2 -#define EC_WORD_LAST (EC_GROUP_TIME << 9) | 0x3 -#define EC_WORD_DAY (EC_GROUP_TIME << 9) | 0x4 -#define EC_WORD_SOMETIME (EC_GROUP_TIME << 9) | 0x5 -#define EC_WORD_ALWAYS (EC_GROUP_TIME << 9) | 0x6 -#define EC_WORD_CURRENT (EC_GROUP_TIME << 9) | 0x7 -#define EC_WORD_FOREVER (EC_GROUP_TIME << 9) | 0x8 -#define EC_WORD_DAYS (EC_GROUP_TIME << 9) | 0x9 -#define EC_WORD_END (EC_GROUP_TIME << 9) | 0xa -#define EC_WORD_TUESDAY (EC_GROUP_TIME << 9) | 0xb -#define EC_WORD_YESTERDAY (EC_GROUP_TIME << 9) | 0xc -#define EC_WORD_TODAY (EC_GROUP_TIME << 9) | 0xd -#define EC_WORD_FRIDAY (EC_GROUP_TIME << 9) | 0xe -#define EC_WORD_MONDAY (EC_GROUP_TIME << 9) | 0xf -#define EC_WORD_LATER (EC_GROUP_TIME << 9) | 0x10 -#define EC_WORD_EARLIER (EC_GROUP_TIME << 9) | 0x11 -#define EC_WORD_ANOTHER (EC_GROUP_TIME << 9) | 0x12 -#define EC_WORD_TIME (EC_GROUP_TIME << 9) | 0x13 -#define EC_WORD_FINISH (EC_GROUP_TIME << 9) | 0x14 -#define EC_WORD_WEDNESDAY (EC_GROUP_TIME << 9) | 0x15 -#define EC_WORD_SOON (EC_GROUP_TIME << 9) | 0x16 -#define EC_WORD_START (EC_GROUP_TIME << 9) | 0x17 -#define EC_WORD_MONTH (EC_GROUP_TIME << 9) | 0x18 -#define EC_WORD_STOP (EC_GROUP_TIME << 9) | 0x19 -#define EC_WORD_NOW (EC_GROUP_TIME << 9) | 0x1a -#define EC_WORD_FINAL (EC_GROUP_TIME << 9) | 0x1b -#define EC_WORD_NEXT (EC_GROUP_TIME << 9) | 0x1c -#define EC_WORD_AGE (EC_GROUP_TIME << 9) | 0x1d -#define EC_WORD_SATURDAY (EC_GROUP_TIME << 9) | 0x1e -#define EC_WORD_SUMMER (EC_GROUP_TIME << 9) | 0x1f -#define EC_WORD_SUNDAY (EC_GROUP_TIME << 9) | 0x20 -#define EC_WORD_BEGINNING (EC_GROUP_TIME << 9) | 0x21 -#define EC_WORD_SPRING (EC_GROUP_TIME << 9) | 0x22 -#define EC_WORD_DAYTIME (EC_GROUP_TIME << 9) | 0x23 -#define EC_WORD_WINTER (EC_GROUP_TIME << 9) | 0x24 -#define EC_WORD_DAILY (EC_GROUP_TIME << 9) | 0x25 -#define EC_WORD_OLDEN (EC_GROUP_TIME << 9) | 0x26 -#define EC_WORD_ALMOST (EC_GROUP_TIME << 9) | 0x27 -#define EC_WORD_NEARLY (EC_GROUP_TIME << 9) | 0x28 -#define EC_WORD_THURSDAY (EC_GROUP_TIME << 9) | 0x29 -#define EC_WORD_NIGHTTIME (EC_GROUP_TIME << 9) | 0x2a -#define EC_WORD_NIGHT (EC_GROUP_TIME << 9) | 0x2b -#define EC_WORD_WEEK (EC_GROUP_TIME << 9) | 0x2c +#define EC_WORD_FALL ((EC_GROUP_TIME << EC_MASK_BITS) | 0) +#define EC_WORD_MORNING ((EC_GROUP_TIME << EC_MASK_BITS) | 1) +#define EC_WORD_TOMORROW ((EC_GROUP_TIME << EC_MASK_BITS) | 2) +#define EC_WORD_LAST ((EC_GROUP_TIME << EC_MASK_BITS) | 3) +#define EC_WORD_DAY ((EC_GROUP_TIME << EC_MASK_BITS) | 4) +#define EC_WORD_SOMETIME ((EC_GROUP_TIME << EC_MASK_BITS) | 5) +#define EC_WORD_ALWAYS ((EC_GROUP_TIME << EC_MASK_BITS) | 6) +#define EC_WORD_CURRENT ((EC_GROUP_TIME << EC_MASK_BITS) | 7) +#define EC_WORD_FOREVER ((EC_GROUP_TIME << EC_MASK_BITS) | 8) +#define EC_WORD_DAYS ((EC_GROUP_TIME << EC_MASK_BITS) | 9) +#define EC_WORD_END ((EC_GROUP_TIME << EC_MASK_BITS) | 10) +#define EC_WORD_TUESDAY ((EC_GROUP_TIME << EC_MASK_BITS) | 11) +#define EC_WORD_YESTERDAY ((EC_GROUP_TIME << EC_MASK_BITS) | 12) +#define EC_WORD_TODAY ((EC_GROUP_TIME << EC_MASK_BITS) | 13) +#define EC_WORD_FRIDAY ((EC_GROUP_TIME << EC_MASK_BITS) | 14) +#define EC_WORD_MONDAY ((EC_GROUP_TIME << EC_MASK_BITS) | 15) +#define EC_WORD_LATER ((EC_GROUP_TIME << EC_MASK_BITS) | 16) +#define EC_WORD_EARLIER ((EC_GROUP_TIME << EC_MASK_BITS) | 17) +#define EC_WORD_ANOTHER ((EC_GROUP_TIME << EC_MASK_BITS) | 18) +#define EC_WORD_TIME ((EC_GROUP_TIME << EC_MASK_BITS) | 19) +#define EC_WORD_FINISH ((EC_GROUP_TIME << EC_MASK_BITS) | 20) +#define EC_WORD_WEDNESDAY ((EC_GROUP_TIME << EC_MASK_BITS) | 21) +#define EC_WORD_SOON ((EC_GROUP_TIME << EC_MASK_BITS) | 22) +#define EC_WORD_START ((EC_GROUP_TIME << EC_MASK_BITS) | 23) +#define EC_WORD_MONTH ((EC_GROUP_TIME << EC_MASK_BITS) | 24) +#define EC_WORD_STOP ((EC_GROUP_TIME << EC_MASK_BITS) | 25) +#define EC_WORD_NOW ((EC_GROUP_TIME << EC_MASK_BITS) | 26) +#define EC_WORD_FINAL ((EC_GROUP_TIME << EC_MASK_BITS) | 27) +#define EC_WORD_NEXT ((EC_GROUP_TIME << EC_MASK_BITS) | 28) +#define EC_WORD_AGE ((EC_GROUP_TIME << EC_MASK_BITS) | 29) +#define EC_WORD_SATURDAY ((EC_GROUP_TIME << EC_MASK_BITS) | 30) +#define EC_WORD_SUMMER ((EC_GROUP_TIME << EC_MASK_BITS) | 31) +#define EC_WORD_SUNDAY ((EC_GROUP_TIME << EC_MASK_BITS) | 32) +#define EC_WORD_BEGINNING ((EC_GROUP_TIME << EC_MASK_BITS) | 33) +#define EC_WORD_SPRING ((EC_GROUP_TIME << EC_MASK_BITS) | 34) +#define EC_WORD_DAYTIME ((EC_GROUP_TIME << EC_MASK_BITS) | 35) +#define EC_WORD_WINTER ((EC_GROUP_TIME << EC_MASK_BITS) | 36) +#define EC_WORD_DAILY ((EC_GROUP_TIME << EC_MASK_BITS) | 37) +#define EC_WORD_OLDEN ((EC_GROUP_TIME << EC_MASK_BITS) | 38) +#define EC_WORD_ALMOST ((EC_GROUP_TIME << EC_MASK_BITS) | 39) +#define EC_WORD_NEARLY ((EC_GROUP_TIME << EC_MASK_BITS) | 40) +#define EC_WORD_THURSDAY ((EC_GROUP_TIME << EC_MASK_BITS) | 41) +#define EC_WORD_NIGHTTIME ((EC_GROUP_TIME << EC_MASK_BITS) | 42) +#define EC_WORD_NIGHT ((EC_GROUP_TIME << EC_MASK_BITS) | 43) +#define EC_WORD_WEEK ((EC_GROUP_TIME << EC_MASK_BITS) | 44) // MISC -#define EC_WORD_HIGHS (EC_GROUP_MISC << 9) | 0x0 -#define EC_WORD_LOWS (EC_GROUP_MISC << 9) | 0x1 -#define EC_WORD_UM (EC_GROUP_MISC << 9) | 0x2 -#define EC_WORD_REAR (EC_GROUP_MISC << 9) | 0x3 -#define EC_WORD_THINGS (EC_GROUP_MISC << 9) | 0x4 -#define EC_WORD_THING (EC_GROUP_MISC << 9) | 0x5 -#define EC_WORD_BELOW (EC_GROUP_MISC << 9) | 0x6 -#define EC_WORD_ABOVE (EC_GROUP_MISC << 9) | 0x7 -#define EC_WORD_BACK (EC_GROUP_MISC << 9) | 0x8 -#define EC_WORD_HIGH (EC_GROUP_MISC << 9) | 0x9 -#define EC_WORD_HERE (EC_GROUP_MISC << 9) | 0xa -#define EC_WORD_INSIDE (EC_GROUP_MISC << 9) | 0xb -#define EC_WORD_OUTSIDE (EC_GROUP_MISC << 9) | 0xc -#define EC_WORD_BESIDE (EC_GROUP_MISC << 9) | 0xd -#define EC_WORD_THIS_IS_IT_EXCL (EC_GROUP_MISC << 9) | 0xe -#define EC_WORD_THIS (EC_GROUP_MISC << 9) | 0xf -#define EC_WORD_EVERY (EC_GROUP_MISC << 9) | 0x10 -#define EC_WORD_THESE (EC_GROUP_MISC << 9) | 0x11 -#define EC_WORD_THESE_WERE (EC_GROUP_MISC << 9) | 0x12 -#define EC_WORD_DOWN (EC_GROUP_MISC << 9) | 0x13 -#define EC_WORD_THAT (EC_GROUP_MISC << 9) | 0x14 -#define EC_WORD_THOSE_ARE (EC_GROUP_MISC << 9) | 0x15 -#define EC_WORD_THOSE_WERE (EC_GROUP_MISC << 9) | 0x16 -#define EC_WORD_THAT_S_IT_EXCL (EC_GROUP_MISC << 9) | 0x17 -#define EC_WORD_AM (EC_GROUP_MISC << 9) | 0x18 -#define EC_WORD_THAT_WAS (EC_GROUP_MISC << 9) | 0x19 -#define EC_WORD_FRONT (EC_GROUP_MISC << 9) | 0x1a -#define EC_WORD_UP (EC_GROUP_MISC << 9) | 0x1b -#define EC_WORD_CHOICE (EC_GROUP_MISC << 9) | 0x1c -#define EC_WORD_FAR (EC_GROUP_MISC << 9) | 0x1d -#define EC_WORD_AWAY (EC_GROUP_MISC << 9) | 0x1e -#define EC_WORD_NEAR (EC_GROUP_MISC << 9) | 0x1f -#define EC_WORD_WHERE (EC_GROUP_MISC << 9) | 0x20 -#define EC_WORD_WHEN (EC_GROUP_MISC << 9) | 0x21 -#define EC_WORD_WHAT (EC_GROUP_MISC << 9) | 0x22 -#define EC_WORD_DEEP (EC_GROUP_MISC << 9) | 0x23 -#define EC_WORD_SHALLOW (EC_GROUP_MISC << 9) | 0x24 -#define EC_WORD_WHY (EC_GROUP_MISC << 9) | 0x25 -#define EC_WORD_CONFUSED (EC_GROUP_MISC << 9) | 0x26 -#define EC_WORD_OPPOSITE (EC_GROUP_MISC << 9) | 0x27 -#define EC_WORD_LEFT (EC_GROUP_MISC << 9) | 0x28 -#define EC_WORD_RIGHT (EC_GROUP_MISC << 9) | 0x29 +#define EC_WORD_HIGHS ((EC_GROUP_MISC << EC_MASK_BITS) | 0) +#define EC_WORD_LOWS ((EC_GROUP_MISC << EC_MASK_BITS) | 1) +#define EC_WORD_UM ((EC_GROUP_MISC << EC_MASK_BITS) | 2) +#define EC_WORD_REAR ((EC_GROUP_MISC << EC_MASK_BITS) | 3) +#define EC_WORD_THINGS ((EC_GROUP_MISC << EC_MASK_BITS) | 4) +#define EC_WORD_THING ((EC_GROUP_MISC << EC_MASK_BITS) | 5) +#define EC_WORD_BELOW ((EC_GROUP_MISC << EC_MASK_BITS) | 6) +#define EC_WORD_ABOVE ((EC_GROUP_MISC << EC_MASK_BITS) | 7) +#define EC_WORD_BACK ((EC_GROUP_MISC << EC_MASK_BITS) | 8) +#define EC_WORD_HIGH ((EC_GROUP_MISC << EC_MASK_BITS) | 9) +#define EC_WORD_HERE ((EC_GROUP_MISC << EC_MASK_BITS) | 10) +#define EC_WORD_INSIDE ((EC_GROUP_MISC << EC_MASK_BITS) | 11) +#define EC_WORD_OUTSIDE ((EC_GROUP_MISC << EC_MASK_BITS) | 12) +#define EC_WORD_BESIDE ((EC_GROUP_MISC << EC_MASK_BITS) | 13) +#define EC_WORD_THIS_IS_IT_EXCL ((EC_GROUP_MISC << EC_MASK_BITS) | 14) +#define EC_WORD_THIS ((EC_GROUP_MISC << EC_MASK_BITS) | 15) +#define EC_WORD_EVERY ((EC_GROUP_MISC << EC_MASK_BITS) | 16) +#define EC_WORD_THESE ((EC_GROUP_MISC << EC_MASK_BITS) | 17) +#define EC_WORD_THESE_WERE ((EC_GROUP_MISC << EC_MASK_BITS) | 18) +#define EC_WORD_DOWN ((EC_GROUP_MISC << EC_MASK_BITS) | 19) +#define EC_WORD_THAT ((EC_GROUP_MISC << EC_MASK_BITS) | 20) +#define EC_WORD_THOSE_ARE ((EC_GROUP_MISC << EC_MASK_BITS) | 21) +#define EC_WORD_THOSE_WERE ((EC_GROUP_MISC << EC_MASK_BITS) | 22) +#define EC_WORD_THAT_S_IT_EXCL ((EC_GROUP_MISC << EC_MASK_BITS) | 23) +#define EC_WORD_AM ((EC_GROUP_MISC << EC_MASK_BITS) | 24) +#define EC_WORD_THAT_WAS ((EC_GROUP_MISC << EC_MASK_BITS) | 25) +#define EC_WORD_FRONT ((EC_GROUP_MISC << EC_MASK_BITS) | 26) +#define EC_WORD_UP ((EC_GROUP_MISC << EC_MASK_BITS) | 27) +#define EC_WORD_CHOICE ((EC_GROUP_MISC << EC_MASK_BITS) | 28) +#define EC_WORD_FAR ((EC_GROUP_MISC << EC_MASK_BITS) | 29) +#define EC_WORD_AWAY ((EC_GROUP_MISC << EC_MASK_BITS) | 30) +#define EC_WORD_NEAR ((EC_GROUP_MISC << EC_MASK_BITS) | 31) +#define EC_WORD_WHERE ((EC_GROUP_MISC << EC_MASK_BITS) | 32) +#define EC_WORD_WHEN ((EC_GROUP_MISC << EC_MASK_BITS) | 33) +#define EC_WORD_WHAT ((EC_GROUP_MISC << EC_MASK_BITS) | 34) +#define EC_WORD_DEEP ((EC_GROUP_MISC << EC_MASK_BITS) | 35) +#define EC_WORD_SHALLOW ((EC_GROUP_MISC << EC_MASK_BITS) | 36) +#define EC_WORD_WHY ((EC_GROUP_MISC << EC_MASK_BITS) | 37) +#define EC_WORD_CONFUSED ((EC_GROUP_MISC << EC_MASK_BITS) | 38) +#define EC_WORD_OPPOSITE ((EC_GROUP_MISC << EC_MASK_BITS) | 39) +#define EC_WORD_LEFT ((EC_GROUP_MISC << EC_MASK_BITS) | 40) +#define EC_WORD_RIGHT ((EC_GROUP_MISC << EC_MASK_BITS) | 41) // ADJECTIVES -#define EC_WORD_WANDERING (EC_GROUP_ADJECTIVES << 9) | 0x0 -#define EC_WORD_RICKETY (EC_GROUP_ADJECTIVES << 9) | 0x1 -#define EC_WORD_ROCK_SOLID (EC_GROUP_ADJECTIVES << 9) | 0x2 -#define EC_WORD_HUNGRY (EC_GROUP_ADJECTIVES << 9) | 0x3 -#define EC_WORD_TIGHT (EC_GROUP_ADJECTIVES << 9) | 0x4 -#define EC_WORD_TICKLISH (EC_GROUP_ADJECTIVES << 9) | 0x5 -#define EC_WORD_TWIRLING (EC_GROUP_ADJECTIVES << 9) | 0x6 -#define EC_WORD_SPIRALING (EC_GROUP_ADJECTIVES << 9) | 0x7 -#define EC_WORD_THIRSTY (EC_GROUP_ADJECTIVES << 9) | 0x8 -#define EC_WORD_LOLLING (EC_GROUP_ADJECTIVES << 9) | 0x9 -#define EC_WORD_SILKY (EC_GROUP_ADJECTIVES << 9) | 0xa -#define EC_WORD_SADLY (EC_GROUP_ADJECTIVES << 9) | 0xb -#define EC_WORD_HOPELESS (EC_GROUP_ADJECTIVES << 9) | 0xc -#define EC_WORD_USELESS (EC_GROUP_ADJECTIVES << 9) | 0xd -#define EC_WORD_DROOLING (EC_GROUP_ADJECTIVES << 9) | 0xe -#define EC_WORD_EXCITING (EC_GROUP_ADJECTIVES << 9) | 0xf -#define EC_WORD_THICK (EC_GROUP_ADJECTIVES << 9) | 0x10 -#define EC_WORD_SMOOTH (EC_GROUP_ADJECTIVES << 9) | 0x11 -#define EC_WORD_SLIMY (EC_GROUP_ADJECTIVES << 9) | 0x12 -#define EC_WORD_THIN (EC_GROUP_ADJECTIVES << 9) | 0x13 -#define EC_WORD_BREAK (EC_GROUP_ADJECTIVES << 9) | 0x14 -#define EC_WORD_VORACIOUS (EC_GROUP_ADJECTIVES << 9) | 0x15 -#define EC_WORD_SCATTER (EC_GROUP_ADJECTIVES << 9) | 0x16 -#define EC_WORD_AWESOME (EC_GROUP_ADJECTIVES << 9) | 0x17 -#define EC_WORD_WIMPY (EC_GROUP_ADJECTIVES << 9) | 0x18 -#define EC_WORD_WOBBLY (EC_GROUP_ADJECTIVES << 9) | 0x19 -#define EC_WORD_SHAKY (EC_GROUP_ADJECTIVES << 9) | 0x1a -#define EC_WORD_RIPPED (EC_GROUP_ADJECTIVES << 9) | 0x1b -#define EC_WORD_SHREDDED (EC_GROUP_ADJECTIVES << 9) | 0x1c -#define EC_WORD_INCREASING (EC_GROUP_ADJECTIVES << 9) | 0x1d -#define EC_WORD_YET (EC_GROUP_ADJECTIVES << 9) | 0x1e -#define EC_WORD_DESTROYED (EC_GROUP_ADJECTIVES << 9) | 0x1f -#define EC_WORD_FIERY (EC_GROUP_ADJECTIVES << 9) | 0x20 -#define EC_WORD_LOVEY_DOVEY (EC_GROUP_ADJECTIVES << 9) | 0x21 -#define EC_WORD_HAPPILY (EC_GROUP_ADJECTIVES << 9) | 0x22 -#define EC_WORD_ANTICIPATION (EC_GROUP_ADJECTIVES << 9) | 0x23 +#define EC_WORD_WANDERING ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 0) +#define EC_WORD_RICKETY ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 1) +#define EC_WORD_ROCK_SOLID ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 2) +#define EC_WORD_HUNGRY ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 3) +#define EC_WORD_TIGHT ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 4) +#define EC_WORD_TICKLISH ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 5) +#define EC_WORD_TWIRLING ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 6) +#define EC_WORD_SPIRALING ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 7) +#define EC_WORD_THIRSTY ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 8) +#define EC_WORD_LOLLING ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 9) +#define EC_WORD_SILKY ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 10) +#define EC_WORD_SADLY ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 11) +#define EC_WORD_HOPELESS ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 12) +#define EC_WORD_USELESS ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 13) +#define EC_WORD_DROOLING ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 14) +#define EC_WORD_EXCITING ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 15) +#define EC_WORD_THICK ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 16) +#define EC_WORD_SMOOTH ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 17) +#define EC_WORD_SLIMY ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 18) +#define EC_WORD_THIN ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 19) +#define EC_WORD_BREAK ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 20) +#define EC_WORD_VORACIOUS ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 21) +#define EC_WORD_SCATTER ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 22) +#define EC_WORD_AWESOME ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 23) +#define EC_WORD_WIMPY ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 24) +#define EC_WORD_WOBBLY ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 25) +#define EC_WORD_SHAKY ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 26) +#define EC_WORD_RIPPED ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 27) +#define EC_WORD_SHREDDED ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 28) +#define EC_WORD_INCREASING ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 29) +#define EC_WORD_YET ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 30) +#define EC_WORD_DESTROYED ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 31) +#define EC_WORD_FIERY ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 32) +#define EC_WORD_LOVEY_DOVEY ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 33) +#define EC_WORD_HAPPILY ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 34) +#define EC_WORD_ANTICIPATION ((EC_GROUP_ADJECTIVES << EC_MASK_BITS) | 35) // EVENTS -#define EC_WORD_APPEAL (EC_GROUP_EVENTS << 9) | 0x0 -#define EC_WORD_EVENTS (EC_GROUP_EVENTS << 9) | 0x1 -#define EC_WORD_STAY_AT_HOME (EC_GROUP_EVENTS << 9) | 0x2 -#define EC_WORD_BERRY (EC_GROUP_EVENTS << 9) | 0x3 -#define EC_WORD_CONTEST (EC_GROUP_EVENTS << 9) | 0x4 -#define EC_WORD_MC (EC_GROUP_EVENTS << 9) | 0x5 -#define EC_WORD_JUDGE (EC_GROUP_EVENTS << 9) | 0x6 -#define EC_WORD_SUPER (EC_GROUP_EVENTS << 9) | 0x7 -#define EC_WORD_STAGE (EC_GROUP_EVENTS << 9) | 0x8 -#define EC_WORD_HALL_OF_FAME (EC_GROUP_EVENTS << 9) | 0x9 -#define EC_WORD_EVOLUTION (EC_GROUP_EVENTS << 9) | 0xa -#define EC_WORD_HYPER (EC_GROUP_EVENTS << 9) | 0xb -#define EC_WORD_BATTLE_TOWER (EC_GROUP_EVENTS << 9) | 0xc -#define EC_WORD_LEADERS (EC_GROUP_EVENTS << 9) | 0xd -#define EC_WORD_BATTLE_ROOM (EC_GROUP_EVENTS << 9) | 0xe -#define EC_WORD_HIDDEN (EC_GROUP_EVENTS << 9) | 0xf -#define EC_WORD_SECRET_BASE (EC_GROUP_EVENTS << 9) | 0x10 -#define EC_WORD_BLEND (EC_GROUP_EVENTS << 9) | 0x11 -#define EC_WORD_POKEBLOCK (EC_GROUP_EVENTS << 9) | 0x12 -#define EC_WORD_MASTER (EC_GROUP_EVENTS << 9) | 0x13 -#define EC_WORD_RANK (EC_GROUP_EVENTS << 9) | 0x14 -#define EC_WORD_RIBBON (EC_GROUP_EVENTS << 9) | 0x15 -#define EC_WORD_CRUSH (EC_GROUP_EVENTS << 9) | 0x16 -#define EC_WORD_DIRECT (EC_GROUP_EVENTS << 9) | 0x17 -#define EC_WORD_TOWER (EC_GROUP_EVENTS << 9) | 0x18 -#define EC_WORD_UNION (EC_GROUP_EVENTS << 9) | 0x19 -#define EC_WORD_ROOM (EC_GROUP_EVENTS << 9) | 0x1a -#define EC_WORD_WIRELESS (EC_GROUP_EVENTS << 9) | 0x1b -#define EC_WORD_FRONTIER (EC_GROUP_EVENTS << 9) | 0x1c +#define EC_WORD_APPEAL ((EC_GROUP_EVENTS << EC_MASK_BITS) | 0) +#define EC_WORD_EVENTS ((EC_GROUP_EVENTS << EC_MASK_BITS) | 1) +#define EC_WORD_STAY_AT_HOME ((EC_GROUP_EVENTS << EC_MASK_BITS) | 2) +#define EC_WORD_BERRY ((EC_GROUP_EVENTS << EC_MASK_BITS) | 3) +#define EC_WORD_CONTEST ((EC_GROUP_EVENTS << EC_MASK_BITS) | 4) +#define EC_WORD_MC ((EC_GROUP_EVENTS << EC_MASK_BITS) | 5) +#define EC_WORD_JUDGE ((EC_GROUP_EVENTS << EC_MASK_BITS) | 6) +#define EC_WORD_SUPER ((EC_GROUP_EVENTS << EC_MASK_BITS) | 7) +#define EC_WORD_STAGE ((EC_GROUP_EVENTS << EC_MASK_BITS) | 8) +#define EC_WORD_HALL_OF_FAME ((EC_GROUP_EVENTS << EC_MASK_BITS) | 9) +#define EC_WORD_EVOLUTION ((EC_GROUP_EVENTS << EC_MASK_BITS) | 10) +#define EC_WORD_HYPER ((EC_GROUP_EVENTS << EC_MASK_BITS) | 11) +#define EC_WORD_BATTLE_TOWER ((EC_GROUP_EVENTS << EC_MASK_BITS) | 12) +#define EC_WORD_LEADERS ((EC_GROUP_EVENTS << EC_MASK_BITS) | 13) +#define EC_WORD_BATTLE_ROOM ((EC_GROUP_EVENTS << EC_MASK_BITS) | 14) +#define EC_WORD_HIDDEN ((EC_GROUP_EVENTS << EC_MASK_BITS) | 15) +#define EC_WORD_SECRET_BASE ((EC_GROUP_EVENTS << EC_MASK_BITS) | 16) +#define EC_WORD_BLEND ((EC_GROUP_EVENTS << EC_MASK_BITS) | 17) +#define EC_WORD_POKEBLOCK ((EC_GROUP_EVENTS << EC_MASK_BITS) | 18) +#define EC_WORD_MASTER ((EC_GROUP_EVENTS << EC_MASK_BITS) | 19) +#define EC_WORD_RANK ((EC_GROUP_EVENTS << EC_MASK_BITS) | 20) +#define EC_WORD_RIBBON ((EC_GROUP_EVENTS << EC_MASK_BITS) | 21) +#define EC_WORD_CRUSH ((EC_GROUP_EVENTS << EC_MASK_BITS) | 22) +#define EC_WORD_DIRECT ((EC_GROUP_EVENTS << EC_MASK_BITS) | 23) +#define EC_WORD_TOWER ((EC_GROUP_EVENTS << EC_MASK_BITS) | 24) +#define EC_WORD_UNION ((EC_GROUP_EVENTS << EC_MASK_BITS) | 25) +#define EC_WORD_ROOM ((EC_GROUP_EVENTS << EC_MASK_BITS) | 26) +#define EC_WORD_WIRELESS ((EC_GROUP_EVENTS << EC_MASK_BITS) | 27) +#define EC_WORD_FRONTIER ((EC_GROUP_EVENTS << EC_MASK_BITS) | 28) // TRENDY_SAYING -#define EC_WORD_KTHX_BYE (EC_GROUP_TRENDY_SAYING << 9) | 0x0 -#define EC_WORD_YES_SIR_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x1 -#define EC_WORD_AVANT_GARDE (EC_GROUP_TRENDY_SAYING << 9) | 0x2 -#define EC_WORD_COUPLE (EC_GROUP_TRENDY_SAYING << 9) | 0x3 -#define EC_WORD_MUCH_OBLIGED (EC_GROUP_TRENDY_SAYING << 9) | 0x4 -#define EC_WORD_YEEHAW_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x5 -#define EC_WORD_MEGA (EC_GROUP_TRENDY_SAYING << 9) | 0x6 -#define EC_WORD_1_HIT_KO_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x7 -#define EC_WORD_DESTINY (EC_GROUP_TRENDY_SAYING << 9) | 0x8 -#define EC_WORD_CANCEL (EC_GROUP_TRENDY_SAYING << 9) | 0x9 -#define EC_WORD_NEW (EC_GROUP_TRENDY_SAYING << 9) | 0xa -#define EC_WORD_FLATTEN (EC_GROUP_TRENDY_SAYING << 9) | 0xb -#define EC_WORD_KIDDING (EC_GROUP_TRENDY_SAYING << 9) | 0xc -#define EC_WORD_LOSER (EC_GROUP_TRENDY_SAYING << 9) | 0xd -#define EC_WORD_LOSING (EC_GROUP_TRENDY_SAYING << 9) | 0xe -#define EC_WORD_HAPPENING (EC_GROUP_TRENDY_SAYING << 9) | 0xf -#define EC_WORD_HIP_AND (EC_GROUP_TRENDY_SAYING << 9) | 0x10 -#define EC_WORD_SHAKE (EC_GROUP_TRENDY_SAYING << 9) | 0x11 -#define EC_WORD_SHADY (EC_GROUP_TRENDY_SAYING << 9) | 0x12 -#define EC_WORD_UPBEAT (EC_GROUP_TRENDY_SAYING << 9) | 0x13 -#define EC_WORD_MODERN (EC_GROUP_TRENDY_SAYING << 9) | 0x14 -#define EC_WORD_SMELL_YA (EC_GROUP_TRENDY_SAYING << 9) | 0x15 -#define EC_WORD_BANG (EC_GROUP_TRENDY_SAYING << 9) | 0x16 -#define EC_WORD_KNOCKOUT (EC_GROUP_TRENDY_SAYING << 9) | 0x17 -#define EC_WORD_HASSLE (EC_GROUP_TRENDY_SAYING << 9) | 0x18 -#define EC_WORD_WINNER (EC_GROUP_TRENDY_SAYING << 9) | 0x19 -#define EC_WORD_FEVER (EC_GROUP_TRENDY_SAYING << 9) | 0x1a -#define EC_WORD_WANNABE (EC_GROUP_TRENDY_SAYING << 9) | 0x1b -#define EC_WORD_BABY (EC_GROUP_TRENDY_SAYING << 9) | 0x1c -#define EC_WORD_HEART (EC_GROUP_TRENDY_SAYING << 9) | 0x1d -#define EC_WORD_OLD (EC_GROUP_TRENDY_SAYING << 9) | 0x1e -#define EC_WORD_YOUNG (EC_GROUP_TRENDY_SAYING << 9) | 0x1f -#define EC_WORD_UGLY (EC_GROUP_TRENDY_SAYING << 9) | 0x20 +#define EC_WORD_KTHX_BYE ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 0) +#define EC_WORD_YES_SIR_EXCL ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 1) +#define EC_WORD_AVANT_GARDE ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 2) +#define EC_WORD_COUPLE ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 3) +#define EC_WORD_MUCH_OBLIGED ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 4) +#define EC_WORD_YEEHAW_EXCL ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 5) +#define EC_WORD_MEGA ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 6) +#define EC_WORD_1_HIT_KO_EXCL ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 7) +#define EC_WORD_DESTINY ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 8) +#define EC_WORD_CANCEL ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 9) +#define EC_WORD_NEW ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 10) +#define EC_WORD_FLATTEN ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 11) +#define EC_WORD_KIDDING ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 12) +#define EC_WORD_LOSER ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 13) +#define EC_WORD_LOSING ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 14) +#define EC_WORD_HAPPENING ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 15) +#define EC_WORD_HIP_AND ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 16) +#define EC_WORD_SHAKE ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 17) +#define EC_WORD_SHADY ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 18) +#define EC_WORD_UPBEAT ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 19) +#define EC_WORD_MODERN ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 20) +#define EC_WORD_SMELL_YA ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 21) +#define EC_WORD_BANG ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 22) +#define EC_WORD_KNOCKOUT ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 23) +#define EC_WORD_HASSLE ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 24) +#define EC_WORD_WINNER ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 25) +#define EC_WORD_FEVER ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 26) +#define EC_WORD_WANNABE ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 27) +#define EC_WORD_BABY ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 28) +#define EC_WORD_HEART ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 29) +#define EC_WORD_OLD ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 30) +#define EC_WORD_YOUNG ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 31) +#define EC_WORD_UGLY ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 32) #define NUM_ADDITIONAL_PHRASES 33 // Special Berry Masters Wife phrases @@ -1109,17 +1109,22 @@ #define EC_MAX_WORDS_IN_GROUP 270 // The closest is words by letter S, at 262 -#define EC_MASK_GROUP 0x7F -#define EC_MASK_INDEX 0x1FF +// If the Pokémon or Move group tables have an ID higher than 511, the word will be seen as +// invalid due to the index looping back to the beginning and not matching the proper value. +// To allow for higher values on those tables, increase the value of EC_MASK_BITS and the max value +// will increase to (2 ^ EC_MASK_BITS). Keep in mind that existing saved words will be shifted. +#define EC_MASK_BITS 9 +#define EC_MASK_GROUP ((1 << (16 - EC_MASK_BITS)) - 1) +#define EC_MASK_INDEX ((1 << EC_MASK_BITS) - 1) -#define EC_POKEMON(mon) ((EC_GROUP_POKEMON << 9) | SPECIES_##mon) -#define EC_POKEMON_NATIONAL(mon) ((EC_GROUP_POKEMON_NATIONAL << 9) | SPECIES_##mon) -#define EC_MOVE(move) ((EC_GROUP_MOVE_1 << 9) | MOVE_##move) -#define EC_MOVE2(move) ((EC_GROUP_MOVE_2 << 9) | MOVE_##move) +#define EC_POKEMON(mon) ((EC_GROUP_POKEMON << EC_MASK_BITS) | SPECIES_##mon) +#define EC_POKEMON_NATIONAL(mon) ((EC_GROUP_POKEMON_NATIONAL << EC_MASK_BITS) | SPECIES_##mon) +#define EC_MOVE(move) ((EC_GROUP_MOVE_1 << EC_MASK_BITS) | MOVE_##move) +#define EC_MOVE2(move) ((EC_GROUP_MOVE_2 << EC_MASK_BITS) | MOVE_##move) -#define EC_GROUP(word) ((word) >> 9) +#define EC_GROUP(word) ((word) >> EC_MASK_BITS) #define EC_INDEX(word) ((word) & EC_MASK_INDEX) -#define EC_WORD(group, index) ((((group) & EC_MASK_GROUP) << 9) | ((index) & EC_MASK_INDEX)) +#define EC_WORD(group, index) ((((group) & EC_MASK_GROUP) << EC_MASK_BITS) | ((index) & EC_MASK_INDEX)) #define EC_EMPTY_WORD 0xFFFF diff --git a/include/constants/field_specials.h b/include/constants/field_specials.h index a01151378bcb..665940331365 100644 --- a/include/constants/field_specials.h +++ b/include/constants/field_specials.h @@ -80,4 +80,10 @@ #define FANCOUNTER_FINISHED_CONTEST 2 #define FANCOUNTER_USED_BATTLE_TOWER 3 +// Return values for DoDeoxysRockInteraction +#define DEOXYS_ROCK_FAILED 0 +#define DEOXYS_ROCK_PROGRESSED 1 +#define DEOXYS_ROCK_SOLVED 2 +#define DEOXYS_ROCK_COMPLETE 3 + #endif // GUARD_CONSTANTS_FIELD_SPECIALS_H diff --git a/include/constants/game_stat.h b/include/constants/game_stat.h index 2acdfd8a3e78..053e4a8f9e98 100644 --- a/include/constants/game_stat.h +++ b/include/constants/game_stat.h @@ -1,60 +1,60 @@ #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 GAME_STAT_NUM_UNION_ROOM_BATTLES 50 -#define GAME_STAT_PLAYED_BERRY_CRUSH 51 +#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_SINGLES_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 GAME_STAT_NUM_UNION_ROOM_BATTLES 50 +#define GAME_STAT_PLAYED_BERRY_CRUSH 51 -#define NUM_USED_GAME_STATS 52 -#define NUM_GAME_STATS 64 +#define NUM_USED_GAME_STATS 52 +#define NUM_GAME_STATS 64 #endif // GUARD_CONSTANTS_GAME_STAT_H diff --git a/include/constants/global.h b/include/constants/global.h index 5870cf4163d5..2b8b27028dba 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -1,8 +1,11 @@ #ifndef GUARD_CONSTANTS_GLOBAL_H #define GUARD_CONSTANTS_GLOBAL_H -#include "constants/battle_config.h" -#include "constants/overworld_config.h" +#include "config/battle.h" +#include "config/debug.h" +#include "config/item.h" +#include "config/pokemon.h" +#include "config/overworld.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. diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index e0361795d7f7..cd4256632162 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -152,6 +152,14 @@ #define HOLD_EFFECT_HEAVY_DUTY_BOOTS 173 #define HOLD_EFFECT_THROAT_SPRAY 174 +// Gen9 hold effects +#define HOLD_EFFECT_ABILITY_SHIELD 175 +#define HOLD_EFFECT_CLEAR_AMULET 176 +#define HOLD_EFFECT_MIRROR_HERB 177 // Not implemented. +#define HOLD_EFFECT_PUNCHING_GLOVE 178 +#define HOLD_EFFECT_COVERT_CLOAK 179 +#define HOLD_EFFECT_LOADED_DICE 180 + #define HOLD_EFFECT_CHOICE(holdEffect)((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS)) // Terrain seed params diff --git a/include/constants/items.h b/include/constants/items.h index 9f931686ec9e..1cb2803f37e0 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -928,7 +928,13 @@ #define ITEM_RUBY 756 #define ITEM_SAPPHIRE 757 -#define ITEMS_COUNT 758 +#define ITEM_ABILITY_SHIELD 758 +#define ITEM_CLEAR_AMULET 759 +#define ITEM_PUNCHING_GLOVE 760 +#define ITEM_COVERT_CLOAK 761 +#define ITEM_LOADED_DICE 762 + +#define ITEMS_COUNT 763 #define ITEM_FIELD_ARROW ITEMS_COUNT // A special item id associated with "Cancel"/"Exit" etc. in a list of items or decorations diff --git a/include/constants/maps.h b/include/constants/maps.h index 626054b43fc6..1bf11fa5cc15 100644 --- a/include/constants/maps.h +++ b/include/constants/maps.h @@ -14,8 +14,8 @@ // 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_DYNAMIC 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. +// dynamic warp should be used, at which point the warp id is ignored. They can be passed +// as the argument to SetWarpDestinationToDynamicWarp, 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 diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 86f35ce50dbc..1f6d4e87cbfb 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -18,7 +18,7 @@ #define MB_MOSSDEEP_GYM_WARP 0x0E #define MB_MT_PYRE_HOLE 0x0F #define MB_POND_WATER 0x10 -#define MB_SEMI_DEEP_WATER 0x11 +#define MB_INTERIOR_DEEP_WATER 0x11 // Used by interior maps; functionally the same as MB_DEEP_WATER #define MB_DEEP_WATER 0x12 #define MB_WATERFALL 0x13 #define MB_SOOTOPOLIS_DEEP_WATER 0x14 diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index ff10f52ee17c..71aac2308a13 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -684,8 +684,6 @@ #define METATILE_SecretBase_BigPlant_TopRight 0x2E6 #define METATILE_SecretBase_BigPlant_BaseLeft1 0x2EC #define METATILE_SecretBase_BigPlant_BaseRight1 0x2ED -#define METATILE_SecretBase_BigPlant_TopLeftWall 0x2E5 -#define METATILE_SecretBase_BigPlant_TopRightWall 0x2E6 #define METATILE_SecretBase_BigPlant_BaseLeft2 0x2EE #define METATILE_SecretBase_BigPlant_BaseRight2 0x2EF #define METATILE_SecretBase_GorgeousPlant_TopLeft 0x2F0 diff --git a/include/constants/moves.h b/include/constants/moves.h index 75691de76ad9..20cb32c54596 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -809,7 +809,59 @@ #define MOVES_COUNT_GEN8 779 -#define MOVES_COUNT MOVES_COUNT_GEN8 +// Gen 9 moves. +#define MOVE_TERA_BLAST 779 +#define MOVE_SILK_TRAP 780 +#define MOVE_AXE_KICK 781 +#define MOVE_LAST_RESPECTS 782 +#define MOVE_LUMINA_CRASH 783 +#define MOVE_ORDER_UP 784 +#define MOVE_JET_PUNCH 785 +#define MOVE_SPICY_EXTRACT 786 +#define MOVE_SPIN_OUT 787 +#define MOVE_POPULATION_BOMB 788 +#define MOVE_ICE_SPINNER 789 +#define MOVE_GLAIVE_RUSH 790 +#define MOVE_REVIVAL_BLESSING 791 +#define MOVE_SALT_CURE 792 +#define MOVE_TRIPLE_DIVE 793 +#define MOVE_MORTAL_SPIN 794 +#define MOVE_DOODLE 795 +#define MOVE_FILLET_AWAY 796 +#define MOVE_KOWTOW_CLEAVE 797 +#define MOVE_FLOWER_TRICK 798 +#define MOVE_TORCH_SONG 799 +#define MOVE_AQUA_STEP 800 +#define MOVE_RAGING_BULL 801 +#define MOVE_MAKE_IT_RAIN 802 +#define MOVE_RUINATION 803 +#define MOVE_COLLISION_COURSE 804 +#define MOVE_ELECTRO_DRIFT 805 +#define MOVE_SHED_TAIL 806 +#define MOVE_CHILLY_RECEPTION 807 +#define MOVE_TIDY_UP 808 +#define MOVE_SNOWSCAPE 809 +#define MOVE_POUNCE 810 +#define MOVE_TRAILBLAZE 811 +#define MOVE_CHILLING_WATER 812 +#define MOVE_HYPER_DRILL 813 +#define MOVE_TWIN_BEAM 814 +#define MOVE_RAGE_FIST 815 +#define MOVE_ARMOR_CANNON 816 +#define MOVE_BITTER_BLADE 817 +#define MOVE_DOUBLE_SHOCK 818 +#define MOVE_GIGATON_HAMMER 819 +#define MOVE_COMEUPPANCE 820 +#define MOVE_AQUA_CUTTER 821 +#define MOVE_BLAZING_TORQUE 822 +#define MOVE_WICKED_TORQUE 823 +#define MOVE_NOXIOUS_TORQUE 824 +#define MOVE_COMBAT_TORQUE 825 +#define MOVE_MAGICAL_TORQUE 826 + +#define MOVES_COUNT_GEN9 827 + +#define MOVES_COUNT MOVES_COUNT_GEN9 // Z Moves #define MOVE_BREAKNECK_BLITZ (MOVES_COUNT + 0) diff --git a/include/constants/mystery_gift.h b/include/constants/mystery_gift.h index 8ff71c3aa11f..13eb7f103321 100644 --- a/include/constants/mystery_gift.h +++ b/include/constants/mystery_gift.h @@ -44,4 +44,12 @@ #define WONDER_CARD_FLAG_OFFSET 1000 +#define NEWS_REWARD_NONE 0 +#define NEWS_REWARD_RECV_SMALL 1 +#define NEWS_REWARD_RECV_BIG 2 +#define NEWS_REWARD_WAITING 3 +#define NEWS_REWARD_SENT_SMALL 4 +#define NEWS_REWARD_SENT_BIG 5 +#define NEWS_REWARD_AT_MAX 6 + #endif //GUARD_CONSTANTS_MYSTERY_GIFT_H diff --git a/include/constants/overworld_config.h b/include/constants/overworld_config.h deleted file mode 100644 index 4a27ded832d9..000000000000 --- a/include/constants/overworld_config.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef GUARD_CONSTANTS_OVERWORLD_CONFIG_H -#define GUARD_CONSTANTS_OVERWORLD_CONFIG_H - -// Movement config -#define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. - -// Overworld flags -#define OW_FLAG_NO_ENCOUNTER 0 // If this flag is set, wild encounters will be disabled. -#define OW_FLAG_NO_TRAINER_SEE 0 // If this flag is set, trainers will not battle the player unless they're talked to. - -// Debug options -#define DEBUG_SYSTEM_ENABLE TRUE // Enables a overworld debug menu for changing flags, variables, giving pokemon and more, accessed by holding R and pressing START while in the overworld by default. -#define DEBUG_SYSTEM_HELD_KEYS (R_BUTTON) // The keys required to be held to open the debug menu. -#define DEBUG_SYSTEM_TRIGGER_EVENT pressedStartButton // The event that opens the menu when holding the key(s) defined in DEBUG_SYSTEM_HELD_KEYS. -#define DEBUG_SYSTEM_IN_MENU FALSE // Replaces the overworld debug menu button combination with a start menu entry (above Pokédex). - -// Replace the used flags with others or disable with a 0 -#define DEBUG_FLAG_NO_COLLISION 0 // If this flag is set, the debug function in the Utility submenu to disable player collision can be used. - -#endif // GUARD_CONSTANTS_OVERWORLD_CONFIG_H diff --git a/include/constants/pokedex.h b/include/constants/pokedex.h index 39c09c312910..ef939b9579e9 100644 --- a/include/constants/pokedex.h +++ b/include/constants/pokedex.h @@ -1,7 +1,6 @@ #ifndef GUARD_CONSTANTS_POKEDEX_H #define GUARD_CONSTANTS_POKEDEX_H -#include "constants/pokemon_config.h" // National Pokedex order. // These constants are NOT disabled by P_GEN_X_POKEMON to keep pokedex_orders.h clean. enum { diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 514c2bd26e9c..35eca5bbc468 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -235,6 +235,8 @@ #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 +#define FLAG_WIND_MOVE (1 << 28) +#define FLAG_SLICING_MOVE (1 << 29) // Split defines. #define SPLIT_PHYSICAL 0x0 @@ -350,8 +352,7 @@ #define SPECIES_FLAG_HISUIAN_FORM (1 << 6) #define SPECIES_FLAG_GENDER_DIFFERENCE (1 << 7) #define SPECIES_FLAG_ALL_PERFECT_IVS (1 << 8) -#define SPECIES_FLAG_SHINY_LOCKED (1 << 9) -#define SPECIES_FLAG_CANNOT_BE_TRADED (1 << 10) +#define SPECIES_FLAG_CANNOT_BE_TRADED (1 << 9) #define LEGENDARY_PERFECT_IV_COUNT 3 diff --git a/include/constants/pokemon_config.h b/include/constants/pokemon_config.h deleted file mode 100644 index dd10ee23631d..000000000000 --- a/include/constants/pokemon_config.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef GUARD_CONSTANTS_POKEMON_CONFIG_H -#define GUARD_CONSTANTS_POKEMON_CONFIG_H - -#define P_UPDATED_TYPES GEN_LATEST // Since Gen 6, several Pokémon were changed to be partially or fully Fairy type. -#define P_UPDATED_STATS GEN_LATEST // Since Gen 6, Pokémon stats are updated with each passing generation. -#define P_UPDATED_ABILITIES GEN_LATEST // Since Gen 6, certain Pokémon have their abilities changed. -#define P_UPDATED_EGG_GROUPS GEN_LATEST // Since Gen 8, certain Pokémon have gained new egg groups. -#define P_SHEDINJA_BALL GEN_LATEST // Since Gen 4, Shedinja requires a Poké Ball for its evolution. In Gen 3, Shedinja inherits Nincada's Ball. -#define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs. -#define P_KADABRA_EVERSTONE GEN_LATEST // Since Gen 4, Kadabra can evolve even when holding an Everstone. -#define P_NIDORAN_M_DITTO_BREED GEN_LATEST // Since Gen 5, when Nidoran♂ breeds with Ditto it can produce Nidoran♀ offspring. Before, it would only yield male offspring. This change also applies to Volbeat. - -// Modifying the latest generation WILL change the saveblock due to Dex flags and will require a new save file. -// Forms are kept based on the base species, Eg: Meowth and Persian will keep all of their forms, but Perrserker will not be available if P_GEN_8_POKEMON is set to FALSE. -// If you're disabling a generation previous to others (eg: Gen 5 but not Gen 6, 7 and 8), -// remember to update NATIONAL_DEX enum in include/constants/pokedex.h to avoid players from softlocking in the non-existant entries. -#define P_GEN_4_POKEMON TRUE // Generation 4 Pokémon (DPPt, HGSS) -#define P_GEN_5_POKEMON TRUE // Generation 5 Pokémon (BW, B2W2) -#define P_GEN_6_POKEMON TRUE // Generation 6 Pokémon (XY, ORAS) -#define P_GEN_7_POKEMON TRUE // Generation 7 Pokémon (SM, USUM, LGPE) -#define P_GEN_8_POKEMON TRUE // Generation 8 Pokémon (SwSh, BDSP, LA) - -#define P_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/rgb.h b/include/constants/rgb.h index 3e0bf6fe031d..f73ab53b4bf1 100644 --- a/include/constants/rgb.h +++ b/include/constants/rgb.h @@ -8,6 +8,7 @@ #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 RGB2GBA(r, g, b) (((r >> 3) & 31) | (((g >> 3) & 31) << 5) | (((b >> 3) & 31) << 10)) #define RGB_ALPHA (1 << 15) #define IS_ALPHA(color) ((color) & RGB_ALPHA) @@ -23,4 +24,6 @@ #define RGB_CYAN RGB(0, 31, 31) #define RGB_WHITEALPHA (RGB_WHITE | RGB_ALPHA) +#define RGB_LIME_GREEN RGB2GBA(222, 230, 49) + #endif // GUARD_RGB_H diff --git a/include/constants/species.h b/include/constants/species.h index 18e3138ce6c8..5a46e856fb22 100644 --- a/include/constants/species.h +++ b/include/constants/species.h @@ -1,8 +1,6 @@ #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 diff --git a/include/constants/trade.h b/include/constants/trade.h index e8afc2a77fad..e387d13cd8c1 100644 --- a/include/constants/trade.h +++ b/include/constants/trade.h @@ -4,29 +4,19 @@ #define TRADE_PLAYER 0 #define TRADE_PARTNER 1 -#define LINK_TRADE_TIMEOUT 300 - // In-game Trade IDs #define INGAME_TRADE_SEEDOT 0 #define INGAME_TRADE_PLUSLE 1 #define INGAME_TRADE_HORSEA 2 #define INGAME_TRADE_MEOWTH 3 -// Flag IDs for sending link data -#define INITIATE_TRADE 1 -#define CANCEL_TRADE 2 -#define WANTS_TO_TRADE 1 -#define WANTS_TO_CANCEL 2 -#define READY_FINISH_TRADE 1 -#define FINISH_TRADE 2 - // Return values for CanTradeSelectedMon and CanSpinTradeMon -#define CAN_TRADE_MON 0 -#define CANT_TRADE_LAST_MON 1 -#define CANT_TRADE_NATIONAL 2 -#define CANT_TRADE_EGG_YET 3 -#define CANT_TRADE_INVALID_MON 4 -#define CANT_TRADE_EGG_YET2 5 +#define CAN_TRADE_MON 0 +#define CANT_TRADE_LAST_MON 1 +#define CANT_TRADE_NATIONAL 2 +#define CANT_TRADE_EGG_YET 3 +#define CANT_TRADE_INVALID_MON 4 +#define CANT_TRADE_PARTNER_EGG_YET 5 // Return values for CheckValidityOfTradeMons #define PLAYER_MON_INVALID 0 @@ -38,63 +28,6 @@ #define TRADE_PLAYER_NOT_READY 1 #define TRADE_PARTNER_NOT_READY 2 -// Indexes for sTradeActionTexts -#define TRADE_TEXT_CANCEL 0 -#define TRADE_TEXT_CHOOSE_MON 1 -#define TRADE_TEXT_SUMMARY 2 -#define TRADE_TEXT_TRADE 3 -#define TRADE_TEXT_CANCEL_TRADE 4 -#define TRADE_TEXT_JP_QUIT 5 - -// Checked to confirm DrawTradeMenuParty has reached final state -#define DRAW_PARTY_FINISH 5 - -// Message indexes for sTradeMessages -#define TRADE_MSG_STANDBY 0 -#define TRADE_MSG_CANCELED 1 -#define TRADE_MSG_ONLY_MON1 2 -#define TRADE_MSG_ONLY_MON2 3 -#define TRADE_MSG_WAITING_FOR_FRIEND 4 -#define TRADE_MSG_FRIEND_WANTS_TO_TRADE 5 -#define TRADE_MSG_MON_CANT_BE_TRADED 6 -#define TRADE_MSG_EGG_CANT_BE_TRADED 7 -#define TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED 8 - -// IDs for QueueAction -#define QUEUE_SEND_DATA 0 -#define QUEUE_STANDBY 1 -#define QUEUE_ONLY_MON1 2 -#define QUEUE_ONLY_MON2 3 -#define QUEUE_UNUSED1 4 -#define QUEUE_UNUSED2 5 -#define QUEUE_MON_CANT_BE_TRADED 6 -#define QUEUE_EGG_CANT_BE_TRADED 7 -#define QUEUE_FRIENDS_MON_CANT_BE_TRADED 8 - -#define QUEUE_DELAY_MSG 3 -#define QUEUE_DELAY_DATA 5 - -// IDs for CallTradeMenuFunc -#define TRADEMENUFUNC_MAIN_MENU 0 -#define TRADEMENUFUNC_SELECTED_MON 1 -#define TRADEMENUFUNC_SHOW_MON_SUMMARY 2 -#define TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE 3 -#define TRADEMENUFUNC_CANCEL_TRADE_PROMPT 4 -#define TRADEMENUFUNC_UNUSED_5 5 -#define TRADEMENUFUNC_BOTH_MONS_SELECTED 6 -#define TRADEMENUFUNC_CONFIRM_TRADE_PROMPT 7 -#define TRADEMENUFUNC_REDRAW_MAIN_MENU 8 -#define TRADEMENUFUNC_LINK_TRADE_FADE_OUT 9 -#define TRADEMENUFUNC_LINK_TRADE_WAIT_FADE 10 -#define TRADEMENUFUNC_CANCEL_TRADE_1 11 -#define TRADEMENUFUNC_CANCEL_TRADE_2 12 -#define TRADEMENUFUNC_START_LINK_TRADE 13 -#define TRADEMENUFUNC_DELAY_TRADE_CONFIRM 14 -#define TRADEMENUFUNC_UNUSED_15 15 -#define TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE 16 -#define TRADEMENUFUNC_PARTNER_MON_INVALID 17 -#define TRADEMENUFUNC_STANDBY 100 - // Message indexes for sUnionRoomTradeMessages #define UR_TRADE_MSG_NONE 0 #define UR_TRADE_MSG_NOT_MON_PARTNER_WANTS 1 diff --git a/include/constants/vars.h b/include/constants/vars.h index be32c7498277..e0b08f4475b3 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_WONDER_NEWS_COUNTER 0x402E +#define VAR_WONDER_NEWS_STEP_COUNTER 0x402E #define VAR_FRONTIER_MANIAC_FACILITY 0x402F #define VAR_FRONTIER_GAMBLER_CHALLENGE 0x4030 diff --git a/include/debug.h b/include/debug.h index f56efbde342d..88f5f666205c 100644 --- a/include/debug.h +++ b/include/debug.h @@ -1,8 +1,6 @@ #ifndef GUARD_DEBUG_H #define GUARD_DEBUG_H -#include "constants/overworld_config.h" - void Debug_ShowMainMenu(void); #endif // GUARD_DEBUG_H diff --git a/include/expansion_intro.h b/include/expansion_intro.h new file mode 100644 index 000000000000..7d8d3167737d --- /dev/null +++ b/include/expansion_intro.h @@ -0,0 +1,9 @@ +#ifndef GUARD_EXPANSION_INTRO_H +#define GUARD_EXPANSION_INTRO_H + +#if EXPANSION_INTRO == TRUE +void CB2_ExpansionIntro(void); +void Task_HandleExpansionIntro(u8 taskId); +#endif + +#endif /* GUARD_EXPANSION_INTRO_H */ diff --git a/include/fieldmap.h b/include/fieldmap.h index 2f7eaba66be9..f2dbefae860f 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -9,6 +9,8 @@ #define NUM_PALS_TOTAL 13 #define MAX_MAP_DATA_SIZE 10240 +#define NUM_TILES_PER_METATILE 8 + // 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 diff --git a/include/gba/defines.h b/include/gba/defines.h index 6d96e9a9e71c..82caf56e6840 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -78,4 +78,10 @@ #define TOTAL_OBJ_TILE_COUNT 1024 +#define PLTT_SIZEOF(n) ((n) * sizeof(u16)) +#define PLTT_SIZE_4BPP PLTT_SIZEOF(16) +#define PLTT_SIZE_8BPP PLTT_SIZEOF(256) + +#define PLTT_OFFSET_4BPP(n) ((n) * PLTT_SIZE_4BPP) + #endif // GUARD_GBA_DEFINES_H diff --git a/include/gba/isagbprint.h b/include/gba/isagbprint.h index 91aa9f214e1c..d362b5cb380f 100644 --- a/include/gba/isagbprint.h +++ b/include/gba/isagbprint.h @@ -11,6 +11,7 @@ #ifdef NDEBUG #define DebugPrintf(pBuf, ...) +#define DebugPrintfLevel(level, pBuf, ...) #define MgbaOpen() #define MgbaClose() #define AGBPrintInit() @@ -29,18 +30,21 @@ void AGBPrintInit(void); #if (LOG_HANDLER == LOG_HANDLER_MGBA_PRINT) -#define DebugPrintf(pBuf, ...) MgbaPrintf(MGBA_LOG_INFO, pBuf, __VA_ARGS__) +#define DebugPrintf(pBuf, ...) MgbaPrintf(MGBA_LOG_INFO, pBuf, ## __VA_ARGS__) #define DebugAssert(pFile, nLine, pExpression, nStopProgram) MgbaAssert(pFile, nLine, pExpression, nStopProgram) +#define DebugPrintfLevel(level, pBuf, ...) MgbaPrintf(level, pBuf, ## __VA_ARGS__) #elif (LOG_HANDLER == LOG_HANDLER_NOCASH_PRINT) -#define DebugPrintf(pBuf, ...) NoCashGBAPrintf(pBuf, __VA_ARGS__) +#define DebugPrintf(pBuf, ...) NoCashGBAPrintf(pBuf, ## __VA_ARGS__) #define DebugAssert(pFile, nLine, pExpression, nStopProgram) NoCashGBAAssert(pFile, nLine, pExpression, nStopProgram) +#define DebugPrintfLevel(level, pBuf, ...) NoCashGBAPrintf(pBuf, ## __VA_ARGS__) #else // Default to AGBPrint -#define DebugPrintf(pBuf, ...) AGBPrintf(const char *pBuf, ...) +#define DebugPrintf(pBuf, ...) AGBPrintf(pBuf, ## __VA_ARGS__) #define DebugAssert(pFile, nLine, pExpression, nStopProgram) AGBAssert(pFile, nLine, pExpression, nStopProgram) +#define DebugPrintfLevel(level, pBuf, ...) AGBPrintf(pBuf, ## __VA_ARGS__) #endif #endif diff --git a/include/gba/multiboot.h b/include/gba/multiboot.h index 14b6594b291e..64a860284318 100644 --- a/include/gba/multiboot.h +++ b/include/gba/multiboot.h @@ -10,7 +10,7 @@ struct MultiBootParam { u32 system_work[5]; // 00 u8 handshake_data; // 14 - u8 padding; // 15 + //u8 padding; // 15 u16 handshake_timeout; // 16 u8 probe_count; // 18 u8 client_data[MULTIBOOT_NCHILD]; // 19 diff --git a/include/global.berry.h b/include/global.berry.h index 8d1aa369de82..29f1cfe14a51 100644 --- a/include/global.berry.h +++ b/include/global.berry.h @@ -40,6 +40,7 @@ struct Berry2 u8 bitter; u8 sour; u8 smoothness; + //u8 padding; }; struct EnigmaBerry diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 4da3154e2562..26e5c44bf130 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -41,7 +41,7 @@ struct Tileset /*0x01*/ bool8 isSecondary; /*0x04*/ const u32 *tiles; /*0x08*/ const u16 (*palettes)[16]; - /*0x0c*/ const u16 *metatiles; + /*0x0C*/ const u16 *metatiles; /*0x10*/ const u16 *metatileAttributes; /*0x14*/ TilesetCB callback; }; @@ -51,7 +51,7 @@ struct MapLayout /*0x00*/ s32 width; /*0x04*/ s32 height; /*0x08*/ u16 *border; - /*0x0c*/ u16 *map; + /*0x0C*/ u16 *map; /*0x10*/ struct Tileset *primaryTileset; /*0x14*/ struct Tileset *secondaryTileset; }; @@ -68,16 +68,19 @@ struct ObjectEventTemplate /*0x00*/ u8 localId; /*0x01*/ u8 graphicsId; /*0x02*/ u8 inConnection; // Leftover from FRLG + /*0x03*/ //u8 padding1; /*0x04*/ s16 x; /*0x06*/ s16 y; /*0x08*/ u8 elevation; /*0x09*/ u8 movementType; /*0x0A*/ u16 movementRangeX:4; u16 movementRangeY:4; + //u16 padding2:8; /*0x0C*/ u16 trainerType; /*0x0E*/ u16 trainerRange_berryTreeId; /*0x10*/ const u8 *script; /*0x14*/ u16 flagId; + /*0x16*/ //u8 padding3[2]; }; struct WarpEvent @@ -192,6 +195,7 @@ struct ObjectEvent u32 disableJumpLandingGroundEffect:1; u32 fixedPriority:1; u32 hideReflection:1; + //u32 padding:4; /*0x04*/ u8 spriteId; /*0x05*/ u8 graphicsId; /*0x06*/ u8 movementType; @@ -217,6 +221,7 @@ struct ObjectEvent /*0x20*/ u8 previousMovementDirection; /*0x21*/ u8 directionSequenceIndex; /*0x22*/ u8 playerCopyableMovement; // COPY_MOVE_* + /*0x23*/ //u8 padding2; /*size = 0x24*/ }; diff --git a/include/global.h b/include/global.h index 2f5a5c87100f..7324335d2e47 100644 --- a/include/global.h +++ b/include/global.h @@ -139,6 +139,14 @@ #define NUM_FLAG_BYTES ROUND_BITS_TO_BYTES(FLAGS_COUNT) #define NUM_ADDITIONAL_PHRASE_BYTES ROUND_BITS_TO_BYTES(NUM_ADDITIONAL_PHRASES) +// Calls m0/m1/.../m8 depending on how many arguments are passed. +#define VARARG_8(m, ...) CAT(m, NARG_8(__VA_ARGS__))(__VA_ARGS__) +#define NARG_8(...) NARG_8_(_, ##__VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1, 0) +#define NARG_8_(_, a, b, c, d, e, f, g, h, N, ...) N + +#define CAT(a, b) CAT_(a, b) +#define CAT_(a, b) a ## b + // 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]; @@ -249,9 +257,11 @@ struct ApprenticeMon struct Apprentice { u8 id:5; - u8 lvlMode:2; // + 1 + u8 lvlMode:2; + //u8 padding1:1; u8 numQuestions; u8 number; + //u8 padding2; struct ApprenticeMon party[MULTI_PARTY_SIZE]; u16 speechWon[EASY_CHAT_BATTLE_WORDS_COUNT]; u8 playerId[TRAINER_ID_LENGTH]; @@ -299,6 +309,7 @@ struct EmeraldBattleTowerRecord /*0x28*/ u16 speechLost[EASY_CHAT_BATTLE_WORDS_COUNT]; /*0x34*/ struct BattleTowerPokemon party[MAX_FRONTIER_PARTY_SIZE]; /*0xE4*/ u8 language; + /*0xE7*/ //u8 padding[3]; /*0xE8*/ u32 checksum; }; @@ -331,14 +342,17 @@ struct DomeMonData u16 moves[MAX_MON_MOVES]; u8 evs[NUM_STATS]; u8 nature; + //u8 padding; }; struct RentalMon { u16 monId; + //u8 padding1[2]; u32 personality; u8 ivs; u8 abilityNum; + //u8 padding2[2]; }; struct BattleDomeTrainer @@ -360,8 +374,9 @@ struct BattleFrontier /*0xBEC*/ struct BattleTowerEReaderTrainer ereaderTrainer; /*0xCA8*/ u8 challengeStatus; /*0xCA9*/ u8 lvlMode:2; - /*0xCA9*/ u8 challengePaused:1; - /*0xCA9*/ u8 disableRecordBattle:1; + u8 challengePaused:1; + u8 disableRecordBattle:1; + //u8 padding1:4; /*0xCAA*/ u16 selectedPartyMons[MAX_FRONTIER_PARTY_SIZE]; /*0xCB2*/ u16 curChallengeBattleNum; // Battle number / room number (Pike) / floor number (Pyramid) /*0xCB4*/ u16 trainerIds[20]; @@ -405,16 +420,19 @@ struct BattleFrontier /*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; + u8 pikeHintedRoomType:4; + u8 pikeHealingRoomsDisabled:1; + /*0xE11*/ //u8 padding2; /*0xE12*/ u16 pikeHeldItemsBackup[FRONTIER_PARTY_SIZE]; /*0xE18*/ u16 pyramidPrize; /*0xE1A*/ u16 pyramidWinStreaks[FRONTIER_LVL_MODE_COUNT]; /*0xE1E*/ u16 pyramidRecordStreaks[FRONTIER_LVL_MODE_COUNT]; /*0xE22*/ u16 pyramidRandoms[4]; /*0xE2A*/ u8 pyramidTrainerFlags; // 1 bit for each trainer (MAX_PYRAMID_TRAINERS) + /*0xE2B*/ //u8 padding3; /*0xE2C*/ struct PyramidBag pyramidBag; /*0xE68*/ u8 pyramidLightRadius; + /*0xE69*/ //u8 padding4; /*0xE6A*/ u16 verdanturfTentPrize; /*0xE6C*/ u16 fallarborTentPrize; /*0xE6E*/ u16 slateportTentPrize; @@ -439,6 +457,7 @@ struct ApprenticeQuestion u8 monId:2; u8 moveSlot:2; u8 suggestedChange:2; // TRUE if told to use held item or second move, FALSE if told to use no item or first move + //u8 padding; u16 data; // used both as an itemId and a moveId }; @@ -449,9 +468,11 @@ struct PlayersApprentice /*0xB1*/ u8 questionsAnswered:4; /*0xB1*/ u8 leadMonId:2; /*0xB2*/ u8 party:3; - /*0xB2*/ u8 saveId:2; + u8 saveId:2; + //u8 padding1:3; /*0xB3*/ u8 unused; /*0xB4*/ u8 speciesIds[MULTI_PARTY_SIZE]; + /*0xB7*/ //u8 padding2; /*0xB8*/ struct ApprenticeQuestion questions[APPRENTICE_MAX_QUESTIONS]; }; @@ -461,6 +482,7 @@ struct RankingHall1P u16 winStreak; u8 name[PLAYER_NAME_LENGTH + 1]; u8 language; + //u8 padding; }; struct RankingHall2P @@ -471,6 +493,7 @@ struct RankingHall2P u8 name1[PLAYER_NAME_LENGTH + 1]; u8 name2[PLAYER_NAME_LENGTH + 1]; u8 language; + //u8 padding; }; struct SaveBlock2 @@ -490,6 +513,8 @@ struct SaveBlock2 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 + //u16 padding1:4; + //u16 padding2; /*0x18*/ struct Pokedex pokedex; /*0x90*/ u8 filler_90[0x8]; /*0x98*/ struct Time localTimeOffset; @@ -534,6 +559,7 @@ struct SecretBase /*0x1AAD*/ u8 unused; /*0x1AAE*/ u8 decorations[DECOR_MAX_SECRET_BASE]; /*0x1ABE*/ u8 decorationPositions[DECOR_MAX_SECRET_BASE]; + /*0x1ACE*/ //u8 padding[2]; /*0x1AD0*/ struct SecretBaseParty party; }; @@ -548,6 +574,7 @@ struct WarpData s8 mapGroup; s8 mapNum; s8 warpId; + //u8 padding; s16 x, y; }; @@ -592,6 +619,7 @@ struct RamScriptData u8 mapNum; u8 objectId; u8 script[995]; + //u8 padding; }; struct RamScript @@ -606,6 +634,7 @@ struct DewfordTrend u16 trendiness:7; u16 maxTrendiness:7; u16 gainingTrendiness:1; + //u16 padding:1; u16 rand; u16 words[2]; }; /*size = 0x8*/ @@ -618,6 +647,7 @@ struct MauvilleManCommon struct MauvilleManBard { /*0x00*/ u8 id; + /*0x01*/ //u8 padding1; /*0x02*/ u16 songLyrics[BARD_SONG_LENGTH]; /*0x0E*/ u16 temporaryLyrics[BARD_SONG_LENGTH]; /*0x1A*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; @@ -625,6 +655,7 @@ struct MauvilleManBard /*0x25*/ u8 playerTrainerId[TRAINER_ID_LENGTH]; /*0x29*/ bool8 hasChangedSong; /*0x2A*/ u8 language; + /*0x2B*/ //u8 padding2; }; /*size = 0x2C*/ struct MauvilleManStoryteller @@ -643,9 +674,11 @@ struct MauvilleManGiddy /*0x00*/ u8 id; /*0x01*/ u8 taleCounter; /*0x02*/ u8 questionNum; + /*0x03*/ //u8 padding1; /*0x04*/ u16 randomWords[GIDDY_MAX_TALES]; /*0x18*/ u8 questionList[GIDDY_MAX_QUESTIONS]; /*0x20*/ u8 language; + /*0x21*/ //u8 padding2; }; /*size = 0x2C*/ struct MauvilleManHipster @@ -690,6 +723,7 @@ struct LinkBattleRecords { struct LinkBattleRecord entries[LINK_B_RECORDS_COUNT]; u8 languages[LINK_B_RECORDS_COUNT]; + //u8 padding; }; struct RecordMixingGiftData @@ -715,6 +749,7 @@ struct ContestWinner u8 monName[POKEMON_NAME_LENGTH + 1]; u8 trainerName[PLAYER_NAME_LENGTH + 1]; u8 contestRank; + //u8 padding; }; struct Mail @@ -747,6 +782,7 @@ struct DayCare struct DaycareMon mons[DAYCARE_MON_COUNT]; u32 offspringPersonality; u8 stepCounter; + //u8 padding[3]; }; struct LilycoveLadyQuiz @@ -759,10 +795,10 @@ struct LilycoveLadyQuiz /*0x018*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x020*/ u16 playerTrainerId[TRAINER_ID_LENGTH]; /*0x028*/ u16 prize; - /*0x02a*/ bool8 waitingForChallenger; - /*0x02b*/ u8 questionId; - /*0x02c*/ u8 prevQuestionId; - /*0x02d*/ u8 language; + /*0x02A*/ bool8 waitingForChallenger; + /*0x02B*/ u8 questionId; + /*0x02C*/ u8 prevQuestionId; + /*0x02D*/ u8 language; }; struct LilycoveLadyFavor @@ -772,10 +808,12 @@ struct LilycoveLadyFavor /*0x002*/ bool8 likedItem; /*0x003*/ u8 numItemsGiven; /*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; - /*0x00c*/ u8 favorId; - /*0x00e*/ u16 itemId; + /*0x00C*/ u8 favorId; + /*0x00D*/ //u8 padding1; + /*0x00E*/ u16 itemId; /*0x010*/ u16 bestItem; /*0x012*/ u8 language; + /*0x013*/ //u8 padding2; }; struct LilycoveLadyContest @@ -785,9 +823,9 @@ struct LilycoveLadyContest /*0x002*/ u8 numGoodPokeblocksGiven; /*0x003*/ u8 numOtherPokeblocksGiven; /*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; - /*0x00c*/ u8 maxSheen; - /*0x00d*/ u8 category; - /*0x00e*/ u8 language; + /*0x00C*/ u8 maxSheen; + /*0x00D*/ u8 category; + /*0x00E*/ u8 language; }; typedef union // 3b58 @@ -796,7 +834,7 @@ typedef union // 3b58 struct LilycoveLadyFavor favor; struct LilycoveLadyContest contest; u8 id; - u8 pad[0x40]; + u8 filler[0x40]; } LilycoveLady; struct WaldaPhrase @@ -806,6 +844,7 @@ struct WaldaPhrase u8 iconId; u8 patternId; bool8 patternUnlocked; + //u8 padding; }; struct TrainerNameRecord @@ -821,20 +860,22 @@ struct TrainerHillSave /*0x3D6C*/ u8 unk_3D6C; /*0x3D6D*/ u8 unused; /*0x3D6E*/ u16 receivedPrize:1; - /*0x3D6E*/ u16 checkedFinalTime:1; - /*0x3D6E*/ u16 spokeToOwner:1; - /*0x3D6E*/ u16 hasLost:1; - /*0x3D6E*/ u16 maybeECardScanDuringChallenge:1; - /*0x3D6E*/ u16 field_3D6E_0f:1; - /*0x3D6E*/ u16 mode:2; // HILL_MODE_* + u16 checkedFinalTime:1; + u16 spokeToOwner:1; + u16 hasLost:1; + u16 maybeECardScanDuringChallenge:1; + u16 field_3D6E_0f:1; + u16 mode:2; // HILL_MODE_* + //u16 padding:8; }; struct WonderNewsMetadata { u8 newsType:2; - u8 sentCounter:3; - u8 getCounter:3; - u8 rand; + u8 sentRewardCounter:3; + u8 rewardCounter:3; + u8 berry; + //u8 padding[2]; }; struct WonderNews @@ -860,6 +901,7 @@ struct WonderCard u8 bodyText[WONDER_CARD_BODY_TEXT_LINES][WONDER_CARD_TEXT_LENGTH]; u8 footerLine1Text[WONDER_CARD_TEXT_LENGTH]; u8 footerLine2Text[WONDER_CARD_TEXT_LENGTH]; + //u8 padding[2]; }; struct WonderCardMetadata @@ -906,7 +948,7 @@ struct ExternalEventFlags { u8 usedBoxRS:1; // Set by Pokémon Box: Ruby & Sapphire; denotes whether this save has connected to it and triggered the free False Swipe Swablu Egg giveaway. u8 boxRSEggsUnlocked:2; // Set by Pokémon Box: Ruby & Sapphire; denotes the number of Eggs unlocked from deposits; 1 for ExtremeSpeed Zigzagoon (at 100 deposited), 2 for Pay Day Skitty (at 500 deposited), 3 for Surf Pichu (at 1499 deposited) - u8 padding:5; + //u8 padding:5; u8 unknownFlag1; u8 receivedGCNJirachi; // Both the US Colosseum Bonus Disc and PAL/AUS Pokémon Channel use this field. One cannot receive a WISHMKR Jirachi and CHANNEL Jirachi with the same savefile. u8 unknownFlag3; @@ -942,9 +984,11 @@ struct SaveBlock1 /*0x2E*/ u8 weather; /*0x2F*/ u8 weatherCycleStage; /*0x30*/ u8 flashLevel; + /*0x31*/ //u8 padding1; /*0x32*/ u16 mapLayoutId; /*0x34*/ u16 mapView[0x100]; /*0x234*/ u8 playerPartyCount; + /*0x235*/ //u8 padding2[3]; /*0x238*/ struct Pokemon playerParty[PARTY_SIZE]; /*0x490*/ u32 money; /*0x494*/ u16 coins; @@ -961,6 +1005,7 @@ struct SaveBlock1 /*0x9C2*/ u8 unused_9C2[6]; /*0x9C8*/ u16 trainerRematchStepCounter; /*0x9CA*/ u8 trainerRematches[MAX_REMATCH_ENTRIES]; + /*0xA2E*/ //u8 padding3[2]; /*0xA30*/ struct ObjectEvent objectEvents[OBJECT_EVENTS_COUNT]; /*0xC70*/ struct ObjectEventTemplate objectEventTemplates[OBJECT_EVENT_TEMPLATES_COUNT]; /*0x1270*/ u8 flags[NUM_FLAG_BYTES]; @@ -978,6 +1023,7 @@ struct SaveBlock1 /*0x278E*/ u8 decorationPosters[10]; /*0x2798*/ u8 decorationDolls[40]; /*0x27C0*/ u8 decorationCushions[10]; + /*0x27CA*/ //u8 padding4[2]; /*0x27CC*/ TVShow tvShows[TV_SHOWS_COUNT]; /*0x2B50*/ PokeNews pokeNews[POKE_NEWS_COUNT]; /*0x2B90*/ u16 outbreakPokemonSpecies; @@ -997,6 +1043,7 @@ struct SaveBlock1 /*0x2BD4*/ u16 easyChatBattleLost[EASY_CHAT_BATTLE_WORDS_COUNT]; /*0x2BE0*/ struct Mail mail[MAIL_COUNT]; /*0x2E20*/ u8 additionalPhrases[NUM_ADDITIONAL_PHRASE_BYTES]; // bitfield for 33 additional phrases in easy chat system + /*0x2E25*/ //u8 padding5[3]; /*0x2E28*/ OldMan oldMan; /*0x2e64*/ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT]; /*0x2e90*/ struct ContestWinner contestWinners[NUM_CONTEST_WINNERS]; // see CONTEST_WINNER_* diff --git a/include/global.tv.h b/include/global.tv.h index 1fb1b8a33375..3729562cd6db 100644 --- a/include/global.tv.h +++ b/include/global.tv.h @@ -36,6 +36,7 @@ typedef union // size = 0x24 /*0x04*/ u16 words[6]; /*0x10*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x18*/ u8 language; + /*0x19*/ //u8 padding; } fanclubLetter; // TVSHOW_RECENT_HAPPENINGS @@ -46,6 +47,7 @@ typedef union // size = 0x24 /*0x04*/ u16 words[6]; /*0x10*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x18*/ u8 language; + /*0x19*/ //u8 padding; } recentHappenings; // TVSHOW_PKMN_FAN_CLUB_OPINIONS @@ -54,7 +56,7 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u16 species; /*0x04*/ u8 friendshipHighNybble:4; - /*0x04*/ u8 questionAsked:4; + u8 questionAsked:4; /*0x05*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x0D*/ u8 language; /*0x0E*/ u8 pokemonNameLanguage; @@ -70,8 +72,8 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u16 words[2]; /*0x06*/ u16 species; - /*0x08*/ u8 pad_08[3]; - /*0x0b*/ u8 name[12]; + /*0x08*/ u8 filler_08[3]; + /*0x0B*/ u8 name[12]; /*0x17*/ u8 language; } dummy; @@ -98,8 +100,9 @@ typedef union // size = 0x24 /*0x04*/ u16 words[2]; /*0x08*/ u8 pokemonNickname[POKEMON_NAME_LENGTH + 1]; /*0x13*/ u8 contestCategory:3; - /*0x13*/ u8 contestRank:2; - /*0x13*/ u8 contestResult:2; + u8 contestRank:2; + u8 contestResult:2; + //u8 padding:1; /*0x14*/ u16 move; /*0x16*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x1E*/ u8 language; @@ -121,6 +124,7 @@ typedef union // size = 0x24 /*0x1C*/ bool8 wonTheChallenge; /*0x1D*/ u8 language; /*0x1E*/ u8 pokemonNameLanguage; + /*0x1F*/ //u8 padding; } bravoTrainerTower; // TVSHOW_CONTEST_LIVE_UPDATES @@ -131,14 +135,15 @@ typedef union // size = 0x24 /*0x04*/ u8 losingTrainerName[PLAYER_NAME_LENGTH + 1]; /*0x0C*/ u8 loserAppealFlag; /*0x0D*/ u8 round1Placing; - /*0x0e*/ u8 round2Placing; - /*0x0f*/ u8 winnerAppealFlag; + /*0x0E*/ u8 round2Placing; + /*0x0F*/ u8 winnerAppealFlag; /*0x10*/ u16 move; /*0x12*/ u16 winningSpecies; /*0x14*/ u8 winningTrainerName[PLAYER_NAME_LENGTH + 1]; /*0x1C*/ u8 category; /*0x1D*/ u8 winningTrainerLanguage; /*0x1E*/ u8 losingTrainerLanguage; + /*0x1F*/ //u8 padding; } contestLiveUpdates; // TVSHOW_3_CHEERS_FOR_POKEBLOCKS @@ -147,7 +152,8 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u8 sheen; /*0x03*/ u8 flavor:3; - /*0x03*/ u8 color:2; + u8 color:2; + //u8 padding:3; /*0x04*/ u8 worstBlenderName[PLAYER_NAME_LENGTH + 1]; /*0x0C*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x14*/ u8 language; @@ -166,6 +172,7 @@ typedef union // size = 0x24 /*0x18*/ u8 battleType; /*0x19*/ u8 language; /*0x1A*/ u8 linkOpponentLanguage; + /*0x1B*/ //u8 padding; } battleUpdate; // TVSHOW_FAN_CLUB_SPECIAL @@ -173,13 +180,14 @@ typedef union // size = 0x24 /*0x00*/ u8 kind; /*0x01*/ bool8 active; /*0x02*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; - /*0x0a*/ u8 idLo; - /*0x0b*/ u8 idHi; - /*0x0c*/ u8 idolName[PLAYER_NAME_LENGTH + 1]; + /*0x0A*/ u8 idLo; + /*0x0B*/ u8 idHi; + /*0x0C*/ u8 idolName[PLAYER_NAME_LENGTH + 1]; /*0x14*/ u16 words[1]; /*0x16*/ u8 score; /*0x17*/ u8 language; /*0x18*/ u8 idolNameLanguage; + /*0x19*/ //u8 padding; } fanClubSpecial; // TVSHOW_LILYCOVE_CONTEST_LADY @@ -187,8 +195,8 @@ typedef union // size = 0x24 /*0x00*/ u8 kind; /*0x01*/ bool8 active; /*0x02*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; - /*0x0a*/ u8 contestCategory; - /*0x0b*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; + /*0x0A*/ u8 contestCategory; + /*0x0B*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; /*0x16*/ u8 pokeblockState; /*0x17*/ u8 language; /*0x18*/ u8 pokemonNameLanguage; @@ -206,6 +214,7 @@ typedef union // size = 0x24 /*0x10*/ u16 species; /*0x12*/ u8 nBallsUsed; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } pokemonToday; // TVSHOW_SMART_SHOPPER @@ -214,11 +223,12 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u8 priceReduced; /*0x03*/ u8 language; - /*0x04*/ u8 pad04[2]; + /*0x04*/ u8 filler_04[2]; /*0x06*/ u16 itemIds[SMARTSHOPPER_NUM_ITEMS]; /*0x0C*/ u16 itemAmounts[SMARTSHOPPER_NUM_ITEMS]; /*0x12*/ u8 shopLocation; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } smartshopperShow; // TVSHOW_POKEMON_TODAY_FAILED @@ -226,13 +236,14 @@ typedef union // size = 0x24 /*0x00*/ u8 kind; /*0x01*/ bool8 active; /*0x02*/ u8 language; - /*0x03*/ u8 pad03[9]; - /*0x0c*/ u16 species; - /*0x0e*/ u16 species2; + /*0x03*/ u8 filler_03[9]; + /*0x0C*/ u16 species; + /*0x0E*/ u16 species2; /*0x10*/ u8 nBallsUsed; /*0x11*/ u8 outcome; /*0x12*/ u8 location; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } pokemonTodayFailed; // TVSHOW_FISHING_ADVICE @@ -243,8 +254,9 @@ typedef union // size = 0x24 /*0x03*/ u8 nFails; /*0x04*/ u16 species; /*0x06*/ u8 language; - /*0x07*/ u8 pad07[12]; + /*0x07*/ u8 filler_07[12]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } pokemonAngler; // TVSHOW_WORLD_OF_MASTERS @@ -255,10 +267,11 @@ typedef union // size = 0x24 /*0x04*/ u16 caughtPoke; /*0x06*/ u16 steps; /*0x08*/ u16 species; - /*0x0a*/ u8 location; - /*0x0b*/ u8 language; - /*0x0c*/ u8 pad0c[7]; + /*0x0A*/ u8 location; + /*0x0B*/ u8 language; + /*0x0C*/ u8 filler_0C[7]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding2; } worldOfMasters; // TVSHOW_TODAYS_RIVAL_TRAINER @@ -271,10 +284,11 @@ typedef union // size = 0x24 /*0x06*/ u8 nGoldSymbols; /*0x07*/ u8 location; /*0x08*/ u16 battlePoints; - /*0x0a*/ u16 mapLayoutId; - /*0x0c*/ u8 language; - /*0x0d*/ u8 filler_0d[6]; + /*0x0A*/ u16 mapLayoutId; + /*0x0C*/ u8 language; + /*0x0D*/ u8 filler_0D[6]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding2; } rivalTrainer; // TVSHOW_TREND_WATCHER @@ -285,8 +299,9 @@ typedef union // size = 0x24 /*0x04*/ u16 words[2]; /*0x08*/ u8 gender; /*0x09*/ u8 language; - /*0x0a*/ u8 filler_0a[9]; + /*0x0A*/ u8 filler_0a[9]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } trendWatcher; // TVSHOW_TREASURE_INVESTIGATORS @@ -299,6 +314,7 @@ typedef union // size = 0x24 /*0x06*/ u16 mapLayoutId; /*0x08*/ u8 filler_08[11]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } treasureInvestigators; // TVSHOW_FIND_THAT_GAMER @@ -312,6 +328,7 @@ typedef union // size = 0x24 /*0x08*/ u8 language; /*0x09*/ u8 filler_09[10]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } findThatGamer; // TVSHOW_BREAKING_NEWS @@ -323,11 +340,12 @@ typedef union // size = 0x24 /*0x05*/ u8 outcome; /*0x06*/ u16 caughtMonBall; /*0x08*/ u16 balls; - /*0x0a*/ u16 poke1Species; - /*0x0c*/ u16 lastUsedMove; - /*0x0e*/ u8 language; - /*0x0f*/ u8 filler_0f[4]; + /*0x0A*/ u16 poke1Species; + /*0x0C*/ u16 lastUsedMove; + /*0x0E*/ u8 language; + /*0x0F*/ u8 filler_0f[4]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } breakingNews; // TVSHOW_SECRET_BASE_VISIT @@ -338,10 +356,11 @@ typedef union // size = 0x24 /*0x03*/ u8 numDecorations; /*0x04*/ u8 decorations[4]; /*0x08*/ u16 species; - /*0x0a*/ u16 move; - /*0x0c*/ u8 language; - /*0x0d*/ u8 filler_0d[6]; + /*0x0A*/ u16 move; + /*0x0C*/ u8 language; + /*0x0D*/ u8 filler_0d[6]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } secretBaseVisit; // TVSHOW_LOTTO_WINNER @@ -353,6 +372,7 @@ typedef union // size = 0x24 /*0x05*/ u8 language; /*0x06*/ u8 filler_06[13]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } lottoWinner; // TVSHOW_BATTLE_SEMINAR @@ -363,11 +383,12 @@ typedef union // size = 0x24 /*0x04*/ u16 foeSpecies; /*0x06*/ u16 species; /*0x08*/ u16 otherMoves[3]; - /*0x0e*/ u16 betterMove; + /*0x0E*/ u16 betterMove; /*0x10*/ u8 nOtherMoves; /*0x11*/ u8 language; /*0x12*/ u8 filler_12[1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } battleSeminar; // TVSHOW_TRAINER_FAN_CLUB @@ -379,6 +400,7 @@ typedef union // size = 0x24 /*0x08*/ u8 language; /*0x09*/ u8 filler_09[10]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } trainerFanClub; // TVSHOW_CUTIES @@ -388,7 +410,7 @@ typedef union // size = 0x24 /*0x02*/ u8 nRibbons; /*0x03*/ u8 selectedRibbon; /*0x04*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; - /*0x0f*/ u8 language; + /*0x0F*/ u8 language; /*0x10*/ u8 pokemonNameLanguage; /*0x11*/ u8 filler_12[2]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; @@ -402,11 +424,12 @@ typedef union // size = 0x24 /*0x04*/ u16 species1; /*0x06*/ u16 species2; /*0x08*/ u16 species3; - /*0x0a*/ u16 species4; - /*0x0c*/ u8 language; - /*0x0d*/ u8 facilityAndMode; - /*0x0e*/ u8 filler_0e[5]; + /*0x0A*/ u16 species4; + /*0x0C*/ u8 language; + /*0x0D*/ u8 facilityAndMode; + /*0x0E*/ u8 filler_0e[5]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } frontier; // TVSHOW_NUMBER_ONE @@ -418,6 +441,7 @@ typedef union // size = 0x24 /*0x05*/ u8 language; /*0x06*/ u8 filler_06[13]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x1B*/ //u8 padding; } numberOne; // TVSHOW_SECRET_BASE_SECRETS @@ -426,12 +450,13 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u16 stepsInBase; /*0x04*/ u8 baseOwnersName[PLAYER_NAME_LENGTH + 1]; - /*0x0c*/ u32 flags; + /*0x0C*/ u32 flags; /*0x10*/ u16 item; /*0x12*/ u8 savedState; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; - /*0x1b*/ u8 language; - /*0x1c*/ u8 baseOwnersNameLanguage; + /*0x1B*/ u8 language; + /*0x1C*/ u8 baseOwnersNameLanguage; + /*0x1D*/ //u8 padding[3]; } secretBaseSecrets; // TVSHOW_SAFARI_FAN_CLUB @@ -463,6 +488,7 @@ typedef union // size = 0x24 /*0x15*/ u8 unused5; /*0x16*/ u16 daysLeft; /*0x18*/ u8 language; + /*0x19*/ //u8 padding; } massOutbreak; } TVShow; @@ -475,23 +501,23 @@ typedef struct struct GabbyAndTyData { - /*2ba4*/ u16 mon1; - /*2ba6*/ u16 mon2; - /*2ba8*/ u16 lastMove; - /*2baa*/ u16 quote[1]; - /*2bac*/ u8 mapnum; - /*2bad*/ u8 battleNum; - /*2bae*/ u8 battleTookMoreThanOneTurn:1; - /*2bae*/ u8 playerLostAMon:1; - /*2bae*/ u8 playerUsedHealingItem:1; - /*2bae*/ u8 playerThrewABall:1; - /*2bae*/ u8 onAir:1; - /*2bae*/ u8 valA_5:3; - /*2baf*/ u8 battleTookMoreThanOneTurn2:1; - /*2baf*/ u8 playerLostAMon2:1; - /*2baf*/ u8 playerUsedHealingItem2:1; - /*2baf*/ u8 playerThrewABall2:1; - /*2baf*/ u8 valB_4:4; + /*2BA4*/ u16 mon1; + /*2BA6*/ u16 mon2; + /*2BA8*/ u16 lastMove; + /*2BAA*/ u16 quote[1]; + /*2BAC*/ u8 mapnum; + /*2BAD*/ u8 battleNum; + /*2BAE*/ u8 battleTookMoreThanOneTurn:1; + u8 playerLostAMon:1; + u8 playerUsedHealingItem:1; + u8 playerThrewABall:1; + u8 onAir:1; + u8 valA_5:3; + /*2BAF*/ u8 battleTookMoreThanOneTurn2:1; + u8 playerLostAMon2:1; + u8 playerUsedHealingItem2:1; + u8 playerThrewABall2:1; + u8 valB_4:4; }; #endif //GUARD_GLOBAL_TV_H diff --git a/include/graphics.h b/include/graphics.h index 512038b5f76e..55174442c56d 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -491,7 +491,6 @@ extern const u32 gMonFrontPic_Burmy[]; extern const u32 gMonFrontPic_Wormadam[]; extern const u32 gMonFrontPic_Mothim[]; extern const u32 gMonFrontPic_Combee[]; -extern const u32 gMonFrontPic_CombeeF[]; extern const u32 gMonFrontPic_Vespiquen[]; extern const u32 gMonFrontPic_Pachirisu[]; extern const u32 gMonFrontPic_Buizel[]; @@ -526,7 +525,6 @@ extern const u32 gMonFrontPic_Munchlax[]; extern const u32 gMonFrontPic_Riolu[]; extern const u32 gMonFrontPic_Lucario[]; extern const u32 gMonFrontPic_Hippopotas[]; -extern const u32 gMonFrontPic_HippopotasF[]; extern const u32 gMonFrontPic_Hippowdon[]; extern const u32 gMonFrontPic_Skorupi[]; extern const u32 gMonFrontPic_Drapion[]; @@ -1741,9 +1739,7 @@ extern const u32 gMonBackPic_Munchlax[]; extern const u32 gMonBackPic_Riolu[]; extern const u32 gMonBackPic_Lucario[]; extern const u32 gMonBackPic_Hippopotas[]; -extern const u32 gMonBackPic_HippopotasF[]; extern const u32 gMonBackPic_Hippowdon[]; -extern const u32 gMonBackPic_HippowdonF[]; extern const u32 gMonBackPic_Skorupi[]; extern const u32 gMonBackPic_Drapion[]; extern const u32 gMonBackPic_Croagunk[]; @@ -2913,6 +2909,7 @@ extern const u32 gMonPalette_Burmy[]; extern const u32 gMonPalette_Wormadam[]; extern const u32 gMonPalette_Mothim[]; extern const u32 gMonPalette_Combee[]; +extern const u32 gMonPalette_CombeeF[]; extern const u32 gMonPalette_Vespiquen[]; extern const u32 gMonPalette_Pachirisu[]; extern const u32 gMonPalette_Buizel[]; @@ -3175,7 +3172,6 @@ extern const u32 gMonPalette_Spewpa[]; extern const u32 gMonPalette_Vivillon[]; extern const u32 gMonPalette_Litleo[]; extern const u32 gMonPalette_Pyroar[]; -extern const u32 gMonPalette_PyroarF[]; extern const u32 gMonPalette_Flabebe[]; extern const u32 gMonPalette_Floette[]; extern const u32 gMonPalette_Florges[]; @@ -4146,6 +4142,7 @@ extern const u32 gMonShinyPalette_Burmy[]; extern const u32 gMonShinyPalette_Wormadam[]; extern const u32 gMonShinyPalette_Mothim[]; extern const u32 gMonShinyPalette_Combee[]; +extern const u32 gMonShinyPalette_CombeeF[]; extern const u32 gMonShinyPalette_Vespiquen[]; extern const u32 gMonShinyPalette_Pachirisu[]; extern const u32 gMonShinyPalette_Buizel[]; @@ -4183,7 +4180,6 @@ extern const u32 gMonShinyPalette_Hippopotas[]; extern const u32 gMonShinyPalette_HippopotasF[]; extern const u32 gMonShinyPalette_Hippowdon[]; extern const u32 gMonShinyPalette_HippowdonF[]; -extern const u32 gMonShinyPalette_Hippowdon[]; extern const u32 gMonShinyPalette_Skorupi[]; extern const u32 gMonShinyPalette_Drapion[]; extern const u32 gMonShinyPalette_Croagunk[]; @@ -4409,7 +4405,6 @@ extern const u32 gMonShinyPalette_Spewpa[]; extern const u32 gMonShinyPalette_Vivillon[]; extern const u32 gMonShinyPalette_Litleo[]; extern const u32 gMonShinyPalette_Pyroar[]; -extern const u32 gMonShinyPalette_PyroarF[]; extern const u32 gMonShinyPalette_Flabebe[]; extern const u32 gMonShinyPalette_Floette[]; extern const u32 gMonShinyPalette_Florges[]; @@ -5407,6 +5402,10 @@ extern const u8 gMonIcon_Riolu[]; extern const u8 gMonIcon_Lucario[]; extern const u8 gMonIcon_Hippopotas[]; extern const u8 gMonIcon_Hippowdon[]; +#if P_HIPPO_GENDER_DIFF_ICONS == TRUE +extern const u8 gMonIcon_HippopotasF[]; +extern const u8 gMonIcon_HippowdonF[]; +#endif extern const u8 gMonIcon_Skorupi[]; extern const u8 gMonIcon_Drapion[]; extern const u8 gMonIcon_Croagunk[]; @@ -9957,6 +9956,8 @@ extern const u32 gBattleAnimSpriteGfx_Tornado[]; extern const u32 gBattleAnimSpritePal_Tornado[]; extern const u32 gBattleAnimSpriteGfx_ZMoveSymbol[]; extern const u32 gBattleAnimSpritePal_ZMoveSymbol[]; +extern const u32 gBattleAnimSpriteGfx_Teapot[]; +extern const u32 gBattleAnimSpritePal_Teapot[]; extern const u32 gBattleAnimBgImage_Dark[]; extern const u32 gBattleAnimBgImage_Ghost[]; @@ -9980,6 +9981,7 @@ extern const u32 gBattleAnimBgTilemap_GigaImpactPlayer[]; extern const u32 gBattleAnimBgTilemap_GigaImpactOpponent[]; extern const u32 gBattleAnimBgTilemap_GigaImpactContest[]; extern const u32 gBattleAnimBgImage_GigaImpact[]; +extern const u32 gBattleAnimBgImage_GigaImpactContest[]; extern const u32 gBattleAnimBgPalette_GigaImpact[]; extern const u32 gBattleAnimBgImage_SpacialRend[]; extern const u32 gBattleAnimBgPalette_SpacialRend[]; @@ -10314,9 +10316,9 @@ extern const u16 gContestResultsTitle_Tough_Tilemap[]; extern const u16 gContestResultsTitle_Tilemap[]; // Trainer Card. -extern const u16 gHoennTrainerCard0Star_Pal[]; +extern const u16 gHoennTrainerCardGreen_Pal[]; extern const u32 gHoennTrainerCard_Gfx[]; -extern const u16 gKantoTrainerCard0Star_Pal[]; +extern const u16 gKantoTrainerCardBlue_Pal[]; extern const u32 gKantoTrainerCard_Gfx[]; extern const u32 gKantoTrainerCardBg_Tilemap[]; extern const u32 gHoennTrainerCardBack_Tilemap[]; diff --git a/include/intro.h b/include/intro.h index 8ba030a28706..1c89c659527c 100644 --- a/include/intro.h +++ b/include/intro.h @@ -9,5 +9,8 @@ void CB2_InitCopyrightScreenAfterBootup(void); void CB2_InitCopyrightScreenAfterTitleScreen(void); void PanFadeAndZoomScreen(u16, u16, u16, u16); +void MainCB2_Intro(void); +void Task_Scene1_Load(u8); + #endif // GUARD_INTRO_H diff --git a/include/item.h b/include/item.h index e02aeb682869..cf2209e0e67f 100644 --- a/include/item.h +++ b/include/item.h @@ -2,7 +2,6 @@ #define GUARD_ITEM_H #include "constants/item.h" -#include "constants/item_config.h" typedef void (*ItemUseFunc)(u8); diff --git a/include/link.h b/include/link.h index 7fa5e3fae6fd..f27cddc620ad 100644 --- a/include/link.h +++ b/include/link.h @@ -100,8 +100,8 @@ #define LINKTYPE_BERRY_BLENDER_SETUP 0x4411 #define LINKTYPE_BERRY_BLENDER 0x4422 #define LINKTYPE_MYSTERY_EVENT 0x5501 -#define LINKTYPE_UNUSED_EREADER 0x5502 // Unused, inferred from gap -#define LINKTYPE_EREADER 0x5503 +#define LINKTYPE_EREADER_FRLG 0x5502 +#define LINKTYPE_EREADER_EM 0x5503 #define LINKTYPE_CONTEST_GMODE 0x6601 #define LINKTYPE_CONTEST_EMODE 0x6602 diff --git a/include/link_rfu.h b/include/link_rfu.h index c576d04a1e8f..f3ae61afbafc 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -83,7 +83,7 @@ struct RfuGameCompatibilityData u16 hasNews:1; u16 hasCard:1; u16 unknown:1; // Never read - u16 isChampion:1; + u16 canLinkNationally:1; u16 hasNationalDex:1; u16 gameClear:1; u16 version:4; @@ -109,7 +109,7 @@ struct __attribute__((packed, aligned(2))) RfuGameData u8 playerGender:1; u8 tradeLevel:7; u8 tradeType:6; - u8 padding:2; + u8 filler:2; }; // Constants for getting/setting information in 'partnerInfo' of RfuGameData. diff --git a/include/list_menu.h b/include/list_menu.h index e70a92bab17d..9299ede6c806 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -7,12 +7,20 @@ #define LIST_CANCEL -2 #define LIST_HEADER -3 -#define LIST_NO_MULTIPLE_SCROLL 0 -#define LIST_MULTIPLE_SCROLL_DPAD 1 -#define LIST_MULTIPLE_SCROLL_L_R 2 +enum { + LIST_NO_MULTIPLE_SCROLL, + LIST_MULTIPLE_SCROLL_DPAD, + LIST_MULTIPLE_SCROLL_L_R, +}; -enum -{ +enum { + CURSOR_BLACK_ARROW, + CURSOR_INVISIBLE, + CURSOR_RED_OUTLINE, + CURSOR_RED_ARROW, +}; + +enum { SCROLL_ARROW_LEFT, SCROLL_ARROW_RIGHT, SCROLL_ARROW_UP, diff --git a/include/main.h b/include/main.h index 5ccb20df88b6..eba04cbaa9a1 100644 --- a/include/main.h +++ b/include/main.h @@ -57,6 +57,7 @@ extern u32 IntrMain_Buffer[]; extern s8 gPcmDmaCounter; void AgbMain(void); +void AgbMainLoop(void); void SetMainCallback2(MainCallback callback); void InitKeys(void); void SetVBlankCallback(IntrCallback callback); diff --git a/include/menu_specialized.h b/include/menu_specialized.h index 10a2110464e1..06a188b8a06f 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -15,6 +15,15 @@ enum { MAILBOXWIN_COUNT }; +// Window IDs for the move relearner +enum { + RELEARNERWIN_DESC_BATTLE, + RELEARNERWIN_DESC_CONTEST, + RELEARNERWIN_MOVE_LIST, + RELEARNERWIN_MSG, + RELEARNERWIN_YESNO, +}; + enum { TAG_CONDITION_MON = 100, TAG_CONDITION_BALL, @@ -117,11 +126,11 @@ void DestroyConditionSparkleSprites(struct Sprite **sprites); void FreeConditionSparkles(struct Sprite **sprites); // Move relearner -void MoveRelearnerPrintText(u8 *str); +void MoveRelearnerPrintMessage(u8 *str); bool16 MoveRelearnerRunTextPrinters(void); void MoveRelearnerCreateYesNoMenu(void); u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices); -void InitMoveRelearnerWindows(bool8 useContextWindow); +void InitMoveRelearnerWindows(bool8 useContestWindow); // Level up window void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); diff --git a/include/mystery_gift_menu.h b/include/mystery_gift_menu.h index dc30d305191e..665c4596e734 100644 --- a/include/mystery_gift_menu.h +++ b/include/mystery_gift_menu.h @@ -5,11 +5,11 @@ extern bool8 gGiftIsFromEReader; u16 GetMysteryGiftBaseBlock(void); void CB2_MysteryGiftEReader(void); -void PrintMysteryGiftOrEReaderTopMenu(bool8 isJapanese, bool32 usePickOkCancel); +void PrintMysteryGiftOrEReaderHeader(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 MG_AddMessageTextPrinter(const u8 *src); void CB2_InitEReader(void); void CB2_InitMysteryGift(void); void MG_DrawTextBorder(u8 windowId); diff --git a/include/palette.h b/include/palette.h index 736fde96bb96..29723ef6c894 100644 --- a/include/palette.h +++ b/include/palette.h @@ -18,6 +18,13 @@ #define PALETTES_OBJECTS 0xFFFF0000 #define PALETTES_ALL (PALETTES_BG | PALETTES_OBJECTS) +#define PLTT_ID(n) ((n) * 16) +#define BG_PLTT_OFFSET 0x000 +#define OBJ_PLTT_OFFSET 0x100 +#define BG_PLTT_ID(n) (BG_PLTT_OFFSET + PLTT_ID(n)) +#define OBJ_PLTT_ID(n) (OBJ_PLTT_OFFSET + PLTT_ID(n)) +#define OBJ_PLTT_ID2(n) (PLTT_ID((n) + 16)) + enum { FAST_FADE_IN_FROM_WHITE, @@ -74,4 +81,14 @@ void TintPalette_GrayScale2(u16 *palette, u16 count); void TintPalette_SepiaTone(u16 *palette, u16 count); void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone); +static inline void SetBackdropFromColor(u16 color) +{ + FillPalette(color, 0, PLTT_SIZEOF(1)); +} + +static inline void SetBackdropFromPalette(const u16 *palette) +{ + LoadPalette(palette, 0, PLTT_SIZEOF(1)); +} + #endif // GUARD_PALETTE_H diff --git a/include/pokedex.h b/include/pokedex.h index 703b9ab8dfc5..96cd02affbdd 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -3,10 +3,7 @@ extern u8 gUnusedPokedexU8; extern void (*gPokedexVBlankCB)(void); - -#if P_ENABLE_DEBUG == TRUE extern const u8 *const gMonFootprintTable[]; -#endif enum { diff --git a/include/pokemon.h b/include/pokemon.h index c4015d562187..05b9d1ac9a29 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -3,7 +3,6 @@ #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)) @@ -292,9 +291,10 @@ struct BattlePokemon /*0x4D*/ u32 status1; /*0x51*/ u32 status2; /*0x55*/ u32 otId; + /*0x59*/ u8 metLevel; }; -struct BaseStats +struct SpeciesInfo /*0x24*/ { /* 0x00 */ u8 baseHP; /* 0x01 */ u8 baseAttack; @@ -302,32 +302,30 @@ struct BaseStats /* 0x03 */ u8 baseSpeed; /* 0x04 */ u8 baseSpAttack; /* 0x05 */ u8 baseSpDefense; - /* 0x06 */ u8 type1; - /* 0x07 */ u8 type2; + /* 0x06 */ u8 types[2]; /* 0x08 */ u8 catchRate; - /* 0x09 */ u16 expYield; - /* 0x0A */ u16 evYield_HP:2; - /* 0x0A */ u16 evYield_Attack:2; - /* 0x0A */ u16 evYield_Defense:2; - /* 0x0A */ u16 evYield_Speed:2; - /* 0x0B */ u16 evYield_SpAttack:2; - /* 0x0B */ u16 evYield_SpDefense:2; - /* 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 */ u16 abilities[NUM_ABILITY_SLOTS]; - u8 safariZoneFleeRate; - u8 bodyColor : 7; + /* 0x09 padding */ + /* 0x0A */ u16 expYield; // expYield was changed from u8 to u16 for the new Exp System. + /* 0x0C */ u16 evYield_HP:2; + u16 evYield_Attack:2; + u16 evYield_Defense:2; + u16 evYield_Speed:2; + /* 0x0D */ u16 evYield_SpAttack:2; + u16 evYield_SpDefense:2; + /* 0x0E */ u16 itemCommon; + /* 0x10 */ u16 itemRare; + /* 0x12 */ u8 genderRatio; + /* 0x13 */ u8 eggCycles; + /* 0x14 */ u8 friendship; + /* 0x15 */ u8 growthRate; + /* 0x16 */ u8 eggGroups[2]; + /* 0x18 */ u16 abilities[NUM_ABILITY_SLOTS]; // 3 abilities, no longer u8 because we have over 255 abilities now. + /* 0x1E */ u8 safariZoneFleeRate; + /* 0x1F */ u8 bodyColor : 7; u8 noFlip : 1; - u16 flags; + /* 0x20 */ u16 flags; }; -#include "constants/battle_config.h" struct BattleMove { u16 effect; @@ -396,7 +394,7 @@ extern struct SpriteTemplate gMultiuseSpriteTemplate; extern const struct BattleMove gBattleMoves[]; extern const u8 gFacilityClassToPicIndex[]; extern const u8 gFacilityClassToTrainerClass[]; -extern const struct BaseStats gBaseStats[]; +extern const struct SpeciesInfo gSpeciesInfo[]; extern const u8 *const gItemEffectTable[]; extern const u32 gExperienceTables[][MAX_LEVEL + 1]; extern const struct LevelUpMove *const gLevelUpLearnsets[]; @@ -566,5 +564,6 @@ u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove); bool32 ShouldShowFemaleDifferences(u16 species, u32 personality); void TryToSetBattleFormChangeMoves(struct Pokemon *mon); u32 GetMonFriendshipScore(struct Pokemon *pokemon); +void UpdateMonPersonality(struct BoxPokemon *boxMon, u32 personality); #endif // GUARD_POKEMON_H diff --git a/include/recorded_battle.h b/include/recorded_battle.h index 9b8939403837..fbe14a656917 100644 --- a/include/recorded_battle.h +++ b/include/recorded_battle.h @@ -1,6 +1,51 @@ #ifndef GUARD_RECORDED_BATTLE_H #define GUARD_RECORDED_BATTLE_H +#include "constants/battle.h" + +#define BATTLER_RECORD_SIZE 664 + +struct RecordedBattleSave +{ + struct Pokemon playerParty[PARTY_SIZE]; + struct Pokemon opponentParty[PARTY_SIZE]; + u8 playersName[MAX_BATTLERS_COUNT][PLAYER_NAME_LENGTH + 1]; + u8 playersGender[MAX_BATTLERS_COUNT]; + u32 playersTrainerId[MAX_BATTLERS_COUNT]; + u8 playersLanguage[MAX_BATTLERS_COUNT]; + u32 rngSeed; + u32 battleFlags; + u8 playersBattlers[MAX_BATTLERS_COUNT]; + u16 opponentA; + u16 opponentB; + u16 partnerId; + u16 multiplayerId; + u8 lvlMode; + u8 frontierFacility; + u8 frontierBrainSymbol; + u8 battleScene:1; + u8 textSpeed:3; + u32 AI_scripts; + u8 recordMixFriendName[PLAYER_NAME_LENGTH + 1]; + u8 recordMixFriendClass; + u8 apprenticeId; + u16 easyChatSpeech[EASY_CHAT_BATTLE_WORDS_COUNT]; + u8 recordMixFriendLanguage; + u8 apprenticeLanguage; + u8 battleRecord[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; + u32 checksum; +}; + +enum +{ + RECORDED_BYTE, // Generic. + RECORDED_ACTION_TYPE, + RECORDED_MOVE_SLOT, + RECORDED_MOVE_TARGET, + RECORDED_PARTY_INDEX, + RECORDED_BATTLE_PALACE_ACTION, +}; + extern u32 gRecordedBattleRngSeed; extern u32 gBattlePalaceMoveSelectionRngValue; extern u8 gRecordedBattleMultiplayerId; @@ -12,11 +57,12 @@ 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); +u8 RecordedBattle_GetBattlerAction(u32 actionType, u8 battlerId); u8 RecordedBattle_BufferNewBattlerData(u8 *dst); void RecordedBattle_RecordAllBattlerData(u8 *data); bool32 CanCopyRecordedBattleSaveData(void); bool32 MoveRecordedBattleToSaveData(void); +void SetVariablesForRecordedBattle(struct RecordedBattleSave *); void PlayRecordedBattle(void (*CB2_After)(void)); u8 GetRecordedBattleFrontierFacility(void); u8 GetRecordedBattleFronterBrainSymbol(void); diff --git a/include/region_map.h b/include/region_map.h index 85793badcb01..9f0b110a658f 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -21,7 +21,8 @@ enum { MAPSECTYPE_ROUTE, MAPSECTYPE_CITY_CANFLY, MAPSECTYPE_CITY_CANTFLY, - MAPSECTYPE_BATTLE_FRONTIER + MAPSECTYPE_BATTLE_FRONTIER, + NUM_MAPSEC_TYPES }; struct RegionMap { diff --git a/include/starter_choose.h b/include/starter_choose.h index 7a4f6e967b8f..1bee42a2e89c 100644 --- a/include/starter_choose.h +++ b/include/starter_choose.h @@ -1,10 +1,10 @@ #ifndef GUARD_STARTER_CHOOSE_H #define GUARD_STARTER_CHOOSE_H -extern const u16 gBirchBagGrassPal[2][16]; +extern const u16 gBirchBagGrass_Pal[]; extern const u32 gBirchBagTilemap[]; extern const u32 gBirchGrassTilemap[]; -extern const u32 gBirchHelpGfx[]; +extern const u32 gBirchBagGrass_Gfx[]; extern const u32 gPokeballSelection_Gfx[]; u16 GetStarterPokemon(u16 chosenStarterId); diff --git a/include/test_runner.h b/include/test_runner.h new file mode 100644 index 000000000000..2fc0a55e3143 --- /dev/null +++ b/include/test_runner.h @@ -0,0 +1,17 @@ +#ifndef GUARD_TEST_RUNNER_H +#define GUARD_TEST_RUNNER_H + +extern const bool8 gTestRunnerEnabled; +extern const bool8 gTestRunnerHeadless; +extern const bool8 gTestRunnerSkipIsFail; + +void TestRunner_Battle_RecordAbilityPopUp(u32 battlerId, u32 ability); +void TestRunner_Battle_RecordAnimation(u32 animType, u32 animId); +void TestRunner_Battle_RecordHP(u32 battlerId, u32 oldHP, u32 newHP); +void TestRunner_Battle_RecordMessage(const u8 *message); +void TestRunner_Battle_RecordStatus1(u32 battlerId, u32 status1); +void TestRunner_Battle_AfterLastTurn(void); + +void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType); + +#endif diff --git a/include/wonder_news.h b/include/wonder_news.h index 68fd59e4cee5..f499709dfe75 100755 --- a/include/wonder_news.h +++ b/include/wonder_news.h @@ -8,8 +8,7 @@ enum { WONDER_NEWS_SENT, }; - -void InitSavedWonderNews(void); -void GenerateRandomWonderNews(u32 newsType); +void WonderNews_Reset(void); +void WonderNews_SetReward(u32 newsType); #endif //GUARD_WONDER_NEWS_H diff --git a/ld_script.txt b/ld_script.txt index 629649adfb6a..dcce51a0f7b1 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -2,6 +2,7 @@ ENTRY(Start) gNumMusicPlayers = 4; gMaxLines = 0; +gInitialMainCB2 = CB2_InitCopyrightScreenAfterBootup; SECTIONS { . = 0x2000000; @@ -342,6 +343,7 @@ SECTIONS { src/battle_transition_frontier.o(.text); src/international_string_util.o(.text); src/pokemon_debug.o(.text); + src/expansion_intro.o(.text); } =0 script_data : @@ -708,6 +710,7 @@ SECTIONS { src/m4a_tables.o(.rodata); data/sound_data.o(.rodata); src/pokemon_debug.o(.rodata); + src/expansion_intro.o(.rodata); } =0 song_data : diff --git a/ld_script_modern.txt b/ld_script_modern.txt index dd4eeed6ad56..082d694291fa 100644 --- a/ld_script_modern.txt +++ b/ld_script_modern.txt @@ -2,6 +2,7 @@ ENTRY(Start) gNumMusicPlayers = 4; gMaxLines = 0; +gInitialMainCB2 = CB2_InitCopyrightScreenAfterBootup; SECTIONS { . = 0x2000000; diff --git a/ld_script_test.txt b/ld_script_test.txt new file mode 100644 index 000000000000..3fcac51d4833 --- /dev/null +++ b/ld_script_test.txt @@ -0,0 +1,140 @@ +ENTRY(Start) + +gNumMusicPlayers = 4; +gMaxLines = 0; +gInitialMainCB2 = CB2_TestRunner; + +SECTIONS { + . = 0x2000000; + + ewram (NOLOAD) : + ALIGN(4) + { + gHeap = .; + + . = 0x1C000; + + src/*.o(ewram_data); + gflib/*.o(ewram_data); + test/*.o(ewram_data); + + . = 0x40000; + } + + . = 0x3000000; + + iwram (NOLOAD) : + ALIGN(4) + { + /* .bss starts at 0x3000000 */ + src/*.o(.bss); + gflib/*.o(.bss); + data/*.o(.bss); + test/*.o(.bss); + *libc.a:*.o(.bss*); + *libgcc.a:*.o(.bss*); + *libnosys.a:*.o(.bss*); + + /* .bss.code starts at 0x3001AA8 */ + src/m4a.o(.bss.code); + + /* COMMON starts at 0x30022A8 */ + src/*.o(COMMON); + gflib/*.o(COMMON); + data/*.o(COMMON); + test/*.o(COMMON); + *libc.a:sbrkr.o(COMMON); + end = .; + . = 0x8000; + } + + . = 0x8000000; + + .text : + ALIGN(4) + { + src/rom_header.o(.text); + src/rom_header_gf.o(.text.*); + src/*.o(.text); + gflib/*.o(.text); + } =0 + + script_data : + ALIGN(4) + { + data/*.o(script_data); + } =0 + + lib_text : + ALIGN(4) + { + *libagbsyscall.a:*.o(.text*); + *libgcc.a:*.o(.text*); + *libc.a:*.o(.text*); + *libnosys.a:*.o(.text*); + } =0 + + .rodata : + ALIGN(4) + { + src/*.o(.rodata); + gflib/*.o(.rodata); + data/*.o(.rodata); + } =0 + + song_data : + ALIGN(4) + { + sound/songs/*.o(.rodata); + } =0 + + lib_rodata : + SUBALIGN(4) + { + *libgcc.a:*.o(.rodata*); + *libc.a:*.o(.rodata*); + *libc.a:*.o(.data*); + src/libisagbprn.o(.rodata); + } =0 + + tests : + ALIGN(4) + { + __start_tests = .; + test/*.o(.tests); + __stop_tests = .; + test/*.o(.text); + test/*.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. */ + + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + + /* Discard everything not specifically mentioned above. */ + /DISCARD/ : + { + *(*); + } +} diff --git a/make_tools.mk b/make_tools.mk index 697897a693a6..5a5291b77b5c 100644 --- a/make_tools.mk +++ b/make_tools.mk @@ -1,7 +1,6 @@ - MAKEFLAGS += --no-print-directory -TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*)) +TOOLDIRS := tools/aif2pcm tools/bin2c tools/gbafix tools/gbagfx tools/jsonproc tools/mapjson tools/mid2agb tools/preproc tools/ramscrgen tools/rsfont tools/scaninc .PHONY: all $(TOOLDIRS) diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc index b2eef2d021d2..7714cd00ec71 100644 --- a/sound/cry_tables.inc +++ b/sound/cry_tables.inc @@ -1749,6 +1749,7 @@ gCryTable:: cry Cry_TornadusTherian cry Cry_ThundurusTherian cry Cry_LandorusTherian + cry Cry_Bulbasaur //Cry_EnamorusTherian @ Kyurem cry Cry_KyuremWhite cry Cry_KyuremBlack diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 9604f119511e..a626ef49a1f7 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -982,6 +982,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) // stat raising effects case EFFECT_ATTACK_UP: case EFFECT_ATTACK_UP_2: + case EFFECT_ATTACK_UP_USER_ALLY: if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) score -= 10; break; @@ -1082,6 +1083,14 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF)) score -= 6; break; + case EFFECT_VICTORY_DANCE: + if (gBattleMons[battlerAtk].statStages[STAT_ATK] >= MAX_STAT_STAGE || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + score -= 10; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPEED)) + score -= 8; + else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF)) + score -= 6; + break; case EFFECT_SHIFT_GEAR: if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) score -= 10; @@ -2007,6 +2016,10 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) if (!IS_BATTLER_OF_TYPE(battlerAtk, TYPE_FIRE)) score -= 10; break; + case EFFECT_DOUBLE_SHOCK: + if (!IS_BATTLER_OF_TYPE(battlerAtk, TYPE_ELECTRIC)) + 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) @@ -2130,12 +2143,14 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) 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])) + || IsSkillSwapBannedAbility(AI_DATA->abilities[battlerAtk]) || IsSkillSwapBannedAbility(AI_DATA->abilities[battlerDef]) + || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD) score -= 10; break; case EFFECT_WORRY_SEED: if (AI_DATA->abilities[battlerDef] == ABILITY_INSOMNIA - || IsWorrySeedBannedAbility(AI_DATA->abilities[battlerDef])) + || IsWorrySeedBannedAbility(AI_DATA->abilities[battlerDef]) + || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD) score -= 10; break; case EFFECT_GASTRO_ACID: @@ -2146,14 +2161,16 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_ENTRAINMENT: if (AI_DATA->abilities[battlerAtk] == ABILITY_NONE || IsEntrainmentBannedAbilityAttacker(AI_DATA->abilities[battlerAtk]) - || IsEntrainmentTargetOrSimpleBeamBannedAbility(AI_DATA->abilities[battlerDef])) + || IsEntrainmentTargetOrSimpleBeamBannedAbility(AI_DATA->abilities[battlerDef]) + || AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_ABILITY_SHIELD) score -= 10; break; case EFFECT_CORE_ENFORCER: break; case EFFECT_SIMPLE_BEAM: if (AI_DATA->abilities[battlerDef] == ABILITY_SIMPLE - || IsEntrainmentTargetOrSimpleBeamBannedAbility(AI_DATA->abilities[battlerDef])) + || IsEntrainmentTargetOrSimpleBeamBannedAbility(AI_DATA->abilities[battlerDef]) + || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD) score -= 10; break; case EFFECT_SNATCH: @@ -2411,25 +2428,18 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) 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; + break; } - else + // fallthrough + 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) @@ -2690,7 +2700,7 @@ static s16 AI_DoubleBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) switch (gBattleMoves[AI_DATA->partnerMove].effect) { case EFFECT_HELPING_HAND: - if (IS_MOVE_STATUS(move)) + if (!IS_MOVE_STATUS(move)) score += 5; break; case EFFECT_PERISH_SONG: @@ -2993,6 +3003,13 @@ static s16 AI_DoubleBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) RETURN_SCORE_PLUS(1); } break; + case EFFECT_HEAL_PULSE: + case EFFECT_HIT_ENEMY_HEAL_ALLY: + if (AI_WhoStrikesFirst(battlerAtk, FOE(battlerAtk), move) == AI_IS_FASTER + && AI_WhoStrikesFirst(battlerAtk, BATTLE_PARTNER(FOE(battlerAtk)), move) == AI_IS_FASTER + && gBattleMons[battlerAtkPartner].hp < gBattleMons[battlerAtkPartner].maxHP / 2) + RETURN_SCORE_PLUS(1); + break; } // attacker move effects } // check partner protecting @@ -3175,6 +3192,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) // stat raising effects case EFFECT_ATTACK_UP: case EFFECT_ATTACK_UP_2: + case EFFECT_ATTACK_UP_USER_ALLY: if (MovesWithSplitUnusable(battlerAtk, battlerDef, SPLIT_PHYSICAL)) { score -= 8; @@ -3938,6 +3956,10 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) if (sereneGraceBoost) IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score); break; + case EFFECT_SPECIAL_ATTACK_UP_HIT: + if (sereneGraceBoost) + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score); + break; case EFFECT_FELL_STINGER: if (gBattleMons[battlerAtk].statStages[STAT_ATK] < MAX_STAT_STAGE && AI_DATA->abilities[battlerAtk] != ABILITY_CONTRARY @@ -4393,6 +4415,11 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score); IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score); break; + case EFFECT_VICTORY_DANCE: + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score); + IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score); + break; case EFFECT_SHELL_SMASH: if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_RESTORE_STATS) score += 1; @@ -4799,6 +4826,7 @@ static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) switch (gBattleMoves[move].effect) { case EFFECT_ATTACK_UP: + case EFFECT_ATTACK_UP_USER_ALLY: case EFFECT_DEFENSE_UP: case EFFECT_SPEED_UP: case EFFECT_SPECIAL_ATTACK_UP: @@ -4878,6 +4906,7 @@ static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_SANDSTORM: case EFFECT_HAIL: case EFFECT_GEOMANCY: + case EFFECT_VICTORY_DANCE: score += 2; break; default: @@ -5128,6 +5157,7 @@ static s16 AI_HPAware(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) switch (effect) { case EFFECT_ATTACK_UP: + case EFFECT_ATTACK_UP_USER_ALLY: case EFFECT_DEFENSE_UP: case EFFECT_SPEED_UP: case EFFECT_SPECIAL_ATTACK_UP: diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 5876e8b4747a..0ae1c8a9afb7 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -205,13 +205,13 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON && i == (CalculateEnemyPartyCount()-1)) continue; - + species = GetMonData(&party[i], MON_DATA_SPECIES); if (GetMonData(&party[i], MON_DATA_ABILITY_NUM) != 0) - monAbility = gBaseStats[species].abilities[1]; + monAbility = gSpeciesInfo[species].abilities[1]; else - monAbility = gBaseStats[species].abilities[0]; + monAbility = gSpeciesInfo[species].abilities[0]; if (absorbingTypeAbility == monAbility && Random() & 1) { @@ -583,9 +583,9 @@ static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent) species = GetMonData(&party[i], MON_DATA_SPECIES); if (GetMonData(&party[i], MON_DATA_ABILITY_NUM) != 0) - monAbility = gBaseStats[species].abilities[1]; + monAbility = gSpeciesInfo[species].abilities[1]; else - monAbility = gBaseStats[species].abilities[0]; + monAbility = gSpeciesInfo[species].abilities[0]; CalcPartyMonTypeEffectivenessMultiplier(gLastLandedMoves[gActiveBattler], species, monAbility); if (gMoveResultFlags & flags) @@ -832,8 +832,8 @@ static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId, u8 atkType1 = gBattleMons[opposingBattler].type1; u8 atkType2 = gBattleMons[opposingBattler].type2; - u8 defType1 = gBaseStats[species].type1; - u8 defType2 = gBaseStats[species].type2; + u8 defType1 = gSpeciesInfo[species].types[0]; + u8 defType2 = gSpeciesInfo[species].types[1]; typeEffectiveness *= GetTypeModifier(atkType1, defType1); if (atkType2 != atkType1) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 113d5d3e01de..531a4aa6b754 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -552,9 +552,9 @@ void SetBattlerData(u8 battlerId) 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]; + else if (gSpeciesInfo[gBattleMons[battlerId].species].abilities[1] == ABILITY_NONE + || gSpeciesInfo[gBattleMons[battlerId].species].abilities[1] == gSpeciesInfo[gBattleMons[battlerId].species].abilities[0]) + gBattleMons[battlerId].ability = gSpeciesInfo[gBattleMons[battlerId].species].abilities[0]; // The ability is unknown. else gBattleMons[battlerId].ability = ABILITY_NONE; @@ -628,12 +628,12 @@ bool32 IsBattlerTrapped(u8 battler, bool8 checkSwitch) u32 GetTotalBaseStat(u32 species) { - return gBaseStats[species].baseHP - + gBaseStats[species].baseAttack - + gBaseStats[species].baseDefense - + gBaseStats[species].baseSpeed - + gBaseStats[species].baseSpAttack - + gBaseStats[species].baseSpDefense; + return gSpeciesInfo[species].baseHP + + gSpeciesInfo[species].baseAttack + + gSpeciesInfo[species].baseDefense + + gSpeciesInfo[species].baseSpeed + + gSpeciesInfo[species].baseSpAttack + + gSpeciesInfo[species].baseSpDefense; } bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler) @@ -1183,12 +1183,12 @@ s32 AI_GetAbility(u32 battlerId) return knownAbility; // Else, guess the ability - if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE) + if (gSpeciesInfo[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]; + abilityGuess = gSpeciesInfo[gBattleMons[battlerId].species].abilities[Random() % NUM_ABILITY_SLOTS]; } return abilityGuess; @@ -1634,7 +1634,8 @@ 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 + if (AI_DATA->holdEffects[battler] == HOLD_EFFECT_CLEAR_AMULET + || battlerAbility == ABILITY_CLEAR_BODY || battlerAbility == ABILITY_WHITE_SMOKE || battlerAbility == ABILITY_FULL_METAL_BODY) return FALSE; @@ -1711,7 +1712,8 @@ bool32 ShouldLowerAttack(u8 battlerAtk, u8 battlerDef, u16 defAbility) && defAbility != ABILITY_CLEAR_BODY && defAbility != ABILITY_WHITE_SMOKE && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_HYPER_CUTTER) + && defAbility != ABILITY_HYPER_CUTTER + && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) return TRUE; return FALSE; } @@ -1727,7 +1729,8 @@ bool32 ShouldLowerDefense(u8 battlerAtk, u8 battlerDef, u16 defAbility) && defAbility != ABILITY_CLEAR_BODY && defAbility != ABILITY_WHITE_SMOKE && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_BIG_PECKS) + && defAbility != ABILITY_BIG_PECKS + && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) return TRUE; return FALSE; } @@ -1741,7 +1744,8 @@ bool32 ShouldLowerSpeed(u8 battlerAtk, u8 battlerDef, u16 defAbility) && defAbility != ABILITY_CONTRARY && defAbility != ABILITY_CLEAR_BODY && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_WHITE_SMOKE) + && defAbility != ABILITY_WHITE_SMOKE + && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) return TRUE; return FALSE; } @@ -1756,7 +1760,8 @@ bool32 ShouldLowerSpAtk(u8 battlerAtk, u8 battlerDef, u16 defAbility) && defAbility != ABILITY_CONTRARY && defAbility != ABILITY_CLEAR_BODY && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_WHITE_SMOKE) + && defAbility != ABILITY_WHITE_SMOKE + && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) return TRUE; return FALSE; } @@ -1771,7 +1776,8 @@ bool32 ShouldLowerSpDef(u8 battlerAtk, u8 battlerDef, u16 defAbility) && defAbility != ABILITY_CONTRARY && defAbility != ABILITY_CLEAR_BODY && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_WHITE_SMOKE) + && defAbility != ABILITY_WHITE_SMOKE + && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) return TRUE; return FALSE; } @@ -1785,7 +1791,8 @@ bool32 ShouldLowerAccuracy(u8 battlerAtk, u8 battlerDef, u16 defAbility) && defAbility != ABILITY_CLEAR_BODY && defAbility != ABILITY_WHITE_SMOKE && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_KEEN_EYE) + && defAbility != ABILITY_KEEN_EYE + && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) return TRUE; return FALSE; } @@ -1799,7 +1806,8 @@ bool32 ShouldLowerEvasion(u8 battlerAtk, u8 battlerDef, u16 defAbility) && defAbility != ABILITY_CONTRARY && defAbility != ABILITY_CLEAR_BODY && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_WHITE_SMOKE) + && defAbility != ABILITY_WHITE_SMOKE + && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) return TRUE; return FALSE; } @@ -2091,6 +2099,7 @@ bool32 IsStatRaisingEffect(u16 effect) case EFFECT_BULK_UP: case EFFECT_GEOMANCY: case EFFECT_STOCKPILE: + case EFFECT_VICTORY_DANCE: return TRUE; default: return FALSE; @@ -2428,19 +2437,41 @@ 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); + u16 holdEffect; + u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 flags = gSideStatuses[GetBattlerSide(currBattler)] & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES); + s32 hazardDamage = 0; + u8 type1 = gSpeciesInfo[species].types[0]; + u8 type2 = gSpeciesInfo[species].types[1]; + u32 maxHp = GetMonData(mon, MON_DATA_MAX_HP); if (flags == 0) return FALSE; - if (ability == ABILITY_MAGIC_GUARD || ability == ABILITY_LEVITATE - || holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS) + if (ability == ABILITY_MAGIC_GUARD) + return FALSE; + if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM || ability == ABILITY_KLUTZ) + holdEffect = HOLD_EFFECT_NONE; + else + holdEffect = gItems[GetMonData(mon, MON_DATA_HELD_ITEM)].holdEffect; + if (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; + if (flags & SIDE_STATUS_STEALTH_ROCK) + hazardDamage += GetStealthHazardDamageByTypesAndHP(gBattleMoves[MOVE_STEALTH_ROCK].type, type1, type2, maxHp); + if (flags & SIDE_STATUS_SPIKES && ((type1 != TYPE_FLYING && type2 != TYPE_FLYING + && ability != ABILITY_LEVITATE && holdEffect != HOLD_EFFECT_AIR_BALLOON) + || holdEffect == HOLD_EFFECT_IRON_BALL || gFieldStatuses & STATUS_FIELD_GRAVITY)) + { + u8 spikesDmg = maxHp / ((5 - gSideTimers[GetBattlerSide(currBattler)].spikesAmount) * 2); + if (spikesDmg == 0) + spikesDmg = 1; + hazardDamage += spikesDmg; + } + + if (hazardDamage >= GetMonData(mon, MON_DATA_HP)) + return TRUE; return FALSE; } diff --git a/src/battle_anim.c b/src/battle_anim.c index 509369789c44..a7faec1fda43 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -3,6 +3,7 @@ #include "battle_anim.h" #include "battle_controllers.h" #include "battle_interface.h" +#include "battle_util.h" #include "bg.h" #include "contest.h" #include "decompress.h" @@ -16,8 +17,8 @@ #include "sound.h" #include "sprite.h" #include "task.h" +#include "test_runner.h" #include "constants/battle_anim.h" -#include "constants/battle_config.h" #include "constants/moves.h" /* @@ -28,7 +29,10 @@ #define ANIM_SPRITE_INDEX_COUNT 8 extern const u16 gMovesWithQuietBGM[]; +extern const u8 *const gBattleAnims_General[]; extern const u8 *const gBattleAnims_Moves[]; +extern const u8 *const gBattleAnims_Special[]; +extern const u8 *const gBattleAnims_StatusConditions[]; static void Cmd_loadspritegfx(void); static void Cmd_unloadspritegfx(void); @@ -78,7 +82,9 @@ static void Cmd_visible(void); static void Cmd_teamattack_moveback(void); static void Cmd_teamattack_movefwd(void); static void Cmd_stopsound(void); - +static void Cmd_createvisualtaskontargets(void); +static void Cmd_createspriteontargets(void); +static void Cmd_createspriteontargets_onpos(void); static void RunAnimScriptCommand(void); static void Task_UpdateMonBg(u8 taskId); static void FlipBattlerBgTiles(void); @@ -166,6 +172,9 @@ static void (* const sScriptCmdTable[])(void) = Cmd_teamattack_moveback, // 0x2D Cmd_teamattack_movefwd, // 0x2E Cmd_stopsound, // 0x2F + Cmd_createvisualtaskontargets, // 0x30 + Cmd_createspriteontargets, // 0x31 + Cmd_createspriteontargets_onpos, // 0x32 }; void ClearBattleAnimationVars(void) @@ -212,17 +221,50 @@ void DoMoveAnim(u16 move) gBattleAnimTarget = 0; } } - LaunchBattleAnimation(gBattleAnims_Moves, move, TRUE); + LaunchBattleAnimation(ANIM_TYPE_MOVE, move); } -void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim) +static void Nop(void) +{ +} + +void LaunchBattleAnimation(u32 animType, u32 animId) { s32 i; - bool32 hideHpBoxes = (tableId == MOVE_TRANSFORM) ? FALSE : TRUE; + const u8 *const *animsTable; + bool32 hideHpBoxes; - if (!isMoveAnim) + if (gTestRunnerEnabled) { - switch (tableId) + TestRunner_Battle_RecordAnimation(animType, animId); + if (gTestRunnerHeadless) + { + gAnimScriptCallback = Nop; + gAnimScriptActive = FALSE; + return; + } + } + + switch (animType) + { + case ANIM_TYPE_GENERAL: + animsTable = gBattleAnims_General; + break; + case ANIM_TYPE_MOVE: + animsTable = gBattleAnims_Moves; + break; + case ANIM_TYPE_STATUS: + animsTable = gBattleAnims_StatusConditions; + break; + case ANIM_TYPE_SPECIAL: + animsTable = gBattleAnims_Special; + break; + } + + hideHpBoxes = !(animType == ANIM_TYPE_MOVE && animId == MOVE_TRANSFORM); + if (animType != ANIM_TYPE_MOVE) + { + switch (animId) { case B_ANIM_TURN_TRAP: case B_ANIM_LEECH_SEED_DRAIN: @@ -259,17 +301,17 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo gAnimBattlerSpecies[i] = gContestResources->moveAnim->species; } - if (!isMoveAnim) + if (animType != ANIM_TYPE_MOVE) gAnimMoveIndex = 0; else - gAnimMoveIndex = tableId; + gAnimMoveIndex = animId; for (i = 0; i < ANIM_ARGS_COUNT; i++) gBattleAnimArgs[i] = 0; sMonAnimTaskIdArray[0] = TASK_NONE; sMonAnimTaskIdArray[1] = TASK_NONE; - sBattleAnimScriptPtr = animsTable[tableId]; + sBattleAnimScriptPtr = animsTable[animId]; gAnimScriptActive = TRUE; sAnimFramesToWait = 0; gAnimScriptCallback = RunAnimScriptCommand; @@ -277,11 +319,11 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) sAnimSpriteIndexArray[i] = 0xFFFF; - if (isMoveAnim) + if (animType == ANIM_TYPE_MOVE) { for (i = 0; gMovesWithQuietBGM[i] != 0xFFFF; i++) { - if (tableId == gMovesWithQuietBGM[i]) + if (animId == gMovesWithQuietBGM[i]) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 128); break; @@ -389,29 +431,46 @@ static void Cmd_unloadspritegfx(void) ClearSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); } -static void Cmd_createsprite(void) +static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) { - s32 i; - const struct SpriteTemplate *template; - u8 argVar; - u8 argsCount; - s16 subpriority; - - sBattleAnimScriptPtr++; - template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr)); - sBattleAnimScriptPtr += 4; - - argVar = sBattleAnimScriptPtr[0]; - sBattleAnimScriptPtr++; - - argsCount = sBattleAnimScriptPtr[0]; - sBattleAnimScriptPtr++; - for (i = 0; i < argsCount; i++) + u8 numTargets = 1; + switch (GetBattlerMoveTargetType(gBattleAnimAttacker, gAnimMoveIndex)) { - gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); - sBattleAnimScriptPtr += 2; + case MOVE_TARGET_BOTH: + targets[0] = gBattleAnimArgs[battlerArgIndex]; + numTargets = 1; + if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { + targets[1] = targets[0] ^ BIT_FLANK; + numTargets++; + } + break; + case MOVE_TARGET_FOES_AND_ALLY: + targets[0] = gBattleAnimArgs[battlerArgIndex]; + numTargets = 1; + + if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { + targets[1] = targets[0] ^ BIT_FLANK; + numTargets++; + } + + if (IsBattlerAlive(gBattleAnimAttacker ^ BIT_FLANK)) { + targets[2] = gBattleAnimAttacker ^ BIT_FLANK; + numTargets++; + } + break; + default: + targets[0] = gBattleAnimArgs[battlerArgIndex]; // original + numTargets = 1; + break; } + + return numTargets; +} +static s16 GetSubpriorityForMoveAnim(u8 argVar) +{ + s16 subpriority; + if (argVar & ANIMSPRITE_IS_TARGET) { argVar ^= ANIMSPRITE_IS_TARGET; @@ -434,6 +493,34 @@ static void Cmd_createsprite(void) if (subpriority < 3) subpriority = 3; + + return subpriority; +} + +static void Cmd_createsprite(void) +{ + s32 i; + const struct SpriteTemplate *template; + u8 argVar; + u8 argsCount; + s16 subpriority; + + sBattleAnimScriptPtr++; + template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr)); + sBattleAnimScriptPtr += 4; + + argVar = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + argsCount = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + for (i = 0; i < argsCount; i++) + { + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 2; + } + + subpriority = GetSubpriorityForMoveAnim(argVar); CreateSpriteAndAnimate( template, @@ -443,6 +530,85 @@ static void Cmd_createsprite(void) gAnimVisualTaskCount++; } +static void CreateSpriteOnTargets(const struct SpriteTemplate *template, u8 argVar, u8 battlerArgIndex, u8 argsCount, bool32 overwriteAnimTgt) +{ + u32 i; + u8 targets[MAX_BATTLERS_COUNT]; + int ntargets; + s16 subpriority; + + for (i = 0; i < argsCount; i++) + { + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 2; + } + + subpriority = GetSubpriorityForMoveAnim(argVar); + + ntargets = GetBattleAnimMoveTargets(battlerArgIndex, targets); + + for (i = 0; i < ntargets; i++) { + + if (overwriteAnimTgt) + gBattleAnimArgs[battlerArgIndex] = targets[i]; + + CreateSpriteAndAnimate( + template, + GetBattlerSpriteCoord(targets[i], BATTLER_COORD_X_2), + GetBattlerSpriteCoord(targets[i], BATTLER_COORD_Y_PIC_OFFSET), + subpriority); + gAnimVisualTaskCount++; + } +} + +// will NOT overwrite gBattleAnimArgs +static void Cmd_createspriteontargets_onpos(void) +{ + const struct SpriteTemplate *template; + u8 argVar; + u8 argsCount; + u8 battlerArgIndex; + + sBattleAnimScriptPtr++; + template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr)); + sBattleAnimScriptPtr += 4; + + argVar = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + battlerArgIndex = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + argsCount = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + CreateSpriteOnTargets(template, argVar, battlerArgIndex, argsCount, FALSE); +} + +// DOES overwrite gBattleAnimArgs +static void Cmd_createspriteontargets(void) +{ + const struct SpriteTemplate *template; + u8 argVar; + u8 argsCount; + u8 battlerArgIndex; + + sBattleAnimScriptPtr++; + template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr)); + sBattleAnimScriptPtr += 4; + + argVar = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + battlerArgIndex = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + argsCount = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + CreateSpriteOnTargets(template, argVar, battlerArgIndex, argsCount, TRUE); +} + static void Cmd_createvisualtask(void) { TaskFunc taskFunc; @@ -473,6 +639,48 @@ static void Cmd_createvisualtask(void) gAnimVisualTaskCount++; } +static void Cmd_createvisualtaskontargets(void) +{ + TaskFunc taskFunc; + u8 taskPriority; + u8 taskId; + u8 numArgs; + u8 battlerArgIndex; // index in gBattleAnimArgs that has the battlerId + s32 i; + u8 targets[MAX_BATTLERS_COUNT] = {0}; + + sBattleAnimScriptPtr++; + + taskFunc = (TaskFunc)T2_READ_32(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 4; + + taskPriority = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + battlerArgIndex = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + numArgs = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + // copy task arguments + for (i = 0; i < numArgs; i++) { + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 2; + } + + numArgs = GetBattleAnimMoveTargets(battlerArgIndex, targets); + + for (i = 0; i < numArgs; i++) + { + gBattleAnimArgs[battlerArgIndex] = targets[i]; + taskId = CreateTask(taskFunc, taskPriority); + taskFunc(taskId); + gAnimVisualTaskCount++; + } +} + + static void Cmd_delay(void) { sBattleAnimScriptPtr++; @@ -750,8 +958,8 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible) SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); 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); + LoadPalette(&gPlttBufferUnfaded[OBJ_PLTT_ID(battlerId)], BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); + CpuCopy32(&gPlttBufferUnfaded[OBJ_PLTT_ID(battlerId)], (void *)(BG_PLTT + PLTT_OFFSET_4BPP(animBg.paletteId)), PLTT_SIZE_4BPP); if (IsContest()) battlerPosition = 0; @@ -785,8 +993,8 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible) SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X); SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y); - LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], 0x90, 0x20); - CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void *)(BG_PLTT + 0x120), 0x20); + LoadPalette(&gPlttBufferUnfaded[OBJ_PLTT_ID(battlerId)], BG_PLTT_ID(9), PLTT_SIZE_4BPP); + CpuCopy32(&gPlttBufferUnfaded[OBJ_PLTT_ID(battlerId)], (void *)(BG_PLTT + PLTT_OFFSET_4BPP(9)), PLTT_SIZE_4BPP); DrawBattlerOnBg(2, 0, 0, GetBattlerPosition(battlerId), animBg.paletteId, animBg.bgTiles + 0x1000, animBg.bgTilemap + 0x400, animBg.tilesOffset); } @@ -1252,13 +1460,13 @@ void LoadMoveBg(u16 bgId) dmaDest = (void *)BG_SCREEN_ADDR(26); DmaCopy32(3, dmaSrc, dmaDest, 0x800); LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)BG_SCREEN_ADDR(4)); - LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, GetBattleBgPaletteNum() * 16, 32); + LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, BG_PLTT_ID(GetBattleBgPaletteNum()), PLTT_SIZE_4BPP); } else { LZDecompressVram(gBattleAnimBackgroundTable[bgId].tilemap, (void *)BG_SCREEN_ADDR(26)); LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)BG_CHAR_ADDR(2)); - LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, 32, 32); + LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, BG_PLTT_ID(2), PLTT_SIZE_4BPP); } } diff --git a/src/battle_anim_dark.c b/src/battle_anim_dark.c index 75e4107e9ad0..2400c22aafde 100644 --- a/src/battle_anim_dark.c +++ b/src/battle_anim_dark.c @@ -508,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(RGB_BLACK, animBg.paletteId * 16, 32); + FillPalette(RGB_BLACK, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); scanlineParams.dmaDest = ®_BG1VOFS; var0 = WINOUT_WIN01_BG1; if (!IsContest()) @@ -518,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(RGB_BLACK, 144, 32); + FillPalette(RGB_BLACK, BG_PLTT_ID(9), PLTT_SIZE_4BPP); scanlineParams.dmaDest = ®_BG2VOFS; var0 = WINOUT_WIN01_BG2; if (!IsContest()) @@ -648,12 +648,12 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId) { GetBattleAnimBg1Data(&animBg); task->data[10] = gBattle_BG1_Y; - FillPalette(RGB_BLACK, animBg.paletteId * 16, 32); + FillPalette(RGB_BLACK, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); } else { task->data[10] = gBattle_BG2_Y; - FillPalette(RGB_BLACK, 9 * 16, 32); + FillPalette(RGB_BLACK, BG_PLTT_ID(9), PLTT_SIZE_4BPP); } SetAllBattlersSpritePriority(3); @@ -945,7 +945,7 @@ void AnimTask_MetallicShine(u8 taskId) GetBattleAnimBg1Data(&animBg); AnimLoadCompressedBgTilemap(animBg.bgId, gMetalShineTilemap); AnimLoadCompressedBgGfx(animBg.bgId, gMetalShineGfx, animBg.tilesOffset); - LoadCompressedPalette(gMetalShinePalette, animBg.paletteId * 16, 32); + LoadCompressedPalette(gMetalShinePalette, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); gBattle_BG1_X = -gSprites[spriteId].x + 96; gBattle_BG1_Y = -gSprites[spriteId].y + 32; @@ -954,7 +954,7 @@ void AnimTask_MetallicShine(u8 taskId) if (gBattleAnimArgs[1] == 0) SetGrayscaleOrOriginalPalette(paletteNum, FALSE); else - BlendPalette(paletteNum * 16, 16, 11, gBattleAnimArgs[2]); + BlendPalette(BG_PLTT_ID(paletteNum), 16, 11, gBattleAnimArgs[2]); gTasks[taskId].data[0] = newSpriteId; gTasks[taskId].data[1] = gBattleAnimArgs[0]; @@ -1025,19 +1025,19 @@ void AnimTask_SetGrayscaleOrOriginalPal(u8 taskId) case ANIM_DEF_PARTNER: spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); break; - case 4: + case ANIM_PLAYER_LEFT: position = B_POSITION_PLAYER_LEFT; calcSpriteId = TRUE; break; - case 5: + case ANIM_PLAYER_RIGHT: position = B_POSITION_PLAYER_RIGHT; calcSpriteId = TRUE; break; - case 6: + case ANIM_OPPONENT_LEFT: position = B_POSITION_OPPONENT_LEFT; calcSpriteId = TRUE; break; - case 7: + case ANIM_OPPONENT_RIGHT: position = B_POSITION_OPPONENT_RIGHT; calcSpriteId = TRUE; break; diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 93bb49524114..8dae62029324 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -2447,6 +2447,39 @@ const struct SpriteTemplate gFollowMeFingerSpriteTemplate = .callback = AnimFollowMeFinger, }; +const union AffineAnimCmd gTeaAffineAnimCmds1[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gTeaAffineAnimCmds2[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -3, 11), + AFFINEANIMCMD_FRAME(0x0, 0x0, 3, 11), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gTeaAffineAnimTable[] = +{ + gTeaAffineAnimCmds1, + gTeaAffineAnimCmds2, +}; + +const struct SpriteTemplate gTeapotSpriteTemplate = +{ + .tileTag = ANIM_TAG_TEAPOT, + .paletteTag = ANIM_TAG_TEAPOT, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gTeaAffineAnimTable, + .callback = AnimMetronomeFinger, +}; + const union AnimCmd gTauntFingerAnimCmds1[] = { ANIMCMD_FRAME(0, 1), @@ -4747,8 +4780,8 @@ void AnimTask_CycleMagicalLeafPal(u8 taskId) switch (task->data[0]) { case 0: - task->data[8] = IndexOfSpritePaletteTag(ANIM_TAG_LEAF) * 16 + 256; - task->data[12] = IndexOfSpritePaletteTag(ANIM_TAG_RAZOR_LEAF) * 16 + 256; + task->data[8] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(ANIM_TAG_LEAF)); + task->data[12] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(ANIM_TAG_RAZOR_LEAF)); task->data[0]++; break; case 1: @@ -4773,8 +4806,8 @@ void AnimTask_CycleMagicalLeafPal(u8 taskId) void AnimNeedleArmSpike(struct Sprite *sprite) { - u8 a; - u8 b; + s16 a; + s16 b; u16 c; u16 x; u16 y; @@ -4787,13 +4820,27 @@ void AnimNeedleArmSpike(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { - a = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); - b = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + if (IsDoubleBattle()) + { + SetAverageBattlerPositions(gBattleAnimAttacker, TRUE, &a, &b); + } + else + { + a = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + b = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + } } else { - a = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); - b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + if (IsDoubleBattle()) + { + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &a, &b); + } + else + { + a = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + } } sprite->data[0] = gBattleAnimArgs[4]; @@ -5455,7 +5502,7 @@ static void AnimLockOnTarget_Step4(struct Sprite *sprite) int pal; sprite->data[2]++; pal = sprite->oam.paletteNum; - LoadPalette(&gPlttBufferUnfaded[0x108 + pal * 16], pal * 16 | 0x101, 4); + LoadPalette(&gPlttBufferUnfaded[OBJ_PLTT_ID(pal) + 8], OBJ_PLTT_ID(pal) + 1, PLTT_SIZEOF(2)); PlaySE12WithPanning(SE_M_LEER, BattleAnimAdjustPanning(SOUND_PAN_TARGET)); } else if (sprite->data[1] == 0) @@ -5667,11 +5714,11 @@ static void AnimTipMon_Step(struct Sprite *sprite) void AnimTask_SkullBashPosition(u8 taskId) { - u8 a; + u8 side; gTasks[taskId].data[0] = gBattlerSpriteIds[gBattleAnimAttacker]; - a = GetBattlerSide(gBattleAnimAttacker); - gTasks[taskId].data[1] = a; + side = GetBattlerSide(gBattleAnimAttacker); + gTasks[taskId].data[1] = side; gTasks[taskId].data[2] = 0; switch (gBattleAnimArgs[0]) { @@ -5683,7 +5730,7 @@ void AnimTask_SkullBashPosition(u8 taskId) gTasks[taskId].data[3] = 8; gTasks[taskId].data[4] = 0; gTasks[taskId].data[5] = 3; - if (a == 0) + if (side == B_SIDE_PLAYER) gTasks[taskId].data[5] *= -1; gTasks[taskId].func = AnimTask_SkullBashPositionSet; @@ -5692,7 +5739,7 @@ void AnimTask_SkullBashPosition(u8 taskId) gTasks[taskId].data[3] = 8; gTasks[taskId].data[4] = 0x600; gTasks[taskId].data[5] = 0xC0; - if (a == 0) + if (side == B_SIDE_PLAYER) { gTasks[taskId].data[4] = -gTasks[taskId].data[4]; gTasks[taskId].data[5] = -gTasks[taskId].data[5]; @@ -6279,8 +6326,8 @@ void AnimTask_DoubleTeam(u8 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; - r4 = (gSprites[task->data[0]].oam.paletteNum + 16) << 4; + r3 = OBJ_PLTT_ID(task->data[1]); + r4 = OBJ_PLTT_ID2(gSprites[task->data[0]].oam.paletteNum); for (i = 1; i < 16; i++) gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i]; diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 489c5c747da4..8aaab10a5cd1 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -2714,7 +2714,7 @@ void AnimUproarRing(struct Sprite *sprite) u8 index = IndexOfSpritePaletteTag(ANIM_TAG_THIN_RING); if (index != 0xFF) { - BlendPalette(((index << 20) + 0x1010000) >> 16, 15, gBattleAnimArgs[5], gBattleAnimArgs[4]); + BlendPalette((OBJ_PLTT_ID(index) + 1), 15, gBattleAnimArgs[5], gBattleAnimArgs[4]); } StartSpriteAffineAnim(sprite, 1); @@ -3062,7 +3062,7 @@ void AnimTask_LoadMusicNotesPals(u8 taskId) gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000); LZDecompressWram(gBattleAnimSpritePal_MusicNotes2, gMonSpritesGfxPtr->buffer); for (i = 0; i < NUM_MUSIC_NOTE_PAL_TAGS; i++) - LoadPalette(&gMonSpritesGfxPtr->buffer[i * 32], (u16)((paletteNums[i] << 4) + 0x100), 32); + LoadPalette(&gMonSpritesGfxPtr->buffer[i * 32], (u16)(OBJ_PLTT_ID(paletteNums[i])), PLTT_SIZE_4BPP); FREE_AND_SET_NULL(gMonSpritesGfxPtr->buffer); DestroyAnimVisualTask(taskId); @@ -3295,7 +3295,7 @@ void AnimTask_HeartsBackground(u8 taskId) GetBattleAnimBg1Data(&animBg); AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Attract, animBg.tilesOffset); AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_Attract, FALSE); - LoadCompressedPalette(gBattleAnimBgPalette_Attract, animBg.paletteId * 16, 32); + LoadCompressedPalette(gBattleAnimBgPalette_Attract, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); gTasks[taskId].func = AnimTask_HeartsBackground_Step; } @@ -3379,7 +3379,7 @@ void AnimTask_ScaryFace(u8 taskId) AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceOpponent, FALSE); AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_ScaryFace, animBg.tilesOffset); - LoadCompressedPalette(gBattleAnimBgPalette_ScaryFace, animBg.paletteId * 16, 32); + LoadCompressedPalette(gBattleAnimBgPalette_ScaryFace, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); gTasks[taskId].func = AnimTask_ScaryFace_Step; } diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 552fcf5170c0..ff5f044464af 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -2364,7 +2364,7 @@ void AnimTask_TransformMon(u8 taskId) } break; case 2: - HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gBattleAnimArgs[1]); + HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gBattleAnimArgs[1], TRUE); GetBgDataForTransform(&animBg, gBattleAnimAttacker); if (IsContest()) @@ -2451,7 +2451,7 @@ void AnimTask_IsMonInvisible(u8 taskId) void AnimTask_CastformGfxDataChange(u8 taskId) { - HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, TRUE, FALSE); + HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, TRUE, FALSE, FALSE); DestroyAnimVisualTask(taskId); } @@ -2487,7 +2487,7 @@ void AnimTask_MorningSunLightBeam(u8 taskId) } AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimMaskImage_LightBeam, animBg.tilesOffset); - LoadCompressedPalette(gBattleAnimMaskPalette_LightBeam, animBg.paletteId * 16, 32); + LoadCompressedPalette(gBattleAnimMaskPalette_LightBeam, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); gTasks[taskId].data[10] = gBattle_BG1_X; gTasks[taskId].data[11] = gBattle_BG1_Y; @@ -2683,7 +2683,7 @@ void AnimTask_DoomDesireLightBeam(u8 taskId) } AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimMaskImage_LightBeam, animBg.tilesOffset); - LoadCompressedPalette(gBattleAnimMaskPalette_LightBeam, animBg.paletteId * 16, 32); + LoadCompressedPalette(gBattleAnimMaskPalette_LightBeam, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); gTasks[taskId].data[10] = gBattle_BG1_X; gTasks[taskId].data[11] = gBattle_BG1_Y; gTasks[taskId].data[0]++; @@ -3334,7 +3334,7 @@ void AnimTask_RolePlaySilhouette(u8 taskId) gSprites[spriteId].oam.priority = priority; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; - FillPalette(RGB_WHITE, (gSprites[spriteId].oam.paletteNum << 4) + 0x100, 32); + FillPalette(RGB_WHITE, OBJ_PLTT_ID(gSprites[spriteId].oam.paletteNum), PLTT_SIZE_4BPP); gSprites[spriteId].oam.priority = priority; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1])); @@ -3962,7 +3962,7 @@ void AnimTask_FacadeColorBlend(u8 taskId) gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = gBattleAnimArgs[1]; spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - gTasks[taskId].data[2] = 0x100 + gSprites[spriteId].oam.paletteNum * 16; + gTasks[taskId].data[2] = OBJ_PLTT_ID(gSprites[spriteId].oam.paletteNum); gTasks[taskId].func = AnimTask_FacadeColorBlend_Step; } @@ -5238,7 +5238,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) spriteId2 = CreateAdditionalMonSpriteForMoveAnim(species, isBackPic, 0, x, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y), subpriority, personality, otId, gBattleAnimAttacker); if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies != SPECIES_NONE) - BlendPalette((gSprites[spriteId2].oam.paletteNum * 16) | 0x100, 16, 6, RGB_WHITE); + BlendPalette(OBJ_PLTT_ID(gSprites[spriteId2].oam.paletteNum), 16, 6, RGB_WHITE); gTasks[taskId].data[15] = spriteId2; gTasks[taskId].data[0]++; diff --git a/src/battle_anim_fire.c b/src/battle_anim_fire.c index bc411f6e52c7..9a68f929bb94 100644 --- a/src/battle_anim_fire.c +++ b/src/battle_anim_fire.c @@ -2,6 +2,7 @@ #include "battle_anim.h" #include "constants/rgb.h" #include "constants/songs.h" +#include "palette.h" #include "sound.h" #include "util.h" #include "task.h" @@ -1411,7 +1412,7 @@ void AnimTask_BlendBackground(u8 taskId) { struct BattleAnimBgData animBg; GetBattleAnimBg1Data(&animBg); - BlendPalette(animBg.paletteId * 16, 16, gBattleAnimArgs[0], gBattleAnimArgs[1]); + BlendPalette(BG_PLTT_ID(animBg.paletteId), 16, gBattleAnimArgs[0], gBattleAnimArgs[1]); DestroyAnimVisualTask(taskId); } diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index f21654e3e84c..bf2c6a42b7ca 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -708,8 +708,8 @@ static void AnimTask_SpiteTargetShadow_Step1(u8 taskId) } break; case 1: - task->data[14] = (task->data[14] + 16) * 16; - CpuCopy32(&gPlttBufferUnfaded[task->data[4]], &gPlttBufferFaded[task->data[14]], 32); + task->data[14] = OBJ_PLTT_ID2(task->data[14]); + CpuCopy32(&gPlttBufferUnfaded[task->data[4]], &gPlttBufferFaded[task->data[14]], PLTT_SIZE_4BPP); BlendPalette(task->data[4], 16, 10, RGB(13, 0, 15)); task->data[15]++; break; diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c index e3b4e59d1e05..44c1a4f22cc2 100644 --- a/src/battle_anim_ice.c +++ b/src/battle_anim_ice.c @@ -1088,7 +1088,7 @@ void AnimTask_HazeScrollingFog(u8 taskId) GetBattleAnimBg1Data(&animBg); LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset); AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimFogTilemap, FALSE); - LoadPalette(&gFogPalette, animBg.paletteId * 16, 32); + LoadPalette(&gFogPalette, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); gTasks[taskId].func = AnimTask_HazeScrollingFog_Step; } @@ -1193,7 +1193,7 @@ void AnimTask_MistBallFog(u8 taskId) GetBattleAnimBg1Data(&animBg); LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset); AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimFogTilemap, FALSE); - LoadPalette(&gFogPalette, animBg.paletteId * 16, 32); + LoadPalette(&gFogPalette, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); gTasks[taskId].data[15] = -1; gTasks[taskId].func = AnimTask_MistBallFog_Step; @@ -1289,6 +1289,18 @@ static void InitPoisonGasCloudAnim(struct Sprite *sprite) sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + +#if B_UPDATED_MOVE_DATA >= GEN_5 + { + s16 x, y; + SetAverageBattlerPositions(gBattleAnimTarget, gBattleAnimArgs[7], &x, &y); + sprite->data[1] = sprite->x + gBattleAnimArgs[1]; + sprite->data[2] = x + gBattleAnimArgs[3]; + sprite->data[3] = sprite->y + gBattleAnimArgs[2]; + sprite->data[4] = y + gBattleAnimArgs[4]; + sprite->data[7] |= GetBattlerSpriteBGPriority(gBattleAnimTarget) << 8; + } +#else if (gBattleAnimArgs[7]) { sprite->data[1] = sprite->x + gBattleAnimArgs[1]; @@ -1305,6 +1317,7 @@ static void InitPoisonGasCloudAnim(struct Sprite *sprite) sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[4]; sprite->data[7] |= GetBattlerSpriteBGPriority(gBattleAnimTarget) << 8; } +#endif if (IsContest()) { @@ -1333,8 +1346,14 @@ static void MovePoisonGasCloud(struct Sprite *sprite) if (sprite->data[0] <= 0) { + #if B_UPDATED_MOVE_DATA >= GEN_5 + s16 x, y; + SetAverageBattlerPositions(gBattleAnimTarget, 0, &x, &y); + sprite->x = x; + #else + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + #endif sprite->data[0] = 80; - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); sprite->data[1] = sprite->x; sprite->data[2] = sprite->x; sprite->y += sprite->y2; diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c index aa8e4e2ac1ce..5f52d6cd675a 100644 --- a/src/battle_anim_mon_movement.c +++ b/src/battle_anim_mon_movement.c @@ -165,20 +165,20 @@ void AnimTask_ShakeMon2(u8 taskId) if (spriteId == SPRITE_NONE) abort = TRUE; } - else if (gBattleAnimArgs[0] != 8) + else if (gBattleAnimArgs[0] != ANIM_ATTACKER_FORCE) { switch (gBattleAnimArgs[0]) { - case 4: + case ANIM_PLAYER_LEFT: battlerId = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); break; - case 5: + case ANIM_PLAYER_RIGHT: battlerId = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); break; - case 6: + case ANIM_OPPONENT_LEFT: battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); break; - case 7: + case ANIM_OPPONENT_RIGHT: default: battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); break; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index 104c77885245..17b04cc2b81b 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -36,11 +36,7 @@ static void CreateBattlerTrace(struct Task *task, u8 taskId); EWRAM_DATA static union AffineAnimCmd *sAnimTaskAffineAnim = NULL; -#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 }, @@ -65,11 +61,7 @@ const struct MonCoords gCastformFrontSpriteCoords[NUM_CASTFORM_FORMS] = [CASTFORM_ICE] = { .size = MON_COORDS_SIZE(64, 48), .y_offset = 8 }, }; -#if P_ENABLE_DEBUG == TRUE const u8 sCastformElevations[NUM_CASTFORM_FORMS] = -#else -static const u8 sCastformElevations[NUM_CASTFORM_FORMS] = -#endif { [CASTFORM_NORMAL] = 13, [CASTFORM_FIRE] = 14, @@ -1088,7 +1080,7 @@ void UpdateAnimBg3ScreenSize(bool8 largeScreenSize) } } -void TradeMenuBouncePartySprites(struct Sprite *sprite) +void Trade_MoveSelectedMonToTarget(struct Sprite *sprite) { sprite->data[1] = sprite->x; sprite->data[3] = sprite->y; @@ -1771,7 +1763,7 @@ void AnimTask_BlendMonInAndOut(u8 task) DestroyAnimVisualTask(task); return; } - gTasks[task].data[0] = (gSprites[spriteId].oam.paletteNum * 0x10) + 0x101; + gTasks[task].data[0] = OBJ_PLTT_ID(gSprites[spriteId].oam.paletteNum) + 1; AnimTask_BlendPalInAndOutSetup(&gTasks[task]); } @@ -2149,7 +2141,7 @@ u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000); if (!isBackpic) { - LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), OBJ_PLTT_ID(palette), PLTT_SIZE_4BPP); LoadSpecialPokePic(gMonSpritesGfxPtr->buffer, species, personality, @@ -2157,7 +2149,7 @@ u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 } else { - LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), OBJ_PLTT_ID(palette), PLTT_SIZE_4BPP); LoadSpecialPokePic(gMonSpritesGfxPtr->buffer, species, personality, @@ -2442,8 +2434,8 @@ void AnimTask_AttackerPunchWithTrace(u8 taskId) task->tPaletteNum = AllocSpritePalette(ANIM_TAG_BENT_SPOON); task->tNumTracesActive = 0; - dest = (task->tPaletteNum + 16) * 16; - src = (gSprites[task->tBattlerSpriteId].oam.paletteNum + 0x10) * 0x10; + dest = OBJ_PLTT_ID2(task->tPaletteNum); + src = OBJ_PLTT_ID2(gSprites[task->tBattlerSpriteId].oam.paletteNum); // Set trace's priority based on battler's subpriority task->tPriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker); @@ -2452,7 +2444,7 @@ void AnimTask_AttackerPunchWithTrace(u8 taskId) else task->tPriority = 3; - CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20); + CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], PLTT_SIZE_4BPP); BlendPalette(dest, 16, gBattleAnimArgs[1], gBattleAnimArgs[0]); task->func = AnimTask_AttackerPunchWithTrace_Step; } diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index 0a65deb2829c..b3502fcb9e00 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -7857,7 +7857,7 @@ static void SpriteCB_TwinkleOnBattler(struct Sprite *sprite) void AnimTask_PrimalReversion(u8 taskId) { - if (gBattleMons[gBattleAnimAttacker].item == ITEM_RED_ORB) + if (gBattleMons[gBattleAnimAttacker].item == ITEM_RED_ORB || gBattleMons[gBattleAnimAttacker].item == ITEM_BLUE_ORB) gBattleAnimArgs[0] = gBattleMons[gBattleAnimAttacker].item; else gBattleAnimArgs[0] = 0; diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index b1ccc9a582e4..2257f9c04ad0 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -506,7 +506,7 @@ void AnimTask_LoadSandstormBackground(u8 taskId) GetBattleAnimBg1Data(&animBg); AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Sandstorm, animBg.tilesOffset); AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_Sandstorm, FALSE); - LoadCompressedPalette(gBattleAnimSpritePal_FlyingDirt, animBg.paletteId * 16, 32); + LoadCompressedPalette(gBattleAnimSpritePal_FlyingDirt, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); if (gBattleAnimArgs[0] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) var0 = 1; diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index fb2f9795657f..0111b4d6d33b 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -13,7 +13,6 @@ extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; -extern const u8 *const gBattleAnims_StatusConditions[]; extern const struct OamData gOamData_AffineOff_ObjNormal_8x8; extern const struct OamData gOamData_AffineOff_ObjBlend_64x64; @@ -316,7 +315,7 @@ static void Task_UpdateFlashingCircleImpacts(u8 taskId) if (gTasks[taskId].data[2] == 2) { gTasks[taskId].data[2] = 0; - BlendPalette(0x100 + gTasks[taskId].data[0] * 16, 16, gTasks[taskId].data[4], gTasks[taskId].data[1]); + BlendPalette(OBJ_PLTT_ID(gTasks[taskId].data[0]), 16, gTasks[taskId].data[4], gTasks[taskId].data[1]); if (gTasks[taskId].data[5] == 0) { gTasks[taskId].data[4]++; @@ -568,7 +567,7 @@ void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId) gBattleAnimAttacker = battlerId; gBattleAnimTarget = battlerId; - LaunchBattleAnimation(gBattleAnims_StatusConditions, statusAnimId, FALSE); + LaunchBattleAnimation(ANIM_TYPE_STATUS, statusAnimId); 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 e3e8f9ac1aca..a3197d4477a9 100755 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -689,7 +689,7 @@ void AnimTask_UnusedLevelUpHealthBox(u8 taskId) GetBattleAnimBg1Data(&animBgData); AnimLoadCompressedBgTilemap(animBgData.bgId, UnusedLevelupAnimationTilemap); AnimLoadCompressedBgGfx(animBgData.bgId, UnusedLevelupAnimationGfx, animBgData.tilesOffset); - LoadCompressedPalette(gCureBubblesPal, animBgData.paletteId << 4, 32); + LoadCompressedPalette(gCureBubblesPal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); gBattle_BG1_X = -gSprites[spriteId3].x + 32; gBattle_BG1_Y = -gSprites[spriteId3].y - 32; @@ -771,10 +771,10 @@ static void LoadHealthboxPalsForLevelUp(u8 *paletteId1, u8 *paletteId2, u8 battl *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; - LoadPalette(&gPlttBufferUnfaded[offset1], *paletteId1 * 16 + 0x100, 0x20); - LoadPalette(&gPlttBufferUnfaded[offset2], *paletteId2 * 16 + 0x100, 0x20); + offset1 = OBJ_PLTT_ID(gSprites[healthBoxSpriteId].oam.paletteNum); + offset2 = OBJ_PLTT_ID(gSprites[spriteId2].oam.paletteNum); + LoadPalette(&gPlttBufferUnfaded[offset1], OBJ_PLTT_ID(*paletteId1), PLTT_SIZE_4BPP); + LoadPalette(&gPlttBufferUnfaded[offset2], OBJ_PLTT_ID(*paletteId2), PLTT_SIZE_4BPP); gSprites[healthBoxSpriteId].oam.paletteNum = *paletteId1; gSprites[spriteId1].oam.paletteNum = *paletteId1; @@ -838,7 +838,7 @@ static void AnimTask_FlashHealthboxOnLevelUp_Step(u8 taskId) if (gTasks[taskId].data[2] > 16) gTasks[taskId].data[2] = 16; - paletteOffset = paletteNum * 16 + 0x100; + paletteOffset = OBJ_PLTT_ID(paletteNum); BlendPalette(paletteOffset + colorOffset, 1, gTasks[taskId].data[2], RGB(20, 27, 31)); if (gTasks[taskId].data[2] == 16) gTasks[taskId].data[1]++; @@ -848,7 +848,7 @@ static void AnimTask_FlashHealthboxOnLevelUp_Step(u8 taskId) if (gTasks[taskId].data[2] < 0) gTasks[taskId].data[2] = 0; - paletteOffset = paletteNum * 16 + 0x100; + paletteOffset = OBJ_PLTT_ID(paletteNum); BlendPalette(paletteOffset + colorOffset, 1, gTasks[taskId].data[2], RGB(20, 27, 31)); if (gTasks[taskId].data[2] == 0) DestroyAnimVisualTask(taskId); @@ -2295,12 +2295,12 @@ u8 LaunchBallFadeMonTask(bool8 unfadeLater, u8 spritePalNum, u32 selectedPalette if (!unfadeLater) { - BlendPalette(spritePalNum * 16 + 0x100, 16, 0, gBallOpenFadeColors[ballId]); + BlendPalette(OBJ_PLTT_ID(spritePalNum), 16, 0, gBallOpenFadeColors[ballId]); gTasks[taskId].tdCoeff = 1; } else { - BlendPalette(spritePalNum * 16 + 0x100, 16, 16, gBallOpenFadeColors[ballId]); + BlendPalette(OBJ_PLTT_ID(spritePalNum), 16, 16, gBallOpenFadeColors[ballId]); gTasks[taskId].tCoeff = 16; gTasks[taskId].tdCoeff = -1; gTasks[taskId].func = Task_FadeMon_ToNormal; @@ -2316,7 +2316,7 @@ static void Task_FadeMon_ToBallColor(u8 taskId) if (gTasks[taskId].tTimer <= 16) { - BlendPalette(gTasks[taskId].tPalOffset * 16 + 0x100, 16, gTasks[taskId].tCoeff, gBallOpenFadeColors[ballId]); + BlendPalette(OBJ_PLTT_ID(gTasks[taskId].tPalOffset), 16, gTasks[taskId].tCoeff, gBallOpenFadeColors[ballId]); gTasks[taskId].tCoeff += gTasks[taskId].tdCoeff; gTasks[taskId].tTimer++; } @@ -2344,7 +2344,7 @@ static void Task_FadeMon_ToNormal_Step(u8 taskId) if (gTasks[taskId].tTimer <= 16) { - BlendPalette(gTasks[taskId].tPalOffset * 16 + 0x100, 16, gTasks[taskId].tCoeff, gBallOpenFadeColors[ballId]); + BlendPalette(OBJ_PLTT_ID(gTasks[taskId].tPalOffset), 16, gTasks[taskId].tCoeff, gBallOpenFadeColors[ballId]); gTasks[taskId].tCoeff += gTasks[taskId].tdCoeff; gTasks[taskId].tTimer++; } diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 096912c3b6df..c569d54e864b 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -167,7 +167,7 @@ void StartBlendAnimSpriteColor(u8 taskId, u32 selectedPalettes) static void AnimTask_BlendSpriteColor_Step2(u8 taskId) { u32 selectedPalettes; - u16 singlePaletteMask = 0; + u16 singlePaletteOffset = 0; if (gTasks[taskId].data[9] == gTasks[taskId].data[2]) { @@ -176,8 +176,8 @@ static void AnimTask_BlendSpriteColor_Step2(u8 taskId) while (selectedPalettes != 0) { if (selectedPalettes & 1) - BlendPalette(singlePaletteMask, 16, gTasks[taskId].data[10], gTasks[taskId].data[5]); - singlePaletteMask += 0x10; + BlendPalette(singlePaletteOffset, 16, gTasks[taskId].data[10], gTasks[taskId].data[5]); + singlePaletteOffset += 16; selectedPalettes >>= 1; } @@ -334,7 +334,7 @@ void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId) GetBattleAnimBg1Data(&animBgData); AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleAnimMaskTilemap_Curse, FALSE); AnimLoadCompressedBgGfx(animBgData.bgId, gBattleAnimMaskImage_Curse, animBgData.tilesOffset); - LoadPalette(sCurseLinesPalette, animBgData.paletteId * 16 + 1, 2); + LoadPalette(sCurseLinesPalette, BG_PLTT_ID(animBgData.paletteId) + 1, PLTT_SIZEOF(1)); gBattle_BG1_X = -gSprites[spriteId].x + 32; gBattle_BG1_Y = -gSprites[spriteId].y + 32; @@ -479,28 +479,28 @@ static void StatsChangeAnimation_Step2(u8 taskId) switch (sAnimStatsChangeData->data[1]) { case 0: - LoadCompressedPalette(gBattleStatMask2_Pal, animBgData.paletteId * 16, 32); + LoadCompressedPalette(gBattleStatMask2_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; case 1: - LoadCompressedPalette(gBattleStatMask1_Pal, animBgData.paletteId * 16, 32); + LoadCompressedPalette(gBattleStatMask1_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; case 2: - LoadCompressedPalette(gBattleStatMask3_Pal, animBgData.paletteId * 16, 32); + LoadCompressedPalette(gBattleStatMask3_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; case 3: - LoadCompressedPalette(gBattleStatMask4_Pal, animBgData.paletteId * 16, 32); + LoadCompressedPalette(gBattleStatMask4_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; case 4: - LoadCompressedPalette(gBattleStatMask6_Pal, animBgData.paletteId * 16, 32); + LoadCompressedPalette(gBattleStatMask6_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; case 5: - LoadCompressedPalette(gBattleStatMask7_Pal, animBgData.paletteId * 16, 32); + LoadCompressedPalette(gBattleStatMask7_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; case 6: - LoadCompressedPalette(gBattleStatMask8_Pal, animBgData.paletteId * 16, 32); + LoadCompressedPalette(gBattleStatMask8_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; default: - LoadCompressedPalette(gBattleStatMask5_Pal, animBgData.paletteId * 16, 32); + LoadCompressedPalette(gBattleStatMask5_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; } @@ -640,16 +640,10 @@ static void AnimTask_Flash_Step(u8 taskId) for (i = 0; i < 16; i++) { if ((task->data[15] >> i) & 1) - { - u16 paletteOffset = i * 16; - BlendPalette(paletteOffset, 16, task->data[2], 0xFFFF); - } + BlendPalette(BG_PLTT_ID(i), 16, task->data[2], 0xFFFF); if ((task->data[14] >> i) & 1) - { - u16 paletteOffset = i * 16 + 0x100; - BlendPalette(paletteOffset, 16, task->data[2], 0); - } + BlendPalette(OBJ_PLTT_ID(i), 16, task->data[2], 0); } if (task->data[2] == 0) @@ -823,7 +817,7 @@ void StartMonScrollingBgMask(u8 taskId, int unused, u16 scrollSpeed, u8 battler, GetBattleAnimBg1Data(&animBgData); AnimLoadCompressedBgTilemapHandleContest(&animBgData, tilemap, FALSE); AnimLoadCompressedBgGfx(animBgData.bgId, gfx, animBgData.tilesOffset); - LoadCompressedPalette(palette, animBgData.paletteId * 16, 32); + LoadCompressedPalette(palette, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); gBattle_BG1_X = 0; gBattle_BG1_Y = 0; diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 48d1dc6d6a31..a82398ce2177 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -1009,15 +1009,15 @@ void AnimTask_CreateSurfWave(u8 taskId) case ANIM_SURF_PAL_SURF: default: if (B_NEW_SURF_PARTICLE_PALETTE == TRUE) - LoadCompressedPalette(gBattleAnimSpritePal_NewSurf, animBg.paletteId * 16, 32); + LoadCompressedPalette(gBattleAnimSpritePal_NewSurf, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); else - LoadCompressedPalette(gBattleAnimBgPalette_Surf, animBg.paletteId * 16, 32); + LoadCompressedPalette(gBattleAnimBgPalette_Surf, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); break; case ANIM_SURF_PAL_MUDDY_WATER: - LoadCompressedPalette(gBattleAnimBackgroundImageMuddyWater_Pal, animBg.paletteId * 16, 32); + LoadCompressedPalette(gBattleAnimBackgroundImageMuddyWater_Pal, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); break; case ANIM_SURF_PAL_SLUDGE_WAVE: - LoadCompressedPalette(gBattleAnimBgPalette_SludgeWave, animBg.paletteId * 16, 32); + LoadCompressedPalette(gBattleAnimBgPalette_SludgeWave, BG_PLTT_ID(animBg.paletteId), PLTT_SIZE_4BPP); break; } diff --git a/src/battle_arena.c b/src/battle_arena.c index 7fb8b6e5994c..de34b423f698 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -165,7 +165,7 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state) BeginNormalPaletteFade(0x7FFFFF1C, 4, 0, 8, RGB_BLACK); SetGpuReg(REG_OFFSET_WININ, (WININ_WIN0_ALL & ~WININ_WIN0_BG0) | WININ_WIN1_ALL); LoadCompressedSpriteSheet(sBattleArenaJudgmentSymbolsSpriteSheet); - LoadCompressedPalette(gBattleArenaJudgmentSymbolsPalette, 0x1F0, 0x20); + LoadCompressedPalette(gBattleArenaJudgmentSymbolsPalette, OBJ_PLTT_ID(15), PLTT_SIZE_4BPP); gBattle_WIN0H = 0xFF; gBattle_WIN0V = 0x70; (*state)++; diff --git a/src/battle_bg.c b/src/battle_bg.c index 5ea08c97cc69..e56884b55d27 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -26,17 +26,6 @@ #include "constants/trainers.h" #include "constants/battle_anim.h" -#if !P_ENABLE_DEBUG -struct BattleBackground -{ - const void *tileset; - const void *tilemap; - const void *entryTileset; - const void *entryTilemap; - const void *palette; -}; -#endif - // .rodata static const u16 sUnrefArray[] = {0x0300, 0x0000}; //OamData? @@ -602,11 +591,7 @@ const struct WindowTemplate * const gBattleWindowTemplates[] = [B_WIN_TYPE_ARENA] = sBattleArenaWindowTemplates, }; -#if P_ENABLE_DEBUG == TRUE const struct BattleBackground sBattleTerrainTable[] = -#else -static const struct BattleBackground sBattleTerrainTable[] = -#endif { [BATTLE_TERRAIN_GRASS] = { @@ -750,17 +735,17 @@ void InitBattleBgsVideo(void) void LoadBattleMenuWindowGfx(void) { - LoadUserWindowBorderGfx(2, 0x12, 0x10); - LoadUserWindowBorderGfx(2, 0x22, 0x10); - LoadCompressedPalette(gBattleWindowTextPalette, 0x50, 0x20); + LoadUserWindowBorderGfx(2, 0x12, BG_PLTT_ID(1)); + LoadUserWindowBorderGfx(2, 0x22, BG_PLTT_ID(1)); + LoadCompressedPalette(gBattleWindowTextPalette, BG_PLTT_ID(5), PLTT_SIZE_4BPP); if (gBattleTypeFlags & BATTLE_TYPE_ARENA) { // Load graphics for the Battle Arena referee's mid-battle messages. - Menu_LoadStdPalAt(0x70); - LoadMessageBoxGfx(0, 0x30, 0x70); - gPlttBufferUnfaded[0x76] = 0; - CpuCopy16(&gPlttBufferUnfaded[0x76], &gPlttBufferFaded[0x76], 2); + Menu_LoadStdPalAt(BG_PLTT_ID(7)); + LoadMessageBoxGfx(0, 0x30, BG_PLTT_ID(7)); + gPlttBufferUnfaded[BG_PLTT_ID(7) + 6] = 0; + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(7) + 6], &gPlttBufferFaded[BG_PLTT_ID(7) + 6], PLTT_SIZEOF(1)); } } @@ -770,25 +755,25 @@ void DrawMainBattleBackground(void) { LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); - LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); } else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON) { LZDecompressVram(gBattleTerrainTiles_Cave, (void *)(BG_CHAR_ADDR(2))); LZDecompressVram(gBattleTerrainTilemap_Cave, (void *)(BG_SCREEN_ADDR(26))); - LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_Groudon, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); } else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE) { LZDecompressVram(gBattleTerrainTiles_Water, (void *)(BG_CHAR_ADDR(2))); LZDecompressVram(gBattleTerrainTilemap_Water, (void *)(BG_SCREEN_ADDR(26))); - LoadCompressedPalette(gBattleTerrainPalette_Kyogre, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_Kyogre, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); } else if (gBattleTypeFlags & BATTLE_TYPE_RAYQUAZA) { LZDecompressVram(gBattleTerrainTiles_Rayquaza, (void *)(BG_CHAR_ADDR(2))); LZDecompressVram(gBattleTerrainTilemap_Rayquaza, (void *)(BG_SCREEN_ADDR(26))); - LoadCompressedPalette(gBattleTerrainPalette_Rayquaza, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_Rayquaza, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); } else { @@ -799,14 +784,14 @@ void DrawMainBattleBackground(void) { LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2))); LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); - LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); return; } else if (trainerClass == TRAINER_CLASS_CHAMPION) { LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - LoadCompressedPalette(gBattleTerrainPalette_StadiumWallace, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_StadiumWallace, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); return; } } @@ -817,47 +802,47 @@ void DrawMainBattleBackground(void) case MAP_BATTLE_SCENE_NORMAL: LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tileset, (void *)(BG_CHAR_ADDR(2))); LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tilemap, (void *)(BG_SCREEN_ADDR(26))); - LoadCompressedPalette(sBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60); + LoadCompressedPalette(sBattleTerrainTable[gBattleTerrain].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); 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); + LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); 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); + LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); 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); + LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); 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); + LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); 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); + LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); 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); + LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); 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); + LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); 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); + LoadCompressedPalette(gBattleTerrainPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; } } @@ -868,7 +853,7 @@ void LoadBattleTextboxAndBackground(void) LZDecompressVram(gBattleTextboxTiles, (void *)(BG_CHAR_ADDR(0))); CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0); CopyBgTilemapBufferToVram(0); - LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40); + LoadCompressedPalette(gBattleTextboxPalette, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); LoadBattleMenuWindowGfx(); #if B_TERRAIN_BG_CHANGE == TRUE DrawTerrainTypeBattleBackground(); @@ -1138,7 +1123,7 @@ void DrawBattleEntryBackground(void) { LZDecompressVram(gBattleVSFrame_Gfx, (void *)(BG_CHAR_ADDR(1))); LZDecompressVram(gVsLettersGfx, (void *)OBJ_VRAM0); - LoadCompressedPalette(gBattleVSFrame_Pal, 0x60, 0x20); + LoadCompressedPalette(gBattleVSFrame_Pal, BG_PLTT_ID(6), PLTT_SIZE_4BPP); SetBgAttribute(1, BG_ATTR_SCREENSIZE, 1); SetGpuReg(REG_OFFSET_BG1CNT, 0x5C04); CopyToBgTilemapBuffer(1, gBattleVSFrame_Tilemap, 0, 0); @@ -1231,7 +1216,7 @@ bool8 LoadChosenBattleElement(u8 caseId) CopyBgTilemapBufferToVram(0); break; case 2: - LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40); + LoadCompressedPalette(gBattleTextboxPalette, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); break; case 3: if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER)) @@ -1357,14 +1342,14 @@ bool8 LoadChosenBattleElement(u8 caseId) case 5: if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER)) { - LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); } else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) { if (gGameVersion == VERSION_RUBY) - LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_Groudon, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); else - LoadCompressedPalette(gBattleTerrainPalette_Kyogre, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_Kyogre, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); } else { @@ -1373,12 +1358,12 @@ bool8 LoadChosenBattleElement(u8 caseId) u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass; if (trainerClass == TRAINER_CLASS_LEADER) { - LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; } else if (trainerClass == TRAINER_CLASS_CHAMPION) { - LoadCompressedPalette(gBattleTerrainPalette_StadiumWallace, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_StadiumWallace, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; } } @@ -1387,31 +1372,31 @@ bool8 LoadChosenBattleElement(u8 caseId) { default: case MAP_BATTLE_SCENE_NORMAL: - LoadCompressedPalette(sBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60); + LoadCompressedPalette(sBattleTerrainTable[gBattleTerrain].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; case MAP_BATTLE_SCENE_GYM: - LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; case MAP_BATTLE_SCENE_MAGMA: - LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; case MAP_BATTLE_SCENE_AQUA: - LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; case MAP_BATTLE_SCENE_SIDNEY: - LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; case MAP_BATTLE_SCENE_PHOEBE: - LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; case MAP_BATTLE_SCENE_GLACIA: - LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; case MAP_BATTLE_SCENE_DRAKE: - LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; case MAP_BATTLE_SCENE_FRONTIER: - LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; } } diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index e95b13944f8d..908363907b3c 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -595,6 +595,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst) battleMon.spDefense = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF); battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); + battleMon.metLevel = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL); GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName); @@ -1148,7 +1149,9 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + species = GetIllusionMonSpecies(battlerId); + if (species == SPECIES_NONE) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index da1599a90653..1ef5d6355547 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -489,6 +489,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst) battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); + battleMon.metLevel = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); @@ -1552,7 +1553,7 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void) trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender; } - LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, 0x100 + paletteNum * 16, 32); + LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 3e168828d1f1..79283b0674e9 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -612,6 +612,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst) battleMon.spDefense = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF); battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); + battleMon.metLevel = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL); GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName); @@ -1164,7 +1165,7 @@ static void OpponentHandleLoadMonSprite(void) static void OpponentHandleSwitchInAnim(void) { - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6; + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1]; StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; @@ -1176,7 +1177,9 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + species = GetIllusionMonSpecies(battlerId); + if (species == SPECIES_NONE) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 4be34264022c..82a9d7b7a926 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -30,7 +30,6 @@ #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" @@ -330,7 +329,7 @@ static void HandleInputChooseAction(void) { SwapHpBarsWithHpText(); } -#if B_ENABLE_DEBUG == TRUE +#if DEBUG_BATTLE_MENU == TRUE else if (JOY_NEW(SELECT_BUTTON)) { BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_DEBUG, 0); @@ -883,6 +882,7 @@ static void HandleMoveSwitching(void) if (JOY_NEW(A_BUTTON | SELECT_BUTTON)) { + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); PlaySE(SE_SELECT); if (gMoveSelectionCursor[gActiveBattler] != gMultiUsePlayerCursor) @@ -974,6 +974,7 @@ static void HandleMoveSwitching(void) MoveSelectionDisplayPpString(); MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); + GetUsableZMoves(gActiveBattler, moveInfo->moves); } else if (JOY_NEW(B_BUTTON | SELECT_BUTTON)) { @@ -1385,7 +1386,7 @@ static void Task_GiveExpToMon(u8 taskId) u16 species = GetMonData(mon, MON_DATA_SPECIES); u8 level = GetMonData(mon, MON_DATA_LEVEL); u32 currExp = GetMonData(mon, MON_DATA_EXP); - u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + u32 nextLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1]; if (currExp + gainedExp >= nextLvlExp) { @@ -1428,11 +1429,11 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) u8 level = GetMonData(mon, MON_DATA_LEVEL); u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 exp = GetMonData(mon, MON_DATA_EXP); - u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level]; + u32 currLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level]; u32 expToNextLvl; exp -= currLvlExp; - expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; + expToNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - currLvlExp; SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); PlaySE(SE_EXP); gTasks[taskId].func = Task_GiveExpWithExpBar; @@ -1464,7 +1465,7 @@ static void Task_GiveExpWithExpBar(u8 taskId) level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + expOnNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1]; if (currExp + gainedExp >= expOnNextLvl) { @@ -1867,6 +1868,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst) battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); + battleMon.metLevel = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); @@ -2917,7 +2919,7 @@ static void PlayerHandleChoosePokemon(void) *(&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); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon; gBattlerInMenuId = gActiveBattler; } @@ -3196,7 +3198,7 @@ static void PlayerHandleIntroTrainerBallThrow(void) StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); paletteNum = AllocSpritePalette(0xD6F8); - LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32); + LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; taskId = CreateTask(Task_StartSendOutAnim, 5); diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index d39d745a6f1f..88bc4f974df4 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -325,7 +325,7 @@ static void Task_GiveExpToMon(u8 taskId) u16 species = GetMonData(mon, MON_DATA_SPECIES); u8 level = GetMonData(mon, MON_DATA_LEVEL); u32 currExp = GetMonData(mon, MON_DATA_EXP); - u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + u32 nextLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1]; if (currExp + gainedExp >= nextLvlExp) { @@ -368,11 +368,11 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) u8 level = GetMonData(mon, MON_DATA_LEVEL); u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 exp = GetMonData(mon, MON_DATA_EXP); - u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level]; + u32 currLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level]; u32 expToNextLvl; exp -= currLvlExp; - expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; + expToNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - currLvlExp; SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); PlaySE(SE_EXP); gTasks[taskId].func = Task_GiveExpWithExpBar; @@ -404,7 +404,7 @@ static void Task_GiveExpWithExpBar(u8 taskId) level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); - expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + expOnNextLvl = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1]; if (currExp + gainedExp >= expOnNextLvl) { @@ -675,6 +675,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst) battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); + battleMon.metLevel = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); @@ -1550,12 +1551,12 @@ static void PlayerPartnerHandleChoosePokemon(void) { s32 chosenMonId = GetMostSuitableMonToSwitchInto(); - if (chosenMonId == 6) // just switch to the next mon + if (chosenMonId == PARTY_SIZE) // just switch to the next mon { u8 playerMonIdentity = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); u8 selfIdentity = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); - for (chosenMonId = 3; chosenMonId < 6; chosenMonId++) + for (chosenMonId = PARTY_SIZE / 2; chosenMonId < PARTY_SIZE; chosenMonId++) { if (GetMonData(&gPlayerParty[chosenMonId], MON_DATA_HP) != 0 && chosenMonId != gBattlerPartyIndexes[playerMonIdentity] @@ -1804,7 +1805,7 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(void) if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER) { u8 spriteId = TRAINER_BACK_PIC_STEVEN; - LoadCompressedPalette(gTrainerBackPicPaletteTable[spriteId].data, 0x100 + paletteNum * 16, 32); + LoadCompressedPalette(gTrainerBackPicPaletteTable[spriteId].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); } else if (gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER) { @@ -1814,7 +1815,7 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(void) else { u8 spriteId = GetFrontierTrainerFrontSpriteId(gPartnerTrainerId); - LoadCompressedPalette(gTrainerFrontPicPaletteTable[spriteId].data, 0x100 + paletteNum * 16, 32); + LoadCompressedPalette(gTrainerFrontPicPaletteTable[spriteId].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 9f3631a3754d..2e93d625d7e4 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -22,6 +22,7 @@ #include "sound.h" #include "string_util.h" #include "task.h" +#include "test_runner.h" #include "text.h" #include "util.h" #include "window.h" @@ -581,6 +582,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst) battleMon.spDefense = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF); battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); + battleMon.metLevel = GetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL); GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gEnemyParty[monId], MON_DATA_OT_NAME, battleMon.otName); @@ -1385,6 +1387,17 @@ static void RecordedOpponentHandlePrintString(void) gBattle_BG0_Y = 0; stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); BufferStringBattle(*stringId); + + if (gTestRunnerEnabled) + { + TestRunner_Battle_RecordMessage(gDisplayedStringBattle); + if (gTestRunnerHeadless) + { + RecordedOpponentBufferExecCompleted(); + return; + } + } + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; } @@ -1396,7 +1409,7 @@ static void RecordedOpponentHandlePrintSelectionString(void) static void RecordedOpponentHandleChooseAction(void) { - BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(gActiveBattler), 0); + BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, gActiveBattler), 0); RecordedOpponentBufferExecCompleted(); } @@ -1413,8 +1426,8 @@ static void RecordedOpponentHandleChooseMove(void) } else { - u8 moveId = RecordedBattle_GetBattlerAction(gActiveBattler); - u8 target = RecordedBattle_GetBattlerAction(gActiveBattler); + u8 moveId = RecordedBattle_GetBattlerAction(RECORDED_MOVE_SLOT, gActiveBattler); + u8 target = RecordedBattle_GetBattlerAction(RECORDED_MOVE_TARGET, gActiveBattler); BtlController_EmitTwoReturnValues(BUFFER_B, 10, moveId | (target << 8)); } @@ -1428,7 +1441,7 @@ static void RecordedOpponentHandleChooseItem(void) static void RecordedOpponentHandleChoosePokemon(void) { - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = RecordedBattle_GetBattlerAction(gActiveBattler); + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, gActiveBattler); BtlController_EmitChosenMonReturnValue(BUFFER_B, *(gBattleStruct->monToSwitchIntoId + gActiveBattler), NULL); RecordedOpponentBufferExecCompleted(); } @@ -1441,22 +1454,23 @@ static void RecordedOpponentHandleCmd23(void) static void RecordedOpponentHandleHealthBarUpdate(void) { s16 hpVal; + s32 maxHP, curHP; LoadBattleBarGfx(0); hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); + maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); + curHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); + if (hpVal != INSTANT_HP_BAR_DROP) { - u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - u32 curHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); + TestRunner_Battle_RecordHP(gActiveBattler, curHP, min(maxHP, max(0, curHP - hpVal))); } else { - u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); + TestRunner_Battle_RecordHP(gActiveBattler, curHP, 0); } gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; @@ -1477,6 +1491,9 @@ static void RecordedOpponentHandleStatusIconUpdate(void) battlerId = gActiveBattler; gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; + + if (gTestRunnerEnabled) + TestRunner_Battle_RecordStatus1(battlerId, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS)); } } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index ecc8e09de49f..1906df8a8a4f 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -19,6 +19,7 @@ #include "sound.h" #include "string_util.h" #include "task.h" +#include "test_runner.h" #include "text.h" #include "util.h" #include "window.h" @@ -562,6 +563,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst) battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); + battleMon.metLevel = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); @@ -1393,6 +1395,17 @@ static void RecordedPlayerHandlePrintString(void) gBattle_BG0_Y = 0; stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]); BufferStringBattle(*stringId); + + if (gTestRunnerEnabled) + { + TestRunner_Battle_RecordMessage(gDisplayedStringBattle); + if (gTestRunnerHeadless) + { + RecordedPlayerBufferExecCompleted(); + return; + } + } + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; } @@ -1406,7 +1419,7 @@ static void ChooseActionInBattlePalace(void) { if (gBattleCommunication[4] >= gBattlersCount / 2) { - BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(gActiveBattler), 0); + BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(RECORDED_BATTLE_PALACE_ACTION, gActiveBattler), 0); RecordedPlayerBufferExecCompleted(); } } @@ -1419,7 +1432,7 @@ static void RecordedPlayerHandleChooseAction(void) } else { - BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(gActiveBattler), 0); + BtlController_EmitTwoReturnValues(BUFFER_B, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, gActiveBattler), 0); RecordedPlayerBufferExecCompleted(); } } @@ -1437,8 +1450,8 @@ static void RecordedPlayerHandleChooseMove(void) } else { - u8 moveId = RecordedBattle_GetBattlerAction(gActiveBattler); - u8 target = RecordedBattle_GetBattlerAction(gActiveBattler); + u8 moveId = RecordedBattle_GetBattlerAction(RECORDED_MOVE_SLOT, gActiveBattler); + u8 target = RecordedBattle_GetBattlerAction(RECORDED_MOVE_TARGET, gActiveBattler); BtlController_EmitTwoReturnValues(BUFFER_B, 10, moveId | (target << 8)); } @@ -1452,7 +1465,7 @@ static void RecordedPlayerHandleChooseItem(void) static void RecordedPlayerHandleChoosePokemon(void) { - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = RecordedBattle_GetBattlerAction(gActiveBattler); + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, gActiveBattler); BtlController_EmitChosenMonReturnValue(BUFFER_B, *(gBattleStruct->monToSwitchIntoId + gActiveBattler), NULL); RecordedPlayerBufferExecCompleted(); } @@ -1465,23 +1478,24 @@ static void RecordedPlayerHandleCmd23(void) static void RecordedPlayerHandleHealthBarUpdate(void) { s16 hpVal; + s32 maxHP, curHP; LoadBattleBarGfx(0); hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8); + maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); + curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); + if (hpVal != INSTANT_HP_BAR_DROP) { - u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); + TestRunner_Battle_RecordHP(gActiveBattler, curHP, min(maxHP, max(0, curHP - hpVal))); } else { - u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], HP_CURRENT, 0, maxHP); + TestRunner_Battle_RecordHP(gActiveBattler, curHP, 0); } gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; @@ -1502,6 +1516,9 @@ static void RecordedPlayerHandleStatusIconUpdate(void) battlerId = gActiveBattler; gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; + + if (gTestRunnerEnabled) + TestRunner_Battle_RecordStatus1(battlerId, GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS)); } } @@ -1670,7 +1687,7 @@ static void RecordedPlayerHandleIntroTrainerBallThrow(void) else trainerPicId = gSaveBlock2Ptr->playerGender; - LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, 0x100 + paletteNum * 16, 32); + LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 4f4f2eb6f2d6..ae20c54ecf81 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -491,6 +491,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst) battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); + battleMon.metLevel = GetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(battleMon.nickname, nickname); GetMonData(&gPlayerParty[monId], MON_DATA_OT_NAME, battleMon.otName); @@ -1438,7 +1439,7 @@ static void WallyHandleIntroTrainerBallThrow(void) StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); paletteNum = AllocSpritePalette(0xD6F8); - LoadCompressedPalette(gTrainerBackPicPaletteTable[TRAINER_BACK_PIC_WALLY].data, 0x100 + paletteNum * 16, 32); + LoadCompressedPalette(gTrainerBackPicPaletteTable[TRAINER_BACK_PIC_WALLY].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; taskId = CreateTask(Task_StartSendOutAnim, 5); diff --git a/src/battle_debug.c b/src/battle_debug.c index 568b9a96e6e8..027be03a452a 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -1107,7 +1107,7 @@ static void Task_DebugMenuProcessInput(u8 taskId) struct BattleDebugMenu *data = GetStructPtr(taskId); // Exit the menu. - if (JOY_NEW(SELECT_BUTTON)) + if (JOY_NEW(SELECT_BUTTON) || ((JOY_NEW(B_BUTTON)) && data->activeWindow == ACTIVE_WIN_MAIN)) { BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); gTasks[taskId].func = Task_DebugMenuFadeOut; @@ -1759,7 +1759,7 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data) { case LIST_ITEM_ABILITY: data->modifyArrows.minValue = 0; - data->modifyArrows.maxValue = ABILITIES_COUNT_GEN8 - 1; + data->modifyArrows.maxValue = ABILITIES_COUNT - 1; data->modifyArrows.maxDigits = 3; data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].ability; data->modifyArrows.typeOfVal = VAL_U16; @@ -1767,7 +1767,7 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data) break; case LIST_ITEM_MOVES: data->modifyArrows.minValue = 0; - data->modifyArrows.maxValue = MOVES_COUNT_GEN8 - 1; + data->modifyArrows.maxValue = MOVES_COUNT - 1; data->modifyArrows.maxDigits = 3; if (data->currentSecondaryListItemId == 4) { diff --git a/src/battle_dome.c b/src/battle_dome.c index 84b7652a54de..deae7e64f5c0 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -73,9 +73,33 @@ struct TourneyTreeLineSection #define tMode data[2] #define tPrevTaskId data[3] -#define EFFECTIVENESS_MODE_GOOD 0 -#define EFFECTIVENESS_MODE_BAD 1 -#define EFFECTIVENESS_MODE_AI_VS_AI 2 +enum { + EFFECTIVENESS_MODE_GOOD, + EFFECTIVENESS_MODE_BAD, + EFFECTIVENESS_MODE_AI_VS_AI, +}; + +// Window IDs for the tourney tree +enum { + TOURNEYWIN_NAMES_LEFT, + TOURNEYWIN_NAMES_RIGHT, + TOURNEYWIN_TITLE, +}; + +// Window IDs for the trainer (WIN_TRAINER_*) and match (WIN_MATCH_*) info cards. +// All 9 have a duplicate window at WIN + NUM_INFO_CARD_WINDOWS used by the alternate info card +enum { + WIN_TRAINER_NAME, + WIN_TRAINER_MON1_NAME, + WIN_TRAINER_MON2_NAME, // Used implicitly + WIN_TRAINER_MON3_NAME, // Used implicitly + WIN_TRAINER_FLAVOR_TEXT = WIN_TRAINER_MON1_NAME + FRONTIER_PARTY_SIZE, // Trainer's potential, battle style, and stat texts + WIN_MATCH_NUMBER, + WIN_MATCH_TRAINER_NAME_LEFT, + WIN_MATCH_TRAINER_NAME_RIGHT, + WIN_MATCH_WIN_TEXT, + NUM_INFO_CARD_WINDOWS +}; static u8 GetDomeTrainerMonIvs(u16); static void SwapDomeTrainers(int, int, u16 *); @@ -670,7 +694,7 @@ static const struct BgTemplate sInfoCardBgTemplates[4] = static const struct WindowTemplate sTourneyTreeWindowTemplates[] = { - { + [TOURNEYWIN_NAMES_LEFT] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 3, @@ -679,7 +703,7 @@ static const struct WindowTemplate sTourneyTreeWindowTemplates[] = .paletteNum = 15, .baseBlock = 16, }, - { + [TOURNEYWIN_NAMES_RIGHT] = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 3, @@ -688,7 +712,7 @@ static const struct WindowTemplate sTourneyTreeWindowTemplates[] = .paletteNum = 15, .baseBlock = 144, }, - { + [TOURNEYWIN_TITLE] = { .bg = 0, .tilemapLeft = 8, .tilemapTop = 1, @@ -702,7 +726,7 @@ static const struct WindowTemplate sTourneyTreeWindowTemplates[] = static const struct WindowTemplate sInfoCardWindowTemplates[] = { - { + [WIN_TRAINER_NAME] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 2, @@ -711,7 +735,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 1, }, - { + [WIN_TRAINER_MON1_NAME] = { .bg = 0, .tilemapLeft = 16, .tilemapTop = 5, @@ -720,7 +744,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 53, }, - { + [WIN_TRAINER_MON2_NAME] = { .bg = 0, .tilemapLeft = 19, .tilemapTop = 7, @@ -729,7 +753,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 69, }, - { + [WIN_TRAINER_MON3_NAME] = { .bg = 0, .tilemapLeft = 16, .tilemapTop = 10, @@ -738,7 +762,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 96, }, - { + [WIN_TRAINER_FLAVOR_TEXT] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 12, @@ -747,7 +771,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 112, }, - { + [WIN_MATCH_NUMBER] = { .bg = 0, .tilemapLeft = 5, .tilemapTop = 2, @@ -756,7 +780,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 294, }, - { + [WIN_MATCH_TRAINER_NAME_LEFT] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 5, @@ -765,7 +789,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 340, }, - { + [WIN_MATCH_TRAINER_NAME_RIGHT] = { .bg = 0, .tilemapLeft = 20, .tilemapTop = 5, @@ -774,7 +798,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 356, }, - { + [WIN_MATCH_WIN_TEXT] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 16, @@ -783,7 +807,9 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 372, }, - { + // Duplicate windows used by the alternate info card + // Same as above but on bg 1 instead of bg 0 + [WIN_TRAINER_NAME + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 2, @@ -792,7 +818,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 1, }, - { + [WIN_TRAINER_MON1_NAME + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 16, .tilemapTop = 5, @@ -801,7 +827,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 53, }, - { + [WIN_TRAINER_MON2_NAME + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 19, .tilemapTop = 7, @@ -810,7 +836,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 69, }, - { + [WIN_TRAINER_MON3_NAME + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 16, .tilemapTop = 10, @@ -819,7 +845,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 96, }, - { + [WIN_TRAINER_FLAVOR_TEXT + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 12, @@ -828,7 +854,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 112, }, - { + [WIN_MATCH_NUMBER + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 5, .tilemapTop = 2, @@ -837,7 +863,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 294, }, - { + [WIN_MATCH_TRAINER_NAME_LEFT + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 5, @@ -846,7 +872,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 340, }, - { + [WIN_MATCH_TRAINER_NAME_RIGHT + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 20, .tilemapTop = 5, @@ -855,7 +881,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 356, }, - { + [WIN_MATCH_WIN_TEXT + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 16, @@ -1397,26 +1423,27 @@ static const u8 sCompetitorRangeByMatch[DOME_TOURNAMENT_MATCHES_COUNT][3] = { NUM_POSSIBLE_MATCH_TRAINERS(DOME_FINAL) * 0, NUM_POSSIBLE_MATCH_TRAINERS(DOME_FINAL), DOME_FINAL}, }; -// 1st value is the windowId (0 for left column, 1 for right column) -// 2nd value is the y coord +#define NAME_ROW_HEIGHT 16 + +// 1st value is the windowId, 2nd value is the y coord static const u8 sTrainerNamePositions[DOME_TOURNAMENT_TRAINERS_COUNT][2] = { - { 0, 0}, - { 1, 112}, - { 1, 0}, - { 0, 112}, - { 0, 48}, - { 1, 64}, - { 1, 48}, - { 0, 64}, - { 0, 16}, - { 1, 96}, - { 1, 16}, - { 0, 96}, - { 0, 32}, - { 1, 80}, - { 1, 32}, - { 0, 80}, + { TOURNEYWIN_NAMES_LEFT, 0 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 7 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 0 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 7 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 3 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 4 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 3 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 4 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 1 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 6 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 1 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 6 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 2 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 5 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 2 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 5 * NAME_ROW_HEIGHT}, }; // Coords for the pokeballs on the tourney tree that act as buttons to view trainer/match info @@ -2348,8 +2375,8 @@ static void InitDomeTrainers(void) rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPDEF, NULL); rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPEED, NULL); rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_MAX_HP, NULL); - monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type1]; - monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type2]; + monTypesBits |= gBitTable[gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].types[0]]; + monTypesBits |= gBitTable[gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].types[1]]; } // Count the number of types in the players party, to factor into the ranking @@ -2383,8 +2410,8 @@ static void InitDomeTrainers(void) rankingScores[i] += statValues[STAT_SPDEF]; rankingScores[i] += statValues[STAT_SPEED]; rankingScores[i] += statValues[STAT_HP]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[DOME_MONS[i][j]].species].type1]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[DOME_MONS[i][j]].species].type2]; + monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[0]]; + monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[1]]; } for (monTypesCount = 0, j = 0; j < 32; j++) @@ -2427,7 +2454,7 @@ static void InitDomeTrainers(void) break; } - if (sTrainerNamePositions[i][0] != 0) + if (sTrainerNamePositions[i][0] != TOURNEYWIN_NAMES_LEFT) { j = 0; DOME_TRAINERS[j].trainerId = TRAINER_FRONTIER_BRAIN; @@ -2448,7 +2475,7 @@ static void InitDomeTrainers(void) #define CALC_STAT(base, statIndex) \ { \ - u8 baseStat = gBaseStats[species].base; \ + u8 baseStat = gSpeciesInfo[species].base; \ stats[statIndex] = (((2 * baseStat + ivs + evs[statIndex] / 4) * level) / 100) + 5; \ stats[statIndex] = (u8) ModifyStatByNature(nature, stats[statIndex], statIndex); \ } @@ -2481,7 +2508,7 @@ static void CalcDomeMonStats(u16 species, int level, int ivs, u8 evBits, u8 natu } else { - int n = 2 * gBaseStats[species].baseHP; + int n = 2 * gSpeciesInfo[species].baseHP; stats[STAT_HP] = (((n + ivs + evs[STAT_HP] / 4) * level) / 100) + level + 10; } @@ -2750,9 +2777,9 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int mode) if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || IS_MOVE_STATUS(move)) return 0; - defType1 = gBaseStats[targetSpecies].type1; - defType2 = gBaseStats[targetSpecies].type2; - defAbility = gBaseStats[targetSpecies].abilities[0]; + defType1 = gSpeciesInfo[targetSpecies].types[0]; + defType2 = gSpeciesInfo[targetSpecies].types[1]; + defAbility = gSpeciesInfo[targetSpecies].abilities[0]; moveType = gBattleMoves[move].type; if (defAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND) @@ -3031,12 +3058,12 @@ static void Task_ShowTourneyInfoCard(u8 taskId) DecompressAndLoadBgGfxUsingHeap(2, gDomeTourneyInfoCard_Tilemap, 0x2000, 0, 1); DecompressAndLoadBgGfxUsingHeap(3, gDomeTourneyInfoCardBg_Tilemap, 0x800, 0, 1); LoadCompressedSpriteSheet(sTourneyTreeButtonsSpriteSheet); - LoadCompressedPalette(gDomeTourneyTree_Pal, 0, 0x200); - LoadCompressedPalette(gDomeTourneyTreeButtons_Pal, 0x100, 0x200); - LoadCompressedPalette(gBattleWindowTextPalette, 0xF0, 0x20); + LoadCompressedPalette(gDomeTourneyTree_Pal, BG_PLTT_OFFSET, BG_PLTT_SIZE); + LoadCompressedPalette(gDomeTourneyTreeButtons_Pal, OBJ_PLTT_OFFSET, OBJ_PLTT_SIZE); + LoadCompressedPalette(gBattleWindowTextPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); if (mode == INFOCARD_MATCH) - LoadCompressedPalette(gDomeTourneyMatchCardBg_Pal, 0x50, 0x20); // Changes the moving info card bg to orange when in match card mode - CpuFill32(0, gPlttBufferFaded, 0x400); + LoadCompressedPalette(gDomeTourneyMatchCardBg_Pal, BG_PLTT_ID(5), PLTT_SIZE_4BPP); // Changes the moving info card bg to orange when in match card mode + CpuFill32(0, gPlttBufferFaded, PLTT_SIZE); ShowBg(0); ShowBg(1); ShowBg(2); @@ -3420,11 +3447,11 @@ static void Task_HandleInfoCardInput(u8 taskId) case MATCHCARD_INPUT_UP ... MATCHCARD_INPUT_RIGHT: gTasks[taskId].data[5] = i; if (gTasks[taskId].tUsingAlternateSlot) - windowId = 9; + windowId = NUM_INFO_CARD_WINDOWS; else windowId = 0; - for (i = windowId; i < windowId + 9; i++) + for (i = windowId; i < windowId + NUM_INFO_CARD_WINDOWS; i++) { CopyWindowToVram(i, COPYWIN_GFX); FillWindowPixelBuffer(i, PIXEL_FILL(0)); @@ -4237,7 +4264,7 @@ static u8 Task_GetInfoCardInput(u8 taskId) #undef tUsingAlternateSlot // allocatedArray below needs to be large enough to hold stat totals for each mon, or totals of each type of move points -#define ALLOC_ARRAY_SIZE (NUM_STATS * FRONTIER_PARTY_SIZE >= NUM_MOVE_POINT_TYPES ? (NUM_STATS * FRONTIER_PARTY_SIZE) : NUM_MOVE_POINT_TYPES) +#define ALLOC_ARRAY_SIZE max(NUM_STATS * FRONTIER_PARTY_SIZE, NUM_MOVE_POINT_TYPES) static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) { @@ -4246,14 +4273,14 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) int trainerId = 0; u8 nature = 0; int arrId = 0; - int windowId = 0; + int windowId = WIN_TRAINER_NAME; int x = 0, y = 0; u8 palSlot = 0; s16 *allocatedArray = AllocZeroed(sizeof(s16) * ALLOC_ARRAY_SIZE); trainerId = DOME_TRAINERS[trainerTourneyId].trainerId; if (flags & CARD_ALTERNATE_SLOT) - arrId = 2 * (FRONTIER_PARTY_SIZE + 1), windowId = 9, palSlot = 2; + arrId = 2 * (FRONTIER_PARTY_SIZE + 1), windowId = WIN_TRAINER_NAME + NUM_INFO_CARD_WINDOWS, palSlot = 2; if (flags & MOVE_CARD_RIGHT) x = DISPLAY_WIDTH + 16; if (flags & MOVE_CARD_DOWN) @@ -4371,19 +4398,19 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) else textPrinter.currentChar = gSpeciesNames[gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].species]; - textPrinter.windowId = 1 + i + windowId; + textPrinter.windowId = WIN_TRAINER_MON1_NAME + i + windowId; if (i == 1) textPrinter.currentX = 7; else textPrinter.currentX = 0; - PutWindowTilemap(1 + i + windowId); - CopyWindowToVram(1 + i + windowId, COPYWIN_FULL); + PutWindowTilemap(WIN_TRAINER_MON1_NAME + i + windowId); + CopyWindowToVram(WIN_TRAINER_MON1_NAME + i + windowId, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); } - PutWindowTilemap(windowId + 4); - CopyWindowToVram(windowId + 4, COPYWIN_FULL); + PutWindowTilemap(windowId + WIN_TRAINER_FLAVOR_TEXT); + CopyWindowToVram(windowId + WIN_TRAINER_FLAVOR_TEXT, COPYWIN_FULL); // Print text about trainers potential in the tourney if (trainerId == TRAINER_FRONTIER_BRAIN) @@ -4392,7 +4419,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) textPrinter.currentChar = sBattleDomePotentialTexts[trainerTourneyId]; textPrinter.fontId = FONT_NORMAL; - textPrinter.windowId = windowId + 4; + textPrinter.windowId = windowId + WIN_TRAINER_FLAVOR_TEXT; textPrinter.currentX = 0; textPrinter.y = 4; textPrinter.currentY = 4; @@ -4713,7 +4740,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) u8 palSlot = 0; if (flags & CARD_ALTERNATE_SLOT) - arrId = 2 * (FRONTIER_PARTY_SIZE + 1), windowId = 9, palSlot = 2; + arrId = 2 * (FRONTIER_PARTY_SIZE + 1), windowId = NUM_INFO_CARD_WINDOWS, palSlot = 2; if (flags & MOVE_CARD_RIGHT) x = DISPLAY_WIDTH + 16; if (flags & MOVE_CARD_DOWN) @@ -4855,10 +4882,10 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; StringExpandPlaceholders(gStringVar4, sBattleDomeWinTexts[winStringId]); textPrinter.currentChar = gStringVar4; - textPrinter.windowId = windowId + 8; + textPrinter.windowId = windowId + WIN_MATCH_WIN_TEXT; textPrinter.fontId = FONT_NORMAL; - PutWindowTilemap(windowId + 8); - CopyWindowToVram(windowId + 8, COPYWIN_FULL); + PutWindowTilemap(windowId + WIN_MATCH_WIN_TEXT); + CopyWindowToVram(windowId + WIN_MATCH_WIN_TEXT, COPYWIN_FULL); textPrinter.currentX = 0; textPrinter.currentY = textPrinter.y = 0; AddTextPrinter(&textPrinter, 0, NULL); @@ -4874,11 +4901,11 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) textPrinter.fontId = FONT_SHORT; textPrinter.letterSpacing = 2; textPrinter.currentChar = gStringVar1; - textPrinter.windowId = windowId + 6; + textPrinter.windowId = windowId + WIN_MATCH_TRAINER_NAME_LEFT; textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0x40, textPrinter.letterSpacing); textPrinter.currentY = textPrinter.y = 2; - PutWindowTilemap(windowId + 6); - CopyWindowToVram(windowId + 6, COPYWIN_FULL); + PutWindowTilemap(windowId + WIN_MATCH_TRAINER_NAME_LEFT); + CopyWindowToVram(windowId + WIN_MATCH_TRAINER_NAME_LEFT, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); // Print right trainer's name. @@ -4890,21 +4917,21 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) CopyDomeTrainerName(gStringVar1, trainerIds[1]); textPrinter.currentChar = gStringVar1; - textPrinter.windowId = windowId + 7; + textPrinter.windowId = windowId + WIN_MATCH_TRAINER_NAME_RIGHT; textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0x40, textPrinter.letterSpacing); textPrinter.currentY = textPrinter.y = 2; - PutWindowTilemap(windowId + 7); - CopyWindowToVram(windowId + 7, COPYWIN_FULL); + PutWindowTilemap(windowId + WIN_MATCH_TRAINER_NAME_RIGHT); + CopyWindowToVram(windowId + WIN_MATCH_TRAINER_NAME_RIGHT, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); // Print match number. textPrinter.letterSpacing = 0; textPrinter.currentChar = sBattleDomeMatchNumberTexts[matchNo]; - textPrinter.windowId = windowId + 5; + textPrinter.windowId = windowId + WIN_MATCH_NUMBER; textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0xA0, textPrinter.letterSpacing); textPrinter.currentY = textPrinter.y = 2; - PutWindowTilemap(windowId + 5); - CopyWindowToVram(windowId + 5, COPYWIN_FULL); + PutWindowTilemap(windowId + WIN_MATCH_NUMBER); + CopyWindowToVram(windowId + WIN_MATCH_NUMBER, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); } @@ -5188,9 +5215,9 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun targetSpecies = gFacilityTrainerMons[DOME_MONS[loserTournamentId][k]].species; if (personality & 1) - targetAbility = gBaseStats[targetSpecies].abilities[1]; + targetAbility = gSpeciesInfo[targetSpecies].abilities[1]; else - targetAbility = gBaseStats[targetSpecies].abilities[0]; + targetAbility = gSpeciesInfo[targetSpecies].abilities[0]; typeMultiplier = CalcPartyMonTypeEffectivenessMultiplier(moveIds[i * 4 + j], targetSpecies, targetAbility); if (typeMultiplier == UQ_4_12(0)) @@ -5309,10 +5336,10 @@ static void Task_ShowTourneyTree(u8 taskId) DecompressAndLoadBgGfxUsingHeap(2, gDomeTourneyLine_Gfx, 0x2000, 0, 0); DecompressAndLoadBgGfxUsingHeap(2, gDomeTourneyLineDown_Tilemap, 0x2000, 0, 1); DecompressAndLoadBgGfxUsingHeap(3, gDomeTourneyLineUp_Tilemap, 0x2000, 0, 1); - LoadCompressedPalette(gDomeTourneyTree_Pal, 0, 0x200); - LoadCompressedPalette(gDomeTourneyTreeButtons_Pal, 0x100, 0x200); - LoadCompressedPalette(gBattleWindowTextPalette, 0xF0, 0x20); - CpuFill32(0, gPlttBufferFaded, 0x400); + LoadCompressedPalette(gDomeTourneyTree_Pal, BG_PLTT_OFFSET, BG_PLTT_SIZE); + LoadCompressedPalette(gDomeTourneyTreeButtons_Pal, OBJ_PLTT_OFFSET, OBJ_PLTT_SIZE); + LoadCompressedPalette(gBattleWindowTextPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); + CpuFill32(0, gPlttBufferFaded, PLTT_SIZE); ShowBg(0); ShowBg(1); ShowBg(2); @@ -5338,7 +5365,7 @@ static void Task_ShowTourneyTree(u8 taskId) case 4: textPrinter.fontId = FONT_SHORT; textPrinter.currentChar = gText_BattleTourney; - textPrinter.windowId = 2; + textPrinter.windowId = TOURNEYWIN_TITLE; textPrinter.x = 0; textPrinter.y = 0; textPrinter.letterSpacing = 2; @@ -5424,7 +5451,7 @@ static void Task_ShowTourneyTree(u8 taskId) } } - if (sTrainerNamePositions[i][0] == 0) + if (sTrainerNamePositions[i][0] == TOURNEYWIN_NAMES_LEFT) textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); else textPrinter.currentX = 3; @@ -5436,12 +5463,12 @@ static void Task_ShowTourneyTree(u8 taskId) gTasks[taskId].tState++; break; case 5: - PutWindowTilemap(0); - PutWindowTilemap(1); - PutWindowTilemap(2); - CopyWindowToVram(0, COPYWIN_FULL); - CopyWindowToVram(1, COPYWIN_FULL); - CopyWindowToVram(2, COPYWIN_FULL); + PutWindowTilemap(TOURNEYWIN_NAMES_LEFT); + PutWindowTilemap(TOURNEYWIN_NAMES_RIGHT); + PutWindowTilemap(TOURNEYWIN_TITLE); + CopyWindowToVram(TOURNEYWIN_NAMES_LEFT, COPYWIN_FULL); + CopyWindowToVram(TOURNEYWIN_NAMES_RIGHT, COPYWIN_FULL); + CopyWindowToVram(TOURNEYWIN_TITLE, COPYWIN_FULL); SetHBlankCallback(HblankCb_TourneyTree); SetVBlankCallback(VblankCb_TourneyTree); if (r4 == 2) @@ -5538,7 +5565,7 @@ static void Task_HandleStaticTourneyTreeInput(u8 taskId) if (DOME_TRAINERS[i].eliminatedAt == gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1 && DOME_TRAINERS[i].isEliminated) { - if (sTrainerNamePositions[i][0] == 0) + if (sTrainerNamePositions[i][0] == TOURNEYWIN_NAMES_LEFT) textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); else textPrinter.currentX = 3; @@ -5865,8 +5892,8 @@ static void InitRandomTourneyTreeResults(void) statSums[i] += statValues[STAT_SPDEF]; statSums[i] += statValues[STAT_SPEED]; statSums[i] += statValues[STAT_HP]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[DOME_MONS[i][j]].species].type1]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[DOME_MONS[i][j]].species].type2]; + monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[0]]; + monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[1]]; } // Because GF hates temporary vars, trainerId acts like monTypesCount here. @@ -5992,12 +6019,12 @@ static void DecideRoundWinners(u8 roundId) } } species = gFacilityTrainerMons[DOME_MONS[tournamentId1][monId1]].species; - points1 += ( gBaseStats[species].baseHP - + gBaseStats[species].baseAttack - + gBaseStats[species].baseDefense - + gBaseStats[species].baseSpeed - + gBaseStats[species].baseSpAttack - + gBaseStats[species].baseSpDefense) / 10; + points1 += ( gSpeciesInfo[species].baseHP + + gSpeciesInfo[species].baseAttack + + gSpeciesInfo[species].baseDefense + + gSpeciesInfo[species].baseSpeed + + gSpeciesInfo[species].baseSpAttack + + gSpeciesInfo[species].baseSpDefense) / 10; } // Random part of the formula. points1 += (Random() & 0x1F); @@ -6015,12 +6042,12 @@ static void DecideRoundWinners(u8 roundId) } } species = gFacilityTrainerMons[DOME_MONS[tournamentId2][monId1]].species; - points2 += ( gBaseStats[species].baseHP - + gBaseStats[species].baseAttack - + gBaseStats[species].baseDefense - + gBaseStats[species].baseSpeed - + gBaseStats[species].baseSpAttack - + gBaseStats[species].baseSpDefense) / 10; + points2 += ( gSpeciesInfo[species].baseHP + + gSpeciesInfo[species].baseAttack + + gSpeciesInfo[species].baseDefense + + gSpeciesInfo[species].baseSpeed + + gSpeciesInfo[species].baseSpAttack + + gSpeciesInfo[species].baseSpDefense) / 10; } // Random part of the formula. points2 += (Random() & 0x1F); diff --git a/src/battle_factory.c b/src/battle_factory.c index 12e477e32377..667b6c606a15 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -618,9 +618,9 @@ static void GetOpponentMostCommonMonType(void) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { u32 species = gFacilityTrainerMons[gFrontierTempParty[i]].species; - typeCounts[gBaseStats[species].type1]++; - if (gBaseStats[species].type1 != gBaseStats[species].type2) - typeCounts[gBaseStats[species].type2]++; + typeCounts[gSpeciesInfo[species].types[0]]++; + if (gSpeciesInfo[species].types[0] != gSpeciesInfo[species].types[1]) + typeCounts[gSpeciesInfo[species].types[1]]++; } // Determine which are the two most-common types. diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 6f9a2efb3a2f..15f74831c694 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -1175,16 +1175,16 @@ static void CB2_InitSelectScreen(void) LoadBgTiles(3, sSelectMonPicBgTilesetBuffer, 0x60, 0); CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSelectMenuTilemapBuffer, BG_SCREEN_SIZE); LoadBgTilemap(1, sSelectMenuTilemapBuffer, BG_SCREEN_SIZE, 0); - LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); - LoadPalette(sSelectText_Pal, 0xF0, 8); - LoadPalette(sSelectText_Pal, 0xE0, 10); + LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 2 * PLTT_SIZE_4BPP); + LoadPalette(sSelectText_Pal, BG_PLTT_ID(15), PLTT_SIZEOF(4)); + LoadPalette(sSelectText_Pal, BG_PLTT_ID(14), PLTT_SIZEOF(5)); #ifdef UBFIX if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) #endif gPlttBufferUnfaded[228] = sFactorySelectScreen->speciesNameColorBackup; - LoadPalette(sMonPicBg_Pal, 0x20, 4); + LoadPalette(sMonPicBg_Pal, BG_PLTT_ID(2), PLTT_SIZEOF(2)); gMain.state++; break; case 3: @@ -2748,7 +2748,7 @@ static void Swap_Task_FadeOutSpeciesName(u8 taskId) gTasks[taskId].tState++; break; case 1: - LoadPalette(&gPlttBufferUnfaded[0xF0], 0xE0, 0xA); + LoadPalette(&gPlttBufferUnfaded[BG_PLTT_ID(15)], BG_PLTT_ID(14), PLTT_SIZEOF(5)); gTasks[taskId].tState++; break; case 2: @@ -2994,7 +2994,7 @@ static void Swap_Task_ScreenInfoTransitionOut(u8 taskId) switch (gTasks[taskId].tState) { case 0: - LoadPalette(sSwapText_Pal, 0xE0, sizeof(sSwapText_Pal)); + LoadPalette(sSwapText_Pal, BG_PLTT_ID(14), sizeof(sSwapText_Pal)); Swap_PrintActionStrings(); PutWindowTilemap(SWAP_WIN_ACTION_FADE); gTasks[taskId].tState++; @@ -3309,10 +3309,10 @@ static void CB2_InitSwapScreen(void) LoadBgTiles(3, sSwapMonPicBgTilesetBuffer, 0x60, 0); CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSwapMenuTilemapBuffer, BG_SCREEN_SIZE); LoadBgTilemap(1, sSwapMenuTilemapBuffer, BG_SCREEN_SIZE, 0); - LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); - LoadPalette(sSwapText_Pal, 0xF0, sizeof(sSwapText_Pal)); - LoadPalette(sSwapText_Pal, 0xE0, sizeof(sSwapText_Pal)); - LoadPalette(sMonPicBg_Pal, 0x20, 4); + LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 2 * PLTT_SIZE_4BPP); + LoadPalette(sSwapText_Pal, BG_PLTT_ID(15), sizeof(sSwapText_Pal)); + LoadPalette(sSwapText_Pal, BG_PLTT_ID(14), sizeof(sSwapText_Pal)); + LoadPalette(sMonPicBg_Pal, BG_PLTT_ID(2), PLTT_SIZEOF(2)); gMain.state++; break; case 3: @@ -3867,7 +3867,7 @@ static void Swap_PrintMonSpeciesAtFade(void) pal[4] = gPlttBufferFaded[228]; else pal[4] = sFactorySwapScreen->speciesNameColorBackup; - LoadPalette(pal, 0xF0, sizeof(sSwapText_Pal)); + LoadPalette(pal, BG_PLTT_ID(15), sizeof(sSwapText_Pal)); PutWindowTilemap(SWAP_WIN_SPECIES_AT_FADE); FillWindowPixelBuffer(SWAP_WIN_SPECIES_AT_FADE, PIXEL_FILL(0)); @@ -3895,8 +3895,8 @@ static void Swap_PrintMonSpeciesForTransition(void) u16 species; u8 x; - LoadPalette(sSwapText_Pal, 0xE0, sizeof(sSwapText_Pal)); - CpuCopy16(&gPlttBufferUnfaded[240], &gPlttBufferFaded[224], 10); + LoadPalette(sSwapText_Pal, BG_PLTT_ID(14), sizeof(sSwapText_Pal)); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(15)], &gPlttBufferFaded[BG_PLTT_ID(14)], PLTT_SIZEOF(5)); if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 1b78ec11c16d..389832fb20e2 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -23,13 +23,10 @@ #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 const u8 gBattlePalaceNatureToMoveTarget[]; -extern const u8 *const gBattleAnims_General[]; -extern const u8 *const gBattleAnims_Special[]; extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow; extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow; @@ -78,11 +75,7 @@ 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} @@ -470,7 +463,7 @@ bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 de gBattleAnimAttacker = atkBattler; gBattleAnimTarget = defBattler; gBattleSpritesDataPtr->animationData->animArg = argument; - LaunchBattleAnimation(gBattleAnims_General, tableId, FALSE); + LaunchBattleAnimation(ANIM_TYPE_GENERAL, tableId); taskId = CreateTask(Task_ClearBitWhenBattleTableAnimDone, 10); gTasks[taskId].tBattlerId = activeBattler; gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].animFromTableActive = 1; @@ -514,7 +507,7 @@ void InitAndLaunchSpecialAnimation(u8 activeBattler, u8 atkBattler, u8 defBattle gBattleAnimAttacker = atkBattler; gBattleAnimTarget = defBattler; - LaunchBattleAnimation(gBattleAnims_Special, tableId, FALSE); + LaunchBattleAnimation(ANIM_TYPE_SPECIAL, tableId); taskId = CreateTask(Task_ClearBitWhenSpecialAnimDone, 10); gTasks[taskId].tBattlerId = activeBattler; gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].specialAnimActive = 1; @@ -564,6 +557,9 @@ static void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId, bool32 op if (illusionMon != NULL) mon = illusionMon; + if (GetMonData(mon, MON_DATA_IS_EGG)) // Don't load GFX of egg pokemon. + return; + monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY); if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE) { @@ -591,7 +587,7 @@ static void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId, bool32 op species, currentPersonality); } - paletteOffset = 0x100 + battlerId * 16; + paletteOffset = OBJ_PLTT_ID(battlerId); if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE) lzPaletteData = GetMonFrontSpritePal(mon); @@ -599,21 +595,21 @@ static void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId, bool32 op lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality); LZDecompressWram(lzPaletteData, gDecompressionBuffer); - LoadPalette(gDecompressionBuffer, paletteOffset, 0x20); - LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20); + LoadPalette(gDecompressionBuffer, paletteOffset, PLTT_SIZE_4BPP); + LoadPalette(gDecompressionBuffer, BG_PLTT_ID(8) + BG_PLTT_ID(battlerId), PLTT_SIZE_4BPP); if (species == SPECIES_CASTFORM || species == SPECIES_CHERRIM) { - paletteOffset = 0x100 + battlerId * 16; + paletteOffset = OBJ_PLTT_ID(battlerId); LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette); - LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20); + LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, PLTT_SIZE_4BPP); } // transform's pink color if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); } } @@ -647,7 +643,7 @@ void DecompressTrainerBackPic(u16 backPicId, u8 battlerId) gMonSpritesGfxPtr->sprites.ptr[position], SPECIES_NONE); LoadCompressedPalette(gTrainerBackPicPaletteTable[backPicId].data, - 0x100 + 16 * battlerId, 0x20); + OBJ_PLTT_ID(battlerId), PLTT_SIZE_4BPP); } void BattleGfxSfxDummy3(u8 gender) @@ -854,7 +850,7 @@ void CopyBattleSpriteInvisibility(u8 battlerId) gBattleSpritesDataPtr->battlerData[battlerId].invisible = gSprites[gBattlerSpriteIds[battlerId]].invisible; } -void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform, bool32 megaEvo) +void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform, bool32 megaEvo, bool8 trackEnemyPersonality) { u32 personalityValue, otId, position, paletteOffset, targetSpecies; const void *lzPaletteData, *src; @@ -883,7 +879,10 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform, bo if (GetBattlerSide(battlerAtk) == B_SIDE_PLAYER) { - personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); + if (trackEnemyPersonality) + personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); + else + personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); HandleLoadSpecialPokePic(FALSE, @@ -893,7 +892,10 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform, bo } else { - personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); + if (trackEnemyPersonality) + personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); + else + personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); HandleLoadSpecialPokePic(TRUE, @@ -906,15 +908,15 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform, bo if (castform) { StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleSpritesDataPtr->animationData->animArg); - paletteOffset = 0x100 + battlerAtk * 16; + paletteOffset = OBJ_PLTT_ID(battlerAtk); lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue); LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette); - LoadPalette(gBattleStruct->castformPalette[gBattleSpritesDataPtr->animationData->animArg], paletteOffset, 32); + LoadPalette(gBattleStruct->castformPalette[gBattleSpritesDataPtr->animationData->animArg], paletteOffset, PLTT_SIZE_4BPP); gBattleMonForms[battlerAtk] = gBattleSpritesDataPtr->animationData->animArg; if (gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies != SPECIES_NONE) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); } gSprites[gBattlerSpriteIds[battlerAtk]].y = GetBattlerSpriteDefault_Y(battlerAtk); } @@ -923,22 +925,22 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform, bo src = gMonSpritesGfxPtr->sprites.ptr[position]; dst = (void *)(OBJ_VRAM0 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32); DmaCopy32(3, src, dst, MON_PIC_SIZE); - paletteOffset = 0x100 + battlerAtk * 16; + paletteOffset = OBJ_PLTT_ID(battlerAtk); lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue); LZDecompressWram(lzPaletteData, gDecompressionBuffer); - LoadPalette(gDecompressionBuffer, paletteOffset, 32); + LoadPalette(gDecompressionBuffer, paletteOffset, PLTT_SIZE_4BPP); if (targetSpecies == SPECIES_CASTFORM || targetSpecies == SPECIES_CHERRIM) { gSprites[gBattlerSpriteIds[battlerAtk]].anims = gMonFrontAnimsPtrTable[targetSpecies]; LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette); - LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerDef]], paletteOffset, 32); + LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerDef]], paletteOffset, PLTT_SIZE_4BPP); } if (!megaEvo) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); } if (!IsContest() && !megaEvo) @@ -975,8 +977,8 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite) Dma3CopyLarge32_(gMonSpritesGfxPtr->sprites.ptr[position], &gMonSpritesGfxPtr->sprites.byte[position][MON_PIC_SIZE * i], MON_PIC_SIZE); } - palOffset = (battlerId * 16) + 0x100; - LoadCompressedPalette(gSubstituteDollPal, palOffset, 32); + palOffset = OBJ_PLTT_ID(battlerId); + LoadCompressedPalette(gSubstituteDollPal, palOffset, PLTT_SIZE_4BPP); } else { diff --git a/src/battle_interface.c b/src/battle_interface.c index 3039c65b6791..9c0db8b07481 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -28,10 +28,10 @@ #include "item.h" #include "item_icon.h" #include "item_use.h" +#include "test_runner.h" #include "constants/battle_anim.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/battle_config.h" #include "constants/items.h" enum @@ -2250,11 +2250,11 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) return; } - pltAdder = gSprites[healthboxSpriteId].oam.paletteNum * 16; + pltAdder = PLTT_ID(gSprites[healthboxSpriteId].oam.paletteNum); pltAdder += battlerId + 12; - FillPalette(sStatusIconColors[statusPalId], pltAdder + 0x100, 2); - CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void *)(OBJ_PLTT + pltAdder * 2), 2); + FillPalette(sStatusIconColors[statusPalId], OBJ_PLTT_OFFSET + pltAdder, PLTT_SIZEOF(1)); + CpuCopy16(gPlttBufferUnfaded + OBJ_PLTT_OFFSET + pltAdder, (u16 *)OBJ_PLTT + pltAdder, PLTT_SIZEOF(1)); CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96); if (WhichBattleCoords(battlerId) == 1 || GetBattlerSide(battlerId) == B_SIDE_OPPONENT) { @@ -2394,9 +2394,9 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem species = GetMonData(mon, MON_DATA_SPECIES); level = GetMonData(mon, MON_DATA_LEVEL); exp = GetMonData(mon, MON_DATA_EXP); - currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level]; + currLevelExp = gExperienceTables[gSpeciesInfo[species].growthRate][level]; currExpBarValue = exp - currLevelExp; - maxExpBarValue = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp; + maxExpBarValue = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1] - currLevelExp; SetBattleBarStruct(battlerId, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles); MoveBattleBar(battlerId, healthboxSpriteId, EXP_BAR, 0); } @@ -2802,66 +2802,25 @@ static const struct SpritePalette sSpritePalette_AbilityPopUp = 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, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), .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 = +static const struct SpriteTemplate sSpriteTemplate_AbilityPopUp = { .tileTag = ABILITY_POP_UP_TAG, .paletteTag = ABILITY_POP_UP_TAG, .oam = &sOamData_AbilityPopUp, - .anims = sSpriteAnimTable_AbilityPopUp2, + .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCb_AbilityPopUp }; -#define ABILITY_POP_UP_POS_X_DIFF 64 +#define ABILITY_POP_UP_POS_X_DIFF (64 - 7) // Hide second sprite underneath to gain proper letter spacing #define ABILITY_POP_UP_POS_X_SLIDE 68 static const s16 sAbilityPopUpCoordsDoubles[MAX_BATTLERS_COUNT][2] = @@ -2878,24 +2837,27 @@ static const s16 sAbilityPopUpCoordsSingles[MAX_BATTLERS_COUNT][2] = {186, 57}, // opponent }; +#define POPUP_WINDOW_WIDTH 8 +#define MAX_POPUP_STRING_WIDTH (POPUP_WINDOW_WIDTH * 8) + 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.width = POPUP_WINDOW_WIDTH; winTemplate.height = 2; *windowId = AddWindow(&winTemplate); FillWindowPixelBuffer(*windowId, PIXEL_FILL(color1)); - AddTextPrinterParameterized4(*windowId, 0, x, y, 0, 0, color, -1, str); + AddTextPrinterParameterized4(*windowId, FONT_SMALL, x, y, 0, 0, color, TEXT_SKIP_DRAW, str); return (u8 *)(GetWindowAttribute(*windowId, WINDOW_TILE_DATA)); } -static void TextIntoAbilityPopUp(void *dest, u8 *windowTileData, s32 arg2, bool32 arg3) +static void TextIntoAbilityPopUp(void *dest, u8 *windowTileData, s32 xTileAmount, bool32 arg3) { - CpuCopy32(windowTileData + 256, dest + 256, arg2 * 32); - if (arg2 > 0) + CpuCopy32(windowTileData + 256, dest + 256, xTileAmount * 32); + if (xTileAmount > 0) { do { @@ -2904,52 +2866,26 @@ static void TextIntoAbilityPopUp(void *dest, u8 *windowTileData, s32 arg2, bool3 else CpuCopy32(windowTileData + 20, dest + 20, 12); dest += 32, windowTileData += 32; - arg2--; - } while (arg2 != 0); + xTileAmount--; + } while (xTileAmount != 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) +static void PrintOnAbilityPopUp(const u8 *str, u8 *spriteTileData1, u8 *spriteTileData2, u32 x1, u32 x2, u32 y, u32 color1, u32 color2, u32 color3) { - u32 windowId, i; + u32 windowId; u8 *windowTileData; - u8 text1[MAX_CHARS_PRINTED]; - u8 text2[MAX_CHARS_PRINTED]; + u16 width; - 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); + windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(str, 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; + width = GetStringWidth(FONT_SMALL, str, 0); - windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(text2, x2, y, color1, color2, color3, &windowId); + if (width > MAX_POPUP_STRING_WIDTH - 5) + { + windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(str, x2 - MAX_POPUP_STRING_WIDTH, y, color1, color2, color3, &windowId); TextIntoAbilityPopUp(spriteTileData2, windowTileData, 3, (y == 0)); RemoveWindow(windowId); } @@ -2961,48 +2897,51 @@ 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, + 5, 12, 4, - 7, 9, 1, - FALSE); + 7, 9, 1); } static void PrintBattlerOnAbilityPopUp(u8 battlerId, u8 spriteId1, u8 spriteId2) { int i; u8 lastChar; - u8* name; + u8* textPtr; u8 monName[POKEMON_NAME_LENGTH + 3] = {0}; - u8* nick = gBattleMons[battlerId].nickname; + u8* nick = gBattleMons[battlerId].nickname; // This needs to be updated for Illusion support for (i = 0; i < POKEMON_NAME_LENGTH; ++i) { monName[i] = nick[i]; - if (nick[i] == EOS || i + 1 == POKEMON_NAME_LENGTH) + + if (nick[i] == EOS || i + 1 == POKEMON_NAME_LENGTH) // End of string break; } - name = monName + i + 1; - if (*(name - 1) == EOS) - name--; + textPtr = monName + i + 1; + + if (*(textPtr - 1) == EOS) + textPtr--; + + lastChar = *(textPtr - 1); - lastChar = *(name - 1); - name[0] = CHAR_SGL_QUOTE_RIGHT; // apostraphe - name++; + // Make the string say "[NAME]'s" instead of "[NAME]" + textPtr[0] = CHAR_SGL_QUOTE_RIGHT; // apostraphe + textPtr++; if (lastChar != CHAR_S && lastChar != CHAR_s) { - name[0] = CHAR_s; - name++; + textPtr[0] = CHAR_s; + textPtr++; } - name[0] = EOS; + textPtr[0] = EOS; + PrintOnAbilityPopUp((const u8 *)monName, (void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32), (void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32), - 7, 0, + 5, 12, 0, - 2, 7, 1, - FALSE); + 2, 7, 1); } static void PrintAbilityOnAbilityPopUp(u32 ability, u8 spriteId1, u8 spriteId2) @@ -3010,10 +2949,9 @@ 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, + 5, 12, 4, - 7, 9, 1, - TRUE); + 7, 9, 1); } #define PIXEL_COORDS_TO_OFFSET(x, y)( \ @@ -3077,15 +3015,12 @@ static const u16 sOverwrittenPixelsTable[][2] = {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) @@ -3138,6 +3073,13 @@ void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle) const s16 (*coords)[2]; u8 spriteId1, spriteId2, battlerPosition, taskId; + if (gTestRunnerEnabled) + { + TestRunner_Battle_RecordAbilityPopUp(battlerId, ability); + if (gTestRunnerHeadless) + return; + } + if (gBattleScripting.abilityPopupOverwrite != 0) ability = gBattleScripting.abilityPopupOverwrite; @@ -3156,35 +3098,33 @@ void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle) if ((battlerPosition & BIT_SIDE) == B_SIDE_PLAYER) { - spriteId1 = CreateSprite(&sSpriteTemplate_AbilityPopUp1, + spriteId1 = CreateSprite(&sSpriteTemplate_AbilityPopUp, coords[battlerPosition][0] - ABILITY_POP_UP_POS_X_SLIDE, coords[battlerPosition][1], 0); - spriteId2 = CreateSprite(&sSpriteTemplate_AbilityPopUp2, + spriteId2 = CreateSprite(&sSpriteTemplate_AbilityPopUp, 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; + coords[battlerPosition][1], 1); //Appears below gSprites[spriteId1].tRightToLeft = TRUE; gSprites[spriteId2].tRightToLeft = TRUE; } else { - spriteId1 = CreateSprite(&sSpriteTemplate_AbilityPopUp1, + spriteId1 = CreateSprite(&sSpriteTemplate_AbilityPopUp, coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_SLIDE, coords[battlerPosition][1], 0); - spriteId2 = CreateSprite(&sSpriteTemplate_AbilityPopUp2, + spriteId2 = CreateSprite(&sSpriteTemplate_AbilityPopUp, 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; + coords[battlerPosition][1], 1); //Appears below gSprites[spriteId1].tRightToLeft = FALSE; gSprites[spriteId2].tRightToLeft = FALSE; } + gSprites[spriteId1].tOriginalX = coords[battlerPosition][0]; + gSprites[spriteId2].tOriginalX = coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_DIFF; + gSprites[spriteId2].oam.tileNum += (8 * 4); //Second half of pop up + gBattleStruct->abilityPopUpSpriteIds[battlerId][0] = spriteId1; gBattleStruct->abilityPopUpSpriteIds[battlerId][1] = spriteId2; @@ -3255,9 +3195,12 @@ static void SpriteCb_AbilityPopUp(struct Sprite *sprite) void DestroyAbilityPopUp(u8 battlerId) { - gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][0]].tFrames = 0; - gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][1]].tFrames = 0; - gBattleScripting.fixedPopup = FALSE; + if (gBattleStruct->activeAbilityPopUps & gBitTable[battlerId]) + { + gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][0]].tFrames = 0; + gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][1]].tFrames = 0; + gBattleScripting.fixedPopup = FALSE; + } } static void Task_FreeAbilityPopUpGfx(u8 taskId) diff --git a/src/battle_main.c b/src/battle_main.c index 9790810a1bad..b23d8af5538c 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -45,6 +45,7 @@ #include "string_util.h" #include "strings.h" #include "task.h" +#include "test_runner.h" #include "text.h" #include "trig.h" #include "tv.h" @@ -52,7 +53,6 @@ #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" @@ -102,7 +102,7 @@ static void SetActionsAndBattlersTurnOrder(void); static void UpdateBattlerPartyOrdersOnSwitch(void); static bool8 AllAtActionConfirmed(void); static void TryChangeTurnOrder(void); -static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); +static void CheckChosenMoveForEffectsBeforeTurnStarts(void); static void CheckMegaEvolutionBeforeTurn(void); static void CheckQuickClaw_CustapBerryActivation(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void); @@ -194,8 +194,8 @@ EWRAM_DATA u16 gMoveResultFlags = 0; EWRAM_DATA u32 gHitMarker = 0; EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gUnusedFirstBattleVar2 = 0; // Never read -EWRAM_DATA u32 gSideStatuses[2] = {0}; -EWRAM_DATA struct SideTimer gSideTimers[2] = {0}; +EWRAM_DATA u32 gSideStatuses[NUM_BATTLE_SIDES] = {0}; +EWRAM_DATA struct SideTimer gSideTimers[NUM_BATTLE_SIDES] = {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}; @@ -475,7 +475,8 @@ const u8 *const gStatusConditionStringsTable[][2] = void CB2_InitBattle(void) { - MoveSaveBlocks_ResetHeap(); + if (!gTestRunnerEnabled) + MoveSaveBlocks_ResetHeap(); AllocateBattleResources(); AllocateBattleSpritesData(); AllocateMonSpritesGfx(); @@ -1806,6 +1807,8 @@ void CB2_QuitRecordedBattle(void) { m4aMPlayStop(&gMPlayInfo_SE1); m4aMPlayStop(&gMPlayInfo_SE2); + if (gTestRunnerEnabled) + TestRunner_Battle_AfterLastTurn(); FreeRestoreBattleData(); FreeAllWindowBuffers(); SetMainCallback2(gMain.savedCallback); @@ -2138,7 +2141,7 @@ void CB2_InitEndLinkBattle(void) gBattle_BG3_Y = 0; InitBattleBgsVideo(); - LoadCompressedPalette(gBattleTextboxPalette, 0, 64); + LoadCompressedPalette(gBattleTextboxPalette, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); LoadBattleMenuWindowGfx(); ResetSpriteData(); ResetTasks(); @@ -3021,7 +3024,7 @@ 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 = gSpeciesInfo[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; gBattleStruct->safariEscapeFactor = 3; gBattleStruct->wildVictorySong = 0; gBattleStruct->moneyMultiplier = 1; @@ -3040,13 +3043,16 @@ static void BattleStartClearSetData(void) gBattleStruct->stickyWebUser = 0xFF; gBattleStruct->appearedInBattle = 0; + gBattleStruct->beatUpSlot = 0; for (i = 0; i < PARTY_SIZE; i++) { - gBattleStruct->usedHeldItems[i][0] = 0; - gBattleStruct->usedHeldItems[i][1] = 0; + gBattleStruct->usedHeldItems[i][B_SIDE_PLAYER] = 0; + gBattleStruct->usedHeldItems[i][B_SIDE_OPPONENT] = 0; gBattleStruct->itemStolen[i].originalItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); gPartyCriticalHits[i] = 0; + gBattleStruct->allowedToChangeFormInWeather[i][B_SIDE_PLAYER] = FALSE; + gBattleStruct->allowedToChangeFormInWeather[i][B_SIDE_OPPONENT] = FALSE; } gBattleStruct->swapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky @@ -3118,7 +3124,6 @@ void SwitchInClearSetData(void) gDisableStructs[gActiveBattler].substituteHP = disableStructCopy.substituteHP; gDisableStructs[gActiveBattler].battlerWithSureHit = disableStructCopy.battlerWithSureHit; gDisableStructs[gActiveBattler].perishSongTimer = disableStructCopy.perishSongTimer; - gDisableStructs[gActiveBattler].perishSongTimerStartValue = disableStructCopy.perishSongTimerStartValue; gDisableStructs[gActiveBattler].battlerPreventingEscape = disableStructCopy.battlerPreventingEscape; } @@ -3198,6 +3203,7 @@ void FaintClearSetData(void) gProtectStructs[gActiveBattler].banefulBunkered = FALSE; gProtectStructs[gActiveBattler].quash = FALSE; gProtectStructs[gActiveBattler].obstructed = FALSE; + gProtectStructs[gActiveBattler].silkTrapped = FALSE; gProtectStructs[gActiveBattler].endured = FALSE; gProtectStructs[gActiveBattler].noValidMoves = FALSE; gProtectStructs[gActiveBattler].helpingHand = FALSE; @@ -3255,8 +3261,8 @@ void FaintClearSetData(void) gBattleResources->flags->flags[gActiveBattler] = 0; - gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; - gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; + gBattleMons[gActiveBattler].type1 = gSpeciesInfo[gBattleMons[gActiveBattler].species].types[0]; + gBattleMons[gActiveBattler].type2 = gSpeciesInfo[gBattleMons[gActiveBattler].species].types[1]; gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY; Ai_UpdateFaintData(gActiveBattler); @@ -3358,8 +3364,8 @@ static void DoBattleIntro(void) 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].type1 = gSpeciesInfo[gBattleMons[gActiveBattler].species].types[0]; + gBattleMons[gActiveBattler].type2 = gSpeciesInfo[gBattleMons[gActiveBattler].species].types[1]; gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY; gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum); gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)] = gBattleMons[gActiveBattler].hp; @@ -3649,7 +3655,7 @@ static void TryDoEventsBeforeFirstTurn(void) { for (i = 0; i < gBattlersCount; i++) { - if (gBattleMons[i].hp == 0 || gBattleMons[i].species == SPECIES_NONE) + if (gBattleMons[i].hp == 0 || gBattleMons[i].species == SPECIES_NONE || GetMonData(GetBattlerPartyData(i), MON_DATA_IS_EGG)) gAbsentBattlerFlags |= gBitTable[i]; } } @@ -3721,8 +3727,6 @@ static void TryDoEventsBeforeFirstTurn(void) if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerAttacker, 0, 0, 0) != 0) return; } - if (AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE1, 0, 0, 0, 0) != 0) - return; if (AbilityBattleEffects(ABILITYEFFECT_TRACE1, 0, 0, 0, 0) != 0) return; // Check all switch in items having effect from the fastest mon to slowest. @@ -4004,7 +4008,8 @@ static void HandleTurnActionSelectionState(void) } else if (WILD_DOUBLE_BATTLE && position == B_POSITION_PLAYER_RIGHT - && (gBattleStruct->throwingPokeBall || gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)] == B_ACTION_RUN)) + && (gBattleStruct->throwingPokeBall || gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)] == B_ACTION_RUN) + && gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)] != B_ACTION_NOTHING_FAINTED) { gBattleStruct->throwingPokeBall = FALSE; gChosenActionByBattler[gActiveBattler] = B_ACTION_NOTHING_FAINTED; // Not fainted, but it cannot move, because of the throwing ball. @@ -4418,10 +4423,13 @@ static void HandleTurnActionSelectionState(void) { RecordedBattle_CheckMovesetChanges(B_RECORD_MODE_RECORDING); - if (WILD_DOUBLE_BATTLE && gBattleStruct->throwingPokeBall) { + if (WILD_DOUBLE_BATTLE + && gBattleStruct->throwingPokeBall + && gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)] != B_ACTION_NOTHING_FAINTED) + { // 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; + gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)] = B_ACTION_NOTHING_FAINTED; } gBattleMainFunc = SetActionsAndBattlersTurnOrder; @@ -4483,6 +4491,7 @@ u32 GetBattlerTotalSpeedStat(u8 battlerId) u32 speed = gBattleMons[battlerId].speed; u32 ability = GetBattlerAbility(battlerId); u32 holdEffect = GetBattlerHoldEffect(battlerId, TRUE); + u32 highestStat = GetHighestStatId(battlerId); // weather abilities if (WEATHER_HAS_EFFECT) @@ -4504,6 +4513,10 @@ u32 GetBattlerTotalSpeedStat(u8 battlerId) speed *= 2; else if (ability == ABILITY_SLOW_START && gDisableStructs[battlerId].slowStartTimer != 0) speed /= 2; + else if (ability == ABILITY_PROTOSYNTHESIS && gBattleWeather & B_WEATHER_SUN && highestStat == STAT_SPEED) + speed = (speed * 150) / 100; + else if (ability == ABILITY_QUARK_DRIVE && gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && highestStat == STAT_SPEED) + speed = (speed * 150) / 100; // stat stages speed *= gStatStageRatios[gBattleMons[battlerId].statStages[STAT_SPEED]][0]; @@ -4669,6 +4682,10 @@ u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves) strikesFirst = 1; else if (ability2 == ABILITY_STALL && ability1 != ABILITY_STALL) strikesFirst = 0; + else if (ability1 == ABILITY_MYCELIUM_MIGHT && ability2 != ABILITY_MYCELIUM_MIGHT && IS_MOVE_STATUS(gCurrentMove)) + strikesFirst = 1; + else if (ability2 == ABILITY_MYCELIUM_MIGHT && ability1 != ABILITY_MYCELIUM_MIGHT && IS_MOVE_STATUS(gCurrentMove)) + strikesFirst = 0; else { if (speedBattler1 == speedBattler2 && Random() & 1) @@ -4847,10 +4864,10 @@ static void TurnValuesCleanUp(bool8 var0) gSpecialStatuses[gActiveBattler].parentalBondState = PARENTAL_BOND_OFF; } - 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; + gSideStatuses[B_SIDE_PLAYER] &= ~(SIDE_STATUS_QUICK_GUARD | SIDE_STATUS_WIDE_GUARD | SIDE_STATUS_CRAFTY_SHIELD | SIDE_STATUS_MAT_BLOCK); + gSideStatuses[B_SIDE_OPPONENT] &= ~(SIDE_STATUS_QUICK_GUARD | SIDE_STATUS_WIDE_GUARD | SIDE_STATUS_CRAFTY_SHIELD | SIDE_STATUS_MAT_BLOCK); + gSideTimers[B_SIDE_PLAYER].followmeTimer = 0; + gSideTimers[B_SIDE_OPPONENT].followmeTimer = 0; } void SpecialStatusesClear(void) @@ -4869,9 +4886,14 @@ static void CheckMegaEvolutionBeforeTurn(void) if (gBattleStruct->mega.toEvolve & gBitTable[gActiveBattler] && !(gProtectStructs[gActiveBattler].noValidMoves)) { + struct Pokemon *mon; + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; + else + mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; gBattleStruct->mega.toEvolve &= ~(gBitTable[gActiveBattler]); gLastUsedItem = gBattleMons[gActiveBattler].item; - if (gBattleStruct->mega.isWishMegaEvo == TRUE) + if (GetWishMegaEvolutionSpecies(GetMonData(mon, MON_DATA_SPECIES), GetMonData(mon, MON_DATA_MOVE1), GetMonData(mon, MON_DATA_MOVE2), GetMonData(mon, MON_DATA_MOVE3), GetMonData(mon, MON_DATA_MOVE4))) BattleScriptExecute(BattleScript_WishMegaEvolution); else BattleScriptExecute(BattleScript_MegaEvolution); @@ -4881,7 +4903,7 @@ static void CheckMegaEvolutionBeforeTurn(void) } #if B_MEGA_EVO_TURN_ORDER <= GEN_6 - gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; #else gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved @@ -4906,11 +4928,11 @@ static void TryChangeTurnOrder(void) } } } - gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; } -static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) +static void CheckChosenMoveForEffectsBeforeTurnStarts(void) { u32 i; @@ -4924,7 +4946,7 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) && !(gDisableStructs[gBattlerAttacker].truantCounter) && !(gProtectStructs[gActiveBattler].noValidMoves)) { - switch(gChosenMoveByBattler[gActiveBattler]) + switch (gChosenMoveByBattler[gActiveBattler]) { case MOVE_FOCUS_PUNCH: BattleScriptExecute(BattleScript_FocusPunchSetUp); @@ -5214,6 +5236,8 @@ static void HandleEndTurn_FinishBattle(void) } RecordedBattle_SetPlaybackFinished(); + if (gTestRunnerEnabled) + TestRunner_Battle_AfterLastTurn(); BeginFastPaletteFade(3); FadeOutMapMusic(5); #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE diff --git a/src/battle_message.c b/src/battle_message.c index 9503fbaaffd5..2b8005f64b14 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -209,8 +209,8 @@ static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!"); static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!"); -static const u8 sText_SpikesScattered[] = _("SPIKES were scattered all around\nthe opponent's side!"); -static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby SPIKES!"); +static const u8 sText_SpikesScattered[] = _("Spikes were scattered all around\nthe opponent's side!"); +static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby spikes!"); static const u8 sText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s PERISH count\nfell to {B_BUFF1}!"); static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!"); @@ -220,7 +220,7 @@ static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut i static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}'s stat changes!"); static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLEECH SEED!"); -static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSPIKES!"); +static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nspikes!"); static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!"); static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!"); static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!"); @@ -230,7 +230,7 @@ static const u8 sText_PkmnCenterAttention[] = _("{B_DEF_NAME_WITH_PREFIX} became 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_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_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!"); @@ -306,6 +306,7 @@ static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_ static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!"); static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents flinching!"); 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_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_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}!"); const u8 gText_StatSharply[] = _("sharply "); @@ -433,13 +434,19 @@ static const u8 sText_ExclamationMark2[] = _("!"); static const u8 sText_ExclamationMark3[] = _("!"); static const u8 sText_ExclamationMark4[] = _("!"); static const u8 sText_ExclamationMark5[] = _("!"); +static const u8 sText_HP[] = _("HP"); +static const u8 sText_Attack[] = _("attack"); +static const u8 sText_Defense[] = _("defense"); +static const u8 sText_Speed[] = _("speed"); +static const u8 sText_SpAttack[] = _("sp. attack"); +static const u8 sText_SpDefense[] = _("sp. defense"); static const u8 sText_Accuracy[] = _("accuracy"); static const u8 sText_Evasiveness[] = _("evasiveness"); const u8 *const gStatNamesTable[NUM_BATTLE_STATS] = { - gText_HP3, gText_Attack, gText_Defense, - gText_Speed, gText_SpAtk, gText_SpDef, + sText_HP, sText_Attack, sText_Defense, + sText_Speed, sText_SpAttack, sText_SpDefense, sText_Accuracy, sText_Evasiveness }; @@ -515,14 +522,14 @@ static const u8 sText_TwoInGameTrainersDefeated[]; static const u8 sText_Trainer2LoseText[]; // New battle strings. -static const s8 sText_EnduredViaSturdy[] = _("{B_DEF_NAME_WITH_PREFIX} Endured\nthe hit using {B_DEF_ABILITY}!"); +static const s8 sText_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_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_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!"); @@ -591,7 +598,7 @@ static const u8 sText_TargetsStatWasMaxedOut[] = _("{B_DEF_NAME_WITH_PREFIX}'s { 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!"); 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_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!"); @@ -616,7 +623,7 @@ static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true\nfor 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_AttackerAquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired\n{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}!"); @@ -636,7 +643,7 @@ static const u8 sText_TargetElectrified[] = _("The {B_DEF_NAME_WITH_PREFIX}'s mo 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_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 "); @@ -740,7 +747,7 @@ static const u8 sText_AbilityAllowsOnlyMove[] = _("{B_ATK_ABILITY} allows the\nu 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_BattlerTypeChangedTo[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s type\nchanged to {B_BUFF1}!"); 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!"); @@ -759,10 +766,24 @@ static const u8 sText_AttackerBrokeThroughParalysis[] = _("{B_ATK_NAME_WITH_PREF 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!"); - +static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all\nof its electricity!"); +static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!"); +static const u8 sText_BeingHitChargedPkmnWithPower[] = _("Being hit by {B_CURRENT_MOVE}\ncharged {B_ATK_NAME_WITH_PREFIX} with power!"); +static const u8 sText_SunlightActivatedAbility[] = _("The harsh sunlight activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}!"); +static const u8 sText_StatWasHeightened[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} was heightened!"); +static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}!"); +static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nweakened the {B_BUFF1} of\lall surrounding Pokémon!\p"); +static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_ATK_NAME_WITH_PREFIX} gained strength\nfrom the fallen!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN - BATTLESTRINGS_TABLE_START] = sText_AttackerGainedStrengthFromTheFallen, + [STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT - BATTLESTRINGS_TABLE_START] = sText_AbilityWeakenedSurroundingMonsStat, + [STRINGID_ELECTRICTERRAINACTIVATEDABILITY - BATTLESTRINGS_TABLE_START] = sText_ElectricTerrainActivatedAbility, + [STRINGID_STATWASHEIGHTENED - BATTLESTRINGS_TABLE_START] = sText_StatWasHeightened, + [STRINGID_SUNLIGHTACTIVATEDABILITY - BATTLESTRINGS_TABLE_START] = sText_SunlightActivatedAbility, + [STRINGID_BEINGHITCHARGEDPKMNWITHPOWER - BATTLESTRINGS_TABLE_START] = sText_BeingHitChargedPkmnWithPower, + [STRINGID_ATTACKERSWITCHEDSTATWITHTARGET - BATTLESTRINGS_TABLE_START] = sText_AttackerSwitchedStatWithTarget, [STRINGID_TARGETTOUGHEDITOUT - BATTLESTRINGS_TABLE_START] = sText_TargetToughedItOut, [STRINGID_ATTACKERMELTEDTHEICE - BATTLESTRINGS_TABLE_START] = sText_AttackerMeltedTheIce, [STRINGID_ATTACKERHEALEDITSBURN - BATTLESTRINGS_TABLE_START] = sText_AttackerHealedItsBurn, @@ -1381,6 +1402,8 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE - BATTLESTRINGS_TABLE_START] = sText_CantEscapeBecauseOfCurrentMove, [STRINGID_PKMNTOOKTARGETHIGH - BATTLESTRINGS_TABLE_START] = sText_PkmnTookTargetHigh, [STRINGID_TARGETTOOHEAVY - BATTLESTRINGS_TABLE_START] = sText_TargetTooHeavy, + [STRINGID_ATTACKERLOSTELECTRICTYPE - BATTLESTRINGS_TABLE_START] = sText_AttackerLostElectricType, + [STRINGID_PKMNSABILITYPREVENTSABILITY - BATTLESTRINGS_TABLE_START] = sText_PkmnsAbilityPreventsAbility, }; const u16 gZEffectStringIds[] = @@ -1571,7 +1594,6 @@ const u16 gUproarAwakeStringIds[] = { [B_MSG_CANT_SLEEP_UPROAR] = STRINGID_PKMNCANTSLEEPINUPROAR2, [B_MSG_UPROAR_KEPT_AWAKE] = STRINGID_UPROARKEPTPKMNAWAKE, - [B_MSG_STAYED_AWAKE_USING] = STRINGID_PKMNSTAYEDAWAKEUSING, }; const u16 gStatUpStringIds[] = @@ -2061,288 +2083,236 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 1, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_DYNAMIC_COLOR_6, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .bgColor = 15, + .shadowColor = 6, }, [B_WIN_ACTION_PROMPT] = { .fillValue = PIXEL_FILL(0xF), .fontId = FONT_NORMAL, .x = 1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_DYNAMIC_COLOR_6, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .bgColor = 15, + .shadowColor = 6, }, [B_WIN_ACTION_MENU] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_1] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_2] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_3] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_4] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_PP] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_3, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_2, + .fgColor = 12, + .bgColor = 14, + .shadowColor = 11, }, [B_WIN_DUMMY] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_PP_REMAINING] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 2, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_3, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_2, + .fgColor = 12, + .bgColor = 14, + .shadowColor = 11, }, [B_WIN_MOVE_TYPE] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_SWITCH_PROMPT] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_YESNO] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_LEVEL_UP_BOX] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_LEVEL_UP_BANNER] = { .fillValue = PIXEL_FILL(0), .fontId = FONT_NORMAL, .x = 32, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_COLOR_TRANSPARENT, - .shadowColor = TEXT_COLOR_DARK_GRAY, + .fgColor = 1, + .shadowColor = 2, }, [B_WIN_VS_PLAYER] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_VS_OPPONENT] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_VS_MULTI_PLAYER_1] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_VS_MULTI_PLAYER_2] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_VS_MULTI_PLAYER_3] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_VS_MULTI_PLAYER_4] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_VS_OUTCOME_DRAW] = { .fillValue = PIXEL_FILL(0), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_COLOR_TRANSPARENT, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .shadowColor = 6, }, [B_WIN_VS_OUTCOME_LEFT] = { .fillValue = PIXEL_FILL(0), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_COLOR_TRANSPARENT, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .shadowColor = 6, }, [B_WIN_VS_OUTCOME_RIGHT] = { .fillValue = PIXEL_FILL(0x0), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_COLOR_TRANSPARENT, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .shadowColor = 6, }, }; @@ -2353,276 +2323,229 @@ static const struct BattleWindowText sTextOnWindowsInfo_Arena[] = .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 1, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_DYNAMIC_COLOR_6, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .bgColor = 15, + .shadowColor = 6, }, [B_WIN_ACTION_PROMPT] = { .fillValue = PIXEL_FILL(0xF), .fontId = FONT_NORMAL, .x = 1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_DYNAMIC_COLOR_6, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .bgColor = 15, + .shadowColor = 6, }, [B_WIN_ACTION_MENU] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_1] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_2] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_3] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_4] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_PP] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_3, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_2, + .fgColor = 12, + .bgColor = 14, + .shadowColor = 11, }, [B_WIN_DUMMY] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_PP_REMAINING] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 2, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_3, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_2, + .fgColor = 12, + .bgColor = 14, + .shadowColor = 11, }, [B_WIN_MOVE_TYPE] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_SWITCH_PROMPT] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_YESNO] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_LEVEL_UP_BOX] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_LEVEL_UP_BANNER] = { .fillValue = PIXEL_FILL(0), .fontId = FONT_NORMAL, .x = 32, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_COLOR_TRANSPARENT, - .shadowColor = TEXT_COLOR_DARK_GRAY, + .fgColor = 1, + .shadowColor = 2, }, [ARENA_WIN_PLAYER_NAME] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 1, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_VS] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_OPPONENT_NAME] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_MIND] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_SKILL] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_BODY] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_JUDGMENT_TITLE] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_JUDGMENT_TEXT] = { .fillValue = PIXEL_FILL(0x1), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 1, - .fgColor = TEXT_COLOR_DARK_GRAY, - .bgColor = TEXT_COLOR_WHITE, - .shadowColor = TEXT_COLOR_LIGHT_GRAY, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, }, }; @@ -3891,8 +3814,13 @@ void SetPpNumbersPaletteInMoveSelection(void) { struct ChooseMoveStruct *chooseMoveStruct = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); const u16 *palPtr = gPPTextPalette; - u8 var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]], + u8 var; + + if (!gBattleStruct->zmove.viewing) + var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]], chooseMoveStruct->maxPp[gMoveSelectionCursor[gActiveBattler]]); + else + var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]], gBattleMoves[gMoveSelectionCursor[gActiveBattler]].pp); gPlttBufferUnfaded[92] = palPtr[(var * 2) + 0]; gPlttBufferUnfaded[91] = palPtr[(var * 2) + 1]; diff --git a/src/battle_pike.c b/src/battle_pike.c index f863282427e1..9751d565de5c 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -17,7 +17,6 @@ #include "constants/battle_frontier.h" #include "constants/frontier_util.h" #include "constants/abilities.h" -#include "constants/battle_config.h" #include "constants/layouts.h" #include "constants/rgb.h" #include "constants/trainers.h" @@ -835,7 +834,7 @@ static bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status) ret = TRUE; break; case STATUS1_TOXIC_POISON: - if (ability == ABILITY_IMMUNITY) + if (ability == ABILITY_IMMUNITY || ability == ABILITY_PASTEL_VEIL) ret = TRUE; break; } @@ -849,24 +848,24 @@ static bool8 DoesTypePreventStatus(u16 species, u32 status) switch (status) { case STATUS1_TOXIC_POISON: - if (gBaseStats[species].type1 == TYPE_STEEL || gBaseStats[species].type1 == TYPE_POISON - || gBaseStats[species].type2 == TYPE_STEEL || gBaseStats[species].type2 == TYPE_POISON) + if (gSpeciesInfo[species].types[0] == TYPE_STEEL || gSpeciesInfo[species].types[0] == TYPE_POISON + || gSpeciesInfo[species].types[1] == TYPE_STEEL || gSpeciesInfo[species].types[1] == TYPE_POISON) ret = TRUE; break; case STATUS1_FREEZE: - if (gBaseStats[species].type1 == TYPE_ICE || gBaseStats[species].type2 == TYPE_ICE) + if (gSpeciesInfo[species].types[0] == TYPE_ICE || gSpeciesInfo[species].types[1] == TYPE_ICE) ret = TRUE; break; case STATUS1_PARALYSIS: - if (gBaseStats[species].type1 == TYPE_GROUND || gBaseStats[species].type2 == TYPE_GROUND + if (gSpeciesInfo[species].types[0] == TYPE_GROUND || gSpeciesInfo[species].types[1] == TYPE_GROUND #if B_PARALYZE_ELECTRIC >= GEN_6 - || gBaseStats[species].type1 == TYPE_ELECTRIC || gBaseStats[species].type2 == TYPE_ELECTRIC + || gSpeciesInfo[species].types[0] == TYPE_ELECTRIC || gSpeciesInfo[species].types[1] == TYPE_ELECTRIC #endif ) ret = TRUE; break; case STATUS1_BURN: - if (gBaseStats[species].type1 == TYPE_FIRE || gBaseStats[species].type2 == TYPE_FIRE) + if (gSpeciesInfo[species].types[0] == TYPE_FIRE || gSpeciesInfo[species].types[1] == TYPE_FIRE) ret = TRUE; break; case STATUS1_SLEEP: @@ -1145,9 +1144,9 @@ bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate) SetMonData(&gEnemyParty[0], MON_DATA_EXP, - &gExperienceTables[gBaseStats[wildMons[headerId][pikeMonId].species].growthRate][monLevel]); + &gExperienceTables[gSpeciesInfo[wildMons[headerId][pikeMonId].species].growthRate][monLevel]); - if (gBaseStats[wildMons[headerId][pikeMonId].species].abilities[1]) + if (gSpeciesInfo[wildMons[headerId][pikeMonId].species].abilities[1]) abilityNum = Random() % 2; else abilityNum = 0; diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 2c1e20d0d41f..ffed24980566 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -284,7 +284,7 @@ static const u8 sFloorTemplateOffsets[FRONTIER_STAGES_PER_CHALLENGE] = 0, 4, 9, 14, 19, 24, 29 }; -static const u16 sPickupItemsLvl50[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] = +static const u16 sPickupItemsLvl50[TOTAL_PYRAMID_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}, @@ -308,7 +308,7 @@ static const u16 sPickupItemsLvl50[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] = {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] = +static const u16 sPickupItemsLvlOpen[TOTAL_PYRAMID_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}, @@ -977,10 +977,10 @@ static void SetPickupItem(void) u8 id; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 floor = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - u32 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_ROUNDS; + u32 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_PYRAMID_ROUNDS; - if (round >= TOTAL_ROUNDS) - round = TOTAL_ROUNDS - 1; + if (round >= TOTAL_PYRAMID_ROUNDS) + round = TOTAL_PYRAMID_ROUNDS - 1; id = GetPyramidFloorTemplateId(); itemIndex = (gSpecialVar_LastTalked - sPyramidFloorTemplates[id].numTrainers) - 1; @@ -1345,10 +1345,10 @@ void GenerateBattlePyramidWildMon(void) const struct PyramidWildMon *wildMons; u32 id; u32 lvl = gSaveBlock2Ptr->frontier.lvlMode; - u16 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_ROUNDS; + u16 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_PYRAMID_ROUNDS; - if (round >= TOTAL_ROUNDS) - round = TOTAL_ROUNDS - 1; + if (round >= TOTAL_PYRAMID_ROUNDS) + round = TOTAL_PYRAMID_ROUNDS - 1; if (lvl != FRONTIER_LVL_50) wildMons = sOpenLevelWildMonPointers[round]; @@ -1371,7 +1371,7 @@ void GenerateBattlePyramidWildMon(void) } SetMonData(&gEnemyParty[0], MON_DATA_EXP, - &gExperienceTables[gBaseStats[wildMons[id].species].growthRate][lvl]); + &gExperienceTables[gSpeciesInfo[wildMons[id].species].growthRate][lvl]); switch (wildMons[id].abilityNum) { @@ -1381,7 +1381,7 @@ void GenerateBattlePyramidWildMon(void) break; case ABILITY_RANDOM: default: - if (gBaseStats[wildMons[id].species].abilities[1]) + if (gSpeciesInfo[wildMons[id].species].abilities[1]) { i = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY, NULL) % 2; SetMonData(&gEnemyParty[0], MON_DATA_ABILITY_NUM, &i); @@ -1961,8 +1961,8 @@ u16 GetBattlePyramidPickupItemId(void) u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; int round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE); - if (round >= TOTAL_ROUNDS) - round = TOTAL_ROUNDS - 1; + if (round >= TOTAL_PYRAMID_ROUNDS) + round = TOTAL_PYRAMID_ROUNDS - 1; rand = Random() % 100; diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index 67afaefe1bb4..d580cf680072 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -160,7 +160,7 @@ static const struct ListMenuTemplate sListMenuTemplate = .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, .fontId = FONT_NARROW, - .cursorKind = 0 + .cursorKind = CURSOR_BLACK_ARROW }; enum { @@ -578,7 +578,7 @@ static bool8 LoadPyramidBagGfx(void) } break; case 2: - LoadCompressedPalette(gBattlePyramidBagInterface_Pal, 0, 32); + LoadCompressedPalette(gBattlePyramidBagInterface_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); gPyramidBagMenu->state++; break; case 3: @@ -1439,9 +1439,9 @@ static void InitPyramidBagWindows(void) InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); - LoadUserWindowBorderGfx(0, 0x1, 0xE0); - LoadMessageBoxGfx(0, 0xA, 0xD0); - LoadPalette(gStandardMenuPalette, 0xF0, 0x20); + LoadUserWindowBorderGfx(0, 0x1, BG_PLTT_ID(14)); + LoadMessageBoxGfx(0, 0xA, BG_PLTT_ID(13)); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); for (i = 0; i < ARRAY_COUNT(sWindowTemplates); i++) FillWindowPixelBuffer(i, PIXEL_FILL(0)); @@ -1537,10 +1537,10 @@ static void FreeItemIconSprite(u8 spriteArrId) static void LoadPyramidBagPalette(void) { struct SpritePalette spritePalette; - u16 *palPtr = Alloc(0x40); + u16 *palPtr = Alloc(2 * PLTT_SIZE_4BPP); LZDecompressWram(gBattlePyramidBag_Pal, palPtr); - spritePalette.data = palPtr + (gSaveBlock2Ptr->frontier.lvlMode * 16); + spritePalette.data = palPtr + PLTT_ID(gSaveBlock2Ptr->frontier.lvlMode); spritePalette.tag = TAG_PYRAMID_BAG; LoadSpritePalette(&spritePalette); Free(palPtr); diff --git a/src/battle_records.c b/src/battle_records.c index 6cab28d21b59..4463a9ebfc74 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -444,7 +444,7 @@ static void LoadTrainerHillRecordsWindowGfx(u8 bgId) { LoadBgTiles(bgId, sTrainerHillWindowTileset, sizeof(sTrainerHillWindowTileset), 0); CopyToBgTilemapBufferRect(bgId, sTrainerHillWindowTilemap, 0, 0, 0x20, 0x20); - LoadPalette(sTrainerHillWindowPalette, 0, 0x20); + LoadPalette(sTrainerHillWindowPalette, BG_PLTT_ID(0), PLTT_SIZE_4BPP); } static void VblankCB_TrainerHillRecords(void) @@ -491,7 +491,7 @@ static void CB2_ShowTrainerHillRecords(void) break; case 3: LoadTrainerHillRecordsWindowGfx(3); - LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20); + LoadPalette(GetTextWindowPalette(0), BG_PLTT_ID(15), PLTT_SIZE_4BPP); gMain.state++; break; case 4: diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3e52aa618c42..8b8d4f1e9485 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -37,7 +37,6 @@ #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" @@ -61,6 +60,37 @@ #include "battle_util.h" #include "constants/pokemon.h" +// Helper for accessing command arguments and advancing gBattlescriptCurrInstr. +// +// For example accuracycheck is defined as: +// +// .macro accuracycheck failInstr:req, move:req +// .byte 0x1 +// .4byte \failInstr +// .2byte \move +// .endm +// +// Which corresponds to: +// +// CMD_ARGS(const u8 *failInstr, u16 move); +// +// The arguments can be accessed as cmd->failInstr and cmd->move. +// gBattlescriptCurrInstr = cmd->nextInstr; advances to the next instruction. +#define CMD_ARGS(...) const struct __attribute__((packed)) { u8 opcode; MEMBERS(__VA_ARGS__) const u8 nextInstr[0]; } *const cmd = (const void *)gBattlescriptCurrInstr +#define VARIOUS_ARGS(...) CMD_ARGS(u8 battler, u8 id, ##__VA_ARGS__) +#define NATIVE_ARGS(...) CMD_ARGS(void (*func)(void), ##__VA_ARGS__) + +#define MEMBERS(...) VARARG_8(MEMBERS_, __VA_ARGS__) +#define MEMBERS_0() +#define MEMBERS_1(a) a; +#define MEMBERS_2(a, b) a; b; +#define MEMBERS_3(a, b, c) a; b; c; +#define MEMBERS_4(a, b, c, d) a; b; c; d; +#define MEMBERS_5(a, b, c, d, e) a; b; c; d; e; +#define MEMBERS_6(a, b, c, d, e, f) a; b; c; d; e; f; +#define MEMBERS_7(a, b, c, d, e, f, g) a; b; c; d; e; f; g; +#define MEMBERS_8(a, b, c, d, e, f, g, h) a; b; c; d; e; f; g; h; + extern struct Evolution gEvolutionTable[][EVOS_PER_MON]; extern const u8 *const gBattleScriptsForMoveEffects[]; @@ -319,6 +349,7 @@ static void SpriteCB_MonIconOnLvlUpBanner(struct Sprite *sprite); static bool32 CriticalCapture(u32 odds); static void BestowItem(u32 battlerAtk, u32 battlerDef); static bool8 IsFinalStrikeEffect(u16 move); +static void TryUpdateRoundTurnOrder(void); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -452,7 +483,7 @@ static void Cmd_manipulatedamage(void); static void Cmd_trysetrest(void); static void Cmd_jumpifnotfirstturn(void); static void Cmd_setmiracleeye(void); -static void Cmd_jumpifcantmakeasleep(void); +static void Cmd_jumpifuproarwakes(void); static void Cmd_stockpile(void); static void Cmd_stockpiletobasedamage(void); static void Cmd_stockpiletohpheal(void); @@ -545,7 +576,7 @@ static void Cmd_setuserstatus3(void); static void Cmd_assistattackselect(void); static void Cmd_trysetmagiccoat(void); static void Cmd_trysetsnatch(void); -static void Cmd_trygetintimidatetarget(void); +static void Cmd_unused2(void); static void Cmd_switchoutabilities(void); static void Cmd_jumpifhasnohp(void); static void Cmd_getsecretpowereffect(void); @@ -575,7 +606,7 @@ static void Cmd_averagestats(void); static void Cmd_jumpifoppositegenders(void); static void Cmd_unused(void); static void Cmd_tryworryseed(void); -static void Cmd_metalburstdamagecalculator(void); +static void Cmd_callnative(void); void (* const gBattleScriptingCommandsTable[])(void) = { @@ -711,7 +742,7 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_trysetrest, //0x81 Cmd_jumpifnotfirstturn, //0x82 Cmd_setmiracleeye, //0x83 - Cmd_jumpifcantmakeasleep, //0x84 + Cmd_jumpifuproarwakes, //0x84 Cmd_stockpile, //0x85 Cmd_stockpiletobasedamage, //0x86 Cmd_stockpiletohpheal, //0x87 @@ -804,7 +835,7 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_assistattackselect, //0xDE Cmd_trysetmagiccoat, //0xDF Cmd_trysetsnatch, //0xE0 - Cmd_trygetintimidatetarget, //0xE1 + Cmd_unused2, //0xE1 Cmd_switchoutabilities, //0xE2 Cmd_jumpifhasnohp, //0xE3 Cmd_getsecretpowereffect, //0xE4 @@ -834,7 +865,7 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_jumpifoppositegenders, //0xFC Cmd_unused, //0xFD Cmd_tryworryseed, //0xFE - Cmd_metalburstdamagecalculator, //0xFF + Cmd_callnative, //0xFF }; const struct StatFractions gAccuracyStageRatios[] = @@ -1131,6 +1162,7 @@ static const u16 sFinalStrikeOnlyEffects[] = EFFECT_BUG_BITE, EFFECT_THIEF, EFFECT_BURN_UP, + EFFECT_DOUBLE_SHOCK, EFFECT_SECRET_POWER, EFFECT_SMACK_DOWN, EFFECT_SPARKLING_ARIA, @@ -1412,6 +1444,8 @@ static bool32 TryAegiFormChange(void) static void Cmd_attackcanceler(void) { + CMD_ARGS(); + s32 i, moveType; u16 attackerAbility = GetBattlerAbility(gBattlerAttacker); @@ -1529,6 +1563,7 @@ static void Cmd_attackcanceler(void) PressurePPLose(gBattlerAttacker, gBattlerTarget, MOVE_MAGIC_COAT); gProtectStructs[gBattlerTarget].usesBouncedMove = TRUE; gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattleStruct->atkCancellerTracker = CANCELLER_POWDER_MOVE; // Edge case for bouncing a powder move against a grass type pokemon. if (BlocksPrankster(gCurrentMove, gBattlerTarget, gBattlerAttacker, TRUE)) { // Opponent used a prankster'd magic coat -> reflected status move should fail against a dark-type attacker @@ -1546,11 +1581,12 @@ static void Cmd_attackcanceler(void) && gBattleMoves[gCurrentMove].flags & FLAG_MAGIC_COAT_AFFECTED && !gProtectStructs[gBattlerAttacker].usesBouncedMove) { - RecordAbilityBattle(gBattlerTarget, ABILITY_MAGIC_BOUNCE); gProtectStructs[gBattlerTarget].usesBouncedMove = TRUE; gBattleCommunication[MULTISTRING_CHOOSER] = 1; + gBattleStruct->atkCancellerTracker = CANCELLER_POWDER_MOVE; // Edge case for bouncing a powder move against a grass type pokemon. BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MagicCoatBounce; + gBattlerAbility = gBattlerTarget; return; } @@ -1602,16 +1638,16 @@ static void Cmd_attackcanceler(void) gMultiHitCounter = 0; } gBattleCommunication[MISS_TYPE] = B_MSG_PROTECTED; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gProtectStructs[gBattlerTarget].beakBlastCharge && IsMoveMakingContact(gCurrentMove, gBattlerAttacker)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = TRUE; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -1636,15 +1672,17 @@ static bool32 JumpIfMoveFailed(u8 adder, u16 move) static void Cmd_jumpifaffectedbyprotect(void) { + CMD_ARGS(const u8 *failInstr); + if (IsBattlerProtected(gBattlerTarget, gCurrentMove)) { gMoveResultFlags |= MOVE_RESULT_MISSED; - JumpIfMoveFailed(5, 0); + JumpIfMoveFailed(sizeof(*cmd), MOVE_NONE); gBattleCommunication[MISS_TYPE] = B_MSG_PROTECTED; } else { - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -1808,7 +1846,7 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u if (atkHoldEffect == HOLD_EFFECT_WIDE_LENS) calc = (calc * (100 + atkParam)) / 100; - else if (atkHoldEffect == HOLD_EFFECT_ZOOM_LENS && GetBattlerTurnOrderNum(battlerAtk) > GetBattlerTurnOrderNum(battlerDef)); + else if (atkHoldEffect == HOLD_EFFECT_ZOOM_LENS && GetBattlerTurnOrderNum(battlerAtk) > GetBattlerTurnOrderNum(battlerDef)) calc = (calc * (100 + atkParam)) / 100; if (gProtectStructs[battlerAtk].usedMicleBerry) @@ -1835,7 +1873,9 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u static void Cmd_accuracycheck(void) { - u16 type, move = T2_READ_16(gBattlescriptCurrInstr + 5); + CMD_ARGS(const u8 *failInstr, u16 move); + + u16 type, move = cmd->move; u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move); if (move == ACC_CURR_MOVE) @@ -1844,18 +1884,18 @@ static void Cmd_accuracycheck(void) if (move == NO_ACC_CALC_CHECK_LOCK_ON) { if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; else if (gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; else if (!JumpIfMoveAffectedByProtect(0)) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_2ND_HIT || (gSpecialStatuses[gBattlerAttacker].multiHitOn && (gBattleMoves[move].effect != EFFECT_TRIPLE_KICK || GetBattlerAbility(gBattlerAttacker) == ABILITY_SKILL_LINK))) { // No acc checks for second hit of Parental Bond or multi hit moves, except Triple Kick/Triple Axel - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { @@ -1888,6 +1928,8 @@ static void Cmd_accuracycheck(void) static void Cmd_attackstring(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags) return; @@ -1896,12 +1938,14 @@ static void Cmd_attackstring(void) PrepareStringBattle(STRINGID_USEDMOVE, gBattlerAttacker); gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleCommunication[MSG_DISPLAY] = 0; } static void Cmd_ppreduce(void) { + CMD_ARGS(); + s32 i, ppToDeduct = 1; if (gBattleControllerExecFlags) @@ -1961,7 +2005,7 @@ static void Cmd_ppreduce(void) } gHitMarker &= ~HITMARKER_NO_PPDEDUCT; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // The chance is 1/N for each stage. @@ -2030,6 +2074,8 @@ s8 GetInverseCritChance(u8 battlerAtk, u8 battlerDef, u32 move) static void Cmd_critcalc(void) { + CMD_ARGS(); + u16 partySlot; s32 critChance = CalcCritChanceStage(gBattlerAttacker, gBattlerTarget, gCurrentMove, TRUE); gPotentialItemEffectBattler = gBattlerAttacker; @@ -2051,30 +2097,36 @@ static void Cmd_critcalc(void) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI && GetBattlerPosition(gBattlerAttacker) == B_POSITION_PLAYER_LEFT)) gPartyCriticalHits[partySlot]++; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_damagecalc(void) { + CMD_ARGS(); + u8 moveType; GET_MOVE_TYPE(gCurrentMove, moveType); gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, moveType, 0, gIsCriticalHit, TRUE, TRUE); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_typecalc(void) { + CMD_ARGS(); + u8 moveType; GET_MOVE_TYPE(gCurrentMove, moveType); CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, gBattlerAttacker, gBattlerTarget, TRUE); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_adjustdamage(void) { + CMD_ARGS(); + u8 holdEffect, param; u32 moveType; u32 friendshipScore = GetBattlerFriendshipScore(gBattlerTarget); @@ -2157,7 +2209,7 @@ static void Cmd_adjustdamage(void) #endif END: - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMoveDamage >= 1) gSpecialStatuses[gBattlerAttacker].damagedMons |= gBitTable[gBattlerTarget]; @@ -2200,6 +2252,8 @@ static void Cmd_adjustdamage(void) static void Cmd_multihitresultmessage(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags) return; @@ -2225,7 +2279,7 @@ static void Cmd_multihitresultmessage(void) return; } } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; // Print berry reducing message after result message. if (gSpecialStatuses[gBattlerTarget].berryReduced @@ -2239,6 +2293,8 @@ static void Cmd_multihitresultmessage(void) static void Cmd_attackanimation(void) { + CMD_ARGS(); + u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); if (gBattleControllerExecFlags) @@ -2250,7 +2306,7 @@ static void Cmd_attackanimation(void) // 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); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_Pausex20; gBattleScripting.animTurn++; gBattleScripting.animTargetsHit++; @@ -2259,7 +2315,7 @@ static void Cmd_attackanimation(void) { if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_2ND_HIT) // No animation on second hit { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; return; } @@ -2268,7 +2324,7 @@ static void Cmd_attackanimation(void) || moveTarget & MOVE_TARGET_DEPENDS) && gBattleScripting.animTargetsHit) { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; return; } if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) @@ -2293,11 +2349,11 @@ static void Cmd_attackanimation(void) gBattleScripting.animTurn++; gBattleScripting.animTargetsHit++; MarkBattlerForControllerExec(gBattlerAttacker); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - BattleScriptPush(gBattlescriptCurrInstr + 1); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_Pausex20; } } @@ -2305,18 +2361,22 @@ static void Cmd_attackanimation(void) static void Cmd_waitanimation(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags == 0) - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_healthbarupdate(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags) return; if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (DoesSubstituteBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove) && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { @@ -2334,11 +2394,13 @@ static void Cmd_healthbarupdate(void) } } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_datahpupdate(void) { + CMD_ARGS(u8 battler); + u32 moveType; if (gBattleControllerExecFlags) @@ -2353,7 +2415,7 @@ static void Cmd_datahpupdate(void) if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (DoesSubstituteBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove) && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { if (gDisableStructs[gActiveBattler].substituteHP >= gBattleMoveDamage) @@ -2373,7 +2435,7 @@ static void Cmd_datahpupdate(void) // check substitute fading if (gDisableStructs[gActiveBattler].substituteHP == 0) { - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SubstituteFade; return; @@ -2382,7 +2444,7 @@ static void Cmd_datahpupdate(void) else if (DoesDisguiseBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove)) { gBattleMons[gActiveBattler].species = SPECIES_MIMIKYU_BUSTED; - BattleScriptPush(gBattlescriptCurrInstr + 2); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_TargetFormChange; } else @@ -2404,7 +2466,7 @@ static void Cmd_datahpupdate(void) else { gTakenDmg[gActiveBattler] += gBattleMoveDamage; - if (gBattlescriptCurrInstr[1] == BS_TARGET) + if (cmd->battler == BS_TARGET) gTakenDmgByBattler[gActiveBattler] = gBattlerAttacker; else gTakenDmgByBattler[gActiveBattler] = gBattlerTarget; @@ -2428,7 +2490,7 @@ static void Cmd_datahpupdate(void) { gProtectStructs[gActiveBattler].physicalDmg = gHpDealt; gSpecialStatuses[gActiveBattler].physicalDmg = gHpDealt; - if (gBattlescriptCurrInstr[1] == BS_TARGET) + if (cmd->battler == BS_TARGET) { gProtectStructs[gActiveBattler].physicalBattlerId = gBattlerAttacker; gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerAttacker; @@ -2443,7 +2505,7 @@ static void Cmd_datahpupdate(void) { gProtectStructs[gActiveBattler].specialDmg = gHpDealt; gSpecialStatuses[gActiveBattler].specialDmg = gHpDealt; - if (gBattlescriptCurrInstr[1] == BS_TARGET) + if (cmd->battler == BS_TARGET) { gProtectStructs[gActiveBattler].specialBattlerId = gBattlerAttacker; gSpecialStatuses[gActiveBattler].specialBattlerId = gBattlerAttacker; @@ -2462,15 +2524,17 @@ static void Cmd_datahpupdate(void) } else { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (gSpecialStatuses[gActiveBattler].dmg == 0) gSpecialStatuses[gActiveBattler].dmg = 0xFFFF; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_critmessage(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags == 0) { if (gIsCriticalHit == TRUE && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) @@ -2478,12 +2542,14 @@ static void Cmd_critmessage(void) PrepareStringBattle(STRINGID_CRITICALHIT, gBattlerAttacker); gBattleCommunication[MSG_DISPLAY] = 1; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_effectivenesssound(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags) return; @@ -2527,11 +2593,13 @@ static void Cmd_effectivenesssound(void) break; } } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_resultmessage(void) { + CMD_ARGS(); + u32 stringId = 0; if (gBattleControllerExecFlags) @@ -2638,7 +2706,7 @@ static void Cmd_resultmessage(void) if (stringId) PrepareStringBattle(stringId, gBattlerAttacker); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; // Print berry reducing message after result message. if (gSpecialStatuses[gBattlerTarget].berryReduced @@ -2652,42 +2720,48 @@ static void Cmd_resultmessage(void) static void Cmd_printstring(void) { + CMD_ARGS(u16 id); + if (gBattleControllerExecFlags == 0) { - u16 var = T2_READ_16(gBattlescriptCurrInstr + 1); + u16 id = cmd->id; - gBattlescriptCurrInstr += 3; - PrepareStringBattle(var, gBattlerAttacker); + gBattlescriptCurrInstr = cmd->nextInstr; + PrepareStringBattle(id, gBattlerAttacker); gBattleCommunication[MSG_DISPLAY] = 1; } } static void Cmd_printselectionstring(void) { + CMD_ARGS(u16 id); + gActiveBattler = gBattlerAttacker; - BtlController_EmitPrintSelectionString(BUFFER_A, T2_READ_16(gBattlescriptCurrInstr + 1)); + BtlController_EmitPrintSelectionString(BUFFER_A, cmd->id); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleCommunication[MSG_DISPLAY] = 1; } static void Cmd_waitmessage(void) { + CMD_ARGS(u16 time); + if (gBattleControllerExecFlags == 0) { if (!gBattleCommunication[MSG_DISPLAY]) { - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - u16 toWait = T2_READ_16(gBattlescriptCurrInstr + 1); + u16 toWait = cmd->time; if (++gPauseCounterBattle >= toWait) { gPauseCounterBattle = 0; - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleCommunication[MSG_DISPLAY] = 0; } } @@ -2696,12 +2770,14 @@ static void Cmd_waitmessage(void) static void Cmd_printfromtable(void) { + CMD_ARGS(const u16 *ptr); + if (gBattleControllerExecFlags == 0) { - const u16 *ptr = (const u16 *) T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u16 *ptr = cmd->ptr; ptr += gBattleCommunication[MULTISTRING_CHOOSER]; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; PrepareStringBattle(*ptr, gBattlerAttacker); gBattleCommunication[MSG_DISPLAY] = 1; } @@ -2709,16 +2785,18 @@ static void Cmd_printfromtable(void) static void Cmd_printselectionstringfromtable(void) { + CMD_ARGS(const u16 *ptr); + if (gBattleControllerExecFlags == 0) { - const u16 *ptr = (const u16 *) T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u16 *ptr = cmd->ptr; ptr += gBattleCommunication[MULTISTRING_CHOOSER]; gActiveBattler = gBattlerAttacker; BtlController_EmitPrintSelectionString(BUFFER_A, *ptr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleCommunication[MSG_DISPLAY] = 1; } } @@ -2790,7 +2868,7 @@ void SetMoveEffect(bool32 primary, u32 certain) u32 flags = 0; u16 battlerAbility; - if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT + if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT && gBattleMons[gBattlerTarget].hp != 0 && IsFinalStrikeEffect(gCurrentMove)) { @@ -2826,12 +2904,21 @@ void SetMoveEffect(bool32 primary, u32 certain) // 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) + if ((battlerAbility == ABILITY_SHIELD_DUST + || GetBattlerHoldEffect(gEffectBattler, TRUE) == HOLD_EFFECT_COVERT_CLOAK) + && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + && !primary + && (gBattleScripting.moveEffect <= MOVE_EFFECT_TRI_ATTACK || gBattleScripting.moveEffect >= MOVE_EFFECT_SMACK_DOWN)) // Exclude stat lowering effects + { + if (battlerAbility == ABILITY_SHIELD_DUST) + RecordAbilityBattle(gEffectBattler, battlerAbility); + else + RecordItemEffectBattle(gEffectBattler, HOLD_EFFECT_COVERT_CLOAK); INCREMENT_RESET_RETURN + } if (gSideStatuses[GET_BATTLER_SIDE(gEffectBattler)] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) - && !primary && gBattleScripting.moveEffect <= 7) + && !primary && gBattleScripting.moveEffect <= MOVE_EFFECT_CONFUSION) INCREMENT_RESET_RETURN if (TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER) @@ -2871,11 +2958,11 @@ void SetMoveEffect(bool32 primary, u32 certain) statusChanged = TRUE; break; case STATUS1_POISON: - if (battlerAbility == ABILITY_IMMUNITY + if ((battlerAbility == ABILITY_IMMUNITY || battlerAbility == ABILITY_PASTEL_VEIL) && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { - gLastUsedAbility = ABILITY_IMMUNITY; - RecordAbilityBattle(gEffectBattler, ABILITY_IMMUNITY); + gLastUsedAbility = battlerAbility; + RecordAbilityBattle(gEffectBattler, battlerAbility); BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_PSNPrevention; @@ -2995,10 +3082,11 @@ void SetMoveEffect(bool32 primary, u32 certain) statusChanged = TRUE; break; case STATUS1_TOXIC_POISON: - if (battlerAbility == ABILITY_IMMUNITY && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) + if ((battlerAbility == ABILITY_IMMUNITY || battlerAbility == ABILITY_PASTEL_VEIL) + && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { - gLastUsedAbility = ABILITY_IMMUNITY; - RecordAbilityBattle(gEffectBattler, ABILITY_IMMUNITY); + gLastUsedAbility = battlerAbility; + RecordAbilityBattle(gEffectBattler, battlerAbility); BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_PSNPrevention; @@ -3476,7 +3564,9 @@ void SetMoveEffect(bool32 primary, u32 certain) } break; case MOVE_EFFECT_FLAME_BURST: - if (IsBattlerAlive(BATTLE_PARTNER(gBattlerTarget)) && GetBattlerAbility(BATTLE_PARTNER(gBattlerTarget)) != ABILITY_MAGIC_GUARD) + if (IsBattlerAlive(BATTLE_PARTNER(gBattlerTarget)) + && !(gStatuses3[BATTLE_PARTNER(gBattlerTarget)] & STATUS3_SEMI_INVULNERABLE) + && GetBattlerAbility(BATTLE_PARTNER(gBattlerTarget)) != ABILITY_MAGIC_GUARD) { gBattleScripting.savedBattler = BATTLE_PARTNER(gBattlerTarget); gBattleMoveDamage = gBattleMons[BATTLE_PARTNER(gBattlerTarget)].hp / 16; @@ -3497,16 +3587,12 @@ void SetMoveEffect(bool32 primary, u32 certain) 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); + gProtectStructs[gBattlerTarget].silkTrapped = FALSE; + BattleScriptPush(gBattlescriptCurrInstr + 1); + if (gCurrentMove == MOVE_HYPERSPACE_FURY) gBattlescriptCurrInstr = BattleScript_HyperspaceFuryRemoveProtect; - } + else + gBattlescriptCurrInstr = BattleScript_MoveEffectFeint; } break; case MOVE_EFFECT_SPECTRAL_THIEF: @@ -3626,7 +3712,7 @@ void SetMoveEffect(bool32 primary, u32 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_BothCanNoLongerEscape; } - if (!gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION) + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION)) gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_ESCAPE_PREVENTION)) @@ -3647,6 +3733,15 @@ void SetMoveEffect(bool32 primary, u32 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_BurnUpRemoveType; break; + case MOVE_EFFECT_DOUBLE_SHOCK: + // This seems unnecessary but is done to make it work properly with Parental Bond + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_DoubleShockRemoveType; + break; + case MOVE_EFFECT_ROUND: + TryUpdateRoundTurnOrder(); // If another Pokémon uses Round before the user this turn, the user will use Round directly after it + gBattlescriptCurrInstr++; + break; } } } @@ -3656,6 +3751,8 @@ void SetMoveEffect(bool32 primary, u32 certain) static void Cmd_seteffectwithchance(void) { + CMD_ARGS(); + u32 percentChance; if (GetBattlerAbility(gBattlerAttacker) == ABILITY_SERENE_GRACE) @@ -3680,7 +3777,7 @@ static void Cmd_seteffectwithchance(void) } else { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } gBattleScripting.moveEffect = 0; @@ -3689,17 +3786,23 @@ static void Cmd_seteffectwithchance(void) static void Cmd_seteffectprimary(void) { + CMD_ARGS(); + SetMoveEffect(TRUE, 0); } static void Cmd_seteffectsecondary(void) { + CMD_ARGS(); + SetMoveEffect(FALSE, 0); } static void Cmd_clearstatusfromeffect(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT) gBattleMons[gActiveBattler].status1 &= (~sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]); @@ -3707,52 +3810,53 @@ static void Cmd_clearstatusfromeffect(void) gBattleMons[gActiveBattler].status2 &= (~sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]); gBattleScripting.moveEffect = 0; - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleScripting.multihitMoveEffect = 0; } static void Cmd_tryfaintmon(void) { - const u8 *BS_ptr; + CMD_ARGS(u8 battler, bool8 isSpikes, const u8 *instr); + const u8 *instr; - if (gBattlescriptCurrInstr[2] != 0) + if (cmd->isSpikes != 0) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (gHitMarker & HITMARKER_FAINTED(gActiveBattler)) { - BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + instr = cmd->instr; BattleScriptPop(); - gBattlescriptCurrInstr = BS_ptr; + gBattlescriptCurrInstr = instr; gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED | SIDE_STATUS_TOXIC_SPIKES_DAMAGED | SIDE_STATUS_STEALTH_ROCK_DAMAGED | SIDE_STATUS_STICKY_WEB_DAMAGED); } else { - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } } else { u8 battlerId; - if (gBattlescriptCurrInstr[1] == BS_ATTACKER) + if (cmd->battler == BS_ATTACKER) { gActiveBattler = gBattlerAttacker; battlerId = gBattlerTarget; - BS_ptr = BattleScript_FaintAttacker; + instr = BattleScript_FaintAttacker; } else { gActiveBattler = gBattlerTarget; battlerId = gBattlerAttacker; - BS_ptr = BattleScript_FaintTarget; + instr = BattleScript_FaintTarget; } if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler]) && gBattleMons[gActiveBattler].hp == 0) { gHitMarker |= HITMARKER_FAINTED(gActiveBattler); - BattleScriptPush(gBattlescriptCurrInstr + 7); - gBattlescriptCurrInstr = BS_ptr; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = instr; if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { gHitMarker |= HITMARKER_PLAYER_FAINTED; @@ -3795,27 +3899,31 @@ static void Cmd_tryfaintmon(void) } else { - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } } } static void Cmd_dofaintanimation(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags == 0) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitFaintAnimation(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_cleareffectsonfaint(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags == 0) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || gBattleMons[gActiveBattler].hp == 0) { @@ -3825,44 +3933,50 @@ static void Cmd_cleareffectsonfaint(void) } FaintClearSetData(); // Effects like attractions, trapping, etc. - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } 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); + CMD_ARGS(u8 battler, u32 flags, const u8 *jumpInstr); + + u8 battlerId = GetBattlerForBattleScript(cmd->battler); + u32 flags = cmd->flags; + const u8 *jumpInstr = cmd->jumpInstr; if (gBattleMons[battlerId].status1 & flags && gBattleMons[battlerId].hp != 0) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } 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); + CMD_ARGS(u8 battler, u32 flags, const u8 *jumpInstr); + + u8 battlerId = GetBattlerForBattleScript(cmd->battler); + u32 flags = cmd->flags; + const u8 *jumpInstr = cmd->jumpInstr; if (gBattleMons[battlerId].status2 & flags && gBattleMons[battlerId].hp != 0) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifability(void) { + CMD_ARGS(u8 battler, u16 ability, const u8 *jumpInstr); + u32 battlerId; bool32 hasAbility = FALSE; - u32 ability = T2_READ_16(gBattlescriptCurrInstr + 2); + u32 ability = cmd->ability; - switch (gBattlescriptCurrInstr[1]) + switch (cmd->battler) { default: - battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + battlerId = GetBattlerForBattleScript(cmd->battler); if (GetBattlerAbility(battlerId) == ability) hasAbility = TRUE; break; @@ -3887,103 +4001,113 @@ static void Cmd_jumpifability(void) if (hasAbility) { gLastUsedAbility = ability; - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 4); + gBattlescriptCurrInstr = cmd->jumpInstr; RecordAbilityBattle(battlerId, gLastUsedAbility); gBattlerAbility = battlerId; } else { - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpifsideaffecting(void) { + CMD_ARGS(u8 battler, u32 flags, const u8 *jumpInstr); + u8 side; u32 flags; - const u8 *jumpPtr; + const u8 *jumpInstr; - if (gBattlescriptCurrInstr[1] == BS_ATTACKER) + if (cmd->battler == BS_ATTACKER) side = GET_BATTLER_SIDE(gBattlerAttacker); else side = GET_BATTLER_SIDE(gBattlerTarget); - flags = T2_READ_32(gBattlescriptCurrInstr + 2); - jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); + flags = cmd->flags; + jumpInstr = cmd->jumpInstr; if (gSideStatuses[side] & flags) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifstat(void) { + CMD_ARGS(u8 battler, u8 comparison, u8 stat, u8 value, const u8 *jumpInstr); + bool32 ret = 0; - u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - u8 statId = gBattlescriptCurrInstr[3]; - u8 cmpTo = gBattlescriptCurrInstr[4]; - u8 cmpKind = gBattlescriptCurrInstr[2]; + u8 battlerId = GetBattlerForBattleScript(cmd->battler); + u8 stat = cmd->stat; + u8 value = cmd->value; + u8 comparison = cmd->comparison; - ret = CompareStat(battlerId, statId, cmpTo, cmpKind); + ret = CompareStat(battlerId, stat, value, comparison); if (ret) - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 9; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifstatus3condition(void) { - u32 status; - const u8 *jumpPtr; + CMD_ARGS(u8 battler, u32 flags, bool8 jumpIfTrue, const u8 *jumpInstr); + + u32 flags; + const u8 *jumpInstr; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - status = T2_READ_32(gBattlescriptCurrInstr + 2); - jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); + flags = cmd->flags; + jumpInstr = cmd->jumpInstr; - if (gBattlescriptCurrInstr[6]) + if (cmd->jumpIfTrue) { - if ((gStatuses3[gActiveBattler] & status) != 0) - gBattlescriptCurrInstr += 11; + if ((gStatuses3[gActiveBattler] & flags) != 0) + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; } else { - if ((gStatuses3[gActiveBattler] & status) != 0) - gBattlescriptCurrInstr = jumpPtr; + if ((gStatuses3[gActiveBattler] & flags) != 0) + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 11; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpbasedontype(void) { - u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - u8 type = gBattlescriptCurrInstr[2]; - const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 4); + CMD_ARGS(u8 battler, u8 type, u8 jumpIfType, const u8 *jumpInstr); + + u8 battlerId = GetBattlerForBattleScript(cmd->battler); + u8 type = cmd->type; + const u8 *jumpInstr = cmd->jumpInstr; // jumpiftype - if (gBattlescriptCurrInstr[3]) + if (cmd->jumpIfType) { if (IS_BATTLER_OF_TYPE(battlerId, type)) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; } // jumpifnottype else { if (!IS_BATTLER_OF_TYPE(battlerId, type)) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_getexp(void) { + CMD_ARGS(u8 battler); + u16 item; s32 i; // also used as stringId u8 holdEffect; @@ -3991,7 +4115,7 @@ static void Cmd_getexp(void) s32 viaExpShare = 0; u32 *exp = &gBattleStruct->expValue; - gBattlerFainted = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gBattlerFainted = GetBattlerForBattleScript(cmd->battler); sentIn = gSentPokesToOpponent[(gBattlerFainted & 2) >> 1]; switch (gBattleScripting.getexpState) @@ -4023,6 +4147,8 @@ static void Cmd_getexp(void) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) continue; + if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + continue; if (gBitTable[i] & sentIn) viaSentIn++; @@ -4037,9 +4163,9 @@ static void Cmd_getexp(void) viaExpShare++; } #if (B_SCALED_EXP >= GEN_5) && (B_SCALED_EXP != GEN_6) - calculatedExp = gBaseStats[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 5; + calculatedExp = gSpeciesInfo[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 5; #else - calculatedExp = gBaseStats[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7; + calculatedExp = gSpeciesInfo[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7; #endif #if B_SPLIT_EXP < GEN_6 @@ -4112,7 +4238,8 @@ static void Cmd_getexp(void) gBattleStruct->wildVictorySong++; } - if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP)) + if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP) + && !GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_IS_EGG)) { if (gBattleStruct->sentInPokes & 1) gBattleMoveDamage = *exp; @@ -4286,7 +4413,7 @@ static void Cmd_getexp(void) // not sure why gf clears the item and ability here gBattleMons[gBattlerFainted].item = ITEM_NONE; gBattleMons[gBattlerFainted].ability = ABILITY_NONE; - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } break; } @@ -4372,6 +4499,8 @@ bool32 NoAliveMonsForEitherParty(void) // sets gBattleOutcome accordingly, if necessary. static void Cmd_checkteamslost(void) { + CMD_ARGS(const u8 *jumpInstr); + if (gBattleControllerExecFlags) return; @@ -4416,21 +4545,21 @@ static void Cmd_checkteamslost(void) if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (emptyOpponentSpots + emptyPlayerSpots > 1) - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { if (emptyOpponentSpots != 0 && emptyPlayerSpots != 0) - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } else { - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -4446,315 +4575,361 @@ static void MoveValuesCleanUp(void) static void Cmd_movevaluescleanup(void) { + CMD_ARGS(); + MoveValuesCleanUp(); - gBattlescriptCurrInstr += 1; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setmultihit(void) { - gMultiHitCounter = gBattlescriptCurrInstr[1]; - gBattlescriptCurrInstr += 2; + CMD_ARGS(u8 value); + + gMultiHitCounter = cmd->value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_decrementmultihit(void) { + CMD_ARGS(const u8 *loopInstr); + if (--gMultiHitCounter == 0) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->loopInstr; } static void Cmd_goto(void) { - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *instr); + + gBattlescriptCurrInstr = cmd->instr; } static void Cmd_jumpifbyte(void) { - u8 caseID = gBattlescriptCurrInstr[1]; - const u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2); - u8 value = gBattlescriptCurrInstr[6]; - const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7); + CMD_ARGS(u8 comparison, const u8 *bytePtr, u8 value, const u8 *jumpInstr); + + u8 comparison = cmd->comparison; + const u8 *bytePtr = cmd->bytePtr; + u8 value = cmd->value; + const u8 *jumpInstr = cmd->jumpInstr; - gBattlescriptCurrInstr += 11; + gBattlescriptCurrInstr = cmd->nextInstr; - switch (caseID) + switch (comparison) { case CMP_EQUAL: - if (*memByte == value) - gBattlescriptCurrInstr = jumpPtr; + if (*bytePtr == value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_NOT_EQUAL: - if (*memByte != value) - gBattlescriptCurrInstr = jumpPtr; + if (*bytePtr != value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_GREATER_THAN: - if (*memByte > value) - gBattlescriptCurrInstr = jumpPtr; + if (*bytePtr > value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_LESS_THAN: - if (*memByte < value) - gBattlescriptCurrInstr = jumpPtr; + if (*bytePtr < value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_COMMON_BITS: - if (*memByte & value) - gBattlescriptCurrInstr = jumpPtr; + if (*bytePtr & value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_NO_COMMON_BITS: - if (!(*memByte & value)) - gBattlescriptCurrInstr = jumpPtr; + if (!(*bytePtr & value)) + gBattlescriptCurrInstr = jumpInstr; break; } } static void Cmd_jumpifhalfword(void) { - u8 caseID = gBattlescriptCurrInstr[1]; - const u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2); - u16 value = T2_READ_16(gBattlescriptCurrInstr + 6); - const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 8); + CMD_ARGS(u8 comparison, const u16 *halfwordPtr, u16 value, const u8 *jumpInstr); - gBattlescriptCurrInstr += 12; + u8 comparison = cmd->comparison; + const u16 *halfwordPtr = cmd->halfwordPtr; + u16 value = cmd->value; + const u8 *jumpInstr = cmd->jumpInstr; - switch (caseID) + gBattlescriptCurrInstr = cmd->nextInstr; + + switch (comparison) { case CMP_EQUAL: - if (*memHword == value) - gBattlescriptCurrInstr = jumpPtr; + if (*halfwordPtr == value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_NOT_EQUAL: - if (*memHword != value) - gBattlescriptCurrInstr = jumpPtr; + if (*halfwordPtr != value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_GREATER_THAN: - if (*memHword > value) - gBattlescriptCurrInstr = jumpPtr; + if (*halfwordPtr > value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_LESS_THAN: - if (*memHword < value) - gBattlescriptCurrInstr = jumpPtr; + if (*halfwordPtr < value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_COMMON_BITS: - if (*memHword & value) - gBattlescriptCurrInstr = jumpPtr; + if (*halfwordPtr & value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_NO_COMMON_BITS: - if (!(*memHword & value)) - gBattlescriptCurrInstr = jumpPtr; + if (!(*halfwordPtr & value)) + gBattlescriptCurrInstr = jumpInstr; break; } } static void Cmd_jumpifword(void) { - u8 caseID = gBattlescriptCurrInstr[1]; - const u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2); - u32 value = T1_READ_32(gBattlescriptCurrInstr + 6); - const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); + CMD_ARGS(u8 comparison, const u32 *wordPtr, u32 value, const u8 *jumpInstr); + + u8 comparison = cmd->comparison; + const u32 *wordPtr = cmd->wordPtr; + u32 value = cmd->value; + const u8 *jumpInstr = cmd->jumpInstr; - gBattlescriptCurrInstr += 14; + gBattlescriptCurrInstr = cmd->nextInstr; - switch (caseID) + switch (comparison) { case CMP_EQUAL: - if (*memWord == value) - gBattlescriptCurrInstr = jumpPtr; + if (*wordPtr == value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_NOT_EQUAL: - if (*memWord != value) - gBattlescriptCurrInstr = jumpPtr; + if (*wordPtr != value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_GREATER_THAN: - if (*memWord > value) - gBattlescriptCurrInstr = jumpPtr; + if (*wordPtr > value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_LESS_THAN: - if (*memWord < value) - gBattlescriptCurrInstr = jumpPtr; + if (*wordPtr < value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_COMMON_BITS: - if (*memWord & value) - gBattlescriptCurrInstr = jumpPtr; + if (*wordPtr & value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_NO_COMMON_BITS: - if (!(*memWord & value)) - gBattlescriptCurrInstr = jumpPtr; + if (!(*wordPtr & value)) + gBattlescriptCurrInstr = jumpInstr; break; } } static void Cmd_jumpifarrayequal(void) { - 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); + CMD_ARGS(const u8 *array1, const u8 *array2, u8 size, const u8 *jumpInstr); + + const u8 *array1 = cmd->array1; + const u8 *array2 = cmd->array2; + u32 size = cmd->size; + const u8 *jumpInstr = cmd->jumpInstr; u8 i; for (i = 0; i < size; i++) { - if (*mem1 != *mem2) + if (*array1 != *array2) { - gBattlescriptCurrInstr += 14; + gBattlescriptCurrInstr = cmd->nextInstr; break; } - mem1++, mem2++; + array1++, array2++; } if (i == size) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; } static void Cmd_jumpifarraynotequal(void) { + CMD_ARGS(const u8 *array1, const u8 *array2, u8 size, const u8 *jumpInstr); + u8 equalBytes = 0; - 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 *array1 = cmd->array1; + const u8 *array2 = cmd->array2; + u32 size = cmd->size; + const u8 *jumpInstr = cmd->jumpInstr; u8 i; for (i = 0; i < size; i++) { - if (*mem1 == *mem2) + if (*array1 == *array2) equalBytes++; - mem1++, mem2++; + array1++, array2++; } if (equalBytes != size) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 14; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setbyte(void) { - u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); - *memByte = gBattlescriptCurrInstr[5]; + CMD_ARGS(u8 *bytePtr, u8 value); - gBattlescriptCurrInstr += 6; + u8 *bytePtr = cmd->bytePtr; + *bytePtr = cmd->value; + + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_addbyte(void) { - u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); - *memByte += gBattlescriptCurrInstr[5]; - gBattlescriptCurrInstr += 6; + CMD_ARGS(u8 *bytePtr, u8 value); + + u8 *bytePtr = cmd->bytePtr; + *bytePtr += cmd->value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_subbyte(void) { - u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); - *memByte -= gBattlescriptCurrInstr[5]; - gBattlescriptCurrInstr += 6; + CMD_ARGS(u8 *bytePtr, u8 value); + + u8 *bytePtr = cmd->bytePtr; + *bytePtr -= cmd->value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_copyarray(void) { - u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1); - const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5); - s32 size = gBattlescriptCurrInstr[9]; + CMD_ARGS(u8 *dest, const u8 *src, u8 size); + + u8 *dest = cmd->dest; + const u8 *src = cmd->src; + s32 size = cmd->size; s32 i; for (i = 0; i < size; i++) dest[i] = src[i]; - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } 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); - s32 size = gBattlescriptCurrInstr[13]; + CMD_ARGS(u8 *dest, const u8 *src, const u8 *indexPtr, u8 size); + + u8 *dest = cmd->dest; + const u8 *src = cmd->src; + const u8 *indexPtr = cmd->indexPtr; + s32 size = cmd->size; s32 i; for (i = 0; i < size; i++) - dest[i] = src[i + *index]; + dest[i] = src[i + *indexPtr]; - gBattlescriptCurrInstr += 14; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_orbyte(void) { - u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); - *memByte |= gBattlescriptCurrInstr[5]; - gBattlescriptCurrInstr += 6; + CMD_ARGS(u8 *bytePtr, u8 value); + + u8 *bytePtr = cmd->bytePtr; + *bytePtr |= cmd->value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_orhalfword(void) { - u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1); - u16 val = T2_READ_16(gBattlescriptCurrInstr + 5); + CMD_ARGS(u16 *halfwordPtr, u16 value); - *memHword |= val; - gBattlescriptCurrInstr += 7; + u16 *halfwordPtr = cmd->halfwordPtr; + u16 value = cmd->value; + + *halfwordPtr |= value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_orword(void) { - u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1); - u32 val = T2_READ_32(gBattlescriptCurrInstr + 5); + CMD_ARGS(u32 *wordPtr, u32 value); + + u32 *wordPtr = cmd->wordPtr; + u32 value = cmd->value; - *memWord |= val; - gBattlescriptCurrInstr += 9; + *wordPtr |= value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_bicbyte(void) { - u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); - *memByte &= ~(gBattlescriptCurrInstr[5]); - gBattlescriptCurrInstr += 6; + CMD_ARGS(u8 *bytePtr, u8 value); + + u8 *bytePtr = cmd->bytePtr; + *bytePtr &= ~cmd->value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_bichalfword(void) { - u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1); - u16 val = T2_READ_16(gBattlescriptCurrInstr + 5); + CMD_ARGS(u16 *halfwordPtr, u16 value); + + u16 *halfwordPtr = cmd->halfwordPtr; + u16 value = cmd->value; - *memHword &= ~val; - gBattlescriptCurrInstr += 7; + *halfwordPtr &= ~value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_bicword(void) { - u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1); - u32 val = T2_READ_32(gBattlescriptCurrInstr + 5); + CMD_ARGS(u32 *wordPtr, u32 value); - *memWord &= ~val; - gBattlescriptCurrInstr += 9; + u32 *wordPtr = cmd->wordPtr; + u32 value = cmd->value; + + *wordPtr &= ~value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_pause(void) { + CMD_ARGS(u16 frames); + if (gBattleControllerExecFlags == 0) { - u16 value = T2_READ_16(gBattlescriptCurrInstr + 1); + u16 value = cmd->frames; if (++gPauseCounterBattle >= value) { gPauseCounterBattle = 0; - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } } } static void Cmd_waitstate(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags == 0) - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_healthbar_update(void) { - if (gBattlescriptCurrInstr[1] == BS_TARGET) + CMD_ARGS(u8 battler); + + if (cmd->battler == BS_TARGET) gActiveBattler = gBattlerTarget; else gActiveBattler = gBattlerAttacker; BtlController_EmitHealthBarUpdate(BUFFER_A, gBattleMoveDamage); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_return(void) @@ -4764,6 +4939,8 @@ static void Cmd_return(void) static void Cmd_end(void) { + CMD_ARGS(); + if (gBattleTypeFlags & BATTLE_TYPE_ARENA) BattleArena_AddSkillPoints(gBattlerAttacker); @@ -4774,6 +4951,8 @@ static void Cmd_end(void) static void Cmd_end2(void) { + CMD_ARGS(); + gActiveBattler = 0; gCurrentActionFuncId = B_ACTION_TRY_FINISH; } @@ -4781,6 +4960,8 @@ static void Cmd_end2(void) // Pops the main function stack static void Cmd_end3(void) { + CMD_ARGS(); + BattleScriptPop(); if (gBattleResources->battleCallbackStack->size != 0) gBattleResources->battleCallbackStack->size--; @@ -4789,12 +4970,16 @@ static void Cmd_end3(void) static void Cmd_call(void) { - BattleScriptPush(gBattlescriptCurrInstr + 5); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *instr); + + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = cmd->instr; } static void Cmd_setroost(void) { + CMD_ARGS(); + gBattleResources->flags->flags[gBattlerAttacker] |= RESOURCE_FLAG_ROOST; // Pure flying type. @@ -4802,56 +4987,64 @@ static void Cmd_setroost(void) { gBattleStruct->roostTypes[gBattlerAttacker][0] = TYPE_FLYING; gBattleStruct->roostTypes[gBattlerAttacker][1] = TYPE_FLYING; - gBattleStruct->roostTypes[gBattlerAttacker][2] = TYPE_FLYING; +#if B_ROOST_PURE_FLYING >= GEN_5 SET_BATTLER_TYPE(gBattlerAttacker, TYPE_NORMAL); +#else + SET_BATTLER_TYPE(gBattlerAttacker, TYPE_MYSTERY); +#endif } - // Dual Type with Flying Type. - else if ((gBattleMons[gBattlerAttacker].type1 == TYPE_FLYING && gBattleMons[gBattlerAttacker].type2 != TYPE_FLYING) - ||(gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING && gBattleMons[gBattlerAttacker].type1 != TYPE_FLYING)) + // Dual type with flying type. + else if (gBattleMons[gBattlerAttacker].type1 == TYPE_FLYING || gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING) { gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].type1; gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].type2; if (gBattleMons[gBattlerAttacker].type1 == TYPE_FLYING) gBattleMons[gBattlerAttacker].type1 = TYPE_MYSTERY; - if (gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING) + else if (gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING) gBattleMons[gBattlerAttacker].type2 = TYPE_MYSTERY; } // Non-flying type. - else if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FLYING)) + else { gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].type1; gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].type2; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifabilitypresent(void) { - if (IsAbilityOnField(T1_READ_16(gBattlescriptCurrInstr + 1))) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + CMD_ARGS(u16 ability, const u8 *jumpInstr); + + if (IsAbilityOnField(cmd->ability)) + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_endselectionscript(void) { + CMD_ARGS(); + *(gBattlerAttacker + gBattleStruct->selectionScriptFinished) = TRUE; } static void Cmd_playanimation(void) { - const u16 *argumentPtr; - u8 animId = gBattlescriptCurrInstr[2]; + CMD_ARGS(u8 battler, u8 animId, const u16 *argPtr); + + const u16 *argPtr; + u8 animId = cmd->animId; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); + argPtr = cmd->argPtr; #if B_TERRAIN_BG_CHANGE == FALSE if (animId == B_ANIM_RESTORE_BG) { // workaround for .if not working - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; } #endif @@ -4864,13 +5057,13 @@ static void Cmd_playanimation(void) || animId == B_ANIM_SUBSTITUTE_FADE || animId == B_ANIM_PRIMAL_REVERSION) { - BtlController_EmitBattleAnimation(BUFFER_A, animId, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, animId, *argPtr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gHitMarker & HITMARKER_NO_ANIMATIONS && animId != B_ANIM_RESTORE_BG) { - BattleScriptPush(gBattlescriptCurrInstr + 7); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_Pausex20; } else if (animId == B_ANIM_RAIN_CONTINUES @@ -4878,71 +5071,75 @@ static void Cmd_playanimation(void) || animId == B_ANIM_SANDSTORM_CONTINUES || animId == B_ANIM_HAIL_CONTINUES) { - BtlController_EmitBattleAnimation(BUFFER_A, animId, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, animId, *argPtr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) { - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - BtlController_EmitBattleAnimation(BUFFER_A, animId, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, animId, *argPtr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } } // 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; + CMD_ARGS(u8 battler, const u8 *animIdPtr, const u16 *argPtr); + + const u16 *argPtr; + const u8 *animIdPtr; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - animationIdPtr = T2_READ_PTR(gBattlescriptCurrInstr + 2); - argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); + animIdPtr = cmd->animIdPtr; + argPtr = cmd->argPtr; - if (*animationIdPtr == B_ANIM_STATS_CHANGE - || *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) + if (*animIdPtr == B_ANIM_STATS_CHANGE + || *animIdPtr == B_ANIM_SNATCH_MOVE + || *animIdPtr == B_ANIM_MEGA_EVOLUTION + || *animIdPtr == B_ANIM_ILLUSION_OFF + || *animIdPtr == B_ANIM_FORM_CHANGE + || *animIdPtr == B_ANIM_SUBSTITUTE_FADE + || *animIdPtr == B_ANIM_PRIMAL_REVERSION) { - BtlController_EmitBattleAnimation(BUFFER_A, *animationIdPtr, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, *animIdPtr, *argPtr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gHitMarker & HITMARKER_NO_ANIMATIONS) { - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } - else if (*animationIdPtr == B_ANIM_RAIN_CONTINUES - || *animationIdPtr == B_ANIM_SUN_CONTINUES - || *animationIdPtr == B_ANIM_SANDSTORM_CONTINUES - || *animationIdPtr == B_ANIM_HAIL_CONTINUES) + else if (*animIdPtr == B_ANIM_RAIN_CONTINUES + || *animIdPtr == B_ANIM_SUN_CONTINUES + || *animIdPtr == B_ANIM_SANDSTORM_CONTINUES + || *animIdPtr == B_ANIM_HAIL_CONTINUES) { - BtlController_EmitBattleAnimation(BUFFER_A, *animationIdPtr, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, *animIdPtr, *argPtr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) { - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - BtlController_EmitBattleAnimation(BUFFER_A, *animationIdPtr, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, *animIdPtr, *argPtr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setgraphicalstatchangevalues(void) { + CMD_ARGS(); + u8 value = GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger); switch (value) @@ -4974,22 +5171,24 @@ static void Cmd_setgraphicalstatchangevalues(void) } gBattleScripting.animArg1 = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1; gBattleScripting.animArg2 = 0; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_playstatchangeanimation(void) { + CMD_ARGS(u8 battler, u8 stats, u8 flags); + u32 ability; u32 currStat = 0; u32 statAnimId = 0; u32 changeableStatsCount = 0; - u32 statsToCheck = 0; + u32 stats = 0; u32 startingStatAnimId = 0; - u32 flags = gBattlescriptCurrInstr[3]; + u32 flags = cmd->flags; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); ability = GetBattlerAbility(gActiveBattler); - statsToCheck = gBattlescriptCurrInstr[2]; + stats = cmd->stats; // Handle Contrary and Simple if (ability == ABILITY_CONTRARY) @@ -5004,9 +5203,9 @@ static void Cmd_playstatchangeanimation(void) else startingStatAnimId = STAT_ANIM_MINUS1 - 1; - while (statsToCheck != 0) + while (stats != 0) { - if (statsToCheck & 1) + if (stats & 1) { if (flags & STAT_CHANGE_CANT_PREVENT) { @@ -5017,6 +5216,7 @@ static void Cmd_playstatchangeanimation(void) } } else if (!gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer + && GetBattlerHoldEffect(gActiveBattler, TRUE) != HOLD_EFFECT_CLEAR_AMULET && ability != ABILITY_CLEAR_BODY && ability != ABILITY_FULL_METAL_BODY && ability != ABILITY_WHITE_SMOKE @@ -5031,7 +5231,7 @@ static void Cmd_playstatchangeanimation(void) } } } - statsToCheck >>= 1, currStat++; + stats >>= 1, currStat++; } if (changeableStatsCount > 1) // more than one stat, so the color is gray @@ -5049,14 +5249,14 @@ static void Cmd_playstatchangeanimation(void) else startingStatAnimId = STAT_ANIM_PLUS1 - 1; - while (statsToCheck != 0) + while (stats != 0) { - if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < MAX_STAT_STAGE) + if (stats & 1 && gBattleMons[gActiveBattler].statStages[currStat] < MAX_STAT_STAGE) { statAnimId = startingStatAnimId + currStat; changeableStatsCount++; } - statsToCheck >>= 1, currStat++; + stats >>= 1, currStat++; } if (changeableStatsCount > 1) // more than one stat, so the color is gray @@ -5070,7 +5270,7 @@ static void Cmd_playstatchangeanimation(void) if (flags & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount < 2) { - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (changeableStatsCount != 0 && !gBattleScripting.statAnimPlayed) { @@ -5078,11 +5278,11 @@ static void Cmd_playstatchangeanimation(void) MarkBattlerForControllerExec(gActiveBattler); if (flags & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount > 1) gBattleScripting.statAnimPlayed = TRUE; - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -5141,6 +5341,8 @@ static u32 GetNextTarget(u32 moveTarget) static void Cmd_moveend(void) { + CMD_ARGS(u8 endMode, u8 endState); + s32 i; bool32 effect = FALSE; u32 moveType = 0; @@ -5154,8 +5356,8 @@ static void Cmd_moveend(void) else originallyUsedMove = gChosenMove; - endMode = gBattlescriptCurrInstr[1]; - endState = gBattlescriptCurrInstr[2]; + endMode = cmd->endMode; + endState = cmd->endState; holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); choicedMoveAtk = &gBattleStruct->choicedMove[gBattlerAttacker]; @@ -5218,6 +5420,17 @@ static void Cmd_moveend(void) gBattlescriptCurrInstr = BattleScript_KingsShieldEffect; effect = 1; } + else if (gProtectStructs[gBattlerTarget].silkTrapped) + { + 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_SPD_MINUS_1; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_KingsShieldEffect; + effect = 1; + } // Not strictly a protect effect, but works the same way else if (gProtectStructs[gBattlerTarget].beakBlastCharge && CanBeBurned(gBattlerAttacker) @@ -5254,8 +5467,12 @@ static void Cmd_moveend(void) && gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget && gSpecialStatuses[gBattlerTarget].specialDmg - && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && (moveType == TYPE_FIRE || gBattleMoves[gCurrentMove].effect == EFFECT_SCALD)) + && (moveType == TYPE_FIRE + #if B_BURN_HIT_THAW >= GEN_6 + || gBattleMoves[gCurrentMove].effect == EFFECT_BURN_HIT + #endif + ) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FREEZE; gActiveBattler = gBattlerTarget; @@ -5382,7 +5599,7 @@ static void Cmd_moveend(void) gStatuses3[gBattlerTarget] |= STATUS3_SMACKED_DOWN; gStatuses3[gBattlerTarget] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR); effect = TRUE; - BattleScriptPush(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr); gBattlescriptCurrInstr = BattleScript_MoveEffectSmackDown; } break; @@ -5395,7 +5612,7 @@ static void Cmd_moveend(void) BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); effect = TRUE; - BattleScriptPush(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr); switch (gBattleMoves[gCurrentMove].argument) { case STATUS1_PARALYSIS: @@ -5718,8 +5935,7 @@ static void Cmd_moveend(void) break; } case MOVEEND_EJECT_BUTTON: - if (gCurrentMove != MOVE_DRAGON_TAIL - && gCurrentMove != MOVE_CIRCLE_THROW + if (gBattleMoves[gCurrentMove].effect != EFFECT_HIT_SWITCH_TARGET && IsBattlerAlive(gBattlerAttacker) && !TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER || (gBattleTypeFlags & BATTLE_TYPE_TRAINER))) @@ -5752,10 +5968,10 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_RED_CARD: - if (gCurrentMove != MOVE_DRAGON_TAIL - && gCurrentMove != MOVE_CIRCLE_THROW + if (gBattleMoves[gCurrentMove].effect != EFFECT_HIT_SWITCH_TARGET && IsBattlerAlive(gBattlerAttacker) - && !TestSheerForceFlag(gBattlerAttacker, gCurrentMove)) + && !TestSheerForceFlag(gBattlerAttacker, gCurrentMove) + && GetBattlerAbility(gBattlerAttacker) != ABILITY_GUARD_DOG) { // 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 @@ -5891,6 +6107,7 @@ static void Cmd_moveend(void) if (gBattleResources->flags->flags[i] & RESOURCE_FLAG_EMERGENCY_EXIT) { gBattleResources->flags->flags[i] &= ~RESOURCE_FLAG_EMERGENCY_EXIT; + gSpecialStatuses[i].emergencyExited = TRUE; gBattlerTarget = gBattlerAbility = i; BattleScriptPushCursor(); if (gBattleTypeFlags & BATTLE_TYPE_TRAINER || GetBattlerSide(i) == B_SIDE_PLAYER) @@ -5996,51 +6213,59 @@ static void Cmd_moveend(void) } while (gBattleScripting.moveendState != MOVEEND_COUNT && effect == FALSE); if (gBattleScripting.moveendState == MOVEEND_COUNT && effect == FALSE) - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_sethealblock(void) { + CMD_ARGS(const u8 *failInstr); + if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gStatuses3[gBattlerTarget] |= STATUS3_HEAL_BLOCK; gDisableStructs[gBattlerTarget].healBlockTimer = 5; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_returnatktoball(void) { + CMD_ARGS(); + gActiveBattler = gBattlerAttacker; if (!(gHitMarker & HITMARKER_FAINTED(gActiveBattler))) { BtlController_EmitReturnMonToBall(BUFFER_A, FALSE); MarkBattlerForControllerExec(gActiveBattler); } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_getswitchedmondata(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); gBattlerPartyIndexes[gActiveBattler] = *(gBattleStruct->monToSwitchIntoId + gActiveBattler); BtlController_EmitGetMonData(BUFFER_A, REQUEST_ALL_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]]); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_switchindataupdate(void) { + CMD_ARGS(u8 battler); + struct BattlePokemon oldData; s32 i; u8 *monData; @@ -6048,15 +6273,15 @@ static void Cmd_switchindataupdate(void) if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); oldData = gBattleMons[gActiveBattler]; monData = (u8 *)(&gBattleMons[gActiveBattler]); for (i = 0; i < sizeof(struct BattlePokemon); 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].type1 = gSpeciesInfo[gBattleMons[gActiveBattler].species].types[0]; + gBattleMons[gActiveBattler].type2 = gSpeciesInfo[gBattleMons[gActiveBattler].species].types[1]; gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY; gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum); @@ -6090,15 +6315,17 @@ static void Cmd_switchindataupdate(void) PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler]); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_switchinanim(void) { + CMD_ARGS(u8 battler, bool8 dontClearSubstitute); + if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT && !(gBattleTypeFlags & (BATTLE_TYPE_LINK @@ -6110,10 +6337,10 @@ static void Cmd_switchinanim(void) gAbsentBattlerFlags &= ~(gBitTable[gActiveBattler]); - BtlController_EmitSwitchInAnim(BUFFER_A, gBattlerPartyIndexes[gActiveBattler], gBattlescriptCurrInstr[2]); + BtlController_EmitSwitchInAnim(BUFFER_A, gBattlerPartyIndexes[gActiveBattler], cmd->dontClearSubstitute); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; if (gBattleTypeFlags & BATTLE_TYPE_ARENA) BattleArena_InitPoints(); @@ -6270,19 +6497,20 @@ bool32 CanBattlerSwitch(u32 battlerId) static void Cmd_jumpifcantswitch(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~SWITCH_IGNORE_ESCAPE_PREVENTION); + CMD_ARGS(u8 battler:7, u8 ignoreEscapePrevention:1, const u8 *jumpInstr); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); - if (!(gBattlescriptCurrInstr[1] & SWITCH_IGNORE_ESCAPE_PREVENTION) - && !CanBattlerEscape(gActiveBattler)) + if (!cmd->ignoreEscapePrevention && !CanBattlerEscape(gActiveBattler)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = cmd->jumpInstr; } else { if (CanBattlerSwitch(gActiveBattler)) - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = cmd->jumpInstr; } } @@ -6301,16 +6529,18 @@ static void ChooseMonToSendOut(u8 slotId) static void Cmd_openpartyscreen(void) { + CMD_ARGS(u8 battler:7, u8 partyScreenOptional:1, const u8 *failInstr); + u32 flags; u8 hitmarkerFaintBits; u8 battlerId; - const u8 *jumpPtr; + const u8 *failInstr; battlerId = 0; flags = 0; - jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + failInstr = cmd->failInstr; - if (gBattlescriptCurrInstr[1] == BS_FAINTED_LINK_MULTIPLE_1) + if (cmd->battler == BS_FAINTED_LINK_MULTIPLE_1) { if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { @@ -6463,9 +6693,9 @@ static void Cmd_openpartyscreen(void) } } } - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } - else if (gBattlescriptCurrInstr[1] == BS_FAINTED_LINK_MULTIPLE_2) + else if (cmd->battler == BS_FAINTED_LINK_MULTIPLE_2) { if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { @@ -6504,18 +6734,18 @@ static void Cmd_openpartyscreen(void) gSpecialStatuses[gActiveBattler].faintedHasReplacement = TRUE; } } - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } else { // Not multi or double battle - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } } else { // Multi battle - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } hitmarkerFaintBits = gHitMarker >> 28; @@ -6526,26 +6756,26 @@ static void Cmd_openpartyscreen(void) gBattlerFainted++; if (gBattlerFainted == gBattlersCount) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = failInstr; } else { - if (gBattlescriptCurrInstr[1] & PARTY_SCREEN_OPTIONAL) + if (cmd->partyScreenOptional) hitmarkerFaintBits = PARTY_ACTION_CHOOSE_MON; // Used here as the caseId for the EmitChoose function. else hitmarkerFaintBits = PARTY_ACTION_SEND_OUT; - battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~PARTY_SCREEN_OPTIONAL); + battlerId = GetBattlerForBattleScript(cmd->battler); if (gSpecialStatuses[battlerId].faintedHasReplacement) { - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (HasNoMonsToSwitch(battlerId, PARTY_SIZE, PARTY_SIZE)) { gActiveBattler = battlerId; gAbsentBattlerFlags |= gBitTable[gActiveBattler]; gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = failInstr; } else { @@ -6557,7 +6787,7 @@ static void Cmd_openpartyscreen(void) BtlController_EmitChoosePokemon(BUFFER_A, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + BATTLE_PARTNER(gActiveBattler)), ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT && gBattleResults.playerSwitchesCounter < 255) gBattleResults.playerSwitchesCounter++; @@ -6588,13 +6818,15 @@ static void Cmd_openpartyscreen(void) static void Cmd_switchhandleorder(void) { + CMD_ARGS(u8 battler, u8 state); + s32 i; if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); - switch (gBattlescriptCurrInstr[2]) + switch (cmd->state) { case 0: for (i = 0; i < gBattlersCount; i++) @@ -6649,7 +6881,7 @@ static void Cmd_switchhandleorder(void) break; } - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } static void SetDmgHazardsBattlescript(u8 battlerId, u8 multistringId) @@ -6670,9 +6902,11 @@ static void SetDmgHazardsBattlescript(u8 battlerId, u8 multistringId) static void Cmd_switchineffects(void) { + CMD_ARGS(u8 battler); + s32 i; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); UpdateSentPokesToOpponentValue(gActiveBattler); gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); @@ -6733,6 +6967,7 @@ static void Cmd_switchineffects(void) if (!(gBattleMons[gActiveBattler].status1 & STATUS1_ANY) && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL) && GetBattlerAbility(gActiveBattler) != ABILITY_IMMUNITY + && !IsAbilityOnSide(gActiveBattler, ABILITY_PASTEL_VEIL) && !(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SAFEGUARD) && !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)) { @@ -6782,10 +7017,10 @@ static void Cmd_switchineffects(void) gDisableStructs[gActiveBattler].truantSwitchInHack = 0; 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_WEATHER_FORM, 0, 0, 0, 0)) + || (gBattleWeather & B_WEATHER_ANY && WEATHER_HAS_EFFECT && AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, gActiveBattler, 0, 0, 0)) + || (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY && AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, gActiveBattler, 0, 0, 0)) + || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE) + || AbilityBattleEffects(ABILITYEFFECT_TRACE2, 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); @@ -6798,7 +7033,7 @@ static void Cmd_switchineffects(void) gBattleStruct->hpOnSwitchout[GetBattlerSide(i)] = gBattleMons[i].hp; } - if (gBattlescriptCurrInstr[1] == BS_FAINTED_LINK_MULTIPLE_1) + if (cmd->battler == BS_FAINTED_LINK_MULTIPLE_1) { u32 hitmarkerFaintBits = gHitMarker >> 28; @@ -6812,70 +7047,84 @@ static void Cmd_switchineffects(void) gBattlerFainted++; } } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_trainerslidein(void) { - gActiveBattler = GetBattlerAtPosition(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerAtPosition(cmd->battler); BtlController_EmitTrainerSlide(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_playse(void) { + CMD_ARGS(u16 song); + gActiveBattler = gBattlerAttacker; - BtlController_EmitPlaySE(BUFFER_A, T2_READ_16(gBattlescriptCurrInstr + 1)); + BtlController_EmitPlaySE(BUFFER_A, cmd->song); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_fanfare(void) { + CMD_ARGS(u16 song); + gActiveBattler = gBattlerAttacker; - BtlController_EmitPlayFanfareOrBGM(BUFFER_A, T2_READ_16(gBattlescriptCurrInstr + 1), FALSE); + BtlController_EmitPlayFanfareOrBGM(BUFFER_A, cmd->song, FALSE); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_playfaintcry(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitFaintingCry(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_endlinkbattle(void) { + CMD_ARGS(); + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); BtlController_EmitEndLinkBattle(BUFFER_A, gBattleOutcome); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 1; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_returntoball(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitReturnMonToBall(BUFFER_A, TRUE); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_handlelearnnewmove(void) { - const u8 *learnedMovePtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); - const u8 *nothingToLearnPtr = T1_READ_PTR(gBattlescriptCurrInstr + 5); + CMD_ARGS(const u8 *learnedMovePtr, const u8 *nothingToLearnPtr, bool8 isFirstMove); + + const u8 *learnedMovePtr = cmd->learnedMovePtr; + const u8 *nothingToLearnPtr = cmd->nothingToLearnPtr; - u16 learnMove = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]); + u16 learnMove = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], cmd->isFirstMove); while (learnMove == MON_ALREADY_KNOWS_MOVE) learnMove = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], FALSE); @@ -6885,7 +7134,7 @@ static void Cmd_handlelearnnewmove(void) } else if (learnMove == MON_HAS_MAX_MOVES) { - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } else { @@ -6912,6 +7161,8 @@ static void Cmd_handlelearnnewmove(void) static void Cmd_yesnoboxlearnmove(void) { + CMD_ARGS(const u8 *forgotMovePtr); + gActiveBattler = 0; switch (gBattleScripting.learnMoveState) @@ -6990,7 +7241,7 @@ static void Cmd_yesnoboxlearnmove(void) } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->forgotMovePtr; PREPARE_MOVE_BUFFER(gBattleTextBuff2, moveId) @@ -7015,7 +7266,7 @@ static void Cmd_yesnoboxlearnmove(void) break; case 5: HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; break; case 6: if (gBattleControllerExecFlags == 0) @@ -7028,6 +7279,8 @@ static void Cmd_yesnoboxlearnmove(void) static void Cmd_yesnoboxstoplearningmove(void) { + CMD_ARGS(const u8 *noInstr); + switch (gBattleScripting.learnMoveState) { case 0: @@ -7057,16 +7310,16 @@ static void Cmd_yesnoboxstoplearningmove(void) PlaySE(SE_SELECT); if (gBattleCommunication[1] != 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->noInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->noInstr; HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); } break; @@ -7075,21 +7328,23 @@ static void Cmd_yesnoboxstoplearningmove(void) static void Cmd_hitanimation(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) { - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) || !(DoesSubstituteBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove)) || gDisableStructs[gActiveBattler].substituteHP == 0) { BtlController_EmitHitAnimation(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -7152,6 +7407,8 @@ static u32 GetTrainerMoneyToGive(u16 trainerId) static void Cmd_getmoneyreward(void) { + CMD_ARGS(); + u32 money; u8 sPartyLevel = 1; @@ -7184,13 +7441,15 @@ static void Cmd_getmoneyreward(void) } PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, money); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // Command is never used static void Cmd_updatebattlermoves(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); switch (gBattleCommunication[0]) { @@ -7209,7 +7468,7 @@ static void Cmd_updatebattlermoves(void) gBattleMons[gActiveBattler].moves[i] = bufferPoke->moves[i]; gBattleMons[gActiveBattler].pp[i] = bufferPoke->pp[i]; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } break; } @@ -7217,6 +7476,8 @@ static void Cmd_updatebattlermoves(void) static void Cmd_swapattackerwithtarget(void) { + CMD_ARGS(); + gActiveBattler = gBattlerAttacker; gBattlerAttacker = gBattlerTarget; gBattlerTarget = gActiveBattler; @@ -7226,19 +7487,23 @@ static void Cmd_swapattackerwithtarget(void) else gHitMarker |= HITMARKER_SWAP_ATTACKER_TARGET; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_incrementgamestat(void) { + CMD_ARGS(u8 stat); + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - IncrementGameStat(gBattlescriptCurrInstr[1]); + IncrementGameStat(cmd->stat); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_drawpartystatussummary(void) { + CMD_ARGS(u8 battler); + s32 i; struct Pokemon *party; struct HpAndStatus hpStatuses[PARTY_SIZE]; @@ -7246,7 +7511,7 @@ static void Cmd_drawpartystatussummary(void) if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) party = gPlayerParty; @@ -7271,21 +7536,25 @@ static void Cmd_drawpartystatussummary(void) BtlController_EmitDrawPartyStatusSummary(BUFFER_A, hpStatuses, 1); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_hidepartystatussummary(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitHidePartyStatusSummary(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumptocalledmove(void) { - if (gBattlescriptCurrInstr[1]) + CMD_ARGS(bool8 notChosenMove); + + if (cmd->notChosenMove) gCurrentMove = gCalledMove; else gChosenMove = gCurrentMove = gCalledMove; @@ -7295,9 +7564,11 @@ static void Cmd_jumptocalledmove(void) static void Cmd_statusanimation(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags == 0) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBattler].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) @@ -7305,18 +7576,20 @@ static void Cmd_statusanimation(void) BtlController_EmitStatusAnimation(BUFFER_A, FALSE, gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_status2animation(void) { + CMD_ARGS(u8 battler, u32 status2); + u32 wantedToAnimate; if (gBattleControllerExecFlags == 0) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - wantedToAnimate = T1_READ_32(gBattlescriptCurrInstr + 2); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); + wantedToAnimate = cmd->status2; if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBattler].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) @@ -7324,31 +7597,35 @@ static void Cmd_status2animation(void) BtlController_EmitStatusAnimation(BUFFER_A, TRUE, gBattleMons[gActiveBattler].status2 & wantedToAnimate); MarkBattlerForControllerExec(gActiveBattler); } - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_chosenstatusanimation(void) { + CMD_ARGS(u8 battler, bool8 isStatus2, u32 status); + u32 wantedStatus; if (gBattleControllerExecFlags == 0) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - wantedStatus = T1_READ_32(gBattlescriptCurrInstr + 3); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); + wantedStatus = cmd->status; if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBattler].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) { - BtlController_EmitStatusAnimation(BUFFER_A, gBattlescriptCurrInstr[2], wantedStatus); + BtlController_EmitStatusAnimation(BUFFER_A, cmd->isStatus2, wantedStatus); MarkBattlerForControllerExec(gActiveBattler); } - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_yesnobox(void) { + CMD_ARGS(); + switch (gBattleCommunication[0]) { case 0: @@ -7378,13 +7655,13 @@ static void Cmd_yesnobox(void) gBattleCommunication[CURSOR_POSITION] = 1; PlaySE(SE_SELECT); HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } break; } @@ -7392,25 +7669,29 @@ static void Cmd_yesnobox(void) static void Cmd_cancelallactions(void) { + CMD_ARGS(); + s32 i; for (i = 0; i < gBattlersCount; i++) gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setgravity(void) { + CMD_ARGS(const u8 *failInstr); + if (gFieldStatuses & STATUS_FIELD_GRAVITY) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gFieldStatuses |= STATUS_FIELD_GRAVITY; gFieldTimers.gravityTimer = 5; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -7479,16 +7760,18 @@ static bool32 TrySymbiosis(u32 battler, u32 itemId) static void Cmd_removeitem(void) { + CMD_ARGS(u8 battler); + u16 itemId = 0; if (gBattleScripting.overrideBerryRequirements) { // bug bite / pluck - don't remove current item - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; return; } - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); itemId = gBattleMons[gActiveBattler].item; // Popped Air Balloon cannot be restored by any means. @@ -7503,18 +7786,22 @@ static void Cmd_removeitem(void) ClearBattlerItemEffectHistory(gActiveBattler); if (!TryCheekPouch(gActiveBattler, itemId) && !TrySymbiosis(gActiveBattler, itemId)) - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_atknameinbuff1(void) { + CMD_ARGS(); + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_drawlvlupbox(void) { + CMD_ARGS(); + if (gBattleScripting.drawlvlupboxState == 0) { // If the Pokémon getting exp is not in-battle then @@ -7608,7 +7895,7 @@ static void Cmd_drawlvlupbox(void) SetBgAttribute(1, BG_ATTR_PRIORITY, 1); ShowBg(0); ShowBg(1); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } break; } @@ -7635,7 +7922,7 @@ static void InitLevelUpBanner(void) gBattle_BG2_Y = 0; gBattle_BG2_X = LEVEL_UP_BANNER_START; - LoadPalette(sLevelUpBanner_Pal, 0x60, 0x20); + LoadPalette(sLevelUpBanner_Pal, BG_PLTT_ID(6), PLTT_SIZE_4BPP); CopyToWindowPixelBuffer(B_WIN_LEVEL_UP_BANNER, sLevelUpBanner_Gfx, 0, 0); PutWindowTilemap(B_WIN_LEVEL_UP_BANNER); CopyWindowToVram(B_WIN_LEVEL_UP_BANNER, COPYWIN_FULL); @@ -7796,33 +8083,41 @@ static bool32 IsMonGettingExpSentOut(void) static void Cmd_resetsentmonsvalue(void) { + CMD_ARGS(); + ResetSentPokesToOpponentValue(); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setatktoplayer0(void) { + CMD_ARGS(); + gBattlerAttacker = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_makevisible(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitSpriteInvisibility(BUFFER_A, FALSE); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_recordability(void) { - u8 battler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + u8 battler = GetBattlerForBattleScript(cmd->battler); RecordAbilityBattle(battler, gBattleMons[battler].ability); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } void BufferMoveToLearnIntoBattleTextBuff2(void) @@ -7832,26 +8127,32 @@ void BufferMoveToLearnIntoBattleTextBuff2(void) static void Cmd_buffermovetolearn(void) { + CMD_ARGS(); + BufferMoveToLearnIntoBattleTextBuff2(); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifplayerran(void) { + CMD_ARGS(const u8 *jumpInstr); + if (TryRunFromBattle(gBattlerFainted)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_hpthresholds(void) { + CMD_ARGS(u8 battler); + u8 opposingBattler; s32 result; if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); opposingBattler = BATTLE_OPPOSITE(gActiveBattler); result = gBattleMons[opposingBattler].hp * 100 / gBattleMons[opposingBattler].maxHP; @@ -7868,18 +8169,20 @@ static void Cmd_hpthresholds(void) gBattleStruct->hpScale = 3; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_hpthresholds2(void) { + CMD_ARGS(u8 battler); + u8 opposingBattler; s32 result; u8 hpSwitchout; if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); opposingBattler = BATTLE_OPPOSITE(gActiveBattler); hpSwitchout = *(gBattleStruct->hpOnSwitchout + GetBattlerSide(opposingBattler)); result = (hpSwitchout - gBattleMons[opposingBattler].hp) * 100 / hpSwitchout; @@ -7894,14 +8197,16 @@ static void Cmd_hpthresholds2(void) gBattleStruct->hpScale = 3; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_useitemonopponent(void) { + CMD_ARGS(); + gBattlerInMenuId = gBattlerAttacker; PokemonUseItemEffects(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]], gLastUsedItem, gBattlerPartyIndexes[gBattlerAttacker], 0, TRUE); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static bool32 HasAttackerFaintedTarget(void) @@ -7921,35 +8226,34 @@ static bool32 HasAttackerFaintedTarget(void) 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; + statusFlag = STATUS_FIELD_MISTY_TERRAIN; gBattleCommunication[MULTISTRING_CHOOSER] = 0; break; case EFFECT_GRASSY_TERRAIN: - statusFlag = STATUS_FIELD_GRASSY_TERRAIN, timer = &gFieldTimers.terrainTimer; + statusFlag = STATUS_FIELD_GRASSY_TERRAIN; gBattleCommunication[MULTISTRING_CHOOSER] = 1; break; case EFFECT_ELECTRIC_TERRAIN: - statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN, timer = &gFieldTimers.terrainTimer; + statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN; gBattleCommunication[MULTISTRING_CHOOSER] = 2; break; case EFFECT_PSYCHIC_TERRAIN: - statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN, timer = &gFieldTimers.terrainTimer; + statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN; gBattleCommunication[MULTISTRING_CHOOSER] = 3; break; - case EFFECT_DAMAGE_SET_TERRAIN: + case EFFECT_HIT_SET_REMOVE_TERRAIN: switch (gBattleMoves[move].argument) { case 0: //genesis supernova - statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN, timer = &gFieldTimers.terrainTimer; + statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN; 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))) + if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) { //no terrain to remove -> jump to battle script pointer gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); @@ -7957,7 +8261,7 @@ static void HandleTerrainMove(u16 move) else { // remove all terrain - gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN); + gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; gBattleCommunication[MULTISTRING_CHOOSER] = 4; gBattlescriptCurrInstr += 7; } @@ -7977,9 +8281,9 @@ static void HandleTerrainMove(u16 move) gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; gFieldStatuses |= statusFlag; if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER) - *timer = 8; + gFieldTimers.terrainTimer = 8; else - *timer = 5; + gFieldTimers.terrainTimer = 5; gBattlescriptCurrInstr += 7; } } @@ -8095,11 +8399,11 @@ static void RecalcBattlerStats(u32 battler, struct Pokemon *mon) 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; + gBattleMons[battler].type1 = gSpeciesInfo[gBattleMons[battler].species].types[0]; + gBattleMons[battler].type2 = gSpeciesInfo[gBattleMons[battler].species].types[1]; } -static u32 GetHighestStatId(u32 battlerId) +u32 GetHighestStatId(u32 battlerId) { u32 i, highestId = STAT_ATK, highestStat = gBattleMons[battlerId].attack; @@ -8130,6 +8434,67 @@ static bool32 IsRototillerAffected(u32 battlerId) return TRUE; } + +static bool32 IsAbilityRodAffected(void) +{ + u32 moveType; + + if (gBattleStruct->dynamicMoveType == 0) + moveType = gBattleMoves[gCurrentMove].type; + else if (!(gBattleStruct->dynamicMoveType & 0x40)) + moveType = gBattleStruct->dynamicMoveType & 0x3F; + else + moveType = gBattleMoves[gCurrentMove].type; + + if (moveType == TYPE_ELECTRIC && GetBattlerAbility(gBattlerTarget) == ABILITY_LIGHTNING_ROD) + return TRUE; + else + return FALSE; +} + +static bool32 IsAbilityMotorAffected(void) +{ + u32 moveType; + + if (gBattleStruct->dynamicMoveType == 0) + moveType = gBattleMoves[gCurrentMove].type; + else if (!(gBattleStruct->dynamicMoveType & 0x40)) + moveType = gBattleStruct->dynamicMoveType & 0x3F; + else + moveType = gBattleMoves[gCurrentMove].type; + + if (moveType == TYPE_ELECTRIC && GetBattlerAbility(gBattlerTarget) == ABILITY_MOTOR_DRIVE) + return TRUE; + else + return FALSE; +} + +static bool32 IsAbilityAbsorbAffected(void) +{ + u32 moveType; + + if (gBattleStruct->dynamicMoveType == 0) + moveType = gBattleMoves[gCurrentMove].type; + else if (!(gBattleStruct->dynamicMoveType & 0x40)) + moveType = gBattleStruct->dynamicMoveType & 0x3F; + else + moveType = gBattleMoves[gCurrentMove].type; + + if (moveType == TYPE_ELECTRIC && GetBattlerAbility(gBattlerTarget) == ABILITY_VOLT_ABSORB) + return TRUE; + else + return FALSE; +} + +static bool32 IsTeatimeAffected(u32 battlerId) +{ + if (ItemId_GetPocket(gBattleMons[battlerId].item) != POCKET_BERRIES) + return FALSE; // Only berries + if (gStatuses3[battlerId] & STATUS3_SEMI_INVULNERABLE) + return FALSE; // Teatime doesn't affected semi-invulnerable battlers + return TRUE; +} + #define COURTCHANGE_SWAP(status, structField, temp) \ { \ temp = gSideStatuses[B_SIDE_PLAYER]; \ @@ -8220,6 +8585,8 @@ static bool32 CanTeleport(u8 battlerId) static void Cmd_various(void) { + CMD_ARGS(u8 battler, u8 id); + struct Pokemon *mon; s32 i, j; u8 data[10]; @@ -8228,88 +8595,125 @@ static void Cmd_various(void) if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); - switch (gBattlescriptCurrInstr[2]) + switch (cmd->id) { // 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: + { + VARIOUS_ARGS(const u8 *jumpInstr); 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); + gBattlescriptCurrInstr = cmd->jumpInstr; else if (WILD_DOUBLE_BATTLE && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_JUMP_IF_ABSENT: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (!IsBattlerAlive(gActiveBattler)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (IsShieldsDownProtected(gActiveBattler)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + { + gBattlerAbility = gActiveBattler; + gBattlescriptCurrInstr = cmd->jumpInstr; + } else - gBattlescriptCurrInstr += 7; + { + gBattlescriptCurrInstr = cmd->nextInstr; + } return; + } case VARIOUS_JUMP_IF_NO_HOLD_EFFECT: - if (GetBattlerHoldEffect(gActiveBattler, TRUE) != gBattlescriptCurrInstr[3]) + { + VARIOUS_ARGS(u8 holdEffect, const u8 *jumpInstr); + if (GetBattlerHoldEffect(gActiveBattler, TRUE) != cmd->holdEffect) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + gBattlescriptCurrInstr = cmd->jumpInstr; } else { gLastUsedItem = gBattleMons[gActiveBattler].item; // For B_LAST_USED_ITEM - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_JUMP_IF_NO_ALLY: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (!IsBattlerAlive(BATTLE_PARTNER(gActiveBattler))) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_INFATUATE_WITH_BATTLER: + { + VARIOUS_ARGS(u8 infatuateWith); gBattleScripting.battler = gActiveBattler; - gBattleMons[gActiveBattler].status2 |= STATUS2_INFATUATED_WITH(GetBattlerForBattleScript(gBattlescriptCurrInstr[3])); - gBattlescriptCurrInstr += 4; + gBattleMons[gActiveBattler].status2 |= STATUS2_INFATUATED_WITH(GetBattlerForBattleScript(cmd->infatuateWith)); + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_SET_LAST_USED_ITEM: + { + VARIOUS_ARGS(); gLastUsedItem = gBattleMons[gActiveBattler].item; break; + } case VARIOUS_TRY_FAIRY_LOCK: + { + VARIOUS_ARGS(const u8 *failInstr); if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gFieldStatuses |= STATUS_FIELD_FAIRY_LOCK; gFieldTimers.fairyLockTimer = 2; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_GET_STAT_VALUE: - i = gBattlescriptCurrInstr[3]; + { + VARIOUS_ARGS(u8 stat); + i = cmd->stat; gBattleMoveDamage = *(u16 *)(&gBattleMons[gActiveBattler].attack) + (i - 1); gBattleMoveDamage *= gStatStageRatios[gBattleMons[gActiveBattler].statStages[i]][0]; gBattleMoveDamage /= gStatStageRatios[gBattleMons[gActiveBattler].statStages[i]][1]; - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_JUMP_IF_FULL_HP: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (BATTLER_MAX_HP(gActiveBattler)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_FRISK: + { + VARIOUS_ARGS(); while (gBattleStruct->friskedBattler < gBattlersCount) { gBattlerTarget = gBattleStruct->friskedBattler++; @@ -8336,54 +8740,78 @@ static void Cmd_various(void) gBattleStruct->friskedBattler = 0; gBattleStruct->friskedAbility = FALSE; break; + } case VARIOUS_POISON_TYPE_IMMUNITY: - if (!CanPoisonType(gActiveBattler, GetBattlerForBattleScript(gBattlescriptCurrInstr[3]))) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + { + VARIOUS_ARGS(u8 target, const u8 *failInstr); + if (!CanPoisonType(gActiveBattler, GetBattlerForBattleScript(cmd->target))) + gBattlescriptCurrInstr = cmd->failInstr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_PARALYZE_TYPE_IMMUNITY: - if (!CanParalyzeType(gActiveBattler, GetBattlerForBattleScript(gBattlescriptCurrInstr[3]))) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + { + VARIOUS_ARGS(u8 target, const u8 *failInstr); + if (!CanParalyzeType(gActiveBattler, GetBattlerForBattleScript(cmd->target))) + gBattlescriptCurrInstr = cmd->failInstr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRACE_ABILITY: + { + VARIOUS_ARGS(); gBattleMons[gActiveBattler].ability = gBattleStruct->overwrittenAbilities[gActiveBattler] = gBattleStruct->tracedAbility[gActiveBattler]; break; + } case VARIOUS_TRY_ILLUSION_OFF: + { + VARIOUS_ARGS(); if (GetIllusionMonPtr(gActiveBattler) != NULL) { - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_IllusionOff; return; } break; + } case VARIOUS_SET_SPRITEIGNORE0HP: - gBattleStruct->spriteIgnore0Hp = gBattlescriptCurrInstr[3]; - gBattlescriptCurrInstr += 4; + { + VARIOUS_ARGS(bool8 ignore0HP); + gBattleStruct->spriteIgnore0Hp = cmd->ignore0HP; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_UPDATE_NICK: + { + VARIOUS_ARGS(); 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: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (ItemId_GetPocket(gBattleMons[gActiveBattler].item) == POCKET_BERRIES) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; return; + } case VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS: + { + VARIOUS_ARGS(const u8 *failInstr); if ((gStatuses3[gActiveBattler] & (STATUS3_SEMI_INVULNERABLE | STATUS3_HEAL_BLOCK)) || BATTLER_MAX_HP(gActiveBattler) || !gBattleMons[gActiveBattler].hp || !(IsBattlerGrounded(gActiveBattler))) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -8392,17 +8820,23 @@ static void Cmd_various(void) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_GRAVITY_ON_AIRBORNE_MONS: + { + VARIOUS_ARGS(); // 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: + { + VARIOUS_ARGS(); // Raise stats for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { @@ -8419,10 +8853,16 @@ static void Cmd_various(void) } } break; + } case VARIOUS_SET_POWDER: + { + VARIOUS_ARGS(); gBattleMons[gActiveBattler].status2 |= STATUS2_POWDER; break; + } case VARIOUS_ACUPRESSURE: + { + VARIOUS_ARGS(const u8 *failInstr); bits = 0; for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { @@ -8438,17 +8878,23 @@ static void Cmd_various(void) } while (!(bits & gBitTable[statId])); SET_STATCHANGER(statId, 2, FALSE); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } return; + } case VARIOUS_CANCEL_MULTI_TURN_MOVES: + { + VARIOUS_ARGS(); CancelMultiTurnMoves(gActiveBattler); break; + } case VARIOUS_SET_MAGIC_COAT_TARGET: + { + VARIOUS_ARGS(); gBattleStruct->attackerBeforeBounce = gActiveBattler; gBattlerAttacker = gBattlerTarget; side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); @@ -8457,24 +8903,38 @@ static void Cmd_various(void) else gBattlerTarget = gActiveBattler; break; + } case VARIOUS_IS_RUNNING_IMPOSSIBLE: + { + VARIOUS_ARGS(); gBattleCommunication[0] = IsRunningFromBattleImpossible(); break; + } case VARIOUS_GET_MOVE_TARGET: + { + VARIOUS_ARGS(); gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); break; + } case VARIOUS_GET_BATTLER_FAINTED: + { + VARIOUS_ARGS(); if (gHitMarker & HITMARKER_FAINTED(gActiveBattler)) gBattleCommunication[0] = TRUE; else gBattleCommunication[0] = FALSE; break; - case VARIOUS_RESET_INTIMIDATE_TRACE_BITS: - gSpecialStatuses[gActiveBattler].intimidatedMon = FALSE; + } + case VARIOUS_RESET_SWITCH_IN_ABILITY_BITS: + { + VARIOUS_ARGS(); gSpecialStatuses[gActiveBattler].traced = FALSE; gSpecialStatuses[gActiveBattler].switchInAbilityDone = FALSE; break; + } case VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP: + { + VARIOUS_ARGS(); if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId || gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId) { if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId) @@ -8491,7 +8951,10 @@ static void Cmd_various(void) gBattleStruct->choicedMove[gActiveBattler] = MOVE_NONE; } break; + } case VARIOUS_RESET_PLAYER_FAINTED: + { + VARIOUS_ARGS(); if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE)) && gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattleMons[0].hp != 0 @@ -8500,7 +8963,10 @@ static void Cmd_various(void) gHitMarker &= ~HITMARKER_PLAYER_FAINTED; } break; + } case VARIOUS_PALACE_FLAVOR_TEXT: + { + VARIOUS_ARGS(); // 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]; @@ -8514,7 +8980,11 @@ static void Cmd_various(void) gBattleCommunication[MULTISTRING_CHOOSER] = sBattlePalaceNatureToFlavorTextId[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)]; } break; + } case VARIOUS_ARENA_JUDGMENT_WINDOW: + { + VARIOUS_ARGS(); + i = BattleArena_ShowJudgmentWindow(&gBattleCommunication[0]); // BattleArena_ShowJudgmentWindow's last state was an intermediate step. @@ -8524,20 +8994,29 @@ static void Cmd_various(void) gBattleCommunication[1] = i; break; + } case VARIOUS_ARENA_OPPONENT_MON_LOST: + { + VARIOUS_ARGS(); gBattleMons[1].hp = 0; gHitMarker |= HITMARKER_FAINTED(1); gBattleStruct->arenaLostOpponentMons |= gBitTable[gBattlerPartyIndexes[1]]; gDisableStructs[1].truantSwitchInHack = 1; break; + } case VARIOUS_ARENA_PLAYER_MON_LOST: + { + VARIOUS_ARGS(); gBattleMons[0].hp = 0; gHitMarker |= HITMARKER_FAINTED(0); gHitMarker |= HITMARKER_PLAYER_FAINTED; gBattleStruct->arenaLostPlayerMons |= gBitTable[gBattlerPartyIndexes[0]]; gDisableStructs[0].truantSwitchInHack = 1; break; + } case VARIOUS_ARENA_BOTH_MONS_LOST: + { + VARIOUS_ARGS(); gBattleMons[0].hp = 0; gBattleMons[1].hp = 0; gHitMarker |= HITMARKER_FAINTED(0); @@ -8548,29 +9027,50 @@ static void Cmd_various(void) gDisableStructs[0].truantSwitchInHack = 1; gDisableStructs[1].truantSwitchInHack = 1; break; + } case VARIOUS_EMIT_YESNOBOX: + { + VARIOUS_ARGS(); BtlController_EmitYesNoBox(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); break; + } case VARIOUS_DRAW_ARENA_REF_TEXT_BOX: + { + VARIOUS_ARGS(); DrawArenaRefereeTextBox(); break; + } case VARIOUS_ERASE_ARENA_REF_TEXT_BOX: + { + VARIOUS_ARGS(); EraseArenaRefereeTextBox(); break; + } case VARIOUS_ARENA_JUDGMENT_STRING: - BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[gBattlescriptCurrInstr[1]]); + { + CMD_ARGS(u8 id, u8 _); + BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[cmd->id]); BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_JUDGMENT_TEXT); break; + } case VARIOUS_ARENA_WAIT_STRING: + { + VARIOUS_ARGS(); if (IsTextPrinterActive(ARENA_WIN_JUDGMENT_TEXT)) return; break; + } case VARIOUS_WAIT_CRY: + { + VARIOUS_ARGS(); if (!IsCryFinished()) return; break; + } case VARIOUS_RETURN_OPPONENT_MON1: + { + VARIOUS_ARGS(); gActiveBattler = 1; if (gBattleMons[gActiveBattler].hp != 0) { @@ -8578,7 +9078,10 @@ static void Cmd_various(void) MarkBattlerForControllerExec(gActiveBattler); } break; + } case VARIOUS_RETURN_OPPONENT_MON2: + { + VARIOUS_ARGS(); if (gBattlersCount > 3) { gActiveBattler = 3; @@ -8589,20 +9092,35 @@ static void Cmd_various(void) } } break; + } case VARIOUS_VOLUME_DOWN: + { + VARIOUS_ARGS(); m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x55); break; + } case VARIOUS_VOLUME_UP: + { + VARIOUS_ARGS(); m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); break; + } case VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT: + { + VARIOUS_ARGS(); gBattleStruct->alreadyStatusedMoveAttempt |= gBitTable[gActiveBattler]; break; + } case VARIOUS_PALACE_TRY_ESCAPE_STATUS: + { + VARIOUS_ARGS(); if (BattlePalace_TryEscapeStatus(gActiveBattler)) return; break; + } case VARIOUS_SET_TELEPORT_OUTCOME: + { + VARIOUS_ARGS(); // 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))) @@ -8623,36 +9141,59 @@ static void Cmd_various(void) gBattleOutcome = B_OUTCOME_MON_TELEPORTED; } break; + } case VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC: + { + VARIOUS_ARGS(); BtlController_EmitPlayFanfareOrBGM(BUFFER_A, MUS_VICTORY_TRAINER, TRUE); MarkBattlerForControllerExec(gActiveBattler); break; + } case VARIOUS_STAT_TEXT_BUFFER: + { + VARIOUS_ARGS(); PREPARE_STAT_BUFFER(gBattleTextBuff1, gBattleCommunication[0]); break; + } case VARIOUS_SWITCHIN_ABILITIES: - gBattlescriptCurrInstr += 3; + { + VARIOUS_ARGS(); + gBattlescriptCurrInstr = cmd->nextInstr; 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: + { + VARIOUS_ARGS(); gBattleStruct->savedBattlerTarget = gBattlerTarget; break; + } case VARIOUS_RESTORE_TARGET: + { + VARIOUS_ARGS(); gBattlerTarget = gBattleStruct->savedBattlerTarget; break; + } case VARIOUS_INSTANT_HP_DROP: + { + VARIOUS_ARGS(); BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP); MarkBattlerForControllerExec(gActiveBattler); break; + } case VARIOUS_CLEAR_STATUS: + { + VARIOUS_ARGS(); 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: + { + VARIOUS_ARGS(); for (i = 0; i < 4; i++) { gBattleMons[gActiveBattler].pp[i] = CalculatePPWithBonus(gBattleMons[gActiveBattler].moves[i], gBattleMons[gActiveBattler].ppBonuses, i); @@ -8662,8 +9203,11 @@ static void Cmd_various(void) 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 { + VARIOUS_ARGS(); + u16 battlerAbility = GetBattlerAbility(gActiveBattler); if ((battlerAbility == ABILITY_MOXIE @@ -8676,17 +9220,19 @@ static void Cmd_various(void) gBattleMons[gBattlerAttacker].statStages[STAT_ATK]++; SET_STATCHANGER(STAT_ATK, 1, FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); 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 { + VARIOUS_ARGS(); + u16 battlerAbility = GetBattlerAbility(gActiveBattler); if ((battlerAbility == ABILITY_GRIM_NEIGH @@ -8698,20 +9244,23 @@ static void Cmd_various(void) gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]++; SET_STATCHANGER(STAT_SPATK, 1, FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); 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 + { + VARIOUS_ARGS(); gBattlerAbility = BATTLE_PARTNER(gActiveBattler); i = GetBattlerAbility(gBattlerAbility); if (IsBattlerAlive(gBattlerAbility) - && (i == ABILITY_RECEIVER || i == ABILITY_POWER_OF_ALCHEMY)) + && (i == ABILITY_RECEIVER || i == ABILITY_POWER_OF_ALCHEMY) + && GetBattlerHoldEffect(gActiveBattler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD) { switch (gBattleMons[gActiveBattler].ability) { // Can't copy these abilities. @@ -8728,13 +9277,16 @@ static void Cmd_various(void) default: gBattleStruct->tracedAbility[gBattlerAbility] = gBattleMons[gActiveBattler].ability; // re-using the variable for trace gBattleScripting.battler = gActiveBattler; - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_ReceiverActivates; return; } } break; + } case VARIOUS_TRY_ACTIVATE_BEAST_BOOST: + { + VARIOUS_ARGS(); i = GetHighestStatId(gActiveBattler); if (GetBattlerAbility(gActiveBattler) == ABILITY_BEAST_BOOST && HasAttackerFaintedTarget() @@ -8744,12 +9296,15 @@ static void Cmd_various(void) gBattleMons[gBattlerAttacker].statStages[i]++; SET_STATCHANGER(i, 1, FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, i); - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_AttackerAbilityStatRaise; return; } break; + } case VARIOUS_TRY_ACTIVATE_SOULHEART: + { + VARIOUS_ARGS(); while (gBattleStruct->soulheartBattlerId < gBattlersCount) { gBattleScripting.battler = gBattleStruct->soulheartBattlerId++; @@ -8768,7 +9323,10 @@ static void Cmd_various(void) } gBattleStruct->soulheartBattlerId = 0; break; + } case VARIOUS_TRY_ACTIVATE_FELL_STINGER: + { + VARIOUS_ARGS(); if (gBattleMoves[gCurrentMove].effect == EFFECT_FELL_STINGER && HasAttackerFaintedTarget() && !NoAliveMonsForEitherParty() @@ -8780,44 +9338,62 @@ static void Cmd_various(void) SET_STATCHANGER(STAT_ATK, 2, FALSE); #endif PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); 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); + { + VARIOUS_ARGS(u16 move); + BtlController_EmitMoveAnimation(BUFFER_A, cmd->move, gBattleScripting.animTurn, 0, 0, gBattleMons[gActiveBattler].friendship, &gDisableStructs[gActiveBattler], gMultiHitCounter); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_SET_LUCKY_CHANT: + { + VARIOUS_ARGS(const u8 *failInstr); 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; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } return; + } case VARIOUS_SUCKER_PUNCH_CHECK: + { + VARIOUS_ARGS(const u8 *failInstr); if (gProtectStructs[gBattlerTarget].obstructed) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else if (IS_MOVE_STATUS(gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]])) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_SET_SIMPLE_BEAM: + { + VARIOUS_ARGS(const u8 *failInstr); if (IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability) || gBattleMons[gBattlerTarget].ability == ABILITY_SIMPLE) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + { + RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -8825,34 +9401,50 @@ static void Cmd_various(void) gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = ABILITY_SIMPLE; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_ENTRAINMENT: + { + VARIOUS_ARGS(const u8 *failInstr); if (IsEntrainmentBannedAbilityAttacker(gBattleMons[gBattlerAttacker].ability) || IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); - return; + RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); + gBattlescriptCurrInstr = cmd->failInstr; } - - if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability) + else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); + gBattlescriptCurrInstr = cmd->failInstr; } else { - gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gBattleMons[gBattlerAttacker].ability; - gBattlescriptCurrInstr += 7; + if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gBattleMons[gBattlerAttacker].ability; + gBattlescriptCurrInstr = cmd->nextInstr; + } } return; + } case VARIOUS_SET_LAST_USED_ABILITY: + { + VARIOUS_ARGS(); gLastUsedAbility = gBattleMons[gActiveBattler].ability; break; + } case VARIOUS_TRY_HEAL_PULSE: + { + VARIOUS_ARGS(const u8 *failInstr); if (BATTLER_MAX_HP(gActiveBattler)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -8863,21 +9455,27 @@ static void Cmd_various(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = -1; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_QUASH: + { + VARIOUS_ARGS(const u8 *failInstr); 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. + gBattlescriptCurrInstr = cmd->failInstr; // 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 + gBattlescriptCurrInstr = cmd->nextInstr; // and then we proceed with the rest of our battlescript } return; + } case VARIOUS_INVERT_STAT_STAGES: + { + VARIOUS_ARGS(); for (i = 0; i < NUM_BATTLE_STATS; i++) { if (gBattleMons[gActiveBattler].statStages[i] < DEFAULT_STAT_STAGE) // Negative becomes positive. @@ -8886,14 +9484,20 @@ static void Cmd_various(void) gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE - (gBattleMons[gActiveBattler].statStages[i] - DEFAULT_STAT_STAGE); } break; + } case VARIOUS_SET_TERRAIN: + { + VARIOUS_ARGS(const u8 *failInstr); HandleTerrainMove(gCurrentMove); return; + } case VARIOUS_TRY_ME_FIRST: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else if (IS_MOVE_STATUS(gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]])) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else { u16 move = gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]]; @@ -8909,84 +9513,100 @@ static void Cmd_various(void) case MOVE_METAL_BURST: case MOVE_ME_FIRST: case MOVE_BEAK_BLAST: - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; break; default: gCalledMove = move; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); gStatuses3[gBattlerAttacker] |= STATUS3_ME_FIRST; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; break; } } return; + } case VARIOUS_JUMP_IF_BATTLE_END: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (NoAliveMonsForEitherParty()) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_ELECTRIFY: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gStatuses4[gBattlerTarget] |= STATUS4_ELECTRIFIED; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_REFLECT_TYPE: + { + VARIOUS_ARGS(const u8 *failInstr); if (gBattleMons[gBattlerTarget].species == SPECIES_ARCEUS || gBattleMons[gBattlerTarget].species == SPECIES_SILVALLY) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else if (gBattleMons[gBattlerTarget].type1 == TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 != TYPE_MYSTERY) { gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type2; gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type2; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gBattleMons[gBattlerTarget].type1 != TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 == TYPE_MYSTERY) { gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type1; gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type1; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gBattleMons[gBattlerTarget].type1 == TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 == TYPE_MYSTERY) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type1; gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type2; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_SOAK: + { + VARIOUS_ARGS(const u8 *failInstr); if (gBattleMons[gBattlerTarget].type1 == gBattleMoves[gCurrentMove].type && gBattleMons[gBattlerTarget].type2 == gBattleMoves[gCurrentMove].type) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { SET_BATTLER_TYPE(gBattlerTarget, gBattleMoves[gCurrentMove].type); PREPARE_TYPE_BUFFER(gBattleTextBuff1, gBattleMoves[gCurrentMove].type); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_HANDLE_MEGA_EVO: + { + VARIOUS_ARGS(u8 case_); + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; else mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; // Change species. - if (gBattlescriptCurrInstr[3] == 0) + if (cmd->case_ == 0) { u16 megaSpecies; gBattleStruct->mega.evolvedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species; @@ -9010,7 +9630,7 @@ static void Cmd_various(void) MarkBattlerForControllerExec(gActiveBattler); } // Change stats. - else if (gBattlescriptCurrInstr[3] == 1) + else if (cmd->case_ == 1) { RecalcBattlerStats(gActiveBattler, mon); gBattleStruct->mega.alreadyEvolved[GetBattlerPosition(gActiveBattler)] = TRUE; @@ -9024,16 +9644,19 @@ static void Cmd_various(void) if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); } - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_HANDLE_PRIMAL_REVERSION: + { + VARIOUS_ARGS(u8 case_); if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; else mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; // Change species. - if (gBattlescriptCurrInstr[3] == 0) + if (cmd->case_ == 0) { u16 primalSpecies; gBattleStruct->mega.primalRevertedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species; @@ -9052,7 +9675,7 @@ static void Cmd_various(void) MarkBattlerForControllerExec(gActiveBattler); } // Change stats. - else if (gBattlescriptCurrInstr[3] == 1) + else if (cmd->case_ == 1) { RecalcBattlerStats(gActiveBattler, mon); gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(gActiveBattler)] |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; @@ -9065,16 +9688,19 @@ static void Cmd_various(void) if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); } - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_HANDLE_FORM_CHANGE: + { + VARIOUS_ARGS(u8 case_); if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; else mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; // Change species. - if (gBattlescriptCurrInstr[3] == 0) + if (cmd->case_ == 0) { if (!gBattleTextBuff1) PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); @@ -9082,7 +9708,7 @@ static void Cmd_various(void) MarkBattlerForControllerExec(gActiveBattler); } // Change stats. - else if (gBattlescriptCurrInstr[3] == 1) + else if (cmd->case_ == 1) { RecalcBattlerStats(gActiveBattler, mon); } @@ -9091,15 +9717,21 @@ static void Cmd_various(void) { UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_ALL); } - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_LAST_RESORT: + { + VARIOUS_ARGS(const u8 *failInstr); if (CanUseLastResort(gActiveBattler)) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; return; + } case VARIOUS_ARGUMENT_STATUS_EFFECT: + { + VARIOUS_ARGS(); switch (gBattleMoves[gCurrentMove].argument) { case STATUS1_SLEEP: @@ -9126,54 +9758,67 @@ static void Cmd_various(void) } if (gBattleScripting.moveEffect != 0) { - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_EffectWithChance; return; } break; + } case VARIOUS_TRY_HIT_SWITCH_TARGET: + { + VARIOUS_ARGS(const u8 *failInstr); if (IsBattlerAlive(gBattlerAttacker) - && IsBattlerAlive(gBattlerTarget) - && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && TARGET_TURN_DAMAGED) + && IsBattlerAlive(gBattlerTarget) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && GetBattlerAbility(gBattlerTarget) != ABILITY_GUARD_DOG) { gBattleScripting.switchCase = B_SWITCH_HIT; gBattlescriptCurrInstr = BattleScript_ForceRandomSwitch; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } return; + } case VARIOUS_TRY_AUTOTOMIZE: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerWeight(gActiveBattler) > 1) { gDisableStructs[gActiveBattler].autotomizeCount++; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } return; + } case VARIOUS_TRY_COPYCAT: + { + VARIOUS_ARGS(const u8 *failInstr); if (gLastUsedMove == 0xFFFF || (sForbiddenMoves[gLastUsedMove] & FORBIDDEN_COPYCAT)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gCalledMove = gLastUsedMove; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_INSTRUCT: + { + VARIOUS_ARGS(const u8 *failInstr); if ((sForbiddenMoves[gLastMoves[gBattlerTarget]] & FORBIDDEN_INSTRUCT) || gLastMoves[gBattlerTarget] == 0xFFFF) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -9190,93 +9835,125 @@ static void Cmd_various(void) } } if (i != 4 || gBattleMons[gBattlerAttacker].pp[gCurrMovePos] == 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else { gBattlerTarget = gBattleStruct->lastMoveTarget[gBattlerAttacker]; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler]); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } } return; + } case VARIOUS_ABILITY_POPUP: + { + VARIOUS_ARGS(); CreateAbilityPopUp(gActiveBattler, gBattleMons[gActiveBattler].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0); break; + } case VARIOUS_UPDATE_ABILITY_POPUP: + { + VARIOUS_ARGS(); UpdateAbilityPopup(gActiveBattler); break; + } case VARIOUS_DEFOG: - if (T1_READ_8(gBattlescriptCurrInstr + 3)) // Clear + { + VARIOUS_ARGS(bool8 clear, const u8 *failInstr); + if (cmd->clear) // Clear { if (ClearDefogHazards(gEffectBattler, TRUE)) return; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; } else { if (ClearDefogHazards(gActiveBattler, FALSE)) - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + gBattlescriptCurrInstr = cmd->failInstr; } return; + } case VARIOUS_JUMP_IF_TARGET_ALLY: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; return; + } case VARIOUS_TRY_SYNCHRONOISE: + { + VARIOUS_ARGS(const u8 *failInstr); if (!DoBattlersShareType(gBattlerAttacker, gBattlerTarget)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_LOSE_TYPE: + { + VARIOUS_ARGS(u8 type); for (i = 0; i < 3; i++) { - if (*(u8 *)(&gBattleMons[gActiveBattler].type1 + i) == gBattlescriptCurrInstr[3]) + if (*(u8 *)(&gBattleMons[gActiveBattler].type1 + i) == cmd->type) *(u8 *)(&gBattleMons[gActiveBattler].type1 + i) = TYPE_MYSTERY; } - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; 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 { + VARIOUS_ARGS(const u8 *failInstr); // Psycho shift works + if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_POISON) && CanBePoisoned(gBattlerAttacker, gBattlerTarget)) + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_TOXIC_POISON) && CanBePoisoned(gBattlerAttacker, gBattlerTarget)) + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_BURN) && CanBeBurned(gBattlerTarget)) + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && CanBeParalyzed(gBattlerTarget)) + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) && CanSleep(gBattlerTarget)) + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + else + { + gBattlescriptCurrInstr = cmd->failInstr; + return; + } 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; + gBattlescriptCurrInstr = cmd->nextInstr; + return; } - } - return; case VARIOUS_CURE_STATUS: + { + VARIOUS_ARGS(); 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: + { + VARIOUS_ARGS(); gStatuses3[gActiveBattler] ^= STATUS3_POWER_TRICK; SWAP(gBattleMons[gActiveBattler].attack, gBattleMons[gActiveBattler].defense, i); break; + } case VARIOUS_AFTER_YOU: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) - || GetBattlerTurnOrderNum(gBattlerAttacker) == GetBattlerTurnOrderNum(gBattlerTarget) + 1) + || GetBattlerTurnOrderNum(gBattlerAttacker) + 1 == GetBattlerTurnOrderNum(gBattlerTarget)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -9299,39 +9976,52 @@ static void Cmd_various(void) gBattlerByTurnOrder[2] = gBattlerTarget; gBattlerByTurnOrder[3] = data[2]; } - gBattlescriptCurrInstr += 7; + gSpecialStatuses[gBattlerTarget].afterYou = 1; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_BESTOW: + { + VARIOUS_ARGS(const u8 *failInstr); 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); + gBattlescriptCurrInstr = cmd->failInstr; } else { BestowItem(gBattlerAttacker, gBattlerTarget); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_ARGUMENT_TO_MOVE_EFFECT: + { + VARIOUS_ARGS(); gBattleScripting.moveEffect = gBattleMoves[gCurrentMove].argument; break; + } case VARIOUS_JUMP_IF_NOT_GROUNDED: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (!IsBattlerGrounded(gActiveBattler)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_HANDLE_TRAINER_SLIDE_MSG: - if (gBattlescriptCurrInstr[3] == 0) + { + VARIOUS_ARGS(u8 case_); + if (cmd->case_ == 0) { gBattleScripting.savedDmg = gBattlerSpriteIds[gActiveBattler]; HideBattlerShadowSprite(gActiveBattler); } - else if (gBattlescriptCurrInstr[3] == 1) + else if (cmd->case_ == 1) { BtlController_EmitPrintString(BUFFER_A, STRINGID_TRAINERSLIDE); MarkBattlerForControllerExec(gActiveBattler); @@ -9345,25 +10035,36 @@ static void Cmd_various(void) BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); } } - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF: + { + VARIOUS_ARGS(); if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_FIRST_DOWN)) { - BattleScriptPush(gBattlescriptCurrInstr + 3); + gBattleScripting.battler = gActiveBattler; + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; return; } break; + } case VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON: + { + VARIOUS_ARGS(); if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_LAST_SWITCHIN)) { - BattleScriptPush(gBattlescriptCurrInstr + 3); + gBattleScripting.battler = gActiveBattler; + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; return; } break; + } case VARIOUS_SET_AURORA_VEIL: + { + VARIOUS_ARGS(); if (gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] & SIDE_STATUS_AURORA_VEIL || !(WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_HAIL)) { @@ -9385,26 +10086,35 @@ static void Cmd_various(void) gBattleCommunication[MULTISTRING_CHOOSER] = 5; } break; + } case VARIOUS_TRY_THIRD_TYPE: + { + VARIOUS_ARGS(const u8 *failInstr); if (IS_BATTLER_OF_TYPE(gActiveBattler, gBattleMoves[gCurrentMove].argument)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMons[gActiveBattler].type3 = gBattleMoves[gCurrentMove].argument; PREPARE_TYPE_BUFFER(gBattleTextBuff1, gBattleMoves[gCurrentMove].argument); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_DESTROY_ABILITY_POPUP: + { + VARIOUS_ARGS(); DestroyAbilityPopUp(gActiveBattler); break; + } case VARIOUS_TOTEM_BOOST: + { + VARIOUS_ARGS(const u8 *jumpInstr); gActiveBattler = gBattlerAttacker; if (gTotemBoosts[gActiveBattler].stats == 0) { - gBattlescriptCurrInstr += 7; // stats done, exit + gBattlescriptCurrInstr = cmd->nextInstr; // stats done, exit } else { @@ -9427,22 +10137,31 @@ static void Cmd_various(void) } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // do boost + gBattlescriptCurrInstr = cmd->jumpInstr; // do boost } return; } } - gBattlescriptCurrInstr += 7; // exit if loop failed (failsafe) + gBattlescriptCurrInstr = cmd->nextInstr; // exit if loop failed (failsafe) } return; + } case VARIOUS_SET_Z_EFFECT: + { + VARIOUS_ARGS(); SetZEffect(); //handles battle script jumping internally return; + } case VARIOUS_MOVEEND_ITEM_EFFECTS: + { + VARIOUS_ARGS(); if (ItemBattleEffects(ITEMEFFECT_NORMAL, gActiveBattler, FALSE)) return; break; + } case VARIOUS_ROOM_SERVICE: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_ROOM_SERVICE && TryRoomService(gActiveBattler)) { BattleScriptPushCursor(); @@ -9450,10 +10169,13 @@ static void Cmd_various(void) } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } return; + } case VARIOUS_TERRAIN_SEED: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_SEEDS) { u8 effect = 0; @@ -9477,25 +10199,32 @@ static void Cmd_various(void) if (effect) return; } - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; return; + } case VARIOUS_MAKE_INVISIBLE: + { + VARIOUS_ARGS(); if (gBattleControllerExecFlags) break; BtlController_EmitSpriteInvisibility(BUFFER_A, TRUE); MarkBattlerForControllerExec(gActiveBattler); break; + } case VARIOUS_JUMP_IF_TERRAIN_AFFECTED: { - u32 flags = T1_READ_32(gBattlescriptCurrInstr + 3); + VARIOUS_ARGS(u32 flags, const u8 *jumpInstr); + u32 flags = cmd->flags; if (IsBattlerTerrainAffected(gActiveBattler, flags)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 7); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 11; + gBattlescriptCurrInstr = cmd->nextInstr; + return; } - return; case VARIOUS_EERIE_SPELL_PP_REDUCE: + { + VARIOUS_ARGS(const u8 *failInstr); if (gLastMoves[gActiveBattler] != 0 && gLastMoves[gActiveBattler] != 0xFFFF) { s32 i; @@ -9527,48 +10256,57 @@ static void Cmd_various(void) if (gBattleMons[gActiveBattler].pp[i] == 0 && gBattleStruct->skyDropTargets[gActiveBattler] == 0xFF) CancelMultiTurnMoves(gActiveBattler); - gBattlescriptCurrInstr += 7; // continue + gBattlescriptCurrInstr = cmd->nextInstr; // continue } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // cant reduce pp + gBattlescriptCurrInstr = cmd->failInstr; // cant reduce pp } } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // cant reduce pp + gBattlescriptCurrInstr = cmd->failInstr; // cant reduce pp } return; + } case VARIOUS_JUMP_IF_TEAM_HEALTHY: + { + VARIOUS_ARGS(const u8 *jumpInstr); 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 + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else // single battle { if (gBattleMons[gActiveBattler].hp == gBattleMons[gActiveBattler].maxHP && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // fail + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_HEAL_QUARTER_HP: + { + VARIOUS_ARGS(const u8 *failInstr); 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 + gBattlescriptCurrInstr = cmd->failInstr; // fail else - gBattlescriptCurrInstr += 7; // can heal + gBattlescriptCurrInstr = cmd->nextInstr; // can heal return; + } case VARIOUS_REMOVE_TERRAIN: + { + VARIOUS_ARGS(); gFieldTimers.terrainTimer = 0; switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) { @@ -9589,16 +10327,21 @@ static void Cmd_various(void) 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: + { + VARIOUS_ARGS(const u8 *jumpInstr); // 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); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_SET_SKY_DROP: + { + VARIOUS_ARGS(); 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 @@ -9618,24 +10361,30 @@ static void Cmd_various(void) gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 0; break; + } case VARIOUS_CLEAR_SKY_DROP: + { + VARIOUS_ARGS(const u8 *failInstr); // 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); + gBattlescriptCurrInstr = cmd->failInstr; else { gBattleStruct->skyDropTargets[gBattlerAttacker] = 0xFF; gBattleStruct->skyDropTargets[gBattlerTarget] = 0xFF; gStatuses3[gBattlerTarget] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } // 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. + { + VARIOUS_ARGS(); if (gBattleStruct->skyDropTargets[gEffectBattler] != 0xFF && !(gStatuses3[gEffectBattler] & STATUS3_SKY_DROPPED)) { // Set the target of Sky Drop as gEffectBattler @@ -9656,12 +10405,16 @@ static void Cmd_various(void) } } break; + } case VARIOUS_JUMP_IF_PRANKSTER_BLOCKED: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (BlocksPrankster(gCurrentMove, gBattlerAttacker, gActiveBattler, TRUE)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER: { bool8 shouldNotClear = FALSE; @@ -9696,15 +10449,20 @@ static void Cmd_various(void) break; } case VARIOUS_TRY_END_NEUTRALIZING_GAS: + { + VARIOUS_ARGS(); if (gSpecialStatuses[gActiveBattler].neutralizingGasRemoved) { gSpecialStatuses[gActiveBattler].neutralizingGasRemoved = FALSE; - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits; return; } break; + } case VARIOUS_GET_ROTOTILLER_TARGETS: + { + VARIOUS_ARGS(const u8 *failInstr); // Gets the battlers to be affected by rototiller. If there are none, print 'But it failed!' { u32 count = 0; @@ -9719,27 +10477,35 @@ static void Cmd_various(void) } if (count == 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // Rototiller fails + gBattlescriptCurrInstr = cmd->failInstr; // Rototiller fails else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (gSpecialStatuses[gActiveBattler].rototillerAffected) { gSpecialStatuses[gActiveBattler].rototillerAffected = FALSE; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // Unaffected by rototiller - print STRINGID_NOEFFECTONTARGET + gBattlescriptCurrInstr = cmd->jumpInstr; // Unaffected by rototiller - print STRINGID_NOEFFECTONTARGET } return; + } case VARIOUS_TRY_ACTIVATE_BATTLE_BOND: + { + VARIOUS_ARGS(); if (gBattleMons[gBattlerAttacker].species == SPECIES_GRENINJA_BATTLE_BOND && HasAttackerFaintedTarget() - && CalculateEnemyPartyCount() > 1) + && CalculateEnemyPartyCount() > 1 + && !(gBattleStruct->battleBondTransformed[GET_BATTLER_SIDE2(gBattlerAttacker)] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]])) { + gBattleStruct->battleBondTransformed[GET_BATTLER_SIDE2(gBattlerAttacker)] |= gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]; PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species); gBattleStruct->changedSpecies[gBattlerPartyIndexes[gBattlerAttacker]] = gBattleMons[gBattlerAttacker].species; gBattleMons[gBattlerAttacker].species = SPECIES_GRENINJA_ASH; @@ -9748,23 +10514,28 @@ static void Cmd_various(void) return; } break; + } case VARIOUS_CONSUME_BERRY: + { + VARIOUS_ARGS(bool8 fromBattler); if (gBattleScripting.overrideBerryRequirements == 2) { - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; } - - if (gBattlescriptCurrInstr[3]) + + if (cmd->fromBattler) gLastUsedItem = gBattleMons[gActiveBattler].item; - + gBattleScripting.battler = gEffectBattler = gBattlerTarget = gActiveBattler; // Cover all berry effect battlerId cases. e.g. ChangeStatBuffs uses target ID if (ItemBattleEffects(ITEMEFFECT_USE_LAST_ITEM, gActiveBattler, FALSE)) return; - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL: { + VARIOUS_ARGS(const u8 *jumpInstr); bool8 canDoPrimalReversion = FALSE; for (i = 0; i < EVOS_PER_MON; i++) @@ -9774,35 +10545,47 @@ static void Cmd_various(void) canDoPrimalReversion = TRUE; } if (!canDoPrimalReversion) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; } case VARIOUS_JUMP_IF_WEATHER_AFFECTED: { - u32 weatherFlags = T1_READ_32(gBattlescriptCurrInstr + 3); - if (IsBattlerWeatherAffected(gActiveBattler, weatherFlags)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 7); + VARIOUS_ARGS(u32 flags, const u8 *jumpInstr); + u32 flags = cmd->flags; + if (IsBattlerWeatherAffected(gActiveBattler, flags)) + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 11; + gBattlescriptCurrInstr = cmd->nextInstr; + return; } - return; case VARIOUS_APPLY_PLASMA_FISTS: + { + VARIOUS_ARGS(); for (i = 0; i < gBattlersCount; i++) gStatuses4[i] |= STATUS4_PLASMA_FISTS; break; + } case VARIOUS_JUMP_IF_SPECIES: - if (gBattleMons[gActiveBattler].species == T1_READ_16(gBattlescriptCurrInstr + 3)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5); + { + VARIOUS_ARGS(u16 species, const u8 *jumpInstr); + if (gBattleMons[gActiveBattler].species == cmd->species) + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 9; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_PHOTON_GEYSER_CHECK: + { + VARIOUS_ARGS(); 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 { + VARIOUS_ARGS(); + u32 attackerAtkStat = gBattleMons[gBattlerAttacker].attack; u32 targetDefStat = gBattleMons[gBattlerTarget].defense; u32 attackerSpAtkStat = gBattleMons[gBattlerAttacker].spAttack; @@ -9838,17 +10621,22 @@ static void Cmd_various(void) break; } case VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (IsLeafGuardProtected(gActiveBattler)) { gBattlerAbility = gActiveBattler; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; } else { - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_SET_ATTACKER_STICKY_WEB_USER: + { + VARIOUS_ARGS(); // 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 @@ -9856,8 +10644,11 @@ static void Cmd_various(void) if (gBattleStruct->stickyWebUser != 0xFF) gBattlerAttacker = gBattleStruct->stickyWebUser; break; + } case VARIOUS_CUT_1_3_HP_RAISE_STATS: { + VARIOUS_ARGS(const u8 *failInstr); + bool8 atLeastOneStatBoosted = FALSE; u16 hpFraction = max(1, gBattleMons[gBattlerAttacker].maxHP / 3); @@ -9872,94 +10663,99 @@ static void Cmd_various(void) if (atLeastOneStatBoosted && gBattleMons[gBattlerAttacker].hp > hpFraction) { gBattleMoveDamage = hpFraction; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } + return; } - return; case VARIOUS_SET_OCTOLOCK: + { + VARIOUS_ARGS(const u8 *failInstr); if (gDisableStructs[gActiveBattler].octolock) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gDisableStructs[gActiveBattler].octolock = TRUE; gBattleMons[gActiveBattler].status2 |= STATUS2_ESCAPE_PREVENTION; gDisableStructs[gActiveBattler].battlerPreventingEscape = gBattlerAttacker; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_CHECK_POLTERGEIST: + { + VARIOUS_ARGS(const u8 *failInstr); if (gBattleMons[gActiveBattler].item == ITEM_NONE || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM || GetBattlerAbility(gActiveBattler) == ABILITY_KLUTZ) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { PREPARE_ITEM_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].item); gLastUsedItem = gBattleMons[gActiveBattler].item; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_NO_RETREAT: + { + VARIOUS_ARGS(const u8 *failInstr); if (gDisableStructs[gActiveBattler].noRetreat) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { if (!(gBattleMons[gActiveBattler].status2 & STATUS2_ESCAPE_PREVENTION)) gDisableStructs[gActiveBattler].noRetreat = TRUE; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_TAR_SHOT: + { + VARIOUS_ARGS(const u8 *failInstr); if (gDisableStructs[gActiveBattler].tarShot) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gDisableStructs[gActiveBattler].tarShot = TRUE; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_CAN_TAR_SHOT_WORK: + { + VARIOUS_ARGS(const u8 *failInstr); // 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; + gBattlescriptCurrInstr = cmd->nextInstr; 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; + gBattlescriptCurrInstr = cmd->failInstr; return; } case VARIOUS_JUMP_IF_CANT_FLING: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (!CanFling(gActiveBattler)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_CURE_CERTAIN_STATUSES: + { + VARIOUS_ARGS(); // Check infatuation if (gBattleMons[gActiveBattler].status2 & STATUS2_INFATUATION) { @@ -9970,7 +10766,7 @@ static void Cmd_various(void) // Check taunt if (gDisableStructs[gActiveBattler].tauntTimer != 0) { - gDisableStructs[gActiveBattler].tauntTimer = gDisableStructs[gActiveBattler].tauntTimer2 = 0; + gDisableStructs[gActiveBattler].tauntTimer = 0; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TAUNT; PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT); } @@ -9978,7 +10774,7 @@ static void Cmd_various(void) if (gDisableStructs[gActiveBattler].encoreTimer != 0) { gDisableStructs[gActiveBattler].encoredMove = 0; - gDisableStructs[gActiveBattler].encoreTimerStartValue = gDisableStructs[gActiveBattler].encoreTimer = 0; + gDisableStructs[gActiveBattler].encoreTimer = 0; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_ENCORE; // STRINGID_PKMNENCOREENDED } // Check torment @@ -9996,47 +10792,74 @@ static void Cmd_various(void) // Check disable if (gDisableStructs[gActiveBattler].disableTimer != 0) { - gDisableStructs[gActiveBattler].disableTimer = gDisableStructs[gActiveBattler].disableTimerStartValue = 0; + gDisableStructs[gActiveBattler].disableTimer = 0; gDisableStructs[gActiveBattler].disabledMove = 0; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_DISABLE; } - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES: + { + VARIOUS_ARGS(); 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; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (ItemId_GetPocket(gLastUsedItem) == POCKET_BERRIES) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT: - if (ItemId_GetHoldEffect(gLastUsedItem) == gBattlescriptCurrInstr[3]) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + { + VARIOUS_ARGS(u8 holdEffect, const u8 *jumpInstr); + if (ItemId_GetHoldEffect(gLastUsedItem) == cmd->holdEffect) + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_SAVE_BATTLER_ITEM: + { + VARIOUS_ARGS(); gBattleResources->battleHistory->heldItems[gActiveBattler] = gBattleMons[gActiveBattler].item; break; + } case VARIOUS_RESTORE_BATTLER_ITEM: + { + VARIOUS_ARGS(); gBattleMons[gActiveBattler].item = gBattleResources->battleHistory->heldItems[gActiveBattler]; break; + } case VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM: + { + VARIOUS_ARGS(); gBattleMons[gActiveBattler].item = gLastUsedItem; break; + } case VARIOUS_SET_BEAK_BLAST: - gProtectStructs[gBattlerAttacker].beakBlastCharge = TRUE; + { + VARIOUS_ARGS(); + gProtectStructs[gActiveBattler].beakBlastCharge = TRUE; break; + } case VARIOUS_SWAP_SIDE_STATUSES: + { + VARIOUS_ARGS(); CourtChangeSwapSideStatuses(); break; + } case VARIOUS_TRY_SYMBIOSIS: //called by Bestow, Fling, and Bug Bite, which don't work with Cmd_removeitem. + { + VARIOUS_ARGS(); if (SYMBIOSIS_CHECK(gActiveBattler, BATTLE_PARTNER(gActiveBattler))) { BestowItem(BATTLE_PARTNER(gActiveBattler), gActiveBattler); @@ -10048,34 +10871,184 @@ static void Cmd_various(void) return; } break; + } case VARIOUS_CAN_TELEPORT: + { + VARIOUS_ARGS(); gBattleCommunication[0] = CanTeleport(gActiveBattler); break; + } case VARIOUS_GET_BATTLER_SIDE: + { + VARIOUS_ARGS(); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) gBattleCommunication[0] = B_SIDE_PLAYER; else gBattleCommunication[0] = B_SIDE_OPPONENT; break; + } case VARIOUS_CHECK_PARENTAL_BOND_COUNTER: { + VARIOUS_ARGS(u8 counter, const u8 *jumpInstr); // Some effects should only happen on the first or second strike of Parental Bond, // so a way to check this in battle scripts is useful - u8 counter = T1_READ_8(gBattlescriptCurrInstr + 3); + u8 counter = cmd->counter; if (gSpecialStatuses[gBattlerAttacker].parentalBondState == counter && gBattleMons[gBattlerTarget].hp != 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; return; } - break; - } // End of switch (gBattlescriptCurrInstr[2]) + case VARIOUS_SWAP_STATS: + { + VARIOUS_ARGS(u8 stat); - gBattlescriptCurrInstr += 3; + u8 stat = cmd->stat; + u16 temp; + + switch (stat) + { + case STAT_HP: + SWAP(gBattleMons[gBattlerAttacker].hp, gBattleMons[gBattlerTarget].hp, temp); + break; + case STAT_ATK: + SWAP(gBattleMons[gBattlerAttacker].attack, gBattleMons[gBattlerTarget].attack, temp); + break; + case STAT_DEF: + SWAP(gBattleMons[gBattlerAttacker].defense, gBattleMons[gBattlerTarget].defense, temp); + break; + case STAT_SPEED: + SWAP(gBattleMons[gBattlerAttacker].speed, gBattleMons[gBattlerTarget].speed, temp); + break; + case STAT_SPATK: + SWAP(gBattleMons[gBattlerAttacker].spAttack, gBattleMons[gBattlerTarget].spAttack, temp); + break; + case STAT_SPDEF: + SWAP(gBattleMons[gBattlerAttacker].spDefense, gBattleMons[gBattlerTarget].spDefense, temp); + break; + } + PREPARE_STAT_BUFFER(gBattleTextBuff1, stat); + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + case VARIOUS_TEATIME_TARGETS: + { + VARIOUS_ARGS(const u8 *jumpInstr); + u32 count = 0; + + for (i = 0; i < gBattlersCount; i++) + { + if (IsTeatimeAffected(i)) + count++; + } + if (count == 0) + gBattlescriptCurrInstr = cmd->jumpInstr; // Teatime fails + else + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + case VARIOUS_TEATIME_INVUL: + { + VARIOUS_ARGS(const u8 *jumpInstr); + if (ItemId_GetPocket(gBattleMons[gActiveBattler].item) == POCKET_BERRIES && !(gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE))) + gBattlescriptCurrInstr = cmd->nextInstr; + else + gBattlescriptCurrInstr = cmd->jumpInstr; + return; + } + case VARIOUS_JUMP_IF_ROD: + { + VARIOUS_ARGS(const u8 *jumpInstr); + if (IsAbilityRodAffected()) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + case VARIOUS_JUMP_IF_MOTOR: + { + VARIOUS_ARGS(const u8 *jumpInstr); + if (IsAbilityMotorAffected()) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + case VARIOUS_JUMP_IF_ABSORB: + { + VARIOUS_ARGS(const u8 *jumpInstr); + if (IsAbilityAbsorbAffected()) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + case VARIOUS_TRY_WIND_RIDER_POWER: + { + VARIOUS_ARGS(const u8 *failInstr); + u16 ability = GetBattlerAbility(gActiveBattler); + if (GetBattlerSide(gActiveBattler) == GetBattlerSide(gBattlerAttacker) + && (ability == ABILITY_WIND_RIDER || ability == ABILITY_WIND_POWER)) + { + gLastUsedAbility = ability; + RecordAbilityBattle(gActiveBattler, gLastUsedAbility); + gBattlerAbility = gBattleScripting.battler = gActiveBattler; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } + return; + } + case VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES: + { + VARIOUS_ARGS(); + gBattlescriptCurrInstr = cmd->nextInstr; + AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, gActiveBattler, 0, 0, 0); + return; + } + case VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES: + { + VARIOUS_ARGS(); + gBattlescriptCurrInstr = cmd->nextInstr; + AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, gActiveBattler, 0, 0, 0); + return; + } + case VARIOUS_JUMP_IF_NO_VALID_TARGETS: + { + VARIOUS_ARGS(const u8 *jumpInstr); + u32 count = 0; + + for (i = 0; i < gBattlersCount; i++) + { + if (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) && IsBattlerAlive(i)) + count++; + } + if (count == 0) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + case VARIOUS_JUMP_IF_EMERGENCY_EXITED: + { + VARIOUS_ARGS(const u8 *jumpInstr); + if (gSpecialStatuses[gActiveBattler].emergencyExited) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + } // End of switch (cmd->id) + + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setprotectlike(void) { + CMD_ARGS(); + bool32 fail = TRUE; bool32 notLastTurn = TRUE; @@ -10119,6 +11092,11 @@ static void Cmd_setprotectlike(void) gProtectStructs[gBattlerAttacker].obstructed = TRUE; gBattleCommunication[MULTISTRING_CHOOSER] = 0; } + else if (gCurrentMove == MOVE_SILK_TRAP) + { + gProtectStructs[gBattlerAttacker].silkTrapped = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } gDisableStructs[gBattlerAttacker].protectUses++; fail = FALSE; @@ -10163,11 +11141,13 @@ static void Cmd_setprotectlike(void) gMoveResultFlags |= MOVE_RESULT_MISSED; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_tryexplosion(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags) return; @@ -10184,7 +11164,7 @@ static void Cmd_tryexplosion(void) gBattleMoveDamage = gBattleMons[gActiveBattler].hp; BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) { @@ -10197,6 +11177,8 @@ static void Cmd_tryexplosion(void) static void Cmd_setatkhptozero(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags) return; @@ -10205,12 +11187,14 @@ static void Cmd_setatkhptozero(void) BtlController_EmitSetMonData(BUFFER_A, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].hp), &gBattleMons[gActiveBattler].hp); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifnexttargetvalid(void) { - const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *jumpInstr); + + const u8 *jumpInstr = cmd->jumpInstr; for (gBattlerTarget++; gBattlerTarget < gBattlersCount; gBattlerTarget++) { @@ -10221,16 +11205,18 @@ static void Cmd_jumpifnexttargetvalid(void) } if (gBattlerTarget >= gBattlersCount) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; } static void Cmd_tryhealhalfhealth(void) { - const u8 *failPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *failInstr, u8 battler); - if (gBattlescriptCurrInstr[5] == BS_ATTACKER) + const u8 *failInstr = cmd->failInstr; + + if (cmd->battler == BS_ATTACKER) gBattlerTarget = gBattlerAttacker; gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2; @@ -10239,13 +11225,15 @@ static void Cmd_tryhealhalfhealth(void) gBattleMoveDamage *= -1; if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) - gBattlescriptCurrInstr = failPtr; + gBattlescriptCurrInstr = failInstr; else - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_trymirrormove(void) { + CMD_ARGS(); + s32 validMovesCount; s32 i; u16 move; @@ -10285,12 +11273,14 @@ static void Cmd_trymirrormove(void) else // no valid moves found { gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setrain(void) { + CMD_ARGS(); + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_RAIN, FALSE)) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -10300,11 +11290,13 @@ static void Cmd_setrain(void) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_RAIN; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setreflect(void) { + CMD_ARGS(); + if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_REFLECT) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -10324,11 +11316,13 @@ static void Cmd_setreflect(void) else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_SINGLE; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setseeded(void) { + CMD_ARGS(); + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT || gStatuses3[gBattlerTarget] & STATUS3_LEECHSEED) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -10346,12 +11340,14 @@ static void Cmd_setseeded(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_SET; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_manipulatedamage(void) { - switch (gBattlescriptCurrInstr[1]) + CMD_ARGS(u8 mode); + + switch (cmd->mode) { case DMG_CHANGE_SIGN: gBattleMoveDamage *= -1; @@ -10393,18 +11389,20 @@ static void Cmd_manipulatedamage(void) break; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_trysetrest(void) { - const u8 *failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *failInstr); + + const u8 *failInstr = cmd->failInstr; gActiveBattler = gBattlerTarget = gBattlerAttacker; gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP * (-1); if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) { - gBattlescriptCurrInstr = failJump; + gBattlescriptCurrInstr = failInstr; } else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN)) { @@ -10424,30 +11422,34 @@ static void Cmd_trysetrest(void) gBattleMons[gBattlerTarget].status1 = STATUS1_SLEEP_TURN(3); BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpifnotfirstturn(void) { - const u8 *failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *jumpInstr); + + const u8 *jumpInstr = cmd->jumpInstr; if (gDisableStructs[gBattlerAttacker].isFirstTurn) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = failJump; + gBattlescriptCurrInstr = jumpInstr; } static void Cmd_setmiracleeye(void) { + CMD_ARGS(const u8 *failInstr); + if (!(gStatuses3[gBattlerTarget] & STATUS3_MIRACLE_EYED)) { gStatuses3[gBattlerTarget] |= STATUS3_MIRACLE_EYED; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } @@ -10478,31 +11480,24 @@ bool8 UproarWakeUpCheck(u8 battlerId) return TRUE; } -static void Cmd_jumpifcantmakeasleep(void) +static void Cmd_jumpifuproarwakes(void) { - const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *jumpInstr); + + const u8 *jumpInstr = cmd->jumpInstr; u32 ability = GetBattlerAbility(gBattlerTarget); if (UproarWakeUpCheck(gBattlerTarget)) - { - gBattlescriptCurrInstr = jumpPtr; - } - else if (ability == ABILITY_INSOMNIA || ability == ABILITY_VITAL_SPIRIT) - { - gLastUsedAbility = ability; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAYED_AWAKE_USING; - gBattlescriptCurrInstr = jumpPtr; - RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); - } + gBattlescriptCurrInstr = jumpInstr; else - { - gBattlescriptCurrInstr += 5; - } + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_stockpile(void) { - switch (gBattlescriptCurrInstr[1]) + CMD_ARGS(u8 id); + + switch (cmd->id) { case 0: if (gDisableStructs[gBattlerAttacker].stockpileCounter >= 3) @@ -10528,15 +11523,17 @@ static void Cmd_stockpile(void) break; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_stockpiletobasedamage(void) { - const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *failInstr); + + const u8 *failInstr = cmd->failInstr; if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0) { - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = failInstr; } else { @@ -10550,17 +11547,19 @@ static void Cmd_stockpiletobasedamage(void) gBattleMons[gBattlerAttacker].statStages[STAT_DEF] -= gDisableStructs[gBattlerAttacker].stockpileDef; gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] -= gDisableStructs[gBattlerAttacker].stockpileSpDef; } - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_stockpiletohpheal(void) { - const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *failInstr); + + const u8 *failInstr = cmd->failInstr; if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0) { - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = failInstr; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FAILED; } else @@ -10568,7 +11567,7 @@ static void Cmd_stockpiletohpheal(void) if (gBattleMons[gBattlerAttacker].maxHP == gBattleMons[gBattlerAttacker].hp) { gDisableStructs[gBattlerAttacker].stockpileCounter = 0; - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = failInstr; gBattlerTarget = gBattlerAttacker; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FULL_HP; } @@ -10582,7 +11581,7 @@ static void Cmd_stockpiletohpheal(void) gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; gDisableStructs[gBattlerAttacker].stockpileCounter = 0; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; gBattlerTarget = gBattlerAttacker; } @@ -10595,6 +11594,8 @@ static void Cmd_stockpiletohpheal(void) // Sign change for drained HP handled in GetDrainedBigRootHp static void Cmd_setdrainedhp(void) { + CMD_ARGS(); + if (gBattleMoves[gCurrentMove].argument != 0) gBattleMoveDamage = (gHpDealt * gBattleMoves[gCurrentMove].argument / 100); else @@ -10603,7 +11604,7 @@ static void Cmd_setdrainedhp(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static u16 ReverseStatChangeMoveEffect(u16 moveEffect) @@ -10672,16 +11673,14 @@ static u16 ReverseStatChangeMoveEffect(u16 moveEffect) } } -#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; + bool32 affectsUser = (flags & MOVE_EFFECT_AFFECTS_USER); + bool32 mirrorArmored = (flags & STAT_CHANGE_MIRROR_ARMOR); if (affectsUser) gActiveBattler = gBattlerAttacker; @@ -10692,10 +11691,10 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr gSpecialStatuses[gActiveBattler].changedStatsBattlerId = gBattlerAttacker; - flags &= ~MOVE_EFFECT_AFFECTS_USER; + flags &= ~(MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_MIRROR_ARMOR); if (flags & MOVE_EFFECT_CERTAIN) - certain++; + certain = TRUE; flags &= ~MOVE_EFFECT_CERTAIN; if (flags & STAT_CHANGE_NOT_PROTECT_AFFECTED) @@ -10747,11 +11746,17 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr gBattlescriptCurrInstr = BattleScript_ButItFailed; return STAT_CHANGE_DIDNT_WORK; } - else if ((activeBattlerAbility == ABILITY_CLEAR_BODY + else if ((GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_CLEAR_AMULET + || activeBattlerAbility == ABILITY_CLEAR_BODY || activeBattlerAbility == ABILITY_FULL_METAL_BODY || activeBattlerAbility == ABILITY_WHITE_SMOKE) - && !certain && gCurrentMove != MOVE_CURSE) + && (!affectsUser || mirrorArmored) && !certain && gCurrentMove != MOVE_CURSE) { + if (GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_CLEAR_AMULET) + { + RecordItemEffectBattle(gActiveBattler, HOLD_EFFECT_CLEAR_AMULET); + } + if (flags == STAT_CHANGE_ALLOW_PTR) { if (gSpecialStatuses[gActiveBattler].statLowered) @@ -10807,7 +11812,7 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr } return STAT_CHANGE_DIDNT_WORK; } - else if (activeBattlerAbility == ABILITY_MIRROR_ARMOR && !affectsUser && gBattlerAttacker != gBattlerTarget && gActiveBattler == gBattlerTarget) + else if (activeBattlerAbility == ABILITY_MIRROR_ARMOR && !affectsUser && !mirrorArmored && gBattlerAttacker != gBattlerTarget && gActiveBattler == gBattlerTarget) { if (flags == STAT_CHANGE_ALLOW_PTR) { @@ -10822,6 +11827,12 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr } else if (activeBattlerAbility == ABILITY_SHIELD_DUST && flags == 0) { + RecordAbilityBattle(gActiveBattler, ABILITY_SHIELD_DUST); + return STAT_CHANGE_DIDNT_WORK; + } + else if (flags == 0 && GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_COVERT_CLOAK) + { + RecordItemEffectBattle(gActiveBattler, HOLD_EFFECT_COVERT_CLOAK); return STAT_CHANGE_DIDNT_WORK; } else // try to decrease @@ -10919,14 +11930,16 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr static void Cmd_statbuffchange(void) { - u16 flags = T1_READ_16(gBattlescriptCurrInstr + 1); + CMD_ARGS(u16 flags, const u8 *failInstr); + + u16 flags = cmd->flags; const u8 *ptrBefore = gBattlescriptCurrInstr; - const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + const u8 *failInstr = cmd->failInstr; - if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), GET_STAT_BUFF_ID(gBattleScripting.statChanger), flags, jumpPtr) == STAT_CHANGE_WORKED) - gBattlescriptCurrInstr += 7; + if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), GET_STAT_BUFF_ID(gBattleScripting.statChanger), flags, failInstr) == STAT_CHANGE_WORKED) + gBattlescriptCurrInstr = cmd->nextInstr; else if (gBattlescriptCurrInstr == ptrBefore) // Prevent infinite looping. - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = failInstr; } bool32 TryResetBattlerStatChanges(u8 battler) @@ -10950,37 +11963,45 @@ bool32 TryResetBattlerStatChanges(u8 battler) // Haze static void Cmd_normalisebuffs(void) { + CMD_ARGS(); + s32 i, j; for (i = 0; i < gBattlersCount; i++) TryResetBattlerStatChanges(i); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setbide(void) { + CMD_ARGS(); + gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS; gLockedMoves[gBattlerAttacker] = gCurrentMove; gTakenDmg[gBattlerAttacker] = 0; gBattleMons[gBattlerAttacker].status2 |= STATUS2_BIDE_TURN(2); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_confuseifrepeatingattackends(void) { + CMD_ARGS(); + if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE) && !gSpecialStatuses[gBattlerAttacker].dancerUsedMove) gBattleScripting.moveEffect = (MOVE_EFFECT_THRASH | MOVE_EFFECT_AFFECTS_USER); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setmultihitcounter(void) { - if (gBattlescriptCurrInstr[1]) + CMD_ARGS(u8 value); + + if (cmd->value) { - gMultiHitCounter = gBattlescriptCurrInstr[1]; + gMultiHitCounter = cmd->value; } else { @@ -11017,18 +12038,22 @@ static void Cmd_setmultihitcounter(void) } } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_initmultihitstring(void) { + CMD_ARGS(); + PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0) - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_forcerandomswitch(void) { + CMD_ARGS(const u8 *failInstr); + s32 i; s32 battler1PartyId = 0; s32 battler2PartyId = 0; @@ -11194,7 +12219,7 @@ static void Cmd_forcerandomswitch(void) if (!redCardForcedSwitch && validMons <= minNeeded) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -11236,12 +12261,14 @@ static void Cmd_forcerandomswitch(void) if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) gBattlescriptCurrInstr = BattleScript_RoarSuccessEndBattle; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_tryconversiontypechange(void) { + CMD_ARGS(const u8 *failInstr); + u8 validMoves = 0; u8 moveChecked; u8 moveType; @@ -11258,13 +12285,13 @@ static void Cmd_tryconversiontypechange(void) } if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { SET_BATTLER_TYPE(gBattlerAttacker, moveType); PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } #else // Randomly changes user's type to one of its moves' type @@ -11297,7 +12324,7 @@ static void Cmd_tryconversiontypechange(void) if (moveChecked == validMoves) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -11320,13 +12347,15 @@ static void Cmd_tryconversiontypechange(void) SET_BATTLER_TYPE(gBattlerAttacker, moveType); PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } #endif } static void Cmd_givepaydaymoney(void) { + CMD_ARGS(); + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) && gPaydayMoney != 0) { u32 bonusMoney = gPaydayMoney * gBattleStruct->moneyMultiplier; @@ -11334,17 +12363,19 @@ static void Cmd_givepaydaymoney(void) PREPARE_HWORD_NUMBER_BUFFER(gBattleTextBuff1, 5, bonusMoney) - BattleScriptPush(gBattlescriptCurrInstr + 1); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_PrintPayDayMoneyString; } else { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setlightscreen(void) { + CMD_ARGS(); + if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_LIGHTSCREEN) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -11365,11 +12396,13 @@ static void Cmd_setlightscreen(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_SINGLE; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_tryKO(void) { + CMD_ARGS(const u8 *failInstr); + bool32 lands = FALSE; u32 holdEffect = GetBattlerHoldEffect(gBattlerTarget, TRUE); u16 targetAbility = GetBattlerAbility(gBattlerTarget); @@ -11440,7 +12473,7 @@ static void Cmd_tryKO(void) gBattleMoveDamage = gBattleMons[gBattlerTarget].hp; gMoveResultFlags |= MOVE_RESULT_ONE_HIT_KO; } - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { @@ -11449,7 +12482,7 @@ static void Cmd_tryKO(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_MISS; else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_UNAFFECTED; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } } @@ -11457,15 +12490,19 @@ static void Cmd_tryKO(void) // Super Fang static void Cmd_damagetohalftargethp(void) { + CMD_ARGS(); + gBattleMoveDamage = gBattleMons[gBattlerTarget].hp / 2; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setsandstorm(void) { + CMD_ARGS(); + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SANDSTORM, FALSE)) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -11475,11 +12512,13 @@ static void Cmd_setsandstorm(void) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SANDSTORM; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_weatherdamage(void) { + CMD_ARGS(); + u32 ability = GetBattlerAbility(gBattlerAttacker); gBattleMoveDamage = 0; @@ -11529,11 +12568,13 @@ static void Cmd_weatherdamage(void) } } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_tryinfatuating(void) { + CMD_ARGS(const u8 *failInstr); + struct Pokemon *monAttacker, *monTarget; u16 speciesAttacker, speciesTarget; u32 personalityAttacker, personalityTarget; @@ -11567,27 +12608,29 @@ static void Cmd_tryinfatuating(void) || GetGenderFromSpeciesAndPersonality(speciesAttacker, personalityAttacker) == MON_GENDERLESS || GetGenderFromSpeciesAndPersonality(speciesTarget, personalityTarget) == MON_GENDERLESS) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMons[gBattlerTarget].status2 |= STATUS2_INFATUATED_WITH(gBattlerAttacker); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } } static void Cmd_updatestatusicon(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags) return; - if (gBattlescriptCurrInstr[1] != BS_ATTACKER_WITH_PARTNER) + if (cmd->battler != BS_ATTACKER_WITH_PARTNER) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitStatusIconUpdate(BUFFER_A, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } else { @@ -11606,12 +12649,14 @@ static void Cmd_updatestatusicon(void) MarkBattlerForControllerExec(gActiveBattler); } } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setmist(void) { + CMD_ARGS(); + if (gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].mistTimer) { gMoveResultFlags |= MOVE_RESULT_FAILED; @@ -11624,11 +12669,13 @@ static void Cmd_setmist(void) gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_MIST; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_MIST; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setfocusenergy(void) { + CMD_ARGS(); + if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY) { gMoveResultFlags |= MOVE_RESULT_FAILED; @@ -11639,13 +12686,15 @@ static void Cmd_setfocusenergy(void) gBattleMons[gBattlerAttacker].status2 |= STATUS2_FOCUS_ENERGY; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_GETTING_PUMPED; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_transformdataexecution(void) { + CMD_ARGS(); + gChosenMove = MOVE_UNAVAILABLE; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; if (gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED || gBattleStruct->illusion[gBattlerTarget].on || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE) @@ -11672,7 +12721,7 @@ static void Cmd_transformdataexecution(void) for (i = 0; i < offsetof(struct BattlePokemon, pp); i++) battleMonAttacker[i] = battleMonTarget[i]; - + gBattleStruct->overwrittenAbilities[gBattlerAttacker] = GetBattlerAbility(gBattlerTarget); for (i = 0; i < MAX_MON_MOVES; i++) { @@ -11691,6 +12740,8 @@ static void Cmd_transformdataexecution(void) static void Cmd_setsubstitute(void) { + CMD_ARGS(); + u32 hp = gBattleMons[gBattlerAttacker].maxHP / 4; if (gBattleMons[gBattlerAttacker].maxHP / 4 == 0) hp = 1; @@ -11713,16 +12764,18 @@ static void Cmd_setsubstitute(void) gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_mimicattackcopy(void) { + CMD_ARGS(const u8 *failInstr); + if ((sForbiddenMoves[gLastMoves[gBattlerTarget]] & FORBIDDEN_MIMIC) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) || gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -11746,18 +12799,22 @@ static void Cmd_mimicattackcopy(void) PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) gDisableStructs[gBattlerAttacker].mimickedMoves |= gBitTable[gCurrMovePos]; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } } static void Cmd_metronome(void) { -#if B_METRONOME_MOVES >= GEN_8 + CMD_ARGS(); + +#if B_METRONOME_MOVES >= GEN_9 + u16 moveCount = MOVES_COUNT_GEN9; +#elif B_METRONOME_MOVES >= GEN_8 u16 moveCount = MOVES_COUNT_GEN8; #elif B_METRONOME_MOVES >= GEN_7 u16 moveCount = MOVES_COUNT_GEN7; @@ -11789,12 +12846,16 @@ static void Cmd_metronome(void) static void Cmd_dmgtolevel(void) { + CMD_ARGS(); + gBattleMoveDamage = gBattleMons[gBattlerAttacker].level; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_psywavedamageeffect(void) { + CMD_ARGS(); + s32 randDamage; #if B_PSYWAVE_DMG >= GEN_6 randDamage = (Random() % 101); @@ -11802,11 +12863,13 @@ static void Cmd_psywavedamageeffect(void) randDamage = (Random() % 11) * 10; #endif gBattleMoveDamage = gBattleMons[gBattlerAttacker].level * (randDamage + 50) / 100; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_counterdamagecalculator(void) { + CMD_ARGS(const u8 *failInstr); + u8 sideAttacker = GetBattlerSide(gBattlerAttacker); u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId); @@ -11821,18 +12884,20 @@ static void Cmd_counterdamagecalculator(void) else gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } // A copy of Cmd with the physical -> special field changes static void Cmd_mirrorcoatdamagecalculator(void) { + CMD_ARGS(const u8 *failInstr); + u8 sideAttacker = GetBattlerSide(gBattlerAttacker); u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId); @@ -11847,17 +12912,19 @@ static void Cmd_mirrorcoatdamagecalculator(void) else gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_disablelastusedattack(void) { + CMD_ARGS(const u8 *failInstr); + s32 i; for (i = 0; i < MAX_MON_MOVES; i++) @@ -11878,17 +12945,18 @@ static void Cmd_disablelastusedattack(void) #else gDisableStructs[gBattlerTarget].disableTimer = 4; #endif - gDisableStructs[gBattlerTarget].disableTimerStartValue = gDisableStructs[gBattlerTarget].disableTimer; // used to save the random amount of turns? - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_trysetencore(void) { + CMD_ARGS(const u8 *failInstr); + s32 i; for (i = 0; i < MAX_MON_MOVES; i++) @@ -11897,9 +12965,12 @@ static void Cmd_trysetencore(void) break; } - if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE - || gLastMoves[gBattlerTarget] == MOVE_ENCORE - || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) + if (gLastMoves[gBattlerTarget] == MOVE_NONE + || gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE + || gLastMoves[gBattlerTarget] == MOVE_STRUGGLE + || gLastMoves[gBattlerTarget] == MOVE_ENCORE + || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE + || gLastMoves[gBattlerTarget] == MOVE_SHELL_TRAP) { i = MAX_MON_MOVES; } @@ -11910,17 +12981,19 @@ static void Cmd_trysetencore(void) gDisableStructs[gBattlerTarget].encoredMove = gBattleMons[gBattlerTarget].moves[i]; gDisableStructs[gBattlerTarget].encoredMovePos = i; gDisableStructs[gBattlerTarget].encoreTimer = 3; - gDisableStructs[gBattlerTarget].encoreTimerStartValue = gDisableStructs[gBattlerTarget].encoreTimer; - gBattlescriptCurrInstr += 5; + gDisableStructs[gBattlerTarget].encoreTimer; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_painsplitdmgcalc(void) { + CMD_ARGS(const u8 *failInstr); + if (!(DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))) { s32 hpDiff = (gBattleMons[gBattlerAttacker].hp + gBattleMons[gBattlerTarget].hp) / 2; @@ -11935,26 +13008,28 @@ static void Cmd_painsplitdmgcalc(void) gBattleMoveDamage = gBattleMons[gBattlerAttacker].hp - hpDiff; gSpecialStatuses[gBattlerTarget].dmg = 0xFFFF; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } // Conversion 2 static void Cmd_settypetorandomresistance(void) { + CMD_ARGS(const u8 *failInstr); + if (gLastLandedMoves[gBattlerAttacker] == MOVE_NONE || gLastLandedMoves[gBattlerAttacker] == MOVE_UNAVAILABLE) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else if (IsTwoTurnsMove(gLastLandedMoves[gBattlerAttacker]) && gBattleMons[gLastHitBy[gBattlerAttacker]].status2 & STATUS2_MULTIPLETURNS) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -11985,27 +13060,31 @@ static void Cmd_settypetorandomresistance(void) { SET_BATTLER_TYPE(gBattlerAttacker, i); PREPARE_TYPE_BUFFER(gBattleTextBuff1, i); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; return; } } } - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_setalwayshitflag(void) { + CMD_ARGS(); + gStatuses3[gBattlerTarget] &= ~STATUS3_ALWAYS_HITS; gStatuses3[gBattlerTarget] |= STATUS3_ALWAYS_HITS_TURN(2); gDisableStructs[gBattlerTarget].battlerWithSureHit = gBattlerAttacker; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // Sketch static void Cmd_copymovepermanently(void) { + CMD_ARGS(const u8 *failInstr); + gChosenMove = MOVE_UNAVAILABLE; if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) @@ -12026,7 +13105,7 @@ static void Cmd_copymovepermanently(void) if (i != MAX_MON_MOVES) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else // sketch worked { @@ -12048,12 +13127,12 @@ static void Cmd_copymovepermanently(void) PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastPrintedMoves[gBattlerTarget]) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } @@ -12092,6 +13171,8 @@ static u8 AttacksThisTurn(u8 battlerId, u16 move) // Note: returns 1 if it's a c static void Cmd_trychoosesleeptalkmove(void) { + CMD_ARGS(const u8 *failInstr); + u32 i, unusableMovesBits = 0, movePosition; for (i = 0; i < MAX_MON_MOVES; i++) @@ -12106,7 +13187,7 @@ static void Cmd_trychoosesleeptalkmove(void) unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~MOVE_LIMITATION_PP); if (unusableMovesBits == (1 << MAX_MON_MOVES) - 1) // all 4 moves cannot be chosen { - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else // at least one move can be chosen { @@ -12119,14 +13200,16 @@ static void Cmd_trychoosesleeptalkmove(void) gCurrMovePos = movePosition; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_setdestinybond(void) { + CMD_ARGS(); + gBattleMons[gBattlerAttacker].status2 |= STATUS2_DESTINY_BOND; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void TrySetDestinyBondToHappen(void) @@ -12143,12 +13226,16 @@ static void TrySetDestinyBondToHappen(void) static void Cmd_trysetdestinybondtohappen(void) { + CMD_ARGS(); + TrySetDestinyBondToHappen(); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_settailwind(void) { + CMD_ARGS(const u8 *failInstr); + u8 side = GetBattlerSide(gBattlerAttacker); if (!(gSideStatuses[side] & SIDE_STATUS_TAILWIND)) @@ -12160,16 +13247,18 @@ static void Cmd_settailwind(void) #else gSideTimers[side].tailwindTimer = 3; #endif - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_tryspiteppreduce(void) { + CMD_ARGS(const u8 *failInstr); + if (gLastMoves[gBattlerTarget] != MOVE_NONE && gLastMoves[gBattlerTarget] != MOVE_UNAVAILABLE) { @@ -12213,7 +13302,7 @@ static void Cmd_tryspiteppreduce(void) MarkBattlerForControllerExec(gActiveBattler); } - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; // Don't cut off Sky Drop if pp is brought to zero. if (gBattleMons[gBattlerTarget].pp[i] == 0 && gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF) @@ -12221,17 +13310,19 @@ static void Cmd_tryspiteppreduce(void) } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_healpartystatus(void) { + CMD_ARGS(); + u32 zero = 0; u8 toHeal = 0; @@ -12325,14 +13416,16 @@ static void Cmd_healpartystatus(void) MarkBattlerForControllerExec(gActiveBattler); } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_cursetarget(void) { + CMD_ARGS(const u8 *failInstr); + if (gBattleMons[gBattlerTarget].status2 & STATUS2_CURSED) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -12341,35 +13434,41 @@ static void Cmd_cursetarget(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_trysetspikes(void) { + CMD_ARGS(const u8 *failInstr); + u8 targetSide = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); if (gSideTimers[targetSide].spikesAmount == 3) { gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gSideStatuses[targetSide] |= SIDE_STATUS_SPIKES; gSideTimers[targetSide].spikesAmount++; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setforesight(void) { + CMD_ARGS(); + gBattleMons[gBattlerTarget].status2 |= STATUS2_FORESIGHT; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_trysetperishsong(void) { + CMD_ARGS(const u8 *failInstr); + s32 i; s32 notAffectedCount = 0; @@ -12385,20 +13484,21 @@ static void Cmd_trysetperishsong(void) { gStatuses3[i] |= STATUS3_PERISH_SONG; gDisableStructs[i].perishSongTimer = 3; - gDisableStructs[i].perishSongTimerStartValue = 3; } } PressurePPLoseOnUsingPerishSong(gBattlerAttacker); if (notAffectedCount == gBattlersCount) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_handlerollout(void) { + CMD_ARGS(); + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) { CancelMultiTurnMoves(gBattlerAttacker); @@ -12418,21 +13518,25 @@ static void Cmd_handlerollout(void) gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_MULTIPLETURNS; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpifconfusedandstatmaxed(void) { + CMD_ARGS(u8 stat, const u8 *jumpInstr); + if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION - && !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 + && !CompareStat(gBattlerTarget, cmd->stat, MAX_STAT_STAGE, CMP_LESS_THAN)) + gBattlescriptCurrInstr = cmd->jumpInstr; // Fails if we're confused AND stat cannot be raised else - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_handlefurycutter(void) { + CMD_ARGS(); + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) { gDisableStructs[gBattlerAttacker].furyCutterCounter = 0; @@ -12444,26 +13548,30 @@ static void Cmd_handlefurycutter(void) && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_1ST_HIT) // Don't increment counter on first hit gDisableStructs[gBattlerAttacker].furyCutterCounter++; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setembargo(void) { + CMD_ARGS(const u8 *failInstr); + if (gStatuses3[gBattlerTarget] & STATUS3_EMBARGO) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gStatuses3[gBattlerTarget] |= STATUS3_EMBARGO; gDisableStructs[gBattlerTarget].embargoTimer = 5; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_presentdamagecalculation(void) { + CMD_ARGS(); + u32 rand = Random() & 0xFF; /* Don't reroll present effect/power for the second hit of Parental Bond. @@ -12513,6 +13621,8 @@ static void Cmd_presentdamagecalculation(void) static void Cmd_setsafeguard(void) { + CMD_ARGS(); + if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_SAFEGUARD) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -12526,11 +13636,13 @@ static void Cmd_setsafeguard(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SAFEGUARD; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_magnitudedamagecalculation(void) { + CMD_ARGS(); + u32 magnitude = Random() % 100; if (magnitude < 5) @@ -12579,11 +13691,13 @@ static void Cmd_magnitudedamagecalculation(void) break; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifnopursuitswitchdmg(void) { + CMD_ARGS(const u8 *jumpInstr); + if (gMultiHitCounter == 1) { if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) @@ -12616,18 +13730,20 @@ static void Cmd_jumpifnopursuitswitchdmg(void) gCurrentMove = MOVE_PURSUIT; gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerTarget); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleScripting.animTurn = 1; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; } } static void Cmd_setsunny(void) { + CMD_ARGS(); + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SUN, FALSE)) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -12638,12 +13754,14 @@ static void Cmd_setsunny(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SUNLIGHT; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // Belly Drum static void Cmd_maxattackhalvehp(void) { + CMD_ARGS(const u8 *failInstr); + u32 halfHp = gBattleMons[gBattlerAttacker].maxHP / 2; if (!(gBattleMons[gBattlerAttacker].maxHP / 2)) @@ -12658,17 +13776,19 @@ static void Cmd_maxattackhalvehp(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } // Psych Up static void Cmd_copyfoestats(void) { + CMD_ARGS(const u8 *unused); + s32 i; for (i = 0; i < NUM_BATTLE_STATS; i++) @@ -12676,11 +13796,13 @@ static void Cmd_copyfoestats(void) gBattleMons[gBattlerAttacker].statStages[i] = gBattleMons[gBattlerTarget].statStages[i]; } - gBattlescriptCurrInstr += 5; // Has an unused jump ptr(possibly for a failed attempt) parameter. + gBattlescriptCurrInstr = cmd->nextInstr; // Has an unused jump ptr(possibly for a failed attempt) parameter. } static void Cmd_rapidspinfree(void) { + CMD_ARGS(); + u8 atkSide = GetBattlerSide(gBattlerAttacker); if (gBattleMons[gBattlerAttacker].status2 & STATUS2_WRAPPED) @@ -12729,18 +13851,22 @@ static void Cmd_rapidspinfree(void) } else { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setdefensecurlbit(void) { + CMD_ARGS(); + gBattleMons[gBattlerAttacker].status2 |= STATUS2_DEFENSE_CURL; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_recoverbasedonsunlight(void) { + CMD_ARGS(const u8 *failInstr); + gBattlerTarget = gBattlerAttacker; if (gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP) { @@ -12765,21 +13891,23 @@ static void Cmd_recoverbasedonsunlight(void) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_setstickyweb(void) { + CMD_ARGS(const u8 *failInstr); + u8 targetSide = GetBattlerSide(gBattlerTarget); if (gSideStatuses[targetSide] & SIDE_STATUS_STICKY_WEB) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -12787,12 +13915,14 @@ static void Cmd_setstickyweb(void) 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; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_selectfirstvalidtarget(void) { + CMD_ARGS(); + for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) { if (gBattlerTarget == gBattlerAttacker && !(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) & MOVE_TARGET_USER)) @@ -12800,14 +13930,16 @@ static void Cmd_selectfirstvalidtarget(void) if (IsBattlerAlive(gBattlerTarget)) break; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_trysetfutureattack(void) { + CMD_ARGS(const u8 *failInstr); + if (gWishFutureKnock.futureSightCounter[gBattlerTarget] != 0) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -12821,12 +13953,18 @@ static void Cmd_trysetfutureattack(void) else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FUTURE_SIGHT; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_trydobeatup(void) { + CMD_ARGS(const u8 *endInstr, const u8 *failInstr); + +#if B_BEAT_UP >= GEN_5 + gBattleStruct->beatUpSlot++; + gBattlescriptCurrInstr = cmd->nextInstr; +#else struct Pokemon *party; if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) @@ -12836,7 +13974,7 @@ static void Cmd_trydobeatup(void) if (gBattleMons[gBattlerTarget].hp == 0) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->endInstr; } else { @@ -12853,12 +13991,12 @@ static void Cmd_trydobeatup(void) { PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattleCommunication[0]) - gBattlescriptCurrInstr += 9; + gBattlescriptCurrInstr = cmd->nextInstr; - gBattleMoveDamage = gBaseStats[GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack; + gBattleMoveDamage = gSpeciesInfo[GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack; gBattleMoveDamage *= gBattleMoves[gCurrentMove].power; gBattleMoveDamage *= (GetMonData(&party[gBattleCommunication[0]], MON_DATA_LEVEL) * 2 / 5 + 2); - gBattleMoveDamage /= gBaseStats[gBattleMons[gBattlerTarget].species].baseDefense; + gBattleMoveDamage /= gSpeciesInfo[gBattleMons[gBattlerTarget].species].baseDefense; gBattleMoveDamage = (gBattleMoveDamage / 50) + 2; if (gProtectStructs[gBattlerAttacker].helpingHand) gBattleMoveDamage = gBattleMoveDamage * 15 / 10; @@ -12866,14 +14004,17 @@ static void Cmd_trydobeatup(void) gBattleCommunication[0]++; } else if (beforeLoop != 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->endInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = cmd->failInstr; } +#endif } static void Cmd_setsemiinvulnerablebit(void) { + CMD_ARGS(); + switch (gCurrentMove) { case MOVE_FLY: @@ -12893,25 +14034,31 @@ static void Cmd_setsemiinvulnerablebit(void) break; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_clearsemiinvulnerablebit(void) { + CMD_ARGS(); + gStatuses3[gBattlerAttacker] &= ~STATUS3_SEMI_INVULNERABLE; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setminimize(void) { + CMD_ARGS(); + if (gHitMarker & HITMARKER_OBEYS) gStatuses3[gBattlerAttacker] |= STATUS3_MINIMIZED; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_sethail(void) { + CMD_ARGS(); + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_HAIL, FALSE)) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -12922,11 +14069,13 @@ static void Cmd_sethail(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_HAIL; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_trymemento(void) { + CMD_ARGS(const u8 *failInstr); + #if B_MEMENTO_FAIL == GEN_3 if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == MIN_STAT_STAGE && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == MIN_STAT_STAGE @@ -12939,7 +14088,7 @@ static void Cmd_trymemento(void) #endif { // Failed, unprotected target already has minimum Attack and Special Attack. - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -12948,35 +14097,41 @@ static void Cmd_trymemento(void) gBattleMoveDamage = gBattleMons[gActiveBattler].hp; BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } // Follow Me static void Cmd_setforcedtarget(void) { + CMD_ARGS(); + gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 1; gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTarget = gBattlerTarget; gSideTimers[GetBattlerSide(gBattlerTarget)].followmePowder = TestMoveFlags(gCurrentMove, FLAG_POWDER); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setcharge(void) { + CMD_ARGS(); + gStatuses3[gBattlerAttacker] |= STATUS3_CHARGED_UP; gDisableStructs[gBattlerAttacker].chargeTimer = 2; - gDisableStructs[gBattlerAttacker].chargeTimerStartValue = 2; gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // Nature Power static void Cmd_callterrainattack(void) { + CMD_ARGS(); + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gCurrentMove = GetNaturePowerMove(); gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } u16 GetNaturePowerMove(void) @@ -12997,43 +14152,51 @@ u16 GetNaturePowerMove(void) // Refresh static void Cmd_cureifburnedparalysedorpoisoned(void) { + CMD_ARGS(const u8 *failInstr); + if (gBattleMons[gBattlerAttacker].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)) { gBattleMons[gBattlerAttacker].status1 = 0; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; gActiveBattler = gBattlerAttacker; BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_settorment(void) { + CMD_ARGS(const u8 *failInstr); + if (gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMons[gBattlerTarget].status2 |= STATUS2_TORMENT; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpifnodamage(void) { + CMD_ARGS(const u8 *jumpInstr); + if (gProtectStructs[gBattlerAttacker].physicalDmg || gProtectStructs[gBattlerAttacker].specialDmg) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; } static void Cmd_settaunt(void) { + CMD_ARGS(const u8 *failInstr); + #if B_OBLIVIOUS_TAUNT >= GEN_6 if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) { @@ -13055,17 +14218,19 @@ static void Cmd_settaunt(void) u8 turns = 2; #endif - gDisableStructs[gBattlerTarget].tauntTimer = gDisableStructs[gBattlerTarget].tauntTimer2 = turns; - gBattlescriptCurrInstr += 5; + gDisableStructs[gBattlerTarget].tauntTimer = turns; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_trysethelpinghand(void) { + CMD_ARGS(const u8 *failInstr); + gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE @@ -13074,17 +14239,19 @@ static void Cmd_trysethelpinghand(void) && !gProtectStructs[gBattlerTarget].helpingHand) { gProtectStructs[gBattlerTarget].helpingHand = TRUE; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } // Trick static void Cmd_tryswapitems(void) { + CMD_ARGS(const u8 *failInstr); + // opponent can't swap items with player in regular battles if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL || (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT @@ -13098,7 +14265,7 @@ static void Cmd_tryswapitems(void) #endif )))) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -13114,7 +14281,7 @@ static void Cmd_tryswapitems(void) && (gWishFutureKnock.knockedOffMons[sideAttacker] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]] || gWishFutureKnock.knockedOffMons[sideTarget] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]])) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } // can't swap if two pokemon don't have an item // or if either of them is an enigma berry or a mail @@ -13124,7 +14291,7 @@ static void Cmd_tryswapitems(void) || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerTarget].item) || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } // check if ability prevents swapping else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD) @@ -13159,7 +14326,7 @@ static void Cmd_tryswapitems(void) gBattleStruct->choicedMove[gBattlerTarget] = MOVE_NONE; gBattleStruct->choicedMove[gBattlerAttacker] = MOVE_NONE; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; PREPARE_ITEM_BUFFER(gBattleTextBuff1, *newItemAtk) PREPARE_ITEM_BUFFER(gBattleTextBuff2, oldItemAtk) @@ -13196,6 +14363,8 @@ static void Cmd_tryswapitems(void) // Role Play static void Cmd_trycopyability(void) { + CMD_ARGS(const u8 *failInstr); + u16 defAbility = gBattleMons[gBattlerTarget].ability; if (gBattleMons[gBattlerAttacker].ability == defAbility @@ -13203,31 +14372,33 @@ static void Cmd_trycopyability(void) || IsRolePlayBannedAbilityAtk(gBattleMons[gBattlerAttacker].ability) || IsRolePlayBannedAbility(defAbility)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerAttacker].ability; gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = defAbility; gLastUsedAbility = defAbility; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_trywish(void) { - switch (gBattlescriptCurrInstr[1]) + CMD_ARGS(u8 turnNumber, const u8 *failInstr); + + switch (cmd->turnNumber) { case 0: // use wish if (gWishFutureKnock.wishCounter[gBattlerAttacker] == 0) { gWishFutureKnock.wishCounter[gBattlerAttacker] = 2; gWishFutureKnock.wishPartyId[gBattlerAttacker] = gBattlerPartyIndexes[gBattlerAttacker]; - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = cmd->failInstr; } break; case 1: // heal effect @@ -13243,9 +14414,9 @@ static void Cmd_trywish(void) gBattleMoveDamage *= -1; if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = cmd->failInstr; else - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; break; } @@ -13253,24 +14424,28 @@ static void Cmd_trywish(void) static void Cmd_settoxicspikes(void) { + CMD_ARGS(const u8 *failInstr); + u8 targetSide = GetBattlerSide(gBattlerTarget); if (gSideTimers[targetSide].toxicSpikesAmount >= 2) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gSideTimers[targetSide].toxicSpikesAmount++; gSideStatuses[targetSide] |= SIDE_STATUS_TOXIC_SPIKES; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setgastroacid(void) { + CMD_ARGS(const u8 *failInstr); + if (IsGastroAcidBannedAbility(gBattleMons[gBattlerTarget].ability)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -13278,16 +14453,18 @@ static void Cmd_setgastroacid(void) gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; gStatuses3[gBattlerTarget] |= STATUS3_GASTRO_ACID; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setyawn(void) { + CMD_ARGS(const u8 *failInstr); + if (gStatuses3[gBattlerTarget] & STATUS3_YAWN || gBattleMons[gBattlerTarget].status1 & STATUS1_ANY) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN)) { @@ -13304,20 +14481,22 @@ static void Cmd_setyawn(void) else { gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setdamagetohealthdifference(void) { + CMD_ARGS(const u8 *failInstr); + if (gBattleMons[gBattlerTarget].hp <= gBattleMons[gBattlerAttacker].hp) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - gBattleMons[gBattlerAttacker].hp; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -13339,6 +14518,8 @@ static void HandleRoomMove(u32 statusFlag, u8 *timer, u8 stringId) static void Cmd_setroom(void) { + CMD_ARGS(); + switch (gBattleMoves[gCurrentMove].effect) { case EFFECT_TRICK_ROOM: @@ -13354,38 +14535,49 @@ static void Cmd_setroom(void) gBattleCommunication[MULTISTRING_CHOOSER] = 6; break; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // Skill Swap static void Cmd_tryswapabilities(void) { + CMD_ARGS(const u8 *failInstr); + if (IsSkillSwapBannedAbility(gBattleMons[gBattlerAttacker].ability) || IsSkillSwapBannedAbility(gBattleMons[gBattlerTarget].ability)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); - return; + RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); + gBattlescriptCurrInstr = cmd->failInstr; } - - if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); + gBattlescriptCurrInstr = cmd->failInstr; } else { - u16 abilityAtk = gBattleMons[gBattlerAttacker].ability; - gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability; - gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = abilityAtk; + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + u16 abilityAtk = gBattleMons[gBattlerAttacker].ability; + gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability; + gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = abilityAtk; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; + } } } static void Cmd_tryimprison(void) { + CMD_ARGS(const u8 *failInstr); + if ((gStatuses3[gBattlerAttacker] & STATUS3_IMPRISONED_OTHERS)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -13413,38 +14605,42 @@ static void Cmd_tryimprison(void) if (attackerMoveId != MAX_MON_MOVES) { gStatuses3[gBattlerAttacker] |= STATUS3_IMPRISONED_OTHERS; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; break; } } } 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); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_setstealthrock(void) { + CMD_ARGS(const u8 *failInstr); + u8 targetSide = GetBattlerSide(gBattlerTarget); if (gSideStatuses[targetSide] & SIDE_STATUS_STEALTH_ROCK) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gSideStatuses[targetSide] |= SIDE_STATUS_STEALTH_ROCK; gSideTimers[targetSide].stealthRockAmount = 1; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setuserstatus3(void) { - u32 flags = T1_READ_32(gBattlescriptCurrInstr + 1); + CMD_ARGS(u32 flags, const u8 *failInstr); + + u32 flags = cmd->flags; if (gStatuses3[gBattlerAttacker] & flags) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -13453,12 +14649,14 @@ static void Cmd_setuserstatus3(void) gDisableStructs[gBattlerAttacker].magnetRiseTimer = 5; if (flags & STATUS3_LASER_FOCUS) gDisableStructs[gBattlerAttacker].laserFocusTimer = 2; - gBattlescriptCurrInstr += 9; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_assistattackselect(void) { + CMD_ARGS(const u8 *failInstr); + s32 chooseableMovesNo = 0; struct Pokemon *party; s32 monId, moveId; @@ -13495,70 +14693,57 @@ static void Cmd_assistattackselect(void) gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gCalledMove = validMoves[((Random() & 0xFF) * chooseableMovesNo) >> 8]; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_trysetmagiccoat(void) { + CMD_ARGS(const u8 *failInstr); + gBattlerTarget = gBattlerAttacker; gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gProtectStructs[gBattlerAttacker].bounceMove = TRUE; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } // Snatch static void Cmd_trysetsnatch(void) { + CMD_ARGS(const u8 *failInstr); + gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gProtectStructs[gBattlerAttacker].stealMove = TRUE; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_trygetintimidatetarget(void) +static void Cmd_unused2(void) { - u8 side; - - gBattleScripting.battler = gBattleStruct->intimidateBattler; - side = GetBattlerSide(gBattleScripting.battler); - - PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gBattleMons[gBattleScripting.battler].ability) - - for (;gBattlerTarget < gBattlersCount; gBattlerTarget++) - { - if (GetBattlerSide(gBattlerTarget) == side) - continue; - if (!(gAbsentBattlerFlags & gBitTable[gBattlerTarget])) - break; - } - - if (gBattlerTarget >= gBattlersCount) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); - else - gBattlescriptCurrInstr += 5; } static void Cmd_switchoutabilities(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (gBattleMons[gActiveBattler].ability == ABILITY_NEUTRALIZING_GAS) { gBattleMons[gActiveBattler].ability = ABILITY_NONE; @@ -13590,24 +14775,28 @@ static void Cmd_switchoutabilities(void) break; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpifhasnohp(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler, const u8 *jumpInstr); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (gBattleMons[gActiveBattler].hp == 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_getsecretpowereffect(void) { + CMD_ARGS(); + gBattleScripting.moveEffect = GetSecretPowerMoveEffect(); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } u16 GetSecretPowerMoveEffect(void) @@ -13704,6 +14893,8 @@ u16 GetSecretPowerMoveEffect(void) static void Cmd_pickup(void) { + CMD_ARGS(); + s32 i; u16 species, heldItem; u16 ability; @@ -13720,7 +14911,7 @@ static void Cmd_pickup(void) species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - ability = gBaseStats[species].abilities[GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)]; + ability = gSpeciesInfo[species].abilities[GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)]; if (ability == ABILITY_PICKUP && species != SPECIES_NONE @@ -13731,7 +14922,6 @@ 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 @@ -13743,7 +14933,15 @@ static void Cmd_pickup(void) SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } } - #endif + #if P_SHUCKLE_BERRY_JUICE == TRUE + else if (species == SPECIES_SHUCKLE + && heldItem == ITEM_ORAN_BERRY + && (Random() % 16) == 0) + { + heldItem = ITEM_BERRY_JUICE; + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + #endif } } else @@ -13756,7 +14954,7 @@ static void Cmd_pickup(void) if (lvlDivBy10 > 9) lvlDivBy10 = 9; - ability = gBaseStats[species].abilities[GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)]; + ability = gSpeciesInfo[species].abilities[GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)]; if (ability == ABILITY_PICKUP && species != SPECIES_NONE @@ -13781,7 +14979,6 @@ static void Cmd_pickup(void) } } } - #if (defined ITEM_HONEY) else if (ability == ABILITY_HONEY_GATHER && species != 0 && species != SPECIES_EGG @@ -13793,15 +14990,25 @@ static void Cmd_pickup(void) SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } } - #endif + #if P_SHUCKLE_BERRY_JUICE == TRUE + else if (species == SPECIES_SHUCKLE + && heldItem == ITEM_ORAN_BERRY + && (Random() % 16) == 0) + { + heldItem = ITEM_BERRY_JUICE; + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + #endif } } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_doweatherformchangeanimation(void) { + CMD_ARGS(); + gActiveBattler = gBattleScripting.battler; if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE) @@ -13810,14 +15017,16 @@ static void Cmd_doweatherformchangeanimation(void) BtlController_EmitBattleAnimation(BUFFER_A, B_ANIM_CASTFORM_CHANGE, gBattleStruct->formToChangeInto); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_tryweatherformdatachange(void) { + CMD_ARGS(); + u8 form; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; form = TryWeatherFormChange(gBattleScripting.battler); if (form) { @@ -13829,6 +15038,8 @@ static void Cmd_tryweatherformdatachange(void) // Water and Mud Sport static void Cmd_settypebasedhalvers(void) { + CMD_ARGS(const u8 *failInstr); + bool8 worked = FALSE; if (gBattleMoves[gCurrentMove].effect == EFFECT_MUD_SPORT) @@ -13871,9 +15082,9 @@ static void Cmd_settypebasedhalvers(void) } if (worked) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } bool32 DoesSubstituteBlockMove(u8 battlerAtk, u8 battlerDef, u32 move) @@ -13906,14 +15117,18 @@ bool32 DoesDisguiseBlockMove(u8 battlerAtk, u8 battlerDef, u32 move) static void Cmd_jumpifsubstituteblocks(void) { + CMD_ARGS(const u8 *jumpInstr); + if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_tryrecycleitem(void) { + CMD_ARGS(const u8 *failInstr); + u16 *usedHeldItem; gActiveBattler = gBattlerAttacker; @@ -13927,11 +15142,11 @@ static void Cmd_tryrecycleitem(void) BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].item), &gBattleMons[gActiveBattler].item); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } @@ -13944,6 +15159,8 @@ bool32 CanCamouflage(u8 battlerId) static void Cmd_settypetoterrain(void) { + CMD_ARGS(const u8 *failInstr); + u8 terrainType; switch(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) { @@ -13969,17 +15186,19 @@ static void Cmd_settypetoterrain(void) SET_BATTLER_TYPE(gBattlerAttacker, terrainType); PREPARE_TYPE_BUFFER(gBattleTextBuff1, terrainType); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } // Unused static void Cmd_pursuitdoubles(void) { + CMD_ARGS(const u8 *failInstr); + gActiveBattler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE @@ -13989,19 +15208,21 @@ static void Cmd_pursuitdoubles(void) { gActionsByTurnOrder[gActiveBattler] = B_ACTION_TRY_FINISH; gCurrentMove = MOVE_PURSUIT; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleScripting.animTurn = 1; gBattleScripting.savedBattler = gBattlerAttacker; gBattlerAttacker = gActiveBattler; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_snatchsetbattlers(void) { + CMD_ARGS(); + gEffectBattler = gBattlerAttacker; if (gBattlerAttacker == gBattlerTarget) @@ -14010,12 +15231,14 @@ static void Cmd_snatchsetbattlers(void) gBattlerTarget = gBattleScripting.battler; gBattleScripting.battler = gEffectBattler; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // Brick Break static void Cmd_removelightscreenreflect(void) { + CMD_ARGS(); + u8 side; bool32 failed; @@ -14052,7 +15275,7 @@ static void Cmd_removelightscreenreflect(void) gBattleScripting.animTargetsHit = 0; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } u8 GetCatchingBattler(void) @@ -14065,6 +15288,8 @@ u8 GetCatchingBattler(void) static void Cmd_handleballthrow(void) { + CMD_ARGS(); + u16 ballMultiplier = 100; s8 ballAddition = 0; @@ -14095,9 +15320,9 @@ static void Cmd_handleballthrow(void) if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) catchRate = gBattleStruct->safariCatchFactor * 1275 / 100; else - catchRate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate; + catchRate = gSpeciesInfo[gBattleMons[gBattlerTarget].species].catchRate; - if (gBaseStats[gBattleMons[gBattlerTarget].species].flags & SPECIES_FLAG_ULTRA_BEAST) + if (gSpeciesInfo[gBattleMons[gBattlerTarget].species].flags & SPECIES_FLAG_ULTRA_BEAST) { if (gLastUsedItem == ITEM_BEAST_BALL) ballMultiplier = 500; @@ -14222,7 +15447,7 @@ static void Cmd_handleballthrow(void) } break; case ITEM_FAST_BALL: - if (gBaseStats[gBattleMons[gBattlerTarget].species].baseSpeed >= 100) + if (gSpeciesInfo[gBattleMons[gBattlerTarget].species].baseSpeed >= 100) ballMultiplier = 400; break; case ITEM_HEAVY_BALL: @@ -14383,6 +15608,8 @@ static void Cmd_handleballthrow(void) static void Cmd_givecaughtmon(void) { + CMD_ARGS(); + if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]]) != MON_GIVEN_TO_PARTY) { if (!ShouldShowBoxWasFullMessage()) @@ -14408,27 +15635,31 @@ static void Cmd_givecaughtmon(void) GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_NICKNAME, gBattleResults.caughtMonNick); gBattleResults.caughtMonBall = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_POKEBALL, NULL); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_trysetcaughtmondexflags(void) { + CMD_ARGS(const u8 *failInstr); + 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)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { HandleSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_SET_CAUGHT, personality); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_displaydexinfo(void) { + CMD_ARGS(); + u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_SPECIES, NULL); switch (gBattleCommunication[0]) @@ -14473,7 +15704,7 @@ static void Cmd_displaydexinfo(void) break; case 5: if (!gPaletteFade.active) - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; break; } } @@ -14546,6 +15777,8 @@ void BattleDestroyYesNoCursorAt(u8 cursorPosition) static void Cmd_trygivecaughtmonnick(void) { + CMD_ARGS(const u8 *successInstr); + switch (gBattleCommunication[MULTIUSE_STATE]) { case 0: @@ -14608,48 +15841,58 @@ static void Cmd_trygivecaughtmonnick(void) if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->successInstr; } break; case 4: if (CalculatePlayerPartyCount() == PARTY_SIZE) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->successInstr; break; } } static void Cmd_subattackerhpbydmg(void) { + CMD_ARGS(); + gBattleMons[gBattlerAttacker].hp -= gBattleMoveDamage; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_removeattackerstatus1(void) { + CMD_ARGS(); + gBattleMons[gBattlerAttacker].status1 = 0; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_finishaction(void) { + CMD_ARGS(); + gCurrentActionFuncId = B_ACTION_FINISHED; } static void Cmd_finishturn(void) { + CMD_ARGS(); + gCurrentActionFuncId = B_ACTION_FINISHED; gCurrentTurnActionNumber = gBattlersCount; } static void Cmd_trainerslideout(void) { - gActiveBattler = GetBattlerAtPosition(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 position); + + gActiveBattler = GetBattlerAtPosition(cmd->position); BtlController_EmitTrainerSlideBack(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static const u16 sTelekinesisBanList[] = @@ -14677,54 +15920,62 @@ bool32 IsTelekinesisBannedSpecies(u16 species) static void Cmd_settelekinesis(void) { + CMD_ARGS(const u8 *failInstr); + if (gStatuses3[gBattlerTarget] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN) || gFieldStatuses & STATUS_FIELD_GRAVITY || IsTelekinesisBannedSpecies(gBattleMons[gBattlerTarget].species)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gStatuses3[gBattlerTarget] |= STATUS3_TELEKINESIS; gDisableStructs[gBattlerTarget].telekinesisTimer = 3; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_swapstatstages(void) { - u8 statId = T1_READ_8(gBattlescriptCurrInstr + 1); - s8 atkStatStage = gBattleMons[gBattlerAttacker].statStages[statId]; - s8 defStatStage = gBattleMons[gBattlerTarget].statStages[statId]; + CMD_ARGS(u8 stat); - gBattleMons[gBattlerAttacker].statStages[statId] = defStatStage; - gBattleMons[gBattlerTarget].statStages[statId] = atkStatStage; + u8 stat = cmd->stat; + s8 atkStatStage = gBattleMons[gBattlerAttacker].statStages[stat]; + s8 defStatStage = gBattleMons[gBattlerTarget].statStages[stat]; - gBattlescriptCurrInstr += 2; + gBattleMons[gBattlerAttacker].statStages[stat] = defStatStage; + gBattleMons[gBattlerTarget].statStages[stat] = atkStatStage; + + gBattlescriptCurrInstr = cmd->nextInstr; } 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)); + CMD_ARGS(u8 stat); + + u8 stat = cmd->stat; + u16 atkStat = *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (stat - 1)); + u16 defStat = *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (stat - 1)); u16 average = (atkStat + defStat) / 2; - *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (statId - 1)) = average; - *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (statId - 1)) = average; + *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (stat - 1)) = average; + *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (stat - 1)) = average; - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifoppositegenders(void) { + CMD_ARGS(const u8 *jumpInstr); + 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); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_unused(void) @@ -14733,19 +15984,38 @@ static void Cmd_unused(void) static void Cmd_tryworryseed(void) { + CMD_ARGS(const u8 *failInstr); + if (IsWorrySeedBannedAbility(gBattleMons[gBattlerTarget].ability)) { + RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + { + RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = ABILITY_INSOMNIA; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_metalburstdamagecalculator(void) +static void Cmd_callnative(void) +{ + CMD_ARGS(void (*func)(void)); + void (*func)(void) = cmd->func; + func(); +} + +// Callnative Funcs +void BS_CalcMetalBurstDmg(void) { + NATIVE_ARGS(const u8 *failInstr); + u8 sideAttacker = GetBattlerSide(gBattlerAttacker); u8 sideTarget = 0; @@ -14760,7 +16030,7 @@ static void Cmd_metalburstdamagecalculator(void) else gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gProtectStructs[gBattlerAttacker].specialDmg && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId)) @@ -14773,12 +16043,29 @@ static void Cmd_metalburstdamagecalculator(void) else gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +void BS_JumpIfHoldEffect(void) +{ + u8 battler = gBattlescriptCurrInstr[5]; + u16 holdEffect = T1_READ_16(gBattlescriptCurrInstr + 6); + + if (GetBattlerHoldEffect(battler, TRUE) == holdEffect) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 8); + } + else + { + RecordItemEffectBattle(battler, holdEffect); + gLastUsedItem = gBattleMons[battler].item; // For B_LAST_USED_ITEM + gBattlescriptCurrInstr += 12; } } @@ -14800,10 +16087,8 @@ static bool32 CriticalCapture(u32 odds) 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) @@ -14817,7 +16102,7 @@ static bool32 CriticalCapture(u32 odds) bool8 IsMoveAffectedByParentalBond(u16 move, u8 battlerId) { - if (gBattleMoves[move].split != SPLIT_STATUS + if (gBattleMoves[move].split != SPLIT_STATUS && !(sForbiddenMoves[move] & FORBIDDEN_PARENTAL_BOND)) { if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) @@ -14855,3 +16140,51 @@ static bool8 IsFinalStrikeEffect(u16 move) } return FALSE; } + +static void TryUpdateRoundTurnOrder(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + u32 i; + u32 j = 0; + u32 k = 0; + u32 currRounder; + u8 roundUsers[3] = {0xFF, 0xFF, 0xFF}; + u8 nonRoundUsers[3] = {0xFF, 0xFF, 0xFF}; + for (i = 0; i < gBattlersCount; i++) + { + if (gBattlerByTurnOrder[i] == gBattlerAttacker) + { + currRounder = i + 1; // Current battler going after attacker + break; + } + } + + // Get battlers after us using round + for (i = currRounder; i < gBattlersCount; i++) + { + if (gChosenMoveByBattler[gBattlerByTurnOrder[i]] == MOVE_ROUND) + roundUsers[j++] = gBattlerByTurnOrder[i]; + else + nonRoundUsers[k++] = gBattlerByTurnOrder[i]; + } + + // update turn order for round users + for (i = 0; roundUsers[i] != 0xFF && i < 3; i++) + { + gBattlerByTurnOrder[currRounder] = roundUsers[i]; + gActionsByTurnOrder[currRounder] = gActionsByTurnOrder[roundUsers[i]]; + gProtectStructs[roundUsers[i]].quash = TRUE; // Make it so their turn order can't be changed again + currRounder++; + } + + // Update turn order for non-round users + for (i = 0; nonRoundUsers[i] != 0xFF && i < 3; i++) + { + gBattlerByTurnOrder[currRounder] = nonRoundUsers[i]; + gActionsByTurnOrder[currRounder] = gActionsByTurnOrder[nonRoundUsers[i]]; + currRounder++; + } + } +} + diff --git a/src/battle_tower.c b/src/battle_tower.c index 3ae7c350ca25..f66c8c1f7ab7 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -79,72 +79,71 @@ static void FillPartnerParty(u16 trainerId); static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); static u8 SetTentPtrsGetLevel(void); -// Const rom data. const u16 gBattleFrontierHeldItems[] = { - ITEM_NONE, - ITEM_KINGS_ROCK, - ITEM_SITRUS_BERRY, - ITEM_ORAN_BERRY, - ITEM_CHESTO_BERRY, - ITEM_HARD_STONE, - ITEM_FOCUS_BAND, - ITEM_PERSIM_BERRY, - ITEM_MIRACLE_SEED, - ITEM_BERRY_JUICE, - ITEM_MACHO_BRACE, - ITEM_SILVER_POWDER, - ITEM_CHERI_BERRY, - ITEM_BLACK_GLASSES, - ITEM_BLACK_BELT, - ITEM_SOUL_DEW, - ITEM_CHOICE_BAND, - ITEM_MAGNET, - ITEM_SILK_SCARF, - ITEM_WHITE_HERB, - ITEM_DEEP_SEA_SCALE, - ITEM_DEEP_SEA_TOOTH, - ITEM_MYSTIC_WATER, - ITEM_SHARP_BEAK, - ITEM_QUICK_CLAW, - ITEM_LEFTOVERS, - ITEM_RAWST_BERRY, - ITEM_LIGHT_BALL, - ITEM_POISON_BARB, - ITEM_NEVER_MELT_ICE, - ITEM_ASPEAR_BERRY, - ITEM_SPELL_TAG, - ITEM_BRIGHT_POWDER, - ITEM_LEPPA_BERRY, - ITEM_SCOPE_LENS, - ITEM_TWISTED_SPOON, - ITEM_METAL_COAT, - ITEM_MENTAL_HERB, - ITEM_CHARCOAL, - ITEM_PECHA_BERRY, - ITEM_SOFT_SAND, - ITEM_LUM_BERRY, - ITEM_DRAGON_SCALE, - ITEM_DRAGON_FANG, - ITEM_IAPAPA_BERRY, - ITEM_WIKI_BERRY, - ITEM_SEA_INCENSE, - ITEM_SHELL_BELL, - ITEM_SALAC_BERRY, - ITEM_LANSAT_BERRY, - ITEM_APICOT_BERRY, - ITEM_STARF_BERRY, - ITEM_LIECHI_BERRY, - ITEM_LEEK, - ITEM_LAX_INCENSE, - ITEM_AGUAV_BERRY, - ITEM_FIGY_BERRY, - ITEM_THICK_CLUB, - ITEM_MAGO_BERRY, - ITEM_METAL_POWDER, - ITEM_PETAYA_BERRY, - ITEM_LUCKY_PUNCH, - ITEM_GANLON_BERRY + [BATTLE_FRONTIER_ITEM_NONE] = ITEM_NONE, + [BATTLE_FRONTIER_ITEM_KINGS_ROCK] = ITEM_KINGS_ROCK, + [BATTLE_FRONTIER_ITEM_SITRUS_BERRY] = ITEM_SITRUS_BERRY, + [BATTLE_FRONTIER_ITEM_ORAN_BERRY] = ITEM_ORAN_BERRY, + [BATTLE_FRONTIER_ITEM_CHESTO_BERRY] = ITEM_CHESTO_BERRY, + [BATTLE_FRONTIER_ITEM_HARD_STONE] = ITEM_HARD_STONE, + [BATTLE_FRONTIER_ITEM_FOCUS_BAND] = ITEM_FOCUS_BAND, + [BATTLE_FRONTIER_ITEM_PERSIM_BERRY] = ITEM_PERSIM_BERRY, + [BATTLE_FRONTIER_ITEM_MIRACLE_SEED] = ITEM_MIRACLE_SEED, + [BATTLE_FRONTIER_ITEM_BERRY_JUICE] = ITEM_BERRY_JUICE, + [BATTLE_FRONTIER_ITEM_MACHO_BRACE] = ITEM_MACHO_BRACE, + [BATTLE_FRONTIER_ITEM_SILVER_POWDER] = ITEM_SILVER_POWDER, + [BATTLE_FRONTIER_ITEM_CHERI_BERRY] = ITEM_CHERI_BERRY, + [BATTLE_FRONTIER_ITEM_BLACK_GLASSES] = ITEM_BLACK_GLASSES, + [BATTLE_FRONTIER_ITEM_BLACK_BELT] = ITEM_BLACK_BELT, + [BATTLE_FRONTIER_ITEM_SOUL_DEW] = ITEM_SOUL_DEW, + [BATTLE_FRONTIER_ITEM_CHOICE_BAND] = ITEM_CHOICE_BAND, + [BATTLE_FRONTIER_ITEM_MAGNET] = ITEM_MAGNET, + [BATTLE_FRONTIER_ITEM_SILK_SCARF] = ITEM_SILK_SCARF, + [BATTLE_FRONTIER_ITEM_WHITE_HERB] = ITEM_WHITE_HERB, + [BATTLE_FRONTIER_ITEM_DEEP_SEA_SCALE] = ITEM_DEEP_SEA_SCALE, + [BATTLE_FRONTIER_ITEM_DEEP_SEA_TOOTH] = ITEM_DEEP_SEA_TOOTH, + [BATTLE_FRONTIER_ITEM_MYSTIC_WATER] = ITEM_MYSTIC_WATER, + [BATTLE_FRONTIER_ITEM_SHARP_BEAK] = ITEM_SHARP_BEAK, + [BATTLE_FRONTIER_ITEM_QUICK_CLAW] = ITEM_QUICK_CLAW, + [BATTLE_FRONTIER_ITEM_LEFTOVERS] = ITEM_LEFTOVERS, + [BATTLE_FRONTIER_ITEM_RAWST_BERRY] = ITEM_RAWST_BERRY, + [BATTLE_FRONTIER_ITEM_LIGHT_BALL] = ITEM_LIGHT_BALL, + [BATTLE_FRONTIER_ITEM_POISON_BARB] = ITEM_POISON_BARB, + [BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE] = ITEM_NEVER_MELT_ICE, + [BATTLE_FRONTIER_ITEM_ASPEAR_BERRY] = ITEM_ASPEAR_BERRY, + [BATTLE_FRONTIER_ITEM_SPELL_TAG] = ITEM_SPELL_TAG, + [BATTLE_FRONTIER_ITEM_BRIGHT_POWDER] = ITEM_BRIGHT_POWDER, + [BATTLE_FRONTIER_ITEM_LEPPA_BERRY] = ITEM_LEPPA_BERRY, + [BATTLE_FRONTIER_ITEM_SCOPE_LENS] = ITEM_SCOPE_LENS, + [BATTLE_FRONTIER_ITEM_TWISTED_SPOON] = ITEM_TWISTED_SPOON, + [BATTLE_FRONTIER_ITEM_METAL_COAT] = ITEM_METAL_COAT, + [BATTLE_FRONTIER_ITEM_MENTAL_HERB] = ITEM_MENTAL_HERB, + [BATTLE_FRONTIER_ITEM_CHARCOAL] = ITEM_CHARCOAL, + [BATTLE_FRONTIER_ITEM_PECHA_BERRY] = ITEM_PECHA_BERRY, + [BATTLE_FRONTIER_ITEM_SOFT_SAND] = ITEM_SOFT_SAND, + [BATTLE_FRONTIER_ITEM_LUM_BERRY] = ITEM_LUM_BERRY, + [BATTLE_FRONTIER_ITEM_DRAGON_SCALE] = ITEM_DRAGON_SCALE, + [BATTLE_FRONTIER_ITEM_DRAGON_FANG] = ITEM_DRAGON_FANG, + [BATTLE_FRONTIER_ITEM_IAPAPA_BERRY] = ITEM_IAPAPA_BERRY, + [BATTLE_FRONTIER_ITEM_WIKI_BERRY] = ITEM_WIKI_BERRY, + [BATTLE_FRONTIER_ITEM_SEA_INCENSE] = ITEM_SEA_INCENSE, + [BATTLE_FRONTIER_ITEM_SHELL_BELL] = ITEM_SHELL_BELL, + [BATTLE_FRONTIER_ITEM_SALAC_BERRY] = ITEM_SALAC_BERRY, + [BATTLE_FRONTIER_ITEM_LANSAT_BERRY] = ITEM_LANSAT_BERRY, + [BATTLE_FRONTIER_ITEM_APICOT_BERRY] = ITEM_APICOT_BERRY, + [BATTLE_FRONTIER_ITEM_STARF_BERRY] = ITEM_STARF_BERRY, + [BATTLE_FRONTIER_ITEM_LIECHI_BERRY] = ITEM_LIECHI_BERRY, + [BATTLE_FRONTIER_ITEM_LEEK] = ITEM_LEEK, + [BATTLE_FRONTIER_ITEM_LAX_INCENSE] = ITEM_LAX_INCENSE, + [BATTLE_FRONTIER_ITEM_AGUAV_BERRY] = ITEM_AGUAV_BERRY, + [BATTLE_FRONTIER_ITEM_FIGY_BERRY] = ITEM_FIGY_BERRY, + [BATTLE_FRONTIER_ITEM_THICK_CLUB] = ITEM_THICK_CLUB, + [BATTLE_FRONTIER_ITEM_MAGO_BERRY] = ITEM_MAGO_BERRY, + [BATTLE_FRONTIER_ITEM_METAL_POWDER] = ITEM_METAL_POWDER, + [BATTLE_FRONTIER_ITEM_PETAYA_BERRY] = ITEM_PETAYA_BERRY, + [BATTLE_FRONTIER_ITEM_LUCKY_PUNCH] = ITEM_LUCKY_PUNCH, + [BATTLE_FRONTIER_ITEM_GANLON_BERRY] = ITEM_GANLON_BERRY, }; #include "data/battle_frontier/battle_frontier_trainer_mons.h" @@ -3650,7 +3649,7 @@ void TrySetLinkBattleTowerEnemyPartyLevel(void) u32 species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL); if (species) { - SetMonData(&gEnemyParty[i], MON_DATA_EXP, &gExperienceTables[gBaseStats[species].growthRate][enemyLevel]); + SetMonData(&gEnemyParty[i], MON_DATA_EXP, &gExperienceTables[gSpeciesInfo[species].growthRate][enemyLevel]); CalculateMonStats(&gEnemyParty[i]); } } diff --git a/src/battle_transition.c b/src/battle_transition.c index 3675421ee101..4066f72e581c 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1406,7 +1406,7 @@ static bool8 Aqua_Init(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, BG_SCREEN_SIZE); LZ77UnCompVram(sTeamAqua_Tileset, tileset); - LoadPalette(sEvilTeam_Palette, 0xF0, sizeof(sEvilTeam_Palette)); + LoadPalette(sEvilTeam_Palette, BG_PLTT_ID(15), sizeof(sEvilTeam_Palette)); task->tState++; return FALSE; @@ -1421,7 +1421,7 @@ static bool8 Magma_Init(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, BG_SCREEN_SIZE); LZ77UnCompVram(sTeamMagma_Tileset, tileset); - LoadPalette(sEvilTeam_Palette, 0xF0, sizeof(sEvilTeam_Palette)); + LoadPalette(sEvilTeam_Palette, BG_PLTT_ID(15), sizeof(sEvilTeam_Palette)); task->tState++; return FALSE; @@ -1449,7 +1449,7 @@ static bool8 BigPokeball_Init(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, BG_SCREEN_SIZE); CpuCopy16(sBigPokeball_Tileset, tileset, sizeof(sBigPokeball_Tileset)); - LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); + LoadPalette(sFieldEffectPal_Pokeball, BG_PLTT_ID(15), sizeof(sFieldEffectPal_Pokeball)); task->tState++; return FALSE; @@ -1504,7 +1504,7 @@ static bool8 Regice_SetGfx(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LoadPalette(sRegice_Palette, 0xF0, sizeof(sRegice_Palette)); + LoadPalette(sRegice_Palette, BG_PLTT_ID(15), sizeof(sRegice_Palette)); CpuCopy16(sRegice_Tilemap, tilemap, 0x500); SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); @@ -1517,7 +1517,7 @@ static bool8 Registeel_SetGfx(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LoadPalette(sRegisteel_Palette, 0xF0, sizeof(sRegisteel_Palette)); + LoadPalette(sRegisteel_Palette, BG_PLTT_ID(15), sizeof(sRegisteel_Palette)); CpuCopy16(sRegisteel_Tilemap, tilemap, 0x500); SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); @@ -1530,7 +1530,7 @@ static bool8 Regirock_SetGfx(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LoadPalette(sRegirock_Palette, 0xF0, sizeof(sRegirock_Palette)); + LoadPalette(sRegirock_Palette, BG_PLTT_ID(15), sizeof(sRegirock_Palette)); CpuCopy16(sRegirock_Tilemap, tilemap, 0x500); SetSinWave(gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); @@ -1559,7 +1559,7 @@ static bool8 Kyogre_PaletteFlash(struct Task *task) { u16 offset = task->tTimer % 30; offset /= 3; - LoadPalette(&sKyogre1_Palette[offset * 16], 0xF0, 0x20); + LoadPalette(&sKyogre1_Palette[offset * 16], BG_PLTT_ID(15), PLTT_SIZE_4BPP); } if (++task->tTimer > 58) { @@ -1575,7 +1575,7 @@ static bool8 Kyogre_PaletteBrighten(struct Task *task) if (task->tTimer % 5 == 0) { s16 offset = task->tTimer / 5; - LoadPalette(&sKyogre2_Palette[offset * 16], 0xF0, 0x20); + LoadPalette(&sKyogre2_Palette[offset * 16], BG_PLTT_ID(15), PLTT_SIZE_4BPP); } if (++task->tTimer > 68) { @@ -1776,7 +1776,7 @@ static bool8 PokeballsTrail_Init(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); CpuSet(sPokeballTrail_Tileset, tileset, 0x20); CpuFill32(0, tilemap, BG_SCREEN_SIZE); - LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); + LoadPalette(sFieldEffectPal_Pokeball, BG_PLTT_ID(15), sizeof(sFieldEffectPal_Pokeball)); task->tState++; return FALSE; @@ -2328,8 +2328,8 @@ static bool8 Mugshot_SetGfx(struct Task *task) mugshotsMap = sMugshotsTilemap; GetBg0TilesDst(&tilemap, &tileset); CpuSet(sEliteFour_Tileset, tileset, 0xF0); - LoadPalette(sOpponentMugshotsPals[task->tMugshotId], 0xF0, 0x20); - LoadPalette(sPlayerMugshotsPals[gSaveBlock2Ptr->playerGender], 0xFA, 0xC); + LoadPalette(sOpponentMugshotsPals[task->tMugshotId], BG_PLTT_ID(15), PLTT_SIZE_4BPP); + LoadPalette(sPlayerMugshotsPals[gSaveBlock2Ptr->playerGender], BG_PLTT_ID(15) + 10, PLTT_SIZEOF(6)); for (i = 0; i < 20; i++) { @@ -3193,7 +3193,7 @@ static bool8 RectangularSpiral_Init(struct Task *task) CpuCopy16(sShrinkingBoxTileset, tileset, 0x20); CpuCopy16(&sShrinkingBoxTileset[0x70], &tileset[0x20], 0x20); CpuFill16(0xF0 << 8, tilemap, BG_SCREEN_SIZE); - LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); + LoadPalette(sFieldEffectPal_Pokeball, BG_PLTT_ID(15), sizeof(sFieldEffectPal_Pokeball)); task->data[3] = 1; task->tState++; @@ -3389,7 +3389,7 @@ static bool8 Groudon_PaletteFlash(struct Task *task) if (task->tTimer % 3 == 0) { u16 offset = (task->tTimer % 30) / 3; - LoadPalette(&sGroudon1_Palette[offset * 16], 0xF0, 0x20); + LoadPalette(&sGroudon1_Palette[offset * 16], BG_PLTT_ID(15), PLTT_SIZE_4BPP); } if (++task->tTimer > 58) { @@ -3405,7 +3405,7 @@ static bool8 Groudon_PaletteBrighten(struct Task *task) if (task->tTimer % 5 == 0) { s16 offset = task->tTimer / 5; - LoadPalette(&sGroudon2_Palette[offset * 16], 0xF0, 0x20); + LoadPalette(&sGroudon2_Palette[offset * 16], BG_PLTT_ID(15), PLTT_SIZE_4BPP); } if (++task->tTimer > 68) { @@ -3448,7 +3448,7 @@ static bool8 Rayquaza_Init(struct Task *task) sTransitionData->counter = 0; task->tState++; - LoadPalette(&sRayquaza_Palette[0x50], 0xF0, 0x20); + LoadPalette(&sRayquaza_Palette[80], BG_PLTT_ID(15), PLTT_SIZE_4BPP); for (i = 0; i < DISPLAY_HEIGHT; i++) { @@ -3476,7 +3476,7 @@ static bool8 Rayquaza_PaletteFlash(struct Task *task) { u16 value = task->tTimer / 4; const u16 *palPtr = &sRayquaza_Palette[(value + 5) * 16]; - LoadPalette(palPtr, 0xF0, 0x20); + LoadPalette(palPtr, BG_PLTT_ID(15), PLTT_SIZE_4BPP); } if (++task->tTimer > 40) { @@ -3524,7 +3524,7 @@ static bool8 Rayquaza_TriRing(struct Task *task) { u16 value = task->tTimer / 3; const u16 *palPtr = &sRayquaza_Palette[(value + 0) * 16]; - LoadPalette(palPtr, 0xF0, 0x20); + LoadPalette(palPtr, BG_PLTT_ID(15), PLTT_SIZE_4BPP); } if (++task->tTimer >= 40) { @@ -3775,7 +3775,7 @@ static bool8 GridSquares_Init(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); CpuSet(sShrinkingBoxTileset, tileset, 16); CpuFill16(0xF0 << 8, tilemap, BG_SCREEN_SIZE); - LoadPalette(sFieldEffectPal_Pokeball, 0xF0, sizeof(sFieldEffectPal_Pokeball)); + LoadPalette(sFieldEffectPal_Pokeball, BG_PLTT_ID(15), sizeof(sFieldEffectPal_Pokeball)); task->tState++; return FALSE; @@ -4242,7 +4242,7 @@ static bool8 FrontierLogoWiggle_Init(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, BG_SCREEN_SIZE); LZ77UnCompVram(sFrontierLogo_Tileset, tileset); - LoadPalette(sFrontierLogo_Palette, 0xF0, sizeof(sFrontierLogo_Palette)); + LoadPalette(sFrontierLogo_Palette, BG_PLTT_ID(15), sizeof(sFrontierLogo_Palette)); task->tState++; return FALSE; @@ -4304,7 +4304,7 @@ static bool8 FrontierLogoWave_Init(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, BG_SCREEN_SIZE); LZ77UnCompVram(sFrontierLogo_Tileset, tileset); - LoadPalette(sFrontierLogo_Palette, 0xF0, sizeof(sFrontierLogo_Palette)); + LoadPalette(sFrontierLogo_Palette, BG_PLTT_ID(15), sizeof(sFrontierLogo_Palette)); sTransitionData->cameraY = 0; task->tState++; @@ -4454,7 +4454,7 @@ static bool8 FrontierSquares_Init(struct Task *task) 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, sizeof(sFrontierSquares_Palette)); + LoadPalette(sFrontierSquares_Palette, BG_PLTT_ID(15), sizeof(sFrontierSquares_Palette)); task->tPosX = MARGIN_SIZE; task->tPosY = 0; @@ -4549,9 +4549,9 @@ static bool8 FrontierSquaresSpiral_Init(struct Task *task) 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, sizeof(sFrontierSquares_Palette)); - LoadPalette(sFrontierSquares_Palette, 0xF0, sizeof(sFrontierSquares_Palette)); - BlendPalette(0xE0, 16, 8, RGB_BLACK); + LoadPalette(sFrontierSquares_Palette, BG_PLTT_ID(14), sizeof(sFrontierSquares_Palette)); + LoadPalette(sFrontierSquares_Palette, BG_PLTT_ID(15), sizeof(sFrontierSquares_Palette)); + BlendPalette(BG_PLTT_ID(14), 16, 8, RGB_BLACK); task->tSquareNum = NUM_SQUARES - 1; task->tFadeFlag = 0; @@ -4581,7 +4581,7 @@ static bool8 FrontierSquaresSpiral_Outward(struct Task *task) // set it to black so it's not revealed when the squares are removed. static bool8 FrontierSquaresSpiral_SetBlack(struct Task *task) { - BlendPalette(0xE0, 16, 3, RGB_BLACK); + BlendPalette(BG_PLTT_ID(14), 16, 3, RGB_BLACK); BlendPalettes(PALETTES_ALL & ~(1 << 15 | 1 << 14), 16, RGB_BLACK); task->tSquareNum = 0; @@ -4664,7 +4664,7 @@ static bool8 FrontierSquaresScroll_Init(struct Task *task) LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); CopyBgTilemapBufferToVram(0); - LoadPalette(sFrontierSquares_Palette, 0xF0, sizeof(sFrontierSquares_Palette)); + LoadPalette(sFrontierSquares_Palette, BG_PLTT_ID(15), sizeof(sFrontierSquares_Palette)); gBattle_BG0_X = 0; gBattle_BG0_Y = 0; diff --git a/src/battle_transition_frontier.c b/src/battle_transition_frontier.c index 088865dbab90..252721129664 100644 --- a/src/battle_transition_frontier.c +++ b/src/battle_transition_frontier.c @@ -226,7 +226,7 @@ static void LoadLogoGfx(void) GetBg0TilesDst(&tilemap, &tileset); LZ77UnCompVram(sLogoCenter_Gfx, tileset); LZ77UnCompVram(sLogoCenter_Tilemap, tilemap); - LoadPalette(sLogo_Pal, 0xF0, sizeof(sLogo_Pal)); + LoadPalette(sLogo_Pal, BG_PLTT_ID(15), sizeof(sLogo_Pal)); LoadCompressedSpriteSheet(&sSpriteSheet_LogoCircles); LoadSpritePalette(&sSpritePalette_LogoCircles); } diff --git a/src/battle_tv.c b/src/battle_tv.c index 646c3563f9f0..10c2144ccdb2 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -86,220 +86,401 @@ 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_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_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_FOCUS_ENERGY] = 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_SUBSTITUTE] = 4, - [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_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, 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_PSYCH_UP] = 7, - [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_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_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_SKILL_SWAP] = 6, - [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_CAMOUFLAGE] = 3 + [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_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_FOCUS_ENERGY] = 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_SUBSTITUTE] = 4, + [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_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, 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_PSYCH_UP] = 7, + [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_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_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_SKILL_SWAP] = 6, + [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_CAMOUFLAGE] = 3, + [EFFECT_PLEDGE] = 0, // TODO: Assign points + [EFFECT_FLING] = 0, // TODO: Assign points + [EFFECT_NATURAL_GIFT] = 0, // TODO: Assign points + [EFFECT_WAKE_UP_SLAP] = 0, // TODO: Assign points + [EFFECT_WRING_OUT] = 0, // TODO: Assign points + [EFFECT_HEX] = 0, // TODO: Assign points + [EFFECT_ASSURANCE] = 0, // TODO: Assign points + [EFFECT_TRUMP_CARD] = 0, // TODO: Assign points + [EFFECT_ACROBATICS] = 0, // TODO: Assign points + [EFFECT_HEAT_CRASH] = 0, // TODO: Assign points + [EFFECT_PUNISHMENT] = 0, // TODO: Assign points + [EFFECT_STORED_POWER] = 0, // TODO: Assign points + [EFFECT_ELECTRO_BALL] = 0, // TODO: Assign points + [EFFECT_GYRO_BALL] = 0, // TODO: Assign points + [EFFECT_ECHOED_VOICE] = 0, // TODO: Assign points + [EFFECT_PAYBACK] = 0, // TODO: Assign points + [EFFECT_ROUND] = 0, // TODO: Assign points + [EFFECT_BRINE] = 0, // TODO: Assign points + [EFFECT_VENOSHOCK] = 0, // TODO: Assign points + [EFFECT_RETALIATE] = 0, // TODO: Assign points + [EFFECT_BULLDOZE] = 0, // TODO: Assign points + [EFFECT_FOUL_PLAY] = 0, // TODO: Assign points + [EFFECT_PSYSHOCK] = 0, // TODO: Assign points + [EFFECT_ROOST] = 0, // TODO: Assign points + [EFFECT_GRAVITY] = 0, // TODO: Assign points + [EFFECT_MIRACLE_EYE] = 0, // TODO: Assign points + [EFFECT_TAILWIND] = 0, // TODO: Assign points + [EFFECT_EMBARGO] = 0, // TODO: Assign points + [EFFECT_AQUA_RING] = 0, // TODO: Assign points + [EFFECT_TRICK_ROOM] = 0, // TODO: Assign points + [EFFECT_WONDER_ROOM] = 0, // TODO: Assign points + [EFFECT_MAGIC_ROOM] = 0, // TODO: Assign points + [EFFECT_MAGNET_RISE] = 0, // TODO: Assign points + [EFFECT_TOXIC_SPIKES] = 0, // TODO: Assign points + [EFFECT_GASTRO_ACID] = 0, // TODO: Assign points + [EFFECT_STEALTH_ROCK] = 0, // TODO: Assign points + [EFFECT_TELEKINESIS] = 0, // TODO: Assign points + [EFFECT_POWER_SWAP] = 0, // TODO: Assign points + [EFFECT_GUARD_SWAP] = 0, // TODO: Assign points + [EFFECT_HEART_SWAP] = 0, // TODO: Assign points + [EFFECT_POWER_SPLIT] = 0, // TODO: Assign points + [EFFECT_GUARD_SPLIT] = 0, // TODO: Assign points + [EFFECT_STICKY_WEB] = 0, // TODO: Assign points + [EFFECT_METAL_BURST] = 0, // TODO: Assign points + [EFFECT_LUCKY_CHANT] = 0, // TODO: Assign points + [EFFECT_SUCKER_PUNCH] = 0, // TODO: Assign points + [EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2] = 0, // TODO: Assign points + [EFFECT_SIMPLE_BEAM] = 0, // TODO: Assign points + [EFFECT_ENTRAINMENT] = 0, // TODO: Assign points + [EFFECT_HEAL_PULSE] = 0, // TODO: Assign points + [EFFECT_QUASH] = 0, // TODO: Assign points + [EFFECT_ION_DELUGE] = 0, // TODO: Assign points + [EFFECT_FREEZE_DRY] = 0, // TODO: Assign points + [EFFECT_TOPSY_TURVY] = 0, // TODO: Assign points + [EFFECT_MISTY_TERRAIN] = 0, // TODO: Assign points + [EFFECT_GRASSY_TERRAIN] = 0, // TODO: Assign points + [EFFECT_ELECTRIC_TERRAIN] = 0, // TODO: Assign points + [EFFECT_PSYCHIC_TERRAIN] = 0, // TODO: Assign points + [EFFECT_ATTACK_ACCURACY_UP] = 0, // TODO: Assign points + [EFFECT_ATTACK_SPATK_UP] = 0, // TODO: Assign points + [EFFECT_HURRICANE] = 0, // TODO: Assign points + [EFFECT_TWO_TYPED_MOVE] = 0, // TODO: Assign points + [EFFECT_ME_FIRST] = 0, // TODO: Assign points + [EFFECT_SPEED_UP_HIT] = 0, // TODO: Assign points + [EFFECT_QUIVER_DANCE] = 0, // TODO: Assign points + [EFFECT_COIL] = 0, // TODO: Assign points + [EFFECT_ELECTRIFY] = 0, // TODO: Assign points + [EFFECT_REFLECT_TYPE] = 0, // TODO: Assign points + [EFFECT_SOAK] = 0, // TODO: Assign points + [EFFECT_GROWTH] = 0, // TODO: Assign points + [EFFECT_CLOSE_COMBAT] = 0, // TODO: Assign points + [EFFECT_LAST_RESORT] = 0, // TODO: Assign points + [EFFECT_RECOIL_33_STATUS] = 0, // TODO: Assign points + [EFFECT_FLINCH_STATUS] = 0, // TODO: Assign points + [EFFECT_RECOIL_50] = 0, // TODO: Assign points + [EFFECT_SHELL_SMASH] = 0, // TODO: Assign points + [EFFECT_SHIFT_GEAR] = 0, // TODO: Assign points + [EFFECT_DEFENSE_UP_3] = 0, // TODO: Assign points + [EFFECT_NOBLE_ROAR] = 0, // TODO: Assign points + [EFFECT_VENOM_DRENCH] = 0, // TODO: Assign points + [EFFECT_TOXIC_THREAD] = 0, // TODO: Assign points + [EFFECT_CLEAR_SMOG] = 0, // TODO: Assign points + [EFFECT_HIT_SWITCH_TARGET] = 0, // TODO: Assign points + [EFFECT_FINAL_GAMBIT] = 0, // TODO: Assign points + [EFFECT_CHANGE_TYPE_ON_ITEM] = 0, // TODO: Assign points + [EFFECT_AUTOTOMIZE] = 0, // TODO: Assign points + [EFFECT_COPYCAT] = 0, // TODO: Assign points + [EFFECT_DEFOG] = 0, // TODO: Assign points + [EFFECT_HIT_ENEMY_HEAL_ALLY] = 0, // TODO: Assign points + [EFFECT_SMACK_DOWN] = 0, // TODO: Assign points + [EFFECT_SYNCHRONOISE] = 0, // TODO: Assign points + [EFFECT_PSYCHO_SHIFT] = 0, // TODO: Assign points + [EFFECT_POWER_TRICK] = 0, // TODO: Assign points + [EFFECT_FLAME_BURST] = 0, // TODO: Assign points + [EFFECT_AFTER_YOU] = 0, // TODO: Assign points + [EFFECT_BESTOW] = 0, // TODO: Assign points + [EFFECT_ROTOTILLER] = 0, // TODO: Assign points + [EFFECT_FLOWER_SHIELD] = 0, // TODO: Assign points + [EFFECT_HIT_PREVENT_ESCAPE] = 0, // TODO: Assign points + [EFFECT_SPEED_SWAP] = 0, // TODO: Assign points + [EFFECT_DEFENSE_UP2_HIT] = 0, // TODO: Assign points + [EFFECT_REVELATION_DANCE] = 0, // TODO: Assign points + [EFFECT_AURORA_VEIL] = 0, // TODO: Assign points + [EFFECT_THIRD_TYPE] = 0, // TODO: Assign points + [EFFECT_FEINT] = 0, // TODO: Assign points + [EFFECT_SPARKLING_ARIA] = 0, // TODO: Assign points + [EFFECT_ACUPRESSURE] = 0, // TODO: Assign points + [EFFECT_AROMATIC_MIST] = 0, // TODO: Assign points + [EFFECT_POWDER] = 0, // TODO: Assign points + [EFFECT_SP_ATTACK_UP_HIT] = 0, // TODO: Assign points + [EFFECT_BELCH] = 0, // TODO: Assign points + [EFFECT_PARTING_SHOT] = 0, // TODO: Assign points + [EFFECT_SPECTRAL_THIEF] = 0, // TODO: Assign points + [EFFECT_V_CREATE] = 0, // TODO: Assign points + [EFFECT_MAT_BLOCK] = 0, // TODO: Assign points + [EFFECT_STOMPING_TANTRUM] = 0, // TODO: Assign points + [EFFECT_CORE_ENFORCER] = 0, // TODO: Assign points + [EFFECT_INSTRUCT] = 0, // TODO: Assign points + [EFFECT_THROAT_CHOP] = 0, // TODO: Assign points + [EFFECT_LASER_FOCUS] = 0, // TODO: Assign points + [EFFECT_MAGNETIC_FLUX] = 0, // TODO: Assign points + [EFFECT_GEAR_UP] = 0, // TODO: Assign points + [EFFECT_INCINERATE] = 0, // TODO: Assign points + [EFFECT_BUG_BITE] = 0, // TODO: Assign points + [EFFECT_STRENGTH_SAP] = 0, // TODO: Assign points + [EFFECT_MIND_BLOWN] = 0, // TODO: Assign points + [EFFECT_PURIFY] = 0, // TODO: Assign points + [EFFECT_BURN_UP] = 0, // TODO: Assign points + [EFFECT_SHORE_UP] = 0, // TODO: Assign points + [EFFECT_GEOMANCY] = 0, // TODO: Assign points + [EFFECT_FAIRY_LOCK] = 0, // TODO: Assign points + [EFFECT_ALLY_SWITCH] = 0, // TODO: Assign points + [EFFECT_RELIC_SONG] = 0, // TODO: Assign points + [EFFECT_ATTACKER_DEFENSE_DOWN_HIT] = 0, // TODO: Assign points + [EFFECT_BODY_PRESS] = 0, // TODO: Assign points + [EFFECT_EERIE_SPELL] = 0, // TODO: Assign points + [EFFECT_JUNGLE_HEALING] = 0, // TODO: Assign points + [EFFECT_COACHING] = 0, // TODO: Assign points + [EFFECT_LASH_OUT] = 0, // TODO: Assign points + [EFFECT_GRASSY_GLIDE] = 0, // TODO: Assign points + [EFFECT_REMOVE_TERRAIN] = 0, // TODO: Assign points + [EFFECT_DYNAMAX_DOUBLE_DMG] = 0, // TODO: Assign points + [EFFECT_DECORATE] = 0, // TODO: Assign points + [EFFECT_SNIPE_SHOT] = 0, // TODO: Assign points + [EFFECT_RECOIL_HP_25] = 0, // TODO: Assign points + [EFFECT_STUFF_CHEEKS] = 0, // TODO: Assign points + [EFFECT_GRAV_APPLE] = 0, // TODO: Assign points + [EFFECT_EVASION_UP_HIT] = 0, // TODO: Assign points + [EFFECT_GLITZY_GLOW] = 0, // TODO: Assign points + [EFFECT_BADDY_BAD] = 0, // TODO: Assign points + [EFFECT_SAPPY_SEED] = 0, // TODO: Assign points + [EFFECT_FREEZY_FROST] = 0, // TODO: Assign points + [EFFECT_SPARKLY_SWIRL] = 0, // TODO: Assign points + [EFFECT_PLASMA_FISTS] = 0, // TODO: Assign points + [EFFECT_HYPERSPACE_FURY] = 0, // TODO: Assign points + [EFFECT_AURA_WHEEL] = 0, // TODO: Assign points + [EFFECT_PHOTON_GEYSER] = 0, // TODO: Assign points + [EFFECT_SHELL_SIDE_ARM] = 0, // TODO: Assign points + [EFFECT_TERRAIN_PULSE] = 0, // TODO: Assign points + [EFFECT_JAW_LOCK] = 0, // TODO: Assign points + [EFFECT_NO_RETREAT] = 0, // TODO: Assign points + [EFFECT_TAR_SHOT] = 0, // TODO: Assign points + [EFFECT_POLTERGEIST] = 0, // TODO: Assign points + [EFFECT_OCTOLOCK] = 0, // TODO: Assign points + [EFFECT_CLANGOROUS_SOUL] = 0, // TODO: Assign points + [EFFECT_BOLT_BEAK] = 0, // TODO: Assign points + [EFFECT_SKY_DROP] = 0, // TODO: Assign points + [EFFECT_EXPANDING_FORCE] = 0, // TODO: Assign points + [EFFECT_SCALE_SHOT] = 0, // TODO: Assign points + [EFFECT_METEOR_BEAM] = 0, // TODO: Assign points + [EFFECT_RISING_VOLTAGE] = 0, // TODO: Assign points + [EFFECT_BEAK_BLAST] = 0, // TODO: Assign points + [EFFECT_COURT_CHANGE] = 0, // TODO: Assign points + [EFFECT_STEEL_BEAM] = 0, // TODO: Assign points + [EFFECT_EXTREME_EVOBOOST] = 0, // TODO: Assign points + [EFFECT_HIT_SET_REMOVE_TERRAIN] = 0, // TODO: Assign points + [EFFECT_DARK_VOID] = 0, // TODO: Assign points + [EFFECT_SLEEP_HIT] = 1, + [EFFECT_DOUBLE_SHOCK] = 0, // TODO: Assign points + [EFFECT_SPECIAL_ATTACK_UP_HIT] = 1, + [EFFECT_VICTORY_DANCE] = 0, // TODO: Assign points }; static const u16 sPoints_Effectiveness[] = diff --git a/src/battle_util.c b/src/battle_util.c index faf4cdb89ab6..25ba83093c48 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -34,7 +34,6 @@ #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" @@ -61,6 +60,7 @@ static bool32 IsUnnerveAbilityOnOpposingSide(u8 battlerId); static u8 GetFlingPowerFromItemId(u16 itemId); static void SetRandomMultiHitCounter(); static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item); +static u16 GetInverseTypeMultiplier(u16 multiplier); extern const u8 *const gBattleScriptsForMoveEffects[]; extern const u8 *const gBattlescriptsForRunningByItem[]; @@ -230,9 +230,10 @@ static u8 CalcBeatUpPower(void) party = gPlayerParty; else party = gEnemyParty; - // Party slot is set in the battle script for Beat Up - species = GetMonData(&party[gBattleCommunication[0] - 1], MON_DATA_SPECIES); - basePower = (gBaseStats[species].baseAttack / 10) + 5; + + // Party slot is incremented by the battle script for Beat Up after this damage calculation + species = GetMonData(&party[gBattleStruct->beatUpSlot], MON_DATA_SPECIES); + basePower = (gSpeciesInfo[species].baseAttack / 10) + 5; return basePower; } @@ -258,7 +259,7 @@ bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move) void HandleAction_UseMove(void) { u32 i, side, moveType, var = 4; - u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); + u16 moveTarget; gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; if (gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker] || !IsBattlerAlive(gBattlerAttacker)) @@ -323,6 +324,8 @@ void HandleAction_UseMove(void) gCurrentMove = gBattleStruct->zmove.toBeUsed[gBattlerAttacker]; } + moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); + if (gBattleMons[gBattlerAttacker].hp != 0) { if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) @@ -345,7 +348,7 @@ void HandleAction_UseMove(void) } else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gSideTimers[side].followmeTimer == 0 - && (gBattleMoves[gCurrentMove].power != 0 || moveTarget != MOVE_TARGET_USER) + && (gBattleMoves[gCurrentMove].power != 0 || (moveTarget != MOVE_TARGET_USER && moveTarget != MOVE_TARGET_ALL_BATTLERS)) && ((GetBattlerAbility(*(gBattleStruct->moveTarget + gBattlerAttacker)) != ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC) || (GetBattlerAbility(*(gBattleStruct->moveTarget + gBattlerAttacker)) != ABILITY_STORM_DRAIN && moveType == TYPE_WATER))) { @@ -419,7 +422,7 @@ void HandleAction_UseMove(void) battlerAbility = GetBattlerAbility(gActiveBattler); RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability); - if (battlerAbility == ABILITY_LIGHTNING_ROD) + if (battlerAbility == ABILITY_LIGHTNING_ROD && gCurrentMove != MOVE_TEATIME) gSpecialStatuses[gActiveBattler].lightningRodRedirected = TRUE; else if (battlerAbility == ABILITY_STORM_DRAIN) gSpecialStatuses[gActiveBattler].stormDrainRedirected = TRUE; @@ -514,9 +517,11 @@ 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; + gSpecialStatuses[i].emergencyExited = FALSE; + } gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; } @@ -904,9 +909,8 @@ void HandleAction_NothingIsFainted(void) void HandleAction_ActionFinished(void) { #if B_RECALC_TURN_AFTER_ACTIONS >= GEN_8 - u8 i, j; - u8 battler1 = 0; - u8 battler2 = 0; + u32 i, j; + bool32 afterYouActive = gSpecialStatuses[gBattlerByTurnOrder[gCurrentTurnActionNumber + 1]].afterYou; #endif *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = PARTY_SIZE; gCurrentTurnActionNumber++; @@ -933,25 +937,32 @@ void HandleAction_ActionFinished(void) 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++) + if (!afterYouActive) { - for (j = i + 1; j < gBattlersCount; j++) + // 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++) { - 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)) + for (j = i + 1; j < gBattlersCount; j++) { - if (GetWhoStrikesFirst(battler1, battler2, TRUE)) // If the actions chosen are switching, we recalc order but ignoring the moves - SwapTurnOrder(i, j); + u8 battler1 = gBattlerByTurnOrder[i]; + u8 battler2 = gBattlerByTurnOrder[j]; + + if (gProtectStructs[battler1].quash || gProtectStructs[battler2].quash) + continue; + + // 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); + } } } } @@ -1065,6 +1076,11 @@ static const u8 sAbilitiesAffectedByMoldBreaker[] = [ABILITY_ICE_SCALES] = 1, [ABILITY_ICE_FACE] = 1, [ABILITY_PASTEL_VEIL] = 1, + [ABILITY_ARMOR_TAIL] = 1, + [ABILITY_EARTH_EATER] = 1, + [ABILITY_GOOD_AS_GOLD] = 1, + [ABILITY_PURIFYING_SALT] = 1, + [ABILITY_WELL_BAKED_BODY] = 1, }; static const u8 sAbilitiesNotTraced[ABILITIES_COUNT] = @@ -1257,38 +1273,6 @@ static const u16 sTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPE {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 @@ -1303,6 +1287,9 @@ u8 GetBattlerForBattleScript(u8 caseId) case BS_ATTACKER: ret = gBattlerAttacker; break; + case BS_ATTACKER_PARTNER: + ret = BATTLE_PARTNER(gBattlerAttacker); + break; case BS_EFFECT_BATTLER: ret = gEffectBattler; break; @@ -2074,57 +2061,6 @@ 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 GetBattlerFriendshipScore(u8 battlerId) { u8 side = GetBattlerSide(battlerId); @@ -2133,7 +2069,7 @@ u32 GetBattlerFriendshipScore(u8 battlerId) if (side != B_SIDE_PLAYER) return FRIENDSHIP_NONE; - else if (gBaseStats[species].flags & SPECIES_FLAG_MEGA_EVOLUTION + else if (gSpeciesInfo[species].flags & SPECIES_FLAG_MEGA_EVOLUTION || (gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK @@ -2144,6 +2080,17 @@ u32 GetBattlerFriendshipScore(u8 battlerId) return GetMonFriendshipScore(&party[gBattlerPartyIndexes[battlerId]]); } +static void TryToRevertMimicry(void) +{ + u32 i; + + for (i = 0; i < gBattlersCount; i++) + { + if (GetBattlerAbility(i) == ABILITY_MIMICRY) + RESTORE_BATTLER_TYPE(i); + } +} + enum { ENDTURN_ORDER, @@ -2205,7 +2152,9 @@ u8 DoFieldEndTurnEffects(void) s32 j; for (j = i + 1; j < gBattlersCount; j++) { - if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE)) + if (!gProtectStructs[i].quash + && !gProtectStructs[j].quash + && GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE)) SwapTurnOrder(i, j); } } @@ -2622,7 +2571,7 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_WEATHER_FORM: - AbilityBattleEffects(ABILITYEFFECT_WEATHER_FORM, 0, 0, 0, 0); + AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, 0, 0, 0, 0); gBattleStruct->turnCountersTracker++; break; case ENDTURN_STATUS_HEAL: @@ -2686,6 +2635,7 @@ enum ENDTURN_THROAT_CHOP, ENDTURN_SLOW_START, ENDTURN_PLASMA_FISTS, + ENDTURN_CUD_CHEW, ENDTURN_BATTLER_COUNT }; @@ -2766,7 +2716,7 @@ u8 DoBattlerEndTurnEffects(void) gBattleStruct->turnEffectsTracker++; break; case ENDTURN_ORBS: - if (ItemBattleEffects(ITEMEFFECT_ORBS, gActiveBattler, FALSE)) + if (IsBattlerAlive(gActiveBattler) && ItemBattleEffects(ITEMEFFECT_ORBS, gActiveBattler, FALSE)) effect++; gBattleStruct->turnEffectsTracker++; break; @@ -2947,7 +2897,8 @@ u8 DoBattlerEndTurnEffects(void) { u16 battlerAbility = GetBattlerAbility(gActiveBattler); if (gDisableStructs[gActiveBattler].octolock - && !(battlerAbility == ABILITY_CLEAR_BODY + && !(GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_CLEAR_AMULET + || battlerAbility == ABILITY_CLEAR_BODY || battlerAbility == ABILITY_FULL_METAL_BODY || battlerAbility == ABILITY_WHITE_SMOKE)) { @@ -3224,8 +3175,12 @@ u8 DoBattlerEndTurnEffects(void) gBattleStruct->turnEffectsTracker++; break; case ENDTURN_PLASMA_FISTS: - for (i = 0; i < gBattlersCount; i++) - gStatuses4[i] &= ~STATUS4_PLASMA_FISTS; + gStatuses4[gActiveBattler] &= ~STATUS4_PLASMA_FISTS; + gBattleStruct->turnEffectsTracker++; + break; + case ENDTURN_CUD_CHEW: + if (GetBattlerAbility(gActiveBattler) == ABILITY_CUD_CHEW && !gDisableStructs[gActiveBattler].cudChew && ItemId_GetPocket(GetUsedHeldItem(gActiveBattler)) == POCKET_BERRIES) + gDisableStructs[gActiveBattler].cudChew = TRUE; gBattleStruct->turnEffectsTracker++; break; case ENDTURN_BATTLER_COUNT: // done @@ -3455,35 +3410,6 @@ void TryClearRageAndFuryCutter(void) } } -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, - CANCELLER_PARALYSED, - CANCELLER_IN_LOVE, - CANCELLER_BIDE, - CANCELLER_THAW, - CANCELLER_POWDER_MOVE, - CANCELLER_POWDER_STATUS, - CANCELLER_THROAT_CHOP, - CANCELLER_MULTIHIT_MOVES, - CANCELLER_Z_MOVES, - CANCELLER_END, - CANCELLER_PSYCHIC_TERRAIN, - CANCELLER_END2, -}; - u8 AtkCanceller_UnableToUseMove(void) { u8 effect = 0; @@ -3798,7 +3724,10 @@ u8 AtkCanceller_UnableToUseMove(void) if (effect != 0) gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect; } - gBattleStruct->atkCancellerTracker++; + if (gProtectStructs[gBattlerAttacker].usesBouncedMove) // Edge case for bouncing a powder move against a grass type pokemon. + gBattleStruct->atkCancellerTracker = CANCELLER_END; + else + gBattleStruct->atkCancellerTracker++; break; case CANCELLER_POWDER_STATUS: if (gBattleMons[gBattlerAttacker].status2 & STATUS2_POWDER) @@ -3872,6 +3801,7 @@ u8 AtkCanceller_UnableToUseMove(void) { SetRandomMultiHitCounter(); } + PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0) } else if (gBattleMoves[gCurrentMove].flags & FLAG_TWO_STRIKES) @@ -3898,7 +3828,7 @@ u8 AtkCanceller_UnableToUseMove(void) party = gPlayerParty; else party = gEnemyParty; - + for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) @@ -3908,7 +3838,7 @@ u8 AtkCanceller_UnableToUseMove(void) gMultiHitCounter++; } - gBattleCommunication[0] = 0; // For later + gBattleStruct->beatUpSlot = 0; PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0) } #endif @@ -4202,6 +4132,21 @@ static const u16 sWeatherFlagsInfo[][3] = [ENUM_WEATHER_STRONG_WINDS] = {B_WEATHER_STRONG_WINDS, B_WEATHER_STRONG_WINDS, HOLD_EFFECT_NONE}, }; +static void ShouldChangeFormInWeather(u8 battler) +{ + int i; + int side = GetBattlerSide(battler); + struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_EISCUE_NOICE_FACE) + gBattleStruct->allowedToChangeFormInWeather[i][side] = TRUE; + else + gBattleStruct->allowedToChangeFormInWeather[i][side] = FALSE; + } +} + bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility) { u16 battlerAbility = GetBattlerAbility(battler); @@ -4217,6 +4162,7 @@ bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility) else if (viaAbility && !(gBattleWeather & sWeatherFlagsInfo[weatherEnumId][1])) { gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1]); + ShouldChangeFormInWeather(battler); return TRUE; } #endif @@ -4227,7 +4173,7 @@ bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility) gWishFutureKnock.weatherDuration = 8; else gWishFutureKnock.weatherDuration = 5; - + ShouldChangeFormInWeather(battler); return TRUE; } @@ -4238,7 +4184,7 @@ 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 &= ~(STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN); gFieldStatuses |= statusFlag; if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER) @@ -4356,6 +4302,26 @@ static u8 ForewarnChooseMove(u32 battler) Free(data); } +bool8 ChangeTypeBasedOnTerrain(u8 battlerId) +{ + u8 battlerType; + + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + battlerType = TYPE_ELECTRIC; + else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + battlerType = TYPE_GRASS; + else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) + battlerType = TYPE_FAIRY; + else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) + battlerType = TYPE_PSYCHIC; + else // failsafe + return FALSE; + + SET_BATTLER_TYPE(battlerId, battlerType); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, battlerType); + return TRUE; +} + u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 moveArg) { u8 effect = 0; @@ -4752,6 +4718,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } break; case ABILITY_ELECTRIC_SURGE: + case ABILITY_HADRON_ENGINE: if (TryChangeBattleTerrain(battler, STATUS_FIELD_ELECTRIC_TERRAIN, &gFieldTimers.terrainTimer)) { BattleScriptPushCursorAndCallback(BattleScript_ElectricSurgeActivates); @@ -4780,23 +4747,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } break; case ABILITY_INTIMIDATE: - if (!(gSpecialStatuses[battler].intimidatedMon)) - { - gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_INTIMIDATED; - gSpecialStatuses[battler].intimidatedMon = TRUE; - } - break; - case ABILITY_FORECAST: -#if B_WEATHER_FORMS >= GEN_5 - case ABILITY_FLOWER_GIFT: -#else - TRY_WEATHER_FORM: -#endif - effect = TryWeatherFormChange(battler); - if (effect != 0) + if (!gSpecialStatuses[battler].switchInAbilityDone) { - BattleScriptPushCursorAndCallback(BattleScript_WeatherFormChange); - *(&gBattleStruct->formToChangeInto) = effect - 1; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + SET_STATCHANGER(STAT_ATK, 1, TRUE); + BattleScriptPushCursorAndCallback(BattleScript_IntimidateActivates); + effect++; } break; case ABILITY_TRACE: @@ -4866,10 +4822,68 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move effect++; } break; - case ABILITY_MIMICRY: - if (gBattleMons[battler].hp != 0 && gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + case ABILITY_VESSEL_OF_RUIN: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_RuinAbilityActivates); + effect++; + } + break; + case ABILITY_SWORD_OF_RUIN: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_DEF); + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_RuinAbilityActivates); + effect++; + } + break; + case ABILITY_TABLETS_OF_RUIN: + if (!gSpecialStatuses[battler].switchInAbilityDone) { - TryToApplyMimicry(battler, FALSE); + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_RuinAbilityActivates); + effect++; + } + break; + case ABILITY_BEADS_OF_RUIN: + if (!gSpecialStatuses[battler].switchInAbilityDone) + { + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPDEF); + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_RuinAbilityActivates); + effect++; + } + break; + case ABILITY_ORICHALCUM_PULSE: + if (TryChangeBattleWeather(battler, ENUM_WEATHER_SUN, TRUE)) + { + BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates); + effect++; + } + break; + case ABILITY_SUPREME_OVERLORD: + if (!gSpecialStatuses[battler].switchInAbilityDone && CountUsablePartyMons(battler) < PARTY_SIZE) + { + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + BattleScriptPushCursorAndCallback(BattleScript_SupremeOverlordActivates); + effect++; + } + break; + case ABILITY_COSTAR: + if (!gSpecialStatuses[battler].switchInAbilityDone + && IsDoubleBattle() + && IsBattlerAlive(BATTLE_PARTNER(battler)) + && CountBattlerStatIncreases(BATTLE_PARTNER(battler), FALSE)) + { + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + for (i = 0; i < NUM_BATTLE_STATS; i++) + gBattleMons[battler].statStages[i] = gBattleMons[BATTLE_PARTNER(battler)].statStages[i]; + gBattlerTarget = BATTLE_PARTNER(battler); + BattleScriptPushCursorAndCallback(BattleScript_CostarActivates); effect++; } break; @@ -5076,48 +5090,75 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move effect++; } break; + case ABILITY_CUD_CHEW: + if (ItemId_GetPocket(GetUsedHeldItem(battler)) == POCKET_BERRIES && gDisableStructs[gActiveBattler].cudChew == TRUE) + { + gLastUsedItem = gBattleStruct->usedHeldItems[battler][GetBattlerSide(battler)]; + gBattleStruct->usedHeldItems[battler][GetBattlerSide(battler)] = ITEM_NONE; + BattleScriptPushCursorAndCallback(BattleScript_CudChewActivates); + 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; + u16 moveTarget = GetBattlerMoveTargetType(battler, move); + u16 battlerAbility = GetBattlerAbility(battler); + u16 targetAbility = GetBattlerAbility(gBattlerTarget); + + 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 || gLastUsedAbility == ABILITY_ARMOR_TAIL || IsBattlerAlive(battler ^= BIT_FLANK)) + && (battlerAbility == ABILITY_DAZZLING || battlerAbility == ABILITY_QUEENLY_MAJESTY || battlerAbility == ABILITY_ARMOR_TAIL) + && 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) && targetAbility == 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; + } + else if (GetBattlerAbility(gBattlerTarget) == ABILITY_GOOD_AS_GOLD + && IS_MOVE_STATUS(gCurrentMove) + && !(moveTarget & MOVE_TARGET_USER) + && !(moveTarget & MOVE_TARGET_OPPONENTS_FIELD) + && !(moveTarget & MOVE_TARGET_ALL_BATTLERS)) + { + gBattlescriptCurrInstr = BattleScript_GoodAsGoldActivates; + effect = 1; + } + else if (gLastUsedAbility == ABILITY_ICE_FACE && IS_MOVE_PHYSICAL(move) && gBattleMons[gBattlerTarget].species == SPECIES_EISCUE) + { + gBattleMons[gBattlerTarget].species = SPECIES_EISCUE_NOICE_FACE; + if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) + gHitMarker |= HITMARKER_NO_PPDEDUCT; + gBattleScripting.battler = gBattlerTarget; // For STRINGID_PKMNTRANSFORMED + gBattlescriptCurrInstr = BattleScript_IceFaceNullsDamage; + effect = 1; + } + break; } - break; - } case ABILITYEFFECT_ABSORBING: // 3 if (move != MOVE_NONE) { u8 statId; + u8 statAmount = 1; switch (gLastUsedAbility) { case ABILITY_VOLT_ABSORB: @@ -5175,6 +5216,18 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } } break; + case ABILITY_WELL_BAKED_BODY: + if (moveType == TYPE_FIRE) + effect = 2, statId = STAT_DEF, statAmount = 2; + break; + case ABILITY_WIND_RIDER: + if (gBattleMoves[gCurrentMove].flags & FLAG_WIND_MOVE && !(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) & MOVE_TARGET_USER)) + effect = 2, statId = STAT_ATK; + break; + case ABILITY_EARTH_EATER: + if (moveType == TYPE_GROUND) + effect = 1; + break; } if (effect == 1) // Drain Hp ability. @@ -5219,9 +5272,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move else gBattlescriptCurrInstr = BattleScript_MoveStatDrain_PPLoss; - SET_STATCHANGER(statId, 1, FALSE); + SET_STATCHANGER(statId, statAmount, FALSE); + #if B_ABSORBING_ABILITY_STRING < GEN_5 gBattleMons[battler].statStages[statId]++; PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); + #endif } } } @@ -5355,11 +5410,13 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move effect++; } break; + case ABILITY_LINGERING_AROMA: case ABILITY_MUMMY: if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && TARGET_TURN_DAMAGED - && (IsMoveMakingContact(move, gBattlerAttacker))) + && IsMoveMakingContact(move, gBattlerAttacker) + && gBattleStruct->overwrittenAbilities[gBattlerAttacker] != GetBattlerAbility(gBattlerTarget)) { switch (gBattleMons[gBattlerAttacker].ability) { @@ -5375,7 +5432,13 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move case ABILITY_STANCE_CHANGE: break; default: - gLastUsedAbility = gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = ABILITY_MUMMY; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + { + RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD); + break; + } + + gLastUsedAbility = gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MummyActivates; effect++; @@ -5406,6 +5469,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move case ABILITY_ZEN_MODE: break; default: + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + { + RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD); + break; + } + gLastUsedAbility = gBattleMons[gBattlerAttacker].ability; gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability; gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gLastUsedAbility; @@ -5484,17 +5553,26 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } break; case ABILITY_AFTERMATH: - if (!IsAbilityOnField(ABILITY_DAMP) - && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + if (!(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; + u8 battler; + if ((battler = IsAbilityOnField(ABILITY_DAMP))) + { + gBattleScripting.battler = battler - 1; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_DampPreventsAftermath; + } + else + { + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AftermathDmg; + } effect++; } break; @@ -5543,7 +5621,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED - && CanBePoisoned(gBattlerAttacker, gBattlerTarget) + && CanBePoisoned(gBattlerTarget, gBattlerAttacker) && IsMoveMakingContact(move, gBattlerAttacker) && (Random() % 3) == 0) { @@ -5676,11 +5754,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { 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++; @@ -5722,6 +5798,75 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } } break; + case ABILITY_SEED_SOWER: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && IsBattlerAlive(gBattlerTarget) + && TryChangeBattleTerrain(gBattlerTarget, STATUS_FIELD_GRASSY_TERRAIN, &gFieldTimers.terrainTimer)) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SeedSowerActivates; + effect++; + } + break; + case ABILITY_THERMAL_EXCHANGE: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && TARGET_TURN_DAMAGED + && IsBattlerAlive(gBattlerTarget) + && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN) + && moveType == TYPE_FIRE) + { + gEffectBattler = gBattlerTarget; + SET_STATCHANGER(STAT_ATK, 1, FALSE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseRet; + effect++; + } + break; + case ABILITY_ANGER_SHELL: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && (gBattleMons[gBattlerTarget].hp <= gBattleMons[gBattlerTarget].maxHP / 2) + && !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove))) + { + gBattlerAttacker = gBattlerTarget; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AngerShellActivates; + effect++; + } + break; + case ABILITY_WIND_POWER: + if (!(gBattleMoves[gCurrentMove].flags & FLAG_WIND_MOVE)) + break; + // fall through + case ABILITY_ELECTROMORPHOSIS: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && TARGET_TURN_DAMAGED + && IsBattlerAlive(gBattlerTarget)) + { + gBattlerAttacker = gBattlerTarget; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_WindPowerActivates; + effect++; + } + break; + case ABILITY_TOXIC_DEBRIS: + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + && IS_MOVE_PHYSICAL(gCurrentMove) + && TARGET_TURN_DAMAGED + && !(gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_TOXIC_SPIKES) + && IsBattlerAlive(gBattlerTarget)) + { + gBattlerTarget = gBattlerAttacker; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ToxicDebrisActivates; + effect++; + } + break; } break; case ABILITYEFFECT_MOVE_END_ATTACKER: // Same as above, but for attacker @@ -5805,6 +5950,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move switch (GetBattlerAbility(battler)) { case ABILITY_IMMUNITY: + case ABILITY_PASTEL_VEIL: if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON | STATUS1_TOXIC_COUNTER)) { StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); @@ -5889,31 +6035,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } } break; - case ABILITYEFFECT_WEATHER_FORM: // 6 - for (battler = 0; battler < gBattlersCount; battler++) - { - switch (gBattleMons[battler].species) - { - case SPECIES_CASTFORM: - case SPECIES_CHERRIM: -#ifdef POKEMON_EXPANSION - case SPECIES_CASTFORM_RAINY: - case SPECIES_CASTFORM_SNOWY: - case SPECIES_CASTFORM_SUNNY: - case SPECIES_CHERRIM_SUNSHINE: -#endif - effect = TryWeatherFormChange(battler); - if (effect != 0) - { - BattleScriptPushCursorAndCallback(BattleScript_WeatherFormChange); - gBattleScripting.battler = battler; - gBattleStruct->formToChangeInto = effect - 1; - return effect; - } - break; - } - } - break; case ABILITYEFFECT_SYNCHRONIZE: if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) { @@ -5958,30 +6079,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } } 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++) @@ -6077,6 +6174,72 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move break; } break; + case ABILITYEFFECT_ON_WEATHER: // For ability effects that activate when the battle weather changes. + battler = gBattlerAbility = gBattleScripting.battler; + gLastUsedAbility = GetBattlerAbility(battler); + switch (gLastUsedAbility) + { + case ABILITY_FORECAST: +#if B_WEATHER_FORMS >= GEN_5 + case ABILITY_FLOWER_GIFT: +#else + TRY_WEATHER_FORM: +#endif + effect = TryWeatherFormChange(battler); + if (effect != 0) + { + BattleScriptPushCursorAndCallback(BattleScript_WeatherFormChange); + *(&gBattleStruct->formToChangeInto) = effect - 1; + } + break; + case ABILITY_ICE_FACE: + if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL) + && gBattleMons[battler].species == SPECIES_EISCUE_NOICE_FACE + && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) + && gBattleStruct->allowedToChangeFormInWeather[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)]) + { + gBattleStruct->allowedToChangeFormInWeather[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)] = FALSE; + gBattleMons[battler].species = SPECIES_EISCUE; + BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); + effect++; + } + break; + case ABILITY_PROTOSYNTHESIS: + if (!gSpecialStatuses[battler].weatherAbilityDone && IsBattlerWeatherAffected(battler, B_WEATHER_SUN)) + { + gSpecialStatuses[battler].weatherAbilityDone = TRUE; + PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); + BattleScriptPushCursorAndCallback(BattleScript_ProtosynthesisActivates); + effect++; + } + break; + } + break; + case ABILITYEFFECT_ON_TERRAIN: // For ability effects that activate when the field terrain changes. + battler = gBattlerAbility = gBattleScripting.battler; + gLastUsedAbility = GetBattlerAbility(battler); + switch (gLastUsedAbility) + { + case ABILITY_MIMICRY: + if (!gSpecialStatuses[battler].terrainAbilityDone && ChangeTypeBasedOnTerrain(battler)) + { + gSpecialStatuses[battler].terrainAbilityDone = TRUE; + ChangeTypeBasedOnTerrain(battler); + BattleScriptPushCursorAndCallback(BattleScript_MimicryActivates_End3); + effect++; + } + break; + case ABILITY_QUARK_DRIVE: + if (!gSpecialStatuses[battler].terrainAbilityDone && IsBattlerTerrainAffected(battler, STATUS_FIELD_ELECTRIC_TERRAIN)) + { + gSpecialStatuses[battler].terrainAbilityDone = TRUE; + PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); + BattleScriptPushCursorAndCallback(BattleScript_QuarkDriveActivates); + effect++; + } + break; + } + break; } if (effect && gLastUsedAbility != 0xFF) @@ -6123,6 +6286,19 @@ bool32 IsNeutralizingGasOnField(void) return FALSE; } +bool32 IsMyceliumMightOnField(void) +{ + u32 i; + + for (i = 0; i < gBattlersCount; i++) + { + if (IsBattlerAlive(i) && gBattleMons[i].ability == ABILITY_MYCELIUM_MIGHT && IS_MOVE_STATUS(gCurrentMove)) + return TRUE; + } + + return FALSE; +} + u32 GetBattlerAbility(u8 battlerId) { if (gStatuses3[battlerId] & STATUS3_GASTRO_ACID) @@ -6131,6 +6307,9 @@ u32 GetBattlerAbility(u8 battlerId) if (IsNeutralizingGasOnField() && !IsNeutralizingGasBannedAbility(gBattleMons[battlerId].ability)) return ABILITY_NONE; + if (IsMyceliumMightOnField()) + return ABILITY_NONE; + if ((((gBattleMons[gBattlerAttacker].ability == ABILITY_MOLD_BREAKER || gBattleMons[gBattlerAttacker].ability == ABILITY_TERAVOLT || gBattleMons[gBattlerAttacker].ability == ABILITY_TURBOBLAZE) @@ -6304,6 +6483,7 @@ bool32 CanBeBurned(u8 battlerId) || ability == ABILITY_WATER_VEIL || ability == ABILITY_WATER_BUBBLE || ability == ABILITY_COMATOSE + || ability == ABILITY_THERMAL_EXCHANGE || IsAbilityStatusProtected(battlerId) || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; @@ -6629,7 +6809,7 @@ static bool32 GetMentalHerbEffect(u8 battlerId) // Check taunt if (gDisableStructs[battlerId].tauntTimer != 0) { - gDisableStructs[battlerId].tauntTimer = gDisableStructs[battlerId].tauntTimer2 = 0; + gDisableStructs[battlerId].tauntTimer = 0; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TAUNT; PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT); ret = TRUE; @@ -6638,7 +6818,7 @@ static bool32 GetMentalHerbEffect(u8 battlerId) if (gDisableStructs[battlerId].encoreTimer != 0) { gDisableStructs[battlerId].encoredMove = 0; - gDisableStructs[battlerId].encoreTimerStartValue = gDisableStructs[battlerId].encoreTimer = 0; + gDisableStructs[battlerId].encoreTimer = 0; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_ENCORE; // STRINGID_PKMNENCOREENDED ret = TRUE; } @@ -6659,7 +6839,7 @@ static bool32 GetMentalHerbEffect(u8 battlerId) // Check disable if (gDisableStructs[battlerId].disableTimer != 0) { - gDisableStructs[battlerId].disableTimer = gDisableStructs[battlerId].disableTimerStartValue = 0; + gDisableStructs[battlerId].disableTimer = 0; gDisableStructs[battlerId].disabledMove = 0; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_DISABLE; ret = TRUE; @@ -6672,7 +6852,7 @@ static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) { u8 effect = 0; u32 i; - + switch (holdEffect) { #if B_HP_BERRIES >= GEN_4 @@ -6841,7 +7021,7 @@ static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY) && HasEnoughHpToEatBerry(battlerId, GetBattlerItemHoldEffectParam(battlerId, gLastUsedItem), gLastUsedItem)) { - gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY; + gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY; gBattleScripting.battler = battlerId; gPotentialItemEffectBattler = battlerId; BattleScriptPushCursor(); @@ -6850,7 +7030,7 @@ static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) } break; } - + return effect; } @@ -6867,7 +7047,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) gLastUsedItem = gBattleMons[battlerId].item; battlerHoldEffect = GetBattlerHoldEffect(battlerId, TRUE); } - + atkItem = gBattleMons[gBattlerAttacker].item; atkHoldEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); atkHoldEffectParam = GetBattlerHoldEffectParam(gBattlerAttacker); @@ -7672,7 +7852,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) switch (battlerHoldEffect) { case HOLD_EFFECT_TOXIC_ORB: - if (IsBattlerAlive(battlerId) && CanBePoisoned(battlerId, battlerId)) + if (CanBePoisoned(battlerId, battlerId)) { effect = ITEM_STATUS_CHANGE; gBattleMons[battlerId].status1 = STATUS1_TOXIC_POISON; @@ -7681,7 +7861,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) } break; case HOLD_EFFECT_FLAME_ORB: - if (IsBattlerAlive(battlerId) && CanBeBurned(battlerId)) + if (CanBeBurned(battlerId)) { effect = ITEM_STATUS_CHANGE; gBattleMons[battlerId].status1 = STATUS1_BURN; @@ -7849,6 +8029,7 @@ u8 IsMonDisobedient(void) s32 rnd; s32 calc; u8 obedienceLevel = 0; + u8 levelReferenced; if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) return 0; @@ -7863,8 +8044,10 @@ u8 IsMonDisobedient(void) return 0; if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) return 0; + #if B_OBEDIENCE_MECHANICS < GEN_8 if (!IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) return 0; + #endif if (FlagGet(FLAG_BADGE08_GET)) return 0; @@ -7878,10 +8061,19 @@ u8 IsMonDisobedient(void) obedienceLevel = 70; } +#if B_OBEDIENCE_MECHANICS >= GEN_8 + if (!IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) + levelReferenced = gBattleMons[gBattlerAttacker].metLevel; + else +#else if (gBattleMons[gBattlerAttacker].level <= obedienceLevel) +#endif + levelReferenced = gBattleMons[gBattlerAttacker].level; + + if (levelReferenced <= obedienceLevel) return 0; rnd = (Random() & 255); - calc = (gBattleMons[gBattlerAttacker].level + obedienceLevel) * rnd >> 8; + calc = (levelReferenced + obedienceLevel) * rnd >> 8; if (calc < obedienceLevel) return 0; @@ -7895,7 +8087,7 @@ u8 IsMonDisobedient(void) } rnd = (Random() & 255); - calc = (gBattleMons[gBattlerAttacker].level + obedienceLevel) * rnd >> 8; + calc = (levelReferenced + obedienceLevel) * rnd >> 8; if (calc < obedienceLevel) { calc = CheckMoveLimitations(gBattlerAttacker, gBitTable[gCurrMovePos], MOVE_LIMITATIONS_ALL); @@ -7923,7 +8115,7 @@ u8 IsMonDisobedient(void) } else { - obedienceLevel = gBattleMons[gBattlerAttacker].level - obedienceLevel; + obedienceLevel = levelReferenced - obedienceLevel; calc = (Random() & 255); if (calc < obedienceLevel && CanSleep(gBattlerAttacker)) @@ -7975,7 +8167,7 @@ u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating) gPotentialItemEffectBattler = battlerId; -#if B_ENABLE_DEBUG == TRUE +#if DEBUG_BATTLE_MENU == TRUE if (gBattleStruct->debugHoldEffects[battlerId] != 0 && gBattleMons[battlerId].item) return gBattleStruct->debugHoldEffects[battlerId]; else @@ -7986,7 +8178,7 @@ u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating) return ItemId_GetHoldEffect(gBattleMons[battlerId].item); } -// +// static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item) { if (item == ITEM_ENIGMA_BERRY) @@ -8005,6 +8197,8 @@ u32 GetBattlerHoldEffectParam(u8 battlerId) bool32 IsMoveMakingContact(u16 move, u8 battlerAtk) { + u16 atkHoldEffect = GetBattlerHoldEffect(battlerAtk, TRUE); + if (!(gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) { if (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->swapDamageCategory) @@ -8012,11 +8206,9 @@ bool32 IsMoveMakingContact(u16 move, u8 battlerAtk) else return FALSE; } - else if (GetBattlerAbility(battlerAtk) == ABILITY_LONG_REACH) - { - return FALSE; - } - else if (GetBattlerHoldEffect(battlerAtk, TRUE) == HOLD_EFFECT_PROTECTIVE_PADS) + else if ((atkHoldEffect == HOLD_EFFECT_PUNCHING_GLOVE && (gBattleMoves[move].flags & FLAG_IRON_FIST_BOOST)) + || atkHoldEffect == HOLD_EFFECT_PROTECTIVE_PADS + || GetBattlerAbility(battlerAtk) == ABILITY_LONG_REACH) { return FALSE; } @@ -8037,6 +8229,11 @@ bool32 IsBattlerProtected(u8 battlerId, u16 move) return FALSE; } + if (move == MOVE_TEATIME) + { + 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 @@ -8053,7 +8250,7 @@ bool32 IsBattlerProtected(u8 battlerId, u16 move) return TRUE; else if (gProtectStructs[battlerId].banefulBunkered) return TRUE; - else if (gProtectStructs[battlerId].obstructed && !IS_MOVE_STATUS(move)) + else if ((gProtectStructs[battlerId].obstructed || gProtectStructs[battlerId].silkTrapped) && !IS_MOVE_STATUS(move)) return TRUE; else if (gProtectStructs[battlerId].spikyShielded) return TRUE; @@ -8479,8 +8676,14 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower *= 2; break; case EFFECT_ROUND: - if (gChosenMoveByBattler[BATTLE_PARTNER(battlerAtk)] == MOVE_ROUND && !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerAtk)])) - basePower *= 2; + for (i = 0; i < gBattlersCount; i++) + { + if (i != battlerAtk && IsBattlerAlive(i) && gLastMoves[i] == MOVE_ROUND) + { + basePower *= 2; + break; + } + } break; case EFFECT_FUSION_COMBO: if (gBattleMoves[gLastUsedMove].effect == EFFECT_FUSION_COMBO && move != gLastUsedMove) @@ -8554,17 +8757,41 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) return basePower; } +// Supreme Overlord adds a damage boost for each fainted ally. +// The first ally adds a x1.2 boost, and subsequent allies add an extra x0.1 boost each. +static u16 GetSupremeOverlordModifier(u8 battlerId) +{ + u32 i; + u8 side = GetBattlerSide(battlerId); + struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + u16 modifier = UQ_4_12(1.0); + bool8 appliedFirstBoost = FALSE; + + for (i = 0; i < 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) + modifier += (!appliedFirstBoost) ? UQ_4_12(0.2) : UQ_4_12(0.1); + appliedFirstBoost = TRUE; + } + + return modifier; +} + static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 updateFlags) { - u32 i, ability; + u32 i; u32 holdEffectAtk, holdEffectParamAtk; u16 basePower = CalcMoveBasePower(move, battlerAtk, battlerDef); u16 holdEffectModifier; u16 modifier = UQ_4_12(1.0); u32 atkSide = GET_BATTLER_SIDE(battlerAtk); + u16 atkAbility = GetBattlerAbility(battlerAtk); + u16 defAbility = GetBattlerAbility(battlerDef); // attacker's abilities - switch (GetBattlerAbility(battlerAtk)) + switch (atkAbility) { case ABILITY_TECHNICIAN: if (basePower <= 60) @@ -8670,11 +8897,44 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe if (IS_MOVE_PHYSICAL(move)) MulModifier(&modifier, UQ_4_12(1.5)); break; + case ABILITY_ROCKY_PAYLOAD: + if (moveType == TYPE_ROCK) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_PROTOSYNTHESIS: + { + u8 atkHighestStat = GetHighestStatId(battlerAtk); + if (gBattleWeather & B_WEATHER_SUN && WEATHER_HAS_EFFECT && (atkHighestStat == STAT_ATK || atkHighestStat == STAT_SPATK)) + MulModifier(&modifier, UQ_4_12(1.3)); + } + break; + case ABILITY_QUARK_DRIVE: + { + u8 atkHighestStat = GetHighestStatId(battlerAtk); + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && (atkHighestStat == STAT_ATK || atkHighestStat == STAT_SPATK)) + MulModifier(&modifier, UQ_4_12(1.3)); + } + break; + case ABILITY_ORICHALCUM_PULSE: + if (gBattleWeather & B_WEATHER_SUN && WEATHER_HAS_EFFECT) + MulModifier(&modifier, UQ_4_12(1.3)); + break; + case ABILITY_HADRON_ENGINE: + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + MulModifier(&modifier, UQ_4_12(1.3)); + break; + case ABILITY_SHARPNESS: + if (gBattleMoves[move].flags & FLAG_SLICING_MOVE) + MulModifier(&modifier, UQ_4_12(1.5)); + break; + case ABILITY_SUPREME_OVERLORD: + MulModifier(&modifier, GetSupremeOverlordModifier(battlerAtk)); + break; } // field abilities if ((IsAbilityOnField(ABILITY_DARK_AURA) && moveType == TYPE_DARK) - || (IsAbilityOnField(ABILITY_FAIRY_AURA) && moveType == TYPE_FAIRY)) + || (IsAbilityOnField(ABILITY_FAIRY_AURA) && moveType == TYPE_FAIRY)) { if (IsAbilityOnField(ABILITY_AURA_BREAK)) MulModifier(&modifier, UQ_4_12(0.75)); @@ -8682,6 +8942,18 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe MulModifier(&modifier, UQ_4_12(1.33)); } + if (IsAbilityOnField(ABILITY_VESSEL_OF_RUIN) && atkAbility != ABILITY_VESSEL_OF_RUIN && IS_MOVE_SPECIAL(gCurrentMove)) + MulModifier(&modifier, UQ_4_12(0.25)); + + if (IsAbilityOnField(ABILITY_SWORD_OF_RUIN) && defAbility != ABILITY_SWORD_OF_RUIN && IS_MOVE_PHYSICAL(gCurrentMove)) + MulModifier(&modifier, UQ_4_12(0.25)); + + if (IsAbilityOnField(ABILITY_TABLETS_OF_RUIN) && atkAbility != ABILITY_TABLETS_OF_RUIN && IS_MOVE_PHYSICAL(gCurrentMove)) + MulModifier(&modifier, UQ_4_12(0.25)); + + if (IsAbilityOnField(ABILITY_BEADS_OF_RUIN) && defAbility != ABILITY_BEADS_OF_RUIN && IS_MOVE_SPECIAL(gCurrentMove)) + MulModifier(&modifier, UQ_4_12(0.25)); + // attacker partner's abilities if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) { @@ -8702,8 +8974,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe } // target's abilities - ability = GetBattlerAbility(battlerDef); - switch (ability) + switch (defAbility) { case ABILITY_HEATPROOF: case ABILITY_WATER_BUBBLE: @@ -8711,7 +8982,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe { MulModifier(&modifier, UQ_4_12(0.5)); if (updateFlags) - RecordAbilityBattle(battlerDef, ability); + RecordAbilityBattle(battlerDef, defAbility); } break; case ABILITY_DRY_SKIN: @@ -8723,11 +8994,25 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe { MulModifier(&modifier, UQ_4_12(0.5)); if (updateFlags) - RecordAbilityBattle(battlerDef, ability); + RecordAbilityBattle(battlerDef, defAbility); } if (moveType == TYPE_FIRE) MulModifier(&modifier, UQ_4_12(2.0)); break; + case ABILITY_PROTOSYNTHESIS: + { + u8 defHighestStat = GetHighestStatId(battlerDef); + if (gBattleWeather & B_WEATHER_SUN && WEATHER_HAS_EFFECT && (defHighestStat == STAT_DEF || defHighestStat == STAT_SPDEF)) + MulModifier(&modifier, UQ_4_12(0.7)); + } + break; + case ABILITY_QUARK_DRIVE: + { + u8 defHighestStat = GetHighestStatId(battlerDef); + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && (defHighestStat == STAT_DEF || defHighestStat == STAT_SPDEF)) + MulModifier(&modifier, UQ_4_12(0.7)); + } + break; } holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); @@ -8804,6 +9089,10 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe if (moveType == ItemId_GetSecondaryId(gBattleMons[battlerAtk].item)) MulModifier(&modifier, holdEffectModifier); break; + case HOLD_EFFECT_PUNCHING_GLOVE: + if (gBattleMoves[move].flags & FLAG_IRON_FIST_BOOST) + MulModifier(&modifier, UQ_4_12(1.1)); + break; } // move effect @@ -8854,7 +9143,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe #define TERRAIN_TYPE_BOOST UQ_4_12(1.5) #endif - // various effecs + // various effects if (gProtectStructs[battlerAtk].helpingHand) MulModifier(&modifier, UQ_4_12(1.5)); if (gStatuses3[battlerAtk] & STATUS3_CHARGED_UP && moveType == TYPE_ELECTRIC) @@ -9184,6 +9473,10 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, if (gBattleMoves[move].flags & FLAG_SOUND) MulModifier(&modifier, UQ_4_12(2.0)); break; + case ABILITY_PURIFYING_SALT: + if (gBattleMoves[move].type == TYPE_GHOST) + MulModifier(&modifier, UQ_4_12(2.0)); + break; } // ally's abilities @@ -9252,7 +9545,11 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move // check multiple targets in double battle if (GetMoveTargetCount(move, battlerAtk, battlerDef) >= 2) + #if B_MULTIPLE_TARGETS_DMG >= GEN_4 MulModifier(&finalModifier, UQ_4_12(0.75)); + #else + MulModifier(&finalModifier, UQ_4_12(0.5)); + #endif // take type effectiveness MulModifier(&finalModifier, typeEffectivenessModifier); @@ -9613,9 +9910,9 @@ u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilit 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); + MulByTypeEffectiveness(&modifier, move, moveType, 0, gSpeciesInfo[speciesDef].types[0], 0, FALSE); + if (gSpeciesInfo[speciesDef].types[1] != gSpeciesInfo[speciesDef].types[0]) + MulByTypeEffectiveness(&modifier, move, moveType, 0, gSpeciesInfo[speciesDef].types[1], 0, FALSE); if (moveType == TYPE_GROUND && abilityDef == ABILITY_LEVITATE && !(gFieldStatuses & STATUS_FIELD_GRAVITY)) modifier = UQ_4_12(0.0); @@ -9627,20 +9924,32 @@ u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilit return modifier; } +static u16 GetInverseTypeMultiplier(u16 multiplier) +{ + switch (multiplier) + { + case UQ_4_12(0.0): + case UQ_4_12(0.5): + return UQ_4_12(2.0); + case UQ_4_12(2.0): + return UQ_4_12(0.5); + case UQ_4_12(1.0): + default: + return UQ_4_12(1.0); + } +} + u16 GetTypeModifier(u8 atkType, u8 defType) { #if B_FLAG_INVERSE_BATTLE != 0 if (FlagGet(B_FLAG_INVERSE_BATTLE)) - return sInverseTypeEffectivenessTable[atkType][defType]; + return GetInverseTypeMultiplier(sTypeEffectivenessTable[atkType][defType]); #endif return sTypeEffectivenessTable[atkType][defType]; } -s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId) +s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp) { - 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); @@ -9683,6 +9992,15 @@ s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId) return dmg; } +s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId) +{ + u8 type1 = gBattleMons[battlerId].type1; + u8 type2 = gBattleMons[battlerId].type2; + u32 maxHp = gBattleMons[battlerId].maxHP; + + return GetStealthHazardDamageByTypesAndHP(hazardType, type1, type2, maxHp); +} + bool32 IsPartnerMonFromSameTrainer(u8 battlerId) { if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) @@ -9779,8 +10097,8 @@ bool32 CanMegaEvolve(u8 battlerId) // Check if there is an entry in the evolution table for regular Mega Evolution. if (GetMegaEvolutionSpecies(species, itemId) != SPECIES_NONE) { - #if B_ENABLE_DEBUG == TRUE - if (B_ENABLE_DEBUG && gBattleStruct->debugHoldEffects[battlerId]) + #if DEBUG_BATTLE_MENU == TRUE + if (gBattleStruct->debugHoldEffects[battlerId]) holdEffect = gBattleStruct->debugHoldEffects[battlerId]; else #endif @@ -9791,18 +10109,12 @@ bool32 CanMegaEvolve(u8 battlerId) // 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; @@ -9840,6 +10152,7 @@ void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut) static const u16 species[][3] = { // Changed Form ID Default Form ID Should change on switch + {SPECIES_EISCUE_NOICE_FACE, SPECIES_EISCUE, TRUE}, {SPECIES_MIMIKYU_BUSTED, SPECIES_MIMIKYU, FALSE}, {SPECIES_GRENINJA_ASH, SPECIES_GRENINJA_BATTLE_BOND, FALSE}, {SPECIES_MELOETTA_PIROUETTE, SPECIES_MELOETTA, FALSE}, @@ -9953,6 +10266,14 @@ void ClearIllusionMon(u32 battlerId) memset(&gBattleStruct->illusion[battlerId], 0, sizeof(gBattleStruct->illusion[battlerId])); } +u32 GetIllusionMonSpecies(u32 battlerId) +{ + struct Pokemon *illusionMon = GetIllusionMonPtr(battlerId); + if (illusionMon != NULL) + return GetMonData(illusionMon, MON_DATA_SPECIES); + return SPECIES_NONE; +} + bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId) { struct Pokemon *party, *partnerMon; @@ -10566,4 +10887,10 @@ static void SetRandomMultiHitCounter() else gMultiHitCounter += 2; #endif + + if (gMultiHitCounter < 4 && GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LOADED_DICE) + { + // If roll 4 or 5 Loaded Dice doesn't do anything. Otherwise it rolls the number of hits as 5 minus a random integer from 0 to 1 inclusive. + gMultiHitCounter = 5 - (Random() & 1); + } } diff --git a/src/battle_z_move.c b/src/battle_z_move.c index f0d62f7fe128..536080aa96c5 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -31,7 +31,6 @@ #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" @@ -51,7 +50,7 @@ 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 void ShowZMoveTriggerSprite(u8 battleId); static bool32 AreStatsMaxed(u8 battlerId, u8 n); static u8 GetZMoveScore(u8 battlerAtk, u8 battlerDef, u16 baseMove, u16 zMove); static void ZMoveSelectionDisplayMoveType(u16 zMove); @@ -166,12 +165,20 @@ bool32 IsViableZMove(u8 battlerId, u16 move) u32 item; u16 holdEffect; u16 species; + int moveSlotIndex; + + species = gBattleMons[battlerId].species; + item = gBattleMons[battlerId].item; + + for (moveSlotIndex = 0; moveSlotIndex < MAX_MON_MOVES; moveSlotIndex++) + { + if (gBattleMons[battlerId].moves[moveSlotIndex] == move && gBattleMons[battlerId].pp[moveSlotIndex] == 0) + return FALSE; + } 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; @@ -187,7 +194,7 @@ bool32 IsViableZMove(u8 battlerId, u16 move) return FALSE; // Partner has mega evolved or is about to mega evolve } -#if B_ENABLE_DEBUG == TRUE +#if DEBUG_BATTLE_MENU == TRUE if (gBattleStruct->debugHoldEffects[battlerId]) holdEffect = gBattleStruct->debugHoldEffects[battlerId]; else @@ -197,11 +204,7 @@ bool32 IsViableZMove(u8 battlerId, u16 move) 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) @@ -251,7 +254,7 @@ bool32 TryChangeZIndicator(u8 battlerId, u8 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 + ShowZMoveTriggerSprite(battlerId); // Was not a viable z move, now is -> slide back in } #define SINGLES_Z_TRIGGER_POS_X_OPTIMAL (29) @@ -361,11 +364,11 @@ void HideZMoveTriggerSprite(void) gBattleStruct->zmove.viable = FALSE; } -static void ShowZMoveTriggerSprite(void) +static void ShowZMoveTriggerSprite(u8 battlerId) { struct Sprite *sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId]; gBattleStruct->zmove.viable = TRUE; - CreateZMoveTriggerSprite(sprite->tBattler, TRUE); + CreateZMoveTriggerSprite(battlerId, TRUE); } void DestroyZMoveTriggerSprite(void) diff --git a/src/berry_blender.c b/src/berry_blender.c index 50c24660ce7e..e4ed5d0bfa99 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -106,6 +106,13 @@ enum { // Last berry that an NPC can put in #define NUM_NPC_BERRIES ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) +enum { + // Windows 0-3 are used implicitly in several loops over BLENDER_MAX_PLAYERS + // i.e. window 0 is for player 1, window 1 for player 2, etc. + WIN_MSG = BLENDER_MAX_PLAYERS, + WIN_RESULTS, +}; + struct BlenderBerry { u16 itemId; @@ -200,7 +207,7 @@ static void SpriteCB_ScoreSymbolBest(struct Sprite *); static void InitLocalPlayers(u8); static void CB2_LoadBerryBlender(void); static void UpdateBlenderCenter(void); -static bool32 Blender_PrintText(s16 *, const u8 *, s32 ); +static bool32 PrintMessage(s16 *, const u8 *, s32 ); static void StartBlender(void); static void CB2_StartBlenderLink(void); static void CB2_StartBlenderLocal(void); @@ -332,7 +339,7 @@ static const struct BgTemplate sBgTemplates[3] = static const struct WindowTemplate sWindowTemplates[] = { - { + { // Player 1 .bg = 0, .tilemapLeft = 1, .tilemapTop = 6, @@ -341,7 +348,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 0x28, }, - { + { // Player 2 .bg = 0, .tilemapLeft = 22, .tilemapTop = 6, @@ -350,7 +357,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 0x36, }, - { + { // Player 3 .bg = 0, .tilemapLeft = 1, .tilemapTop = 12, @@ -359,7 +366,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 0x44, }, - { + { // Player 4 .bg = 0, .tilemapLeft = 22, .tilemapTop = 12, @@ -368,7 +375,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 0x52, }, - { + [WIN_MSG] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 15, @@ -377,7 +384,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 0x60, }, - { + [WIN_RESULTS] = { .bg = 0, .tilemapLeft = 5, .tilemapTop = 3, @@ -959,7 +966,7 @@ static bool8 LoadBerryBlenderGfx(void) case 1: CopyToBgTilemapBuffer(2, sBlenderCenter_Tilemap, 0x400, 0); CopyBgTilemapBufferToVram(2); - LoadPalette(sBlenderCenter_Pal, 0, 0x100); + LoadPalette(sBlenderCenter_Pal, BG_PLTT_ID(0), 8 * PLTT_SIZE_4BPP); sBerryBlender->loadGfxState++; break; case 2: @@ -984,7 +991,7 @@ static bool8 LoadBerryBlenderGfx(void) sBerryBlender->loadGfxState++; break; case 7: - LoadPalette(sBlenderOuter_Pal, 0x80, 0x20); + LoadPalette(sBlenderOuter_Pal, BG_PLTT_ID(8), PLTT_SIZE_4BPP); sBerryBlender->loadGfxState++; break; case 8: @@ -1065,8 +1072,8 @@ static void CB2_LoadBerryBlender(void) InitBgsFromTemplates(1, sBgTemplates, ARRAY_COUNT(sBgTemplates)); SetBgTilemapBuffer(1, sBerryBlender->tilemapBuffers[0]); SetBgTilemapBuffer(2, sBerryBlender->tilemapBuffers[1]); - LoadUserWindowBorderGfx(0, 1, 0xD0); - LoadMessageBoxGfx(0, 0x14, 0xF0); + LoadUserWindowBorderGfx(0, 1, BG_PLTT_ID(13)); + LoadMessageBoxGfx(0, 0x14, BG_PLTT_ID(15)); InitBerryBlenderWindows(); sBerryBlender->mainState++; @@ -1107,7 +1114,7 @@ static void CB2_LoadBerryBlender(void) sBerryBlender->mainState++; break; case 4: - if (Blender_PrintText(&sBerryBlender->textState, sText_BerryBlenderStart, GetPlayerTextSpeedDelay())) + if (PrintMessage(&sBerryBlender->textState, sText_BerryBlenderStart, GetPlayerTextSpeedDelay())) sBerryBlender->mainState++; break; case 5: @@ -1337,7 +1344,7 @@ static void CB2_StartBlenderLink(void) } break; case 5: - Blender_PrintText(&sBerryBlender->textState, sText_CommunicationStandby, 0); + PrintMessage(&sBerryBlender->textState, sText_CommunicationStandby, 0); sBerryBlender->mainState = 8; sBerryBlender->framesToWait = 0; break; @@ -1363,7 +1370,7 @@ static void CB2_StartBlenderLink(void) if (++sBerryBlender->framesToWait > 20) { // Wait for partners' berries - ClearDialogWindowAndFrameToTransparent(4, TRUE); + ClearDialogWindowAndFrameToTransparent(WIN_MSG, TRUE); if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags()) { for (i = 0; i < GetLinkPlayerCount(); i++) @@ -1502,8 +1509,8 @@ static void InitBlenderBgs(void) SetBgTilemapBuffer(1, sBerryBlender->tilemapBuffers[0]); SetBgTilemapBuffer(2, sBerryBlender->tilemapBuffers[1]); - LoadUserWindowBorderGfx(0, 1, 0xD0); - LoadMessageBoxGfx(0, 0x14, 0xF0); + LoadUserWindowBorderGfx(0, 1, BG_PLTT_ID(13)); + LoadMessageBoxGfx(0, 0x14, BG_PLTT_ID(15)); InitBerryBlenderWindows(); sBerryBlender->unk0 = 0; @@ -2276,9 +2283,9 @@ static u32 CalculatePokeblockColor(struct BlenderBerry* berries, s16 *_flavors, j++; } - // If all flavors are 0, or at least 3 were negative/0 + // If all 5 flavors are 0, or if 4-5 flavors were negative, // or if players used the same berry, color is black - if (j == 5 || negativeFlavors > 3) + if (j == FLAVOR_COUNT || negativeFlavors > 3) return PBLOCK_CLR_BLACK; for (i = 0; i < numPlayers; i++) @@ -2664,7 +2671,7 @@ static void CB2_EndBlenderGame(void) } break; case 7: - if (Blender_PrintText(&sBerryBlender->textState, sText_WouldLikeToBlendAnotherBerry, GetPlayerTextSpeedDelay())) + if (PrintMessage(&sBerryBlender->textState, sText_WouldLikeToBlendAnotherBerry, GetPlayerTextSpeedDelay())) sBerryBlender->gameEndState++; break; case 9: @@ -2676,7 +2683,7 @@ static void CB2_EndBlenderGame(void) switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 1: - case -1: + case MENU_B_PRESSED: sBerryBlender->yesNoAnswer = 1; sBerryBlender->gameEndState++; for (i = 0; i < BLENDER_MAX_PLAYERS; i++) @@ -2748,7 +2755,7 @@ static void CB2_EndBlenderGame(void) sBerryBlender->gameEndState++; break; case 13: - if (Blender_PrintText(&sBerryBlender->textState, sText_CommunicationStandby, GetPlayerTextSpeedDelay())) + if (PrintMessage(&sBerryBlender->textState, sText_CommunicationStandby, GetPlayerTextSpeedDelay())) { SetMainCallback2(CB2_CheckPlayAgainLink); sBerryBlender->gameEndState = 0; @@ -2858,7 +2865,7 @@ static void CB2_CheckPlayAgainLink(void) StringAppend(gStringVar4, sText_HasNoBerriesToPut); break; case 3: - if (Blender_PrintText(&sBerryBlender->textState, gStringVar4, GetPlayerTextSpeedDelay())) + if (PrintMessage(&sBerryBlender->textState, gStringVar4, GetPlayerTextSpeedDelay())) { sBerryBlender->framesToWait = 0; sBerryBlender->gameEndState++; @@ -2869,7 +2876,7 @@ static void CB2_CheckPlayAgainLink(void) sBerryBlender->gameEndState = 5; break; case 5: - Blender_PrintText(&sBerryBlender->textState, gText_SavingDontTurnOff2, 0); + PrintMessage(&sBerryBlender->textState, gText_SavingDontTurnOff2, 0); SetLinkStandbyCallback(); sBerryBlender->gameEndState++; break; @@ -2965,7 +2972,7 @@ static void CB2_CheckPlayAgainLocal(void) StringCopy(gStringVar4, sText_RunOutOfBerriesForBlending); break; case 3: - if (Blender_PrintText(&sBerryBlender->textState, gStringVar4, GetPlayerTextSpeedDelay())) + if (PrintMessage(&sBerryBlender->textState, gStringVar4, GetPlayerTextSpeedDelay())) sBerryBlender->gameEndState = 9; break; case 9: @@ -3495,7 +3502,7 @@ static bool8 PrintBlendingResults(void) u8 *txtPtr; xPos = GetStringCenterAlignXOffset(FONT_NORMAL, sText_BlendingResults, 0xA8); - Blender_AddTextPrinter(5, sText_BlendingResults, xPos, 1, TEXT_SKIP_DRAW, 0); + Blender_AddTextPrinter(WIN_RESULTS, sText_BlendingResults, xPos, 1, TEXT_SKIP_DRAW, 0); if (sBerryBlender->numPlayers == BLENDER_MAX_PLAYERS) yPos = 17; @@ -3510,15 +3517,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_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, 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_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sBerryBlender->stringVar, 0x54, yPos, TEXT_SKIP_DRAW, 3); } - Blender_AddTextPrinter(5, sText_MaximumSpeed, 0, 0x51, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, 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); @@ -3527,8 +3534,8 @@ static bool8 PrintBlendingResults(void) StringAppend(sBerryBlender->stringVar, sText_RPM); 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); + Blender_AddTextPrinter(WIN_RESULTS, sBerryBlender->stringVar, xPos, 0x51, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sText_Time, 0, 0x61, TEXT_SKIP_DRAW, 3); seconds = (sBerryBlender->gameFrameTime / 60) % 60; minutes = (sBerryBlender->gameFrameTime / (60 * 60)); @@ -3540,12 +3547,12 @@ static bool8 PrintBlendingResults(void) StringAppend(sBerryBlender->stringVar, sText_Sec); xPos = GetStringRightAlignXOffset(FONT_NORMAL, sBerryBlender->stringVar, 0xA8); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, xPos, 0x61, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sBerryBlender->stringVar, xPos, 0x61, TEXT_SKIP_DRAW, 3); sBerryBlender->framesToWait = 0; sBerryBlender->mainState++; - CopyWindowToVram(5, COPYWIN_GFX); + CopyWindowToVram(WIN_RESULTS, COPYWIN_GFX); } break; case 4: @@ -3553,7 +3560,7 @@ static bool8 PrintBlendingResults(void) sBerryBlender->mainState++; break; case 5: - ClearStdWindowAndFrameToTransparent(5, TRUE); + ClearStdWindowAndFrameToTransparent(WIN_RESULTS, TRUE); for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { @@ -3581,7 +3588,7 @@ static bool8 PrintBlendingResults(void) sBerryBlender->mainState++; break; case 6: - if (Blender_PrintText(&sBerryBlender->textState, sBerryBlender->stringVar, GetPlayerTextSpeedDelay())) + if (PrintMessage(&sBerryBlender->textState, sBerryBlender->stringVar, GetPlayerTextSpeedDelay())) { TryUpdateBerryBlenderRecord(); return TRUE; @@ -3692,9 +3699,9 @@ static bool8 PrintBlendingRanking(void) } break; case 3: - DrawStdFrameWithCustomTileAndPalette(5, FALSE, 1, 0xD); + DrawStdFrameWithCustomTileAndPalette(WIN_RESULTS, FALSE, 1, 0xD); xPos = GetStringCenterAlignXOffset(FONT_NORMAL, sText_Ranking, 168); - Blender_AddTextPrinter(5, sText_Ranking, xPos, 1, TEXT_SKIP_DRAW, 0); + Blender_AddTextPrinter(WIN_RESULTS, 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 +3725,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_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, 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_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, 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_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, 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_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sBerryBlender->stringVar, 78 + 64, yPos, TEXT_SKIP_DRAW, 3); } - PutWindowTilemap(5); - CopyWindowToVram(5, COPYWIN_FULL); + PutWindowTilemap(WIN_RESULTS); + CopyWindowToVram(WIN_RESULTS, COPYWIN_FULL); sBerryBlender->framesToWait = 0; sBerryBlender->mainState++; @@ -3875,26 +3882,24 @@ static void Blender_AddTextPrinter(u8 windowId, const u8 *string, u8 x, u8 y, s3 } if (caseId != 3) - { FillWindowPixelBuffer(windowId, PIXEL_FILL(txtColor[0])); - } AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, letterSpacing, 1, txtColor, speed, string); } -static bool32 Blender_PrintText(s16 *textState, const u8 *string, s32 textSpeed) +static bool32 PrintMessage(s16 *textState, const u8 *string, s32 textSpeed) { switch (*textState) { case 0: - DrawDialogFrameWithCustomTileAndPalette(4, FALSE, 0x14, 0xF); - Blender_AddTextPrinter(4, string, 0, 1, textSpeed, 0); - PutWindowTilemap(4); - CopyWindowToVram(4, COPYWIN_FULL); + DrawDialogFrameWithCustomTileAndPalette(WIN_MSG, FALSE, 0x14, 0xF); + Blender_AddTextPrinter(WIN_MSG, string, 0, 1, textSpeed, 0); + PutWindowTilemap(WIN_MSG); + CopyWindowToVram(WIN_MSG, COPYWIN_FULL); (*textState)++; break; case 1: - if (!IsTextPrinterActive(4)) + if (!IsTextPrinterActive(WIN_MSG)) { *textState = 0; return TRUE; diff --git a/src/berry_crush.c b/src/berry_crush.c index cea63751cb81..c0a72713a2de 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1235,7 +1235,7 @@ static s32 ShowGameDisplay(void) gPaletteFade.bufferTransferDisabled = TRUE; break; case 7: - LoadPalette(gBerryCrush_Crusher_Pal, 0, 0x180); + LoadPalette(gBerryCrush_Crusher_Pal, BG_PLTT_ID(0), 12 * PLTT_SIZE_4BPP); CopyToBgTilemapBuffer(1, sCrusherTop_Tilemap, 0, 0); CopyToBgTilemapBuffer(2, sContainerCap_Tilemap, 0, 0); CopyToBgTilemapBuffer(3, sBg_Tilemap, 0, 0); @@ -1751,7 +1751,7 @@ static bool32 OpenResultsWindow(struct BerryCrushGame *game, struct BerryCrushGa FillWindowPixelBuffer(gfx->resultsWindowId, PIXEL_FILL(0)); break; case 2: - LoadUserWindowBorderGfx_(gfx->resultsWindowId, 541, 208); + LoadUserWindowBorderGfx_(gfx->resultsWindowId, 541, BG_PLTT_ID(13)); DrawStdFrameWithCustomTileAndPalette(gfx->resultsWindowId, FALSE, 541, 13); break; case 3: @@ -1809,7 +1809,7 @@ static void Task_ShowRankings(u8 taskId) tWindowId = AddWindow(&sWindowTemplate_Rankings); PutWindowTilemap(tWindowId); FillWindowPixelBuffer(tWindowId, PIXEL_FILL(0)); - LoadUserWindowBorderGfx_(tWindowId, 541, 208); + LoadUserWindowBorderGfx_(tWindowId, 541, BG_PLTT_ID(13)); DrawStdFrameWithCustomTileAndPalette(tWindowId, FALSE, 541, 13); break; case 1: diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index e8c4bc7e6862..af21bb929aad 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -14,6 +14,13 @@ #include "m4a.h" #include "constants/rgb.h" +enum { + WIN_TITLE, // "Berry Program Update" header on the first screen + WIN_MSG_BODY, + WIN_GAME_NAMES, // The labels under the GBA graphics on the link screen + WIN_TURN_OFF_TITLE, // "Ruby/Sapphire" at the top of the "turn off the power" screen +}; + struct { u8 state; u8 curScene; @@ -71,7 +78,7 @@ static const struct BgTemplate sBerryFixBgTemplates[] = { }; static const struct WindowTemplate sBerryFixWindowTemplates[] = { - { + [WIN_TITLE] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 4, @@ -80,7 +87,7 @@ static const struct WindowTemplate sBerryFixWindowTemplates[] = { .paletteNum = 15, .baseBlock = 1 }, - { + [WIN_MSG_BODY] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 11, @@ -89,7 +96,7 @@ static const struct WindowTemplate sBerryFixWindowTemplates[] = { .paletteNum = 15, .baseBlock = 53 }, - { + [WIN_GAME_NAMES] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 8, @@ -98,7 +105,7 @@ static const struct WindowTemplate sBerryFixWindowTemplates[] = { .paletteNum = 15, .baseBlock = 277 }, - { + [WIN_TURN_OFF_TITLE] = { .bg = 0, .tilemapLeft = 8, .tilemapTop = 0, @@ -217,11 +224,11 @@ static void BerryFix_Main(void) sBerryFix->state = MAINSTATE_BEGIN; break; case MAINSTATE_BEGIN: - if (TryScene(SCENE_BEGIN) && (JOY_NEW(A_BUTTON))) + if (TryScene(SCENE_BEGIN) && JOY_NEW(A_BUTTON)) sBerryFix->state = MAINSTATE_CONNECT; break; case MAINSTATE_CONNECT: - if (TryScene(SCENE_ENSURE_CONNECT) && (JOY_NEW(A_BUTTON))) + if (TryScene(SCENE_ENSURE_CONNECT) && JOY_NEW(A_BUTTON)) sBerryFix->state = MAINSTATE_INIT_MULTIBOOT; break; case MAINSTATE_INIT_MULTIBOOT: @@ -299,29 +306,29 @@ static void BerryFix_GpuSet(void) DmaCopy32(3, sBerryFixPalColors, BG_PLTT + 0x1E0, sizeof(sBerryFixPalColors)); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP); - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - FillWindowPixelBuffer(3, PIXEL_FILL(0)); - FillWindowPixelBuffer(0, PIXEL_FILL(10)); + FillWindowPixelBuffer(WIN_GAME_NAMES, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_TURN_OFF_TITLE, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_TITLE, PIXEL_FILL(10)); width = GetStringWidth(FONT_SMALL, sText_Emerald, 0); left = (120 - width) / 2; - AddTextPrinterParameterized3(2, FONT_SMALL, left, 3, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_Emerald); + AddTextPrinterParameterized3(WIN_GAME_NAMES, FONT_SMALL, left, 3, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_Emerald); width = GetStringWidth(FONT_SMALL, sText_RubySapphire, 0); left = (120 - width) / 2 + 120; - AddTextPrinterParameterized3(2, FONT_SMALL, left, 3, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_RubySapphire); + AddTextPrinterParameterized3(WIN_GAME_NAMES, FONT_SMALL, left, 3, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_RubySapphire); width = GetStringWidth(FONT_SMALL, sText_RubySapphire, 0); left = (112 - width) / 2; - AddTextPrinterParameterized3(3, FONT_SMALL, left, 0, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_RubySapphire); + AddTextPrinterParameterized3(WIN_TURN_OFF_TITLE, FONT_SMALL, left, 0, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_RubySapphire); width = GetStringWidth(FONT_NORMAL, sText_BerryProgramUpdate, 0); left = (208 - width) / 2; - AddTextPrinterParameterized3(0, FONT_NORMAL, left, 2, sBerryProgramTextColors, TEXT_SKIP_DRAW, sText_BerryProgramUpdate); + AddTextPrinterParameterized3(WIN_TITLE, FONT_NORMAL, left, 2, sBerryProgramTextColors, TEXT_SKIP_DRAW, sText_BerryProgramUpdate); - CopyWindowToVram(2, COPYWIN_GFX); - CopyWindowToVram(3, COPYWIN_GFX); - CopyWindowToVram(0, COPYWIN_GFX); + CopyWindowToVram(WIN_GAME_NAMES, COPYWIN_GFX); + CopyWindowToVram(WIN_TURN_OFF_TITLE, COPYWIN_GFX); + CopyWindowToVram(WIN_TITLE, COPYWIN_GFX); } static int BerryFix_TrySetScene(int scene) @@ -345,23 +352,23 @@ static int BerryFix_TrySetScene(int scene) static void BerryFix_SetScene(int scene) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); - FillWindowPixelBuffer(1, PIXEL_FILL(10)); - AddTextPrinterParameterized3(1, FONT_NORMAL, 0, 0, sBerryProgramTextColors, TEXT_SKIP_DRAW, sBerryProgramTexts[scene]); - PutWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_GFX); + FillWindowPixelBuffer(WIN_MSG_BODY, PIXEL_FILL(10)); + AddTextPrinterParameterized3(WIN_MSG_BODY, FONT_NORMAL, 0, 0, sBerryProgramTextColors, TEXT_SKIP_DRAW, sBerryProgramTexts[scene]); + PutWindowTilemap(WIN_MSG_BODY); + CopyWindowToVram(WIN_MSG_BODY, COPYWIN_GFX); switch (scene) { case SCENE_ENSURE_CONNECT: case SCENE_TRANSMITTING: case SCENE_FOLLOW_INSTRUCT: case SCENE_TRANSMIT_FAILED: - PutWindowTilemap(2); + PutWindowTilemap(WIN_GAME_NAMES); break; case SCENE_TURN_OFF_POWER: - PutWindowTilemap(3); + PutWindowTilemap(WIN_TURN_OFF_TITLE); break; case SCENE_BEGIN: - PutWindowTilemap(0); + PutWindowTilemap(WIN_TITLE); break; } CopyBgTilemapBufferToVram(0); diff --git a/src/berry_powder.c b/src/berry_powder.c index 96f14d6e4ea0..7066f9d95c1b 100755 --- a/src/berry_powder.c +++ b/src/berry_powder.c @@ -4,6 +4,7 @@ #include "event_data.h" #include "load_save.h" #include "menu.h" +#include "palette.h" #include "string_util.h" #include "strings.h" #include "text.h" @@ -228,7 +229,7 @@ void DisplayBerryPowderVendorMenu(void) sBerryPowderVendorWindowId = AddWindow(&template); FillWindowPixelBuffer(sBerryPowderVendorWindowId, PIXEL_FILL(0)); PutWindowTilemap(sBerryPowderVendorWindowId); - LoadUserWindowBorderGfx_(sBerryPowderVendorWindowId, 0x21D, 0xD0); + LoadUserWindowBorderGfx_(sBerryPowderVendorWindowId, 0x21D, BG_PLTT_ID(13)); DrawPlayerPowderAmount(sBerryPowderVendorWindowId, 0x21D, 13, GetBerryPowder()); } diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index d359a0fc1b2d..5c8af3378518 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -102,7 +102,7 @@ static const u8 sTextColors[2][3] = static const struct WindowTemplate sWindowTemplates[] = { - { // WIN_BERRY_NAME + [WIN_BERRY_NAME] = { .bg = 1, .tilemapLeft = 11, .tilemapTop = 4, @@ -111,7 +111,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 69, }, - { // WIN_SIZE_FIRM + [WIN_SIZE_FIRM] = { .bg = 1, .tilemapLeft = 11, .tilemapTop = 7, @@ -120,7 +120,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 85, }, - { // WIN_DESC + [WIN_DESC] = { .bg = 1, .tilemapLeft = 4, .tilemapTop = 14, @@ -129,7 +129,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 157, }, - { // WIN_BERRY_TAG + [WIN_BERRY_TAG] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 0, @@ -346,7 +346,7 @@ static bool8 LoadBerryTagGfx(void) sBerryTag->gfxState++; break; case 4: - LoadCompressedPalette(gBerryCheck_Pal, 0, 0xC0); + LoadCompressedPalette(gBerryCheck_Pal, BG_PLTT_ID(0), 6 * PLTT_SIZE_4BPP); sBerryTag->gfxState++; break; case 5: @@ -367,7 +367,7 @@ static void HandleInitWindows(void) InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); - LoadPalette(sFontPalette, 0xF0, 0x20); + LoadPalette(sFontPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); for (i = 0; i < ARRAY_COUNT(sWindowTemplates) - 1; i++) PutWindowTilemap(i); ScheduleBgCopyTilemapToVram(0); @@ -599,7 +599,7 @@ static void Task_DisplayAnotherBerry(u8 taskId) switch (data[0]) { case 0x30: - FillWindowPixelBuffer(0, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_BERRY_NAME, PIXEL_FILL(0)); break; case 0x40: PrintBerryNumberAndName(); @@ -609,7 +609,7 @@ static void Task_DisplayAnotherBerry(u8 taskId) CreateBerrySprite(); break; case 0x60: - FillWindowPixelBuffer(1, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_SIZE_FIRM, PIXEL_FILL(0)); break; case 0x70: PrintBerrySize(); @@ -621,7 +621,7 @@ static void Task_DisplayAnotherBerry(u8 taskId) SetFlavorCirclesVisiblity(); break; case 0xA0: - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_DESC, PIXEL_FILL(0)); break; case 0xB0: PrintBerryDescription1(); @@ -636,7 +636,7 @@ static void Task_DisplayAnotherBerry(u8 taskId) switch (data[0]) { case 0x30: - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_DESC, PIXEL_FILL(0)); break; case 0x40: PrintBerryDescription2(); @@ -648,7 +648,7 @@ static void Task_DisplayAnotherBerry(u8 taskId) SetFlavorCirclesVisiblity(); break; case 0x70: - FillWindowPixelBuffer(1, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_SIZE_FIRM, PIXEL_FILL(0)); break; case 0x80: PrintBerryFirmness(); @@ -661,7 +661,7 @@ static void Task_DisplayAnotherBerry(u8 taskId) CreateBerrySprite(); break; case 0xB0: - FillWindowPixelBuffer(0, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_BERRY_NAME, PIXEL_FILL(0)); break; case 0xC0: PrintBerryNumberAndName(); diff --git a/src/braille.c b/src/braille.c index 704f50760b4f..91872b88a0bd 100644 --- a/src/braille.c +++ b/src/braille.c @@ -88,7 +88,7 @@ u16 FontFunc_Braille(struct TextPrinter *textPrinter) subStruct->fontId = *textPrinter->printerTemplate.currentChar; textPrinter->printerTemplate.currentChar++; return RENDER_REPEAT; - case EXT_CTRL_CODE_RESET_SIZE: + case EXT_CTRL_CODE_RESET_FONT: return RENDER_REPEAT; case EXT_CTRL_CODE_PAUSE: textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar++; @@ -109,7 +109,7 @@ u16 FontFunc_Braille(struct TextPrinter *textPrinter) case EXT_CTRL_CODE_ESCAPE: char_ = *++textPrinter->printerTemplate.currentChar; break; - case EXT_CTRL_CODE_SHIFT_TEXT: + case EXT_CTRL_CODE_SHIFT_RIGHT: textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar++; return RENDER_REPEAT; case EXT_CTRL_CODE_SHIFT_DOWN: diff --git a/src/cable_car.c b/src/cable_car.c index dd1da3176216..4eb4c3080492 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -307,7 +307,7 @@ static void CB2_LoadCableCar(void) case 3: if (!FreeTempTileDataBuffersIfPossible()) { - LoadPalette(gCableCarBg_Pal, 0, 0x80); + LoadPalette(gCableCarBg_Pal, BG_PLTT_ID(0), 4 * PLTT_SIZE_4BPP); gMain.state++; } break; diff --git a/src/clear_save_data_screen.c b/src/clear_save_data_screen.c index 9b79b48f1fb1..39f9e1a0fcff 100644 --- a/src/clear_save_data_screen.c +++ b/src/clear_save_data_screen.c @@ -95,7 +95,7 @@ static void Task_ClearSaveDataScreenYesNoChoice(u8 taskId) gTasks[taskId].func = Task_ClearSaveData; break; case 1: - case -1: + case MENU_B_PRESSED: PlaySE(SE_SELECT); DestroyTask(taskId); SetMainCallback2(CB2_FadeAndDoReset); @@ -204,6 +204,6 @@ static void InitClearSaveDataScreenWindows(void) InitWindows(sClearSaveTextWindow); DeactivateAllTextPrinters(); FillWindowPixelBuffer(0, PIXEL_FILL(0)); - LoadWindowGfx(0, 0, 2, 224); - LoadPalette(gStandardMenuPalette, 0xF0, 0x20); + LoadWindowGfx(0, 0, 2, BG_PLTT_ID(14)); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); } diff --git a/src/contest.c b/src/contest.c index 463b66449abc..047f135262ad 100644 --- a/src/contest.c +++ b/src/contest.c @@ -736,7 +736,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .tilemapTop = 0, .width = 12, .height = 2, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x200 }, [WIN_CONTESTANT1_NAME] = { @@ -745,7 +745,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .tilemapTop = 5, .width = 12, .height = 2, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x218 }, [WIN_CONTESTANT2_NAME] = { @@ -754,7 +754,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .tilemapTop = 10, .width = 12, .height = 2, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x230 }, [WIN_CONTESTANT3_NAME] = { @@ -763,7 +763,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .tilemapTop = 15, .width = 12, .height = 2, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x248 }, [WIN_GENERAL_TEXT] = { @@ -772,7 +772,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .tilemapTop = 15, .width = 17, .height = 4, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x260 }, [WIN_MOVE0] = { @@ -781,7 +781,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .tilemapTop = 31, .width = 9, .height = 2, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x2A4 }, [WIN_MOVE1] = { @@ -790,7 +790,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .tilemapTop = 33, .width = 9, .height = 2, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x2B6 }, [WIN_MOVE2] = { @@ -799,7 +799,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .tilemapTop = 35, .width = 9, .height = 2, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x2C8 }, [WIN_MOVE3] = { @@ -808,7 +808,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .tilemapTop = 37, .width = 9, .height = 2, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x2DA }, [WIN_SLASH] = { @@ -817,7 +817,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .tilemapTop = 31, .width = 1, .height = 2, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x2EC }, [WIN_MOVE_DESCRIPTION] = { @@ -826,7 +826,7 @@ static const struct WindowTemplate sContestWindowTemplates[] = .tilemapTop = 35, .width = 18, .height = 4, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x2EE }, DUMMY_WIN_TEMPLATE @@ -1035,13 +1035,13 @@ void LoadContestBgAfterMoveAnim(void) LZDecompressVram(gContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4))); CopyToBgTilemapBuffer(3, gContestAudienceTilemap, 0, 0); CopyBgTilemapBufferToVram(3); - LoadCompressedPalette(gContestInterfaceAudiencePalette, 0, 0x200); + LoadCompressedPalette(gContestInterfaceAudiencePalette, BG_PLTT_OFFSET, BG_PLTT_SIZE); LoadContestPalettes(); for (i = 0; i < CONTESTANT_COUNT; i++) { u32 contestantWindowId = 5 + i; - LoadPalette(eContestTempSave.cachedWindowPalettes[contestantWindowId], 16 * (5 + gContestantTurnOrder[i]), sizeof((eContestTempSave.cachedWindowPalettes[contestantWindowId]))); + LoadPalette(eContestTempSave.cachedWindowPalettes[contestantWindowId], BG_PLTT_ID(5 + gContestantTurnOrder[i]), sizeof((eContestTempSave.cachedWindowPalettes[contestantWindowId]))); } } @@ -1076,11 +1076,11 @@ static void LoadContestPalettes(void) { s32 i; - LoadPalette(sText_Pal, 0xf0, 0x20); - FillPalette(RGB_BLACK, 0, 2); + LoadPalette(sText_Pal, BG_PLTT_ID(15), PLTT_SIZE_4BPP); + SetBackdropFromColor(RGB_BLACK); for (i = 10; i < 14; i++) - LoadPalette(gPlttBufferUnfaded + 241, 240 + i, 2); - FillPalette(RGB(31, 17, 31), 0xF3, 2); + LoadPalette(gPlttBufferUnfaded + BG_PLTT_ID(15) + 1, BG_PLTT_ID(15) + i, PLTT_SIZEOF(1)); + FillPalette(RGB(31, 17, 31), BG_PLTT_ID(15) + 3, PLTT_SIZEOF(1)); } static void InitContestResources(void) @@ -1330,11 +1330,11 @@ static bool8 SetupContestGraphics(u8 *stateVar) DmaCopy32Defvars(3, gContestResources->contestBgTilemaps[2], eContestTempSave.savedJunk, sizeof(eContestTempSave.savedJunk)); break; case 5: - 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)); - CpuCopy32(tempPalette1, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16)); + LoadCompressedPalette(gContestInterfaceAudiencePalette, BG_PLTT_OFFSET, BG_PLTT_SIZE); + CpuCopy32(gPlttBufferUnfaded + BG_PLTT_ID(8), tempPalette1, PLTT_SIZE_4BPP); + CpuCopy32(gPlttBufferUnfaded + BG_PLTT_ID(5 + gContestPlayerMonIndex), tempPalette2, PLTT_SIZE_4BPP); + CpuCopy32(tempPalette2, gPlttBufferUnfaded + BG_PLTT_ID(8), PLTT_SIZE_4BPP); + CpuCopy32(tempPalette1, gPlttBufferUnfaded + BG_PLTT_ID(5 + gContestPlayerMonIndex), PLTT_SIZE_4BPP); DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedWindowPalettes, sizeof(eContestTempSave.cachedWindowPalettes)); LoadContestPalettes(); break; @@ -3100,7 +3100,7 @@ static u8 CreateJudgeSprite(void) u8 spriteId; LoadCompressedSpriteSheet(&sSpriteSheet_Judge); - LoadCompressedPalette(gContest2Pal, 0x110, 32); + LoadCompressedPalette(gContest2Pal, OBJ_PLTT_ID(1), PLTT_SIZE_4BPP); spriteId = CreateSprite(&sSpriteTemplate_Judge, 112, 36, 30); gSprites[spriteId].oam.paletteNum = 1; gSprites[spriteId].callback = SpriteCallbackDummy; @@ -3126,7 +3126,7 @@ static u8 CreateContestantSprite(u16 species, u32 otId, u32 personality, u32 ind HandleLoadSpecialPokePic(FALSE, gMonSpritesGfxPtr->sprites.ptr[B_POSITION_PLAYER_LEFT], species, personality); - LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x120, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), OBJ_PLTT_ID(2), PLTT_SIZE_4BPP); SetMultiuseSpriteTemplateToPokemon(species, B_POSITION_PLAYER_LEFT); spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x70, GetBattlerSpriteFinal_Y(2, species, FALSE), 30); @@ -3997,7 +3997,7 @@ static void Task_StopFlashJudgeAttentionEye(u8 taskId) { gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] = 0xFF; gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 1] = 0; - BlendPalette((eContest.prevTurnOrder[contestant] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18)); + BlendPalette(BG_PLTT_ID(5 + eContest.prevTurnOrder[contestant]) + 6, 2, 0, RGB(31, 31, 18)); DestroyTask(taskId); } } @@ -4021,7 +4021,7 @@ static void Task_FlashJudgeAttentionEye(u8 taskId) || gTasks[taskId].data[offset + 0] == 0) gTasks[taskId].data[offset + 1] ^= 1; - BlendPalette((eContest.prevTurnOrder[i] + 5) * 16 + 6, 2, gTasks[taskId].data[offset + 0], RGB(31, 31, 18)); + BlendPalette(BG_PLTT_ID(5 + eContest.prevTurnOrder[i]) + 6, 2, gTasks[taskId].data[offset + 0], RGB(31, 31, 18)); } } } @@ -4100,8 +4100,8 @@ static void Task_UnusedBlend(u8 taskId) || gTasks[taskId].data[idx] == 0) gTasks[taskId].data[idx + 1] ^= 1; - BlendPalette((i + 5) * 16 + 10, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18)); - BlendPalette((i + 5) * 16 + 12 + i, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18)); + BlendPalette(BG_PLTT_ID(5 + i) + 10, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18)); + BlendPalette(BG_PLTT_ID(5 + i) + 12 + i, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18)); } } } @@ -4414,7 +4414,7 @@ static void DrawContestantWindows(void) for (i = 0; i < CONTESTANT_COUNT; i++) { s32 windowId = i + 5; - LoadPalette(eContestTempSave.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + 5) * 16, sizeof(eContestTempSave.cachedWindowPalettes[0])); + LoadPalette(eContestTempSave.cachedWindowPalettes[windowId], BG_PLTT_ID(5 + gContestantTurnOrder[i]), sizeof(eContestTempSave.cachedWindowPalettes[0])); } DrawContestantWindowText(); } @@ -4769,7 +4769,7 @@ static void Task_ApplauseOverflowAnimation(u8 taskId) else gTasks[taskId].data[4]--; - BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, gTasks[taskId].data[4], RGB_WHITE); + BlendPalette(OBJ_PLTT_ID(gTasks[taskId].data[2]) + 8, 1, gTasks[taskId].data[4], RGB_WHITE); // At the maximum or minimum blending, switch directions. if (gTasks[taskId].data[4] == 0 || gTasks[taskId].data[4] == 16) @@ -4779,7 +4779,7 @@ static void Task_ApplauseOverflowAnimation(u8 taskId) // Continue the animation until the applause meter is cleared. if (eContest.applauseLevel < 5) { - BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, 0, RGB_RED); + BlendPalette(OBJ_PLTT_ID(gTasks[taskId].data[2]) + 8, 1, 0, RGB_RED); DestroyTask(taskId); } } @@ -4992,8 +4992,8 @@ static void Task_BlendAudienceBackground(u8 taskId) else gTasks[taskId].tBlendCoeff--; - BlendPalette(17, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); - BlendPalette(26, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); + BlendPalette(BG_PLTT_ID(1) + 1, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); + BlendPalette(BG_PLTT_ID(1) + 10, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); if (gTasks[taskId].tBlendCoeff == gTasks[taskId].tTargetBlendCoeff) { @@ -5317,7 +5317,7 @@ static void SetMoveSpecificAnimData(u8 contestant) switch (move) { case MOVE_CURSE: - if (gBaseStats[species].type1 == TYPE_GHOST || gBaseStats[species].type2 == TYPE_GHOST) + if (gSpeciesInfo[species].types[0] == TYPE_GHOST || gSpeciesInfo[species].types[1] == TYPE_GHOST) gAnimMoveTurn = 0; else gAnimMoveTurn = 1; @@ -5456,7 +5456,7 @@ static void Contest_StartTextPrinter(const u8 *currChar, bool32 b) u8 speed; printerTemplate.currentChar = currChar; - printerTemplate.windowId = 4; + printerTemplate.windowId = WIN_GENERAL_TEXT; printerTemplate.fontId = FONT_NORMAL; printerTemplate.x = 0; printerTemplate.y = 1; @@ -5482,7 +5482,7 @@ static void Contest_StartTextPrinter(const u8 *currChar, bool32 b) AddTextPrinter(&printerTemplate, speed, 0); } - PutWindowTilemap(4); + PutWindowTilemap(WIN_GENERAL_TEXT); Contest_SetBgCopyFlags(0); } diff --git a/src/contest_painting.c b/src/contest_painting.c index f891946d67b3..40bad724e78c 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -223,7 +223,7 @@ static void ShowContestPainting(void) break; case 4: PrintContestPaintingCaption(gCurContestWinnerSaveIdx, gCurContestWinnerIsForArtist); - LoadPalette(sBgPalette, 0, 1 * 2); + SetBackdropFromPalette(sBgPalette); DmaClear32(3, PLTT, PLTT_SIZE); BeginFastPaletteFade(2); SetVBlankCallback(VBlankCB_ContestPainting); @@ -418,7 +418,7 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 isForArtist) { u8 x, y; - LoadPalette(sPictureFramePalettes, 0, 0x100); + LoadPalette(sPictureFramePalettes, BG_PLTT_ID(0), 8 * PLTT_SIZE_4BPP); if (isForArtist == TRUE) { // Load Artist's frame @@ -584,7 +584,7 @@ static void DoContestPaintingImageProcessing(u8 imageEffect) ApplyImageProcessingEffects(&gImageProcessingContext); ApplyImageProcessingQuantization(&gImageProcessingContext); ConvertImageProcessingToGBA(&gImageProcessingContext); - LoadPalette(gContestPaintingMonPalette, 0x100, 0x200); + LoadPalette(gContestPaintingMonPalette, OBJ_PLTT_ID(0), 16 * PLTT_SIZE_4BPP); } static void CreateContestPaintingPicture(u8 contestWinnerId, bool8 isForArtist) diff --git a/src/contest_util.c b/src/contest_util.c index 1adb0d28bdda..53a81dea0426 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -319,9 +319,10 @@ static const struct BgTemplate sBgTemplates[] = } }; -static const struct WindowTemplate sWindowTemplates[] = +// Window IDs are implicitly shared with contestant IDs in LoadContestMonName +static const struct WindowTemplate sWindowTemplates[CONTESTANT_COUNT + 1] = { - { + { // Contestant 1 .bg = 1, .tilemapLeft = 7, .tilemapTop = 4, @@ -330,7 +331,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 770 }, - { + { // Contestant 2 .bg = 1, .tilemapLeft = 7, .tilemapTop = 7, @@ -339,7 +340,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 794 }, - { + { // Contestant 3 .bg = 1, .tilemapLeft = 7, .tilemapTop = 10, @@ -348,7 +349,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 818 }, - { + { // Contestant 4 .bg = 1, .tilemapLeft = 7, .tilemapTop = 13, @@ -357,7 +358,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 842 }, - DUMMY_WIN_TEMPLATE, + DUMMY_WIN_TEMPLATE }; static const struct OamData sOamData_WirelessIndicatorWindow = @@ -455,8 +456,8 @@ static void LoadContestResultsBgGfx(void) CopyToBgTilemapBuffer(2, gContestResults_Interface_Tilemap, 0, 0); CopyToBgTilemapBuffer(0, gContestResults_WinnerBanner_Tilemap, 0, 0); LoadContestResultsTitleBarTilemaps(); - LoadCompressedPalette(gContestResults_Pal, 0, 0x200); - LoadPalette(sResultsTextWindow_Pal, 0xF0, sizeof(sResultsTextWindow_Pal)); + LoadCompressedPalette(gContestResults_Pal, BG_PLTT_ID(0), 16 * PLTT_SIZE_4BPP); + LoadPalette(sResultsTextWindow_Pal, BG_PLTT_ID(15), sizeof(sResultsTextWindow_Pal)); for (i = 0; i < CONTESTANT_COUNT; i++) { @@ -1080,9 +1081,9 @@ static void Task_FlashStarsAndHearts(u8 taskId) else if (gTasks[taskId].tCoeff == 0) gTasks[taskId].tDecreasing = FALSE; - BlendPalette(0x6B, 1, gTasks[taskId].tCoeff, RGB(30, 22, 11)); - BlendPalette(0x68, 1, gTasks[taskId].tCoeff, RGB_WHITE); - BlendPalette(0x6E, 1, gTasks[taskId].tCoeff, RGB(30, 29, 29)); + BlendPalette(BG_PLTT_ID(6) + 11, 1, gTasks[taskId].tCoeff, RGB(30, 22, 11)); + BlendPalette(BG_PLTT_ID(6) + 8, 1, gTasks[taskId].tCoeff, RGB_WHITE); + BlendPalette(BG_PLTT_ID(6) + 14, 1, gTasks[taskId].tCoeff, RGB(30, 29, 29)); } if (gTasks[taskId].tCoeff == 0) @@ -1126,7 +1127,7 @@ static void LoadAllContestMonIconPalettes(void) for (i = 0; i < CONTESTANT_COUNT; i++) { species = gContestMons[i].species; - LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[GetIconSpecies(species, 0)]], i * 0x10 + 0xA0, 0x20); + LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[GetIconSpecies(species, 0)]], BG_PLTT_ID(10 + i), PLTT_SIZE_4BPP); } } @@ -1544,7 +1545,7 @@ static void Task_HighlightWinnersBox(u8 taskId) if (++gTasks[taskId].data[11] == 1) { gTasks[taskId].data[11] = 0; - BlendPalette(0x91, 1, gTasks[taskId].data[12], RGB(13, 28, 27)); + BlendPalette(BG_PLTT_ID(9) + 1, 1, gTasks[taskId].data[12], RGB(13, 28, 27)); if (gTasks[taskId].data[13] == 0) { if (++gTasks[taskId].data[12] == 16) @@ -2508,16 +2509,16 @@ void LoadLinkContestPlayerPalettes(void) if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) { if (gLinkPlayers[i].gender == MALE) - LoadPalette(gObjectEventPal_RubySapphireBrendan, 0x160 + i * 0x10, 0x20); + LoadPalette(gObjectEventPal_RubySapphireBrendan, OBJ_PLTT_ID(6 + i), PLTT_SIZE_4BPP); else - LoadPalette(gObjectEventPal_RubySapphireMay, 0x160 + i * 0x10, 0x20); + LoadPalette(gObjectEventPal_RubySapphireMay, OBJ_PLTT_ID(6 + i), PLTT_SIZE_4BPP); } else { if (gLinkPlayers[i].gender == MALE) - LoadPalette(gObjectEventPal_Brendan, 0x160 + i * 0x10, 0x20); + LoadPalette(gObjectEventPal_Brendan, OBJ_PLTT_ID(6 + i), PLTT_SIZE_4BPP); else - LoadPalette(gObjectEventPal_May, 0x160 + i * 0x10, 0x20); + LoadPalette(gObjectEventPal_May, OBJ_PLTT_ID(6 + i), PLTT_SIZE_4BPP); } } } diff --git a/src/credits.c b/src/credits.c index a857e05806b2..e88773c2e469 100644 --- a/src/credits.c +++ b/src/credits.c @@ -366,7 +366,7 @@ static void InitCreditsBgsAndWindows(void) ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sBackgroundTemplates, ARRAY_COUNT(sBackgroundTemplates)); SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE)); - LoadPalette(sCredits_Pal, 0x80, 64); + LoadPalette(sCredits_Pal, BG_PLTT_ID(8), 2 * PLTT_SIZE_4BPP); InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); PutWindowTilemap(0); @@ -548,9 +548,9 @@ static void Task_LoadShowMons(u8 taskId) ResetAllPicSprites(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 8; - LZ77UnCompVram(gBirchHelpGfx, (void *)VRAM); + LZ77UnCompVram(gBirchBagGrass_Gfx, (void *)VRAM); LZ77UnCompVram(gBirchGrassTilemap, (void *)(BG_SCREEN_ADDR(7))); - LoadPalette(gBirchBagGrassPal[0] + 1, 1, 31 * 2); + LoadPalette(gBirchBagGrass_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(2 * 16 - 1)); for (i = 0; i < MON_PIC_SIZE; i++) gDecompressionBuffer[i] = 0x11; @@ -625,7 +625,7 @@ static void Task_CreditsTheEnd3(u8 taskId) { ResetGpuAndVram(); ResetPaletteFade(); - LoadTheEndScreen(0, 0x3800, 0); + LoadTheEndScreen(0, 0x3800, BG_PLTT_ID(0)); ResetSpriteData(); FreeAllSpritePalettes(); BeginNormalPaletteFade(PALETTES_ALL, 8, 16, 0, RGB_BLACK); diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h index e6e03f06c10f..b1f158310a70 100644 --- a/src/data/battle_anim.h +++ b/src/data/battle_anim.h @@ -1450,6 +1450,7 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_OmegaSymbol, 0x0200, ANIM_TAG_OMEGA_SYMBOL}, {gBattleAnimSpriteGfx_Orbs, 0x0180, ANIM_TAG_STEEL_BEAM}, {gBattleAnimSpriteGfx_AuraSphere, 0x200, ANIM_TAG_POLTERGEIST}, + {gBattleAnimSpriteGfx_Teapot, 0x1800, ANIM_TAG_TEAPOT}, }; const struct CompressedSpritePalette gBattleAnimPaletteTable[] = @@ -1900,6 +1901,7 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_OmegaSymbol, ANIM_TAG_OMEGA_SYMBOL}, {gBattleAnimSpritePal_SteelBeam, ANIM_TAG_STEEL_BEAM}, {gBattleAnimSpritePal_Poltergeist, ANIM_TAG_POLTERGEIST}, + {gBattleAnimSpritePal_Teapot, ANIM_TAG_TEAPOT}, }; const struct BattleAnimBackground gBattleAnimBackgroundTable[] = @@ -1935,7 +1937,7 @@ const struct BattleAnimBackground gBattleAnimBackgroundTable[] = [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_GIGA_IMPACT_CONTEST] = {gBattleAnimBgImage_GigaImpactContest, 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}, 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 f87c1bfc4d21..c82b777c6b25 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[TOTAL_ROUNDS] = +static const struct PyramidWildMon *const sOpenLevelWildMonPointers[TOTAL_PYRAMID_ROUNDS] = { sOpenLevelWildMons_Round1, sOpenLevelWildMons_Round2, diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 346309c55df3..bf5414276432 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -256,7 +256,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, @@ -272,7 +272,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_2X_IN_AIR, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_2X_IN_AIR | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, @@ -298,7 +298,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .accuracy = 0, - .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_WIND_MOVE, #elif B_UPDATED_MOVE_DATA == GEN_5 .accuracy = 100, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, @@ -1073,7 +1073,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 10, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1354,7 +1354,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, @@ -1868,7 +1868,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_RECOVER] = { - #if B_UPDATED_MOVE_DATA >= GEN_4 + #if B_UPDATED_MOVE_DATA >= GEN_9 + .pp = 5, + #elif B_UPDATED_MOVE_DATA >= GEN_4 .pp = 10, #else .pp = 20, @@ -2401,11 +2403,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SOFT_BOILED] = { + #if B_UPDATED_MOVE_DATA >= GEN_9 + .pp = 5, + #else + .pp = 10, + #endif .effect = EFFECT_SOFTBOILED, .power = 0, .type = TYPE_NORMAL, .accuracy = 100, - .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, @@ -2798,11 +2804,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_REST] = { + #if B_UPDATED_MOVE_DATA >= GEN_9 + .pp = 5, + #else + .pp = 10, + #endif .effect = EFFECT_REST, .power = 0, .type = TYPE_PSYCHIC, .accuracy = 0, - .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, @@ -2922,7 +2932,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, @@ -3531,7 +3541,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 100, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, @@ -3633,7 +3643,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 0, .target = MOVE_TARGET_ALL_BATTLERS, .priority = 0, - .flags = 0, + .flags = FLAG_WIND_MOVE, .split = SPLIT_STATUS, .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, @@ -3759,11 +3769,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_MILK_DRINK] = { + #if B_UPDATED_MOVE_DATA >= GEN_9 + .pp = 5, + #else + .pp = 10, + #endif .effect = EFFECT_SOFTBOILED, .power = 0, .type = TYPE_NORMAL, .accuracy = 0, - .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, @@ -3805,7 +3819,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, @@ -4290,7 +4304,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [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, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_2X_IN_AIR | FLAG_WIND_MOVE, #else .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_2X_IN_AIR, #endif @@ -4663,7 +4677,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 10, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5452,11 +5466,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SLACK_OFF] = { + #if B_UPDATED_MOVE_DATA >= GEN_9 + .pp = 5, + #else + .pp = 10, + #endif .effect = EFFECT_RESTORE_HP, .power = 0, .type = TYPE_NORMAL, .accuracy = 100, - .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, @@ -5656,7 +5674,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5989,7 +6007,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, @@ -6055,10 +6073,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_8 .flags = FLAG_SNATCH_AFFECTED | FLAG_SOUND, + .effect = EFFECT_ATTACK_UP_USER_ALLY, #else .flags = FLAG_SNATCH_AFFECTED, + .effect = EFFECT_ATTACK_UP, #endif - .effect = EFFECT_ATTACK_UP, .power = 0, .type = TYPE_NORMAL, .accuracy = 0, @@ -6286,7 +6305,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6403,11 +6422,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_ROOST] = { + #if B_UPDATED_MOVE_DATA >= GEN_9 + .pp = 5, + #else + .pp = 10, + #endif .effect = EFFECT_ROOST, .power = 0, .type = TYPE_FLYING, .accuracy = 0, - .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, @@ -6613,7 +6636,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, - .flags = FLAG_SNATCH_AFFECTED, + .flags = FLAG_SNATCH_AFFECTED | FLAG_WIND_MOVE, .split = SPLIT_STATUS, .zMovePower = 0, .zMoveEffect = Z_EFFECT_BOOST_CRITS, @@ -6810,7 +6833,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 100, .pp = 15, .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, + .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_STATUS, .zMovePower = 0, @@ -7217,7 +7240,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, @@ -7259,7 +7282,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .pp = 15, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, #elif B_UPDATED_MOVE_DATA == GEN_5 .pp = 20, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, @@ -7289,7 +7312,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, @@ -7699,7 +7722,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, @@ -7921,7 +7944,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, @@ -8128,7 +8151,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_WOOD_HAMMER] = { - .effect = EFFECT_RECOIL_25, + .effect = EFFECT_RECOIL_33, .power = 120, .type = TYPE_GRASS, .accuracy = 100, @@ -8892,7 +8915,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .type = TYPE_NORMAL, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, @@ -9004,11 +9027,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SCALD] = { - #if B_UPDATED_MOVE_DATA >= GEN_6 - .effect = EFFECT_SCALD, - #else - .effect = EFFECT_BURN_HIT, - #endif + .effect = EFFECT_BURN_HIT, .power = 80, .type = TYPE_WATER, .accuracy = 100, @@ -9537,7 +9556,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, @@ -9553,7 +9572,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, @@ -9691,7 +9710,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_IN_AIR | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10201,7 +10220,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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_WIND_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, @@ -10400,7 +10419,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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_WIND_MOVE, .split = SPLIT_SPECIAL, .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, @@ -10524,7 +10543,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_STEAM_ERUPTION] = { - .effect = EFFECT_SCALD, + .effect = EFFECT_BURN_HIT, .power = 110, .type = TYPE_WATER, .accuracy = 95, @@ -11013,11 +11032,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SHORE_UP] = { + #if B_UPDATED_MOVE_DATA >= GEN_9 + .pp = 5, + #else + .pp = 10, + #endif .effect = EFFECT_SHORE_UP, .power = 0, .type = TYPE_GROUND, .accuracy = 0, - .pp = 10, .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, @@ -11182,7 +11205,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, @@ -11532,7 +11555,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 100, .pp = 5, .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, + .target = MOVE_TARGET_BOTH, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, @@ -12325,13 +12348,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_TEATIME] = { - .effect = EFFECT_PLACEHOLDER, //TODO + .effect = EFFECT_TEATIME, .power = 0, .type = TYPE_NORMAL, .accuracy = 0, .pp = 10, .secondaryEffectChance = 0, - .target = MOVE_TARGET_ALL_BATTLERS, + .target = MOVE_TARGET_USER, .priority = 0, .flags = 0, .split = SPLIT_STATUS, @@ -12509,7 +12532,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, @@ -12853,8 +12876,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_GRASSY_GLIDE] = { + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 60, + #else + .power = 70, + #endif .effect = EFFECT_GRASSY_GLIDE, - .power = 70, .type = TYPE_GRASS, .accuracy = 100, .pp = 20, @@ -13045,7 +13072,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SCORCHING_SANDS] = { - .effect = EFFECT_SCALD, + .effect = EFFECT_BURN_HIT, .power = 70, .type = TYPE_GROUND, .accuracy = 100, @@ -13076,8 +13103,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_WICKED_BLOW] = { + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 75, + #else + .power = 80, + #endif .effect = EFFECT_ALWAYS_CRIT, - .power = 80, .type = TYPE_DARK, .accuracy = 100, .pp = 5, @@ -13188,8 +13219,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_GLACIAL_LANCE] = { + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 120, + #else + .power = 130, + #endif .effect = EFFECT_HIT, - .power = 130, .type = TYPE_ICE, .accuracy = 100, .pp = 5, @@ -13236,15 +13271,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_DIRE_CLAW] = { + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 80, + #else + .power = 60, + #endif .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, + .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, @@ -13252,15 +13291,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_PSYSHIELD_BASH] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_PSYSHIELD_BASH, + .effect = EFFECT_DEFENSE_UP_HIT, .power = 70, .type = TYPE_PSYCHIC, .accuracy = 90, .pp = 10, - .secondaryEffectChance = 50, // TODO: Adjust this value. Currently it's set to Fiery Dance's. + .secondaryEffectChance = 100, .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, @@ -13268,7 +13307,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_POWER_SHIFT] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_POWER_SHIFT, + .effect = EFFECT_POWER_TRICK, .power = 0, .type = TYPE_NORMAL, .accuracy = 0, @@ -13292,7 +13331,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .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 | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, @@ -13300,15 +13339,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SPRINGTIDE_STORM] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_SPRINGTIDE_STORM, - .power = 95, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 100, + #else + .power = 95, + #endif + .effect = EFFECT_ATTACK_DOWN_HIT, .type = TYPE_FAIRY, .accuracy = 80, .pp = 5, .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_WIND_MOVE, .split = SPLIT_SPECIAL, .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, @@ -13316,7 +13359,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_MYSTICAL_POWER] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_MYSTICAL_POWER, + .effect = EFFECT_SPECIAL_ATTACK_UP_HIT, .power = 70, .type = TYPE_PSYCHIC, .accuracy = 90, @@ -13324,7 +13367,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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 = 140, .zMoveEffect = Z_EFFECT_NONE, @@ -13332,13 +13375,17 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_RAGING_FURY] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_RAGING_FURY, - .power = 90, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 120, + #else + .power = 90, + #endif + .effect = EFFECT_RAMPAGE, .type = TYPE_FIRE, - .accuracy = 85, + .accuracy = 100, .pp = 10, - .secondaryEffectChance = 100, - .target = MOVE_TARGET_SELECTED, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_RANDOM, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, @@ -13348,8 +13395,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_WAVE_CRASH] = { - .effect = EFFECT_RECOIL_33, // TODO: Legends: Arceus mechanics. - .power = 75, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 120, + #else + .power = 75, + #endif + .effect = EFFECT_RECOIL_33, .type = TYPE_WATER, .accuracy = 100, .pp = 10, @@ -13364,12 +13415,16 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_CHLOROBLAST] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_CHLOROBLAST, - .power = 120, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 150, + #else + .power = 120, + #endif + .effect = EFFECT_RECOIL_50, .type = TYPE_GRASS, .accuracy = 95, .pp = 5, - .secondaryEffectChance = 100, + .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, @@ -13380,15 +13435,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_MOUNTAIN_GALE] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_ACTION_SPEED_DOWN_HIT, + .effect = EFFECT_FLINCH_HIT, .power = 100, .type = TYPE_ICE, .accuracy = 85, .pp = 5, - .secondaryEffectChance = 100, + .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_PHYSICAL, .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, @@ -13396,7 +13451,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_VICTORY_DANCE] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_VICTORY_DANCE, + .effect = EFFECT_VICTORY_DANCE, .power = 0, .type = TYPE_FIGHTING, .accuracy = 0, @@ -13412,15 +13467,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_HEADLONG_RUSH] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_HEADLONG_RUSH, - .power = 100, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 120, + #else + .power = 100, + #endif + .effect = EFFECT_CLOSE_COMBAT, .type = TYPE_GROUND, .accuracy = 100, .pp = 5, - .secondaryEffectChance = 100, + .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 = 180, .zMoveEffect = Z_EFFECT_NONE, @@ -13436,7 +13495,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, @@ -13444,15 +13503,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_ESPER_WING] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_ESPER_WING, - .power = 75, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 80, + #else + .power = 75, + #endif + .effect = EFFECT_SPEED_UP_HIT, .type = TYPE_PSYCHIC, .accuracy = 90, .pp = 10, - .secondaryEffectChance = 0, + .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_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, @@ -13460,15 +13523,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_BITTER_MALICE] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_ESPER_WING, - .power = 60, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 75, + #else + .power = 60, + #endif + .effect = EFFECT_ATTACK_DOWN_HIT, .type = TYPE_GHOST, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 0, + .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 = 120, .zMoveEffect = Z_EFFECT_NONE, @@ -13476,7 +13543,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SHELTER] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_SHELTER, + .effect = EFFECT_DEFENSE_UP_2, .power = 0, .type = TYPE_STEEL, .accuracy = 0, @@ -13484,7 +13551,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 100, .target = MOVE_TARGET_USER, .priority = 0, - .flags = 0, + .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, @@ -13492,15 +13559,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_TRIPLE_ARROWS] = { + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 90, + #else + .power = 50, + #endif .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, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, @@ -13516,7 +13587,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, @@ -13532,7 +13603,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .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_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, @@ -13540,15 +13611,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_BLEAKWIND_STORM] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_BLEAKWIND_STORM, - .power = 95, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 100, + .pp = 10, + #else + .power = 95, + .pp = 5, + #endif + .effect = EFFECT_SPEED_DOWN_HIT, .type = TYPE_FLYING, .accuracy = 80, - .pp = 5, - .secondaryEffectChance = 0, + .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 | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, @@ -13556,15 +13632,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_WILDBOLT_STORM] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_WILDBOLT_STORM, - .power = 95, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 100, + .pp = 10, + #else + .power = 95, + .pp = 5, + #endif + .effect = EFFECT_PARALYZE_HIT, .type = TYPE_ELECTRIC, .accuracy = 80, - .pp = 5, - .secondaryEffectChance = 0, + .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_WIND_MOVE, .split = SPLIT_SPECIAL, .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, @@ -13572,15 +13653,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SANDSEAR_STORM] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_SANDSEAR_STORM, - .power = 95, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .power = 100, + .pp = 10, + #else + .power = 95, + .pp = 5, + #endif + .effect = EFFECT_BURN_HIT, .type = TYPE_GROUND, .accuracy = 80, - .pp = 5, - .secondaryEffectChance = 0, + .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_WIND_MOVE, .split = SPLIT_SPECIAL, .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, @@ -13618,6 +13704,790 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, }, + [MOVE_TERA_BLAST] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_TERA_BLAST, + .power = 80, + .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, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_SILK_TRAP] = + { + .effect = EFFECT_PROTECT, + .power = 0, + .type = TYPE_BUG, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 4, + .flags = FLAG_PROTECTION_MOVE, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE + }, + + [MOVE_AXE_KICK] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_RECOIL_IF_MISS + 30% chance to confuse + .power = 120, + .type = TYPE_FIGHTING, + .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_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE + }, + + [MOVE_LAST_RESPECTS] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_LAST_RESPECTS + .power = 50, + .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_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE + }, + + [MOVE_LUMINA_CRASH] = + { + .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2, + .power = 80, + .type = TYPE_PSYCHIC, + .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_ORDER_UP] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_ORDER_UP + .power = 80, + .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_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE + }, + + [MOVE_JET_PUNCH] = + { + .effect = EFFECT_HIT, + .power = 60, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 15, + .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 | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, + // The datamine master sheet mentions uncopiable by Metronome but that sounds odd? not yet implemented + }, + + [MOVE_SPICY_EXTRACT] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_SPICY_EXTRACT + .power = 0, + .type = TYPE_GRASS, + .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_NONE, + // The datamine master sheet mentions uncopiable by Metronome but that sounds odd? not yet implemented + }, + + [MOVE_SPIN_OUT] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_SPIN_OUT + .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_POPULATION_BOMB] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_MULTI_HIT maybe? + .power = 20, + .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_SLICING_MOVE, + .split = SPLIT_PHYSICAL, + .zMovePower = 40, + .zMoveEffect = Z_EFFECT_NONE, + //Supposedly uncallable by Metronome? (if so, needs implementation) + }, + + [MOVE_ICE_SPINNER] = + { + .effect = EFFECT_HIT_SET_REMOVE_TERRAIN, + .power = 80, + .type = TYPE_ICE, + .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, + .argument = 1, // Remove the active field terrain if there is one. + }, + + [MOVE_GLAIVE_RUSH] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_GLAIVE_RUSH + .power = 120, + .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, + .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE + }, + + [MOVE_REVIVAL_BLESSING] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_REVIVAL_BLESSING + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + // Uncallable by Metronome (to be implemented) + }, + + [MOVE_SALT_CURE] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_SALT_CURE + .power = 40, + .type = TYPE_ROCK, + .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_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 80, + .zMoveEffect = Z_EFFECT_NONE, + // Supposedly uncallable by Metronome, but dubious + }, + + [MOVE_TRIPLE_DIVE] = + { + .effect = EFFECT_TRIPLE_KICK, + .power = 30, + .type = TYPE_WATER, + .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 = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MORTAL_SPIN] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_MORTAL_SPIN + .power = 30, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .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 = 60, + .zMoveEffect = Z_EFFECT_NONE + }, + + [MOVE_DOODLE] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_DOODLE + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_FOES_AND_ALLY, // Supposedly unconfirmed? + .priority = 0, + .flags = 0, // TO VERIFY + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + // Supposedly uncallable by Metronome (unimplemented) + }, + + [MOVE_FILLET_AWAY] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_FILLET_AWAY + .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, + // Supposedly uncallable by Metronome (unimplemented) + }, + + [MOVE_KOWTOW_CLEAVE] = + { + .effect = EFFECT_HIT, + .power = 85, + .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, // | FLAG_SLICING_MOVE, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_FLOWER_TRICK] = + { + .effect = EFFECT_ALWAYS_CRIT, + .power = 70, + .type = TYPE_GRASS, + .accuracy = 0, + .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 = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TORCH_SONG] = + { + .effect = EFFECT_SP_ATTACK_UP_HIT, + .power = 80, + .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_SOUND | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_AQUA_STEP] = + { + .effect = EFFECT_SPEED_UP_HIT, + .power = 80, + .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 | FLAG_DANCE | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_RAGING_BULL] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_RAGING_BULL + .power = 90, + .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, // TO VERIFY + .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, + // Uncallable by Metronome (to be implemented) + }, + + [MOVE_MAKE_IT_RAIN] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_MAKE_IT_RAIN + .power = 120, + .type = TYPE_STEEL, + .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, + // Uncallable by Metronome (to be implemented) + }, + + [MOVE_RUINATION] = + { + .effect = EFFECT_SUPER_FANG, + .power = 1, + .type = TYPE_DARK, + .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 = 100, + .zMoveEffect = Z_EFFECT_NONE, + // Uncallable by Metronome (to be implemented) + }, + + [MOVE_COLLISION_COURSE] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_COLLISION_COURSE + .power = 100, + .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 = 180, + .zMoveEffect = Z_EFFECT_NONE, + // Uncallable by Metronome (to be implemented) + }, + + [MOVE_ELECTRO_DRIFT] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_COLLISION_COURSE + .power = 100, + .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_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + // Uncallable by Metronome (to be implemented) + }, + + [MOVE_SHED_TAIL] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_SHED_TAIL + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, + // Uncallable by Metronome (to be implemented) + }, + + [MOVE_CHILLY_RECEPTION] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_CHILLY_RECEPTION + .power = 0, + .type = TYPE_ICE, + .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, + // Supposedly uncallable by Metronome? (to be implemented) + }, + + [MOVE_TIDY_UP] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_TIDY_UP + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = 0, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, + // Supposedly uncallable by Metronome? (to be implemented) + }, + + [MOVE_SNOWSCAPE] = + { + .effect = EFFECT_HAIL, + .power = 0, + .type = TYPE_ICE, + .accuracy = 0, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_ALL_BATTLERS, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED, + .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, + // Currently an exact copy of Hail until we figure out what to do with it + }, + + [MOVE_POUNCE] = + { + .effect = EFFECT_SPEED_DOWN_HIT, + .power = 50, + .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 = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TRAILBLAZE] = + { + .effect = EFFECT_SPEED_UP_HIT, + .power = 50, + .type = TYPE_GRASS, + .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 = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_CHILLING_WATER] = + { + .effect = EFFECT_ATTACK_DOWN_HIT, + .power = 50, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 20, + .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_HYPER_DRILL] = + { + .effect = EFFECT_HIT, + .power = 100, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_TWIN_BEAM] = + { + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_TWO_STRIKES, + .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_RAGE_FIST] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_RAGE_FIST + .power = 50, + .type = TYPE_GHOST, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_ARMOR_CANNON] = + { + .effect = EFFECT_CLOSE_COMBAT, + .power = 120, + .type = TYPE_FIRE, + .accuracy = 100, + .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_BITTER_BLADE] = + { + .effect = EFFECT_ABSORB, + .power = 90, + .type = TYPE_FIRE, + .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_SLICING_MOVE, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_DOUBLE_SHOCK] = + { + .effect = EFFECT_DOUBLE_SHOCK, + .power = 120, + .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 = 190, + .zMoveEffect = Z_EFFECT_NONE + }, + + [MOVE_GIGATON_HAMMER] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_GIGATON_HAMMER + .power = 160, + .type = TYPE_STEEL, + .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_COMEUPPANCE] = + { + .effect = EFFECT_METAL_BURST, + .power = 0, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_DEPENDS, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_AQUA_CUTTER] = + { + .effect = EFFECT_HIT, + .power = 70, + .type = TYPE_WATER, + .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, // | FLAG_SLICING_MOVE, + .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_BLAZING_TORQUE] = + { + .effect = EFFECT_BURN_HIT, + .power = 80, + .type = TYPE_FIRE, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE + }, + + [MOVE_WICKED_TORQUE] = + { + .effect = EFFECT_SLEEP_HIT, + .power = 80, + .type = TYPE_DARK, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 10, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE + }, + + [MOVE_NOXIOUS_TORQUE] = + { + .effect = EFFECT_POISON_HIT, + .power = 100, + .type = TYPE_POISON, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE + }, + + [MOVE_COMBAT_TORQUE] = + { + .effect = EFFECT_PARALYZE_HIT, + .power = 100, + .type = TYPE_FIGHTING, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE + }, + + [MOVE_MAGICAL_TORQUE] = + { + .effect = EFFECT_CONFUSE_HIT, + .power = 100, + .type = TYPE_FAIRY, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, + .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE + }, + // Z-Moves [MOVE_BREAKNECK_BLITZ] = { @@ -13966,7 +14836,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = }, [MOVE_GENESIS_SUPERNOVA] = { - .effect = EFFECT_DAMAGE_SET_TERRAIN, + .effect = EFFECT_HIT_SET_REMOVE_TERRAIN, .power = 185, .type = TYPE_PSYCHIC, .accuracy = 0, @@ -13977,7 +14847,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = 0, .zMovePower = 0, .split = SPLIT_SPECIAL, - .argument = 0, //psychic terrain + .argument = 0, // Set Psychic Terrain. If there's a different field terrain active, overwrite it. .zMoveEffect = 0 }, [MOVE_SINISTER_ARROW_RAID] = @@ -14027,7 +14897,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = }, [MOVE_SPLINTERED_STORMSHARDS] = { - .effect = EFFECT_DAMAGE_SET_TERRAIN, + .effect = EFFECT_HIT_SET_REMOVE_TERRAIN, .power = 190, .type = TYPE_ROCK, .accuracy = 0, @@ -14038,7 +14908,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = 0, .zMovePower = 0, .split = SPLIT_PHYSICAL, - .argument = 1, //remove terrain + .argument = 1, // Remove the active field terrain if there is one. .zMoveEffect = 0 }, [MOVE_LETS_SNUGGLE_FOREVER] = diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h index 244f0ddb2ea4..2de44b348636 100644 --- a/src/data/contest_moves.h +++ b/src/data/contest_moves.h @@ -5966,6 +5966,102 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = [MOVE_LUNAR_BLESSING] = {0}, // TODO [MOVE_TAKE_HEART] = {0}, // TODO + + [MOVE_TERA_BLAST] = {0}, // TODO + + [MOVE_SILK_TRAP] = {0}, // TODO + + [MOVE_AXE_KICK] = {0}, // TODO + + [MOVE_LAST_RESPECTS] = {0}, // TODO + + [MOVE_LUMINA_CRASH] = {0}, // TODO + + [MOVE_ORDER_UP] = {0}, // TODO + + [MOVE_JET_PUNCH] = {0}, // TODO + + [MOVE_SPICY_EXTRACT] = {0}, // TODO + + [MOVE_SPIN_OUT] = {0}, // TODO + + [MOVE_POPULATION_BOMB] = {0}, // TODO + + [MOVE_ICE_SPINNER] = {0}, // TODO + + [MOVE_GLAIVE_RUSH] = {0}, // TODO + + [MOVE_REVIVAL_BLESSING] = {0}, // TODO + + [MOVE_SALT_CURE] = {0}, // TODO + + [MOVE_TRIPLE_DIVE] = {0}, // TODO + + [MOVE_MORTAL_SPIN] = {0}, // TODO + + [MOVE_DOODLE] = {0}, // TODO + + [MOVE_FILLET_AWAY] = {0}, // TODO + + [MOVE_KOWTOW_CLEAVE] = {0}, // TODO + + [MOVE_FLOWER_TRICK] = {0}, // TODO + + [MOVE_TORCH_SONG] = {0}, // TODO + + [MOVE_AQUA_STEP] = {0}, // TODO + + [MOVE_RAGING_BULL] = {0}, // TODO + + [MOVE_MAKE_IT_RAIN] = {0}, // TODO + + [MOVE_RUINATION] = {0}, // TODO + + [MOVE_COLLISION_COURSE] = {0}, // TODO + + [MOVE_ELECTRO_DRIFT] = {0}, // TODO + + [MOVE_SHED_TAIL] = {0}, // TODO + + [MOVE_CHILLY_RECEPTION] = {0}, // TODO + + [MOVE_TIDY_UP] = {0}, // TODO + + [MOVE_SNOWSCAPE] = {0}, // TODO + + [MOVE_POUNCE] = {0}, // TODO + + [MOVE_TRAILBLAZE] = {0}, // TODO + + [MOVE_CHILLING_WATER] = {0}, // TODO + + [MOVE_HYPER_DRILL] = {0}, // TODO + + [MOVE_TWIN_BEAM] = {0}, // TODO + + [MOVE_RAGE_FIST] = {0}, // TODO + + [MOVE_ARMOR_CANNON] = {0}, // TODO + + [MOVE_BITTER_BLADE] = {0}, // TODO + + [MOVE_DOUBLE_SHOCK] = {0}, // TODO + + [MOVE_GIGATON_HAMMER] = {0}, // TODO + + [MOVE_COMEUPPANCE] = {0}, // TODO + + [MOVE_AQUA_CUTTER] = {0}, // TODO + + [MOVE_BLAZING_TORQUE] = {0}, // TODO + + [MOVE_WICKED_TORQUE] = {0}, // TODO + + [MOVE_NOXIOUS_TORQUE] = {0}, // TODO + + [MOVE_COMBAT_TORQUE] = {0}, // TODO + + [MOVE_MAGICAL_TORQUE] = {0}, // TODO }; const struct ContestEffect gContestEffects[] = diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index fb2ff5986ed2..10fff6134988 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -2,102 +2,104 @@ #include "global.h" #include "contest.h" -#define CONTEST_OPPONENT_JIMMY 0 -#define CONTEST_OPPONENT_EDITH 1 -#define CONTEST_OPPONENT_EVAN 2 -#define CONTEST_OPPONENT_KELSEY 3 -#define CONTEST_OPPONENT_MADISON 4 -#define CONTEST_OPPONENT_RAYMOND 5 -#define CONTEST_OPPONENT_GRANT 6 -#define CONTEST_OPPONENT_PAIGE 7 -#define CONTEST_OPPONENT_ALEC 8 -#define CONTEST_OPPONENT_SYDNEY 9 -#define CONTEST_OPPONENT_MORRIS 10 -#define CONTEST_OPPONENT_MARIAH 11 -#define CONTEST_OPPONENT_RUSSELL 12 -#define CONTEST_OPPONENT_MELANIE 13 -#define CONTEST_OPPONENT_CHANCE 14 -#define CONTEST_OPPONENT_AGATHA 15 -#define CONTEST_OPPONENT_BEAU 16 -#define CONTEST_OPPONENT_KAY 17 -#define CONTEST_OPPONENT_CALE 18 -#define CONTEST_OPPONENT_CAITLIN 19 -#define CONTEST_OPPONENT_COLBY 20 -#define CONTEST_OPPONENT_KYLIE 21 -#define CONTEST_OPPONENT_LIAM 22 -#define CONTEST_OPPONENT_MILO 23 -#define CONTEST_OPPONENT_KARINA 24 -#define CONTEST_OPPONENT_BOBBY 25 -#define CONTEST_OPPONENT_CLAIRE 26 -#define CONTEST_OPPONENT_WILLIE 27 -#define CONTEST_OPPONENT_CASSIDY 28 -#define CONTEST_OPPONENT_MORGAN 29 -#define CONTEST_OPPONENT_SUMMER 30 -#define CONTEST_OPPONENT_MILES 31 -#define CONTEST_OPPONENT_AUDREY 32 -#define CONTEST_OPPONENT_AVERY 33 -#define CONTEST_OPPONENT_ARIANA 34 -#define CONTEST_OPPONENT_ASHTON 35 -#define CONTEST_OPPONENT_SANDRA 36 -#define CONTEST_OPPONENT_CARSON 37 -#define CONTEST_OPPONENT_KATRINA 38 -#define CONTEST_OPPONENT_LUKE 39 -#define CONTEST_OPPONENT_RAUL 40 -#define CONTEST_OPPONENT_JADA 41 -#define CONTEST_OPPONENT_ZEEK 42 -#define CONTEST_OPPONENT_DIEGO 43 -#define CONTEST_OPPONENT_ALIYAH 44 -#define CONTEST_OPPONENT_NATALIA 45 -#define CONTEST_OPPONENT_DEVIN 46 -#define CONTEST_OPPONENT_TYLOR 47 -#define CONTEST_OPPONENT_RONNIE 48 -#define CONTEST_OPPONENT_CLAUDIA 49 -#define CONTEST_OPPONENT_ELIAS 50 -#define CONTEST_OPPONENT_JADE 51 -#define CONTEST_OPPONENT_FRANCIS 52 -#define CONTEST_OPPONENT_ALISHA 53 -#define CONTEST_OPPONENT_SAUL 54 -#define CONTEST_OPPONENT_FELICIA 55 -#define CONTEST_OPPONENT_EMILIO 56 -#define CONTEST_OPPONENT_KARLA 57 -#define CONTEST_OPPONENT_DARRYL 58 -#define CONTEST_OPPONENT_SELENA 59 -#define CONTEST_OPPONENT_NOEL 60 -#define CONTEST_OPPONENT_LACEY 61 -#define CONTEST_OPPONENT_CORBIN 62 -#define CONTEST_OPPONENT_GRACIE 63 -#define CONTEST_OPPONENT_COLTIN 64 -#define CONTEST_OPPONENT_ELLIE 65 -#define CONTEST_OPPONENT_MARCUS 66 -#define CONTEST_OPPONENT_KIARA 67 -#define CONTEST_OPPONENT_BRYCE 68 -#define CONTEST_OPPONENT_JAMIE 69 -#define CONTEST_OPPONENT_JORGE 70 -#define CONTEST_OPPONENT_DEVON 71 -#define CONTEST_OPPONENT_JUSTINA 72 -#define CONTEST_OPPONENT_RALPH 73 -#define CONTEST_OPPONENT_ROSA 74 -#define CONTEST_OPPONENT_KEATON 75 -#define CONTEST_OPPONENT_MAYRA 76 -#define CONTEST_OPPONENT_LAMAR 77 -#define CONTEST_OPPONENT_AUBREY 78 -#define CONTEST_OPPONENT_NIGEL 79 -#define CONTEST_OPPONENT_CAMILLE 80 -#define CONTEST_OPPONENT_DEON 81 -#define CONTEST_OPPONENT_JANELLE 82 -#define CONTEST_OPPONENT_HEATH 83 -#define CONTEST_OPPONENT_SASHA 84 -#define CONTEST_OPPONENT_FRANKIE 85 -#define CONTEST_OPPONENT_HELEN 86 -#define CONTEST_OPPONENT_CAMILE 87 -#define CONTEST_OPPONENT_MARTIN 88 -#define CONTEST_OPPONENT_SERGIO 89 -#define CONTEST_OPPONENT_KAILEY 90 -#define CONTEST_OPPONENT_PERLA 91 -#define CONTEST_OPPONENT_CLARA 92 -#define CONTEST_OPPONENT_JAKOB 93 -#define CONTEST_OPPONENT_TREY 94 -#define CONTEST_OPPONENT_LANE 95 +enum { + CONTEST_OPPONENT_JIMMY, + CONTEST_OPPONENT_EDITH, + CONTEST_OPPONENT_EVAN, + CONTEST_OPPONENT_KELSEY, + CONTEST_OPPONENT_MADISON, + CONTEST_OPPONENT_RAYMOND, + CONTEST_OPPONENT_GRANT, + CONTEST_OPPONENT_PAIGE, + CONTEST_OPPONENT_ALEC, + CONTEST_OPPONENT_SYDNEY, + CONTEST_OPPONENT_MORRIS, + CONTEST_OPPONENT_MARIAH, + CONTEST_OPPONENT_RUSSELL, + CONTEST_OPPONENT_MELANIE, + CONTEST_OPPONENT_CHANCE, + CONTEST_OPPONENT_AGATHA, + CONTEST_OPPONENT_BEAU, + CONTEST_OPPONENT_KAY, + CONTEST_OPPONENT_CALE, + CONTEST_OPPONENT_CAITLIN, + CONTEST_OPPONENT_COLBY, + CONTEST_OPPONENT_KYLIE, + CONTEST_OPPONENT_LIAM, + CONTEST_OPPONENT_MILO, + CONTEST_OPPONENT_KARINA, + CONTEST_OPPONENT_BOBBY, + CONTEST_OPPONENT_CLAIRE, + CONTEST_OPPONENT_WILLIE, + CONTEST_OPPONENT_CASSIDY, + CONTEST_OPPONENT_MORGAN, + CONTEST_OPPONENT_SUMMER, + CONTEST_OPPONENT_MILES, + CONTEST_OPPONENT_AUDREY, + CONTEST_OPPONENT_AVERY, + CONTEST_OPPONENT_ARIANA, + CONTEST_OPPONENT_ASHTON, + CONTEST_OPPONENT_SANDRA, + CONTEST_OPPONENT_CARSON, + CONTEST_OPPONENT_KATRINA, + CONTEST_OPPONENT_LUKE, + CONTEST_OPPONENT_RAUL, + CONTEST_OPPONENT_JADA, + CONTEST_OPPONENT_ZEEK, + CONTEST_OPPONENT_DIEGO, + CONTEST_OPPONENT_ALIYAH, + CONTEST_OPPONENT_NATALIA, + CONTEST_OPPONENT_DEVIN, + CONTEST_OPPONENT_TYLOR, + CONTEST_OPPONENT_RONNIE, + CONTEST_OPPONENT_CLAUDIA, + CONTEST_OPPONENT_ELIAS, + CONTEST_OPPONENT_JADE, + CONTEST_OPPONENT_FRANCIS, + CONTEST_OPPONENT_ALISHA, + CONTEST_OPPONENT_SAUL, + CONTEST_OPPONENT_FELICIA, + CONTEST_OPPONENT_EMILIO, + CONTEST_OPPONENT_KARLA, + CONTEST_OPPONENT_DARRYL, + CONTEST_OPPONENT_SELENA, + CONTEST_OPPONENT_NOEL, + CONTEST_OPPONENT_LACEY, + CONTEST_OPPONENT_CORBIN, + CONTEST_OPPONENT_GRACIE, + CONTEST_OPPONENT_COLTIN, + CONTEST_OPPONENT_ELLIE, + CONTEST_OPPONENT_MARCUS, + CONTEST_OPPONENT_KIARA, + CONTEST_OPPONENT_BRYCE, + CONTEST_OPPONENT_JAMIE, + CONTEST_OPPONENT_JORGE, + CONTEST_OPPONENT_DEVON, + CONTEST_OPPONENT_JUSTINA, + CONTEST_OPPONENT_RALPH, + CONTEST_OPPONENT_ROSA, + CONTEST_OPPONENT_KEATON, + CONTEST_OPPONENT_MAYRA, + CONTEST_OPPONENT_LAMAR, + CONTEST_OPPONENT_AUBREY, + CONTEST_OPPONENT_NIGEL, + CONTEST_OPPONENT_CAMILLE, + CONTEST_OPPONENT_DEON, + CONTEST_OPPONENT_JANELLE, + CONTEST_OPPONENT_HEATH, + CONTEST_OPPONENT_SASHA, + CONTEST_OPPONENT_FRANKIE, + CONTEST_OPPONENT_HELEN, + CONTEST_OPPONENT_CAMILE, + CONTEST_OPPONENT_MARTIN, + CONTEST_OPPONENT_SERGIO, + CONTEST_OPPONENT_KAILEY, + CONTEST_OPPONENT_PERLA, + CONTEST_OPPONENT_CLARA, + CONTEST_OPPONENT_JAKOB, + CONTEST_OPPONENT_TREY, + CONTEST_OPPONENT_LANE +}; // 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. diff --git a/src/data/easy_chat/easy_chat_group_actions.h b/src/data/easy_chat/easy_chat_group_actions.h index 06a8e7303052..6ad297efcfce 100755 --- a/src/data/easy_chat/easy_chat_group_actions.h +++ b/src/data/easy_chat/easy_chat_group_actions.h @@ -78,391 +78,469 @@ const u8 gEasyChatWord_Faint[] = _("FAINT"); const u8 gEasyChatWord_Fainted[] = _("FAINTED"); const struct EasyChatWordInfo gEasyChatGroup_Actions[] = { + [EC_INDEX(EC_WORD_MEETS)] = { .text = gEasyChatWord_Meets, .alphabeticalOrder = 72, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CONCEDE)] = { .text = gEasyChatWord_Concede, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GIVE)] = { .text = gEasyChatWord_Give, .alphabeticalOrder = 48, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GIVES)] = { .text = gEasyChatWord_Gives, .alphabeticalOrder = 75, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PLAYED)] = { .text = gEasyChatWord_Played, .alphabeticalOrder = 39, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PLAYS)] = { .text = gEasyChatWord_Plays, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COLLECT)] = { .text = gEasyChatWord_Collect, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WALKING)] = { .text = gEasyChatWord_Walking, .alphabeticalOrder = 46, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WALKS)] = { .text = gEasyChatWord_Walks, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SAYS)] = { .text = gEasyChatWord_Says, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WENT)] = { .text = gEasyChatWord_Went, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SAID)] = { .text = gEasyChatWord_Said, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WAKE_UP)] = { .text = gEasyChatWord_WakeUp, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WAKES_UP)] = { .text = gEasyChatWord_WakesUp, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ANGERS)] = { .text = gEasyChatWord_Angers, .alphabeticalOrder = 45, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TEACH)] = { .text = gEasyChatWord_Teach, .alphabeticalOrder = 47, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TEACHES)] = { .text = gEasyChatWord_Teaches, .alphabeticalOrder = 54, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PLEASE)] = { .text = gEasyChatWord_Please, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LEARN)] = { .text = gEasyChatWord_Learn, .alphabeticalOrder = 76, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CHANGE)] = { .text = gEasyChatWord_Change, .alphabeticalOrder = 77, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STORY)] = { .text = gEasyChatWord_Story, .alphabeticalOrder = 73, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRUST)] = { .text = gEasyChatWord_Trust, .alphabeticalOrder = 74, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LAVISH)] = { .text = gEasyChatWord_Lavish, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LISTENS)] = { .text = gEasyChatWord_Listens, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HEARING)] = { .text = gEasyChatWord_Hearing, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRAINS)] = { .text = gEasyChatWord_Trains, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CHOOSE)] = { .text = gEasyChatWord_Choose, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COME)] = { .text = gEasyChatWord_Come, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CAME)] = { .text = gEasyChatWord_Came, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SEARCH)] = { .text = gEasyChatWord_Search, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MAKE)] = { .text = gEasyChatWord_Make, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CAUSE)] = { .text = gEasyChatWord_Cause, .alphabeticalOrder = 67, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_KNOW)] = { .text = gEasyChatWord_Know, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_KNOWS)] = { .text = gEasyChatWord_Knows, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_REFUSE)] = { .text = gEasyChatWord_Refuse, .alphabeticalOrder = 65, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STORES)] = { .text = gEasyChatWord_Stores, .alphabeticalOrder = 70, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BRAG)] = { .text = gEasyChatWord_Brag, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_IGNORANT)] = { .text = gEasyChatWord_Ignorant, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THINKS)] = { .text = gEasyChatWord_Thinks, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BELIEVE)] = { .text = gEasyChatWord_Believe, .alphabeticalOrder = 64, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SLIDE)] = { .text = gEasyChatWord_Slide, .alphabeticalOrder = 63, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EATS)] = { .text = gEasyChatWord_Eats, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_USE)] = { .text = gEasyChatWord_Use, .alphabeticalOrder = 53, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_USES)] = { .text = gEasyChatWord_Uses, .alphabeticalOrder = 56, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_USING)] = { .text = gEasyChatWord_Using, .alphabeticalOrder = 55, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COULDN_T)] = { .text = gEasyChatWord_Couldnt, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CAPABLE)] = { .text = gEasyChatWord_Capable, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DISAPPEAR)] = { .text = gEasyChatWord_Disappear, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_APPEAR)] = { .text = gEasyChatWord_Appear, .alphabeticalOrder = 69, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THROW)] = { .text = gEasyChatWord_Throw, .alphabeticalOrder = 68, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WORRY)] = { .text = gEasyChatWord_Worry, .alphabeticalOrder = 66, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SLEPT)] = { .text = gEasyChatWord_Slept, .alphabeticalOrder = 61, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SLEEP)] = { .text = gEasyChatWord_Sleep, .alphabeticalOrder = 52, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RELEASE)] = { .text = gEasyChatWord_Release, .alphabeticalOrder = 51, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DRINKS)] = { .text = gEasyChatWord_Drinks, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RUNS)] = { .text = gEasyChatWord_Runs, .alphabeticalOrder = 62, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RUN)] = { .text = gEasyChatWord_Run, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WORKS)] = { .text = gEasyChatWord_Works, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WORKING)] = { .text = gEasyChatWord_Working, .alphabeticalOrder = 71, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TALKING)] = { .text = gEasyChatWord_Talking, .alphabeticalOrder = 60, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TALK)] = { .text = gEasyChatWord_Talk, .alphabeticalOrder = 59, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SINK)] = { .text = gEasyChatWord_Sink, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SMACK)] = { .text = gEasyChatWord_Smack, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PRETEND)] = { .text = gEasyChatWord_Pretend, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PRAISE)] = { .text = gEasyChatWord_Praise, .alphabeticalOrder = 49, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OVERDO)] = { .text = gEasyChatWord_Overdo, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHOW)] = { .text = gEasyChatWord_Show, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOOKS)] = { .text = gEasyChatWord_Looks, .alphabeticalOrder = 42, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SEES)] = { .text = gEasyChatWord_Sees, .alphabeticalOrder = 43, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SEEK)] = { .text = gEasyChatWord_Seek, .alphabeticalOrder = 44, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OWN)] = { .text = gEasyChatWord_Own, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TAKE)] = { .text = gEasyChatWord_Take, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ALLOW)] = { .text = gEasyChatWord_Allow, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FORGET)] = { .text = gEasyChatWord_Forget, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FORGETS)] = { .text = gEasyChatWord_Forgets, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_APPEARS)] = { .text = gEasyChatWord_Appears, .alphabeticalOrder = 58, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FAINT)] = { .text = gEasyChatWord_Faint, .alphabeticalOrder = 57, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FAINTED)] = { .text = gEasyChatWord_Fainted, .alphabeticalOrder = 50, diff --git a/src/data/easy_chat/easy_chat_group_adjectives.h b/src/data/easy_chat/easy_chat_group_adjectives.h index 1c7474118025..619dff621341 100755 --- a/src/data/easy_chat/easy_chat_group_adjectives.h +++ b/src/data/easy_chat/easy_chat_group_adjectives.h @@ -36,181 +36,217 @@ const u8 gEasyChatWord_Happily[] = _("HAPPILY"); const u8 gEasyChatWord_Anticipation[] = _("ANTICIPATION"); const struct EasyChatWordInfo gEasyChatGroup_Adjectives[] = { + [EC_INDEX(EC_WORD_WANDERING)] = { .text = gEasyChatWord_Wandering, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RICKETY)] = { .text = gEasyChatWord_Rickety, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ROCK_SOLID)] = { .text = gEasyChatWord_RockSolid, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HUNGRY)] = { .text = gEasyChatWord_Hungry, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TIGHT)] = { .text = gEasyChatWord_Tight, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TICKLISH)] = { .text = gEasyChatWord_Ticklish, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TWIRLING)] = { .text = gEasyChatWord_Twirling, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SPIRALING)] = { .text = gEasyChatWord_Spiraling, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THIRSTY)] = { .text = gEasyChatWord_Thirsty, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOLLING)] = { .text = gEasyChatWord_Lolling, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SILKY)] = { .text = gEasyChatWord_Silky, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SADLY)] = { .text = gEasyChatWord_Sadly, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HOPELESS)] = { .text = gEasyChatWord_Hopeless, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_USELESS)] = { .text = gEasyChatWord_Useless, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DROOLING)] = { .text = gEasyChatWord_Drooling, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EXCITING)] = { .text = gEasyChatWord_Exciting, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THICK)] = { .text = gEasyChatWord_Thick, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SMOOTH)] = { .text = gEasyChatWord_Smooth, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SLIMY)] = { .text = gEasyChatWord_Slimy, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THIN)] = { .text = gEasyChatWord_Thin, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BREAK)] = { .text = gEasyChatWord_Break, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_VORACIOUS)] = { .text = gEasyChatWord_Voracious, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SCATTER)] = { .text = gEasyChatWord_Scatter, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AWESOME)] = { .text = gEasyChatWord_Awesome, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WIMPY)] = { .text = gEasyChatWord_Wimpy, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WOBBLY)] = { .text = gEasyChatWord_Wobbly, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHAKY)] = { .text = gEasyChatWord_Shaky, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RIPPED)] = { .text = gEasyChatWord_Ripped, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHREDDED)] = { .text = gEasyChatWord_Shredded, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_INCREASING)] = { .text = gEasyChatWord_Increasing, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YET)] = { .text = gEasyChatWord_Yet, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DESTROYED)] = { .text = gEasyChatWord_Destroyed, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FIERY)] = { .text = gEasyChatWord_Fiery, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOVEY_DOVEY)] = { .text = gEasyChatWord_LoveyDovey, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HAPPILY)] = { .text = gEasyChatWord_Happily, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ANTICIPATION)] = { .text = gEasyChatWord_Anticipation, .alphabeticalOrder = 30, diff --git a/src/data/easy_chat/easy_chat_group_battle.h b/src/data/easy_chat/easy_chat_group_battle.h index 0f97f50c932f..2a2420b2f138 100755 --- a/src/data/easy_chat/easy_chat_group_battle.h +++ b/src/data/easy_chat/easy_chat_group_battle.h @@ -63,316 +63,379 @@ const u8 gEasyChatWord_Rule[] = _("RULE"); const u8 gEasyChatWord_Move[] = _("MOVE"); const struct EasyChatWordInfo gEasyChatGroup_Battle[] = { + [EC_INDEX(EC_WORD_MATCH_UP)] = { .text = gEasyChatWord_MatchUp, .alphabeticalOrder = 53, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GO)] = { .text = gEasyChatWord_Go, .alphabeticalOrder = 39, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NO_1)] = { .text = gEasyChatWord_No1, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DECIDE)] = { .text = gEasyChatWord_Decide, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LET_ME_WIN)] = { .text = gEasyChatWord_LetMeWin, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WINS)] = { .text = gEasyChatWord_Wins, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WIN)] = { .text = gEasyChatWord_Win, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WON)] = { .text = gEasyChatWord_Won, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_IF_I_WIN)] = { .text = gEasyChatWord_IfIWin, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHEN_I_WIN)] = { .text = gEasyChatWord_WhenIWin, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CAN_T_WIN)] = { .text = gEasyChatWord_CantWin, .alphabeticalOrder = 56, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CAN_WIN)] = { .text = gEasyChatWord_CanWin, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NO_MATCH)] = { .text = gEasyChatWord_NoMatch, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SPIRIT)] = { .text = gEasyChatWord_Spirit, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DECIDED)] = { .text = gEasyChatWord_Decided, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRUMP_CARD)] = { .text = gEasyChatWord_TrumpCard, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TAKE_THAT)] = { .text = gEasyChatWord_TakeThat, .alphabeticalOrder = 45, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COME_ON)] = { .text = gEasyChatWord_ComeOn, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ATTACK)] = { .text = gEasyChatWord_Attack, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SURRENDER)] = { .text = gEasyChatWord_Surrender, .alphabeticalOrder = 50, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GUTSY)] = { .text = gEasyChatWord_Gutsy, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TALENT)] = { .text = gEasyChatWord_Talent, .alphabeticalOrder = 47, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STRATEGY)] = { .text = gEasyChatWord_Strategy, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SMITE)] = { .text = gEasyChatWord_Smite, .alphabeticalOrder = 54, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MATCH)] = { .text = gEasyChatWord_Match, .alphabeticalOrder = 60, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_VICTORY)] = { .text = gEasyChatWord_Victory, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OFFENSIVE)] = { .text = gEasyChatWord_Offensive, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SENSE)] = { .text = gEasyChatWord_Sense, .alphabeticalOrder = 49, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_VERSUS)] = { .text = gEasyChatWord_Versus, .alphabeticalOrder = 46, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FIGHTS)] = { .text = gEasyChatWord_Fights, .alphabeticalOrder = 48, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_POWER)] = { .text = gEasyChatWord_Power, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CHALLENGE)] = { .text = gEasyChatWord_Challenge, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STRONG)] = { .text = gEasyChatWord_Strong, .alphabeticalOrder = 62, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOO_STRONG)] = { .text = gEasyChatWord_TooStrong, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GO_EASY)] = { .text = gEasyChatWord_GoEasy, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FOE)] = { .text = gEasyChatWord_Foe, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GENIUS)] = { .text = gEasyChatWord_Genius, .alphabeticalOrder = 51, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LEGEND)] = { .text = gEasyChatWord_Legend, .alphabeticalOrder = 43, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ESCAPE)] = { .text = gEasyChatWord_Escape, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AIM)] = { .text = gEasyChatWord_Aim, .alphabeticalOrder = 59, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BATTLE)] = { .text = gEasyChatWord_Battle, .alphabeticalOrder = 55, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FIGHT)] = { .text = gEasyChatWord_Fight, .alphabeticalOrder = 52, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RESUSCITATE)] = { .text = gEasyChatWord_Resuscitate, .alphabeticalOrder = 42, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_POINTS)] = { .text = gEasyChatWord_Points, .alphabeticalOrder = 61, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SERIOUS)] = { .text = gEasyChatWord_Serious, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GIVE_UP)] = { .text = gEasyChatWord_GiveUp, .alphabeticalOrder = 44, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOSS)] = { .text = gEasyChatWord_Loss, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_IF_I_LOSE)] = { .text = gEasyChatWord_IfILose, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOST)] = { .text = gEasyChatWord_Lost, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOSE)] = { .text = gEasyChatWord_Lose, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GUARD)] = { .text = gEasyChatWord_Guard, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PARTNER)] = { .text = gEasyChatWord_Partner, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_REJECT)] = { .text = gEasyChatWord_Reject, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ACCEPT)] = { .text = gEasyChatWord_Accept, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_INVINCIBLE)] = { .text = gEasyChatWord_Invincible, .alphabeticalOrder = 58, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RECEIVED)] = { .text = gEasyChatWord_Received, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EASY)] = { .text = gEasyChatWord_Easy, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WEAK)] = { .text = gEasyChatWord_Weak, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOO_WEAK)] = { .text = gEasyChatWord_TooWeak, .alphabeticalOrder = 57, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PUSHOVER)] = { .text = gEasyChatWord_Pushover, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LEADER)] = { .text = gEasyChatWord_Leader, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RULE)] = { .text = gEasyChatWord_Rule, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MOVE)] = { .text = gEasyChatWord_Move, .alphabeticalOrder = 7, diff --git a/src/data/easy_chat/easy_chat_group_conditions.h b/src/data/easy_chat/easy_chat_group_conditions.h index a8d8ee874074..d0636f16285c 100755 --- a/src/data/easy_chat/easy_chat_group_conditions.h +++ b/src/data/easy_chat/easy_chat_group_conditions.h @@ -69,346 +69,415 @@ const u8 gEasyChatWord_Seems[] = _("SEEMS"); const u8 gEasyChatWord_Badly[] = _("BADLY"); const struct EasyChatWordInfo gEasyChatGroup_Conditions[] = { + [EC_INDEX(EC_WORD_HOT)] = { .text = gEasyChatWord_Hot, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EXISTS)] = { .text = gEasyChatWord_Exists, .alphabeticalOrder = 55, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EXCESS)] = { .text = gEasyChatWord_Excess, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_APPROVED)] = { .text = gEasyChatWord_Approved, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HAS)] = { .text = gEasyChatWord_Has, .alphabeticalOrder = 54, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GOOD)] = { .text = gEasyChatWord_Good, .alphabeticalOrder = 68, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LESS)] = { .text = gEasyChatWord_Less, .alphabeticalOrder = 50, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MOMENTUM)] = { .text = gEasyChatWord_Momentum, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GOING)] = { .text = gEasyChatWord_Going, .alphabeticalOrder = 60, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WEIRD)] = { .text = gEasyChatWord_Weird, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BUSY)] = { .text = gEasyChatWord_Busy, .alphabeticalOrder = 56, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOGETHER)] = { .text = gEasyChatWord_Together, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FULL)] = { .text = gEasyChatWord_Full, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ABSENT)] = { .text = gEasyChatWord_Absent, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BEING)] = { .text = gEasyChatWord_Being, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NEED)] = { .text = gEasyChatWord_Need, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TASTY)] = { .text = gEasyChatWord_Tasty, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SKILLED)] = { .text = gEasyChatWord_Skilled, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NOISY)] = { .text = gEasyChatWord_Noisy, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BIG)] = { .text = gEasyChatWord_Big, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LATE)] = { .text = gEasyChatWord_Late, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CLOSE)] = { .text = gEasyChatWord_Close, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DOCILE)] = { .text = gEasyChatWord_Docile, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AMUSING)] = { .text = gEasyChatWord_Amusing, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ENTERTAINING)] = { .text = gEasyChatWord_Entertaining, .alphabeticalOrder = 52, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PERFECTION)] = { .text = gEasyChatWord_Perfection, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PRETTY)] = { .text = gEasyChatWord_Pretty, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HEALTHY)] = { .text = gEasyChatWord_Healthy, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EXCELLENT)] = { .text = gEasyChatWord_Excellent, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UPSIDE_DOWN)] = { .text = gEasyChatWord_UpsideDown, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COLD)] = { .text = gEasyChatWord_Cold, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_REFRESHING)] = { .text = gEasyChatWord_Refreshing, .alphabeticalOrder = 39, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UNAVOIDABLE)] = { .text = gEasyChatWord_Unavoidable, .alphabeticalOrder = 63, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MUCH)] = { .text = gEasyChatWord_Much, .alphabeticalOrder = 59, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OVERWHELMING)] = { .text = gEasyChatWord_Overwhelming, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FABULOUS)] = { .text = gEasyChatWord_Fabulous, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ELSE)] = { .text = gEasyChatWord_Else, .alphabeticalOrder = 61, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EXPENSIVE)] = { .text = gEasyChatWord_Expensive, .alphabeticalOrder = 53, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CORRECT)] = { .text = gEasyChatWord_Correct, .alphabeticalOrder = 51, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_IMPOSSIBLE)] = { .text = gEasyChatWord_Impossible, .alphabeticalOrder = 62, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SMALL)] = { .text = gEasyChatWord_Small, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DIFFERENT)] = { .text = gEasyChatWord_Different, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TIRED)] = { .text = gEasyChatWord_Tired, .alphabeticalOrder = 58, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SKILL)] = { .text = gEasyChatWord_Skill, .alphabeticalOrder = 49, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOP)] = { .text = gEasyChatWord_Top, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NON_STOP)] = { .text = gEasyChatWord_NonStop, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PREPOSTEROUS)] = { .text = gEasyChatWord_Preposterous, .alphabeticalOrder = 45, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NONE)] = { .text = gEasyChatWord_None, .alphabeticalOrder = 47, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NOTHING)] = { .text = gEasyChatWord_Nothing, .alphabeticalOrder = 48, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NATURAL)] = { .text = gEasyChatWord_Natural, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BECOMES)] = { .text = gEasyChatWord_Becomes, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LUKEWARM)] = { .text = gEasyChatWord_Lukewarm, .alphabeticalOrder = 46, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FAST)] = { .text = gEasyChatWord_Fast, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOW)] = { .text = gEasyChatWord_Low, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AWFUL)] = { .text = gEasyChatWord_Awful, .alphabeticalOrder = 57, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ALONE)] = { .text = gEasyChatWord_Alone, .alphabeticalOrder = 67, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BORED)] = { .text = gEasyChatWord_Bored, .alphabeticalOrder = 66, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SECRET)] = { .text = gEasyChatWord_Secret, .alphabeticalOrder = 43, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MYSTERY)] = { .text = gEasyChatWord_Mystery, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LACKS)] = { .text = gEasyChatWord_Lacks, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BEST)] = { .text = gEasyChatWord_Best, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOUSY)] = { .text = gEasyChatWord_Lousy, .alphabeticalOrder = 42, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MISTAKE)] = { .text = gEasyChatWord_Mistake, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_KIND)] = { .text = gEasyChatWord_Kind, .alphabeticalOrder = 44, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WELL)] = { .text = gEasyChatWord_Well, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WEAKENED)] = { .text = gEasyChatWord_Weakened, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SIMPLE)] = { .text = gEasyChatWord_Simple, .alphabeticalOrder = 65, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SEEMS)] = { .text = gEasyChatWord_Seems, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BADLY)] = { .text = gEasyChatWord_Badly, .alphabeticalOrder = 64, diff --git a/src/data/easy_chat/easy_chat_group_endings.h b/src/data/easy_chat/easy_chat_group_endings.h index afaea48cb19b..ffa5108a9142 100755 --- a/src/data/easy_chat/easy_chat_group_endings.h +++ b/src/data/easy_chat/easy_chat_group_endings.h @@ -69,346 +69,415 @@ const u8 gEasyChatWord_Once[] = _("ONCE"); const u8 gEasyChatWord_Anywhere[] = _("ANYWHERE"); const struct EasyChatWordInfo gEasyChatGroup_Endings[] = { + [EC_INDEX(EC_WORD_WILL)] = { .text = gEasyChatWord_Will, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WILL_BE_HERE)] = { .text = gEasyChatWord_WillBeHere, .alphabeticalOrder = 39, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OR)] = { .text = gEasyChatWord_Or, .alphabeticalOrder = 63, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TIMES)] = { .text = gEasyChatWord_Times, .alphabeticalOrder = 42, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WONDER)] = { .text = gEasyChatWord_Wonder, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_IS_IT_QUES)] = { .text = gEasyChatWord_IsItQues, .alphabeticalOrder = 68, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BE)] = { .text = gEasyChatWord_Be, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GIMME)] = { .text = gEasyChatWord_Gimme, .alphabeticalOrder = 46, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COULD)] = { .text = gEasyChatWord_Could, .alphabeticalOrder = 54, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LIKELY_TO)] = { .text = gEasyChatWord_LikelyTo, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WOULD)] = { .text = gEasyChatWord_Would, .alphabeticalOrder = 64, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_IS)] = { .text = gEasyChatWord_Is, .alphabeticalOrder = 53, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ISN_T_IT_QUES)] = { .text = gEasyChatWord_IsntItQues, .alphabeticalOrder = 49, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LET_S)] = { .text = gEasyChatWord_Lets, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OTHER)] = { .text = gEasyChatWord_Other, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ARE)] = { .text = gEasyChatWord_Are, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WAS)] = { .text = gEasyChatWord_Was, .alphabeticalOrder = 59, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WERE)] = { .text = gEasyChatWord_Were, .alphabeticalOrder = 60, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THOSE)] = { .text = gEasyChatWord_Those, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ISN_T)] = { .text = gEasyChatWord_Isnt, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WON_T)] = { .text = gEasyChatWord_Wont, .alphabeticalOrder = 61, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CAN_T)] = { .text = gEasyChatWord_Cant, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CAN)] = { .text = gEasyChatWord_Can, .alphabeticalOrder = 50, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DON_T)] = { .text = gEasyChatWord_Dont, .alphabeticalOrder = 43, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DO)] = { .text = gEasyChatWord_Do, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DOES)] = { .text = gEasyChatWord_Does, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHOM)] = { .text = gEasyChatWord_Whom, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHICH)] = { .text = gEasyChatWord_Which, .alphabeticalOrder = 55, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WASN_T)] = { .text = gEasyChatWord_Wasnt, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WEREN_T)] = { .text = gEasyChatWord_Werent, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HAVE)] = { .text = gEasyChatWord_Have, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HAVEN_T)] = { .text = gEasyChatWord_Havent, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_A)] = { .text = gEasyChatWord_A, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AN)] = { .text = gEasyChatWord_An, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NOT)] = { .text = gEasyChatWord_Not, .alphabeticalOrder = 58, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THERE)] = { .text = gEasyChatWord_There, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OK_QUES)] = { .text = gEasyChatWord_OkQues, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SO)] = { .text = gEasyChatWord_So, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MAYBE)] = { .text = gEasyChatWord_Maybe, .alphabeticalOrder = 52, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ABOUT)] = { .text = gEasyChatWord_About, .alphabeticalOrder = 45, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OVER)] = { .text = gEasyChatWord_Over, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_IT)] = { .text = gEasyChatWord_It, .alphabeticalOrder = 44, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ALL)] = { .text = gEasyChatWord_All, .alphabeticalOrder = 67, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FOR)] = { .text = gEasyChatWord_For, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ON)] = { .text = gEasyChatWord_On, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OFF)] = { .text = gEasyChatWord_Off, .alphabeticalOrder = 56, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AS)] = { .text = gEasyChatWord_As, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TO)] = { .text = gEasyChatWord_To, .alphabeticalOrder = 51, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WITH)] = { .text = gEasyChatWord_With, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BETTER)] = { .text = gEasyChatWord_Better, .alphabeticalOrder = 66, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EVER)] = { .text = gEasyChatWord_Ever, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SINCE)] = { .text = gEasyChatWord_Since, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OF)] = { .text = gEasyChatWord_Of, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BELONGS_TO)] = { .text = gEasyChatWord_BelongsTo, .alphabeticalOrder = 47, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AT)] = { .text = gEasyChatWord_At, .alphabeticalOrder = 57, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_IN)] = { .text = gEasyChatWord_In, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OUT)] = { .text = gEasyChatWord_Out, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOO)] = { .text = gEasyChatWord_Too, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LIKE)] = { .text = gEasyChatWord_Like, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DID)] = { .text = gEasyChatWord_Did, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DIDN_T)] = { .text = gEasyChatWord_Didnt, .alphabeticalOrder = 65, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DOESN_T)] = { .text = gEasyChatWord_Doesnt, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WITHOUT)] = { .text = gEasyChatWord_Without, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AFTER)] = { .text = gEasyChatWord_After, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BEFORE)] = { .text = gEasyChatWord_Before, .alphabeticalOrder = 48, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHILE)] = { .text = gEasyChatWord_While, .alphabeticalOrder = 62, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THAN)] = { .text = gEasyChatWord_Than, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ONCE)] = { .text = gEasyChatWord_Once, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ANYWHERE)] = { .text = gEasyChatWord_Anywhere, .alphabeticalOrder = 10, diff --git a/src/data/easy_chat/easy_chat_group_events.h b/src/data/easy_chat/easy_chat_group_events.h index 8d9cf7e24c2f..0fbbcc4a7831 100755 --- a/src/data/easy_chat/easy_chat_group_events.h +++ b/src/data/easy_chat/easy_chat_group_events.h @@ -29,146 +29,175 @@ const u8 gEasyChatWord_Wireless[] = _("WIRELESS"); const u8 gEasyChatWord_Frontier[] = _("FRONTIER"); const struct EasyChatWordInfo gEasyChatGroup_Events[] = { + [EC_INDEX(EC_WORD_APPEAL)] = { .text = gEasyChatWord_Appeal, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EVENTS)] = { .text = gEasyChatWord_Events, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STAY_AT_HOME)] = { .text = gEasyChatWord_StayAtHome, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BERRY)] = { .text = gEasyChatWord_Berry, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CONTEST)] = { .text = gEasyChatWord_Contest, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MC)] = { .text = gEasyChatWord_Mc, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_JUDGE)] = { .text = gEasyChatWord_Judge, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SUPER)] = { .text = gEasyChatWord_Super, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STAGE)] = { .text = gEasyChatWord_Stage, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HALL_OF_FAME)] = { .text = gEasyChatWord_HallOfFame, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EVOLUTION)] = { .text = gEasyChatWord_Evolution, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HYPER)] = { .text = gEasyChatWord_Hyper, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BATTLE_TOWER)] = { .text = gEasyChatWord_BattleTower, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LEADERS)] = { .text = gEasyChatWord_Leaders, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BATTLE_ROOM)] = { .text = gEasyChatWord_BattleRoom, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HIDDEN)] = { .text = gEasyChatWord_Hidden, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SECRET_BASE)] = { .text = gEasyChatWord_SecretBase, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BLEND)] = { .text = gEasyChatWord_Blend, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_POKEBLOCK)] = { .text = gEasyChatWord_POKEBLOCK, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MASTER)] = { .text = gEasyChatWord_Master, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RANK)] = { .text = gEasyChatWord_Rank, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RIBBON)] = { .text = gEasyChatWord_Ribbon, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CRUSH)] = { .text = gEasyChatWord_Crush, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DIRECT)] = { .text = gEasyChatWord_Direct, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOWER)] = { .text = gEasyChatWord_Tower, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UNION)] = { .text = gEasyChatWord_Union, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ROOM)] = { .text = gEasyChatWord_Room, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WIRELESS)] = { .text = gEasyChatWord_Wireless, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FRONTIER)] = { .text = gEasyChatWord_Frontier, .alphabeticalOrder = 27, diff --git a/src/data/easy_chat/easy_chat_group_feelings.h b/src/data/easy_chat/easy_chat_group_feelings.h index 2dda71808139..55fe9d00c531 100755 --- a/src/data/easy_chat/easy_chat_group_feelings.h +++ b/src/data/easy_chat/easy_chat_group_feelings.h @@ -69,346 +69,415 @@ const u8 gEasyChatWord_Understand[] = _("UNDERSTAND"); const u8 gEasyChatWord_Understands[] = _("UNDERSTANDS"); const struct EasyChatWordInfo gEasyChatGroup_Feelings[] = { + [EC_INDEX(EC_WORD_MEET)] = { .text = gEasyChatWord_Meet, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PLAY)] = { .text = gEasyChatWord_Play, .alphabeticalOrder = 39, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HURRIED)] = { .text = gEasyChatWord_Hurried, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GOES)] = { .text = gEasyChatWord_Goes, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GIDDY)] = { .text = gEasyChatWord_Giddy, .alphabeticalOrder = 46, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HAPPY)] = { .text = gEasyChatWord_Happy, .alphabeticalOrder = 63, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HAPPINESS)] = { .text = gEasyChatWord_Happiness, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EXCITE)] = { .text = gEasyChatWord_Excite, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_IMPORTANT)] = { .text = gEasyChatWord_Important, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FUNNY)] = { .text = gEasyChatWord_Funny, .alphabeticalOrder = 61, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GOT)] = { .text = gEasyChatWord_Got, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GO_HOME)] = { .text = gEasyChatWord_GoHome, .alphabeticalOrder = 62, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DISAPPOINTED)] = { .text = gEasyChatWord_Disappointed, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DISAPPOINTS)] = { .text = gEasyChatWord_Disappoints, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SAD)] = { .text = gEasyChatWord_Sad, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRY)] = { .text = gEasyChatWord_Try, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRIES)] = { .text = gEasyChatWord_Tries, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HEARS)] = { .text = gEasyChatWord_Hears, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THINK)] = { .text = gEasyChatWord_Think, .alphabeticalOrder = 60, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HEAR)] = { .text = gEasyChatWord_Hear, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WANTS)] = { .text = gEasyChatWord_Wants, .alphabeticalOrder = 51, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MISHEARD)] = { .text = gEasyChatWord_Misheard, .alphabeticalOrder = 44, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DISLIKE)] = { .text = gEasyChatWord_Dislike, .alphabeticalOrder = 42, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ANGRY)] = { .text = gEasyChatWord_Angry, .alphabeticalOrder = 43, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ANGER)] = { .text = gEasyChatWord_Anger, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SCARY)] = { .text = gEasyChatWord_Scary, .alphabeticalOrder = 53, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LONESOME)] = { .text = gEasyChatWord_Lonesome, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DISAPPOINT)] = { .text = gEasyChatWord_Disappoint, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_JOY)] = { .text = gEasyChatWord_Joy, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GETS)] = { .text = gEasyChatWord_Gets, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NEVER)] = { .text = gEasyChatWord_Never, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DARN)] = { .text = gEasyChatWord_Darn, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DOWNCAST)] = { .text = gEasyChatWord_Downcast, .alphabeticalOrder = 64, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_INCREDIBLE)] = { .text = gEasyChatWord_Incredible, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LIKES)] = { .text = gEasyChatWord_Likes, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DISLIKES)] = { .text = gEasyChatWord_Dislikes, .alphabeticalOrder = 47, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BORING)] = { .text = gEasyChatWord_Boring, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CARE)] = { .text = gEasyChatWord_Care, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CARES)] = { .text = gEasyChatWord_Cares, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ALL_RIGHT)] = { .text = gEasyChatWord_AllRight, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ADORE)] = { .text = gEasyChatWord_Adore, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DISASTER)] = { .text = gEasyChatWord_Disaster, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ENJOY)] = { .text = gEasyChatWord_Enjoy, .alphabeticalOrder = 45, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ENJOYS)] = { .text = gEasyChatWord_Enjoys, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EAT)] = { .text = gEasyChatWord_Eat, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LACKING)] = { .text = gEasyChatWord_Lacking, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BAD)] = { .text = gEasyChatWord_Bad, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HARD)] = { .text = gEasyChatWord_Hard, .alphabeticalOrder = 59, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TERRIBLE)] = { .text = gEasyChatWord_Terrible, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHOULD)] = { .text = gEasyChatWord_Should, .alphabeticalOrder = 50, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NICE)] = { .text = gEasyChatWord_Nice, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DRINK)] = { .text = gEasyChatWord_Drink, .alphabeticalOrder = 66, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SURPRISE)] = { .text = gEasyChatWord_Surprise, .alphabeticalOrder = 58, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FEAR)] = { .text = gEasyChatWord_Fear, .alphabeticalOrder = 65, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WANT)] = { .text = gEasyChatWord_Want, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WAIT)] = { .text = gEasyChatWord_Wait, .alphabeticalOrder = 56, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SATISFIED)] = { .text = gEasyChatWord_Satisfied, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SEE)] = { .text = gEasyChatWord_See, .alphabeticalOrder = 57, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RARE)] = { .text = gEasyChatWord_Rare, .alphabeticalOrder = 49, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NEGATIVE)] = { .text = gEasyChatWord_Negative, .alphabeticalOrder = 52, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DONE)] = { .text = gEasyChatWord_Done, .alphabeticalOrder = 48, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DANGER)] = { .text = gEasyChatWord_Danger, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DEFEATED)] = { .text = gEasyChatWord_Defeated, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BEAT)] = { .text = gEasyChatWord_Beat, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GREAT)] = { .text = gEasyChatWord_Great, .alphabeticalOrder = 67, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ROMANTIC)] = { .text = gEasyChatWord_Romantic, .alphabeticalOrder = 68, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_QUESTION)] = { .text = gEasyChatWord_Question, .alphabeticalOrder = 55, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UNDERSTAND)] = { .text = gEasyChatWord_Understand, .alphabeticalOrder = 54, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UNDERSTANDS)] = { .text = gEasyChatWord_Understands, .alphabeticalOrder = 20, diff --git a/src/data/easy_chat/easy_chat_group_greetings.h b/src/data/easy_chat/easy_chat_group_greetings.h index 4df08bf7dc82..fb95f7939ddd 100755 --- a/src/data/easy_chat/easy_chat_group_greetings.h +++ b/src/data/easy_chat/easy_chat_group_greetings.h @@ -42,211 +42,253 @@ const u8 gEasyChatWord_ComeOver[] = _("COME OVER"); const u8 gEasyChatWord_CountOn[] = _("COUNT ON"); const struct EasyChatWordInfo gEasyChatGroup_Greetings[] = { + [EC_INDEX(EC_WORD_THANKS)] = { .text = gEasyChatWord_Thanks, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YES)] = { .text = gEasyChatWord_Yes, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HERE_GOES)] = { .text = gEasyChatWord_HereGoes, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HERE_I_COME)] = { .text = gEasyChatWord_HereICome, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HERE_IT_IS)] = { .text = gEasyChatWord_HereItIs, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YEAH)] = { .text = gEasyChatWord_Yeah, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WELCOME)] = { .text = gEasyChatWord_Welcome, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OI)] = { .text = gEasyChatWord_Oi, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HOW_DO)] = { .text = gEasyChatWord_HowDo, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CONGRATS)] = { .text = gEasyChatWord_Congrats, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GIVE_ME)] = { .text = gEasyChatWord_GiveMe, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SORRY)] = { .text = gEasyChatWord_Sorry, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_APOLOGIZE)] = { .text = gEasyChatWord_Apologize, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FORGIVE)] = { .text = gEasyChatWord_Forgive, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HEY_THERE)] = { .text = gEasyChatWord_HeyThere, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HELLO)] = { .text = gEasyChatWord_Hello, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GOOD_BYE)] = { .text = gEasyChatWord_GoodBye, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THANK_YOU)] = { .text = gEasyChatWord_ThankYou, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_I_VE_ARRIVED)] = { .text = gEasyChatWord_IveArrived, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PARDON)] = { .text = gEasyChatWord_Pardon, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EXCUSE)] = { .text = gEasyChatWord_Excuse, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SEE_YA)] = { .text = gEasyChatWord_SeeYa, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EXCUSE_ME)] = { .text = gEasyChatWord_ExcuseMe, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WELL_THEN)] = { .text = gEasyChatWord_WellThen, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GO_AHEAD)] = { .text = gEasyChatWord_GoAhead, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_APPRECIATE)] = { .text = gEasyChatWord_Appreciate, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HEY_QUES)] = { .text = gEasyChatWord_HeyQues, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHAT_S_UP_QUES)] = { .text = gEasyChatWord_WhatsUpQues, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HUH_QUES)] = { .text = gEasyChatWord_HuhQues, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NO)] = { .text = gEasyChatWord_No, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HI)] = { .text = gEasyChatWord_Hi, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YEAH_YEAH)] = { .text = gEasyChatWord_YeahYeah, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BYE_BYE)] = { .text = gEasyChatWord_ByeBye, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MEET_YOU)] = { .text = gEasyChatWord_MeetYou, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HEY)] = { .text = gEasyChatWord_Hey, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SMELL)] = { .text = gEasyChatWord_Smell, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LISTENING)] = { .text = gEasyChatWord_Listening, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HOO_HAH)] = { .text = gEasyChatWord_HooHah, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YAHOO)] = { .text = gEasyChatWord_Yahoo, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YO)] = { .text = gEasyChatWord_Yo, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COME_OVER)] = { .text = gEasyChatWord_ComeOver, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COUNT_ON)] = { .text = gEasyChatWord_CountOn, .alphabeticalOrder = 39, diff --git a/src/data/easy_chat/easy_chat_group_hobbies.h b/src/data/easy_chat/easy_chat_group_hobbies.h index fcd73d0174b8..dd507e21b9d8 100755 --- a/src/data/easy_chat/easy_chat_group_hobbies.h +++ b/src/data/easy_chat/easy_chat_group_hobbies.h @@ -54,271 +54,325 @@ const u8 gEasyChatWord_Vacation[] = _("VACATION"); const u8 gEasyChatWord_Look[] = _("LOOK"); const struct EasyChatWordInfo gEasyChatGroup_Hobbies[] = { + [EC_INDEX(EC_WORD_IDOL)] = { .text = gEasyChatWord_Idol, .alphabeticalOrder = 43, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ANIME)] = { .text = gEasyChatWord_Anime, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SONG)] = { .text = gEasyChatWord_Song, .alphabeticalOrder = 45, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MOVIE)] = { .text = gEasyChatWord_Movie, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SWEETS)] = { .text = gEasyChatWord_Sweets, .alphabeticalOrder = 44, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CHAT)] = { .text = gEasyChatWord_Chat, .alphabeticalOrder = 46, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CHILD_S_PLAY)] = { .text = gEasyChatWord_ChildsPlay, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOYS)] = { .text = gEasyChatWord_Toys, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MUSIC)] = { .text = gEasyChatWord_Music, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CARDS)] = { .text = gEasyChatWord_Cards, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHOPPING)] = { .text = gEasyChatWord_Shopping, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CAMERA)] = { .text = gEasyChatWord_Camera, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_VIEWING)] = { .text = gEasyChatWord_Viewing, .alphabeticalOrder = 48, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SPECTATOR)] = { .text = gEasyChatWord_Spectator, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GOURMET)] = { .text = gEasyChatWord_Gourmet, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GAME)] = { .text = gEasyChatWord_Game, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RPG)] = { .text = gEasyChatWord_Rpg, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COLLECTION)] = { .text = gEasyChatWord_Collection, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COMPLETE)] = { .text = gEasyChatWord_Complete, .alphabeticalOrder = 42, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MAGAZINE)] = { .text = gEasyChatWord_Magazine, .alphabeticalOrder = 47, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WALK)] = { .text = gEasyChatWord_Walk, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BIKE)] = { .text = gEasyChatWord_Bike, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HOBBY)] = { .text = gEasyChatWord_Hobby, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SPORTS)] = { .text = gEasyChatWord_Sports, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SOFTWARE)] = { .text = gEasyChatWord_Software, .alphabeticalOrder = 39, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SONGS)] = { .text = gEasyChatWord_Songs, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DIET)] = { .text = gEasyChatWord_Diet, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TREASURE)] = { .text = gEasyChatWord_Treasure, .alphabeticalOrder = 49, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRAVEL)] = { .text = gEasyChatWord_Travel, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DANCE)] = { .text = gEasyChatWord_Dance, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CHANNEL)] = { .text = gEasyChatWord_Channel, .alphabeticalOrder = 53, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MAKING)] = { .text = gEasyChatWord_Making, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FISHING)] = { .text = gEasyChatWord_Fishing, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DATE)] = { .text = gEasyChatWord_Date, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DESIGN)] = { .text = gEasyChatWord_Design, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOCOMOTIVE)] = { .text = gEasyChatWord_Locomotive, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PLUSH_DOLL)] = { .text = gEasyChatWord_PlushDoll, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PC)] = { .text = gEasyChatWord_Pc, .alphabeticalOrder = 50, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FLOWERS)] = { .text = gEasyChatWord_Flowers, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HERO)] = { .text = gEasyChatWord_Hero, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NAP)] = { .text = gEasyChatWord_Nap, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HEROINE)] = { .text = gEasyChatWord_Heroine, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FASHION)] = { .text = gEasyChatWord_Fashion, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ADVENTURE)] = { .text = gEasyChatWord_Adventure, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BOARD)] = { .text = gEasyChatWord_Board, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BALL)] = { .text = gEasyChatWord_Ball, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BOOK)] = { .text = gEasyChatWord_Book, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FESTIVAL)] = { .text = gEasyChatWord_Festival, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COMICS)] = { .text = gEasyChatWord_Comics, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HOLIDAY)] = { .text = gEasyChatWord_Holiday, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PLANS)] = { .text = gEasyChatWord_Plans, .alphabeticalOrder = 51, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRENDY)] = { .text = gEasyChatWord_Trendy, .alphabeticalOrder = 52, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_VACATION)] = { .text = gEasyChatWord_Vacation, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOOK)] = { .text = gEasyChatWord_Look, .alphabeticalOrder = 20, diff --git a/src/data/easy_chat/easy_chat_group_lifestyle.h b/src/data/easy_chat/easy_chat_group_lifestyle.h index 9ed60025d249..5819d0f2e4b0 100755 --- a/src/data/easy_chat/easy_chat_group_lifestyle.h +++ b/src/data/easy_chat/easy_chat_group_lifestyle.h @@ -45,226 +45,271 @@ const u8 gEasyChatWord_Rental[] = _("RENTAL"); const u8 gEasyChatWord_World[] = _("WORLD"); const struct EasyChatWordInfo gEasyChatGroup_Lifestyle[] = { + [EC_INDEX(EC_WORD_CHORES)] = { .text = gEasyChatWord_Chores, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HOME)] = { .text = gEasyChatWord_Home, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MONEY)] = { .text = gEasyChatWord_Money, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ALLOWANCE)] = { .text = gEasyChatWord_Allowance, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BATH)] = { .text = gEasyChatWord_Bath, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CONVERSATION)] = { .text = gEasyChatWord_Conversation, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SCHOOL)] = { .text = gEasyChatWord_School, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COMMEMORATE)] = { .text = gEasyChatWord_Commemorate, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HABIT)] = { .text = gEasyChatWord_Habit, .alphabeticalOrder = 39, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GROUP)] = { .text = gEasyChatWord_Group, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WORD)] = { .text = gEasyChatWord_Word, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STORE)] = { .text = gEasyChatWord_Store, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SERVICE)] = { .text = gEasyChatWord_Service, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WORK)] = { .text = gEasyChatWord_Work, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SYSTEM)] = { .text = gEasyChatWord_System, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRAIN)] = { .text = gEasyChatWord_Train, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CLASS)] = { .text = gEasyChatWord_Class, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LESSONS)] = { .text = gEasyChatWord_Lessons, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_INFORMATION)] = { .text = gEasyChatWord_Information, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LIVING)] = { .text = gEasyChatWord_Living, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TEACHER)] = { .text = gEasyChatWord_Teacher, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOURNAMENT)] = { .text = gEasyChatWord_Tournament, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LETTER)] = { .text = gEasyChatWord_Letter, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EVENT)] = { .text = gEasyChatWord_Event, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DIGITAL)] = { .text = gEasyChatWord_Digital, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TEST)] = { .text = gEasyChatWord_Test, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DEPT_STORE)] = { .text = gEasyChatWord_DeptStore, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TELEVISION)] = { .text = gEasyChatWord_Television, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PHONE)] = { .text = gEasyChatWord_Phone, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ITEM)] = { .text = gEasyChatWord_Item, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NAME)] = { .text = gEasyChatWord_Name, .alphabeticalOrder = 42, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NEWS)] = { .text = gEasyChatWord_News, .alphabeticalOrder = 43, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_POPULAR)] = { .text = gEasyChatWord_Popular, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PARTY)] = { .text = gEasyChatWord_Party, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STUDY)] = { .text = gEasyChatWord_Study, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MACHINE)] = { .text = gEasyChatWord_Machine, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MAIL)] = { .text = gEasyChatWord_Mail, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MESSAGE)] = { .text = gEasyChatWord_Message, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PROMISE)] = { .text = gEasyChatWord_Promise, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DREAM)] = { .text = gEasyChatWord_Dream, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_KINDERGARTEN)] = { .text = gEasyChatWord_Kindergarten, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LIFE)] = { .text = gEasyChatWord_Life, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RADIO)] = { .text = gEasyChatWord_Radio, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RENTAL)] = { .text = gEasyChatWord_Rental, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WORLD)] = { .text = gEasyChatWord_World, .alphabeticalOrder = 44, diff --git a/src/data/easy_chat/easy_chat_group_misc.h b/src/data/easy_chat/easy_chat_group_misc.h index fbc9a70698ef..aa8f84406ddf 100755 --- a/src/data/easy_chat/easy_chat_group_misc.h +++ b/src/data/easy_chat/easy_chat_group_misc.h @@ -42,211 +42,253 @@ const u8 gEasyChatWord_Left[] = _("LEFT"); const u8 gEasyChatWord_Right[] = _("RIGHT"); const struct EasyChatWordInfo gEasyChatGroup_Misc[] = { + [EC_INDEX(EC_WORD_HIGHS)] = { .text = gEasyChatWord_Highs, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOWS)] = { .text = gEasyChatWord_Lows, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UM)] = { .text = gEasyChatWord_Um, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_REAR)] = { .text = gEasyChatWord_Rear, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THINGS)] = { .text = gEasyChatWord_Things, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THING)] = { .text = gEasyChatWord_Thing, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BELOW)] = { .text = gEasyChatWord_Below, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ABOVE)] = { .text = gEasyChatWord_Above, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BACK)] = { .text = gEasyChatWord_Back, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HIGH)] = { .text = gEasyChatWord_High, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HERE)] = { .text = gEasyChatWord_Here, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_INSIDE)] = { .text = gEasyChatWord_Inside, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OUTSIDE)] = { .text = gEasyChatWord_Outside, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BESIDE)] = { .text = gEasyChatWord_Beside, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THIS_IS_IT_EXCL)] = { .text = gEasyChatWord_ThisIsItExcl, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THIS)] = { .text = gEasyChatWord_This, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EVERY)] = { .text = gEasyChatWord_Every, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THESE)] = { .text = gEasyChatWord_These, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THESE_WERE)] = { .text = gEasyChatWord_TheseWere, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DOWN)] = { .text = gEasyChatWord_Down, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THAT)] = { .text = gEasyChatWord_That, .alphabeticalOrder = 39, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THOSE_ARE)] = { .text = gEasyChatWord_ThoseAre, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THOSE_WERE)] = { .text = gEasyChatWord_ThoseWere, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THAT_S_IT_EXCL)] = { .text = gEasyChatWord_ThatsItExcl, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AM)] = { .text = gEasyChatWord_Am, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THAT_WAS)] = { .text = gEasyChatWord_ThatWas, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FRONT)] = { .text = gEasyChatWord_Front, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UP)] = { .text = gEasyChatWord_Up, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CHOICE)] = { .text = gEasyChatWord_Choice, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FAR)] = { .text = gEasyChatWord_Far, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AWAY)] = { .text = gEasyChatWord_Away, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NEAR)] = { .text = gEasyChatWord_Near, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHERE)] = { .text = gEasyChatWord_Where, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHEN)] = { .text = gEasyChatWord_When, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHAT)] = { .text = gEasyChatWord_What, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DEEP)] = { .text = gEasyChatWord_Deep, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHALLOW)] = { .text = gEasyChatWord_Shallow, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHY)] = { .text = gEasyChatWord_Why, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CONFUSED)] = { .text = gEasyChatWord_Confused, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OPPOSITE)] = { .text = gEasyChatWord_Opposite, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LEFT)] = { .text = gEasyChatWord_Left, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RIGHT)] = { .text = gEasyChatWord_Right, .alphabeticalOrder = 37, diff --git a/src/data/easy_chat/easy_chat_group_people.h b/src/data/easy_chat/easy_chat_group_people.h index 17d2d533936d..2ddd3c9d9c98 100755 --- a/src/data/easy_chat/easy_chat_group_people.h +++ b/src/data/easy_chat/easy_chat_group_people.h @@ -63,7 +63,7 @@ const u8 gEasyChatWord_We[] = _("WE"); const u8 gEasyChatWord_Been[] = _("BEEN"); const u8 gEasyChatWord_ToUs[] = _("TO US"); const u8 gEasyChatWord_Our[] = _("OUR"); -const u8 gEasyChatWord_WeAre[] = _("WE'RE"); +const u8 gEasyChatWord_WeRe[] = _("WE'RE"); const u8 gEasyChatWord_Rival[] = _("RIVAL"); const u8 gEasyChatWord_Weve[] = _("WE'VE"); const u8 gEasyChatWord_Woman[] = _("WOMAN"); @@ -75,376 +75,451 @@ const u8 gEasyChatWord_SheIs[] = _("SHE IS"); const u8 gEasyChatWord_Some[] = _("SOME"); const struct EasyChatWordInfo gEasyChatGroup_People[] = { + [EC_INDEX(EC_WORD_OPPONENT)] = { .text = gEasyChatWord_Opponent, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_I)] = { .text = gEasyChatWord_I, .alphabeticalOrder = 52, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YOU)] = { .text = gEasyChatWord_You, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YOURS)] = { .text = gEasyChatWord_Yours, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SON)] = { .text = gEasyChatWord_Son, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YOUR)] = { .text = gEasyChatWord_Your, .alphabeticalOrder = 62, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YOU_RE)] = { .text = gEasyChatWord_Youre, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YOU_VE)] = { .text = gEasyChatWord_Youve, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MOTHER)] = { .text = gEasyChatWord_Mother, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GRANDFATHER)] = { .text = gEasyChatWord_Grandfather, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UNCLE)] = { .text = gEasyChatWord_Uncle, .alphabeticalOrder = 54, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FATHER)] = { .text = gEasyChatWord_Father, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BOY)] = { .text = gEasyChatWord_Boy, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ADULT)] = { .text = gEasyChatWord_Adult, .alphabeticalOrder = 51, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BROTHER)] = { .text = gEasyChatWord_Brother, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SISTER)] = { .text = gEasyChatWord_Sister, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GRANDMOTHER)] = { .text = gEasyChatWord_Grandmother, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AUNT)] = { .text = gEasyChatWord_Aunt, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PARENT)] = { .text = gEasyChatWord_Parent, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MAN)] = { .text = gEasyChatWord_Man, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ME)] = { .text = gEasyChatWord_Me, .alphabeticalOrder = 72, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GIRL)] = { .text = gEasyChatWord_Girl, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BABE)] = { .text = gEasyChatWord_Babe, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FAMILY)] = { .text = gEasyChatWord_Family, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HER)] = { .text = gEasyChatWord_Her, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HIM)] = { .text = gEasyChatWord_Him, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HE)] = { .text = gEasyChatWord_He, .alphabeticalOrder = 42, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PLACE)] = { .text = gEasyChatWord_Place, .alphabeticalOrder = 49, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DAUGHTER)] = { .text = gEasyChatWord_Daughter, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HIS)] = { .text = gEasyChatWord_His, .alphabeticalOrder = 50, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HE_S)] = { .text = gEasyChatWord_Hes, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AREN_T)] = { .text = gEasyChatWord_Arent, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SIBLINGS)] = { .text = gEasyChatWord_Siblings, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_KID)] = { .text = gEasyChatWord_Kid, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CHILDREN)] = { .text = gEasyChatWord_Children, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MR)] = { .text = gEasyChatWord_Mr, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MRS)] = { .text = gEasyChatWord_Mrs, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MYSELF)] = { .text = gEasyChatWord_Myself, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_I_WAS)] = { .text = gEasyChatWord_IWas, .alphabeticalOrder = 64, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TO_ME)] = { .text = gEasyChatWord_ToMe, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MY)] = { .text = gEasyChatWord_My, .alphabeticalOrder = 53, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_I_AM)] = { .text = gEasyChatWord_IAm, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_I_VE)] = { .text = gEasyChatWord_Ive, .alphabeticalOrder = 66, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHO)] = { .text = gEasyChatWord_Who, .alphabeticalOrder = 69, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SOMEONE)] = { .text = gEasyChatWord_Someone, .alphabeticalOrder = 73, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHO_WAS)] = { .text = gEasyChatWord_WhoWas, .alphabeticalOrder = 70, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TO_WHOM)] = { .text = gEasyChatWord_ToWhom, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHOSE)] = { .text = gEasyChatWord_Whose, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHO_IS)] = { .text = gEasyChatWord_WhoIs, .alphabeticalOrder = 74, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_IT_S)] = { .text = gEasyChatWord_Its, .alphabeticalOrder = 44, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LADY)] = { .text = gEasyChatWord_Lady, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FRIEND)] = { .text = gEasyChatWord_Friend, .alphabeticalOrder = 58, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ALLY)] = { .text = gEasyChatWord_Ally, .alphabeticalOrder = 55, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PERSON)] = { .text = gEasyChatWord_Person, .alphabeticalOrder = 56, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DUDE)] = { .text = gEasyChatWord_Dude, .alphabeticalOrder = 59, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THEY)] = { .text = gEasyChatWord_They, .alphabeticalOrder = 60, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THEY_WERE)] = { .text = gEasyChatWord_TheyWere, .alphabeticalOrder = 71, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TO_THEM)] = { .text = gEasyChatWord_ToThem, .alphabeticalOrder = 39, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THEIR)] = { .text = gEasyChatWord_Their, .alphabeticalOrder = 57, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THEY_RE)] = { .text = gEasyChatWord_Theyre, .alphabeticalOrder = 63, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THEY_VE)] = { .text = gEasyChatWord_Theyve, .alphabeticalOrder = 46, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WE)] = { .text = gEasyChatWord_We, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BEEN)] = { .text = gEasyChatWord_Been, .alphabeticalOrder = 61, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TO_US)] = { .text = gEasyChatWord_ToUs, .alphabeticalOrder = 65, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OUR)] = { .text = gEasyChatWord_Our, .alphabeticalOrder = 67, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WE_RE)] = { - .text = gEasyChatWord_WeAre, + .text = gEasyChatWord_WeRe, .alphabeticalOrder = 43, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RIVAL)] = { .text = gEasyChatWord_Rival, .alphabeticalOrder = 48, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WE_VE)] = { .text = gEasyChatWord_Weve, .alphabeticalOrder = 45, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WOMAN)] = { .text = gEasyChatWord_Woman, .alphabeticalOrder = 47, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHE)] = { .text = gEasyChatWord_She, .alphabeticalOrder = 68, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHE_WAS)] = { .text = gEasyChatWord_SheWas, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TO_HER)] = { .text = gEasyChatWord_ToHer, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HERS)] = { .text = gEasyChatWord_Hers, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHE_IS)] = { .text = gEasyChatWord_SheIs, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SOME)] = { .text = gEasyChatWord_Some, .alphabeticalOrder = 3, diff --git a/src/data/easy_chat/easy_chat_group_speech.h b/src/data/easy_chat/easy_chat_group_speech.h index 013b454c0b7e..a0874a33a574 100755 --- a/src/data/easy_chat/easy_chat_group_speech.h +++ b/src/data/easy_chat/easy_chat_group_speech.h @@ -60,301 +60,361 @@ const u8 gEasyChatWord_Instead[] = _("INSTEAD"); const u8 gEasyChatWord_Fantastic[] = _("FANTASTIC"); const struct EasyChatWordInfo gEasyChatGroup_Speech[] = { + [EC_INDEX(EC_WORD_LISTEN)] = { .text = gEasyChatWord_Listen, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NOT_VERY)] = { .text = gEasyChatWord_NotVery, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MEAN)] = { .text = gEasyChatWord_Mean, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LIE)] = { .text = gEasyChatWord_Lie, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LAY)] = { .text = gEasyChatWord_Lay, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RECOMMEND)] = { .text = gEasyChatWord_Recommend, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NITWIT)] = { .text = gEasyChatWord_Nitwit, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_QUITE)] = { .text = gEasyChatWord_Quite, .alphabeticalOrder = 57, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FROM)] = { .text = gEasyChatWord_From, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FEELING)] = { .text = gEasyChatWord_Feeling, .alphabeticalOrder = 49, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BUT)] = { .text = gEasyChatWord_But, .alphabeticalOrder = 43, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HOWEVER)] = { .text = gEasyChatWord_However, .alphabeticalOrder = 52, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CASE)] = { .text = gEasyChatWord_Case, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THE)] = { .text = gEasyChatWord_The, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MISS)] = { .text = gEasyChatWord_Miss, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HOW)] = { .text = gEasyChatWord_How, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HIT)] = { .text = gEasyChatWord_Hit, .alphabeticalOrder = 59, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ENOUGH)] = { .text = gEasyChatWord_Enough, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_A_LOT)] = { .text = gEasyChatWord_ALot, .alphabeticalOrder = 56, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_A_LITTLE)] = { .text = gEasyChatWord_ALittle, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ABSOLUTELY)] = { .text = gEasyChatWord_Absolutely, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AND)] = { .text = gEasyChatWord_And, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ONLY)] = { .text = gEasyChatWord_Only, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AROUND)] = { .text = gEasyChatWord_Around, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PROBABLY)] = { .text = gEasyChatWord_Probably, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_IF)] = { .text = gEasyChatWord_If, .alphabeticalOrder = 58, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_VERY)] = { .text = gEasyChatWord_Very, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_A_TINY_BIT)] = { .text = gEasyChatWord_ATinyBit, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WILD)] = { .text = gEasyChatWord_Wild, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THAT_S)] = { .text = gEasyChatWord_Thats, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_JUST)] = { .text = gEasyChatWord_Just, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EVEN_SO)] = { .text = gEasyChatWord_EvenSo, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MUST_BE)] = { .text = gEasyChatWord_MustBe, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NATURALLY)] = { .text = gEasyChatWord_Naturally, .alphabeticalOrder = 53, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FOR_NOW)] = { .text = gEasyChatWord_ForNow, .alphabeticalOrder = 50, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UNDERSTOOD)] = { .text = gEasyChatWord_Understood, .alphabeticalOrder = 54, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_JOKING)] = { .text = gEasyChatWord_Joking, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_READY)] = { .text = gEasyChatWord_Ready, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SOMETHING)] = { .text = gEasyChatWord_Something, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SOMEHOW)] = { .text = gEasyChatWord_Somehow, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ALTHOUGH)] = { .text = gEasyChatWord_Although, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ALSO)] = { .text = gEasyChatWord_Also, .alphabeticalOrder = 42, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PERFECT)] = { .text = gEasyChatWord_Perfect, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AS_MUCH_AS)] = { .text = gEasyChatWord_AsMuchAs, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_REALLY)] = { .text = gEasyChatWord_Really, .alphabeticalOrder = 51, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRULY)] = { .text = gEasyChatWord_Truly, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SERIOUSLY)] = { .text = gEasyChatWord_Seriously, .alphabeticalOrder = 44, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOTALLY)] = { .text = gEasyChatWord_Totally, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UNTIL)] = { .text = gEasyChatWord_Until, .alphabeticalOrder = 46, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AS_IF)] = { .text = gEasyChatWord_AsIf, .alphabeticalOrder = 39, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MOOD)] = { .text = gEasyChatWord_Mood, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RATHER)] = { .text = gEasyChatWord_Rather, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AWFULLY)] = { .text = gEasyChatWord_Awfully, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MODE)] = { .text = gEasyChatWord_Mode, .alphabeticalOrder = 55, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MORE)] = { .text = gEasyChatWord_More, .alphabeticalOrder = 47, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOO_LATE)] = { .text = gEasyChatWord_TooLate, .alphabeticalOrder = 45, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FINALLY)] = { .text = gEasyChatWord_Finally, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ANY)] = { .text = gEasyChatWord_Any, .alphabeticalOrder = 48, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_INSTEAD)] = { .text = gEasyChatWord_Instead, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FANTASTIC)] = { .text = gEasyChatWord_Fantastic, .alphabeticalOrder = 28, diff --git a/src/data/easy_chat/easy_chat_group_status.h b/src/data/easy_chat/easy_chat_group_status.h index d4958c3ad78c..af2292b44686 100755 --- a/src/data/easy_chat/easy_chat_group_status.h +++ b/src/data/easy_chat/easy_chat_group_status.h @@ -109,546 +109,655 @@ const u8 gEasyChatWord_PurePower[] = _("PURE POWER"); const u8 gEasyChatWord_ShieldDust[] = _("SHIELD DUST"); const struct EasyChatWordInfo gEasyChatGroup_Status[] = { + [EC_INDEX(EC_WORD_DARK)] = { .text = gEasyChatWord_Dark, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STENCH)] = { .text = gEasyChatWord_Stench, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THICK_FAT)] = { .text = gEasyChatWord_ThickFat, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RAIN_DISH)] = { .text = gEasyChatWord_RainDish, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DRIZZLE)] = { .text = gEasyChatWord_Drizzle, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ARENA_TRAP)] = { .text = gEasyChatWord_ArenaTrap, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_INTIMIDATE)] = { .text = gEasyChatWord_Intimidate, .alphabeticalOrder = 101, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ROCK_HEAD)] = { .text = gEasyChatWord_RockHead, .alphabeticalOrder = 97, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COLOR)] = { .text = gEasyChatWord_Color, .alphabeticalOrder = 106, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ALT_COLOR)] = { .text = gEasyChatWord_AltColor, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ROCK)] = { .text = gEasyChatWord_Rock, .alphabeticalOrder = 68, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BEAUTIFUL)] = { .text = gEasyChatWord_Beautiful, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BEAUTY)] = { .text = gEasyChatWord_Beauty, .alphabeticalOrder = 86, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AIR_LOCK)] = { .text = gEasyChatWord_AirLock, .alphabeticalOrder = 78, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PSYCHIC)] = { .text = gEasyChatWord_Psychic, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HYPER_CUTTER)] = { .text = gEasyChatWord_HyperCutter, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FIGHTING)] = { .text = gEasyChatWord_Fighting, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHADOW_TAG)] = { .text = gEasyChatWord_ShadowTag, .alphabeticalOrder = 99, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SMART)] = { .text = gEasyChatWord_Smart, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SMARTNESS)] = { .text = gEasyChatWord_Smartness, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SPEED_BOOST)] = { .text = gEasyChatWord_SpeedBoost, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COOL)] = { .text = gEasyChatWord_Cool, .alphabeticalOrder = 62, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COOLNESS)] = { .text = gEasyChatWord_Coolness, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BATTLE_ARMOR)] = { .text = gEasyChatWord_BattleArmor, .alphabeticalOrder = 76, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CUTE)] = { .text = gEasyChatWord_Cute, .alphabeticalOrder = 72, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CUTENESS)] = { .text = gEasyChatWord_Cuteness, .alphabeticalOrder = 88, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STURDY)] = { .text = gEasyChatWord_Sturdy, .alphabeticalOrder = 57, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SUCTION_CUPS)] = { .text = gEasyChatWord_SuctionCups, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GRASS)] = { .text = gEasyChatWord_Grass, .alphabeticalOrder = 90, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CLEAR_BODY)] = { .text = gEasyChatWord_ClearBody, .alphabeticalOrder = 91, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TORRENT)] = { .text = gEasyChatWord_Torrent, .alphabeticalOrder = 104, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GHOST)] = { .text = gEasyChatWord_Ghost, .alphabeticalOrder = 75, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ICE)] = { .text = gEasyChatWord_Ice, .alphabeticalOrder = 58, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GUTS)] = { .text = gEasyChatWord_Guts, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ROUGH_SKIN)] = { .text = gEasyChatWord_RoughSkin, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHELL_ARMOR)] = { .text = gEasyChatWord_ShellArmor, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NATURAL_CURE)] = { .text = gEasyChatWord_NaturalCure, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DAMP)] = { .text = gEasyChatWord_Damp, .alphabeticalOrder = 54, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GROUND)] = { .text = gEasyChatWord_Ground, .alphabeticalOrder = 73, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LIMBER)] = { .text = gEasyChatWord_Limber, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MAGNET_PULL)] = { .text = gEasyChatWord_MagnetPull, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHITE_SMOKE)] = { .text = gEasyChatWord_WhiteSmoke, .alphabeticalOrder = 71, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SYNCHRONIZE)] = { .text = gEasyChatWord_Synchronize, .alphabeticalOrder = 100, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OVERGROW)] = { .text = gEasyChatWord_Overgrow, .alphabeticalOrder = 48, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SWIFT_SWIM)] = { .text = gEasyChatWord_SwiftSwim, .alphabeticalOrder = 81, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SAND_STREAM)] = { .text = gEasyChatWord_SandStream, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SAND_VEIL)] = { .text = gEasyChatWord_SandVeil, .alphabeticalOrder = 47, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_KEEN_EYE)] = { .text = gEasyChatWord_KeenEye, .alphabeticalOrder = 82, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_INNER_FOCUS)] = { .text = gEasyChatWord_InnerFocus, .alphabeticalOrder = 77, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STATIC)] = { .text = gEasyChatWord_Static, .alphabeticalOrder = 39, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TYPE)] = { .text = gEasyChatWord_Type, .alphabeticalOrder = 85, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOUGH)] = { .text = gEasyChatWord_Tough, .alphabeticalOrder = 94, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOUGHNESS)] = { .text = gEasyChatWord_Toughness, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHED_SKIN)] = { .text = gEasyChatWord_ShedSkin, .alphabeticalOrder = 79, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HUGE_POWER)] = { .text = gEasyChatWord_HugePower, .alphabeticalOrder = 92, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_VOLT_ABSORB)] = { .text = gEasyChatWord_VoltAbsorb, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WATER_ABSORB)] = { .text = gEasyChatWord_WaterAbsorb, .alphabeticalOrder = 69, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ELECTRIC)] = { .text = gEasyChatWord_Electric, .alphabeticalOrder = 64, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FORECAST)] = { .text = gEasyChatWord_Forecast, .alphabeticalOrder = 43, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SERENE_GRACE)] = { .text = gEasyChatWord_SereneGrace, .alphabeticalOrder = 93, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_POISON)] = { .text = gEasyChatWord_Poison, .alphabeticalOrder = 103, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_POISON_POINT)] = { .text = gEasyChatWord_PoisonPoint, .alphabeticalOrder = 102, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DRAGON)] = { .text = gEasyChatWord_Dragon, .alphabeticalOrder = 89, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRACE)] = { .text = gEasyChatWord_Trace, .alphabeticalOrder = 83, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OBLIVIOUS)] = { .text = gEasyChatWord_Oblivious, .alphabeticalOrder = 60, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRUANT)] = { .text = gEasyChatWord_Truant, .alphabeticalOrder = 61, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RUN_AWAY)] = { .text = gEasyChatWord_RunAway, .alphabeticalOrder = 84, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STICKY_HOLD)] = { .text = gEasyChatWord_StickyHold, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CLOUD_NINE)] = { .text = gEasyChatWord_CloudNine, .alphabeticalOrder = 107, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NORMAL)] = { .text = gEasyChatWord_Normal, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STEEL)] = { .text = gEasyChatWord_Steel, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ILLUMINATE)] = { .text = gEasyChatWord_Illuminate, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EARLY_BIRD)] = { .text = gEasyChatWord_EarlyBird, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HUSTLE)] = { .text = gEasyChatWord_Hustle, .alphabeticalOrder = 66, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHINE)] = { .text = gEasyChatWord_Shine, .alphabeticalOrder = 45, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FLYING)] = { .text = gEasyChatWord_Flying, .alphabeticalOrder = 46, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DROUGHT)] = { .text = gEasyChatWord_Drought, .alphabeticalOrder = 59, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LIGHTNINGROD)] = { .text = gEasyChatWord_Lightningrod, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COMPOUNDEYES)] = { .text = gEasyChatWord_Compoundeyes, .alphabeticalOrder = 53, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MARVEL_SCALE)] = { .text = gEasyChatWord_MarvelScale, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WONDER_GUARD)] = { .text = gEasyChatWord_WonderGuard, .alphabeticalOrder = 108, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_INSOMNIA)] = { .text = gEasyChatWord_Insomnia, .alphabeticalOrder = 74, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LEVITATE)] = { .text = gEasyChatWord_Levitate, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PLUS)] = { .text = gEasyChatWord_Plus, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PRESSURE)] = { .text = gEasyChatWord_Pressure, .alphabeticalOrder = 87, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LIQUID_OOZE)] = { .text = gEasyChatWord_LiquidOoze, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COLOR_CHANGE)] = { .text = gEasyChatWord_ColorChange, .alphabeticalOrder = 49, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SOUNDPROOF)] = { .text = gEasyChatWord_Soundproof, .alphabeticalOrder = 70, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EFFECT_SPORE)] = { .text = gEasyChatWord_EffectSpore, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PKRS)] = { .text = gEasyChatWord_Pkrs, .alphabeticalOrder = 67, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FIRE)] = { .text = gEasyChatWord_Fire, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FLAME_BODY)] = { .text = gEasyChatWord_FlameBody, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MINUS)] = { .text = gEasyChatWord_Minus, .alphabeticalOrder = 98, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OWN_TEMPO)] = { .text = gEasyChatWord_OwnTempo, .alphabeticalOrder = 44, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MAGMA_ARMOR)] = { .text = gEasyChatWord_MagmaArmor, .alphabeticalOrder = 42, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WATER)] = { .text = gEasyChatWord_Water, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WATER_VEIL)] = { .text = gEasyChatWord_WaterVeil, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BUG)] = { .text = gEasyChatWord_Bug, .alphabeticalOrder = 51, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SWARM)] = { .text = gEasyChatWord_Swarm, .alphabeticalOrder = 52, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CUTE_CHARM)] = { .text = gEasyChatWord_CuteCharm, .alphabeticalOrder = 63, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_IMMUNITY)] = { .text = gEasyChatWord_Immunity, .alphabeticalOrder = 65, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BLAZE)] = { .text = gEasyChatWord_Blaze, .alphabeticalOrder = 50, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PICKUP)] = { .text = gEasyChatWord_Pickup, .alphabeticalOrder = 105, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PATTERN)] = { .text = gEasyChatWord_Pattern, .alphabeticalOrder = 55, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FLASH_FIRE)] = { .text = gEasyChatWord_FlashFire, .alphabeticalOrder = 95, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_VITAL_SPIRIT)] = { .text = gEasyChatWord_VitalSpirit, .alphabeticalOrder = 56, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CHLOROPHYLL)] = { .text = gEasyChatWord_Chlorophyll, .alphabeticalOrder = 96, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_PURE_POWER)] = { .text = gEasyChatWord_PurePower, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHIELD_DUST)] = { .text = gEasyChatWord_ShieldDust, .alphabeticalOrder = 80, diff --git a/src/data/easy_chat/easy_chat_group_time.h b/src/data/easy_chat/easy_chat_group_time.h index 691dde70c0fa..061abffd4991 100755 --- a/src/data/easy_chat/easy_chat_group_time.h +++ b/src/data/easy_chat/easy_chat_group_time.h @@ -45,226 +45,271 @@ const u8 gEasyChatWord_Night[] = _("NIGHT"); const u8 gEasyChatWord_Week[] = _("WEEK"); const struct EasyChatWordInfo gEasyChatGroup_Time[] = { + [EC_INDEX(EC_WORD_FALL)] = { .text = gEasyChatWord_Fall, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MORNING)] = { .text = gEasyChatWord_Morning, .alphabeticalOrder = 39, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TOMORROW)] = { .text = gEasyChatWord_Tomorrow, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LAST)] = { .text = gEasyChatWord_Last, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DAY)] = { .text = gEasyChatWord_Day, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SOMETIME)] = { .text = gEasyChatWord_Sometime, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ALWAYS)] = { .text = gEasyChatWord_Always, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CURRENT)] = { .text = gEasyChatWord_Current, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FOREVER)] = { .text = gEasyChatWord_Forever, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DAYS)] = { .text = gEasyChatWord_Days, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_END)] = { .text = gEasyChatWord_End, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TUESDAY)] = { .text = gEasyChatWord_Tuesday, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YESTERDAY)] = { .text = gEasyChatWord_Yesterday, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TODAY)] = { .text = gEasyChatWord_Today, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FRIDAY)] = { .text = gEasyChatWord_Friday, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MONDAY)] = { .text = gEasyChatWord_Monday, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LATER)] = { .text = gEasyChatWord_Later, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EARLIER)] = { .text = gEasyChatWord_Earlier, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ANOTHER)] = { .text = gEasyChatWord_Another, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TIME)] = { .text = gEasyChatWord_Time, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FINISH)] = { .text = gEasyChatWord_Finish, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WEDNESDAY)] = { .text = gEasyChatWord_Wednesday, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SOON)] = { .text = gEasyChatWord_Soon, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_START)] = { .text = gEasyChatWord_Start, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MONTH)] = { .text = gEasyChatWord_Month, .alphabeticalOrder = 43, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_STOP)] = { .text = gEasyChatWord_Stop, .alphabeticalOrder = 42, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NOW)] = { .text = gEasyChatWord_Now, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FINAL)] = { .text = gEasyChatWord_Final, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NEXT)] = { .text = gEasyChatWord_Next, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AGE)] = { .text = gEasyChatWord_Age, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SATURDAY)] = { .text = gEasyChatWord_Saturday, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SUMMER)] = { .text = gEasyChatWord_Summer, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SUNDAY)] = { .text = gEasyChatWord_Sunday, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BEGINNING)] = { .text = gEasyChatWord_Beginning, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SPRING)] = { .text = gEasyChatWord_Spring, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DAYTIME)] = { .text = gEasyChatWord_Daytime, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WINTER)] = { .text = gEasyChatWord_Winter, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DAILY)] = { .text = gEasyChatWord_Daily, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OLDEN)] = { .text = gEasyChatWord_Olden, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ALMOST)] = { .text = gEasyChatWord_Almost, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NEARLY)] = { .text = gEasyChatWord_Nearly, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_THURSDAY)] = { .text = gEasyChatWord_Thursday, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NIGHTTIME)] = { .text = gEasyChatWord_Nighttime, .alphabeticalOrder = 44, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NIGHT)] = { .text = gEasyChatWord_Night, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WEEK)] = { .text = gEasyChatWord_Week, .alphabeticalOrder = 12, diff --git a/src/data/easy_chat/easy_chat_group_trainer.h b/src/data/easy_chat/easy_chat_group_trainer.h index a4e1ddfd6bb6..87966c977167 100755 --- a/src/data/easy_chat/easy_chat_group_trainer.h +++ b/src/data/easy_chat/easy_chat_group_trainer.h @@ -27,136 +27,163 @@ const u8 gEasyChatWord_Silver[] = _("SILVER"); const u8 gEasyChatWord_Emerald[] = _("EMERALD"); const struct EasyChatWordInfo gEasyChatGroup_Trainer[] = { + [EC_INDEX(EC_WORD_I_CHOOSE_YOU)] = { .text = gEasyChatWord_IChooseYou, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GOTCHA)] = { .text = gEasyChatWord_Gotcha, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRADE)] = { .text = gEasyChatWord_Trade, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SAPPHIRE)] = { .text = gEasyChatWord_Sapphire, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EVOLVE)] = { .text = gEasyChatWord_Evolve, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ENCYCLOPEDIA)] = { .text = gEasyChatWord_Encyclopedia, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NATURE)] = { .text = gEasyChatWord_Nature, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CENTER)] = { .text = gEasyChatWord_Center, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EGG)] = { .text = gEasyChatWord_Egg, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LINK)] = { .text = gEasyChatWord_Link, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SP_ABILITY)] = { .text = gEasyChatWord_SpAbility, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TRAINER)] = { .text = gEasyChatWord_Trainer, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_VERSION)] = { .text = gEasyChatWord_Version, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_POKENAV)] = { .text = gEasyChatWord_Pokenav, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_POKEMON)] = { .text = gEasyChatWord_Pokemon, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GET)] = { .text = gEasyChatWord_Get, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_POKEDEX)] = { .text = gEasyChatWord_Pokedex, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RUBY)] = { .text = gEasyChatWord_Ruby, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LEVEL)] = { .text = gEasyChatWord_Level, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_RED)] = { .text = gEasyChatWord_Red, .alphabeticalOrder = 19, .enabled = FALSE, }, + [EC_INDEX(EC_WORD_GREEN)] = { .text = gEasyChatWord_Green, .alphabeticalOrder = 17, .enabled = FALSE, }, + [EC_INDEX(EC_WORD_BAG)] = { .text = gEasyChatWord_Bag, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FLAME)] = { .text = gEasyChatWord_Flame, .alphabeticalOrder = 25, .enabled = FALSE, }, + [EC_INDEX(EC_WORD_GOLD)] = { .text = gEasyChatWord_Gold, .alphabeticalOrder = 10, .enabled = FALSE, }, + [EC_INDEX(EC_WORD_LEAF)] = { .text = gEasyChatWord_Leaf, .alphabeticalOrder = 2, .enabled = FALSE, }, + [EC_INDEX(EC_WORD_SILVER)] = { .text = gEasyChatWord_Silver, .alphabeticalOrder = 11, .enabled = FALSE, }, + [EC_INDEX(EC_WORD_EMERALD)] = { .text = gEasyChatWord_Emerald, .alphabeticalOrder = 12, diff --git a/src/data/easy_chat/easy_chat_group_trendy_saying.h b/src/data/easy_chat/easy_chat_group_trendy_saying.h index 46ce1201ae75..938073f7f821 100755 --- a/src/data/easy_chat/easy_chat_group_trendy_saying.h +++ b/src/data/easy_chat/easy_chat_group_trendy_saying.h @@ -33,166 +33,199 @@ const u8 gEasyChatWord_Young[] = _("YOUNG"); const u8 gEasyChatWord_Ugly[] = _("UGLY"); const struct EasyChatWordInfo gEasyChatGroup_TrendySaying[] = { + [EC_INDEX(EC_WORD_KTHX_BYE)] = { .text = gEasyChatWord_KthxBye, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YES_SIR_EXCL)] = { .text = gEasyChatWord_YesSirExcl, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AVANT_GARDE)] = { .text = gEasyChatWord_AvantGarde, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_COUPLE)] = { .text = gEasyChatWord_Couple, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MUCH_OBLIGED)] = { .text = gEasyChatWord_MuchObliged, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YEEHAW_EXCL)] = { .text = gEasyChatWord_YeehawExcl, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MEGA)] = { .text = gEasyChatWord_Mega, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_1_HIT_KO_EXCL)] = { .text = gEasyChatWord_1HitKOExcl, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DESTINY)] = { .text = gEasyChatWord_Destiny, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CANCEL)] = { .text = gEasyChatWord_Cancel, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NEW)] = { .text = gEasyChatWord_New, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FLATTEN)] = { .text = gEasyChatWord_Flatten, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_KIDDING)] = { .text = gEasyChatWord_Kidding, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOSER)] = { .text = gEasyChatWord_Loser, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOSING)] = { .text = gEasyChatWord_Losing, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HAPPENING)] = { .text = gEasyChatWord_Happening, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HIP_AND)] = { .text = gEasyChatWord_HipAnd, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHAKE)] = { .text = gEasyChatWord_Shake, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHADY)] = { .text = gEasyChatWord_Shady, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UPBEAT)] = { .text = gEasyChatWord_Upbeat, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MODERN)] = { .text = gEasyChatWord_Modern, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SMELL_YA)] = { .text = gEasyChatWord_SmellYa, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BANG)] = { .text = gEasyChatWord_Bang, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_KNOCKOUT)] = { .text = gEasyChatWord_Knockout, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HASSLE)] = { .text = gEasyChatWord_Hassle, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WINNER)] = { .text = gEasyChatWord_Winner, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FEVER)] = { .text = gEasyChatWord_Fever, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WANNABE)] = { .text = gEasyChatWord_Wannabe, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_BABY)] = { .text = gEasyChatWord_Baby, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HEART)] = { .text = gEasyChatWord_Heart, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OLD)] = { .text = gEasyChatWord_Old, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YOUNG)] = { .text = gEasyChatWord_Young, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UGLY)] = { .text = gEasyChatWord_Ugly, .alphabeticalOrder = 31, diff --git a/src/data/easy_chat/easy_chat_group_voices.h b/src/data/easy_chat/easy_chat_group_voices.h index 6dad874ec345..3ebbafd2523e 100755 --- a/src/data/easy_chat/easy_chat_group_voices.h +++ b/src/data/easy_chat/easy_chat_group_voices.h @@ -63,316 +63,379 @@ const u8 gEasyChatWord_Gwah[] = _("GWAH"); const u8 gEasyChatWord_Wahahaha[] = _("WAHAHAHA"); const struct EasyChatWordInfo gEasyChatGroup_Voices[] = { + [EC_INDEX(EC_WORD_EXCL)] = { .text = gEasyChatWord_Excl, .alphabeticalOrder = 0, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EXCL_EXCL)] = { .text = gEasyChatWord_ExclExcl, .alphabeticalOrder = 1, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_QUES_EXCL)] = { .text = gEasyChatWord_QuesExcl, .alphabeticalOrder = 7, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_QUES)] = { .text = gEasyChatWord_Ques, .alphabeticalOrder = 8, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ELLIPSIS)] = { .text = gEasyChatWord_Ellipsis, .alphabeticalOrder = 4, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ELLIPSIS_EXCL)] = { .text = gEasyChatWord_EllipsisExcl, .alphabeticalOrder = 5, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS)] = { .text = gEasyChatWord_EllipsisEllipsisEllipsis, .alphabeticalOrder = 6, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DASH)] = { .text = gEasyChatWord_Dash, .alphabeticalOrder = 3, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_DASH_DASH_DASH)] = { .text = gEasyChatWord_DashDashDash, .alphabeticalOrder = 2, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UH_OH)] = { .text = gEasyChatWord_UhOh, .alphabeticalOrder = 23, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WAAAH)] = { .text = gEasyChatWord_Waaah, .alphabeticalOrder = 11, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AHAHA)] = { .text = gEasyChatWord_Ahaha, .alphabeticalOrder = 41, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OH_QUES)] = { .text = gEasyChatWord_OhQues, .alphabeticalOrder = 52, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_NOPE)] = { .text = gEasyChatWord_Nope, .alphabeticalOrder = 59, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_URGH)] = { .text = gEasyChatWord_Urgh, .alphabeticalOrder = 22, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HMM)] = { .text = gEasyChatWord_Hmm, .alphabeticalOrder = 25, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WHOAH)] = { .text = gEasyChatWord_Whoah, .alphabeticalOrder = 32, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WROOOAAR_EXCL)] = { .text = gEasyChatWord_WroooaarExcl, .alphabeticalOrder = 24, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WOW)] = { .text = gEasyChatWord_Wow, .alphabeticalOrder = 26, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GIGGLE)] = { .text = gEasyChatWord_Giggle, .alphabeticalOrder = 43, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SIGH)] = { .text = gEasyChatWord_Sigh, .alphabeticalOrder = 19, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UNBELIEVABLE)] = { .text = gEasyChatWord_Unbelievable, .alphabeticalOrder = 33, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CRIES)] = { .text = gEasyChatWord_Cries, .alphabeticalOrder = 61, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AGREE)] = { .text = gEasyChatWord_Agree, .alphabeticalOrder = 34, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EH_QUES)] = { .text = gEasyChatWord_EhQues, .alphabeticalOrder = 38, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_CRY)] = { .text = gEasyChatWord_Cry, .alphabeticalOrder = 40, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EHEHE)] = { .text = gEasyChatWord_Ehehe, .alphabeticalOrder = 48, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OI_OI_OI)] = { .text = gEasyChatWord_OiOiOi, .alphabeticalOrder = 37, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OH_YEAH)] = { .text = gEasyChatWord_OhYeah, .alphabeticalOrder = 47, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OH)] = { .text = gEasyChatWord_Oh, .alphabeticalOrder = 42, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OOPS)] = { .text = gEasyChatWord_Oops, .alphabeticalOrder = 15, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SHOCKED)] = { .text = gEasyChatWord_Shocked, .alphabeticalOrder = 49, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_EEK)] = { .text = gEasyChatWord_Eek, .alphabeticalOrder = 46, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GRAAAH)] = { .text = gEasyChatWord_Graaah, .alphabeticalOrder = 57, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GWAHAHAHA)] = { .text = gEasyChatWord_Gwahahaha, .alphabeticalOrder = 44, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WAY)] = { .text = gEasyChatWord_Way, .alphabeticalOrder = 54, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_TCH)] = { .text = gEasyChatWord_Tch, .alphabeticalOrder = 53, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HEHE)] = { .text = gEasyChatWord_Hehe, .alphabeticalOrder = 13, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HAH)] = { .text = gEasyChatWord_Hah, .alphabeticalOrder = 29, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YUP)] = { .text = gEasyChatWord_Yup, .alphabeticalOrder = 51, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HAHAHA)] = { .text = gEasyChatWord_Hahaha, .alphabeticalOrder = 28, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AIYEEH)] = { .text = gEasyChatWord_Aiyeeh, .alphabeticalOrder = 55, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HIYAH)] = { .text = gEasyChatWord_Hiyah, .alphabeticalOrder = 12, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_FUFUFU)] = { .text = gEasyChatWord_Fufufu, .alphabeticalOrder = 27, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LOL)] = { .text = gEasyChatWord_Lol, .alphabeticalOrder = 56, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_SNORT)] = { .text = gEasyChatWord_Snort, .alphabeticalOrder = 30, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HUMPH)] = { .text = gEasyChatWord_Humph, .alphabeticalOrder = 31, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HEHEHE)] = { .text = gEasyChatWord_Hehehe, .alphabeticalOrder = 20, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HEH)] = { .text = gEasyChatWord_Heh, .alphabeticalOrder = 45, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_HOHOHO)] = { .text = gEasyChatWord_Hohoho, .alphabeticalOrder = 36, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_UH_HUH)] = { .text = gEasyChatWord_UhHuh, .alphabeticalOrder = 50, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OH_DEAR)] = { .text = gEasyChatWord_OhDear, .alphabeticalOrder = 9, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_ARRGH)] = { .text = gEasyChatWord_Arrgh, .alphabeticalOrder = 21, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MUFUFU)] = { .text = gEasyChatWord_Mufufu, .alphabeticalOrder = 14, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_MMM)] = { .text = gEasyChatWord_Mmm, .alphabeticalOrder = 10, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OH_KAY)] = { .text = gEasyChatWord_OhKay, .alphabeticalOrder = 62, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_OKAY)] = { .text = gEasyChatWord_Okay, .alphabeticalOrder = 35, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_LALALA)] = { .text = gEasyChatWord_Lalala, .alphabeticalOrder = 16, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_YAY)] = { .text = gEasyChatWord_Yay, .alphabeticalOrder = 18, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_AWW)] = { .text = gEasyChatWord_Aww, .alphabeticalOrder = 60, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WOWEE)] = { .text = gEasyChatWord_Wowee, .alphabeticalOrder = 17, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_GWAH)] = { .text = gEasyChatWord_Gwah, .alphabeticalOrder = 58, .enabled = TRUE, }, + [EC_INDEX(EC_WORD_WAHAHAHA)] = { .text = gEasyChatWord_Wahahaha, .alphabeticalOrder = 39, diff --git a/src/data/easy_chat/easy_chat_groups.h b/src/data/easy_chat/easy_chat_groups.h index a89f228fe840..32d98e8066b1 100755 --- a/src/data/easy_chat/easy_chat_groups.h +++ b/src/data/easy_chat/easy_chat_groups.h @@ -24,111 +24,133 @@ #include "easy_chat_group_pokemon2.h" const struct EasyChatGroup gEasyChatGroups[] = { + [EC_GROUP_POKEMON] = { .wordData = {.valueList = gEasyChatGroup_Pokemon}, .numWords = ARRAY_COUNT(gEasyChatGroup_Pokemon), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Pokemon), }, + [EC_GROUP_TRAINER] = { .wordData = {.words = gEasyChatGroup_Trainer}, .numWords = ARRAY_COUNT(gEasyChatGroup_Trainer), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Trainer) - 6, // Excludes Red, Green, Flame, Gold, Leaf, and Silver }, + [EC_GROUP_STATUS] = { .wordData = {.words = gEasyChatGroup_Status}, .numWords = ARRAY_COUNT(gEasyChatGroup_Status), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Status), }, + [EC_GROUP_BATTLE] = { .wordData = {.words = gEasyChatGroup_Battle}, .numWords = ARRAY_COUNT(gEasyChatGroup_Battle), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Battle), }, + [EC_GROUP_GREETINGS] = { .wordData = {.words = gEasyChatGroup_Greetings}, .numWords = ARRAY_COUNT(gEasyChatGroup_Greetings), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Greetings), }, + [EC_GROUP_PEOPLE] = { .wordData = {.words = gEasyChatGroup_People}, .numWords = ARRAY_COUNT(gEasyChatGroup_People), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_People), }, + [EC_GROUP_VOICES] = { .wordData = {.words = gEasyChatGroup_Voices}, .numWords = ARRAY_COUNT(gEasyChatGroup_Voices), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Voices), }, + [EC_GROUP_SPEECH] = { .wordData = {.words = gEasyChatGroup_Speech}, .numWords = ARRAY_COUNT(gEasyChatGroup_Speech), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Speech), }, + [EC_GROUP_ENDINGS] = { .wordData = {.words = gEasyChatGroup_Endings}, .numWords = ARRAY_COUNT(gEasyChatGroup_Endings), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Endings), }, + [EC_GROUP_FEELINGS] = { .wordData = {.words = gEasyChatGroup_Feelings}, .numWords = ARRAY_COUNT(gEasyChatGroup_Feelings), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Feelings), }, + [EC_GROUP_CONDITIONS] = { .wordData = {.words = gEasyChatGroup_Conditions}, .numWords = ARRAY_COUNT(gEasyChatGroup_Conditions), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Conditions), }, + [EC_GROUP_ACTIONS] = { .wordData = {.words = gEasyChatGroup_Actions}, .numWords = ARRAY_COUNT(gEasyChatGroup_Actions), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Actions), }, + [EC_GROUP_LIFESTYLE] = { .wordData = {.words = gEasyChatGroup_Lifestyle}, .numWords = ARRAY_COUNT(gEasyChatGroup_Lifestyle), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Lifestyle), }, + [EC_GROUP_HOBBIES] = { .wordData = {.words = gEasyChatGroup_Hobbies}, .numWords = ARRAY_COUNT(gEasyChatGroup_Hobbies), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Hobbies), }, + [EC_GROUP_TIME] = { .wordData = {.words = gEasyChatGroup_Time}, .numWords = ARRAY_COUNT(gEasyChatGroup_Time), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Time), }, + [EC_GROUP_MISC] = { .wordData = {.words = gEasyChatGroup_Misc}, .numWords = ARRAY_COUNT(gEasyChatGroup_Misc), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Misc), }, + [EC_GROUP_ADJECTIVES] = { .wordData = {.words = gEasyChatGroup_Adjectives}, .numWords = ARRAY_COUNT(gEasyChatGroup_Adjectives), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Adjectives), }, + [EC_GROUP_EVENTS] = { .wordData = {.words = gEasyChatGroup_Events}, .numWords = ARRAY_COUNT(gEasyChatGroup_Events), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Events), }, + [EC_GROUP_MOVE_1] = { .wordData = {.valueList = gEasyChatGroup_Move1}, .numWords = ARRAY_COUNT(gEasyChatGroup_Move1), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Move1), }, + [EC_GROUP_MOVE_2] = { .wordData = {.valueList = gEasyChatGroup_Move2}, .numWords = ARRAY_COUNT(gEasyChatGroup_Move2), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_Move2), }, + [EC_GROUP_TRENDY_SAYING] = { .wordData = {.words = gEasyChatGroup_TrendySaying}, .numWords = ARRAY_COUNT(gEasyChatGroup_TrendySaying), .numEnabledWords = ARRAY_COUNT(gEasyChatGroup_TrendySaying), }, + [EC_GROUP_POKEMON_NATIONAL] = { .wordData = {.valueList = gEasyChatGroup_Pokemon2}, .numWords = ARRAY_COUNT(gEasyChatGroup_Pokemon2), diff --git a/src/data/graphics/items.h b/src/data/graphics/items.h index a755c7e6fd28..35ce13db259e 100644 --- a/src/data/graphics/items.h +++ b/src/data/graphics/items.h @@ -1930,3 +1930,18 @@ 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"); + +//const u32 gItemIcon_AbilityShield[] = INCBIN_U32("graphics/items/icons/ability_shield.4bpp.lz"); +//const u32 gItemIconPalette_AbilityShield[] = INCBIN_U32("graphics/items/icon_palettes/ability_shield.gbapal.lz"); + +//const u32 gItemIcon_ClearAmulet[] = INCBIN_U32("graphics/items/icons/clear_amulet.4bpp.lz"); +//const u32 gItemIconPalette_ClearAmulet[] = INCBIN_U32("graphics/items/icon_palettes/clear_amulet.gbapal.lz"); + +//const u32 gItemIcon_PunchingGlove[] = INCBIN_U32("graphics/items/icons/punching_glove.4bpp.lz"); +//const u32 gItemIconPalette_PunchingGlove[] = INCBIN_U32("graphics/items/icon_palettes/punching_glove.gbapal.lz"); + +//const u32 gItemIcon_CovertCloak[] = INCBIN_U32("graphics/items/icons/covert_cloak.4bpp.lz"); +//const u32 gItemIconPalette_CovertCloak[] = INCBIN_U32("graphics/items/icon_palettes/covert_cloak.gbapal.lz"); + +//const u32 gItemIcon_LoadedDice[] = INCBIN_U32("graphics/items/icons/loaded_dice.4bpp.lz"); +//const u32 gItemIconPalette_LoadedDice[] = INCBIN_U32("graphics/items/icon_palettes/loaded_dice.gbapal.lz"); diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index ec7f079f754a..385460228b96 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -424,7 +424,6 @@ const u32 gMonFrontPic_Burmy[] = INCBIN_U32("graphics/pokemon/burmy/anim_front.4 const u32 gMonFrontPic_Wormadam[] = INCBIN_U32("graphics/pokemon/wormadam/anim_front.4bpp.lz"); const u32 gMonFrontPic_Mothim[] = INCBIN_U32("graphics/pokemon/mothim/anim_front.4bpp.lz"); const u32 gMonFrontPic_Combee[] = INCBIN_U32("graphics/pokemon/combee/anim_front.4bpp.lz"); -const u32 gMonFrontPic_CombeeF[] = INCBIN_U32("graphics/pokemon/combee/anim_frontf.4bpp.lz"); const u32 gMonFrontPic_Vespiquen[] = INCBIN_U32("graphics/pokemon/vespiquen/anim_front.4bpp.lz"); const u32 gMonFrontPic_Pachirisu[] = INCBIN_U32("graphics/pokemon/pachirisu/anim_front.4bpp.lz"); const u32 gMonFrontPic_Buizel[] = INCBIN_U32("graphics/pokemon/buizel/anim_front.4bpp.lz"); @@ -459,7 +458,6 @@ const u32 gMonFrontPic_Munchlax[] = INCBIN_U32("graphics/pokemon/munchlax/anim_f const u32 gMonFrontPic_Riolu[] = INCBIN_U32("graphics/pokemon/riolu/anim_front.4bpp.lz"); const u32 gMonFrontPic_Lucario[] = INCBIN_U32("graphics/pokemon/lucario/anim_front.4bpp.lz"); const u32 gMonFrontPic_Hippopotas[] = INCBIN_U32("graphics/pokemon/hippopotas/anim_front.4bpp.lz"); -const u32 gMonFrontPic_HippopotasF[] = INCBIN_U32("graphics/pokemon/hippopotas/anim_frontf.4bpp.lz"); const u32 gMonFrontPic_Hippowdon[] = INCBIN_U32("graphics/pokemon/hippowdon/anim_front.4bpp.lz"); const u32 gMonFrontPic_Skorupi[] = INCBIN_U32("graphics/pokemon/skorupi/anim_front.4bpp.lz"); const u32 gMonFrontPic_Drapion[] = INCBIN_U32("graphics/pokemon/drapion/anim_front.4bpp.lz"); @@ -1672,9 +1670,7 @@ const u32 gMonBackPic_Munchlax[] = INCBIN_U32("graphics/pokemon/munchlax/back.4b const u32 gMonBackPic_Riolu[] = INCBIN_U32("graphics/pokemon/riolu/back.4bpp.lz"); const u32 gMonBackPic_Lucario[] = INCBIN_U32("graphics/pokemon/lucario/back.4bpp.lz"); const u32 gMonBackPic_Hippopotas[] = INCBIN_U32("graphics/pokemon/hippopotas/back.4bpp.lz"); -const u32 gMonBackPic_HippopotasF[] = INCBIN_U32("graphics/pokemon/hippopotas/backf.4bpp.lz"); const u32 gMonBackPic_Hippowdon[] = INCBIN_U32("graphics/pokemon/hippowdon/back.4bpp.lz"); -const u32 gMonBackPic_HippowdonF[] = INCBIN_U32("graphics/pokemon/hippowdon/backf.4bpp.lz"); const u32 gMonBackPic_Skorupi[] = INCBIN_U32("graphics/pokemon/skorupi/back.4bpp.lz"); const u32 gMonBackPic_Drapion[] = INCBIN_U32("graphics/pokemon/drapion/back.4bpp.lz"); const u32 gMonBackPic_Croagunk[] = INCBIN_U32("graphics/pokemon/croagunk/back.4bpp.lz"); @@ -2844,6 +2840,7 @@ const u32 gMonPalette_Burmy[] = INCBIN_U32("graphics/pokemon/burmy/normal.gbapal const u32 gMonPalette_Wormadam[] = INCBIN_U32("graphics/pokemon/wormadam/normal.gbapal.lz"); const u32 gMonPalette_Mothim[] = INCBIN_U32("graphics/pokemon/mothim/normal.gbapal.lz"); const u32 gMonPalette_Combee[] = INCBIN_U32("graphics/pokemon/combee/normal.gbapal.lz"); +const u32 gMonPalette_CombeeF[] = INCBIN_U32("graphics/pokemon/combee/normalf.gbapal.lz"); const u32 gMonPalette_Vespiquen[] = INCBIN_U32("graphics/pokemon/vespiquen/normal.gbapal.lz"); const u32 gMonPalette_Pachirisu[] = INCBIN_U32("graphics/pokemon/pachirisu/normal.gbapal.lz"); const u32 gMonPalette_Buizel[] = INCBIN_U32("graphics/pokemon/buizel/normal.gbapal.lz"); @@ -3106,7 +3103,6 @@ const u32 gMonPalette_Spewpa[] = INCBIN_U32("graphics/pokemon/spewpa/normal.gbap const u32 gMonPalette_Vivillon[] = INCBIN_U32("graphics/pokemon/vivillon/normal.gbapal.lz"); const u32 gMonPalette_Litleo[] = INCBIN_U32("graphics/pokemon/litleo/normal.gbapal.lz"); const u32 gMonPalette_Pyroar[] = INCBIN_U32("graphics/pokemon/pyroar/normal.gbapal.lz"); -const u32 gMonPalette_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/normalf.gbapal.lz"); const u32 gMonPalette_Flabebe[] = INCBIN_U32("graphics/pokemon/flabebe/normal.gbapal.lz"); const u32 gMonPalette_Floette[] = INCBIN_U32("graphics/pokemon/floette/normal.gbapal.lz"); const u32 gMonPalette_Florges[] = INCBIN_U32("graphics/pokemon/florges/normal.gbapal.lz"); @@ -4077,6 +4073,7 @@ const u32 gMonShinyPalette_Burmy[] = INCBIN_U32("graphics/pokemon/burmy/shiny.gb const u32 gMonShinyPalette_Wormadam[] = INCBIN_U32("graphics/pokemon/wormadam/shiny.gbapal.lz"); const u32 gMonShinyPalette_Mothim[] = INCBIN_U32("graphics/pokemon/mothim/shiny.gbapal.lz"); const u32 gMonShinyPalette_Combee[] = INCBIN_U32("graphics/pokemon/combee/shiny.gbapal.lz"); +const u32 gMonShinyPalette_CombeeF[] = INCBIN_U32("graphics/pokemon/combee/shinyf.gbapal.lz"); const u32 gMonShinyPalette_Vespiquen[] = INCBIN_U32("graphics/pokemon/vespiquen/shiny.gbapal.lz"); const u32 gMonShinyPalette_Pachirisu[] = INCBIN_U32("graphics/pokemon/pachirisu/shiny.gbapal.lz"); const u32 gMonShinyPalette_Buizel[] = INCBIN_U32("graphics/pokemon/buizel/shiny.gbapal.lz"); @@ -4339,7 +4336,6 @@ const u32 gMonShinyPalette_Spewpa[] = INCBIN_U32("graphics/pokemon/spewpa/shiny. const u32 gMonShinyPalette_Vivillon[] = INCBIN_U32("graphics/pokemon/vivillon/shiny.gbapal.lz"); const u32 gMonShinyPalette_Litleo[] = INCBIN_U32("graphics/pokemon/litleo/shiny.gbapal.lz"); const u32 gMonShinyPalette_Pyroar[] = INCBIN_U32("graphics/pokemon/pyroar/shiny.gbapal.lz"); -const u32 gMonShinyPalette_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/shinyf.gbapal.lz"); const u32 gMonShinyPalette_Flabebe[] = INCBIN_U32("graphics/pokemon/flabebe/shiny.gbapal.lz"); const u32 gMonShinyPalette_Floette[] = INCBIN_U32("graphics/pokemon/floette/shiny.gbapal.lz"); const u32 gMonShinyPalette_Florges[] = INCBIN_U32("graphics/pokemon/florges/shiny.gbapal.lz"); @@ -5337,6 +5333,10 @@ const u8 gMonIcon_Riolu[] = INCBIN_U8("graphics/pokemon/riolu/icon.4bpp"); const u8 gMonIcon_Lucario[] = INCBIN_U8("graphics/pokemon/lucario/icon.4bpp"); const u8 gMonIcon_Hippopotas[] = INCBIN_U8("graphics/pokemon/hippopotas/icon.4bpp"); const u8 gMonIcon_Hippowdon[] = INCBIN_U8("graphics/pokemon/hippowdon/icon.4bpp"); +#if P_HIPPO_GENDER_DIFF_ICONS == TRUE +const u8 gMonIcon_HippopotasF[] = INCBIN_U8("graphics/pokemon/hippopotas/iconf.4bpp"); +const u8 gMonIcon_HippowdonF[] = INCBIN_U8("graphics/pokemon/hippowdon/iconf.4bpp"); +#endif const u8 gMonIcon_Skorupi[] = INCBIN_U8("graphics/pokemon/skorupi/icon.4bpp"); const u8 gMonIcon_Drapion[] = INCBIN_U8("graphics/pokemon/drapion/icon.4bpp"); const u8 gMonIcon_Croagunk[] = INCBIN_U8("graphics/pokemon/croagunk/icon.4bpp"); diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index 0a95b5dbf322..0107b71ab712 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -803,6 +803,11 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_TEA] = {gItemIcon_Tea, gItemIconPalette_Tea}, [ITEM_RUBY] = {gItemIcon_Gem, gItemIconPalette_Ruby}, [ITEM_SAPPHIRE] = {gItemIcon_Gem, gItemIconPalette_Sapphire}, + [ITEM_ABILITY_SHIELD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AbilityShield, gItemIconPalette_AbilityShield}, + [ITEM_CLEAR_AMULET] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ClearAmulet, gItemIconPalette_ClearAmulet}, + [ITEM_PUNCHING_GLOVE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PunchingGlove, gItemIconPalette_PunchingGlove}, + [ITEM_COVERT_CLOAK] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_CovertCloak, gItemIconPalette_CovertCloak}, + [ITEM_LOADED_DICE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LoadedDice, gItemIconPalette_LoadedDice}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; diff --git a/src/data/items.h b/src/data/items.h index 513099d18be8..63446913ec83 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -1385,7 +1385,7 @@ const struct Item gItems[] = .itemId = ITEM_EXP_CANDY_S, .price = 240, .holdEffectParam = EXP_800, - .description = sExpCandyXSDesc, + .description = sExpCandySDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_RareCandy, @@ -9852,4 +9852,70 @@ const struct Item gItems[] = .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, + + [ITEM_ABILITY_SHIELD] = + { + .name = _("AbilityShield"), + .itemId = ITEM_ABILITY_SHIELD, + .price = 20000, + .holdEffect = HOLD_EFFECT_ABILITY_SHIELD, + .description = sAbilityShieldDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_CLEAR_AMULET] = + { + .name = _("Clear Amulet"), + .itemId = ITEM_CLEAR_AMULET, + .price = 30000, + .holdEffect = HOLD_EFFECT_CLEAR_AMULET, + .description = sClearAmuletDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_PUNCHING_GLOVE] = + { + .name = _("PunchingGlove"), + .itemId = ITEM_PUNCHING_GLOVE, + .price = 15000, + .holdEffect = HOLD_EFFECT_PUNCHING_GLOVE, + .description = sPunchingGloveDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_COVERT_CLOAK] = + { + .name = _("Covert Cloak"), + .itemId = ITEM_COVERT_CLOAK, + .price = 20000, + .holdEffect = HOLD_EFFECT_COVERT_CLOAK, + .description = sCovertCloakDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_LOADED_DICE] = + { + //YellwApricorn + .name = _("Loaded Dice"), + .itemId = ITEM_LOADED_DICE, + .price = 20000, + .holdEffect = HOLD_EFFECT_LOADED_DICE, + .description = sLoadedDiceDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, }; diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 663e6f2c049d..4a06fa135e99 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -122,7 +122,7 @@ static const u8 sFontColorTable[][3] = static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = { - { + { // Party mon 1 .bg = 0, .tilemapLeft = 1, .tilemapTop = 3, @@ -131,7 +131,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = .paletteNum = 3, .baseBlock = 0x63, }, - { + { // Party mon 2 .bg = 0, .tilemapLeft = 12, .tilemapTop = 1, @@ -140,7 +140,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = .paletteNum = 4, .baseBlock = 0xA9, }, - { + { // Party mon 3 .bg = 0, .tilemapLeft = 12, .tilemapTop = 4, @@ -149,7 +149,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = .paletteNum = 5, .baseBlock = 0xDF, }, - { + { // Party mon 4 .bg = 0, .tilemapLeft = 12, .tilemapTop = 7, @@ -158,7 +158,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = .paletteNum = 6, .baseBlock = 0x115, }, - { + { // Party mon 5 .bg = 0, .tilemapLeft = 12, .tilemapTop = 10, @@ -167,7 +167,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = .paletteNum = 7, .baseBlock = 0x14B, }, - { + { // Party mon 6 .bg = 0, .tilemapLeft = 12, .tilemapTop = 13, @@ -176,7 +176,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = .paletteNum = 8, .baseBlock = 0x181, }, - { + [WIN_MSG] = { .bg = 2, .tilemapLeft = 1, .tilemapTop = 15, @@ -190,7 +190,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = { - { + { // Party mon 1 .bg = 0, .tilemapLeft = 1, .tilemapTop = 1, @@ -199,7 +199,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = .paletteNum = 3, .baseBlock = 0x63, }, - { + { // Party mon 2 .bg = 0, .tilemapLeft = 1, .tilemapTop = 8, @@ -208,7 +208,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = .paletteNum = 4, .baseBlock = 0xA9, }, - { + { // Party mon 3 .bg = 0, .tilemapLeft = 12, .tilemapTop = 1, @@ -217,7 +217,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = .paletteNum = 5, .baseBlock = 0xEF, }, - { + { // Party mon 4 .bg = 0, .tilemapLeft = 12, .tilemapTop = 5, @@ -226,7 +226,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = .paletteNum = 6, .baseBlock = 0x125, }, - { + { // Party mon 5 .bg = 0, .tilemapLeft = 12, .tilemapTop = 9, @@ -235,7 +235,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = .paletteNum = 7, .baseBlock = 0x15B, }, - { + { // Party mon 6 .bg = 0, .tilemapLeft = 12, .tilemapTop = 13, @@ -244,7 +244,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = .paletteNum = 8, .baseBlock = 0x191, }, - { + [WIN_MSG] = { .bg = 2, .tilemapLeft = 1, .tilemapTop = 15, @@ -258,7 +258,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = { - { + { // Party mon 1 .bg = 0, .tilemapLeft = 1, .tilemapTop = 1, @@ -267,7 +267,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = .paletteNum = 3, .baseBlock = 0x63, }, - { + { // Party mon 2 .bg = 0, .tilemapLeft = 1, .tilemapTop = 8, @@ -276,7 +276,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = .paletteNum = 4, .baseBlock = 0xA9, }, - { + { // Party mon 3 .bg = 0, .tilemapLeft = 12, .tilemapTop = 2, @@ -285,7 +285,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = .paletteNum = 5, .baseBlock = 0xEF, }, - { + { // Party mon 4 .bg = 0, .tilemapLeft = 12, .tilemapTop = 5, @@ -294,7 +294,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = .paletteNum = 6, .baseBlock = 0x125, }, - { + { // Party mon 5 .bg = 0, .tilemapLeft = 12, .tilemapTop = 9, @@ -303,7 +303,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = .paletteNum = 7, .baseBlock = 0x15B, }, - { + { // Party mon 6 .bg = 0, .tilemapLeft = 12, .tilemapTop = 12, @@ -312,7 +312,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = .paletteNum = 8, .baseBlock = 0x191, }, - { + [WIN_MSG] = { .bg = 2, .tilemapLeft = 1, .tilemapTop = 15, @@ -326,7 +326,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = { - { + { // Party mon 1 .bg = 0, .tilemapLeft = 1, .tilemapTop = 2, @@ -335,7 +335,7 @@ static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = .paletteNum = 3, .baseBlock = 0x63, }, - { + { // Party mon 2 .bg = 0, .tilemapLeft = 12, .tilemapTop = 3, @@ -344,7 +344,7 @@ static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = .paletteNum = 5, .baseBlock = 0xA9, }, - { + { // Party mon 3 .bg = 0, .tilemapLeft = 12, .tilemapTop = 6, @@ -353,7 +353,7 @@ static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = .paletteNum = 6, .baseBlock = 0xDF, }, - { + { // Party mon 4 .bg = 2, .tilemapLeft = 1, .tilemapTop = 11, @@ -362,7 +362,7 @@ static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = .paletteNum = 4, .baseBlock = 0x115, }, - { + { // Party mon 5 .bg = 2, .tilemapLeft = 12, .tilemapTop = 12, @@ -371,7 +371,7 @@ static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = .paletteNum = 7, .baseBlock = 0x16B, }, - { + { // Party mon 6 .bg = 2, .tilemapLeft = 12, .tilemapTop = 15, diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/species_info.h similarity index 79% rename from src/data/pokemon/base_stats.h rename to src/data/pokemon/species_info.h index a161fbf9086c..ee2230b94af7 100644 --- a/src/data/pokemon/base_stats.h +++ b/src/data/pokemon/species_info.h @@ -16,34 +16,32 @@ .baseSpDefense = 40 #endif -#define PIKACHU_BASE_STATS(gender, flip) \ +#define PIKACHU_SPECIES_INFO(gender, flip) \ { \ .baseHP = 35, \ .baseAttack = 55, \ .baseSpeed = 90, \ .baseSpAttack = 50, \ PIKACHU_BASE_DEFENSES, \ - .type1 = TYPE_ELECTRIC, \ - .type2 = TYPE_ELECTRIC, \ + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, \ .catchRate = 190, \ .expYield = 112, \ .evYield_Speed = 2, \ - .itemRare = ITEM_LIGHT_BALL, \ + .itemRare = ITEM_LIGHT_BALL, \ .genderRatio = gender, \ .eggCycles = 10, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_FIELD, \ - .eggGroup2 = EGG_GROUP_FAIRY, \ + .eggGroups = { EGG_GROUP_FIELD, 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 COSPLAY_PIKACHU_SPECIES_INFO(flip) PIKACHU_SPECIES_INFO(MON_FEMALE, flip) +#define CAP_PIKACHU_SPECIES_INFO(flip) PIKACHU_SPECIES_INFO(MON_MALE, flip) -#define PICHU_BASE_STATS(flip) \ +#define PICHU_SPECIES_INFO(flip) \ { \ .baseHP = 20, \ .baseAttack = 40, \ @@ -51,8 +49,7 @@ .baseSpeed = 60, \ .baseSpAttack = 35, \ .baseSpDefense = 35, \ - .type1 = TYPE_ELECTRIC, \ - .type2 = TYPE_ELECTRIC, \ + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, \ .catchRate = 190, \ .expYield = 41, \ .evYield_Speed = 1, \ @@ -60,14 +57,13 @@ .eggCycles = 10, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ - .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD},\ .bodyColor = BODY_COLOR_YELLOW, \ .noFlip = flip, \ } -#define UNOWN_BASE_STATS(flip) \ +#define UNOWN_SPECIES_INFO(flip) \ { \ .baseHP = 48, \ .baseAttack = 72, \ @@ -75,8 +71,7 @@ .baseSpeed = 48, \ .baseSpAttack = 72, \ .baseSpDefense = 48, \ - .type1 = TYPE_PSYCHIC, \ - .type2 = TYPE_PSYCHIC, \ + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, \ .catchRate = 225, \ .expYield = 118, \ .evYield_Attack = 1, \ @@ -85,14 +80,13 @@ .eggCycles = 40, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ - .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ .abilities = {ABILITY_LEVITATE, ABILITY_NONE},\ .bodyColor = BODY_COLOR_BLACK, \ .noFlip = flip, \ } -#define CASTFORM_BASE_STATS(type, color) \ +#define CASTFORM_SPECIES_INFO(type, color) \ { \ .baseHP = 70, \ .baseAttack = 70, \ @@ -100,25 +94,23 @@ .baseSpeed = 70, \ .baseSpAttack = 70, \ .baseSpDefense = 70, \ - .type1 = type, \ - .type2 = type, \ + .types = { type, type }, \ .catchRate = 45, \ .expYield = 147, \ .evYield_HP = 1, \ - .itemCommon = ITEM_MYSTIC_WATER, \ - .itemRare = ITEM_MYSTIC_WATER, \ + .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, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_AMORPHOUS}, \ .abilities = {ABILITY_FORECAST, ABILITY_NONE},\ .bodyColor = color, \ .noFlip = FALSE, \ } -#define BURMY_BASE_STATS(color) \ +#define BURMY_SPECIES_INFO(color) \ { \ .baseHP = 40, \ .baseAttack = 29, \ @@ -126,8 +118,7 @@ .baseSpeed = 36, \ .baseSpAttack = 29, \ .baseSpDefense = 45, \ - .type1 = TYPE_BUG, \ - .type2 = TYPE_BUG, \ + .types = { TYPE_BUG, TYPE_BUG}, \ .catchRate = 120, \ .expYield = 45, \ .evYield_SpDefense = 1, \ @@ -135,14 +126,13 @@ .eggCycles = 15, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_BUG, \ - .eggGroup2 = EGG_GROUP_BUG, \ + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, \ .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_OVERCOAT},\ .bodyColor = color, \ .noFlip = FALSE, \ } -#define CHERRIM_BASE_STATS(color) \ +#define CHERRIM_SPECIES_INFO(color) \ { \ .baseHP = 70, \ .baseAttack = 60, \ @@ -150,24 +140,22 @@ .baseSpeed = 85, \ .baseSpAttack = 87, \ .baseSpDefense = 78, \ - .type1 = TYPE_GRASS, \ - .type2 = TYPE_GRASS, \ + .types = { TYPE_GRASS, TYPE_GRASS}, \ .catchRate = 75, \ .expYield = 158, \ .evYield_SpAttack = 2, \ - .itemRare = ITEM_MIRACLE_SEED, \ + .itemRare = ITEM_MIRACLE_SEED, \ .genderRatio = PERCENT_FEMALE(50), \ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_FAIRY, \ - .eggGroup2 = EGG_GROUP_GRASS, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, \ .abilities = {ABILITY_FLOWER_GIFT, ABILITY_NONE},\ .bodyColor = color, \ .noFlip = FALSE, \ } -#define SHELLOS_BASE_STATS(color) \ +#define SHELLOS_SPECIES_INFO(color) \ { \ .baseHP = 76, \ .baseAttack = 48, \ @@ -175,8 +163,7 @@ .baseSpeed = 34, \ .baseSpAttack = 57, \ .baseSpDefense = 62, \ - .type1 = TYPE_WATER, \ - .type2 = TYPE_WATER, \ + .types = { TYPE_WATER, TYPE_WATER}, \ .catchRate = 190, \ .expYield = 65, \ .evYield_HP = 1, \ @@ -184,14 +171,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_WATER_1, \ - .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, \ .abilities = {ABILITY_STICKY_HOLD, ABILITY_STORM_DRAIN, ABILITY_SAND_FORCE},\ .bodyColor = color, \ .noFlip = FALSE, \ } -#define GASTRODON_BASE_STATS(color) \ +#define GASTRODON_SPECIES_INFO(color) \ { \ .baseHP = 111, \ .baseAttack = 83, \ @@ -199,8 +185,7 @@ .baseSpeed = 39, \ .baseSpAttack = 92, \ .baseSpDefense = 82, \ - .type1 = TYPE_WATER, \ - .type2 = TYPE_GROUND, \ + .types = { TYPE_WATER, TYPE_GROUND}, \ .catchRate = 75, \ .expYield = 166, \ .evYield_HP = 2, \ @@ -208,14 +193,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_WATER_1, \ - .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, \ .abilities = {ABILITY_STICKY_HOLD, ABILITY_STORM_DRAIN, ABILITY_SAND_FORCE},\ .bodyColor = color, \ .noFlip = FALSE, \ } -#define ROTOM_FORM_BASE_STATS(type, flip) \ +#define ROTOM_FORM_SPECIES_INFO(type, flip) \ { \ .baseHP = 50, \ .baseAttack = 65, \ @@ -223,8 +207,7 @@ .baseSpeed = 86, \ .baseSpAttack = 105, \ .baseSpDefense = 107, \ - .type1 = TYPE_ELECTRIC, \ - .type2 = type, \ + .types = { TYPE_ELECTRIC, type }, \ .catchRate = 45, \ .expYield = 182, \ .evYield_Speed = 1, \ @@ -233,14 +216,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_AMORPHOUS, \ - .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ .abilities = {ABILITY_LEVITATE, ABILITY_NONE},\ .bodyColor = BODY_COLOR_RED, \ .noFlip = flip, \ } -#define ARCEUS_BASE_STATS(type) \ +#define ARCEUS_SPECIES_INFO(type) \ { \ .baseHP = 120, \ .baseAttack = 120, \ @@ -248,8 +230,7 @@ .baseSpeed = 120, \ .baseSpAttack = 120, \ .baseSpDefense = 120, \ - .type1 = type, \ - .type2 = type, \ + .types = { type, type }, \ .catchRate = 3, \ .expYield = 324, \ .evYield_HP = 3, \ @@ -257,15 +238,14 @@ .eggCycles = 120, \ .friendship = 0, \ .growthRate = GROWTH_SLOW, \ - .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ - .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ .abilities = {ABILITY_MULTITYPE, ABILITY_NONE},\ .bodyColor = BODY_COLOR_WHITE, \ .noFlip = FALSE, \ .flags = SPECIES_FLAG_MYTHICAL, \ } -#define DEERLING_BASE_STATS(color) \ +#define DEERLING_SPECIES_INFO(color) \ { \ .baseHP = 60, \ .baseAttack = 60, \ @@ -273,8 +253,7 @@ .baseSpeed = 75, \ .baseSpAttack = 40, \ .baseSpDefense = 50, \ - .type1 = TYPE_NORMAL, \ - .type2 = TYPE_GRASS, \ + .types = { TYPE_NORMAL, TYPE_GRASS}, \ .catchRate = 190, \ .expYield = 67, \ .evYield_Speed = 1, \ @@ -282,14 +261,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_FIELD, \ - .eggGroup2 = EGG_GROUP_FIELD, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE},\ .bodyColor = color, \ .noFlip = FALSE, \ } -#define SAWSBUCK_BASE_STATS \ +#define SAWSBUCK_SPECIES_INFO \ { \ .baseHP = 80, \ .baseAttack = 100, \ @@ -297,8 +275,7 @@ .baseSpeed = 95, \ .baseSpAttack = 60, \ .baseSpDefense = 70, \ - .type1 = TYPE_NORMAL, \ - .type2 = TYPE_GRASS, \ + .types = { TYPE_NORMAL, TYPE_GRASS}, \ .catchRate = 75, \ .expYield = 166, \ .evYield_Attack = 2, \ @@ -306,14 +283,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_FIELD, \ - .eggGroup2 = EGG_GROUP_FIELD, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SAP_SIPPER, ABILITY_SERENE_GRACE},\ .bodyColor = BODY_COLOR_BROWN, \ .noFlip = FALSE, \ } -#define GENESECT_BASE_STATS \ +#define GENESECT_SPECIES_INFO \ { \ .baseHP = 71, \ .baseAttack = 120, \ @@ -321,8 +297,7 @@ .baseSpeed = 99, \ .baseSpAttack = 120, \ .baseSpDefense = 95, \ - .type1 = TYPE_BUG, \ - .type2 = TYPE_STEEL, \ + .types = { TYPE_BUG, TYPE_STEEL}, \ .catchRate = 3, \ .expYield = 270, \ .evYield_Attack = 1, \ @@ -332,15 +307,14 @@ .eggCycles = 120, \ .friendship = 0, \ .growthRate = GROWTH_SLOW, \ - .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ - .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ .abilities = {ABILITY_DOWNLOAD, ABILITY_NONE},\ .bodyColor = BODY_COLOR_PURPLE, \ .noFlip = FALSE, \ .flags = SPECIES_FLAG_MYTHICAL, \ } -#define VIVILLON_BASE_STATS(color) \ +#define VIVILLON_SPECIES_INFO(color) \ { \ .baseHP = 80, \ .baseAttack = 52, \ @@ -348,8 +322,7 @@ .baseSpeed = 89, \ .baseSpAttack = 90, \ .baseSpDefense = 50, \ - .type1 = TYPE_BUG, \ - .type2 = TYPE_FLYING, \ + .types = { TYPE_BUG, TYPE_FLYING}, \ .catchRate = 45, \ .expYield = 185, \ .evYield_HP = 1, \ @@ -359,14 +332,13 @@ .eggCycles = 15, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_BUG, \ - .eggGroup2 = EGG_GROUP_BUG, \ + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, \ .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD},\ .bodyColor = color, \ .noFlip = FALSE, \ } -#define FLABEBE_BASE_STATS \ +#define FLABEBE_SPECIES_INFO \ { \ .baseHP = 44, \ .baseAttack = 38, \ @@ -374,8 +346,7 @@ .baseSpeed = 42, \ .baseSpAttack = 61, \ .baseSpDefense = 79, \ - .type1 = TYPE_FAIRY, \ - .type2 = TYPE_FAIRY, \ + .types = { TYPE_FAIRY, TYPE_FAIRY}, \ .catchRate = 225, \ .expYield = 61, \ .evYield_SpDefense = 1, \ @@ -383,14 +354,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_FAIRY, \ - .eggGroup2 = EGG_GROUP_FAIRY, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, \ .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS},\ .bodyColor = BODY_COLOR_WHITE, \ .noFlip = FALSE, \ } -#define FLOETTE_BASE_STATS \ +#define FLOETTE_SPECIES_INFO \ { \ .baseHP = 54, \ .baseAttack = 45, \ @@ -398,8 +368,7 @@ .baseSpeed = 52, \ .baseSpAttack = 75, \ .baseSpDefense = 98, \ - .type1 = TYPE_FAIRY, \ - .type2 = TYPE_FAIRY, \ + .types = { TYPE_FAIRY, TYPE_FAIRY}, \ .catchRate = 120, \ .expYield = 130, \ .evYield_SpDefense = 2, \ @@ -407,14 +376,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_FAIRY, \ - .eggGroup2 = EGG_GROUP_FAIRY, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, \ .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS},\ .bodyColor = BODY_COLOR_WHITE, \ .noFlip = FALSE, \ } -#define FLORGES_BASE_STATS \ +#define FLORGES_SPECIES_INFO \ { \ .baseHP = 78, \ .baseAttack = 65, \ @@ -422,8 +390,7 @@ .baseSpeed = 75, \ .baseSpAttack = 112, \ .baseSpDefense = 154, \ - .type1 = TYPE_FAIRY, \ - .type2 = TYPE_FAIRY, \ + .types = { TYPE_FAIRY, TYPE_FAIRY}, \ .catchRate = 45, \ .expYield = 248, \ .evYield_SpDefense = 3, \ @@ -431,14 +398,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_FAIRY, \ - .eggGroup2 = EGG_GROUP_FAIRY, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, \ .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS},\ .bodyColor = BODY_COLOR_WHITE, \ .noFlip = FALSE, \ } -#define FURFROU_BASE_STATS(flip) \ +#define FURFROU_SPECIES_INFO(flip) \ { \ .baseHP = 75, \ .baseAttack = 80, \ @@ -446,8 +412,7 @@ .baseSpeed = 102, \ .baseSpAttack = 65, \ .baseSpDefense = 90, \ - .type1 = TYPE_NORMAL, \ - .type2 = TYPE_NORMAL, \ + .types = { TYPE_NORMAL, TYPE_NORMAL}, \ .catchRate = 160, \ .expYield = 165, \ .evYield_Speed = 1, \ @@ -455,16 +420,14 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_FIELD, \ - .eggGroup2 = EGG_GROUP_FIELD, \ + .eggGroups = { EGG_GROUP_FIELD, 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, \ +#define PUMKPABOO_MISC_INFO \ + .types = { TYPE_GHOST, TYPE_GRASS}, \ .catchRate = 120, \ .expYield = 67, \ .evYield_Defense = 1, \ @@ -472,15 +435,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_AMORPHOUS, \ - .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .eggGroups = { EGG_GROUP_AMORPHOUS, 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, \ +#define GOURGEIST_MISC_INFO \ + .types = { TYPE_GHOST, TYPE_GRASS}, \ .catchRate = 60, \ .expYield = 173, \ .evYield_Defense = 2, \ @@ -488,13 +449,12 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_AMORPHOUS, \ - .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ .abilities = {ABILITY_PICKUP, ABILITY_FRISK, ABILITY_INSOMNIA},\ .bodyColor = BODY_COLOR_BROWN, \ .noFlip = FALSE -#define XERNEAS_BASE_STATS \ +#define XERNEAS_SPECIES_INFO \ { \ .baseHP = 126, \ .baseAttack = 131, \ @@ -502,8 +462,7 @@ .baseSpeed = 99, \ .baseSpAttack = 131, \ .baseSpDefense = 98, \ - .type1 = TYPE_FAIRY, \ - .type2 = TYPE_FAIRY, \ + .types = { TYPE_FAIRY, TYPE_FAIRY}, \ .catchRate = 45, \ .expYield = 306, \ .evYield_HP = 3, \ @@ -511,15 +470,14 @@ .eggCycles = 120, \ .friendship = 0, \ .growthRate = GROWTH_SLOW, \ - .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ - .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ .abilities = {ABILITY_FAIRY_AURA, ABILITY_NONE},\ .bodyColor = BODY_COLOR_BLUE, \ .noFlip = FALSE, \ .flags = SPECIES_FLAG_LEGENDARY, \ } -#define ZYGARDE_50_BASE_STATS(ability) \ +#define ZYGARDE_50_SPECIES_INFO(ability) \ { \ .baseHP = 108, \ .baseAttack = 100, \ @@ -527,8 +485,7 @@ .baseSpeed = 95, \ .baseSpAttack = 81, \ .baseSpDefense = 95, \ - .type1 = TYPE_DRAGON, \ - .type2 = TYPE_GROUND, \ + .types = { TYPE_DRAGON, TYPE_GROUND},\ .catchRate = 3, \ .expYield = 270, \ .evYield_HP = 3, \ @@ -536,15 +493,14 @@ .eggCycles = 120, \ .friendship = 0, \ .growthRate = GROWTH_SLOW, \ - .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ - .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ .abilities = {ability, ABILITY_NONE},\ .bodyColor = BODY_COLOR_GREEN, \ .noFlip = TRUE, \ .flags = SPECIES_FLAG_LEGENDARY, \ } -#define ZYGARDE_10_BASE_STATS(ability) \ +#define ZYGARDE_10_SPECIES_INFO(ability) \ { \ .baseHP = 54, \ .baseAttack = 100, \ @@ -552,8 +508,7 @@ .baseSpeed = 115, \ .baseSpAttack = 61, \ .baseSpDefense = 85, \ - .type1 = TYPE_DRAGON, \ - .type2 = TYPE_GROUND, \ + .types = { TYPE_DRAGON, TYPE_GROUND},\ .catchRate = 3, \ .expYield = 219, \ .evYield_HP = 3, \ @@ -561,15 +516,14 @@ .eggCycles = 120, \ .friendship = 0, \ .growthRate = GROWTH_SLOW, \ - .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ - .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ .abilities = {ability, ABILITY_NONE},\ .bodyColor = BODY_COLOR_BLACK, \ .noFlip = TRUE, \ .flags = SPECIES_FLAG_LEGENDARY, \ } -#define ORICORIO_BASE_STATS(type, color) \ +#define ORICORIO_SPECIES_INFO(type, color) \ { \ .baseHP = 75, \ .baseAttack = 70, \ @@ -577,48 +531,44 @@ .baseSpeed = 93, \ .baseSpAttack = 98, \ .baseSpDefense = 70, \ - .type1 = type, \ - .type2 = TYPE_FLYING, \ + .types = { type, TYPE_FLYING }, \ .catchRate = 45, \ .expYield = 167, \ .evYield_SpAttack = 2, \ - .itemRare = ITEM_HONEY, \ + .itemRare = ITEM_HONEY, \ .genderRatio = PERCENT_FEMALE(75), \ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_FLYING, \ - .eggGroup2 = EGG_GROUP_FLYING, \ + .eggGroups = { EGG_GROUP_FLYING, 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 ROCKRUFF_SPECIES_INFO(ability1, ability2, hiddenAbility)\ + { \ + .baseHP = 45, \ + .baseAttack = 65, \ + .baseDefense = 40, \ + .baseSpeed = 60, \ + .baseSpAttack = 30, \ + .baseSpDefense = 40, \ + .types = { TYPE_ROCK, TYPE_ROCK}, \ + .catchRate = 190, \ + .expYield = 56, \ + .evYield_Attack = 1, \ + .genderRatio = PERCENT_FEMALE(50), \ + .eggCycles = 15, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_FAST, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, \ + .abilities = {ability1, ability2, hiddenAbility}, \ + .bodyColor = BODY_COLOR_BROWN, \ + .noFlip = FALSE, \ } -#define SILVALLY_BASE_STATS(type) \ +#define SILVALLY_SPECIES_INFO(type) \ { \ .baseHP = 95, \ .baseAttack = 95, \ @@ -626,8 +576,7 @@ .baseSpeed = 95, \ .baseSpAttack = 95, \ .baseSpDefense = 95, \ - .type1 = type, \ - .type2 = type, \ + .types = { type, type }, \ .catchRate = 3, \ .expYield = 257, \ .evYield_HP = 3, \ @@ -635,8 +584,7 @@ .eggCycles = 120, \ .friendship = 0, \ .growthRate = GROWTH_SLOW, \ - .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ - .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ .abilities = {ABILITY_RKS_SYSTEM, ABILITY_NONE},\ .bodyColor = BODY_COLOR_GRAY, \ .noFlip = FALSE, \ @@ -659,38 +607,36 @@ .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, \ +#define MINIOR_MISC_INFO(color) \ + .types = { TYPE_ROCK, TYPE_FLYING}, \ + .catchRate = 30, \ + .expYield = 154, \ + .evYield_Defense = 1, \ + .evYield_SpDefense = 1, \ + .itemRare = ITEM_STAR_PIECE, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 25, \ + .friendship = 70, \ + .growthRate = GROWTH_MEDIUM_SLOW, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, \ + .abilities = {ABILITY_SHIELDS_DOWN, ABILITY_NONE}, \ + .bodyColor = color, \ .noFlip = TRUE -#define MINIOR_METEOR_BASE_STATS \ +#define MINIOR_METEOR_SPECIES_INFO \ { \ MINIOR_METEOR_ATTRIBUTES, \ - MINIOR_MISC_STATS(BODY_COLOR_BROWN),\ + MINIOR_MISC_INFO(BODY_COLOR_BROWN), \ } -#define MINIOR_CORE_BASE_STATS(color)\ - { \ - MINIOR_CORE_ATTRIBUTES, \ - MINIOR_MISC_STATS(color), \ +#define MINIOR_CORE_SPECIES_INFO(color) \ + { \ + MINIOR_CORE_ATTRIBUTES, \ + MINIOR_MISC_INFO(color), \ } -#define MIMIKYU_BASE_STATS \ +#define MIMIKYU_SPECIES_INFO \ { \ .baseHP = 55, \ .baseAttack = 90, \ @@ -698,24 +644,22 @@ .baseSpeed = 96, \ .baseSpAttack = 50, \ .baseSpDefense = 105, \ - .type1 = TYPE_GHOST, \ - .type2 = TYPE_FAIRY, \ + .types = { TYPE_GHOST, TYPE_FAIRY}, \ .catchRate = 45, \ .expYield = 167, \ .evYield_SpDefense = 2, \ - .itemRare = ITEM_CHESTO_BERRY, \ + .itemRare = ITEM_CHESTO_BERRY, \ .genderRatio = PERCENT_FEMALE(50), \ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_AMORPHOUS, \ - .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, \ .abilities = {ABILITY_DISGUISE, ABILITY_NONE},\ .bodyColor = BODY_COLOR_YELLOW, \ .noFlip = FALSE, \ } -#define MAGEARNA_BASE_STATS(color) \ +#define MAGEARNA_SPECIES_INFO(color) \ { \ .baseHP = 80, \ .baseAttack = 95, \ @@ -723,8 +667,7 @@ .baseSpeed = 65, \ .baseSpAttack = 130, \ .baseSpDefense = 115, \ - .type1 = TYPE_STEEL, \ - .type2 = TYPE_FAIRY, \ + .types = { TYPE_STEEL, TYPE_FAIRY}, \ .catchRate = 3, \ .expYield = 270, \ .evYield_SpAttack = 3, \ @@ -732,15 +675,14 @@ .eggCycles = 120, \ .friendship = 0, \ .growthRate = GROWTH_SLOW, \ - .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ - .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ .abilities = {ABILITY_SOUL_HEART, ABILITY_NONE},\ .bodyColor = color, \ .noFlip = FALSE, \ .flags = SPECIES_FLAG_MYTHICAL, \ } -#define CRAMORANT_BASE_STATS \ +#define CRAMORANT_SPECIES_INFO \ { \ .baseHP = 70, \ .baseAttack = 85, \ @@ -748,8 +690,7 @@ .baseSpeed = 85, \ .baseSpAttack = 85, \ .baseSpDefense = 95, \ - .type1 = TYPE_FLYING, \ - .type2 = TYPE_WATER, \ + .types = { TYPE_FLYING, TYPE_WATER}, \ .catchRate = 45, \ .expYield = 166, \ .evYield_SpDefense = 2, \ @@ -757,14 +698,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_WATER_1, \ - .eggGroup2 = EGG_GROUP_FLYING, \ + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING}, \ .abilities = {ABILITY_GULP_MISSILE, ABILITY_NONE},\ .bodyColor = BODY_COLOR_BLUE, \ .noFlip = FALSE, \ } -#define TOXTRICITY_BASE_STATS(ability2) \ +#define TOXTRICITY_SPECIES_INFO(ability2) \ { \ .baseHP = 75, \ .baseAttack = 98, \ @@ -772,8 +712,7 @@ .baseSpeed = 75, \ .baseSpAttack = 114, \ .baseSpDefense = 70, \ - .type1 = TYPE_ELECTRIC, \ - .type2 = TYPE_POISON, \ + .types = { TYPE_ELECTRIC, TYPE_POISON}, \ .catchRate = 45, \ .expYield = 176, \ .evYield_SpAttack = 2, \ @@ -781,14 +720,13 @@ .eggCycles = 25, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_SLOW, \ - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, \ - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, \ + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, \ .abilities = {ABILITY_PUNK_ROCK, ability2, ABILITY_TECHNICIAN},\ .bodyColor = BODY_COLOR_PURPLE, \ .noFlip = FALSE, \ } -#define SINISTEA_BASE_STATS \ +#define SINISTEA_SPECIES_INFO \ { \ .baseHP = 40, \ .baseAttack = 45, \ @@ -796,8 +734,7 @@ .baseSpeed = 50, \ .baseSpAttack = 74, \ .baseSpDefense = 54, \ - .type1 = TYPE_GHOST, \ - .type2 = TYPE_GHOST, \ + .types = { TYPE_GHOST, TYPE_GHOST}, \ .catchRate = 120, \ .expYield = 62, \ .evYield_SpAttack = 1, \ @@ -805,14 +742,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_MINERAL, \ - .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, \ .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY},\ .bodyColor = BODY_COLOR_PURPLE, \ .noFlip = FALSE, \ } -#define POLTEAGEIST_BASE_STATS \ +#define POLTEAGEIST_SPECIES_INFO \ { \ .baseHP = 60, \ .baseAttack = 65, \ @@ -820,8 +756,7 @@ .baseSpeed = 70, \ .baseSpAttack = 134, \ .baseSpDefense = 114, \ - .type1 = TYPE_GHOST, \ - .type2 = TYPE_GHOST, \ + .types = { TYPE_GHOST, TYPE_GHOST}, \ .catchRate = 60, \ .expYield = 178, \ .evYield_SpAttack = 2, \ @@ -829,14 +764,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_MINERAL, \ - .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, \ .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY},\ .bodyColor = BODY_COLOR_PURPLE, \ .noFlip = FALSE, \ } -#define ALCREMIE_BASE_STATS(color) \ +#define ALCREMIE_SPECIES_INFO(color) \ { \ .baseHP = 65, \ .baseAttack = 60, \ @@ -844,8 +778,7 @@ .baseSpeed = 64, \ .baseSpAttack = 110, \ .baseSpDefense = 121, \ - .type1 = TYPE_FAIRY, \ - .type2 = TYPE_FAIRY, \ + .types = { TYPE_FAIRY, TYPE_FAIRY}, \ .catchRate = 100, \ .expYield = 173, \ .evYield_SpDefense = 2, \ @@ -853,14 +786,13 @@ .eggCycles = 20, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_FAIRY, \ - .eggGroup2 = EGG_GROUP_AMORPHOUS, \ + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_AMORPHOUS}, \ .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL},\ .bodyColor = color, \ .noFlip = FALSE, \ } -#define MORPEKO_BASE_STATS \ +#define MORPEKO_SPECIES_INFO \ { \ .baseHP = 58, \ .baseAttack = 95, \ @@ -868,8 +800,7 @@ .baseSpeed = 97, \ .baseSpAttack = 70, \ .baseSpDefense = 58, \ - .type1 = TYPE_ELECTRIC, \ - .type2 = TYPE_DARK, \ + .types = { TYPE_ELECTRIC, TYPE_DARK}, \ .catchRate = 180, \ .expYield = 153, \ .evYield_Speed = 2, \ @@ -877,14 +808,13 @@ .eggCycles = 10, \ .friendship = 70, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroup1 = EGG_GROUP_FIELD, \ - .eggGroup2 = EGG_GROUP_FAIRY, \ + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, \ .abilities = {ABILITY_HUNGER_SWITCH, ABILITY_NONE},\ .bodyColor = BODY_COLOR_YELLOW, \ .noFlip = FALSE, \ } -#define ZARUDE_BASE_STATS \ +#define ZARUDE_SPECIES_INFO \ { \ .baseHP = 105, \ .baseAttack = 120, \ @@ -892,8 +822,7 @@ .baseSpeed = 105, \ .baseSpAttack = 70, \ .baseSpDefense = 95, \ - .type1 = TYPE_DARK, \ - .type2 = TYPE_GRASS, \ + .types = { TYPE_DARK, TYPE_GRASS}, \ .catchRate = 3, \ .expYield = 300, \ .evYield_Attack = 3, \ @@ -901,15 +830,14 @@ .eggCycles = 120, \ .friendship = 0, \ .growthRate = GROWTH_SLOW, \ - .eggGroup1 = EGG_GROUP_UNDISCOVERED, \ - .eggGroup2 = EGG_GROUP_UNDISCOVERED, \ + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, \ .abilities = {ABILITY_LEAF_GUARD, ABILITY_NONE},\ .bodyColor = BODY_COLOR_GREEN, \ .noFlip = FALSE, \ .flags = SPECIES_FLAG_MYTHICAL, \ } -const struct BaseStats gBaseStats[] = +const struct SpeciesInfo gSpeciesInfo[] = { [SPECIES_NONE] = {0}, @@ -921,8 +849,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON }, .catchRate = 45, .expYield = 64, .evYield_SpAttack = 1, @@ -930,8 +857,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CHLOROPHYLL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -945,8 +871,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON }, .catchRate = 45, .expYield = 142, .evYield_SpAttack = 1, @@ -955,8 +880,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CHLOROPHYLL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -970,8 +894,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON }, .catchRate = 45, .expYield = 236, .evYield_SpAttack = 2, @@ -980,8 +903,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CHLOROPHYLL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -995,8 +917,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 60, .baseSpDefense = 50, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 45, .expYield = 62, .evYield_Speed = 1, @@ -1004,8 +925,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -1019,8 +939,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 80, .baseSpDefense = 65, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 45, .expYield = 142, .evYield_Speed = 1, @@ -1029,8 +948,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -1044,8 +962,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 109, .baseSpDefense = 85, - .type1 = TYPE_FIRE, - .type2 = TYPE_FLYING, + .types = { TYPE_FIRE, TYPE_FLYING }, .catchRate = 45, .expYield = 240, .evYield_SpAttack = 3, @@ -1053,8 +970,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -1068,8 +984,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 43, .baseSpAttack = 50, .baseSpDefense = 64, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 45, .expYield = 63, .evYield_Defense = 1, @@ -1077,8 +992,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_RAIN_DISH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1092,8 +1006,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 58, .baseSpAttack = 65, .baseSpDefense = 80, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 45, .expYield = 142, .evYield_Defense = 1, @@ -1102,8 +1015,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_RAIN_DISH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1117,8 +1029,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 78, .baseSpAttack = 85, .baseSpDefense = 105, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 45, .expYield = 239, .evYield_SpDefense = 3, @@ -1126,8 +1037,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_RAIN_DISH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1141,8 +1051,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 20, .baseSpDefense = 20, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG }, .catchRate = 255, .expYield = 39, .evYield_HP = 1, @@ -1150,8 +1059,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE, ABILITY_RUN_AWAY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -1165,8 +1073,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG }, .catchRate = 120, .expYield = 72, .evYield_Defense = 2, @@ -1174,8 +1081,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -1193,8 +1099,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpAttack = 80, #endif - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING}, .catchRate = 45, .expYield = 178, .evYield_SpAttack = 2, @@ -1204,8 +1109,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE, ABILITY_TINTED_LENS}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -1219,8 +1123,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 20, .baseSpDefense = 20, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = { TYPE_BUG, TYPE_POISON }, .catchRate = 255, .expYield = 39, .evYield_Speed = 1, @@ -1228,8 +1131,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE, ABILITY_RUN_AWAY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1243,8 +1145,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = { TYPE_BUG, TYPE_POISON }, .catchRate = 120, .expYield = 72, .evYield_Defense = 2, @@ -1252,8 +1153,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1271,8 +1171,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 80, #endif - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = { TYPE_BUG, TYPE_POISON}, .catchRate = 45, .expYield = 178, .evYield_Attack = 2, @@ -1282,8 +1181,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1297,8 +1195,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 56, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING }, .catchRate = 255, .expYield = 50, .evYield_Speed = 1, @@ -1306,8 +1203,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1321,8 +1217,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 71, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING }, .catchRate = 120, .expYield = 122, .evYield_Speed = 2, @@ -1330,8 +1225,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1349,8 +1243,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpeed = 91, #endif - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 216, .evYield_Speed = 3, @@ -1358,8 +1251,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1373,8 +1265,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 72, .baseSpAttack = 25, .baseSpDefense = 35, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 255, .expYield = 51, .evYield_Speed = 1, @@ -1382,8 +1273,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1397,8 +1287,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 97, .baseSpAttack = 50, .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 127, .expYield = 145, .evYield_Speed = 2, @@ -1406,8 +1295,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1421,8 +1309,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 31, .baseSpDefense = 31, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING }, .catchRate = 255, .expYield = 52, .evYield_Speed = 1, @@ -1431,8 +1318,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1446,8 +1332,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 61, .baseSpDefense = 61, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING }, .catchRate = 90, .expYield = 155, .evYield_Speed = 2, @@ -1456,8 +1341,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1471,8 +1355,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 40, .baseSpDefense = 54, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON }, .catchRate = 255, .expYield = 58, .evYield_Attack = 1, @@ -1480,8 +1363,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON}, .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1499,8 +1381,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 85, #endif - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON}, .catchRate = 90, .expYield = 157, .evYield_Attack = 2, @@ -1508,14 +1389,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON}, .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, - [SPECIES_PIKACHU] = PIKACHU_BASE_STATS(PERCENT_FEMALE(50), FLIP), + [SPECIES_PIKACHU] = PIKACHU_SPECIES_INFO(PERCENT_FEMALE(50), FLIP), [SPECIES_RAICHU] = { @@ -1529,8 +1409,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpeed = 100, #endif - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 75, .expYield = 218, .evYield_Speed = 3, @@ -1538,8 +1417,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1553,8 +1431,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 20, .baseSpDefense = 30, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND }, .catchRate = 255, .expYield = 60, .evYield_Defense = 1, @@ -1563,8 +1440,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_SAND_RUSH}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1578,8 +1454,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 45, .baseSpDefense = 55, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND }, .catchRate = 90, .expYield = 158, .evYield_Defense = 2, @@ -1588,8 +1463,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_SAND_RUSH}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1603,8 +1477,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 41, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON }, .catchRate = 235, .expYield = 55, .evYield_HP = 1, @@ -1612,8 +1485,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1627,8 +1499,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 56, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON }, .catchRate = 120, .expYield = 128, .evYield_HP = 2, @@ -1636,8 +1507,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1655,8 +1525,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 82, #endif - .type1 = TYPE_POISON, - .type2 = TYPE_GROUND, + .types = { TYPE_POISON, TYPE_GROUND}, .catchRate = 45, .expYield = 227, .evYield_HP = 3, @@ -1664,8 +1533,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1679,8 +1547,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON }, .catchRate = 235, .expYield = 55, .evYield_Attack = 1, @@ -1688,8 +1555,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1703,8 +1569,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON }, .catchRate = 120, .expYield = 128, .evYield_Attack = 2, @@ -1712,8 +1577,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1731,8 +1595,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 92, #endif - .type1 = TYPE_POISON, - .type2 = TYPE_GROUND, + .types = { TYPE_POISON, TYPE_GROUND}, .catchRate = 45, .expYield = 227, .evYield_Attack = 3, @@ -1740,8 +1603,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1756,11 +1618,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 60, .baseSpDefense = 65, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, #else - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, #endif .catchRate = 150, .expYield = 113, @@ -1770,8 +1630,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, @@ -1790,11 +1649,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 85, #endif #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, #else - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, #endif .catchRate = 25, .expYield = 217, @@ -1804,8 +1661,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_UNAWARE}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, @@ -1819,8 +1675,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 50, .baseSpDefense = 65, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 190, .expYield = 60, .evYield_Speed = 1, @@ -1829,8 +1684,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE, ABILITY_DROUGHT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1844,8 +1698,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 81, .baseSpDefense = 100, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 75, .expYield = 177, .evYield_Speed = 1, @@ -1855,8 +1708,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE, ABILITY_DROUGHT}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1871,11 +1723,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 45, .baseSpDefense = 25, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_NORMAL, - .type2 = TYPE_FAIRY, + .types = { TYPE_NORMAL, TYPE_FAIRY}, #else - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, #endif .catchRate = 170, .expYield = 95, @@ -1885,8 +1735,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, @@ -1905,11 +1754,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 75, #endif #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_NORMAL, - .type2 = TYPE_FAIRY, + .types = { TYPE_NORMAL, TYPE_FAIRY}, #else - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, #endif .catchRate = 50, .expYield = 196, @@ -1919,8 +1766,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRISK}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, @@ -1934,8 +1780,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 30, .baseSpDefense = 40, - .type1 = TYPE_POISON, - .type2 = TYPE_FLYING, + .types = { TYPE_POISON, TYPE_FLYING }, .catchRate = 255, .expYield = 49, .evYield_Speed = 1, @@ -1943,8 +1788,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1958,8 +1802,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 65, .baseSpDefense = 75, - .type1 = TYPE_POISON, - .type2 = TYPE_FLYING, + .types = { TYPE_POISON, TYPE_FLYING }, .catchRate = 90, .expYield = 159, .evYield_Speed = 2, @@ -1967,8 +1810,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1982,8 +1824,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 75, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON }, .catchRate = 255, .expYield = 64, .evYield_SpAttack = 1, @@ -1992,8 +1833,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_RUN_AWAY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -2007,8 +1847,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 85, .baseSpDefense = 75, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON }, .catchRate = 120, .expYield = 138, .evYield_SpAttack = 2, @@ -2017,8 +1856,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_STENCH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -2036,8 +1874,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpAttack = 100, #endif - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON}, .catchRate = 45, .expYield = 221, .evYield_SpAttack = 3, @@ -2046,8 +1883,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_EFFECT_SPORE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -2061,8 +1897,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 45, .baseSpDefense = 55, - .type1 = TYPE_BUG, - .type2 = TYPE_GRASS, + .types = { TYPE_BUG, TYPE_GRASS }, .catchRate = 190, .expYield = 57, .evYield_Attack = 1, @@ -2072,8 +1907,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_GRASS}, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_DRY_SKIN, ABILITY_DAMP}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -2087,8 +1921,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 60, .baseSpDefense = 80, - .type1 = TYPE_BUG, - .type2 = TYPE_GRASS, + .types = { TYPE_BUG, TYPE_GRASS }, .catchRate = 75, .expYield = 142, .evYield_Attack = 2, @@ -2099,8 +1932,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_GRASS}, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_DRY_SKIN, ABILITY_DAMP}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -2114,8 +1946,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 40, .baseSpDefense = 55, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = { TYPE_BUG, TYPE_POISON }, .catchRate = 190, .expYield = 61, .evYield_SpDefense = 1, @@ -2123,8 +1954,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_TINTED_LENS, ABILITY_RUN_AWAY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -2138,8 +1968,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 90, .baseSpDefense = 75, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = { TYPE_BUG, TYPE_POISON }, .catchRate = 75, .expYield = 158, .evYield_Speed = 1, @@ -2149,8 +1978,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SHIELD_DUST, ABILITY_TINTED_LENS, ABILITY_WONDER_SKIN}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -2164,8 +1992,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 35, .baseSpDefense = 45, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND }, .catchRate = 255, .expYield = 53, .evYield_Speed = 1, @@ -2174,8 +2001,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2193,8 +2019,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 80, #endif - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND}, .catchRate = 50, .expYield = 149, .evYield_Speed = 2, @@ -2203,8 +2028,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2218,8 +2042,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 255, .expYield = 58, .evYield_Speed = 1, @@ -2228,8 +2051,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -2243,8 +2065,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 90, .expYield = 154, .evYield_Speed = 2, @@ -2253,8 +2074,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_LIMBER, ABILITY_TECHNICIAN, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -2268,8 +2088,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 65, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 190, .expYield = 64, .evYield_SpAttack = 1, @@ -2277,8 +2096,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_DAMP, ABILITY_CLOUD_NINE, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -2292,8 +2110,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 95, .baseSpDefense = 80, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 75, .expYield = 175, .evYield_SpAttack = 2, @@ -2301,8 +2118,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_DAMP, ABILITY_CLOUD_NINE, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -2316,8 +2132,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 35, .baseSpDefense = 45, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING }, .catchRate = 190, .expYield = 61, .evYield_Attack = 1, @@ -2325,8 +2140,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_ANGER_POINT, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2340,8 +2154,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 60, .baseSpDefense = 70, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING }, .catchRate = 75, .expYield = 159, .evYield_Attack = 2, @@ -2349,8 +2162,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_ANGER_POINT, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2364,8 +2176,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 70, .baseSpDefense = 50, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 190, .expYield = 70, .evYield_Attack = 1, @@ -2373,8 +2184,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2388,8 +2198,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 100, .baseSpDefense = 80, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 75, .expYield = 194, .evYield_Attack = 2, @@ -2397,8 +2206,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2412,8 +2220,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 255, .expYield = 60, .evYield_Speed = 1, @@ -2421,8 +2228,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -2436,8 +2242,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 120, .expYield = 135, .evYield_Speed = 2, @@ -2446,8 +2251,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -2465,8 +2269,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 85, #endif - .type1 = TYPE_WATER, - .type2 = TYPE_FIGHTING, + .types = { TYPE_WATER, TYPE_FIGHTING}, .catchRate = 45, .expYield = 230, .evYield_Defense = 3, @@ -2475,8 +2278,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -2490,8 +2292,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 105, .baseSpDefense = 55, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, .catchRate = 200, .expYield = 62, .evYield_SpAttack = 1, @@ -2500,8 +2301,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS, ABILITY_MAGIC_GUARD}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2515,8 +2315,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 120, .baseSpDefense = 70, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, .catchRate = 100, .expYield = 140, .evYield_SpAttack = 2, @@ -2525,8 +2324,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS, ABILITY_MAGIC_GUARD}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -2544,8 +2342,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpDefense = 85, #endif - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 50, .expYield = 225, .evYield_SpAttack = 3, @@ -2554,8 +2351,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS, ABILITY_MAGIC_GUARD}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2569,8 +2365,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING }, .catchRate = 180, .expYield = 61, .evYield_Attack = 1, @@ -2579,8 +2374,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2594,8 +2388,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 50, .baseSpDefense = 60, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING }, .catchRate = 90, .expYield = 142, .evYield_Attack = 2, @@ -2604,8 +2397,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -2619,8 +2411,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 65, .baseSpDefense = 85, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING }, .catchRate = 45, .expYield = 227, .evYield_Attack = 3, @@ -2629,8 +2420,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2644,8 +2434,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 70, .baseSpDefense = 30, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON }, .catchRate = 255, .expYield = 60, .evYield_Attack = 1, @@ -2653,8 +2442,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -2668,8 +2456,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 85, .baseSpDefense = 45, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON }, .catchRate = 120, .expYield = 137, .evYield_Attack = 2, @@ -2677,8 +2464,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -2696,8 +2482,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpDefense = 60, #endif - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON}, .catchRate = 45, .expYield = 221, .evYield_Attack = 3, @@ -2705,8 +2490,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -2720,8 +2504,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 50, .baseSpDefense = 100, - .type1 = TYPE_WATER, - .type2 = TYPE_POISON, + .types = { TYPE_WATER, TYPE_POISON }, .catchRate = 190, .expYield = 67, .evYield_SpDefense = 1, @@ -2730,8 +2513,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE, ABILITY_RAIN_DISH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -2745,8 +2527,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 80, .baseSpDefense = 120, - .type1 = TYPE_WATER, - .type2 = TYPE_POISON, + .types = { TYPE_WATER, TYPE_POISON }, .catchRate = 60, .expYield = 180, .evYield_SpDefense = 2, @@ -2755,8 +2536,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE, ABILITY_RAIN_DISH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -2770,8 +2550,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_ROCK, - .type2 = TYPE_GROUND, + .types = { TYPE_ROCK, TYPE_GROUND }, .catchRate = 255, .expYield = 60, .evYield_Defense = 1, @@ -2780,8 +2559,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2795,8 +2573,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 45, .baseSpDefense = 45, - .type1 = TYPE_ROCK, - .type2 = TYPE_GROUND, + .types = { TYPE_ROCK, TYPE_GROUND }, .catchRate = 120, .expYield = 137, .evYield_Defense = 2, @@ -2805,8 +2582,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2824,8 +2600,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 110, #endif - .type1 = TYPE_ROCK, - .type2 = TYPE_GROUND, + .types = { TYPE_ROCK, TYPE_GROUND}, .catchRate = 45, .expYield = 223, .evYield_Defense = 3, @@ -2834,8 +2609,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2849,8 +2623,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 190, .expYield = 82, .evYield_Speed = 1, @@ -2858,8 +2631,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -2873,8 +2645,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 60, .expYield = 175, .evYield_Speed = 2, @@ -2882,8 +2653,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -2897,8 +2667,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_WATER, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_WATER, TYPE_PSYCHIC }, .catchRate = 190, .expYield = 63, .evYield_HP = 1, @@ -2907,8 +2676,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -2922,8 +2690,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 100, .baseSpDefense = 80, - .type1 = TYPE_WATER, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_WATER, TYPE_PSYCHIC }, .catchRate = 75, .expYield = 172, .evYield_Defense = 2, @@ -2932,8 +2699,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -2947,8 +2713,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 95, .baseSpDefense = 55, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_STEEL, + .types = { TYPE_ELECTRIC, TYPE_STEEL }, .catchRate = 190, .expYield = 65, .evYield_SpAttack = 1, @@ -2957,8 +2722,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2972,8 +2736,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 120, .baseSpDefense = 70, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_STEEL, + .types = { TYPE_ELECTRIC, TYPE_STEEL }, .catchRate = 60, .expYield = 163, .evYield_SpAttack = 2, @@ -2982,8 +2745,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -3001,8 +2763,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 65, #endif - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 132, .evYield_Attack = 1, @@ -3011,8 +2772,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FIELD}, .abilities = {ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3026,8 +2786,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING }, .catchRate = 190, .expYield = 62, .evYield_Attack = 1, @@ -3036,8 +2795,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD, ABILITY_TANGLED_FEET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3055,8 +2813,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpeed = 100, #endif - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 165, .evYield_Attack = 2, @@ -3065,8 +2822,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD, ABILITY_TANGLED_FEET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3080,8 +2836,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 45, .baseSpDefense = 70, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 190, .expYield = 65, .evYield_SpDefense = 1, @@ -3089,8 +2844,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_THICK_FAT, ABILITY_HYDRATION, ABILITY_ICE_BODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -3104,8 +2858,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 70, .baseSpDefense = 95, - .type1 = TYPE_WATER, - .type2 = TYPE_ICE, + .types = { TYPE_WATER, TYPE_ICE }, .catchRate = 75, .expYield = 166, .evYield_SpDefense = 2, @@ -3113,8 +2866,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_THICK_FAT, ABILITY_HYDRATION, ABILITY_ICE_BODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -3128,8 +2880,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON }, .catchRate = 190, .expYield = 65, .evYield_HP = 1, @@ -3138,8 +2889,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD, ABILITY_POISON_TOUCH}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3153,8 +2903,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 65, .baseSpDefense = 100, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON }, .catchRate = 75, .expYield = 175, .evYield_HP = 1, @@ -3164,8 +2913,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD, ABILITY_POISON_TOUCH}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3179,8 +2927,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 45, .baseSpDefense = 25, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 190, .expYield = 61, .evYield_Defense = 1, @@ -3190,8 +2937,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_SKILL_LINK, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3205,8 +2951,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 85, .baseSpDefense = 45, - .type1 = TYPE_WATER, - .type2 = TYPE_ICE, + .types = { TYPE_WATER, TYPE_ICE }, .catchRate = 60, .expYield = 184, .evYield_Defense = 2, @@ -3216,8 +2961,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_SKILL_LINK, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3231,8 +2975,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 100, .baseSpDefense = 35, - .type1 = TYPE_GHOST, - .type2 = TYPE_POISON, + .types = { TYPE_GHOST, TYPE_POISON }, .catchRate = 190, .expYield = 62, .evYield_SpAttack = 1, @@ -3240,8 +2983,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3255,8 +2997,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 115, .baseSpDefense = 55, - .type1 = TYPE_GHOST, - .type2 = TYPE_POISON, + .types = { TYPE_GHOST, TYPE_POISON }, .catchRate = 90, .expYield = 142, .evYield_SpAttack = 2, @@ -3264,8 +3005,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3279,8 +3019,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 130, .baseSpDefense = 75, - .type1 = TYPE_GHOST, - .type2 = TYPE_POISON, + .types = { TYPE_GHOST, TYPE_POISON }, .catchRate = 45, .expYield = 225, .evYield_SpAttack = 3, @@ -3288,8 +3027,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, #if P_UPDATED_ABILITIES >= GEN_7 .abilities = {ABILITY_CURSED_BODY, ABILITY_NONE}, #else @@ -3307,8 +3045,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 30, .baseSpDefense = 45, - .type1 = TYPE_ROCK, - .type2 = TYPE_GROUND, + .types = { TYPE_ROCK, TYPE_GROUND }, .catchRate = 45, .expYield = 77, .evYield_Defense = 1, @@ -3316,8 +3053,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -3331,8 +3067,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 42, .baseSpAttack = 43, .baseSpDefense = 90, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, .catchRate = 190, .expYield = 66, .evYield_SpDefense = 1, @@ -3340,8 +3075,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_INSOMNIA, ABILITY_FOREWARN, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -3355,8 +3089,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 67, .baseSpAttack = 73, .baseSpDefense = 115, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, .catchRate = 75, .expYield = 169, .evYield_SpDefense = 2, @@ -3364,8 +3097,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_INSOMNIA, ABILITY_FOREWARN, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -3379,8 +3111,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 225, .expYield = 65, .evYield_Attack = 1, @@ -3388,8 +3119,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3403,8 +3133,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 60, .expYield = 166, .evYield_Attack = 2, @@ -3412,8 +3141,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, @@ -3427,8 +3155,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, .catchRate = 190, .expYield = 66, .evYield_Speed = 1, @@ -3436,8 +3163,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3455,8 +3181,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpeed = 140, #endif - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 60, .expYield = 172, .evYield_Speed = 2, @@ -3464,8 +3189,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3479,8 +3203,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 60, .baseSpDefense = 45, - .type1 = TYPE_GRASS, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_GRASS, TYPE_PSYCHIC }, .catchRate = 90, .expYield = 65, .evYield_Defense = 1, @@ -3489,8 +3212,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HARVEST}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -3508,8 +3230,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpDefense = 65, #endif - .type1 = TYPE_GRASS, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_GRASS, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 186, .evYield_SpAttack = 2, @@ -3517,8 +3238,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HARVEST}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -3532,8 +3252,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND }, .catchRate = 190, .expYield = 64, .evYield_Defense = 1, @@ -3542,8 +3261,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD, ABILITY_BATTLE_ARMOR}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3557,8 +3275,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 50, .baseSpDefense = 80, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND }, .catchRate = 75, .expYield = 149, .evYield_Defense = 2, @@ -3567,8 +3284,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD, ABILITY_BATTLE_ARMOR}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3582,8 +3298,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 87, .baseSpAttack = 35, .baseSpDefense = 110, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING }, .catchRate = 45, .expYield = 159, .evYield_Attack = 2, @@ -3591,8 +3306,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_LIMBER, ABILITY_RECKLESS, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3606,8 +3320,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 76, .baseSpAttack = 35, .baseSpDefense = 110, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING }, .catchRate = 45, .expYield = 159, .evYield_SpDefense = 2, @@ -3615,8 +3328,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_KEEN_EYE, ABILITY_IRON_FIST, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3630,8 +3342,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 60, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 45, .expYield = 77, .evYield_HP = 2, @@ -3640,8 +3351,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_OWN_TEMPO, ABILITY_OBLIVIOUS, ABILITY_CLOUD_NINE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -3655,8 +3365,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 60, .baseSpDefense = 45, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON }, .catchRate = 190, .expYield = 68, .evYield_Defense = 1, @@ -3665,8 +3374,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_STENCH}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3680,8 +3388,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 85, .baseSpDefense = 70, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON }, .catchRate = 60, .expYield = 172, .evYield_Defense = 2, @@ -3690,8 +3397,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_STENCH}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = TRUE, @@ -3705,8 +3411,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_GROUND, - .type2 = TYPE_ROCK, + .types = { TYPE_GROUND, TYPE_ROCK }, .catchRate = 120, .expYield = 69, .evYield_Defense = 1, @@ -3714,8 +3419,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -3729,8 +3433,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 45, .baseSpDefense = 45, - .type1 = TYPE_GROUND, - .type2 = TYPE_ROCK, + .types = { TYPE_GROUND, TYPE_ROCK }, .catchRate = 60, .expYield = 170, .evYield_Attack = 2, @@ -3738,8 +3441,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -3753,8 +3455,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 35, .baseSpDefense = 105, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 30, .expYield = 395, .evYield_HP = 2, @@ -3763,8 +3464,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_HEALER}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -3778,8 +3478,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 100, .baseSpDefense = 40, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS }, .catchRate = 45, .expYield = 87, .evYield_Defense = 1, @@ -3787,8 +3486,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -3802,8 +3500,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 40, .baseSpDefense = 80, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 45, .expYield = 172, .evYield_HP = 2, @@ -3811,8 +3508,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_EARLY_BIRD, ABILITY_SCRAPPY, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3826,8 +3522,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 70, .baseSpDefense = 25, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 225, .expYield = 59, .evYield_SpAttack = 1, @@ -3836,8 +3531,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SNIPER, ABILITY_DAMP}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -3851,8 +3545,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 95, .baseSpDefense = 45, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 75, .expYield = 154, .evYield_Defense = 1, @@ -3862,8 +3555,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, .abilities = {ABILITY_POISON_POINT, ABILITY_SNIPER, ABILITY_DAMP}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -3877,8 +3569,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 63, .baseSpAttack = 35, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 225, .expYield = 64, .evYield_Attack = 1, @@ -3887,8 +3578,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL, ABILITY_LIGHTNING_ROD}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3902,8 +3592,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 68, .baseSpAttack = 65, .baseSpDefense = 80, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 60, .expYield = 158, .evYield_Attack = 2, @@ -3912,8 +3601,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL, ABILITY_LIGHTNING_ROD}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3927,8 +3615,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 70, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 225, .expYield = 68, .evYield_Speed = 1, @@ -3938,8 +3625,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -3953,8 +3639,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 100, .baseSpDefense = 85, - .type1 = TYPE_WATER, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_WATER, TYPE_PSYCHIC }, .catchRate = 60, .expYield = 182, .evYield_Speed = 2, @@ -3964,8 +3649,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3980,11 +3664,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 100, .baseSpDefense = 120, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FAIRY, + .types = { TYPE_PSYCHIC, TYPE_FAIRY}, #else - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, #endif .catchRate = 45, .expYield = 161, @@ -3993,8 +3675,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_SOUNDPROOF, ABILITY_FILTER, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -4008,8 +3689,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 55, .baseSpDefense = 80, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING }, .catchRate = 45, .expYield = 100, .evYield_Attack = 1, @@ -4017,8 +3697,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_TECHNICIAN, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -4032,8 +3711,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 115, .baseSpDefense = 95, - .type1 = TYPE_ICE, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_ICE, TYPE_PSYCHIC }, .catchRate = 45, .expYield = 159, .evYield_SpAttack = 2, @@ -4041,8 +3719,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_FOREWARN, ABILITY_DRY_SKIN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -4056,8 +3733,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 95, .baseSpDefense = 85, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, .catchRate = 45, .expYield = 172, .evYield_Speed = 2, @@ -4066,8 +3742,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, @@ -4081,8 +3756,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 93, .baseSpAttack = 100, .baseSpDefense = 85, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 45, .expYield = 173, .evYield_SpAttack = 2, @@ -4091,8 +3765,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -4106,8 +3779,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 55, .baseSpDefense = 70, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG }, .catchRate = 45, .expYield = 175, .evYield_Attack = 2, @@ -4115,8 +3787,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_MOLD_BREAKER, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4130,8 +3801,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 40, .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 45, .expYield = 172, .evYield_Attack = 1, @@ -4140,8 +3810,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4155,8 +3824,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 15, .baseSpDefense = 20, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 255, .expYield = 40, .evYield_Speed = 1, @@ -4164,8 +3832,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 5, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -4179,8 +3846,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 81, .baseSpAttack = 60, .baseSpDefense = 100, - .type1 = TYPE_WATER, - .type2 = TYPE_FLYING, + .types = { TYPE_WATER, TYPE_FLYING }, .catchRate = 45, .expYield = 189, .evYield_Attack = 2, @@ -4188,8 +3854,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 5, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_DRAGON}, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4203,8 +3868,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 85, .baseSpDefense = 95, - .type1 = TYPE_WATER, - .type2 = TYPE_ICE, + .types = { TYPE_WATER, TYPE_ICE }, .catchRate = 45, .expYield = 187, .evYield_HP = 2, @@ -4214,8 +3878,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_WATER_ABSORB, ABILITY_SHELL_ARMOR, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4229,8 +3892,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 48, .baseSpAttack = 48, .baseSpDefense = 48, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 35, .expYield = 101, .evYield_HP = 1, @@ -4240,8 +3902,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_DITTO, - .eggGroup2 = EGG_GROUP_DITTO, + .eggGroups = { EGG_GROUP_DITTO, EGG_GROUP_DITTO}, .abilities = {ABILITY_LIMBER, ABILITY_NONE, ABILITY_IMPOSTER}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -4255,8 +3916,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 45, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 45, .expYield = 65, .evYield_SpDefense = 1, @@ -4264,8 +3924,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_ADAPTABILITY, ABILITY_ANTICIPATION}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4280,8 +3939,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 110, .baseSpDefense = 95, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 45, .expYield = 184, .evYield_HP = 2, @@ -4289,8 +3947,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_WATER_ABSORB, ABILITY_WATER_ABSORB, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4304,8 +3961,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 110, .baseSpDefense = 95, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, .catchRate = 45, .expYield = 184, .evYield_Speed = 2, @@ -4313,8 +3969,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_VOLT_ABSORB, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4328,8 +3983,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 95, .baseSpDefense = 110, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 45, .expYield = 184, .evYield_Attack = 2, @@ -4337,8 +3991,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLASH_FIRE, ABILITY_GUTS}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -4352,8 +4005,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 85, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 45, .expYield = 79, .evYield_SpAttack = 1, @@ -4361,8 +4013,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_TRACE, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -4376,8 +4027,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 90, .baseSpDefense = 55, - .type1 = TYPE_ROCK, - .type2 = TYPE_WATER, + .types = { TYPE_ROCK, TYPE_WATER }, .catchRate = 45, .expYield = 71, .evYield_Defense = 1, @@ -4385,8 +4035,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4400,8 +4049,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 115, .baseSpDefense = 70, - .type1 = TYPE_ROCK, - .type2 = TYPE_WATER, + .types = { TYPE_ROCK, TYPE_WATER }, .catchRate = 45, .expYield = 173, .evYield_Defense = 2, @@ -4409,8 +4057,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4424,8 +4071,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 55, .baseSpDefense = 45, - .type1 = TYPE_ROCK, - .type2 = TYPE_WATER, + .types = { TYPE_ROCK, TYPE_WATER }, .catchRate = 45, .expYield = 71, .evYield_Defense = 1, @@ -4433,8 +4079,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4448,8 +4093,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 65, .baseSpDefense = 70, - .type1 = TYPE_ROCK, - .type2 = TYPE_WATER, + .types = { TYPE_ROCK, TYPE_WATER }, .catchRate = 45, .expYield = 173, .evYield_Attack = 2, @@ -4457,8 +4101,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4472,8 +4115,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 60, .baseSpDefense = 75, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, + .types = { TYPE_ROCK, TYPE_FLYING }, .catchRate = 45, .expYield = 180, .evYield_Speed = 2, @@ -4481,8 +4123,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_PRESSURE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -4496,8 +4137,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 65, .baseSpDefense = 110, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 25, .expYield = 189, .evYield_HP = 2, @@ -4507,8 +4147,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_IMMUNITY, ABILITY_THICK_FAT, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -4522,8 +4161,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 95, .baseSpDefense = 125, - .type1 = TYPE_ICE, - .type2 = TYPE_FLYING, + .types = { TYPE_ICE, TYPE_FLYING }, .catchRate = 3, .expYield = 261, .evYield_SpDefense = 3, @@ -4531,8 +4169,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_SNOW_CLOAK}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4547,8 +4184,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 125, .baseSpDefense = 90, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_FLYING, + .types = { TYPE_ELECTRIC, TYPE_FLYING }, .catchRate = 3, .expYield = 261, .evYield_SpAttack = 3, @@ -4556,8 +4192,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, #if P_UPDATED_ABILITIES >= GEN_6 .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_STATIC}, #else @@ -4576,8 +4211,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 125, .baseSpDefense = 85, - .type1 = TYPE_FIRE, - .type2 = TYPE_FLYING, + .types = { TYPE_FIRE, TYPE_FLYING }, .catchRate = 3, .expYield = 261, .evYield_SpAttack = 3, @@ -4585,8 +4219,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FLAME_BODY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4601,8 +4234,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON }, .catchRate = 45, .expYield = 60, .evYield_Attack = 1, @@ -4611,8 +4243,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_MARVEL_SCALE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4626,8 +4257,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 70, .baseSpDefense = 70, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON }, .catchRate = 45, .expYield = 147, .evYield_Attack = 2, @@ -4636,8 +4266,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_MARVEL_SCALE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4651,8 +4280,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FLYING, + .types = { TYPE_DRAGON, TYPE_FLYING }, .catchRate = 45, .expYield = 270, .evYield_Attack = 3, @@ -4661,8 +4289,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_MULTISCALE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4676,8 +4303,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 154, .baseSpDefense = 90, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, .catchRate = 3, .expYield = 306, .evYield_SpAttack = 3, @@ -4685,8 +4311,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -4701,8 +4326,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, .catchRate = 45, .expYield = 270, .evYield_HP = 3, @@ -4712,8 +4336,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -4728,8 +4351,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 49, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS }, .catchRate = 45, .expYield = 64, .evYield_SpDefense = 1, @@ -4737,8 +4359,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -4752,8 +4373,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 63, .baseSpDefense = 80, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS }, .catchRate = 45, .expYield = 142, .evYield_Defense = 1, @@ -4762,8 +4382,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -4777,8 +4396,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 83, .baseSpDefense = 100, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS }, .catchRate = 45, .expYield = 236, .evYield_Defense = 1, @@ -4787,8 +4405,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -4802,8 +4419,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 60, .baseSpDefense = 50, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 45, .expYield = 62, .evYield_Speed = 1, @@ -4811,8 +4427,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_FLASH_FIRE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4826,8 +4441,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 80, .baseSpDefense = 65, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 45, .expYield = 142, .evYield_Speed = 1, @@ -4836,8 +4450,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_FLASH_FIRE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4851,8 +4464,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 109, .baseSpDefense = 85, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 45, .expYield = 240, .evYield_SpAttack = 3, @@ -4860,8 +4472,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_FLASH_FIRE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4875,8 +4486,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 43, .baseSpAttack = 44, .baseSpDefense = 48, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 45, .expYield = 63, .evYield_Attack = 1, @@ -4884,8 +4494,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4899,8 +4508,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 58, .baseSpAttack = 59, .baseSpDefense = 63, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 45, .expYield = 142, .evYield_Attack = 1, @@ -4909,8 +4517,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -4924,8 +4531,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 78, .baseSpAttack = 79, .baseSpDefense = 83, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 45, .expYield = 239, .evYield_Attack = 2, @@ -4934,8 +4540,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4949,8 +4554,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 35, .baseSpDefense = 45, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 255, .expYield = 43, .evYield_Attack = 1, @@ -4958,8 +4562,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE, ABILITY_FRISK}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4973,8 +4576,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 45, .baseSpDefense = 55, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 90, .expYield = 145, .evYield_Speed = 2, @@ -4982,8 +4584,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE, ABILITY_FRISK}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4997,8 +4598,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 36, .baseSpDefense = 56, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING }, .catchRate = 255, .expYield = 52, .evYield_HP = 1, @@ -5006,8 +4606,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE, ABILITY_TINTED_LENS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -5025,8 +4624,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpAttack = 76, #endif - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 90, .expYield = 158, .evYield_HP = 2, @@ -5034,8 +4632,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE, ABILITY_TINTED_LENS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -5049,8 +4646,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 40, .baseSpDefense = 80, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING }, .catchRate = 255, .expYield = 53, .evYield_SpDefense = 1, @@ -5058,8 +4654,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -5073,8 +4668,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 55, .baseSpDefense = 110, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING }, .catchRate = 90, .expYield = 137, .evYield_SpDefense = 2, @@ -5082,8 +4676,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -5097,8 +4690,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = { TYPE_BUG, TYPE_POISON }, .catchRate = 255, .expYield = 50, .evYield_Attack = 1, @@ -5106,8 +4698,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5125,8 +4716,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpDefense = 60, #endif - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = { TYPE_BUG, TYPE_POISON}, .catchRate = 90, .expYield = 140, .evYield_Attack = 2, @@ -5134,8 +4724,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -5149,8 +4738,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 70, .baseSpDefense = 80, - .type1 = TYPE_POISON, - .type2 = TYPE_FLYING, + .types = { TYPE_POISON, TYPE_FLYING }, .catchRate = 90, .expYield = 241, .evYield_Speed = 3, @@ -5158,8 +4746,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -5173,8 +4760,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 67, .baseSpAttack = 56, .baseSpDefense = 56, - .type1 = TYPE_WATER, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_WATER, TYPE_ELECTRIC }, .catchRate = 190, .expYield = 66, .evYield_HP = 1, @@ -5183,8 +4769,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5198,8 +4783,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 67, .baseSpAttack = 76, .baseSpDefense = 76, - .type1 = TYPE_WATER, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_WATER, TYPE_ELECTRIC }, .catchRate = 75, .expYield = 161, .evYield_HP = 2, @@ -5208,14 +4792,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, - [SPECIES_PICHU] = PICHU_BASE_STATS(FLIP), + [SPECIES_PICHU] = PICHU_SPECIES_INFO(FLIP), [SPECIES_CLEFFA] = { @@ -5226,11 +4809,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 45, .baseSpDefense = 55, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, #else - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, #endif .catchRate = 150, .expYield = 44, @@ -5240,8 +4821,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, @@ -5256,11 +4836,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 40, .baseSpDefense = 20, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_NORMAL, - .type2 = TYPE_FAIRY, + .types = { TYPE_NORMAL, TYPE_FAIRY}, #else - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, #endif .catchRate = 170, .expYield = 42, @@ -5269,8 +4847,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, @@ -5285,11 +4862,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 40, .baseSpDefense = 65, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, #else - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, #endif .catchRate = 190, .expYield = 49, @@ -5298,8 +4873,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -5314,11 +4888,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 80, .baseSpDefense = 105, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_FAIRY, - .type2 = TYPE_FLYING, + .types = { TYPE_FAIRY, TYPE_FLYING}, #else - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, #endif .catchRate = 75, .expYield = 142, @@ -5327,8 +4899,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -5342,8 +4913,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 70, .baseSpDefense = 45, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FLYING, + .types = { TYPE_PSYCHIC, TYPE_FLYING }, .catchRate = 190, .expYield = 64, .evYield_SpAttack = 1, @@ -5351,8 +4921,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5366,8 +4935,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 95, .baseSpDefense = 70, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FLYING, + .types = { TYPE_PSYCHIC, TYPE_FLYING }, .catchRate = 75, .expYield = 165, .evYield_Speed = 1, @@ -5376,8 +4944,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5391,8 +4958,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 65, .baseSpDefense = 45, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, .catchRate = 235, .expYield = 56, .evYield_SpAttack = 1, @@ -5400,8 +4966,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_PLUS}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -5415,8 +4980,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 80, .baseSpDefense = 60, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, .catchRate = 120, .expYield = 128, .evYield_SpAttack = 2, @@ -5424,8 +4988,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_PLUS}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -5443,8 +5006,7 @@ const struct BaseStats gBaseStats[] = #else .baseDefense = 75, #endif - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 230, .evYield_SpAttack = 3, @@ -5452,8 +5014,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_PLUS}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -5471,8 +5032,7 @@ const struct BaseStats gBaseStats[] = #else .baseDefense = 85, #endif - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 221, .evYield_SpDefense = 3, @@ -5481,8 +5041,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HEALER}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5497,11 +5056,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 20, .baseSpDefense = 50, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_WATER, - .type2 = TYPE_FAIRY, + .types = { TYPE_WATER, TYPE_FAIRY}, #else - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, #endif .catchRate = 190, .expYield = 88, @@ -5510,8 +5067,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FAIRY}, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5530,11 +5086,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 50, #endif #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_WATER, - .type2 = TYPE_FAIRY, + .types = { TYPE_WATER, TYPE_FAIRY}, #else - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, #endif .catchRate = 75, .expYield = 189, @@ -5543,8 +5097,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FAIRY}, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5558,8 +5111,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 30, .baseSpDefense = 65, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK }, .catchRate = 65, .expYield = 144, .evYield_Defense = 2, @@ -5567,8 +5119,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -5582,8 +5133,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 90, .baseSpDefense = 100, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 45, .expYield = 225, .evYield_SpDefense = 3, @@ -5592,8 +5142,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP, ABILITY_DRIZZLE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -5607,8 +5156,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 35, .baseSpDefense = 55, - .type1 = TYPE_GRASS, - .type2 = TYPE_FLYING, + .types = { TYPE_GRASS, TYPE_FLYING }, .catchRate = 255, .expYield = 50, .evYield_SpDefense = 1, @@ -5616,8 +5164,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -5631,8 +5178,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 45, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_FLYING, + .types = { TYPE_GRASS, TYPE_FLYING }, .catchRate = 120, .expYield = 119, .evYield_Speed = 2, @@ -5640,8 +5186,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5659,8 +5204,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpDefense = 85, #endif - .type1 = TYPE_GRASS, - .type2 = TYPE_FLYING, + .types = { TYPE_GRASS, TYPE_FLYING}, .catchRate = 45, .expYield = 207, .evYield_Speed = 3, @@ -5668,8 +5212,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5683,8 +5226,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 40, .baseSpDefense = 55, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 45, .expYield = 72, .evYield_Speed = 1, @@ -5692,8 +5234,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_PICKUP, ABILITY_SKILL_LINK}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -5707,8 +5248,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS }, .catchRate = 235, .expYield = 36, .evYield_SpAttack = 1, @@ -5716,8 +5256,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_EARLY_BIRD}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -5731,8 +5270,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 105, .baseSpDefense = 85, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS }, .catchRate = 120, .expYield = 149, .evYield_SpAttack = 2, @@ -5740,8 +5278,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_EARLY_BIRD}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -5755,8 +5292,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 75, .baseSpDefense = 45, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING }, .catchRate = 75, .expYield = 78, .evYield_Speed = 1, @@ -5765,8 +5301,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SPEED_BOOST, ABILITY_COMPOUND_EYES, ABILITY_FRISK}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -5780,8 +5315,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = { TYPE_WATER, TYPE_GROUND }, .catchRate = 255, .expYield = 42, .evYield_HP = 1, @@ -5789,8 +5323,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB, ABILITY_UNAWARE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5804,8 +5337,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = { TYPE_WATER, TYPE_GROUND }, .catchRate = 90, .expYield = 151, .evYield_HP = 2, @@ -5813,8 +5345,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB, ABILITY_UNAWARE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5828,8 +5359,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 130, .baseSpDefense = 95, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, .catchRate = 45, .expYield = 184, .evYield_SpAttack = 2, @@ -5837,8 +5367,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_SYNCHRONIZE, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -5852,8 +5381,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 60, .baseSpDefense = 130, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK }, .catchRate = 45, .expYield = 184, .evYield_SpDefense = 2, @@ -5861,8 +5389,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -5876,8 +5403,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 91, .baseSpAttack = 85, .baseSpDefense = 42, - .type1 = TYPE_DARK, - .type2 = TYPE_FLYING, + .types = { TYPE_DARK, TYPE_FLYING }, .catchRate = 30, .expYield = 81, .evYield_Speed = 1, @@ -5885,8 +5411,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_INSOMNIA, ABILITY_SUPER_LUCK, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -5900,8 +5425,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 100, .baseSpDefense = 110, - .type1 = TYPE_WATER, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_WATER, TYPE_PSYCHIC }, .catchRate = 70, .expYield = 172, .evYield_SpDefense = 3, @@ -5910,8 +5434,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -5925,8 +5448,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 85, .baseSpDefense = 85, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST }, .catchRate = 45, .expYield = 87, .evYield_SpDefense = 1, @@ -5934,14 +5456,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, - [SPECIES_UNOWN] = UNOWN_BASE_STATS(FLIP), + [SPECIES_UNOWN] = UNOWN_SPECIES_INFO(FLIP), [SPECIES_WOBBUFFET] = { @@ -5951,8 +5472,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 33, .baseSpAttack = 33, .baseSpDefense = 58, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, .catchRate = 45, .expYield = 142, .evYield_HP = 2, @@ -5960,8 +5480,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5975,8 +5494,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 90, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_NORMAL, TYPE_PSYCHIC }, .catchRate = 60, .expYield = 159, .evYield_SpAttack = 2, @@ -5984,8 +5502,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_EARLY_BIRD, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -5999,8 +5516,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG }, .catchRate = 190, .expYield = 58, .evYield_Defense = 1, @@ -6008,8 +5524,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_STURDY, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6023,8 +5538,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, + .types = { TYPE_BUG, TYPE_STEEL }, .catchRate = 75, .expYield = 163, .evYield_Defense = 2, @@ -6032,8 +5546,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_STURDY, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6047,8 +5560,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 190, .expYield = 145, .evYield_HP = 1, @@ -6056,8 +5568,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -6071,8 +5582,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 35, .baseSpDefense = 65, - .type1 = TYPE_GROUND, - .type2 = TYPE_FLYING, + .types = { TYPE_GROUND, TYPE_FLYING }, .catchRate = 60, .expYield = 86, .evYield_Defense = 1, @@ -6080,8 +5590,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL, ABILITY_IMMUNITY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6095,8 +5604,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 55, .baseSpDefense = 65, - .type1 = TYPE_STEEL, - .type2 = TYPE_GROUND, + .types = { TYPE_STEEL, TYPE_GROUND }, .catchRate = 25, .expYield = 179, .evYield_Defense = 2, @@ -6105,8 +5613,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6121,11 +5628,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 40, .baseSpDefense = 40, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, #else - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, #endif .catchRate = 190, .expYield = 60, @@ -6134,8 +5639,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, .abilities = {ABILITY_INTIMIDATE, ABILITY_RUN_AWAY, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -6150,11 +5654,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 60, .baseSpDefense = 60, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, #else - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, #endif .catchRate = 75, .expYield = 158, @@ -6163,8 +5665,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, .abilities = {ABILITY_INTIMIDATE, ABILITY_QUICK_FEET, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6182,8 +5683,7 @@ const struct BaseStats gBaseStats[] = #else .baseDefense = 75, #endif - .type1 = TYPE_WATER, - .type2 = TYPE_POISON, + .types = { TYPE_WATER, TYPE_POISON}, .catchRate = 45, .expYield = 88, .evYield_Attack = 1, @@ -6192,8 +5692,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM, ABILITY_INTIMIDATE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6207,8 +5706,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 55, .baseSpDefense = 80, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, + .types = { TYPE_BUG, TYPE_STEEL }, .catchRate = 25, .expYield = 175, .evYield_Attack = 2, @@ -6216,8 +5714,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_TECHNICIAN, ABILITY_LIGHT_METAL}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -6231,8 +5728,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 5, .baseSpAttack = 10, .baseSpDefense = 230, - .type1 = TYPE_BUG, - .type2 = TYPE_ROCK, + .types = { TYPE_BUG, TYPE_ROCK }, .catchRate = 190, .expYield = 177, .evYield_Defense = 1, @@ -6243,8 +5739,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_STURDY, ABILITY_GLUTTONY, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -6258,8 +5753,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 40, .baseSpDefense = 95, - .type1 = TYPE_BUG, - .type2 = TYPE_FIGHTING, + .types = { TYPE_BUG, TYPE_FIGHTING }, .catchRate = 45, .expYield = 175, .evYield_Attack = 2, @@ -6267,8 +5761,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_GUTS, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6282,8 +5775,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 35, .baseSpDefense = 75, - .type1 = TYPE_DARK, - .type2 = TYPE_ICE, + .types = { TYPE_DARK, TYPE_ICE }, .catchRate = 60, .expYield = 86, .evYield_Speed = 1, @@ -6292,8 +5784,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, @@ -6307,8 +5798,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 120, .expYield = 66, .evYield_Attack = 1, @@ -6316,8 +5806,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PICKUP, ABILITY_QUICK_FEET, ABILITY_HONEY_GATHER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -6331,8 +5820,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 75, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 60, .expYield = 175, .evYield_Attack = 2, @@ -6340,8 +5828,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GUTS, ABILITY_QUICK_FEET, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -6355,8 +5842,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 70, .baseSpDefense = 40, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 190, .expYield = 50, .evYield_SpAttack = 1, @@ -6364,8 +5850,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -6384,8 +5869,7 @@ const struct BaseStats gBaseStats[] = .baseHP = 50, .baseSpAttack = 80, #endif - .type1 = TYPE_FIRE, - .type2 = TYPE_ROCK, + .types = { TYPE_FIRE, TYPE_ROCK}, .catchRate = 75, .expYield = 151, .evYield_Defense = 2, @@ -6393,8 +5877,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, @@ -6408,8 +5891,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_ICE, - .type2 = TYPE_GROUND, + .types = { TYPE_ICE, TYPE_GROUND }, .catchRate = 225, .expYield = 50, .evYield_Attack = 1, @@ -6417,8 +5899,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -6432,8 +5913,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_ICE, - .type2 = TYPE_GROUND, + .types = { TYPE_ICE, TYPE_GROUND }, .catchRate = 75, .expYield = 158, .evYield_HP = 1, @@ -6442,8 +5922,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -6463,8 +5942,7 @@ const struct BaseStats gBaseStats[] = .baseDefense = 85, .baseSpDefense = 85, #endif - .type1 = TYPE_WATER, - .type2 = TYPE_ROCK, + .types = { TYPE_WATER, TYPE_ROCK}, .catchRate = 60, .expYield = 144, .evYield_Defense = 1, @@ -6474,8 +5952,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_HUSTLE, ABILITY_NATURAL_CURE, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -6489,8 +5966,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 65, .baseSpDefense = 35, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 190, .expYield = 60, .evYield_SpAttack = 1, @@ -6498,8 +5974,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2}, .abilities = {ABILITY_HUSTLE, ABILITY_SNIPER, ABILITY_MOODY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6513,8 +5988,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 105, .baseSpDefense = 75, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 75, .expYield = 168, .evYield_Attack = 1, @@ -6523,8 +5997,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2}, .abilities = {ABILITY_SUCTION_CUPS, ABILITY_SNIPER, ABILITY_MOODY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -6538,8 +6011,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 65, .baseSpDefense = 45, - .type1 = TYPE_ICE, - .type2 = TYPE_FLYING, + .types = { TYPE_ICE, TYPE_FLYING }, .catchRate = 45, .expYield = 116, .evYield_Speed = 1, @@ -6547,8 +6019,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_HUSTLE, ABILITY_INSOMNIA}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -6566,8 +6037,7 @@ const struct BaseStats gBaseStats[] = #else .baseHP = 65, #endif - .type1 = TYPE_WATER, - .type2 = TYPE_FLYING, + .types = { TYPE_WATER, TYPE_FLYING}, .catchRate = 25, .expYield = 170, .evYield_SpDefense = 2, @@ -6575,8 +6045,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_ABSORB, ABILITY_WATER_VEIL}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6590,8 +6059,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 40, .baseSpDefense = 70, - .type1 = TYPE_STEEL, - .type2 = TYPE_FLYING, + .types = { TYPE_STEEL, TYPE_FLYING }, .catchRate = 25, .expYield = 163, .evYield_Defense = 2, @@ -6600,8 +6068,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_STURDY, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6615,8 +6082,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 80, .baseSpDefense = 50, - .type1 = TYPE_DARK, - .type2 = TYPE_FIRE, + .types = { TYPE_DARK, TYPE_FIRE }, .catchRate = 120, .expYield = 66, .evYield_SpAttack = 1, @@ -6624,8 +6090,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -6639,8 +6104,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 110, .baseSpDefense = 80, - .type1 = TYPE_DARK, - .type2 = TYPE_FIRE, + .types = { TYPE_DARK, TYPE_FIRE }, .catchRate = 45, .expYield = 175, .evYield_SpAttack = 2, @@ -6648,8 +6112,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -6663,8 +6126,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 95, .baseSpDefense = 95, - .type1 = TYPE_WATER, - .type2 = TYPE_DRAGON, + .types = { TYPE_WATER, TYPE_DRAGON }, .catchRate = 45, .expYield = 243, .evYield_Attack = 1, @@ -6675,8 +6137,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SNIPER, ABILITY_DAMP}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6690,8 +6151,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND }, .catchRate = 120, .expYield = 66, .evYield_HP = 1, @@ -6699,8 +6159,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PICKUP, ABILITY_NONE, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6714,8 +6173,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND }, .catchRate = 60, .expYield = 175, .evYield_Attack = 1, @@ -6724,8 +6182,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_STURDY, ABILITY_NONE, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6739,8 +6196,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 105, .baseSpDefense = 95, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 45, .expYield = 180, .evYield_SpAttack = 2, @@ -6748,8 +6204,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_TRACE, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -6763,8 +6218,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 85, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 45, .expYield = 163, .evYield_Attack = 1, @@ -6772,8 +6226,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_FRISK, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -6787,8 +6240,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 20, .baseSpDefense = 45, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 45, .expYield = 88, .evYield_Speed = 1, @@ -6796,8 +6248,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_OWN_TEMPO, ABILITY_TECHNICIAN, ABILITY_MOODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -6811,8 +6262,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING }, .catchRate = 75, .expYield = 42, .evYield_Attack = 1, @@ -6820,8 +6270,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_GUTS, ABILITY_STEADFAST, ABILITY_VITAL_SPIRIT}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6835,8 +6284,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 35, .baseSpDefense = 110, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING }, .catchRate = 45, .expYield = 159, .evYield_SpDefense = 2, @@ -6844,8 +6292,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_INTIMIDATE, ABILITY_TECHNICIAN, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -6859,8 +6306,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 85, .baseSpDefense = 65, - .type1 = TYPE_ICE, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_ICE, TYPE_PSYCHIC }, .catchRate = 45, .expYield = 61, .evYield_SpAttack = 1, @@ -6868,8 +6314,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_FOREWARN, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -6883,8 +6328,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 65, .baseSpDefense = 55, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, .catchRate = 45, .expYield = 72, .evYield_Speed = 1, @@ -6893,8 +6337,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, @@ -6908,8 +6351,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 83, .baseSpAttack = 70, .baseSpDefense = 55, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 45, .expYield = 73, .evYield_Speed = 1, @@ -6918,8 +6360,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, @@ -6933,8 +6374,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 40, .baseSpDefense = 70, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 45, .expYield = 172, .evYield_Defense = 2, @@ -6944,8 +6384,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_THICK_FAT, ABILITY_SCRAPPY, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -6959,8 +6398,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 75, .baseSpDefense = 135, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 30, .expYield = 608, .evYield_HP = 3, @@ -6969,8 +6407,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_HEALER}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -6984,8 +6421,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 115, .baseSpDefense = 100, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC }, .catchRate = 3, .expYield = 261, .evYield_Speed = 2, @@ -6994,8 +6430,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, #if P_UPDATED_ABILITIES >= GEN_7 .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_INNER_FOCUS}, #else @@ -7014,8 +6449,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 90, .baseSpDefense = 75, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 3, .expYield = 261, .evYield_HP = 1, @@ -7024,8 +6458,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, #if P_UPDATED_ABILITIES >= GEN_7 .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_INNER_FOCUS}, #else @@ -7044,8 +6477,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 90, .baseSpDefense = 115, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 3, .expYield = 261, .evYield_Defense = 1, @@ -7054,8 +6486,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, #if P_UPDATED_ABILITIES >= GEN_7 .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_INNER_FOCUS}, #else @@ -7074,8 +6505,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 41, .baseSpAttack = 45, .baseSpDefense = 50, - .type1 = TYPE_ROCK, - .type2 = TYPE_GROUND, + .types = { TYPE_ROCK, TYPE_GROUND }, .catchRate = 45, .expYield = 60, .evYield_Attack = 1, @@ -7083,8 +6513,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_GUTS, ABILITY_NONE, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7098,8 +6527,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 51, .baseSpAttack = 65, .baseSpDefense = 70, - .type1 = TYPE_ROCK, - .type2 = TYPE_GROUND, + .types = { TYPE_ROCK, TYPE_GROUND }, .catchRate = 45, .expYield = 144, .evYield_Attack = 2, @@ -7107,8 +6535,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -7122,8 +6549,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 61, .baseSpAttack = 95, .baseSpDefense = 100, - .type1 = TYPE_ROCK, - .type2 = TYPE_DARK, + .types = { TYPE_ROCK, TYPE_DARK }, .catchRate = 45, .expYield = 270, .evYield_Attack = 3, @@ -7131,8 +6557,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7146,8 +6571,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 90, .baseSpDefense = 154, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FLYING, + .types = { TYPE_PSYCHIC, TYPE_FLYING }, .catchRate = 3, .expYield = 306, .evYield_SpDefense = 3, @@ -7155,8 +6579,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_MULTISCALE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -7171,8 +6594,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 110, .baseSpDefense = 154, - .type1 = TYPE_FIRE, - .type2 = TYPE_FLYING, + .types = { TYPE_FIRE, TYPE_FLYING }, .catchRate = 3, .expYield = 306, .evYield_SpDefense = 3, @@ -7182,8 +6604,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7198,8 +6619,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_GRASS, + .types = { TYPE_PSYCHIC, TYPE_GRASS }, .catchRate = 45, .expYield = 270, .evYield_HP = 3, @@ -7209,8 +6629,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7225,8 +6644,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 65, .baseSpDefense = 55, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS }, .catchRate = 45, .expYield = 62, .evYield_Speed = 1, @@ -7234,8 +6652,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7249,8 +6666,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 85, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS }, .catchRate = 45, .expYield = 142, .evYield_Speed = 2, @@ -7258,8 +6674,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7273,8 +6688,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 120, .baseSpAttack = 105, .baseSpDefense = 85, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS }, .catchRate = 45, .expYield = 239, .evYield_Speed = 3, @@ -7282,8 +6696,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7297,8 +6710,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 70, .baseSpDefense = 50, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE }, .catchRate = 45, .expYield = 62, .evYield_SpAttack = 1, @@ -7306,8 +6718,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SPEED_BOOST}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7321,8 +6732,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 85, .baseSpDefense = 60, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIRE, TYPE_FIGHTING }, .catchRate = 45, .expYield = 142, .evYield_Attack = 1, @@ -7331,8 +6741,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SPEED_BOOST}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7346,8 +6755,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 110, .baseSpDefense = 70, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIRE, TYPE_FIGHTING }, .catchRate = 45, .expYield = 239, .evYield_Attack = 3, @@ -7355,8 +6763,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_SPEED_BOOST}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7370,8 +6777,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER }, .catchRate = 45, .expYield = 62, .evYield_Attack = 1, @@ -7379,8 +6785,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DAMP}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -7394,8 +6799,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 70, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = { TYPE_WATER, TYPE_GROUND }, .catchRate = 45, .expYield = 142, .evYield_Attack = 2, @@ -7403,8 +6807,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DAMP}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -7418,8 +6821,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 85, .baseSpDefense = 90, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = { TYPE_WATER, TYPE_GROUND }, .catchRate = 45, .expYield = 241, .evYield_Attack = 3, @@ -7427,8 +6829,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DAMP}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -7442,8 +6843,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK }, .catchRate = 255, .expYield = 56, .evYield_Attack = 1, @@ -7451,8 +6851,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_QUICK_FEET, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -7466,8 +6865,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK }, .catchRate = 127, .expYield = 147, .evYield_Attack = 2, @@ -7475,8 +6873,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_QUICK_FEET, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -7490,8 +6887,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 30, .baseSpDefense = 41, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 255, .expYield = 56, .evYield_Speed = 1, @@ -7501,8 +6897,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -7516,8 +6911,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 50, .baseSpDefense = 61, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 90, .expYield = 147, .evYield_Speed = 2, @@ -7527,8 +6921,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -7542,8 +6935,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 20, .baseSpDefense = 30, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG }, .catchRate = 255, .expYield = 56, .evYield_HP = 1, @@ -7553,8 +6945,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE, ABILITY_RUN_AWAY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7568,8 +6959,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG }, .catchRate = 120, .expYield = 72, .evYield_Defense = 2, @@ -7577,8 +6967,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -7596,8 +6985,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpAttack = 90, #endif - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING}, .catchRate = 45, .expYield = 178, .evYield_SpAttack = 3, @@ -7606,8 +6994,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_RIVALRY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -7621,8 +7008,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG }, .catchRate = 120, .expYield = 72, .evYield_Defense = 2, @@ -7630,8 +7016,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -7645,8 +7030,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 50, .baseSpDefense = 90, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = { TYPE_BUG, TYPE_POISON }, .catchRate = 45, .expYield = 173, .evYield_SpDefense = 3, @@ -7655,8 +7039,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE, ABILITY_COMPOUND_EYES}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7670,8 +7053,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_GRASS, + .types = { TYPE_WATER, TYPE_GRASS }, .catchRate = 255, .expYield = 44, .evYield_SpDefense = 1, @@ -7680,8 +7062,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_GRASS}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH, ABILITY_OWN_TEMPO}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7695,8 +7076,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 70, - .type1 = TYPE_WATER, - .type2 = TYPE_GRASS, + .types = { TYPE_WATER, TYPE_GRASS }, .catchRate = 120, .expYield = 119, .evYield_SpDefense = 2, @@ -7705,8 +7085,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_GRASS}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH, ABILITY_OWN_TEMPO}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7720,8 +7099,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 90, .baseSpDefense = 100, - .type1 = TYPE_WATER, - .type2 = TYPE_GRASS, + .types = { TYPE_WATER, TYPE_GRASS }, .catchRate = 45, .expYield = 216, .evYield_SpDefense = 3, @@ -7730,8 +7108,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_GRASS}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH, ABILITY_OWN_TEMPO}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -7745,8 +7122,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS }, .catchRate = 255, .expYield = 44, .evYield_Defense = 1, @@ -7755,8 +7131,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -7770,8 +7145,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 60, .baseSpDefense = 40, - .type1 = TYPE_GRASS, - .type2 = TYPE_DARK, + .types = { TYPE_GRASS, TYPE_DARK }, .catchRate = 120, .expYield = 119, .evYield_Attack = 2, @@ -7780,8 +7154,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -7795,8 +7168,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 90, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_DARK, + .types = { TYPE_GRASS, TYPE_DARK }, .catchRate = 45, .expYield = 216, .evYield_Attack = 3, @@ -7805,8 +7177,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -7820,8 +7191,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING }, .catchRate = 200, .expYield = 54, .evYield_Speed = 1, @@ -7829,8 +7199,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_GUTS, ABILITY_NONE, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -7848,8 +7217,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpAttack = 50, #endif - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 159, .evYield_Speed = 2, @@ -7857,8 +7225,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_GUTS, ABILITY_NONE, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -7872,8 +7239,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 55, .baseSpDefense = 30, - .type1 = TYPE_WATER, - .type2 = TYPE_FLYING, + .types = { TYPE_WATER, TYPE_FLYING}, .catchRate = 190, .expYield = 54, .evYield_Speed = 1, @@ -7882,8 +7248,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_HYDRATION, ABILITY_RAIN_DISH}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -7901,8 +7266,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpAttack = 85, #endif - .type1 = TYPE_WATER, - .type2 = TYPE_FLYING, + .types = { TYPE_WATER, TYPE_FLYING}, .catchRate = 45, .expYield = 154, .evYield_Defense = 2, @@ -7911,8 +7275,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_DRIZZLE, ABILITY_RAIN_DISH}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -7927,11 +7290,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 45, .baseSpDefense = 35, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FAIRY, + .types = { TYPE_PSYCHIC, TYPE_FAIRY}, #else - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, #endif .catchRate = 235, .expYield = 40, @@ -7941,11 +7302,10 @@ const struct BaseStats gBaseStats[] = .friendship = 35, .growthRate = GROWTH_SLOW, #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_AMORPHOUS}, #else - .eggGroup1 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, #endif - .eggGroup2 = EGG_GROUP_AMORPHOUS, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -7960,11 +7320,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 65, .baseSpDefense = 55, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FAIRY, + .types = { TYPE_PSYCHIC, TYPE_FAIRY}, #else - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, #endif .catchRate = 120, .expYield = 97, @@ -7974,11 +7332,10 @@ const struct BaseStats gBaseStats[] = .friendship = 35, .growthRate = GROWTH_SLOW, #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_AMORPHOUS}, #else - .eggGroup1 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, #endif - .eggGroup2 = EGG_GROUP_AMORPHOUS, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -7993,11 +7350,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 125, .baseSpDefense = 115, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FAIRY, + .types = { TYPE_PSYCHIC, TYPE_FAIRY}, #else - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, #endif .catchRate = 45, .expYield = 233, @@ -8007,11 +7362,10 @@ const struct BaseStats gBaseStats[] = .friendship = 35, .growthRate = GROWTH_SLOW, #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_AMORPHOUS}, #else - .eggGroup1 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, #endif - .eggGroup2 = EGG_GROUP_AMORPHOUS, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -8025,8 +7379,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 50, .baseSpDefense = 52, - .type1 = TYPE_BUG, - .type2 = TYPE_WATER, + .types = { TYPE_BUG, TYPE_WATER}, .catchRate = 200, .expYield = 54, .evYield_Speed = 1, @@ -8035,8 +7388,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_BUG}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_RAIN_DISH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8055,8 +7407,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 80, #endif - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING}, .catchRate = 75, .expYield = 159, .evYield_SpAttack = 1, @@ -8066,8 +7417,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_BUG}, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8081,8 +7431,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 40, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS }, .catchRate = 255, .expYield = 59, .evYield_HP = 1, @@ -8092,8 +7441,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_POISON_HEAL, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8107,8 +7455,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_FIGHTING, + .types = { TYPE_GRASS, TYPE_FIGHTING }, .catchRate = 90, .expYield = 161, .evYield_Attack = 2, @@ -8118,8 +7465,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_POISON_HEAL, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8133,8 +7479,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 255, .expYield = 56, .evYield_HP = 1, @@ -8142,8 +7487,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_TRUANT, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8157,8 +7501,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 120, .expYield = 154, .evYield_Speed = 2, @@ -8166,8 +7509,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -8181,8 +7523,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 95, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 45, .expYield = 252, .evYield_HP = 3, @@ -8190,8 +7531,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_TRUANT, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8205,8 +7545,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_BUG, - .type2 = TYPE_GROUND, + .types = { TYPE_BUG, TYPE_GROUND}, .catchRate = 255, .expYield = 53, .evYield_Defense = 1, @@ -8215,8 +7554,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE, ABILITY_RUN_AWAY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8230,8 +7568,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 160, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING}, .catchRate = 120, .expYield = 160, .evYield_Speed = 2, @@ -8239,8 +7576,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SPEED_BOOST, ABILITY_NONE, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -8254,8 +7590,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_BUG, - .type2 = TYPE_GHOST, + .types = { TYPE_BUG, TYPE_GHOST}, .catchRate = 45, .expYield = 83, .evYield_HP = 2, @@ -8263,8 +7598,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_WONDER_GUARD, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8278,8 +7612,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 28, .baseSpAttack = 51, .baseSpDefense = 23, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 190, .expYield = 48, .evYield_HP = 1, @@ -8287,8 +7620,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -8302,8 +7634,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 48, .baseSpAttack = 71, .baseSpDefense = 43, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL }, .catchRate = 120, .expYield = 126, .evYield_HP = 2, @@ -8311,8 +7642,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8330,8 +7660,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpDefense = 63, #endif - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 221, .evYield_HP = 3, @@ -8339,8 +7668,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8354,8 +7682,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 20, .baseSpDefense = 30, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 180, .expYield = 47, .evYield_HP = 1, @@ -8364,8 +7691,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -8379,8 +7705,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 40, .baseSpDefense = 60, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 200, .expYield = 166, .evYield_HP = 2, @@ -8389,8 +7714,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8405,11 +7729,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 20, .baseSpDefense = 40, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_NORMAL, - .type2 = TYPE_FAIRY, + .types = { TYPE_NORMAL, TYPE_FAIRY}, #else - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, #endif .catchRate = 150, .expYield = 38, @@ -8418,8 +7740,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8433,8 +7754,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 45, .baseSpDefense = 90, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 255, .expYield = 75, .evYield_Defense = 1, @@ -8443,8 +7763,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8458,8 +7777,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 52, .evYield_Speed = 1, @@ -8467,8 +7785,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NORMALIZE, ABILITY_WONDER_SKIN}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -8486,8 +7803,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpeed = 70, #endif - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 60, .expYield = 140, .evYield_HP = 1, @@ -8496,8 +7812,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NORMALIZE, ABILITY_WONDER_SKIN}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -8511,8 +7826,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_DARK, - .type2 = TYPE_GHOST, + .types = { TYPE_DARK, TYPE_GHOST}, .catchRate = 45, .expYield = 133, .evYield_Attack = 1, @@ -8522,8 +7836,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_KEEN_EYE, ABILITY_STALL, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -8538,11 +7851,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 55, .baseSpDefense = 55, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_STEEL, - .type2 = TYPE_FAIRY, + .types = { TYPE_STEEL, TYPE_FAIRY}, #else - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = { TYPE_STEEL, TYPE_STEEL}, #endif .catchRate = 45, .expYield = 133, @@ -8553,8 +7864,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_INTIMIDATE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -8568,8 +7878,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_STEEL, - .type2 = TYPE_ROCK, + .types = { TYPE_STEEL, TYPE_ROCK }, .catchRate = 180, .expYield = 66, .evYield_Defense = 1, @@ -8578,8 +7887,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8593,8 +7901,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_STEEL, - .type2 = TYPE_ROCK, + .types = { TYPE_STEEL, TYPE_ROCK }, .catchRate = 90, .expYield = 151, .evYield_Defense = 2, @@ -8603,8 +7910,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8618,8 +7924,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_STEEL, - .type2 = TYPE_ROCK, + .types = { TYPE_STEEL, TYPE_ROCK }, .catchRate = 45, .expYield = 239, .evYield_Defense = 3, @@ -8628,8 +7933,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8643,8 +7947,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 40, .baseSpDefense = 55, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_FIGHTING, TYPE_PSYCHIC}, .catchRate = 180, .expYield = 56, .evYield_Speed = 1, @@ -8652,8 +7955,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_PURE_POWER, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8667,8 +7969,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 60, .baseSpDefense = 75, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_FIGHTING, TYPE_PSYCHIC}, .catchRate = 90, .expYield = 144, .evYield_Speed = 2, @@ -8676,8 +7977,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_PURE_POWER, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -8691,8 +7991,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 65, .baseSpDefense = 40, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 120, .expYield = 59, .evYield_Speed = 1, @@ -8700,8 +7999,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD, ABILITY_MINUS}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8715,8 +8013,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 105, .baseSpDefense = 60, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 166, .evYield_Speed = 2, @@ -8724,8 +8021,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD, ABILITY_MINUS}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -8739,8 +8035,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 85, .baseSpDefense = 75, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 200, .expYield = 142, .evYield_Speed = 1, @@ -8749,8 +8044,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_PLUS, ABILITY_NONE, ABILITY_LIGHTNING_ROD}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -8764,8 +8058,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 75, .baseSpDefense = 85, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 200, .expYield = 142, .evYield_Speed = 1, @@ -8774,8 +8067,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_MINUS, ABILITY_NONE, ABILITY_VOLT_ABSORB}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -8794,8 +8086,7 @@ const struct BaseStats gBaseStats[] = .baseDefense = 55, .baseSpDefense = 75, #endif - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG}, .catchRate = 150, .expYield = 151, .evYield_Speed = 1, @@ -8804,8 +8095,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_ILLUMINATE, ABILITY_SWARM, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8824,8 +8114,7 @@ const struct BaseStats gBaseStats[] = .baseDefense = 55, .baseSpDefense = 75, #endif - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG}, .catchRate = 150, .expYield = 151, .evYield_Speed = 1, @@ -8834,8 +8123,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_TINTED_LENS, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -8849,8 +8137,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 100, .baseSpDefense = 80, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON}, .catchRate = 150, .expYield = 140, .evYield_SpAttack = 2, @@ -8859,8 +8146,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -8874,8 +8160,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 43, .baseSpDefense = 53, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON}, .catchRate = 225, .expYield = 60, .evYield_HP = 1, @@ -8885,8 +8170,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8900,8 +8184,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 73, .baseSpDefense = 83, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON}, .catchRate = 75, .expYield = 163, .evYield_HP = 2, @@ -8911,8 +8194,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -8926,8 +8208,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 65, .baseSpDefense = 20, - .type1 = TYPE_WATER, - .type2 = TYPE_DARK, + .types = { TYPE_WATER, TYPE_DARK}, .catchRate = 225, .expYield = 61, .evYield_Attack = 1, @@ -8936,8 +8217,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_ROUGH_SKIN, ABILITY_NONE, ABILITY_SPEED_BOOST}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -8951,8 +8231,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 95, .baseSpDefense = 40, - .type1 = TYPE_WATER, - .type2 = TYPE_DARK, + .types = { TYPE_WATER, TYPE_DARK}, .catchRate = 60, .expYield = 161, .evYield_Attack = 2, @@ -8961,8 +8240,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_ROUGH_SKIN, ABILITY_NONE, ABILITY_SPEED_BOOST}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8976,8 +8254,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 70, .baseSpDefense = 35, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 125, .expYield = 80, .evYield_HP = 1, @@ -8985,8 +8262,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_WATER_2}, .abilities = {ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS, ABILITY_PRESSURE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9000,8 +8276,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 90, .baseSpDefense = 45, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 175, .evYield_HP = 2, @@ -9009,8 +8284,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_WATER_2}, .abilities = {ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS, ABILITY_PRESSURE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9024,8 +8298,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 65, .baseSpDefense = 45, - .type1 = TYPE_FIRE, - .type2 = TYPE_GROUND, + .types = { TYPE_FIRE, TYPE_GROUND}, .catchRate = 255, .expYield = 61, .evYield_SpAttack = 1, @@ -9033,8 +8306,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_SIMPLE, ABILITY_OWN_TEMPO}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -9048,8 +8320,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 105, .baseSpDefense = 75, - .type1 = TYPE_FIRE, - .type2 = TYPE_GROUND, + .types = { TYPE_FIRE, TYPE_GROUND}, .catchRate = 150, .expYield = 161, .evYield_Attack = 1, @@ -9058,8 +8329,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_SOLID_ROCK, ABILITY_ANGER_POINT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -9073,8 +8343,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 85, .baseSpDefense = 70, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 90, .expYield = 165, .evYield_Defense = 2, @@ -9083,8 +8352,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_WHITE_SMOKE, ABILITY_DROUGHT, ABILITY_SHELL_ARMOR}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9098,8 +8366,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 70, .baseSpDefense = 80, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 255, .expYield = 66, .evYield_SpDefense = 1, @@ -9107,8 +8374,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -9122,8 +8388,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 90, .baseSpDefense = 110, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 60, .expYield = 165, .evYield_SpDefense = 2, @@ -9131,8 +8396,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -9146,8 +8410,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 126, .evYield_SpAttack = 1, @@ -9155,8 +8418,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_OWN_TEMPO, ABILITY_TANGLED_FEET, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -9170,8 +8432,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 10, .baseSpAttack = 45, .baseSpDefense = 45, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND}, .catchRate = 255, .expYield = 58, .evYield_Attack = 1, @@ -9180,11 +8441,10 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_DRAGON}, #else - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, #endif .abilities = {ABILITY_HYPER_CUTTER, ABILITY_ARENA_TRAP, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BROWN, @@ -9199,8 +8459,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_GROUND, - .type2 = TYPE_DRAGON, + .types = { TYPE_GROUND, TYPE_DRAGON}, .catchRate = 120, .expYield = 119, .evYield_Attack = 1, @@ -9209,11 +8468,10 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_DRAGON}, #else - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, #endif .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE, ABILITY_LEVITATE}, .bodyColor = BODY_COLOR_GREEN, @@ -9228,8 +8486,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_GROUND, - .type2 = TYPE_DRAGON, + .types = { TYPE_GROUND, TYPE_DRAGON}, .catchRate = 45, .expYield = 234, .evYield_Attack = 1, @@ -9238,11 +8495,10 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_DRAGON}, #else - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, #endif .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE, ABILITY_LEVITATE}, .bodyColor = BODY_COLOR_GREEN, @@ -9257,8 +8513,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 85, .baseSpDefense = 40, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 190, .expYield = 67, .evYield_SpAttack = 1, @@ -9267,8 +8522,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9282,8 +8536,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 115, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_DARK, + .types = { TYPE_GRASS, TYPE_DARK}, .catchRate = 60, .expYield = 166, .evYield_Attack = 1, @@ -9293,8 +8546,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9308,8 +8560,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 40, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 255, .expYield = 62, .evYield_SpDefense = 1, @@ -9317,8 +8568,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE, ABILITY_CLOUD_NINE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9332,8 +8582,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 70, .baseSpDefense = 105, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FLYING, + .types = { TYPE_DRAGON, TYPE_FLYING}, .catchRate = 45, .expYield = 172, .evYield_SpDefense = 2, @@ -9341,8 +8590,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE, ABILITY_CLOUD_NINE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9356,8 +8604,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 90, .expYield = 160, .evYield_Attack = 2, @@ -9366,8 +8613,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_IMMUNITY, ABILITY_NONE, ABILITY_TOXIC_BOOST}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, @@ -9381,8 +8627,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 100, .baseSpDefense = 60, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON}, .catchRate = 90, .expYield = 160, .evYield_Attack = 1, @@ -9392,8 +8637,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, @@ -9411,8 +8655,7 @@ const struct BaseStats gBaseStats[] = #else .baseHP = 70, #endif - .type1 = TYPE_ROCK, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_ROCK, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 161, .evYield_SpAttack = 2, @@ -9422,8 +8665,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -9441,8 +8683,7 @@ const struct BaseStats gBaseStats[] = #else .baseHP = 70, #endif - .type1 = TYPE_ROCK, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_ROCK, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 161, .evYield_Attack = 2, @@ -9452,8 +8693,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -9467,8 +8707,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 46, .baseSpDefense = 41, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = { TYPE_WATER, TYPE_GROUND}, .catchRate = 190, .expYield = 58, .evYield_HP = 1, @@ -9476,8 +8715,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_ANTICIPATION, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -9491,8 +8729,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 76, .baseSpDefense = 71, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = { TYPE_WATER, TYPE_GROUND}, .catchRate = 75, .expYield = 164, .evYield_HP = 2, @@ -9500,8 +8737,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_ANTICIPATION, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9515,8 +8751,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 50, .baseSpDefense = 35, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 205, .expYield = 62, .evYield_Attack = 1, @@ -9524,8 +8759,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -9539,8 +8773,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 90, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_DARK, + .types = { TYPE_WATER, TYPE_DARK}, .catchRate = 155, .expYield = 164, .evYield_Attack = 2, @@ -9548,8 +8781,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -9563,8 +8795,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 40, .baseSpDefense = 70, - .type1 = TYPE_GROUND, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_GROUND, TYPE_PSYCHIC}, .catchRate = 255, .expYield = 60, .evYield_SpDefense = 1, @@ -9573,8 +8804,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9588,8 +8818,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 70, .baseSpDefense = 120, - .type1 = TYPE_GROUND, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_GROUND, TYPE_PSYCHIC}, .catchRate = 90, .expYield = 175, .evYield_SpDefense = 2, @@ -9598,8 +8827,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -9613,8 +8841,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 23, .baseSpAttack = 61, .baseSpDefense = 87, - .type1 = TYPE_ROCK, - .type2 = TYPE_GRASS, + .types = { TYPE_ROCK, TYPE_GRASS }, .catchRate = 45, .expYield = 71, .evYield_SpDefense = 1, @@ -9623,8 +8850,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE, ABILITY_STORM_DRAIN}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -9638,8 +8864,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 43, .baseSpAttack = 81, .baseSpDefense = 107, - .type1 = TYPE_ROCK, - .type2 = TYPE_GRASS, + .types = { TYPE_ROCK, TYPE_GRASS }, .catchRate = 45, .expYield = 173, .evYield_SpDefense = 2, @@ -9648,8 +8873,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE, ABILITY_STORM_DRAIN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9663,8 +8887,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_ROCK, - .type2 = TYPE_BUG, + .types = { TYPE_ROCK, TYPE_BUG }, .catchRate = 45, .expYield = 71, .evYield_Attack = 1, @@ -9672,8 +8895,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -9687,8 +8909,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 70, .baseSpDefense = 80, - .type1 = TYPE_ROCK, - .type2 = TYPE_BUG, + .types = { TYPE_ROCK, TYPE_BUG }, .catchRate = 45, .expYield = 173, .evYield_Attack = 2, @@ -9696,8 +8917,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -9711,8 +8931,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 10, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 255, .expYield = 40, .evYield_Speed = 1, @@ -9720,8 +8939,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_OBLIVIOUS, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9735,8 +8953,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 81, .baseSpAttack = 100, .baseSpDefense = 125, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 189, .evYield_SpDefense = 2, @@ -9744,14 +8961,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, .abilities = {ABILITY_MARVEL_SCALE, ABILITY_COMPETITIVE, ABILITY_CUTE_CHARM}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, - [SPECIES_CASTFORM] = CASTFORM_BASE_STATS(TYPE_NORMAL, BODY_COLOR_GRAY), + [SPECIES_CASTFORM] = CASTFORM_SPECIES_INFO(TYPE_NORMAL, BODY_COLOR_GRAY), [SPECIES_KECLEON] = { @@ -9761,8 +8977,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 60, .baseSpDefense = 120, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 200, .expYield = 154, .evYield_SpDefense = 1, @@ -9770,8 +8985,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_COLOR_CHANGE, ABILITY_NONE, ABILITY_PROTEAN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9785,8 +8999,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 63, .baseSpDefense = 33, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST}, .catchRate = 225, .expYield = 59, .evYield_Attack = 1, @@ -9795,8 +9008,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_INSOMNIA, ABILITY_FRISK, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -9810,8 +9022,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 83, .baseSpDefense = 63, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST}, .catchRate = 45, .expYield = 159, .evYield_Attack = 2, @@ -9820,8 +9031,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_INSOMNIA, ABILITY_FRISK, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -9835,8 +9045,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 30, .baseSpDefense = 90, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST}, .catchRate = 190, .expYield = 59, .evYield_SpDefense = 1, @@ -9845,8 +9054,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE, ABILITY_FRISK}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -9860,8 +9068,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 60, .baseSpDefense = 130, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST}, .catchRate = 90, .expYield = 159, .evYield_Defense = 1, @@ -9871,8 +9078,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FRISK}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -9886,8 +9092,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 51, .baseSpAttack = 72, .baseSpDefense = 87, - .type1 = TYPE_GRASS, - .type2 = TYPE_FLYING, + .types = { TYPE_GRASS, TYPE_FLYING}, .catchRate = 200, .expYield = 161, .evYield_HP = 2, @@ -9895,8 +9100,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_HARVEST}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9916,8 +9120,7 @@ const struct BaseStats gBaseStats[] = .baseDefense = 70, .baseSpDefense = 80, #endif - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 159, .evYield_SpAttack = 1, @@ -9927,8 +9130,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9942,8 +9144,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 75, .baseSpDefense = 60, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK}, .catchRate = 30, .expYield = 163, .evYield_Attack = 2, @@ -9951,8 +9152,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PRESSURE, ABILITY_SUPER_LUCK, ABILITY_JUSTIFIED}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, @@ -9966,8 +9166,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 23, .baseSpAttack = 23, .baseSpDefense = 48, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 125, .expYield = 52, .evYield_HP = 1, @@ -9975,8 +9174,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9990,8 +9188,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 190, .expYield = 60, .evYield_HP = 1, @@ -10000,8 +9197,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_ICE_BODY, ABILITY_MOODY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -10015,8 +9211,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 75, .expYield = 168, .evYield_HP = 2, @@ -10024,8 +9219,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_ICE_BODY, ABILITY_MOODY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -10039,8 +9233,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 55, .baseSpDefense = 50, - .type1 = TYPE_ICE, - .type2 = TYPE_WATER, + .types = { TYPE_ICE, TYPE_WATER}, .catchRate = 255, .expYield = 58, .evYield_HP = 1, @@ -10048,8 +9241,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10063,8 +9255,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 75, .baseSpDefense = 70, - .type1 = TYPE_ICE, - .type2 = TYPE_WATER, + .types = { TYPE_ICE, TYPE_WATER}, .catchRate = 120, .expYield = 144, .evYield_HP = 2, @@ -10072,8 +9263,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10087,8 +9277,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 95, .baseSpDefense = 90, - .type1 = TYPE_ICE, - .type2 = TYPE_WATER, + .types = { TYPE_ICE, TYPE_WATER}, .catchRate = 45, .expYield = 239, .evYield_HP = 3, @@ -10096,8 +9285,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10111,8 +9299,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 32, .baseSpAttack = 74, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 255, .expYield = 69, .evYield_Defense = 1, @@ -10122,8 +9309,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10137,8 +9323,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 52, .baseSpAttack = 94, .baseSpDefense = 75, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 170, .evYield_Attack = 1, @@ -10148,8 +9333,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_WATER_VEIL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10163,8 +9347,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 52, .baseSpAttack = 114, .baseSpDefense = 75, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 170, .evYield_SpAttack = 2, @@ -10173,8 +9356,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -10188,8 +9370,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 45, .baseSpDefense = 65, - .type1 = TYPE_WATER, - .type2 = TYPE_ROCK, + .types = { TYPE_WATER, TYPE_ROCK}, .catchRate = 25, .expYield = 170, .evYield_HP = 1, @@ -10199,8 +9380,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_ROCK_HEAD, ABILITY_STURDY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -10214,8 +9394,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 97, .baseSpAttack = 40, .baseSpDefense = 65, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 225, .expYield = 116, .evYield_Speed = 1, @@ -10224,8 +9403,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -10239,8 +9417,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 40, .baseSpDefense = 30, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON }, .catchRate = 45, .expYield = 60, .evYield_Attack = 1, @@ -10249,8 +9426,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10264,8 +9440,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 50, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON }, .catchRate = 45, .expYield = 147, .evYield_Defense = 2, @@ -10274,8 +9449,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -10289,8 +9463,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 110, .baseSpDefense = 80, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FLYING, + .types = { TYPE_DRAGON, TYPE_FLYING }, .catchRate = 45, .expYield = 270, .evYield_Attack = 3, @@ -10299,8 +9472,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10314,8 +9486,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 35, .baseSpDefense = 60, - .type1 = TYPE_STEEL, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_STEEL, TYPE_PSYCHIC }, .catchRate = 3, .expYield = 60, .evYield_Defense = 1, @@ -10324,8 +9495,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10339,8 +9509,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 55, .baseSpDefense = 80, - .type1 = TYPE_STEEL, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_STEEL, TYPE_PSYCHIC }, .catchRate = 3, .expYield = 147, .evYield_Defense = 2, @@ -10349,8 +9518,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10364,8 +9532,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 95, .baseSpDefense = 90, - .type1 = TYPE_STEEL, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_STEEL, TYPE_PSYCHIC }, .catchRate = 3, .expYield = 270, .evYield_Defense = 3, @@ -10374,8 +9541,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10389,8 +9555,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 50, .baseSpDefense = 100, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK }, .catchRate = 3, .expYield = 261, .evYield_Defense = 3, @@ -10398,8 +9563,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_STURDY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -10414,8 +9578,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 100, .baseSpDefense = 200, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE }, .catchRate = 3, .expYield = 261, .evYield_SpDefense = 3, @@ -10423,8 +9586,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_ICE_BODY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10439,8 +9601,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 75, .baseSpDefense = 150, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = { TYPE_STEEL, TYPE_STEEL }, .catchRate = 3, .expYield = 261, .evYield_Defense = 2, @@ -10449,8 +9610,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -10465,8 +9625,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 110, .baseSpDefense = 130, - .type1 = TYPE_DRAGON, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_DRAGON, TYPE_PSYCHIC }, .catchRate = 3, .expYield = 270, .evYield_SpDefense = 3, @@ -10474,8 +9633,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -10490,8 +9648,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 130, .baseSpDefense = 110, - .type1 = TYPE_DRAGON, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_DRAGON, TYPE_PSYCHIC }, .catchRate = 3, .expYield = 270, .evYield_SpAttack = 3, @@ -10499,8 +9656,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10515,8 +9671,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 150, .baseSpDefense = 140, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 3, .expYield = 302, .evYield_SpAttack = 3, @@ -10524,8 +9679,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_DRIZZLE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10540,8 +9694,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 100, .baseSpDefense = 90, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND}, .catchRate = 3, .expYield = 302, .evYield_Attack = 3, @@ -10549,8 +9702,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_DROUGHT, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -10565,8 +9717,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 150, .baseSpDefense = 90, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FLYING, + .types = { TYPE_DRAGON, TYPE_FLYING}, .catchRate = 45, .expYield = 306, .evYield_Attack = 2, @@ -10575,8 +9726,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_AIR_LOCK, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -10591,8 +9741,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_STEEL, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_STEEL, TYPE_PSYCHIC }, .catchRate = 3, .expYield = 270, .evYield_HP = 3, @@ -10602,8 +9751,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -10618,8 +9766,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 150, .baseSpAttack = 150, .baseSpDefense = 50, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, .catchRate = 3, .expYield = 270, .evYield_Attack = 1, @@ -10629,8 +9776,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -10646,8 +9792,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 31, .baseSpAttack = 45, .baseSpDefense = 55, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 64, .evYield_Attack = 1, @@ -10655,8 +9800,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_SHELL_ARMOR}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -10670,8 +9814,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 36, .baseSpAttack = 55, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 142, .evYield_Attack = 1, @@ -10680,8 +9823,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_SHELL_ARMOR}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -10695,8 +9837,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 56, .baseSpAttack = 75, .baseSpDefense = 85, - .type1 = TYPE_GRASS, - .type2 = TYPE_GROUND, + .types = { TYPE_GRASS, TYPE_GROUND}, .catchRate = 45, .expYield = 236, .evYield_Attack = 2, @@ -10705,8 +9846,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_SHELL_ARMOR}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -10720,8 +9860,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 61, .baseSpAttack = 58, .baseSpDefense = 44, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 62, .evYield_Speed = 1, @@ -10729,8 +9868,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -10744,8 +9882,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 81, .baseSpAttack = 78, .baseSpDefense = 52, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIRE, TYPE_FIGHTING}, .catchRate = 45, .expYield = 142, .evYield_Speed = 1, @@ -10754,8 +9891,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -10769,8 +9905,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 108, .baseSpAttack = 104, .baseSpDefense = 71, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIRE, TYPE_FIGHTING}, .catchRate = 45, .expYield = 240, .evYield_Attack = 1, @@ -10780,8 +9915,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -10795,8 +9929,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 61, .baseSpDefense = 56, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 63, .evYield_SpAttack = 1, @@ -10804,8 +9937,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10819,8 +9951,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 81, .baseSpDefense = 76, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 142, .evYield_SpAttack = 2, @@ -10828,8 +9959,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10843,8 +9973,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 111, .baseSpDefense = 101, - .type1 = TYPE_WATER, - .type2 = TYPE_STEEL, + .types = { TYPE_WATER, TYPE_STEEL}, .catchRate = 45, .expYield = 239, .evYield_SpAttack = 3, @@ -10852,8 +9981,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10867,8 +9995,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 255, .expYield = 49, .evYield_Speed = 1, @@ -10876,8 +10003,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -10892,8 +10018,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 120, .expYield = 119, .evYield_Speed = 2, @@ -10901,8 +10026,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -10921,8 +10045,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpDefense = 50, #endif - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 218, .evYield_Attack = 3, @@ -10930,8 +10053,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -10945,8 +10067,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 31, .baseSpAttack = 35, .baseSpDefense = 40, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 50, .evYield_HP = 1, @@ -10954,8 +10075,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_SIMPLE, ABILITY_UNAWARE, ABILITY_MOODY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -10970,8 +10090,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 71, .baseSpAttack = 55, .baseSpDefense = 60, - .type1 = TYPE_NORMAL, - .type2 = TYPE_WATER, + .types = { TYPE_NORMAL, TYPE_WATER}, .catchRate = 127, .expYield = 144, .evYield_Attack = 2, @@ -10979,8 +10098,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_SIMPLE, ABILITY_UNAWARE, ABILITY_MOODY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -10994,8 +10112,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 25, .baseSpDefense = 41, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG}, .catchRate = 255, .expYield = 39, .evYield_Defense = 1, @@ -11004,8 +10121,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_RUN_AWAY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -11020,8 +10136,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 55, .baseSpDefense = 51, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG}, .catchRate = 45, .expYield = 134, .evYield_Attack = 2, @@ -11030,8 +10145,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -11046,8 +10160,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 40, .baseSpDefense = 34, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 235, .expYield = 53, .evYield_Attack = 1, @@ -11055,8 +10168,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RIVALRY, ABILITY_INTIMIDATE, ABILITY_GUTS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11071,8 +10183,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 60, .baseSpDefense = 49, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 120, .expYield = 127, .evYield_Attack = 2, @@ -11080,8 +10191,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 100, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RIVALRY, ABILITY_INTIMIDATE, ABILITY_GUTS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11095,8 +10205,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 95, .baseSpDefense = 79, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 235, .evYield_Attack = 3, @@ -11104,8 +10213,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RIVALRY, ABILITY_INTIMIDATE, ABILITY_GUTS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11119,8 +10227,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 50, .baseSpDefense = 70, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON}, .catchRate = 255, .expYield = 56, .evYield_SpAttack = 1, @@ -11129,8 +10236,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -11148,8 +10254,7 @@ const struct BaseStats gBaseStats[] = #else .baseDefense = 55, #endif - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON}, .catchRate = 75, .expYield = 232, .evYield_SpAttack = 3, @@ -11158,8 +10263,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -11173,8 +10277,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 58, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 45, .expYield = 70, .evYield_Attack = 1, @@ -11182,8 +10285,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_MOLD_BREAKER, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11197,8 +10299,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 58, .baseSpAttack = 65, .baseSpDefense = 50, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 45, .expYield = 173, .evYield_Attack = 2, @@ -11206,8 +10307,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_MOLD_BREAKER, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11221,8 +10321,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 42, .baseSpDefense = 88, - .type1 = TYPE_ROCK, - .type2 = TYPE_STEEL, + .types = { TYPE_ROCK, TYPE_STEEL}, .catchRate = 45, .expYield = 70, .evYield_Defense = 1, @@ -11230,8 +10329,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_STURDY, ABILITY_NONE, ABILITY_SOUNDPROOF}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11245,8 +10343,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 47, .baseSpDefense = 138, - .type1 = TYPE_ROCK, - .type2 = TYPE_STEEL, + .types = { TYPE_ROCK, TYPE_STEEL}, .catchRate = 45, .expYield = 173, .evYield_Defense = 2, @@ -11254,14 +10351,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_STURDY, ABILITY_NONE, ABILITY_SOUNDPROOF}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, - [SPECIES_BURMY] = BURMY_BASE_STATS(BODY_COLOR_GREEN), + [SPECIES_BURMY] = BURMY_SPECIES_INFO(BODY_COLOR_GREEN), [SPECIES_WORMADAM] = { @@ -11271,8 +10367,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 36, .baseSpAttack = 79, .baseSpDefense = 105, - .type1 = TYPE_BUG, - .type2 = TYPE_GRASS, + .types = { TYPE_BUG, TYPE_GRASS}, .catchRate = 45, .expYield = 148, .evYield_SpDefense = 2, @@ -11281,8 +10376,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -11296,8 +10390,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 66, .baseSpAttack = 94, .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING}, .catchRate = 45, .expYield = 148, .evYield_Attack = 1, @@ -11307,8 +10400,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_NONE, ABILITY_TINTED_LENS}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -11322,8 +10414,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 30, .baseSpDefense = 42, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING}, .catchRate = 120, .expYield = 49, .evYield_Speed = 1, @@ -11332,8 +10423,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_HONEY_GATHER, ABILITY_NONE, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -11348,8 +10438,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 80, .baseSpDefense = 102, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING}, .catchRate = 45, .expYield = 166, .evYield_Defense = 1, @@ -11359,8 +10448,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -11374,8 +10462,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 45, .baseSpDefense = 90, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 200, .expYield = 142, .evYield_Speed = 1, @@ -11383,8 +10470,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 100, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, .abilities = {ABILITY_RUN_AWAY, ABILITY_PICKUP, ABILITY_VOLT_ABSORB}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -11398,8 +10484,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 60, .baseSpDefense = 30, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 190, .expYield = 66, .evYield_Speed = 1, @@ -11407,8 +10492,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_WATER_VEIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -11422,8 +10506,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 85, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 75, .expYield = 173, .evYield_Speed = 2, @@ -11431,8 +10514,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_WATER_VEIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -11446,8 +10528,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 62, .baseSpDefense = 53, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 190, .expYield = 55, .evYield_SpAttack = 1, @@ -11456,18 +10537,17 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, }, - [SPECIES_CHERRIM] = CHERRIM_BASE_STATS(BODY_COLOR_PURPLE), + [SPECIES_CHERRIM] = CHERRIM_SPECIES_INFO(BODY_COLOR_PURPLE), - [SPECIES_SHELLOS] = SHELLOS_BASE_STATS(BODY_COLOR_PURPLE), + [SPECIES_SHELLOS] = SHELLOS_SPECIES_INFO(BODY_COLOR_PURPLE), - [SPECIES_GASTRODON] = GASTRODON_BASE_STATS(BODY_COLOR_PURPLE), + [SPECIES_GASTRODON] = GASTRODON_SPECIES_INFO(BODY_COLOR_PURPLE), [SPECIES_AMBIPOM] = { @@ -11477,8 +10557,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 60, .baseSpDefense = 66, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 169, .evYield_Speed = 2, @@ -11486,8 +10565,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 100, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_TECHNICIAN, ABILITY_PICKUP, ABILITY_SKILL_LINK}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -11501,8 +10579,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 60, .baseSpDefense = 44, - .type1 = TYPE_GHOST, - .type2 = TYPE_FLYING, + .types = { TYPE_GHOST, TYPE_FLYING}, .catchRate = 125, .expYield = 70, .evYield_HP = 1, @@ -11510,8 +10587,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_AFTERMATH, ABILITY_UNBURDEN, ABILITY_FLARE_BOOST}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -11525,8 +10601,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 90, .baseSpDefense = 54, - .type1 = TYPE_GHOST, - .type2 = TYPE_FLYING, + .types = { TYPE_GHOST, TYPE_FLYING}, .catchRate = 60, .expYield = 174, .evYield_HP = 2, @@ -11534,8 +10609,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_FLUCTUATING, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_AFTERMATH, ABILITY_UNBURDEN, ABILITY_FLARE_BOOST}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -11549,8 +10623,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 44, .baseSpDefense = 56, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 190, .expYield = 70, .evYield_Speed = 1, @@ -11558,8 +10631,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 0, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_RUN_AWAY, ABILITY_KLUTZ, ABILITY_LIMBER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -11573,8 +10645,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 54, .baseSpDefense = 96, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 60, .expYield = 168, .evYield_Speed = 2, @@ -11582,8 +10653,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 140, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_KLUTZ, ABILITY_LIMBER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -11597,8 +10667,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 105, .baseSpDefense = 105, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST}, .catchRate = 45, .expYield = 173, .evYield_SpAttack = 1, @@ -11607,8 +10676,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -11622,8 +10690,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 71, .baseSpAttack = 105, .baseSpDefense = 52, - .type1 = TYPE_DARK, - .type2 = TYPE_FLYING, + .types = { TYPE_DARK, TYPE_FLYING}, .catchRate = 30, .expYield = 177, .evYield_Attack = 2, @@ -11631,8 +10698,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_INSOMNIA, ABILITY_SUPER_LUCK, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -11646,8 +10712,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 42, .baseSpDefense = 37, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 190, .expYield = 62, .evYield_Speed = 1, @@ -11655,8 +10720,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_LIMBER, ABILITY_OWN_TEMPO, ABILITY_KEEN_EYE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11670,8 +10734,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 112, .baseSpAttack = 64, .baseSpDefense = 59, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 75, .expYield = 158, .evYield_Speed = 2, @@ -11679,8 +10742,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11694,8 +10756,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 65, .baseSpDefense = 50, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 120, .expYield = 57, .evYield_SpAttack = 1, @@ -11704,8 +10765,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -11719,8 +10779,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 74, .baseSpAttack = 41, .baseSpDefense = 41, - .type1 = TYPE_POISON, - .type2 = TYPE_DARK, + .types = { TYPE_POISON, TYPE_DARK}, .catchRate = 225, .expYield = 66, .evYield_Speed = 1, @@ -11728,8 +10787,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_STENCH, ABILITY_AFTERMATH, ABILITY_KEEN_EYE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -11743,8 +10801,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 84, .baseSpAttack = 71, .baseSpDefense = 61, - .type1 = TYPE_POISON, - .type2 = TYPE_DARK, + .types = { TYPE_POISON, TYPE_DARK}, .catchRate = 60, .expYield = 168, .evYield_HP = 2, @@ -11752,8 +10809,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_STENCH, ABILITY_AFTERMATH, ABILITY_KEEN_EYE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -11767,8 +10823,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 23, .baseSpAttack = 24, .baseSpDefense = 86, - .type1 = TYPE_STEEL, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_STEEL, TYPE_PSYCHIC}, .catchRate = 255, .expYield = 60, .evYield_Defense = 1, @@ -11777,8 +10832,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_LEVITATE, ABILITY_HEATPROOF, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -11792,8 +10846,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 33, .baseSpAttack = 79, .baseSpDefense = 116, - .type1 = TYPE_STEEL, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_STEEL, TYPE_PSYCHIC}, .catchRate = 90, .expYield = 175, .evYield_Defense = 1, @@ -11803,8 +10856,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_LEVITATE, ABILITY_HEATPROOF, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -11818,8 +10870,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 10, .baseSpAttack = 10, .baseSpDefense = 45, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 255, .expYield = 58, .evYield_Defense = 1, @@ -11827,8 +10878,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -11843,11 +10893,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 70, .baseSpDefense = 90, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FAIRY, + .types = { TYPE_PSYCHIC, TYPE_FAIRY}, #else - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, #endif .catchRate = 145, .expYield = 62, @@ -11856,8 +10904,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_SOUNDPROOF, ABILITY_FILTER, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -11871,8 +10918,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 15, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 130, .expYield = 110, .evYield_HP = 1, @@ -11881,8 +10927,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -11896,8 +10941,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 91, .baseSpAttack = 92, .baseSpDefense = 42, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 30, .expYield = 144, .evYield_Attack = 1, @@ -11906,8 +10950,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -11921,8 +10964,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 92, .baseSpDefense = 108, - .type1 = TYPE_GHOST, - .type2 = TYPE_DARK, + .types = { TYPE_GHOST, TYPE_DARK}, .catchRate = 100, .expYield = 170, .evYield_Defense = 1, @@ -11931,8 +10973,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -11946,8 +10987,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 42, .baseSpAttack = 40, .baseSpDefense = 45, - .type1 = TYPE_DRAGON, - .type2 = TYPE_GROUND, + .types = { TYPE_DRAGON, TYPE_GROUND}, .catchRate = 45, .expYield = 60, .evYield_Attack = 1, @@ -11955,8 +10995,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_ROUGH_SKIN}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11970,8 +11009,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 82, .baseSpAttack = 50, .baseSpDefense = 55, - .type1 = TYPE_DRAGON, - .type2 = TYPE_GROUND, + .types = { TYPE_DRAGON, TYPE_GROUND}, .catchRate = 45, .expYield = 144, .evYield_Attack = 2, @@ -11979,8 +11017,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_ROUGH_SKIN}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11994,8 +11031,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 102, .baseSpAttack = 80, .baseSpDefense = 85, - .type1 = TYPE_DRAGON, - .type2 = TYPE_GROUND, + .types = { TYPE_DRAGON, TYPE_GROUND}, .catchRate = 45, .expYield = 270, .evYield_Attack = 3, @@ -12003,8 +11039,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE, ABILITY_ROUGH_SKIN}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12018,8 +11053,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 5, .baseSpAttack = 40, .baseSpDefense = 85, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 50, .expYield = 78, .evYield_HP = 1, @@ -12029,8 +11063,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PICKUP, ABILITY_THICK_FAT, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -12044,8 +11077,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 35, .baseSpDefense = 40, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 75, .expYield = 57, .evYield_Attack = 1, @@ -12053,8 +11085,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_STEADFAST, ABILITY_INNER_FOCUS, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12068,8 +11099,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 115, .baseSpDefense = 70, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_STEEL, + .types = { TYPE_FIGHTING, TYPE_STEEL}, .catchRate = 45, .expYield = 184, .evYield_Attack = 1, @@ -12078,8 +11108,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_STEADFAST, ABILITY_INNER_FOCUS, ABILITY_JUSTIFIED}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12093,8 +11122,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 32, .baseSpAttack = 38, .baseSpDefense = 42, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND}, .catchRate = 140, .expYield = 66, .evYield_Defense = 1, @@ -12102,8 +11130,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -12118,8 +11145,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 47, .baseSpAttack = 68, .baseSpDefense = 72, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND}, .catchRate = 60, .expYield = 184, .evYield_Defense = 2, @@ -12127,8 +11153,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -12143,8 +11168,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 30, .baseSpDefense = 55, - .type1 = TYPE_POISON, - .type2 = TYPE_BUG, + .types = { TYPE_POISON, TYPE_BUG}, .catchRate = 120, .expYield = 66, .evYield_Defense = 1, @@ -12153,8 +11177,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_WATER_3}, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_SNIPER, ABILITY_KEEN_EYE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -12168,8 +11191,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 60, .baseSpDefense = 75, - .type1 = TYPE_POISON, - .type2 = TYPE_DARK, + .types = { TYPE_POISON, TYPE_DARK}, .catchRate = 45, .expYield = 175, .evYield_Defense = 2, @@ -12178,8 +11200,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_WATER_3}, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_SNIPER, ABILITY_KEEN_EYE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -12193,8 +11214,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 61, .baseSpDefense = 40, - .type1 = TYPE_POISON, - .type2 = TYPE_FIGHTING, + .types = { TYPE_POISON, TYPE_FIGHTING}, .catchRate = 140, .expYield = 60, .evYield_Attack = 1, @@ -12203,8 +11223,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 100, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_ANTICIPATION, ABILITY_DRY_SKIN, ABILITY_POISON_TOUCH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12218,8 +11237,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 86, .baseSpDefense = 65, - .type1 = TYPE_POISON, - .type2 = TYPE_FIGHTING, + .types = { TYPE_POISON, TYPE_FIGHTING}, .catchRate = 75, .expYield = 172, .evYield_Attack = 2, @@ -12228,8 +11246,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_ANTICIPATION, ABILITY_DRY_SKIN, ABILITY_POISON_TOUCH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12243,8 +11260,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 46, .baseSpAttack = 90, .baseSpDefense = 72, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 200, .expYield = 159, .evYield_Attack = 2, @@ -12252,8 +11268,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -12267,8 +11282,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 66, .baseSpAttack = 49, .baseSpDefense = 61, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 190, .expYield = 66, .evYield_Speed = 1, @@ -12276,8 +11290,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_STORM_DRAIN, ABILITY_WATER_VEIL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12291,8 +11304,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 91, .baseSpAttack = 69, .baseSpDefense = 86, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 75, .expYield = 161, .evYield_Speed = 2, @@ -12300,8 +11312,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_STORM_DRAIN, ABILITY_WATER_VEIL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12315,8 +11326,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 120, - .type1 = TYPE_WATER, - .type2 = TYPE_FLYING, + .types = { TYPE_WATER, TYPE_FLYING}, .catchRate = 25, .expYield = 69, .evYield_SpDefense = 1, @@ -12324,8 +11334,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_ABSORB, ABILITY_WATER_VEIL}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12339,8 +11348,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 62, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_ICE, + .types = { TYPE_GRASS, TYPE_ICE}, .catchRate = 120, .expYield = 67, .evYield_Attack = 1, @@ -12349,8 +11357,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_SNOW_WARNING, ABILITY_NONE, ABILITY_SOUNDPROOF}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -12364,8 +11371,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 92, .baseSpDefense = 85, - .type1 = TYPE_GRASS, - .type2 = TYPE_ICE, + .types = { TYPE_GRASS, TYPE_ICE}, .catchRate = 60, .expYield = 173, .evYield_Attack = 1, @@ -12375,8 +11381,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_SNOW_WARNING, ABILITY_NONE, ABILITY_SOUNDPROOF}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -12390,8 +11395,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 125, .baseSpAttack = 45, .baseSpDefense = 85, - .type1 = TYPE_DARK, - .type2 = TYPE_ICE, + .types = { TYPE_DARK, TYPE_ICE}, .catchRate = 45, .expYield = 179, .evYield_Attack = 1, @@ -12401,8 +11405,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -12416,8 +11419,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 130, .baseSpDefense = 90, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_STEEL, + .types = { TYPE_ELECTRIC, TYPE_STEEL}, .catchRate = 30, .expYield = 241, .evYield_SpAttack = 3, @@ -12426,8 +11428,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -12441,8 +11442,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 80, .baseSpDefense = 95, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 30, .expYield = 180, .evYield_HP = 3, @@ -12451,8 +11451,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_OWN_TEMPO, ABILITY_OBLIVIOUS, ABILITY_CLOUD_NINE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -12466,8 +11465,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_GROUND, - .type2 = TYPE_ROCK, + .types = { TYPE_GROUND, TYPE_ROCK}, .catchRate = 30, .expYield = 241, .evYield_Attack = 3, @@ -12475,8 +11473,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_SOLID_ROCK, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -12490,8 +11487,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 110, .baseSpDefense = 50, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 30, .expYield = 187, .evYield_Defense = 2, @@ -12499,8 +11495,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12514,8 +11509,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 95, .baseSpDefense = 85, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 30, .expYield = 243, .evYield_Attack = 3, @@ -12524,8 +11518,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_MOTOR_DRIVE, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -12539,8 +11532,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 83, .baseSpAttack = 125, .baseSpDefense = 95, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 30, .expYield = 243, .evYield_SpAttack = 3, @@ -12549,8 +11541,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_VITAL_SPIRIT}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, @@ -12565,11 +11556,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 120, .baseSpDefense = 115, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_FAIRY, - .type2 = TYPE_FLYING, + .types = { TYPE_FAIRY, TYPE_FLYING}, #else - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, #endif .catchRate = 30, .expYield = 245, @@ -12579,8 +11568,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, @@ -12594,8 +11582,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 116, .baseSpDefense = 56, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING}, .catchRate = 30, .expYield = 180, .evYield_Attack = 2, @@ -12604,8 +11591,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SPEED_BOOST, ABILITY_TINTED_LENS, ABILITY_FRISK}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -12619,8 +11605,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 60, .baseSpDefense = 65, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 184, .evYield_Defense = 2, @@ -12628,8 +11613,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_LEAF_GUARD, ABILITY_LEAF_GUARD, ABILITY_CHLOROPHYLL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -12643,8 +11627,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 130, .baseSpDefense = 95, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 45, .expYield = 184, .evYield_SpAttack = 2, @@ -12652,8 +11635,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SNOW_CLOAK, ABILITY_SNOW_CLOAK, ABILITY_ICE_BODY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12667,8 +11649,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 45, .baseSpDefense = 75, - .type1 = TYPE_GROUND, - .type2 = TYPE_FLYING, + .types = { TYPE_GROUND, TYPE_FLYING}, .catchRate = 30, .expYield = 179, .evYield_Defense = 2, @@ -12676,8 +11657,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL, ABILITY_POISON_HEAL}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -12691,8 +11671,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 70, .baseSpDefense = 60, - .type1 = TYPE_ICE, - .type2 = TYPE_GROUND, + .types = { TYPE_ICE, TYPE_GROUND}, .catchRate = 50, .expYield = 239, .evYield_Attack = 3, @@ -12700,8 +11679,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -12715,8 +11693,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 135, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 30, .expYield = 241, .evYield_SpAttack = 3, @@ -12724,8 +11701,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_ADAPTABILITY, ABILITY_DOWNLOAD, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -12739,8 +11715,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 65, .baseSpDefense = 115, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FIGHTING, + .types = { TYPE_PSYCHIC, TYPE_FIGHTING}, .catchRate = 45, .expYield = 233, .evYield_Attack = 3, @@ -12749,11 +11724,10 @@ const struct BaseStats gBaseStats[] = .friendship = 35, .growthRate = GROWTH_SLOW, #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_AMORPHOUS}, #else - .eggGroup1 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, #endif - .eggGroup2 = EGG_GROUP_AMORPHOUS, .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_JUSTIFIED}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -12767,8 +11741,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 75, .baseSpDefense = 150, - .type1 = TYPE_ROCK, - .type2 = TYPE_STEEL, + .types = { TYPE_ROCK, TYPE_STEEL}, .catchRate = 60, .expYield = 184, .evYield_Defense = 1, @@ -12778,8 +11751,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -12793,8 +11765,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 65, .baseSpDefense = 135, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST}, .catchRate = 45, .expYield = 236, .evYield_Defense = 1, @@ -12804,8 +11775,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FRISK}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -12819,8 +11789,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 80, .baseSpDefense = 70, - .type1 = TYPE_ICE, - .type2 = TYPE_GHOST, + .types = { TYPE_ICE, TYPE_GHOST}, .catchRate = 75, .expYield = 168, .evYield_Speed = 2, @@ -12828,8 +11797,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL}, .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -12843,8 +11811,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 91, .baseSpAttack = 95, .baseSpDefense = 77, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_GHOST, + .types = { TYPE_ELECTRIC, TYPE_GHOST}, .catchRate = 45, .expYield = 154, .evYield_Speed = 1, @@ -12853,8 +11820,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -12868,8 +11834,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 75, .baseSpDefense = 130, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 261, .evYield_Defense = 2, @@ -12878,8 +11843,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 140, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -12894,8 +11858,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 105, .baseSpDefense = 105, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 261, .evYield_Attack = 1, @@ -12905,8 +11868,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 140, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -12921,8 +11883,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 125, .baseSpDefense = 70, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 261, .evYield_Attack = 2, @@ -12931,8 +11892,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 140, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12947,8 +11907,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 150, .baseSpDefense = 100, - .type1 = TYPE_STEEL, - .type2 = TYPE_DRAGON, + .types = { TYPE_STEEL, TYPE_DRAGON}, .catchRate = 3, .expYield = 306, .evYield_SpAttack = 3, @@ -12956,8 +11915,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -12972,8 +11930,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 150, .baseSpDefense = 120, - .type1 = TYPE_WATER, - .type2 = TYPE_DRAGON, + .types = { TYPE_WATER, TYPE_DRAGON}, .catchRate = 3, .expYield = 306, .evYield_SpAttack = 3, @@ -12981,8 +11938,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -12997,8 +11953,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 77, .baseSpAttack = 130, .baseSpDefense = 106, - .type1 = TYPE_FIRE, - .type2 = TYPE_STEEL, + .types = { TYPE_FIRE, TYPE_STEEL}, .catchRate = 3, .expYield = 270, .evYield_SpAttack = 3, @@ -13006,8 +11961,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE, ABILITY_FLAME_BODY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -13022,8 +11976,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 80, .baseSpDefense = 110, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 3, .expYield = 302, .evYield_Attack = 3, @@ -13031,8 +11984,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_SLOW_START, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -13047,8 +11999,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 100, .baseSpDefense = 120, - .type1 = TYPE_GHOST, - .type2 = TYPE_DRAGON, + .types = { TYPE_GHOST, TYPE_DRAGON}, .catchRate = 3, .expYield = 306, .evYield_HP = 3, @@ -13056,8 +12007,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -13072,8 +12022,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 75, .baseSpDefense = 130, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 270, .evYield_SpDefense = 3, @@ -13081,8 +12030,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -13097,8 +12045,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 30, .expYield = 216, .evYield_HP = 1, @@ -13106,8 +12053,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HYDRATION, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -13122,8 +12068,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 3, .expYield = 270, .evYield_HP = 3, @@ -13131,8 +12076,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HYDRATION, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -13147,8 +12091,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 125, .baseSpAttack = 135, .baseSpDefense = 90, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK}, .catchRate = 3, .expYield = 270, .evYield_Speed = 1, @@ -13157,8 +12100,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BAD_DREAMS, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -13173,8 +12115,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 270, .evYield_HP = 3, @@ -13184,8 +12125,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -13200,8 +12140,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 120, .baseSpAttack = 120, .baseSpDefense = 120, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 3, .expYield = 324, .evYield_HP = 3, @@ -13209,8 +12148,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_MULTITYPE, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -13227,8 +12165,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FIRE, + .types = { TYPE_PSYCHIC, TYPE_FIRE}, .catchRate = 3, .expYield = 270, .evYield_HP = 3, @@ -13236,8 +12173,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_VICTORY_STAR, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -13252,8 +12188,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 63, .baseSpAttack = 45, .baseSpDefense = 55, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 62, .evYield_Speed = 1, @@ -13261,8 +12196,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -13276,8 +12210,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 83, .baseSpAttack = 60, .baseSpDefense = 75, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 145, .evYield_Speed = 2, @@ -13285,8 +12218,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -13300,8 +12232,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 113, .baseSpAttack = 75, .baseSpDefense = 95, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 238, .evYield_Speed = 3, @@ -13309,8 +12240,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -13324,8 +12254,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 45, .baseSpDefense = 45, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 62, .evYield_HP = 1, @@ -13333,8 +12262,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -13348,8 +12276,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 70, .baseSpDefense = 55, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIRE, TYPE_FIGHTING}, .catchRate = 45, .expYield = 146, .evYield_Attack = 2, @@ -13357,8 +12284,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -13372,8 +12298,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 100, .baseSpDefense = 65, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIRE, TYPE_FIGHTING}, .catchRate = 45, .expYield = 238, .evYield_Attack = 3, @@ -13381,8 +12306,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, @@ -13396,8 +12320,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 63, .baseSpDefense = 45, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 62, .evYield_SpAttack = 1, @@ -13405,8 +12328,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHELL_ARMOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -13420,8 +12342,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 83, .baseSpDefense = 60, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 145, .evYield_SpAttack = 2, @@ -13429,8 +12350,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHELL_ARMOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -13444,8 +12364,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 108, .baseSpDefense = 70, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 238, .evYield_SpAttack = 3, @@ -13453,8 +12372,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHELL_ARMOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -13468,8 +12386,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 42, .baseSpAttack = 35, .baseSpDefense = 39, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 51, .evYield_Attack = 1, @@ -13477,8 +12394,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -13492,8 +12408,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 77, .baseSpAttack = 60, .baseSpDefense = 69, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 147, .evYield_Attack = 2, @@ -13501,8 +12416,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_ILLUMINATE, ABILITY_KEEN_EYE, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -13516,8 +12430,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 25, .baseSpDefense = 45, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 55, .evYield_Attack = 1, @@ -13525,8 +12438,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_PICKUP, ABILITY_RUN_AWAY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -13540,8 +12452,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 35, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 120, .expYield = 130, .evYield_Attack = 2, @@ -13549,8 +12460,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_SAND_RUSH, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -13568,8 +12478,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 100, #endif - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 225, .evYield_Attack = 3, @@ -13577,8 +12486,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_SAND_RUSH, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -13592,8 +12500,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 66, .baseSpAttack = 50, .baseSpDefense = 37, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK}, .catchRate = 255, .expYield = 56, .evYield_Speed = 1, @@ -13601,8 +12508,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_LIMBER, ABILITY_UNBURDEN, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -13616,8 +12522,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 106, .baseSpAttack = 88, .baseSpDefense = 50, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK}, .catchRate = 90, .expYield = 156, .evYield_Speed = 2, @@ -13625,8 +12530,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_LIMBER, ABILITY_UNBURDEN, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -13640,8 +12544,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 64, .baseSpAttack = 53, .baseSpDefense = 48, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 190, .expYield = 63, .evYield_Speed = 1, @@ -13649,8 +12552,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_OVERGROW}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -13664,8 +12566,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 101, .baseSpAttack = 98, .baseSpDefense = 63, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 75, .expYield = 174, .evYield_Speed = 2, @@ -13673,8 +12574,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_OVERGROW}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -13688,8 +12588,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 64, .baseSpAttack = 53, .baseSpDefense = 48, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 190, .expYield = 63, .evYield_Speed = 1, @@ -13697,8 +12596,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_BLAZE}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, @@ -13712,8 +12610,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 101, .baseSpAttack = 98, .baseSpDefense = 63, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 75, .expYield = 174, .evYield_Speed = 2, @@ -13721,8 +12618,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_BLAZE}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, @@ -13736,8 +12632,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 64, .baseSpAttack = 53, .baseSpDefense = 48, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 190, .expYield = 63, .evYield_Speed = 1, @@ -13745,8 +12640,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_TORRENT}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -13760,8 +12654,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 101, .baseSpAttack = 98, .baseSpDefense = 63, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 75, .expYield = 174, .evYield_Speed = 2, @@ -13769,8 +12662,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GLUTTONY, ABILITY_NONE, ABILITY_TORRENT}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -13784,8 +12676,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 24, .baseSpAttack = 67, .baseSpDefense = 55, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 190, .expYield = 58, .evYield_HP = 1, @@ -13793,8 +12684,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_FOREWARN, ABILITY_SYNCHRONIZE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -13808,8 +12698,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 29, .baseSpAttack = 107, .baseSpDefense = 95, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 75, .expYield = 170, .evYield_HP = 2, @@ -13817,8 +12706,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_FOREWARN, ABILITY_SYNCHRONIZE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -13832,8 +12720,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 43, .baseSpAttack = 36, .baseSpDefense = 30, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 255, .expYield = 53, .evYield_Attack = 1, @@ -13841,8 +12728,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_BIG_PECKS, ABILITY_SUPER_LUCK, ABILITY_RIVALRY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -13856,8 +12742,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 50, .baseSpDefense = 42, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 120, .expYield = 125, .evYield_Attack = 2, @@ -13865,8 +12750,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_BIG_PECKS, ABILITY_SUPER_LUCK, ABILITY_RIVALRY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -13884,8 +12768,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 105, #endif - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 220, .evYield_Attack = 3, @@ -13893,8 +12776,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_BIG_PECKS, ABILITY_SUPER_LUCK, ABILITY_RIVALRY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -13909,8 +12791,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 76, .baseSpAttack = 50, .baseSpDefense = 32, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 190, .expYield = 59, .evYield_Speed = 1, @@ -13918,8 +12799,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_MOTOR_DRIVE, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -13933,8 +12813,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 116, .baseSpAttack = 80, .baseSpDefense = 63, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 75, .expYield = 174, .evYield_Speed = 2, @@ -13942,8 +12821,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_MOTOR_DRIVE, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -13957,8 +12835,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 255, .expYield = 56, .evYield_Defense = 1, @@ -13968,8 +12845,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STURDY, ABILITY_WEAK_ARMOR, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -13983,8 +12859,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 50, .baseSpDefense = 40, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 120, .expYield = 137, .evYield_Attack = 1, @@ -13995,8 +12870,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STURDY, ABILITY_WEAK_ARMOR, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -14014,8 +12888,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpDefense = 70, #endif - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 45, .expYield = 232, .evYield_Attack = 3, @@ -14025,8 +12898,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STURDY, ABILITY_SAND_STREAM, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -14044,8 +12916,7 @@ const struct BaseStats gBaseStats[] = #else .baseHP = 55, #endif - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FLYING, + .types = { TYPE_PSYCHIC, TYPE_FLYING}, .catchRate = 190, .expYield = 65, .evYield_Speed = 1, @@ -14053,8 +12924,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FLYING}, .abilities = {ABILITY_UNAWARE, ABILITY_KLUTZ, ABILITY_SIMPLE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -14068,8 +12938,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 114, .baseSpAttack = 77, .baseSpDefense = 55, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FLYING, + .types = { TYPE_PSYCHIC, TYPE_FLYING}, .catchRate = 45, .expYield = 149, .evYield_Speed = 2, @@ -14077,8 +12946,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FLYING}, .abilities = {ABILITY_UNAWARE, ABILITY_KLUTZ, ABILITY_SIMPLE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -14092,8 +12960,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 68, .baseSpAttack = 30, .baseSpDefense = 45, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND}, .catchRate = 120, .expYield = 66, .evYield_Attack = 1, @@ -14101,8 +12968,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_RUSH, ABILITY_SAND_FORCE, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -14116,8 +12982,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 88, .baseSpAttack = 50, .baseSpDefense = 65, - .type1 = TYPE_GROUND, - .type2 = TYPE_STEEL, + .types = { TYPE_GROUND, TYPE_STEEL}, .catchRate = 60, .expYield = 178, .evYield_Attack = 2, @@ -14125,8 +12990,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_RUSH, ABILITY_SAND_FORCE, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -14140,8 +13004,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 86, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 390, .evYield_HP = 2, @@ -14151,8 +13014,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HEALER, ABILITY_REGENERATOR, ABILITY_KLUTZ}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -14166,8 +13028,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 25, .baseSpDefense = 35, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 180, .expYield = 61, .evYield_Attack = 1, @@ -14175,8 +13036,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_GUTS, ABILITY_SHEER_FORCE, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -14190,8 +13050,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 90, .expYield = 142, .evYield_Attack = 2, @@ -14199,8 +13058,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_GUTS, ABILITY_SHEER_FORCE, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -14214,8 +13072,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 55, .baseSpDefense = 65, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 227, .evYield_Attack = 3, @@ -14223,8 +13080,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_GUTS, ABILITY_SHEER_FORCE, ABILITY_IRON_FIST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -14238,8 +13094,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 64, .baseSpAttack = 50, .baseSpDefense = 40, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 255, .expYield = 59, .evYield_Speed = 1, @@ -14247,8 +13102,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_HYDRATION, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -14262,8 +13116,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 69, .baseSpAttack = 65, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = { TYPE_WATER, TYPE_GROUND}, .catchRate = 120, .expYield = 134, .evYield_HP = 2, @@ -14271,8 +13124,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_HYDRATION, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -14290,8 +13142,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 85, #endif - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = { TYPE_WATER, TYPE_GROUND}, .catchRate = 45, .expYield = 229, .evYield_HP = 3, @@ -14299,8 +13150,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_POISON_TOUCH, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -14314,8 +13164,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 30, .baseSpDefense = 85, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 163, .evYield_HP = 2, @@ -14324,8 +13173,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_GUTS, ABILITY_INNER_FOCUS, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -14339,8 +13187,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 30, .baseSpDefense = 75, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 163, .evYield_Attack = 2, @@ -14349,8 +13196,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_STURDY, ABILITY_INNER_FOCUS, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -14364,8 +13210,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 42, .baseSpAttack = 40, .baseSpDefense = 60, - .type1 = TYPE_BUG, - .type2 = TYPE_GRASS, + .types = { TYPE_BUG, TYPE_GRASS}, .catchRate = 255, .expYield = 62, .evYield_Defense = 1, @@ -14374,8 +13219,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_CHLOROPHYLL, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -14389,8 +13233,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 42, .baseSpAttack = 50, .baseSpDefense = 80, - .type1 = TYPE_BUG, - .type2 = TYPE_GRASS, + .types = { TYPE_BUG, TYPE_GRASS}, .catchRate = 120, .expYield = 133, .evYield_Defense = 2, @@ -14399,8 +13242,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_LEAF_GUARD, ABILITY_CHLOROPHYLL, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -14418,8 +13260,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpDefense = 70, #endif - .type1 = TYPE_BUG, - .type2 = TYPE_GRASS, + .types = { TYPE_BUG, TYPE_GRASS}, .catchRate = 45, .expYield = 225, .evYield_Attack = 3, @@ -14428,8 +13269,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_CHLOROPHYLL, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -14443,8 +13283,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 57, .baseSpAttack = 30, .baseSpDefense = 39, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = { TYPE_BUG, TYPE_POISON}, .catchRate = 255, .expYield = 52, .evYield_Defense = 1, @@ -14453,8 +13292,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, #if P_UPDATED_ABILITIES >= GEN_6 .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM, ABILITY_SPEED_BOOST}, #else @@ -14472,8 +13310,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 47, .baseSpAttack = 40, .baseSpDefense = 79, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = { TYPE_BUG, TYPE_POISON}, .catchRate = 120, .expYield = 126, .evYield_Defense = 2, @@ -14482,8 +13319,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, #if P_UPDATED_ABILITIES >= GEN_6 .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM, ABILITY_SPEED_BOOST}, #else @@ -14505,8 +13341,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 90, #endif - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = { TYPE_BUG, TYPE_POISON}, .catchRate = 45, .expYield = 218, .evYield_Speed = 3, @@ -14515,8 +13350,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, #if P_UPDATED_ABILITIES >= GEN_6 .abilities = {ABILITY_POISON_POINT, ABILITY_SWARM, ABILITY_SPEED_BOOST}, #else @@ -14535,11 +13369,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 37, .baseSpDefense = 50, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_GRASS, - .type2 = TYPE_FAIRY, + .types = { TYPE_GRASS, TYPE_FAIRY}, #else - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, #endif .catchRate = 190, .expYield = 56, @@ -14549,8 +13381,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_FAIRY}, .abilities = {ABILITY_PRANKSTER, ABILITY_INFILTRATOR, ABILITY_CHLOROPHYLL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -14565,11 +13396,9 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 77, .baseSpDefense = 75, #if P_UPDATED_TYPES >= GEN_6 - .type1 = TYPE_GRASS, - .type2 = TYPE_FAIRY, + .types = { TYPE_GRASS, TYPE_FAIRY}, #else - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, #endif .catchRate = 75, .expYield = 168, @@ -14579,8 +13408,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_FAIRY}, .abilities = {ABILITY_PRANKSTER, ABILITY_INFILTRATOR, ABILITY_CHLOROPHYLL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -14594,8 +13422,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 70, .baseSpDefense = 50, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 190, .expYield = 56, .evYield_SpAttack = 1, @@ -14604,8 +13431,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_OWN_TEMPO, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -14619,8 +13445,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 110, .baseSpDefense = 75, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 75, .expYield = 168, .evYield_SpAttack = 2, @@ -14629,8 +13454,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_OWN_TEMPO, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -14644,8 +13468,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 98, .baseSpAttack = 80, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 25, .expYield = 161, .evYield_Speed = 2, @@ -14654,8 +13477,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_RECKLESS, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -14669,8 +13491,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_GROUND, - .type2 = TYPE_DARK, + .types = { TYPE_GROUND, TYPE_DARK}, .catchRate = 180, .expYield = 58, .evYield_Attack = 1, @@ -14679,8 +13500,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_MOXIE, ABILITY_ANGER_POINT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -14694,8 +13514,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 74, .baseSpAttack = 45, .baseSpDefense = 45, - .type1 = TYPE_GROUND, - .type2 = TYPE_DARK, + .types = { TYPE_GROUND, TYPE_DARK}, .catchRate = 90, .expYield = 123, .evYield_Attack = 2, @@ -14704,8 +13523,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_MOXIE, ABILITY_ANGER_POINT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -14723,8 +13541,7 @@ const struct BaseStats gBaseStats[] = #else .baseDefense = 70, #endif - .type1 = TYPE_GROUND, - .type2 = TYPE_DARK, + .types = { TYPE_GROUND, TYPE_DARK}, .catchRate = 45, .expYield = 234, .evYield_Attack = 3, @@ -14733,8 +13550,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_MOXIE, ABILITY_ANGER_POINT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -14748,8 +13564,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 15, .baseSpDefense = 45, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 120, .expYield = 63, .evYield_Attack = 1, @@ -14757,8 +13572,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_HUSTLE, ABILITY_NONE, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -14772,8 +13586,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 30, .baseSpDefense = 55, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 60, .expYield = 168, .evYield_Attack = 2, @@ -14781,8 +13594,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_ZEN_MODE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -14796,8 +13608,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 106, .baseSpDefense = 67, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 255, .expYield = 161, .evYield_SpAttack = 2, @@ -14806,8 +13617,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_WATER_ABSORB, ABILITY_CHLOROPHYLL, ABILITY_STORM_DRAIN}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -14821,8 +13631,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_BUG, - .type2 = TYPE_ROCK, + .types = { TYPE_BUG, TYPE_ROCK}, .catchRate = 190, .expYield = 65, .evYield_Defense = 1, @@ -14831,8 +13640,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STURDY, ABILITY_SHELL_ARMOR, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -14850,8 +13658,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 95, #endif - .type1 = TYPE_BUG, - .type2 = TYPE_ROCK, + .types = { TYPE_BUG, TYPE_ROCK}, .catchRate = 75, .expYield = 170, .evYield_Defense = 2, @@ -14860,8 +13667,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STURDY, ABILITY_SHELL_ARMOR, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -14875,8 +13681,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 48, .baseSpAttack = 35, .baseSpDefense = 70, - .type1 = TYPE_DARK, - .type2 = TYPE_FIGHTING, + .types = { TYPE_DARK, TYPE_FIGHTING}, .catchRate = 180, .expYield = 70, .evYield_Attack = 1, @@ -14885,8 +13690,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 35, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SHED_SKIN, ABILITY_MOXIE, ABILITY_INTIMIDATE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -14900,8 +13704,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 58, .baseSpAttack = 45, .baseSpDefense = 115, - .type1 = TYPE_DARK, - .type2 = TYPE_FIGHTING, + .types = { TYPE_DARK, TYPE_FIGHTING}, .catchRate = 90, .expYield = 171, .evYield_Defense = 1, @@ -14911,8 +13714,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SHED_SKIN, ABILITY_MOXIE, ABILITY_INTIMIDATE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -14926,8 +13728,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 97, .baseSpAttack = 103, .baseSpDefense = 80, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FLYING, + .types = { TYPE_PSYCHIC, TYPE_FLYING}, .catchRate = 45, .expYield = 172, .evYield_SpAttack = 2, @@ -14935,8 +13736,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_WONDER_SKIN, ABILITY_MAGIC_GUARD, ABILITY_TINTED_LENS}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -14950,8 +13750,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 55, .baseSpDefense = 65, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST}, .catchRate = 190, .expYield = 61, .evYield_Defense = 1, @@ -14960,8 +13759,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_MUMMY, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -14975,8 +13773,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 95, .baseSpDefense = 105, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST}, .catchRate = 90, .expYield = 169, .evYield_Defense = 2, @@ -14985,8 +13782,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_MUMMY, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -15000,8 +13796,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 22, .baseSpAttack = 53, .baseSpDefense = 45, - .type1 = TYPE_WATER, - .type2 = TYPE_ROCK, + .types = { TYPE_WATER, TYPE_ROCK}, .catchRate = 45, .expYield = 71, .evYield_Defense = 1, @@ -15009,8 +13804,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_SOLID_ROCK, ABILITY_STURDY, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -15024,8 +13818,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 32, .baseSpAttack = 83, .baseSpDefense = 65, - .type1 = TYPE_WATER, - .type2 = TYPE_ROCK, + .types = { TYPE_WATER, TYPE_ROCK}, .catchRate = 45, .expYield = 173, .evYield_Defense = 2, @@ -15033,8 +13826,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_SOLID_ROCK, ABILITY_STURDY, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -15048,8 +13840,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 74, .baseSpDefense = 45, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, + .types = { TYPE_ROCK, TYPE_FLYING}, .catchRate = 45, .expYield = 71, .evYield_Attack = 1, @@ -15057,8 +13848,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_WATER_3}, .abilities = {ABILITY_DEFEATIST, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -15072,8 +13862,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 112, .baseSpDefense = 65, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, + .types = { TYPE_ROCK, TYPE_FLYING}, .catchRate = 45, .expYield = 177, .evYield_Attack = 2, @@ -15081,8 +13870,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_WATER_3}, .abilities = {ABILITY_DEFEATIST, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -15096,8 +13884,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 40, .baseSpDefense = 62, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON}, .catchRate = 190, .expYield = 66, .evYield_Speed = 1, @@ -15106,8 +13893,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD, ABILITY_AFTERMATH}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -15121,8 +13907,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 60, .baseSpDefense = 82, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON}, .catchRate = 60, .expYield = 166, .evYield_Attack = 2, @@ -15132,8 +13917,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STENCH, ABILITY_WEAK_ARMOR, ABILITY_AFTERMATH}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -15147,8 +13931,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 80, .baseSpDefense = 40, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK}, .catchRate = 75, .expYield = 66, .evYield_SpAttack = 1, @@ -15156,8 +13939,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -15171,8 +13953,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 120, .baseSpDefense = 60, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK}, .catchRate = 45, .expYield = 179, .evYield_SpAttack = 2, @@ -15180,8 +13961,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -15195,8 +13975,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 60, .evYield_Speed = 1, @@ -15204,8 +13983,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_TECHNICIAN, ABILITY_SKILL_LINK}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -15219,8 +13997,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 65, .baseSpDefense = 60, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 60, .expYield = 165, .evYield_Speed = 2, @@ -15228,8 +14005,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_TECHNICIAN, ABILITY_SKILL_LINK}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -15243,8 +14019,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 55, .baseSpDefense = 65, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 200, .expYield = 58, .evYield_SpDefense = 1, @@ -15252,8 +14027,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -15267,8 +14041,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 75, .baseSpDefense = 85, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 100, .expYield = 137, .evYield_SpDefense = 2, @@ -15276,8 +14049,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -15291,8 +14063,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 95, .baseSpDefense = 110, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 50, .expYield = 221, .evYield_SpDefense = 3, @@ -15300,8 +14071,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -15315,8 +14085,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 105, .baseSpDefense = 50, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 200, .expYield = 58, .evYield_SpAttack = 1, @@ -15324,8 +14093,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_OVERCOAT, ABILITY_MAGIC_GUARD, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -15339,8 +14107,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 125, .baseSpDefense = 60, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 100, .expYield = 130, .evYield_SpAttack = 2, @@ -15348,8 +14115,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_OVERCOAT, ABILITY_MAGIC_GUARD, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -15363,8 +14129,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 125, .baseSpDefense = 85, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 50, .expYield = 221, .evYield_SpAttack = 3, @@ -15372,8 +14137,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_OVERCOAT, ABILITY_MAGIC_GUARD, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -15387,8 +14151,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 44, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_FLYING, + .types = { TYPE_WATER, TYPE_FLYING}, .catchRate = 190, .expYield = 61, .evYield_HP = 1, @@ -15396,8 +14159,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_BIG_PECKS, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -15411,8 +14173,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 98, .baseSpAttack = 87, .baseSpDefense = 63, - .type1 = TYPE_WATER, - .type2 = TYPE_FLYING, + .types = { TYPE_WATER, TYPE_FLYING}, .catchRate = 45, .expYield = 166, .evYield_Speed = 2, @@ -15420,8 +14181,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_BIG_PECKS, ABILITY_HYDRATION}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -15435,8 +14195,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 44, .baseSpAttack = 65, .baseSpDefense = 60, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 255, .expYield = 61, .evYield_SpAttack = 1, @@ -15445,8 +14204,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_ICE_BODY, ABILITY_SNOW_CLOAK, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -15460,8 +14218,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 59, .baseSpAttack = 80, .baseSpDefense = 75, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 120, .expYield = 138, .evYield_SpAttack = 2, @@ -15470,8 +14227,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_ICE_BODY, ABILITY_SNOW_CLOAK, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -15485,8 +14241,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 79, .baseSpAttack = 110, .baseSpDefense = 95, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 45, .expYield = 241, .evYield_SpAttack = 3, @@ -15495,16 +14250,15 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_ICE_BODY, ABILITY_SNOW_WARNING, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, - [SPECIES_DEERLING] = DEERLING_BASE_STATS(BODY_COLOR_PINK), + [SPECIES_DEERLING] = DEERLING_SPECIES_INFO(BODY_COLOR_PINK), - [SPECIES_SAWSBUCK] = SAWSBUCK_BASE_STATS, + [SPECIES_SAWSBUCK] = SAWSBUCK_SPECIES_INFO, [SPECIES_EMOLGA] = { @@ -15514,8 +14268,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 103, .baseSpAttack = 75, .baseSpDefense = 60, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_FLYING, + .types = { TYPE_ELECTRIC, TYPE_FLYING}, .catchRate = 200, .expYield = 150, .evYield_Speed = 2, @@ -15523,8 +14276,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_STATIC, ABILITY_NONE, ABILITY_MOTOR_DRIVE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -15538,8 +14290,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 40, .baseSpDefense = 45, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG}, .catchRate = 200, .expYield = 63, .evYield_Attack = 1, @@ -15547,8 +14298,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_SHED_SKIN, ABILITY_NO_GUARD}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -15562,8 +14312,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 60, .baseSpDefense = 105, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, + .types = { TYPE_BUG, TYPE_STEEL}, .catchRate = 75, .expYield = 173, .evYield_Attack = 2, @@ -15571,8 +14320,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_SHELL_ARMOR, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -15586,8 +14334,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON}, .catchRate = 190, .expYield = 59, .evYield_HP = 1, @@ -15597,8 +14344,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -15612,8 +14358,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 85, .baseSpDefense = 80, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON}, .catchRate = 75, .expYield = 162, .evYield_HP = 2, @@ -15623,8 +14368,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, @@ -15638,8 +14382,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 65, .baseSpDefense = 85, - .type1 = TYPE_WATER, - .type2 = TYPE_GHOST, + .types = { TYPE_WATER, TYPE_GHOST}, .catchRate = 190, .expYield = 67, .evYield_SpDefense = 1, @@ -15647,8 +14390,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_WATER_ABSORB, ABILITY_CURSED_BODY, ABILITY_DAMP}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -15663,8 +14405,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 85, .baseSpDefense = 105, - .type1 = TYPE_WATER, - .type2 = TYPE_GHOST, + .types = { TYPE_WATER, TYPE_GHOST}, .catchRate = 60, .expYield = 168, .evYield_SpDefense = 2, @@ -15672,8 +14413,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_WATER_ABSORB, ABILITY_CURSED_BODY, ABILITY_DAMP}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -15688,8 +14428,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 40, .baseSpDefense = 45, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 75, .expYield = 165, .evYield_HP = 2, @@ -15697,8 +14436,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2}, .abilities = {ABILITY_HEALER, ABILITY_HYDRATION, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -15712,8 +14450,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 57, .baseSpDefense = 50, - .type1 = TYPE_BUG, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_BUG, TYPE_ELECTRIC}, .catchRate = 190, .expYield = 64, .evYield_Speed = 1, @@ -15721,8 +14458,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_UNNERVE, ABILITY_SWARM}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -15736,8 +14472,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 108, .baseSpAttack = 97, .baseSpDefense = 60, - .type1 = TYPE_BUG, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_BUG, TYPE_ELECTRIC}, .catchRate = 75, .expYield = 165, .evYield_Speed = 2, @@ -15745,8 +14480,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_UNNERVE, ABILITY_SWARM}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -15760,8 +14494,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 10, .baseSpAttack = 24, .baseSpDefense = 86, - .type1 = TYPE_GRASS, - .type2 = TYPE_STEEL, + .types = { TYPE_GRASS, TYPE_STEEL}, .catchRate = 255, .expYield = 61, .evYield_Defense = 1, @@ -15770,8 +14503,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_MINERAL}, .abilities = {ABILITY_IRON_BARBS, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -15785,8 +14517,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 54, .baseSpDefense = 116, - .type1 = TYPE_GRASS, - .type2 = TYPE_STEEL, + .types = { TYPE_GRASS, TYPE_STEEL}, .catchRate = 90, .expYield = 171, .evYield_Defense = 2, @@ -15795,8 +14526,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_MINERAL}, .abilities = {ABILITY_IRON_BARBS, ABILITY_NONE, ABILITY_ANTICIPATION}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -15810,8 +14540,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 45, .baseSpDefense = 60, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = { TYPE_STEEL, TYPE_STEEL}, .catchRate = 130, .expYield = 60, .evYield_Defense = 1, @@ -15819,8 +14548,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_PLUS, ABILITY_MINUS, ABILITY_CLEAR_BODY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -15834,8 +14562,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 70, .baseSpDefense = 85, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = { TYPE_STEEL, TYPE_STEEL}, .catchRate = 60, .expYield = 154, .evYield_Defense = 2, @@ -15843,8 +14570,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_PLUS, ABILITY_MINUS, ABILITY_CLEAR_BODY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -15858,8 +14584,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 70, .baseSpDefense = 85, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = { TYPE_STEEL, TYPE_STEEL}, .catchRate = 30, .expYield = 234, .evYield_Defense = 3, @@ -15867,8 +14592,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_PLUS, ABILITY_MINUS, ABILITY_CLEAR_BODY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -15882,8 +14606,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 45, .baseSpDefense = 40, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 190, .expYield = 55, .evYield_Speed = 1, @@ -15891,8 +14614,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -15906,8 +14628,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 75, .baseSpDefense = 70, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 60, .expYield = 142, .evYield_Attack = 2, @@ -15915,8 +14636,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -15930,8 +14650,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 105, .baseSpDefense = 80, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 30, .expYield = 232, .evYield_Attack = 3, @@ -15939,8 +14658,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -15954,8 +14672,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 85, .baseSpDefense = 55, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 255, .expYield = 67, .evYield_SpAttack = 1, @@ -15963,8 +14680,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_TELEPATHY, ABILITY_SYNCHRONIZE, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -15978,8 +14694,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 125, .baseSpDefense = 95, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 90, .expYield = 170, .evYield_SpAttack = 2, @@ -15987,8 +14702,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_TELEPATHY, ABILITY_SYNCHRONIZE, ABILITY_ANALYTIC}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -16002,8 +14716,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 65, .baseSpDefense = 55, - .type1 = TYPE_GHOST, - .type2 = TYPE_FIRE, + .types = { TYPE_GHOST, TYPE_FIRE}, .catchRate = 190, .expYield = 55, .evYield_SpAttack = 1, @@ -16011,8 +14724,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, #if P_UPDATED_ABILITIES >= GEN_6 .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_INFILTRATOR}, #else @@ -16030,8 +14742,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 95, .baseSpDefense = 60, - .type1 = TYPE_GHOST, - .type2 = TYPE_FIRE, + .types = { TYPE_GHOST, TYPE_FIRE}, .catchRate = 90, .expYield = 130, .evYield_SpAttack = 2, @@ -16039,8 +14750,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, #if P_UPDATED_ABILITIES >= GEN_6 .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_INFILTRATOR}, #else @@ -16058,8 +14768,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 145, .baseSpDefense = 90, - .type1 = TYPE_GHOST, - .type2 = TYPE_FIRE, + .types = { TYPE_GHOST, TYPE_FIRE}, .catchRate = 45, .expYield = 234, .evYield_SpAttack = 3, @@ -16067,8 +14776,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, #if P_UPDATED_ABILITIES >= GEN_6 .abilities = {ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_INFILTRATOR}, #else @@ -16086,8 +14794,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 57, .baseSpAttack = 30, .baseSpDefense = 40, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 75, .expYield = 64, .evYield_Attack = 1, @@ -16095,8 +14802,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_RIVALRY, ABILITY_MOLD_BREAKER, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -16110,8 +14816,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 67, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 60, .expYield = 144, .evYield_Attack = 2, @@ -16119,8 +14824,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_RIVALRY, ABILITY_MOLD_BREAKER, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -16134,8 +14838,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 97, .baseSpAttack = 60, .baseSpDefense = 70, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 45, .expYield = 243, .evYield_Attack = 3, @@ -16143,8 +14846,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_RIVALRY, ABILITY_MOLD_BREAKER, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -16158,8 +14860,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 60, .baseSpDefense = 40, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 120, .expYield = 61, .evYield_Attack = 1, @@ -16167,8 +14868,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SNOW_CLOAK, ABILITY_SLUSH_RUSH, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -16186,8 +14886,7 @@ const struct BaseStats gBaseStats[] = #else .baseAttack = 110, #endif - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 60, .expYield = 177, .evYield_Attack = 2, @@ -16195,8 +14894,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SNOW_CLOAK, ABILITY_SLUSH_RUSH, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -16215,8 +14913,7 @@ const struct BaseStats gBaseStats[] = .baseHP = 70, .baseDefense = 30, #endif - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 25, .expYield = 180, .evYield_SpDefense = 2, @@ -16225,8 +14922,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -16240,8 +14936,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 40, .baseSpDefense = 65, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG}, .catchRate = 200, .expYield = 61, .evYield_Defense = 1, @@ -16249,8 +14944,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_HYDRATION, ABILITY_SHELL_ARMOR, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -16264,8 +14958,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 145, .baseSpAttack = 100, .baseSpDefense = 60, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG}, .catchRate = 75, .expYield = 173, .evYield_Speed = 2, @@ -16273,8 +14966,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_HYDRATION, ABILITY_STICKY_HOLD, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -16288,8 +14980,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 32, .baseSpAttack = 81, .baseSpDefense = 99, - .type1 = TYPE_GROUND, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_GROUND, TYPE_ELECTRIC}, .catchRate = 75, .expYield = 165, .evYield_HP = 2, @@ -16298,8 +14989,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_STATIC, ABILITY_LIMBER, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -16313,8 +15003,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 55, .baseSpDefense = 50, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 180, .expYield = 70, .evYield_Attack = 1, @@ -16322,8 +15011,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_REGENERATOR, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -16337,8 +15025,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 95, .baseSpDefense = 60, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 179, .evYield_Attack = 2, @@ -16346,8 +15033,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_REGENERATOR, ABILITY_RECKLESS}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -16361,8 +15047,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 48, .baseSpAttack = 60, .baseSpDefense = 90, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 45, .expYield = 170, .evYield_Attack = 2, @@ -16371,8 +15056,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_MONSTER}, .abilities = {ABILITY_ROUGH_SKIN, ABILITY_SHEER_FORCE, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -16386,8 +15070,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 35, .baseSpDefense = 50, - .type1 = TYPE_GROUND, - .type2 = TYPE_GHOST, + .types = { TYPE_GROUND, TYPE_GHOST}, .catchRate = 190, .expYield = 61, .evYield_Attack = 1, @@ -16396,8 +15079,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_IRON_FIST, ABILITY_KLUTZ, ABILITY_NO_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -16411,8 +15093,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 55, .baseSpDefense = 80, - .type1 = TYPE_GROUND, - .type2 = TYPE_GHOST, + .types = { TYPE_GROUND, TYPE_GHOST}, .catchRate = 90, .expYield = 169, .evYield_Attack = 2, @@ -16421,8 +15102,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_IRON_FIST, ABILITY_KLUTZ, ABILITY_NO_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -16436,8 +15116,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_DARK, - .type2 = TYPE_STEEL, + .types = { TYPE_DARK, TYPE_STEEL}, .catchRate = 120, .expYield = 68, .evYield_Attack = 1, @@ -16445,8 +15124,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_DEFIANT, ABILITY_INNER_FOCUS, ABILITY_PRESSURE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -16460,8 +15138,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 60, .baseSpDefense = 70, - .type1 = TYPE_DARK, - .type2 = TYPE_STEEL, + .types = { TYPE_DARK, TYPE_STEEL}, .catchRate = 45, .expYield = 172, .evYield_Attack = 2, @@ -16469,8 +15146,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_DEFIANT, ABILITY_INNER_FOCUS, ABILITY_PRESSURE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -16484,8 +15160,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 40, .baseSpDefense = 95, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 172, .evYield_Attack = 2, @@ -16493,8 +15168,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RECKLESS, ABILITY_SAP_SIPPER, ABILITY_SOUNDPROOF}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -16508,8 +15182,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 37, .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 190, .expYield = 70, .evYield_Attack = 1, @@ -16517,8 +15190,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -16532,8 +15204,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 57, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 60, .expYield = 179, .evYield_Attack = 2, @@ -16541,8 +15212,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -16556,8 +15226,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 45, .baseSpDefense = 65, - .type1 = TYPE_DARK, - .type2 = TYPE_FLYING, + .types = { TYPE_DARK, TYPE_FLYING}, .catchRate = 190, .expYield = 74, .evYield_Defense = 1, @@ -16565,8 +15234,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_BIG_PECKS, ABILITY_OVERCOAT, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -16580,8 +15248,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 55, .baseSpDefense = 95, - .type1 = TYPE_DARK, - .type2 = TYPE_FLYING, + .types = { TYPE_DARK, TYPE_FLYING}, .catchRate = 60, .expYield = 179, .evYield_SpAttack = 2, @@ -16589,8 +15256,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_BIG_PECKS, ABILITY_OVERCOAT, ABILITY_WEAK_ARMOR}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -16604,8 +15270,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 105, .baseSpDefense = 66, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 90, .expYield = 169, .evYield_SpAttack = 2, @@ -16613,8 +15278,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GLUTTONY, ABILITY_FLASH_FIRE, ABILITY_WHITE_SMOKE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -16628,8 +15292,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 109, .baseSpAttack = 48, .baseSpDefense = 48, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, + .types = { TYPE_BUG, TYPE_STEEL}, .catchRate = 90, .expYield = 169, .evYield_Defense = 2, @@ -16637,8 +15300,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_HUSTLE, ABILITY_TRUANT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -16652,8 +15314,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 38, .baseSpAttack = 45, .baseSpDefense = 50, - .type1 = TYPE_DARK, - .type2 = TYPE_DRAGON, + .types = { TYPE_DARK, TYPE_DRAGON}, .catchRate = 45, .expYield = 60, .evYield_Attack = 1, @@ -16661,8 +15322,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_HUSTLE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -16676,8 +15336,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 58, .baseSpAttack = 65, .baseSpDefense = 70, - .type1 = TYPE_DARK, - .type2 = TYPE_DRAGON, + .types = { TYPE_DARK, TYPE_DRAGON}, .catchRate = 45, .expYield = 147, .evYield_Attack = 2, @@ -16685,8 +15344,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_HUSTLE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -16700,8 +15358,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 98, .baseSpAttack = 125, .baseSpDefense = 90, - .type1 = TYPE_DARK, - .type2 = TYPE_DRAGON, + .types = { TYPE_DARK, TYPE_DRAGON}, .catchRate = 45, .expYield = 270, .evYield_SpAttack = 3, @@ -16709,8 +15366,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -16724,8 +15380,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 50, .baseSpDefense = 55, - .type1 = TYPE_BUG, - .type2 = TYPE_FIRE, + .types = { TYPE_BUG, TYPE_FIRE}, .catchRate = 45, .expYield = 72, .evYield_Attack = 1, @@ -16733,8 +15388,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_SWARM}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -16748,8 +15402,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 135, .baseSpDefense = 105, - .type1 = TYPE_BUG, - .type2 = TYPE_FIRE, + .types = { TYPE_BUG, TYPE_FIRE}, .catchRate = 15, .expYield = 248, .evYield_SpAttack = 3, @@ -16759,8 +15412,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_SWARM}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -16774,8 +15426,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 108, .baseSpAttack = 90, .baseSpDefense = 72, - .type1 = TYPE_STEEL, - .type2 = TYPE_FIGHTING, + .types = { TYPE_STEEL, TYPE_FIGHTING}, .catchRate = 3, .expYield = 261, .evYield_Defense = 3, @@ -16783,8 +15434,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -16799,8 +15449,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 108, .baseSpAttack = 72, .baseSpDefense = 90, - .type1 = TYPE_ROCK, - .type2 = TYPE_FIGHTING, + .types = { TYPE_ROCK, TYPE_FIGHTING}, .catchRate = 3, .expYield = 261, .evYield_Attack = 3, @@ -16808,8 +15457,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -16824,8 +15472,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 108, .baseSpAttack = 90, .baseSpDefense = 129, - .type1 = TYPE_GRASS, - .type2 = TYPE_FIGHTING, + .types = { TYPE_GRASS, TYPE_FIGHTING}, .catchRate = 3, .expYield = 261, .evYield_SpDefense = 3, @@ -16833,8 +15480,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -16849,8 +15495,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 111, .baseSpAttack = 125, .baseSpDefense = 80, - .type1 = TYPE_FLYING, - .type2 = TYPE_FLYING, + .types = { TYPE_FLYING, TYPE_FLYING}, .catchRate = 3, .expYield = 261, .evYield_Attack = 3, @@ -16858,8 +15503,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRANKSTER, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -16874,8 +15518,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 111, .baseSpAttack = 125, .baseSpDefense = 80, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_FLYING, + .types = { TYPE_ELECTRIC, TYPE_FLYING}, .catchRate = 3, .expYield = 261, .evYield_Attack = 3, @@ -16883,8 +15526,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRANKSTER, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -16899,8 +15541,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 150, .baseSpDefense = 120, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FIRE, + .types = { TYPE_DRAGON, TYPE_FIRE}, .catchRate = 3, .expYield = 306, .evYield_SpAttack = 3, @@ -16908,8 +15549,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_TURBOBLAZE, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -16924,8 +15564,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 120, .baseSpDefense = 100, - .type1 = TYPE_DRAGON, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_DRAGON, TYPE_ELECTRIC}, .catchRate = 3, .expYield = 306, .evYield_Attack = 3, @@ -16933,8 +15572,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_TERAVOLT, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -16949,8 +15587,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 101, .baseSpAttack = 115, .baseSpDefense = 80, - .type1 = TYPE_GROUND, - .type2 = TYPE_FLYING, + .types = { TYPE_GROUND, TYPE_FLYING}, .catchRate = 3, .expYield = 270, .evYield_SpAttack = 3, @@ -16958,8 +15595,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_SAND_FORCE, ABILITY_NONE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -16974,8 +15610,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 130, .baseSpDefense = 90, - .type1 = TYPE_DRAGON, - .type2 = TYPE_ICE, + .types = { TYPE_DRAGON, TYPE_ICE}, .catchRate = 3, .expYield = 297, .evYield_HP = 1, @@ -16985,8 +15620,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -17001,8 +15635,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 108, .baseSpAttack = 129, .baseSpDefense = 90, - .type1 = TYPE_WATER, - .type2 = TYPE_FIGHTING, + .types = { TYPE_WATER, TYPE_FIGHTING}, .catchRate = 3, .expYield = 261, .evYield_SpAttack = 3, @@ -17010,8 +15643,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -17026,8 +15658,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 128, .baseSpDefense = 128, - .type1 = TYPE_NORMAL, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_NORMAL, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 270, .evYield_Speed = 1, @@ -17039,15 +15670,14 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, .flags = SPECIES_FLAG_MYTHICAL, }, - [SPECIES_GENESECT] = GENESECT_BASE_STATS, + [SPECIES_GENESECT] = GENESECT_SPECIES_INFO, #endif #if P_GEN_6_POKEMON == TRUE @@ -17059,8 +15689,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 38, .baseSpAttack = 48, .baseSpDefense = 45, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 63, .evYield_Defense = 1, @@ -17068,8 +15697,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_BULLETPROOF}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -17083,8 +15711,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 57, .baseSpAttack = 56, .baseSpDefense = 58, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 142, .evYield_Defense = 2, @@ -17092,8 +15719,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_BULLETPROOF}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -17107,8 +15733,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 64, .baseSpAttack = 74, .baseSpDefense = 75, - .type1 = TYPE_GRASS, - .type2 = TYPE_FIGHTING, + .types = { TYPE_GRASS, TYPE_FIGHTING}, .catchRate = 45, .expYield = 239, .evYield_Defense = 3, @@ -17116,8 +15741,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_BULLETPROOF}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -17131,8 +15755,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 62, .baseSpDefense = 60, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 61, .evYield_SpAttack = 1, @@ -17140,8 +15763,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_MAGICIAN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -17155,8 +15777,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 73, .baseSpAttack = 90, .baseSpDefense = 70, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 143, .evYield_SpAttack = 2, @@ -17164,8 +15785,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_MAGICIAN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -17179,8 +15799,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 104, .baseSpAttack = 114, .baseSpDefense = 100, - .type1 = TYPE_FIRE, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_FIRE, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 240, .evYield_SpAttack = 3, @@ -17188,8 +15807,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_MAGICIAN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -17203,8 +15821,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 71, .baseSpAttack = 62, .baseSpDefense = 44, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 63, .evYield_Speed = 1, @@ -17212,8 +15829,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_PROTEAN}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -17227,8 +15843,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 97, .baseSpAttack = 83, .baseSpDefense = 56, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 142, .evYield_Speed = 2, @@ -17236,8 +15851,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_PROTEAN}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -17251,8 +15865,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 122, .baseSpAttack = 103, .baseSpDefense = 71, - .type1 = TYPE_WATER, - .type2 = TYPE_DARK, + .types = { TYPE_WATER, TYPE_DARK}, .catchRate = 45, .expYield = 239, .evYield_Speed = 3, @@ -17260,8 +15873,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_PROTEAN}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -17275,8 +15887,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 57, .baseSpAttack = 32, .baseSpDefense = 36, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 47, .evYield_Speed = 1, @@ -17284,8 +15895,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PICKUP, ABILITY_CHEEK_POUCH, ABILITY_HUGE_POWER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -17299,8 +15909,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 78, .baseSpAttack = 50, .baseSpDefense = 77, - .type1 = TYPE_NORMAL, - .type2 = TYPE_GROUND, + .types = { TYPE_NORMAL, TYPE_GROUND}, .catchRate = 127, .expYield = 148, .evYield_HP = 2, @@ -17308,8 +15917,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PICKUP, ABILITY_CHEEK_POUCH, ABILITY_HUGE_POWER}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -17323,8 +15931,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 62, .baseSpAttack = 40, .baseSpDefense = 38, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 255, .expYield = 56, .evYield_Speed = 1, @@ -17332,8 +15939,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_BIG_PECKS, ABILITY_NONE, ABILITY_GALE_WINGS}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -17347,8 +15953,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 84, .baseSpAttack = 56, .baseSpDefense = 52, - .type1 = TYPE_FIRE, - .type2 = TYPE_FLYING, + .types = { TYPE_FIRE, TYPE_FLYING}, .catchRate = 120, .expYield = 134, .evYield_Speed = 2, @@ -17356,8 +15961,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_GALE_WINGS}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -17371,8 +15975,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 126, .baseSpAttack = 74, .baseSpDefense = 69, - .type1 = TYPE_FIRE, - .type2 = TYPE_FLYING, + .types = { TYPE_FIRE, TYPE_FLYING}, .catchRate = 45, .expYield = 175, .evYield_Speed = 3, @@ -17380,8 +15983,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_GALE_WINGS}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -17395,8 +15997,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 27, .baseSpDefense = 25, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG}, .catchRate = 255, .expYield = 40, .evYield_Defense = 1, @@ -17404,8 +16005,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SHIELD_DUST, ABILITY_COMPOUND_EYES, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -17419,8 +16019,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 29, .baseSpAttack = 27, .baseSpDefense = 30, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG}, .catchRate = 120, .expYield = 75, .evYield_Defense = 2, @@ -17428,14 +16027,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_FRIEND_GUARD}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, }, - [SPECIES_VIVILLON] = VIVILLON_BASE_STATS(BODY_COLOR_WHITE), + [SPECIES_VIVILLON] = VIVILLON_SPECIES_INFO(BODY_COLOR_WHITE), [SPECIES_LITLEO] = { @@ -17445,8 +16043,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 72, .baseSpAttack = 73, .baseSpDefense = 54, - .type1 = TYPE_FIRE, - .type2 = TYPE_NORMAL, + .types = { TYPE_FIRE, TYPE_NORMAL}, .catchRate = 220, .expYield = 74, .evYield_SpAttack = 1, @@ -17454,8 +16051,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RIVALRY, ABILITY_UNNERVE, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -17469,8 +16065,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 106, .baseSpAttack = 109, .baseSpDefense = 66, - .type1 = TYPE_FIRE, - .type2 = TYPE_NORMAL, + .types = { TYPE_FIRE, TYPE_NORMAL}, .catchRate = 65, .expYield = 177, .evYield_SpAttack = 2, @@ -17478,19 +16073,18 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RIVALRY, ABILITY_UNNERVE, ABILITY_MOXIE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, .flags = SPECIES_FLAG_GENDER_DIFFERENCE, }, - [SPECIES_FLABEBE] = FLABEBE_BASE_STATS, + [SPECIES_FLABEBE] = FLABEBE_SPECIES_INFO, - [SPECIES_FLOETTE] = FLOETTE_BASE_STATS, + [SPECIES_FLOETTE] = FLOETTE_SPECIES_INFO, - [SPECIES_FLORGES] = FLORGES_BASE_STATS, + [SPECIES_FLORGES] = FLORGES_SPECIES_INFO, [SPECIES_SKIDDO] = { @@ -17500,8 +16094,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 52, .baseSpAttack = 62, .baseSpDefense = 57, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 200, .expYield = 70, .evYield_HP = 1, @@ -17509,8 +16102,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAP_SIPPER, ABILITY_NONE, ABILITY_GRASS_PELT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -17524,8 +16116,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 68, .baseSpAttack = 97, .baseSpDefense = 81, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 186, .evYield_HP = 2, @@ -17533,8 +16124,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAP_SIPPER, ABILITY_NONE, ABILITY_GRASS_PELT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -17548,8 +16138,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 43, .baseSpAttack = 46, .baseSpDefense = 48, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 220, .expYield = 70, .evYield_Attack = 1, @@ -17558,8 +16147,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_IRON_FIST, ABILITY_MOLD_BREAKER, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -17573,8 +16161,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 58, .baseSpAttack = 69, .baseSpDefense = 71, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_DARK, + .types = { TYPE_FIGHTING, TYPE_DARK}, .catchRate = 65, .expYield = 173, .evYield_Attack = 2, @@ -17583,14 +16170,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_IRON_FIST, ABILITY_MOLD_BREAKER, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, - [SPECIES_FURFROU] = FURFROU_BASE_STATS(FLIP), + [SPECIES_FURFROU] = FURFROU_SPECIES_INFO(FLIP), [SPECIES_ESPURR] = { @@ -17600,8 +16186,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 68, .baseSpAttack = 63, .baseSpDefense = 60, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 190, .expYield = 71, .evYield_Speed = 1, @@ -17609,8 +16194,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_KEEN_EYE, ABILITY_INFILTRATOR, ABILITY_OWN_TEMPO}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -17624,8 +16208,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 104, .baseSpAttack = 83, .baseSpDefense = 81, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 75, .expYield = 163, .evYield_Speed = 2, @@ -17633,8 +16216,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_KEEN_EYE, ABILITY_INFILTRATOR, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -17648,8 +16230,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 28, .baseSpAttack = 35, .baseSpDefense = 37, - .type1 = TYPE_STEEL, - .type2 = TYPE_GHOST, + .types = { TYPE_STEEL, TYPE_GHOST}, .catchRate = 180, .expYield = 65, .evYield_Defense = 1, @@ -17657,8 +16238,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_NO_GUARD, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -17672,8 +16252,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 45, .baseSpDefense = 49, - .type1 = TYPE_STEEL, - .type2 = TYPE_GHOST, + .types = { TYPE_STEEL, TYPE_GHOST}, .catchRate = 90, .expYield = 157, .evYield_Defense = 2, @@ -17681,8 +16260,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_NO_GUARD, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -17701,8 +16279,7 @@ const struct BaseStats gBaseStats[] = .baseDefense = 150, .baseSpDefense = 150, #endif - .type1 = TYPE_STEEL, - .type2 = TYPE_GHOST, + .types = { TYPE_STEEL, TYPE_GHOST}, .catchRate = 45, .expYield = 234, .evYield_Defense = 2, @@ -17711,8 +16288,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STANCE_CHANGE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -17726,8 +16302,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 23, .baseSpAttack = 63, .baseSpDefense = 65, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, .catchRate = 200, .expYield = 68, .evYield_HP = 1, @@ -17735,8 +16310,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HEALER, ABILITY_NONE, ABILITY_AROMA_VEIL}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -17750,8 +16324,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 29, .baseSpAttack = 99, .baseSpDefense = 89, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, .catchRate = 140, .expYield = 162, .evYield_HP = 2, @@ -17759,8 +16332,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HEALER, ABILITY_NONE, ABILITY_AROMA_VEIL}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -17774,8 +16346,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 49, .baseSpAttack = 59, .baseSpDefense = 57, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, .catchRate = 200, .expYield = 68, .evYield_Defense = 1, @@ -17783,8 +16354,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -17798,8 +16368,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 72, .baseSpAttack = 85, .baseSpDefense = 75, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, .catchRate = 140, .expYield = 168, .evYield_Defense = 2, @@ -17807,8 +16376,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_UNBURDEN}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -17822,8 +16390,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 37, .baseSpDefense = 46, - .type1 = TYPE_DARK, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_DARK, TYPE_PSYCHIC}, .catchRate = 190, .expYield = 58, .evYield_Attack = 1, @@ -17831,8 +16398,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2}, .abilities = {ABILITY_CONTRARY, ABILITY_SUCTION_CUPS, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -17846,8 +16412,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 73, .baseSpAttack = 68, .baseSpDefense = 75, - .type1 = TYPE_DARK, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_DARK, TYPE_PSYCHIC}, .catchRate = 80, .expYield = 169, .evYield_Attack = 2, @@ -17855,8 +16420,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2}, .abilities = {ABILITY_CONTRARY, ABILITY_SUCTION_CUPS, ABILITY_INFILTRATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -17870,8 +16434,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 39, .baseSpDefense = 56, - .type1 = TYPE_ROCK, - .type2 = TYPE_WATER, + .types = { TYPE_ROCK, TYPE_WATER}, .catchRate = 120, .expYield = 61, .evYield_Attack = 1, @@ -17879,8 +16442,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_SNIPER, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -17894,8 +16456,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 68, .baseSpAttack = 54, .baseSpDefense = 86, - .type1 = TYPE_ROCK, - .type2 = TYPE_WATER, + .types = { TYPE_ROCK, TYPE_WATER}, .catchRate = 45, .expYield = 175, .evYield_Attack = 2, @@ -17903,8 +16464,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_SNIPER, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -17918,8 +16478,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_POISON, - .type2 = TYPE_WATER, + .types = { TYPE_POISON, TYPE_WATER}, .catchRate = 225, .expYield = 64, .evYield_SpDefense = 1, @@ -17927,8 +16486,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, .abilities = {ABILITY_POISON_POINT, ABILITY_POISON_TOUCH, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -17942,8 +16500,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 44, .baseSpAttack = 97, .baseSpDefense = 123, - .type1 = TYPE_POISON, - .type2 = TYPE_DRAGON, + .types = { TYPE_POISON, TYPE_DRAGON}, .catchRate = 55, .expYield = 173, .evYield_SpDefense = 2, @@ -17951,8 +16508,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON}, .abilities = {ABILITY_POISON_POINT, ABILITY_POISON_TOUCH, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -17966,8 +16522,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 44, .baseSpAttack = 58, .baseSpDefense = 63, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 225, .expYield = 66, .evYield_SpAttack = 1, @@ -17975,8 +16530,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_MEGA_LAUNCHER, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -17990,8 +16544,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 59, .baseSpAttack = 120, .baseSpDefense = 89, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 55, .expYield = 100, .evYield_SpAttack = 2, @@ -17999,8 +16552,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_MEGA_LAUNCHER, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -18014,8 +16566,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 61, .baseSpDefense = 43, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_NORMAL, + .types = { TYPE_ELECTRIC, TYPE_NORMAL}, .catchRate = 190, .expYield = 58, .evYield_Speed = 1, @@ -18023,8 +16574,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_DRY_SKIN, ABILITY_SAND_VEIL, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -18038,8 +16588,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 109, .baseSpAttack = 109, .baseSpDefense = 94, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_NORMAL, + .types = { TYPE_ELECTRIC, TYPE_NORMAL}, .catchRate = 75, .expYield = 168, .evYield_Speed = 1, @@ -18048,8 +16597,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_DRY_SKIN, ABILITY_SAND_VEIL, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -18063,8 +16611,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 48, .baseSpAttack = 45, .baseSpDefense = 45, - .type1 = TYPE_ROCK, - .type2 = TYPE_DRAGON, + .types = { TYPE_ROCK, TYPE_DRAGON}, .catchRate = 45, .expYield = 72, .evYield_Attack = 1, @@ -18072,8 +16619,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_STRONG_JAW, ABILITY_NONE, ABILITY_STURDY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -18087,8 +16633,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 71, .baseSpAttack = 69, .baseSpDefense = 59, - .type1 = TYPE_ROCK, - .type2 = TYPE_DRAGON, + .types = { TYPE_ROCK, TYPE_DRAGON}, .catchRate = 45, .expYield = 182, .evYield_Attack = 2, @@ -18096,8 +16641,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_STRONG_JAW, ABILITY_NONE, ABILITY_ROCK_HEAD}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -18111,8 +16655,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 46, .baseSpAttack = 67, .baseSpDefense = 63, - .type1 = TYPE_ROCK, - .type2 = TYPE_ICE, + .types = { TYPE_ROCK, TYPE_ICE}, .catchRate = 45, .expYield = 72, .evYield_HP = 1, @@ -18120,8 +16663,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_REFRIGERATE, ABILITY_NONE, ABILITY_SNOW_WARNING}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -18135,8 +16677,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 58, .baseSpAttack = 99, .baseSpDefense = 92, - .type1 = TYPE_ROCK, - .type2 = TYPE_ICE, + .types = { TYPE_ROCK, TYPE_ICE}, .catchRate = 45, .expYield = 104, .evYield_HP = 2, @@ -18144,8 +16685,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_REFRIGERATE, ABILITY_NONE, ABILITY_SNOW_WARNING}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -18159,8 +16699,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 110, .baseSpDefense = 130, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, .catchRate = 45, .expYield = 184, .evYield_SpDefense = 2, @@ -18168,8 +16707,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_CUTE_CHARM, ABILITY_CUTE_CHARM, ABILITY_PIXILATE}, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, @@ -18183,8 +16721,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 118, .baseSpAttack = 74, .baseSpDefense = 63, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FLYING, + .types = { TYPE_FIGHTING, TYPE_FLYING}, .catchRate = 100, .expYield = 175, .evYield_Attack = 2, @@ -18194,11 +16731,10 @@ const struct BaseStats gBaseStats[] = .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroup1 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_HUMAN_LIKE}, #else - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, #endif - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, .abilities = {ABILITY_LIMBER, ABILITY_UNBURDEN, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -18212,8 +16748,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 101, .baseSpAttack = 81, .baseSpDefense = 67, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_FAIRY, + .types = { TYPE_ELECTRIC, TYPE_FAIRY}, .catchRate = 180, .expYield = 151, .evYield_Speed = 2, @@ -18221,8 +16756,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, .abilities = {ABILITY_CHEEK_POUCH, ABILITY_PICKUP, ABILITY_PLUS}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -18236,8 +16770,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 50, .baseSpDefense = 150, - .type1 = TYPE_ROCK, - .type2 = TYPE_FAIRY, + .types = { TYPE_ROCK, TYPE_FAIRY}, .catchRate = 60, .expYield = 100, .evYield_Defense = 1, @@ -18246,8 +16779,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_STURDY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -18261,8 +16793,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 55, .baseSpDefense = 75, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 45, .expYield = 60, .evYield_SpDefense = 1, @@ -18271,8 +16802,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAP_SIPPER, ABILITY_HYDRATION, ABILITY_GOOEY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -18286,8 +16816,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 83, .baseSpDefense = 113, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 45, .expYield = 158, .evYield_SpDefense = 2, @@ -18296,8 +16825,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAP_SIPPER, ABILITY_HYDRATION, ABILITY_GOOEY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -18311,8 +16839,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 110, .baseSpDefense = 150, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 45, .expYield = 270, .evYield_SpDefense = 3, @@ -18320,8 +16847,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAP_SIPPER, ABILITY_HYDRATION, ABILITY_GOOEY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -18335,8 +16861,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 80, .baseSpDefense = 87, - .type1 = TYPE_STEEL, - .type2 = TYPE_FAIRY, + .types = { TYPE_STEEL, TYPE_FAIRY}, .catchRate = 75, .expYield = 165, .evYield_Defense = 1, @@ -18344,8 +16869,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_PRANKSTER, ABILITY_NONE, ABILITY_MAGICIAN}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -18359,8 +16883,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 38, .baseSpAttack = 50, .baseSpDefense = 60, - .type1 = TYPE_GHOST, - .type2 = TYPE_GRASS, + .types = { TYPE_GHOST, TYPE_GRASS}, .catchRate = 120, .expYield = 62, .evYield_Attack = 1, @@ -18368,8 +16891,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_FRISK, ABILITY_HARVEST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -18383,8 +16905,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 56, .baseSpAttack = 65, .baseSpDefense = 82, - .type1 = TYPE_GHOST, - .type2 = TYPE_GRASS, + .types = { TYPE_GHOST, TYPE_GRASS}, .catchRate = 60, .expYield = 166, .evYield_Attack = 2, @@ -18392,8 +16913,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_NATURAL_CURE, ABILITY_FRISK, ABILITY_HARVEST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -18407,7 +16927,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 51, .baseSpAttack = 44, .baseSpDefense = 55, - PUMKPABOO_MISC_STATS, + PUMKPABOO_MISC_INFO, }, [SPECIES_GOURGEIST] = @@ -18418,7 +16938,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 84, .baseSpAttack = 58, .baseSpDefense = 75, - GOURGEIST_MISC_STATS, + GOURGEIST_MISC_INFO, }, [SPECIES_BERGMITE] = @@ -18429,8 +16949,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 28, .baseSpAttack = 32, .baseSpDefense = 35, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 190, .expYield = 61, .evYield_Defense = 1, @@ -18438,11 +16957,10 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, #else - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MINERAL}, #endif .abilities = {ABILITY_OWN_TEMPO, ABILITY_ICE_BODY, ABILITY_STURDY}, .bodyColor = BODY_COLOR_BLUE, @@ -18457,8 +16975,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 28, .baseSpAttack = 44, .baseSpDefense = 46, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 55, .expYield = 180, .evYield_Defense = 2, @@ -18466,11 +16983,10 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, #else - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MINERAL}, #endif .abilities = {ABILITY_OWN_TEMPO, ABILITY_ICE_BODY, ABILITY_STURDY}, .bodyColor = BODY_COLOR_BLUE, @@ -18485,8 +17001,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 45, .baseSpDefense = 40, - .type1 = TYPE_FLYING, - .type2 = TYPE_DRAGON, + .types = { TYPE_FLYING, TYPE_DRAGON}, .catchRate = 190, .expYield = 49, .evYield_Speed = 1, @@ -18494,11 +17009,10 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON}, #else - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, #endif .abilities = {ABILITY_FRISK, ABILITY_INFILTRATOR, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PURPLE, @@ -18513,8 +17027,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 123, .baseSpAttack = 97, .baseSpDefense = 80, - .type1 = TYPE_FLYING, - .type2 = TYPE_DRAGON, + .types = { TYPE_FLYING, TYPE_DRAGON}, .catchRate = 45, .expYield = 187, .evYield_Speed = 2, @@ -18522,18 +17035,17 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, #if P_UPDATED_EGG_GROUPS >= GEN_8 - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON}, #else - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, #endif .abilities = {ABILITY_FRISK, ABILITY_INFILTRATOR, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, - [SPECIES_XERNEAS] = XERNEAS_BASE_STATS, + [SPECIES_XERNEAS] = XERNEAS_SPECIES_INFO, [SPECIES_YVELTAL] = { @@ -18543,8 +17055,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 99, .baseSpAttack = 131, .baseSpDefense = 98, - .type1 = TYPE_DARK, - .type2 = TYPE_FLYING, + .types = { TYPE_DARK, TYPE_FLYING}, .catchRate = 45, .expYield = 306, .evYield_HP = 3, @@ -18552,15 +17063,14 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_DARK_AURA, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_ZYGARDE] = ZYGARDE_50_BASE_STATS(ABILITY_AURA_BREAK), + [SPECIES_ZYGARDE] = ZYGARDE_50_SPECIES_INFO(ABILITY_AURA_BREAK), [SPECIES_DIANCIE] = { @@ -18570,8 +17080,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 100, .baseSpDefense = 150, - .type1 = TYPE_ROCK, - .type2 = TYPE_FAIRY, + .types = { TYPE_ROCK, TYPE_FAIRY}, .catchRate = 3, .expYield = 270, .evYield_Defense = 1, @@ -18580,8 +17089,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -18596,8 +17104,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 150, .baseSpDefense = 130, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_GHOST, + .types = { TYPE_PSYCHIC, TYPE_GHOST}, .catchRate = 3, .expYield = 270, .evYield_SpAttack = 3, @@ -18605,8 +17112,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_MAGICIAN, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -18621,8 +17127,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 130, .baseSpDefense = 90, - .type1 = TYPE_FIRE, - .type2 = TYPE_WATER, + .types = { TYPE_FIRE, TYPE_WATER}, .catchRate = 3, .expYield = 270, .evYield_SpAttack = 3, @@ -18630,8 +17135,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_WATER_ABSORB, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -18648,8 +17152,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 42, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_GRASS, - .type2 = TYPE_FLYING, + .types = { TYPE_GRASS, TYPE_FLYING}, .catchRate = 45, .expYield = 64, .evYield_HP = 1, @@ -18657,8 +17160,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -18672,8 +17174,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 52, .baseSpAttack = 70, .baseSpDefense = 70, - .type1 = TYPE_GRASS, - .type2 = TYPE_FLYING, + .types = { TYPE_GRASS, TYPE_FLYING}, .catchRate = 45, .expYield = 147, .evYield_HP = 2, @@ -18681,8 +17182,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -18696,8 +17196,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 100, .baseSpDefense = 100, - .type1 = TYPE_GRASS, - .type2 = TYPE_GHOST, + .types = { TYPE_GRASS, TYPE_GHOST}, .catchRate = 45, .expYield = 239, .evYield_Attack = 3, @@ -18705,8 +17204,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -18720,8 +17218,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 60, .baseSpDefense = 40, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 64, .evYield_Speed = 1, @@ -18729,8 +17226,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_INTIMIDATE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -18744,8 +17240,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 80, .baseSpDefense = 50, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 147, .evYield_Speed = 2, @@ -18753,8 +17248,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_INTIMIDATE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -18768,8 +17262,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 80, .baseSpDefense = 90, - .type1 = TYPE_FIRE, - .type2 = TYPE_DARK, + .types = { TYPE_FIRE, TYPE_DARK}, .catchRate = 45, .expYield = 239, .evYield_Attack = 3, @@ -18777,8 +17270,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_INTIMIDATE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -18792,8 +17284,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 66, .baseSpDefense = 56, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 64, .evYield_SpAttack = 1, @@ -18801,8 +17292,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_LIQUID_VOICE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -18816,8 +17306,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 91, .baseSpDefense = 81, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 147, .evYield_SpAttack = 2, @@ -18825,8 +17314,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_LIQUID_VOICE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -18840,8 +17328,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 126, .baseSpDefense = 116, - .type1 = TYPE_WATER, - .type2 = TYPE_FAIRY, + .types = { TYPE_WATER, TYPE_FAIRY}, .catchRate = 45, .expYield = 239, .evYield_SpAttack = 3, @@ -18849,8 +17336,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_LIQUID_VOICE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -18864,8 +17350,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 255, .expYield = 53, .evYield_Attack = 1, @@ -18874,8 +17359,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_SKILL_LINK, ABILITY_PICKUP}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -18889,8 +17373,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 120, .expYield = 124, .evYield_Attack = 2, @@ -18899,8 +17382,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_SKILL_LINK, ABILITY_PICKUP}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -18914,8 +17396,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 75, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 218, .evYield_Attack = 3, @@ -18924,8 +17405,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_SKILL_LINK, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -18939,8 +17419,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 51, .evYield_Attack = 1, @@ -18949,8 +17428,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_STAKEOUT, ABILITY_STRONG_JAW, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -18964,8 +17442,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 55, .baseSpDefense = 60, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 127, .expYield = 146, .evYield_Attack = 2, @@ -18974,8 +17451,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_STAKEOUT, ABILITY_STRONG_JAW, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -18989,8 +17465,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 46, .baseSpAttack = 55, .baseSpDefense = 45, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG}, .catchRate = 255, .expYield = 60, .evYield_Attack = 1, @@ -18998,8 +17473,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -19013,8 +17487,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 36, .baseSpAttack = 55, .baseSpDefense = 75, - .type1 = TYPE_BUG, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_BUG, TYPE_ELECTRIC}, .catchRate = 120, .expYield = 140, .evYield_Defense = 2, @@ -19023,8 +17496,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_BATTERY, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -19038,8 +17510,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 43, .baseSpAttack = 145, .baseSpDefense = 75, - .type1 = TYPE_BUG, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_BUG, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 225, .evYield_SpAttack = 3, @@ -19047,8 +17518,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -19062,8 +17532,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 63, .baseSpAttack = 42, .baseSpDefense = 47, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 225, .expYield = 68, .evYield_Attack = 1, @@ -19072,8 +17541,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_IRON_FIST, ABILITY_ANGER_POINT}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -19087,8 +17555,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 43, .baseSpAttack = 62, .baseSpDefense = 67, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_ICE, + .types = { TYPE_FIGHTING, TYPE_ICE}, .catchRate = 60, .expYield = 167, .evYield_Attack = 2, @@ -19097,14 +17564,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_3, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3}, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_IRON_FIST, ABILITY_ANGER_POINT}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, - [SPECIES_ORICORIO] = ORICORIO_BASE_STATS(TYPE_FIRE, BODY_COLOR_RED), + [SPECIES_ORICORIO] = ORICORIO_SPECIES_INFO(TYPE_FIRE, BODY_COLOR_RED), [SPECIES_CUTIEFLY] = { @@ -19114,8 +17580,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 84, .baseSpAttack = 55, .baseSpDefense = 40, - .type1 = TYPE_BUG, - .type2 = TYPE_FAIRY, + .types = { TYPE_BUG, TYPE_FAIRY}, .catchRate = 190, .expYield = 61, .evYield_Speed = 1, @@ -19124,8 +17589,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HONEY_GATHER, ABILITY_SHIELD_DUST, ABILITY_SWEET_VEIL}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -19139,8 +17603,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 124, .baseSpAttack = 95, .baseSpDefense = 70, - .type1 = TYPE_BUG, - .type2 = TYPE_FAIRY, + .types = { TYPE_BUG, TYPE_FAIRY}, .catchRate = 75, .expYield = 162, .evYield_Speed = 2, @@ -19149,14 +17612,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HONEY_GATHER, ABILITY_SHIELD_DUST, ABILITY_SWEET_VEIL}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, }, - [SPECIES_ROCKRUFF] = ROCKRUFF_BASE_STATS(ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT, ABILITY_STEADFAST), + [SPECIES_ROCKRUFF] = ROCKRUFF_SPECIES_INFO(ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT, ABILITY_STEADFAST), [SPECIES_LYCANROC] = { @@ -19166,8 +17628,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 112, .baseSpAttack = 55, .baseSpDefense = 65, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 90, .expYield = 170, .evYield_Attack = 2, @@ -19175,8 +17636,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_KEEN_EYE, ABILITY_SAND_RUSH, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -19190,8 +17650,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 25, .baseSpDefense = 25, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 61, .evYield_HP = 1, @@ -19199,8 +17658,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_SCHOOLING, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -19214,8 +17672,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 43, .baseSpDefense = 52, - .type1 = TYPE_POISON, - .type2 = TYPE_WATER, + .types = { TYPE_POISON, TYPE_WATER}, .catchRate = 190, .expYield = 61, .evYield_Defense = 1, @@ -19224,8 +17681,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_MERCILESS, ABILITY_LIMBER, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -19239,8 +17695,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 53, .baseSpDefense = 142, - .type1 = TYPE_POISON, - .type2 = TYPE_WATER, + .types = { TYPE_POISON, TYPE_WATER}, .catchRate = 75, .expYield = 173, .evYield_Defense = 2, @@ -19249,8 +17704,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_MERCILESS, ABILITY_LIMBER, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -19264,8 +17718,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 45, .baseSpDefense = 55, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND}, .catchRate = 190, .expYield = 77, .evYield_Attack = 1, @@ -19274,8 +17727,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_OWN_TEMPO, ABILITY_STAMINA, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -19289,8 +17741,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 55, .baseSpDefense = 85, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND}, .catchRate = 60, .expYield = 175, .evYield_Attack = 2, @@ -19299,8 +17750,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_OWN_TEMPO, ABILITY_STAMINA, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -19314,8 +17764,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 27, .baseSpAttack = 40, .baseSpDefense = 72, - .type1 = TYPE_WATER, - .type2 = TYPE_BUG, + .types = { TYPE_WATER, TYPE_BUG}, .catchRate = 200, .expYield = 54, .evYield_SpDefense = 1, @@ -19324,8 +17773,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_BUG}, .abilities = {ABILITY_WATER_BUBBLE, ABILITY_NONE, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -19339,8 +17787,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 42, .baseSpAttack = 50, .baseSpDefense = 132, - .type1 = TYPE_WATER, - .type2 = TYPE_BUG, + .types = { TYPE_WATER, TYPE_BUG}, .catchRate = 100, .expYield = 159, .evYield_SpDefense = 2, @@ -19349,8 +17796,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_BUG}, .abilities = {ABILITY_WATER_BUBBLE, ABILITY_NONE, ABILITY_WATER_ABSORB}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -19364,8 +17810,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 50, .baseSpDefense = 35, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 190, .expYield = 50, .evYield_Attack = 1, @@ -19374,8 +17819,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_LEAF_GUARD, ABILITY_NONE, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -19389,8 +17833,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 80, .baseSpDefense = 90, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 75, .expYield = 168, .evYield_Attack = 2, @@ -19399,8 +17842,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_LEAF_GUARD, ABILITY_NONE, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -19414,8 +17856,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 65, .baseSpDefense = 75, - .type1 = TYPE_GRASS, - .type2 = TYPE_FAIRY, + .types = { TYPE_GRASS, TYPE_FAIRY}, .catchRate = 190, .expYield = 57, .evYield_SpDefense = 1, @@ -19425,8 +17866,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_ILLUMINATE, ABILITY_EFFECT_SPORE, ABILITY_RAIN_DISH}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -19440,8 +17880,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 90, .baseSpDefense = 100, - .type1 = TYPE_GRASS, - .type2 = TYPE_FAIRY, + .types = { TYPE_GRASS, TYPE_FAIRY}, .catchRate = 75, .expYield = 142, .evYield_SpDefense = 2, @@ -19451,8 +17890,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_ILLUMINATE, ABILITY_EFFECT_SPORE, ABILITY_RAIN_DISH}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -19466,8 +17904,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 77, .baseSpAttack = 71, .baseSpDefense = 40, - .type1 = TYPE_POISON, - .type2 = TYPE_FIRE, + .types = { TYPE_POISON, TYPE_FIRE}, .catchRate = 120, .expYield = 64, .evYield_Speed = 1, @@ -19476,8 +17913,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_CORROSION, ABILITY_NONE, ABILITY_OBLIVIOUS}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -19491,8 +17927,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 117, .baseSpAttack = 111, .baseSpDefense = 60, - .type1 = TYPE_POISON, - .type2 = TYPE_FIRE, + .types = { TYPE_POISON, TYPE_FIRE}, .catchRate = 45, .expYield = 168, .evYield_Speed = 2, @@ -19501,8 +17936,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_CORROSION, ABILITY_NONE, ABILITY_OBLIVIOUS}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -19516,8 +17950,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 45, .baseSpDefense = 50, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FIGHTING, + .types = { TYPE_NORMAL, TYPE_FIGHTING}, .catchRate = 140, .expYield = 68, .evYield_Attack = 1, @@ -19525,8 +17958,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_FLUFFY, ABILITY_KLUTZ, ABILITY_CUTE_CHARM}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -19540,8 +17972,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 55, .baseSpDefense = 60, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FIGHTING, + .types = { TYPE_NORMAL, TYPE_FIGHTING}, .catchRate = 70, .expYield = 175, .evYield_Attack = 2, @@ -19549,8 +17980,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_FLUFFY, ABILITY_KLUTZ, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -19564,8 +17994,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 32, .baseSpAttack = 30, .baseSpDefense = 38, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 235, .expYield = 42, .evYield_HP = 1, @@ -19574,8 +18003,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_LEAF_GUARD, ABILITY_OBLIVIOUS, ABILITY_SWEET_VEIL}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -19589,8 +18017,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 62, .baseSpAttack = 40, .baseSpDefense = 48, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 120, .expYield = 102, .evYield_Speed = 2, @@ -19599,8 +18026,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_LEAF_GUARD, ABILITY_OBLIVIOUS, ABILITY_SWEET_VEIL}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = TRUE, @@ -19614,8 +18040,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 72, .baseSpAttack = 50, .baseSpDefense = 98, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 230, .evYield_Attack = 3, @@ -19624,8 +18049,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_LEAF_GUARD, ABILITY_QUEENLY_MAJESTY, ABILITY_SWEET_VEIL}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = TRUE, @@ -19639,8 +18063,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 82, .baseSpDefense = 110, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, .catchRate = 60, .expYield = 170, .evYield_SpDefense = 2, @@ -19649,8 +18072,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_FLOWER_VEIL, ABILITY_TRIAGE, ABILITY_NATURAL_CURE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -19664,8 +18086,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 90, .baseSpDefense = 110, - .type1 = TYPE_NORMAL, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_NORMAL, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 172, .evYield_SpDefense = 2, @@ -19673,8 +18094,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_TELEPATHY, ABILITY_SYMBIOSIS}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -19688,8 +18108,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 40, .baseSpDefense = 60, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 172, .evYield_Attack = 2, @@ -19697,8 +18116,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RECEIVER, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -19712,8 +18130,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 20, .baseSpDefense = 30, - .type1 = TYPE_BUG, - .type2 = TYPE_WATER, + .types = { TYPE_BUG, TYPE_WATER}, .catchRate = 90, .expYield = 46, .evYield_Speed = 1, @@ -19721,8 +18138,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_WATER_3}, .abilities = {ABILITY_WIMP_OUT, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -19736,8 +18152,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 60, .baseSpDefense = 90, - .type1 = TYPE_BUG, - .type2 = TYPE_WATER, + .types = { TYPE_BUG, TYPE_WATER}, .catchRate = 45, .expYield = 186, .evYield_Defense = 2, @@ -19745,8 +18160,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_WATER_3}, .abilities = {ABILITY_EMERGENCY_EXIT, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -19760,8 +18174,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 70, .baseSpDefense = 45, - .type1 = TYPE_GHOST, - .type2 = TYPE_GROUND, + .types = { TYPE_GHOST, TYPE_GROUND}, .catchRate = 140, .expYield = 64, .evYield_Defense = 1, @@ -19770,8 +18183,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_WATER_COMPACTION, ABILITY_NONE, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -19785,8 +18197,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 100, .baseSpDefense = 75, - .type1 = TYPE_GHOST, - .type2 = TYPE_GROUND, + .types = { TYPE_GHOST, TYPE_GROUND}, .catchRate = 60, .expYield = 168, .evYield_Defense = 2, @@ -19795,8 +18206,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_WATER_COMPACTION, ABILITY_NONE, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -19810,8 +18220,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 5, .baseSpAttack = 30, .baseSpDefense = 130, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 144, .evYield_SpDefense = 2, @@ -19819,8 +18228,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1}, .abilities = {ABILITY_INNARDS_OUT, ABILITY_NONE, ABILITY_UNAWARE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -19834,8 +18242,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 59, .baseSpAttack = 95, .baseSpDefense = 95, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 3, .expYield = 107, .evYield_HP = 2, @@ -19843,17 +18250,16 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_SILVALLY] = SILVALLY_BASE_STATS(TYPE_NORMAL), + [SPECIES_SILVALLY] = SILVALLY_SPECIES_INFO(TYPE_NORMAL), - [SPECIES_MINIOR] = MINIOR_METEOR_BASE_STATS, + [SPECIES_MINIOR] = MINIOR_METEOR_SPECIES_INFO, [SPECIES_KOMALA] = { @@ -19863,8 +18269,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 75, .baseSpDefense = 95, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 168, .evYield_Attack = 2, @@ -19872,8 +18277,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_COMATOSE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -19887,8 +18291,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 36, .baseSpAttack = 91, .baseSpDefense = 85, - .type1 = TYPE_FIRE, - .type2 = TYPE_DRAGON, + .types = { TYPE_FIRE, TYPE_DRAGON}, .catchRate = 70, .expYield = 170, .evYield_Defense = 2, @@ -19897,8 +18300,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -19912,8 +18314,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 96, .baseSpAttack = 40, .baseSpDefense = 73, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_STEEL, + .types = { TYPE_ELECTRIC, TYPE_STEEL}, .catchRate = 180, .expYield = 152, .evYield_Attack = 2, @@ -19922,14 +18323,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, .abilities = {ABILITY_IRON_BARBS, ABILITY_LIGHTNING_ROD, ABILITY_STURDY}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, }, - [SPECIES_MIMIKYU] = MIMIKYU_BASE_STATS, + [SPECIES_MIMIKYU] = MIMIKYU_SPECIES_INFO, [SPECIES_BRUXISH] = { @@ -19939,8 +18339,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 92, .baseSpAttack = 70, .baseSpDefense = 70, - .type1 = TYPE_WATER, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_WATER, TYPE_PSYCHIC}, .catchRate = 80, .expYield = 166, .evYield_Attack = 2, @@ -19949,8 +18348,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_DAZZLING, ABILITY_STRONG_JAW, ABILITY_WONDER_SKIN}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -19964,8 +18362,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 36, .baseSpAttack = 135, .baseSpDefense = 91, - .type1 = TYPE_NORMAL, - .type2 = TYPE_DRAGON, + .types = { TYPE_NORMAL, TYPE_DRAGON}, .catchRate = 70, .expYield = 170, .evYield_SpAttack = 2, @@ -19974,8 +18371,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_BERSERK, ABILITY_SAP_SIPPER, ABILITY_CLOUD_NINE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -19989,8 +18385,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 86, .baseSpDefense = 90, - .type1 = TYPE_GHOST, - .type2 = TYPE_GRASS, + .types = { TYPE_GHOST, TYPE_GRASS}, .catchRate = 25, .expYield = 181, .evYield_Attack = 2, @@ -19998,8 +18393,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STEELWORKER, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -20013,8 +18407,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 45, .baseSpDefense = 45, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 45, .expYield = 60, .evYield_Defense = 1, @@ -20023,8 +18416,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_BULLETPROOF, ABILITY_SOUNDPROOF, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -20038,8 +18430,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 65, .baseSpDefense = 70, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FIGHTING, + .types = { TYPE_DRAGON, TYPE_FIGHTING}, .catchRate = 45, .expYield = 147, .evYield_Defense = 2, @@ -20048,8 +18439,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_BULLETPROOF, ABILITY_SOUNDPROOF, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -20063,8 +18453,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 100, .baseSpDefense = 105, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FIGHTING, + .types = { TYPE_DRAGON, TYPE_FIGHTING}, .catchRate = 45, .expYield = 270, .evYield_Defense = 3, @@ -20073,8 +18462,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_BULLETPROOF, ABILITY_SOUNDPROOF, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -20088,8 +18476,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 95, .baseSpDefense = 75, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_FAIRY, + .types = { TYPE_ELECTRIC, TYPE_FAIRY}, .catchRate = 3, .expYield = 257, .evYield_Speed = 3, @@ -20097,8 +18484,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_ELECTRIC_SURGE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -20113,8 +18499,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 130, .baseSpDefense = 115, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FAIRY, + .types = { TYPE_PSYCHIC, TYPE_FAIRY}, .catchRate = 3, .expYield = 257, .evYield_SpAttack = 3, @@ -20122,8 +18507,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PSYCHIC_SURGE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -20138,8 +18522,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 85, .baseSpDefense = 95, - .type1 = TYPE_GRASS, - .type2 = TYPE_FAIRY, + .types = { TYPE_GRASS, TYPE_FAIRY}, .catchRate = 3, .expYield = 257, .evYield_Attack = 3, @@ -20147,8 +18530,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_GRASSY_SURGE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -20163,8 +18545,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 95, .baseSpDefense = 130, - .type1 = TYPE_WATER, - .type2 = TYPE_FAIRY, + .types = { TYPE_WATER, TYPE_FAIRY}, .catchRate = 3, .expYield = 257, .evYield_SpDefense = 3, @@ -20172,8 +18553,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_MISTY_SURGE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -20188,8 +18568,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 37, .baseSpAttack = 29, .baseSpDefense = 31, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 40, .evYield_HP = 1, @@ -20197,8 +18576,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_UNAWARE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -20213,8 +18591,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 37, .baseSpAttack = 29, .baseSpDefense = 131, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 140, .evYield_Defense = 1, @@ -20223,8 +18600,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_STURDY, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -20239,8 +18615,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 97, .baseSpAttack = 113, .baseSpDefense = 89, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_STEEL, + .types = { TYPE_PSYCHIC, TYPE_STEEL}, .catchRate = 45, .expYield = 306, .evYield_Attack = 3, @@ -20248,8 +18623,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_FULL_METAL_BODY, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -20264,8 +18638,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 97, .baseSpAttack = 137, .baseSpDefense = 107, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_GHOST, + .types = { TYPE_PSYCHIC, TYPE_GHOST}, .catchRate = 45, .expYield = 306, .evYield_SpAttack = 3, @@ -20273,8 +18646,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_SHADOW_SHIELD, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -20289,8 +18661,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 103, .baseSpAttack = 127, .baseSpDefense = 131, - .type1 = TYPE_ROCK, - .type2 = TYPE_POISON, + .types = { TYPE_ROCK, TYPE_POISON}, .catchRate = 45, .expYield = 257, .evYield_SpDefense = 3, @@ -20298,8 +18669,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -20314,8 +18684,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 79, .baseSpAttack = 53, .baseSpDefense = 53, - .type1 = TYPE_BUG, - .type2 = TYPE_FIGHTING, + .types = { TYPE_BUG, TYPE_FIGHTING}, .catchRate = 45, .expYield = 257, .evYield_Attack = 1, @@ -20324,8 +18693,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -20340,8 +18708,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 151, .baseSpAttack = 137, .baseSpDefense = 37, - .type1 = TYPE_BUG, - .type2 = TYPE_FIGHTING, + .types = { TYPE_BUG, TYPE_FIGHTING}, .catchRate = 45, .expYield = 257, .evYield_Speed = 3, @@ -20349,8 +18716,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -20365,8 +18731,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 83, .baseSpAttack = 173, .baseSpDefense = 71, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 257, .evYield_SpAttack = 3, @@ -20374,8 +18739,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -20390,8 +18754,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 61, .baseSpAttack = 107, .baseSpDefense = 101, - .type1 = TYPE_STEEL, - .type2 = TYPE_FLYING, + .types = { TYPE_STEEL, TYPE_FLYING}, .catchRate = 45, .expYield = 257, .evYield_Attack = 1, @@ -20401,8 +18764,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -20417,8 +18779,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 109, .baseSpAttack = 59, .baseSpDefense = 31, - .type1 = TYPE_GRASS, - .type2 = TYPE_STEEL, + .types = { TYPE_GRASS, TYPE_STEEL}, .catchRate = 45, .expYield = 257, .evYield_Attack = 3, @@ -20426,8 +18787,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -20442,8 +18802,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 43, .baseSpAttack = 97, .baseSpDefense = 53, - .type1 = TYPE_DARK, - .type2 = TYPE_DRAGON, + .types = { TYPE_DARK, TYPE_DRAGON}, .catchRate = 45, .expYield = 257, .evYield_HP = 3, @@ -20451,8 +18810,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -20467,8 +18825,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 79, .baseSpAttack = 127, .baseSpDefense = 89, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 255, .expYield = 270, .evYield_Attack = 1, @@ -20477,15 +18834,14 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_MAGEARNA] = MAGEARNA_BASE_STATS(BODY_COLOR_GRAY), + [SPECIES_MAGEARNA] = MAGEARNA_SPECIES_INFO(BODY_COLOR_GRAY), [SPECIES_MARSHADOW] = { @@ -20495,8 +18851,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 125, .baseSpAttack = 90, .baseSpDefense = 90, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_GHOST, + .types = { TYPE_FIGHTING, TYPE_GHOST}, .catchRate = 3, .expYield = 270, .evYield_Attack = 2, @@ -20505,8 +18860,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_TECHNICIAN, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -20521,8 +18875,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 73, .baseSpAttack = 73, .baseSpDefense = 67, - .type1 = TYPE_POISON, - .type2 = TYPE_POISON, + .types = { TYPE_POISON, TYPE_POISON}, .catchRate = 45, .expYield = 189, .evYield_Speed = 1, @@ -20530,8 +18883,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -20546,8 +18898,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 121, .baseSpAttack = 127, .baseSpDefense = 73, - .type1 = TYPE_POISON, - .type2 = TYPE_DRAGON, + .types = { TYPE_POISON, TYPE_DRAGON}, .catchRate = 45, .expYield = 243, .evYield_SpAttack = 3, @@ -20555,8 +18906,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -20571,8 +18921,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 13, .baseSpAttack = 53, .baseSpDefense = 101, - .type1 = TYPE_ROCK, - .type2 = TYPE_STEEL, + .types = { TYPE_ROCK, TYPE_STEEL}, .catchRate = 30, .expYield = 257, .evYield_Defense = 3, @@ -20580,8 +18929,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -20596,8 +18944,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 107, .baseSpAttack = 151, .baseSpDefense = 79, - .type1 = TYPE_FIRE, - .type2 = TYPE_GHOST, + .types = { TYPE_FIRE, TYPE_GHOST}, .catchRate = 30, .expYield = 257, .evYield_SpAttack = 3, @@ -20605,8 +18952,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BEAST_BOOST, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, @@ -20621,8 +18967,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 143, .baseSpAttack = 102, .baseSpDefense = 80, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 3, .expYield = 270, .evYield_Speed = 3, @@ -20630,8 +18975,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -20646,8 +18990,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 34, .baseSpAttack = 55, .baseSpDefense = 35, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = { TYPE_STEEL, TYPE_STEEL}, .catchRate = 3, .expYield = 135, .evYield_Attack = 1, @@ -20655,8 +18998,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_MAGNET_PULL, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -20671,8 +19013,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 34, .baseSpAttack = 80, .baseSpDefense = 65, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = { TYPE_STEEL, TYPE_STEEL}, .catchRate = 3, .expYield = 270, .evYield_Attack = 3, @@ -20680,8 +19021,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_IRON_FIST, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -20698,8 +19038,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 62, .evYield_Attack = 1, @@ -20707,8 +19046,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_GRASSY_SURGE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -20722,8 +19060,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 55, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 147, .evYield_Attack = 2, @@ -20731,8 +19068,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_GRASSY_SURGE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -20746,8 +19082,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 60, .baseSpDefense = 70, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 265, .evYield_Attack = 3, @@ -20755,8 +19090,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_GRASSY_SURGE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -20770,8 +19104,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 69, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 62, .evYield_Speed = 1, @@ -20779,8 +19112,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_LIBERO}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -20794,8 +19126,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 94, .baseSpAttack = 55, .baseSpDefense = 60, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 147, .evYield_Speed = 2, @@ -20803,8 +19134,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_LIBERO}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -20818,8 +19148,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 119, .baseSpAttack = 65, .baseSpDefense = 75, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIRE, + .types = { TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, .expYield = 265, .evYield_Speed = 3, @@ -20827,8 +19156,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_LIBERO}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -20842,8 +19170,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 70, .baseSpDefense = 40, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 62, .evYield_Speed = 1, @@ -20852,8 +19179,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -20867,8 +19193,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 95, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 147, .evYield_SpAttack = 2, @@ -20876,8 +19201,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -20891,8 +19215,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 120, .baseSpAttack = 125, .baseSpDefense = 65, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 265, .evYield_Speed = 3, @@ -20900,8 +19223,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SNIPER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -20915,8 +19237,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 35, .baseSpDefense = 35, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 55, .evYield_HP = 1, @@ -20925,8 +19246,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_CHEEK_POUCH, ABILITY_NONE, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -20940,8 +19260,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 55, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 90, .expYield = 161, .evYield_HP = 2, @@ -20950,8 +19269,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_CHEEK_POUCH, ABILITY_NONE, ABILITY_GLUTTONY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -20965,8 +19283,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 57, .baseSpAttack = 33, .baseSpDefense = 35, - .type1 = TYPE_FLYING, - .type2 = TYPE_FLYING, + .types = { TYPE_FLYING, TYPE_FLYING}, .catchRate = 255, .expYield = 49, .evYield_Speed = 1, @@ -20974,8 +19291,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_UNNERVE, ABILITY_BIG_PECKS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -20989,8 +19305,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 77, .baseSpAttack = 43, .baseSpDefense = 55, - .type1 = TYPE_FLYING, - .type2 = TYPE_FLYING, + .types = { TYPE_FLYING, TYPE_FLYING}, .catchRate = 120, .expYield = 128, .evYield_Speed = 2, @@ -20998,8 +19313,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_UNNERVE, ABILITY_BIG_PECKS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -21013,8 +19327,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 67, .baseSpAttack = 53, .baseSpDefense = 85, - .type1 = TYPE_FLYING, - .type2 = TYPE_STEEL, + .types = { TYPE_FLYING, TYPE_STEEL}, .catchRate = 45, .expYield = 248, .evYield_Defense = 3, @@ -21022,8 +19335,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_PRESSURE, ABILITY_UNNERVE, ABILITY_MIRROR_ARMOR}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -21037,8 +19349,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 25, .baseSpDefense = 45, - .type1 = TYPE_BUG, - .type2 = TYPE_BUG, + .types = { TYPE_BUG, TYPE_BUG}, .catchRate = 255, .expYield = 36, .evYield_SpDefense = 1, @@ -21046,8 +19357,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_COMPOUND_EYES, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -21061,8 +19371,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 50, .baseSpDefense = 90, - .type1 = TYPE_BUG, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_BUG, TYPE_PSYCHIC}, .catchRate = 120, .expYield = 117, .evYield_SpDefense = 2, @@ -21071,8 +19380,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_COMPOUND_EYES, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -21086,8 +19394,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 80, .baseSpDefense = 120, - .type1 = TYPE_BUG, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_BUG, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 253, .evYield_SpDefense = 3, @@ -21096,8 +19403,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_FRISK, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -21111,8 +19417,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 47, .baseSpDefense = 52, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK}, .catchRate = 255, .expYield = 49, .evYield_SpDefense = 1, @@ -21120,8 +19425,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_UNBURDEN, ABILITY_STAKEOUT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -21135,8 +19439,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 87, .baseSpDefense = 92, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK}, .catchRate = 127, .expYield = 159, .evYield_SpDefense = 2, @@ -21144,8 +19447,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_UNBURDEN, ABILITY_STAKEOUT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -21159,8 +19461,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 10, .baseSpAttack = 40, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 190, .expYield = 50, .evYield_SpDefense = 1, @@ -21168,8 +19469,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_COTTON_DOWN, ABILITY_REGENERATOR, ABILITY_EFFECT_SPORE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -21183,8 +19483,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 80, .baseSpDefense = 120, - .type1 = TYPE_GRASS, - .type2 = TYPE_GRASS, + .types = { TYPE_GRASS, TYPE_GRASS}, .catchRate = 75, .expYield = 161, .evYield_SpDefense = 2, @@ -21192,8 +19491,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_COTTON_DOWN, ABILITY_REGENERATOR, ABILITY_EFFECT_SPORE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -21207,8 +19505,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 48, .baseSpAttack = 40, .baseSpDefense = 45, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 122, .evYield_Defense = 1, @@ -21216,8 +19513,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_FLUFFY, ABILITY_RUN_AWAY, ABILITY_BULLETPROOF}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -21231,8 +19527,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 88, .baseSpAttack = 60, .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 127, .expYield = 172, .evYield_Defense = 2, @@ -21240,8 +19535,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_FLUFFY, ABILITY_STEADFAST, ABILITY_BULLETPROOF}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -21255,8 +19549,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 44, .baseSpAttack = 38, .baseSpDefense = 38, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 255, .expYield = 57, .evYield_Attack = 1, @@ -21264,8 +19557,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_STRONG_JAW, ABILITY_SHELL_ARMOR, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -21279,8 +19571,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 74, .baseSpAttack = 48, .baseSpDefense = 68, - .type1 = TYPE_WATER, - .type2 = TYPE_ROCK, + .types = { TYPE_WATER, TYPE_ROCK}, .catchRate = 75, .expYield = 170, .evYield_Attack = 2, @@ -21288,8 +19579,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_STRONG_JAW, ABILITY_SHELL_ARMOR, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -21303,8 +19593,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 26, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 255, .expYield = 54, .evYield_HP = 1, @@ -21312,8 +19601,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BALL_FETCH, ABILITY_NONE, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -21327,8 +19615,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 121, .baseSpAttack = 90, .baseSpDefense = 60, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 172, .evYield_Speed = 2, @@ -21336,8 +19623,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_STRONG_JAW, ABILITY_NONE, ABILITY_COMPETITIVE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -21351,8 +19637,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 255, .expYield = 48, .evYield_Defense = 1, @@ -21360,8 +19645,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STEAM_ENGINE, ABILITY_HEATPROOF, ABILITY_FLASH_FIRE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -21375,8 +19659,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 70, - .type1 = TYPE_ROCK, - .type2 = TYPE_FIRE, + .types = { TYPE_ROCK, TYPE_FIRE}, .catchRate = 120, .expYield = 144, .evYield_Defense = 2, @@ -21384,8 +19667,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STEAM_ENGINE, ABILITY_FLAME_BODY, ABILITY_FLASH_FIRE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -21399,8 +19681,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 80, .baseSpDefense = 90, - .type1 = TYPE_ROCK, - .type2 = TYPE_FIRE, + .types = { TYPE_ROCK, TYPE_FIRE}, .catchRate = 45, .expYield = 255, .evYield_Defense = 3, @@ -21408,8 +19689,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STEAM_ENGINE, ABILITY_FLAME_BODY, ABILITY_FLASH_FIRE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -21423,8 +19703,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_GRASS, - .type2 = TYPE_DRAGON, + .types = { TYPE_GRASS, TYPE_DRAGON}, .catchRate = 255, .expYield = 52, .evYield_Defense = 1, @@ -21432,8 +19711,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_DRAGON}, .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_BULLETPROOF}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -21447,8 +19725,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 95, .baseSpDefense = 60, - .type1 = TYPE_GRASS, - .type2 = TYPE_DRAGON, + .types = { TYPE_GRASS, TYPE_DRAGON}, .catchRate = 45, .expYield = 170, .evYield_Attack = 2, @@ -21456,8 +19733,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_DRAGON}, .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_HUSTLE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -21471,8 +19747,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 100, .baseSpDefense = 80, - .type1 = TYPE_GRASS, - .type2 = TYPE_DRAGON, + .types = { TYPE_GRASS, TYPE_DRAGON}, .catchRate = 45, .expYield = 170, .evYield_HP = 2, @@ -21480,8 +19755,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_DRAGON}, .abilities = {ABILITY_RIPEN, ABILITY_GLUTTONY, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -21495,8 +19769,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 46, .baseSpAttack = 35, .baseSpDefense = 50, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND}, .catchRate = 255, .expYield = 63, .evYield_Defense = 1, @@ -21504,8 +19777,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAND_SPIT, ABILITY_SHED_SKIN, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -21519,8 +19791,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 71, .baseSpAttack = 65, .baseSpDefense = 70, - .type1 = TYPE_GROUND, - .type2 = TYPE_GROUND, + .types = { TYPE_GROUND, TYPE_GROUND}, .catchRate = 120, .expYield = 179, .evYield_Defense = 2, @@ -21528,14 +19799,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAND_SPIT, ABILITY_SHED_SKIN, ABILITY_SAND_VEIL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, }, - [SPECIES_CRAMORANT] = CRAMORANT_BASE_STATS, + [SPECIES_CRAMORANT] = CRAMORANT_SPECIES_INFO, [SPECIES_ARROKUDA] = { @@ -21545,8 +19815,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 66, .baseSpAttack = 40, .baseSpDefense = 30, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 255, .expYield = 56, .evYield_Speed = 1, @@ -21554,8 +19823,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_PROPELLER_TAIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -21569,8 +19837,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 136, .baseSpAttack = 60, .baseSpDefense = 50, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 172, .evYield_Speed = 2, @@ -21578,8 +19845,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_PROPELLER_TAIL}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -21593,8 +19859,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 54, .baseSpDefense = 35, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_POISON, + .types = { TYPE_ELECTRIC, TYPE_POISON}, .catchRate = 75, .expYield = 48, .evYield_SpAttack = 1, @@ -21602,14 +19867,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_RATTLED, ABILITY_STATIC, ABILITY_KLUTZ}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, - [SPECIES_TOXTRICITY] = TOXTRICITY_BASE_STATS(ABILITY_PLUS), + [SPECIES_TOXTRICITY] = TOXTRICITY_SPECIES_INFO(ABILITY_PLUS), [SPECIES_SIZZLIPEDE] = { @@ -21619,8 +19883,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_FIRE, - .type2 = TYPE_BUG, + .types = { TYPE_FIRE, TYPE_BUG}, .catchRate = 190, .expYield = 61, .evYield_Attack = 1, @@ -21628,8 +19891,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_FLASH_FIRE, ABILITY_WHITE_SMOKE, ABILITY_FLAME_BODY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -21643,8 +19905,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 90, .baseSpDefense = 90, - .type1 = TYPE_FIRE, - .type2 = TYPE_BUG, + .types = { TYPE_FIRE, TYPE_BUG}, .catchRate = 75, .expYield = 184, .evYield_Attack = 2, @@ -21652,8 +19913,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_FLASH_FIRE, ABILITY_WHITE_SMOKE, ABILITY_FLAME_BODY}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -21667,8 +19927,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 32, .baseSpAttack = 50, .baseSpDefense = 50, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 180, .expYield = 62, .evYield_Attack = 1, @@ -21676,8 +19935,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_LIMBER, ABILITY_NONE, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -21691,8 +19949,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 42, .baseSpAttack = 70, .baseSpDefense = 80, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 168, .evYield_Attack = 2, @@ -21700,16 +19957,15 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_LIMBER, ABILITY_NONE, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, }, - [SPECIES_SINISTEA] = SINISTEA_BASE_STATS, + [SPECIES_SINISTEA] = SINISTEA_SPECIES_INFO, - [SPECIES_POLTEAGEIST] = POLTEAGEIST_BASE_STATS, + [SPECIES_POLTEAGEIST] = POLTEAGEIST_SPECIES_INFO, [SPECIES_HATENNA] = { @@ -21719,8 +19975,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 39, .baseSpAttack = 56, .baseSpDefense = 53, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 235, .expYield = 53, .evYield_SpAttack = 1, @@ -21728,8 +19983,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HEALER, ABILITY_ANTICIPATION, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -21743,8 +19997,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 49, .baseSpAttack = 86, .baseSpDefense = 73, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 120, .expYield = 130, .evYield_SpAttack = 2, @@ -21752,8 +20005,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HEALER, ABILITY_ANTICIPATION, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -21767,8 +20019,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 29, .baseSpAttack = 136, .baseSpDefense = 103, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FAIRY, + .types = { TYPE_PSYCHIC, TYPE_FAIRY}, .catchRate = 45, .expYield = 255, .evYield_SpAttack = 3, @@ -21776,8 +20027,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HEALER, ABILITY_ANTICIPATION, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -21791,8 +20041,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 55, .baseSpDefense = 40, - .type1 = TYPE_DARK, - .type2 = TYPE_FAIRY, + .types = { TYPE_DARK, TYPE_FAIRY}, .catchRate = 255, .expYield = 53, .evYield_SpAttack = 1, @@ -21800,8 +20049,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_PRANKSTER, ABILITY_FRISK, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -21815,8 +20063,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 75, .baseSpDefense = 55, - .type1 = TYPE_DARK, - .type2 = TYPE_FAIRY, + .types = { TYPE_DARK, TYPE_FAIRY}, .catchRate = 120, .expYield = 130, .evYield_SpAttack = 2, @@ -21824,8 +20071,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_PRANKSTER, ABILITY_FRISK, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -21839,8 +20085,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 95, .baseSpDefense = 75, - .type1 = TYPE_DARK, - .type2 = TYPE_FAIRY, + .types = { TYPE_DARK, TYPE_FAIRY}, .catchRate = 45, .expYield = 255, .evYield_Attack = 3, @@ -21848,8 +20093,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_PRANKSTER, ABILITY_FRISK, ABILITY_PICKPOCKET}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -21863,8 +20107,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 60, .baseSpDefense = 81, - .type1 = TYPE_DARK, - .type2 = TYPE_NORMAL, + .types = { TYPE_DARK, TYPE_NORMAL}, .catchRate = 45, .expYield = 260, .evYield_Defense = 3, @@ -21872,8 +20115,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RECKLESS, ABILITY_GUTS, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -21887,8 +20129,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 50, .baseSpDefense = 60, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = { TYPE_STEEL, TYPE_STEEL}, .catchRate = 90, .expYield = 154, .evYield_Attack = 2, @@ -21896,8 +20137,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_TOUGH_CLAWS, ABILITY_STEELY_SPIRIT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -21911,8 +20151,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 145, .baseSpDefense = 130, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST}, .catchRate = 30, .expYield = 179, .evYield_SpAttack = 2, @@ -21920,8 +20159,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_PERISH_BODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -21935,8 +20173,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 68, .baseSpDefense = 82, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 177, .evYield_Attack = 2, @@ -21945,8 +20182,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FIELD}, .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -21960,8 +20196,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 110, .baseSpDefense = 100, - .type1 = TYPE_ICE, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_ICE, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 182, .evYield_SpAttack = 3, @@ -21969,8 +20204,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_TANGLED_FEET, ABILITY_SCREEN_CLEANER, ABILITY_ICE_BODY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -21984,8 +20218,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 50, .baseSpDefense = 105, - .type1 = TYPE_GROUND, - .type2 = TYPE_GHOST, + .types = { TYPE_GROUND, TYPE_GHOST}, .catchRate = 90, .expYield = 169, .evYield_Defense = 2, @@ -21993,8 +20226,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_WANDERING_SPIRIT, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -22008,8 +20240,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 34, .baseSpAttack = 50, .baseSpDefense = 61, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, .catchRate = 200, .expYield = 54, .evYield_SpDefense = 1, @@ -22017,14 +20248,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_SWEET_VEIL, ABILITY_NONE, ABILITY_AROMA_VEIL}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, - [SPECIES_ALCREMIE] = ALCREMIE_BASE_STATS(BODY_COLOR_WHITE), + [SPECIES_ALCREMIE] = ALCREMIE_SPECIES_INFO(BODY_COLOR_WHITE), [SPECIES_FALINKS] = { @@ -22034,8 +20264,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 70, .baseSpDefense = 60, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 165, .evYield_Attack = 2, @@ -22044,8 +20273,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL}, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -22059,8 +20287,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 91, .baseSpDefense = 85, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 75, .expYield = 152, .evYield_Attack = 2, @@ -22068,8 +20295,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_NONE, ABILITY_ELECTRIC_SURGE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -22083,8 +20309,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 45, .baseSpDefense = 30, - .type1 = TYPE_ICE, - .type2 = TYPE_BUG, + .types = { TYPE_ICE, TYPE_BUG}, .catchRate = 190, .expYield = 37, .evYield_SpAttack = 1, @@ -22093,8 +20318,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE, ABILITY_ICE_SCALES}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -22108,8 +20332,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 125, .baseSpDefense = 90, - .type1 = TYPE_ICE, - .type2 = TYPE_BUG, + .types = { TYPE_ICE, TYPE_BUG}, .catchRate = 75, .expYield = 166, .evYield_SpAttack = 2, @@ -22117,8 +20340,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE, ABILITY_ICE_SCALES}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -22132,8 +20354,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 20, .baseSpDefense = 20, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 60, .expYield = 165, .evYield_Defense = 2, @@ -22141,8 +20362,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_POWER_SPOT, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -22156,8 +20376,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 65, .baseSpDefense = 90, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 60, .expYield = 165, .evYield_Defense = 2, @@ -22165,8 +20384,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_ICE_FACE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -22180,8 +20398,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 105, .baseSpDefense = 95, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_NORMAL, + .types = { TYPE_PSYCHIC, TYPE_NORMAL}, .catchRate = 30, .expYield = 166, .evYield_SpAttack = 2, @@ -22189,14 +20406,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_SYNCHRONIZE, ABILITY_PSYCHIC_SURGE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, - [SPECIES_MORPEKO] = MORPEKO_BASE_STATS, + [SPECIES_MORPEKO] = MORPEKO_SPECIES_INFO, [SPECIES_CUFANT] = { @@ -22206,8 +20422,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 40, .baseSpDefense = 49, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = { TYPE_STEEL, TYPE_STEEL}, .catchRate = 190, .expYield = 66, .evYield_Attack = 1, @@ -22216,8 +20431,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_MINERAL}, .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -22231,8 +20445,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 80, .baseSpDefense = 69, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = { TYPE_STEEL, TYPE_STEEL}, .catchRate = 90, .expYield = 175, .evYield_Attack = 2, @@ -22241,8 +20454,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_MINERAL}, .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_HEAVY_METAL}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -22256,8 +20468,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 80, .baseSpDefense = 70, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_DRAGON, + .types = { TYPE_ELECTRIC, TYPE_DRAGON}, .catchRate = 45, .expYield = 177, .evYield_Attack = 2, @@ -22265,8 +20476,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_HUSTLE, ABILITY_SAND_RUSH}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -22280,8 +20490,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 90, .baseSpDefense = 80, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ICE, + .types = { TYPE_ELECTRIC, TYPE_ICE}, .catchRate = 45, .expYield = 177, .evYield_Attack = 2, @@ -22289,8 +20498,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_STATIC, ABILITY_SLUSH_RUSH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -22304,8 +20512,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 70, .baseSpDefense = 80, - .type1 = TYPE_WATER, - .type2 = TYPE_DRAGON, + .types = { TYPE_WATER, TYPE_DRAGON}, .catchRate = 45, .expYield = 177, .evYield_Defense = 2, @@ -22313,8 +20520,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_WATER_ABSORB, ABILITY_STRONG_JAW, ABILITY_SAND_RUSH}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -22328,8 +20534,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 80, .baseSpDefense = 90, - .type1 = TYPE_WATER, - .type2 = TYPE_ICE, + .types = { TYPE_WATER, TYPE_ICE}, .catchRate = 45, .expYield = 177, .evYield_Defense = 2, @@ -22337,8 +20542,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_WATER_ABSORB, ABILITY_ICE_BODY, ABILITY_SLUSH_RUSH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -22352,8 +20556,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 120, .baseSpDefense = 50, - .type1 = TYPE_STEEL, - .type2 = TYPE_DRAGON, + .types = { TYPE_STEEL, TYPE_DRAGON}, .catchRate = 45, .expYield = 187, .evYield_SpAttack = 2, @@ -22361,8 +20564,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 30, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_DRAGON}, .abilities = {ABILITY_LIGHT_METAL, ABILITY_HEAVY_METAL, ABILITY_STALWART}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -22376,8 +20578,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 82, .baseSpAttack = 40, .baseSpDefense = 30, - .type1 = TYPE_DRAGON, - .type2 = TYPE_GHOST, + .types = { TYPE_DRAGON, TYPE_GHOST}, .catchRate = 45, .expYield = 54, .evYield_Speed = 1, @@ -22385,8 +20586,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_DRAGON}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_INFILTRATOR, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -22400,8 +20600,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 102, .baseSpAttack = 60, .baseSpDefense = 50, - .type1 = TYPE_DRAGON, - .type2 = TYPE_GHOST, + .types = { TYPE_DRAGON, TYPE_GHOST}, .catchRate = 45, .expYield = 144, .evYield_Speed = 2, @@ -22409,8 +20608,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_DRAGON}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_INFILTRATOR, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -22424,8 +20622,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 142, .baseSpAttack = 100, .baseSpDefense = 75, - .type1 = TYPE_DRAGON, - .type2 = TYPE_GHOST, + .types = { TYPE_DRAGON, TYPE_GHOST}, .catchRate = 45, .expYield = 300, .evYield_Speed = 3, @@ -22433,8 +20630,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_DRAGON}, .abilities = {ABILITY_CLEAR_BODY, ABILITY_INFILTRATOR, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -22448,8 +20644,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 138, .baseSpAttack = 80, .baseSpDefense = 115, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, .catchRate = 10, .expYield = 335, .evYield_Speed = 3, @@ -22457,8 +20652,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_INTREPID_SWORD, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -22473,8 +20667,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 138, .baseSpAttack = 80, .baseSpDefense = 115, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 10, .expYield = 335, .evYield_Speed = 3, @@ -22482,8 +20675,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_DAUNTLESS_SHIELD, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -22498,8 +20690,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 145, .baseSpDefense = 95, - .type1 = TYPE_POISON, - .type2 = TYPE_DRAGON, + .types = { TYPE_POISON, TYPE_DRAGON}, .catchRate = 255, .expYield = 345, .evYield_HP = 3, @@ -22507,8 +20698,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -22523,8 +20713,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 72, .baseSpAttack = 53, .baseSpDefense = 50, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 3, .expYield = 77, .evYield_Attack = 1, @@ -22532,8 +20721,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -22548,8 +20736,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 97, .baseSpAttack = 63, .baseSpDefense = 60, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_DARK, + .types = { TYPE_FIGHTING, TYPE_DARK}, .catchRate = 3, .expYield = 275, .evYield_Attack = 3, @@ -22557,15 +20744,14 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_UNSEEN_FIST, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_ZARUDE] = ZARUDE_BASE_STATS, + [SPECIES_ZARUDE] = ZARUDE_SPECIES_INFO, [SPECIES_REGIELEKI] = { @@ -22575,8 +20761,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 200, .baseSpAttack = 100, .baseSpDefense = 50, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 3, .expYield = 290, .evYield_Speed = 3, @@ -22584,8 +20769,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_TRANSISTOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -22600,8 +20784,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 100, .baseSpDefense = 50, - .type1 = TYPE_DRAGON, - .type2 = TYPE_DRAGON, + .types = { TYPE_DRAGON, TYPE_DRAGON}, .catchRate = 3, .expYield = 290, .evYield_HP = 3, @@ -22609,8 +20792,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_DRAGONS_MAW, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -22625,8 +20807,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 65, .baseSpDefense = 110, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 3, .expYield = 290, .evYield_Attack = 3, @@ -22634,8 +20815,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_CHILLING_NEIGH, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -22650,8 +20830,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 145, .baseSpDefense = 80, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST}, .catchRate = 3, .expYield = 290, .evYield_SpAttack = 3, @@ -22659,8 +20838,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_GRIM_NEIGH, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -22675,8 +20853,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_GRASS, + .types = { TYPE_PSYCHIC, TYPE_GRASS}, .catchRate = 3, .expYield = 250, .evYield_HP = 3, @@ -22684,8 +20861,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_UNNERVE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -22700,8 +20876,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 105, .baseSpDefense = 75, - .type1 = TYPE_NORMAL, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_NORMAL, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 184, .evYield_Attack = 1, @@ -22709,8 +20884,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_FRISK, ABILITY_SAP_SIPPER}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -22724,8 +20898,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 45, .baseSpDefense = 70, - .type1 = TYPE_BUG, - .type2 = TYPE_ROCK, + .types = { TYPE_BUG, TYPE_ROCK}, .catchRate = 25, .expYield = 175, .evYield_Attack = 2, @@ -22733,8 +20906,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SWARM, ABILITY_SHEER_FORCE, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -22748,8 +20920,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 45, .baseSpDefense = 80, - .type1 = TYPE_GROUND, - .type2 = TYPE_NORMAL, + .types = { TYPE_GROUND, TYPE_NORMAL}, .catchRate = 75, .expYield = 194, .evYield_Attack = 3, @@ -22757,8 +20928,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GUTS, ABILITY_BULLETPROOF, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -22772,8 +20942,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 78, .baseSpAttack = 80, .baseSpDefense = 75, - .type1 = TYPE_WATER, - .type2 = TYPE_GHOST, + .types = { TYPE_WATER, TYPE_GHOST}, .catchRate = 25, .expYield = 186, .evYield_HP = 2, @@ -22781,8 +20950,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_RATTLED, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -22797,8 +20965,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 120, .baseSpAttack = 40, .baseSpDefense = 80, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_POISON, + .types = { TYPE_FIGHTING, TYPE_POISON}, .catchRate = 135, .expYield = 179, .evYield_Attack = 1, @@ -22807,8 +20974,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_POISON_TOUCH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -22822,8 +20988,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_DARK, - .type2 = TYPE_POISON, + .types = { TYPE_DARK, TYPE_POISON}, .catchRate = 135, .expYield = 180, .evYield_Attack = 1, @@ -22831,8 +20996,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM, ABILITY_INTIMIDATE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -22846,8 +21010,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 106, .baseSpAttack = 135, .baseSpDefense = 80, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FLYING, + .types = { TYPE_FAIRY, TYPE_FLYING}, .catchRate = 3, .expYield = 261, .evYield_SpAttack = 3, @@ -22855,8 +21018,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_HEALER, ABILITY_NONE, ABILITY_CONTRARY}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -22872,8 +21034,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 122, .baseSpDefense = 120, - .type1 = TYPE_GRASS, - .type2 = TYPE_POISON, + .types = { TYPE_GRASS, TYPE_POISON}, .catchRate = 45, .expYield = 281, .evYield_SpAttack = 2, @@ -22882,8 +21043,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_THICK_FAT, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -22898,8 +21058,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 130, .baseSpDefense = 85, - .type1 = TYPE_FIRE, - .type2 = TYPE_DRAGON, + .types = { TYPE_FIRE, TYPE_DRAGON}, .catchRate = 45, .expYield = 285, .evYield_SpAttack = 3, @@ -22907,8 +21066,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -22923,8 +21081,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 159, .baseSpDefense = 115, - .type1 = TYPE_FIRE, - .type2 = TYPE_FLYING, + .types = { TYPE_FIRE, TYPE_FLYING}, .catchRate = 45, .expYield = 285, .evYield_SpAttack = 3, @@ -22932,8 +21089,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_DROUGHT, ABILITY_DROUGHT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -22948,8 +21104,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 78, .baseSpAttack = 135, .baseSpDefense = 115, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 284, .evYield_SpDefense = 3, @@ -22957,8 +21112,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_MEGA_LAUNCHER, ABILITY_MEGA_LAUNCHER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -22973,8 +21127,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 145, .baseSpAttack = 15, .baseSpDefense = 80, - .type1 = TYPE_BUG, - .type2 = TYPE_POISON, + .types = { TYPE_BUG, TYPE_POISON}, .catchRate = 45, .expYield = 223, .evYield_Attack = 2, @@ -22984,8 +21137,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_ADAPTABILITY, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -23000,8 +21152,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 121, .baseSpAttack = 135, .baseSpDefense = 80, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FLYING, + .types = { TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 261, .evYield_Speed = 3, @@ -23009,8 +21160,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_NO_GUARD, ABILITY_NO_GUARD}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -23029,8 +21179,7 @@ const struct BaseStats gBaseStats[] = #else .baseSpDefense = 95, #endif - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 50, .expYield = 270, .evYield_SpAttack = 3, @@ -23039,8 +21188,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_TRACE, ABILITY_TRACE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -23055,8 +21203,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 130, .baseSpDefense = 80, - .type1 = TYPE_WATER, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_WATER, TYPE_PSYCHIC}, .catchRate = 75, .expYield = 207, .evYield_Defense = 2, @@ -23065,8 +21212,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_SHELL_ARMOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -23081,8 +21227,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 170, .baseSpDefense = 95, - .type1 = TYPE_GHOST, - .type2 = TYPE_POISON, + .types = { TYPE_GHOST, TYPE_POISON}, .catchRate = 45, .expYield = 270, .evYield_SpAttack = 3, @@ -23090,8 +21235,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_SHADOW_TAG, ABILITY_SHADOW_TAG}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -23106,8 +21250,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 60, .baseSpDefense = 100, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .types = { TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 207, .evYield_HP = 2, @@ -23115,8 +21258,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_PARENTAL_BOND, ABILITY_PARENTAL_BOND}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -23131,8 +21273,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 65, .baseSpDefense = 90, - .type1 = TYPE_BUG, - .type2 = TYPE_FLYING, + .types = { TYPE_BUG, TYPE_FLYING}, .catchRate = 45, .expYield = 210, .evYield_Attack = 2, @@ -23140,8 +21281,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_AERILATE, ABILITY_AERILATE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -23156,8 +21296,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 81, .baseSpAttack = 70, .baseSpDefense = 130, - .type1 = TYPE_WATER, - .type2 = TYPE_DARK, + .types = { TYPE_WATER, TYPE_DARK}, .catchRate = 45, .expYield = 224, .evYield_Attack = 2, @@ -23165,8 +21304,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 5, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_DRAGON}, .abilities = {ABILITY_MOLD_BREAKER, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -23181,8 +21319,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 150, .baseSpAttack = 70, .baseSpDefense = 95, - .type1 = TYPE_ROCK, - .type2 = TYPE_FLYING, + .types = { TYPE_ROCK, TYPE_FLYING}, .catchRate = 45, .expYield = 215, .evYield_Speed = 2, @@ -23190,8 +21327,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -23206,8 +21342,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 154, .baseSpDefense = 100, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FIGHTING, + .types = { TYPE_PSYCHIC, TYPE_FIGHTING}, .catchRate = 3, .expYield = 351, .evYield_SpAttack = 3, @@ -23215,8 +21350,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_STEADFAST, ABILITY_STEADFAST}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -23231,8 +21365,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 140, .baseSpAttack = 194, .baseSpDefense = 120, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 351, .evYield_SpAttack = 3, @@ -23240,8 +21373,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_INSOMNIA, ABILITY_INSOMNIA}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -23256,8 +21388,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 165, .baseSpDefense = 110, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_DRAGON, + .types = { TYPE_ELECTRIC, TYPE_DRAGON}, .catchRate = 45, .expYield = 275, .evYield_SpAttack = 3, @@ -23265,8 +21396,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD}, .abilities = {ABILITY_MOLD_BREAKER, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -23281,8 +21411,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 55, .baseSpDefense = 95, - .type1 = TYPE_STEEL, - .type2 = TYPE_GROUND, + .types = { TYPE_STEEL, TYPE_GROUND}, .catchRate = 25, .expYield = 214, .evYield_Defense = 2, @@ -23291,8 +21420,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_SAND_FORCE, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -23307,8 +21435,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 65, .baseSpDefense = 100, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, + .types = { TYPE_BUG, TYPE_STEEL}, .catchRate = 25, .expYield = 210, .evYield_Attack = 2, @@ -23316,8 +21443,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_TECHNICIAN, ABILITY_TECHNICIAN}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -23332,8 +21458,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 40, .baseSpDefense = 105, - .type1 = TYPE_BUG, - .type2 = TYPE_FIGHTING, + .types = { TYPE_BUG, TYPE_FIGHTING}, .catchRate = 45, .expYield = 210, .evYield_Attack = 2, @@ -23341,8 +21466,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_SKILL_LINK, ABILITY_SKILL_LINK}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -23357,8 +21481,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 140, .baseSpDefense = 90, - .type1 = TYPE_DARK, - .type2 = TYPE_FIRE, + .types = { TYPE_DARK, TYPE_FIRE}, .catchRate = 45, .expYield = 210, .evYield_SpAttack = 2, @@ -23366,8 +21489,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SOLAR_POWER, ABILITY_SOLAR_POWER}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -23382,8 +21504,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 71, .baseSpAttack = 95, .baseSpDefense = 120, - .type1 = TYPE_ROCK, - .type2 = TYPE_DARK, + .types = { TYPE_ROCK, TYPE_DARK}, .catchRate = 45, .expYield = 315, .evYield_Attack = 3, @@ -23391,8 +21512,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_SAND_STREAM, ABILITY_SAND_STREAM}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -23407,8 +21527,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 145, .baseSpAttack = 145, .baseSpDefense = 85, - .type1 = TYPE_GRASS, - .type2 = TYPE_DRAGON, + .types = { TYPE_GRASS, TYPE_DRAGON}, .catchRate = 45, .expYield = 284, .evYield_Speed = 3, @@ -23416,8 +21535,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_LIGHTNING_ROD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -23432,8 +21550,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 130, .baseSpDefense = 80, - .type1 = TYPE_FIRE, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIRE, TYPE_FIGHTING}, .catchRate = 45, .expYield = 284, .evYield_Attack = 3, @@ -23441,8 +21558,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SPEED_BOOST, ABILITY_SPEED_BOOST}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -23457,8 +21573,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 95, .baseSpDefense = 110, - .type1 = TYPE_WATER, - .type2 = TYPE_GROUND, + .types = { TYPE_WATER, TYPE_GROUND}, .catchRate = 45, .expYield = 286, .evYield_Attack = 3, @@ -23466,8 +21581,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SWIFT_SWIM}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -23482,8 +21596,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 165, .baseSpDefense = 135, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FAIRY, + .types = { TYPE_PSYCHIC, TYPE_FAIRY}, .catchRate = 45, .expYield = 278, .evYield_SpAttack = 3, @@ -23491,8 +21604,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_PIXILATE, ABILITY_PIXILATE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -23507,8 +21619,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 85, .baseSpDefense = 115, - .type1 = TYPE_DARK, - .type2 = TYPE_GHOST, + .types = { TYPE_DARK, TYPE_GHOST}, .catchRate = 45, .expYield = 168, .evYield_Attack = 1, @@ -23517,8 +21628,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -23533,8 +21643,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 55, .baseSpDefense = 95, - .type1 = TYPE_STEEL, - .type2 = TYPE_FAIRY, + .types = { TYPE_STEEL, TYPE_FAIRY}, .catchRate = 45, .expYield = 168, .evYield_Attack = 1, @@ -23543,8 +21652,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HUGE_POWER, ABILITY_HUGE_POWER}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -23559,8 +21667,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 60, .baseSpDefense = 80, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = { TYPE_STEEL, TYPE_STEEL}, .catchRate = 45, .expYield = 284, .evYield_Defense = 3, @@ -23569,8 +21676,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 35, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_FILTER, ABILITY_FILTER}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -23585,8 +21691,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 80, .baseSpDefense = 85, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_FIGHTING, TYPE_PSYCHIC}, .catchRate = 90, .expYield = 179, .evYield_Speed = 2, @@ -23594,8 +21699,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_PURE_POWER, ABILITY_PURE_POWER}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -23610,8 +21714,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 135, .baseSpAttack = 135, .baseSpDefense = 80, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 201, .evYield_Speed = 2, @@ -23619,8 +21722,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_INTIMIDATE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -23635,8 +21737,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 110, .baseSpDefense = 65, - .type1 = TYPE_WATER, - .type2 = TYPE_DARK, + .types = { TYPE_WATER, TYPE_DARK}, .catchRate = 60, .expYield = 196, .evYield_Attack = 2, @@ -23645,8 +21746,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_STRONG_JAW, ABILITY_STRONG_JAW}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -23661,8 +21761,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 145, .baseSpDefense = 105, - .type1 = TYPE_FIRE, - .type2 = TYPE_GROUND, + .types = { TYPE_FIRE, TYPE_GROUND}, .catchRate = 150, .expYield = 196, .evYield_Attack = 1, @@ -23671,8 +21770,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SHEER_FORCE, ABILITY_SHEER_FORCE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -23687,8 +21785,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 110, .baseSpDefense = 105, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FAIRY, + .types = { TYPE_DRAGON, TYPE_FAIRY}, .catchRate = 45, .expYield = 207, .evYield_SpDefense = 2, @@ -23696,8 +21793,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_ERRATIC, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON}, .abilities = {ABILITY_PIXILATE, ABILITY_PIXILATE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -23712,8 +21808,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 75, .baseSpAttack = 93, .baseSpDefense = 83, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST}, .catchRate = 45, .expYield = 194, .evYield_Attack = 2, @@ -23722,8 +21817,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_PRANKSTER, ABILITY_PRANKSTER}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -23738,8 +21832,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 115, .baseSpDefense = 60, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK}, .catchRate = 30, .expYield = 198, .evYield_Attack = 2, @@ -23747,8 +21840,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, @@ -23763,8 +21855,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 120, .baseSpDefense = 80, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 75, .expYield = 203, .evYield_HP = 2, @@ -23772,8 +21863,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL}, .abilities = {ABILITY_REFRIGERATE, ABILITY_REFRIGERATE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -23788,8 +21878,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 120, .baseSpAttack = 120, .baseSpDefense = 90, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FLYING, + .types = { TYPE_DRAGON, TYPE_FLYING}, .catchRate = 45, .expYield = 315, .evYield_Attack = 3, @@ -23798,8 +21887,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_AERILATE, ABILITY_AERILATE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -23814,8 +21902,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 105, .baseSpDefense = 110, - .type1 = TYPE_STEEL, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_STEEL, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 315, .evYield_Defense = 3, @@ -23824,8 +21911,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_TOUGH_CLAWS}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -23840,8 +21926,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 140, .baseSpDefense = 150, - .type1 = TYPE_DRAGON, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_DRAGON, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 315, .evYield_SpDefense = 3, @@ -23849,8 +21934,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -23865,8 +21949,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 160, .baseSpDefense = 120, - .type1 = TYPE_DRAGON, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_DRAGON, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 315, .evYield_SpAttack = 3, @@ -23874,8 +21957,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -23891,8 +21973,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 135, .baseSpAttack = 54, .baseSpDefense = 96, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FIGHTING, + .types = { TYPE_NORMAL, TYPE_FIGHTING}, .catchRate = 60, .expYield = 203, .evYield_Speed = 2, @@ -23900,8 +21981,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 140, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_SCRAPPY, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -23916,8 +21996,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 92, .baseSpAttack = 120, .baseSpDefense = 95, - .type1 = TYPE_DRAGON, - .type2 = TYPE_GROUND, + .types = { TYPE_DRAGON, TYPE_GROUND}, .catchRate = 45, .expYield = 315, .evYield_Attack = 3, @@ -23925,8 +22004,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAND_FORCE, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -23941,8 +22019,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 112, .baseSpAttack = 140, .baseSpDefense = 70, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_STEEL, + .types = { TYPE_FIGHTING, TYPE_STEEL}, .catchRate = 45, .expYield = 219, .evYield_Attack = 1, @@ -23951,8 +22028,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_ADAPTABILITY, ABILITY_ADAPTABILITY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -23967,8 +22043,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 132, .baseSpDefense = 105, - .type1 = TYPE_GRASS, - .type2 = TYPE_ICE, + .types = { TYPE_GRASS, TYPE_ICE}, .catchRate = 60, .expYield = 208, .evYield_Attack = 1, @@ -23978,8 +22053,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS}, .abilities = {ABILITY_SNOW_WARNING, ABILITY_SNOW_WARNING}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -23994,8 +22068,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 65, .baseSpDefense = 115, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FIGHTING, + .types = { TYPE_PSYCHIC, TYPE_FIGHTING}, .catchRate = 45, .expYield = 278, .evYield_Attack = 3, @@ -24003,8 +22076,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -24021,8 +22093,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 80, .baseSpDefense = 126, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FAIRY, + .types = { TYPE_NORMAL, TYPE_FAIRY}, .catchRate = 255, .expYield = 425, .evYield_HP = 2, @@ -24032,8 +22103,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_HEALER, ABILITY_HEALER}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -24050,8 +22120,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 160, .baseSpDefense = 110, - .type1 = TYPE_ROCK, - .type2 = TYPE_FAIRY, + .types = { TYPE_ROCK, TYPE_FAIRY}, .catchRate = 3, .expYield = 315, .evYield_Defense = 1, @@ -24060,8 +22129,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_MAGIC_BOUNCE, ABILITY_MAGIC_BOUNCE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -24077,8 +22145,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 180, .baseSpDefense = 100, - .type1 = TYPE_DRAGON, - .type2 = TYPE_FLYING, + .types = { TYPE_DRAGON, TYPE_FLYING}, .catchRate = 45, .expYield = 306, .evYield_Attack = 2, @@ -24087,8 +22154,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_DELTA_STREAM, ABILITY_DELTA_STREAM}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -24103,8 +22169,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 180, .baseSpDefense = 160, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 3, .expYield = 302, .evYield_SpAttack = 3, @@ -24112,8 +22177,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRIMORDIAL_SEA, ABILITY_PRIMORDIAL_SEA}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -24128,8 +22192,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 150, .baseSpDefense = 90, - .type1 = TYPE_GROUND, - .type2 = TYPE_FIRE, + .types = { TYPE_GROUND, TYPE_FIRE}, .catchRate = 3, .expYield = 302, .evYield_Attack = 3, @@ -24137,8 +22200,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_DESOLATE_LAND, ABILITY_DESOLATE_LAND}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -24153,8 +22215,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 72, .baseSpAttack = 25, .baseSpDefense = 35, - .type1 = TYPE_DARK, - .type2 = TYPE_NORMAL, + .types = { TYPE_DARK, TYPE_NORMAL}, .catchRate = 255, .expYield = 51, .evYield_Speed = 1, @@ -24163,8 +22224,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GLUTTONY, ABILITY_HUSTLE, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -24179,8 +22239,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 77, .baseSpAttack = 40, .baseSpDefense = 80, - .type1 = TYPE_DARK, - .type2 = TYPE_NORMAL, + .types = { TYPE_DARK, TYPE_NORMAL}, .catchRate = 127, .expYield = 145, .evYield_Speed = 2, @@ -24189,8 +22248,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GLUTTONY, ABILITY_HUSTLE, ABILITY_THICK_FAT}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -24205,8 +22263,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 95, .baseSpDefense = 85, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_ELECTRIC, TYPE_PSYCHIC}, .catchRate = 75, .expYield = 218, .evYield_Speed = 3, @@ -24214,8 +22271,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 10, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY}, .abilities = {ABILITY_SURGE_SURFER, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -24230,8 +22286,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 10, .baseSpDefense = 35, - .type1 = TYPE_ICE, - .type2 = TYPE_STEEL, + .types = { TYPE_ICE, TYPE_STEEL}, .catchRate = 255, .expYield = 60, .evYield_Defense = 1, @@ -24240,8 +22295,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SLUSH_RUSH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -24256,8 +22310,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 25, .baseSpDefense = 65, - .type1 = TYPE_ICE, - .type2 = TYPE_STEEL, + .types = { TYPE_ICE, TYPE_STEEL}, .catchRate = 90, .expYield = 158, .evYield_Defense = 2, @@ -24265,8 +22318,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SLUSH_RUSH}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -24281,8 +22333,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 50, .baseSpDefense = 65, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 190, .expYield = 60, .evYield_Speed = 1, @@ -24291,8 +22342,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SNOW_WARNING}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -24307,8 +22357,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 109, .baseSpAttack = 81, .baseSpDefense = 100, - .type1 = TYPE_ICE, - .type2 = TYPE_FAIRY, + .types = { TYPE_ICE, TYPE_FAIRY}, .catchRate = 75, .expYield = 177, .evYield_Speed = 1, @@ -24317,8 +22366,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SNOW_WARNING}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -24333,8 +22381,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 35, .baseSpDefense = 45, - .type1 = TYPE_GROUND, - .type2 = TYPE_STEEL, + .types = { TYPE_GROUND, TYPE_STEEL}, .catchRate = 255, .expYield = 53, .evYield_Speed = 1, @@ -24343,8 +22390,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_VEIL, ABILITY_TANGLING_HAIR, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -24359,8 +22405,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 50, .baseSpDefense = 70, - .type1 = TYPE_GROUND, - .type2 = TYPE_STEEL, + .types = { TYPE_GROUND, TYPE_STEEL}, .catchRate = 50, .expYield = 149, .evYield_Speed = 2, @@ -24369,8 +22414,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SAND_VEIL, ABILITY_TANGLING_HAIR, ABILITY_SAND_FORCE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -24385,8 +22429,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 50, .baseSpDefense = 40, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK}, .catchRate = 255, .expYield = 58, .evYield_Speed = 1, @@ -24395,8 +22438,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -24411,8 +22453,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 75, .baseSpDefense = 65, - .type1 = TYPE_DARK, - .type2 = TYPE_DARK, + .types = { TYPE_DARK, TYPE_DARK}, .catchRate = 90, .expYield = 154, .evYield_Speed = 2, @@ -24421,8 +22462,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_FUR_COAT, ABILITY_TECHNICIAN, ABILITY_RATTLED}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -24437,8 +22477,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 30, .baseSpDefense = 30, - .type1 = TYPE_ROCK, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ROCK, TYPE_ELECTRIC}, .catchRate = 255, .expYield = 60, .evYield_Defense = 1, @@ -24447,8 +22486,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -24463,8 +22501,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 45, .baseSpDefense = 45, - .type1 = TYPE_ROCK, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ROCK, TYPE_ELECTRIC}, .catchRate = 120, .expYield = 137, .evYield_Defense = 2, @@ -24473,8 +22510,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -24489,8 +22525,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 55, .baseSpDefense = 65, - .type1 = TYPE_ROCK, - .type2 = TYPE_ELECTRIC, + .types = { TYPE_ROCK, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 223, .evYield_Defense = 3, @@ -24498,8 +22533,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY, ABILITY_GALVANIZE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -24514,8 +22548,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 25, .baseSpAttack = 40, .baseSpDefense = 50, - .type1 = TYPE_POISON, - .type2 = TYPE_DARK, + .types = { TYPE_POISON, TYPE_DARK}, .catchRate = 190, .expYield = 65, .evYield_HP = 1, @@ -24524,8 +22557,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_POISON_TOUCH, ABILITY_GLUTTONY, ABILITY_POWER_OF_ALCHEMY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -24540,8 +22572,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 65, .baseSpDefense = 100, - .type1 = TYPE_POISON, - .type2 = TYPE_DARK, + .types = { TYPE_POISON, TYPE_DARK}, .catchRate = 75, .expYield = 175, .evYield_HP = 1, @@ -24550,8 +22581,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_POISON_TOUCH, ABILITY_GLUTTONY, ABILITY_POWER_OF_ALCHEMY}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -24566,8 +22596,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 125, .baseSpDefense = 75, - .type1 = TYPE_GRASS, - .type2 = TYPE_DRAGON, + .types = { TYPE_GRASS, TYPE_DRAGON}, .catchRate = 45, .expYield = 186, .evYield_SpAttack = 2, @@ -24575,8 +22604,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_FRISK, ABILITY_NONE, ABILITY_HARVEST}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -24591,8 +22619,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 50, .baseSpDefense = 80, - .type1 = TYPE_FIRE, - .type2 = TYPE_GHOST, + .types = { TYPE_FIRE, TYPE_GHOST}, .catchRate = 75, .expYield = 149, .evYield_Defense = 2, @@ -24600,8 +22627,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MONSTER, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER}, .abilities = {ABILITY_CURSED_BODY, ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -24616,8 +22642,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .types = { TYPE_STEEL, TYPE_STEEL}, .catchRate = 255, .expYield = 58, .evYield_Attack = 1, @@ -24625,8 +22650,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PICKUP, ABILITY_TOUGH_CLAWS, ABILITY_UNNERVE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -24641,8 +22665,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 65, .baseSpDefense = 65, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 190, .expYield = 82, .evYield_Speed = 1, @@ -24650,8 +22673,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_PASTEL_VEIL, ABILITY_ANTICIPATION}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -24666,8 +22688,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 80, .baseSpDefense = 80, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FAIRY, + .types = { TYPE_PSYCHIC, TYPE_FAIRY}, .catchRate = 60, .expYield = 175, .evYield_Speed = 2, @@ -24675,8 +22696,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_RUN_AWAY, ABILITY_PASTEL_VEIL, ABILITY_ANTICIPATION}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -24691,8 +22711,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 190, .expYield = 63, .evYield_HP = 1, @@ -24700,8 +22719,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_GLUTTONY, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -24716,8 +22734,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 100, .baseSpDefense = 70, - .type1 = TYPE_POISON, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_POISON, TYPE_PSYCHIC}, .catchRate = 75, .expYield = 172, .evYield_Attack = 2, @@ -24725,8 +22742,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_QUICK_DRAW, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -24741,8 +22757,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 58, .baseSpDefense = 62, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FIGHTING, + .types = { TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 132, .evYield_Attack = 1, @@ -24751,8 +22766,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FIELD}, .abilities = {ABILITY_STEADFAST, ABILITY_NONE, ABILITY_SCRAPPY}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -24767,8 +22781,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 85, .baseSpDefense = 70, - .type1 = TYPE_POISON, - .type2 = TYPE_FAIRY, + .types = { TYPE_POISON, TYPE_FAIRY}, .catchRate = 60, .expYield = 172, .evYield_Defense = 2, @@ -24777,8 +22790,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_AMORPHOUS, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_MISTY_SURGE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -24793,8 +22805,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 90, .baseSpDefense = 90, - .type1 = TYPE_ICE, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_ICE, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 161, .evYield_Speed = 2, @@ -24802,8 +22813,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_HUMAN_LIKE, - .eggGroup2 = EGG_GROUP_HUMAN_LIKE, + .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_SCREEN_CLEANER, ABILITY_ICE_BODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -24818,8 +22828,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 125, .baseSpDefense = 100, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FLYING, + .types = { TYPE_PSYCHIC, TYPE_FLYING}, .catchRate = 3, .expYield = 290, .evYield_SpAttack = 3, @@ -24827,8 +22836,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_COMPETITIVE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -24843,8 +22851,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 85, .baseSpDefense = 90, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_FLYING, + .types = { TYPE_FIGHTING, TYPE_FLYING}, .catchRate = 3, .expYield = 290, .evYield_Attack = 3, @@ -24852,8 +22859,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_DEFIANT, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -24868,8 +22874,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 100, .baseSpDefense = 125, - .type1 = TYPE_DARK, - .type2 = TYPE_FLYING, + .types = { TYPE_DARK, TYPE_FLYING}, .catchRate = 3, .expYield = 290, .evYield_SpDefense = 3, @@ -24877,8 +22882,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BERSERK, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -24893,8 +22897,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 110, .baseSpDefense = 110, - .type1 = TYPE_POISON, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_POISON, TYPE_PSYCHIC}, .catchRate = 70, .expYield = 172, .evYield_SpDefense = 2, @@ -24902,8 +22905,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_WATER_1, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1}, .abilities = {ABILITY_CURIOUS_MEDICINE, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -24918,8 +22920,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 65, .baseSpDefense = 100, - .type1 = TYPE_GHOST, - .type2 = TYPE_GHOST, + .types = { TYPE_GHOST, TYPE_GHOST}, .catchRate = 60, .expYield = 144, .evYield_SpDefense = 1, @@ -24927,8 +22928,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_WATER_3, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3}, .abilities = {ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -24943,8 +22943,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 30, .baseSpDefense = 41, - .type1 = TYPE_DARK, - .type2 = TYPE_NORMAL, + .types = { TYPE_DARK, TYPE_NORMAL}, .catchRate = 255, .expYield = 56, .evYield_Speed = 1, @@ -24952,8 +22951,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -24968,8 +22966,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 50, .baseSpDefense = 61, - .type1 = TYPE_DARK, - .type2 = TYPE_NORMAL, + .types = { TYPE_DARK, TYPE_NORMAL}, .catchRate = 90, .expYield = 147, .evYield_Speed = 2, @@ -24977,8 +22974,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -24994,8 +22990,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 15, .baseSpDefense = 45, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 120, .expYield = 63, .evYield_Attack = 1, @@ -25003,8 +22998,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_HUSTLE, ABILITY_NONE, ABILITY_INNER_FOCUS}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -25019,8 +23013,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 30, .baseSpDefense = 55, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 60, .expYield = 168, .evYield_Attack = 2, @@ -25028,8 +23021,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GORILLA_TACTICS, ABILITY_NONE, ABILITY_ZEN_MODE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -25044,8 +23036,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 30, .baseSpDefense = 65, - .type1 = TYPE_GROUND, - .type2 = TYPE_GHOST, + .types = { TYPE_GROUND, TYPE_GHOST}, .catchRate = 190, .expYield = 61, .evYield_Defense = 1, @@ -25053,8 +23044,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_WANDERING_SPIRIT, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -25069,8 +23059,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 32, .baseSpAttack = 66, .baseSpDefense = 84, - .type1 = TYPE_GROUND, - .type2 = TYPE_STEEL, + .types = { TYPE_GROUND, TYPE_STEEL}, .catchRate = 75, .expYield = 165, .evYield_HP = 2, @@ -25078,8 +23067,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_AMORPHOUS, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_MIMICRY, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -25095,8 +23083,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 65, .baseSpDefense = 50, - .type1 = TYPE_FIRE, - .type2 = TYPE_ROCK, + .types = { TYPE_FIRE, TYPE_ROCK}, .catchRate = 190, .expYield = 70, .evYield_Attack = 1, @@ -25104,8 +23091,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -25120,8 +23106,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 95, .baseSpDefense = 80, - .type1 = TYPE_FIRE, - .type2 = TYPE_ROCK, + .types = { TYPE_FIRE, TYPE_ROCK}, .catchRate = 75, .expYield = 194, .evYield_Attack = 2, @@ -25129,8 +23114,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -25145,8 +23129,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 100, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_GRASS, + .types = { TYPE_ELECTRIC, TYPE_GRASS}, .catchRate = 190, .expYield = 66, .evYield_Speed = 1, @@ -25154,8 +23137,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -25170,8 +23152,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 80, .baseSpDefense = 80, .baseSpeed = 150, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_GRASS, + .types = { TYPE_ELECTRIC, TYPE_GRASS}, .catchRate = 60, .expYield = 172, .evYield_Speed = 2, @@ -25179,8 +23160,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC, ABILITY_AFTERMATH}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -25195,8 +23175,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 119, .baseSpDefense = 85, - .type1 = TYPE_FIRE, - .type2 = TYPE_GHOST, + .types = { TYPE_FIRE, TYPE_GHOST}, .catchRate = 45, .expYield = 240, .evYield_SpAttack = 3, @@ -25204,8 +23183,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_FLASH_FIRE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -25220,8 +23198,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 55, .baseSpDefense = 55, - .type1 = TYPE_DARK, - .type2 = TYPE_POISON, + .types = { TYPE_DARK, TYPE_POISON}, .catchRate = 45, .expYield = 88, .evYield_Attack = 1, @@ -25230,8 +23207,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM, ABILITY_INTIMIDATE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -25246,8 +23222,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 115, .baseSpAttack = 35, .baseSpDefense = 75, - .type1 = TYPE_POISON, - .type2 = TYPE_FIGHTING, + .types = { TYPE_POISON, TYPE_FIGHTING}, .catchRate = 60, .expYield = 86, .evYield_Speed = 1, @@ -25256,8 +23231,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE, ABILITY_POISON_TOUCH}, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, @@ -25273,8 +23247,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 100, .baseSpDefense = 65, - .type1 = TYPE_WATER, - .type2 = TYPE_DARK, + .types = { TYPE_WATER, TYPE_DARK}, .catchRate = 45, .expYield = 238, .evYield_SpAttack = 3, @@ -25282,8 +23255,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHELL_ARMOR}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -25298,8 +23270,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 105, .baseSpAttack = 50, .baseSpDefense = 75, - .type1 = TYPE_GRASS, - .type2 = TYPE_FIGHTING, + .types = { TYPE_GRASS, TYPE_FIGHTING}, .catchRate = 75, .expYield = 168, .evYield_Attack = 2, @@ -25308,8 +23279,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_GRASS, - .eggGroup2 = EGG_GROUP_GRASS, + .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS}, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_HUSTLE, ABILITY_LEAF_GUARD}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -25324,8 +23294,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 70, .baseSpAttack = 85, .baseSpDefense = 40, - .type1 = TYPE_NORMAL, - .type2 = TYPE_GHOST, + .types = { TYPE_NORMAL, TYPE_GHOST}, .catchRate = 75, .expYield = 66, .evYield_SpAttack = 1, @@ -25333,8 +23302,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -25349,8 +23317,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 125, .baseSpDefense = 60, - .type1 = TYPE_NORMAL, - .type2 = TYPE_GHOST, + .types = { TYPE_NORMAL, TYPE_GHOST}, .catchRate = 45, .expYield = 179, .evYield_SpAttack = 2, @@ -25358,8 +23325,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_ILLUSION, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -25374,8 +23340,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 65, .baseSpAttack = 112, .baseSpDefense = 70, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_FLYING, + .types = { TYPE_PSYCHIC, TYPE_FLYING}, .catchRate = 60, .expYield = 179, .evYield_SpAttack = 2, @@ -25383,8 +23348,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_DEFIANT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -25401,8 +23365,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 83, .baseSpDefense = 113, - .type1 = TYPE_DRAGON, - .type2 = TYPE_STEEL, + .types = { TYPE_DRAGON, TYPE_STEEL}, .catchRate = 45, .expYield = 158, .evYield_SpDefense = 2, @@ -25411,8 +23374,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAP_SIPPER, ABILITY_OVERCOAT, ABILITY_GOOEY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -25427,8 +23389,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 110, .baseSpDefense = 150, - .type1 = TYPE_DRAGON, - .type2 = TYPE_STEEL, + .types = { TYPE_DRAGON, TYPE_STEEL}, .catchRate = 45, .expYield = 270, .evYield_SpDefense = 3, @@ -25436,8 +23397,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_DRAGON, - .eggGroup2 = EGG_GROUP_DRAGON, + .eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON}, .abilities = {ABILITY_SAP_SIPPER, ABILITY_OVERCOAT, ABILITY_GOOEY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -25452,8 +23412,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 38, .baseSpAttack = 34, .baseSpDefense = 36, - .type1 = TYPE_ICE, - .type2 = TYPE_ROCK, + .types = { TYPE_ICE, TYPE_ROCK}, .catchRate = 55, .expYield = 180, .evYield_Defense = 2, @@ -25461,8 +23420,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MONSTER, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STRONG_JAW, ABILITY_ICE_BODY, ABILITY_STURDY}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -25479,8 +23437,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 95, .baseSpDefense = 95, - .type1 = TYPE_GRASS, - .type2 = TYPE_FIGHTING, + .types = { TYPE_GRASS, TYPE_FIGHTING}, .catchRate = 45, .expYield = 239, .evYield_Attack = 3, @@ -25488,8 +23445,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FLYING, - .eggGroup2 = EGG_GROUP_FLYING, + .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING}, .abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -25497,55 +23453,55 @@ const struct BaseStats gBaseStats[] = }, #endif - [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), - - [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_PIKACHU_COSPLAY] = COSPLAY_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_ROCK_STAR] = COSPLAY_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_BELLE] = COSPLAY_PIKACHU_SPECIES_INFO(NO_FLIP), + [SPECIES_PIKACHU_POP_STAR] = COSPLAY_PIKACHU_SPECIES_INFO(NO_FLIP), + [SPECIES_PIKACHU_PH_D] = COSPLAY_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_LIBRE] = COSPLAY_PIKACHU_SPECIES_INFO(FLIP), + + [SPECIES_PIKACHU_ORIGINAL_CAP] = CAP_PIKACHU_SPECIES_INFO(NO_FLIP), + [SPECIES_PIKACHU_HOENN_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_SINNOH_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_UNOVA_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_KALOS_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_ALOLA_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), + [SPECIES_PIKACHU_PARTNER_CAP] = CAP_PIKACHU_SPECIES_INFO(NO_FLIP), + [SPECIES_PIKACHU_WORLD_CAP] = CAP_PIKACHU_SPECIES_INFO(FLIP), + + [SPECIES_PICHU_SPIKY_EARED] = PICHU_SPECIES_INFO(NO_FLIP), + + [SPECIES_UNOWN_B] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_C] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_D] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_E] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_F] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_G] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_H] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_I] = UNOWN_SPECIES_INFO(FLIP), + [SPECIES_UNOWN_J] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_K] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_L] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_M] = UNOWN_SPECIES_INFO(FLIP), + [SPECIES_UNOWN_N] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_O] = UNOWN_SPECIES_INFO(FLIP), + [SPECIES_UNOWN_P] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_Q] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_R] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_S] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_T] = UNOWN_SPECIES_INFO(FLIP), + [SPECIES_UNOWN_U] = UNOWN_SPECIES_INFO(FLIP), + [SPECIES_UNOWN_V] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_W] = UNOWN_SPECIES_INFO(FLIP), + [SPECIES_UNOWN_X] = UNOWN_SPECIES_INFO(FLIP), + [SPECIES_UNOWN_Y] = UNOWN_SPECIES_INFO(FLIP), + [SPECIES_UNOWN_Z] = UNOWN_SPECIES_INFO(NO_FLIP), + [SPECIES_UNOWN_EMARK] = UNOWN_SPECIES_INFO(FLIP), + [SPECIES_UNOWN_QMARK] = UNOWN_SPECIES_INFO(NO_FLIP), + + [SPECIES_CASTFORM_SUNNY] = CASTFORM_SPECIES_INFO(TYPE_FIRE, BODY_COLOR_RED), + [SPECIES_CASTFORM_RAINY] = CASTFORM_SPECIES_INFO(TYPE_WATER, BODY_COLOR_BLUE), + [SPECIES_CASTFORM_SNOWY] = CASTFORM_SPECIES_INFO(TYPE_ICE, BODY_COLOR_WHITE), [SPECIES_DEOXYS_ATTACK] = { @@ -25555,8 +23511,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 150, .baseSpAttack = 180, .baseSpDefense = 20, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 270, .evYield_Attack = 2, @@ -25565,8 +23520,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -25580,8 +23534,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 70, .baseSpDefense = 160, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 270, .evYield_Defense = 2, @@ -25590,8 +23543,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -25605,8 +23557,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 180, .baseSpAttack = 95, .baseSpDefense = 90, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 270, .evYield_Speed = 3, @@ -25614,16 +23565,15 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, }, #if P_GEN_4_POKEMON == TRUE - [SPECIES_BURMY_SANDY_CLOAK] = BURMY_BASE_STATS(BODY_COLOR_BROWN), - [SPECIES_BURMY_TRASH_CLOAK] = BURMY_BASE_STATS(BODY_COLOR_RED), + [SPECIES_BURMY_SANDY_CLOAK] = BURMY_SPECIES_INFO(BODY_COLOR_BROWN), + [SPECIES_BURMY_TRASH_CLOAK] = BURMY_SPECIES_INFO(BODY_COLOR_RED), [SPECIES_WORMADAM_SANDY_CLOAK] = { @@ -25633,8 +23583,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 36, .baseSpAttack = 59, .baseSpDefense = 85, - .type1 = TYPE_BUG, - .type2 = TYPE_GROUND, + .types = { TYPE_BUG, TYPE_GROUND}, .catchRate = 45, .expYield = 148, .evYield_Defense = 2, @@ -25643,8 +23592,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -25658,8 +23606,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 36, .baseSpAttack = 69, .baseSpDefense = 95, - .type1 = TYPE_BUG, - .type2 = TYPE_STEEL, + .types = { TYPE_BUG, TYPE_STEEL}, .catchRate = 45, .expYield = 148, .evYield_Defense = 1, @@ -25669,24 +23616,23 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_BUG, - .eggGroup2 = EGG_GROUP_BUG, + .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG}, .abilities = {ABILITY_ANTICIPATION, ABILITY_NONE, ABILITY_OVERCOAT}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, }, - [SPECIES_CHERRIM_SUNSHINE] = CHERRIM_BASE_STATS(BODY_COLOR_PINK), + [SPECIES_CHERRIM_SUNSHINE] = CHERRIM_SPECIES_INFO(BODY_COLOR_PINK), - [SPECIES_SHELLOS_EAST_SEA] = SHELLOS_BASE_STATS(BODY_COLOR_BLUE), + [SPECIES_SHELLOS_EAST_SEA] = SHELLOS_SPECIES_INFO(BODY_COLOR_BLUE), - [SPECIES_GASTRODON_EAST_SEA] = GASTRODON_BASE_STATS(BODY_COLOR_BLUE), + [SPECIES_GASTRODON_EAST_SEA] = GASTRODON_SPECIES_INFO(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_ROTOM_HEAT] = ROTOM_FORM_SPECIES_INFO(TYPE_FIRE, FLIP), + [SPECIES_ROTOM_WASH] = ROTOM_FORM_SPECIES_INFO(TYPE_WATER, NO_FLIP), + [SPECIES_ROTOM_FROST] = ROTOM_FORM_SPECIES_INFO(TYPE_ICE, FLIP), + [SPECIES_ROTOM_FAN] = ROTOM_FORM_SPECIES_INFO(TYPE_FLYING, FLIP), + [SPECIES_ROTOM_MOW] = ROTOM_FORM_SPECIES_INFO(TYPE_GRASS, FLIP), [SPECIES_DIALGA_ORIGIN] = { @@ -25696,8 +23642,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 150, .baseSpDefense = 120, - .type1 = TYPE_STEEL, - .type2 = TYPE_DRAGON, + .types = { TYPE_STEEL, TYPE_DRAGON}, .catchRate = 3, .expYield = 306, .evYield_SpAttack = 3, @@ -25705,8 +23650,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -25721,8 +23665,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 120, .baseSpAttack = 150, .baseSpDefense = 120, - .type1 = TYPE_WATER, - .type2 = TYPE_DRAGON, + .types = { TYPE_WATER, TYPE_DRAGON}, .catchRate = 3, .expYield = 306, .evYield_SpAttack = 3, @@ -25730,8 +23673,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE, ABILITY_TELEPATHY}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -25746,8 +23688,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 90, .baseSpAttack = 120, .baseSpDefense = 100, - .type1 = TYPE_GHOST, - .type2 = TYPE_DRAGON, + .types = { TYPE_GHOST, TYPE_DRAGON}, .catchRate = 3, .expYield = 306, .evYield_HP = 3, @@ -25755,8 +23696,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -25770,8 +23710,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 127, .baseSpAttack = 120, .baseSpDefense = 75, - .type1 = TYPE_GRASS, - .type2 = TYPE_FLYING, + .types = { TYPE_GRASS, TYPE_FLYING}, .catchRate = 45, .expYield = 270, .evYield_HP = 3, @@ -25781,30 +23720,29 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, }, - [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_ARCEUS_FIGHTING] = ARCEUS_SPECIES_INFO(TYPE_FIGHTING), + [SPECIES_ARCEUS_FLYING] = ARCEUS_SPECIES_INFO(TYPE_FLYING), + [SPECIES_ARCEUS_POISON] = ARCEUS_SPECIES_INFO(TYPE_POISON), + [SPECIES_ARCEUS_GROUND] = ARCEUS_SPECIES_INFO(TYPE_GROUND), + [SPECIES_ARCEUS_ROCK] = ARCEUS_SPECIES_INFO(TYPE_ROCK), + [SPECIES_ARCEUS_BUG] = ARCEUS_SPECIES_INFO(TYPE_BUG), + [SPECIES_ARCEUS_GHOST] = ARCEUS_SPECIES_INFO(TYPE_GHOST), + [SPECIES_ARCEUS_STEEL] = ARCEUS_SPECIES_INFO(TYPE_STEEL), + [SPECIES_ARCEUS_FIRE] = ARCEUS_SPECIES_INFO(TYPE_FIRE), + [SPECIES_ARCEUS_WATER] = ARCEUS_SPECIES_INFO(TYPE_WATER), + [SPECIES_ARCEUS_GRASS] = ARCEUS_SPECIES_INFO(TYPE_GRASS), + [SPECIES_ARCEUS_ELECTRIC] = ARCEUS_SPECIES_INFO(TYPE_ELECTRIC), + [SPECIES_ARCEUS_PSYCHIC] = ARCEUS_SPECIES_INFO(TYPE_PSYCHIC), + [SPECIES_ARCEUS_ICE] = ARCEUS_SPECIES_INFO(TYPE_ICE), + [SPECIES_ARCEUS_DRAGON] = ARCEUS_SPECIES_INFO(TYPE_DRAGON), + [SPECIES_ARCEUS_DARK] = ARCEUS_SPECIES_INFO(TYPE_DARK), + [SPECIES_ARCEUS_FAIRY] = ARCEUS_SPECIES_INFO(TYPE_FAIRY), #endif #if P_GEN_5_POKEMON == TRUE @@ -25816,8 +23754,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 98, .baseSpAttack = 80, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 25, .expYield = 161, .evYield_Speed = 2, @@ -25826,8 +23763,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_ROCK_HEAD, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -25841,8 +23777,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 98, .baseSpAttack = 80, .baseSpDefense = 55, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 25, .expYield = 161, .evYield_Speed = 2, @@ -25851,8 +23786,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_RATTLED, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -25866,8 +23800,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 55, .baseSpAttack = 140, .baseSpDefense = 105, - .type1 = TYPE_FIRE, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_FIRE, TYPE_PSYCHIC}, .catchRate = 60, .expYield = 189, .evYield_SpAttack = 2, @@ -25875,8 +23808,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_SHEER_FORCE, ABILITY_NONE, ABILITY_ZEN_MODE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -25890,8 +23822,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 135, .baseSpAttack = 30, .baseSpDefense = 55, - .type1 = TYPE_ICE, - .type2 = TYPE_FIRE, + .types = { TYPE_ICE, TYPE_FIRE}, .catchRate = 60, .expYield = 189, .evYield_SpAttack = 2, @@ -25899,21 +23830,20 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_GORILLA_TACTICS, ABILITY_NONE, ABILITY_ZEN_MODE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, .flags = SPECIES_FLAG_GALARIAN_FORM, }, - [SPECIES_DEERLING_SUMMER] = DEERLING_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_SUMMER] = DEERLING_SPECIES_INFO(BODY_COLOR_GREEN), + [SPECIES_DEERLING_AUTUMN] = DEERLING_SPECIES_INFO(BODY_COLOR_RED), + [SPECIES_DEERLING_WINTER] = DEERLING_SPECIES_INFO(BODY_COLOR_BROWN), - [SPECIES_SAWSBUCK_SUMMER] = SAWSBUCK_BASE_STATS, - [SPECIES_SAWSBUCK_AUTUMN] = SAWSBUCK_BASE_STATS, - [SPECIES_SAWSBUCK_WINTER] = SAWSBUCK_BASE_STATS, + [SPECIES_SAWSBUCK_SUMMER] = SAWSBUCK_SPECIES_INFO, + [SPECIES_SAWSBUCK_AUTUMN] = SAWSBUCK_SPECIES_INFO, + [SPECIES_SAWSBUCK_WINTER] = SAWSBUCK_SPECIES_INFO, [SPECIES_TORNADUS_THERIAN] = { @@ -25923,8 +23853,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 121, .baseSpAttack = 110, .baseSpDefense = 90, - .type1 = TYPE_FLYING, - .type2 = TYPE_FLYING, + .types = { TYPE_FLYING, TYPE_FLYING}, .catchRate = 3, .expYield = 261, .evYield_Attack = 3, @@ -25932,8 +23861,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_REGENERATOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -25948,8 +23876,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 101, .baseSpAttack = 145, .baseSpDefense = 80, - .type1 = TYPE_ELECTRIC, - .type2 = TYPE_FLYING, + .types = { TYPE_ELECTRIC, TYPE_FLYING}, .catchRate = 3, .expYield = 261, .evYield_SpAttack = 3, @@ -25957,8 +23884,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -25973,8 +23899,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 91, .baseSpAttack = 105, .baseSpDefense = 80, - .type1 = TYPE_GROUND, - .type2 = TYPE_FLYING, + .types = { TYPE_GROUND, TYPE_FLYING}, .catchRate = 3, .expYield = 270, .evYield_Attack = 3, @@ -25982,8 +23907,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -25998,8 +23922,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 170, .baseSpDefense = 100, - .type1 = TYPE_DRAGON, - .type2 = TYPE_ICE, + .types = { TYPE_DRAGON, TYPE_ICE}, .catchRate = 3, .expYield = 315, .evYield_SpAttack = 3, @@ -26007,8 +23930,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_TURBOBLAZE, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -26023,8 +23945,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 95, .baseSpAttack = 120, .baseSpDefense = 90, - .type1 = TYPE_DRAGON, - .type2 = TYPE_ICE, + .types = { TYPE_DRAGON, TYPE_ICE}, .catchRate = 3, .expYield = 315, .evYield_Attack = 3, @@ -26032,8 +23953,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_TERAVOLT, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, @@ -26048,8 +23968,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 108, .baseSpAttack = 129, .baseSpDefense = 90, - .type1 = TYPE_WATER, - .type2 = TYPE_FIGHTING, + .types = { TYPE_WATER, TYPE_FIGHTING}, .catchRate = 3, .expYield = 261, .evYield_SpAttack = 3, @@ -26057,8 +23976,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_JUSTIFIED, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, @@ -26073,8 +23991,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 128, .baseSpAttack = 77, .baseSpDefense = 77, - .type1 = TYPE_NORMAL, - .type2 = TYPE_FIGHTING, + .types = { TYPE_NORMAL, TYPE_FIGHTING}, .catchRate = 3, .expYield = 270, .evYield_Attack = 1, @@ -26086,18 +24003,17 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, .flags = SPECIES_FLAG_MYTHICAL, }, - [SPECIES_GENESECT_DOUSE_DRIVE] = GENESECT_BASE_STATS, - [SPECIES_GENESECT_SHOCK_DRIVE] = GENESECT_BASE_STATS, - [SPECIES_GENESECT_BURN_DRIVE] = GENESECT_BASE_STATS, - [SPECIES_GENESECT_CHILL_DRIVE] = GENESECT_BASE_STATS, + [SPECIES_GENESECT_DOUSE_DRIVE] = GENESECT_SPECIES_INFO, + [SPECIES_GENESECT_SHOCK_DRIVE] = GENESECT_SPECIES_INFO, + [SPECIES_GENESECT_BURN_DRIVE] = GENESECT_SPECIES_INFO, + [SPECIES_GENESECT_CHILL_DRIVE] = GENESECT_SPECIES_INFO, #endif #if P_GEN_6_POKEMON == TRUE @@ -26109,8 +24025,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 122, .baseSpAttack = 103, .baseSpDefense = 71, - .type1 = TYPE_WATER, - .type2 = TYPE_DARK, + .types = { TYPE_WATER, TYPE_DARK}, .catchRate = 45, .expYield = 239, .evYield_Speed = 3, @@ -26118,8 +24033,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BATTLE_BOND, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -26133,8 +24047,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 132, .baseSpAttack = 153, .baseSpDefense = 71, - .type1 = TYPE_WATER, - .type2 = TYPE_DARK, + .types = { TYPE_WATER, TYPE_DARK}, .catchRate = 45, .expYield = 288, .evYield_Speed = 3, @@ -26142,42 +24055,41 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_BATTLE_BOND, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, }, - [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_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_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_VIVILLON_POLAR] = VIVILLON_SPECIES_INFO(BODY_COLOR_BLUE), + [SPECIES_VIVILLON_TUNDRA] = VIVILLON_SPECIES_INFO(BODY_COLOR_BLUE), + [SPECIES_VIVILLON_CONTINENTAL] = VIVILLON_SPECIES_INFO(BODY_COLOR_YELLOW), + [SPECIES_VIVILLON_GARDEN] = VIVILLON_SPECIES_INFO(BODY_COLOR_GREEN), + [SPECIES_VIVILLON_ELEGANT] = VIVILLON_SPECIES_INFO(BODY_COLOR_PURPLE), + [SPECIES_VIVILLON_MEADOW] = VIVILLON_SPECIES_INFO(BODY_COLOR_PINK), + [SPECIES_VIVILLON_MODERN] = VIVILLON_SPECIES_INFO(BODY_COLOR_RED), + [SPECIES_VIVILLON_MARINE] = VIVILLON_SPECIES_INFO(BODY_COLOR_BLUE), + [SPECIES_VIVILLON_ARCHIPELAGO] = VIVILLON_SPECIES_INFO(BODY_COLOR_BROWN), + [SPECIES_VIVILLON_HIGH_PLAINS] = VIVILLON_SPECIES_INFO(BODY_COLOR_BROWN), + [SPECIES_VIVILLON_SANDSTORM] = VIVILLON_SPECIES_INFO(BODY_COLOR_BROWN), + [SPECIES_VIVILLON_RIVER] = VIVILLON_SPECIES_INFO(BODY_COLOR_BROWN), + [SPECIES_VIVILLON_MONSOON] = VIVILLON_SPECIES_INFO(BODY_COLOR_GRAY), + [SPECIES_VIVILLON_SAVANNA] = VIVILLON_SPECIES_INFO(BODY_COLOR_GREEN), + [SPECIES_VIVILLON_SUN] = VIVILLON_SPECIES_INFO(BODY_COLOR_RED), + [SPECIES_VIVILLON_OCEAN] = VIVILLON_SPECIES_INFO(BODY_COLOR_RED), + [SPECIES_VIVILLON_JUNGLE] = VIVILLON_SPECIES_INFO(BODY_COLOR_GREEN), + [SPECIES_VIVILLON_FANCY] = VIVILLON_SPECIES_INFO(BODY_COLOR_PINK), + [SPECIES_VIVILLON_POKE_BALL] = VIVILLON_SPECIES_INFO(BODY_COLOR_RED), + + [SPECIES_FLABEBE_YELLOW_FLOWER] = FLABEBE_SPECIES_INFO, + [SPECIES_FLABEBE_ORANGE_FLOWER] = FLABEBE_SPECIES_INFO, + [SPECIES_FLABEBE_BLUE_FLOWER] = FLABEBE_SPECIES_INFO, + [SPECIES_FLABEBE_WHITE_FLOWER] = FLABEBE_SPECIES_INFO, + + [SPECIES_FLOETTE_YELLOW_FLOWER] = FLOETTE_SPECIES_INFO, + [SPECIES_FLOETTE_ORANGE_FLOWER] = FLOETTE_SPECIES_INFO, + [SPECIES_FLOETTE_BLUE_FLOWER] = FLOETTE_SPECIES_INFO, + [SPECIES_FLOETTE_WHITE_FLOWER] = FLOETTE_SPECIES_INFO, [SPECIES_FLOETTE_ETERNAL_FLOWER] = { @@ -26187,8 +24099,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 92, .baseSpAttack = 125, .baseSpDefense = 128, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FAIRY, + .types = { TYPE_FAIRY, TYPE_FAIRY}, .catchRate = 120, .expYield = 243, .evYield_SpDefense = 2, @@ -26196,27 +24107,26 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_FLOWER_VEIL, ABILITY_NONE, ABILITY_SYMBIOSIS}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, }, - [SPECIES_FLORGES_YELLOW_FLOWER] = FLORGES_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_YELLOW_FLOWER] = FLORGES_SPECIES_INFO, + [SPECIES_FLORGES_ORANGE_FLOWER] = FLORGES_SPECIES_INFO, + [SPECIES_FLORGES_BLUE_FLOWER] = FLORGES_SPECIES_INFO, + [SPECIES_FLORGES_WHITE_FLOWER] = FLORGES_SPECIES_INFO, - [SPECIES_FURFROU_HEART_TRIM] = FURFROU_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_FURFROU_HEART_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_STAR_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_DIAMOND_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_DEBUTANTE_TRIM] = FURFROU_SPECIES_INFO(NO_FLIP), + [SPECIES_FURFROU_MATRON_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_DANDY_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_LA_REINE_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_KABUKI_TRIM] = FURFROU_SPECIES_INFO(FLIP), + [SPECIES_FURFROU_PHARAOH_TRIM] = FURFROU_SPECIES_INFO(FLIP), [SPECIES_MEOWSTIC_FEMALE] = { @@ -26226,8 +24136,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 104, .baseSpAttack = 83, .baseSpDefense = 81, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 75, .expYield = 163, .evYield_Speed = 2, @@ -26235,8 +24144,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_KEEN_EYE, ABILITY_INFILTRATOR, ABILITY_COMPETITIVE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -26255,8 +24163,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 150, #endif .baseSpDefense = 50, - .type1 = TYPE_STEEL, - .type2 = TYPE_GHOST, + .types = { TYPE_STEEL, TYPE_GHOST}, .catchRate = 45, .expYield = 234, .evYield_Defense = 2, @@ -26265,8 +24172,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 20, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_MINERAL, - .eggGroup2 = EGG_GROUP_MINERAL, + .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL}, .abilities = {ABILITY_STANCE_CHANGE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -26280,7 +24186,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 56, .baseSpAttack = 44, .baseSpDefense = 55, - PUMKPABOO_MISC_STATS, + PUMKPABOO_MISC_INFO, }, [SPECIES_PUMPKABOO_LARGE] = @@ -26291,7 +24197,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 46, .baseSpAttack = 44, .baseSpDefense = 55, - PUMKPABOO_MISC_STATS, + PUMKPABOO_MISC_INFO, }, [SPECIES_PUMPKABOO_SUPER] = @@ -26304,7 +24210,7 @@ const struct BaseStats gBaseStats[] = .baseSpDefense = 55, .itemCommon = ITEM_MIRACLE_SEED, .itemRare = ITEM_MIRACLE_SEED, - PUMKPABOO_MISC_STATS, + PUMKPABOO_MISC_INFO, }, [SPECIES_GOURGEIST_SMALL] = @@ -26315,7 +24221,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 99, .baseSpAttack = 58, .baseSpDefense = 75, - GOURGEIST_MISC_STATS, + GOURGEIST_MISC_INFO, }, [SPECIES_GOURGEIST_LARGE] = @@ -26326,7 +24232,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 69, .baseSpAttack = 58, .baseSpDefense = 75, - GOURGEIST_MISC_STATS, + GOURGEIST_MISC_INFO, }, [SPECIES_GOURGEIST_SUPER] = @@ -26339,14 +24245,14 @@ const struct BaseStats gBaseStats[] = .baseSpDefense = 75, .itemCommon = ITEM_MIRACLE_SEED, .itemRare = ITEM_MIRACLE_SEED, - GOURGEIST_MISC_STATS, + GOURGEIST_MISC_INFO, }, - [SPECIES_XERNEAS_ACTIVE] = XERNEAS_BASE_STATS, + [SPECIES_XERNEAS_ACTIVE] = XERNEAS_SPECIES_INFO, - [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_10] = ZYGARDE_10_SPECIES_INFO(ABILITY_AURA_BREAK), + [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = ZYGARDE_50_SPECIES_INFO(ABILITY_POWER_CONSTRUCT), + [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = ZYGARDE_50_SPECIES_INFO(ABILITY_POWER_CONSTRUCT), [SPECIES_ZYGARDE_COMPLETE] = { @@ -26356,8 +24262,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 91, .baseSpDefense = 95, - .type1 = TYPE_DRAGON, - .type2 = TYPE_GROUND, + .types = { TYPE_DRAGON, TYPE_GROUND}, .catchRate = 3, .expYield = 319, .evYield_HP = 3, @@ -26365,8 +24270,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_POWER_CONSTRUCT, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, @@ -26381,8 +24285,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 80, .baseSpAttack = 170, .baseSpDefense = 130, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_DARK, + .types = { TYPE_PSYCHIC, TYPE_DARK}, .catchRate = 3, .expYield = 270, .evYield_SpAttack = 3, @@ -26390,8 +24293,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_MAGICIAN, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -26400,11 +24302,11 @@ const struct BaseStats gBaseStats[] = #endif #if P_GEN_7_POKEMON == TRUE - [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_POM_POM] = ORICORIO_SPECIES_INFO(TYPE_ELECTRIC, BODY_COLOR_YELLOW), + [SPECIES_ORICORIO_PAU] = ORICORIO_SPECIES_INFO(TYPE_PSYCHIC, BODY_COLOR_PINK), + [SPECIES_ORICORIO_SENSU] = ORICORIO_SPECIES_INFO(TYPE_GHOST, BODY_COLOR_PURPLE), - [SPECIES_ROCKRUFF_OWN_TEMPO] = ROCKRUFF_BASE_STATS(ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_NONE), + [SPECIES_ROCKRUFF_OWN_TEMPO] = ROCKRUFF_SPECIES_INFO(ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_NONE), [SPECIES_LYCANROC_MIDNIGHT] = { @@ -26414,8 +24316,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 82, .baseSpAttack = 55, .baseSpDefense = 75, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 90, .expYield = 170, .evYield_Attack = 2, @@ -26423,8 +24324,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_KEEN_EYE, ABILITY_VITAL_SPIRIT, ABILITY_NO_GUARD}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -26438,8 +24338,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 110, .baseSpAttack = 55, .baseSpDefense = 65, - .type1 = TYPE_ROCK, - .type2 = TYPE_ROCK, + .types = { TYPE_ROCK, TYPE_ROCK}, .catchRate = 90, .expYield = 170, .evYield_Attack = 2, @@ -26447,8 +24346,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroup1 = EGG_GROUP_FIELD, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD}, .abilities = {ABILITY_TOUGH_CLAWS, ABILITY_NONE}, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -26462,8 +24360,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 140, .baseSpDefense = 135, - .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .types = { TYPE_WATER, TYPE_WATER}, .catchRate = 60, .expYield = 61, .evYield_HP = 1, @@ -26471,47 +24368,46 @@ const struct BaseStats gBaseStats[] = .eggCycles = 15, .friendship = 70, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_WATER_2, - .eggGroup2 = EGG_GROUP_WATER_2, + .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2}, .abilities = {ABILITY_SCHOOLING, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .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_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_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_SILVALLY_FIGHTING] = SILVALLY_SPECIES_INFO(TYPE_FIGHTING), + [SPECIES_SILVALLY_FLYING] = SILVALLY_SPECIES_INFO(TYPE_FLYING), + [SPECIES_SILVALLY_POISON] = SILVALLY_SPECIES_INFO(TYPE_POISON), + [SPECIES_SILVALLY_GROUND] = SILVALLY_SPECIES_INFO(TYPE_GROUND), + [SPECIES_SILVALLY_ROCK] = SILVALLY_SPECIES_INFO(TYPE_ROCK), + [SPECIES_SILVALLY_BUG] = SILVALLY_SPECIES_INFO(TYPE_BUG), + [SPECIES_SILVALLY_GHOST] = SILVALLY_SPECIES_INFO(TYPE_GHOST), + [SPECIES_SILVALLY_STEEL] = SILVALLY_SPECIES_INFO(TYPE_STEEL), + [SPECIES_SILVALLY_FIRE] = SILVALLY_SPECIES_INFO(TYPE_FIRE), + [SPECIES_SILVALLY_WATER] = SILVALLY_SPECIES_INFO(TYPE_WATER), + [SPECIES_SILVALLY_GRASS] = SILVALLY_SPECIES_INFO(TYPE_GRASS), + [SPECIES_SILVALLY_ELECTRIC] = SILVALLY_SPECIES_INFO(TYPE_ELECTRIC), + [SPECIES_SILVALLY_PSYCHIC] = SILVALLY_SPECIES_INFO(TYPE_PSYCHIC), + [SPECIES_SILVALLY_ICE] = SILVALLY_SPECIES_INFO(TYPE_ICE), + [SPECIES_SILVALLY_DRAGON] = SILVALLY_SPECIES_INFO(TYPE_DRAGON), + [SPECIES_SILVALLY_DARK] = SILVALLY_SPECIES_INFO(TYPE_DARK), + [SPECIES_SILVALLY_FAIRY] = SILVALLY_SPECIES_INFO(TYPE_FAIRY), + + [SPECIES_MINIOR_METEOR_ORANGE] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_MINIOR_METEOR_YELLOW] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_MINIOR_METEOR_GREEN] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_MINIOR_METEOR_BLUE] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_MINIOR_METEOR_INDIGO] = MINIOR_METEOR_SPECIES_INFO, + [SPECIES_MINIOR_METEOR_VIOLET] = MINIOR_METEOR_SPECIES_INFO, + + [SPECIES_MINIOR_CORE_RED] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_RED), + [SPECIES_MINIOR_CORE_ORANGE] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_RED), + [SPECIES_MINIOR_CORE_YELLOW] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_YELLOW), + [SPECIES_MINIOR_CORE_GREEN] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_GREEN), + [SPECIES_MINIOR_CORE_BLUE] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_BLUE), + [SPECIES_MINIOR_CORE_INDIGO] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_BLUE), + [SPECIES_MINIOR_CORE_VIOLET] = MINIOR_CORE_SPECIES_INFO(BODY_COLOR_PURPLE), + + [SPECIES_MIMIKYU_BUSTED] = MIMIKYU_SPECIES_INFO, [SPECIES_NECROZMA_DUSK_MANE] = { @@ -26521,8 +24417,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 77, .baseSpAttack = 113, .baseSpDefense = 109, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_STEEL, + .types = { TYPE_PSYCHIC, TYPE_STEEL}, .catchRate = 255, .expYield = 306, .evYield_Attack = 3, @@ -26530,8 +24425,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, @@ -26546,8 +24440,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 77, .baseSpAttack = 157, .baseSpDefense = 127, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_GHOST, + .types = { TYPE_PSYCHIC, TYPE_GHOST}, .catchRate = 255, .expYield = 306, .evYield_SpAttack = 3, @@ -26555,8 +24448,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRISM_ARMOR, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -26571,8 +24463,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 129, .baseSpAttack = 167, .baseSpDefense = 97, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_DRAGON, + .types = { TYPE_PSYCHIC, TYPE_DRAGON}, .catchRate = 255, .expYield = 339, .evYield_Attack = 1, @@ -26582,35 +24473,34 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_NEUROFORCE, ABILITY_NONE}, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_MAGEARNA_ORIGINAL_COLOR] = MAGEARNA_BASE_STATS(BODY_COLOR_RED), + [SPECIES_MAGEARNA_ORIGINAL_COLOR] = MAGEARNA_SPECIES_INFO(BODY_COLOR_RED), #endif #if P_GEN_8_POKEMON == TRUE - [SPECIES_CRAMORANT_GULPING] = CRAMORANT_BASE_STATS, - [SPECIES_CRAMORANT_GORGING] = CRAMORANT_BASE_STATS, + [SPECIES_CRAMORANT_GULPING] = CRAMORANT_SPECIES_INFO, + [SPECIES_CRAMORANT_GORGING] = CRAMORANT_SPECIES_INFO, - [SPECIES_TOXTRICITY_LOW_KEY] = TOXTRICITY_BASE_STATS(ABILITY_MINUS), + [SPECIES_TOXTRICITY_LOW_KEY] = TOXTRICITY_SPECIES_INFO(ABILITY_MINUS), - [SPECIES_SINISTEA_ANTIQUE] = SINISTEA_BASE_STATS, + [SPECIES_SINISTEA_ANTIQUE] = SINISTEA_SPECIES_INFO, - [SPECIES_POLTEAGEIST_ANTIQUE] = POLTEAGEIST_BASE_STATS, + [SPECIES_POLTEAGEIST_ANTIQUE] = POLTEAGEIST_SPECIES_INFO, - [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_ALCREMIE_RUBY_CREAM] = ALCREMIE_SPECIES_INFO(BODY_COLOR_PINK), + [SPECIES_ALCREMIE_MATCHA_CREAM] = ALCREMIE_SPECIES_INFO(BODY_COLOR_GREEN), + [SPECIES_ALCREMIE_MINT_CREAM] = ALCREMIE_SPECIES_INFO(BODY_COLOR_BLUE), + [SPECIES_ALCREMIE_LEMON_CREAM] = ALCREMIE_SPECIES_INFO(BODY_COLOR_YELLOW), + [SPECIES_ALCREMIE_SALTED_CREAM] = ALCREMIE_SPECIES_INFO(BODY_COLOR_WHITE), + [SPECIES_ALCREMIE_RUBY_SWIRL] = ALCREMIE_SPECIES_INFO(BODY_COLOR_YELLOW), + [SPECIES_ALCREMIE_CARAMEL_SWIRL] = ALCREMIE_SPECIES_INFO(BODY_COLOR_BROWN), + [SPECIES_ALCREMIE_RAINBOW_SWIRL] = ALCREMIE_SPECIES_INFO(BODY_COLOR_YELLOW), [SPECIES_EISCUE_NOICE_FACE] = { @@ -26620,8 +24510,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 65, .baseSpDefense = 50, - .type1 = TYPE_ICE, - .type2 = TYPE_ICE, + .types = { TYPE_ICE, TYPE_ICE}, .catchRate = 60, .expYield = 165, .evYield_Defense = 2, @@ -26629,8 +24518,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 25, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_WATER_1, - .eggGroup2 = EGG_GROUP_FIELD, + .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD}, .abilities = {ABILITY_ICE_FACE, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -26644,8 +24532,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 85, .baseSpAttack = 95, .baseSpDefense = 105, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_NORMAL, + .types = { TYPE_PSYCHIC, TYPE_NORMAL}, .catchRate = 30, .expYield = 166, .evYield_SpDefense = 2, @@ -26653,14 +24540,13 @@ const struct BaseStats gBaseStats[] = .eggCycles = 40, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroup1 = EGG_GROUP_FAIRY, - .eggGroup2 = EGG_GROUP_FAIRY, + .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY}, .abilities = {ABILITY_OWN_TEMPO, ABILITY_SYNCHRONIZE, ABILITY_PSYCHIC_SURGE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, }, - [SPECIES_MORPEKO_HANGRY] = MORPEKO_BASE_STATS, + [SPECIES_MORPEKO_HANGRY] = MORPEKO_SPECIES_INFO, [SPECIES_ZACIAN_CROWNED_SWORD] = { @@ -26670,8 +24556,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 148, .baseSpAttack = 80, .baseSpDefense = 115, - .type1 = TYPE_FAIRY, - .type2 = TYPE_STEEL, + .types = { TYPE_FAIRY, TYPE_STEEL}, .catchRate = 10, .expYield = 360, .evYield_Speed = 3, @@ -26679,8 +24564,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_INTREPID_SWORD, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -26695,8 +24579,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 128, .baseSpAttack = 80, .baseSpDefense = 145, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_STEEL, + .types = { TYPE_FIGHTING, TYPE_STEEL}, .catchRate = 10, .expYield = 360, .evYield_Speed = 3, @@ -26704,8 +24587,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_DAUNTLESS_SHIELD, ABILITY_NONE}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -26720,8 +24602,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 130, .baseSpAttack = 125, .baseSpDefense = 250, - .type1 = TYPE_POISON, - .type2 = TYPE_DRAGON, + .types = { TYPE_POISON, TYPE_DRAGON}, .catchRate = 255, .expYield = 563, .evYield_HP = 3, @@ -26729,8 +24610,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -26745,8 +24625,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 97, .baseSpAttack = 63, .baseSpDefense = 60, - .type1 = TYPE_FIGHTING, - .type2 = TYPE_WATER, + .types = { TYPE_FIGHTING, TYPE_WATER}, .catchRate = 3, .expYield = 275, .evYield_Attack = 3, @@ -26754,15 +24633,14 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 70, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_UNSEEN_FIST, ABILITY_NONE}, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, .flags = SPECIES_FLAG_LEGENDARY, }, - [SPECIES_ZARUDE_DADA] = ZARUDE_BASE_STATS, + [SPECIES_ZARUDE_DADA] = ZARUDE_SPECIES_INFO, [SPECIES_CALYREX_ICE_RIDER] = { @@ -26772,8 +24650,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 50, .baseSpAttack = 85, .baseSpDefense = 130, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_ICE, + .types = { TYPE_PSYCHIC, TYPE_ICE}, .catchRate = 3, .expYield = 340, .evYield_Attack = 3, @@ -26781,8 +24658,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_AS_ONE_ICE_RIDER, ABILITY_NONE}, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -26797,8 +24673,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 150, .baseSpAttack = 165, .baseSpDefense = 100, - .type1 = TYPE_PSYCHIC, - .type2 = TYPE_GHOST, + .types = { TYPE_PSYCHIC, TYPE_GHOST}, .catchRate = 3, .expYield = 340, .evYield_SpAttack = 3, @@ -26806,8 +24681,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_AS_ONE_SHADOW_RIDER, ABILITY_NONE}, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -26822,8 +24696,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 46, .baseSpAttack = 135, .baseSpDefense = 100, - .type1 = TYPE_FAIRY, - .type2 = TYPE_FLYING, + .types = { TYPE_FAIRY, TYPE_FLYING}, .catchRate = 3, .expYield = 270, .evYield_SpAttack = 3, @@ -26831,8 +24704,7 @@ const struct BaseStats gBaseStats[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroup1 = EGG_GROUP_UNDISCOVERED, - .eggGroup2 = EGG_GROUP_UNDISCOVERED, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_OVERCOAT, ABILITY_NONE}, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index 398cf287545d..ebe0c316f84a 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -1348,8 +1348,8 @@ const struct CompressedSpriteSheet gMonBackPicTableFemale[] = 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), + SPECIES_SPRITE(HIPPOPOTAS, gMonBackPic_Hippopotas), + SPECIES_SPRITE(HIPPOWDON, gMonBackPic_Hippowdon), #endif #if P_GEN_5_POKEMON == TRUE SPECIES_SPRITE(UNFEZANT, gMonBackPic_UnfezantF), diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h index b152a0d6d9ec..b493b4357300 100644 --- a/src/data/pokemon_graphics/front_pic_anims.h +++ b/src/data/pokemon_graphics/front_pic_anims.h @@ -1,4 +1,4 @@ -static const union AnimCmd sAnim_NONE_1[] = +static const union AnimCmd sAnim_None_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -6,7 +6,7 @@ ANIMCMD_END, }; -static const union AnimCmd sAnim_BULBASAUR_1[] = +static const union AnimCmd sAnim_Bulbasaur_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -14,7 +14,7 @@ static const union AnimCmd sAnim_BULBASAUR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_IVYSAUR_1[] = +static const union AnimCmd sAnim_Ivysaur_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -22,7 +22,7 @@ static const union AnimCmd sAnim_IVYSAUR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VENUSAUR_1[] = +static const union AnimCmd sAnim_Venusaur_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -30,7 +30,7 @@ static const union AnimCmd sAnim_VENUSAUR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHARMANDER_1[] = +static const union AnimCmd sAnim_Charmander_1[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(1, 46), @@ -38,7 +38,7 @@ static const union AnimCmd sAnim_CHARMANDER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHARMELEON_1[] = +static const union AnimCmd sAnim_Charmeleon_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -46,14 +46,14 @@ static const union AnimCmd sAnim_CHARMELEON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHARIZARD_1[] = +static const union AnimCmd sAnim_Charizard_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_SQUIRTLE_1[] = +static const union AnimCmd sAnim_Squirtle_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 50), @@ -61,7 +61,7 @@ static const union AnimCmd sAnim_SQUIRTLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WARTORTLE_1[] = +static const union AnimCmd sAnim_Wartortle_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 20), @@ -69,7 +69,7 @@ static const union AnimCmd sAnim_WARTORTLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BLASTOISE_1[] = +static const union AnimCmd sAnim_Blastoise_1[] = { ANIMCMD_FRAME(0, 50), ANIMCMD_FRAME(1, 25), @@ -79,7 +79,7 @@ static const union AnimCmd sAnim_BLASTOISE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CATERPIE_1[] = +static const union AnimCmd sAnim_Caterpie_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -92,14 +92,14 @@ static const union AnimCmd sAnim_CATERPIE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_METAPOD_1[] = +static const union AnimCmd sAnim_Metapod_1[] = { ANIMCMD_FRAME(1, 45), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_BUTTERFREE_1[] = +static const union AnimCmd sAnim_Butterfree_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -117,7 +117,7 @@ static const union AnimCmd sAnim_BUTTERFREE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WEEDLE_1[] = +static const union AnimCmd sAnim_Weedle_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 15), @@ -129,7 +129,7 @@ static const union AnimCmd sAnim_WEEDLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KAKUNA_1[] = +static const union AnimCmd sAnim_Kakuna_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -145,7 +145,7 @@ static const union AnimCmd sAnim_KAKUNA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BEEDRILL_1[] = +static const union AnimCmd sAnim_Beedrill_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 35), @@ -155,7 +155,7 @@ static const union AnimCmd sAnim_BEEDRILL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PIDGEY_1[] = +static const union AnimCmd sAnim_Pidgey_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -172,7 +172,7 @@ static const union AnimCmd sAnim_PIDGEY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PIDGEOTTO_1[] = +static const union AnimCmd sAnim_Pidgeotto_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 10), @@ -182,7 +182,7 @@ static const union AnimCmd sAnim_PIDGEOTTO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PIDGEOT_1[] = +static const union AnimCmd sAnim_Pidgeot_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 10), @@ -191,8 +191,7 @@ static const union AnimCmd sAnim_PIDGEOT_1[] = ANIMCMD_END, }; - -static const union AnimCmd sAnim_RATTATA_1[] = +static const union AnimCmd sAnim_Rattata_1[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_FRAME(1, 50), @@ -201,7 +200,7 @@ static const union AnimCmd sAnim_RATTATA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RATICATE_1[] = +static const union AnimCmd sAnim_Raticate_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -218,7 +217,7 @@ static const union AnimCmd sAnim_RATICATE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SPEAROW_1[] = +static const union AnimCmd sAnim_Spearow_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -239,7 +238,7 @@ static const union AnimCmd sAnim_SPEAROW_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FEAROW_1[] = +static const union AnimCmd sAnim_Fearow_1[] = { ANIMCMD_FRAME(1, 7), ANIMCMD_FRAME(0, 7), @@ -252,7 +251,7 @@ static const union AnimCmd sAnim_FEAROW_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_EKANS_1[] = +static const union AnimCmd sAnim_Ekans_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -263,7 +262,7 @@ static const union AnimCmd sAnim_EKANS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ARBOK_1[] = +static const union AnimCmd sAnim_Arbok_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 35), @@ -271,7 +270,7 @@ static const union AnimCmd sAnim_ARBOK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_1[] = +static const union AnimCmd sAnim_Pikachu_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -281,7 +280,7 @@ static const union AnimCmd sAnim_PIKACHU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_2[] = +static const union AnimCmd sAnim_Pikachu_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -290,7 +289,7 @@ static const union AnimCmd sAnim_PIKACHU_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RAICHU_1[] = +static const union AnimCmd sAnim_Raichu_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -300,7 +299,7 @@ static const union AnimCmd sAnim_RAICHU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RAICHU_2[] = +static const union AnimCmd sAnim_Raichu_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -309,7 +308,7 @@ static const union AnimCmd sAnim_RAICHU_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SANDSHREW_1[] = +static const union AnimCmd sAnim_Sandshrew_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -319,7 +318,7 @@ static const union AnimCmd sAnim_SANDSHREW_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SANDSHREW_2[] = +static const union AnimCmd sAnim_Sandshrew_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -328,7 +327,7 @@ static const union AnimCmd sAnim_SANDSHREW_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SANDSLASH_1[] = +static const union AnimCmd sAnim_Sandslash_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -338,7 +337,7 @@ static const union AnimCmd sAnim_SANDSLASH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SANDSLASH_2[] = +static const union AnimCmd sAnim_Sandslash_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -347,7 +346,7 @@ static const union AnimCmd sAnim_SANDSLASH_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NIDORAN_F_1[] = +static const union AnimCmd sAnim_NidoranF_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -361,21 +360,21 @@ static const union AnimCmd sAnim_NIDORAN_F_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NIDORINA_1[] = +static const union AnimCmd sAnim_Nidorina_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_NIDOQUEEN_1[] = +static const union AnimCmd sAnim_Nidoqueen_1[] = { ANIMCMD_FRAME(1, 45), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_NIDORAN_M_1[] = +static const union AnimCmd sAnim_NidoranM_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -383,7 +382,7 @@ static const union AnimCmd sAnim_NIDORAN_M_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NIDORINO_1[] = +static const union AnimCmd sAnim_Nidorino_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -391,7 +390,7 @@ static const union AnimCmd sAnim_NIDORINO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NIDOKING_1[] = +static const union AnimCmd sAnim_Nidoking_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 15), @@ -400,7 +399,7 @@ static const union AnimCmd sAnim_NIDOKING_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CLEFAIRY_1[] = +static const union AnimCmd sAnim_Clefairy_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -408,7 +407,7 @@ static const union AnimCmd sAnim_CLEFAIRY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CLEFABLE_1[] = +static const union AnimCmd sAnim_Clefable_1[] = { ANIMCMD_FRAME(1, 27), ANIMCMD_FRAME(0, 27), @@ -419,7 +418,7 @@ static const union AnimCmd sAnim_CLEFABLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VULPIX_1[] = +static const union AnimCmd sAnim_Vulpix_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -429,7 +428,7 @@ static const union AnimCmd sAnim_VULPIX_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VULPIX_2[] = +static const union AnimCmd sAnim_Vulpix_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -438,7 +437,7 @@ static const union AnimCmd sAnim_VULPIX_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NINETALES_1[] = +static const union AnimCmd sAnim_Ninetales_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -448,7 +447,7 @@ static const union AnimCmd sAnim_NINETALES_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NINETALES_2[] = +static const union AnimCmd sAnim_Ninetales_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -457,7 +456,7 @@ static const union AnimCmd sAnim_NINETALES_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_JIGGLYPUFF_1[] = +static const union AnimCmd sAnim_Jigglypuff_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -467,7 +466,7 @@ static const union AnimCmd sAnim_JIGGLYPUFF_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_JIGGLYPUFF_2[] = +static const union AnimCmd sAnim_Jigglypuff_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -476,7 +475,7 @@ static const union AnimCmd sAnim_JIGGLYPUFF_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WIGGLYTUFF_1[] = +static const union AnimCmd sAnim_Wigglytuff_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -486,7 +485,7 @@ static const union AnimCmd sAnim_WIGGLYTUFF_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WIGGLYTUFF_2[] = +static const union AnimCmd sAnim_Wigglytuff_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -495,7 +494,7 @@ static const union AnimCmd sAnim_WIGGLYTUFF_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ZUBAT_1[] = +static const union AnimCmd sAnim_Zubat_1[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_FRAME(1, 3), @@ -513,7 +512,7 @@ static const union AnimCmd sAnim_ZUBAT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOLBAT_1[] = +static const union AnimCmd sAnim_Golbat_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -537,7 +536,7 @@ static const union AnimCmd sAnim_GOLBAT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ODDISH_1[] = +static const union AnimCmd sAnim_Oddish_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 11), @@ -549,7 +548,7 @@ static const union AnimCmd sAnim_ODDISH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GLOOM_1[] = +static const union AnimCmd sAnim_Gloom_1[] = { ANIMCMD_FRAME(0, 21), ANIMCMD_FRAME(1, 45), @@ -558,7 +557,7 @@ static const union AnimCmd sAnim_GLOOM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VILEPLUME_1[] = +static const union AnimCmd sAnim_Vileplume_1[] = { ANIMCMD_FRAME(0, 50), ANIMCMD_FRAME(1, 25), @@ -568,7 +567,7 @@ static const union AnimCmd sAnim_VILEPLUME_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PARAS_1[] = +static const union AnimCmd sAnim_Paras_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -589,7 +588,7 @@ static const union AnimCmd sAnim_PARAS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PARASECT_1[] = +static const union AnimCmd sAnim_Parasect_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -600,7 +599,7 @@ static const union AnimCmd sAnim_PARASECT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VENONAT_1[] = +static const union AnimCmd sAnim_Venonat_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -611,7 +610,7 @@ static const union AnimCmd sAnim_VENONAT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VENOMOTH_1[] = +static const union AnimCmd sAnim_Venomoth_1[] = { ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(0, 4), @@ -638,7 +637,7 @@ static const union AnimCmd sAnim_VENOMOTH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DIGLETT_1[] = +static const union AnimCmd sAnim_Diglett_1[] = { ANIMCMD_FRAME(0, 25), ANIMCMD_FRAME(1, 35), @@ -646,7 +645,7 @@ static const union AnimCmd sAnim_DIGLETT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DUGTRIO_1[] = +static const union AnimCmd sAnim_Dugtrio_1[] = { ANIMCMD_FRAME(1, 35), ANIMCMD_FRAME(0, 10), @@ -661,7 +660,7 @@ static const union AnimCmd sAnim_DUGTRIO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MEOWTH_1[] = +static const union AnimCmd sAnim_Meowth_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -672,14 +671,14 @@ static const union AnimCmd sAnim_MEOWTH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PERSIAN_1[] = +static const union AnimCmd sAnim_Persian_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_PSYDUCK_1[] = +static const union AnimCmd sAnim_Psyduck_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -689,7 +688,7 @@ static const union AnimCmd sAnim_PSYDUCK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PSYDUCK_2[] = +static const union AnimCmd sAnim_Psyduck_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -698,7 +697,7 @@ static const union AnimCmd sAnim_PSYDUCK_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOLDUCK_1[] = +static const union AnimCmd sAnim_Golduck_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -708,7 +707,7 @@ static const union AnimCmd sAnim_GOLDUCK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOLDUCK_2[] = +static const union AnimCmd sAnim_Golduck_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -717,7 +716,7 @@ static const union AnimCmd sAnim_GOLDUCK_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MANKEY_1[] = +static const union AnimCmd sAnim_Mankey_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -728,7 +727,7 @@ static const union AnimCmd sAnim_MANKEY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PRIMEAPE_1[] = +static const union AnimCmd sAnim_Primeape_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -739,7 +738,7 @@ static const union AnimCmd sAnim_PRIMEAPE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GROWLITHE_1[] = +static const union AnimCmd sAnim_Growlithe_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -750,7 +749,7 @@ static const union AnimCmd sAnim_GROWLITHE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ARCANINE_1[] = +static const union AnimCmd sAnim_Arcanine_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -758,9 +757,10 @@ static const union AnimCmd sAnim_ARCANINE_1[] = ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 10), - ANIMCMD_END,}; + ANIMCMD_END, +}; -static const union AnimCmd sAnim_POLIWAG_1[] = +static const union AnimCmd sAnim_Poliwag_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -768,7 +768,7 @@ static const union AnimCmd sAnim_POLIWAG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_POLIWHIRL_1[] = +static const union AnimCmd sAnim_Poliwhirl_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -778,14 +778,14 @@ static const union AnimCmd sAnim_POLIWHIRL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_POLIWRATH_1[] = +static const union AnimCmd sAnim_Poliwrath_1[] = { ANIMCMD_FRAME(1, 45), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_ABRA_1[] = +static const union AnimCmd sAnim_Abra_1[] = { ANIMCMD_FRAME(0, 7), ANIMCMD_FRAME(1, 21), @@ -795,7 +795,7 @@ static const union AnimCmd sAnim_ABRA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KADABRA_1[] = +static const union AnimCmd sAnim_Kadabra_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -803,7 +803,7 @@ static const union AnimCmd sAnim_KADABRA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ALAKAZAM_1[] = +static const union AnimCmd sAnim_Alakazam_1[] = { ANIMCMD_FRAME(0, 9), ANIMCMD_FRAME(1, 54), @@ -811,7 +811,7 @@ static const union AnimCmd sAnim_ALAKAZAM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MACHOP_1[] = +static const union AnimCmd sAnim_Machop_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -823,7 +823,7 @@ static const union AnimCmd sAnim_MACHOP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MACHOKE_1[] = +static const union AnimCmd sAnim_Machoke_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 44), @@ -831,7 +831,7 @@ static const union AnimCmd sAnim_MACHOKE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MACHAMP_1[] = +static const union AnimCmd sAnim_Machamp_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 11), @@ -843,7 +843,7 @@ static const union AnimCmd sAnim_MACHAMP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BELLSPROUT_1[] = +static const union AnimCmd sAnim_Bellsprout_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 25), @@ -851,7 +851,7 @@ static const union AnimCmd sAnim_BELLSPROUT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WEEPINBELL_1[] = +static const union AnimCmd sAnim_Weepinbell_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 25), @@ -863,7 +863,7 @@ static const union AnimCmd sAnim_WEEPINBELL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VICTREEBEL_1[] = +static const union AnimCmd sAnim_Victreebel_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -875,7 +875,7 @@ static const union AnimCmd sAnim_VICTREEBEL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TENTACOOL_1[] = +static const union AnimCmd sAnim_Tentacool_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 15), @@ -885,7 +885,7 @@ static const union AnimCmd sAnim_TENTACOOL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TENTACRUEL_1[] = +static const union AnimCmd sAnim_Tentacruel_1[] = { ANIMCMD_FRAME(0, 19), ANIMCMD_FRAME(1, 35), @@ -895,7 +895,7 @@ static const union AnimCmd sAnim_TENTACRUEL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GEODUDE_1[] = +static const union AnimCmd sAnim_Geodude_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 36), @@ -903,7 +903,7 @@ static const union AnimCmd sAnim_GEODUDE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GRAVELER_1[] = +static const union AnimCmd sAnim_Graveler_1[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), @@ -913,7 +913,7 @@ static const union AnimCmd sAnim_GRAVELER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOLEM_1[] = +static const union AnimCmd sAnim_Golem_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 31), @@ -923,14 +923,14 @@ static const union AnimCmd sAnim_GOLEM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PONYTA_1[] = +static const union AnimCmd sAnim_Ponyta_1[] = { ANIMCMD_FRAME(1, 45), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_RAPIDASH_1[] = +static const union AnimCmd sAnim_Rapidash_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 40), @@ -938,7 +938,7 @@ static const union AnimCmd sAnim_RAPIDASH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SLOWPOKE_1[] = +static const union AnimCmd sAnim_Slowpoke_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 50), @@ -946,7 +946,7 @@ static const union AnimCmd sAnim_SLOWPOKE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SLOWBRO_1[] = +static const union AnimCmd sAnim_Slowbro_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 45), @@ -954,7 +954,7 @@ static const union AnimCmd sAnim_SLOWBRO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAGNEMITE_1[] = +static const union AnimCmd sAnim_Magnemite_1[] = { ANIMCMD_FRAME(0, 28), ANIMCMD_FRAME(1, 28), @@ -964,7 +964,7 @@ static const union AnimCmd sAnim_MAGNEMITE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAGNETON_1[] = +static const union AnimCmd sAnim_Magneton_1[] = { ANIMCMD_FRAME(0, 14), ANIMCMD_FRAME(1, 14), @@ -976,7 +976,7 @@ static const union AnimCmd sAnim_MAGNETON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FARFETCHD_1[] = +static const union AnimCmd sAnim_Farfetchd_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -993,7 +993,7 @@ static const union AnimCmd sAnim_FARFETCHD_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DODUO_1[] = +static const union AnimCmd sAnim_Doduo_1[] = { ANIMCMD_FRAME(0, 18), ANIMCMD_FRAME(1, 18), @@ -1003,7 +1003,7 @@ static const union AnimCmd sAnim_DODUO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DODRIO_1[] = +static const union AnimCmd sAnim_Dodrio_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 12), @@ -1017,14 +1017,14 @@ static const union AnimCmd sAnim_DODRIO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SEEL_1[] = +static const union AnimCmd sAnim_Seel_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_DEWGONG_1[] = +static const union AnimCmd sAnim_Dewgong_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -1032,7 +1032,7 @@ static const union AnimCmd sAnim_DEWGONG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GRIMER_1[] = +static const union AnimCmd sAnim_Grimer_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -1042,7 +1042,7 @@ static const union AnimCmd sAnim_GRIMER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GRIMER_2[] = +static const union AnimCmd sAnim_Grimer_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -1051,7 +1051,7 @@ static const union AnimCmd sAnim_GRIMER_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MUK_1[] = +static const union AnimCmd sAnim_Muk_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -1061,7 +1061,7 @@ static const union AnimCmd sAnim_MUK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MUK_2[] = +static const union AnimCmd sAnim_Muk_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -1070,7 +1070,7 @@ static const union AnimCmd sAnim_MUK_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SHELLDER_1[] = +static const union AnimCmd sAnim_Shellder_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -1079,7 +1079,7 @@ static const union AnimCmd sAnim_SHELLDER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CLOYSTER_1[] = +static const union AnimCmd sAnim_Cloyster_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -1100,7 +1100,7 @@ static const union AnimCmd sAnim_CLOYSTER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GASTLY_1[] = +static const union AnimCmd sAnim_Gastly_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 30), @@ -1108,7 +1108,7 @@ static const union AnimCmd sAnim_GASTLY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HAUNTER_1[] = +static const union AnimCmd sAnim_Haunter_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 15), @@ -1118,7 +1118,7 @@ static const union AnimCmd sAnim_HAUNTER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GENGAR_1[] = +static const union AnimCmd sAnim_Gengar_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 40), @@ -1126,7 +1126,7 @@ static const union AnimCmd sAnim_GENGAR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ONIX_1[] = +static const union AnimCmd sAnim_Onix_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 30), @@ -1134,7 +1134,7 @@ static const union AnimCmd sAnim_ONIX_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DROWZEE_1[] = +static const union AnimCmd sAnim_Drowzee_1[] = { ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(0, 12), @@ -1145,7 +1145,7 @@ static const union AnimCmd sAnim_DROWZEE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HYPNO_1[] = +static const union AnimCmd sAnim_Hypno_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -1157,7 +1157,7 @@ static const union AnimCmd sAnim_HYPNO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KRABBY_1[] = +static const union AnimCmd sAnim_Krabby_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -1168,7 +1168,7 @@ static const union AnimCmd sAnim_KRABBY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KINGLER_1[] = +static const union AnimCmd sAnim_Kingler_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 15), @@ -1182,7 +1182,7 @@ static const union AnimCmd sAnim_KINGLER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VOLTORB_1[] = +static const union AnimCmd sAnim_Voltorb_1[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 25), @@ -1192,7 +1192,7 @@ static const union AnimCmd sAnim_VOLTORB_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ELECTRODE_1[] = +static const union AnimCmd sAnim_Electrode_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 30), @@ -1202,7 +1202,7 @@ static const union AnimCmd sAnim_ELECTRODE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_EXEGGCUTE_1[] = +static const union AnimCmd sAnim_Exeggcute_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -1216,14 +1216,14 @@ static const union AnimCmd sAnim_EXEGGCUTE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_EXEGGUTOR_1[] = +static const union AnimCmd sAnim_Exeggutor_1[] = { ANIMCMD_FRAME(1, 35), ANIMCMD_FRAME(0, 10), - ANIMCMD_END,}; - + ANIMCMD_END, +}; -static const union AnimCmd sAnim_CUBONE_1[] = +static const union AnimCmd sAnim_Cubone_1[] = { ANIMCMD_FRAME(1, 14), ANIMCMD_FRAME(0, 14), @@ -1234,7 +1234,7 @@ static const union AnimCmd sAnim_CUBONE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAROWAK_1[] = +static const union AnimCmd sAnim_Marowak_1[] = { ANIMCMD_FRAME(1, 14), ANIMCMD_FRAME(0, 14), @@ -1245,14 +1245,14 @@ static const union AnimCmd sAnim_MAROWAK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HITMONLEE_1[] = +static const union AnimCmd sAnim_Hitmonlee_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_HITMONCHAN_1[] = +static const union AnimCmd sAnim_Hitmonchan_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -1265,7 +1265,7 @@ static const union AnimCmd sAnim_HITMONCHAN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LICKITUNG_1[] = +static const union AnimCmd sAnim_Lickitung_1[] = { ANIMCMD_FRAME(0, 28), ANIMCMD_FRAME(1, 32), @@ -1273,7 +1273,7 @@ static const union AnimCmd sAnim_LICKITUNG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KOFFING_1[] = +static const union AnimCmd sAnim_Koffing_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -1283,7 +1283,7 @@ static const union AnimCmd sAnim_KOFFING_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KOFFING_2[] = +static const union AnimCmd sAnim_Koffing_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -1292,7 +1292,7 @@ static const union AnimCmd sAnim_KOFFING_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WEEZING_1[] = +static const union AnimCmd sAnim_Weezing_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -1302,7 +1302,7 @@ static const union AnimCmd sAnim_WEEZING_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WEEZING_2[] = +static const union AnimCmd sAnim_Weezing_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -1311,7 +1311,7 @@ static const union AnimCmd sAnim_WEEZING_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RHYHORN_1[] = +static const union AnimCmd sAnim_Rhyhorn_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -1321,7 +1321,7 @@ static const union AnimCmd sAnim_RHYHORN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RHYHORN_2[] = +static const union AnimCmd sAnim_Rhyhorn_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -1330,7 +1330,7 @@ static const union AnimCmd sAnim_RHYHORN_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RHYDON_1[] = +static const union AnimCmd sAnim_Rhydon_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -1340,7 +1340,7 @@ static const union AnimCmd sAnim_RHYDON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RHYDON_2[] = +static const union AnimCmd sAnim_Rhydon_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -1349,7 +1349,7 @@ static const union AnimCmd sAnim_RHYDON_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHANSEY_1[] = +static const union AnimCmd sAnim_Chansey_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -1357,7 +1357,7 @@ static const union AnimCmd sAnim_CHANSEY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TANGELA_1[] = +static const union AnimCmd sAnim_Tangela_1[] = { ANIMCMD_FRAME(1, 9), ANIMCMD_FRAME(0, 9), @@ -1372,7 +1372,7 @@ static const union AnimCmd sAnim_TANGELA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KANGASKHAN_1[] = +static const union AnimCmd sAnim_Kangaskhan_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -1381,7 +1381,7 @@ static const union AnimCmd sAnim_KANGASKHAN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HORSEA_1[] = +static const union AnimCmd sAnim_Horsea_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -1391,7 +1391,7 @@ static const union AnimCmd sAnim_HORSEA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HORSEA_2[] = +static const union AnimCmd sAnim_Horsea_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -1400,7 +1400,7 @@ static const union AnimCmd sAnim_HORSEA_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SEADRA_1[] = +static const union AnimCmd sAnim_Seadra_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -1410,7 +1410,7 @@ static const union AnimCmd sAnim_SEADRA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SEADRA_2[] = +static const union AnimCmd sAnim_Seadra_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -1419,7 +1419,7 @@ static const union AnimCmd sAnim_SEADRA_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOLDEEN_1[] = +static const union AnimCmd sAnim_Goldeen_1[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), @@ -1433,7 +1433,7 @@ static const union AnimCmd sAnim_GOLDEEN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SEAKING_1[] = +static const union AnimCmd sAnim_Seaking_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 20), @@ -1443,7 +1443,7 @@ static const union AnimCmd sAnim_SEAKING_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_STARYU_1[] = +static const union AnimCmd sAnim_Staryu_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -1453,7 +1453,7 @@ static const union AnimCmd sAnim_STARYU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_STARYU_2[] = +static const union AnimCmd sAnim_Staryu_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -1462,7 +1462,7 @@ static const union AnimCmd sAnim_STARYU_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_STARMIE_1[] = +static const union AnimCmd sAnim_Starmie_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -1472,7 +1472,7 @@ static const union AnimCmd sAnim_STARMIE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_STARMIE_2[] = +static const union AnimCmd sAnim_Starmie_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -1481,7 +1481,7 @@ static const union AnimCmd sAnim_STARMIE_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MR_MIME_1[] = +static const union AnimCmd sAnim_MrMime_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -1492,7 +1492,7 @@ static const union AnimCmd sAnim_MR_MIME_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SCYTHER_1[] = +static const union AnimCmd sAnim_Scyther_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -1505,7 +1505,7 @@ static const union AnimCmd sAnim_SCYTHER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_JYNX_1[] = +static const union AnimCmd sAnim_Jynx_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 10), @@ -1515,7 +1515,7 @@ static const union AnimCmd sAnim_JYNX_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ELECTABUZZ_1[] = +static const union AnimCmd sAnim_Electabuzz_1[] = { ANIMCMD_FRAME(0, 22), ANIMCMD_FRAME(1, 22), @@ -1525,14 +1525,14 @@ static const union AnimCmd sAnim_ELECTABUZZ_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAGMAR_1[] = +static const union AnimCmd sAnim_Magmar_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_PINSIR_1[] = +static const union AnimCmd sAnim_Pinsir_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -1542,7 +1542,7 @@ static const union AnimCmd sAnim_PINSIR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PINSIR_2[] = +static const union AnimCmd sAnim_Pinsir_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -1551,7 +1551,7 @@ static const union AnimCmd sAnim_PINSIR_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TAUROS_1[] = +static const union AnimCmd sAnim_Tauros_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 20), @@ -1560,7 +1560,7 @@ static const union AnimCmd sAnim_TAUROS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAGIKARP_1[] = +static const union AnimCmd sAnim_Magikarp_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), @@ -1574,7 +1574,7 @@ static const union AnimCmd sAnim_MAGIKARP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GYARADOS_1[] = +static const union AnimCmd sAnim_Gyarados_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 32), @@ -1582,14 +1582,14 @@ static const union AnimCmd sAnim_GYARADOS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LAPRAS_1[] = +static const union AnimCmd sAnim_Lapras_1[] = { ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_DITTO_1[] = +static const union AnimCmd sAnim_Ditto_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -1598,35 +1598,35 @@ static const union AnimCmd sAnim_DITTO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_EEVEE_1[] = +static const union AnimCmd sAnim_Eevee_1[] = { ANIMCMD_FRAME(1, 33), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_VAPOREON_1[] = +static const union AnimCmd sAnim_Vaporeon_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_JOLTEON_1[] = +static const union AnimCmd sAnim_Jolteon_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), ANIMCMD_END, }; -static const union AnimCmd sAnim_FLAREON_1[] = +static const union AnimCmd sAnim_Flareon_1[] = { ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 30), ANIMCMD_END, }; -static const union AnimCmd sAnim_PORYGON_1[] = +static const union AnimCmd sAnim_Porygon_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -1635,7 +1635,7 @@ static const union AnimCmd sAnim_PORYGON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_OMANYTE_1[] = +static const union AnimCmd sAnim_Omanyte_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -1648,7 +1648,7 @@ static const union AnimCmd sAnim_OMANYTE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_OMASTAR_1[] = +static const union AnimCmd sAnim_Omastar_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -1657,7 +1657,7 @@ static const union AnimCmd sAnim_OMASTAR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KABUTO_1[] = +static const union AnimCmd sAnim_Kabuto_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -1670,7 +1670,7 @@ static const union AnimCmd sAnim_KABUTO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KABUTOPS_1[] = +static const union AnimCmd sAnim_Kabutops_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -1679,7 +1679,7 @@ static const union AnimCmd sAnim_KABUTOPS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AERODACTYL_1[] = +static const union AnimCmd sAnim_Aerodactyl_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 25), @@ -1688,7 +1688,7 @@ static const union AnimCmd sAnim_AERODACTYL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SNORLAX_1[] = +static const union AnimCmd sAnim_Snorlax_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 50), @@ -1696,7 +1696,7 @@ static const union AnimCmd sAnim_SNORLAX_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ARTICUNO_1[] = +static const union AnimCmd sAnim_Articuno_1[] = { ANIMCMD_FRAME(1, 25), ANIMCMD_FRAME(0, 15), @@ -1705,7 +1705,7 @@ static const union AnimCmd sAnim_ARTICUNO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ZAPDOS_1[] = +static const union AnimCmd sAnim_Zapdos_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -1714,7 +1714,7 @@ static const union AnimCmd sAnim_ZAPDOS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MOLTRES_1[] = +static const union AnimCmd sAnim_Moltres_1[] = { ANIMCMD_FRAME(1, 3), ANIMCMD_FRAME(0, 3), @@ -1751,7 +1751,7 @@ static const union AnimCmd sAnim_MOLTRES_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DRATINI_1[] = +static const union AnimCmd sAnim_Dratini_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -1759,7 +1759,7 @@ static const union AnimCmd sAnim_DRATINI_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DRAGONAIR_1[] = +static const union AnimCmd sAnim_Dragonair_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -1768,7 +1768,7 @@ static const union AnimCmd sAnim_DRAGONAIR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DRAGONITE_1[] = +static const union AnimCmd sAnim_Dragonite_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 30), @@ -1776,14 +1776,14 @@ static const union AnimCmd sAnim_DRAGONITE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MEWTWO_1[] = +static const union AnimCmd sAnim_Mewtwo_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_MEW_1[] = +static const union AnimCmd sAnim_Mew_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 40), @@ -1791,29 +1791,29 @@ static const union AnimCmd sAnim_MEW_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHIKORITA_1[] = +static const union AnimCmd sAnim_Chikorita_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), - ANIMCMD_END,}; - + ANIMCMD_END, +}; -static const union AnimCmd sAnim_BAYLEEF_1[] = +static const union AnimCmd sAnim_Bayleef_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_MEGANIUM_1[] = +static const union AnimCmd sAnim_Meganium_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_CYNDAQUIL_1[] = +static const union AnimCmd sAnim_Cyndaquil_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -1822,21 +1822,21 @@ static const union AnimCmd sAnim_CYNDAQUIL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_QUILAVA_1[] = +static const union AnimCmd sAnim_Quilava_1[] = { ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_TYPHLOSION_1[] = +static const union AnimCmd sAnim_Typhlosion_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_TOTODILE_1[] = +static const union AnimCmd sAnim_Totodile_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -1847,14 +1847,14 @@ static const union AnimCmd sAnim_TOTODILE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CROCONAW_1[] = +static const union AnimCmd sAnim_Croconaw_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_FERALIGATR_1[] = +static const union AnimCmd sAnim_Feraligatr_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -1863,7 +1863,7 @@ static const union AnimCmd sAnim_FERALIGATR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SENTRET_1[] = +static const union AnimCmd sAnim_Sentret_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -1872,14 +1872,14 @@ static const union AnimCmd sAnim_SENTRET_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FURRET_1[] = +static const union AnimCmd sAnim_Furret_1[] = { ANIMCMD_FRAME(1, 35), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_HOOTHOOT_1[] = +static const union AnimCmd sAnim_Hoothoot_1[] = { ANIMCMD_FRAME(1, 7), ANIMCMD_FRAME(0, 7), @@ -1896,14 +1896,14 @@ static const union AnimCmd sAnim_HOOTHOOT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NOCTOWL_1[] = +static const union AnimCmd sAnim_Noctowl_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_LEDYBA_1[] = +static const union AnimCmd sAnim_Ledyba_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -1912,7 +1912,7 @@ static const union AnimCmd sAnim_LEDYBA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LEDIAN_1[] = +static const union AnimCmd sAnim_Ledian_1[] = { ANIMCMD_FRAME(1, 25), ANIMCMD_FRAME(0, 25), @@ -1921,7 +1921,7 @@ static const union AnimCmd sAnim_LEDIAN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SPINARAK_1[] = +static const union AnimCmd sAnim_Spinarak_1[] = { ANIMCMD_FRAME(1, 6), ANIMCMD_FRAME(0, 6), @@ -1934,7 +1934,7 @@ static const union AnimCmd sAnim_SPINARAK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ARIADOS_1[] = +static const union AnimCmd sAnim_Ariados_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -1943,7 +1943,7 @@ static const union AnimCmd sAnim_ARIADOS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CROBAT_1[] = +static const union AnimCmd sAnim_Crobat_1[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(1, 2), @@ -1965,7 +1965,7 @@ static const union AnimCmd sAnim_CROBAT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHINCHOU_1[] = +static const union AnimCmd sAnim_Chinchou_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -1975,7 +1975,7 @@ static const union AnimCmd sAnim_CHINCHOU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHINCHOU_2[] = +static const union AnimCmd sAnim_Chinchou_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -1984,7 +1984,7 @@ static const union AnimCmd sAnim_CHINCHOU_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LANTURN_1[] = +static const union AnimCmd sAnim_Lanturn_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -1994,7 +1994,7 @@ static const union AnimCmd sAnim_LANTURN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LANTURN_2[] = +static const union AnimCmd sAnim_Lanturn_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -2003,7 +2003,7 @@ static const union AnimCmd sAnim_LANTURN_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PICHU_1[] = +static const union AnimCmd sAnim_Pichu_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -2013,7 +2013,7 @@ static const union AnimCmd sAnim_PICHU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PICHU_2[] = +static const union AnimCmd sAnim_Pichu_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -2022,7 +2022,7 @@ static const union AnimCmd sAnim_PICHU_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CLEFFA_1[] = +static const union AnimCmd sAnim_Cleffa_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -2031,7 +2031,7 @@ static const union AnimCmd sAnim_CLEFFA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_IGGLYBUFF_1[] = +static const union AnimCmd sAnim_Igglybuff_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -2041,7 +2041,7 @@ static const union AnimCmd sAnim_IGGLYBUFF_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_IGGLYBUFF_2[] = +static const union AnimCmd sAnim_Igglybuff_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -2050,7 +2050,7 @@ static const union AnimCmd sAnim_IGGLYBUFF_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TOGEPI_1[] = +static const union AnimCmd sAnim_Togepi_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 50), @@ -2058,7 +2058,7 @@ static const union AnimCmd sAnim_TOGEPI_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TOGETIC_1[] = +static const union AnimCmd sAnim_Togetic_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -2066,7 +2066,7 @@ static const union AnimCmd sAnim_TOGETIC_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NATU_1[] = +static const union AnimCmd sAnim_Natu_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -2076,7 +2076,7 @@ static const union AnimCmd sAnim_NATU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NATU_2[] = +static const union AnimCmd sAnim_Natu_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -2085,7 +2085,7 @@ static const union AnimCmd sAnim_NATU_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_XATU_1[] = +static const union AnimCmd sAnim_Xatu_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 45), @@ -2097,7 +2097,7 @@ static const union AnimCmd sAnim_XATU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_XATU_2[] = +static const union AnimCmd sAnim_Xatu_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -2106,7 +2106,7 @@ static const union AnimCmd sAnim_XATU_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAREEP_1[] = +static const union AnimCmd sAnim_Mareep_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -2117,7 +2117,7 @@ static const union AnimCmd sAnim_MAREEP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FLAAFFY_1[] = +static const union AnimCmd sAnim_Flaaffy_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -2127,7 +2127,7 @@ static const union AnimCmd sAnim_FLAAFFY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AMPHAROS_1[] = +static const union AnimCmd sAnim_Ampharos_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 15), @@ -2135,7 +2135,7 @@ static const union AnimCmd sAnim_AMPHAROS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BELLOSSOM_1[] = +static const union AnimCmd sAnim_Bellossom_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -2156,7 +2156,7 @@ static const union AnimCmd sAnim_BELLOSSOM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MARILL_1[] = +static const union AnimCmd sAnim_Marill_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -2164,7 +2164,7 @@ static const union AnimCmd sAnim_MARILL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AZUMARILL_1[] = +static const union AnimCmd sAnim_Azumarill_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -2174,7 +2174,7 @@ static const union AnimCmd sAnim_AZUMARILL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SUDOWOODO_1[] = +static const union AnimCmd sAnim_Sudowoodo_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -2185,7 +2185,7 @@ static const union AnimCmd sAnim_SUDOWOODO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_POLITOED_1[] = +static const union AnimCmd sAnim_Politoed_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -2196,7 +2196,7 @@ static const union AnimCmd sAnim_POLITOED_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HOPPIP_1[] = +static const union AnimCmd sAnim_Hoppip_1[] = { ANIMCMD_FRAME(1, 25), ANIMCMD_FRAME(0, 25), @@ -2205,7 +2205,7 @@ static const union AnimCmd sAnim_HOPPIP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SKIPLOOM_1[] = +static const union AnimCmd sAnim_Skiploom_1[] = { ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(0, 12), @@ -2218,7 +2218,7 @@ static const union AnimCmd sAnim_SKIPLOOM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_JUMPLUFF_1[] = +static const union AnimCmd sAnim_Jumpluff_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 25), @@ -2229,14 +2229,14 @@ static const union AnimCmd sAnim_JUMPLUFF_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AIPOM_1[] = +static const union AnimCmd sAnim_Aipom_1[] = { ANIMCMD_FRAME(1, 35), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_SUNKERN_1[] = +static const union AnimCmd sAnim_Sunkern_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -2247,7 +2247,7 @@ static const union AnimCmd sAnim_SUNKERN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SUNFLORA_1[] = +static const union AnimCmd sAnim_Sunflora_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -2255,7 +2255,7 @@ static const union AnimCmd sAnim_SUNFLORA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_YANMA_1[] = +static const union AnimCmd sAnim_Yanma_1[] = { ANIMCMD_FRAME(1, 2), ANIMCMD_FRAME(0, 2), @@ -2282,7 +2282,7 @@ static const union AnimCmd sAnim_YANMA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WOOPER_1[] = +static const union AnimCmd sAnim_Wooper_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -2290,14 +2290,14 @@ static const union AnimCmd sAnim_WOOPER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_QUAGSIRE_1[] = +static const union AnimCmd sAnim_Quagsire_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_ESPEON_1[] = +static const union AnimCmd sAnim_Espeon_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 25), @@ -2305,21 +2305,21 @@ static const union AnimCmd sAnim_ESPEON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UMBREON_1[] = +static const union AnimCmd sAnim_Umbreon_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_MURKROW_1[] = +static const union AnimCmd sAnim_Murkrow_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_SLOWKING_1[] = +static const union AnimCmd sAnim_Slowking_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -2327,7 +2327,7 @@ static const union AnimCmd sAnim_SLOWKING_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MISDREAVUS_1[] = +static const union AnimCmd sAnim_Misdreavus_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -2342,7 +2342,7 @@ static const union AnimCmd sAnim_MISDREAVUS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_1[] = +static const union AnimCmd sAnim_Unown_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -2350,7 +2350,7 @@ static const union AnimCmd sAnim_UNOWN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WOBBUFFET_1[] = +static const union AnimCmd sAnim_Wobbuffet_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -2360,7 +2360,7 @@ static const union AnimCmd sAnim_WOBBUFFET_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WOBBUFFET_2[] = +static const union AnimCmd sAnim_Wobbuffet_2[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -2370,7 +2370,7 @@ static const union AnimCmd sAnim_WOBBUFFET_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GIRAFARIG_1[] = +static const union AnimCmd sAnim_Girafarig_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -2378,7 +2378,7 @@ static const union AnimCmd sAnim_GIRAFARIG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GIRAFARIG_2[] = +static const union AnimCmd sAnim_Girafarig_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -2387,7 +2387,7 @@ static const union AnimCmd sAnim_GIRAFARIG_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PINECO_1[] = +static const union AnimCmd sAnim_Pineco_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -2400,7 +2400,7 @@ static const union AnimCmd sAnim_PINECO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FORRETRESS_1[] = +static const union AnimCmd sAnim_Forretress_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -2409,7 +2409,7 @@ static const union AnimCmd sAnim_FORRETRESS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DUNSPARCE_1[] = +static const union AnimCmd sAnim_Dunsparce_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 15), @@ -2418,14 +2418,14 @@ static const union AnimCmd sAnim_DUNSPARCE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GLIGAR_1[] = +static const union AnimCmd sAnim_Gligar_1[] = { ANIMCMD_FRAME(1, 17), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_STEELIX_1[] = +static const union AnimCmd sAnim_Steelix_1[] = { ANIMCMD_FRAME(0, 7), ANIMCMD_FRAME(1, 21), @@ -2435,21 +2435,21 @@ static const union AnimCmd sAnim_STEELIX_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SNUBBULL_1[] = +static const union AnimCmd sAnim_Snubbull_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_GRANBULL_1[] = +static const union AnimCmd sAnim_Granbull_1[] = { ANIMCMD_FRAME(1, 35), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_QWILFISH_1[] = +static const union AnimCmd sAnim_Qwilfish_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -2461,14 +2461,14 @@ static const union AnimCmd sAnim_QWILFISH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SCIZOR_1[] = +static const union AnimCmd sAnim_Scizor_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_SHUCKLE_1[] = +static const union AnimCmd sAnim_Shuckle_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 50), @@ -2476,7 +2476,7 @@ static const union AnimCmd sAnim_SHUCKLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HERACROSS_1[] = +static const union AnimCmd sAnim_Heracross_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -2486,7 +2486,7 @@ static const union AnimCmd sAnim_HERACROSS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SNEASEL_1[] = +static const union AnimCmd sAnim_Sneasel_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -2497,21 +2497,21 @@ static const union AnimCmd sAnim_SNEASEL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TEDDIURSA_1[] = +static const union AnimCmd sAnim_Teddiursa_1[] = { ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_URSARING_1[] = +static const union AnimCmd sAnim_Ursaring_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_SLUGMA_1[] = +static const union AnimCmd sAnim_Slugma_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -2521,7 +2521,7 @@ static const union AnimCmd sAnim_SLUGMA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SLUGMA_2[] = +static const union AnimCmd sAnim_Slugma_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -2530,7 +2530,7 @@ static const union AnimCmd sAnim_SLUGMA_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAGCARGO_1[] = +static const union AnimCmd sAnim_Magcargo_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -2540,7 +2540,7 @@ static const union AnimCmd sAnim_MAGCARGO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAGCARGO_2[] = +static const union AnimCmd sAnim_Magcargo_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -2549,7 +2549,7 @@ static const union AnimCmd sAnim_MAGCARGO_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SWINUB_1[] = +static const union AnimCmd sAnim_Swinub_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -2558,7 +2558,7 @@ static const union AnimCmd sAnim_SWINUB_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PILOSWINE_1[] = +static const union AnimCmd sAnim_Piloswine_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -2567,7 +2567,7 @@ static const union AnimCmd sAnim_PILOSWINE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CORSOLA_1[] = +static const union AnimCmd sAnim_Corsola_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -2577,7 +2577,7 @@ static const union AnimCmd sAnim_CORSOLA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CORSOLA_2[] = +static const union AnimCmd sAnim_Corsola_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -2586,7 +2586,7 @@ static const union AnimCmd sAnim_CORSOLA_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_REMORAID_1[] = +static const union AnimCmd sAnim_Remoraid_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -2594,7 +2594,7 @@ static const union AnimCmd sAnim_REMORAID_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_OCTILLERY_1[] = +static const union AnimCmd sAnim_Octillery_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -2603,14 +2603,14 @@ static const union AnimCmd sAnim_OCTILLERY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DELIBIRD_1[] = +static const union AnimCmd sAnim_Delibird_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), ANIMCMD_END, }; -static const union AnimCmd sAnim_MANTINE_1[] = +static const union AnimCmd sAnim_Mantine_1[] = { ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 30), @@ -2619,28 +2619,28 @@ static const union AnimCmd sAnim_MANTINE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SKARMORY_1[] = +static const union AnimCmd sAnim_Skarmory_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_HOUNDOUR_1[] = +static const union AnimCmd sAnim_Houndour_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_HOUNDOOM_1[] = +static const union AnimCmd sAnim_Houndoom_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 30), ANIMCMD_END, }; -static const union AnimCmd sAnim_KINGDRA_1[] = +static const union AnimCmd sAnim_Kingdra_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -2650,7 +2650,7 @@ static const union AnimCmd sAnim_KINGDRA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KINGDRA_2[] = +static const union AnimCmd sAnim_Kingdra_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -2659,7 +2659,7 @@ static const union AnimCmd sAnim_KINGDRA_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PHANPY_1[] = +static const union AnimCmd sAnim_Phanpy_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -2671,7 +2671,7 @@ static const union AnimCmd sAnim_PHANPY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PHANPY_2[] = +static const union AnimCmd sAnim_Phanpy_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -2680,7 +2680,7 @@ static const union AnimCmd sAnim_PHANPY_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DONPHAN_1[] = +static const union AnimCmd sAnim_Donphan_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -2688,7 +2688,7 @@ static const union AnimCmd sAnim_DONPHAN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PORYGON2_1[] = +static const union AnimCmd sAnim_Porygon2_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -2698,14 +2698,14 @@ static const union AnimCmd sAnim_PORYGON2_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_STANTLER_1[] = +static const union AnimCmd sAnim_Stantler_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), ANIMCMD_END, }; -static const union AnimCmd sAnim_SMEARGLE_1[] = +static const union AnimCmd sAnim_Smeargle_1[] = { ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(0, 12), @@ -2714,14 +2714,14 @@ static const union AnimCmd sAnim_SMEARGLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TYROGUE_1[] = +static const union AnimCmd sAnim_Tyrogue_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_HITMONTOP_1[] = +static const union AnimCmd sAnim_Hitmontop_1[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -2737,14 +2737,14 @@ static const union AnimCmd sAnim_HITMONTOP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SMOOCHUM_1[] = +static const union AnimCmd sAnim_Smoochum_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_ELEKID_1[] = +static const union AnimCmd sAnim_Elekid_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -2752,7 +2752,7 @@ static const union AnimCmd sAnim_ELEKID_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAGBY_1[] = +static const union AnimCmd sAnim_Magby_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -2761,14 +2761,14 @@ static const union AnimCmd sAnim_MAGBY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MILTANK_1[] = +static const union AnimCmd sAnim_Miltank_1[] = { ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 30), ANIMCMD_END, }; -static const union AnimCmd sAnim_BLISSEY_1[] = +static const union AnimCmd sAnim_Blissey_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -2776,7 +2776,7 @@ static const union AnimCmd sAnim_BLISSEY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RAIKOU_1[] = +static const union AnimCmd sAnim_Raikou_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -2784,21 +2784,21 @@ static const union AnimCmd sAnim_RAIKOU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ENTEI_1[] = +static const union AnimCmd sAnim_Entei_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_SUICUNE_1[] = +static const union AnimCmd sAnim_Suicune_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_LARVITAR_1[] = +static const union AnimCmd sAnim_Larvitar_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -2807,14 +2807,14 @@ static const union AnimCmd sAnim_LARVITAR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PUPITAR_1[] = +static const union AnimCmd sAnim_Pupitar_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_TYRANITAR_1[] = +static const union AnimCmd sAnim_Tyranitar_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 30), @@ -2822,7 +2822,7 @@ static const union AnimCmd sAnim_TYRANITAR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LUGIA_1[] = +static const union AnimCmd sAnim_Lugia_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -2839,14 +2839,14 @@ static const union AnimCmd sAnim_LUGIA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HO_OH_1[] = +static const union AnimCmd sAnim_HoOh_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_CELEBI_1[] = +static const union AnimCmd sAnim_Celebi_1[] = { ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 30), @@ -2855,7 +2855,7 @@ static const union AnimCmd sAnim_CELEBI_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_OLD_UNOWN_B_1[] = +static const union AnimCmd sAnim_OldUnownB_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -2863,16 +2863,17 @@ static const union AnimCmd sAnim_OLD_UNOWN_B_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TREECKO_1[] = +static const union AnimCmd sAnim_Treecko_1[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 3), - ANIMCMD_END,}; + ANIMCMD_END, +}; -static const union AnimCmd sAnim_GROVYLE_1[] = +static const union AnimCmd sAnim_Grovyle_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 18), @@ -2882,7 +2883,7 @@ static const union AnimCmd sAnim_GROVYLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SCEPTILE_1[] = +static const union AnimCmd sAnim_Sceptile_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 26), @@ -2890,7 +2891,7 @@ static const union AnimCmd sAnim_SCEPTILE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TORCHIC_1[] = +static const union AnimCmd sAnim_Torchic_1[] = { ANIMCMD_FRAME(0, 7), ANIMCMD_FRAME(1, 4), @@ -2902,14 +2903,15 @@ static const union AnimCmd sAnim_TORCHIC_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_COMBUSKEN_1[] = +static const union AnimCmd sAnim_Combusken_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 25), ANIMCMD_FRAME(0, 12), - ANIMCMD_END,}; + ANIMCMD_END, +}; -static const union AnimCmd sAnim_BLAZIKEN_1[] = +static const union AnimCmd sAnim_Blaziken_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 25), @@ -2919,7 +2921,7 @@ static const union AnimCmd sAnim_BLAZIKEN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BLAZIKEN_2[] = +static const union AnimCmd sAnim_Blaziken_2[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(2, 8), @@ -2927,20 +2929,20 @@ static const union AnimCmd sAnim_BLAZIKEN_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BLAZIKEN_3[] = +static const union AnimCmd sAnim_Blaziken_3[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(2, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_BLAZIKEN_4[] = +static const union AnimCmd sAnim_Blaziken_4[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_MUDKIP_1[] = +static const union AnimCmd sAnim_Mudkip_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 8), @@ -2950,7 +2952,7 @@ static const union AnimCmd sAnim_MUDKIP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MARSHTOMP_1[] = +static const union AnimCmd sAnim_Marshtomp_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -2964,7 +2966,7 @@ static const union AnimCmd sAnim_MARSHTOMP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SWAMPERT_1[] = +static const union AnimCmd sAnim_Swampert_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 44), @@ -2974,7 +2976,7 @@ static const union AnimCmd sAnim_SWAMPERT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_POOCHYENA_1[] = +static const union AnimCmd sAnim_Poochyena_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 44), @@ -2982,7 +2984,7 @@ static const union AnimCmd sAnim_POOCHYENA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MIGHTYENA_1[] = +static const union AnimCmd sAnim_Mightyena_1[] = { ANIMCMD_FRAME(0, 27), ANIMCMD_FRAME(1, 6), @@ -2992,7 +2994,7 @@ static const union AnimCmd sAnim_MIGHTYENA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ZIGZAGOON_1[] = +static const union AnimCmd sAnim_Zigzagoon_1[] = { ANIMCMD_FRAME(0, 27), ANIMCMD_FRAME(1, 6), @@ -3002,7 +3004,7 @@ static const union AnimCmd sAnim_ZIGZAGOON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LINOONE_1[] = +static const union AnimCmd sAnim_Linoone_1[] = { ANIMCMD_FRAME(0, 14), ANIMCMD_FRAME(1, 14), @@ -3012,7 +3014,7 @@ static const union AnimCmd sAnim_LINOONE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WURMPLE_1[] = +static const union AnimCmd sAnim_Wurmple_1[] = { ANIMCMD_FRAME(0, 22), ANIMCMD_FRAME(1, 35), @@ -3020,7 +3022,7 @@ static const union AnimCmd sAnim_WURMPLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SILCOON_1[] = +static const union AnimCmd sAnim_Silcoon_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 25), @@ -3028,13 +3030,13 @@ static const union AnimCmd sAnim_SILCOON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SILCOON_2[] = +static const union AnimCmd sAnim_Silcoon_2[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BEAUTIFLY_1[] = +static const union AnimCmd sAnim_Beautifly_1[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(1, 2), @@ -3048,13 +3050,13 @@ static const union AnimCmd sAnim_BEAUTIFLY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BEAUTIFLY_2[] = +static const union AnimCmd sAnim_Beautifly_2[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CASCOON_1[] = +static const union AnimCmd sAnim_Cascoon_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -3064,13 +3066,13 @@ static const union AnimCmd sAnim_CASCOON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CASCOON_2[] = +static const union AnimCmd sAnim_Cascoon_2[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DUSTOX_1[] = +static const union AnimCmd sAnim_Dustox_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 1), @@ -3090,13 +3092,13 @@ static const union AnimCmd sAnim_DUSTOX_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DUSTOX_2[] = +static const union AnimCmd sAnim_Dustox_2[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_LOTAD_1[] = +static const union AnimCmd sAnim_Lotad_1[] = { ANIMCMD_FRAME(0, 22), ANIMCMD_FRAME(1, 55), @@ -3104,7 +3106,7 @@ static const union AnimCmd sAnim_LOTAD_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LOMBRE_1[] = +static const union AnimCmd sAnim_Lombre_1[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 30), @@ -3114,7 +3116,7 @@ static const union AnimCmd sAnim_LOMBRE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LUDICOLO_1[] = +static const union AnimCmd sAnim_Ludicolo_1[] = { ANIMCMD_FRAME(0, 22), ANIMCMD_FRAME(1, 22), @@ -3126,7 +3128,7 @@ static const union AnimCmd sAnim_LUDICOLO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SEEDOT_1[] = +static const union AnimCmd sAnim_Seedot_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -3140,7 +3142,7 @@ static const union AnimCmd sAnim_SEEDOT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NUZLEAF_1[] = +static const union AnimCmd sAnim_Nuzleaf_1[] = { ANIMCMD_FRAME(0, 7), ANIMCMD_FRAME(1, 15), @@ -3154,7 +3156,7 @@ static const union AnimCmd sAnim_NUZLEAF_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SHIFTRY_1[] = +static const union AnimCmd sAnim_Shiftry_1[] = { ANIMCMD_FRAME(0, 7), ANIMCMD_FRAME(1, 35), @@ -3162,7 +3164,7 @@ static const union AnimCmd sAnim_SHIFTRY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NINCADA_1[] = +static const union AnimCmd sAnim_Nincada_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 22), @@ -3172,7 +3174,7 @@ static const union AnimCmd sAnim_NINCADA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NINJASK_1[] = +static const union AnimCmd sAnim_Ninjask_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 1), @@ -3195,7 +3197,7 @@ static const union AnimCmd sAnim_NINJASK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SHEDINJA_1[] = +static const union AnimCmd sAnim_Shedinja_1[] = { ANIMCMD_FRAME(0, 33), ANIMCMD_FRAME(1, 33), @@ -3205,7 +3207,7 @@ static const union AnimCmd sAnim_SHEDINJA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TAILLOW_1[] = +static const union AnimCmd sAnim_Taillow_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 15), @@ -3219,7 +3221,7 @@ static const union AnimCmd sAnim_TAILLOW_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SWELLOW_1[] = +static const union AnimCmd sAnim_Swellow_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 18), @@ -3227,7 +3229,7 @@ static const union AnimCmd sAnim_SWELLOW_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SHROOMISH_1[] = +static const union AnimCmd sAnim_Shroomish_1[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 6), @@ -3243,7 +3245,7 @@ static const union AnimCmd sAnim_SHROOMISH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BRELOOM_1[] = +static const union AnimCmd sAnim_Breloom_1[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 30), @@ -3253,7 +3255,7 @@ static const union AnimCmd sAnim_BRELOOM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WINGULL_1[] = +static const union AnimCmd sAnim_Wingull_1[] = { ANIMCMD_FRAME(0, 17), ANIMCMD_FRAME(1, 23), @@ -3261,7 +3263,7 @@ static const union AnimCmd sAnim_WINGULL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PELIPPER_1[] = +static const union AnimCmd sAnim_Pelipper_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -3275,7 +3277,7 @@ static const union AnimCmd sAnim_PELIPPER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SURSKIT_1[] = +static const union AnimCmd sAnim_Surskit_1[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 18), @@ -3285,13 +3287,13 @@ static const union AnimCmd sAnim_SURSKIT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SURSKIT_2[] = +static const union AnimCmd sAnim_Surskit_2[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MASQUERAIN_1[] = +static const union AnimCmd sAnim_Masquerain_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), @@ -3305,13 +3307,13 @@ static const union AnimCmd sAnim_MASQUERAIN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MASQUERAIN_2[] = +static const union AnimCmd sAnim_Masquerain_2[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_WAILMER_1[] = +static const union AnimCmd sAnim_Wailmer_1[] = { ANIMCMD_FRAME(0, 22), ANIMCMD_FRAME(1, 22), @@ -3323,7 +3325,7 @@ static const union AnimCmd sAnim_WAILMER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WAILORD_1[] = +static const union AnimCmd sAnim_Wailord_1[] = { ANIMCMD_FRAME(0, 26), ANIMCMD_FRAME(1, 48), @@ -3331,7 +3333,7 @@ static const union AnimCmd sAnim_WAILORD_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SKITTY_1[] = +static const union AnimCmd sAnim_Skitty_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 35), @@ -3339,7 +3341,7 @@ static const union AnimCmd sAnim_SKITTY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DELCATTY_1[] = +static const union AnimCmd sAnim_Delcatty_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 46), @@ -3347,7 +3349,7 @@ static const union AnimCmd sAnim_DELCATTY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KECLEON_1[] = +static const union AnimCmd sAnim_Kecleon_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 18), @@ -3357,7 +3359,7 @@ static const union AnimCmd sAnim_KECLEON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BALTOY_1[] = +static const union AnimCmd sAnim_Baltoy_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3369,7 +3371,7 @@ static const union AnimCmd sAnim_BALTOY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CLAYDOL_1[] = +static const union AnimCmd sAnim_Claydol_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3381,7 +3383,7 @@ static const union AnimCmd sAnim_CLAYDOL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NOSEPASS_1[] = +static const union AnimCmd sAnim_Nosepass_1[] = { ANIMCMD_FRAME(0, 27), ANIMCMD_FRAME(1, 27), @@ -3393,7 +3395,7 @@ static const union AnimCmd sAnim_NOSEPASS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TORKOAL_1[] = +static const union AnimCmd sAnim_Torkoal_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3403,7 +3405,7 @@ static const union AnimCmd sAnim_TORKOAL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SABLEYE_1[] = +static const union AnimCmd sAnim_Sableye_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -3413,7 +3415,7 @@ static const union AnimCmd sAnim_SABLEYE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BARBOACH_1[] = +static const union AnimCmd sAnim_Barboach_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3431,7 +3433,7 @@ static const union AnimCmd sAnim_BARBOACH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WHISCASH_1[] = +static const union AnimCmd sAnim_Whiscash_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3449,7 +3451,7 @@ static const union AnimCmd sAnim_WHISCASH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LUVDISC_1[] = +static const union AnimCmd sAnim_Luvdisc_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3459,7 +3461,7 @@ static const union AnimCmd sAnim_LUVDISC_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CORPHISH_1[] = +static const union AnimCmd sAnim_Corphish_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3471,7 +3473,7 @@ static const union AnimCmd sAnim_CORPHISH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CRAWDAUNT_1[] = +static const union AnimCmd sAnim_Crawdaunt_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3481,7 +3483,7 @@ static const union AnimCmd sAnim_CRAWDAUNT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FEEBAS_1[] = +static const union AnimCmd sAnim_Feebas_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3493,7 +3495,7 @@ static const union AnimCmd sAnim_FEEBAS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MILOTIC_1[] = +static const union AnimCmd sAnim_Milotic_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3505,7 +3507,7 @@ static const union AnimCmd sAnim_MILOTIC_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CARVANHA_1[] = +static const union AnimCmd sAnim_Carvanha_1[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 6), @@ -3519,7 +3521,7 @@ static const union AnimCmd sAnim_CARVANHA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SHARPEDO_1[] = +static const union AnimCmd sAnim_Sharpedo_1[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 6), @@ -3533,7 +3535,7 @@ static const union AnimCmd sAnim_SHARPEDO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TRAPINCH_1[] = +static const union AnimCmd sAnim_Trapinch_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3543,7 +3545,7 @@ static const union AnimCmd sAnim_TRAPINCH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VIBRAVA_1[] = +static const union AnimCmd sAnim_Vibrava_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3555,7 +3557,7 @@ static const union AnimCmd sAnim_VIBRAVA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FLYGON_1[] = +static const union AnimCmd sAnim_Flygon_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3567,7 +3569,7 @@ static const union AnimCmd sAnim_FLYGON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAKUHITA_1[] = +static const union AnimCmd sAnim_Makuhita_1[] = { ANIMCMD_FRAME(0, 7), ANIMCMD_FRAME(1, 10), @@ -3581,7 +3583,7 @@ static const union AnimCmd sAnim_MAKUHITA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HARIYAMA_1[] = +static const union AnimCmd sAnim_Hariyama_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -3590,7 +3592,7 @@ static const union AnimCmd sAnim_HARIYAMA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ELECTRIKE_1[] = +static const union AnimCmd sAnim_Electrike_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 25), @@ -3600,7 +3602,7 @@ static const union AnimCmd sAnim_ELECTRIKE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MANECTRIC_1[] = +static const union AnimCmd sAnim_Manectric_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 33), @@ -3610,7 +3612,7 @@ static const union AnimCmd sAnim_MANECTRIC_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NUMEL_1[] = +static const union AnimCmd sAnim_Numel_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3620,7 +3622,7 @@ static const union AnimCmd sAnim_NUMEL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CAMERUPT_1[] = +static const union AnimCmd sAnim_Camerupt_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3632,7 +3634,7 @@ static const union AnimCmd sAnim_CAMERUPT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SPHEAL_1[] = +static const union AnimCmd sAnim_Spheal_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 43), @@ -3645,7 +3647,7 @@ static const union AnimCmd sAnim_SPHEAL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SEALEO_1[] = +static const union AnimCmd sAnim_Sealeo_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3655,7 +3657,7 @@ static const union AnimCmd sAnim_SEALEO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WALREIN_1[] = +static const union AnimCmd sAnim_Walrein_1[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(1, 10), @@ -3665,7 +3667,7 @@ static const union AnimCmd sAnim_WALREIN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CACNEA_1[] = +static const union AnimCmd sAnim_Cacnea_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3681,7 +3683,7 @@ static const union AnimCmd sAnim_CACNEA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CACTURNE_1[] = +static const union AnimCmd sAnim_Cacturne_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3691,7 +3693,7 @@ static const union AnimCmd sAnim_CACTURNE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SNORUNT_1[] = +static const union AnimCmd sAnim_Snorunt_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3701,7 +3703,7 @@ static const union AnimCmd sAnim_SNORUNT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GLALIE_1[] = +static const union AnimCmd sAnim_Glalie_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3711,7 +3713,7 @@ static const union AnimCmd sAnim_GLALIE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LUNATONE_1[] = +static const union AnimCmd sAnim_Lunatone_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -3721,7 +3723,7 @@ static const union AnimCmd sAnim_LUNATONE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LUNATONE_2[] = +static const union AnimCmd sAnim_Lunatone_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -3730,7 +3732,7 @@ static const union AnimCmd sAnim_LUNATONE_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SOLROCK_1[] = +static const union AnimCmd sAnim_Solrock_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -3740,7 +3742,7 @@ static const union AnimCmd sAnim_SOLROCK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SOLROCK_2[] = +static const union AnimCmd sAnim_Solrock_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -3749,7 +3751,7 @@ static const union AnimCmd sAnim_SOLROCK_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AZURILL_1[] = +static const union AnimCmd sAnim_Azurill_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 12), @@ -3761,7 +3763,7 @@ static const union AnimCmd sAnim_AZURILL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SPOINK_1[] = +static const union AnimCmd sAnim_Spoink_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 10), @@ -3777,7 +3779,7 @@ static const union AnimCmd sAnim_SPOINK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GRUMPIG_1[] = +static const union AnimCmd sAnim_Grumpig_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3787,7 +3789,7 @@ static const union AnimCmd sAnim_GRUMPIG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PLUSLE_1[] = +static const union AnimCmd sAnim_Plusle_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -3797,7 +3799,7 @@ static const union AnimCmd sAnim_PLUSLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MINUN_1[] = +static const union AnimCmd sAnim_Minun_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -3807,7 +3809,7 @@ static const union AnimCmd sAnim_MINUN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAWILE_1[] = +static const union AnimCmd sAnim_Mawile_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -3819,7 +3821,7 @@ static const union AnimCmd sAnim_MAWILE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MEDITITE_1[] = +static const union AnimCmd sAnim_Meditite_1[] = { ANIMCMD_FRAME(0, 22), ANIMCMD_FRAME(1, 2), @@ -3827,7 +3829,7 @@ static const union AnimCmd sAnim_MEDITITE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MEDICHAM_1[] = +static const union AnimCmd sAnim_Medicham_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 11), @@ -3839,7 +3841,7 @@ static const union AnimCmd sAnim_MEDICHAM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SWABLU_1[] = +static const union AnimCmd sAnim_Swablu_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 10), @@ -3851,7 +3853,7 @@ static const union AnimCmd sAnim_SWABLU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SWABLU_2[] = +static const union AnimCmd sAnim_Swablu_2[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(2, 8), @@ -3862,7 +3864,7 @@ static const union AnimCmd sAnim_SWABLU_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ALTARIA_1[] = +static const union AnimCmd sAnim_Altaria_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -3872,7 +3874,7 @@ static const union AnimCmd sAnim_ALTARIA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ALTARIA_2[] = +static const union AnimCmd sAnim_Altaria_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -3881,7 +3883,7 @@ static const union AnimCmd sAnim_ALTARIA_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WYNAUT_1[] = +static const union AnimCmd sAnim_Wynaut_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3891,7 +3893,7 @@ static const union AnimCmd sAnim_WYNAUT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DUSKULL_1[] = +static const union AnimCmd sAnim_Duskull_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3901,7 +3903,7 @@ static const union AnimCmd sAnim_DUSKULL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DUSCLOPS_1[] = +static const union AnimCmd sAnim_Dusclops_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3911,7 +3913,7 @@ static const union AnimCmd sAnim_DUSCLOPS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ROSELIA_1[] = +static const union AnimCmd sAnim_Roselia_1[] = { ANIMCMD_FRAME(0, 18), ANIMCMD_FRAME(1, 44), @@ -3919,7 +3921,7 @@ static const union AnimCmd sAnim_ROSELIA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SLAKOTH_1[] = +static const union AnimCmd sAnim_Slakoth_1[] = { ANIMCMD_FRAME(0, 13), ANIMCMD_FRAME(1, 22), @@ -3930,7 +3932,7 @@ static const union AnimCmd sAnim_SLAKOTH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VIGOROTH_1[] = +static const union AnimCmd sAnim_Vigoroth_1[] = { ANIMCMD_FRAME(0, 13), ANIMCMD_FRAME(1, 7), @@ -3942,7 +3944,7 @@ static const union AnimCmd sAnim_VIGOROTH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SLAKING_1[] = +static const union AnimCmd sAnim_Slaking_1[] = { ANIMCMD_FRAME(0, 22), ANIMCMD_FRAME(1, 22), @@ -3954,7 +3956,7 @@ static const union AnimCmd sAnim_SLAKING_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GULPIN_1[] = +static const union AnimCmd sAnim_Gulpin_1[] = { ANIMCMD_FRAME(0, 14), ANIMCMD_FRAME(1, 14), @@ -3964,7 +3966,7 @@ static const union AnimCmd sAnim_GULPIN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SWALOT_1[] = +static const union AnimCmd sAnim_Swalot_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 30), @@ -3973,7 +3975,7 @@ static const union AnimCmd sAnim_SWALOT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TROPIUS_1[] = +static const union AnimCmd sAnim_Tropius_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -3983,7 +3985,7 @@ static const union AnimCmd sAnim_TROPIUS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WHISMUR_1[] = +static const union AnimCmd sAnim_Whismur_1[] = { ANIMCMD_FRAME(0, 9), ANIMCMD_FRAME(1, 9), @@ -3998,7 +4000,7 @@ static const union AnimCmd sAnim_WHISMUR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LOUDRED_1[] = +static const union AnimCmd sAnim_Loudred_1[] = { ANIMCMD_FRAME(0, 9), ANIMCMD_FRAME(1, 9), @@ -4008,7 +4010,7 @@ static const union AnimCmd sAnim_LOUDRED_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_EXPLOUD_1[] = +static const union AnimCmd sAnim_Exploud_1[] = { ANIMCMD_FRAME(0, 9), ANIMCMD_FRAME(1, 44), @@ -4016,7 +4018,7 @@ static const union AnimCmd sAnim_EXPLOUD_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CLAMPERL_1[] = +static const union AnimCmd sAnim_Clamperl_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4026,7 +4028,7 @@ static const union AnimCmd sAnim_CLAMPERL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HUNTAIL_1[] = +static const union AnimCmd sAnim_Huntail_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4036,7 +4038,7 @@ static const union AnimCmd sAnim_HUNTAIL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOREBYSS_1[] = +static const union AnimCmd sAnim_Gorebyss_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4046,7 +4048,7 @@ static const union AnimCmd sAnim_GOREBYSS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ABSOL_1[] = +static const union AnimCmd sAnim_Absol_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4056,7 +4058,7 @@ static const union AnimCmd sAnim_ABSOL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SHUPPET_1[] = +static const union AnimCmd sAnim_Shuppet_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4068,7 +4070,7 @@ static const union AnimCmd sAnim_SHUPPET_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BANETTE_1[] = +static const union AnimCmd sAnim_Banette_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4080,7 +4082,7 @@ static const union AnimCmd sAnim_BANETTE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SEVIPER_1[] = +static const union AnimCmd sAnim_Seviper_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4092,7 +4094,7 @@ static const union AnimCmd sAnim_SEVIPER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ZANGOOSE_1[] = +static const union AnimCmd sAnim_Zangoose_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4104,7 +4106,7 @@ static const union AnimCmd sAnim_ZANGOOSE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RELICANTH_1[] = +static const union AnimCmd sAnim_Relicanth_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4114,7 +4116,7 @@ static const union AnimCmd sAnim_RELICANTH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ARON_1[] = +static const union AnimCmd sAnim_Aron_1[] = { ANIMCMD_FRAME(0, 33), ANIMCMD_FRAME(1, 44), @@ -4124,7 +4126,7 @@ static const union AnimCmd sAnim_ARON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LAIRON_1[] = +static const union AnimCmd sAnim_Lairon_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 29), @@ -4134,7 +4136,7 @@ static const union AnimCmd sAnim_LAIRON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AGGRON_1[] = +static const union AnimCmd sAnim_Aggron_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 44), @@ -4142,31 +4144,31 @@ static const union AnimCmd sAnim_AGGRON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CASTFORM_0[] = +static const union AnimCmd sAnim_Castform_0[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CASTFORM_1[] = +static const union AnimCmd sAnim_Castform_1[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CASTFORM_2[] = +static const union AnimCmd sAnim_Castform_2[] = { ANIMCMD_FRAME(2, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CASTFORM_3[] = +static const union AnimCmd sAnim_Castform_3[] = { ANIMCMD_FRAME(3, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_VOLBEAT_1[] = +static const union AnimCmd sAnim_Volbeat_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 11), @@ -4178,7 +4180,7 @@ static const union AnimCmd sAnim_VOLBEAT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ILLUMISE_1[] = +static const union AnimCmd sAnim_Illumise_1[] = { ANIMCMD_FRAME(0, 22), ANIMCMD_FRAME(1, 22), @@ -4188,7 +4190,7 @@ static const union AnimCmd sAnim_ILLUMISE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LILEEP_1[] = +static const union AnimCmd sAnim_Lileep_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4198,7 +4200,7 @@ static const union AnimCmd sAnim_LILEEP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CRADILY_1[] = +static const union AnimCmd sAnim_Cradily_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4210,7 +4212,7 @@ static const union AnimCmd sAnim_CRADILY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ANORITH_1[] = +static const union AnimCmd sAnim_Anorith_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4222,7 +4224,7 @@ static const union AnimCmd sAnim_ANORITH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ARMALDO_1[] = +static const union AnimCmd sAnim_Armaldo_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4232,7 +4234,7 @@ static const union AnimCmd sAnim_ARMALDO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RALTS_1[] = +static const union AnimCmd sAnim_Ralts_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 25), @@ -4240,7 +4242,7 @@ static const union AnimCmd sAnim_RALTS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KIRLIA_1[] = +static const union AnimCmd sAnim_Kirlia_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 39), @@ -4248,7 +4250,7 @@ static const union AnimCmd sAnim_KIRLIA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GARDEVOIR_1[] = +static const union AnimCmd sAnim_Gardevoir_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4256,7 +4258,7 @@ static const union AnimCmd sAnim_GARDEVOIR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BAGON_1[] = +static const union AnimCmd sAnim_Bagon_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4266,7 +4268,7 @@ static const union AnimCmd sAnim_BAGON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SHELGON_1[] = +static const union AnimCmd sAnim_Shelgon_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4276,7 +4278,7 @@ static const union AnimCmd sAnim_SHELGON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SALAMENCE_1[] = +static const union AnimCmd sAnim_Salamence_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -4286,7 +4288,7 @@ static const union AnimCmd sAnim_SALAMENCE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BELDUM_1[] = +static const union AnimCmd sAnim_Beldum_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -4296,7 +4298,7 @@ static const union AnimCmd sAnim_BELDUM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_METANG_1[] = +static const union AnimCmd sAnim_Metang_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), @@ -4306,7 +4308,7 @@ static const union AnimCmd sAnim_METANG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_METAGROSS_1[] = +static const union AnimCmd sAnim_Metagross_1[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), @@ -4316,7 +4318,7 @@ static const union AnimCmd sAnim_METAGROSS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_REGIROCK_1[] = +static const union AnimCmd sAnim_Regirock_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -4326,7 +4328,7 @@ static const union AnimCmd sAnim_REGIROCK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_REGIROCK_2[] = +static const union AnimCmd sAnim_Regirock_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -4335,7 +4337,7 @@ static const union AnimCmd sAnim_REGIROCK_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_REGICE_1[] = +static const union AnimCmd sAnim_Regice_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 15), @@ -4345,7 +4347,7 @@ static const union AnimCmd sAnim_REGICE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_REGISTEEL_1[] = +static const union AnimCmd sAnim_Registeel_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -4355,7 +4357,7 @@ static const union AnimCmd sAnim_REGISTEEL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_REGISTEEL_2[] = +static const union AnimCmd sAnim_Registeel_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -4364,7 +4366,7 @@ static const union AnimCmd sAnim_REGISTEEL_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KYOGRE_1[] = +static const union AnimCmd sAnim_Kyogre_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -4374,7 +4376,7 @@ static const union AnimCmd sAnim_KYOGRE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KYOGRE_2[] = +static const union AnimCmd sAnim_Kyogre_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -4383,7 +4385,7 @@ static const union AnimCmd sAnim_KYOGRE_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GROUDON_1[] = +static const union AnimCmd sAnim_Groudon_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -4393,7 +4395,7 @@ static const union AnimCmd sAnim_GROUDON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GROUDON_2[] = +static const union AnimCmd sAnim_Groudon_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -4402,7 +4404,7 @@ static const union AnimCmd sAnim_GROUDON_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RAYQUAZA_1[] = +static const union AnimCmd sAnim_Rayquaza_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 8), @@ -4412,7 +4414,7 @@ static const union AnimCmd sAnim_RAYQUAZA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RAYQUAZA_2[] = +static const union AnimCmd sAnim_Rayquaza_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -4421,7 +4423,7 @@ static const union AnimCmd sAnim_RAYQUAZA_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LATIAS_1[] = +static const union AnimCmd sAnim_Latias_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -4431,7 +4433,7 @@ static const union AnimCmd sAnim_LATIAS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LATIAS_2[] = +static const union AnimCmd sAnim_Latias_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -4440,7 +4442,7 @@ static const union AnimCmd sAnim_LATIAS_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LATIOS_1[] = +static const union AnimCmd sAnim_Latios_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -4450,7 +4452,7 @@ static const union AnimCmd sAnim_LATIOS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LATIOS_2[] = +static const union AnimCmd sAnim_Latios_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -4459,7 +4461,7 @@ static const union AnimCmd sAnim_LATIOS_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_JIRACHI_1[] = +static const union AnimCmd sAnim_Jirachi_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -4474,7 +4476,7 @@ static const union AnimCmd sAnim_JIRACHI_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_JIRACHI_2[] = +static const union AnimCmd sAnim_Jirachi_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -4483,7 +4485,7 @@ static const union AnimCmd sAnim_JIRACHI_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DEOXYS_1[] = +static const union AnimCmd sAnim_Deoxys_1[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), @@ -4493,7 +4495,7 @@ static const union AnimCmd sAnim_DEOXYS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DEOXYS_2[] = +static const union AnimCmd sAnim_Deoxys_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -4502,7 +4504,7 @@ static const union AnimCmd sAnim_DEOXYS_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHIMECHO_1[] = +static const union AnimCmd sAnim_Chimecho_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4516,7 +4518,7 @@ static const union AnimCmd sAnim_CHIMECHO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_EGG_1[] = +static const union AnimCmd sAnim_Egg_1[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 6), @@ -4525,7 +4527,7 @@ static const union AnimCmd sAnim_EGG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_B_1[] = +static const union AnimCmd sAnim_UnownB_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4533,7 +4535,7 @@ static const union AnimCmd sAnim_UNOWN_B_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_C_1[] = +static const union AnimCmd sAnim_UnownC_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4541,7 +4543,7 @@ static const union AnimCmd sAnim_UNOWN_C_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_D_1[] = +static const union AnimCmd sAnim_UnownD_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4549,7 +4551,7 @@ static const union AnimCmd sAnim_UNOWN_D_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_E_1[] = +static const union AnimCmd sAnim_UnownE_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4557,7 +4559,7 @@ static const union AnimCmd sAnim_UNOWN_E_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_F_1[] = +static const union AnimCmd sAnim_UnownF_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4565,7 +4567,7 @@ static const union AnimCmd sAnim_UNOWN_F_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_G_1[] = +static const union AnimCmd sAnim_UnownG_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4573,7 +4575,7 @@ static const union AnimCmd sAnim_UNOWN_G_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_H_1[] = +static const union AnimCmd sAnim_UnownH_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4581,7 +4583,7 @@ static const union AnimCmd sAnim_UNOWN_H_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_I_1[] = +static const union AnimCmd sAnim_UnownI_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4589,7 +4591,7 @@ static const union AnimCmd sAnim_UNOWN_I_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_J_1[] = +static const union AnimCmd sAnim_UnownJ_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4597,7 +4599,7 @@ static const union AnimCmd sAnim_UNOWN_J_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_K_1[] = +static const union AnimCmd sAnim_UnownK_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4605,7 +4607,7 @@ static const union AnimCmd sAnim_UNOWN_K_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_L_1[] = +static const union AnimCmd sAnim_UnownL_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4613,7 +4615,7 @@ static const union AnimCmd sAnim_UNOWN_L_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_M_1[] = +static const union AnimCmd sAnim_UnownM_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4621,7 +4623,7 @@ static const union AnimCmd sAnim_UNOWN_M_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_N_1[] = +static const union AnimCmd sAnim_UnownN_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4629,7 +4631,7 @@ static const union AnimCmd sAnim_UNOWN_N_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_O_1[] = +static const union AnimCmd sAnim_UnownO_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4637,7 +4639,7 @@ static const union AnimCmd sAnim_UNOWN_O_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_P_1[] = +static const union AnimCmd sAnim_UnownP_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4645,7 +4647,7 @@ static const union AnimCmd sAnim_UNOWN_P_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_Q_1[] = +static const union AnimCmd sAnim_UnownQ_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4653,7 +4655,7 @@ static const union AnimCmd sAnim_UNOWN_Q_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_R_1[] = +static const union AnimCmd sAnim_UnownR_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4661,7 +4663,7 @@ static const union AnimCmd sAnim_UNOWN_R_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_S_1[] = +static const union AnimCmd sAnim_UnownS_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4669,7 +4671,7 @@ static const union AnimCmd sAnim_UNOWN_S_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_T_1[] = +static const union AnimCmd sAnim_UnownT_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4677,7 +4679,7 @@ static const union AnimCmd sAnim_UNOWN_T_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_U_1[] = +static const union AnimCmd sAnim_UnownU_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4685,7 +4687,7 @@ static const union AnimCmd sAnim_UNOWN_U_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_V_1[] = +static const union AnimCmd sAnim_UnownV_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4693,7 +4695,7 @@ static const union AnimCmd sAnim_UNOWN_V_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_W_1[] = +static const union AnimCmd sAnim_UnownW_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4701,7 +4703,7 @@ static const union AnimCmd sAnim_UNOWN_W_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_X_1[] = +static const union AnimCmd sAnim_UnownX_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4709,7 +4711,7 @@ static const union AnimCmd sAnim_UNOWN_X_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_Y_1[] = +static const union AnimCmd sAnim_UnownY_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4717,7 +4719,7 @@ static const union AnimCmd sAnim_UNOWN_Y_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_Z_1[] = +static const union AnimCmd sAnim_UnownZ_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4725,7 +4727,7 @@ static const union AnimCmd sAnim_UNOWN_Z_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_EMARK_1[] = +static const union AnimCmd sAnim_UnownEMark_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4733,7 +4735,7 @@ static const union AnimCmd sAnim_UNOWN_EMARK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNOWN_QMARK_1[] = +static const union AnimCmd sAnim_UnownQMark_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4742,7 +4744,7 @@ static const union AnimCmd sAnim_UNOWN_QMARK_1[] = }; #if P_GEN_4_POKEMON == TRUE -static const union AnimCmd sAnim_TURTWIG_1[] = +static const union AnimCmd sAnim_Turtwig_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -4750,7 +4752,7 @@ static const union AnimCmd sAnim_TURTWIG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GROTLE_1[] = +static const union AnimCmd sAnim_Grotle_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -4758,14 +4760,14 @@ static const union AnimCmd sAnim_GROTLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TORTERRA_1[] = +static const union AnimCmd sAnim_Torterra_1[] = { ANIMCMD_FRAME(1, 45), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_CHIMCHAR_1[] = +static const union AnimCmd sAnim_Chimchar_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -4776,7 +4778,7 @@ static const union AnimCmd sAnim_CHIMCHAR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MONFERNO_1[] = +static const union AnimCmd sAnim_Monferno_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -4786,7 +4788,7 @@ static const union AnimCmd sAnim_MONFERNO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_INFERNAPE_1[] = +static const union AnimCmd sAnim_Infernape_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -4794,7 +4796,7 @@ static const union AnimCmd sAnim_INFERNAPE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PIPLUP_1[] = +static const union AnimCmd sAnim_Piplup_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4802,7 +4804,7 @@ static const union AnimCmd sAnim_PIPLUP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PRINPLUP_1[] = +static const union AnimCmd sAnim_Prinplup_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -4817,7 +4819,7 @@ static const union AnimCmd sAnim_PRINPLUP_1[] = }; -static const union AnimCmd sAnim_EMPOLEON_1[] = +static const union AnimCmd sAnim_Empoleon_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -4825,7 +4827,7 @@ static const union AnimCmd sAnim_EMPOLEON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_STARLY_1[] = +static const union AnimCmd sAnim_Starly_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 10), @@ -4835,21 +4837,21 @@ static const union AnimCmd sAnim_STARLY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_STARAVIA_1[] = +static const union AnimCmd sAnim_Staravia_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_STARAPTOR_1[] = +static const union AnimCmd sAnim_Staraptor_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_BIDOOF_1[] = +static const union AnimCmd sAnim_Bidoof_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 15), @@ -4861,7 +4863,7 @@ static const union AnimCmd sAnim_BIDOOF_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BIBAREL_1[] = +static const union AnimCmd sAnim_Bibarel_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -4871,7 +4873,7 @@ static const union AnimCmd sAnim_BIBAREL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BIBAREL_2[] = +static const union AnimCmd sAnim_Bibarel_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -4880,7 +4882,7 @@ static const union AnimCmd sAnim_BIBAREL_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KRICKETOT_1[] = +static const union AnimCmd sAnim_Kricketot_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -4901,7 +4903,7 @@ static const union AnimCmd sAnim_KRICKETOT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KRICKETUNE_1[] = +static const union AnimCmd sAnim_Kricketune_1[] = { ANIMCMD_FRAME(0, 27), ANIMCMD_FRAME(1, 27), @@ -4913,7 +4915,7 @@ static const union AnimCmd sAnim_KRICKETUNE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SHINX_1[] = +static const union AnimCmd sAnim_Shinx_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -4922,14 +4924,14 @@ static const union AnimCmd sAnim_SHINX_1[] = }; -static const union AnimCmd sAnim_LUXIO_1[] = +static const union AnimCmd sAnim_Luxio_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_LUXRAY_1[] = +static const union AnimCmd sAnim_Luxray_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -4939,7 +4941,7 @@ static const union AnimCmd sAnim_LUXRAY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LUXRAY_2[] = +static const union AnimCmd sAnim_Luxray_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -4948,7 +4950,7 @@ static const union AnimCmd sAnim_LUXRAY_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BUDEW_1[] = +static const union AnimCmd sAnim_Budew_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -4956,21 +4958,21 @@ static const union AnimCmd sAnim_BUDEW_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ROSERADE_1[] = +static const union AnimCmd sAnim_Roserade_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_CRANIDOS_1[] = +static const union AnimCmd sAnim_Cranidos_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_RAMPARDOS_1[] = +static const union AnimCmd sAnim_Rampardos_1[] = { ANIMCMD_FRAME(0, 50), ANIMCMD_FRAME(1, 25), @@ -4980,7 +4982,7 @@ static const union AnimCmd sAnim_RAMPARDOS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SHIELDON_1[] = +static const union AnimCmd sAnim_Shieldon_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -4989,7 +4991,7 @@ static const union AnimCmd sAnim_SHIELDON_1[] = }; -static const union AnimCmd sAnim_BASTIODON_1[] = +static const union AnimCmd sAnim_Bastiodon_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -4997,14 +4999,14 @@ static const union AnimCmd sAnim_BASTIODON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BURMY_1[] = +static const union AnimCmd sAnim_Burmy_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_WORMADAM_1[] = +static const union AnimCmd sAnim_Wormadam_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -5014,7 +5016,7 @@ static const union AnimCmd sAnim_WORMADAM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MOTHIM_1[] = +static const union AnimCmd sAnim_Mothim_1[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), @@ -5032,7 +5034,7 @@ static const union AnimCmd sAnim_MOTHIM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_COMBEE_1[] = +static const union AnimCmd sAnim_Combee_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 15), @@ -5044,7 +5046,7 @@ static const union AnimCmd sAnim_COMBEE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VESPIQUEN_1[] = +static const union AnimCmd sAnim_Vespiquen_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 12), @@ -5059,7 +5061,7 @@ static const union AnimCmd sAnim_VESPIQUEN_1[] = }; -static const union AnimCmd sAnim_PACHIRISU_1[] = +static const union AnimCmd sAnim_Pachirisu_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -5073,7 +5075,7 @@ static const union AnimCmd sAnim_PACHIRISU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BUIZEL_1[] = +static const union AnimCmd sAnim_Buizel_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -5081,7 +5083,7 @@ static const union AnimCmd sAnim_BUIZEL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FLOATZEL_1[] = +static const union AnimCmd sAnim_Floatzel_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -5092,7 +5094,7 @@ static const union AnimCmd sAnim_FLOATZEL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHERUBI_1[] = +static const union AnimCmd sAnim_Cherubi_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -5107,7 +5109,7 @@ static const union AnimCmd sAnim_CHERUBI_1[] = }; -static const union AnimCmd sAnim_CHERRIM_NORMAL[] = +static const union AnimCmd sAnim_CherrimOvercast_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -5117,7 +5119,7 @@ static const union AnimCmd sAnim_CHERRIM_NORMAL[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHERRIM_NORMAL_2[] = +static const union AnimCmd sAnim_CherrimOvercast_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -5126,7 +5128,7 @@ static const union AnimCmd sAnim_CHERRIM_NORMAL_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHERRIM_SUNSHINE[] = +static const union AnimCmd sAnim_CherrimSunshine_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -5140,7 +5142,7 @@ static const union AnimCmd sAnim_CHERRIM_SUNSHINE[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SHELLOS_1[] = +static const union AnimCmd sAnim_Shellos_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -5148,7 +5150,7 @@ static const union AnimCmd sAnim_SHELLOS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GASTRODON_1[] = +static const union AnimCmd sAnim_Gastrodon_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -5159,7 +5161,7 @@ static const union AnimCmd sAnim_GASTRODON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AMBIPOM_1[] = +static const union AnimCmd sAnim_Ambipom_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -5167,7 +5169,7 @@ static const union AnimCmd sAnim_AMBIPOM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DRIFLOON_1[] = +static const union AnimCmd sAnim_Drifloon_1[] = { ANIMCMD_FRAME(1, 25), ANIMCMD_FRAME(0, 25), @@ -5176,7 +5178,7 @@ static const union AnimCmd sAnim_DRIFLOON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DRIFBLIM_1[] = +static const union AnimCmd sAnim_Drifblim_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 25), @@ -5187,7 +5189,7 @@ static const union AnimCmd sAnim_DRIFBLIM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BUNEARY_1[] = +static const union AnimCmd sAnim_Buneary_1[] = { ANIMCMD_FRAME(1, 35), ANIMCMD_FRAME(0, 10), @@ -5195,7 +5197,7 @@ static const union AnimCmd sAnim_BUNEARY_1[] = }; -static const union AnimCmd sAnim_LOPUNNY_1[] = +static const union AnimCmd sAnim_Lopunny_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -5203,7 +5205,7 @@ static const union AnimCmd sAnim_LOPUNNY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MISMAGIUS_1[] = +static const union AnimCmd sAnim_Mismagius_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -5218,7 +5220,7 @@ static const union AnimCmd sAnim_MISMAGIUS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HONCHKROW_1[] = +static const union AnimCmd sAnim_Honchkrow_1[] = { ANIMCMD_FRAME(0, 21), ANIMCMD_FRAME(1, 45), @@ -5227,7 +5229,7 @@ static const union AnimCmd sAnim_HONCHKROW_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GLAMEOW_1[] = +static const union AnimCmd sAnim_Glameow_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -5235,7 +5237,7 @@ static const union AnimCmd sAnim_GLAMEOW_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PURUGLY_1[] = +static const union AnimCmd sAnim_Purugly_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -5247,7 +5249,7 @@ static const union AnimCmd sAnim_PURUGLY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHINGLING_1[] = +static const union AnimCmd sAnim_Chingling_1[] = { ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(0, 12), @@ -5260,7 +5262,7 @@ static const union AnimCmd sAnim_CHINGLING_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_STUNKY_1[] = +static const union AnimCmd sAnim_Stunky_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -5270,7 +5272,7 @@ static const union AnimCmd sAnim_STUNKY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SKUNTANK_1[] = +static const union AnimCmd sAnim_Skuntank_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -5278,7 +5280,7 @@ static const union AnimCmd sAnim_SKUNTANK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BRONZOR_1[] = +static const union AnimCmd sAnim_Bronzor_1[] = { ANIMCMD_FRAME(1, 9), ANIMCMD_FRAME(0, 9), @@ -5293,7 +5295,7 @@ static const union AnimCmd sAnim_BRONZOR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BRONZONG_1[] = +static const union AnimCmd sAnim_Bronzong_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -5303,7 +5305,7 @@ static const union AnimCmd sAnim_BRONZONG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BRONZONG_2[] = +static const union AnimCmd sAnim_Bronzong_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -5312,7 +5314,7 @@ static const union AnimCmd sAnim_BRONZONG_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BONSLY_1[] = +static const union AnimCmd sAnim_Bonsly_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -5322,7 +5324,7 @@ static const union AnimCmd sAnim_BONSLY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MIME_JR_1[] = +static const union AnimCmd sAnim_MimeJr_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -5333,7 +5335,7 @@ static const union AnimCmd sAnim_MIME_JR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HAPPINY_1[] = +static const union AnimCmd sAnim_Happiny_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -5341,7 +5343,7 @@ static const union AnimCmd sAnim_HAPPINY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHATOT_1[] = +static const union AnimCmd sAnim_Chatot_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -5361,14 +5363,14 @@ static const union AnimCmd sAnim_CHATOT_1[] = ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_SPIRITOMB_1[] = +static const union AnimCmd sAnim_Spiritomb_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_GIBLE_1[] = +static const union AnimCmd sAnim_Gible_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -5376,14 +5378,14 @@ static const union AnimCmd sAnim_GIBLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GABITE_1[] = +static const union AnimCmd sAnim_Gabite_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_GARCHOMP_1[] = +static const union AnimCmd sAnim_Garchomp_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 8), @@ -5394,7 +5396,7 @@ static const union AnimCmd sAnim_GARCHOMP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MUNCHLAX_1[] = +static const union AnimCmd sAnim_Munchlax_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -5402,7 +5404,7 @@ static const union AnimCmd sAnim_MUNCHLAX_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RIOLU_1[] = +static const union AnimCmd sAnim_Riolu_1[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_FRAME(1, 50), @@ -5411,14 +5413,14 @@ static const union AnimCmd sAnim_RIOLU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LUCARIO_1[] = +static const union AnimCmd sAnim_Lucario_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_HIPPOPOTAS_1[] = +static const union AnimCmd sAnim_Hippopotas_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -5426,14 +5428,14 @@ static const union AnimCmd sAnim_HIPPOPOTAS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HIPPOWDON_1[] = +static const union AnimCmd sAnim_Hippowdon_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_SKORUPI_1[] = +static const union AnimCmd sAnim_Skorupi_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -5454,7 +5456,7 @@ static const union AnimCmd sAnim_SKORUPI_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DRAPION_1[] = +static const union AnimCmd sAnim_Drapion_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 15), @@ -5468,7 +5470,7 @@ static const union AnimCmd sAnim_DRAPION_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CROAGUNK_1[] = +static const union AnimCmd sAnim_Croagunk_1[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_FRAME(1, 50), @@ -5477,7 +5479,7 @@ static const union AnimCmd sAnim_CROAGUNK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TOXICROAK_1[] = +static const union AnimCmd sAnim_Toxicroak_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -5487,7 +5489,7 @@ static const union AnimCmd sAnim_TOXICROAK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CARNIVINE_1[] = +static const union AnimCmd sAnim_Carnivine_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -5504,7 +5506,7 @@ static const union AnimCmd sAnim_CARNIVINE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FINNEON_1[] = +static const union AnimCmd sAnim_Finneon_1[] = { ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(0, 12), @@ -5517,7 +5519,7 @@ static const union AnimCmd sAnim_FINNEON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LUMINEON_1[] = +static const union AnimCmd sAnim_Lumineon_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -5528,7 +5530,7 @@ static const union AnimCmd sAnim_LUMINEON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MANTYKE_1[] = +static const union AnimCmd sAnim_Mantyke_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -5537,7 +5539,7 @@ static const union AnimCmd sAnim_MANTYKE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SNOVER_1[] = +static const union AnimCmd sAnim_Snover_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 25), @@ -5545,7 +5547,7 @@ static const union AnimCmd sAnim_SNOVER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ABOMASNOW_1[] = +static const union AnimCmd sAnim_Abomasnow_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 44), @@ -5553,14 +5555,14 @@ static const union AnimCmd sAnim_ABOMASNOW_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WEAVILE_1[] = +static const union AnimCmd sAnim_Weavile_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), ANIMCMD_END, }; -static const union AnimCmd sAnim_MAGNEZONE_1[] = +static const union AnimCmd sAnim_Magnezone_1[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), @@ -5570,7 +5572,7 @@ static const union AnimCmd sAnim_MAGNEZONE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LICKILICKY_1[] = +static const union AnimCmd sAnim_Lickilicky_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -5584,7 +5586,7 @@ static const union AnimCmd sAnim_LICKILICKY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RHYPERIOR_1[] = +static const union AnimCmd sAnim_Rhyperior_1[] = { ANIMCMD_FRAME(0, 50), ANIMCMD_FRAME(1, 25), @@ -5594,7 +5596,7 @@ static const union AnimCmd sAnim_RHYPERIOR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TANGROWTH_1[] = +static const union AnimCmd sAnim_Tangrowth_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -5606,7 +5608,7 @@ static const union AnimCmd sAnim_TANGROWTH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ELECTIVIRE_1[] = +static const union AnimCmd sAnim_Electivire_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 15), @@ -5614,14 +5616,14 @@ static const union AnimCmd sAnim_ELECTIVIRE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAGMORTAR_1[] = +static const union AnimCmd sAnim_Magmortar_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TOGEKISS_1[] = +static const union AnimCmd sAnim_Togekiss_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -5633,7 +5635,7 @@ static const union AnimCmd sAnim_TOGEKISS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_YANMEGA_1[] = +static const union AnimCmd sAnim_Yanmega_1[] = { ANIMCMD_FRAME(1, 3), ANIMCMD_FRAME(0, 3), @@ -5664,7 +5666,7 @@ static const union AnimCmd sAnim_YANMEGA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LEAFEON_1[] = +static const union AnimCmd sAnim_Leafeon_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 20), @@ -5672,7 +5674,7 @@ static const union AnimCmd sAnim_LEAFEON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GLACEON_1[] = +static const union AnimCmd sAnim_Glaceon_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -5680,7 +5682,7 @@ static const union AnimCmd sAnim_GLACEON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GLISCOR_1[] = +static const union AnimCmd sAnim_Gliscor_1[] = { ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 30), @@ -5689,7 +5691,7 @@ static const union AnimCmd sAnim_GLISCOR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MAMOSWINE_1[] = +static const union AnimCmd sAnim_Mamoswine_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -5706,14 +5708,14 @@ static const union AnimCmd sAnim_PORYGON_Z_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GALLADE_1[] = +static const union AnimCmd sAnim_Gallade_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_PROBOPASS_1[] = +static const union AnimCmd sAnim_Probopass_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -5723,7 +5725,7 @@ static const union AnimCmd sAnim_PROBOPASS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PROBOPASS_2[] = +static const union AnimCmd sAnim_Probopass_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -5732,7 +5734,7 @@ static const union AnimCmd sAnim_PROBOPASS_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DUSKNOIR_1[] = +static const union AnimCmd sAnim_Dusknoir_1[] = { ANIMCMD_FRAME(1, 9), ANIMCMD_FRAME(0, 9), @@ -5747,7 +5749,7 @@ static const union AnimCmd sAnim_DUSKNOIR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FROSLASS_1[] = +static const union AnimCmd sAnim_Froslass_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 30), @@ -5755,7 +5757,7 @@ static const union AnimCmd sAnim_FROSLASS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ROTOM_1[] = +static const union AnimCmd sAnim_Rotom_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -5765,7 +5767,7 @@ static const union AnimCmd sAnim_ROTOM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ROTOM_2[] = +static const union AnimCmd sAnim_Rotom_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -5839,7 +5841,7 @@ static const union AnimCmd sAnim_RotomMow_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UXIE_1[] = +static const union AnimCmd sAnim_Uxie_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 50), @@ -5847,7 +5849,7 @@ static const union AnimCmd sAnim_UXIE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MESPRIT_1[] = +static const union AnimCmd sAnim_Mesprit_1[] = { ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(0, 12), @@ -5860,7 +5862,7 @@ static const union AnimCmd sAnim_MESPRIT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AZELF_1[] = +static const union AnimCmd sAnim_Azelf_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 30), @@ -5868,21 +5870,21 @@ static const union AnimCmd sAnim_AZELF_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DIALGA_1[] = +static const union AnimCmd sAnim_Dialga_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_PALKIA_1[] = +static const union AnimCmd sAnim_Palkia_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_HEATRAN_1[] = +static const union AnimCmd sAnim_Heatran_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 30), @@ -5890,14 +5892,14 @@ static const union AnimCmd sAnim_HEATRAN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_REGIGIGAS_1[] = +static const union AnimCmd sAnim_Regigigas_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_GIRATINA_1[] = +static const union AnimCmd sAnim_Giratina_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -5905,7 +5907,7 @@ static const union AnimCmd sAnim_GIRATINA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CRESSELIA_1[] = +static const union AnimCmd sAnim_Cresselia_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -5916,7 +5918,7 @@ static const union AnimCmd sAnim_CRESSELIA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PHIONE_1[] = +static const union AnimCmd sAnim_Phione_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -5924,7 +5926,7 @@ static const union AnimCmd sAnim_PHIONE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MANAPHY_1[] = +static const union AnimCmd sAnim_Manaphy_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 50), @@ -5932,7 +5934,7 @@ static const union AnimCmd sAnim_MANAPHY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DARKRAI_1[] = +static const union AnimCmd sAnim_Darkrai_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 30), @@ -5940,7 +5942,7 @@ static const union AnimCmd sAnim_DARKRAI_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SHAYMIN_1[] = +static const union AnimCmd sAnim_Shaymin_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -5948,7 +5950,7 @@ static const union AnimCmd sAnim_SHAYMIN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ARCEUS_1[] = +static const union AnimCmd sAnim_Arceus_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -5956,9 +5958,8 @@ static const union AnimCmd sAnim_ARCEUS_1[] = ANIMCMD_END, }; #endif - #if P_GEN_5_POKEMON == TRUE -static const union AnimCmd sAnim_VICTINI_1[] = +static const union AnimCmd sAnim_Victini_1[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(1, 46), @@ -5966,7 +5967,7 @@ static const union AnimCmd sAnim_VICTINI_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SNIVY_1[] = +static const union AnimCmd sAnim_Snivy_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -5974,7 +5975,7 @@ static const union AnimCmd sAnim_SNIVY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SERVINE_1[] = +static const union AnimCmd sAnim_Servine_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -5986,7 +5987,7 @@ static const union AnimCmd sAnim_SERVINE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SERPERIOR_1[] = +static const union AnimCmd sAnim_Serperior_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -5996,7 +5997,7 @@ static const union AnimCmd sAnim_SERPERIOR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SERPERIOR_2[] = +static const union AnimCmd sAnim_Serperior_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -6005,7 +6006,7 @@ static const union AnimCmd sAnim_SERPERIOR_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TEPIG_1[] = +static const union AnimCmd sAnim_Tepig_1[] = { ANIMCMD_FRAME(0, 27), ANIMCMD_FRAME(1, 6), @@ -6015,7 +6016,7 @@ static const union AnimCmd sAnim_TEPIG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PIGNITE_1[] = +static const union AnimCmd sAnim_Pignite_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -6023,7 +6024,7 @@ static const union AnimCmd sAnim_PIGNITE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_EMBOAR_1[] = +static const union AnimCmd sAnim_Emboar_1[] = { ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(0, 4), @@ -6050,7 +6051,7 @@ static const union AnimCmd sAnim_EMBOAR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_OSHAWOTT_1[] = +static const union AnimCmd sAnim_Oshawott_1[] = { ANIMCMD_FRAME(0, 13), ANIMCMD_FRAME(1, 7), @@ -6062,7 +6063,7 @@ static const union AnimCmd sAnim_OSHAWOTT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DEWOTT_1[] = +static const union AnimCmd sAnim_Dewott_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 35), @@ -6072,21 +6073,21 @@ static const union AnimCmd sAnim_DEWOTT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SAMUROTT_1[] = +static const union AnimCmd sAnim_Samurott_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_PATRAT_1[] = +static const union AnimCmd sAnim_Patrat_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_WATCHOG_1[] = +static const union AnimCmd sAnim_Watchog_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -6098,7 +6099,7 @@ static const union AnimCmd sAnim_WATCHOG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LILLIPUP_1[] = +static const union AnimCmd sAnim_Lillipup_1[] = { ANIMCMD_FRAME(0, 13), ANIMCMD_FRAME(1, 7), @@ -6110,7 +6111,7 @@ static const union AnimCmd sAnim_LILLIPUP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HERDIER_1[] = +static const union AnimCmd sAnim_Herdier_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -6121,7 +6122,7 @@ static const union AnimCmd sAnim_HERDIER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_STOUTLAND_1[] = +static const union AnimCmd sAnim_Stoutland_1[] = { ANIMCMD_FRAME(0, 27), ANIMCMD_FRAME(1, 6), @@ -6131,7 +6132,7 @@ static const union AnimCmd sAnim_STOUTLAND_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PURRLOIN_1[] = +static const union AnimCmd sAnim_Purrloin_1[] = { ANIMCMD_FRAME(0, 9), ANIMCMD_FRAME(1, 54), @@ -6139,7 +6140,7 @@ static const union AnimCmd sAnim_PURRLOIN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LIEPARD_1[] = +static const union AnimCmd sAnim_Liepard_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -6147,7 +6148,7 @@ static const union AnimCmd sAnim_LIEPARD_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PANSAGE_1[] = +static const union AnimCmd sAnim_Pansage_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 8), @@ -6157,7 +6158,7 @@ static const union AnimCmd sAnim_PANSAGE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SIMISAGE_1[] = +static const union AnimCmd sAnim_Simisage_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -6165,14 +6166,14 @@ static const union AnimCmd sAnim_SIMISAGE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PANSEAR_1[] = +static const union AnimCmd sAnim_Pansear_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_SIMISEAR_1[] = +static const union AnimCmd sAnim_Simisear_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -6182,7 +6183,7 @@ static const union AnimCmd sAnim_SIMISEAR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SIMISEAR_2[] = +static const union AnimCmd sAnim_Simisear_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -6191,7 +6192,7 @@ static const union AnimCmd sAnim_SIMISEAR_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PANPOUR_1[] = +static const union AnimCmd sAnim_Panpour_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -6199,14 +6200,14 @@ static const union AnimCmd sAnim_PANPOUR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SIMIPOUR_1[] = +static const union AnimCmd sAnim_Simipour_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), ANIMCMD_END, }; -static const union AnimCmd sAnim_MUNNA_1[] = +static const union AnimCmd sAnim_Munna_1[] = { ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(0, 12), @@ -6219,7 +6220,7 @@ static const union AnimCmd sAnim_MUNNA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MUSHARNA_1[] = +static const union AnimCmd sAnim_Musharna_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -6229,7 +6230,7 @@ static const union AnimCmd sAnim_MUSHARNA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MUSHARNA_2[] = +static const union AnimCmd sAnim_Musharna_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -6238,7 +6239,7 @@ static const union AnimCmd sAnim_MUSHARNA_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PIDOVE_1[] = +static const union AnimCmd sAnim_Pidove_1[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(1, 46), @@ -6246,7 +6247,7 @@ static const union AnimCmd sAnim_PIDOVE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TRANQUILL_1[] = +static const union AnimCmd sAnim_Tranquill_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -6254,7 +6255,7 @@ static const union AnimCmd sAnim_TRANQUILL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_UNFEZANT_1[] = +static const union AnimCmd sAnim_Unfezant_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 20), @@ -6262,7 +6263,7 @@ static const union AnimCmd sAnim_UNFEZANT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BLITZLE_1[] = +static const union AnimCmd sAnim_Blitzle_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -6273,7 +6274,7 @@ static const union AnimCmd sAnim_BLITZLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ZEBSTRIKA_1[] = +static const union AnimCmd sAnim_Zebstrika_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -6281,7 +6282,7 @@ static const union AnimCmd sAnim_ZEBSTRIKA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ROGGENROLA_1[] = +static const union AnimCmd sAnim_Roggenrola_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -6289,7 +6290,7 @@ static const union AnimCmd sAnim_ROGGENROLA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BOLDORE_1[] = +static const union AnimCmd sAnim_Boldore_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -6300,7 +6301,7 @@ static const union AnimCmd sAnim_BOLDORE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GIGALITH_1[] = +static const union AnimCmd sAnim_Gigalith_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -6308,7 +6309,7 @@ static const union AnimCmd sAnim_GIGALITH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WOOBAT_1[] = +static const union AnimCmd sAnim_Woobat_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -6332,7 +6333,7 @@ static const union AnimCmd sAnim_WOOBAT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SWOOBAT_1[] = +static const union AnimCmd sAnim_Swoobat_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -6343,7 +6344,7 @@ static const union AnimCmd sAnim_SWOOBAT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DRILBUR_1[] = +static const union AnimCmd sAnim_Drilbur_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -6353,7 +6354,7 @@ static const union AnimCmd sAnim_DRILBUR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DRILBUR_2[] = +static const union AnimCmd sAnim_Drilbur_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -6362,7 +6363,7 @@ static const union AnimCmd sAnim_DRILBUR_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_EXCADRILL_1[] = +static const union AnimCmd sAnim_Excadrill_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 15), @@ -6371,7 +6372,7 @@ static const union AnimCmd sAnim_EXCADRILL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AUDINO_1[] = +static const union AnimCmd sAnim_Audino_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -6379,7 +6380,7 @@ static const union AnimCmd sAnim_AUDINO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TIMBURR_1[] = +static const union AnimCmd sAnim_Timburr_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -6387,7 +6388,7 @@ static const union AnimCmd sAnim_TIMBURR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GURDURR_1[] = +static const union AnimCmd sAnim_Gurdurr_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -6399,21 +6400,21 @@ static const union AnimCmd sAnim_GURDURR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CONKELDURR_1[] = +static const union AnimCmd sAnim_Conkeldurr_1[] = { ANIMCMD_FRAME(1, 45), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_TYMPOLE_1[] = +static const union AnimCmd sAnim_Tympole_1[] = { ANIMCMD_FRAME(1, 35), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_PALPITOAD_1[] = +static const union AnimCmd sAnim_Palpitoad_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 8), @@ -6423,7 +6424,7 @@ static const union AnimCmd sAnim_PALPITOAD_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SEISMITOAD_1[] = +static const union AnimCmd sAnim_Seismitoad_1[] = { ANIMCMD_FRAME(0, 13), ANIMCMD_FRAME(1, 7), @@ -6435,7 +6436,7 @@ static const union AnimCmd sAnim_SEISMITOAD_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_THROH_1[] = +static const union AnimCmd sAnim_Throh_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -6444,14 +6445,14 @@ static const union AnimCmd sAnim_THROH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SAWK_1[] = +static const union AnimCmd sAnim_Sawk_1[] = { ANIMCMD_FRAME(1, 45), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_SEWADDLE_1[] = +static const union AnimCmd sAnim_Sewaddle_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -6461,7 +6462,7 @@ static const union AnimCmd sAnim_SEWADDLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SEWADDLE_2[] = +static const union AnimCmd sAnim_Sewaddle_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -6470,7 +6471,7 @@ static const union AnimCmd sAnim_SEWADDLE_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SWADLOON_1[] = +static const union AnimCmd sAnim_Swadloon_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -6479,7 +6480,7 @@ static const union AnimCmd sAnim_SWADLOON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LEAVANNY_1[] = +static const union AnimCmd sAnim_Leavanny_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -6487,7 +6488,7 @@ static const union AnimCmd sAnim_LEAVANNY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VENIPEDE_1[] = +static const union AnimCmd sAnim_Venipede_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 15), @@ -6499,7 +6500,7 @@ static const union AnimCmd sAnim_VENIPEDE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WHIRLIPEDE_1[] = +static const union AnimCmd sAnim_Whirlipede_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -6510,14 +6511,14 @@ static const union AnimCmd sAnim_WHIRLIPEDE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SCOLIPEDE_1[] = +static const union AnimCmd sAnim_Scolipede_1[] = { ANIMCMD_FRAME(1, 45), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_COTTONEE_1[] = +static const union AnimCmd sAnim_Cottonee_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -6531,7 +6532,7 @@ static const union AnimCmd sAnim_COTTONEE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_WHIMSICOTT_1[] = +static const union AnimCmd sAnim_Whimsicott_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 20), @@ -6539,7 +6540,7 @@ static const union AnimCmd sAnim_WHIMSICOTT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PETILIL_1[] = +static const union AnimCmd sAnim_Petilil_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -6549,7 +6550,7 @@ static const union AnimCmd sAnim_PETILIL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LILLIGANT_1[] = +static const union AnimCmd sAnim_Lilligant_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -6557,7 +6558,7 @@ static const union AnimCmd sAnim_LILLIGANT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BASCULIN_1[] = +static const union AnimCmd sAnim_Basculin_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -6568,7 +6569,7 @@ static const union AnimCmd sAnim_BASCULIN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SANDILE_1[] = +static const union AnimCmd sAnim_Sandile_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -6576,14 +6577,14 @@ static const union AnimCmd sAnim_SANDILE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KROKOROK_1[] = +static const union AnimCmd sAnim_Krokorok_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_KROOKODILE_1[] = +static const union AnimCmd sAnim_Krookodile_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -6593,7 +6594,7 @@ static const union AnimCmd sAnim_KROOKODILE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KROOKODILE_2[] = +static const union AnimCmd sAnim_Krookodile_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -6602,7 +6603,7 @@ static const union AnimCmd sAnim_KROOKODILE_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DARUMAKA_1[] = +static const union AnimCmd sAnim_Darumaka_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 50), @@ -6610,7 +6611,7 @@ static const union AnimCmd sAnim_DARUMAKA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DARMANITAN_1[] = +static const union AnimCmd sAnim_Darmanitan_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -6619,7 +6620,7 @@ static const union AnimCmd sAnim_DARMANITAN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MARACTUS_1[] = +static const union AnimCmd sAnim_Maractus_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -6631,7 +6632,7 @@ static const union AnimCmd sAnim_MARACTUS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DWEBBLE_1[] = +static const union AnimCmd sAnim_Dwebble_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -6645,7 +6646,7 @@ static const union AnimCmd sAnim_DWEBBLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CRUSTLE_1[] = +static const union AnimCmd sAnim_Crustle_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -6656,7 +6657,7 @@ static const union AnimCmd sAnim_CRUSTLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SCRAGGY_1[] = +static const union AnimCmd sAnim_Scraggy_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 35), @@ -6664,7 +6665,7 @@ static const union AnimCmd sAnim_SCRAGGY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SCRAFTY_1[] = +static const union AnimCmd sAnim_Scrafty_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -6672,7 +6673,7 @@ static const union AnimCmd sAnim_SCRAFTY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SIGILYPH_1[] = +static const union AnimCmd sAnim_Sigilyph_1[] = { ANIMCMD_FRAME(1, 7), ANIMCMD_FRAME(0, 7), @@ -6685,7 +6686,7 @@ static const union AnimCmd sAnim_SIGILYPH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_YAMASK_1[] = +static const union AnimCmd sAnim_Yamask_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 20), @@ -6695,7 +6696,7 @@ static const union AnimCmd sAnim_YAMASK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_COFAGRIGUS_1[] = +static const union AnimCmd sAnim_Cofagrigus_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 30), @@ -6703,7 +6704,7 @@ static const union AnimCmd sAnim_COFAGRIGUS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TIRTOUGA_1[] = +static const union AnimCmd sAnim_Tirtouga_1[] = { ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 30), @@ -6712,7 +6713,7 @@ static const union AnimCmd sAnim_TIRTOUGA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CARRACOSTA_1[] = +static const union AnimCmd sAnim_Carracosta_1[] = { ANIMCMD_FRAME(1, 35), ANIMCMD_FRAME(0, 10), @@ -6727,7 +6728,7 @@ static const union AnimCmd sAnim_CARRACOSTA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ARCHEN_1[] = +static const union AnimCmd sAnim_Archen_1[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(1, 46), @@ -6735,7 +6736,7 @@ static const union AnimCmd sAnim_ARCHEN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ARCHEOPS_1[] = +static const union AnimCmd sAnim_Archeops_1[] = { ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(0, 12), @@ -6748,7 +6749,7 @@ static const union AnimCmd sAnim_ARCHEOPS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TRUBBISH_1[] = +static const union AnimCmd sAnim_Trubbish_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -6756,7 +6757,7 @@ static const union AnimCmd sAnim_TRUBBISH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GARBODOR_1[] = +static const union AnimCmd sAnim_Garbodor_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 35), @@ -6764,7 +6765,7 @@ static const union AnimCmd sAnim_GARBODOR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ZORUA_1[] = +static const union AnimCmd sAnim_Zorua_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -6774,7 +6775,7 @@ static const union AnimCmd sAnim_ZORUA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ZOROARK_1[] = +static const union AnimCmd sAnim_Zoroark_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 18), @@ -6784,7 +6785,7 @@ static const union AnimCmd sAnim_ZOROARK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MINCCINO_1[] = +static const union AnimCmd sAnim_Minccino_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -6792,7 +6793,7 @@ static const union AnimCmd sAnim_MINCCINO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CINCCINO_1[] = +static const union AnimCmd sAnim_Cinccino_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -6802,7 +6803,7 @@ static const union AnimCmd sAnim_CINCCINO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOTHITA_1[] = +static const union AnimCmd sAnim_Gothita_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -6811,7 +6812,7 @@ static const union AnimCmd sAnim_GOTHITA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOTHORITA_1[] = +static const union AnimCmd sAnim_Gothorita_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -6821,7 +6822,7 @@ static const union AnimCmd sAnim_GOTHORITA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOTHORITA_2[] = +static const union AnimCmd sAnim_Gothorita_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -6830,7 +6831,7 @@ static const union AnimCmd sAnim_GOTHORITA_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOTHITELLE_1[] = +static const union AnimCmd sAnim_Gothitelle_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -6839,7 +6840,7 @@ static const union AnimCmd sAnim_GOTHITELLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SOLOSIS_1[] = +static const union AnimCmd sAnim_Solosis_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -6848,7 +6849,7 @@ static const union AnimCmd sAnim_SOLOSIS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DUOSION_1[] = +static const union AnimCmd sAnim_Duosion_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -6857,7 +6858,7 @@ static const union AnimCmd sAnim_DUOSION_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_REUNICLUS_1[] = +static const union AnimCmd sAnim_Reuniclus_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 20), @@ -6867,7 +6868,7 @@ static const union AnimCmd sAnim_REUNICLUS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DUCKLETT_1[] = +static const union AnimCmd sAnim_Ducklett_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -6879,14 +6880,14 @@ static const union AnimCmd sAnim_DUCKLETT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SWANNA_1[] = +static const union AnimCmd sAnim_Swanna_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_VANILLITE_1[] = +static const union AnimCmd sAnim_Vanillite_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -6896,7 +6897,7 @@ static const union AnimCmd sAnim_VANILLITE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VANILLISH_1[] = +static const union AnimCmd sAnim_Vanillish_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -6904,7 +6905,7 @@ static const union AnimCmd sAnim_VANILLISH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VANILLUXE_1[] = +static const union AnimCmd sAnim_Vanilluxe_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -6912,14 +6913,14 @@ static const union AnimCmd sAnim_VANILLUXE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DEERLING_1[] = +static const union AnimCmd sAnim_Deerling_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), ANIMCMD_END, }; -static const union AnimCmd sAnim_SAWSBUCK_1[] = +static const union AnimCmd sAnim_Sawsbuck_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -6927,7 +6928,7 @@ static const union AnimCmd sAnim_SAWSBUCK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_EMOLGA_1[] = +static const union AnimCmd sAnim_Emolga_1[] = { ANIMCMD_FRAME(0, 21), ANIMCMD_FRAME(1, 45), @@ -6936,14 +6937,14 @@ static const union AnimCmd sAnim_EMOLGA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KARRABLAST_1[] = +static const union AnimCmd sAnim_Karrablast_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_ESCAVALIER_1[] = +static const union AnimCmd sAnim_Escavalier_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -6951,7 +6952,7 @@ static const union AnimCmd sAnim_ESCAVALIER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FOONGUS_1[] = +static const union AnimCmd sAnim_Foongus_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -6961,7 +6962,7 @@ static const union AnimCmd sAnim_FOONGUS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FOONGUS_2[] = +static const union AnimCmd sAnim_Foongus_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -6970,7 +6971,7 @@ static const union AnimCmd sAnim_FOONGUS_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AMOONGUSS_1[] = +static const union AnimCmd sAnim_Amoonguss_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -6981,7 +6982,7 @@ static const union AnimCmd sAnim_AMOONGUSS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FRILLISH_1[] = +static const union AnimCmd sAnim_Frillish_1[] = { ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 30), @@ -6990,7 +6991,7 @@ static const union AnimCmd sAnim_FRILLISH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_JELLICENT_1[] = +static const union AnimCmd sAnim_Jellicent_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 30), @@ -7000,7 +7001,7 @@ static const union AnimCmd sAnim_JELLICENT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ALOMOMOLA_1[] = +static const union AnimCmd sAnim_Alomomola_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 50), @@ -7008,7 +7009,7 @@ static const union AnimCmd sAnim_ALOMOMOLA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_JOLTIK_1[] = +static const union AnimCmd sAnim_Joltik_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -7018,7 +7019,7 @@ static const union AnimCmd sAnim_JOLTIK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GALVANTULA_1[] = +static const union AnimCmd sAnim_Galvantula_1[] = { ANIMCMD_FRAME(1, 6), ANIMCMD_FRAME(0, 6), @@ -7031,7 +7032,7 @@ static const union AnimCmd sAnim_GALVANTULA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FERROSEED_1[] = +static const union AnimCmd sAnim_Ferroseed_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 35), @@ -7041,7 +7042,7 @@ static const union AnimCmd sAnim_FERROSEED_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FERROTHORN_1[] = +static const union AnimCmd sAnim_Ferrothorn_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -7051,7 +7052,7 @@ static const union AnimCmd sAnim_FERROTHORN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FERROTHORN_2[] = +static const union AnimCmd sAnim_Ferrothorn_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -7060,7 +7061,7 @@ static const union AnimCmd sAnim_FERROTHORN_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KLINK_1[] = +static const union AnimCmd sAnim_Klink_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -7069,7 +7070,7 @@ static const union AnimCmd sAnim_KLINK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KLANG_1[] = +static const union AnimCmd sAnim_Klang_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -7078,7 +7079,7 @@ static const union AnimCmd sAnim_KLANG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KLINKLANG_1[] = +static const union AnimCmd sAnim_Klinklang_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -7087,7 +7088,7 @@ static const union AnimCmd sAnim_KLINKLANG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TYNAMO_1[] = +static const union AnimCmd sAnim_Tynamo_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -7108,7 +7109,7 @@ static const union AnimCmd sAnim_TYNAMO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_EELEKTRIK_1[] = +static const union AnimCmd sAnim_Eelektrik_1[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 25), @@ -7118,7 +7119,7 @@ static const union AnimCmd sAnim_EELEKTRIK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_EELEKTROSS_1[] = +static const union AnimCmd sAnim_Eelektross_1[] = { ANIMCMD_FRAME(1, 27), ANIMCMD_FRAME(0, 27), @@ -7129,7 +7130,7 @@ static const union AnimCmd sAnim_EELEKTROSS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ELGYEM_1[] = +static const union AnimCmd sAnim_Elgyem_1[] = { ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(0, 12), @@ -7142,14 +7143,14 @@ static const union AnimCmd sAnim_ELGYEM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BEHEEYEM_1[] = +static const union AnimCmd sAnim_Beheeyem_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_LITWICK_1[] = +static const union AnimCmd sAnim_Litwick_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -7158,7 +7159,7 @@ static const union AnimCmd sAnim_LITWICK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LAMPENT_1[] = +static const union AnimCmd sAnim_Lampent_1[] = { ANIMCMD_FRAME(1, 25), ANIMCMD_FRAME(0, 25), @@ -7167,7 +7168,7 @@ static const union AnimCmd sAnim_LAMPENT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHANDELURE_1[] = +static const union AnimCmd sAnim_Chandelure_1[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_FRAME(1, 30), @@ -7175,21 +7176,21 @@ static const union AnimCmd sAnim_CHANDELURE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AXEW_1[] = +static const union AnimCmd sAnim_Axew_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_FRAXURE_1[] = +static const union AnimCmd sAnim_Fraxure_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), ANIMCMD_END, }; -static const union AnimCmd sAnim_HAXORUS_1[] = +static const union AnimCmd sAnim_Haxorus_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 20), @@ -7198,7 +7199,7 @@ static const union AnimCmd sAnim_HAXORUS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CUBCHOO_1[] = +static const union AnimCmd sAnim_Cubchoo_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -7206,7 +7207,7 @@ static const union AnimCmd sAnim_CUBCHOO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BEARTIC_1[] = +static const union AnimCmd sAnim_Beartic_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 20), @@ -7215,7 +7216,7 @@ static const union AnimCmd sAnim_BEARTIC_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CRYOGONAL_1[] = +static const union AnimCmd sAnim_Cryogonal_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -7225,7 +7226,7 @@ static const union AnimCmd sAnim_CRYOGONAL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CRYOGONAL_2[] = +static const union AnimCmd sAnim_Cryogonal_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -7234,7 +7235,7 @@ static const union AnimCmd sAnim_CRYOGONAL_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SHELMET_1[] = +static const union AnimCmd sAnim_Shelmet_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -7244,28 +7245,28 @@ static const union AnimCmd sAnim_SHELMET_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ACCELGOR_1[] = +static const union AnimCmd sAnim_Accelgor_1[] = { ANIMCMD_FRAME(1, 35), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_STUNFISK_1[] = +static const union AnimCmd sAnim_Stunfisk_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_MIENFOO_1[] = +static const union AnimCmd sAnim_Mienfoo_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_MIENSHAO_1[] = +static const union AnimCmd sAnim_Mienshao_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -7277,7 +7278,7 @@ static const union AnimCmd sAnim_MIENSHAO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DRUDDIGON_1[] = +static const union AnimCmd sAnim_Druddigon_1[] = { ANIMCMD_FRAME(0, 22), ANIMCMD_FRAME(1, 22), @@ -7289,7 +7290,7 @@ static const union AnimCmd sAnim_DRUDDIGON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOLETT_1[] = +static const union AnimCmd sAnim_Golett_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 44), @@ -7297,14 +7298,14 @@ static const union AnimCmd sAnim_GOLETT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOLURK_1[] = +static const union AnimCmd sAnim_Golurk_1[] = { ANIMCMD_FRAME(1, 45), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_PAWNIARD_1[] = +static const union AnimCmd sAnim_Pawniard_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -7317,14 +7318,14 @@ static const union AnimCmd sAnim_PAWNIARD_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BISHARP_1[] = +static const union AnimCmd sAnim_Bisharp_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), ANIMCMD_END, }; -static const union AnimCmd sAnim_BOUFFALANT_1[] = +static const union AnimCmd sAnim_Bouffalant_1[] = { ANIMCMD_FRAME(0, 28), ANIMCMD_FRAME(1, 32), @@ -7332,7 +7333,7 @@ static const union AnimCmd sAnim_BOUFFALANT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RUFFLET_1[] = +static const union AnimCmd sAnim_Rufflet_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 10), @@ -7342,7 +7343,7 @@ static const union AnimCmd sAnim_RUFFLET_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BRAVIARY_1[] = +static const union AnimCmd sAnim_Braviary_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -7350,7 +7351,7 @@ static const union AnimCmd sAnim_BRAVIARY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VULLABY_1[] = +static const union AnimCmd sAnim_Vullaby_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -7358,7 +7359,7 @@ static const union AnimCmd sAnim_VULLABY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MANDIBUZZ_1[] = +static const union AnimCmd sAnim_Mandibuzz_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -7366,14 +7367,14 @@ static const union AnimCmd sAnim_MANDIBUZZ_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HEATMOR_1[] = +static const union AnimCmd sAnim_Heatmor_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_DURANT_1[] = +static const union AnimCmd sAnim_Durant_1[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(1, 2), @@ -7395,7 +7396,7 @@ static const union AnimCmd sAnim_DURANT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DEINO_1[] = +static const union AnimCmd sAnim_Deino_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -7403,14 +7404,14 @@ static const union AnimCmd sAnim_DEINO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ZWEILOUS_1[] = +static const union AnimCmd sAnim_Zweilous_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_HYDREIGON_1[] = +static const union AnimCmd sAnim_Hydreigon_1[] = { ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(0, 12), @@ -7423,7 +7424,7 @@ static const union AnimCmd sAnim_HYDREIGON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LARVESTA_1[] = +static const union AnimCmd sAnim_Larvesta_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -7439,7 +7440,7 @@ static const union AnimCmd sAnim_LARVESTA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VOLCARONA_1[] = +static const union AnimCmd sAnim_Volcarona_1[] = { ANIMCMD_FRAME(1, 25), ANIMCMD_FRAME(0, 25), @@ -7448,7 +7449,7 @@ static const union AnimCmd sAnim_VOLCARONA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_COBALION_1[] = +static const union AnimCmd sAnim_Cobalion_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -7456,7 +7457,7 @@ static const union AnimCmd sAnim_COBALION_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TERRAKION_1[] = +static const union AnimCmd sAnim_Terrakion_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -7468,7 +7469,7 @@ static const union AnimCmd sAnim_TERRAKION_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TERRAKION_2[] = +static const union AnimCmd sAnim_Terrakion_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -7477,14 +7478,14 @@ static const union AnimCmd sAnim_TERRAKION_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VIRIZION_1[] = +static const union AnimCmd sAnim_Virizion_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_TORNADUS_1[] = +static const union AnimCmd sAnim_Tornadus_1[] = { ANIMCMD_FRAME(1, 2), ANIMCMD_FRAME(0, 2), @@ -7511,7 +7512,7 @@ static const union AnimCmd sAnim_TORNADUS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_THUNDURUS_1[] = +static const union AnimCmd sAnim_Thundurus_1[] = { ANIMCMD_FRAME(1, 2), ANIMCMD_FRAME(0, 2), @@ -7538,21 +7539,21 @@ static const union AnimCmd sAnim_THUNDURUS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_RESHIRAM_1[] = +static const union AnimCmd sAnim_Reshiram_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_ZEKROM_1[] = +static const union AnimCmd sAnim_Zekrom_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_LANDORUS_1[] = +static const union AnimCmd sAnim_Landorus_1[] = { ANIMCMD_FRAME(1, 2), ANIMCMD_FRAME(0, 2), @@ -7579,7 +7580,7 @@ static const union AnimCmd sAnim_LANDORUS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KYUREM_1[] = +static const union AnimCmd sAnim_Kyurem_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 20), @@ -7588,14 +7589,14 @@ static const union AnimCmd sAnim_KYUREM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KELDEO_1[] = +static const union AnimCmd sAnim_Keldeo_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_MELOETTA_1[] = +static const union AnimCmd sAnim_Meloetta_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 45), @@ -7607,7 +7608,7 @@ static const union AnimCmd sAnim_MELOETTA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MELOETTA_2[] = +static const union AnimCmd sAnim_Meloetta_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -7616,7 +7617,7 @@ static const union AnimCmd sAnim_MELOETTA_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GENESECT_1[] = +static const union AnimCmd sAnim_Genesect_1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), @@ -7629,9 +7630,8 @@ static const union AnimCmd sAnim_GENESECT_1[] = ANIMCMD_END, }; #endif - #if P_GEN_6_POKEMON == TRUE -static const union AnimCmd sAnim_CHESPIN_1[] = +static const union AnimCmd sAnim_Chespin_1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 24), @@ -7641,7 +7641,7 @@ static const union AnimCmd sAnim_CHESPIN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_QUILLADIN_1[] = +static const union AnimCmd sAnim_Quilladin_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -7651,7 +7651,7 @@ static const union AnimCmd sAnim_QUILLADIN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_QUILLADIN_2[] = +static const union AnimCmd sAnim_Quilladin_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -7660,7 +7660,7 @@ static const union AnimCmd sAnim_QUILLADIN_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CHESNAUGHT_1[] = +static const union AnimCmd sAnim_Chesnaught_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 40), @@ -7668,7 +7668,7 @@ static const union AnimCmd sAnim_CHESNAUGHT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FENNEKIN_1[] = +static const union AnimCmd sAnim_Fennekin_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -7680,7 +7680,7 @@ static const union AnimCmd sAnim_FENNEKIN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BRAIXEN_1[] = +static const union AnimCmd sAnim_Braixen_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -7688,7 +7688,7 @@ static const union AnimCmd sAnim_BRAIXEN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DELPHOX_1[] = +static const union AnimCmd sAnim_Delphox_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -7700,7 +7700,7 @@ static const union AnimCmd sAnim_DELPHOX_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FROAKIE_1[] = +static const union AnimCmd sAnim_Froakie_1[] = { ANIMCMD_FRAME(0, 13), ANIMCMD_FRAME(1, 7), @@ -7712,21 +7712,21 @@ static const union AnimCmd sAnim_FROAKIE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FROGADIER_1[] = +static const union AnimCmd sAnim_Frogadier_1[] = { ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 30), ANIMCMD_END, }; -static const union AnimCmd sAnim_GRENINJA_1[] = +static const union AnimCmd sAnim_Greninja_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_GRENINJA_ASH_1[] = +static const union AnimCmd sAnim_GreninjaAsh_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 15), @@ -7736,7 +7736,7 @@ static const union AnimCmd sAnim_GRENINJA_ASH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BUNNELBY_1[] = +static const union AnimCmd sAnim_Bunnelby_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -7745,14 +7745,14 @@ static const union AnimCmd sAnim_BUNNELBY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DIGGERSBY_1[] = +static const union AnimCmd sAnim_Diggersby_1[] = { ANIMCMD_FRAME(1, 35), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -static const union AnimCmd sAnim_FLETCHLING_1[] = +static const union AnimCmd sAnim_Fletchling_1[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_FRAME(1, 50), @@ -7760,7 +7760,7 @@ static const union AnimCmd sAnim_FLETCHLING_1[] = ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_FLETCHINDER_1[] = +static const union AnimCmd sAnim_Fletchinder_1[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(1, 2), @@ -7782,7 +7782,7 @@ static const union AnimCmd sAnim_FLETCHINDER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TALONFLAME_1[] = +static const union AnimCmd sAnim_Talonflame_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 20), @@ -7792,7 +7792,7 @@ static const union AnimCmd sAnim_TALONFLAME_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TALONFLAME_2[] = +static const union AnimCmd sAnim_Talonflame_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -7801,7 +7801,7 @@ static const union AnimCmd sAnim_TALONFLAME_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SCATTERBUG_1[] = +static const union AnimCmd sAnim_Scatterbug_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 10), @@ -7811,7 +7811,7 @@ static const union AnimCmd sAnim_SCATTERBUG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SPEWPA_1[] = +static const union AnimCmd sAnim_Spewpa_1[] = { ANIMCMD_FRAME(0, 18), ANIMCMD_FRAME(1, 18), @@ -7821,7 +7821,7 @@ static const union AnimCmd sAnim_SPEWPA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VIVILLON_1[] = +static const union AnimCmd sAnim_Vivillon_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -7833,7 +7833,7 @@ static const union AnimCmd sAnim_VIVILLON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LITLEO_1[] = +static const union AnimCmd sAnim_Litleo_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -7841,14 +7841,14 @@ static const union AnimCmd sAnim_LITLEO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PYROAR_1[] = +static const union AnimCmd sAnim_Pyroar_1[] = { ANIMCMD_FRAME(1, 45), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_FLABEBE_1[] = +static const union AnimCmd sAnim_Flabebe_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -7858,7 +7858,7 @@ static const union AnimCmd sAnim_FLABEBE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FLABEBE_2[] = +static const union AnimCmd sAnim_Flabebe_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -7867,7 +7867,7 @@ static const union AnimCmd sAnim_FLABEBE_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FLOETTE_1[] = +static const union AnimCmd sAnim_Floette_1[] = { ANIMCMD_FRAME(0, 33), ANIMCMD_FRAME(1, 33), @@ -7877,7 +7877,7 @@ static const union AnimCmd sAnim_FLOETTE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FLORGES_1[] = +static const union AnimCmd sAnim_Florges_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -7887,7 +7887,7 @@ static const union AnimCmd sAnim_FLORGES_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FLORGES_2[] = +static const union AnimCmd sAnim_Florges_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -7896,14 +7896,14 @@ static const union AnimCmd sAnim_FLORGES_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SKIDDO_1[] = +static const union AnimCmd sAnim_Skiddo_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), ANIMCMD_END, }; -static const union AnimCmd sAnim_GOGOAT_1[] = +static const union AnimCmd sAnim_Gogoat_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -7911,7 +7911,7 @@ static const union AnimCmd sAnim_GOGOAT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PANCHAM_1[] = +static const union AnimCmd sAnim_Pancham_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -7922,7 +7922,7 @@ static const union AnimCmd sAnim_PANCHAM_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PANGORO_1[] = +static const union AnimCmd sAnim_Pangoro_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -7933,7 +7933,7 @@ static const union AnimCmd sAnim_PANGORO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_FURFROU_1[] = +static const union AnimCmd sAnim_Furfrou_1[] = { ANIMCMD_FRAME(0, 27), ANIMCMD_FRAME(1, 6), @@ -7943,7 +7943,7 @@ static const union AnimCmd sAnim_FURFROU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ESPURR_1[] = +static const union AnimCmd sAnim_Espurr_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -7955,7 +7955,7 @@ static const union AnimCmd sAnim_ESPURR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MEOWSTIC_1[] = +static const union AnimCmd sAnim_Meowstic_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -7963,7 +7963,7 @@ static const union AnimCmd sAnim_MEOWSTIC_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HONEDGE_1[] = +static const union AnimCmd sAnim_Honedge_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 40), @@ -7971,7 +7971,7 @@ static const union AnimCmd sAnim_HONEDGE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DOUBLADE_1[] = +static const union AnimCmd sAnim_Doublade_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -7981,7 +7981,7 @@ static const union AnimCmd sAnim_DOUBLADE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DOUBLADE_2[] = +static const union AnimCmd sAnim_Doublade_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -7990,7 +7990,7 @@ static const union AnimCmd sAnim_DOUBLADE_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AEGISLASH_1[] = +static const union AnimCmd sAnim_Aegislash_1[] = { ANIMCMD_FRAME(0, 18), ANIMCMD_FRAME(1, 18), @@ -8000,7 +8000,7 @@ static const union AnimCmd sAnim_AEGISLASH_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SPRITZEE_1[] = +static const union AnimCmd sAnim_Spritzee_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 25), @@ -8011,14 +8011,14 @@ static const union AnimCmd sAnim_SPRITZEE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AROMATISSE_1[] = +static const union AnimCmd sAnim_Aromatisse_1[] = { ANIMCMD_FRAME(1, 30), ANIMCMD_FRAME(0, 30), ANIMCMD_END, }; -static const union AnimCmd sAnim_SWIRLIX_1[] = +static const union AnimCmd sAnim_Swirlix_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 10), @@ -8030,7 +8030,7 @@ static const union AnimCmd sAnim_SWIRLIX_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SLURPUFF_1[] = +static const union AnimCmd sAnim_Slurpuff_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 10), @@ -8040,7 +8040,7 @@ static const union AnimCmd sAnim_SLURPUFF_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_INKAY_1[] = +static const union AnimCmd sAnim_Inkay_1[] = { ANIMCMD_FRAME(1, 25), ANIMCMD_FRAME(0, 25), @@ -8049,7 +8049,7 @@ static const union AnimCmd sAnim_INKAY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MALAMAR_1[] = +static const union AnimCmd sAnim_Malamar_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -8058,7 +8058,7 @@ static const union AnimCmd sAnim_MALAMAR_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BINACLE_1[] = +static const union AnimCmd sAnim_Binacle_1[] = { ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 8), @@ -8069,14 +8069,14 @@ static const union AnimCmd sAnim_BINACLE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BARBARACLE_1[] = +static const union AnimCmd sAnim_Barbaracle_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 15), ANIMCMD_END, }; -static const union AnimCmd sAnim_SKRELP_1[] = +static const union AnimCmd sAnim_Skrelp_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 10), @@ -8089,7 +8089,7 @@ static const union AnimCmd sAnim_SKRELP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DRAGALGE_1[] = +static const union AnimCmd sAnim_Dragalge_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 10), @@ -8098,7 +8098,7 @@ static const union AnimCmd sAnim_DRAGALGE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CLAUNCHER_1[] = +static const union AnimCmd sAnim_Clauncher_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -8108,7 +8108,7 @@ static const union AnimCmd sAnim_CLAUNCHER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CLAWITZER_1[] = +static const union AnimCmd sAnim_Clawitzer_1[] = { ANIMCMD_FRAME(1, 6), ANIMCMD_FRAME(0, 6), @@ -8121,7 +8121,7 @@ static const union AnimCmd sAnim_CLAWITZER_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HELIOPTILE_1[] = +static const union AnimCmd sAnim_Helioptile_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 15), @@ -8129,7 +8129,7 @@ static const union AnimCmd sAnim_HELIOPTILE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HELIOLISK_1[] = +static const union AnimCmd sAnim_Heliolisk_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 30), @@ -8137,7 +8137,7 @@ static const union AnimCmd sAnim_HELIOLISK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TYRUNT_1[] = +static const union AnimCmd sAnim_Tyrunt_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 20), @@ -8146,14 +8146,14 @@ static const union AnimCmd sAnim_TYRUNT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TYRANTRUM_1[] = +static const union AnimCmd sAnim_Tyrantrum_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_AMAURA_1[] = +static const union AnimCmd sAnim_Amaura_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 10), @@ -8163,14 +8163,14 @@ static const union AnimCmd sAnim_AMAURA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AURORUS_1[] = +static const union AnimCmd sAnim_Aurorus_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_SYLVEON_1[] = +static const union AnimCmd sAnim_Sylveon_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 20), @@ -8178,7 +8178,7 @@ static const union AnimCmd sAnim_SYLVEON_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HAWLUCHA_1[] = +static const union AnimCmd sAnim_Hawlucha_1[] = { ANIMCMD_FRAME(0, 28), ANIMCMD_FRAME(1, 32), @@ -8186,7 +8186,7 @@ static const union AnimCmd sAnim_HAWLUCHA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DEDENNE_1[] = +static const union AnimCmd sAnim_Dedenne_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 15), @@ -8194,7 +8194,7 @@ static const union AnimCmd sAnim_DEDENNE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_CARBINK_1[] = +static const union AnimCmd sAnim_Carbink_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 15), @@ -8208,7 +8208,7 @@ static const union AnimCmd sAnim_CARBINK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOOMY_1[] = +static const union AnimCmd sAnim_Goomy_1[] = { ANIMCMD_FRAME(0, 28), ANIMCMD_FRAME(1, 32), @@ -8216,7 +8216,7 @@ static const union AnimCmd sAnim_GOOMY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_SLIGGOO_1[] = +static const union AnimCmd sAnim_Sliggoo_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -8224,7 +8224,7 @@ static const union AnimCmd sAnim_SLIGGOO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOODRA_1[] = +static const union AnimCmd sAnim_Goodra_1[] = { ANIMCMD_FRAME(0, 18), ANIMCMD_FRAME(1, 18), @@ -8234,7 +8234,7 @@ static const union AnimCmd sAnim_GOODRA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KLEFKI_1[] = +static const union AnimCmd sAnim_Klefki_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 15), @@ -8248,7 +8248,7 @@ static const union AnimCmd sAnim_KLEFKI_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PHANTUMP_1[] = +static const union AnimCmd sAnim_Phantump_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -8256,7 +8256,7 @@ static const union AnimCmd sAnim_PHANTUMP_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TREVENANT_1[] = +static const union AnimCmd sAnim_Trevenant_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -8267,7 +8267,7 @@ static const union AnimCmd sAnim_TREVENANT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PUMPKABOO_1[] = +static const union AnimCmd sAnim_Pumpkaboo_1[] = { ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(0, 12), @@ -8280,7 +8280,7 @@ static const union AnimCmd sAnim_PUMPKABOO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GOURGEIST_1[] = +static const union AnimCmd sAnim_Gourgeist_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -8288,7 +8288,7 @@ static const union AnimCmd sAnim_GOURGEIST_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BERGMITE_1[] = +static const union AnimCmd sAnim_Bergmite_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -8298,7 +8298,7 @@ static const union AnimCmd sAnim_BERGMITE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BERGMITE_2[] = +static const union AnimCmd sAnim_Bergmite_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -8307,7 +8307,7 @@ static const union AnimCmd sAnim_BERGMITE_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AVALUGG_1[] = +static const union AnimCmd sAnim_Avalugg_1[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(0, 20), @@ -8316,7 +8316,7 @@ static const union AnimCmd sAnim_AVALUGG_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NOIBAT_1[] = +static const union AnimCmd sAnim_Noibat_1[] = { ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(0, 12), @@ -8329,14 +8329,14 @@ static const union AnimCmd sAnim_NOIBAT_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_NOIVERN_1[] = +static const union AnimCmd sAnim_Noivern_1[] = { ANIMCMD_FRAME(1, 32), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_XERNEAS_1[] = +static const union AnimCmd sAnim_Xerneas_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -8344,7 +8344,7 @@ static const union AnimCmd sAnim_XERNEAS_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_YVELTAL_1[] = +static const union AnimCmd sAnim_Yveltal_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 10), @@ -8353,7 +8353,7 @@ static const union AnimCmd sAnim_YVELTAL_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ZYGARDE_1[] = +static const union AnimCmd sAnim_Zygarde_1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 25), @@ -8361,7 +8361,7 @@ static const union AnimCmd sAnim_ZYGARDE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DIANCIE_1[] = +static const union AnimCmd sAnim_Diancie_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -8369,7 +8369,7 @@ static const union AnimCmd sAnim_DIANCIE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HOOPA_1[] = +static const union AnimCmd sAnim_Hoopa_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 15), @@ -8383,370 +8383,369 @@ static const union AnimCmd sAnim_HOOPA_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_VOLCANION_1[] = +static const union AnimCmd sAnim_Volcanion_1[] = { ANIMCMD_FRAME(1, 45), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; #endif - #if P_GEN_7_POKEMON == TRUE -static const union AnimCmd sAnim_ROWLET_1[] = +static const union AnimCmd sAnim_Rowlet_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DARTRIX_1[] = +static const union AnimCmd sAnim_Dartrix_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DECIDUEYE_1[] = +static const union AnimCmd sAnim_Decidueye_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_LITTEN_1[] = +static const union AnimCmd sAnim_Litten_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TORRACAT_1[] = +static const union AnimCmd sAnim_Torracat_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_INCINEROAR_1[] = +static const union AnimCmd sAnim_Incineroar_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_POPPLIO_1[] = +static const union AnimCmd sAnim_Popplio_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BRIONNE_1[] = +static const union AnimCmd sAnim_Brionne_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PRIMARINA_1[] = +static const union AnimCmd sAnim_Primarina_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKIPEK_1[] = +static const union AnimCmd sAnim_Pikipek_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TRUMBEAK_1[] = +static const union AnimCmd sAnim_Trumbeak_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TOUCANNON_1[] = +static const union AnimCmd sAnim_Toucannon_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_YUNGOOS_1[] = +static const union AnimCmd sAnim_Yungoos_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GUMSHOOS_1[] = +static const union AnimCmd sAnim_Gumshoos_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GRUBBIN_1[] = +static const union AnimCmd sAnim_Grubbin_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CHARJABUG_1[] = +static const union AnimCmd sAnim_Charjabug_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_VIKAVOLT_1[] = +static const union AnimCmd sAnim_Vikavolt_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CRABRAWLER_1[] = +static const union AnimCmd sAnim_Crabrawler_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CRABOMINABLE_1[] = +static const union AnimCmd sAnim_Crabominable_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ORICORIO_1[] = +static const union AnimCmd sAnim_Oricorio_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CUTIEFLY_1[] = +static const union AnimCmd sAnim_Cutiefly_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_RIBOMBEE_1[] = +static const union AnimCmd sAnim_Ribombee_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ROCKRUFF_1[] = +static const union AnimCmd sAnim_Rockruff_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_LYCANROC_1[] = +static const union AnimCmd sAnim_Lycanroc_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_WISHIWASHI_1[] = +static const union AnimCmd sAnim_Wishiwashi_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MAREANIE_1[] = +static const union AnimCmd sAnim_Mareanie_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TOXAPEX_1[] = +static const union AnimCmd sAnim_Toxapex_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MUDBRAY_1[] = +static const union AnimCmd sAnim_Mudbray_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MUDSDALE_1[] = +static const union AnimCmd sAnim_Mudsdale_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DEWPIDER_1[] = +static const union AnimCmd sAnim_Dewpider_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ARAQUANID_1[] = +static const union AnimCmd sAnim_Araquanid_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_FOMANTIS_1[] = +static const union AnimCmd sAnim_Fomantis_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_LURANTIS_1[] = +static const union AnimCmd sAnim_Lurantis_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MORELULL_1[] = +static const union AnimCmd sAnim_Morelull_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SHIINOTIC_1[] = +static const union AnimCmd sAnim_Shiinotic_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SALANDIT_1[] = +static const union AnimCmd sAnim_Salandit_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SALAZZLE_1[] = +static const union AnimCmd sAnim_Salazzle_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_STUFFUL_1[] = +static const union AnimCmd sAnim_Stufful_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BEWEAR_1[] = +static const union AnimCmd sAnim_Bewear_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BOUNSWEET_1[] = +static const union AnimCmd sAnim_Bounsweet_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_STEENEE_1[] = +static const union AnimCmd sAnim_Steenee_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TSAREENA_1[] = +static const union AnimCmd sAnim_Tsareena_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_COMFEY_1[] = +static const union AnimCmd sAnim_Comfey_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ORANGURU_1[] = +static const union AnimCmd sAnim_Oranguru_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PASSIMIAN_1[] = +static const union AnimCmd sAnim_Passimian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_WIMPOD_1[] = +static const union AnimCmd sAnim_Wimpod_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GOLISOPOD_1[] = +static const union AnimCmd sAnim_Golisopod_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SANDYGAST_1[] = +static const union AnimCmd sAnim_Sandygast_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PALOSSAND_1[] = +static const union AnimCmd sAnim_Palossand_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PYUKUMUKU_1[] = +static const union AnimCmd sAnim_Pyukumuku_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TYPE_NULL_1[] = +static const union AnimCmd sAnim_TypeNull_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SILVALLY_1[] = +static const union AnimCmd sAnim_Silvally_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MINIOR_1[] = +static const union AnimCmd sAnim_Minior_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_KOMALA_1[] = +static const union AnimCmd sAnim_Komala_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TURTONATOR_1[] = +static const union AnimCmd sAnim_Turtonator_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TOGEDEMARU_1[] = +static const union AnimCmd sAnim_Togedemaru_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MIMIKYU_1[] = +static const union AnimCmd sAnim_Mimikyu_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BRUXISH_1[] = +static const union AnimCmd sAnim_Bruxish_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DRAMPA_1[] = +static const union AnimCmd sAnim_Drampa_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DHELMISE_1[] = +static const union AnimCmd sAnim_Dhelmise_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -8770,7 +8769,7 @@ static const union AnimCmd sAnim_KOMMO_O_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TAPU_KOKO_1[] = +static const union AnimCmd sAnim_TapuKoko_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 40), @@ -8782,7 +8781,7 @@ static const union AnimCmd sAnim_TAPU_KOKO_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TAPU_LELE_1[] = +static const union AnimCmd sAnim_TapuLele_1[] = { ANIMCMD_FRAME(1, 50), ANIMCMD_FRAME(1, 50), @@ -8790,7 +8789,7 @@ static const union AnimCmd sAnim_TAPU_LELE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TAPU_BULU_1[] = +static const union AnimCmd sAnim_TapuBulu_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 40), @@ -8800,7 +8799,7 @@ static const union AnimCmd sAnim_TAPU_BULU_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_TAPU_FINI_1[] = +static const union AnimCmd sAnim_TapuFini_1[] = { ANIMCMD_FRAME(1, 60), ANIMCMD_FRAME(1, 60), @@ -8808,85 +8807,85 @@ static const union AnimCmd sAnim_TAPU_FINI_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_COSMOG_1[] = +static const union AnimCmd sAnim_Cosmog_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_COSMOEM_1[] = +static const union AnimCmd sAnim_Cosmoem_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SOLGALEO_1[] = +static const union AnimCmd sAnim_Solgaleo_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_LUNALA_1[] = +static const union AnimCmd sAnim_Lunala_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_NIHILEGO_1[] = +static const union AnimCmd sAnim_Nihilego_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BUZZWOLE_1[] = +static const union AnimCmd sAnim_Buzzwole_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PHEROMOSA_1[] = +static const union AnimCmd sAnim_Pheromosa_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_XURKITREE_1[] = +static const union AnimCmd sAnim_Xurkitree_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CELESTEELA_1[] = +static const union AnimCmd sAnim_Celesteela_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_KARTANA_1[] = +static const union AnimCmd sAnim_Kartana_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GUZZLORD_1[] = +static const union AnimCmd sAnim_Guzzlord_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_NECROZMA_1[] = +static const union AnimCmd sAnim_Necrozma_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MAGEARNA_1[] = +static const union AnimCmd sAnim_Magearna_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MARSHADOW_1[] = +static const union AnimCmd sAnim_Marshadow_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 54), @@ -8894,628 +8893,627 @@ static const union AnimCmd sAnim_MARSHADOW_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_POIPOLE_1[] = +static const union AnimCmd sAnim_Poipole_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_NAGANADEL_1[] = +static const union AnimCmd sAnim_Naganadel_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_STAKATAKA_1[] = +static const union AnimCmd sAnim_Stakataka_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BLACEPHALON_1[] = +static const union AnimCmd sAnim_Blacephalon_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ZERAORA_1[] = +static const union AnimCmd sAnim_Zeraora_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MELTAN_1[] = +static const union AnimCmd sAnim_Meltan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MELMETAL_1[] = +static const union AnimCmd sAnim_Melmetal_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #endif - #if P_GEN_8_POKEMON == TRUE -static const union AnimCmd sAnim_GROOKEY_1[] = +static const union AnimCmd sAnim_Grookey_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_THWACKEY_1[] = +static const union AnimCmd sAnim_Thwackey_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_RILLABOOM_1[] = +static const union AnimCmd sAnim_Rillaboom_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SCORBUNNY_1[] = +static const union AnimCmd sAnim_Scorbunny_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_RABOOT_1[] = +static const union AnimCmd sAnim_Raboot_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CINDERACE_1[] = +static const union AnimCmd sAnim_Cinderace_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SOBBLE_1[] = +static const union AnimCmd sAnim_Sobble_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DRIZZILE_1[] = +static const union AnimCmd sAnim_Drizzile_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_INTELEON_1[] = +static const union AnimCmd sAnim_Inteleon_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SKWOVET_1[] = +static const union AnimCmd sAnim_Skwovet_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GREEDENT_1[] = +static const union AnimCmd sAnim_Greedent_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ROOKIDEE_1[] = +static const union AnimCmd sAnim_Rookidee_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CORVISQUIRE_1[] = +static const union AnimCmd sAnim_Corvisquire_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CORVIKNIGHT_1[] = +static const union AnimCmd sAnim_Corviknight_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BLIPBUG_1[] = +static const union AnimCmd sAnim_Blipbug_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DOTTLER_1[] = +static const union AnimCmd sAnim_Dottler_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ORBEETLE_1[] = +static const union AnimCmd sAnim_Orbeetle_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_NICKIT_1[] = +static const union AnimCmd sAnim_Nickit_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_THIEVUL_1[] = +static const union AnimCmd sAnim_Thievul_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GOSSIFLEUR_1[] = +static const union AnimCmd sAnim_Gossifleur_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ELDEGOSS_1[] = +static const union AnimCmd sAnim_Eldegoss_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_WOOLOO_1[] = +static const union AnimCmd sAnim_Wooloo_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DUBWOOL_1[] = +static const union AnimCmd sAnim_Dubwool_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CHEWTLE_1[] = +static const union AnimCmd sAnim_Chewtle_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DREDNAW_1[] = +static const union AnimCmd sAnim_Drednaw_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_YAMPER_1[] = +static const union AnimCmd sAnim_Yamper_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BOLTUND_1[] = +static const union AnimCmd sAnim_Boltund_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ROLYCOLY_1[] = +static const union AnimCmd sAnim_Rolycoly_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CARKOL_1[] = +static const union AnimCmd sAnim_Carkol_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_COALOSSAL_1[] = +static const union AnimCmd sAnim_Coalossal_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_APPLIN_1[] = +static const union AnimCmd sAnim_Applin_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_FLAPPLE_1[] = +static const union AnimCmd sAnim_Flapple_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_APPLETUN_1[] = +static const union AnimCmd sAnim_Appletun_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SILICOBRA_1[] = +static const union AnimCmd sAnim_Silicobra_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SANDACONDA_1[] = +static const union AnimCmd sAnim_Sandaconda_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CRAMORANT_1[] = +static const union AnimCmd sAnim_Cramorant_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ARROKUDA_1[] = +static const union AnimCmd sAnim_Arrokuda_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BARRASKEWDA_1[] = +static const union AnimCmd sAnim_Barraskewda_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TOXEL_1[] = +static const union AnimCmd sAnim_Toxel_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TOXTRICITY_1[] = +static const union AnimCmd sAnim_Toxtricity_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SIZZLIPEDE_1[] = +static const union AnimCmd sAnim_Sizzlipede_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CENTISKORCH_1[] = +static const union AnimCmd sAnim_Centiskorch_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CLOBBOPUS_1[] = +static const union AnimCmd sAnim_Clobbopus_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GRAPPLOCT_1[] = +static const union AnimCmd sAnim_Grapploct_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SINISTEA_1[] = +static const union AnimCmd sAnim_Sinistea_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_POLTEAGEIST_1[] = +static const union AnimCmd sAnim_Polteageist_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_HATENNA_1[] = +static const union AnimCmd sAnim_Hatenna_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_HATTREM_1[] = +static const union AnimCmd sAnim_Hattrem_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_HATTERENE_1[] = +static const union AnimCmd sAnim_Hatterene_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_IMPIDIMP_1[] = +static const union AnimCmd sAnim_Impidimp_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MORGREM_1[] = +static const union AnimCmd sAnim_Morgrem_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GRIMMSNARL_1[] = +static const union AnimCmd sAnim_Grimmsnarl_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_OBSTAGOON_1[] = +static const union AnimCmd sAnim_Obstagoon_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PERRSERKER_1[] = +static const union AnimCmd sAnim_Perrserker_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CURSOLA_1[] = +static const union AnimCmd sAnim_Cursola_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SIRFETCHD_1[] = +static const union AnimCmd sAnim_Sirfetchd_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MR_RIME_1[] = +static const union AnimCmd sAnim_MrRime_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_RUNERIGUS_1[] = +static const union AnimCmd sAnim_Runerigus_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MILCERY_1[] = +static const union AnimCmd sAnim_Milcery_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ALCREMIE_1[] = +static const union AnimCmd sAnim_Alcremie_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_FALINKS_1[] = +static const union AnimCmd sAnim_Falinks_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PINCURCHIN_1[] = +static const union AnimCmd sAnim_Pincurchin_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SNOM_1[] = +static const union AnimCmd sAnim_Snom_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_FROSMOTH_1[] = +static const union AnimCmd sAnim_Frosmoth_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_STONJOURNER_1[] = +static const union AnimCmd sAnim_Stonjourner_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_EISCUE_1[] = +static const union AnimCmd sAnim_Eiscue_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_INDEEDEE_1[] = +static const union AnimCmd sAnim_Indeedee_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MORPEKO_1[] = +static const union AnimCmd sAnim_Morpeko_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CUFANT_1[] = +static const union AnimCmd sAnim_Cufant_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_COPPERAJAH_1[] = +static const union AnimCmd sAnim_Copperajah_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DRACOZOLT_1[] = +static const union AnimCmd sAnim_Dracozolt_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ARCTOZOLT_1[] = +static const union AnimCmd sAnim_Arctozolt_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DRACOVISH_1[] = +static const union AnimCmd sAnim_Dracovish_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ARCTOVISH_1[] = +static const union AnimCmd sAnim_Arctovish_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DURALUDON_1[] = +static const union AnimCmd sAnim_Duraludon_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DREEPY_1[] = +static const union AnimCmd sAnim_Dreepy_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DRAKLOAK_1[] = +static const union AnimCmd sAnim_Drakloak_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DRAGAPULT_1[] = +static const union AnimCmd sAnim_Dragapult_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ZACIAN_1[] = +static const union AnimCmd sAnim_Zacian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ZAMAZENTA_1[] = +static const union AnimCmd sAnim_Zamazenta_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ETERNATUS_1[] = +static const union AnimCmd sAnim_Eternatus_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_KUBFU_1[] = +static const union AnimCmd sAnim_Kubfu_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_URSHIFU_1[] = +static const union AnimCmd sAnim_Urshifu_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ZARUDE_1[] = +static const union AnimCmd sAnim_Zarude_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_REGIELEKI_1[] = +static const union AnimCmd sAnim_Regieleki_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_REGIDRAGO_1[] = +static const union AnimCmd sAnim_Regidrago_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GLASTRIER_1[] = +static const union AnimCmd sAnim_Glastrier_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SPECTRIER_1[] = +static const union AnimCmd sAnim_Spectrier_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CALYREX_1[] = +static const union AnimCmd sAnim_Calyrex_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_WYRDEER_1[] = +static const union AnimCmd sAnim_Wyrdeer_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_KLEAVOR_1[] = +static const union AnimCmd sAnim_Kleavor_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_URSALUNA_1[] = +static const union AnimCmd sAnim_Ursaluna_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BASCULEGION_1[] = +static const union AnimCmd sAnim_Basculegion_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SNEASLER_1[] = +static const union AnimCmd sAnim_Sneasler_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_OVERQWIL_1[] = +static const union AnimCmd sAnim_Overqwil_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ENAMORUS_1[] = +static const union AnimCmd sAnim_Enamorus_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #endif -static const union AnimCmd sAnim_VENUSAUR_MEGA_1[] = +static const union AnimCmd sAnim_VenusaurMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -9533,61 +9531,61 @@ static const union AnimCmd sAnim_CHARIZARD_MEGA_Y_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_BLASTOISE_MEGA_1[] = +static const union AnimCmd sAnim_BlastoiseMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BEEDRILL_MEGA_1[] = +static const union AnimCmd sAnim_BeedrillMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIDGEOT_MEGA_1[] = +static const union AnimCmd sAnim_PidgeotMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ALAKAZAM_MEGA_1[] = +static const union AnimCmd sAnim_AlakazamMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SLOWBRO_MEGA_1[] = +static const union AnimCmd sAnim_SlowbroMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GENGAR_MEGA_1[] = +static const union AnimCmd sAnim_GengarMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_KANGASKHAN_MEGA_1[] = +static const union AnimCmd sAnim_KangaskhanMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PINSIR_MEGA_1[] = +static const union AnimCmd sAnim_PinsirMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GYARADOS_MEGA_1[] = +static const union AnimCmd sAnim_GyaradosMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_AERODACTYL_MEGA_1[] = +static const union AnimCmd sAnim_AerodactylMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -9605,567 +9603,563 @@ static const union AnimCmd sAnim_MEWTWO_MEGA_Y_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_AMPHAROS_MEGA_1[] = +static const union AnimCmd sAnim_AmpharosMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_STEELIX_MEGA_1[] = +static const union AnimCmd sAnim_SteelixMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SCIZOR_MEGA_1[] = +static const union AnimCmd sAnim_ScizorMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_HERACROSS_MEGA_1[] = +static const union AnimCmd sAnim_HeracrossMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_HOUNDOOM_MEGA_1[] = +static const union AnimCmd sAnim_HoundoomMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TYRANITAR_MEGA_1[] = +static const union AnimCmd sAnim_TyranitarMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SCEPTILE_MEGA_1[] = +static const union AnimCmd sAnim_SceptileMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BLAZIKEN_MEGA_1[] = +static const union AnimCmd sAnim_BlazikenMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SWAMPERT_MEGA_1[] = +static const union AnimCmd sAnim_SwampertMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GARDEVOIR_MEGA_1[] = +static const union AnimCmd sAnim_GardevoirMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SABLEYE_MEGA_1[] = +static const union AnimCmd sAnim_SableyeMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MAWILE_MEGA_1[] = +static const union AnimCmd sAnim_MawileMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_AGGRON_MEGA_1[] = +static const union AnimCmd sAnim_AggronMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MEDICHAM_MEGA_1[] = +static const union AnimCmd sAnim_MedichamMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MANECTRIC_MEGA_1[] = +static const union AnimCmd sAnim_ManectricMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SHARPEDO_MEGA_1[] = +static const union AnimCmd sAnim_SharpedoMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CAMERUPT_MEGA_1[] = +static const union AnimCmd sAnim_CameruptMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ALTARIA_MEGA_1[] = +static const union AnimCmd sAnim_AltariaMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BANETTE_MEGA_1[] = +static const union AnimCmd sAnim_BanetteMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ABSOL_MEGA_1[] = +static const union AnimCmd sAnim_AbsolMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GLALIE_MEGA_1[] = +static const union AnimCmd sAnim_GlalieMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SALAMENCE_MEGA_1[] = +static const union AnimCmd sAnim_SalamenceMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_METAGROSS_MEGA_1[] = +static const union AnimCmd sAnim_MetagrossMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_LATIAS_MEGA_1[] = +static const union AnimCmd sAnim_LatiasMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_LATIOS_MEGA_1[] = +static const union AnimCmd sAnim_LatiosMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_KYOGRE_PRIMAL_1[] = +static const union AnimCmd sAnim_KyogrePrimal_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GROUDON_PRIMAL_1[] = +static const union AnimCmd sAnim_GroudonPrimal_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_RAYQUAZA_MEGA_1[] = +static const union AnimCmd sAnim_RayquazaMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #if P_GEN_4_POKEMON == TRUE -static const union AnimCmd sAnim_LOPUNNY_MEGA_1[] = +static const union AnimCmd sAnim_LopunnyMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GARCHOMP_MEGA_1[] = +static const union AnimCmd sAnim_GarchompMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_LUCARIO_MEGA_1[] = +static const union AnimCmd sAnim_LucarioMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ABOMASNOW_MEGA_1[] = +static const union AnimCmd sAnim_AbomasnowMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GALLADE_MEGA_1[] = +static const union AnimCmd sAnim_GalladeMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #endif - #if P_GEN_5_POKEMON == TRUE -static const union AnimCmd sAnim_AUDINO_MEGA_1[] = +static const union AnimCmd sAnim_AudinoMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #endif - #if P_GEN_6_POKEMON == TRUE -static const union AnimCmd sAnim_DIANCIE_MEGA_1[] = +static const union AnimCmd sAnim_DiancieMega_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #endif -static const union AnimCmd sAnim_RATTATA_ALOLAN_1[] = +static const union AnimCmd sAnim_RattataAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_RATICATE_ALOLAN_1[] = +static const union AnimCmd sAnim_RaticateAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_RAICHU_ALOLAN_1[] = +static const union AnimCmd sAnim_RaichuAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SANDSHREW_ALOLAN_1[] = +static const union AnimCmd sAnim_SandshrewAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SANDSLASH_ALOLAN_1[] = +static const union AnimCmd sAnim_SandslashAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_VULPIX_ALOLAN_1[] = +static const union AnimCmd sAnim_VulpixAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_NINETALES_ALOLAN_1[] = +static const union AnimCmd sAnim_NinetalesAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DIGLETT_ALOLAN_1[] = +static const union AnimCmd sAnim_DiglettAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DUGTRIO_ALOLAN_1[] = +static const union AnimCmd sAnim_DugtrioAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MEOWTH_ALOLAN_1[] = +static const union AnimCmd sAnim_MeowthAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PERSIAN_ALOLAN_1[] = +static const union AnimCmd sAnim_PersianAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GEODUDE_ALOLAN_1[] = +static const union AnimCmd sAnim_GeodudeAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GRAVELER_ALOLAN_1[] = +static const union AnimCmd sAnim_GravelerAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GOLEM_ALOLAN_1[] = +static const union AnimCmd sAnim_GolemAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GRIMER_ALOLAN_1[] = +static const union AnimCmd sAnim_GrimerAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MUK_ALOLAN_1[] = +static const union AnimCmd sAnim_MukAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_EXEGGUTOR_ALOLAN_1[] = +static const union AnimCmd sAnim_ExeggutorAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MAROWAK_ALOLAN_1[] = +static const union AnimCmd sAnim_MarowakAlolan_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MEOWTH_GALARIAN_1[] = +static const union AnimCmd sAnim_MeowthGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PONYTA_GALARIAN_1[] = +static const union AnimCmd sAnim_PonytaGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_RAPIDASH_GALARIAN_1[] = +static const union AnimCmd sAnim_RapidashGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SLOWPOKE_GALARIAN_1[] = +static const union AnimCmd sAnim_SlowpokeGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SLOWBRO_GALARIAN_1[] = +static const union AnimCmd sAnim_SlowbroGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_FARFETCHD_GALARIAN_1[] = +static const union AnimCmd sAnim_FarfetchdGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_WEEZING_GALARIAN_1[] = +static const union AnimCmd sAnim_WeezingGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MR_MIME_GALARIAN_1[] = +static const union AnimCmd sAnim_MrMimeGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ARTICUNO_GALARIAN_1[] = +static const union AnimCmd sAnim_ArticunoGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ZAPDOS_GALARIAN_1[] = +static const union AnimCmd sAnim_ZapdosGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MOLTRES_GALARIAN_1[] = +static const union AnimCmd sAnim_MoltresGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SLOWKING_GALARIAN_1[] = +static const union AnimCmd sAnim_SlowkingGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_CORSOLA_GALARIAN_1[] = +static const union AnimCmd sAnim_CorsolaGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ZIGZAGOON_GALARIAN_1[] = +static const union AnimCmd sAnim_ZigzagoonGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_LINOONE_GALARIAN_1[] = +static const union AnimCmd sAnim_LinooneGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #if P_GEN_5_POKEMON == TRUE -static const union AnimCmd sAnim_DARUMAKA_GALARIAN_1[] = +static const union AnimCmd sAnim_DarumakaGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DARMANITAN_GALARIAN_1[] = +static const union AnimCmd sAnim_DarmanitanGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_YAMASK_GALARIAN_1[] = +static const union AnimCmd sAnim_YamaskGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_STUNFISK_GALARIAN_1[] = +static const union AnimCmd sAnim_StunfiskGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #endif -static const union AnimCmd sAnim_GROWLITHE_HISUIAN_1[] = +static const union AnimCmd sAnim_GrowlitheHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ARCANINE_HISUIAN_1[] = +static const union AnimCmd sAnim_ArcanineHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_VOLTORB_HISUIAN_1[] = +static const union AnimCmd sAnim_VoltorbHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ELECTRODE_HISUIAN_1[] = +static const union AnimCmd sAnim_ElectrodeHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TYPHLOSION_HISUIAN_1[] = +static const union AnimCmd sAnim_TyphlosionHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_QWILFISH_HISUIAN_1[] = +static const union AnimCmd sAnim_QwilfishHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_SNEASEL_HISUIAN_1[] = +static const union AnimCmd sAnim_SneaselHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #if P_GEN_5_POKEMON == TRUE -static const union AnimCmd sAnim_SAMUROTT_HISUIAN_1[] = +static const union AnimCmd sAnim_SamurottHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_LILLIGANT_HISUIAN_1[] = +static const union AnimCmd sAnim_LilligantHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ZORUA_HISUIAN_1[] = +static const union AnimCmd sAnim_ZoruaHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_ZOROARK_HISUIAN_1[] = +static const union AnimCmd sAnim_ZoroarkHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_BRAVIARY_HISUIAN_1[] = +static const union AnimCmd sAnim_BraviaryHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #endif - #if P_GEN_6_POKEMON == TRUE -static const union AnimCmd sAnim_SLIGGOO_HISUIAN_1[] = +static const union AnimCmd sAnim_SliggooHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GOODRA_HISUIAN_1[] = +static const union AnimCmd sAnim_GoodraHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_AVALUGG_HISUIAN_1[] = +static const union AnimCmd sAnim_AvaluggHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #endif - #if P_GEN_7_POKEMON == TRUE -static const union AnimCmd sAnim_DECIDUEYE_HISUIAN_1[] = +static const union AnimCmd sAnim_DecidueyeHisuian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #endif -static const union AnimCmd sAnim_PIKACHU_COSPLAY_1[] = +static const union AnimCmd sAnim_PikachuCosplay_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_ROCK_STAR_1[] = +static const union AnimCmd sAnim_PikachuRockStar_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_BELLE_1[] = +static const union AnimCmd sAnim_PikachuBelle_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_POP_STAR_1[] = +static const union AnimCmd sAnim_PikachuPopStar_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -10177,66 +10171,66 @@ static const union AnimCmd sAnim_PIKACHU_PH_D_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_LIBRE_1[] = +static const union AnimCmd sAnim_PikachuLibre_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_ORIGINAL_CAP_1[] = +static const union AnimCmd sAnim_PikachuOriginalCap_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_HOENN_CAP_1[] = +static const union AnimCmd sAnim_PikachuHoennCap_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_SINNOH_CAP_1[] = +static const union AnimCmd sAnim_PikachuSinnohCap_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_UNOVA_CAP_1[] = +static const union AnimCmd sAnim_PikachuUnovaCap_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_KALOS_CAP_1[] = +static const union AnimCmd sAnim_PikachuKalosCap_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_ALOLA_CAP_1[] = +static const union AnimCmd sAnim_PikachuAlolaCap_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_PARTNER_CAP_1[] = +static const union AnimCmd sAnim_PikachuPartnerCap_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PIKACHU_WORLD_CAP_1[] = +static const union AnimCmd sAnim_PikachuWorldCap_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PICHU_SPIKY_EARED_1[] = +static const union AnimCmd sAnim_PichuSpikyEared_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_DEOXYS_ATTACK_1[] = +static const union AnimCmd sAnim_DeoxysAttack_1[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), @@ -10246,7 +10240,7 @@ static const union AnimCmd sAnim_DEOXYS_ATTACK_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DEOXYS_ATTACK_2[] = +static const union AnimCmd sAnim_DeoxysAttack_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -10255,7 +10249,7 @@ static const union AnimCmd sAnim_DEOXYS_ATTACK_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DEOXYS_DEFENSE_1[] = +static const union AnimCmd sAnim_DeoxysDefense_1[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), @@ -10265,7 +10259,7 @@ static const union AnimCmd sAnim_DEOXYS_DEFENSE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DEOXYS_DEFENSE_2[] = +static const union AnimCmd sAnim_DeoxysDefense_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -10274,7 +10268,7 @@ static const union AnimCmd sAnim_DEOXYS_DEFENSE_2[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DEOXYS_SPEED_1[] = +static const union AnimCmd sAnim_DeoxysSpeed_1[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), @@ -10284,7 +10278,7 @@ static const union AnimCmd sAnim_DEOXYS_SPEED_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DEOXYS_SPEED_2[] = +static const union AnimCmd sAnim_DeoxysSpeed_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -10294,7 +10288,7 @@ static const union AnimCmd sAnim_DEOXYS_SPEED_2[] = }; #if P_GEN_4_POKEMON == TRUE -static const union AnimCmd sAnim_SHAYMIN_SKY_1[] = +static const union AnimCmd sAnim_ShayminSky_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -10302,19 +10296,19 @@ static const union AnimCmd sAnim_SHAYMIN_SKY_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_DIALGA_ORIGIN_1[] = +static const union AnimCmd sAnim_DialgaOrigin_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_PALKIA_ORIGIN_1[] = +static const union AnimCmd sAnim_PalkiaOrigin_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_GIRATINA_ORIGIN_1[] = +static const union AnimCmd sAnim_GiratinaOrigin_1[] = { ANIMCMD_FRAME(0, 11), ANIMCMD_FRAME(1, 10), @@ -10324,7 +10318,7 @@ static const union AnimCmd sAnim_GIRATINA_ORIGIN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_GIRATINA_ORIGIN_2[] = +static const union AnimCmd sAnim_GiratinaOrigin_2[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(2, 20), @@ -10333,22 +10327,21 @@ static const union AnimCmd sAnim_GIRATINA_ORIGIN_2[] = ANIMCMD_END, }; #endif - #if P_GEN_5_POKEMON == TRUE -static const union AnimCmd sAnim_DARMANITAN_ZEN_MODE_1[] = +static const union AnimCmd sAnim_DarmanitanZenMode_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 20), ANIMCMD_END, }; -static const union AnimCmd sAnim_DARMANITAN_ZEN_MODE_GALARIAN_1[] = +static const union AnimCmd sAnim_DarmanitanZenModeGalarian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_TORNADUS_THERIAN_1[] = +static const union AnimCmd sAnim_TornadusTherian_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 10), @@ -10358,7 +10351,7 @@ static const union AnimCmd sAnim_TORNADUS_THERIAN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_THUNDURUS_THERIAN_1[] = +static const union AnimCmd sAnim_ThundurusTherian_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -10379,7 +10372,7 @@ static const union AnimCmd sAnim_THUNDURUS_THERIAN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_LANDORUS_THERIAN_1[] = +static const union AnimCmd sAnim_LandorusTherian_1[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(1, 15), @@ -10389,21 +10382,21 @@ static const union AnimCmd sAnim_LANDORUS_THERIAN_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_KYUREM_BLACK_1[] = +static const union AnimCmd sAnim_KyuremBlack_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_KYUREM_WHITE_1[] = +static const union AnimCmd sAnim_KyuremWhite_1[] = { ANIMCMD_FRAME(1, 40), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -static const union AnimCmd sAnim_KELDEO_RESOLUTE_1[] = +static const union AnimCmd sAnim_KeldeoResolute_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(1, 36), @@ -10411,7 +10404,7 @@ static const union AnimCmd sAnim_KELDEO_RESOLUTE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_MELOETTA_PIROUETTE_1[] = +static const union AnimCmd sAnim_MeloettaPirouette_1[] = { ANIMCMD_FRAME(1, 15), ANIMCMD_FRAME(0, 15), @@ -10422,9 +10415,8 @@ static const union AnimCmd sAnim_MELOETTA_PIROUETTE_1[] = ANIMCMD_END, }; #endif - #if P_GEN_6_POKEMON == TRUE -static const union AnimCmd sAnim_AEGISLASH_BLADE_1[] = +static const union AnimCmd sAnim_AegislashBlade_1[] = { ANIMCMD_FRAME(0, 18), ANIMCMD_FRAME(1, 18), @@ -10434,7 +10426,7 @@ static const union AnimCmd sAnim_AEGISLASH_BLADE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ZYGARDE_10_1[] = +static const union AnimCmd sAnim_Zygarde10_1[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(1, 10), @@ -10442,7 +10434,7 @@ static const union AnimCmd sAnim_ZYGARDE_10_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_ZYGARDE_COMPLETE_1[] = +static const union AnimCmd sAnim_ZygardeComplete_1[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 45), @@ -10450,7960 +10442,2470 @@ static const union AnimCmd sAnim_ZYGARDE_COMPLETE_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnim_HOOPA_UNBOUND_1[] = +static const union AnimCmd sAnim_HoopaUnbound_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; #endif - #if P_GEN_7_POKEMON == TRUE -static const union AnimCmd sAnim_MINIOR_CORE_1[] = +static const union AnimCmd sAnim_MiniorCore_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_WISHIWASHI_SCHOOL_1[] = +static const union AnimCmd sAnim_WishiwashiSchool_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_MIMIKYU_BUSTED_1[] = +static const union AnimCmd sAnim_MimikyuBusted_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_LYCANROC_MIDNIGHT_1[] = +static const union AnimCmd sAnim_LycanrocMidnight_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd sAnim_LYCANROC_DUSK_1[] = +static const union AnimCmd sAnim_LycanrocDusk_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #endif - #if P_GEN_8_POKEMON == TRUE -static const union AnimCmd sAnim_ENAMORUS_THERIAN_1[] = +static const union AnimCmd sAnim_EnamorusTherian_1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; #endif -static const union AnimCmd *const sAnims_NONE[] = -{ - sAnim_GeneralFrame0, - sAnim_NONE_1, -}; - -static const union AnimCmd *const sAnims_BULBASAUR[] = -{ - sAnim_GeneralFrame0, - sAnim_BULBASAUR_1, -}; - -static const union AnimCmd *const sAnims_IVYSAUR[] = -{ - sAnim_GeneralFrame0, - sAnim_IVYSAUR_1, -}; - -static const union AnimCmd *const sAnims_VENUSAUR[] = -{ - sAnim_GeneralFrame0, - sAnim_VENUSAUR_1, -}; - -static const union AnimCmd *const sAnims_CHARMANDER[] = -{ - sAnim_GeneralFrame0, - sAnim_CHARMANDER_1, -}; - -static const union AnimCmd *const sAnims_CHARMELEON[] = -{ - sAnim_GeneralFrame0, - sAnim_CHARMELEON_1, -}; - -static const union AnimCmd *const sAnims_CHARIZARD[] = -{ - sAnim_GeneralFrame0, - sAnim_CHARIZARD_1, -}; - -static const union AnimCmd *const sAnims_SQUIRTLE[] = -{ - sAnim_GeneralFrame0, - sAnim_SQUIRTLE_1, -}; - -static const union AnimCmd *const sAnims_WARTORTLE[] = -{ - sAnim_GeneralFrame0, - sAnim_WARTORTLE_1, -}; - -static const union AnimCmd *const sAnims_BLASTOISE[] = -{ - sAnim_GeneralFrame0, - sAnim_BLASTOISE_1, -}; - -static const union AnimCmd *const sAnims_CATERPIE[] = -{ - sAnim_GeneralFrame0, - sAnim_CATERPIE_1, -}; - -static const union AnimCmd *const sAnims_METAPOD[] = -{ - sAnim_GeneralFrame0, - sAnim_METAPOD_1, -}; - -static const union AnimCmd *const sAnims_BUTTERFREE[] = -{ - sAnim_GeneralFrame0, - sAnim_BUTTERFREE_1, -}; - -static const union AnimCmd *const sAnims_WEEDLE[] = -{ - sAnim_GeneralFrame0, - sAnim_WEEDLE_1, -}; - -static const union AnimCmd *const sAnims_KAKUNA[] = -{ - sAnim_GeneralFrame0, - sAnim_KAKUNA_1, -}; - -static const union AnimCmd *const sAnims_BEEDRILL[] = -{ - sAnim_GeneralFrame0, - sAnim_BEEDRILL_1, -}; - -static const union AnimCmd *const sAnims_PIDGEY[] = -{ - sAnim_GeneralFrame0, - sAnim_PIDGEY_1, -}; - -static const union AnimCmd *const sAnims_PIDGEOTTO[] = -{ - sAnim_GeneralFrame0, - sAnim_PIDGEOTTO_1, -}; - -static const union AnimCmd *const sAnims_PIDGEOT[] = -{ - sAnim_GeneralFrame0, - sAnim_PIDGEOT_1, -}; - -static const union AnimCmd *const sAnims_RATTATA[] = -{ - sAnim_GeneralFrame0, - sAnim_RATTATA_1, -}; - -static const union AnimCmd *const sAnims_RATICATE[] = -{ - sAnim_GeneralFrame0, - sAnim_RATICATE_1, -}; - -static const union AnimCmd *const sAnims_SPEAROW[] = -{ - sAnim_GeneralFrame0, - sAnim_SPEAROW_1, -}; - -static const union AnimCmd *const sAnims_FEAROW[] = -{ - sAnim_GeneralFrame0, - sAnim_FEAROW_1, -}; - -static const union AnimCmd *const sAnims_EKANS[] = -{ - sAnim_GeneralFrame0, - sAnim_EKANS_1, -}; - -static const union AnimCmd *const sAnims_ARBOK[] = -{ - sAnim_GeneralFrame0, - sAnim_ARBOK_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_1, - sAnim_PIKACHU_2, -}; - -static const union AnimCmd *const sAnims_RAICHU[] = -{ - sAnim_GeneralFrame0, - sAnim_RAICHU_1, - sAnim_RAICHU_2, -}; - -static const union AnimCmd *const sAnims_SANDSHREW[] = -{ - sAnim_GeneralFrame0, - sAnim_SANDSHREW_1, - sAnim_SANDSHREW_2, -}; - -static const union AnimCmd *const sAnims_SANDSLASH[] = -{ - sAnim_GeneralFrame0, - sAnim_SANDSLASH_1, - sAnim_SANDSLASH_2, -}; - -static const union AnimCmd *const sAnims_NIDORAN_F[] = -{ - sAnim_GeneralFrame0, - sAnim_NIDORAN_F_1, -}; - -static const union AnimCmd *const sAnims_NIDORINA[] = -{ - sAnim_GeneralFrame0, - sAnim_NIDORINA_1, -}; - -static const union AnimCmd *const sAnims_NIDOQUEEN[] = -{ - sAnim_GeneralFrame0, - sAnim_NIDOQUEEN_1, -}; - -static const union AnimCmd *const sAnims_NIDORAN_M[] = -{ - sAnim_GeneralFrame0, - sAnim_NIDORAN_M_1, -}; - -static const union AnimCmd *const sAnims_NIDORINO[] = -{ - sAnim_GeneralFrame0, - sAnim_NIDORINO_1, -}; - -static const union AnimCmd *const sAnims_NIDOKING[] = -{ - sAnim_GeneralFrame0, - sAnim_NIDOKING_1, -}; - -static const union AnimCmd *const sAnims_CLEFAIRY[] = -{ - sAnim_GeneralFrame0, - sAnim_CLEFAIRY_1, -}; - -static const union AnimCmd *const sAnims_CLEFABLE[] = -{ - sAnim_GeneralFrame0, - sAnim_CLEFABLE_1, -}; - -static const union AnimCmd *const sAnims_VULPIX[] = -{ - sAnim_GeneralFrame0, - sAnim_VULPIX_1, - sAnim_VULPIX_2, -}; - -static const union AnimCmd *const sAnims_NINETALES[] = -{ - sAnim_GeneralFrame0, - sAnim_NINETALES_1, - sAnim_NINETALES_2, -}; - -static const union AnimCmd *const sAnims_JIGGLYPUFF[] = -{ - sAnim_GeneralFrame0, - sAnim_JIGGLYPUFF_1, - sAnim_JIGGLYPUFF_2, -}; +#define SINGLE_ANIMATION(name) \ +static const union AnimCmd *const sAnims_##name[] = \ +{ \ + sAnim_GeneralFrame0, \ + sAnim_##name##_1, \ +} + +#define DOUBLE_ANIMATION(name) \ +static const union AnimCmd *const sAnims_##name[] = \ +{ \ + sAnim_GeneralFrame0, \ + sAnim_##name##_1, \ + sAnim_##name##_2, \ +} + +SINGLE_ANIMATION(None); +SINGLE_ANIMATION(Bulbasaur); +SINGLE_ANIMATION(Ivysaur); +SINGLE_ANIMATION(Venusaur); +SINGLE_ANIMATION(Charmander); +SINGLE_ANIMATION(Charmeleon); +SINGLE_ANIMATION(Charizard); +SINGLE_ANIMATION(Squirtle); +SINGLE_ANIMATION(Wartortle); +SINGLE_ANIMATION(Blastoise); +SINGLE_ANIMATION(Caterpie); +SINGLE_ANIMATION(Metapod); +SINGLE_ANIMATION(Butterfree); +SINGLE_ANIMATION(Weedle); +SINGLE_ANIMATION(Kakuna); +SINGLE_ANIMATION(Beedrill); +SINGLE_ANIMATION(Pidgey); +SINGLE_ANIMATION(Pidgeotto); +SINGLE_ANIMATION(Pidgeot); +SINGLE_ANIMATION(Rattata); +SINGLE_ANIMATION(Raticate); +SINGLE_ANIMATION(Spearow); +SINGLE_ANIMATION(Fearow); +SINGLE_ANIMATION(Ekans); +SINGLE_ANIMATION(Arbok); +DOUBLE_ANIMATION(Pikachu); +DOUBLE_ANIMATION(Raichu); +DOUBLE_ANIMATION(Sandshrew); +DOUBLE_ANIMATION(Sandslash); +SINGLE_ANIMATION(NidoranF); +SINGLE_ANIMATION(Nidorina); +SINGLE_ANIMATION(Nidoqueen); +SINGLE_ANIMATION(NidoranM); +SINGLE_ANIMATION(Nidorino); +SINGLE_ANIMATION(Nidoking); +SINGLE_ANIMATION(Clefairy); +SINGLE_ANIMATION(Clefable); +DOUBLE_ANIMATION(Vulpix); +DOUBLE_ANIMATION(Ninetales); +DOUBLE_ANIMATION(Jigglypuff); +DOUBLE_ANIMATION(Wigglytuff); +SINGLE_ANIMATION(Zubat); +SINGLE_ANIMATION(Golbat); +SINGLE_ANIMATION(Oddish); +SINGLE_ANIMATION(Gloom); +SINGLE_ANIMATION(Vileplume); +SINGLE_ANIMATION(Paras); +SINGLE_ANIMATION(Parasect); +SINGLE_ANIMATION(Venonat); +SINGLE_ANIMATION(Venomoth); +SINGLE_ANIMATION(Diglett); +SINGLE_ANIMATION(Dugtrio); +SINGLE_ANIMATION(Meowth); +SINGLE_ANIMATION(Persian); +DOUBLE_ANIMATION(Psyduck); +DOUBLE_ANIMATION(Golduck); +SINGLE_ANIMATION(Mankey); +SINGLE_ANIMATION(Primeape); +SINGLE_ANIMATION(Growlithe); +SINGLE_ANIMATION(Arcanine); +SINGLE_ANIMATION(Poliwag); +SINGLE_ANIMATION(Poliwhirl); +SINGLE_ANIMATION(Poliwrath); +SINGLE_ANIMATION(Abra); +SINGLE_ANIMATION(Kadabra); +SINGLE_ANIMATION(Alakazam); +SINGLE_ANIMATION(Machop); +SINGLE_ANIMATION(Machoke); +SINGLE_ANIMATION(Machamp); +SINGLE_ANIMATION(Bellsprout); +SINGLE_ANIMATION(Weepinbell); +SINGLE_ANIMATION(Victreebel); +SINGLE_ANIMATION(Tentacool); +SINGLE_ANIMATION(Tentacruel); +SINGLE_ANIMATION(Geodude); +SINGLE_ANIMATION(Graveler); +SINGLE_ANIMATION(Golem); +SINGLE_ANIMATION(Ponyta); +SINGLE_ANIMATION(Rapidash); +SINGLE_ANIMATION(Slowpoke); +SINGLE_ANIMATION(Slowbro); +SINGLE_ANIMATION(Magnemite); +SINGLE_ANIMATION(Magneton); +SINGLE_ANIMATION(Farfetchd); +SINGLE_ANIMATION(Doduo); +SINGLE_ANIMATION(Dodrio); +SINGLE_ANIMATION(Seel); +SINGLE_ANIMATION(Dewgong); +DOUBLE_ANIMATION(Grimer); +DOUBLE_ANIMATION(Muk); +SINGLE_ANIMATION(Shellder); +SINGLE_ANIMATION(Cloyster); +SINGLE_ANIMATION(Gastly); +SINGLE_ANIMATION(Haunter); +SINGLE_ANIMATION(Gengar); +SINGLE_ANIMATION(Onix); +SINGLE_ANIMATION(Drowzee); +SINGLE_ANIMATION(Hypno); +SINGLE_ANIMATION(Krabby); +SINGLE_ANIMATION(Kingler); +SINGLE_ANIMATION(Voltorb); +SINGLE_ANIMATION(Electrode); +SINGLE_ANIMATION(Exeggcute); +SINGLE_ANIMATION(Exeggutor); +SINGLE_ANIMATION(Cubone); +SINGLE_ANIMATION(Marowak); +SINGLE_ANIMATION(Hitmonlee); +SINGLE_ANIMATION(Hitmonchan); +SINGLE_ANIMATION(Lickitung); +DOUBLE_ANIMATION(Koffing); +DOUBLE_ANIMATION(Weezing); +DOUBLE_ANIMATION(Rhyhorn); +DOUBLE_ANIMATION(Rhydon); +SINGLE_ANIMATION(Chansey); +SINGLE_ANIMATION(Tangela); +SINGLE_ANIMATION(Kangaskhan); +DOUBLE_ANIMATION(Horsea); +DOUBLE_ANIMATION(Seadra); +SINGLE_ANIMATION(Goldeen); +SINGLE_ANIMATION(Seaking); +DOUBLE_ANIMATION(Staryu); +DOUBLE_ANIMATION(Starmie); +SINGLE_ANIMATION(MrMime); +SINGLE_ANIMATION(Scyther); +SINGLE_ANIMATION(Jynx); +SINGLE_ANIMATION(Electabuzz); +SINGLE_ANIMATION(Magmar); +DOUBLE_ANIMATION(Pinsir); +SINGLE_ANIMATION(Tauros); +SINGLE_ANIMATION(Magikarp); +SINGLE_ANIMATION(Gyarados); +SINGLE_ANIMATION(Lapras); +SINGLE_ANIMATION(Ditto); +SINGLE_ANIMATION(Eevee); +SINGLE_ANIMATION(Vaporeon); +SINGLE_ANIMATION(Jolteon); +SINGLE_ANIMATION(Flareon); +SINGLE_ANIMATION(Porygon); +SINGLE_ANIMATION(Omanyte); +SINGLE_ANIMATION(Omastar); +SINGLE_ANIMATION(Kabuto); +SINGLE_ANIMATION(Kabutops); +SINGLE_ANIMATION(Aerodactyl); +SINGLE_ANIMATION(Snorlax); +SINGLE_ANIMATION(Articuno); +SINGLE_ANIMATION(Zapdos); +SINGLE_ANIMATION(Moltres); +SINGLE_ANIMATION(Dratini); +SINGLE_ANIMATION(Dragonair); +SINGLE_ANIMATION(Dragonite); +SINGLE_ANIMATION(Mewtwo); +SINGLE_ANIMATION(Mew); +SINGLE_ANIMATION(Chikorita); +SINGLE_ANIMATION(Bayleef); +SINGLE_ANIMATION(Meganium); +SINGLE_ANIMATION(Cyndaquil); +SINGLE_ANIMATION(Quilava); +SINGLE_ANIMATION(Typhlosion); +SINGLE_ANIMATION(Totodile); +SINGLE_ANIMATION(Croconaw); +SINGLE_ANIMATION(Feraligatr); +SINGLE_ANIMATION(Sentret); +SINGLE_ANIMATION(Furret); +SINGLE_ANIMATION(Hoothoot); +SINGLE_ANIMATION(Noctowl); +SINGLE_ANIMATION(Ledyba); +SINGLE_ANIMATION(Ledian); +SINGLE_ANIMATION(Spinarak); +SINGLE_ANIMATION(Ariados); +SINGLE_ANIMATION(Crobat); +DOUBLE_ANIMATION(Chinchou); +DOUBLE_ANIMATION(Lanturn); +DOUBLE_ANIMATION(Pichu); +SINGLE_ANIMATION(Cleffa); +DOUBLE_ANIMATION(Igglybuff); +SINGLE_ANIMATION(Togepi); +SINGLE_ANIMATION(Togetic); +DOUBLE_ANIMATION(Natu); +DOUBLE_ANIMATION(Xatu); +SINGLE_ANIMATION(Mareep); +SINGLE_ANIMATION(Flaaffy); +SINGLE_ANIMATION(Ampharos); +SINGLE_ANIMATION(Bellossom); +SINGLE_ANIMATION(Marill); +SINGLE_ANIMATION(Azumarill); +SINGLE_ANIMATION(Sudowoodo); +SINGLE_ANIMATION(Politoed); +SINGLE_ANIMATION(Hoppip); +SINGLE_ANIMATION(Skiploom); +SINGLE_ANIMATION(Jumpluff); +SINGLE_ANIMATION(Aipom); +SINGLE_ANIMATION(Sunkern); +SINGLE_ANIMATION(Sunflora); +SINGLE_ANIMATION(Yanma); +SINGLE_ANIMATION(Wooper); +SINGLE_ANIMATION(Quagsire); +SINGLE_ANIMATION(Espeon); +SINGLE_ANIMATION(Umbreon); +SINGLE_ANIMATION(Murkrow); +SINGLE_ANIMATION(Slowking); +SINGLE_ANIMATION(Misdreavus); +SINGLE_ANIMATION(Unown); +DOUBLE_ANIMATION(Wobbuffet); +DOUBLE_ANIMATION(Girafarig); +SINGLE_ANIMATION(Pineco); +SINGLE_ANIMATION(Forretress); +SINGLE_ANIMATION(Dunsparce); +SINGLE_ANIMATION(Gligar); +SINGLE_ANIMATION(Steelix); +SINGLE_ANIMATION(Snubbull); +SINGLE_ANIMATION(Granbull); +SINGLE_ANIMATION(Qwilfish); +SINGLE_ANIMATION(Scizor); +SINGLE_ANIMATION(Shuckle); +SINGLE_ANIMATION(Heracross); +SINGLE_ANIMATION(Sneasel); +SINGLE_ANIMATION(Teddiursa); +SINGLE_ANIMATION(Ursaring); +DOUBLE_ANIMATION(Slugma); +DOUBLE_ANIMATION(Magcargo); +SINGLE_ANIMATION(Swinub); +SINGLE_ANIMATION(Piloswine); +DOUBLE_ANIMATION(Corsola); +SINGLE_ANIMATION(Remoraid); +SINGLE_ANIMATION(Octillery); +SINGLE_ANIMATION(Delibird); +SINGLE_ANIMATION(Mantine); +SINGLE_ANIMATION(Skarmory); +SINGLE_ANIMATION(Houndour); +SINGLE_ANIMATION(Houndoom); +DOUBLE_ANIMATION(Kingdra); +DOUBLE_ANIMATION(Phanpy); +SINGLE_ANIMATION(Donphan); +SINGLE_ANIMATION(Porygon2); +SINGLE_ANIMATION(Stantler); +SINGLE_ANIMATION(Smeargle); +SINGLE_ANIMATION(Tyrogue); +SINGLE_ANIMATION(Hitmontop); +SINGLE_ANIMATION(Smoochum); +SINGLE_ANIMATION(Elekid); +SINGLE_ANIMATION(Magby); +SINGLE_ANIMATION(Miltank); +SINGLE_ANIMATION(Blissey); +SINGLE_ANIMATION(Raikou); +SINGLE_ANIMATION(Entei); +SINGLE_ANIMATION(Suicune); +SINGLE_ANIMATION(Larvitar); +SINGLE_ANIMATION(Pupitar); +SINGLE_ANIMATION(Tyranitar); +SINGLE_ANIMATION(Lugia); +SINGLE_ANIMATION(HoOh); +SINGLE_ANIMATION(Celebi); +SINGLE_ANIMATION(OldUnownB); +SINGLE_ANIMATION(Treecko); +SINGLE_ANIMATION(Grovyle); +SINGLE_ANIMATION(Sceptile); +SINGLE_ANIMATION(Torchic); +SINGLE_ANIMATION(Combusken); +static const union AnimCmd *const sAnims_Blaziken[] ={ + sAnim_GeneralFrame0, + sAnim_Blaziken_1, + sAnim_Blaziken_2, + sAnim_Blaziken_3, + sAnim_Blaziken_4, +}; +SINGLE_ANIMATION(Mudkip); +SINGLE_ANIMATION(Marshtomp); +SINGLE_ANIMATION(Swampert); +SINGLE_ANIMATION(Poochyena); +SINGLE_ANIMATION(Mightyena); +SINGLE_ANIMATION(Zigzagoon); +SINGLE_ANIMATION(Linoone); +SINGLE_ANIMATION(Wurmple); +DOUBLE_ANIMATION(Silcoon); +DOUBLE_ANIMATION(Beautifly); +DOUBLE_ANIMATION(Cascoon); +DOUBLE_ANIMATION(Dustox); +SINGLE_ANIMATION(Lotad); +SINGLE_ANIMATION(Lombre); +SINGLE_ANIMATION(Ludicolo); +SINGLE_ANIMATION(Seedot); +SINGLE_ANIMATION(Nuzleaf); +SINGLE_ANIMATION(Shiftry); +SINGLE_ANIMATION(Nincada); +SINGLE_ANIMATION(Ninjask); +SINGLE_ANIMATION(Shedinja); +SINGLE_ANIMATION(Taillow); +SINGLE_ANIMATION(Swellow); +SINGLE_ANIMATION(Shroomish); +SINGLE_ANIMATION(Breloom); +static const union AnimCmd *const sAnims_Spinda[] ={ + sAnim_GeneralFrame0, +}; +SINGLE_ANIMATION(Wingull); +SINGLE_ANIMATION(Pelipper); +DOUBLE_ANIMATION(Surskit); +DOUBLE_ANIMATION(Masquerain); +SINGLE_ANIMATION(Wailmer); +SINGLE_ANIMATION(Wailord); +SINGLE_ANIMATION(Skitty); +SINGLE_ANIMATION(Delcatty); +SINGLE_ANIMATION(Kecleon); +SINGLE_ANIMATION(Baltoy); +SINGLE_ANIMATION(Claydol); +SINGLE_ANIMATION(Nosepass); +SINGLE_ANIMATION(Torkoal); +SINGLE_ANIMATION(Sableye); +SINGLE_ANIMATION(Barboach); +SINGLE_ANIMATION(Whiscash); +SINGLE_ANIMATION(Luvdisc); +SINGLE_ANIMATION(Corphish); +SINGLE_ANIMATION(Crawdaunt); +SINGLE_ANIMATION(Feebas); +SINGLE_ANIMATION(Milotic); +SINGLE_ANIMATION(Carvanha); +SINGLE_ANIMATION(Sharpedo); +SINGLE_ANIMATION(Trapinch); +SINGLE_ANIMATION(Vibrava); +SINGLE_ANIMATION(Flygon); +SINGLE_ANIMATION(Makuhita); +SINGLE_ANIMATION(Hariyama); +SINGLE_ANIMATION(Electrike); +SINGLE_ANIMATION(Manectric); +SINGLE_ANIMATION(Numel); +SINGLE_ANIMATION(Camerupt); +SINGLE_ANIMATION(Spheal); +SINGLE_ANIMATION(Sealeo); +SINGLE_ANIMATION(Walrein); +SINGLE_ANIMATION(Cacnea); +SINGLE_ANIMATION(Cacturne); +SINGLE_ANIMATION(Snorunt); +SINGLE_ANIMATION(Glalie); +DOUBLE_ANIMATION(Lunatone); +DOUBLE_ANIMATION(Solrock); +SINGLE_ANIMATION(Azurill); +SINGLE_ANIMATION(Spoink); +SINGLE_ANIMATION(Grumpig); +SINGLE_ANIMATION(Plusle); +SINGLE_ANIMATION(Minun); +SINGLE_ANIMATION(Mawile); +SINGLE_ANIMATION(Meditite); +SINGLE_ANIMATION(Medicham); +DOUBLE_ANIMATION(Swablu); +DOUBLE_ANIMATION(Altaria); +SINGLE_ANIMATION(Wynaut); +SINGLE_ANIMATION(Duskull); +SINGLE_ANIMATION(Dusclops); +SINGLE_ANIMATION(Roselia); +SINGLE_ANIMATION(Slakoth); +SINGLE_ANIMATION(Vigoroth); +SINGLE_ANIMATION(Slaking); +SINGLE_ANIMATION(Gulpin); +SINGLE_ANIMATION(Swalot); +SINGLE_ANIMATION(Tropius); +SINGLE_ANIMATION(Whismur); +SINGLE_ANIMATION(Loudred); +SINGLE_ANIMATION(Exploud); +SINGLE_ANIMATION(Clamperl); +SINGLE_ANIMATION(Huntail); +SINGLE_ANIMATION(Gorebyss); +SINGLE_ANIMATION(Absol); +SINGLE_ANIMATION(Shuppet); +SINGLE_ANIMATION(Banette); +SINGLE_ANIMATION(Seviper); +SINGLE_ANIMATION(Zangoose); +SINGLE_ANIMATION(Relicanth); +SINGLE_ANIMATION(Aron); +SINGLE_ANIMATION(Lairon); +SINGLE_ANIMATION(Aggron); +static const union AnimCmd *const sAnims_Castform[] ={ + sAnim_Castform_0, + sAnim_Castform_1, + sAnim_Castform_2, + sAnim_Castform_3, +}; +SINGLE_ANIMATION(Volbeat); +SINGLE_ANIMATION(Illumise); +SINGLE_ANIMATION(Lileep); +SINGLE_ANIMATION(Cradily); +SINGLE_ANIMATION(Anorith); +SINGLE_ANIMATION(Armaldo); +SINGLE_ANIMATION(Ralts); +SINGLE_ANIMATION(Kirlia); +SINGLE_ANIMATION(Gardevoir); +SINGLE_ANIMATION(Bagon); +SINGLE_ANIMATION(Shelgon); +SINGLE_ANIMATION(Salamence); +SINGLE_ANIMATION(Beldum); +SINGLE_ANIMATION(Metang); +SINGLE_ANIMATION(Metagross); +DOUBLE_ANIMATION(Regirock); +SINGLE_ANIMATION(Regice); +DOUBLE_ANIMATION(Registeel); +DOUBLE_ANIMATION(Kyogre); +DOUBLE_ANIMATION(Groudon); +DOUBLE_ANIMATION(Rayquaza); +DOUBLE_ANIMATION(Latias); +DOUBLE_ANIMATION(Latios); +DOUBLE_ANIMATION(Jirachi); +DOUBLE_ANIMATION(Deoxys); +SINGLE_ANIMATION(Chimecho); +SINGLE_ANIMATION(Egg); +SINGLE_ANIMATION(UnownB); +SINGLE_ANIMATION(UnownC); +SINGLE_ANIMATION(UnownD); +SINGLE_ANIMATION(UnownE); +SINGLE_ANIMATION(UnownF); +SINGLE_ANIMATION(UnownG); +SINGLE_ANIMATION(UnownH); +SINGLE_ANIMATION(UnownI); +SINGLE_ANIMATION(UnownJ); +SINGLE_ANIMATION(UnownK); +SINGLE_ANIMATION(UnownL); +SINGLE_ANIMATION(UnownM); +SINGLE_ANIMATION(UnownN); +SINGLE_ANIMATION(UnownO); +SINGLE_ANIMATION(UnownP); +SINGLE_ANIMATION(UnownQ); +SINGLE_ANIMATION(UnownR); +SINGLE_ANIMATION(UnownS); +SINGLE_ANIMATION(UnownT); +SINGLE_ANIMATION(UnownU); +SINGLE_ANIMATION(UnownV); +SINGLE_ANIMATION(UnownW); +SINGLE_ANIMATION(UnownX); +SINGLE_ANIMATION(UnownY); +SINGLE_ANIMATION(UnownZ); +SINGLE_ANIMATION(UnownEMark); +SINGLE_ANIMATION(UnownQMark); +#if P_GEN_4_POKEMON == TRUE +SINGLE_ANIMATION(Turtwig); +SINGLE_ANIMATION(Grotle); +SINGLE_ANIMATION(Torterra); +SINGLE_ANIMATION(Chimchar); +SINGLE_ANIMATION(Monferno); +SINGLE_ANIMATION(Infernape); +SINGLE_ANIMATION(Piplup); +SINGLE_ANIMATION(Prinplup); +SINGLE_ANIMATION(Empoleon); +SINGLE_ANIMATION(Starly); +SINGLE_ANIMATION(Staravia); +SINGLE_ANIMATION(Staraptor); +SINGLE_ANIMATION(Bidoof); +DOUBLE_ANIMATION(Bibarel); +SINGLE_ANIMATION(Kricketot); +SINGLE_ANIMATION(Kricketune); +SINGLE_ANIMATION(Shinx); +SINGLE_ANIMATION(Luxio); +DOUBLE_ANIMATION(Luxray); +SINGLE_ANIMATION(Budew); +SINGLE_ANIMATION(Roserade); +SINGLE_ANIMATION(Cranidos); +SINGLE_ANIMATION(Rampardos); +SINGLE_ANIMATION(Shieldon); +SINGLE_ANIMATION(Bastiodon); +SINGLE_ANIMATION(Burmy); +SINGLE_ANIMATION(Wormadam); +SINGLE_ANIMATION(Mothim); +SINGLE_ANIMATION(Combee); +SINGLE_ANIMATION(Vespiquen); +SINGLE_ANIMATION(Pachirisu); +SINGLE_ANIMATION(Buizel); +SINGLE_ANIMATION(Floatzel); +SINGLE_ANIMATION(Cherubi); +DOUBLE_ANIMATION(CherrimOvercast); +SINGLE_ANIMATION(CherrimSunshine); +SINGLE_ANIMATION(Shellos); +SINGLE_ANIMATION(Gastrodon); +SINGLE_ANIMATION(Ambipom); +SINGLE_ANIMATION(Drifloon); +SINGLE_ANIMATION(Drifblim); +SINGLE_ANIMATION(Buneary); +SINGLE_ANIMATION(Lopunny); +SINGLE_ANIMATION(Mismagius); +SINGLE_ANIMATION(Honchkrow); +SINGLE_ANIMATION(Glameow); +SINGLE_ANIMATION(Purugly); +SINGLE_ANIMATION(Chingling); +SINGLE_ANIMATION(Stunky); +SINGLE_ANIMATION(Skuntank); +SINGLE_ANIMATION(Bronzor); +DOUBLE_ANIMATION(Bronzong); +SINGLE_ANIMATION(Bonsly); +SINGLE_ANIMATION(MimeJr); +SINGLE_ANIMATION(Happiny); +SINGLE_ANIMATION(Chatot); +SINGLE_ANIMATION(Spiritomb); +SINGLE_ANIMATION(Gible); +SINGLE_ANIMATION(Gabite); +SINGLE_ANIMATION(Garchomp); +SINGLE_ANIMATION(Munchlax); +SINGLE_ANIMATION(Riolu); +SINGLE_ANIMATION(Lucario); +SINGLE_ANIMATION(Hippopotas); +SINGLE_ANIMATION(Hippowdon); +SINGLE_ANIMATION(Skorupi); +SINGLE_ANIMATION(Drapion); +SINGLE_ANIMATION(Croagunk); +SINGLE_ANIMATION(Toxicroak); +SINGLE_ANIMATION(Carnivine); +SINGLE_ANIMATION(Finneon); +SINGLE_ANIMATION(Lumineon); +SINGLE_ANIMATION(Mantyke); +SINGLE_ANIMATION(Snover); +SINGLE_ANIMATION(Abomasnow); +SINGLE_ANIMATION(Weavile); +SINGLE_ANIMATION(Magnezone); +SINGLE_ANIMATION(Lickilicky); +SINGLE_ANIMATION(Rhyperior); +SINGLE_ANIMATION(Tangrowth); +SINGLE_ANIMATION(Electivire); +SINGLE_ANIMATION(Magmortar); +SINGLE_ANIMATION(Togekiss); +SINGLE_ANIMATION(Yanmega); +SINGLE_ANIMATION(Leafeon); +SINGLE_ANIMATION(Glaceon); +SINGLE_ANIMATION(Gliscor); +SINGLE_ANIMATION(Mamoswine); +SINGLE_ANIMATION(PORYGON_Z); +SINGLE_ANIMATION(Gallade); +DOUBLE_ANIMATION(Probopass); +SINGLE_ANIMATION(Dusknoir); +SINGLE_ANIMATION(Froslass); +DOUBLE_ANIMATION(Rotom); +SINGLE_ANIMATION(RotomHeat); +SINGLE_ANIMATION(RotomFrost); +SINGLE_ANIMATION(RotomFan); +SINGLE_ANIMATION(RotomMow); +SINGLE_ANIMATION(RotomWash); +SINGLE_ANIMATION(Uxie); +SINGLE_ANIMATION(Mesprit); +SINGLE_ANIMATION(Azelf); +SINGLE_ANIMATION(Dialga); +SINGLE_ANIMATION(Palkia); +SINGLE_ANIMATION(Heatran); +SINGLE_ANIMATION(Regigigas); +SINGLE_ANIMATION(Giratina); +SINGLE_ANIMATION(Cresselia); +SINGLE_ANIMATION(Phione); +SINGLE_ANIMATION(Manaphy); +SINGLE_ANIMATION(Darkrai); +SINGLE_ANIMATION(Shaymin); +SINGLE_ANIMATION(Arceus); +#endif +#if P_GEN_5_POKEMON == TRUE +SINGLE_ANIMATION(Victini); +SINGLE_ANIMATION(Snivy); +SINGLE_ANIMATION(Servine); +DOUBLE_ANIMATION(Serperior); +SINGLE_ANIMATION(Tepig); +SINGLE_ANIMATION(Pignite); +SINGLE_ANIMATION(Emboar); +SINGLE_ANIMATION(Oshawott); +SINGLE_ANIMATION(Dewott); +SINGLE_ANIMATION(Samurott); +SINGLE_ANIMATION(Patrat); +SINGLE_ANIMATION(Watchog); +SINGLE_ANIMATION(Lillipup); +SINGLE_ANIMATION(Herdier); +SINGLE_ANIMATION(Stoutland); +SINGLE_ANIMATION(Purrloin); +SINGLE_ANIMATION(Liepard); +SINGLE_ANIMATION(Pansage); +SINGLE_ANIMATION(Simisage); +SINGLE_ANIMATION(Pansear); +DOUBLE_ANIMATION(Simisear); +SINGLE_ANIMATION(Panpour); +SINGLE_ANIMATION(Simipour); +SINGLE_ANIMATION(Munna); +DOUBLE_ANIMATION(Musharna); +SINGLE_ANIMATION(Pidove); +SINGLE_ANIMATION(Tranquill); +SINGLE_ANIMATION(Unfezant); +SINGLE_ANIMATION(Blitzle); +SINGLE_ANIMATION(Zebstrika); +SINGLE_ANIMATION(Roggenrola); +SINGLE_ANIMATION(Boldore); +SINGLE_ANIMATION(Gigalith); +SINGLE_ANIMATION(Woobat); +SINGLE_ANIMATION(Swoobat); +DOUBLE_ANIMATION(Drilbur); +SINGLE_ANIMATION(Excadrill); +SINGLE_ANIMATION(Audino); +SINGLE_ANIMATION(Timburr); +SINGLE_ANIMATION(Gurdurr); +SINGLE_ANIMATION(Conkeldurr); +SINGLE_ANIMATION(Tympole); +SINGLE_ANIMATION(Palpitoad); +SINGLE_ANIMATION(Seismitoad); +SINGLE_ANIMATION(Throh); +SINGLE_ANIMATION(Sawk); +DOUBLE_ANIMATION(Sewaddle); +SINGLE_ANIMATION(Swadloon); +SINGLE_ANIMATION(Leavanny); +SINGLE_ANIMATION(Venipede); +SINGLE_ANIMATION(Whirlipede); +SINGLE_ANIMATION(Scolipede); +SINGLE_ANIMATION(Cottonee); +SINGLE_ANIMATION(Whimsicott); +SINGLE_ANIMATION(Petilil); +SINGLE_ANIMATION(Lilligant); +SINGLE_ANIMATION(Basculin); +SINGLE_ANIMATION(Sandile); +SINGLE_ANIMATION(Krokorok); +DOUBLE_ANIMATION(Krookodile); +SINGLE_ANIMATION(Darumaka); +SINGLE_ANIMATION(Darmanitan); +SINGLE_ANIMATION(Maractus); +SINGLE_ANIMATION(Dwebble); +SINGLE_ANIMATION(Crustle); +SINGLE_ANIMATION(Scraggy); +SINGLE_ANIMATION(Scrafty); +SINGLE_ANIMATION(Sigilyph); +SINGLE_ANIMATION(Yamask); +SINGLE_ANIMATION(Cofagrigus); +SINGLE_ANIMATION(Tirtouga); +SINGLE_ANIMATION(Carracosta); +SINGLE_ANIMATION(Archen); +SINGLE_ANIMATION(Archeops); +SINGLE_ANIMATION(Trubbish); +SINGLE_ANIMATION(Garbodor); +SINGLE_ANIMATION(Zorua); +SINGLE_ANIMATION(Zoroark); +SINGLE_ANIMATION(Minccino); +SINGLE_ANIMATION(Cinccino); +SINGLE_ANIMATION(Gothita); +DOUBLE_ANIMATION(Gothorita); +SINGLE_ANIMATION(Gothitelle); +SINGLE_ANIMATION(Solosis); +SINGLE_ANIMATION(Duosion); +SINGLE_ANIMATION(Reuniclus); +SINGLE_ANIMATION(Ducklett); +SINGLE_ANIMATION(Swanna); +SINGLE_ANIMATION(Vanillite); +SINGLE_ANIMATION(Vanillish); +SINGLE_ANIMATION(Vanilluxe); +SINGLE_ANIMATION(Deerling); +SINGLE_ANIMATION(Sawsbuck); +SINGLE_ANIMATION(Emolga); +SINGLE_ANIMATION(Karrablast); +SINGLE_ANIMATION(Escavalier); +DOUBLE_ANIMATION(Foongus); +SINGLE_ANIMATION(Amoonguss); +SINGLE_ANIMATION(Frillish); +SINGLE_ANIMATION(Jellicent); +SINGLE_ANIMATION(Alomomola); +SINGLE_ANIMATION(Joltik); +SINGLE_ANIMATION(Galvantula); +SINGLE_ANIMATION(Ferroseed); +DOUBLE_ANIMATION(Ferrothorn); +SINGLE_ANIMATION(Klink); +SINGLE_ANIMATION(Klang); +SINGLE_ANIMATION(Klinklang); +SINGLE_ANIMATION(Tynamo); +SINGLE_ANIMATION(Eelektrik); +SINGLE_ANIMATION(Eelektross); +SINGLE_ANIMATION(Elgyem); +SINGLE_ANIMATION(Beheeyem); +SINGLE_ANIMATION(Litwick); +SINGLE_ANIMATION(Lampent); +SINGLE_ANIMATION(Chandelure); +SINGLE_ANIMATION(Axew); +SINGLE_ANIMATION(Fraxure); +SINGLE_ANIMATION(Haxorus); +SINGLE_ANIMATION(Cubchoo); +SINGLE_ANIMATION(Beartic); +DOUBLE_ANIMATION(Cryogonal); +SINGLE_ANIMATION(Shelmet); +SINGLE_ANIMATION(Accelgor); +SINGLE_ANIMATION(Stunfisk); +SINGLE_ANIMATION(Mienfoo); +SINGLE_ANIMATION(Mienshao); +SINGLE_ANIMATION(Druddigon); +SINGLE_ANIMATION(Golett); +SINGLE_ANIMATION(Golurk); +SINGLE_ANIMATION(Pawniard); +SINGLE_ANIMATION(Bisharp); +SINGLE_ANIMATION(Bouffalant); +SINGLE_ANIMATION(Rufflet); +SINGLE_ANIMATION(Braviary); +SINGLE_ANIMATION(Vullaby); +SINGLE_ANIMATION(Mandibuzz); +SINGLE_ANIMATION(Heatmor); +SINGLE_ANIMATION(Durant); +SINGLE_ANIMATION(Deino); +SINGLE_ANIMATION(Zweilous); +SINGLE_ANIMATION(Hydreigon); +SINGLE_ANIMATION(Larvesta); +SINGLE_ANIMATION(Volcarona); +SINGLE_ANIMATION(Cobalion); +DOUBLE_ANIMATION(Terrakion); +SINGLE_ANIMATION(Virizion); +SINGLE_ANIMATION(Tornadus); +SINGLE_ANIMATION(Thundurus); +SINGLE_ANIMATION(Reshiram); +SINGLE_ANIMATION(Zekrom); +SINGLE_ANIMATION(Landorus); +SINGLE_ANIMATION(Kyurem); +SINGLE_ANIMATION(Keldeo); +DOUBLE_ANIMATION(Meloetta); +SINGLE_ANIMATION(Genesect); +#endif +#if P_GEN_6_POKEMON == TRUE +SINGLE_ANIMATION(Chespin); +DOUBLE_ANIMATION(Quilladin); +SINGLE_ANIMATION(Chesnaught); +SINGLE_ANIMATION(Fennekin); +SINGLE_ANIMATION(Braixen); +SINGLE_ANIMATION(Delphox); +SINGLE_ANIMATION(Froakie); +SINGLE_ANIMATION(Frogadier); +SINGLE_ANIMATION(Greninja); +SINGLE_ANIMATION(GreninjaAsh); +SINGLE_ANIMATION(Bunnelby); +SINGLE_ANIMATION(Diggersby); +SINGLE_ANIMATION(Fletchling); +SINGLE_ANIMATION(Fletchinder); +DOUBLE_ANIMATION(Talonflame); +SINGLE_ANIMATION(Scatterbug); +SINGLE_ANIMATION(Spewpa); +SINGLE_ANIMATION(Vivillon); +SINGLE_ANIMATION(Litleo); +SINGLE_ANIMATION(Pyroar); +DOUBLE_ANIMATION(Flabebe); +SINGLE_ANIMATION(Floette); +DOUBLE_ANIMATION(Florges); +SINGLE_ANIMATION(Skiddo); +SINGLE_ANIMATION(Gogoat); +SINGLE_ANIMATION(Pancham); +SINGLE_ANIMATION(Pangoro); +SINGLE_ANIMATION(Furfrou); +SINGLE_ANIMATION(Espurr); +SINGLE_ANIMATION(Meowstic); +SINGLE_ANIMATION(Honedge); +DOUBLE_ANIMATION(Doublade); +SINGLE_ANIMATION(Aegislash); +SINGLE_ANIMATION(Spritzee); +SINGLE_ANIMATION(Aromatisse); +SINGLE_ANIMATION(Swirlix); +SINGLE_ANIMATION(Slurpuff); +SINGLE_ANIMATION(Inkay); +SINGLE_ANIMATION(Malamar); +SINGLE_ANIMATION(Binacle); +SINGLE_ANIMATION(Barbaracle); +SINGLE_ANIMATION(Skrelp); +SINGLE_ANIMATION(Dragalge); +SINGLE_ANIMATION(Clauncher); +SINGLE_ANIMATION(Clawitzer); +SINGLE_ANIMATION(Helioptile); +SINGLE_ANIMATION(Heliolisk); +SINGLE_ANIMATION(Tyrunt); +SINGLE_ANIMATION(Tyrantrum); +SINGLE_ANIMATION(Amaura); +SINGLE_ANIMATION(Aurorus); +SINGLE_ANIMATION(Sylveon); +SINGLE_ANIMATION(Hawlucha); +SINGLE_ANIMATION(Dedenne); +SINGLE_ANIMATION(Carbink); +SINGLE_ANIMATION(Goomy); +SINGLE_ANIMATION(Sliggoo); +SINGLE_ANIMATION(Goodra); +SINGLE_ANIMATION(Klefki); +SINGLE_ANIMATION(Phantump); +SINGLE_ANIMATION(Trevenant); +SINGLE_ANIMATION(Pumpkaboo); +SINGLE_ANIMATION(Gourgeist); +DOUBLE_ANIMATION(Bergmite); +SINGLE_ANIMATION(Avalugg); +SINGLE_ANIMATION(Noibat); +SINGLE_ANIMATION(Noivern); +SINGLE_ANIMATION(Xerneas); +SINGLE_ANIMATION(Yveltal); +SINGLE_ANIMATION(Zygarde); +SINGLE_ANIMATION(Diancie); +SINGLE_ANIMATION(Hoopa); +SINGLE_ANIMATION(Volcanion); +#endif +#if P_GEN_7_POKEMON == TRUE +SINGLE_ANIMATION(Rowlet); +SINGLE_ANIMATION(Dartrix); +SINGLE_ANIMATION(Decidueye); +SINGLE_ANIMATION(Litten); +SINGLE_ANIMATION(Torracat); +SINGLE_ANIMATION(Incineroar); +SINGLE_ANIMATION(Popplio); +SINGLE_ANIMATION(Brionne); +SINGLE_ANIMATION(Primarina); +SINGLE_ANIMATION(Pikipek); +SINGLE_ANIMATION(Trumbeak); +SINGLE_ANIMATION(Toucannon); +SINGLE_ANIMATION(Yungoos); +SINGLE_ANIMATION(Gumshoos); +SINGLE_ANIMATION(Grubbin); +SINGLE_ANIMATION(Charjabug); +SINGLE_ANIMATION(Vikavolt); +SINGLE_ANIMATION(Crabrawler); +SINGLE_ANIMATION(Crabominable); +SINGLE_ANIMATION(Oricorio); +SINGLE_ANIMATION(Cutiefly); +SINGLE_ANIMATION(Ribombee); +SINGLE_ANIMATION(Rockruff); +SINGLE_ANIMATION(Lycanroc); +SINGLE_ANIMATION(Wishiwashi); +SINGLE_ANIMATION(Mareanie); +SINGLE_ANIMATION(Toxapex); +SINGLE_ANIMATION(Mudbray); +SINGLE_ANIMATION(Mudsdale); +SINGLE_ANIMATION(Dewpider); +SINGLE_ANIMATION(Araquanid); +SINGLE_ANIMATION(Fomantis); +SINGLE_ANIMATION(Lurantis); +SINGLE_ANIMATION(Morelull); +SINGLE_ANIMATION(Shiinotic); +SINGLE_ANIMATION(Salandit); +SINGLE_ANIMATION(Salazzle); +SINGLE_ANIMATION(Stufful); +SINGLE_ANIMATION(Bewear); +SINGLE_ANIMATION(Bounsweet); +SINGLE_ANIMATION(Steenee); +SINGLE_ANIMATION(Tsareena); +SINGLE_ANIMATION(Comfey); +SINGLE_ANIMATION(Oranguru); +SINGLE_ANIMATION(Passimian); +SINGLE_ANIMATION(Wimpod); +SINGLE_ANIMATION(Golisopod); +SINGLE_ANIMATION(Sandygast); +SINGLE_ANIMATION(Palossand); +SINGLE_ANIMATION(Pyukumuku); +SINGLE_ANIMATION(TypeNull); +SINGLE_ANIMATION(Silvally); +SINGLE_ANIMATION(Minior); +SINGLE_ANIMATION(Komala); +SINGLE_ANIMATION(Turtonator); +SINGLE_ANIMATION(Togedemaru); +SINGLE_ANIMATION(Mimikyu); +SINGLE_ANIMATION(Bruxish); +SINGLE_ANIMATION(Drampa); +SINGLE_ANIMATION(Dhelmise); +SINGLE_ANIMATION(JANGMO_O); +SINGLE_ANIMATION(HAKAMO_O); +SINGLE_ANIMATION(KOMMO_O); +SINGLE_ANIMATION(TapuKoko); +SINGLE_ANIMATION(TapuLele); +SINGLE_ANIMATION(TapuBulu); +SINGLE_ANIMATION(TapuFini); +SINGLE_ANIMATION(Cosmog); +SINGLE_ANIMATION(Cosmoem); +SINGLE_ANIMATION(Solgaleo); +SINGLE_ANIMATION(Lunala); +SINGLE_ANIMATION(Nihilego); +SINGLE_ANIMATION(Buzzwole); +SINGLE_ANIMATION(Pheromosa); +SINGLE_ANIMATION(Xurkitree); +SINGLE_ANIMATION(Celesteela); +SINGLE_ANIMATION(Kartana); +SINGLE_ANIMATION(Guzzlord); +SINGLE_ANIMATION(Necrozma); +SINGLE_ANIMATION(Magearna); +SINGLE_ANIMATION(Marshadow); +SINGLE_ANIMATION(Poipole); +SINGLE_ANIMATION(Naganadel); +SINGLE_ANIMATION(Stakataka); +SINGLE_ANIMATION(Blacephalon); +SINGLE_ANIMATION(Zeraora); +SINGLE_ANIMATION(Meltan); +SINGLE_ANIMATION(Melmetal); +#endif +#if P_GEN_8_POKEMON == TRUE +SINGLE_ANIMATION(Grookey); +SINGLE_ANIMATION(Thwackey); +SINGLE_ANIMATION(Rillaboom); +SINGLE_ANIMATION(Scorbunny); +SINGLE_ANIMATION(Raboot); +SINGLE_ANIMATION(Cinderace); +SINGLE_ANIMATION(Sobble); +SINGLE_ANIMATION(Drizzile); +SINGLE_ANIMATION(Inteleon); +SINGLE_ANIMATION(Skwovet); +SINGLE_ANIMATION(Greedent); +SINGLE_ANIMATION(Rookidee); +SINGLE_ANIMATION(Corvisquire); +SINGLE_ANIMATION(Corviknight); +SINGLE_ANIMATION(Blipbug); +SINGLE_ANIMATION(Dottler); +SINGLE_ANIMATION(Orbeetle); +SINGLE_ANIMATION(Nickit); +SINGLE_ANIMATION(Thievul); +SINGLE_ANIMATION(Gossifleur); +SINGLE_ANIMATION(Eldegoss); +SINGLE_ANIMATION(Wooloo); +SINGLE_ANIMATION(Dubwool); +SINGLE_ANIMATION(Chewtle); +SINGLE_ANIMATION(Drednaw); +SINGLE_ANIMATION(Yamper); +SINGLE_ANIMATION(Boltund); +SINGLE_ANIMATION(Rolycoly); +SINGLE_ANIMATION(Carkol); +SINGLE_ANIMATION(Coalossal); +SINGLE_ANIMATION(Applin); +SINGLE_ANIMATION(Flapple); +SINGLE_ANIMATION(Appletun); +SINGLE_ANIMATION(Silicobra); +SINGLE_ANIMATION(Sandaconda); +SINGLE_ANIMATION(Cramorant); +SINGLE_ANIMATION(Arrokuda); +SINGLE_ANIMATION(Barraskewda); +SINGLE_ANIMATION(Toxel); +SINGLE_ANIMATION(Toxtricity); +SINGLE_ANIMATION(Sizzlipede); +SINGLE_ANIMATION(Centiskorch); +SINGLE_ANIMATION(Clobbopus); +SINGLE_ANIMATION(Grapploct); +SINGLE_ANIMATION(Sinistea); +SINGLE_ANIMATION(Polteageist); +SINGLE_ANIMATION(Hatenna); +SINGLE_ANIMATION(Hattrem); +SINGLE_ANIMATION(Hatterene); +SINGLE_ANIMATION(Impidimp); +SINGLE_ANIMATION(Morgrem); +SINGLE_ANIMATION(Grimmsnarl); +SINGLE_ANIMATION(Obstagoon); +SINGLE_ANIMATION(Perrserker); +SINGLE_ANIMATION(Cursola); +SINGLE_ANIMATION(Sirfetchd); +SINGLE_ANIMATION(MrRime); +SINGLE_ANIMATION(Runerigus); +SINGLE_ANIMATION(Milcery); +SINGLE_ANIMATION(Alcremie); +SINGLE_ANIMATION(Falinks); +SINGLE_ANIMATION(Pincurchin); +SINGLE_ANIMATION(Snom); +SINGLE_ANIMATION(Frosmoth); +SINGLE_ANIMATION(Stonjourner); +SINGLE_ANIMATION(Eiscue); +SINGLE_ANIMATION(Indeedee); +SINGLE_ANIMATION(Morpeko); +SINGLE_ANIMATION(Cufant); +SINGLE_ANIMATION(Copperajah); +SINGLE_ANIMATION(Dracozolt); +SINGLE_ANIMATION(Arctozolt); +SINGLE_ANIMATION(Dracovish); +SINGLE_ANIMATION(Arctovish); +SINGLE_ANIMATION(Duraludon); +SINGLE_ANIMATION(Dreepy); +SINGLE_ANIMATION(Drakloak); +SINGLE_ANIMATION(Dragapult); +SINGLE_ANIMATION(Zacian); +SINGLE_ANIMATION(Zamazenta); +SINGLE_ANIMATION(Eternatus); +SINGLE_ANIMATION(Kubfu); +SINGLE_ANIMATION(Urshifu); +SINGLE_ANIMATION(Zarude); +SINGLE_ANIMATION(Regieleki); +SINGLE_ANIMATION(Regidrago); +SINGLE_ANIMATION(Glastrier); +SINGLE_ANIMATION(Spectrier); +SINGLE_ANIMATION(Calyrex); +SINGLE_ANIMATION(Wyrdeer); +SINGLE_ANIMATION(Kleavor); +SINGLE_ANIMATION(Ursaluna); +SINGLE_ANIMATION(Basculegion); +SINGLE_ANIMATION(Sneasler); +SINGLE_ANIMATION(Overqwil); +SINGLE_ANIMATION(Enamorus); +#endif +SINGLE_ANIMATION(VenusaurMega); +SINGLE_ANIMATION(CHARIZARD_MEGA_X); +SINGLE_ANIMATION(CHARIZARD_MEGA_Y); +SINGLE_ANIMATION(BlastoiseMega); +SINGLE_ANIMATION(BeedrillMega); +SINGLE_ANIMATION(PidgeotMega); +SINGLE_ANIMATION(AlakazamMega); +SINGLE_ANIMATION(SlowbroMega); +SINGLE_ANIMATION(GengarMega); +SINGLE_ANIMATION(KangaskhanMega); +SINGLE_ANIMATION(PinsirMega); +SINGLE_ANIMATION(GyaradosMega); +SINGLE_ANIMATION(AerodactylMega); +SINGLE_ANIMATION(MEWTWO_MEGA_X); +SINGLE_ANIMATION(MEWTWO_MEGA_Y); +SINGLE_ANIMATION(AmpharosMega); +SINGLE_ANIMATION(SteelixMega); +SINGLE_ANIMATION(ScizorMega); +SINGLE_ANIMATION(HeracrossMega); +SINGLE_ANIMATION(HoundoomMega); +SINGLE_ANIMATION(TyranitarMega); +SINGLE_ANIMATION(SceptileMega); +SINGLE_ANIMATION(BlazikenMega); +SINGLE_ANIMATION(SwampertMega); +SINGLE_ANIMATION(GardevoirMega); +SINGLE_ANIMATION(SableyeMega); +SINGLE_ANIMATION(MawileMega); +SINGLE_ANIMATION(AggronMega); +SINGLE_ANIMATION(MedichamMega); +SINGLE_ANIMATION(ManectricMega); +SINGLE_ANIMATION(SharpedoMega); +SINGLE_ANIMATION(CameruptMega); +SINGLE_ANIMATION(AltariaMega); +SINGLE_ANIMATION(BanetteMega); +SINGLE_ANIMATION(AbsolMega); +SINGLE_ANIMATION(GlalieMega); +SINGLE_ANIMATION(SalamenceMega); +SINGLE_ANIMATION(MetagrossMega); +SINGLE_ANIMATION(LatiasMega); +SINGLE_ANIMATION(LatiosMega); +SINGLE_ANIMATION(KyogrePrimal); +SINGLE_ANIMATION(GroudonPrimal); +SINGLE_ANIMATION(RayquazaMega); +#if P_GEN_4_POKEMON == TRUE +SINGLE_ANIMATION(LopunnyMega); +SINGLE_ANIMATION(GarchompMega); +SINGLE_ANIMATION(LucarioMega); +SINGLE_ANIMATION(AbomasnowMega); +SINGLE_ANIMATION(GalladeMega); +#endif +#if P_GEN_5_POKEMON == TRUE +SINGLE_ANIMATION(AudinoMega); +#endif +#if P_GEN_6_POKEMON == TRUE +SINGLE_ANIMATION(DiancieMega); +#endif +SINGLE_ANIMATION(RattataAlolan); +SINGLE_ANIMATION(RaticateAlolan); +SINGLE_ANIMATION(RaichuAlolan); +SINGLE_ANIMATION(SandshrewAlolan); +SINGLE_ANIMATION(SandslashAlolan); +SINGLE_ANIMATION(VulpixAlolan); +SINGLE_ANIMATION(NinetalesAlolan); +SINGLE_ANIMATION(DiglettAlolan); +SINGLE_ANIMATION(DugtrioAlolan); +SINGLE_ANIMATION(MeowthAlolan); +SINGLE_ANIMATION(PersianAlolan); +SINGLE_ANIMATION(GeodudeAlolan); +SINGLE_ANIMATION(GravelerAlolan); +SINGLE_ANIMATION(GolemAlolan); +SINGLE_ANIMATION(GrimerAlolan); +SINGLE_ANIMATION(MukAlolan); +SINGLE_ANIMATION(ExeggutorAlolan); +SINGLE_ANIMATION(MarowakAlolan); +SINGLE_ANIMATION(MeowthGalarian); +SINGLE_ANIMATION(PonytaGalarian); +SINGLE_ANIMATION(RapidashGalarian); +SINGLE_ANIMATION(SlowpokeGalarian); +SINGLE_ANIMATION(SlowbroGalarian); +SINGLE_ANIMATION(FarfetchdGalarian); +SINGLE_ANIMATION(WeezingGalarian); +SINGLE_ANIMATION(MrMimeGalarian); +SINGLE_ANIMATION(ArticunoGalarian); +SINGLE_ANIMATION(ZapdosGalarian); +SINGLE_ANIMATION(MoltresGalarian); +SINGLE_ANIMATION(SlowkingGalarian); +SINGLE_ANIMATION(CorsolaGalarian); +SINGLE_ANIMATION(ZigzagoonGalarian); +SINGLE_ANIMATION(LinooneGalarian); +#if P_GEN_5_POKEMON == TRUE +SINGLE_ANIMATION(DarumakaGalarian); +SINGLE_ANIMATION(DarmanitanGalarian); +SINGLE_ANIMATION(YamaskGalarian); +SINGLE_ANIMATION(StunfiskGalarian); +#endif +SINGLE_ANIMATION(GrowlitheHisuian); +SINGLE_ANIMATION(ArcanineHisuian); +SINGLE_ANIMATION(VoltorbHisuian); +SINGLE_ANIMATION(ElectrodeHisuian); +SINGLE_ANIMATION(TyphlosionHisuian); +SINGLE_ANIMATION(QwilfishHisuian); +SINGLE_ANIMATION(SneaselHisuian); +#if P_GEN_5_POKEMON == TRUE +SINGLE_ANIMATION(SamurottHisuian); +SINGLE_ANIMATION(LilligantHisuian); +SINGLE_ANIMATION(ZoruaHisuian); +SINGLE_ANIMATION(ZoroarkHisuian); +SINGLE_ANIMATION(BraviaryHisuian); +#endif +#if P_GEN_6_POKEMON == TRUE +SINGLE_ANIMATION(SliggooHisuian); +SINGLE_ANIMATION(GoodraHisuian); +SINGLE_ANIMATION(AvaluggHisuian); +#endif +#if P_GEN_7_POKEMON == TRUE +SINGLE_ANIMATION(DecidueyeHisuian); +#endif +SINGLE_ANIMATION(PikachuCosplay); +SINGLE_ANIMATION(PikachuRockStar); +SINGLE_ANIMATION(PikachuBelle); +SINGLE_ANIMATION(PikachuPopStar); +SINGLE_ANIMATION(PIKACHU_PH_D); +SINGLE_ANIMATION(PikachuLibre); +SINGLE_ANIMATION(PikachuOriginalCap); +SINGLE_ANIMATION(PikachuHoennCap); +SINGLE_ANIMATION(PikachuSinnohCap); +SINGLE_ANIMATION(PikachuUnovaCap); +SINGLE_ANIMATION(PikachuKalosCap); +SINGLE_ANIMATION(PikachuAlolaCap); +SINGLE_ANIMATION(PikachuPartnerCap); +SINGLE_ANIMATION(PikachuWorldCap); +SINGLE_ANIMATION(PichuSpikyEared); +DOUBLE_ANIMATION(DeoxysAttack); +DOUBLE_ANIMATION(DeoxysDefense); +DOUBLE_ANIMATION(DeoxysSpeed); +#if P_GEN_4_POKEMON == TRUE +SINGLE_ANIMATION(DialgaOrigin); +SINGLE_ANIMATION(PalkiaOrigin); +DOUBLE_ANIMATION(GiratinaOrigin); +SINGLE_ANIMATION(ShayminSky); +#endif +#if P_GEN_5_POKEMON == TRUE +SINGLE_ANIMATION(DarmanitanZenMode); +SINGLE_ANIMATION(DarmanitanZenModeGalarian); +SINGLE_ANIMATION(TornadusTherian); +SINGLE_ANIMATION(ThundurusTherian); +SINGLE_ANIMATION(LandorusTherian); +SINGLE_ANIMATION(KyuremBlack); +SINGLE_ANIMATION(KyuremWhite); +SINGLE_ANIMATION(KeldeoResolute); +SINGLE_ANIMATION(MeloettaPirouette); +#endif +#if P_GEN_6_POKEMON == TRUE +SINGLE_ANIMATION(AegislashBlade); +SINGLE_ANIMATION(Zygarde10); +SINGLE_ANIMATION(ZygardeComplete); +SINGLE_ANIMATION(HoopaUnbound); +#endif +#if P_GEN_7_POKEMON == TRUE +SINGLE_ANIMATION(MiniorCore); +SINGLE_ANIMATION(WishiwashiSchool); +SINGLE_ANIMATION(MimikyuBusted); +SINGLE_ANIMATION(LycanrocMidnight); +SINGLE_ANIMATION(LycanrocDusk); +#endif +#if P_GEN_8_POKEMON == TRUE +SINGLE_ANIMATION(EnamorusTherian); +#endif -static const union AnimCmd *const sAnims_WIGGLYTUFF[] = +const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = { - sAnim_GeneralFrame0, - sAnim_WIGGLYTUFF_1, - sAnim_WIGGLYTUFF_2, + [SPECIES_NONE] = sAnims_None, + [SPECIES_BULBASAUR] = sAnims_Bulbasaur, + [SPECIES_IVYSAUR] = sAnims_Ivysaur, + [SPECIES_VENUSAUR] = sAnims_Venusaur, + [SPECIES_CHARMANDER] = sAnims_Charmander, + [SPECIES_CHARMELEON] = sAnims_Charmeleon, + [SPECIES_CHARIZARD] = sAnims_Charizard, + [SPECIES_SQUIRTLE] = sAnims_Squirtle, + [SPECIES_WARTORTLE] = sAnims_Wartortle, + [SPECIES_BLASTOISE] = sAnims_Blastoise, + [SPECIES_CATERPIE] = sAnims_Caterpie, + [SPECIES_METAPOD] = sAnims_Metapod, + [SPECIES_BUTTERFREE] = sAnims_Butterfree, + [SPECIES_WEEDLE] = sAnims_Weedle, + [SPECIES_KAKUNA] = sAnims_Kakuna, + [SPECIES_BEEDRILL] = sAnims_Beedrill, + [SPECIES_PIDGEY] = sAnims_Pidgey, + [SPECIES_PIDGEOTTO] = sAnims_Pidgeotto, + [SPECIES_PIDGEOT] = sAnims_Pidgeot, + [SPECIES_RATTATA] = sAnims_Rattata, + [SPECIES_RATICATE] = sAnims_Raticate, + [SPECIES_SPEAROW] = sAnims_Spearow, + [SPECIES_FEAROW] = sAnims_Fearow, + [SPECIES_EKANS] = sAnims_Ekans, + [SPECIES_ARBOK] = sAnims_Arbok, + [SPECIES_PIKACHU] = sAnims_Pikachu, + [SPECIES_RAICHU] = sAnims_Raichu, + [SPECIES_SANDSHREW] = sAnims_Sandshrew, + [SPECIES_SANDSLASH] = sAnims_Sandslash, + [SPECIES_NIDORAN_F] = sAnims_NidoranF, + [SPECIES_NIDORINA] = sAnims_Nidorina, + [SPECIES_NIDOQUEEN] = sAnims_Nidoqueen, + [SPECIES_NIDORAN_M] = sAnims_NidoranM, + [SPECIES_NIDORINO] = sAnims_Nidorino, + [SPECIES_NIDOKING] = sAnims_Nidoking, + [SPECIES_CLEFAIRY] = sAnims_Clefairy, + [SPECIES_CLEFABLE] = sAnims_Clefable, + [SPECIES_VULPIX] = sAnims_Vulpix, + [SPECIES_NINETALES] = sAnims_Ninetales, + [SPECIES_JIGGLYPUFF] = sAnims_Jigglypuff, + [SPECIES_WIGGLYTUFF] = sAnims_Wigglytuff, + [SPECIES_ZUBAT] = sAnims_Zubat, + [SPECIES_GOLBAT] = sAnims_Golbat, + [SPECIES_ODDISH] = sAnims_Oddish, + [SPECIES_GLOOM] = sAnims_Gloom, + [SPECIES_VILEPLUME] = sAnims_Vileplume, + [SPECIES_PARAS] = sAnims_Paras, + [SPECIES_PARASECT] = sAnims_Parasect, + [SPECIES_VENONAT] = sAnims_Venonat, + [SPECIES_VENOMOTH] = sAnims_Venomoth, + [SPECIES_DIGLETT] = sAnims_Diglett, + [SPECIES_DUGTRIO] = sAnims_Dugtrio, + [SPECIES_MEOWTH] = sAnims_Meowth, + [SPECIES_PERSIAN] = sAnims_Persian, + [SPECIES_PSYDUCK] = sAnims_Psyduck, + [SPECIES_GOLDUCK] = sAnims_Golduck, + [SPECIES_MANKEY] = sAnims_Mankey, + [SPECIES_PRIMEAPE] = sAnims_Primeape, + [SPECIES_GROWLITHE] = sAnims_Growlithe, + [SPECIES_ARCANINE] = sAnims_Arcanine, + [SPECIES_POLIWAG] = sAnims_Poliwag, + [SPECIES_POLIWHIRL] = sAnims_Poliwhirl, + [SPECIES_POLIWRATH] = sAnims_Poliwrath, + [SPECIES_ABRA] = sAnims_Abra, + [SPECIES_KADABRA] = sAnims_Kadabra, + [SPECIES_ALAKAZAM] = sAnims_Alakazam, + [SPECIES_MACHOP] = sAnims_Machop, + [SPECIES_MACHOKE] = sAnims_Machoke, + [SPECIES_MACHAMP] = sAnims_Machamp, + [SPECIES_BELLSPROUT] = sAnims_Bellsprout, + [SPECIES_WEEPINBELL] = sAnims_Weepinbell, + [SPECIES_VICTREEBEL] = sAnims_Victreebel, + [SPECIES_TENTACOOL] = sAnims_Tentacool, + [SPECIES_TENTACRUEL] = sAnims_Tentacruel, + [SPECIES_GEODUDE] = sAnims_Geodude, + [SPECIES_GRAVELER] = sAnims_Graveler, + [SPECIES_GOLEM] = sAnims_Golem, + [SPECIES_PONYTA] = sAnims_Ponyta, + [SPECIES_RAPIDASH] = sAnims_Rapidash, + [SPECIES_SLOWPOKE] = sAnims_Slowpoke, + [SPECIES_SLOWBRO] = sAnims_Slowbro, + [SPECIES_MAGNEMITE] = sAnims_Magnemite, + [SPECIES_MAGNETON] = sAnims_Magneton, + [SPECIES_FARFETCHD] = sAnims_Farfetchd, + [SPECIES_DODUO] = sAnims_Doduo, + [SPECIES_DODRIO] = sAnims_Dodrio, + [SPECIES_SEEL] = sAnims_Seel, + [SPECIES_DEWGONG] = sAnims_Dewgong, + [SPECIES_GRIMER] = sAnims_Grimer, + [SPECIES_MUK] = sAnims_Muk, + [SPECIES_SHELLDER] = sAnims_Shellder, + [SPECIES_CLOYSTER] = sAnims_Cloyster, + [SPECIES_GASTLY] = sAnims_Gastly, + [SPECIES_HAUNTER] = sAnims_Haunter, + [SPECIES_GENGAR] = sAnims_Gengar, + [SPECIES_ONIX] = sAnims_Onix, + [SPECIES_DROWZEE] = sAnims_Drowzee, + [SPECIES_HYPNO] = sAnims_Hypno, + [SPECIES_KRABBY] = sAnims_Krabby, + [SPECIES_KINGLER] = sAnims_Kingler, + [SPECIES_VOLTORB] = sAnims_Voltorb, + [SPECIES_ELECTRODE] = sAnims_Electrode, + [SPECIES_EXEGGCUTE] = sAnims_Exeggcute, + [SPECIES_EXEGGUTOR] = sAnims_Exeggutor, + [SPECIES_CUBONE] = sAnims_Cubone, + [SPECIES_MAROWAK] = sAnims_Marowak, + [SPECIES_HITMONLEE] = sAnims_Hitmonlee, + [SPECIES_HITMONCHAN] = sAnims_Hitmonchan, + [SPECIES_LICKITUNG] = sAnims_Lickitung, + [SPECIES_KOFFING] = sAnims_Koffing, + [SPECIES_WEEZING] = sAnims_Weezing, + [SPECIES_RHYHORN] = sAnims_Rhyhorn, + [SPECIES_RHYDON] = sAnims_Rhydon, + [SPECIES_CHANSEY] = sAnims_Chansey, + [SPECIES_TANGELA] = sAnims_Tangela, + [SPECIES_KANGASKHAN] = sAnims_Kangaskhan, + [SPECIES_HORSEA] = sAnims_Horsea, + [SPECIES_SEADRA] = sAnims_Seadra, + [SPECIES_GOLDEEN] = sAnims_Goldeen, + [SPECIES_SEAKING] = sAnims_Seaking, + [SPECIES_STARYU] = sAnims_Staryu, + [SPECIES_STARMIE] = sAnims_Starmie, + [SPECIES_MR_MIME] = sAnims_MrMime, + [SPECIES_SCYTHER] = sAnims_Scyther, + [SPECIES_JYNX] = sAnims_Jynx, + [SPECIES_ELECTABUZZ] = sAnims_Electabuzz, + [SPECIES_MAGMAR] = sAnims_Magmar, + [SPECIES_PINSIR] = sAnims_Pinsir, + [SPECIES_TAUROS] = sAnims_Tauros, + [SPECIES_MAGIKARP] = sAnims_Magikarp, + [SPECIES_GYARADOS] = sAnims_Gyarados, + [SPECIES_LAPRAS] = sAnims_Lapras, + [SPECIES_DITTO] = sAnims_Ditto, + [SPECIES_EEVEE] = sAnims_Eevee, + [SPECIES_VAPOREON] = sAnims_Vaporeon, + [SPECIES_JOLTEON] = sAnims_Jolteon, + [SPECIES_FLAREON] = sAnims_Flareon, + [SPECIES_PORYGON] = sAnims_Porygon, + [SPECIES_OMANYTE] = sAnims_Omanyte, + [SPECIES_OMASTAR] = sAnims_Omastar, + [SPECIES_KABUTO] = sAnims_Kabuto, + [SPECIES_KABUTOPS] = sAnims_Kabutops, + [SPECIES_AERODACTYL] = sAnims_Aerodactyl, + [SPECIES_SNORLAX] = sAnims_Snorlax, + [SPECIES_ARTICUNO] = sAnims_Articuno, + [SPECIES_ZAPDOS] = sAnims_Zapdos, + [SPECIES_MOLTRES] = sAnims_Moltres, + [SPECIES_DRATINI] = sAnims_Dratini, + [SPECIES_DRAGONAIR] = sAnims_Dragonair, + [SPECIES_DRAGONITE] = sAnims_Dragonite, + [SPECIES_MEWTWO] = sAnims_Mewtwo, + [SPECIES_MEW] = sAnims_Mew, + [SPECIES_CHIKORITA] = sAnims_Chikorita, + [SPECIES_BAYLEEF] = sAnims_Bayleef, + [SPECIES_MEGANIUM] = sAnims_Meganium, + [SPECIES_CYNDAQUIL] = sAnims_Cyndaquil, + [SPECIES_QUILAVA] = sAnims_Quilava, + [SPECIES_TYPHLOSION] = sAnims_Typhlosion, + [SPECIES_TOTODILE] = sAnims_Totodile, + [SPECIES_CROCONAW] = sAnims_Croconaw, + [SPECIES_FERALIGATR] = sAnims_Feraligatr, + [SPECIES_SENTRET] = sAnims_Sentret, + [SPECIES_FURRET] = sAnims_Furret, + [SPECIES_HOOTHOOT] = sAnims_Hoothoot, + [SPECIES_NOCTOWL] = sAnims_Noctowl, + [SPECIES_LEDYBA] = sAnims_Ledyba, + [SPECIES_LEDIAN] = sAnims_Ledian, + [SPECIES_SPINARAK] = sAnims_Spinarak, + [SPECIES_ARIADOS] = sAnims_Ariados, + [SPECIES_CROBAT] = sAnims_Crobat, + [SPECIES_CHINCHOU] = sAnims_Chinchou, + [SPECIES_LANTURN] = sAnims_Lanturn, + [SPECIES_PICHU] = sAnims_Pichu, + [SPECIES_CLEFFA] = sAnims_Cleffa, + [SPECIES_IGGLYBUFF] = sAnims_Igglybuff, + [SPECIES_TOGEPI] = sAnims_Togepi, + [SPECIES_TOGETIC] = sAnims_Togetic, + [SPECIES_NATU] = sAnims_Natu, + [SPECIES_XATU] = sAnims_Xatu, + [SPECIES_MAREEP] = sAnims_Mareep, + [SPECIES_FLAAFFY] = sAnims_Flaaffy, + [SPECIES_AMPHAROS] = sAnims_Ampharos, + [SPECIES_BELLOSSOM] = sAnims_Bellossom, + [SPECIES_MARILL] = sAnims_Marill, + [SPECIES_AZUMARILL] = sAnims_Azumarill, + [SPECIES_SUDOWOODO] = sAnims_Sudowoodo, + [SPECIES_POLITOED] = sAnims_Politoed, + [SPECIES_HOPPIP] = sAnims_Hoppip, + [SPECIES_SKIPLOOM] = sAnims_Skiploom, + [SPECIES_JUMPLUFF] = sAnims_Jumpluff, + [SPECIES_AIPOM] = sAnims_Aipom, + [SPECIES_SUNKERN] = sAnims_Sunkern, + [SPECIES_SUNFLORA] = sAnims_Sunflora, + [SPECIES_YANMA] = sAnims_Yanma, + [SPECIES_WOOPER] = sAnims_Wooper, + [SPECIES_QUAGSIRE] = sAnims_Quagsire, + [SPECIES_ESPEON] = sAnims_Espeon, + [SPECIES_UMBREON] = sAnims_Umbreon, + [SPECIES_MURKROW] = sAnims_Murkrow, + [SPECIES_SLOWKING] = sAnims_Slowking, + [SPECIES_MISDREAVUS] = sAnims_Misdreavus, + [SPECIES_UNOWN] = sAnims_Unown, + [SPECIES_WOBBUFFET] = sAnims_Wobbuffet, + [SPECIES_GIRAFARIG] = sAnims_Girafarig, + [SPECIES_PINECO] = sAnims_Pineco, + [SPECIES_FORRETRESS] = sAnims_Forretress, + [SPECIES_DUNSPARCE] = sAnims_Dunsparce, + [SPECIES_GLIGAR] = sAnims_Gligar, + [SPECIES_STEELIX] = sAnims_Steelix, + [SPECIES_SNUBBULL] = sAnims_Snubbull, + [SPECIES_GRANBULL] = sAnims_Granbull, + [SPECIES_QWILFISH] = sAnims_Qwilfish, + [SPECIES_SCIZOR] = sAnims_Scizor, + [SPECIES_SHUCKLE] = sAnims_Shuckle, + [SPECIES_HERACROSS] = sAnims_Heracross, + [SPECIES_SNEASEL] = sAnims_Sneasel, + [SPECIES_TEDDIURSA] = sAnims_Teddiursa, + [SPECIES_URSARING] = sAnims_Ursaring, + [SPECIES_SLUGMA] = sAnims_Slugma, + [SPECIES_MAGCARGO] = sAnims_Magcargo, + [SPECIES_SWINUB] = sAnims_Swinub, + [SPECIES_PILOSWINE] = sAnims_Piloswine, + [SPECIES_CORSOLA] = sAnims_Corsola, + [SPECIES_REMORAID] = sAnims_Remoraid, + [SPECIES_OCTILLERY] = sAnims_Octillery, + [SPECIES_DELIBIRD] = sAnims_Delibird, + [SPECIES_MANTINE] = sAnims_Mantine, + [SPECIES_SKARMORY] = sAnims_Skarmory, + [SPECIES_HOUNDOUR] = sAnims_Houndour, + [SPECIES_HOUNDOOM] = sAnims_Houndoom, + [SPECIES_KINGDRA] = sAnims_Kingdra, + [SPECIES_PHANPY] = sAnims_Phanpy, + [SPECIES_DONPHAN] = sAnims_Donphan, + [SPECIES_PORYGON2] = sAnims_Porygon2, + [SPECIES_STANTLER] = sAnims_Stantler, + [SPECIES_SMEARGLE] = sAnims_Smeargle, + [SPECIES_TYROGUE] = sAnims_Tyrogue, + [SPECIES_HITMONTOP] = sAnims_Hitmontop, + [SPECIES_SMOOCHUM] = sAnims_Smoochum, + [SPECIES_ELEKID] = sAnims_Elekid, + [SPECIES_MAGBY] = sAnims_Magby, + [SPECIES_MILTANK] = sAnims_Miltank, + [SPECIES_BLISSEY] = sAnims_Blissey, + [SPECIES_RAIKOU] = sAnims_Raikou, + [SPECIES_ENTEI] = sAnims_Entei, + [SPECIES_SUICUNE] = sAnims_Suicune, + [SPECIES_LARVITAR] = sAnims_Larvitar, + [SPECIES_PUPITAR] = sAnims_Pupitar, + [SPECIES_TYRANITAR] = sAnims_Tyranitar, + [SPECIES_LUGIA] = sAnims_Lugia, + [SPECIES_HO_OH] = sAnims_HoOh, + [SPECIES_CELEBI] = sAnims_Celebi, + [SPECIES_TREECKO] = sAnims_Treecko, + [SPECIES_GROVYLE] = sAnims_Grovyle, + [SPECIES_SCEPTILE] = sAnims_Sceptile, + [SPECIES_TORCHIC] = sAnims_Torchic, + [SPECIES_COMBUSKEN] = sAnims_Combusken, + [SPECIES_BLAZIKEN] = sAnims_Blaziken, + [SPECIES_MUDKIP] = sAnims_Mudkip, + [SPECIES_MARSHTOMP] = sAnims_Marshtomp, + [SPECIES_SWAMPERT] = sAnims_Swampert, + [SPECIES_POOCHYENA] = sAnims_Poochyena, + [SPECIES_MIGHTYENA] = sAnims_Mightyena, + [SPECIES_ZIGZAGOON] = sAnims_Zigzagoon, + [SPECIES_LINOONE] = sAnims_Linoone, + [SPECIES_WURMPLE] = sAnims_Wurmple, + [SPECIES_SILCOON] = sAnims_Silcoon, + [SPECIES_BEAUTIFLY] = sAnims_Beautifly, + [SPECIES_CASCOON] = sAnims_Cascoon, + [SPECIES_DUSTOX] = sAnims_Dustox, + [SPECIES_LOTAD] = sAnims_Lotad, + [SPECIES_LOMBRE] = sAnims_Lombre, + [SPECIES_LUDICOLO] = sAnims_Ludicolo, + [SPECIES_SEEDOT] = sAnims_Seedot, + [SPECIES_NUZLEAF] = sAnims_Nuzleaf, + [SPECIES_SHIFTRY] = sAnims_Shiftry, + [SPECIES_NINCADA] = sAnims_Nincada, + [SPECIES_NINJASK] = sAnims_Ninjask, + [SPECIES_SHEDINJA] = sAnims_Shedinja, + [SPECIES_TAILLOW] = sAnims_Taillow, + [SPECIES_SWELLOW] = sAnims_Swellow, + [SPECIES_SHROOMISH] = sAnims_Shroomish, + [SPECIES_BRELOOM] = sAnims_Breloom, + [SPECIES_SPINDA] = sAnims_Spinda, + [SPECIES_WINGULL] = sAnims_Wingull, + [SPECIES_PELIPPER] = sAnims_Pelipper, + [SPECIES_SURSKIT] = sAnims_Surskit, + [SPECIES_MASQUERAIN] = sAnims_Masquerain, + [SPECIES_WAILMER] = sAnims_Wailmer, + [SPECIES_WAILORD] = sAnims_Wailord, + [SPECIES_SKITTY] = sAnims_Skitty, + [SPECIES_DELCATTY] = sAnims_Delcatty, + [SPECIES_KECLEON] = sAnims_Kecleon, + [SPECIES_BALTOY] = sAnims_Baltoy, + [SPECIES_CLAYDOL] = sAnims_Claydol, + [SPECIES_NOSEPASS] = sAnims_Nosepass, + [SPECIES_TORKOAL] = sAnims_Torkoal, + [SPECIES_SABLEYE] = sAnims_Sableye, + [SPECIES_BARBOACH] = sAnims_Barboach, + [SPECIES_WHISCASH] = sAnims_Whiscash, + [SPECIES_LUVDISC] = sAnims_Luvdisc, + [SPECIES_CORPHISH] = sAnims_Corphish, + [SPECIES_CRAWDAUNT] = sAnims_Crawdaunt, + [SPECIES_FEEBAS] = sAnims_Feebas, + [SPECIES_MILOTIC] = sAnims_Milotic, + [SPECIES_CARVANHA] = sAnims_Carvanha, + [SPECIES_SHARPEDO] = sAnims_Sharpedo, + [SPECIES_TRAPINCH] = sAnims_Trapinch, + [SPECIES_VIBRAVA] = sAnims_Vibrava, + [SPECIES_FLYGON] = sAnims_Flygon, + [SPECIES_MAKUHITA] = sAnims_Makuhita, + [SPECIES_HARIYAMA] = sAnims_Hariyama, + [SPECIES_ELECTRIKE] = sAnims_Electrike, + [SPECIES_MANECTRIC] = sAnims_Manectric, + [SPECIES_NUMEL] = sAnims_Numel, + [SPECIES_CAMERUPT] = sAnims_Camerupt, + [SPECIES_SPHEAL] = sAnims_Spheal, + [SPECIES_SEALEO] = sAnims_Sealeo, + [SPECIES_WALREIN] = sAnims_Walrein, + [SPECIES_CACNEA] = sAnims_Cacnea, + [SPECIES_CACTURNE] = sAnims_Cacturne, + [SPECIES_SNORUNT] = sAnims_Snorunt, + [SPECIES_GLALIE] = sAnims_Glalie, + [SPECIES_LUNATONE] = sAnims_Lunatone, + [SPECIES_SOLROCK] = sAnims_Solrock, + [SPECIES_AZURILL] = sAnims_Azurill, + [SPECIES_SPOINK] = sAnims_Spoink, + [SPECIES_GRUMPIG] = sAnims_Grumpig, + [SPECIES_PLUSLE] = sAnims_Plusle, + [SPECIES_MINUN] = sAnims_Minun, + [SPECIES_MAWILE] = sAnims_Mawile, + [SPECIES_MEDITITE] = sAnims_Meditite, + [SPECIES_MEDICHAM] = sAnims_Medicham, + [SPECIES_SWABLU] = sAnims_Swablu, + [SPECIES_ALTARIA] = sAnims_Altaria, + [SPECIES_WYNAUT] = sAnims_Wynaut, + [SPECIES_DUSKULL] = sAnims_Duskull, + [SPECIES_DUSCLOPS] = sAnims_Dusclops, + [SPECIES_ROSELIA] = sAnims_Roselia, + [SPECIES_SLAKOTH] = sAnims_Slakoth, + [SPECIES_VIGOROTH] = sAnims_Vigoroth, + [SPECIES_SLAKING] = sAnims_Slaking, + [SPECIES_GULPIN] = sAnims_Gulpin, + [SPECIES_SWALOT] = sAnims_Swalot, + [SPECIES_TROPIUS] = sAnims_Tropius, + [SPECIES_WHISMUR] = sAnims_Whismur, + [SPECIES_LOUDRED] = sAnims_Loudred, + [SPECIES_EXPLOUD] = sAnims_Exploud, + [SPECIES_CLAMPERL] = sAnims_Clamperl, + [SPECIES_HUNTAIL] = sAnims_Huntail, + [SPECIES_GOREBYSS] = sAnims_Gorebyss, + [SPECIES_ABSOL] = sAnims_Absol, + [SPECIES_SHUPPET] = sAnims_Shuppet, + [SPECIES_BANETTE] = sAnims_Banette, + [SPECIES_SEVIPER] = sAnims_Seviper, + [SPECIES_ZANGOOSE] = sAnims_Zangoose, + [SPECIES_RELICANTH] = sAnims_Relicanth, + [SPECIES_ARON] = sAnims_Aron, + [SPECIES_LAIRON] = sAnims_Lairon, + [SPECIES_AGGRON] = sAnims_Aggron, + [SPECIES_CASTFORM] = sAnims_Castform, + [SPECIES_VOLBEAT] = sAnims_Volbeat, + [SPECIES_ILLUMISE] = sAnims_Illumise, + [SPECIES_LILEEP] = sAnims_Lileep, + [SPECIES_CRADILY] = sAnims_Cradily, + [SPECIES_ANORITH] = sAnims_Anorith, + [SPECIES_ARMALDO] = sAnims_Armaldo, + [SPECIES_RALTS] = sAnims_Ralts, + [SPECIES_KIRLIA] = sAnims_Kirlia, + [SPECIES_GARDEVOIR] = sAnims_Gardevoir, + [SPECIES_BAGON] = sAnims_Bagon, + [SPECIES_SHELGON] = sAnims_Shelgon, + [SPECIES_SALAMENCE] = sAnims_Salamence, + [SPECIES_BELDUM] = sAnims_Beldum, + [SPECIES_METANG] = sAnims_Metang, + [SPECIES_METAGROSS] = sAnims_Metagross, + [SPECIES_REGIROCK] = sAnims_Regirock, + [SPECIES_REGICE] = sAnims_Regice, + [SPECIES_REGISTEEL] = sAnims_Registeel, + [SPECIES_KYOGRE] = sAnims_Kyogre, + [SPECIES_GROUDON] = sAnims_Groudon, + [SPECIES_RAYQUAZA] = sAnims_Rayquaza, + [SPECIES_LATIAS] = sAnims_Latias, + [SPECIES_LATIOS] = sAnims_Latios, + [SPECIES_JIRACHI] = sAnims_Jirachi, + [SPECIES_DEOXYS] = sAnims_Deoxys, + [SPECIES_CHIMECHO] = sAnims_Chimecho, +#if P_GEN_4_POKEMON == TRUE + [SPECIES_TURTWIG] = sAnims_Turtwig, + [SPECIES_GROTLE] = sAnims_Grotle, + [SPECIES_TORTERRA] = sAnims_Torterra, + [SPECIES_CHIMCHAR] = sAnims_Chimchar, + [SPECIES_MONFERNO] = sAnims_Monferno, + [SPECIES_INFERNAPE] = sAnims_Infernape, + [SPECIES_PIPLUP] = sAnims_Piplup, + [SPECIES_PRINPLUP] = sAnims_Prinplup, + [SPECIES_EMPOLEON] = sAnims_Empoleon, + [SPECIES_STARLY] = sAnims_Starly, + [SPECIES_STARAVIA] = sAnims_Staravia, + [SPECIES_STARAPTOR] = sAnims_Staraptor, + [SPECIES_BIDOOF] = sAnims_Bidoof, + [SPECIES_BIBAREL] = sAnims_Bibarel, + [SPECIES_KRICKETOT] = sAnims_Kricketot, + [SPECIES_KRICKETUNE] = sAnims_Kricketune, + [SPECIES_SHINX] = sAnims_Shinx, + [SPECIES_LUXIO] = sAnims_Luxio, + [SPECIES_LUXRAY] = sAnims_Luxray, + [SPECIES_BUDEW] = sAnims_Budew, + [SPECIES_ROSERADE] = sAnims_Roserade, + [SPECIES_CRANIDOS] = sAnims_Cranidos, + [SPECIES_RAMPARDOS] = sAnims_Rampardos, + [SPECIES_SHIELDON] = sAnims_Shieldon, + [SPECIES_BASTIODON] = sAnims_Bastiodon, + [SPECIES_BURMY] = sAnims_Burmy, + [SPECIES_WORMADAM] = sAnims_Wormadam, + [SPECIES_MOTHIM] = sAnims_Mothim, + [SPECIES_COMBEE] = sAnims_Combee, + [SPECIES_VESPIQUEN] = sAnims_Vespiquen, + [SPECIES_PACHIRISU] = sAnims_Pachirisu, + [SPECIES_BUIZEL] = sAnims_Buizel, + [SPECIES_FLOATZEL] = sAnims_Floatzel, + [SPECIES_CHERUBI] = sAnims_Cherubi, + [SPECIES_CHERRIM] = sAnims_CherrimOvercast, + [SPECIES_SHELLOS] = sAnims_Shellos, + [SPECIES_GASTRODON] = sAnims_Gastrodon, + [SPECIES_AMBIPOM] = sAnims_Ambipom, + [SPECIES_DRIFLOON] = sAnims_Drifloon, + [SPECIES_DRIFBLIM] = sAnims_Drifblim, + [SPECIES_BUNEARY] = sAnims_Buneary, + [SPECIES_LOPUNNY] = sAnims_Lopunny, + [SPECIES_MISMAGIUS] = sAnims_Mismagius, + [SPECIES_HONCHKROW] = sAnims_Honchkrow, + [SPECIES_GLAMEOW] = sAnims_Glameow, + [SPECIES_PURUGLY] = sAnims_Purugly, + [SPECIES_CHINGLING] = sAnims_Chingling, + [SPECIES_STUNKY] = sAnims_Stunky, + [SPECIES_SKUNTANK] = sAnims_Skuntank, + [SPECIES_BRONZOR] = sAnims_Bronzor, + [SPECIES_BRONZONG] = sAnims_Bronzong, + [SPECIES_BONSLY] = sAnims_Bonsly, + [SPECIES_MIME_JR] = sAnims_MimeJr, + [SPECIES_HAPPINY] = sAnims_Happiny, + [SPECIES_CHATOT] = sAnims_Chatot, + [SPECIES_SPIRITOMB] = sAnims_Spiritomb, + [SPECIES_GIBLE] = sAnims_Gible, + [SPECIES_GABITE] = sAnims_Gabite, + [SPECIES_GARCHOMP] = sAnims_Garchomp, + [SPECIES_MUNCHLAX] = sAnims_Munchlax, + [SPECIES_RIOLU] = sAnims_Riolu, + [SPECIES_LUCARIO] = sAnims_Lucario, + [SPECIES_HIPPOPOTAS] = sAnims_Hippopotas, + [SPECIES_HIPPOWDON] = sAnims_Hippowdon, + [SPECIES_SKORUPI] = sAnims_Skorupi, + [SPECIES_DRAPION] = sAnims_Drapion, + [SPECIES_CROAGUNK] = sAnims_Croagunk, + [SPECIES_TOXICROAK] = sAnims_Toxicroak, + [SPECIES_CARNIVINE] = sAnims_Carnivine, + [SPECIES_FINNEON] = sAnims_Finneon, + [SPECIES_LUMINEON] = sAnims_Lumineon, + [SPECIES_MANTYKE] = sAnims_Mantyke, + [SPECIES_SNOVER] = sAnims_Snover, + [SPECIES_ABOMASNOW] = sAnims_Abomasnow, + [SPECIES_WEAVILE] = sAnims_Weavile, + [SPECIES_MAGNEZONE] = sAnims_Magnezone, + [SPECIES_LICKILICKY] = sAnims_Lickilicky, + [SPECIES_RHYPERIOR] = sAnims_Rhyperior, + [SPECIES_TANGROWTH] = sAnims_Tangrowth, + [SPECIES_ELECTIVIRE] = sAnims_Electivire, + [SPECIES_MAGMORTAR] = sAnims_Magmortar, + [SPECIES_TOGEKISS] = sAnims_Togekiss, + [SPECIES_YANMEGA] = sAnims_Yanmega, + [SPECIES_LEAFEON] = sAnims_Leafeon, + [SPECIES_GLACEON] = sAnims_Glaceon, + [SPECIES_GLISCOR] = sAnims_Gliscor, + [SPECIES_MAMOSWINE] = sAnims_Mamoswine, + [SPECIES_PORYGON_Z] = sAnims_PORYGON_Z, + [SPECIES_GALLADE] = sAnims_Gallade, + [SPECIES_PROBOPASS] = sAnims_Probopass, + [SPECIES_DUSKNOIR] = sAnims_Dusknoir, + [SPECIES_FROSLASS] = sAnims_Froslass, + [SPECIES_ROTOM] = sAnims_Rotom, + [SPECIES_UXIE] = sAnims_Uxie, + [SPECIES_MESPRIT] = sAnims_Mesprit, + [SPECIES_AZELF] = sAnims_Azelf, + [SPECIES_DIALGA] = sAnims_Dialga, + [SPECIES_PALKIA] = sAnims_Palkia, + [SPECIES_HEATRAN] = sAnims_Heatran, + [SPECIES_REGIGIGAS] = sAnims_Regigigas, + [SPECIES_GIRATINA] = sAnims_Giratina, + [SPECIES_CRESSELIA] = sAnims_Cresselia, + [SPECIES_PHIONE] = sAnims_Phione, + [SPECIES_MANAPHY] = sAnims_Manaphy, + [SPECIES_DARKRAI] = sAnims_Darkrai, + [SPECIES_SHAYMIN] = sAnims_Shaymin, + [SPECIES_ARCEUS] = sAnims_Arceus, +#endif +#if P_GEN_5_POKEMON == TRUE + [SPECIES_VICTINI] = sAnims_Victini, + [SPECIES_SNIVY] = sAnims_Snivy, + [SPECIES_SERVINE] = sAnims_Servine, + [SPECIES_SERPERIOR] = sAnims_Serperior, + [SPECIES_TEPIG] = sAnims_Tepig, + [SPECIES_PIGNITE] = sAnims_Pignite, + [SPECIES_EMBOAR] = sAnims_Emboar, + [SPECIES_OSHAWOTT] = sAnims_Oshawott, + [SPECIES_DEWOTT] = sAnims_Dewott, + [SPECIES_SAMUROTT] = sAnims_Samurott, + [SPECIES_PATRAT] = sAnims_Patrat, + [SPECIES_WATCHOG] = sAnims_Watchog, + [SPECIES_LILLIPUP] = sAnims_Lillipup, + [SPECIES_HERDIER] = sAnims_Herdier, + [SPECIES_STOUTLAND] = sAnims_Stoutland, + [SPECIES_PURRLOIN] = sAnims_Purrloin, + [SPECIES_LIEPARD] = sAnims_Liepard, + [SPECIES_PANSAGE] = sAnims_Pansage, + [SPECIES_SIMISAGE] = sAnims_Simisage, + [SPECIES_PANSEAR] = sAnims_Pansear, + [SPECIES_SIMISEAR] = sAnims_Simisear, + [SPECIES_PANPOUR] = sAnims_Panpour, + [SPECIES_SIMIPOUR] = sAnims_Simipour, + [SPECIES_MUNNA] = sAnims_Munna, + [SPECIES_MUSHARNA] = sAnims_Musharna, + [SPECIES_PIDOVE] = sAnims_Pidove, + [SPECIES_TRANQUILL] = sAnims_Tranquill, + [SPECIES_UNFEZANT] = sAnims_Unfezant, + [SPECIES_BLITZLE] = sAnims_Blitzle, + [SPECIES_ZEBSTRIKA] = sAnims_Zebstrika, + [SPECIES_ROGGENROLA] = sAnims_Roggenrola, + [SPECIES_BOLDORE] = sAnims_Boldore, + [SPECIES_GIGALITH] = sAnims_Gigalith, + [SPECIES_WOOBAT] = sAnims_Woobat, + [SPECIES_SWOOBAT] = sAnims_Swoobat, + [SPECIES_DRILBUR] = sAnims_Drilbur, + [SPECIES_EXCADRILL] = sAnims_Excadrill, + [SPECIES_AUDINO] = sAnims_Audino, + [SPECIES_TIMBURR] = sAnims_Timburr, + [SPECIES_GURDURR] = sAnims_Gurdurr, + [SPECIES_CONKELDURR] = sAnims_Conkeldurr, + [SPECIES_TYMPOLE] = sAnims_Tympole, + [SPECIES_PALPITOAD] = sAnims_Palpitoad, + [SPECIES_SEISMITOAD] = sAnims_Seismitoad, + [SPECIES_THROH] = sAnims_Throh, + [SPECIES_SAWK] = sAnims_Sawk, + [SPECIES_SEWADDLE] = sAnims_Sewaddle, + [SPECIES_SWADLOON] = sAnims_Swadloon, + [SPECIES_LEAVANNY] = sAnims_Leavanny, + [SPECIES_VENIPEDE] = sAnims_Venipede, + [SPECIES_WHIRLIPEDE] = sAnims_Whirlipede, + [SPECIES_SCOLIPEDE] = sAnims_Scolipede, + [SPECIES_COTTONEE] = sAnims_Cottonee, + [SPECIES_WHIMSICOTT] = sAnims_Whimsicott, + [SPECIES_PETILIL] = sAnims_Petilil, + [SPECIES_LILLIGANT] = sAnims_Lilligant, + [SPECIES_BASCULIN] = sAnims_Basculin, + [SPECIES_SANDILE] = sAnims_Sandile, + [SPECIES_KROKOROK] = sAnims_Krokorok, + [SPECIES_KROOKODILE] = sAnims_Krookodile, + [SPECIES_DARUMAKA] = sAnims_Darumaka, + [SPECIES_DARMANITAN] = sAnims_Darmanitan, + [SPECIES_MARACTUS] = sAnims_Maractus, + [SPECIES_DWEBBLE] = sAnims_Dwebble, + [SPECIES_CRUSTLE] = sAnims_Crustle, + [SPECIES_SCRAGGY] = sAnims_Scraggy, + [SPECIES_SCRAFTY] = sAnims_Scrafty, + [SPECIES_SIGILYPH] = sAnims_Sigilyph, + [SPECIES_YAMASK] = sAnims_Yamask, + [SPECIES_COFAGRIGUS] = sAnims_Cofagrigus, + [SPECIES_TIRTOUGA] = sAnims_Tirtouga, + [SPECIES_CARRACOSTA] = sAnims_Carracosta, + [SPECIES_ARCHEN] = sAnims_Archen, + [SPECIES_ARCHEOPS] = sAnims_Archeops, + [SPECIES_TRUBBISH] = sAnims_Trubbish, + [SPECIES_GARBODOR] = sAnims_Garbodor, + [SPECIES_ZORUA] = sAnims_Zorua, + [SPECIES_ZOROARK] = sAnims_Zoroark, + [SPECIES_MINCCINO] = sAnims_Minccino, + [SPECIES_CINCCINO] = sAnims_Cinccino, + [SPECIES_GOTHITA] = sAnims_Gothita, + [SPECIES_GOTHORITA] = sAnims_Gothorita, + [SPECIES_GOTHITELLE] = sAnims_Gothitelle, + [SPECIES_SOLOSIS] = sAnims_Solosis, + [SPECIES_DUOSION] = sAnims_Duosion, + [SPECIES_REUNICLUS] = sAnims_Reuniclus, + [SPECIES_DUCKLETT] = sAnims_Ducklett, + [SPECIES_SWANNA] = sAnims_Swanna, + [SPECIES_VANILLITE] = sAnims_Vanillite, + [SPECIES_VANILLISH] = sAnims_Vanillish, + [SPECIES_VANILLUXE] = sAnims_Vanilluxe, + [SPECIES_DEERLING] = sAnims_Deerling, + [SPECIES_SAWSBUCK] = sAnims_Sawsbuck, + [SPECIES_EMOLGA] = sAnims_Emolga, + [SPECIES_KARRABLAST] = sAnims_Karrablast, + [SPECIES_ESCAVALIER] = sAnims_Escavalier, + [SPECIES_FOONGUS] = sAnims_Foongus, + [SPECIES_AMOONGUSS] = sAnims_Amoonguss, + [SPECIES_FRILLISH] = sAnims_Frillish, + [SPECIES_JELLICENT] = sAnims_Jellicent, + [SPECIES_ALOMOMOLA] = sAnims_Alomomola, + [SPECIES_JOLTIK] = sAnims_Joltik, + [SPECIES_GALVANTULA] = sAnims_Galvantula, + [SPECIES_FERROSEED] = sAnims_Ferroseed, + [SPECIES_FERROTHORN] = sAnims_Ferrothorn, + [SPECIES_KLINK] = sAnims_Klink, + [SPECIES_KLANG] = sAnims_Klang, + [SPECIES_KLINKLANG] = sAnims_Klinklang, + [SPECIES_TYNAMO] = sAnims_Tynamo, + [SPECIES_EELEKTRIK] = sAnims_Eelektrik, + [SPECIES_EELEKTROSS] = sAnims_Eelektross, + [SPECIES_ELGYEM] = sAnims_Elgyem, + [SPECIES_BEHEEYEM] = sAnims_Beheeyem, + [SPECIES_LITWICK] = sAnims_Litwick, + [SPECIES_LAMPENT] = sAnims_Lampent, + [SPECIES_CHANDELURE] = sAnims_Chandelure, + [SPECIES_AXEW] = sAnims_Axew, + [SPECIES_FRAXURE] = sAnims_Fraxure, + [SPECIES_HAXORUS] = sAnims_Haxorus, + [SPECIES_CUBCHOO] = sAnims_Cubchoo, + [SPECIES_BEARTIC] = sAnims_Beartic, + [SPECIES_CRYOGONAL] = sAnims_Cryogonal, + [SPECIES_SHELMET] = sAnims_Shelmet, + [SPECIES_ACCELGOR] = sAnims_Accelgor, + [SPECIES_STUNFISK] = sAnims_Stunfisk, + [SPECIES_MIENFOO] = sAnims_Mienfoo, + [SPECIES_MIENSHAO] = sAnims_Mienshao, + [SPECIES_DRUDDIGON] = sAnims_Druddigon, + [SPECIES_GOLETT] = sAnims_Golett, + [SPECIES_GOLURK] = sAnims_Golurk, + [SPECIES_PAWNIARD] = sAnims_Pawniard, + [SPECIES_BISHARP] = sAnims_Bisharp, + [SPECIES_BOUFFALANT] = sAnims_Bouffalant, + [SPECIES_RUFFLET] = sAnims_Rufflet, + [SPECIES_BRAVIARY] = sAnims_Braviary, + [SPECIES_VULLABY] = sAnims_Vullaby, + [SPECIES_MANDIBUZZ] = sAnims_Mandibuzz, + [SPECIES_HEATMOR] = sAnims_Heatmor, + [SPECIES_DURANT] = sAnims_Durant, + [SPECIES_DEINO] = sAnims_Deino, + [SPECIES_ZWEILOUS] = sAnims_Zweilous, + [SPECIES_HYDREIGON] = sAnims_Hydreigon, + [SPECIES_LARVESTA] = sAnims_Larvesta, + [SPECIES_VOLCARONA] = sAnims_Volcarona, + [SPECIES_COBALION] = sAnims_Cobalion, + [SPECIES_TERRAKION] = sAnims_Terrakion, + [SPECIES_VIRIZION] = sAnims_Virizion, + [SPECIES_TORNADUS] = sAnims_Tornadus, + [SPECIES_THUNDURUS] = sAnims_Thundurus, + [SPECIES_RESHIRAM] = sAnims_Reshiram, + [SPECIES_ZEKROM] = sAnims_Zekrom, + [SPECIES_LANDORUS] = sAnims_Landorus, + [SPECIES_KYUREM] = sAnims_Kyurem, + [SPECIES_KELDEO] = sAnims_Keldeo, + [SPECIES_MELOETTA] = sAnims_Meloetta, + [SPECIES_GENESECT] = sAnims_Genesect, +#endif +#if P_GEN_6_POKEMON == TRUE + [SPECIES_CHESPIN] = sAnims_Chespin, + [SPECIES_QUILLADIN] = sAnims_Quilladin, + [SPECIES_CHESNAUGHT] = sAnims_Chesnaught, + [SPECIES_FENNEKIN] = sAnims_Fennekin, + [SPECIES_BRAIXEN] = sAnims_Braixen, + [SPECIES_DELPHOX] = sAnims_Delphox, + [SPECIES_FROAKIE] = sAnims_Froakie, + [SPECIES_FROGADIER] = sAnims_Frogadier, + [SPECIES_GRENINJA] = sAnims_Greninja, + [SPECIES_BUNNELBY] = sAnims_Bunnelby, + [SPECIES_DIGGERSBY] = sAnims_Diggersby, + [SPECIES_FLETCHLING] = sAnims_Fletchling, + [SPECIES_FLETCHINDER] = sAnims_Fletchinder, + [SPECIES_TALONFLAME] = sAnims_Talonflame, + [SPECIES_SCATTERBUG] = sAnims_Scatterbug, + [SPECIES_SPEWPA] = sAnims_Spewpa, + [SPECIES_VIVILLON] = sAnims_Vivillon, + [SPECIES_LITLEO] = sAnims_Litleo, + [SPECIES_PYROAR] = sAnims_Pyroar, + [SPECIES_FLABEBE] = sAnims_Flabebe, + [SPECIES_FLOETTE] = sAnims_Floette, + [SPECIES_FLORGES] = sAnims_Florges, + [SPECIES_SKIDDO] = sAnims_Skiddo, + [SPECIES_GOGOAT] = sAnims_Gogoat, + [SPECIES_PANCHAM] = sAnims_Pancham, + [SPECIES_PANGORO] = sAnims_Pangoro, + [SPECIES_FURFROU] = sAnims_Furfrou, + [SPECIES_ESPURR] = sAnims_Espurr, + [SPECIES_MEOWSTIC] = sAnims_Meowstic, + [SPECIES_HONEDGE] = sAnims_Honedge, + [SPECIES_DOUBLADE] = sAnims_Doublade, + [SPECIES_AEGISLASH] = sAnims_Aegislash, + [SPECIES_SPRITZEE] = sAnims_Spritzee, + [SPECIES_AROMATISSE] = sAnims_Aromatisse, + [SPECIES_SWIRLIX] = sAnims_Swirlix, + [SPECIES_SLURPUFF] = sAnims_Slurpuff, + [SPECIES_INKAY] = sAnims_Inkay, + [SPECIES_MALAMAR] = sAnims_Malamar, + [SPECIES_BINACLE] = sAnims_Binacle, + [SPECIES_BARBARACLE] = sAnims_Barbaracle, + [SPECIES_SKRELP] = sAnims_Skrelp, + [SPECIES_DRAGALGE] = sAnims_Dragalge, + [SPECIES_CLAUNCHER] = sAnims_Clauncher, + [SPECIES_CLAWITZER] = sAnims_Clawitzer, + [SPECIES_HELIOPTILE] = sAnims_Helioptile, + [SPECIES_HELIOLISK] = sAnims_Heliolisk, + [SPECIES_TYRUNT] = sAnims_Tyrunt, + [SPECIES_TYRANTRUM] = sAnims_Tyrantrum, + [SPECIES_AMAURA] = sAnims_Amaura, + [SPECIES_AURORUS] = sAnims_Aurorus, + [SPECIES_SYLVEON] = sAnims_Sylveon, + [SPECIES_HAWLUCHA] = sAnims_Hawlucha, + [SPECIES_DEDENNE] = sAnims_Dedenne, + [SPECIES_CARBINK] = sAnims_Carbink, + [SPECIES_GOOMY] = sAnims_Goomy, + [SPECIES_SLIGGOO] = sAnims_Sliggoo, + [SPECIES_GOODRA] = sAnims_Goodra, + [SPECIES_KLEFKI] = sAnims_Klefki, + [SPECIES_PHANTUMP] = sAnims_Phantump, + [SPECIES_TREVENANT] = sAnims_Trevenant, + [SPECIES_PUMPKABOO] = sAnims_Pumpkaboo, + [SPECIES_GOURGEIST] = sAnims_Gourgeist, + [SPECIES_BERGMITE] = sAnims_Bergmite, + [SPECIES_AVALUGG] = sAnims_Avalugg, + [SPECIES_NOIBAT] = sAnims_Noibat, + [SPECIES_NOIVERN] = sAnims_Noivern, + [SPECIES_XERNEAS] = sAnims_Xerneas, + [SPECIES_YVELTAL] = sAnims_Yveltal, + [SPECIES_ZYGARDE] = sAnims_Zygarde, + [SPECIES_DIANCIE] = sAnims_Diancie, + [SPECIES_HOOPA] = sAnims_Hoopa, + [SPECIES_VOLCANION] = sAnims_Volcanion, +#endif +#if P_GEN_7_POKEMON == TRUE + [SPECIES_ROWLET] = sAnims_Rowlet, + [SPECIES_DARTRIX] = sAnims_Dartrix, + [SPECIES_DECIDUEYE] = sAnims_Decidueye, + [SPECIES_LITTEN] = sAnims_Litten, + [SPECIES_TORRACAT] = sAnims_Torracat, + [SPECIES_INCINEROAR] = sAnims_Incineroar, + [SPECIES_POPPLIO] = sAnims_Popplio, + [SPECIES_BRIONNE] = sAnims_Brionne, + [SPECIES_PRIMARINA] = sAnims_Primarina, + [SPECIES_PIKIPEK] = sAnims_Pikipek, + [SPECIES_TRUMBEAK] = sAnims_Trumbeak, + [SPECIES_TOUCANNON] = sAnims_Toucannon, + [SPECIES_YUNGOOS] = sAnims_Yungoos, + [SPECIES_GUMSHOOS] = sAnims_Gumshoos, + [SPECIES_GRUBBIN] = sAnims_Grubbin, + [SPECIES_CHARJABUG] = sAnims_Charjabug, + [SPECIES_VIKAVOLT] = sAnims_Vikavolt, + [SPECIES_CRABRAWLER] = sAnims_Crabrawler, + [SPECIES_CRABOMINABLE] = sAnims_Crabominable, + [SPECIES_ORICORIO] = sAnims_Oricorio, + [SPECIES_CUTIEFLY] = sAnims_Cutiefly, + [SPECIES_RIBOMBEE] = sAnims_Ribombee, + [SPECIES_ROCKRUFF] = sAnims_Rockruff, + [SPECIES_LYCANROC] = sAnims_Lycanroc, + [SPECIES_WISHIWASHI] = sAnims_Wishiwashi, + [SPECIES_MAREANIE] = sAnims_Mareanie, + [SPECIES_TOXAPEX] = sAnims_Toxapex, + [SPECIES_MUDBRAY] = sAnims_Mudbray, + [SPECIES_MUDSDALE] = sAnims_Mudsdale, + [SPECIES_DEWPIDER] = sAnims_Dewpider, + [SPECIES_ARAQUANID] = sAnims_Araquanid, + [SPECIES_FOMANTIS] = sAnims_Fomantis, + [SPECIES_LURANTIS] = sAnims_Lurantis, + [SPECIES_MORELULL] = sAnims_Morelull, + [SPECIES_SHIINOTIC] = sAnims_Shiinotic, + [SPECIES_SALANDIT] = sAnims_Salandit, + [SPECIES_SALAZZLE] = sAnims_Salazzle, + [SPECIES_STUFFUL] = sAnims_Stufful, + [SPECIES_BEWEAR] = sAnims_Bewear, + [SPECIES_BOUNSWEET] = sAnims_Bounsweet, + [SPECIES_STEENEE] = sAnims_Steenee, + [SPECIES_TSAREENA] = sAnims_Tsareena, + [SPECIES_COMFEY] = sAnims_Comfey, + [SPECIES_ORANGURU] = sAnims_Oranguru, + [SPECIES_PASSIMIAN] = sAnims_Passimian, + [SPECIES_WIMPOD] = sAnims_Wimpod, + [SPECIES_GOLISOPOD] = sAnims_Golisopod, + [SPECIES_SANDYGAST] = sAnims_Sandygast, + [SPECIES_PALOSSAND] = sAnims_Palossand, + [SPECIES_PYUKUMUKU] = sAnims_Pyukumuku, + [SPECIES_TYPE_NULL] = sAnims_TypeNull, + [SPECIES_SILVALLY] = sAnims_Silvally, + [SPECIES_MINIOR] = sAnims_Minior, + [SPECIES_KOMALA] = sAnims_Komala, + [SPECIES_TURTONATOR] = sAnims_Turtonator, + [SPECIES_TOGEDEMARU] = sAnims_Togedemaru, + [SPECIES_MIMIKYU] = sAnims_Mimikyu, + [SPECIES_BRUXISH] = sAnims_Bruxish, + [SPECIES_DRAMPA] = sAnims_Drampa, + [SPECIES_DHELMISE] = sAnims_Dhelmise, + [SPECIES_JANGMO_O] = sAnims_JANGMO_O, + [SPECIES_HAKAMO_O] = sAnims_HAKAMO_O, + [SPECIES_KOMMO_O] = sAnims_KOMMO_O, + [SPECIES_TAPU_KOKO] = sAnims_TapuKoko, + [SPECIES_TAPU_LELE] = sAnims_TapuLele, + [SPECIES_TAPU_BULU] = sAnims_TapuBulu, + [SPECIES_TAPU_FINI] = sAnims_TapuFini, + [SPECIES_COSMOG] = sAnims_Cosmog, + [SPECIES_COSMOEM] = sAnims_Cosmoem, + [SPECIES_SOLGALEO] = sAnims_Solgaleo, + [SPECIES_LUNALA] = sAnims_Lunala, + [SPECIES_NIHILEGO] = sAnims_Nihilego, + [SPECIES_BUZZWOLE] = sAnims_Buzzwole, + [SPECIES_PHEROMOSA] = sAnims_Pheromosa, + [SPECIES_XURKITREE] = sAnims_Xurkitree, + [SPECIES_CELESTEELA] = sAnims_Celesteela, + [SPECIES_KARTANA] = sAnims_Kartana, + [SPECIES_GUZZLORD] = sAnims_Guzzlord, + [SPECIES_NECROZMA] = sAnims_Necrozma, + [SPECIES_MAGEARNA] = sAnims_Magearna, + [SPECIES_MARSHADOW] = sAnims_Marshadow, + [SPECIES_POIPOLE] = sAnims_Poipole, + [SPECIES_NAGANADEL] = sAnims_Naganadel, + [SPECIES_STAKATAKA] = sAnims_Stakataka, + [SPECIES_BLACEPHALON] = sAnims_Blacephalon, + [SPECIES_ZERAORA] = sAnims_Zeraora, + [SPECIES_MELTAN] = sAnims_Meltan, + [SPECIES_MELMETAL] = sAnims_Melmetal, +#endif +#if P_GEN_8_POKEMON == TRUE + [SPECIES_GROOKEY] = sAnims_Grookey, + [SPECIES_THWACKEY] = sAnims_Thwackey, + [SPECIES_RILLABOOM] = sAnims_Rillaboom, + [SPECIES_SCORBUNNY] = sAnims_Scorbunny, + [SPECIES_RABOOT] = sAnims_Raboot, + [SPECIES_CINDERACE] = sAnims_Cinderace, + [SPECIES_SOBBLE] = sAnims_Sobble, + [SPECIES_DRIZZILE] = sAnims_Drizzile, + [SPECIES_INTELEON] = sAnims_Inteleon, + [SPECIES_SKWOVET] = sAnims_Skwovet, + [SPECIES_GREEDENT] = sAnims_Greedent, + [SPECIES_ROOKIDEE] = sAnims_Rookidee, + [SPECIES_CORVISQUIRE] = sAnims_Corvisquire, + [SPECIES_CORVIKNIGHT] = sAnims_Corviknight, + [SPECIES_BLIPBUG] = sAnims_Blipbug, + [SPECIES_DOTTLER] = sAnims_Dottler, + [SPECIES_ORBEETLE] = sAnims_Orbeetle, + [SPECIES_NICKIT] = sAnims_Nickit, + [SPECIES_THIEVUL] = sAnims_Thievul, + [SPECIES_GOSSIFLEUR] = sAnims_Gossifleur, + [SPECIES_ELDEGOSS] = sAnims_Eldegoss, + [SPECIES_WOOLOO] = sAnims_Wooloo, + [SPECIES_DUBWOOL] = sAnims_Dubwool, + [SPECIES_CHEWTLE] = sAnims_Chewtle, + [SPECIES_DREDNAW] = sAnims_Drednaw, + [SPECIES_YAMPER] = sAnims_Yamper, + [SPECIES_BOLTUND] = sAnims_Boltund, + [SPECIES_ROLYCOLY] = sAnims_Rolycoly, + [SPECIES_CARKOL] = sAnims_Carkol, + [SPECIES_COALOSSAL] = sAnims_Coalossal, + [SPECIES_APPLIN] = sAnims_Applin, + [SPECIES_FLAPPLE] = sAnims_Flapple, + [SPECIES_APPLETUN] = sAnims_Appletun, + [SPECIES_SILICOBRA] = sAnims_Silicobra, + [SPECIES_SANDACONDA] = sAnims_Sandaconda, + [SPECIES_CRAMORANT] = sAnims_Cramorant, + [SPECIES_ARROKUDA] = sAnims_Arrokuda, + [SPECIES_BARRASKEWDA] = sAnims_Barraskewda, + [SPECIES_TOXEL] = sAnims_Toxel, + [SPECIES_TOXTRICITY] = sAnims_Toxtricity, + [SPECIES_SIZZLIPEDE] = sAnims_Sizzlipede, + [SPECIES_CENTISKORCH] = sAnims_Centiskorch, + [SPECIES_CLOBBOPUS] = sAnims_Clobbopus, + [SPECIES_GRAPPLOCT] = sAnims_Grapploct, + [SPECIES_SINISTEA] = sAnims_Sinistea, + [SPECIES_POLTEAGEIST] = sAnims_Polteageist, + [SPECIES_HATENNA] = sAnims_Hatenna, + [SPECIES_HATTREM] = sAnims_Hattrem, + [SPECIES_HATTERENE] = sAnims_Hatterene, + [SPECIES_IMPIDIMP] = sAnims_Impidimp, + [SPECIES_MORGREM] = sAnims_Morgrem, + [SPECIES_GRIMMSNARL] = sAnims_Grimmsnarl, + [SPECIES_OBSTAGOON] = sAnims_Obstagoon, + [SPECIES_PERRSERKER] = sAnims_Perrserker, + [SPECIES_CURSOLA] = sAnims_Cursola, + [SPECIES_SIRFETCHD] = sAnims_Sirfetchd, + [SPECIES_MR_RIME] = sAnims_MrRime, + [SPECIES_RUNERIGUS] = sAnims_Runerigus, + [SPECIES_MILCERY] = sAnims_Milcery, + [SPECIES_ALCREMIE] = sAnims_Alcremie, + [SPECIES_FALINKS] = sAnims_Falinks, + [SPECIES_PINCURCHIN] = sAnims_Pincurchin, + [SPECIES_SNOM] = sAnims_Snom, + [SPECIES_FROSMOTH] = sAnims_Frosmoth, + [SPECIES_STONJOURNER] = sAnims_Stonjourner, + [SPECIES_EISCUE] = sAnims_Eiscue, + [SPECIES_INDEEDEE] = sAnims_Indeedee, + [SPECIES_MORPEKO] = sAnims_Morpeko, + [SPECIES_CUFANT] = sAnims_Cufant, + [SPECIES_COPPERAJAH] = sAnims_Copperajah, + [SPECIES_DRACOZOLT] = sAnims_Dracozolt, + [SPECIES_ARCTOZOLT] = sAnims_Arctozolt, + [SPECIES_DRACOVISH] = sAnims_Dracovish, + [SPECIES_ARCTOVISH] = sAnims_Arctovish, + [SPECIES_DURALUDON] = sAnims_Duraludon, + [SPECIES_DREEPY] = sAnims_Dreepy, + [SPECIES_DRAKLOAK] = sAnims_Drakloak, + [SPECIES_DRAGAPULT] = sAnims_Dragapult, + [SPECIES_ZACIAN] = sAnims_Zacian, + [SPECIES_ZAMAZENTA] = sAnims_Zamazenta, + [SPECIES_ETERNATUS] = sAnims_Eternatus, + [SPECIES_KUBFU] = sAnims_Kubfu, + [SPECIES_URSHIFU] = sAnims_Urshifu, + [SPECIES_ZARUDE] = sAnims_Zarude, + [SPECIES_REGIELEKI] = sAnims_Regieleki, + [SPECIES_REGIDRAGO] = sAnims_Regidrago, + [SPECIES_GLASTRIER] = sAnims_Glastrier, + [SPECIES_SPECTRIER] = sAnims_Spectrier, + [SPECIES_CALYREX] = sAnims_Calyrex, + [SPECIES_WYRDEER] = sAnims_Wyrdeer, + [SPECIES_KLEAVOR] = sAnims_Kleavor, + [SPECIES_URSALUNA] = sAnims_Ursaluna, + [SPECIES_BASCULEGION] = sAnims_Basculegion, + [SPECIES_SNEASLER] = sAnims_Sneasler, + [SPECIES_OVERQWIL] = sAnims_Overqwil, + [SPECIES_ENAMORUS] = sAnims_Enamorus, +#endif + [SPECIES_VENUSAUR_MEGA] = sAnims_VenusaurMega, + [SPECIES_CHARIZARD_MEGA_X] = sAnims_CHARIZARD_MEGA_X, + [SPECIES_CHARIZARD_MEGA_Y] = sAnims_CHARIZARD_MEGA_Y, + [SPECIES_BLASTOISE_MEGA] = sAnims_BlastoiseMega, + [SPECIES_BEEDRILL_MEGA] = sAnims_BeedrillMega, + [SPECIES_PIDGEOT_MEGA] = sAnims_PidgeotMega, + [SPECIES_ALAKAZAM_MEGA] = sAnims_AlakazamMega, + [SPECIES_SLOWBRO_MEGA] = sAnims_SlowbroMega, + [SPECIES_GENGAR_MEGA] = sAnims_GengarMega, + [SPECIES_KANGASKHAN_MEGA] = sAnims_KangaskhanMega, + [SPECIES_PINSIR_MEGA] = sAnims_PinsirMega, + [SPECIES_GYARADOS_MEGA] = sAnims_GyaradosMega, + [SPECIES_AERODACTYL_MEGA] = sAnims_AerodactylMega, + [SPECIES_MEWTWO_MEGA_X] = sAnims_MEWTWO_MEGA_X, + [SPECIES_MEWTWO_MEGA_Y] = sAnims_MEWTWO_MEGA_Y, + [SPECIES_AMPHAROS_MEGA] = sAnims_AmpharosMega, + [SPECIES_STEELIX_MEGA] = sAnims_SteelixMega, + [SPECIES_SCIZOR_MEGA] = sAnims_ScizorMega, + [SPECIES_HERACROSS_MEGA] = sAnims_HeracrossMega, + [SPECIES_HOUNDOOM_MEGA] = sAnims_HoundoomMega, + [SPECIES_TYRANITAR_MEGA] = sAnims_TyranitarMega, + [SPECIES_SCEPTILE_MEGA] = sAnims_SceptileMega, + [SPECIES_BLAZIKEN_MEGA] = sAnims_BlazikenMega, + [SPECIES_SWAMPERT_MEGA] = sAnims_SwampertMega, + [SPECIES_GARDEVOIR_MEGA] = sAnims_GardevoirMega, + [SPECIES_SABLEYE_MEGA] = sAnims_SableyeMega, + [SPECIES_MAWILE_MEGA] = sAnims_MawileMega, + [SPECIES_AGGRON_MEGA] = sAnims_AggronMega, + [SPECIES_MEDICHAM_MEGA] = sAnims_MedichamMega, + [SPECIES_MANECTRIC_MEGA] = sAnims_ManectricMega, + [SPECIES_SHARPEDO_MEGA] = sAnims_SharpedoMega, + [SPECIES_CAMERUPT_MEGA] = sAnims_CameruptMega, + [SPECIES_ALTARIA_MEGA] = sAnims_AltariaMega, + [SPECIES_BANETTE_MEGA] = sAnims_BanetteMega, + [SPECIES_ABSOL_MEGA] = sAnims_AbsolMega, + [SPECIES_GLALIE_MEGA] = sAnims_GlalieMega, + [SPECIES_SALAMENCE_MEGA] = sAnims_SalamenceMega, + [SPECIES_METAGROSS_MEGA] = sAnims_MetagrossMega, + [SPECIES_LATIAS_MEGA] = sAnims_LatiasMega, + [SPECIES_LATIOS_MEGA] = sAnims_LatiosMega, +#if P_GEN_4_POKEMON == TRUE + [SPECIES_LOPUNNY_MEGA] = sAnims_LopunnyMega, + [SPECIES_GARCHOMP_MEGA] = sAnims_GarchompMega, + [SPECIES_LUCARIO_MEGA] = sAnims_LucarioMega, + [SPECIES_ABOMASNOW_MEGA] = sAnims_AbomasnowMega, + [SPECIES_GALLADE_MEGA] = sAnims_GalladeMega, +#endif +#if P_GEN_5_POKEMON == TRUE + [SPECIES_AUDINO_MEGA] = sAnims_AudinoMega, +#endif +#if P_GEN_6_POKEMON == TRUE + [SPECIES_DIANCIE_MEGA] = sAnims_DiancieMega, +#endif + [SPECIES_RAYQUAZA_MEGA] = sAnims_RayquazaMega, + [SPECIES_KYOGRE_PRIMAL] = sAnims_KyogrePrimal, + [SPECIES_GROUDON_PRIMAL] = sAnims_GroudonPrimal, + [SPECIES_RATTATA_ALOLAN] = sAnims_RattataAlolan, + [SPECIES_RATICATE_ALOLAN] = sAnims_RaticateAlolan, + [SPECIES_RAICHU_ALOLAN] = sAnims_RaichuAlolan, + [SPECIES_SANDSHREW_ALOLAN] = sAnims_SandshrewAlolan, + [SPECIES_SANDSLASH_ALOLAN] = sAnims_SandslashAlolan, + [SPECIES_VULPIX_ALOLAN] = sAnims_VulpixAlolan, + [SPECIES_NINETALES_ALOLAN] = sAnims_NinetalesAlolan, + [SPECIES_DIGLETT_ALOLAN] = sAnims_DiglettAlolan, + [SPECIES_DUGTRIO_ALOLAN] = sAnims_DugtrioAlolan, + [SPECIES_MEOWTH_ALOLAN] = sAnims_MeowthAlolan, + [SPECIES_PERSIAN_ALOLAN] = sAnims_PersianAlolan, + [SPECIES_GEODUDE_ALOLAN] = sAnims_GeodudeAlolan, + [SPECIES_GRAVELER_ALOLAN] = sAnims_GravelerAlolan, + [SPECIES_GOLEM_ALOLAN] = sAnims_GolemAlolan, + [SPECIES_GRIMER_ALOLAN] = sAnims_GrimerAlolan, + [SPECIES_MUK_ALOLAN] = sAnims_MukAlolan, + [SPECIES_EXEGGUTOR_ALOLAN] = sAnims_ExeggutorAlolan, + [SPECIES_MAROWAK_ALOLAN] = sAnims_MarowakAlolan, + [SPECIES_MEOWTH_GALARIAN] = sAnims_MeowthGalarian, + [SPECIES_PONYTA_GALARIAN] = sAnims_PonytaGalarian, + [SPECIES_RAPIDASH_GALARIAN] = sAnims_RapidashGalarian, + [SPECIES_SLOWPOKE_GALARIAN] = sAnims_SlowpokeGalarian, + [SPECIES_SLOWBRO_GALARIAN] = sAnims_SlowbroGalarian, + [SPECIES_FARFETCHD_GALARIAN] = sAnims_FarfetchdGalarian, + [SPECIES_WEEZING_GALARIAN] = sAnims_WeezingGalarian, + [SPECIES_MR_MIME_GALARIAN] = sAnims_MrMimeGalarian, + [SPECIES_ARTICUNO_GALARIAN] = sAnims_ArticunoGalarian, + [SPECIES_ZAPDOS_GALARIAN] = sAnims_ZapdosGalarian, + [SPECIES_MOLTRES_GALARIAN] = sAnims_MoltresGalarian, + [SPECIES_SLOWKING_GALARIAN] = sAnims_SlowkingGalarian, + [SPECIES_CORSOLA_GALARIAN] = sAnims_CorsolaGalarian, + [SPECIES_ZIGZAGOON_GALARIAN] = sAnims_ZigzagoonGalarian, + [SPECIES_LINOONE_GALARIAN] = sAnims_LinooneGalarian, +#if P_GEN_5_POKEMON == TRUE + [SPECIES_DARUMAKA_GALARIAN] = sAnims_DarumakaGalarian, + [SPECIES_DARMANITAN_GALARIAN] = sAnims_DarmanitanGalarian, + [SPECIES_YAMASK_GALARIAN] = sAnims_YamaskGalarian, + [SPECIES_STUNFISK_GALARIAN] = sAnims_StunfiskGalarian, +#endif + [SPECIES_GROWLITHE_HISUIAN] = sAnims_GrowlitheHisuian, + [SPECIES_ARCANINE_HISUIAN] = sAnims_ArcanineHisuian, + [SPECIES_VOLTORB_HISUIAN] = sAnims_VoltorbHisuian, + [SPECIES_ELECTRODE_HISUIAN] = sAnims_ElectrodeHisuian, + [SPECIES_TYPHLOSION_HISUIAN] = sAnims_TyphlosionHisuian, + [SPECIES_QWILFISH_HISUIAN] = sAnims_QwilfishHisuian, + [SPECIES_SNEASEL_HISUIAN] = sAnims_SneaselHisuian, +#if P_GEN_5_POKEMON == TRUE + [SPECIES_SAMUROTT_HISUIAN] = sAnims_SamurottHisuian, + [SPECIES_LILLIGANT_HISUIAN] = sAnims_LilligantHisuian, + [SPECIES_ZORUA_HISUIAN] = sAnims_ZoruaHisuian, + [SPECIES_ZOROARK_HISUIAN] = sAnims_ZoroarkHisuian, + [SPECIES_BRAVIARY_HISUIAN] = sAnims_BraviaryHisuian, +#endif +#if P_GEN_6_POKEMON == TRUE + [SPECIES_SLIGGOO_HISUIAN] = sAnims_SliggooHisuian, + [SPECIES_GOODRA_HISUIAN] = sAnims_GoodraHisuian, + [SPECIES_AVALUGG_HISUIAN] = sAnims_AvaluggHisuian, +#endif +#if P_GEN_7_POKEMON == TRUE + [SPECIES_DECIDUEYE_HISUIAN] = sAnims_DecidueyeHisuian, +#endif + [SPECIES_PIKACHU_COSPLAY] = sAnims_PikachuCosplay, + [SPECIES_PIKACHU_ROCK_STAR] = sAnims_PikachuRockStar, + [SPECIES_PIKACHU_BELLE] = sAnims_PikachuBelle, + [SPECIES_PIKACHU_POP_STAR] = sAnims_PikachuPopStar, + [SPECIES_PIKACHU_PH_D] = sAnims_PIKACHU_PH_D, + [SPECIES_PIKACHU_LIBRE] = sAnims_PikachuLibre, + [SPECIES_PIKACHU_ORIGINAL_CAP] = sAnims_PikachuOriginalCap, + [SPECIES_PIKACHU_HOENN_CAP] = sAnims_PikachuHoennCap, + [SPECIES_PIKACHU_SINNOH_CAP] = sAnims_PikachuSinnohCap, + [SPECIES_PIKACHU_UNOVA_CAP] = sAnims_PikachuUnovaCap, + [SPECIES_PIKACHU_KALOS_CAP] = sAnims_PikachuKalosCap, + [SPECIES_PIKACHU_ALOLA_CAP] = sAnims_PikachuAlolaCap, + [SPECIES_PIKACHU_PARTNER_CAP] = sAnims_PikachuPartnerCap, + [SPECIES_PIKACHU_WORLD_CAP] = sAnims_PikachuWorldCap, + [SPECIES_PICHU_SPIKY_EARED] = sAnims_PichuSpikyEared, + [SPECIES_UNOWN_B] = sAnims_UnownB, + [SPECIES_UNOWN_C] = sAnims_UnownC, + [SPECIES_UNOWN_D] = sAnims_UnownD, + [SPECIES_UNOWN_E] = sAnims_UnownE, + [SPECIES_UNOWN_F] = sAnims_UnownF, + [SPECIES_UNOWN_G] = sAnims_UnownG, + [SPECIES_UNOWN_H] = sAnims_UnownH, + [SPECIES_UNOWN_I] = sAnims_UnownI, + [SPECIES_UNOWN_J] = sAnims_UnownJ, + [SPECIES_UNOWN_K] = sAnims_UnownK, + [SPECIES_UNOWN_L] = sAnims_UnownL, + [SPECIES_UNOWN_M] = sAnims_UnownM, + [SPECIES_UNOWN_N] = sAnims_UnownN, + [SPECIES_UNOWN_O] = sAnims_UnownO, + [SPECIES_UNOWN_P] = sAnims_UnownP, + [SPECIES_UNOWN_Q] = sAnims_UnownQ, + [SPECIES_UNOWN_R] = sAnims_UnownR, + [SPECIES_UNOWN_S] = sAnims_UnownS, + [SPECIES_UNOWN_T] = sAnims_UnownT, + [SPECIES_UNOWN_U] = sAnims_UnownU, + [SPECIES_UNOWN_V] = sAnims_UnownV, + [SPECIES_UNOWN_W] = sAnims_UnownW, + [SPECIES_UNOWN_X] = sAnims_UnownX, + [SPECIES_UNOWN_Y] = sAnims_UnownY, + [SPECIES_UNOWN_Z] = sAnims_UnownZ, + [SPECIES_UNOWN_EMARK] = sAnims_UnownEMark, + [SPECIES_UNOWN_QMARK] = sAnims_UnownQMark, + [SPECIES_CASTFORM_SUNNY] = sAnims_Castform, + [SPECIES_CASTFORM_RAINY] = sAnims_Castform, + [SPECIES_CASTFORM_SNOWY] = sAnims_Castform, + [SPECIES_DEOXYS_ATTACK] = sAnims_DeoxysAttack, + [SPECIES_DEOXYS_DEFENSE] = sAnims_DeoxysDefense, + [SPECIES_DEOXYS_SPEED] = sAnims_DeoxysSpeed, +#if P_GEN_4_POKEMON == TRUE + [SPECIES_BURMY_SANDY_CLOAK] = sAnims_Burmy, + [SPECIES_BURMY_TRASH_CLOAK] = sAnims_Burmy, + [SPECIES_WORMADAM_SANDY_CLOAK] = sAnims_Wormadam, + [SPECIES_WORMADAM_TRASH_CLOAK] = sAnims_Wormadam, + [SPECIES_CHERRIM_SUNSHINE] = sAnims_CherrimSunshine, + [SPECIES_SHELLOS_EAST_SEA] = sAnims_Shellos, + [SPECIES_GASTRODON_EAST_SEA] = sAnims_Gastrodon, + [SPECIES_ROTOM_HEAT] = sAnims_RotomHeat, + [SPECIES_ROTOM_WASH] = sAnims_RotomWash, + [SPECIES_ROTOM_FROST] = sAnims_RotomFrost, + [SPECIES_ROTOM_FAN] = sAnims_RotomFan, + [SPECIES_ROTOM_MOW] = sAnims_RotomMow, + [SPECIES_DIALGA_ORIGIN] = sAnims_DialgaOrigin, + [SPECIES_PALKIA_ORIGIN] = sAnims_PalkiaOrigin, + [SPECIES_GIRATINA_ORIGIN] = sAnims_GiratinaOrigin, + [SPECIES_SHAYMIN_SKY] = sAnims_ShayminSky, + [SPECIES_ARCEUS_FIGHTING] = sAnims_Arceus, + [SPECIES_ARCEUS_FLYING] = sAnims_Arceus, + [SPECIES_ARCEUS_POISON] = sAnims_Arceus, + [SPECIES_ARCEUS_GROUND] = sAnims_Arceus, + [SPECIES_ARCEUS_ROCK] = sAnims_Arceus, + [SPECIES_ARCEUS_BUG] = sAnims_Arceus, + [SPECIES_ARCEUS_GHOST] = sAnims_Arceus, + [SPECIES_ARCEUS_STEEL] = sAnims_Arceus, + [SPECIES_ARCEUS_FIRE] = sAnims_Arceus, + [SPECIES_ARCEUS_WATER] = sAnims_Arceus, + [SPECIES_ARCEUS_GRASS] = sAnims_Arceus, + [SPECIES_ARCEUS_ELECTRIC] = sAnims_Arceus, + [SPECIES_ARCEUS_PSYCHIC] = sAnims_Arceus, + [SPECIES_ARCEUS_ICE] = sAnims_Arceus, + [SPECIES_ARCEUS_DRAGON] = sAnims_Arceus, + [SPECIES_ARCEUS_DARK] = sAnims_Arceus, + [SPECIES_ARCEUS_FAIRY] = sAnims_Arceus, +#endif +#if P_GEN_5_POKEMON == TRUE + [SPECIES_BASCULIN_BLUE_STRIPED] = sAnims_Basculin, + [SPECIES_BASCULIN_WHITE_STRIPED] = sAnims_Basculin, + [SPECIES_DARMANITAN_ZEN_MODE] = sAnims_DarmanitanZenMode, + [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = sAnims_DarmanitanZenModeGalarian, + [SPECIES_DEERLING_SUMMER] = sAnims_Deerling, + [SPECIES_DEERLING_AUTUMN] = sAnims_Deerling, + [SPECIES_DEERLING_WINTER] = sAnims_Deerling, + [SPECIES_SAWSBUCK_SUMMER] = sAnims_Sawsbuck, + [SPECIES_SAWSBUCK_AUTUMN] = sAnims_Sawsbuck, + [SPECIES_SAWSBUCK_WINTER] = sAnims_Sawsbuck, + [SPECIES_TORNADUS_THERIAN] = sAnims_TornadusTherian, + [SPECIES_THUNDURUS_THERIAN] = sAnims_ThundurusTherian, + [SPECIES_LANDORUS_THERIAN] = sAnims_LandorusTherian, + [SPECIES_KYUREM_WHITE] = sAnims_KyuremWhite, + [SPECIES_KYUREM_BLACK] = sAnims_KyuremBlack, + [SPECIES_KELDEO_RESOLUTE] = sAnims_KeldeoResolute, + [SPECIES_MELOETTA_PIROUETTE] = sAnims_MeloettaPirouette, + [SPECIES_GENESECT_DOUSE_DRIVE] = sAnims_Genesect, + [SPECIES_GENESECT_SHOCK_DRIVE] = sAnims_Genesect, + [SPECIES_GENESECT_BURN_DRIVE] = sAnims_Genesect, + [SPECIES_GENESECT_CHILL_DRIVE] = sAnims_Genesect, +#endif +#if P_GEN_6_POKEMON == TRUE + [SPECIES_GRENINJA_BATTLE_BOND] = sAnims_Greninja, + [SPECIES_GRENINJA_ASH] = sAnims_GreninjaAsh, + [SPECIES_VIVILLON_POLAR] = sAnims_Vivillon, + [SPECIES_VIVILLON_TUNDRA] = sAnims_Vivillon, + [SPECIES_VIVILLON_CONTINENTAL] = sAnims_Vivillon, + [SPECIES_VIVILLON_GARDEN] = sAnims_Vivillon, + [SPECIES_VIVILLON_ELEGANT] = sAnims_Vivillon, + [SPECIES_VIVILLON_MEADOW] = sAnims_Vivillon, + [SPECIES_VIVILLON_MODERN] = sAnims_Vivillon, + [SPECIES_VIVILLON_MARINE] = sAnims_Vivillon, + [SPECIES_VIVILLON_ARCHIPELAGO] = sAnims_Vivillon, + [SPECIES_VIVILLON_HIGH_PLAINS] = sAnims_Vivillon, + [SPECIES_VIVILLON_SANDSTORM] = sAnims_Vivillon, + [SPECIES_VIVILLON_RIVER] = sAnims_Vivillon, + [SPECIES_VIVILLON_MONSOON] = sAnims_Vivillon, + [SPECIES_VIVILLON_SAVANNA] = sAnims_Vivillon, + [SPECIES_VIVILLON_SUN] = sAnims_Vivillon, + [SPECIES_VIVILLON_OCEAN] = sAnims_Vivillon, + [SPECIES_VIVILLON_JUNGLE] = sAnims_Vivillon, + [SPECIES_VIVILLON_FANCY] = sAnims_Vivillon, + [SPECIES_VIVILLON_POKE_BALL] = sAnims_Vivillon, + [SPECIES_FLABEBE_YELLOW_FLOWER] = sAnims_Flabebe, + [SPECIES_FLABEBE_ORANGE_FLOWER] = sAnims_Flabebe, + [SPECIES_FLABEBE_BLUE_FLOWER] = sAnims_Flabebe, + [SPECIES_FLABEBE_WHITE_FLOWER] = sAnims_Flabebe, + [SPECIES_FLOETTE_YELLOW_FLOWER] = sAnims_Floette, + [SPECIES_FLOETTE_ORANGE_FLOWER] = sAnims_Floette, + [SPECIES_FLOETTE_BLUE_FLOWER] = sAnims_Floette, + [SPECIES_FLOETTE_WHITE_FLOWER] = sAnims_Floette, + [SPECIES_FLOETTE_ETERNAL_FLOWER] = sAnims_Floette, + [SPECIES_FLORGES_YELLOW_FLOWER] = sAnims_Florges, + [SPECIES_FLORGES_ORANGE_FLOWER] = sAnims_Florges, + [SPECIES_FLORGES_BLUE_FLOWER] = sAnims_Florges, + [SPECIES_FLORGES_WHITE_FLOWER] = sAnims_Florges, + [SPECIES_FURFROU_HEART_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_STAR_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_DIAMOND_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_DEBUTANTE_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_MATRON_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_DANDY_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_LA_REINE_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_KABUKI_TRIM] = sAnims_Furfrou, + [SPECIES_FURFROU_PHARAOH_TRIM] = sAnims_Furfrou, + [SPECIES_MEOWSTIC_FEMALE] = sAnims_Meowstic, + [SPECIES_AEGISLASH_BLADE] = sAnims_AegislashBlade, + [SPECIES_PUMPKABOO_SMALL] = sAnims_Pumpkaboo, + [SPECIES_PUMPKABOO_LARGE] = sAnims_Pumpkaboo, + [SPECIES_PUMPKABOO_SUPER] = sAnims_Pumpkaboo, + [SPECIES_GOURGEIST_SMALL] = sAnims_Gourgeist, + [SPECIES_GOURGEIST_LARGE] = sAnims_Gourgeist, + [SPECIES_GOURGEIST_SUPER] = sAnims_Gourgeist, + [SPECIES_XERNEAS_ACTIVE] = sAnims_Xerneas, + [SPECIES_ZYGARDE_10] = sAnims_Zygarde10, + [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = sAnims_Zygarde10, + [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = sAnims_Zygarde, + [SPECIES_ZYGARDE_COMPLETE] = sAnims_ZygardeComplete, + [SPECIES_HOOPA_UNBOUND] = sAnims_HoopaUnbound, +#endif +#if P_GEN_7_POKEMON == TRUE + [SPECIES_ORICORIO_POM_POM] = sAnims_Oricorio, + [SPECIES_ORICORIO_PAU] = sAnims_Oricorio, + [SPECIES_ORICORIO_SENSU] = sAnims_Oricorio, + [SPECIES_ROCKRUFF_OWN_TEMPO] = sAnims_Rockruff, + [SPECIES_LYCANROC_MIDNIGHT] = sAnims_LycanrocMidnight, + [SPECIES_LYCANROC_DUSK] = sAnims_LycanrocDusk, + [SPECIES_WISHIWASHI_SCHOOL] = sAnims_WishiwashiSchool, + [SPECIES_SILVALLY_FIGHTING] = sAnims_Silvally, + [SPECIES_SILVALLY_FLYING] = sAnims_Silvally, + [SPECIES_SILVALLY_POISON] = sAnims_Silvally, + [SPECIES_SILVALLY_GROUND] = sAnims_Silvally, + [SPECIES_SILVALLY_ROCK] = sAnims_Silvally, + [SPECIES_SILVALLY_BUG] = sAnims_Silvally, + [SPECIES_SILVALLY_GHOST] = sAnims_Silvally, + [SPECIES_SILVALLY_STEEL] = sAnims_Silvally, + [SPECIES_SILVALLY_FIRE] = sAnims_Silvally, + [SPECIES_SILVALLY_WATER] = sAnims_Silvally, + [SPECIES_SILVALLY_GRASS] = sAnims_Silvally, + [SPECIES_SILVALLY_ELECTRIC] = sAnims_Silvally, + [SPECIES_SILVALLY_PSYCHIC] = sAnims_Silvally, + [SPECIES_SILVALLY_ICE] = sAnims_Silvally, + [SPECIES_SILVALLY_DRAGON] = sAnims_Silvally, + [SPECIES_SILVALLY_DARK] = sAnims_Silvally, + [SPECIES_SILVALLY_FAIRY] = sAnims_Silvally, + [SPECIES_MINIOR_METEOR_ORANGE] = sAnims_Minior, + [SPECIES_MINIOR_METEOR_YELLOW] = sAnims_Minior, + [SPECIES_MINIOR_METEOR_GREEN] = sAnims_Minior, + [SPECIES_MINIOR_METEOR_BLUE] = sAnims_Minior, + [SPECIES_MINIOR_METEOR_INDIGO] = sAnims_Minior, + [SPECIES_MINIOR_METEOR_VIOLET] = sAnims_Minior, + [SPECIES_MINIOR_CORE_RED] = sAnims_Minior, + [SPECIES_MINIOR_CORE_ORANGE] = sAnims_Minior, + [SPECIES_MINIOR_CORE_YELLOW] = sAnims_Minior, + [SPECIES_MINIOR_CORE_GREEN] = sAnims_Minior, + [SPECIES_MINIOR_CORE_BLUE] = sAnims_Minior, + [SPECIES_MINIOR_CORE_INDIGO] = sAnims_Minior, + [SPECIES_MINIOR_CORE_VIOLET] = sAnims_Minior, + [SPECIES_MIMIKYU_BUSTED] = sAnims_MimikyuBusted, + [SPECIES_NECROZMA_DUSK_MANE] = sAnims_Necrozma, + [SPECIES_NECROZMA_DAWN_WINGS] = sAnims_Necrozma, + [SPECIES_NECROZMA_ULTRA] = sAnims_Necrozma, + [SPECIES_MAGEARNA_ORIGINAL_COLOR] = sAnims_Magearna, +#endif +#if P_GEN_8_POKEMON == TRUE + [SPECIES_CRAMORANT_GULPING] = sAnims_Cramorant, + [SPECIES_CRAMORANT_GORGING] = sAnims_Cramorant, + [SPECIES_TOXTRICITY_LOW_KEY] = sAnims_Toxtricity, + [SPECIES_SINISTEA_ANTIQUE] = sAnims_Sinistea, + [SPECIES_POLTEAGEIST_ANTIQUE] = sAnims_Polteageist, + [SPECIES_ALCREMIE_RUBY_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_MATCHA_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_MINT_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_LEMON_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_SALTED_CREAM] = sAnims_Alcremie, + [SPECIES_ALCREMIE_RUBY_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_CARAMEL_SWIRL] = sAnims_Alcremie, + [SPECIES_ALCREMIE_RAINBOW_SWIRL] = sAnims_Alcremie, + [SPECIES_EISCUE_NOICE_FACE] = sAnims_Eiscue, + [SPECIES_INDEEDEE_FEMALE] = sAnims_Indeedee, + [SPECIES_MORPEKO_HANGRY] = sAnims_Morpeko, + [SPECIES_ZACIAN_CROWNED_SWORD] = sAnims_Zacian, + [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = sAnims_Zamazenta, + [SPECIES_ETERNATUS_ETERNAMAX] = sAnims_Eternatus, + [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = sAnims_Urshifu, + [SPECIES_ZARUDE_DADA] = sAnims_Zarude, + [SPECIES_CALYREX_ICE_RIDER] = sAnims_Calyrex, + [SPECIES_CALYREX_SHADOW_RIDER] = sAnims_Calyrex, + [SPECIES_ENAMORUS_THERIAN] = sAnims_EnamorusTherian, +#endif + [SPECIES_EGG] = sAnims_Egg, }; - -static const union AnimCmd *const sAnims_ZUBAT[] = -{ - sAnim_GeneralFrame0, - sAnim_ZUBAT_1, -}; - -static const union AnimCmd *const sAnims_GOLBAT[] = -{ - sAnim_GeneralFrame0, - sAnim_GOLBAT_1, -}; - -static const union AnimCmd *const sAnims_ODDISH[] = -{ - sAnim_GeneralFrame0, - sAnim_ODDISH_1, -}; - -static const union AnimCmd *const sAnims_GLOOM[] = -{ - sAnim_GeneralFrame0, - sAnim_GLOOM_1, -}; - -static const union AnimCmd *const sAnims_VILEPLUME[] = -{ - sAnim_GeneralFrame0, - sAnim_VILEPLUME_1, -}; - -static const union AnimCmd *const sAnims_PARAS[] = -{ - sAnim_GeneralFrame0, - sAnim_PARAS_1, -}; - -static const union AnimCmd *const sAnims_PARASECT[] = -{ - sAnim_GeneralFrame0, - sAnim_PARASECT_1, -}; - -static const union AnimCmd *const sAnims_VENONAT[] = -{ - sAnim_GeneralFrame0, - sAnim_VENONAT_1, -}; - -static const union AnimCmd *const sAnims_VENOMOTH[] = -{ - sAnim_GeneralFrame0, - sAnim_VENOMOTH_1, -}; - -static const union AnimCmd *const sAnims_DIGLETT[] = -{ - sAnim_GeneralFrame0, - sAnim_DIGLETT_1, -}; - -static const union AnimCmd *const sAnims_DUGTRIO[] = -{ - sAnim_GeneralFrame0, - sAnim_DUGTRIO_1, -}; - -static const union AnimCmd *const sAnims_MEOWTH[] = -{ - sAnim_GeneralFrame0, - sAnim_MEOWTH_1, -}; - -static const union AnimCmd *const sAnims_PERSIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_PERSIAN_1, -}; - -static const union AnimCmd *const sAnims_PSYDUCK[] = -{ - sAnim_GeneralFrame0, - sAnim_PSYDUCK_1, - sAnim_PSYDUCK_2, -}; - -static const union AnimCmd *const sAnims_GOLDUCK[] = -{ - sAnim_GeneralFrame0, - sAnim_GOLDUCK_1, - sAnim_GOLDUCK_2, -}; - -static const union AnimCmd *const sAnims_MANKEY[] = -{ - sAnim_GeneralFrame0, - sAnim_MANKEY_1, -}; - -static const union AnimCmd *const sAnims_PRIMEAPE[] = -{ - sAnim_GeneralFrame0, - sAnim_PRIMEAPE_1, -}; - -static const union AnimCmd *const sAnims_GROWLITHE[] = -{ - sAnim_GeneralFrame0, - sAnim_GROWLITHE_1, -}; - -static const union AnimCmd *const sAnims_ARCANINE[] = -{ - sAnim_GeneralFrame0, - sAnim_ARCANINE_1, -}; - -static const union AnimCmd *const sAnims_POLIWAG[] = -{ - sAnim_GeneralFrame0, - sAnim_POLIWAG_1, -}; - -static const union AnimCmd *const sAnims_POLIWHIRL[] = -{ - sAnim_GeneralFrame0, - sAnim_POLIWHIRL_1, -}; - -static const union AnimCmd *const sAnims_POLIWRATH[] = -{ - sAnim_GeneralFrame0, - sAnim_POLIWRATH_1, -}; - -static const union AnimCmd *const sAnims_ABRA[] = -{ - sAnim_GeneralFrame0, - sAnim_ABRA_1, -}; - -static const union AnimCmd *const sAnims_KADABRA[] = -{ - sAnim_GeneralFrame0, - sAnim_KADABRA_1, -}; - -static const union AnimCmd *const sAnims_ALAKAZAM[] = -{ - sAnim_GeneralFrame0, - sAnim_ALAKAZAM_1, -}; - -static const union AnimCmd *const sAnims_MACHOP[] = -{ - sAnim_GeneralFrame0, - sAnim_MACHOP_1, -}; - -static const union AnimCmd *const sAnims_MACHOKE[] = -{ - sAnim_GeneralFrame0, - sAnim_MACHOKE_1, -}; - -static const union AnimCmd *const sAnims_MACHAMP[] = -{ - sAnim_GeneralFrame0, - sAnim_MACHAMP_1, -}; - -static const union AnimCmd *const sAnims_BELLSPROUT[] = -{ - sAnim_GeneralFrame0, - sAnim_BELLSPROUT_1, -}; - -static const union AnimCmd *const sAnims_WEEPINBELL[] = -{ - sAnim_GeneralFrame0, - sAnim_WEEPINBELL_1, -}; - -static const union AnimCmd *const sAnims_VICTREEBEL[] = -{ - sAnim_GeneralFrame0, - sAnim_VICTREEBEL_1, -}; - -static const union AnimCmd *const sAnims_TENTACOOL[] = -{ - sAnim_GeneralFrame0, - sAnim_TENTACOOL_1, -}; - -static const union AnimCmd *const sAnims_TENTACRUEL[] = -{ - sAnim_GeneralFrame0, - sAnim_TENTACRUEL_1, -}; - -static const union AnimCmd *const sAnims_GEODUDE[] = -{ - sAnim_GeneralFrame0, - sAnim_GEODUDE_1, -}; - -static const union AnimCmd *const sAnims_GRAVELER[] = -{ - sAnim_GeneralFrame0, - sAnim_GRAVELER_1, -}; - -static const union AnimCmd *const sAnims_GOLEM[] = -{ - sAnim_GeneralFrame0, - sAnim_GOLEM_1, -}; - -static const union AnimCmd *const sAnims_PONYTA[] = -{ - sAnim_GeneralFrame0, - sAnim_PONYTA_1, -}; - -static const union AnimCmd *const sAnims_RAPIDASH[] = -{ - sAnim_GeneralFrame0, - sAnim_RAPIDASH_1, -}; - -static const union AnimCmd *const sAnims_SLOWPOKE[] = -{ - sAnim_GeneralFrame0, - sAnim_SLOWPOKE_1, -}; - -static const union AnimCmd *const sAnims_SLOWBRO[] = -{ - sAnim_GeneralFrame0, - sAnim_SLOWBRO_1, -}; - -static const union AnimCmd *const sAnims_MAGNEMITE[] = -{ - sAnim_GeneralFrame0, - sAnim_MAGNEMITE_1, -}; - -static const union AnimCmd *const sAnims_MAGNETON[] = -{ - sAnim_GeneralFrame0, - sAnim_MAGNETON_1, -}; - -static const union AnimCmd *const sAnims_FARFETCHD[] = -{ - sAnim_GeneralFrame0, - sAnim_FARFETCHD_1, -}; - -static const union AnimCmd *const sAnims_DODUO[] = -{ - sAnim_GeneralFrame0, - sAnim_DODUO_1, -}; - -static const union AnimCmd *const sAnims_DODRIO[] = -{ - sAnim_GeneralFrame0, - sAnim_DODRIO_1, -}; - -static const union AnimCmd *const sAnims_SEEL[] = -{ - sAnim_GeneralFrame0, - sAnim_SEEL_1, -}; - -static const union AnimCmd *const sAnims_DEWGONG[] = -{ - sAnim_GeneralFrame0, - sAnim_DEWGONG_1, -}; - -static const union AnimCmd *const sAnims_GRIMER[] = -{ - sAnim_GeneralFrame0, - sAnim_GRIMER_1, - sAnim_GRIMER_2, -}; - -static const union AnimCmd *const sAnims_MUK[] = -{ - sAnim_GeneralFrame0, - sAnim_MUK_1, - sAnim_MUK_2, -}; - -static const union AnimCmd *const sAnims_SHELLDER[] = -{ - sAnim_GeneralFrame0, - sAnim_SHELLDER_1, -}; - -static const union AnimCmd *const sAnims_CLOYSTER[] = -{ - sAnim_GeneralFrame0, - sAnim_CLOYSTER_1, -}; - -static const union AnimCmd *const sAnims_GASTLY[] = -{ - sAnim_GeneralFrame0, - sAnim_GASTLY_1, -}; - -static const union AnimCmd *const sAnims_HAUNTER[] = -{ - sAnim_GeneralFrame0, - sAnim_HAUNTER_1, -}; - -static const union AnimCmd *const sAnims_GENGAR[] = -{ - sAnim_GeneralFrame0, - sAnim_GENGAR_1, -}; - -static const union AnimCmd *const sAnims_ONIX[] = -{ - sAnim_GeneralFrame0, - sAnim_ONIX_1, -}; - -static const union AnimCmd *const sAnims_DROWZEE[] = -{ - sAnim_GeneralFrame0, - sAnim_DROWZEE_1, -}; - -static const union AnimCmd *const sAnims_HYPNO[] = -{ - sAnim_GeneralFrame0, - sAnim_HYPNO_1, -}; - -static const union AnimCmd *const sAnims_KRABBY[] = -{ - sAnim_GeneralFrame0, - sAnim_KRABBY_1, -}; - -static const union AnimCmd *const sAnims_KINGLER[] = -{ - sAnim_GeneralFrame0, - sAnim_KINGLER_1, -}; - -static const union AnimCmd *const sAnims_VOLTORB[] = -{ - sAnim_GeneralFrame0, - sAnim_VOLTORB_1, -}; - -static const union AnimCmd *const sAnims_ELECTRODE[] = -{ - sAnim_GeneralFrame0, - sAnim_ELECTRODE_1, -}; - -static const union AnimCmd *const sAnims_EXEGGCUTE[] = -{ - sAnim_GeneralFrame0, - sAnim_EXEGGCUTE_1, -}; - -static const union AnimCmd *const sAnims_EXEGGUTOR[] = -{ - sAnim_GeneralFrame0, - sAnim_EXEGGUTOR_1, -}; - -static const union AnimCmd *const sAnims_CUBONE[] = -{ - sAnim_GeneralFrame0, - sAnim_CUBONE_1, -}; - -static const union AnimCmd *const sAnims_MAROWAK[] = -{ - sAnim_GeneralFrame0, - sAnim_MAROWAK_1, -}; - -static const union AnimCmd *const sAnims_HITMONLEE[] = -{ - sAnim_GeneralFrame0, - sAnim_HITMONLEE_1, -}; - -static const union AnimCmd *const sAnims_HITMONCHAN[] = -{ - sAnim_GeneralFrame0, - sAnim_HITMONCHAN_1, -}; - -static const union AnimCmd *const sAnims_LICKITUNG[] = -{ - sAnim_GeneralFrame0, - sAnim_LICKITUNG_1, -}; - -static const union AnimCmd *const sAnims_KOFFING[] = -{ - sAnim_GeneralFrame0, - sAnim_KOFFING_1, - sAnim_KOFFING_2, -}; - -static const union AnimCmd *const sAnims_WEEZING[] = -{ - sAnim_GeneralFrame0, - sAnim_WEEZING_1, - sAnim_WEEZING_2, -}; - -static const union AnimCmd *const sAnims_RHYHORN[] = -{ - sAnim_GeneralFrame0, - sAnim_RHYHORN_1, - sAnim_RHYHORN_2, -}; - -static const union AnimCmd *const sAnims_RHYDON[] = -{ - sAnim_GeneralFrame0, - sAnim_RHYDON_1, - sAnim_RHYDON_2, -}; - -static const union AnimCmd *const sAnims_CHANSEY[] = -{ - sAnim_GeneralFrame0, - sAnim_CHANSEY_1, -}; - -static const union AnimCmd *const sAnims_TANGELA[] = -{ - sAnim_GeneralFrame0, - sAnim_TANGELA_1, -}; - -static const union AnimCmd *const sAnims_KANGASKHAN[] = -{ - sAnim_GeneralFrame0, - sAnim_KANGASKHAN_1, -}; - -static const union AnimCmd *const sAnims_HORSEA[] = -{ - sAnim_GeneralFrame0, - sAnim_HORSEA_1, - sAnim_HORSEA_2, -}; - -static const union AnimCmd *const sAnims_SEADRA[] = -{ - sAnim_GeneralFrame0, - sAnim_SEADRA_1, - sAnim_SEADRA_2, -}; - -static const union AnimCmd *const sAnims_GOLDEEN[] = -{ - sAnim_GeneralFrame0, - sAnim_GOLDEEN_1, -}; - -static const union AnimCmd *const sAnims_SEAKING[] = -{ - sAnim_GeneralFrame0, - sAnim_SEAKING_1, -}; - -static const union AnimCmd *const sAnims_STARYU[] = -{ - sAnim_GeneralFrame0, - sAnim_STARYU_1, - sAnim_STARYU_2, -}; - -static const union AnimCmd *const sAnims_STARMIE[] = -{ - sAnim_GeneralFrame0, - sAnim_STARMIE_1, - sAnim_STARMIE_2, -}; - -static const union AnimCmd *const sAnims_MR_MIME[] = -{ - sAnim_GeneralFrame0, - sAnim_MR_MIME_1, -}; - -static const union AnimCmd *const sAnims_SCYTHER[] = -{ - sAnim_GeneralFrame0, - sAnim_SCYTHER_1, -}; - -static const union AnimCmd *const sAnims_JYNX[] = -{ - sAnim_GeneralFrame0, - sAnim_JYNX_1, -}; - -static const union AnimCmd *const sAnims_ELECTABUZZ[] = -{ - sAnim_GeneralFrame0, - sAnim_ELECTABUZZ_1, -}; - -static const union AnimCmd *const sAnims_MAGMAR[] = -{ - sAnim_GeneralFrame0, - sAnim_MAGMAR_1, -}; - -static const union AnimCmd *const sAnims_PINSIR[] = -{ - sAnim_GeneralFrame0, - sAnim_PINSIR_1, - sAnim_PINSIR_2, -}; - -static const union AnimCmd *const sAnims_TAUROS[] = -{ - sAnim_GeneralFrame0, - sAnim_TAUROS_1, -}; - -static const union AnimCmd *const sAnims_MAGIKARP[] = -{ - sAnim_GeneralFrame0, - sAnim_MAGIKARP_1, -}; - -static const union AnimCmd *const sAnims_GYARADOS[] = -{ - sAnim_GeneralFrame0, - sAnim_GYARADOS_1, -}; - -static const union AnimCmd *const sAnims_LAPRAS[] = -{ - sAnim_GeneralFrame0, - sAnim_LAPRAS_1, -}; - -static const union AnimCmd *const sAnims_DITTO[] = -{ - sAnim_GeneralFrame0, - sAnim_DITTO_1, -}; - -static const union AnimCmd *const sAnims_EEVEE[] = -{ - sAnim_GeneralFrame0, - sAnim_EEVEE_1, -}; - -static const union AnimCmd *const sAnims_VAPOREON[] = -{ - sAnim_GeneralFrame0, - sAnim_VAPOREON_1, -}; - -static const union AnimCmd *const sAnims_JOLTEON[] = -{ - sAnim_GeneralFrame0, - sAnim_JOLTEON_1, -}; - -static const union AnimCmd *const sAnims_FLAREON[] = -{ - sAnim_GeneralFrame0, - sAnim_FLAREON_1, -}; - -static const union AnimCmd *const sAnims_PORYGON[] = -{ - sAnim_GeneralFrame0, - sAnim_PORYGON_1, -}; - -static const union AnimCmd *const sAnims_OMANYTE[] = -{ - sAnim_GeneralFrame0, - sAnim_OMANYTE_1, -}; - -static const union AnimCmd *const sAnims_OMASTAR[] = -{ - sAnim_GeneralFrame0, - sAnim_OMASTAR_1, -}; - -static const union AnimCmd *const sAnims_KABUTO[] = -{ - sAnim_GeneralFrame0, - sAnim_KABUTO_1, -}; - -static const union AnimCmd *const sAnims_KABUTOPS[] = -{ - sAnim_GeneralFrame0, - sAnim_KABUTOPS_1, -}; - -static const union AnimCmd *const sAnims_AERODACTYL[] = -{ - sAnim_GeneralFrame0, - sAnim_AERODACTYL_1, -}; - -static const union AnimCmd *const sAnims_SNORLAX[] = -{ - sAnim_GeneralFrame0, - sAnim_SNORLAX_1, -}; - -static const union AnimCmd *const sAnims_ARTICUNO[] = -{ - sAnim_GeneralFrame0, - sAnim_ARTICUNO_1, -}; - -static const union AnimCmd *const sAnims_ZAPDOS[] = -{ - sAnim_GeneralFrame0, - sAnim_ZAPDOS_1, -}; - -static const union AnimCmd *const sAnims_MOLTRES[] = -{ - sAnim_GeneralFrame0, - sAnim_MOLTRES_1, -}; - -static const union AnimCmd *const sAnims_DRATINI[] = -{ - sAnim_GeneralFrame0, - sAnim_DRATINI_1, -}; - -static const union AnimCmd *const sAnims_DRAGONAIR[] = -{ - sAnim_GeneralFrame0, - sAnim_DRAGONAIR_1, -}; - -static const union AnimCmd *const sAnims_DRAGONITE[] = -{ - sAnim_GeneralFrame0, - sAnim_DRAGONITE_1, -}; - -static const union AnimCmd *const sAnims_MEWTWO[] = -{ - sAnim_GeneralFrame0, - sAnim_MEWTWO_1, -}; - -static const union AnimCmd *const sAnims_MEW[] = -{ - sAnim_GeneralFrame0, - sAnim_MEW_1, -}; - -static const union AnimCmd *const sAnims_CHIKORITA[] = -{ - sAnim_GeneralFrame0, - sAnim_CHIKORITA_1, -}; - -static const union AnimCmd *const sAnims_BAYLEEF[] = -{ - sAnim_GeneralFrame0, - sAnim_BAYLEEF_1, -}; - -static const union AnimCmd *const sAnims_MEGANIUM[] = -{ - sAnim_GeneralFrame0, - sAnim_MEGANIUM_1, -}; - -static const union AnimCmd *const sAnims_CYNDAQUIL[] = -{ - sAnim_GeneralFrame0, - sAnim_CYNDAQUIL_1, -}; - -static const union AnimCmd *const sAnims_QUILAVA[] = -{ - sAnim_GeneralFrame0, - sAnim_QUILAVA_1, -}; - -static const union AnimCmd *const sAnims_TYPHLOSION[] = -{ - sAnim_GeneralFrame0, - sAnim_TYPHLOSION_1, -}; - -static const union AnimCmd *const sAnims_TOTODILE[] = -{ - sAnim_GeneralFrame0, - sAnim_TOTODILE_1, -}; - -static const union AnimCmd *const sAnims_CROCONAW[] = -{ - sAnim_GeneralFrame0, - sAnim_CROCONAW_1, -}; - -static const union AnimCmd *const sAnims_FERALIGATR[] = -{ - sAnim_GeneralFrame0, - sAnim_FERALIGATR_1, -}; - -static const union AnimCmd *const sAnims_SENTRET[] = -{ - sAnim_GeneralFrame0, - sAnim_SENTRET_1, -}; - -static const union AnimCmd *const sAnims_FURRET[] = -{ - sAnim_GeneralFrame0, - sAnim_FURRET_1, -}; - -static const union AnimCmd *const sAnims_HOOTHOOT[] = -{ - sAnim_GeneralFrame0, - sAnim_HOOTHOOT_1, -}; - -static const union AnimCmd *const sAnims_NOCTOWL[] = -{ - sAnim_GeneralFrame0, - sAnim_NOCTOWL_1, -}; - -static const union AnimCmd *const sAnims_LEDYBA[] = -{ - sAnim_GeneralFrame0, - sAnim_LEDYBA_1, -}; - -static const union AnimCmd *const sAnims_LEDIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_LEDIAN_1, -}; - -static const union AnimCmd *const sAnims_SPINARAK[] = -{ - sAnim_GeneralFrame0, - sAnim_SPINARAK_1, -}; - -static const union AnimCmd *const sAnims_ARIADOS[] = -{ - sAnim_GeneralFrame0, - sAnim_ARIADOS_1, -}; - -static const union AnimCmd *const sAnims_CROBAT[] = -{ - sAnim_GeneralFrame0, - sAnim_CROBAT_1, -}; - -static const union AnimCmd *const sAnims_CHINCHOU[] = -{ - sAnim_GeneralFrame0, - sAnim_CHINCHOU_1, - sAnim_CHINCHOU_2, -}; - -static const union AnimCmd *const sAnims_LANTURN[] = -{ - sAnim_GeneralFrame0, - sAnim_LANTURN_1, - sAnim_LANTURN_2, -}; - -static const union AnimCmd *const sAnims_PICHU[] = -{ - sAnim_GeneralFrame0, - sAnim_PICHU_1, - sAnim_PICHU_2, -}; - -static const union AnimCmd *const sAnims_CLEFFA[] = -{ - sAnim_GeneralFrame0, - sAnim_CLEFFA_1, -}; - -static const union AnimCmd *const sAnims_IGGLYBUFF[] = -{ - sAnim_GeneralFrame0, - sAnim_IGGLYBUFF_1, - sAnim_IGGLYBUFF_2, -}; - -static const union AnimCmd *const sAnims_TOGEPI[] = -{ - sAnim_GeneralFrame0, - sAnim_TOGEPI_1, -}; - -static const union AnimCmd *const sAnims_TOGETIC[] = -{ - sAnim_GeneralFrame0, - sAnim_TOGETIC_1, -}; - -static const union AnimCmd *const sAnims_NATU[] = -{ - sAnim_GeneralFrame0, - sAnim_NATU_1, - sAnim_NATU_2, -}; - -static const union AnimCmd *const sAnims_XATU[] = -{ - sAnim_GeneralFrame0, - sAnim_XATU_1, - sAnim_XATU_2, -}; - -static const union AnimCmd *const sAnims_MAREEP[] = -{ - sAnim_GeneralFrame0, - sAnim_MAREEP_1, -}; - -static const union AnimCmd *const sAnims_FLAAFFY[] = -{ - sAnim_GeneralFrame0, - sAnim_FLAAFFY_1, -}; - -static const union AnimCmd *const sAnims_AMPHAROS[] = -{ - sAnim_GeneralFrame0, - sAnim_AMPHAROS_1, -}; - -static const union AnimCmd *const sAnims_BELLOSSOM[] = -{ - sAnim_GeneralFrame0, - sAnim_BELLOSSOM_1, -}; - -static const union AnimCmd *const sAnims_MARILL[] = -{ - sAnim_GeneralFrame0, - sAnim_MARILL_1, -}; - -static const union AnimCmd *const sAnims_AZUMARILL[] = -{ - sAnim_GeneralFrame0, - sAnim_AZUMARILL_1, -}; - -static const union AnimCmd *const sAnims_SUDOWOODO[] = -{ - sAnim_GeneralFrame0, - sAnim_SUDOWOODO_1, -}; - -static const union AnimCmd *const sAnims_POLITOED[] = -{ - sAnim_GeneralFrame0, - sAnim_POLITOED_1, -}; - -static const union AnimCmd *const sAnims_HOPPIP[] = -{ - sAnim_GeneralFrame0, - sAnim_HOPPIP_1, -}; - -static const union AnimCmd *const sAnims_SKIPLOOM[] = -{ - sAnim_GeneralFrame0, - sAnim_SKIPLOOM_1, -}; - -static const union AnimCmd *const sAnims_JUMPLUFF[] = -{ - sAnim_GeneralFrame0, - sAnim_JUMPLUFF_1, -}; - -static const union AnimCmd *const sAnims_AIPOM[] = -{ - sAnim_GeneralFrame0, - sAnim_AIPOM_1, -}; - -static const union AnimCmd *const sAnims_SUNKERN[] = -{ - sAnim_GeneralFrame0, - sAnim_SUNKERN_1, -}; - -static const union AnimCmd *const sAnims_SUNFLORA[] = -{ - sAnim_GeneralFrame0, - sAnim_SUNFLORA_1, -}; - -static const union AnimCmd *const sAnims_YANMA[] = -{ - sAnim_GeneralFrame0, - sAnim_YANMA_1, -}; - -static const union AnimCmd *const sAnims_WOOPER[] = -{ - sAnim_GeneralFrame0, - sAnim_WOOPER_1, -}; - -static const union AnimCmd *const sAnims_QUAGSIRE[] = -{ - sAnim_GeneralFrame0, - sAnim_QUAGSIRE_1, -}; - -static const union AnimCmd *const sAnims_ESPEON[] = -{ - sAnim_GeneralFrame0, - sAnim_ESPEON_1, -}; - -static const union AnimCmd *const sAnims_UMBREON[] = -{ - sAnim_GeneralFrame0, - sAnim_UMBREON_1, -}; - -static const union AnimCmd *const sAnims_MURKROW[] = -{ - sAnim_GeneralFrame0, - sAnim_MURKROW_1, -}; - -static const union AnimCmd *const sAnims_SLOWKING[] = -{ - sAnim_GeneralFrame0, - sAnim_SLOWKING_1, -}; - -static const union AnimCmd *const sAnims_MISDREAVUS[] = -{ - sAnim_GeneralFrame0, - sAnim_MISDREAVUS_1, -}; - -static const union AnimCmd *const sAnims_UNOWN[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_1, -}; - -static const union AnimCmd *const sAnims_WOBBUFFET[] = -{ - sAnim_GeneralFrame0, - sAnim_WOBBUFFET_1, - sAnim_WOBBUFFET_2, -}; - -static const union AnimCmd *const sAnims_GIRAFARIG[] = -{ - sAnim_GeneralFrame0, - sAnim_GIRAFARIG_1, - sAnim_GIRAFARIG_2, -}; - -static const union AnimCmd *const sAnims_PINECO[] = -{ - sAnim_GeneralFrame0, - sAnim_PINECO_1, -}; - -static const union AnimCmd *const sAnims_FORRETRESS[] = -{ - sAnim_GeneralFrame0, - sAnim_FORRETRESS_1, -}; - -static const union AnimCmd *const sAnims_DUNSPARCE[] = -{ - sAnim_GeneralFrame0, - sAnim_DUNSPARCE_1, -}; - -static const union AnimCmd *const sAnims_GLIGAR[] = -{ - sAnim_GeneralFrame0, - sAnim_GLIGAR_1, -}; - -static const union AnimCmd *const sAnims_STEELIX[] = -{ - sAnim_GeneralFrame0, - sAnim_STEELIX_1, -}; - -static const union AnimCmd *const sAnims_SNUBBULL[] = -{ - sAnim_GeneralFrame0, - sAnim_SNUBBULL_1, -}; - -static const union AnimCmd *const sAnims_GRANBULL[] = -{ - sAnim_GeneralFrame0, - sAnim_GRANBULL_1, -}; - -static const union AnimCmd *const sAnims_QWILFISH[] = -{ - sAnim_GeneralFrame0, - sAnim_QWILFISH_1, -}; - -static const union AnimCmd *const sAnims_SCIZOR[] = -{ - sAnim_GeneralFrame0, - sAnim_SCIZOR_1, -}; - -static const union AnimCmd *const sAnims_SHUCKLE[] = -{ - sAnim_GeneralFrame0, - sAnim_SHUCKLE_1, -}; - -static const union AnimCmd *const sAnims_HERACROSS[] = -{ - sAnim_GeneralFrame0, - sAnim_HERACROSS_1, -}; - -static const union AnimCmd *const sAnims_SNEASEL[] = -{ - sAnim_GeneralFrame0, - sAnim_SNEASEL_1, -}; - -static const union AnimCmd *const sAnims_TEDDIURSA[] = -{ - sAnim_GeneralFrame0, - sAnim_TEDDIURSA_1, -}; - -static const union AnimCmd *const sAnims_URSARING[] = -{ - sAnim_GeneralFrame0, - sAnim_URSARING_1, -}; - -static const union AnimCmd *const sAnims_SLUGMA[] = -{ - sAnim_GeneralFrame0, - sAnim_SLUGMA_1, - sAnim_SLUGMA_2, -}; - -static const union AnimCmd *const sAnims_MAGCARGO[] = -{ - sAnim_GeneralFrame0, - sAnim_MAGCARGO_1, - sAnim_MAGCARGO_2, -}; - -static const union AnimCmd *const sAnims_SWINUB[] = -{ - sAnim_GeneralFrame0, - sAnim_SWINUB_1, -}; - -static const union AnimCmd *const sAnims_PILOSWINE[] = -{ - sAnim_GeneralFrame0, - sAnim_PILOSWINE_1, -}; - -static const union AnimCmd *const sAnims_CORSOLA[] = -{ - sAnim_GeneralFrame0, - sAnim_CORSOLA_1, - sAnim_CORSOLA_2, -}; - -static const union AnimCmd *const sAnims_REMORAID[] = -{ - sAnim_GeneralFrame0, - sAnim_REMORAID_1, -}; - -static const union AnimCmd *const sAnims_OCTILLERY[] = -{ - sAnim_GeneralFrame0, - sAnim_OCTILLERY_1, -}; - -static const union AnimCmd *const sAnims_DELIBIRD[] = -{ - sAnim_GeneralFrame0, - sAnim_DELIBIRD_1, -}; - -static const union AnimCmd *const sAnims_MANTINE[] = -{ - sAnim_GeneralFrame0, - sAnim_MANTINE_1, -}; - -static const union AnimCmd *const sAnims_SKARMORY[] = -{ - sAnim_GeneralFrame0, - sAnim_SKARMORY_1, -}; - -static const union AnimCmd *const sAnims_HOUNDOUR[] = -{ - sAnim_GeneralFrame0, - sAnim_HOUNDOUR_1, -}; - -static const union AnimCmd *const sAnims_HOUNDOOM[] = -{ - sAnim_GeneralFrame0, - sAnim_HOUNDOOM_1, -}; - -static const union AnimCmd *const sAnims_KINGDRA[] = -{ - sAnim_GeneralFrame0, - sAnim_KINGDRA_1, - sAnim_KINGDRA_2, -}; - -static const union AnimCmd *const sAnims_PHANPY[] = -{ - sAnim_GeneralFrame0, - sAnim_PHANPY_1, - sAnim_PHANPY_2, -}; - -static const union AnimCmd *const sAnims_DONPHAN[] = -{ - sAnim_GeneralFrame0, - sAnim_DONPHAN_1, -}; - -static const union AnimCmd *const sAnims_PORYGON2[] = -{ - sAnim_GeneralFrame0, - sAnim_PORYGON2_1, -}; - -static const union AnimCmd *const sAnims_STANTLER[] = -{ - sAnim_GeneralFrame0, - sAnim_STANTLER_1, -}; - -static const union AnimCmd *const sAnims_SMEARGLE[] = -{ - sAnim_GeneralFrame0, - sAnim_SMEARGLE_1, -}; - -static const union AnimCmd *const sAnims_TYROGUE[] = -{ - sAnim_GeneralFrame0, - sAnim_TYROGUE_1, -}; - -static const union AnimCmd *const sAnims_HITMONTOP[] = -{ - sAnim_GeneralFrame0, - sAnim_HITMONTOP_1, -}; - -static const union AnimCmd *const sAnims_SMOOCHUM[] = -{ - sAnim_GeneralFrame0, - sAnim_SMOOCHUM_1, -}; - -static const union AnimCmd *const sAnims_ELEKID[] = -{ - sAnim_GeneralFrame0, - sAnim_ELEKID_1, -}; - -static const union AnimCmd *const sAnims_MAGBY[] = -{ - sAnim_GeneralFrame0, - sAnim_MAGBY_1, -}; - -static const union AnimCmd *const sAnims_MILTANK[] = -{ - sAnim_GeneralFrame0, - sAnim_MILTANK_1, -}; - -static const union AnimCmd *const sAnims_BLISSEY[] = -{ - sAnim_GeneralFrame0, - sAnim_BLISSEY_1, -}; - -static const union AnimCmd *const sAnims_RAIKOU[] = -{ - sAnim_GeneralFrame0, - sAnim_RAIKOU_1, -}; - -static const union AnimCmd *const sAnims_ENTEI[] = -{ - sAnim_GeneralFrame0, - sAnim_ENTEI_1, -}; - -static const union AnimCmd *const sAnims_SUICUNE[] = -{ - sAnim_GeneralFrame0, - sAnim_SUICUNE_1, -}; - -static const union AnimCmd *const sAnims_LARVITAR[] = -{ - sAnim_GeneralFrame0, - sAnim_LARVITAR_1, -}; - -static const union AnimCmd *const sAnims_PUPITAR[] = -{ - sAnim_GeneralFrame0, - sAnim_PUPITAR_1, -}; - -static const union AnimCmd *const sAnims_TYRANITAR[] = -{ - sAnim_GeneralFrame0, - sAnim_TYRANITAR_1, -}; - -static const union AnimCmd *const sAnims_LUGIA[] = -{ - sAnim_GeneralFrame0, - sAnim_LUGIA_1, -}; - -static const union AnimCmd *const sAnims_HO_OH[] = -{ - sAnim_GeneralFrame0, - sAnim_HO_OH_1, -}; - -static const union AnimCmd *const sAnims_CELEBI[] = -{ - sAnim_GeneralFrame0, - sAnim_CELEBI_1, -}; - -static const union AnimCmd *const sAnims_OLD_UNOWN_B[] = -{ - sAnim_GeneralFrame0, - sAnim_OLD_UNOWN_B_1, -}; - -static const union AnimCmd *const sAnims_TREECKO[] = -{ - sAnim_GeneralFrame0, - sAnim_TREECKO_1, -}; - -static const union AnimCmd *const sAnims_GROVYLE[] = -{ - sAnim_GeneralFrame0, - sAnim_GROVYLE_1, -}; - -static const union AnimCmd *const sAnims_SCEPTILE[] = -{ - sAnim_GeneralFrame0, - sAnim_SCEPTILE_1, -}; - -static const union AnimCmd *const sAnims_TORCHIC[] = -{ - sAnim_GeneralFrame0, - sAnim_TORCHIC_1, -}; - -static const union AnimCmd *const sAnims_COMBUSKEN[] = -{ - sAnim_GeneralFrame0, - sAnim_COMBUSKEN_1, -}; - -static const union AnimCmd *const sAnims_BLAZIKEN[] = -{ - sAnim_GeneralFrame0, - sAnim_BLAZIKEN_1, - sAnim_BLAZIKEN_2, - sAnim_BLAZIKEN_3, - sAnim_BLAZIKEN_4, -}; - -static const union AnimCmd *const sAnims_MUDKIP[] = -{ - sAnim_GeneralFrame0, - sAnim_MUDKIP_1, -}; - -static const union AnimCmd *const sAnims_MARSHTOMP[] = -{ - sAnim_GeneralFrame0, - sAnim_MARSHTOMP_1, -}; - -static const union AnimCmd *const sAnims_SWAMPERT[] = -{ - sAnim_GeneralFrame0, - sAnim_SWAMPERT_1, -}; - -static const union AnimCmd *const sAnims_POOCHYENA[] = -{ - sAnim_GeneralFrame0, - sAnim_POOCHYENA_1, -}; - -static const union AnimCmd *const sAnims_MIGHTYENA[] = -{ - sAnim_GeneralFrame0, - sAnim_MIGHTYENA_1, -}; - -static const union AnimCmd *const sAnims_ZIGZAGOON[] = -{ - sAnim_GeneralFrame0, - sAnim_ZIGZAGOON_1, -}; - -static const union AnimCmd *const sAnims_LINOONE[] = -{ - sAnim_GeneralFrame0, - sAnim_LINOONE_1, -}; - -static const union AnimCmd *const sAnims_WURMPLE[] = -{ - sAnim_GeneralFrame0, - sAnim_WURMPLE_1, -}; - -static const union AnimCmd *const sAnims_SILCOON[] = -{ - sAnim_GeneralFrame0, - sAnim_SILCOON_1, - sAnim_SILCOON_2, -}; - -static const union AnimCmd *const sAnims_BEAUTIFLY[] = -{ - sAnim_GeneralFrame0, - sAnim_BEAUTIFLY_1, - sAnim_BEAUTIFLY_2, -}; - -static const union AnimCmd *const sAnims_CASCOON[] = -{ - sAnim_GeneralFrame0, - sAnim_CASCOON_1, - sAnim_CASCOON_2, -}; - -static const union AnimCmd *const sAnims_DUSTOX[] = -{ - sAnim_GeneralFrame0, - sAnim_DUSTOX_1, - sAnim_DUSTOX_2, -}; - -static const union AnimCmd *const sAnims_LOTAD[] = -{ - sAnim_GeneralFrame0, - sAnim_LOTAD_1, -}; - -static const union AnimCmd *const sAnims_LOMBRE[] = -{ - sAnim_GeneralFrame0, - sAnim_LOMBRE_1, -}; - -static const union AnimCmd *const sAnims_LUDICOLO[] = -{ - sAnim_GeneralFrame0, - sAnim_LUDICOLO_1, -}; - -static const union AnimCmd *const sAnims_SEEDOT[] = -{ - sAnim_GeneralFrame0, - sAnim_SEEDOT_1, -}; - -static const union AnimCmd *const sAnims_NUZLEAF[] = -{ - sAnim_GeneralFrame0, - sAnim_NUZLEAF_1, -}; - -static const union AnimCmd *const sAnims_SHIFTRY[] = -{ - sAnim_GeneralFrame0, - sAnim_SHIFTRY_1, -}; - -static const union AnimCmd *const sAnims_NINCADA[] = -{ - sAnim_GeneralFrame0, - sAnim_NINCADA_1, -}; - -static const union AnimCmd *const sAnims_NINJASK[] = -{ - sAnim_GeneralFrame0, - sAnim_NINJASK_1, -}; - -static const union AnimCmd *const sAnims_SHEDINJA[] = -{ - sAnim_GeneralFrame0, - sAnim_SHEDINJA_1, -}; - -static const union AnimCmd *const sAnims_TAILLOW[] = -{ - sAnim_GeneralFrame0, - sAnim_TAILLOW_1, -}; - -static const union AnimCmd *const sAnims_SWELLOW[] = -{ - sAnim_GeneralFrame0, - sAnim_SWELLOW_1, -}; - -static const union AnimCmd *const sAnims_SHROOMISH[] = -{ - sAnim_GeneralFrame0, - sAnim_SHROOMISH_1, -}; - -static const union AnimCmd *const sAnims_BRELOOM[] = -{ - sAnim_GeneralFrame0, - sAnim_BRELOOM_1, -}; - -static const union AnimCmd *const sAnims_SPINDA[] = -{ - sAnim_GeneralFrame0, -}; - -static const union AnimCmd *const sAnims_WINGULL[] = -{ - sAnim_GeneralFrame0, - sAnim_WINGULL_1, -}; - -static const union AnimCmd *const sAnims_PELIPPER[] = -{ - sAnim_GeneralFrame0, - sAnim_PELIPPER_1, -}; - -static const union AnimCmd *const sAnims_SURSKIT[] = -{ - sAnim_GeneralFrame0, - sAnim_SURSKIT_1, - sAnim_SURSKIT_2, -}; - -static const union AnimCmd *const sAnims_MASQUERAIN[] = -{ - sAnim_GeneralFrame0, - sAnim_MASQUERAIN_1, - sAnim_MASQUERAIN_2, -}; - -static const union AnimCmd *const sAnims_WAILMER[] = -{ - sAnim_GeneralFrame0, - sAnim_WAILMER_1, -}; - -static const union AnimCmd *const sAnims_WAILORD[] = -{ - sAnim_GeneralFrame0, - sAnim_WAILORD_1, -}; - -static const union AnimCmd *const sAnims_SKITTY[] = -{ - sAnim_GeneralFrame0, - sAnim_SKITTY_1, -}; - -static const union AnimCmd *const sAnims_DELCATTY[] = -{ - sAnim_GeneralFrame0, - sAnim_DELCATTY_1, -}; - -static const union AnimCmd *const sAnims_KECLEON[] = -{ - sAnim_GeneralFrame0, - sAnim_KECLEON_1, -}; - -static const union AnimCmd *const sAnims_BALTOY[] = -{ - sAnim_GeneralFrame0, - sAnim_BALTOY_1, -}; - -static const union AnimCmd *const sAnims_CLAYDOL[] = -{ - sAnim_GeneralFrame0, - sAnim_CLAYDOL_1, -}; - -static const union AnimCmd *const sAnims_NOSEPASS[] = -{ - sAnim_GeneralFrame0, - sAnim_NOSEPASS_1, -}; - -static const union AnimCmd *const sAnims_TORKOAL[] = -{ - sAnim_GeneralFrame0, - sAnim_TORKOAL_1, -}; - -static const union AnimCmd *const sAnims_SABLEYE[] = -{ - sAnim_GeneralFrame0, - sAnim_SABLEYE_1, -}; - -static const union AnimCmd *const sAnims_BARBOACH[] = -{ - sAnim_GeneralFrame0, - sAnim_BARBOACH_1, -}; - -static const union AnimCmd *const sAnims_WHISCASH[] = -{ - sAnim_GeneralFrame0, - sAnim_WHISCASH_1, -}; - -static const union AnimCmd *const sAnims_LUVDISC[] = -{ - sAnim_GeneralFrame0, - sAnim_LUVDISC_1, -}; - -static const union AnimCmd *const sAnims_CORPHISH[] = -{ - sAnim_GeneralFrame0, - sAnim_CORPHISH_1, -}; - -static const union AnimCmd *const sAnims_CRAWDAUNT[] = -{ - sAnim_GeneralFrame0, - sAnim_CRAWDAUNT_1, -}; - -static const union AnimCmd *const sAnims_FEEBAS[] = -{ - sAnim_GeneralFrame0, - sAnim_FEEBAS_1, -}; - -static const union AnimCmd *const sAnims_MILOTIC[] = -{ - sAnim_GeneralFrame0, - sAnim_MILOTIC_1, -}; - -static const union AnimCmd *const sAnims_CARVANHA[] = -{ - sAnim_GeneralFrame0, - sAnim_CARVANHA_1, -}; - -static const union AnimCmd *const sAnims_SHARPEDO[] = -{ - sAnim_GeneralFrame0, - sAnim_SHARPEDO_1, -}; - -static const union AnimCmd *const sAnims_TRAPINCH[] = -{ - sAnim_GeneralFrame0, - sAnim_TRAPINCH_1, -}; - -static const union AnimCmd *const sAnims_VIBRAVA[] = -{ - sAnim_GeneralFrame0, - sAnim_VIBRAVA_1, -}; - -static const union AnimCmd *const sAnims_FLYGON[] = -{ - sAnim_GeneralFrame0, - sAnim_FLYGON_1, -}; - -static const union AnimCmd *const sAnims_MAKUHITA[] = -{ - sAnim_GeneralFrame0, - sAnim_MAKUHITA_1, -}; - -static const union AnimCmd *const sAnims_HARIYAMA[] = -{ - sAnim_GeneralFrame0, - sAnim_HARIYAMA_1, -}; - -static const union AnimCmd *const sAnims_ELECTRIKE[] = -{ - sAnim_GeneralFrame0, - sAnim_ELECTRIKE_1, -}; - -static const union AnimCmd *const sAnims_MANECTRIC[] = -{ - sAnim_GeneralFrame0, - sAnim_MANECTRIC_1, -}; - -static const union AnimCmd *const sAnims_NUMEL[] = -{ - sAnim_GeneralFrame0, - sAnim_NUMEL_1, -}; - -static const union AnimCmd *const sAnims_CAMERUPT[] = -{ - sAnim_GeneralFrame0, - sAnim_CAMERUPT_1, -}; - -static const union AnimCmd *const sAnims_SPHEAL[] = -{ - sAnim_GeneralFrame0, - sAnim_SPHEAL_1, -}; - -static const union AnimCmd *const sAnims_SEALEO[] = -{ - sAnim_GeneralFrame0, - sAnim_SEALEO_1, -}; - -static const union AnimCmd *const sAnims_WALREIN[] = -{ - sAnim_GeneralFrame0, - sAnim_WALREIN_1, -}; - -static const union AnimCmd *const sAnims_CACNEA[] = -{ - sAnim_GeneralFrame0, - sAnim_CACNEA_1, -}; - -static const union AnimCmd *const sAnims_CACTURNE[] = -{ - sAnim_GeneralFrame0, - sAnim_CACTURNE_1, -}; - -static const union AnimCmd *const sAnims_SNORUNT[] = -{ - sAnim_GeneralFrame0, - sAnim_SNORUNT_1, -}; - -static const union AnimCmd *const sAnims_GLALIE[] = -{ - sAnim_GeneralFrame0, - sAnim_GLALIE_1, -}; - -static const union AnimCmd *const sAnims_LUNATONE[] = -{ - sAnim_GeneralFrame0, - sAnim_LUNATONE_1, - sAnim_LUNATONE_2, -}; - -static const union AnimCmd *const sAnims_SOLROCK[] = -{ - sAnim_GeneralFrame0, - sAnim_SOLROCK_1, - sAnim_SOLROCK_2, -}; - -static const union AnimCmd *const sAnims_AZURILL[] = -{ - sAnim_GeneralFrame0, - sAnim_AZURILL_1, -}; - -static const union AnimCmd *const sAnims_SPOINK[] = -{ - sAnim_GeneralFrame0, - sAnim_SPOINK_1, -}; - -static const union AnimCmd *const sAnims_GRUMPIG[] = -{ - sAnim_GeneralFrame0, - sAnim_GRUMPIG_1, -}; - -static const union AnimCmd *const sAnims_PLUSLE[] = -{ - sAnim_GeneralFrame0, - sAnim_PLUSLE_1, -}; - -static const union AnimCmd *const sAnims_MINUN[] = -{ - sAnim_GeneralFrame0, - sAnim_MINUN_1, -}; - -static const union AnimCmd *const sAnims_MAWILE[] = -{ - sAnim_GeneralFrame0, - sAnim_MAWILE_1, -}; - -static const union AnimCmd *const sAnims_MEDITITE[] = -{ - sAnim_GeneralFrame0, - sAnim_MEDITITE_1, -}; - -static const union AnimCmd *const sAnims_MEDICHAM[] = -{ - sAnim_GeneralFrame0, - sAnim_MEDICHAM_1, -}; - -static const union AnimCmd *const sAnims_SWABLU[] = -{ - sAnim_GeneralFrame0, - sAnim_SWABLU_1, - sAnim_SWABLU_2, -}; - -static const union AnimCmd *const sAnims_ALTARIA[] = -{ - sAnim_GeneralFrame0, - sAnim_ALTARIA_1, - sAnim_ALTARIA_2, -}; - -static const union AnimCmd *const sAnims_WYNAUT[] = -{ - sAnim_GeneralFrame0, - sAnim_WYNAUT_1, -}; - -static const union AnimCmd *const sAnims_DUSKULL[] = -{ - sAnim_GeneralFrame0, - sAnim_DUSKULL_1, -}; - -static const union AnimCmd *const sAnims_DUSCLOPS[] = -{ - sAnim_GeneralFrame0, - sAnim_DUSCLOPS_1, -}; - -static const union AnimCmd *const sAnims_ROSELIA[] = -{ - sAnim_GeneralFrame0, - sAnim_ROSELIA_1, -}; - -static const union AnimCmd *const sAnims_SLAKOTH[] = -{ - sAnim_GeneralFrame0, - sAnim_SLAKOTH_1, -}; - -static const union AnimCmd *const sAnims_VIGOROTH[] = -{ - sAnim_GeneralFrame0, - sAnim_VIGOROTH_1, -}; - -static const union AnimCmd *const sAnims_SLAKING[] = -{ - sAnim_GeneralFrame0, - sAnim_SLAKING_1, -}; - -static const union AnimCmd *const sAnims_GULPIN[] = -{ - sAnim_GeneralFrame0, - sAnim_GULPIN_1, -}; - -static const union AnimCmd *const sAnims_SWALOT[] = -{ - sAnim_GeneralFrame0, - sAnim_SWALOT_1, -}; - -static const union AnimCmd *const sAnims_TROPIUS[] = -{ - sAnim_GeneralFrame0, - sAnim_TROPIUS_1, -}; - -static const union AnimCmd *const sAnims_WHISMUR[] = -{ - sAnim_GeneralFrame0, - sAnim_WHISMUR_1, -}; - -static const union AnimCmd *const sAnims_LOUDRED[] = -{ - sAnim_GeneralFrame0, - sAnim_LOUDRED_1, -}; - -static const union AnimCmd *const sAnims_EXPLOUD[] = -{ - sAnim_GeneralFrame0, - sAnim_EXPLOUD_1, -}; - -static const union AnimCmd *const sAnims_CLAMPERL[] = -{ - sAnim_GeneralFrame0, - sAnim_CLAMPERL_1, -}; - -static const union AnimCmd *const sAnims_HUNTAIL[] = -{ - sAnim_GeneralFrame0, - sAnim_HUNTAIL_1, -}; - -static const union AnimCmd *const sAnims_GOREBYSS[] = -{ - sAnim_GeneralFrame0, - sAnim_GOREBYSS_1, -}; - -static const union AnimCmd *const sAnims_ABSOL[] = -{ - sAnim_GeneralFrame0, - sAnim_ABSOL_1, -}; - -static const union AnimCmd *const sAnims_SHUPPET[] = -{ - sAnim_GeneralFrame0, - sAnim_SHUPPET_1, -}; - -static const union AnimCmd *const sAnims_BANETTE[] = -{ - sAnim_GeneralFrame0, - sAnim_BANETTE_1, -}; - -static const union AnimCmd *const sAnims_SEVIPER[] = -{ - sAnim_GeneralFrame0, - sAnim_SEVIPER_1, -}; - -static const union AnimCmd *const sAnims_ZANGOOSE[] = -{ - sAnim_GeneralFrame0, - sAnim_ZANGOOSE_1, -}; - -static const union AnimCmd *const sAnims_RELICANTH[] = -{ - sAnim_GeneralFrame0, - sAnim_RELICANTH_1, -}; - -static const union AnimCmd *const sAnims_ARON[] = -{ - sAnim_GeneralFrame0, - sAnim_ARON_1, -}; - -static const union AnimCmd *const sAnims_LAIRON[] = -{ - sAnim_GeneralFrame0, - sAnim_LAIRON_1, -}; - -static const union AnimCmd *const sAnims_AGGRON[] = -{ - sAnim_GeneralFrame0, - sAnim_AGGRON_1, -}; - -static const union AnimCmd *const sAnims_CASTFORM[] = -{ - sAnim_CASTFORM_0, - sAnim_CASTFORM_1, - sAnim_CASTFORM_2, - sAnim_CASTFORM_3, -}; - -static const union AnimCmd *const sAnims_VOLBEAT[] = -{ - sAnim_GeneralFrame0, - sAnim_VOLBEAT_1, -}; - -static const union AnimCmd *const sAnims_ILLUMISE[] = -{ - sAnim_GeneralFrame0, - sAnim_ILLUMISE_1, -}; - -static const union AnimCmd *const sAnims_LILEEP[] = -{ - sAnim_GeneralFrame0, - sAnim_LILEEP_1, -}; - -static const union AnimCmd *const sAnims_CRADILY[] = -{ - sAnim_GeneralFrame0, - sAnim_CRADILY_1, -}; - -static const union AnimCmd *const sAnims_ANORITH[] = -{ - sAnim_GeneralFrame0, - sAnim_ANORITH_1, -}; - -static const union AnimCmd *const sAnims_ARMALDO[] = -{ - sAnim_GeneralFrame0, - sAnim_ARMALDO_1, -}; - -static const union AnimCmd *const sAnims_RALTS[] = -{ - sAnim_GeneralFrame0, - sAnim_RALTS_1, -}; - -static const union AnimCmd *const sAnims_KIRLIA[] = -{ - sAnim_GeneralFrame0, - sAnim_KIRLIA_1, -}; - -static const union AnimCmd *const sAnims_GARDEVOIR[] = -{ - sAnim_GeneralFrame0, - sAnim_GARDEVOIR_1, -}; - -static const union AnimCmd *const sAnims_BAGON[] = -{ - sAnim_GeneralFrame0, - sAnim_BAGON_1, -}; - -static const union AnimCmd *const sAnims_SHELGON[] = -{ - sAnim_GeneralFrame0, - sAnim_SHELGON_1, -}; - -static const union AnimCmd *const sAnims_SALAMENCE[] = -{ - sAnim_GeneralFrame0, - sAnim_SALAMENCE_1, -}; - -static const union AnimCmd *const sAnims_BELDUM[] = -{ - sAnim_GeneralFrame0, - sAnim_BELDUM_1, -}; - -static const union AnimCmd *const sAnims_METANG[] = -{ - sAnim_GeneralFrame0, - sAnim_METANG_1, -}; - -static const union AnimCmd *const sAnims_METAGROSS[] = -{ - sAnim_GeneralFrame0, - sAnim_METAGROSS_1, -}; - -static const union AnimCmd *const sAnims_REGIROCK[] = -{ - sAnim_GeneralFrame0, - sAnim_REGIROCK_1, - sAnim_REGIROCK_2, -}; - -static const union AnimCmd *const sAnims_REGICE[] = -{ - sAnim_GeneralFrame0, - sAnim_REGICE_1, -}; - -static const union AnimCmd *const sAnims_REGISTEEL[] = -{ - sAnim_GeneralFrame0, - sAnim_REGISTEEL_1, - sAnim_REGISTEEL_2, -}; - -static const union AnimCmd *const sAnims_KYOGRE[] = -{ - sAnim_GeneralFrame0, - sAnim_KYOGRE_1, - sAnim_KYOGRE_2, -}; - -static const union AnimCmd *const sAnims_GROUDON[] = -{ - sAnim_GeneralFrame0, - sAnim_GROUDON_1, - sAnim_GROUDON_2, -}; - -static const union AnimCmd *const sAnims_RAYQUAZA[] = -{ - sAnim_GeneralFrame0, - sAnim_RAYQUAZA_1, - sAnim_RAYQUAZA_2, -}; - -static const union AnimCmd *const sAnims_LATIAS[] = -{ - sAnim_GeneralFrame0, - sAnim_LATIAS_1, - sAnim_LATIAS_2, -}; - -static const union AnimCmd *const sAnims_LATIOS[] = -{ - sAnim_GeneralFrame0, - sAnim_LATIOS_1, - sAnim_LATIOS_2, -}; - -static const union AnimCmd *const sAnims_JIRACHI[] = -{ - sAnim_GeneralFrame0, - sAnim_JIRACHI_1, - sAnim_JIRACHI_2, -}; - -static const union AnimCmd *const sAnims_DEOXYS[] = -{ - sAnim_GeneralFrame0, - sAnim_DEOXYS_1, - sAnim_DEOXYS_2, -}; - -static const union AnimCmd *const sAnims_CHIMECHO[] = -{ - sAnim_GeneralFrame0, - sAnim_CHIMECHO_1, -}; - -static const union AnimCmd *const sAnims_EGG[] = -{ - sAnim_GeneralFrame0, - sAnim_EGG_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_B[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_B_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_C[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_C_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_D[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_D_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_E[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_E_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_F[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_F_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_G[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_G_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_H[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_H_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_I[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_I_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_J[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_J_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_K[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_K_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_L[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_L_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_M[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_M_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_N[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_N_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_O[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_O_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_P[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_P_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_Q[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_Q_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_R[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_R_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_S[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_S_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_T[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_T_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_U[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_U_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_V[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_V_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_W[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_W_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_X[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_X_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_Y[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_Y_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_Z[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_Z_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_EMARK[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_EMARK_1, -}; - -static const union AnimCmd *const sAnims_UNOWN_QMARK[] = -{ - sAnim_GeneralFrame0, - sAnim_UNOWN_QMARK_1, -}; - -#if P_GEN_4_POKEMON == TRUE -static const union AnimCmd *const sAnims_TURTWIG[] = -{ - sAnim_GeneralFrame0, - sAnim_TURTWIG_1, -}; - -static const union AnimCmd *const sAnims_GROTLE[] = -{ - sAnim_GeneralFrame0, - sAnim_GROTLE_1, -}; - -static const union AnimCmd *const sAnims_TORTERRA[] = -{ - sAnim_GeneralFrame0, - sAnim_TORTERRA_1, -}; - -static const union AnimCmd *const sAnims_CHIMCHAR[] = -{ - sAnim_GeneralFrame0, - sAnim_CHIMCHAR_1, -}; - -static const union AnimCmd *const sAnims_MONFERNO[] = -{ - sAnim_GeneralFrame0, - sAnim_MONFERNO_1, -}; - -static const union AnimCmd *const sAnims_INFERNAPE[] = -{ - sAnim_GeneralFrame0, - sAnim_INFERNAPE_1, -}; - -static const union AnimCmd *const sAnims_PIPLUP[] = -{ - sAnim_GeneralFrame0, - sAnim_PIPLUP_1, -}; - -static const union AnimCmd *const sAnims_PRINPLUP[] = -{ - sAnim_GeneralFrame0, - sAnim_PRINPLUP_1, -}; - -static const union AnimCmd *const sAnims_EMPOLEON[] = -{ - sAnim_GeneralFrame0, - sAnim_EMPOLEON_1, -}; - -static const union AnimCmd *const sAnims_STARLY[] = -{ - sAnim_GeneralFrame0, - sAnim_STARLY_1, -}; - -static const union AnimCmd *const sAnims_STARAVIA[] = -{ - sAnim_GeneralFrame0, - sAnim_STARAVIA_1, -}; - -static const union AnimCmd *const sAnims_STARAPTOR[] = -{ - sAnim_GeneralFrame0, - sAnim_STARAPTOR_1, -}; - -static const union AnimCmd *const sAnims_BIDOOF[] = -{ - sAnim_GeneralFrame0, - sAnim_BIDOOF_1, -}; - -static const union AnimCmd *const sAnims_BIBAREL[] = -{ - sAnim_GeneralFrame0, - sAnim_BIBAREL_1, - sAnim_BIBAREL_2, -}; - -static const union AnimCmd *const sAnims_KRICKETOT[] = -{ - sAnim_GeneralFrame0, - sAnim_KRICKETOT_1, -}; - -static const union AnimCmd *const sAnims_KRICKETUNE[] = -{ - sAnim_GeneralFrame0, - sAnim_KRICKETUNE_1, -}; - -static const union AnimCmd *const sAnims_SHINX[] = -{ - sAnim_GeneralFrame0, - sAnim_SHINX_1, -}; - -static const union AnimCmd *const sAnims_LUXIO[] = -{ - sAnim_GeneralFrame0, - sAnim_LUXIO_1, -}; - -static const union AnimCmd *const sAnims_LUXRAY[] = -{ - sAnim_GeneralFrame0, - sAnim_LUXRAY_1, - sAnim_LUXRAY_2, -}; - -static const union AnimCmd *const sAnims_BUDEW[] = -{ - sAnim_GeneralFrame0, - sAnim_BUDEW_1, -}; - -static const union AnimCmd *const sAnims_ROSERADE[] = -{ - sAnim_GeneralFrame0, - sAnim_ROSERADE_1, -}; - -static const union AnimCmd *const sAnims_CRANIDOS[] = -{ - sAnim_GeneralFrame0, - sAnim_CRANIDOS_1, -}; - -static const union AnimCmd *const sAnims_RAMPARDOS[] = -{ - sAnim_GeneralFrame0, - sAnim_RAMPARDOS_1, -}; - -static const union AnimCmd *const sAnims_SHIELDON[] = -{ - sAnim_GeneralFrame0, - sAnim_SHIELDON_1, -}; - -static const union AnimCmd *const sAnims_BASTIODON[] = -{ - sAnim_GeneralFrame0, - sAnim_BASTIODON_1, -}; - -static const union AnimCmd *const sAnims_BURMY[] = -{ - sAnim_GeneralFrame0, - sAnim_BURMY_1, -}; - -static const union AnimCmd *const sAnims_WORMADAM[] = -{ - sAnim_GeneralFrame0, - sAnim_WORMADAM_1, -}; - -static const union AnimCmd *const sAnims_MOTHIM[] = -{ - sAnim_GeneralFrame0, - sAnim_MOTHIM_1, -}; - -static const union AnimCmd *const sAnims_COMBEE[] = -{ - sAnim_GeneralFrame0, - sAnim_COMBEE_1, -}; - -static const union AnimCmd *const sAnims_VESPIQUEN[] = -{ - sAnim_GeneralFrame0, - sAnim_VESPIQUEN_1, -}; - -static const union AnimCmd *const sAnims_PACHIRISU[] = -{ - sAnim_GeneralFrame0, - sAnim_PACHIRISU_1, -}; - -static const union AnimCmd *const sAnims_BUIZEL[] = -{ - sAnim_GeneralFrame0, - sAnim_BUIZEL_1, -}; - -static const union AnimCmd *const sAnims_FLOATZEL[] = -{ - sAnim_GeneralFrame0, - sAnim_FLOATZEL_1, -}; - -static const union AnimCmd *const sAnims_CHERUBI[] = -{ - sAnim_GeneralFrame0, - sAnim_CHERUBI_1, -}; - -static const union AnimCmd *const sAnims_CHERRIM[] = -{ - sAnim_GeneralFrame0, - sAnim_CHERRIM_NORMAL, - sAnim_CHERRIM_NORMAL_2, -}; - -static const union AnimCmd *const sAnims_CHERRIM_SUNSHINE[] ={ - sAnim_GeneralFrame0, - sAnim_CHERRIM_SUNSHINE, -}; - -static const union AnimCmd *const sAnims_SHELLOS[] = -{ - sAnim_GeneralFrame0, - sAnim_SHELLOS_1, -}; - -static const union AnimCmd *const sAnims_GASTRODON[] = -{ - sAnim_GeneralFrame0, - sAnim_GASTRODON_1, -}; - -static const union AnimCmd *const sAnims_AMBIPOM[] = -{ - sAnim_GeneralFrame0, - sAnim_AMBIPOM_1, -}; - -static const union AnimCmd *const sAnims_DRIFLOON[] = -{ - sAnim_GeneralFrame0, - sAnim_DRIFLOON_1, -}; - -static const union AnimCmd *const sAnims_DRIFBLIM[] = -{ - sAnim_GeneralFrame0, - sAnim_DRIFBLIM_1, -}; - -static const union AnimCmd *const sAnims_BUNEARY[] = -{ - sAnim_GeneralFrame0, - sAnim_BUNEARY_1, -}; - -static const union AnimCmd *const sAnims_LOPUNNY[] = -{ - sAnim_GeneralFrame0, - sAnim_LOPUNNY_1, -}; - -static const union AnimCmd *const sAnims_MISMAGIUS[] = -{ - sAnim_GeneralFrame0, - sAnim_MISMAGIUS_1, -}; - -static const union AnimCmd *const sAnims_HONCHKROW[] = -{ - sAnim_GeneralFrame0, - sAnim_HONCHKROW_1, -}; - -static const union AnimCmd *const sAnims_GLAMEOW[] = -{ - sAnim_GeneralFrame0, - sAnim_GLAMEOW_1, -}; - -static const union AnimCmd *const sAnims_PURUGLY[] = -{ - sAnim_GeneralFrame0, - sAnim_PURUGLY_1, -}; - -static const union AnimCmd *const sAnims_CHINGLING[] = -{ - sAnim_GeneralFrame0, - sAnim_CHINGLING_1, -}; - -static const union AnimCmd *const sAnims_STUNKY[] = -{ - sAnim_GeneralFrame0, - sAnim_STUNKY_1, -}; - -static const union AnimCmd *const sAnims_SKUNTANK[] = -{ - sAnim_GeneralFrame0, - sAnim_SKUNTANK_1, -}; - -static const union AnimCmd *const sAnims_BRONZOR[] = -{ - sAnim_GeneralFrame0, - sAnim_BRONZOR_1, -}; - -static const union AnimCmd *const sAnims_BRONZONG[] = -{ - sAnim_GeneralFrame0, - sAnim_BRONZONG_1, - sAnim_BRONZONG_2, -}; - -static const union AnimCmd *const sAnims_BONSLY[] = -{ - sAnim_GeneralFrame0, - sAnim_BONSLY_1, -}; - -static const union AnimCmd *const sAnims_MIME_JR[] = -{ - sAnim_GeneralFrame0, - sAnim_MIME_JR_1, -}; - -static const union AnimCmd *const sAnims_HAPPINY[] = -{ - sAnim_GeneralFrame0, - sAnim_HAPPINY_1, -}; - -static const union AnimCmd *const sAnims_CHATOT[] = -{ - sAnim_GeneralFrame0, - sAnim_CHATOT_1, -}; - -static const union AnimCmd *const sAnims_SPIRITOMB[] = -{ - sAnim_GeneralFrame0, - sAnim_SPIRITOMB_1, -}; - -static const union AnimCmd *const sAnims_GIBLE[] = -{ - sAnim_GeneralFrame0, - sAnim_GIBLE_1, -}; - -static const union AnimCmd *const sAnims_GABITE[] = -{ - sAnim_GeneralFrame0, - sAnim_GABITE_1, -}; - -static const union AnimCmd *const sAnims_GARCHOMP[] = -{ - sAnim_GeneralFrame0, - sAnim_GARCHOMP_1, -}; - -static const union AnimCmd *const sAnims_MUNCHLAX[] = -{ - sAnim_GeneralFrame0, - sAnim_MUNCHLAX_1, -}; - -static const union AnimCmd *const sAnims_RIOLU[] = -{ - sAnim_GeneralFrame0, - sAnim_RIOLU_1, -}; - -static const union AnimCmd *const sAnims_LUCARIO[] = -{ - sAnim_GeneralFrame0, - sAnim_LUCARIO_1, -}; - -static const union AnimCmd *const sAnims_HIPPOPOTAS[] = -{ - sAnim_GeneralFrame0, - sAnim_HIPPOPOTAS_1, -}; - -static const union AnimCmd *const sAnims_HIPPOWDON[] = -{ - sAnim_GeneralFrame0, - sAnim_HIPPOWDON_1, -}; - -static const union AnimCmd *const sAnims_SKORUPI[] = -{ - sAnim_GeneralFrame0, - sAnim_SKORUPI_1, -}; - -static const union AnimCmd *const sAnims_DRAPION[] = -{ - sAnim_GeneralFrame0, - sAnim_DRAPION_1, -}; - -static const union AnimCmd *const sAnims_CROAGUNK[] = -{ - sAnim_GeneralFrame0, - sAnim_CROAGUNK_1, -}; - -static const union AnimCmd *const sAnims_TOXICROAK[] = -{ - sAnim_GeneralFrame0, - sAnim_TOXICROAK_1, -}; - -static const union AnimCmd *const sAnims_CARNIVINE[] = -{ - sAnim_GeneralFrame0, - sAnim_CARNIVINE_1, -}; - -static const union AnimCmd *const sAnims_FINNEON[] = -{ - sAnim_GeneralFrame0, - sAnim_FINNEON_1, -}; - -static const union AnimCmd *const sAnims_LUMINEON[] = -{ - sAnim_GeneralFrame0, - sAnim_LUMINEON_1, -}; - -static const union AnimCmd *const sAnims_MANTYKE[] = -{ - sAnim_GeneralFrame0, - sAnim_MANTYKE_1, -}; - -static const union AnimCmd *const sAnims_SNOVER[] = -{ - sAnim_GeneralFrame0, - sAnim_SNOVER_1, -}; - -static const union AnimCmd *const sAnims_ABOMASNOW[] = -{ - sAnim_GeneralFrame0, - sAnim_ABOMASNOW_1, -}; - -static const union AnimCmd *const sAnims_WEAVILE[] = -{ - sAnim_GeneralFrame0, - sAnim_WEAVILE_1, -}; - -static const union AnimCmd *const sAnims_MAGNEZONE[] = -{ - sAnim_GeneralFrame0, - sAnim_MAGNEZONE_1, -}; - -static const union AnimCmd *const sAnims_LICKILICKY[] = -{ - sAnim_GeneralFrame0, - sAnim_LICKILICKY_1, -}; - -static const union AnimCmd *const sAnims_RHYPERIOR[] = -{ - sAnim_GeneralFrame0, - sAnim_RHYPERIOR_1, -}; - -static const union AnimCmd *const sAnims_TANGROWTH[] = -{ - sAnim_GeneralFrame0, - sAnim_TANGROWTH_1, -}; - -static const union AnimCmd *const sAnims_ELECTIVIRE[] = -{ - sAnim_GeneralFrame0, - sAnim_ELECTIVIRE_1, -}; - -static const union AnimCmd *const sAnims_MAGMORTAR[] = -{ - sAnim_GeneralFrame0, - sAnim_MAGMORTAR_1, -}; - -static const union AnimCmd *const sAnims_TOGEKISS[] = -{ - sAnim_GeneralFrame0, - sAnim_TOGEKISS_1, -}; - -static const union AnimCmd *const sAnims_YANMEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_YANMEGA_1, -}; - -static const union AnimCmd *const sAnims_LEAFEON[] = -{ - sAnim_GeneralFrame0, - sAnim_LEAFEON_1, -}; - -static const union AnimCmd *const sAnims_GLACEON[] = -{ - sAnim_GeneralFrame0, - sAnim_GLACEON_1, -}; - -static const union AnimCmd *const sAnims_GLISCOR[] = -{ - sAnim_GeneralFrame0, - sAnim_GLISCOR_1, -}; - -static const union AnimCmd *const sAnims_MAMOSWINE[] = -{ - sAnim_GeneralFrame0, - sAnim_MAMOSWINE_1, -}; - -static const union AnimCmd *const sAnims_PORYGON_Z[] = -{ - sAnim_GeneralFrame0, - sAnim_PORYGON_Z_1, -}; - -static const union AnimCmd *const sAnims_GALLADE[] = -{ - sAnim_GeneralFrame0, - sAnim_GALLADE_1, -}; - -static const union AnimCmd *const sAnims_PROBOPASS[] = -{ - sAnim_GeneralFrame0, - sAnim_PROBOPASS_1, - sAnim_PROBOPASS_2, -}; - -static const union AnimCmd *const sAnims_DUSKNOIR[] = -{ - sAnim_GeneralFrame0, - sAnim_DUSKNOIR_1, -}; - -static const union AnimCmd *const sAnims_FROSLASS[] = -{ - sAnim_GeneralFrame0, - sAnim_FROSLASS_1, -}; - -static const union AnimCmd *const sAnims_ROTOM[] = -{ - sAnim_GeneralFrame0, - sAnim_ROTOM_1, - sAnim_ROTOM_2, -}; - -static const union AnimCmd *const sAnims_ROTOM_HEAT[] = -{ - sAnim_GeneralFrame0, - sAnim_RotomHeat_1, -}; - -static const union AnimCmd *const sAnims_ROTOM_FROST[] = -{ - sAnim_GeneralFrame0, - sAnim_RotomFrost_1, -}; - -static const union AnimCmd *const sAnims_ROTOM_FAN[] = -{ - sAnim_GeneralFrame0, - sAnim_RotomFan_1, -}; - -static const union AnimCmd *const sAnims_ROTOM_MOW[] = -{ - sAnim_GeneralFrame0, - sAnim_RotomMow_1, -}; - -static const union AnimCmd *const sAnims_ROTOM_WASH[] = -{ - sAnim_GeneralFrame0, - sAnim_RotomWash_1, -}; - -static const union AnimCmd *const sAnims_UXIE[] = -{ - sAnim_GeneralFrame0, - sAnim_UXIE_1, -}; - -static const union AnimCmd *const sAnims_MESPRIT[] = -{ - sAnim_GeneralFrame0, - sAnim_MESPRIT_1, -}; - -static const union AnimCmd *const sAnims_AZELF[] = -{ - sAnim_GeneralFrame0, - sAnim_AZELF_1, -}; - -static const union AnimCmd *const sAnims_DIALGA[] = -{ - sAnim_GeneralFrame0, - sAnim_DIALGA_1, -}; - -static const union AnimCmd *const sAnims_PALKIA[] = -{ - sAnim_GeneralFrame0, - sAnim_PALKIA_1, -}; - -static const union AnimCmd *const sAnims_HEATRAN[] = -{ - sAnim_GeneralFrame0, - sAnim_HEATRAN_1, -}; - -static const union AnimCmd *const sAnims_REGIGIGAS[] = -{ - sAnim_GeneralFrame0, - sAnim_REGIGIGAS_1, -}; - -static const union AnimCmd *const sAnims_GIRATINA[] = -{ - sAnim_GeneralFrame0, - sAnim_GIRATINA_1, -}; - -static const union AnimCmd *const sAnims_CRESSELIA[] = -{ - sAnim_GeneralFrame0, - sAnim_CRESSELIA_1, -}; - -static const union AnimCmd *const sAnims_PHIONE[] = -{ - sAnim_GeneralFrame0, - sAnim_PHIONE_1, -}; - -static const union AnimCmd *const sAnims_MANAPHY[] = -{ - sAnim_GeneralFrame0, - sAnim_MANAPHY_1, -}; - -static const union AnimCmd *const sAnims_DARKRAI[] = -{ - sAnim_GeneralFrame0, - sAnim_DARKRAI_1, -}; - -static const union AnimCmd *const sAnims_SHAYMIN[] = -{ - sAnim_GeneralFrame0, - sAnim_SHAYMIN_1, -}; - -static const union AnimCmd *const sAnims_ARCEUS[] = -{ - sAnim_GeneralFrame0, - sAnim_ARCEUS_1, -}; -#endif - -#if P_GEN_5_POKEMON == TRUE -static const union AnimCmd *const sAnims_VICTINI[] = -{ - sAnim_GeneralFrame0, - sAnim_VICTINI_1, -}; - -static const union AnimCmd *const sAnims_SNIVY[] = -{ - sAnim_GeneralFrame0, - sAnim_SNIVY_1, -}; - -static const union AnimCmd *const sAnims_SERVINE[] = -{ - sAnim_GeneralFrame0, - sAnim_SERVINE_1, -}; - -static const union AnimCmd *const sAnims_SERPERIOR[] = -{ - sAnim_GeneralFrame0, - sAnim_SERPERIOR_1, - sAnim_SERPERIOR_2, -}; - -static const union AnimCmd *const sAnims_TEPIG[] = -{ - sAnim_GeneralFrame0, - sAnim_TEPIG_1, -}; - -static const union AnimCmd *const sAnims_PIGNITE[] = -{ - sAnim_GeneralFrame0, - sAnim_PIGNITE_1, -}; - -static const union AnimCmd *const sAnims_EMBOAR[] = -{ - sAnim_GeneralFrame0, - sAnim_EMBOAR_1, -}; - -static const union AnimCmd *const sAnims_OSHAWOTT[] = -{ - sAnim_GeneralFrame0, - sAnim_OSHAWOTT_1, -}; - -static const union AnimCmd *const sAnims_DEWOTT[] = -{ - sAnim_GeneralFrame0, - sAnim_DEWOTT_1, -}; - -static const union AnimCmd *const sAnims_SAMUROTT[] = -{ - sAnim_GeneralFrame0, - sAnim_SAMUROTT_1, -}; - -static const union AnimCmd *const sAnims_PATRAT[] = -{ - sAnim_GeneralFrame0, - sAnim_PATRAT_1, -}; - -static const union AnimCmd *const sAnims_WATCHOG[] = -{ - sAnim_GeneralFrame0, - sAnim_WATCHOG_1, -}; - -static const union AnimCmd *const sAnims_LILLIPUP[] = -{ - sAnim_GeneralFrame0, - sAnim_LILLIPUP_1, -}; - -static const union AnimCmd *const sAnims_HERDIER[] = -{ - sAnim_GeneralFrame0, - sAnim_HERDIER_1, -}; - -static const union AnimCmd *const sAnims_STOUTLAND[] = -{ - sAnim_GeneralFrame0, - sAnim_STOUTLAND_1, -}; - -static const union AnimCmd *const sAnims_PURRLOIN[] = -{ - sAnim_GeneralFrame0, - sAnim_PURRLOIN_1, -}; - -static const union AnimCmd *const sAnims_LIEPARD[] = -{ - sAnim_GeneralFrame0, - sAnim_LIEPARD_1, -}; - -static const union AnimCmd *const sAnims_PANSAGE[] = -{ - sAnim_GeneralFrame0, - sAnim_PANSAGE_1, -}; - -static const union AnimCmd *const sAnims_SIMISAGE[] = -{ - sAnim_GeneralFrame0, - sAnim_SIMISAGE_1, -}; - -static const union AnimCmd *const sAnims_PANSEAR[] = -{ - sAnim_GeneralFrame0, - sAnim_PANSEAR_1, -}; - -static const union AnimCmd *const sAnims_SIMISEAR[] = -{ - sAnim_GeneralFrame0, - sAnim_SIMISEAR_1, - sAnim_SIMISEAR_2, -}; - -static const union AnimCmd *const sAnims_PANPOUR[] = -{ - sAnim_GeneralFrame0, - sAnim_PANPOUR_1, -}; - -static const union AnimCmd *const sAnims_SIMIPOUR[] = -{ - sAnim_GeneralFrame0, - sAnim_SIMIPOUR_1, -}; - -static const union AnimCmd *const sAnims_MUNNA[] = -{ - sAnim_GeneralFrame0, - sAnim_MUNNA_1, -}; - -static const union AnimCmd *const sAnims_MUSHARNA[] = -{ - sAnim_GeneralFrame0, - sAnim_MUSHARNA_1, - sAnim_MUSHARNA_2, -}; - -static const union AnimCmd *const sAnims_PIDOVE[] = -{ - sAnim_GeneralFrame0, - sAnim_PIDOVE_1, -}; - -static const union AnimCmd *const sAnims_TRANQUILL[] = -{ - sAnim_GeneralFrame0, - sAnim_TRANQUILL_1, -}; - -static const union AnimCmd *const sAnims_UNFEZANT[] = -{ - sAnim_GeneralFrame0, - sAnim_UNFEZANT_1, -}; - -static const union AnimCmd *const sAnims_BLITZLE[] = -{ - sAnim_GeneralFrame0, - sAnim_BLITZLE_1, -}; - -static const union AnimCmd *const sAnims_ZEBSTRIKA[] = -{ - sAnim_GeneralFrame0, - sAnim_ZEBSTRIKA_1, -}; - -static const union AnimCmd *const sAnims_ROGGENROLA[] = -{ - sAnim_GeneralFrame0, - sAnim_ROGGENROLA_1, -}; - -static const union AnimCmd *const sAnims_BOLDORE[] = -{ - sAnim_GeneralFrame0, - sAnim_BOLDORE_1, -}; - -static const union AnimCmd *const sAnims_GIGALITH[] = -{ - sAnim_GeneralFrame0, - sAnim_GIGALITH_1, -}; - -static const union AnimCmd *const sAnims_WOOBAT[] = -{ - sAnim_GeneralFrame0, - sAnim_WOOBAT_1, -}; - -static const union AnimCmd *const sAnims_SWOOBAT[] = -{ - sAnim_GeneralFrame0, - sAnim_SWOOBAT_1, -}; - -static const union AnimCmd *const sAnims_DRILBUR[] = -{ - sAnim_GeneralFrame0, - sAnim_DRILBUR_1, - sAnim_DRILBUR_2, -}; - -static const union AnimCmd *const sAnims_EXCADRILL[] = -{ - sAnim_GeneralFrame0, - sAnim_EXCADRILL_1, -}; - -static const union AnimCmd *const sAnims_AUDINO[] = -{ - sAnim_GeneralFrame0, - sAnim_AUDINO_1, -}; - -static const union AnimCmd *const sAnims_TIMBURR[] = -{ - sAnim_GeneralFrame0, - sAnim_TIMBURR_1, -}; - -static const union AnimCmd *const sAnims_GURDURR[] = -{ - sAnim_GeneralFrame0, - sAnim_GURDURR_1, -}; - -static const union AnimCmd *const sAnims_CONKELDURR[] = -{ - sAnim_GeneralFrame0, - sAnim_CONKELDURR_1, -}; - -static const union AnimCmd *const sAnims_TYMPOLE[] = -{ - sAnim_GeneralFrame0, - sAnim_TYMPOLE_1, -}; - -static const union AnimCmd *const sAnims_PALPITOAD[] = -{ - sAnim_GeneralFrame0, - sAnim_PALPITOAD_1, -}; - -static const union AnimCmd *const sAnims_SEISMITOAD[] = -{ - sAnim_GeneralFrame0, - sAnim_SEISMITOAD_1, -}; - -static const union AnimCmd *const sAnims_THROH[] = -{ - sAnim_GeneralFrame0, - sAnim_THROH_1, -}; - -static const union AnimCmd *const sAnims_SAWK[] = -{ - sAnim_GeneralFrame0, - sAnim_SAWK_1, -}; - -static const union AnimCmd *const sAnims_SEWADDLE[] = -{ - sAnim_GeneralFrame0, - sAnim_SEWADDLE_1, - sAnim_SEWADDLE_2, -}; - -static const union AnimCmd *const sAnims_SWADLOON[] = -{ - sAnim_GeneralFrame0, - sAnim_SWADLOON_1, -}; - -static const union AnimCmd *const sAnims_LEAVANNY[] = -{ - sAnim_GeneralFrame0, - sAnim_LEAVANNY_1, -}; - -static const union AnimCmd *const sAnims_VENIPEDE[] = -{ - sAnim_GeneralFrame0, - sAnim_VENIPEDE_1, -}; - -static const union AnimCmd *const sAnims_WHIRLIPEDE[] = -{ - sAnim_GeneralFrame0, - sAnim_WHIRLIPEDE_1, -}; - -static const union AnimCmd *const sAnims_SCOLIPEDE[] = -{ - sAnim_GeneralFrame0, - sAnim_SCOLIPEDE_1, -}; - -static const union AnimCmd *const sAnims_COTTONEE[] = -{ - sAnim_GeneralFrame0, - sAnim_COTTONEE_1, -}; - -static const union AnimCmd *const sAnims_WHIMSICOTT[] = -{ - sAnim_GeneralFrame0, - sAnim_WHIMSICOTT_1, -}; - -static const union AnimCmd *const sAnims_PETILIL[] = -{ - sAnim_GeneralFrame0, - sAnim_PETILIL_1, -}; - -static const union AnimCmd *const sAnims_LILLIGANT[] = -{ - sAnim_GeneralFrame0, - sAnim_LILLIGANT_1, -}; - -static const union AnimCmd *const sAnims_BASCULIN[] = -{ - sAnim_GeneralFrame0, - sAnim_BASCULIN_1, -}; - -static const union AnimCmd *const sAnims_SANDILE[] = -{ - sAnim_GeneralFrame0, - sAnim_SANDILE_1, -}; - -static const union AnimCmd *const sAnims_KROKOROK[] = -{ - sAnim_GeneralFrame0, - sAnim_KROKOROK_1, -}; - -static const union AnimCmd *const sAnims_KROOKODILE[] = -{ - sAnim_GeneralFrame0, - sAnim_KROOKODILE_1, - sAnim_KROOKODILE_2, -}; - -static const union AnimCmd *const sAnims_DARUMAKA[] = -{ - sAnim_GeneralFrame0, - sAnim_DARUMAKA_1, -}; - -static const union AnimCmd *const sAnims_DARMANITAN[] = -{ - sAnim_GeneralFrame0, - sAnim_DARMANITAN_1, -}; - -static const union AnimCmd *const sAnims_MARACTUS[] = -{ - sAnim_GeneralFrame0, - sAnim_MARACTUS_1, -}; - -static const union AnimCmd *const sAnims_DWEBBLE[] = -{ - sAnim_GeneralFrame0, - sAnim_DWEBBLE_1, -}; - -static const union AnimCmd *const sAnims_CRUSTLE[] = -{ - sAnim_GeneralFrame0, - sAnim_CRUSTLE_1, -}; - -static const union AnimCmd *const sAnims_SCRAGGY[] = -{ - sAnim_GeneralFrame0, - sAnim_SCRAGGY_1, -}; - -static const union AnimCmd *const sAnims_SCRAFTY[] = -{ - sAnim_GeneralFrame0, - sAnim_SCRAFTY_1, -}; - -static const union AnimCmd *const sAnims_SIGILYPH[] = -{ - sAnim_GeneralFrame0, - sAnim_SIGILYPH_1, -}; - -static const union AnimCmd *const sAnims_YAMASK[] = -{ - sAnim_GeneralFrame0, - sAnim_YAMASK_1, -}; - -static const union AnimCmd *const sAnims_COFAGRIGUS[] = -{ - sAnim_GeneralFrame0, - sAnim_COFAGRIGUS_1, -}; - -static const union AnimCmd *const sAnims_TIRTOUGA[] = -{ - sAnim_GeneralFrame0, - sAnim_TIRTOUGA_1, -}; - -static const union AnimCmd *const sAnims_CARRACOSTA[] = -{ - sAnim_GeneralFrame0, - sAnim_CARRACOSTA_1, -}; - -static const union AnimCmd *const sAnims_ARCHEN[] = -{ - sAnim_GeneralFrame0, - sAnim_ARCHEN_1, -}; - -static const union AnimCmd *const sAnims_ARCHEOPS[] = -{ - sAnim_GeneralFrame0, - sAnim_ARCHEOPS_1, -}; - -static const union AnimCmd *const sAnims_TRUBBISH[] = -{ - sAnim_GeneralFrame0, - sAnim_TRUBBISH_1, -}; - -static const union AnimCmd *const sAnims_GARBODOR[] = -{ - sAnim_GeneralFrame0, - sAnim_GARBODOR_1, -}; - -static const union AnimCmd *const sAnims_ZORUA[] = -{ - sAnim_GeneralFrame0, - sAnim_ZORUA_1, -}; - -static const union AnimCmd *const sAnims_ZOROARK[] = -{ - sAnim_GeneralFrame0, - sAnim_ZOROARK_1, -}; - -static const union AnimCmd *const sAnims_MINCCINO[] = -{ - sAnim_GeneralFrame0, - sAnim_MINCCINO_1, -}; - -static const union AnimCmd *const sAnims_CINCCINO[] = -{ - sAnim_GeneralFrame0, - sAnim_CINCCINO_1, -}; - -static const union AnimCmd *const sAnims_GOTHITA[] = -{ - sAnim_GeneralFrame0, - sAnim_GOTHITA_1, -}; - -static const union AnimCmd *const sAnims_GOTHORITA[] = -{ - sAnim_GeneralFrame0, - sAnim_GOTHORITA_1, - sAnim_GOTHORITA_2, -}; - -static const union AnimCmd *const sAnims_GOTHITELLE[] = -{ - sAnim_GeneralFrame0, - sAnim_GOTHITELLE_1, -}; - -static const union AnimCmd *const sAnims_SOLOSIS[] = -{ - sAnim_GeneralFrame0, - sAnim_SOLOSIS_1, -}; - -static const union AnimCmd *const sAnims_DUOSION[] = -{ - sAnim_GeneralFrame0, - sAnim_DUOSION_1, -}; - -static const union AnimCmd *const sAnims_REUNICLUS[] = -{ - sAnim_GeneralFrame0, - sAnim_REUNICLUS_1, -}; - -static const union AnimCmd *const sAnims_DUCKLETT[] = -{ - sAnim_GeneralFrame0, - sAnim_DUCKLETT_1, -}; - -static const union AnimCmd *const sAnims_SWANNA[] = -{ - sAnim_GeneralFrame0, - sAnim_SWANNA_1, -}; - -static const union AnimCmd *const sAnims_VANILLITE[] = -{ - sAnim_GeneralFrame0, - sAnim_VANILLITE_1, -}; - -static const union AnimCmd *const sAnims_VANILLISH[] = -{ - sAnim_GeneralFrame0, - sAnim_VANILLISH_1, -}; - -static const union AnimCmd *const sAnims_VANILLUXE[] = -{ - sAnim_GeneralFrame0, - sAnim_VANILLUXE_1, -}; - -static const union AnimCmd *const sAnims_DEERLING[] = -{ - sAnim_GeneralFrame0, - sAnim_DEERLING_1, -}; - -static const union AnimCmd *const sAnims_SAWSBUCK[] = -{ - sAnim_GeneralFrame0, - sAnim_SAWSBUCK_1, -}; - -static const union AnimCmd *const sAnims_EMOLGA[] = -{ - sAnim_GeneralFrame0, - sAnim_EMOLGA_1, -}; - -static const union AnimCmd *const sAnims_KARRABLAST[] = -{ - sAnim_GeneralFrame0, - sAnim_KARRABLAST_1, -}; - -static const union AnimCmd *const sAnims_ESCAVALIER[] = -{ - sAnim_GeneralFrame0, - sAnim_ESCAVALIER_1, -}; - -static const union AnimCmd *const sAnims_FOONGUS[] = -{ - sAnim_GeneralFrame0, - sAnim_FOONGUS_1, - sAnim_FOONGUS_2, -}; - -static const union AnimCmd *const sAnims_AMOONGUSS[] = -{ - sAnim_GeneralFrame0, - sAnim_AMOONGUSS_1, -}; - -static const union AnimCmd *const sAnims_FRILLISH[] = -{ - sAnim_GeneralFrame0, - sAnim_FRILLISH_1, -}; - -static const union AnimCmd *const sAnims_JELLICENT[] = -{ - sAnim_GeneralFrame0, - sAnim_JELLICENT_1, -}; - -static const union AnimCmd *const sAnims_ALOMOMOLA[] = -{ - sAnim_GeneralFrame0, - sAnim_ALOMOMOLA_1, -}; - -static const union AnimCmd *const sAnims_JOLTIK[] = -{ - sAnim_GeneralFrame0, - sAnim_JOLTIK_1, -}; - -static const union AnimCmd *const sAnims_GALVANTULA[] = -{ - sAnim_GeneralFrame0, - sAnim_GALVANTULA_1, -}; - -static const union AnimCmd *const sAnims_FERROSEED[] = -{ - sAnim_GeneralFrame0, - sAnim_FERROSEED_1, -}; - -static const union AnimCmd *const sAnims_FERROTHORN[] = -{ - sAnim_GeneralFrame0, - sAnim_FERROTHORN_1, - sAnim_FERROTHORN_2, -}; - -static const union AnimCmd *const sAnims_KLINK[] = -{ - sAnim_GeneralFrame0, - sAnim_KLINK_1, -}; - -static const union AnimCmd *const sAnims_KLANG[] = -{ - sAnim_GeneralFrame0, - sAnim_KLANG_1, -}; - -static const union AnimCmd *const sAnims_KLINKLANG[] = -{ - sAnim_GeneralFrame0, - sAnim_KLINKLANG_1, -}; - -static const union AnimCmd *const sAnims_TYNAMO[] = -{ - sAnim_GeneralFrame0, - sAnim_TYNAMO_1, -}; - -static const union AnimCmd *const sAnims_EELEKTRIK[] = -{ - sAnim_GeneralFrame0, - sAnim_EELEKTRIK_1, -}; - -static const union AnimCmd *const sAnims_EELEKTROSS[] = -{ - sAnim_GeneralFrame0, - sAnim_EELEKTROSS_1, -}; - -static const union AnimCmd *const sAnims_ELGYEM[] = -{ - sAnim_GeneralFrame0, - sAnim_ELGYEM_1, -}; - -static const union AnimCmd *const sAnims_BEHEEYEM[] = -{ - sAnim_GeneralFrame0, - sAnim_BEHEEYEM_1, -}; - -static const union AnimCmd *const sAnims_LITWICK[] = -{ - sAnim_GeneralFrame0, - sAnim_LITWICK_1, -}; - -static const union AnimCmd *const sAnims_LAMPENT[] = -{ - sAnim_GeneralFrame0, - sAnim_LAMPENT_1, -}; - -static const union AnimCmd *const sAnims_CHANDELURE[] = -{ - sAnim_GeneralFrame0, - sAnim_CHANDELURE_1, -}; - -static const union AnimCmd *const sAnims_AXEW[] = -{ - sAnim_GeneralFrame0, - sAnim_AXEW_1, -}; - -static const union AnimCmd *const sAnims_FRAXURE[] = -{ - sAnim_GeneralFrame0, - sAnim_FRAXURE_1, -}; - -static const union AnimCmd *const sAnims_HAXORUS[] = -{ - sAnim_GeneralFrame0, - sAnim_HAXORUS_1, -}; - -static const union AnimCmd *const sAnims_CUBCHOO[] = -{ - sAnim_GeneralFrame0, - sAnim_CUBCHOO_1, -}; - -static const union AnimCmd *const sAnims_BEARTIC[] = -{ - sAnim_GeneralFrame0, - sAnim_BEARTIC_1, -}; - -static const union AnimCmd *const sAnims_CRYOGONAL[] = -{ - sAnim_GeneralFrame0, - sAnim_CRYOGONAL_1, - sAnim_CRYOGONAL_2, -}; - -static const union AnimCmd *const sAnims_SHELMET[] = -{ - sAnim_GeneralFrame0, - sAnim_SHELMET_1, -}; - -static const union AnimCmd *const sAnims_ACCELGOR[] = -{ - sAnim_GeneralFrame0, - sAnim_ACCELGOR_1, -}; - -static const union AnimCmd *const sAnims_STUNFISK[] = -{ - sAnim_GeneralFrame0, - sAnim_STUNFISK_1, -}; - -static const union AnimCmd *const sAnims_MIENFOO[] = -{ - sAnim_GeneralFrame0, - sAnim_MIENFOO_1, -}; - -static const union AnimCmd *const sAnims_MIENSHAO[] = -{ - sAnim_GeneralFrame0, - sAnim_MIENSHAO_1, -}; - -static const union AnimCmd *const sAnims_DRUDDIGON[] = -{ - sAnim_GeneralFrame0, - sAnim_DRUDDIGON_1, -}; - -static const union AnimCmd *const sAnims_GOLETT[] = -{ - sAnim_GeneralFrame0, - sAnim_GOLETT_1, -}; - -static const union AnimCmd *const sAnims_GOLURK[] = -{ - sAnim_GeneralFrame0, - sAnim_GOLURK_1, -}; - -static const union AnimCmd *const sAnims_PAWNIARD[] = -{ - sAnim_GeneralFrame0, - sAnim_PAWNIARD_1, -}; - -static const union AnimCmd *const sAnims_BISHARP[] = -{ - sAnim_GeneralFrame0, - sAnim_BISHARP_1, -}; - -static const union AnimCmd *const sAnims_BOUFFALANT[] = -{ - sAnim_GeneralFrame0, - sAnim_BOUFFALANT_1, -}; - -static const union AnimCmd *const sAnims_RUFFLET[] = -{ - sAnim_GeneralFrame0, - sAnim_RUFFLET_1, -}; - -static const union AnimCmd *const sAnims_BRAVIARY[] = -{ - sAnim_GeneralFrame0, - sAnim_BRAVIARY_1, -}; - -static const union AnimCmd *const sAnims_VULLABY[] = -{ - sAnim_GeneralFrame0, - sAnim_VULLABY_1, -}; - -static const union AnimCmd *const sAnims_MANDIBUZZ[] = -{ - sAnim_GeneralFrame0, - sAnim_MANDIBUZZ_1, -}; - -static const union AnimCmd *const sAnims_HEATMOR[] = -{ - sAnim_GeneralFrame0, - sAnim_HEATMOR_1, -}; - -static const union AnimCmd *const sAnims_DURANT[] = -{ - sAnim_GeneralFrame0, - sAnim_DURANT_1, -}; - -static const union AnimCmd *const sAnims_DEINO[] = -{ - sAnim_GeneralFrame0, - sAnim_DEINO_1, -}; - -static const union AnimCmd *const sAnims_ZWEILOUS[] = -{ - sAnim_GeneralFrame0, - sAnim_ZWEILOUS_1, -}; - -static const union AnimCmd *const sAnims_HYDREIGON[] = -{ - sAnim_GeneralFrame0, - sAnim_HYDREIGON_1, -}; - -static const union AnimCmd *const sAnims_LARVESTA[] = -{ - sAnim_GeneralFrame0, - sAnim_LARVESTA_1, -}; - -static const union AnimCmd *const sAnims_VOLCARONA[] = -{ - sAnim_GeneralFrame0, - sAnim_VOLCARONA_1, -}; - -static const union AnimCmd *const sAnims_COBALION[] = -{ - sAnim_GeneralFrame0, - sAnim_COBALION_1, -}; - -static const union AnimCmd *const sAnims_TERRAKION[] = -{ - sAnim_GeneralFrame0, - sAnim_TERRAKION_1, - sAnim_TERRAKION_2, -}; - -static const union AnimCmd *const sAnims_VIRIZION[] = -{ - sAnim_GeneralFrame0, - sAnim_VIRIZION_1, -}; - -static const union AnimCmd *const sAnims_TORNADUS[] = -{ - sAnim_GeneralFrame0, - sAnim_TORNADUS_1, -}; - -static const union AnimCmd *const sAnims_THUNDURUS[] = -{ - sAnim_GeneralFrame0, - sAnim_THUNDURUS_1, -}; - -static const union AnimCmd *const sAnims_RESHIRAM[] = -{ - sAnim_GeneralFrame0, - sAnim_RESHIRAM_1, -}; - -static const union AnimCmd *const sAnims_ZEKROM[] = -{ - sAnim_GeneralFrame0, - sAnim_ZEKROM_1, -}; - -static const union AnimCmd *const sAnims_LANDORUS[] = -{ - sAnim_GeneralFrame0, - sAnim_LANDORUS_1, -}; - -static const union AnimCmd *const sAnims_KYUREM[] = -{ - sAnim_GeneralFrame0, - sAnim_KYUREM_1, -}; - -static const union AnimCmd *const sAnims_KELDEO[] = -{ - sAnim_GeneralFrame0, - sAnim_KELDEO_1, -}; - -static const union AnimCmd *const sAnims_MELOETTA[] = -{ - sAnim_GeneralFrame0, - sAnim_MELOETTA_1, - sAnim_MELOETTA_2, -}; - -static const union AnimCmd *const sAnims_GENESECT[] = -{ - sAnim_GeneralFrame0, - sAnim_GENESECT_1, -}; -#endif - -#if P_GEN_6_POKEMON == TRUE -static const union AnimCmd *const sAnims_CHESPIN[] = -{ - sAnim_GeneralFrame0, - sAnim_CHESPIN_1, -}; - -static const union AnimCmd *const sAnims_QUILLADIN[] = -{ - sAnim_GeneralFrame0, - sAnim_QUILLADIN_1, - sAnim_QUILLADIN_2, -}; - -static const union AnimCmd *const sAnims_CHESNAUGHT[] = -{ - sAnim_GeneralFrame0, - sAnim_CHESNAUGHT_1, -}; - -static const union AnimCmd *const sAnims_FENNEKIN[] = -{ - sAnim_GeneralFrame0, - sAnim_FENNEKIN_1, -}; - -static const union AnimCmd *const sAnims_BRAIXEN[] = -{ - sAnim_GeneralFrame0, - sAnim_BRAIXEN_1, -}; - -static const union AnimCmd *const sAnims_DELPHOX[] = -{ - sAnim_GeneralFrame0, - sAnim_DELPHOX_1, -}; - -static const union AnimCmd *const sAnims_FROAKIE[] = -{ - sAnim_GeneralFrame0, - sAnim_FROAKIE_1, -}; - -static const union AnimCmd *const sAnims_FROGADIER[] = -{ - sAnim_GeneralFrame0, - sAnim_FROGADIER_1, -}; - -static const union AnimCmd *const sAnims_GRENINJA[] = -{ - sAnim_GeneralFrame0, - sAnim_GRENINJA_1, -}; - -static const union AnimCmd *const sAnims_GRENINJA_ASH[] ={ - sAnim_GeneralFrame0, - sAnim_GRENINJA_ASH_1, -}; - -static const union AnimCmd *const sAnims_BUNNELBY[] = -{ - sAnim_GeneralFrame0, - sAnim_BUNNELBY_1, -}; - -static const union AnimCmd *const sAnims_DIGGERSBY[] = -{ - sAnim_GeneralFrame0, - sAnim_DIGGERSBY_1, -}; - -static const union AnimCmd *const sAnims_FLETCHLING[] = -{ - sAnim_GeneralFrame0, - sAnim_FLETCHLING_1, -}; - -static const union AnimCmd *const sAnims_FLETCHINDER[] = -{ - sAnim_GeneralFrame0, - sAnim_FLETCHINDER_1, -}; - -static const union AnimCmd *const sAnims_TALONFLAME[] = -{ - sAnim_GeneralFrame0, - sAnim_TALONFLAME_1, - sAnim_TALONFLAME_2, -}; - -static const union AnimCmd *const sAnims_SCATTERBUG[] = -{ - sAnim_GeneralFrame0, - sAnim_SCATTERBUG_1, -}; - -static const union AnimCmd *const sAnims_SPEWPA[] = -{ - sAnim_GeneralFrame0, - sAnim_SPEWPA_1, -}; - -static const union AnimCmd *const sAnims_VIVILLON[] = -{ - sAnim_GeneralFrame0, - sAnim_VIVILLON_1, -}; - -static const union AnimCmd *const sAnims_LITLEO[] = -{ - sAnim_GeneralFrame0, - sAnim_LITLEO_1, -}; - -static const union AnimCmd *const sAnims_PYROAR[] = -{ - sAnim_GeneralFrame0, - sAnim_PYROAR_1, -}; - -static const union AnimCmd *const sAnims_FLABEBE[] = -{ - sAnim_GeneralFrame0, - sAnim_FLABEBE_1, - sAnim_FLABEBE_2, -}; - -static const union AnimCmd *const sAnims_FLOETTE[] = -{ - sAnim_GeneralFrame0, - sAnim_FLOETTE_1, -}; - -static const union AnimCmd *const sAnims_FLORGES[] = -{ - sAnim_GeneralFrame0, - sAnim_FLORGES_1, - sAnim_FLORGES_2, -}; - -static const union AnimCmd *const sAnims_SKIDDO[] = -{ - sAnim_GeneralFrame0, - sAnim_SKIDDO_1, -}; - -static const union AnimCmd *const sAnims_GOGOAT[] = -{ - sAnim_GeneralFrame0, - sAnim_GOGOAT_1, -}; - -static const union AnimCmd *const sAnims_PANCHAM[] = -{ - sAnim_GeneralFrame0, - sAnim_PANCHAM_1, -}; - -static const union AnimCmd *const sAnims_PANGORO[] = -{ - sAnim_GeneralFrame0, - sAnim_PANGORO_1, -}; - -static const union AnimCmd *const sAnims_FURFROU[] = -{ - sAnim_GeneralFrame0, - sAnim_FURFROU_1, -}; - -static const union AnimCmd *const sAnims_ESPURR[] = -{ - sAnim_GeneralFrame0, - sAnim_ESPURR_1, -}; - -static const union AnimCmd *const sAnims_MEOWSTIC[] = -{ - sAnim_GeneralFrame0, - sAnim_MEOWSTIC_1, -}; - -static const union AnimCmd *const sAnims_HONEDGE[] = -{ - sAnim_GeneralFrame0, - sAnim_HONEDGE_1, -}; - -static const union AnimCmd *const sAnims_DOUBLADE[] = -{ - sAnim_GeneralFrame0, - sAnim_DOUBLADE_1, - sAnim_DOUBLADE_2, -}; - -static const union AnimCmd *const sAnims_AEGISLASH[] = -{ - sAnim_GeneralFrame0, - sAnim_AEGISLASH_1, -}; - -static const union AnimCmd *const sAnims_SPRITZEE[] = -{ - sAnim_GeneralFrame0, - sAnim_SPRITZEE_1, -}; - -static const union AnimCmd *const sAnims_AROMATISSE[] = -{ - sAnim_GeneralFrame0, - sAnim_AROMATISSE_1, -}; - -static const union AnimCmd *const sAnims_SWIRLIX[] = -{ - sAnim_GeneralFrame0, - sAnim_SWIRLIX_1, -}; - -static const union AnimCmd *const sAnims_SLURPUFF[] = -{ - sAnim_GeneralFrame0, - sAnim_SLURPUFF_1, -}; - -static const union AnimCmd *const sAnims_INKAY[] = -{ - sAnim_GeneralFrame0, - sAnim_INKAY_1, -}; - -static const union AnimCmd *const sAnims_MALAMAR[] = -{ - sAnim_GeneralFrame0, - sAnim_MALAMAR_1, -}; - -static const union AnimCmd *const sAnims_BINACLE[] = -{ - sAnim_GeneralFrame0, - sAnim_BINACLE_1, -}; - -static const union AnimCmd *const sAnims_BARBARACLE[] = -{ - sAnim_GeneralFrame0, - sAnim_BARBARACLE_1, -}; - -static const union AnimCmd *const sAnims_SKRELP[] = -{ - sAnim_GeneralFrame0, - sAnim_SKRELP_1, -}; - -static const union AnimCmd *const sAnims_DRAGALGE[] = -{ - sAnim_GeneralFrame0, - sAnim_DRAGALGE_1, -}; - -static const union AnimCmd *const sAnims_CLAUNCHER[] = -{ - sAnim_GeneralFrame0, - sAnim_CLAUNCHER_1, -}; - -static const union AnimCmd *const sAnims_CLAWITZER[] = -{ - sAnim_GeneralFrame0, - sAnim_CLAWITZER_1, -}; - -static const union AnimCmd *const sAnims_HELIOPTILE[] = -{ - sAnim_GeneralFrame0, - sAnim_HELIOPTILE_1, -}; - -static const union AnimCmd *const sAnims_HELIOLISK[] = -{ - sAnim_GeneralFrame0, - sAnim_HELIOLISK_1, -}; - -static const union AnimCmd *const sAnims_TYRUNT[] = -{ - sAnim_GeneralFrame0, - sAnim_TYRUNT_1, -}; - -static const union AnimCmd *const sAnims_TYRANTRUM[] = -{ - sAnim_GeneralFrame0, - sAnim_TYRANTRUM_1, -}; - -static const union AnimCmd *const sAnims_AMAURA[] = -{ - sAnim_GeneralFrame0, - sAnim_AMAURA_1, -}; - -static const union AnimCmd *const sAnims_AURORUS[] = -{ - sAnim_GeneralFrame0, - sAnim_AURORUS_1, -}; - -static const union AnimCmd *const sAnims_SYLVEON[] = -{ - sAnim_GeneralFrame0, - sAnim_SYLVEON_1, -}; - -static const union AnimCmd *const sAnims_HAWLUCHA[] = -{ - sAnim_GeneralFrame0, - sAnim_HAWLUCHA_1, -}; - -static const union AnimCmd *const sAnims_DEDENNE[] = -{ - sAnim_GeneralFrame0, - sAnim_DEDENNE_1, -}; - -static const union AnimCmd *const sAnims_CARBINK[] = -{ - sAnim_GeneralFrame0, - sAnim_CARBINK_1, -}; - -static const union AnimCmd *const sAnims_GOOMY[] = -{ - sAnim_GeneralFrame0, - sAnim_GOOMY_1, -}; - -static const union AnimCmd *const sAnims_SLIGGOO[] = -{ - sAnim_GeneralFrame0, - sAnim_SLIGGOO_1, -}; - -static const union AnimCmd *const sAnims_GOODRA[] = -{ - sAnim_GeneralFrame0, - sAnim_GOODRA_1, -}; - -static const union AnimCmd *const sAnims_KLEFKI[] = -{ - sAnim_GeneralFrame0, - sAnim_KLEFKI_1, -}; - -static const union AnimCmd *const sAnims_PHANTUMP[] = -{ - sAnim_GeneralFrame0, - sAnim_PHANTUMP_1, -}; - -static const union AnimCmd *const sAnims_TREVENANT[] = -{ - sAnim_GeneralFrame0, - sAnim_TREVENANT_1, -}; - -static const union AnimCmd *const sAnims_PUMPKABOO[] = -{ - sAnim_GeneralFrame0, - sAnim_PUMPKABOO_1, -}; - -static const union AnimCmd *const sAnims_GOURGEIST[] = -{ - sAnim_GeneralFrame0, - sAnim_GOURGEIST_1, -}; - -static const union AnimCmd *const sAnims_BERGMITE[] = -{ - sAnim_GeneralFrame0, - sAnim_BERGMITE_1, - sAnim_BERGMITE_2, -}; - -static const union AnimCmd *const sAnims_AVALUGG[] = -{ - sAnim_GeneralFrame0, - sAnim_AVALUGG_1, -}; - -static const union AnimCmd *const sAnims_NOIBAT[] = -{ - sAnim_GeneralFrame0, - sAnim_NOIBAT_1, -}; - -static const union AnimCmd *const sAnims_NOIVERN[] = -{ - sAnim_GeneralFrame0, - sAnim_NOIVERN_1, -}; - -static const union AnimCmd *const sAnims_XERNEAS[] = -{ - sAnim_GeneralFrame0, - sAnim_XERNEAS_1, -}; - -static const union AnimCmd *const sAnims_YVELTAL[] = -{ - sAnim_GeneralFrame0, - sAnim_YVELTAL_1, -}; - -static const union AnimCmd *const sAnims_ZYGARDE[] = -{ - sAnim_GeneralFrame0, - sAnim_ZYGARDE_1, -}; - -static const union AnimCmd *const sAnims_DIANCIE[] = -{ - sAnim_GeneralFrame0, - sAnim_DIANCIE_1, -}; - -static const union AnimCmd *const sAnims_HOOPA[] = -{ - sAnim_GeneralFrame0, - sAnim_HOOPA_1, -}; - -static const union AnimCmd *const sAnims_VOLCANION[] = -{ - sAnim_GeneralFrame0, - sAnim_VOLCANION_1, -}; -#endif - -#if P_GEN_7_POKEMON == TRUE -static const union AnimCmd *const sAnims_ROWLET[] = -{ - sAnim_GeneralFrame0, - sAnim_ROWLET_1, -}; - -static const union AnimCmd *const sAnims_DARTRIX[] = -{ - sAnim_GeneralFrame0, - sAnim_DARTRIX_1, -}; - -static const union AnimCmd *const sAnims_DECIDUEYE[] = -{ - sAnim_GeneralFrame0, - sAnim_DECIDUEYE_1, -}; - -static const union AnimCmd *const sAnims_LITTEN[] = -{ - sAnim_GeneralFrame0, - sAnim_LITTEN_1, -}; - -static const union AnimCmd *const sAnims_TORRACAT[] = -{ - sAnim_GeneralFrame0, - sAnim_TORRACAT_1, -}; - -static const union AnimCmd *const sAnims_INCINEROAR[] = -{ - sAnim_GeneralFrame0, - sAnim_INCINEROAR_1, -}; - -static const union AnimCmd *const sAnims_POPPLIO[] = -{ - sAnim_GeneralFrame0, - sAnim_POPPLIO_1, -}; - -static const union AnimCmd *const sAnims_BRIONNE[] = -{ - sAnim_GeneralFrame0, - sAnim_BRIONNE_1, -}; - -static const union AnimCmd *const sAnims_PRIMARINA[] = -{ - sAnim_GeneralFrame0, - sAnim_PRIMARINA_1, -}; - -static const union AnimCmd *const sAnims_PIKIPEK[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKIPEK_1, -}; - -static const union AnimCmd *const sAnims_TRUMBEAK[] = -{ - sAnim_GeneralFrame0, - sAnim_TRUMBEAK_1, -}; - -static const union AnimCmd *const sAnims_TOUCANNON[] = -{ - sAnim_GeneralFrame0, - sAnim_TOUCANNON_1, -}; - -static const union AnimCmd *const sAnims_YUNGOOS[] = -{ - sAnim_GeneralFrame0, - sAnim_YUNGOOS_1, -}; - -static const union AnimCmd *const sAnims_GUMSHOOS[] = -{ - sAnim_GeneralFrame0, - sAnim_GUMSHOOS_1, -}; - -static const union AnimCmd *const sAnims_GRUBBIN[] = -{ - sAnim_GeneralFrame0, - sAnim_GRUBBIN_1, -}; - -static const union AnimCmd *const sAnims_CHARJABUG[] = -{ - sAnim_GeneralFrame0, - sAnim_CHARJABUG_1, -}; - -static const union AnimCmd *const sAnims_VIKAVOLT[] = -{ - sAnim_GeneralFrame0, - sAnim_VIKAVOLT_1, -}; - -static const union AnimCmd *const sAnims_CRABRAWLER[] = -{ - sAnim_GeneralFrame0, - sAnim_CRABRAWLER_1, -}; - -static const union AnimCmd *const sAnims_CRABOMINABLE[] = -{ - sAnim_GeneralFrame0, - sAnim_CRABOMINABLE_1, -}; - -static const union AnimCmd *const sAnims_ORICORIO[] = -{ - sAnim_GeneralFrame0, - sAnim_ORICORIO_1, -}; - -static const union AnimCmd *const sAnims_CUTIEFLY[] = -{ - sAnim_GeneralFrame0, - sAnim_CUTIEFLY_1, -}; - -static const union AnimCmd *const sAnims_RIBOMBEE[] = -{ - sAnim_GeneralFrame0, - sAnim_RIBOMBEE_1, -}; - -static const union AnimCmd *const sAnims_ROCKRUFF[] = -{ - sAnim_GeneralFrame0, - sAnim_ROCKRUFF_1, -}; - -static const union AnimCmd *const sAnims_LYCANROC[] = -{ - sAnim_GeneralFrame0, - sAnim_LYCANROC_1, -}; - -static const union AnimCmd *const sAnims_WISHIWASHI[] = -{ - sAnim_GeneralFrame0, - sAnim_WISHIWASHI_1, -}; - -static const union AnimCmd *const sAnims_MAREANIE[] = -{ - sAnim_GeneralFrame0, - sAnim_MAREANIE_1, -}; - -static const union AnimCmd *const sAnims_TOXAPEX[] = -{ - sAnim_GeneralFrame0, - sAnim_TOXAPEX_1, -}; - -static const union AnimCmd *const sAnims_MUDBRAY[] = -{ - sAnim_GeneralFrame0, - sAnim_MUDBRAY_1, -}; - -static const union AnimCmd *const sAnims_MUDSDALE[] = -{ - sAnim_GeneralFrame0, - sAnim_MUDSDALE_1, -}; - -static const union AnimCmd *const sAnims_DEWPIDER[] = -{ - sAnim_GeneralFrame0, - sAnim_DEWPIDER_1, -}; - -static const union AnimCmd *const sAnims_ARAQUANID[] = -{ - sAnim_GeneralFrame0, - sAnim_ARAQUANID_1, -}; - -static const union AnimCmd *const sAnims_FOMANTIS[] = -{ - sAnim_GeneralFrame0, - sAnim_FOMANTIS_1, -}; - -static const union AnimCmd *const sAnims_LURANTIS[] = -{ - sAnim_GeneralFrame0, - sAnim_LURANTIS_1, -}; - -static const union AnimCmd *const sAnims_MORELULL[] = -{ - sAnim_GeneralFrame0, - sAnim_MORELULL_1, -}; - -static const union AnimCmd *const sAnims_SHIINOTIC[] = -{ - sAnim_GeneralFrame0, - sAnim_SHIINOTIC_1, -}; - -static const union AnimCmd *const sAnims_SALANDIT[] = -{ - sAnim_GeneralFrame0, - sAnim_SALANDIT_1, -}; - -static const union AnimCmd *const sAnims_SALAZZLE[] = -{ - sAnim_GeneralFrame0, - sAnim_SALAZZLE_1, -}; - -static const union AnimCmd *const sAnims_STUFFUL[] = -{ - sAnim_GeneralFrame0, - sAnim_STUFFUL_1, -}; - -static const union AnimCmd *const sAnims_BEWEAR[] = -{ - sAnim_GeneralFrame0, - sAnim_BEWEAR_1, -}; - -static const union AnimCmd *const sAnims_BOUNSWEET[] = -{ - sAnim_GeneralFrame0, - sAnim_BOUNSWEET_1, -}; - -static const union AnimCmd *const sAnims_STEENEE[] = -{ - sAnim_GeneralFrame0, - sAnim_STEENEE_1, -}; - -static const union AnimCmd *const sAnims_TSAREENA[] = -{ - sAnim_GeneralFrame0, - sAnim_TSAREENA_1, -}; - -static const union AnimCmd *const sAnims_COMFEY[] = -{ - sAnim_GeneralFrame0, - sAnim_COMFEY_1, -}; - -static const union AnimCmd *const sAnims_ORANGURU[] = -{ - sAnim_GeneralFrame0, - sAnim_ORANGURU_1, -}; - -static const union AnimCmd *const sAnims_PASSIMIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_PASSIMIAN_1, -}; - -static const union AnimCmd *const sAnims_WIMPOD[] = -{ - sAnim_GeneralFrame0, - sAnim_WIMPOD_1, -}; - -static const union AnimCmd *const sAnims_GOLISOPOD[] = -{ - sAnim_GeneralFrame0, - sAnim_GOLISOPOD_1, -}; - -static const union AnimCmd *const sAnims_SANDYGAST[] = -{ - sAnim_GeneralFrame0, - sAnim_SANDYGAST_1, -}; - -static const union AnimCmd *const sAnims_PALOSSAND[] = -{ - sAnim_GeneralFrame0, - sAnim_PALOSSAND_1, -}; - -static const union AnimCmd *const sAnims_PYUKUMUKU[] = -{ - sAnim_GeneralFrame0, - sAnim_PYUKUMUKU_1, -}; - -static const union AnimCmd *const sAnims_TYPE_NULL[] = -{ - sAnim_GeneralFrame0, - sAnim_TYPE_NULL_1, -}; - -static const union AnimCmd *const sAnims_SILVALLY[] = -{ - sAnim_GeneralFrame0, - sAnim_SILVALLY_1, -}; - -static const union AnimCmd *const sAnims_MINIOR[] = -{ - sAnim_GeneralFrame0, - sAnim_MINIOR_1, -}; - -static const union AnimCmd *const sAnims_KOMALA[] = -{ - sAnim_GeneralFrame0, - sAnim_KOMALA_1, -}; - -static const union AnimCmd *const sAnims_TURTONATOR[] = -{ - sAnim_GeneralFrame0, - sAnim_TURTONATOR_1, -}; - -static const union AnimCmd *const sAnims_TOGEDEMARU[] = -{ - sAnim_GeneralFrame0, - sAnim_TOGEDEMARU_1, -}; - -static const union AnimCmd *const sAnims_MIMIKYU[] = -{ - sAnim_GeneralFrame0, - sAnim_MIMIKYU_1, -}; - -static const union AnimCmd *const sAnims_BRUXISH[] = -{ - sAnim_GeneralFrame0, - sAnim_BRUXISH_1, -}; - -static const union AnimCmd *const sAnims_DRAMPA[] = -{ - sAnim_GeneralFrame0, - sAnim_DRAMPA_1, -}; - -static const union AnimCmd *const sAnims_DHELMISE[] = -{ - sAnim_GeneralFrame0, - sAnim_DHELMISE_1, -}; - -static const union AnimCmd *const sAnims_JANGMO_O[] = -{ - sAnim_GeneralFrame0, - sAnim_JANGMO_O_1, -}; - -static const union AnimCmd *const sAnims_HAKAMO_O[] = -{ - sAnim_GeneralFrame0, - sAnim_HAKAMO_O_1, -}; - -static const union AnimCmd *const sAnims_KOMMO_O[] = -{ - sAnim_GeneralFrame0, - sAnim_KOMMO_O_1, -}; - -static const union AnimCmd *const sAnims_TAPU_KOKO[] = -{ - sAnim_GeneralFrame0, - sAnim_TAPU_KOKO_1, -}; - -static const union AnimCmd *const sAnims_TAPU_LELE[] = -{ - sAnim_GeneralFrame0, - sAnim_TAPU_LELE_1, -}; - -static const union AnimCmd *const sAnims_TAPU_BULU[] = -{ - sAnim_GeneralFrame0, - sAnim_TAPU_BULU_1, -}; - -static const union AnimCmd *const sAnims_TAPU_FINI[] = -{ - sAnim_GeneralFrame0, - sAnim_TAPU_FINI_1, -}; - -static const union AnimCmd *const sAnims_COSMOG[] = -{ - sAnim_GeneralFrame0, - sAnim_COSMOG_1, -}; - -static const union AnimCmd *const sAnims_COSMOEM[] = -{ - sAnim_GeneralFrame0, - sAnim_COSMOEM_1, -}; - -static const union AnimCmd *const sAnims_SOLGALEO[] = -{ - sAnim_GeneralFrame0, - sAnim_SOLGALEO_1, -}; - -static const union AnimCmd *const sAnims_LUNALA[] = -{ - sAnim_GeneralFrame0, - sAnim_LUNALA_1, -}; - -static const union AnimCmd *const sAnims_NIHILEGO[] = -{ - sAnim_GeneralFrame0, - sAnim_NIHILEGO_1, -}; - -static const union AnimCmd *const sAnims_BUZZWOLE[] = -{ - sAnim_GeneralFrame0, - sAnim_BUZZWOLE_1, -}; - -static const union AnimCmd *const sAnims_PHEROMOSA[] = -{ - sAnim_GeneralFrame0, - sAnim_PHEROMOSA_1, -}; - -static const union AnimCmd *const sAnims_XURKITREE[] = -{ - sAnim_GeneralFrame0, - sAnim_XURKITREE_1, -}; - -static const union AnimCmd *const sAnims_CELESTEELA[] = -{ - sAnim_GeneralFrame0, - sAnim_CELESTEELA_1, -}; - -static const union AnimCmd *const sAnims_KARTANA[] = -{ - sAnim_GeneralFrame0, - sAnim_KARTANA_1, -}; - -static const union AnimCmd *const sAnims_GUZZLORD[] = -{ - sAnim_GeneralFrame0, - sAnim_GUZZLORD_1, -}; - -static const union AnimCmd *const sAnims_NECROZMA[] = -{ - sAnim_GeneralFrame0, - sAnim_NECROZMA_1, -}; - -static const union AnimCmd *const sAnims_MAGEARNA[] = -{ - sAnim_GeneralFrame0, - sAnim_MAGEARNA_1, -}; - -static const union AnimCmd *const sAnims_MARSHADOW[] = -{ - sAnim_GeneralFrame0, - sAnim_MARSHADOW_1, -}; - -static const union AnimCmd *const sAnims_POIPOLE[] = -{ - sAnim_GeneralFrame0, - sAnim_POIPOLE_1, -}; - -static const union AnimCmd *const sAnims_NAGANADEL[] = -{ - sAnim_GeneralFrame0, - sAnim_NAGANADEL_1, -}; - -static const union AnimCmd *const sAnims_STAKATAKA[] = -{ - sAnim_GeneralFrame0, - sAnim_STAKATAKA_1, -}; - -static const union AnimCmd *const sAnims_BLACEPHALON[] = -{ - sAnim_GeneralFrame0, - sAnim_BLACEPHALON_1, -}; - -static const union AnimCmd *const sAnims_ZERAORA[] = -{ - sAnim_GeneralFrame0, - sAnim_ZERAORA_1, -}; - -static const union AnimCmd *const sAnims_MELTAN[] = -{ - sAnim_GeneralFrame0, - sAnim_MELTAN_1, -}; - -static const union AnimCmd *const sAnims_MELMETAL[] = -{ - sAnim_GeneralFrame0, - sAnim_MELMETAL_1, -}; -#endif - -#if P_GEN_8_POKEMON == TRUE -static const union AnimCmd *const sAnims_GROOKEY[] = -{ - sAnim_GeneralFrame0, - sAnim_GROOKEY_1, -}; - -static const union AnimCmd *const sAnims_THWACKEY[] = -{ - sAnim_GeneralFrame0, - sAnim_THWACKEY_1, -}; - -static const union AnimCmd *const sAnims_RILLABOOM[] = -{ - sAnim_GeneralFrame0, - sAnim_RILLABOOM_1, -}; - -static const union AnimCmd *const sAnims_SCORBUNNY[] = -{ - sAnim_GeneralFrame0, - sAnim_SCORBUNNY_1, -}; - -static const union AnimCmd *const sAnims_RABOOT[] = -{ - sAnim_GeneralFrame0, - sAnim_RABOOT_1, -}; - -static const union AnimCmd *const sAnims_CINDERACE[] = -{ - sAnim_GeneralFrame0, - sAnim_CINDERACE_1, -}; - -static const union AnimCmd *const sAnims_SOBBLE[] = -{ - sAnim_GeneralFrame0, - sAnim_SOBBLE_1, -}; - -static const union AnimCmd *const sAnims_DRIZZILE[] = -{ - sAnim_GeneralFrame0, - sAnim_DRIZZILE_1, -}; - -static const union AnimCmd *const sAnims_INTELEON[] = -{ - sAnim_GeneralFrame0, - sAnim_INTELEON_1, -}; - -static const union AnimCmd *const sAnims_SKWOVET[] = -{ - sAnim_GeneralFrame0, - sAnim_SKWOVET_1, -}; - -static const union AnimCmd *const sAnims_GREEDENT[] = -{ - sAnim_GeneralFrame0, - sAnim_GREEDENT_1, -}; - -static const union AnimCmd *const sAnims_ROOKIDEE[] = -{ - sAnim_GeneralFrame0, - sAnim_ROOKIDEE_1, -}; - -static const union AnimCmd *const sAnims_CORVISQUIRE[] = -{ - sAnim_GeneralFrame0, - sAnim_CORVISQUIRE_1, -}; - -static const union AnimCmd *const sAnims_CORVIKNIGHT[] = -{ - sAnim_GeneralFrame0, - sAnim_CORVIKNIGHT_1, -}; - -static const union AnimCmd *const sAnims_BLIPBUG[] = -{ - sAnim_GeneralFrame0, - sAnim_BLIPBUG_1, -}; - -static const union AnimCmd *const sAnims_DOTTLER[] = -{ - sAnim_GeneralFrame0, - sAnim_DOTTLER_1, -}; - -static const union AnimCmd *const sAnims_ORBEETLE[] = -{ - sAnim_GeneralFrame0, - sAnim_ORBEETLE_1, -}; - -static const union AnimCmd *const sAnims_NICKIT[] = -{ - sAnim_GeneralFrame0, - sAnim_NICKIT_1, -}; - -static const union AnimCmd *const sAnims_THIEVUL[] = -{ - sAnim_GeneralFrame0, - sAnim_THIEVUL_1, -}; - -static const union AnimCmd *const sAnims_GOSSIFLEUR[] = -{ - sAnim_GeneralFrame0, - sAnim_GOSSIFLEUR_1, -}; - -static const union AnimCmd *const sAnims_ELDEGOSS[] = -{ - sAnim_GeneralFrame0, - sAnim_ELDEGOSS_1, -}; - -static const union AnimCmd *const sAnims_WOOLOO[] = -{ - sAnim_GeneralFrame0, - sAnim_WOOLOO_1, -}; - -static const union AnimCmd *const sAnims_DUBWOOL[] = -{ - sAnim_GeneralFrame0, - sAnim_DUBWOOL_1, -}; - -static const union AnimCmd *const sAnims_CHEWTLE[] = -{ - sAnim_GeneralFrame0, - sAnim_CHEWTLE_1, -}; - -static const union AnimCmd *const sAnims_DREDNAW[] = -{ - sAnim_GeneralFrame0, - sAnim_DREDNAW_1, -}; - -static const union AnimCmd *const sAnims_YAMPER[] = -{ - sAnim_GeneralFrame0, - sAnim_YAMPER_1, -}; - -static const union AnimCmd *const sAnims_BOLTUND[] = -{ - sAnim_GeneralFrame0, - sAnim_BOLTUND_1, -}; - -static const union AnimCmd *const sAnims_ROLYCOLY[] = -{ - sAnim_GeneralFrame0, - sAnim_ROLYCOLY_1, -}; - -static const union AnimCmd *const sAnims_CARKOL[] = -{ - sAnim_GeneralFrame0, - sAnim_CARKOL_1, -}; - -static const union AnimCmd *const sAnims_COALOSSAL[] = -{ - sAnim_GeneralFrame0, - sAnim_COALOSSAL_1, -}; - -static const union AnimCmd *const sAnims_APPLIN[] = -{ - sAnim_GeneralFrame0, - sAnim_APPLIN_1, -}; - -static const union AnimCmd *const sAnims_FLAPPLE[] = -{ - sAnim_GeneralFrame0, - sAnim_FLAPPLE_1, -}; - -static const union AnimCmd *const sAnims_APPLETUN[] = -{ - sAnim_GeneralFrame0, - sAnim_APPLETUN_1, -}; - -static const union AnimCmd *const sAnims_SILICOBRA[] = -{ - sAnim_GeneralFrame0, - sAnim_SILICOBRA_1, -}; - -static const union AnimCmd *const sAnims_SANDACONDA[] = -{ - sAnim_GeneralFrame0, - sAnim_SANDACONDA_1, -}; - -static const union AnimCmd *const sAnims_CRAMORANT[] = -{ - sAnim_GeneralFrame0, - sAnim_CRAMORANT_1, -}; - -static const union AnimCmd *const sAnims_ARROKUDA[] = -{ - sAnim_GeneralFrame0, - sAnim_ARROKUDA_1, -}; - -static const union AnimCmd *const sAnims_BARRASKEWDA[] = -{ - sAnim_GeneralFrame0, - sAnim_BARRASKEWDA_1, -}; - -static const union AnimCmd *const sAnims_TOXEL[] = -{ - sAnim_GeneralFrame0, - sAnim_TOXEL_1, -}; - -static const union AnimCmd *const sAnims_TOXTRICITY[] = -{ - sAnim_GeneralFrame0, - sAnim_TOXTRICITY_1, -}; - -static const union AnimCmd *const sAnims_SIZZLIPEDE[] = -{ - sAnim_GeneralFrame0, - sAnim_SIZZLIPEDE_1, -}; - -static const union AnimCmd *const sAnims_CENTISKORCH[] = -{ - sAnim_GeneralFrame0, - sAnim_CENTISKORCH_1, -}; - -static const union AnimCmd *const sAnims_CLOBBOPUS[] = -{ - sAnim_GeneralFrame0, - sAnim_CLOBBOPUS_1, -}; - -static const union AnimCmd *const sAnims_GRAPPLOCT[] = -{ - sAnim_GeneralFrame0, - sAnim_GRAPPLOCT_1, -}; - -static const union AnimCmd *const sAnims_SINISTEA[] = -{ - sAnim_GeneralFrame0, - sAnim_SINISTEA_1, -}; - -static const union AnimCmd *const sAnims_POLTEAGEIST[] = -{ - sAnim_GeneralFrame0, - sAnim_POLTEAGEIST_1, -}; - -static const union AnimCmd *const sAnims_HATENNA[] = -{ - sAnim_GeneralFrame0, - sAnim_HATENNA_1, -}; - -static const union AnimCmd *const sAnims_HATTREM[] = -{ - sAnim_GeneralFrame0, - sAnim_HATTREM_1, -}; - -static const union AnimCmd *const sAnims_HATTERENE[] = -{ - sAnim_GeneralFrame0, - sAnim_HATTERENE_1, -}; - -static const union AnimCmd *const sAnims_IMPIDIMP[] = -{ - sAnim_GeneralFrame0, - sAnim_IMPIDIMP_1, -}; - -static const union AnimCmd *const sAnims_MORGREM[] = -{ - sAnim_GeneralFrame0, - sAnim_MORGREM_1, -}; - -static const union AnimCmd *const sAnims_GRIMMSNARL[] = -{ - sAnim_GeneralFrame0, - sAnim_GRIMMSNARL_1, -}; - -static const union AnimCmd *const sAnims_OBSTAGOON[] = -{ - sAnim_GeneralFrame0, - sAnim_OBSTAGOON_1, -}; - -static const union AnimCmd *const sAnims_PERRSERKER[] = -{ - sAnim_GeneralFrame0, - sAnim_PERRSERKER_1, -}; - -static const union AnimCmd *const sAnims_CURSOLA[] = -{ - sAnim_GeneralFrame0, - sAnim_CURSOLA_1, -}; - -static const union AnimCmd *const sAnims_SIRFETCHD[] = -{ - sAnim_GeneralFrame0, - sAnim_SIRFETCHD_1, -}; - -static const union AnimCmd *const sAnims_MR_RIME[] = -{ - sAnim_GeneralFrame0, - sAnim_MR_RIME_1, -}; - -static const union AnimCmd *const sAnims_RUNERIGUS[] = -{ - sAnim_GeneralFrame0, - sAnim_RUNERIGUS_1, -}; - -static const union AnimCmd *const sAnims_MILCERY[] = -{ - sAnim_GeneralFrame0, - sAnim_MILCERY_1, -}; - -static const union AnimCmd *const sAnims_ALCREMIE[] = -{ - sAnim_GeneralFrame0, - sAnim_ALCREMIE_1, -}; - -static const union AnimCmd *const sAnims_FALINKS[] = -{ - sAnim_GeneralFrame0, - sAnim_FALINKS_1, -}; - -static const union AnimCmd *const sAnims_PINCURCHIN[] = -{ - sAnim_GeneralFrame0, - sAnim_PINCURCHIN_1, -}; - -static const union AnimCmd *const sAnims_SNOM[] = -{ - sAnim_GeneralFrame0, - sAnim_SNOM_1, -}; - -static const union AnimCmd *const sAnims_FROSMOTH[] = -{ - sAnim_GeneralFrame0, - sAnim_FROSMOTH_1, -}; - -static const union AnimCmd *const sAnims_STONJOURNER[] = -{ - sAnim_GeneralFrame0, - sAnim_STONJOURNER_1, -}; - -static const union AnimCmd *const sAnims_EISCUE[] = -{ - sAnim_GeneralFrame0, - sAnim_EISCUE_1, -}; - -static const union AnimCmd *const sAnims_INDEEDEE[] = -{ - sAnim_GeneralFrame0, - sAnim_INDEEDEE_1, -}; - -static const union AnimCmd *const sAnims_MORPEKO[] = -{ - sAnim_GeneralFrame0, - sAnim_MORPEKO_1, -}; - -static const union AnimCmd *const sAnims_CUFANT[] = -{ - sAnim_GeneralFrame0, - sAnim_CUFANT_1, -}; - -static const union AnimCmd *const sAnims_COPPERAJAH[] = -{ - sAnim_GeneralFrame0, - sAnim_COPPERAJAH_1, -}; - -static const union AnimCmd *const sAnims_DRACOZOLT[] = -{ - sAnim_GeneralFrame0, - sAnim_DRACOZOLT_1, -}; - -static const union AnimCmd *const sAnims_ARCTOZOLT[] = -{ - sAnim_GeneralFrame0, - sAnim_ARCTOZOLT_1, -}; - -static const union AnimCmd *const sAnims_DRACOVISH[] = -{ - sAnim_GeneralFrame0, - sAnim_DRACOVISH_1, -}; - -static const union AnimCmd *const sAnims_ARCTOVISH[] = -{ - sAnim_GeneralFrame0, - sAnim_ARCTOVISH_1, -}; - -static const union AnimCmd *const sAnims_DURALUDON[] = -{ - sAnim_GeneralFrame0, - sAnim_DURALUDON_1, -}; - -static const union AnimCmd *const sAnims_DREEPY[] = -{ - sAnim_GeneralFrame0, - sAnim_DREEPY_1, -}; - -static const union AnimCmd *const sAnims_DRAKLOAK[] = -{ - sAnim_GeneralFrame0, - sAnim_DRAKLOAK_1, -}; - -static const union AnimCmd *const sAnims_DRAGAPULT[] = -{ - sAnim_GeneralFrame0, - sAnim_DRAGAPULT_1, -}; - -static const union AnimCmd *const sAnims_ZACIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_ZACIAN_1, -}; - -static const union AnimCmd *const sAnims_ZAMAZENTA[] = -{ - sAnim_GeneralFrame0, - sAnim_ZAMAZENTA_1, -}; - -static const union AnimCmd *const sAnims_ETERNATUS[] = -{ - sAnim_GeneralFrame0, - sAnim_ETERNATUS_1, -}; - -static const union AnimCmd *const sAnims_KUBFU[] = -{ - sAnim_GeneralFrame0, - sAnim_KUBFU_1, -}; - -static const union AnimCmd *const sAnims_URSHIFU[] = -{ - sAnim_GeneralFrame0, - sAnim_URSHIFU_1, -}; - -static const union AnimCmd *const sAnims_ZARUDE[] = -{ - sAnim_GeneralFrame0, - sAnim_ZARUDE_1, -}; - -static const union AnimCmd *const sAnims_REGIELEKI[] = -{ - sAnim_GeneralFrame0, - sAnim_REGIELEKI_1, -}; - -static const union AnimCmd *const sAnims_REGIDRAGO[] = -{ - sAnim_GeneralFrame0, - sAnim_REGIDRAGO_1, -}; - -static const union AnimCmd *const sAnims_GLASTRIER[] = -{ - sAnim_GeneralFrame0, - sAnim_GLASTRIER_1, -}; - -static const union AnimCmd *const sAnims_SPECTRIER[] = -{ - sAnim_GeneralFrame0, - sAnim_SPECTRIER_1, -}; - -static const union AnimCmd *const sAnims_CALYREX[] = -{ - sAnim_GeneralFrame0, - 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, -}; -#endif - -static const union AnimCmd *const sAnims_VENUSAUR_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_VENUSAUR_MEGA_1, -}; - -static const union AnimCmd *const sAnims_CHARIZARD_MEGA_X[] = -{ - sAnim_GeneralFrame0, - sAnim_CHARIZARD_MEGA_X_1, -}; - -static const union AnimCmd *const sAnims_CHARIZARD_MEGA_Y[] = -{ - sAnim_GeneralFrame0, - sAnim_CHARIZARD_MEGA_Y_1, -}; - -static const union AnimCmd *const sAnims_BLASTOISE_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_BLASTOISE_MEGA_1, -}; - -static const union AnimCmd *const sAnims_BEEDRILL_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_BEEDRILL_MEGA_1, -}; - -static const union AnimCmd *const sAnims_PIDGEOT_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_PIDGEOT_MEGA_1, -}; - -static const union AnimCmd *const sAnims_ALAKAZAM_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_ALAKAZAM_MEGA_1, -}; - -static const union AnimCmd *const sAnims_SLOWBRO_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_SLOWBRO_MEGA_1, -}; - -static const union AnimCmd *const sAnims_GENGAR_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_GENGAR_MEGA_1, -}; - -static const union AnimCmd *const sAnims_KANGASKHAN_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_KANGASKHAN_MEGA_1, -}; - -static const union AnimCmd *const sAnims_PINSIR_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_PINSIR_MEGA_1, -}; - -static const union AnimCmd *const sAnims_GYARADOS_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_GYARADOS_MEGA_1, -}; - -static const union AnimCmd *const sAnims_AERODACTYL_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_AERODACTYL_MEGA_1, -}; - -static const union AnimCmd *const sAnims_MEWTWO_MEGA_X[] = -{ - sAnim_GeneralFrame0, - sAnim_MEWTWO_MEGA_X_1, -}; - -static const union AnimCmd *const sAnims_MEWTWO_MEGA_Y[] = -{ - sAnim_GeneralFrame0, - sAnim_MEWTWO_MEGA_Y_1, -}; - -static const union AnimCmd *const sAnims_AMPHAROS_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_AMPHAROS_MEGA_1, -}; - -static const union AnimCmd *const sAnims_STEELIX_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_STEELIX_MEGA_1, -}; - -static const union AnimCmd *const sAnims_SCIZOR_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_SCIZOR_MEGA_1, -}; - -static const union AnimCmd *const sAnims_HERACROSS_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_HERACROSS_MEGA_1, -}; - -static const union AnimCmd *const sAnims_HOUNDOOM_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_HOUNDOOM_MEGA_1, -}; - -static const union AnimCmd *const sAnims_TYRANITAR_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_TYRANITAR_MEGA_1, -}; - -static const union AnimCmd *const sAnims_SCEPTILE_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_SCEPTILE_MEGA_1, -}; - -static const union AnimCmd *const sAnims_BLAZIKEN_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_BLAZIKEN_MEGA_1, -}; - -static const union AnimCmd *const sAnims_SWAMPERT_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_SWAMPERT_MEGA_1, -}; - -static const union AnimCmd *const sAnims_GARDEVOIR_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_GARDEVOIR_MEGA_1, -}; - -static const union AnimCmd *const sAnims_SABLEYE_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_SABLEYE_MEGA_1, -}; - -static const union AnimCmd *const sAnims_MAWILE_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_MAWILE_MEGA_1, -}; - -static const union AnimCmd *const sAnims_AGGRON_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_AGGRON_MEGA_1, -}; - -static const union AnimCmd *const sAnims_MEDICHAM_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_MEDICHAM_MEGA_1, -}; - -static const union AnimCmd *const sAnims_MANECTRIC_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_MANECTRIC_MEGA_1, -}; - -static const union AnimCmd *const sAnims_SHARPEDO_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_SHARPEDO_MEGA_1, -}; - -static const union AnimCmd *const sAnims_CAMERUPT_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_CAMERUPT_MEGA_1, -}; - -static const union AnimCmd *const sAnims_ALTARIA_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_ALTARIA_MEGA_1, -}; - -static const union AnimCmd *const sAnims_BANETTE_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_BANETTE_MEGA_1, -}; - -static const union AnimCmd *const sAnims_ABSOL_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_ABSOL_MEGA_1, -}; - -static const union AnimCmd *const sAnims_GLALIE_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_GLALIE_MEGA_1, -}; - -static const union AnimCmd *const sAnims_SALAMENCE_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_SALAMENCE_MEGA_1, -}; - -static const union AnimCmd *const sAnims_METAGROSS_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_METAGROSS_MEGA_1, -}; - -static const union AnimCmd *const sAnims_LATIAS_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_LATIAS_MEGA_1, -}; - -static const union AnimCmd *const sAnims_LATIOS_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_LATIOS_MEGA_1, -}; - -static const union AnimCmd *const sAnims_KYOGRE_PRIMAL[] = -{ - sAnim_GeneralFrame0, - sAnim_KYOGRE_PRIMAL_1, -}; - -static const union AnimCmd *const sAnims_GROUDON_PRIMAL[] = -{ - sAnim_GeneralFrame0, - sAnim_GROUDON_PRIMAL_1, -}; - -static const union AnimCmd *const sAnims_RAYQUAZA_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_RAYQUAZA_MEGA_1, -}; - -#if P_GEN_4_POKEMON == TRUE -static const union AnimCmd *const sAnims_LOPUNNY_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_LOPUNNY_MEGA_1, -}; - -static const union AnimCmd *const sAnims_GARCHOMP_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_GARCHOMP_MEGA_1, -}; - -static const union AnimCmd *const sAnims_LUCARIO_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_LUCARIO_MEGA_1, -}; - -static const union AnimCmd *const sAnims_ABOMASNOW_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_ABOMASNOW_MEGA_1, -}; - -static const union AnimCmd *const sAnims_GALLADE_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_GALLADE_MEGA_1, -}; -#endif - -#if P_GEN_5_POKEMON == TRUE -static const union AnimCmd *const sAnims_AUDINO_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_AUDINO_MEGA_1, -}; -#endif - -#if P_GEN_6_POKEMON == TRUE -static const union AnimCmd *const sAnims_DIANCIE_MEGA[] = -{ - sAnim_GeneralFrame0, - sAnim_DIANCIE_MEGA_1, -}; -#endif - -static const union AnimCmd *const sAnims_RATTATA_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_RATTATA_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_RATICATE_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_RATICATE_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_RAICHU_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_RAICHU_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_SANDSHREW_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_SANDSHREW_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_SANDSLASH_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_SANDSLASH_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_VULPIX_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_VULPIX_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_NINETALES_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_NINETALES_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_DIGLETT_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_DIGLETT_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_DUGTRIO_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_DUGTRIO_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_MEOWTH_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_MEOWTH_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_PERSIAN_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_PERSIAN_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_GEODUDE_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_GEODUDE_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_GRAVELER_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_GRAVELER_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_GOLEM_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_GOLEM_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_GRIMER_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_GRIMER_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_MUK_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_MUK_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_EXEGGUTOR_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_EXEGGUTOR_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_MAROWAK_ALOLAN[] = -{ - sAnim_GeneralFrame0, - sAnim_MAROWAK_ALOLAN_1, -}; - -static const union AnimCmd *const sAnims_MEOWTH_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_MEOWTH_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_PONYTA_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_PONYTA_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_RAPIDASH_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_RAPIDASH_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_SLOWPOKE_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_SLOWPOKE_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_SLOWBRO_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_SLOWBRO_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_FARFETCHD_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_FARFETCHD_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_WEEZING_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_WEEZING_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_MR_MIME_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_MR_MIME_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_ARTICUNO_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_ARTICUNO_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_ZAPDOS_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_ZAPDOS_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_MOLTRES_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_MOLTRES_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_SLOWKING_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_SLOWKING_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_CORSOLA_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_CORSOLA_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_ZIGZAGOON_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_ZIGZAGOON_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_LINOONE_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_LINOONE_GALARIAN_1, -}; - -#if P_GEN_5_POKEMON == TRUE -static const union AnimCmd *const sAnims_DARUMAKA_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_DARUMAKA_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_DARMANITAN_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_DARMANITAN_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_YAMASK_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_YAMASK_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_STUNFISK_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_STUNFISK_GALARIAN_1, -}; -#endif - -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, -}; - -#if P_GEN_5_POKEMON == TRUE -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, -}; -#endif - -#if P_GEN_6_POKEMON == TRUE -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, -}; -#endif - -#if P_GEN_7_POKEMON == TRUE -static const union AnimCmd *const sAnims_DECIDUEYE_HISUIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_DECIDUEYE_HISUIAN_1, -}; -#endif - -static const union AnimCmd *const sAnims_PIKACHU_COSPLAY[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_COSPLAY_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_ROCK_STAR[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_ROCK_STAR_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_BELLE[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_BELLE_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_POP_STAR[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_POP_STAR_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_PH_D[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_PH_D_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_LIBRE[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_LIBRE_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_ORIGINAL_CAP[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_ORIGINAL_CAP_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_HOENN_CAP[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_HOENN_CAP_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_SINNOH_CAP[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_SINNOH_CAP_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_UNOVA_CAP[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_UNOVA_CAP_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_KALOS_CAP[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_KALOS_CAP_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_ALOLA_CAP[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_ALOLA_CAP_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_PARTNER_CAP[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_PARTNER_CAP_1, -}; - -static const union AnimCmd *const sAnims_PIKACHU_WORLD_CAP[] = -{ - sAnim_GeneralFrame0, - sAnim_PIKACHU_WORLD_CAP_1, -}; - -static const union AnimCmd *const sAnims_PICHU_SPIKY_EARED[] = { - sAnim_GeneralFrame0, - sAnim_PICHU_SPIKY_EARED_1, -}; -static const union AnimCmd *const sAnims_DEOXYS_ATTACK[] = -{ - sAnim_GeneralFrame0, - sAnim_DEOXYS_ATTACK_1, - sAnim_DEOXYS_ATTACK_2, -}; - -static const union AnimCmd *const sAnims_DEOXYS_DEFENSE[] = -{ - sAnim_GeneralFrame0, - sAnim_DEOXYS_DEFENSE_1, - sAnim_DEOXYS_DEFENSE_2, -}; - -static const union AnimCmd *const sAnims_DEOXYS_SPEED[] = -{ - sAnim_GeneralFrame0, - sAnim_DEOXYS_SPEED_1, - sAnim_DEOXYS_SPEED_2, -}; - -#if P_GEN_4_POKEMON == TRUE -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, - sAnim_GIRATINA_ORIGIN_2, -}; - -static const union AnimCmd *const sAnims_SHAYMIN_SKY[] = -{ - sAnim_GeneralFrame0, - sAnim_SHAYMIN_SKY_1, -}; -#endif - -#if P_GEN_5_POKEMON == TRUE -static const union AnimCmd *const sAnims_DARMANITAN_ZEN_MODE[] = -{ - sAnim_GeneralFrame0, - sAnim_DARMANITAN_ZEN_MODE_1, -}; - -static const union AnimCmd *const sAnims_DARMANITAN_ZEN_MODE_GALARIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_DARMANITAN_ZEN_MODE_GALARIAN_1, -}; - -static const union AnimCmd *const sAnims_TORNADUS_THERIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_TORNADUS_THERIAN_1, -}; - -static const union AnimCmd *const sAnims_THUNDURUS_THERIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_THUNDURUS_THERIAN_1, -}; - -static const union AnimCmd *const sAnims_LANDORUS_THERIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_LANDORUS_THERIAN_1, -}; - -static const union AnimCmd *const sAnims_KYUREM_BLACK[] = -{ - sAnim_GeneralFrame0, - sAnim_KYUREM_BLACK_1, -}; - -static const union AnimCmd *const sAnims_KYUREM_WHITE[] = -{ - sAnim_GeneralFrame0, - sAnim_KYUREM_WHITE_1, -}; - -static const union AnimCmd *const sAnims_KELDEO_RESOLUTE[] = -{ - sAnim_GeneralFrame0, - sAnim_KELDEO_RESOLUTE_1, -}; - -static const union AnimCmd *const sAnims_MELOETTA_PIROUETTE[] = -{ - sAnim_GeneralFrame0, - sAnim_MELOETTA_PIROUETTE_1, -}; -#endif - -#if P_GEN_6_POKEMON == TRUE -static const union AnimCmd *const sAnims_AEGISLASH_BLADE[] = -{ - sAnim_GeneralFrame0, - sAnim_AEGISLASH_BLADE_1, -}; - -static const union AnimCmd *const sAnims_ZYGARDE_10[] = -{ - sAnim_GeneralFrame0, - sAnim_ZYGARDE_10_1, -}; - -static const union AnimCmd *const sAnims_ZYGARDE_COMPLETE[] = -{ - sAnim_GeneralFrame0, - sAnim_ZYGARDE_COMPLETE_1, -}; - -static const union AnimCmd *const sAnims_HOOPA_UNBOUND[] = -{ - sAnim_GeneralFrame0, - sAnim_HOOPA_UNBOUND_1, -}; -#endif - -#if P_GEN_7_POKEMON == TRUE -static const union AnimCmd *const sAnims_MINIOR_CORE[] = -{ - sAnim_GeneralFrame0, - sAnim_MINIOR_CORE_1, -}; - -static const union AnimCmd *const sAnims_WISHIWASHI_SCHOOL[] = -{ - sAnim_GeneralFrame0, - sAnim_WISHIWASHI_SCHOOL_1, -}; - -static const union AnimCmd *const sAnims_MIMIKYU_BUSTED[] = -{ - sAnim_GeneralFrame0, - sAnim_MIMIKYU_BUSTED_1, -}; - -static const union AnimCmd *const sAnims_LYCANROC_MIDNIGHT[] = -{ - sAnim_GeneralFrame0, - sAnim_LYCANROC_MIDNIGHT_1, -}; - -static const union AnimCmd *const sAnims_LYCANROC_DUSK[] = -{ - sAnim_GeneralFrame0, - sAnim_LYCANROC_DUSK_1, -}; -#endif - -#if P_GEN_8_POKEMON == TRUE -static const union AnimCmd *const sAnims_ENAMORUS_THERIAN[] = -{ - sAnim_GeneralFrame0, - sAnim_ENAMORUS_THERIAN_1, -}; -#endif - -#define ANIM_CMD(name) [SPECIES_##name] = sAnims_##name -#define ANIM_CMD_FULL(name, anims) [SPECIES_##name] = anims - -const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = -{ - ANIM_CMD(NONE), - ANIM_CMD(BULBASAUR), - ANIM_CMD(IVYSAUR), - ANIM_CMD(VENUSAUR), - ANIM_CMD(CHARMANDER), - ANIM_CMD(CHARMELEON), - ANIM_CMD(CHARIZARD), - ANIM_CMD(SQUIRTLE), - ANIM_CMD(WARTORTLE), - ANIM_CMD(BLASTOISE), - ANIM_CMD(CATERPIE), - ANIM_CMD(METAPOD), - ANIM_CMD(BUTTERFREE), - ANIM_CMD(WEEDLE), - ANIM_CMD(KAKUNA), - ANIM_CMD(BEEDRILL), - ANIM_CMD(PIDGEY), - ANIM_CMD(PIDGEOTTO), - ANIM_CMD(PIDGEOT), - ANIM_CMD(RATTATA), - ANIM_CMD(RATICATE), - ANIM_CMD(SPEAROW), - ANIM_CMD(FEAROW), - ANIM_CMD(EKANS), - ANIM_CMD(ARBOK), - ANIM_CMD(PIKACHU), - ANIM_CMD(RAICHU), - ANIM_CMD(SANDSHREW), - ANIM_CMD(SANDSLASH), - ANIM_CMD(NIDORAN_F), - ANIM_CMD(NIDORINA), - ANIM_CMD(NIDOQUEEN), - ANIM_CMD(NIDORAN_M), - ANIM_CMD(NIDORINO), - ANIM_CMD(NIDOKING), - ANIM_CMD(CLEFAIRY), - ANIM_CMD(CLEFABLE), - ANIM_CMD(VULPIX), - ANIM_CMD(NINETALES), - ANIM_CMD(JIGGLYPUFF), - ANIM_CMD(WIGGLYTUFF), - ANIM_CMD(ZUBAT), - ANIM_CMD(GOLBAT), - ANIM_CMD(ODDISH), - ANIM_CMD(GLOOM), - ANIM_CMD(VILEPLUME), - ANIM_CMD(PARAS), - ANIM_CMD(PARASECT), - ANIM_CMD(VENONAT), - ANIM_CMD(VENOMOTH), - ANIM_CMD(DIGLETT), - ANIM_CMD(DUGTRIO), - ANIM_CMD(MEOWTH), - ANIM_CMD(PERSIAN), - ANIM_CMD(PSYDUCK), - ANIM_CMD(GOLDUCK), - ANIM_CMD(MANKEY), - ANIM_CMD(PRIMEAPE), - ANIM_CMD(GROWLITHE), - ANIM_CMD(ARCANINE), - ANIM_CMD(POLIWAG), - ANIM_CMD(POLIWHIRL), - ANIM_CMD(POLIWRATH), - ANIM_CMD(ABRA), - ANIM_CMD(KADABRA), - ANIM_CMD(ALAKAZAM), - ANIM_CMD(MACHOP), - ANIM_CMD(MACHOKE), - ANIM_CMD(MACHAMP), - ANIM_CMD(BELLSPROUT), - ANIM_CMD(WEEPINBELL), - ANIM_CMD(VICTREEBEL), - ANIM_CMD(TENTACOOL), - ANIM_CMD(TENTACRUEL), - ANIM_CMD(GEODUDE), - ANIM_CMD(GRAVELER), - ANIM_CMD(GOLEM), - ANIM_CMD(PONYTA), - ANIM_CMD(RAPIDASH), - ANIM_CMD(SLOWPOKE), - ANIM_CMD(SLOWBRO), - ANIM_CMD(MAGNEMITE), - ANIM_CMD(MAGNETON), - ANIM_CMD(FARFETCHD), - ANIM_CMD(DODUO), - ANIM_CMD(DODRIO), - ANIM_CMD(SEEL), - ANIM_CMD(DEWGONG), - ANIM_CMD(GRIMER), - ANIM_CMD(MUK), - ANIM_CMD(SHELLDER), - ANIM_CMD(CLOYSTER), - ANIM_CMD(GASTLY), - ANIM_CMD(HAUNTER), - ANIM_CMD(GENGAR), - ANIM_CMD(ONIX), - ANIM_CMD(DROWZEE), - ANIM_CMD(HYPNO), - ANIM_CMD(KRABBY), - ANIM_CMD(KINGLER), - ANIM_CMD(VOLTORB), - ANIM_CMD(ELECTRODE), - ANIM_CMD(EXEGGCUTE), - ANIM_CMD(EXEGGUTOR), - ANIM_CMD(CUBONE), - ANIM_CMD(MAROWAK), - ANIM_CMD(HITMONLEE), - ANIM_CMD(HITMONCHAN), - ANIM_CMD(LICKITUNG), - ANIM_CMD(KOFFING), - ANIM_CMD(WEEZING), - ANIM_CMD(RHYHORN), - ANIM_CMD(RHYDON), - ANIM_CMD(CHANSEY), - ANIM_CMD(TANGELA), - ANIM_CMD(KANGASKHAN), - ANIM_CMD(HORSEA), - ANIM_CMD(SEADRA), - ANIM_CMD(GOLDEEN), - ANIM_CMD(SEAKING), - ANIM_CMD(STARYU), - ANIM_CMD(STARMIE), - ANIM_CMD(MR_MIME), - ANIM_CMD(SCYTHER), - ANIM_CMD(JYNX), - ANIM_CMD(ELECTABUZZ), - ANIM_CMD(MAGMAR), - ANIM_CMD(PINSIR), - ANIM_CMD(TAUROS), - ANIM_CMD(MAGIKARP), - ANIM_CMD(GYARADOS), - ANIM_CMD(LAPRAS), - ANIM_CMD(DITTO), - ANIM_CMD(EEVEE), - ANIM_CMD(VAPOREON), - ANIM_CMD(JOLTEON), - ANIM_CMD(FLAREON), - ANIM_CMD(PORYGON), - ANIM_CMD(OMANYTE), - ANIM_CMD(OMASTAR), - ANIM_CMD(KABUTO), - ANIM_CMD(KABUTOPS), - ANIM_CMD(AERODACTYL), - ANIM_CMD(SNORLAX), - ANIM_CMD(ARTICUNO), - ANIM_CMD(ZAPDOS), - ANIM_CMD(MOLTRES), - ANIM_CMD(DRATINI), - ANIM_CMD(DRAGONAIR), - ANIM_CMD(DRAGONITE), - ANIM_CMD(MEWTWO), - ANIM_CMD(MEW), - ANIM_CMD(CHIKORITA), - ANIM_CMD(BAYLEEF), - ANIM_CMD(MEGANIUM), - ANIM_CMD(CYNDAQUIL), - ANIM_CMD(QUILAVA), - ANIM_CMD(TYPHLOSION), - ANIM_CMD(TOTODILE), - ANIM_CMD(CROCONAW), - ANIM_CMD(FERALIGATR), - ANIM_CMD(SENTRET), - ANIM_CMD(FURRET), - ANIM_CMD(HOOTHOOT), - ANIM_CMD(NOCTOWL), - ANIM_CMD(LEDYBA), - ANIM_CMD(LEDIAN), - ANIM_CMD(SPINARAK), - ANIM_CMD(ARIADOS), - ANIM_CMD(CROBAT), - ANIM_CMD(CHINCHOU), - ANIM_CMD(LANTURN), - ANIM_CMD(PICHU), - ANIM_CMD(CLEFFA), - ANIM_CMD(IGGLYBUFF), - ANIM_CMD(TOGEPI), - ANIM_CMD(TOGETIC), - ANIM_CMD(NATU), - ANIM_CMD(XATU), - ANIM_CMD(MAREEP), - ANIM_CMD(FLAAFFY), - ANIM_CMD(AMPHAROS), - ANIM_CMD(BELLOSSOM), - ANIM_CMD(MARILL), - ANIM_CMD(AZUMARILL), - ANIM_CMD(SUDOWOODO), - ANIM_CMD(POLITOED), - ANIM_CMD(HOPPIP), - ANIM_CMD(SKIPLOOM), - ANIM_CMD(JUMPLUFF), - ANIM_CMD(AIPOM), - ANIM_CMD(SUNKERN), - ANIM_CMD(SUNFLORA), - ANIM_CMD(YANMA), - ANIM_CMD(WOOPER), - ANIM_CMD(QUAGSIRE), - ANIM_CMD(ESPEON), - ANIM_CMD(UMBREON), - ANIM_CMD(MURKROW), - ANIM_CMD(SLOWKING), - ANIM_CMD(MISDREAVUS), - ANIM_CMD(UNOWN), - ANIM_CMD(WOBBUFFET), - ANIM_CMD(GIRAFARIG), - ANIM_CMD(PINECO), - ANIM_CMD(FORRETRESS), - ANIM_CMD(DUNSPARCE), - ANIM_CMD(GLIGAR), - ANIM_CMD(STEELIX), - ANIM_CMD(SNUBBULL), - ANIM_CMD(GRANBULL), - ANIM_CMD(QWILFISH), - ANIM_CMD(SCIZOR), - ANIM_CMD(SHUCKLE), - ANIM_CMD(HERACROSS), - ANIM_CMD(SNEASEL), - ANIM_CMD(TEDDIURSA), - ANIM_CMD(URSARING), - ANIM_CMD(SLUGMA), - ANIM_CMD(MAGCARGO), - ANIM_CMD(SWINUB), - ANIM_CMD(PILOSWINE), - ANIM_CMD(CORSOLA), - ANIM_CMD(REMORAID), - ANIM_CMD(OCTILLERY), - ANIM_CMD(DELIBIRD), - ANIM_CMD(MANTINE), - ANIM_CMD(SKARMORY), - ANIM_CMD(HOUNDOUR), - ANIM_CMD(HOUNDOOM), - ANIM_CMD(KINGDRA), - ANIM_CMD(PHANPY), - ANIM_CMD(DONPHAN), - ANIM_CMD(PORYGON2), - ANIM_CMD(STANTLER), - ANIM_CMD(SMEARGLE), - ANIM_CMD(TYROGUE), - ANIM_CMD(HITMONTOP), - ANIM_CMD(SMOOCHUM), - ANIM_CMD(ELEKID), - ANIM_CMD(MAGBY), - ANIM_CMD(MILTANK), - ANIM_CMD(BLISSEY), - ANIM_CMD(RAIKOU), - ANIM_CMD(ENTEI), - ANIM_CMD(SUICUNE), - ANIM_CMD(LARVITAR), - ANIM_CMD(PUPITAR), - ANIM_CMD(TYRANITAR), - ANIM_CMD(LUGIA), - ANIM_CMD(HO_OH), - ANIM_CMD(CELEBI), - ANIM_CMD(TREECKO), - ANIM_CMD(GROVYLE), - ANIM_CMD(SCEPTILE), - ANIM_CMD(TORCHIC), - ANIM_CMD(COMBUSKEN), - ANIM_CMD(BLAZIKEN), - ANIM_CMD(MUDKIP), - ANIM_CMD(MARSHTOMP), - ANIM_CMD(SWAMPERT), - ANIM_CMD(POOCHYENA), - ANIM_CMD(MIGHTYENA), - ANIM_CMD(ZIGZAGOON), - ANIM_CMD(LINOONE), - ANIM_CMD(WURMPLE), - ANIM_CMD(SILCOON), - ANIM_CMD(BEAUTIFLY), - ANIM_CMD(CASCOON), - ANIM_CMD(DUSTOX), - ANIM_CMD(LOTAD), - ANIM_CMD(LOMBRE), - ANIM_CMD(LUDICOLO), - ANIM_CMD(SEEDOT), - ANIM_CMD(NUZLEAF), - ANIM_CMD(SHIFTRY), - ANIM_CMD(NINCADA), - ANIM_CMD(NINJASK), - ANIM_CMD(SHEDINJA), - ANIM_CMD(TAILLOW), - ANIM_CMD(SWELLOW), - ANIM_CMD(SHROOMISH), - ANIM_CMD(BRELOOM), - ANIM_CMD(SPINDA), - ANIM_CMD(WINGULL), - ANIM_CMD(PELIPPER), - ANIM_CMD(SURSKIT), - ANIM_CMD(MASQUERAIN), - ANIM_CMD(WAILMER), - ANIM_CMD(WAILORD), - ANIM_CMD(SKITTY), - ANIM_CMD(DELCATTY), - ANIM_CMD(KECLEON), - ANIM_CMD(BALTOY), - ANIM_CMD(CLAYDOL), - ANIM_CMD(NOSEPASS), - ANIM_CMD(TORKOAL), - ANIM_CMD(SABLEYE), - ANIM_CMD(BARBOACH), - ANIM_CMD(WHISCASH), - ANIM_CMD(LUVDISC), - ANIM_CMD(CORPHISH), - ANIM_CMD(CRAWDAUNT), - ANIM_CMD(FEEBAS), - ANIM_CMD(MILOTIC), - ANIM_CMD(CARVANHA), - ANIM_CMD(SHARPEDO), - ANIM_CMD(TRAPINCH), - ANIM_CMD(VIBRAVA), - ANIM_CMD(FLYGON), - ANIM_CMD(MAKUHITA), - ANIM_CMD(HARIYAMA), - ANIM_CMD(ELECTRIKE), - ANIM_CMD(MANECTRIC), - ANIM_CMD(NUMEL), - ANIM_CMD(CAMERUPT), - ANIM_CMD(SPHEAL), - ANIM_CMD(SEALEO), - ANIM_CMD(WALREIN), - ANIM_CMD(CACNEA), - ANIM_CMD(CACTURNE), - ANIM_CMD(SNORUNT), - ANIM_CMD(GLALIE), - ANIM_CMD(LUNATONE), - ANIM_CMD(SOLROCK), - ANIM_CMD(AZURILL), - ANIM_CMD(SPOINK), - ANIM_CMD(GRUMPIG), - ANIM_CMD(PLUSLE), - ANIM_CMD(MINUN), - ANIM_CMD(MAWILE), - ANIM_CMD(MEDITITE), - ANIM_CMD(MEDICHAM), - ANIM_CMD(SWABLU), - ANIM_CMD(ALTARIA), - ANIM_CMD(WYNAUT), - ANIM_CMD(DUSKULL), - ANIM_CMD(DUSCLOPS), - ANIM_CMD(ROSELIA), - ANIM_CMD(SLAKOTH), - ANIM_CMD(VIGOROTH), - ANIM_CMD(SLAKING), - ANIM_CMD(GULPIN), - ANIM_CMD(SWALOT), - ANIM_CMD(TROPIUS), - ANIM_CMD(WHISMUR), - ANIM_CMD(LOUDRED), - ANIM_CMD(EXPLOUD), - ANIM_CMD(CLAMPERL), - ANIM_CMD(HUNTAIL), - ANIM_CMD(GOREBYSS), - ANIM_CMD(ABSOL), - ANIM_CMD(SHUPPET), - ANIM_CMD(BANETTE), - ANIM_CMD(SEVIPER), - ANIM_CMD(ZANGOOSE), - ANIM_CMD(RELICANTH), - ANIM_CMD(ARON), - ANIM_CMD(LAIRON), - ANIM_CMD(AGGRON), - ANIM_CMD(CASTFORM), - ANIM_CMD(VOLBEAT), - ANIM_CMD(ILLUMISE), - ANIM_CMD(LILEEP), - ANIM_CMD(CRADILY), - ANIM_CMD(ANORITH), - ANIM_CMD(ARMALDO), - ANIM_CMD(RALTS), - ANIM_CMD(KIRLIA), - ANIM_CMD(GARDEVOIR), - ANIM_CMD(BAGON), - ANIM_CMD(SHELGON), - ANIM_CMD(SALAMENCE), - ANIM_CMD(BELDUM), - ANIM_CMD(METANG), - ANIM_CMD(METAGROSS), - ANIM_CMD(REGIROCK), - ANIM_CMD(REGICE), - ANIM_CMD(REGISTEEL), - ANIM_CMD(KYOGRE), - ANIM_CMD(GROUDON), - ANIM_CMD(RAYQUAZA), - ANIM_CMD(LATIAS), - ANIM_CMD(LATIOS), - ANIM_CMD(JIRACHI), - ANIM_CMD(DEOXYS), - ANIM_CMD(CHIMECHO), -#if P_GEN_4_POKEMON == TRUE - ANIM_CMD(TURTWIG), - ANIM_CMD(GROTLE), - ANIM_CMD(TORTERRA), - ANIM_CMD(CHIMCHAR), - ANIM_CMD(MONFERNO), - ANIM_CMD(INFERNAPE), - ANIM_CMD(PIPLUP), - ANIM_CMD(PRINPLUP), - ANIM_CMD(EMPOLEON), - ANIM_CMD(STARLY), - ANIM_CMD(STARAVIA), - ANIM_CMD(STARAPTOR), - ANIM_CMD(BIDOOF), - ANIM_CMD(BIBAREL), - ANIM_CMD(KRICKETOT), - ANIM_CMD(KRICKETUNE), - ANIM_CMD(SHINX), - ANIM_CMD(LUXIO), - ANIM_CMD(LUXRAY), - ANIM_CMD(BUDEW), - ANIM_CMD(ROSERADE), - ANIM_CMD(CRANIDOS), - ANIM_CMD(RAMPARDOS), - ANIM_CMD(SHIELDON), - ANIM_CMD(BASTIODON), - ANIM_CMD(BURMY), - ANIM_CMD(WORMADAM), - ANIM_CMD(MOTHIM), - ANIM_CMD(COMBEE), - ANIM_CMD(VESPIQUEN), - ANIM_CMD(PACHIRISU), - ANIM_CMD(BUIZEL), - ANIM_CMD(FLOATZEL), - ANIM_CMD(CHERUBI), - ANIM_CMD(CHERRIM), - ANIM_CMD(SHELLOS), - ANIM_CMD(GASTRODON), - ANIM_CMD(AMBIPOM), - ANIM_CMD(DRIFLOON), - ANIM_CMD(DRIFBLIM), - ANIM_CMD(BUNEARY), - ANIM_CMD(LOPUNNY), - ANIM_CMD(MISMAGIUS), - ANIM_CMD(HONCHKROW), - ANIM_CMD(GLAMEOW), - ANIM_CMD(PURUGLY), - ANIM_CMD(CHINGLING), - ANIM_CMD(STUNKY), - ANIM_CMD(SKUNTANK), - ANIM_CMD(BRONZOR), - ANIM_CMD(BRONZONG), - ANIM_CMD(BONSLY), - ANIM_CMD(MIME_JR), - ANIM_CMD(HAPPINY), - ANIM_CMD(CHATOT), - ANIM_CMD(SPIRITOMB), - ANIM_CMD(GIBLE), - ANIM_CMD(GABITE), - ANIM_CMD(GARCHOMP), - ANIM_CMD(MUNCHLAX), - ANIM_CMD(RIOLU), - ANIM_CMD(LUCARIO), - ANIM_CMD(HIPPOPOTAS), - ANIM_CMD(HIPPOWDON), - ANIM_CMD(SKORUPI), - ANIM_CMD(DRAPION), - ANIM_CMD(CROAGUNK), - ANIM_CMD(TOXICROAK), - ANIM_CMD(CARNIVINE), - ANIM_CMD(FINNEON), - ANIM_CMD(LUMINEON), - ANIM_CMD(MANTYKE), - ANIM_CMD(SNOVER), - ANIM_CMD(ABOMASNOW), - ANIM_CMD(WEAVILE), - ANIM_CMD(MAGNEZONE), - ANIM_CMD(LICKILICKY), - ANIM_CMD(RHYPERIOR), - ANIM_CMD(TANGROWTH), - ANIM_CMD(ELECTIVIRE), - ANIM_CMD(MAGMORTAR), - ANIM_CMD(TOGEKISS), - ANIM_CMD(YANMEGA), - ANIM_CMD(LEAFEON), - ANIM_CMD(GLACEON), - ANIM_CMD(GLISCOR), - ANIM_CMD(MAMOSWINE), - ANIM_CMD(PORYGON_Z), - ANIM_CMD(GALLADE), - ANIM_CMD(PROBOPASS), - ANIM_CMD(DUSKNOIR), - ANIM_CMD(FROSLASS), - ANIM_CMD(ROTOM), - ANIM_CMD(UXIE), - ANIM_CMD(MESPRIT), - ANIM_CMD(AZELF), - ANIM_CMD(DIALGA), - ANIM_CMD(PALKIA), - ANIM_CMD(HEATRAN), - ANIM_CMD(REGIGIGAS), - ANIM_CMD(GIRATINA), - ANIM_CMD(CRESSELIA), - ANIM_CMD(PHIONE), - ANIM_CMD(MANAPHY), - ANIM_CMD(DARKRAI), - ANIM_CMD(SHAYMIN), - ANIM_CMD(ARCEUS), -#endif -#if P_GEN_5_POKEMON == TRUE - ANIM_CMD(VICTINI), - ANIM_CMD(SNIVY), - ANIM_CMD(SERVINE), - ANIM_CMD(SERPERIOR), - ANIM_CMD(TEPIG), - ANIM_CMD(PIGNITE), - ANIM_CMD(EMBOAR), - ANIM_CMD(OSHAWOTT), - ANIM_CMD(DEWOTT), - ANIM_CMD(SAMUROTT), - ANIM_CMD(PATRAT), - ANIM_CMD(WATCHOG), - ANIM_CMD(LILLIPUP), - ANIM_CMD(HERDIER), - ANIM_CMD(STOUTLAND), - ANIM_CMD(PURRLOIN), - ANIM_CMD(LIEPARD), - ANIM_CMD(PANSAGE), - ANIM_CMD(SIMISAGE), - ANIM_CMD(PANSEAR), - ANIM_CMD(SIMISEAR), - ANIM_CMD(PANPOUR), - ANIM_CMD(SIMIPOUR), - ANIM_CMD(MUNNA), - ANIM_CMD(MUSHARNA), - ANIM_CMD(PIDOVE), - ANIM_CMD(TRANQUILL), - ANIM_CMD(UNFEZANT), - ANIM_CMD(BLITZLE), - ANIM_CMD(ZEBSTRIKA), - ANIM_CMD(ROGGENROLA), - ANIM_CMD(BOLDORE), - ANIM_CMD(GIGALITH), - ANIM_CMD(WOOBAT), - ANIM_CMD(SWOOBAT), - ANIM_CMD(DRILBUR), - ANIM_CMD(EXCADRILL), - ANIM_CMD(AUDINO), - ANIM_CMD(TIMBURR), - ANIM_CMD(GURDURR), - ANIM_CMD(CONKELDURR), - ANIM_CMD(TYMPOLE), - ANIM_CMD(PALPITOAD), - ANIM_CMD(SEISMITOAD), - ANIM_CMD(THROH), - ANIM_CMD(SAWK), - ANIM_CMD(SEWADDLE), - ANIM_CMD(SWADLOON), - ANIM_CMD(LEAVANNY), - ANIM_CMD(VENIPEDE), - ANIM_CMD(WHIRLIPEDE), - ANIM_CMD(SCOLIPEDE), - ANIM_CMD(COTTONEE), - ANIM_CMD(WHIMSICOTT), - ANIM_CMD(PETILIL), - ANIM_CMD(LILLIGANT), - ANIM_CMD(BASCULIN), - ANIM_CMD(SANDILE), - ANIM_CMD(KROKOROK), - ANIM_CMD(KROOKODILE), - ANIM_CMD(DARUMAKA), - ANIM_CMD(DARMANITAN), - ANIM_CMD(MARACTUS), - ANIM_CMD(DWEBBLE), - ANIM_CMD(CRUSTLE), - ANIM_CMD(SCRAGGY), - ANIM_CMD(SCRAFTY), - ANIM_CMD(SIGILYPH), - ANIM_CMD(YAMASK), - ANIM_CMD(COFAGRIGUS), - ANIM_CMD(TIRTOUGA), - ANIM_CMD(CARRACOSTA), - ANIM_CMD(ARCHEN), - ANIM_CMD(ARCHEOPS), - ANIM_CMD(TRUBBISH), - ANIM_CMD(GARBODOR), - ANIM_CMD(ZORUA), - ANIM_CMD(ZOROARK), - ANIM_CMD(MINCCINO), - ANIM_CMD(CINCCINO), - ANIM_CMD(GOTHITA), - ANIM_CMD(GOTHORITA), - ANIM_CMD(GOTHITELLE), - ANIM_CMD(SOLOSIS), - ANIM_CMD(DUOSION), - ANIM_CMD(REUNICLUS), - ANIM_CMD(DUCKLETT), - ANIM_CMD(SWANNA), - ANIM_CMD(VANILLITE), - ANIM_CMD(VANILLISH), - ANIM_CMD(VANILLUXE), - ANIM_CMD(DEERLING), - ANIM_CMD(SAWSBUCK), - ANIM_CMD(EMOLGA), - ANIM_CMD(KARRABLAST), - ANIM_CMD(ESCAVALIER), - ANIM_CMD(FOONGUS), - ANIM_CMD(AMOONGUSS), - ANIM_CMD(FRILLISH), - ANIM_CMD(JELLICENT), - ANIM_CMD(ALOMOMOLA), - ANIM_CMD(JOLTIK), - ANIM_CMD(GALVANTULA), - ANIM_CMD(FERROSEED), - ANIM_CMD(FERROTHORN), - ANIM_CMD(KLINK), - ANIM_CMD(KLANG), - ANIM_CMD(KLINKLANG), - ANIM_CMD(TYNAMO), - ANIM_CMD(EELEKTRIK), - ANIM_CMD(EELEKTROSS), - ANIM_CMD(ELGYEM), - ANIM_CMD(BEHEEYEM), - ANIM_CMD(LITWICK), - ANIM_CMD(LAMPENT), - ANIM_CMD(CHANDELURE), - ANIM_CMD(AXEW), - ANIM_CMD(FRAXURE), - ANIM_CMD(HAXORUS), - ANIM_CMD(CUBCHOO), - ANIM_CMD(BEARTIC), - ANIM_CMD(CRYOGONAL), - ANIM_CMD(SHELMET), - ANIM_CMD(ACCELGOR), - ANIM_CMD(STUNFISK), - ANIM_CMD(MIENFOO), - ANIM_CMD(MIENSHAO), - ANIM_CMD(DRUDDIGON), - ANIM_CMD(GOLETT), - ANIM_CMD(GOLURK), - ANIM_CMD(PAWNIARD), - ANIM_CMD(BISHARP), - ANIM_CMD(BOUFFALANT), - ANIM_CMD(RUFFLET), - ANIM_CMD(BRAVIARY), - ANIM_CMD(VULLABY), - ANIM_CMD(MANDIBUZZ), - ANIM_CMD(HEATMOR), - ANIM_CMD(DURANT), - ANIM_CMD(DEINO), - ANIM_CMD(ZWEILOUS), - ANIM_CMD(HYDREIGON), - ANIM_CMD(LARVESTA), - ANIM_CMD(VOLCARONA), - ANIM_CMD(COBALION), - ANIM_CMD(TERRAKION), - ANIM_CMD(VIRIZION), - ANIM_CMD(TORNADUS), - ANIM_CMD(THUNDURUS), - ANIM_CMD(RESHIRAM), - ANIM_CMD(ZEKROM), - ANIM_CMD(LANDORUS), - ANIM_CMD(KYUREM), - ANIM_CMD(KELDEO), - ANIM_CMD(MELOETTA), - ANIM_CMD(GENESECT), -#endif -#if P_GEN_6_POKEMON == TRUE - ANIM_CMD(CHESPIN), - ANIM_CMD(QUILLADIN), - ANIM_CMD(CHESNAUGHT), - ANIM_CMD(FENNEKIN), - ANIM_CMD(BRAIXEN), - ANIM_CMD(DELPHOX), - ANIM_CMD(FROAKIE), - ANIM_CMD(FROGADIER), - ANIM_CMD(GRENINJA), - ANIM_CMD(BUNNELBY), - ANIM_CMD(DIGGERSBY), - ANIM_CMD(FLETCHLING), - ANIM_CMD(FLETCHINDER), - ANIM_CMD(TALONFLAME), - ANIM_CMD(SCATTERBUG), - ANIM_CMD(SPEWPA), - ANIM_CMD(VIVILLON), - ANIM_CMD(LITLEO), - ANIM_CMD(PYROAR), - ANIM_CMD(FLABEBE), - ANIM_CMD(FLOETTE), - ANIM_CMD(FLORGES), - ANIM_CMD(SKIDDO), - ANIM_CMD(GOGOAT), - ANIM_CMD(PANCHAM), - ANIM_CMD(PANGORO), - ANIM_CMD(FURFROU), - ANIM_CMD(ESPURR), - ANIM_CMD(MEOWSTIC), - ANIM_CMD(HONEDGE), - ANIM_CMD(DOUBLADE), - ANIM_CMD(AEGISLASH), - ANIM_CMD(SPRITZEE), - ANIM_CMD(AROMATISSE), - ANIM_CMD(SWIRLIX), - ANIM_CMD(SLURPUFF), - ANIM_CMD(INKAY), - ANIM_CMD(MALAMAR), - ANIM_CMD(BINACLE), - ANIM_CMD(BARBARACLE), - ANIM_CMD(SKRELP), - ANIM_CMD(DRAGALGE), - ANIM_CMD(CLAUNCHER), - ANIM_CMD(CLAWITZER), - ANIM_CMD(HELIOPTILE), - ANIM_CMD(HELIOLISK), - ANIM_CMD(TYRUNT), - ANIM_CMD(TYRANTRUM), - ANIM_CMD(AMAURA), - ANIM_CMD(AURORUS), - ANIM_CMD(SYLVEON), - ANIM_CMD(HAWLUCHA), - ANIM_CMD(DEDENNE), - ANIM_CMD(CARBINK), - ANIM_CMD(GOOMY), - ANIM_CMD(SLIGGOO), - ANIM_CMD(GOODRA), - ANIM_CMD(KLEFKI), - ANIM_CMD(PHANTUMP), - ANIM_CMD(TREVENANT), - ANIM_CMD(PUMPKABOO), - ANIM_CMD(GOURGEIST), - ANIM_CMD(BERGMITE), - ANIM_CMD(AVALUGG), - ANIM_CMD(NOIBAT), - ANIM_CMD(NOIVERN), - ANIM_CMD(XERNEAS), - ANIM_CMD(YVELTAL), - ANIM_CMD(ZYGARDE), - ANIM_CMD(DIANCIE), - ANIM_CMD(HOOPA), - ANIM_CMD(VOLCANION), -#endif -#if P_GEN_7_POKEMON == TRUE - ANIM_CMD(ROWLET), - ANIM_CMD(DARTRIX), - ANIM_CMD(DECIDUEYE), - ANIM_CMD(LITTEN), - ANIM_CMD(TORRACAT), - ANIM_CMD(INCINEROAR), - ANIM_CMD(POPPLIO), - ANIM_CMD(BRIONNE), - ANIM_CMD(PRIMARINA), - ANIM_CMD(PIKIPEK), - ANIM_CMD(TRUMBEAK), - ANIM_CMD(TOUCANNON), - ANIM_CMD(YUNGOOS), - ANIM_CMD(GUMSHOOS), - ANIM_CMD(GRUBBIN), - ANIM_CMD(CHARJABUG), - ANIM_CMD(VIKAVOLT), - ANIM_CMD(CRABRAWLER), - ANIM_CMD(CRABOMINABLE), - ANIM_CMD(ORICORIO), - ANIM_CMD(CUTIEFLY), - ANIM_CMD(RIBOMBEE), - ANIM_CMD(ROCKRUFF), - ANIM_CMD(LYCANROC), - ANIM_CMD(WISHIWASHI), - ANIM_CMD(MAREANIE), - ANIM_CMD(TOXAPEX), - ANIM_CMD(MUDBRAY), - ANIM_CMD(MUDSDALE), - ANIM_CMD(DEWPIDER), - ANIM_CMD(ARAQUANID), - ANIM_CMD(FOMANTIS), - ANIM_CMD(LURANTIS), - ANIM_CMD(MORELULL), - ANIM_CMD(SHIINOTIC), - ANIM_CMD(SALANDIT), - ANIM_CMD(SALAZZLE), - ANIM_CMD(STUFFUL), - ANIM_CMD(BEWEAR), - ANIM_CMD(BOUNSWEET), - ANIM_CMD(STEENEE), - ANIM_CMD(TSAREENA), - ANIM_CMD(COMFEY), - ANIM_CMD(ORANGURU), - ANIM_CMD(PASSIMIAN), - ANIM_CMD(WIMPOD), - ANIM_CMD(GOLISOPOD), - ANIM_CMD(SANDYGAST), - ANIM_CMD(PALOSSAND), - ANIM_CMD(PYUKUMUKU), - ANIM_CMD(TYPE_NULL), - ANIM_CMD(SILVALLY), - ANIM_CMD(MINIOR), - ANIM_CMD(KOMALA), - ANIM_CMD(TURTONATOR), - ANIM_CMD(TOGEDEMARU), - ANIM_CMD(MIMIKYU), - ANIM_CMD(BRUXISH), - ANIM_CMD(DRAMPA), - ANIM_CMD(DHELMISE), - ANIM_CMD(JANGMO_O), - ANIM_CMD(HAKAMO_O), - ANIM_CMD(KOMMO_O), - ANIM_CMD(TAPU_KOKO), - ANIM_CMD(TAPU_LELE), - ANIM_CMD(TAPU_BULU), - ANIM_CMD(TAPU_FINI), - ANIM_CMD(COSMOG), - ANIM_CMD(COSMOEM), - ANIM_CMD(SOLGALEO), - ANIM_CMD(LUNALA), - ANIM_CMD(NIHILEGO), - ANIM_CMD(BUZZWOLE), - ANIM_CMD(PHEROMOSA), - ANIM_CMD(XURKITREE), - ANIM_CMD(CELESTEELA), - ANIM_CMD(KARTANA), - ANIM_CMD(GUZZLORD), - ANIM_CMD(NECROZMA), - ANIM_CMD(MAGEARNA), - ANIM_CMD(MARSHADOW), - ANIM_CMD(POIPOLE), - ANIM_CMD(NAGANADEL), - ANIM_CMD(STAKATAKA), - ANIM_CMD(BLACEPHALON), - ANIM_CMD(ZERAORA), - ANIM_CMD(MELTAN), - ANIM_CMD(MELMETAL), -#endif -#if P_GEN_8_POKEMON == TRUE - ANIM_CMD(GROOKEY), - ANIM_CMD(THWACKEY), - ANIM_CMD(RILLABOOM), - ANIM_CMD(SCORBUNNY), - ANIM_CMD(RABOOT), - ANIM_CMD(CINDERACE), - ANIM_CMD(SOBBLE), - ANIM_CMD(DRIZZILE), - ANIM_CMD(INTELEON), - ANIM_CMD(SKWOVET), - ANIM_CMD(GREEDENT), - ANIM_CMD(ROOKIDEE), - ANIM_CMD(CORVISQUIRE), - ANIM_CMD(CORVIKNIGHT), - ANIM_CMD(BLIPBUG), - ANIM_CMD(DOTTLER), - ANIM_CMD(ORBEETLE), - ANIM_CMD(NICKIT), - ANIM_CMD(THIEVUL), - ANIM_CMD(GOSSIFLEUR), - ANIM_CMD(ELDEGOSS), - ANIM_CMD(WOOLOO), - ANIM_CMD(DUBWOOL), - ANIM_CMD(CHEWTLE), - ANIM_CMD(DREDNAW), - ANIM_CMD(YAMPER), - ANIM_CMD(BOLTUND), - ANIM_CMD(ROLYCOLY), - ANIM_CMD(CARKOL), - ANIM_CMD(COALOSSAL), - ANIM_CMD(APPLIN), - ANIM_CMD(FLAPPLE), - ANIM_CMD(APPLETUN), - ANIM_CMD(SILICOBRA), - ANIM_CMD(SANDACONDA), - ANIM_CMD(CRAMORANT), - ANIM_CMD(ARROKUDA), - ANIM_CMD(BARRASKEWDA), - ANIM_CMD(TOXEL), - ANIM_CMD(TOXTRICITY), - ANIM_CMD(SIZZLIPEDE), - ANIM_CMD(CENTISKORCH), - ANIM_CMD(CLOBBOPUS), - ANIM_CMD(GRAPPLOCT), - ANIM_CMD(SINISTEA), - ANIM_CMD(POLTEAGEIST), - ANIM_CMD(HATENNA), - ANIM_CMD(HATTREM), - ANIM_CMD(HATTERENE), - ANIM_CMD(IMPIDIMP), - ANIM_CMD(MORGREM), - ANIM_CMD(GRIMMSNARL), - ANIM_CMD(OBSTAGOON), - ANIM_CMD(PERRSERKER), - ANIM_CMD(CURSOLA), - ANIM_CMD(SIRFETCHD), - ANIM_CMD(MR_RIME), - ANIM_CMD(RUNERIGUS), - ANIM_CMD(MILCERY), - ANIM_CMD(ALCREMIE), - ANIM_CMD(FALINKS), - ANIM_CMD(PINCURCHIN), - ANIM_CMD(SNOM), - ANIM_CMD(FROSMOTH), - ANIM_CMD(STONJOURNER), - ANIM_CMD(EISCUE), - ANIM_CMD(INDEEDEE), - ANIM_CMD(MORPEKO), - ANIM_CMD(CUFANT), - ANIM_CMD(COPPERAJAH), - ANIM_CMD(DRACOZOLT), - ANIM_CMD(ARCTOZOLT), - ANIM_CMD(DRACOVISH), - ANIM_CMD(ARCTOVISH), - ANIM_CMD(DURALUDON), - ANIM_CMD(DREEPY), - ANIM_CMD(DRAKLOAK), - ANIM_CMD(DRAGAPULT), - ANIM_CMD(ZACIAN), - ANIM_CMD(ZAMAZENTA), - ANIM_CMD(ETERNATUS), - ANIM_CMD(KUBFU), - ANIM_CMD(URSHIFU), - ANIM_CMD(ZARUDE), - ANIM_CMD(REGIELEKI), - ANIM_CMD(REGIDRAGO), - 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), -#endif - ANIM_CMD(VENUSAUR_MEGA), - ANIM_CMD(CHARIZARD_MEGA_X), - ANIM_CMD(CHARIZARD_MEGA_Y), - ANIM_CMD(BLASTOISE_MEGA), - ANIM_CMD(BEEDRILL_MEGA), - ANIM_CMD(PIDGEOT_MEGA), - ANIM_CMD(ALAKAZAM_MEGA), - ANIM_CMD(SLOWBRO_MEGA), - ANIM_CMD(GENGAR_MEGA), - ANIM_CMD(KANGASKHAN_MEGA), - ANIM_CMD(PINSIR_MEGA), - ANIM_CMD(GYARADOS_MEGA), - ANIM_CMD(AERODACTYL_MEGA), - ANIM_CMD(MEWTWO_MEGA_X), - ANIM_CMD(MEWTWO_MEGA_Y), - ANIM_CMD(AMPHAROS_MEGA), - ANIM_CMD(STEELIX_MEGA), - ANIM_CMD(SCIZOR_MEGA), - ANIM_CMD(HERACROSS_MEGA), - ANIM_CMD(HOUNDOOM_MEGA), - ANIM_CMD(TYRANITAR_MEGA), - ANIM_CMD(SCEPTILE_MEGA), - ANIM_CMD(BLAZIKEN_MEGA), - ANIM_CMD(SWAMPERT_MEGA), - ANIM_CMD(GARDEVOIR_MEGA), - ANIM_CMD(SABLEYE_MEGA), - ANIM_CMD(MAWILE_MEGA), - ANIM_CMD(AGGRON_MEGA), - ANIM_CMD(MEDICHAM_MEGA), - ANIM_CMD(MANECTRIC_MEGA), - ANIM_CMD(SHARPEDO_MEGA), - ANIM_CMD(CAMERUPT_MEGA), - ANIM_CMD(ALTARIA_MEGA), - ANIM_CMD(BANETTE_MEGA), - ANIM_CMD(ABSOL_MEGA), - ANIM_CMD(GLALIE_MEGA), - ANIM_CMD(SALAMENCE_MEGA), - ANIM_CMD(METAGROSS_MEGA), - ANIM_CMD(LATIAS_MEGA), - ANIM_CMD(LATIOS_MEGA), -#if P_GEN_4_POKEMON == TRUE - ANIM_CMD(LOPUNNY_MEGA), - ANIM_CMD(GARCHOMP_MEGA), - ANIM_CMD(LUCARIO_MEGA), - ANIM_CMD(ABOMASNOW_MEGA), - ANIM_CMD(GALLADE_MEGA), -#endif -#if P_GEN_5_POKEMON == TRUE - ANIM_CMD(AUDINO_MEGA), -#endif -#if P_GEN_6_POKEMON == TRUE - ANIM_CMD(DIANCIE_MEGA), -#endif - ANIM_CMD(RAYQUAZA_MEGA), - ANIM_CMD(KYOGRE_PRIMAL), - ANIM_CMD(GROUDON_PRIMAL), - ANIM_CMD(RATTATA_ALOLAN), - ANIM_CMD(RATICATE_ALOLAN), - ANIM_CMD(RAICHU_ALOLAN), - ANIM_CMD(SANDSHREW_ALOLAN), - ANIM_CMD(SANDSLASH_ALOLAN), - ANIM_CMD(VULPIX_ALOLAN), - ANIM_CMD(NINETALES_ALOLAN), - ANIM_CMD(DIGLETT_ALOLAN), - ANIM_CMD(DUGTRIO_ALOLAN), - ANIM_CMD(MEOWTH_ALOLAN), - ANIM_CMD(PERSIAN_ALOLAN), - ANIM_CMD(GEODUDE_ALOLAN), - ANIM_CMD(GRAVELER_ALOLAN), - ANIM_CMD(GOLEM_ALOLAN), - ANIM_CMD(GRIMER_ALOLAN), - ANIM_CMD(MUK_ALOLAN), - ANIM_CMD(EXEGGUTOR_ALOLAN), - ANIM_CMD(MAROWAK_ALOLAN), - ANIM_CMD(MEOWTH_GALARIAN), - ANIM_CMD(PONYTA_GALARIAN), - ANIM_CMD(RAPIDASH_GALARIAN), - ANIM_CMD(SLOWPOKE_GALARIAN), - ANIM_CMD(SLOWBRO_GALARIAN), - ANIM_CMD(FARFETCHD_GALARIAN), - ANIM_CMD(WEEZING_GALARIAN), - ANIM_CMD(MR_MIME_GALARIAN), - ANIM_CMD(ARTICUNO_GALARIAN), - ANIM_CMD(ZAPDOS_GALARIAN), - ANIM_CMD(MOLTRES_GALARIAN), - ANIM_CMD(SLOWKING_GALARIAN), - ANIM_CMD(CORSOLA_GALARIAN), - ANIM_CMD(ZIGZAGOON_GALARIAN), - ANIM_CMD(LINOONE_GALARIAN), -#if P_GEN_5_POKEMON == TRUE - ANIM_CMD(DARUMAKA_GALARIAN), - ANIM_CMD(DARMANITAN_GALARIAN), - ANIM_CMD(YAMASK_GALARIAN), - ANIM_CMD(STUNFISK_GALARIAN), -#endif - 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), -#if P_GEN_5_POKEMON == TRUE - ANIM_CMD(SAMUROTT_HISUIAN), - ANIM_CMD(LILLIGANT_HISUIAN), - ANIM_CMD(ZORUA_HISUIAN), - ANIM_CMD(ZOROARK_HISUIAN), - ANIM_CMD(BRAVIARY_HISUIAN), -#endif -#if P_GEN_6_POKEMON == TRUE - ANIM_CMD(SLIGGOO_HISUIAN), - ANIM_CMD(GOODRA_HISUIAN), - ANIM_CMD(AVALUGG_HISUIAN), -#endif -#if P_GEN_7_POKEMON == TRUE - ANIM_CMD(DECIDUEYE_HISUIAN), -#endif - ANIM_CMD(PIKACHU_COSPLAY), - ANIM_CMD(PIKACHU_ROCK_STAR), - ANIM_CMD(PIKACHU_BELLE), - ANIM_CMD(PIKACHU_POP_STAR), - ANIM_CMD(PIKACHU_PH_D), - ANIM_CMD(PIKACHU_LIBRE), - ANIM_CMD(PIKACHU_ORIGINAL_CAP), - ANIM_CMD(PIKACHU_HOENN_CAP), - ANIM_CMD(PIKACHU_SINNOH_CAP), - ANIM_CMD(PIKACHU_UNOVA_CAP), - ANIM_CMD(PIKACHU_KALOS_CAP), - ANIM_CMD(PIKACHU_ALOLA_CAP), - ANIM_CMD(PIKACHU_PARTNER_CAP), - ANIM_CMD(PIKACHU_WORLD_CAP), - ANIM_CMD(PICHU_SPIKY_EARED), - ANIM_CMD(UNOWN_B), - ANIM_CMD(UNOWN_C), - ANIM_CMD(UNOWN_D), - ANIM_CMD(UNOWN_E), - ANIM_CMD(UNOWN_F), - ANIM_CMD(UNOWN_G), - ANIM_CMD(UNOWN_H), - ANIM_CMD(UNOWN_I), - ANIM_CMD(UNOWN_J), - ANIM_CMD(UNOWN_K), - ANIM_CMD(UNOWN_L), - ANIM_CMD(UNOWN_M), - ANIM_CMD(UNOWN_N), - ANIM_CMD(UNOWN_O), - ANIM_CMD(UNOWN_P), - ANIM_CMD(UNOWN_Q), - ANIM_CMD(UNOWN_R), - ANIM_CMD(UNOWN_S), - ANIM_CMD(UNOWN_T), - ANIM_CMD(UNOWN_U), - ANIM_CMD(UNOWN_V), - ANIM_CMD(UNOWN_W), - ANIM_CMD(UNOWN_X), - ANIM_CMD(UNOWN_Y), - ANIM_CMD(UNOWN_Z), - ANIM_CMD(UNOWN_EMARK), - ANIM_CMD(UNOWN_QMARK), - ANIM_CMD_FULL(CASTFORM_SUNNY, sAnims_CASTFORM), - ANIM_CMD_FULL(CASTFORM_RAINY, sAnims_CASTFORM), - ANIM_CMD_FULL(CASTFORM_SNOWY, sAnims_CASTFORM), - ANIM_CMD(DEOXYS_ATTACK), - ANIM_CMD(DEOXYS_DEFENSE), - ANIM_CMD(DEOXYS_SPEED), -#if P_GEN_4_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), - ANIM_CMD_FULL(WORMADAM_TRASH_CLOAK, sAnims_WORMADAM), - ANIM_CMD(CHERRIM_SUNSHINE), - ANIM_CMD_FULL(SHELLOS_EAST_SEA, sAnims_SHELLOS), - ANIM_CMD_FULL(GASTRODON_EAST_SEA, sAnims_GASTRODON), - ANIM_CMD(ROTOM_HEAT), - ANIM_CMD(ROTOM_WASH), - 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), - ANIM_CMD_FULL(ARCEUS_FLYING, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_POISON, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_GROUND, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_ROCK, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_BUG, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_GHOST, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_STEEL, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_FIRE, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_WATER, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_GRASS, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_ELECTRIC, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_PSYCHIC, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_ICE, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_DRAGON, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_DARK, sAnims_ARCEUS), - ANIM_CMD_FULL(ARCEUS_FAIRY, sAnims_ARCEUS), -#endif -#if P_GEN_5_POKEMON == TRUE - 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), - ANIM_CMD_FULL(DEERLING_AUTUMN, sAnims_DEERLING), - ANIM_CMD_FULL(DEERLING_WINTER, sAnims_DEERLING), - ANIM_CMD_FULL(SAWSBUCK_SUMMER, sAnims_SAWSBUCK), - ANIM_CMD_FULL(SAWSBUCK_AUTUMN, sAnims_SAWSBUCK), - ANIM_CMD_FULL(SAWSBUCK_WINTER, sAnims_SAWSBUCK), - ANIM_CMD(TORNADUS_THERIAN), - ANIM_CMD(THUNDURUS_THERIAN), - ANIM_CMD(LANDORUS_THERIAN), - ANIM_CMD(KYUREM_WHITE), - ANIM_CMD(KYUREM_BLACK), - ANIM_CMD(KELDEO_RESOLUTE), - ANIM_CMD(MELOETTA_PIROUETTE), - ANIM_CMD_FULL(GENESECT_DOUSE_DRIVE, sAnims_GENESECT), - ANIM_CMD_FULL(GENESECT_SHOCK_DRIVE, sAnims_GENESECT), - ANIM_CMD_FULL(GENESECT_BURN_DRIVE, sAnims_GENESECT), - ANIM_CMD_FULL(GENESECT_CHILL_DRIVE, sAnims_GENESECT), -#endif -#if P_GEN_6_POKEMON == TRUE - ANIM_CMD_FULL(GRENINJA_BATTLE_BOND, sAnims_GRENINJA), - ANIM_CMD(GRENINJA_ASH), - ANIM_CMD_FULL(VIVILLON_POLAR, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_TUNDRA, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_CONTINENTAL, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_GARDEN, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_ELEGANT, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_MEADOW, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_MODERN, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_MARINE, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_ARCHIPELAGO, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_HIGH_PLAINS, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_SANDSTORM, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_RIVER, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_MONSOON, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_SAVANNA, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_SUN, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_OCEAN, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_JUNGLE, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_FANCY, sAnims_VIVILLON), - ANIM_CMD_FULL(VIVILLON_POKE_BALL, sAnims_VIVILLON), - ANIM_CMD_FULL(FLABEBE_YELLOW_FLOWER, sAnims_FLABEBE), - ANIM_CMD_FULL(FLABEBE_ORANGE_FLOWER, sAnims_FLABEBE), - ANIM_CMD_FULL(FLABEBE_BLUE_FLOWER, sAnims_FLABEBE), - ANIM_CMD_FULL(FLABEBE_WHITE_FLOWER, sAnims_FLABEBE), - ANIM_CMD_FULL(FLOETTE_YELLOW_FLOWER, sAnims_FLOETTE), - ANIM_CMD_FULL(FLOETTE_ORANGE_FLOWER, sAnims_FLOETTE), - ANIM_CMD_FULL(FLOETTE_BLUE_FLOWER, sAnims_FLOETTE), - ANIM_CMD_FULL(FLOETTE_WHITE_FLOWER, sAnims_FLOETTE), - ANIM_CMD_FULL(FLOETTE_ETERNAL_FLOWER, sAnims_FLOETTE), - ANIM_CMD_FULL(FLORGES_YELLOW_FLOWER, sAnims_FLORGES), - ANIM_CMD_FULL(FLORGES_ORANGE_FLOWER, sAnims_FLORGES), - ANIM_CMD_FULL(FLORGES_BLUE_FLOWER, sAnims_FLORGES), - ANIM_CMD_FULL(FLORGES_WHITE_FLOWER, sAnims_FLORGES), - ANIM_CMD_FULL(FURFROU_HEART_TRIM, sAnims_FURFROU), - ANIM_CMD_FULL(FURFROU_STAR_TRIM, sAnims_FURFROU), - ANIM_CMD_FULL(FURFROU_DIAMOND_TRIM, sAnims_FURFROU), - ANIM_CMD_FULL(FURFROU_DEBUTANTE_TRIM, sAnims_FURFROU), - ANIM_CMD_FULL(FURFROU_MATRON_TRIM, sAnims_FURFROU), - ANIM_CMD_FULL(FURFROU_DANDY_TRIM, sAnims_FURFROU), - ANIM_CMD_FULL(FURFROU_LA_REINE_TRIM, sAnims_FURFROU), - ANIM_CMD_FULL(FURFROU_KABUKI_TRIM, sAnims_FURFROU), - ANIM_CMD_FULL(FURFROU_PHARAOH_TRIM, sAnims_FURFROU), - ANIM_CMD_FULL(MEOWSTIC_FEMALE, sAnims_MEOWSTIC), - ANIM_CMD(AEGISLASH_BLADE), - ANIM_CMD_FULL(PUMPKABOO_SMALL, sAnims_PUMPKABOO), - ANIM_CMD_FULL(PUMPKABOO_LARGE, sAnims_PUMPKABOO), - ANIM_CMD_FULL(PUMPKABOO_SUPER, sAnims_PUMPKABOO), - ANIM_CMD_FULL(GOURGEIST_SMALL, sAnims_GOURGEIST), - ANIM_CMD_FULL(GOURGEIST_LARGE, sAnims_GOURGEIST), - ANIM_CMD_FULL(GOURGEIST_SUPER, sAnims_GOURGEIST), - ANIM_CMD_FULL(XERNEAS_ACTIVE, sAnims_XERNEAS), - ANIM_CMD(ZYGARDE_10), - ANIM_CMD_FULL(ZYGARDE_10_POWER_CONSTRUCT, sAnims_ZYGARDE_10), - ANIM_CMD_FULL(ZYGARDE_50_POWER_CONSTRUCT, sAnims_ZYGARDE), - ANIM_CMD(ZYGARDE_COMPLETE), - ANIM_CMD(HOOPA_UNBOUND), -#endif -#if P_GEN_7_POKEMON == TRUE - ANIM_CMD_FULL(ORICORIO_POM_POM, sAnims_ORICORIO), - ANIM_CMD_FULL(ORICORIO_PAU, sAnims_ORICORIO), - ANIM_CMD_FULL(ORICORIO_SENSU, sAnims_ORICORIO), - ANIM_CMD_FULL(ROCKRUFF_OWN_TEMPO, sAnims_ROCKRUFF), - ANIM_CMD(LYCANROC_MIDNIGHT), - ANIM_CMD(LYCANROC_DUSK), - ANIM_CMD(WISHIWASHI_SCHOOL), - ANIM_CMD_FULL(SILVALLY_FIGHTING, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_FLYING, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_POISON, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_GROUND, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_ROCK, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_BUG, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_GHOST, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_STEEL, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_FIRE, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_WATER, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_GRASS, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_ELECTRIC, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_PSYCHIC, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_ICE, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_DRAGON, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_DARK, sAnims_SILVALLY), - ANIM_CMD_FULL(SILVALLY_FAIRY, sAnims_SILVALLY), - ANIM_CMD_FULL(MINIOR_METEOR_ORANGE, sAnims_MINIOR), - ANIM_CMD_FULL(MINIOR_METEOR_YELLOW, sAnims_MINIOR), - ANIM_CMD_FULL(MINIOR_METEOR_GREEN, sAnims_MINIOR), - ANIM_CMD_FULL(MINIOR_METEOR_BLUE, sAnims_MINIOR), - ANIM_CMD_FULL(MINIOR_METEOR_INDIGO, sAnims_MINIOR), - ANIM_CMD_FULL(MINIOR_METEOR_VIOLET, sAnims_MINIOR), - ANIM_CMD_FULL(MINIOR_CORE_RED, sAnims_MINIOR), - ANIM_CMD_FULL(MINIOR_CORE_ORANGE, sAnims_MINIOR), - ANIM_CMD_FULL(MINIOR_CORE_YELLOW, sAnims_MINIOR), - ANIM_CMD_FULL(MINIOR_CORE_GREEN, sAnims_MINIOR), - ANIM_CMD_FULL(MINIOR_CORE_BLUE, sAnims_MINIOR), - ANIM_CMD_FULL(MINIOR_CORE_INDIGO, sAnims_MINIOR), - ANIM_CMD_FULL(MINIOR_CORE_VIOLET, sAnims_MINIOR), - ANIM_CMD(MIMIKYU_BUSTED), - ANIM_CMD_FULL(NECROZMA_DUSK_MANE, sAnims_NECROZMA), - ANIM_CMD_FULL(NECROZMA_DAWN_WINGS, sAnims_NECROZMA), - ANIM_CMD_FULL(NECROZMA_ULTRA, sAnims_NECROZMA), - ANIM_CMD_FULL(MAGEARNA_ORIGINAL_COLOR, sAnims_MAGEARNA), -#endif -#if P_GEN_8_POKEMON == TRUE - ANIM_CMD_FULL(CRAMORANT_GULPING, sAnims_CRAMORANT), - ANIM_CMD_FULL(CRAMORANT_GORGING, sAnims_CRAMORANT), - ANIM_CMD_FULL(TOXTRICITY_LOW_KEY, sAnims_TOXTRICITY), - ANIM_CMD_FULL(SINISTEA_ANTIQUE, sAnims_SINISTEA), - ANIM_CMD_FULL(POLTEAGEIST_ANTIQUE, sAnims_POLTEAGEIST), - ANIM_CMD_FULL(ALCREMIE_RUBY_CREAM, sAnims_ALCREMIE), - ANIM_CMD_FULL(ALCREMIE_MATCHA_CREAM, sAnims_ALCREMIE), - ANIM_CMD_FULL(ALCREMIE_MINT_CREAM, sAnims_ALCREMIE), - ANIM_CMD_FULL(ALCREMIE_LEMON_CREAM, sAnims_ALCREMIE), - ANIM_CMD_FULL(ALCREMIE_SALTED_CREAM, sAnims_ALCREMIE), - ANIM_CMD_FULL(ALCREMIE_RUBY_SWIRL, sAnims_ALCREMIE), - ANIM_CMD_FULL(ALCREMIE_CARAMEL_SWIRL, sAnims_ALCREMIE), - ANIM_CMD_FULL(ALCREMIE_RAINBOW_SWIRL, sAnims_ALCREMIE), - ANIM_CMD_FULL(EISCUE_NOICE_FACE, sAnims_EISCUE), - ANIM_CMD_FULL(INDEEDEE_FEMALE, sAnims_INDEEDEE), - ANIM_CMD_FULL(MORPEKO_HANGRY, sAnims_MORPEKO), - ANIM_CMD_FULL(ZACIAN_CROWNED_SWORD, sAnims_ZACIAN), - ANIM_CMD_FULL(ZAMAZENTA_CROWNED_SHIELD, sAnims_ZAMAZENTA), - ANIM_CMD_FULL(ETERNATUS_ETERNAMAX, sAnims_ETERNATUS), - ANIM_CMD_FULL(URSHIFU_RAPID_STRIKE_STYLE, sAnims_URSHIFU), - ANIM_CMD_FULL(ZARUDE_DADA, sAnims_ZARUDE), - ANIM_CMD_FULL(CALYREX_ICE_RIDER, sAnims_CALYREX), - ANIM_CMD_FULL(CALYREX_SHADOW_RIDER, sAnims_CALYREX), - ANIM_CMD(ENAMORUS_THERIAN), -#endif - ANIM_CMD(EGG), -}; - -#undef ANIM_CMD -#undef ANIM_CMD_FULL diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index 7629834adbc4..24ebc78f3811 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -1346,8 +1346,8 @@ const struct CompressedSpriteSheet gMonFrontPicTableFemale[] = 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(COMBEE, gMonFrontPic_Combee), + SPECIES_SPRITE(HIPPOPOTAS, gMonFrontPic_Hippopotas), SPECIES_SPRITE(HIPPOWDON, gMonFrontPic_Hippowdon), #endif #if P_GEN_5_POKEMON == TRUE diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index 8ef3b3231943..a8c986d7957b 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -1339,7 +1339,7 @@ const struct CompressedSpritePalette gMonPaletteTableFemale[] = { SPECIES_PAL(EEVEE, gMonPalette_Eevee), #if P_GEN_4_POKEMON == TRUE - SPECIES_PAL(COMBEE, gMonPalette_Combee), + SPECIES_PAL(COMBEE, gMonPalette_CombeeF), SPECIES_PAL(STARLY, gMonPalette_Starly), SPECIES_PAL(STARAVIA, gMonPalette_Staravia), SPECIES_PAL(STARAPTOR, gMonPalette_Staraptor), @@ -1356,7 +1356,7 @@ const struct CompressedSpritePalette gMonPaletteTableFemale[] = SPECIES_PAL(JELLICENT, gMonPalette_JellicentF), #endif #if P_GEN_6_POKEMON == TRUE - SPECIES_PAL(PYROAR, gMonPalette_PyroarF), + SPECIES_PAL(PYROAR, gMonPalette_Pyroar), #endif #if P_GEN_8_POKEMON == TRUE SPECIES_PAL(BASCULEGION, gMonPalette_CircledQuestionMark), // gMonPalette_BasculegionF), diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 64a999c49ea8..012a95cf1fb4 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -1345,7 +1345,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTableFemale[] = 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(COMBEE, gMonShinyPalette_CombeeF), SPECIES_SHINY_PAL(HIPPOPOTAS, gMonShinyPalette_HippopotasF), SPECIES_SHINY_PAL(HIPPOWDON, gMonShinyPalette_HippowdonF), #endif @@ -1355,7 +1355,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTableFemale[] = SPECIES_SHINY_PAL(JELLICENT, gMonShinyPalette_JellicentF), #endif #if P_GEN_6_POKEMON == TRUE - SPECIES_SHINY_PAL(PYROAR, gMonShinyPalette_PyroarF), + SPECIES_SHINY_PAL(PYROAR, gMonShinyPalette_Pyroar), #endif #if P_GEN_8_POKEMON == TRUE SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_BasculegionF), diff --git a/src/data/text/abilities.h b/src/data/text/abilities.h index ac11b9de8bf6..96407c34099b 100644 --- a/src/data/text/abilities.h +++ b/src/data/text/abilities.h @@ -254,6 +254,37 @@ 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."); +static const u8 sLingeringAromaDescription[] = _("Spreads with contact."); +static const u8 sSeedSowerDescription[] = _("Affects terrain when hit."); +static const u8 sThermalExchangeDescription[] = _("Fire hits up Attack."); +static const u8 sAngerShellDescription[] = _("Gets angry at half HP."); +static const u8 sPurifyingSaltDescription[] = _("Protected by pure salts."); +static const u8 sWellBakedBodyDescription[] = _("Strengthened by Fire."); +static const u8 sWindRiderDescription[] = _("Ups Attack if hit by wind."); +static const u8 sGuardDogDescription[] = _("Cannot be intimidated."); +static const u8 sRockyPayloadDescription[] = _("Powers up Rock moves."); +static const u8 sWindPowerDescription[] = _("Gets charged by wind."); +static const u8 sZeroToHeroDescription[] = _("Changes form on switch out."); +static const u8 sCommanderDescription[] = _("Commands from Dondozo."); +static const u8 sElectromorphosisDescription[] = _("Gets Charged on contact."); +static const u8 sProtosynthesisDescription[] = _("Sun boosts best stat."); +static const u8 sQuarkDriveDescription[] = _("Elec. field ups best stat."); +static const u8 sGoodAsGoldDescription[] = _("Avoids status problems."); +static const u8 sVesselOfRuinDescription[] = _("Lowers foes' sp. damage."); +static const u8 sSwordOfRuinDescription[] = _("Lowers foes' defense."); +static const u8 sTabletsOfRuinDescription[] = _("Lowers foes' damage."); +static const u8 sBeadsOfRuinDescription[] = _("Lowers foes' sp. defense."); +static const u8 sOrichalcumPulseDescription[] = _("Summons sunlight in battle."); +static const u8 sHadronEngineDescription[] = _("Field becomes Electric."); +static const u8 sOpportunistDescription[] = _("Copies foe's stat change."); +static const u8 sCudChewDescription[] = _("Eats a used berry again."); +static const u8 sSharpnessDescription[] = _("Strengthens cutting moves."); +static const u8 sSupremeOverlordDescription[] = _("Inherits fallen's strength."); +static const u8 sCostarDescription[] = _("Copies ally's stat changes."); +static const u8 sToxicDebrisDescription[] = _("Throws poison spikes if hit."); +static const u8 sArmorTailDescription[] = _("Protects from priority."); +static const u8 sEarthEaterDescription[] = _("Eats ground to heal HP."); +static const u8 sMyceliumMightDescription[] = _("Status moves never fail."); #if B_EXPANDED_ABILITY_NAMES == TRUE const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = @@ -526,6 +557,37 @@ const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = [ABILITY_GRIM_NEIGH] = _("Grim Neigh"), [ABILITY_AS_ONE_ICE_RIDER] = _("As One"), [ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"), + [ABILITY_LINGERING_AROMA] = _("Lingering Aroma"), + [ABILITY_SEED_SOWER] = _("Seed Sower"), + [ABILITY_THERMAL_EXCHANGE] = _("Thermal Exchange"), + [ABILITY_ANGER_SHELL] = _("Anger Shell"), + [ABILITY_PURIFYING_SALT] = _("Purifying Salt"), + [ABILITY_WELL_BAKED_BODY] = _("Well-Baked Body"), + [ABILITY_WIND_RIDER] = _("Wind Rider"), + [ABILITY_GUARD_DOG] = _("Guard Dog"), + [ABILITY_ROCKY_PAYLOAD] = _("Rocky Payload"), + [ABILITY_WIND_POWER] = _("Wind Power"), + [ABILITY_ZERO_TO_HERO] = _("Zero to Hero"), + [ABILITY_COMMANDER] = _("Commander"), + [ABILITY_ELECTROMORPHOSIS] = _("Electromorphosis"), + [ABILITY_PROTOSYNTHESIS] = _("Protosynthesis"), + [ABILITY_QUARK_DRIVE] = _("Quark Drive"), + [ABILITY_GOOD_AS_GOLD] = _("Good as Gold"), + [ABILITY_VESSEL_OF_RUIN] = _("Vessel of Ruin"), + [ABILITY_SWORD_OF_RUIN] = _("Sword of Ruin"), + [ABILITY_TABLETS_OF_RUIN] = _("Tablets of Ruin"), + [ABILITY_BEADS_OF_RUIN] = _("Beads of Ruin"), + [ABILITY_ORICHALCUM_PULSE] = _("Orichalcum Pulse"), + [ABILITY_HADRON_ENGINE] = _("Hadron Engine"), + [ABILITY_OPPORTUNIST] = _("Opportunist"), + [ABILITY_CUD_CHEW] = _("Cud Chew"), + [ABILITY_SHARPNESS] = _("Sharpness"), + [ABILITY_SUPREME_OVERLORD] = _("Supreme Overlord"), + [ABILITY_COSTAR] = _("Costar"), + [ABILITY_TOXIC_DEBRIS] = _("Toxic Debris"), + [ABILITY_ARMOR_TAIL] = _("Armor Tail"), + [ABILITY_EARTH_EATER] = _("Earth Eater"), + [ABILITY_MYCELIUM_MIGHT] = _("Mycelium Might"), }; #else // 12 characters const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = @@ -798,6 +860,37 @@ const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = [ABILITY_GRIM_NEIGH] = _("Grim Neigh"), [ABILITY_AS_ONE_ICE_RIDER] = _("As One"), [ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"), + [ABILITY_LINGERING_AROMA] = _("LngerngAroma"), + [ABILITY_SEED_SOWER] = _("Seed Sower"), + [ABILITY_THERMAL_EXCHANGE] = _("ThrmlExchnge"), + [ABILITY_ANGER_SHELL] = _("Anger Shell"), + [ABILITY_PURIFYING_SALT] = _("PurfyingSalt"), + [ABILITY_WELL_BAKED_BODY] = _("WellBakedBdy"), + [ABILITY_WIND_RIDER] = _("Wind Rider"), + [ABILITY_GUARD_DOG] = _("Guard Dog"), + [ABILITY_ROCKY_PAYLOAD] = _("RockyPayload"), + [ABILITY_WIND_POWER] = _("Wind Power"), + [ABILITY_ZERO_TO_HERO] = _("Zero to Hero"), + [ABILITY_COMMANDER] = _("Commander"), + [ABILITY_ELECTROMORPHOSIS] = _("Elecmrphosis"), + [ABILITY_PROTOSYNTHESIS] = _("Protosnthsis"), + [ABILITY_QUARK_DRIVE] = _("Quark Drive"), + [ABILITY_GOOD_AS_GOLD] = _("Good as Gold"), + [ABILITY_VESSEL_OF_RUIN] = _("VesselOfRuin"), + [ABILITY_SWORD_OF_RUIN] = _("SwordOfRuin"), + [ABILITY_TABLETS_OF_RUIN] = _("TabltsOfRuin"), + [ABILITY_BEADS_OF_RUIN] = _("BeadsOfRuin"), + [ABILITY_ORICHALCUM_PULSE] = _("OrchlcumPlse"), + [ABILITY_HADRON_ENGINE] = _("HadronEngine"), + [ABILITY_OPPORTUNIST] = _("Opportunist"), + [ABILITY_CUD_CHEW] = _("Cud Chew"), + [ABILITY_SHARPNESS] = _("Sharpness"), + [ABILITY_SUPREME_OVERLORD] = _("SuprmeOvrlrd"), + [ABILITY_COSTAR] = _("Costar"), + [ABILITY_TOXIC_DEBRIS] = _("Toxic Debris"), + [ABILITY_ARMOR_TAIL] = _("Armor Tail"), + [ABILITY_EARTH_EATER] = _("Earth Eater"), + [ABILITY_MYCELIUM_MIGHT] = _("MceliumMight"), }; #endif @@ -1071,4 +1164,35 @@ const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] = [ABILITY_GRIM_NEIGH] = sGrimNeighDescription, [ABILITY_AS_ONE_ICE_RIDER] = sAsOneIceRiderDescription, [ABILITY_AS_ONE_SHADOW_RIDER] = sAsOneShadowRiderDescription, + [ABILITY_LINGERING_AROMA] = sLingeringAromaDescription, + [ABILITY_SEED_SOWER] = sSeedSowerDescription, + [ABILITY_THERMAL_EXCHANGE] = sThermalExchangeDescription, + [ABILITY_ANGER_SHELL] = sAngerShellDescription, + [ABILITY_PURIFYING_SALT] = sPurifyingSaltDescription, + [ABILITY_WELL_BAKED_BODY] = sWellBakedBodyDescription, + [ABILITY_WIND_RIDER] = sWindRiderDescription, + [ABILITY_GUARD_DOG] = sGuardDogDescription, + [ABILITY_ROCKY_PAYLOAD] = sRockyPayloadDescription, + [ABILITY_WIND_POWER] = sWindPowerDescription, + [ABILITY_ZERO_TO_HERO] = sZeroToHeroDescription, + [ABILITY_COMMANDER] = sCommanderDescription, + [ABILITY_ELECTROMORPHOSIS] = sElectromorphosisDescription, + [ABILITY_PROTOSYNTHESIS] = sProtosynthesisDescription, + [ABILITY_QUARK_DRIVE] = sQuarkDriveDescription, + [ABILITY_GOOD_AS_GOLD] = sGoodAsGoldDescription, + [ABILITY_VESSEL_OF_RUIN] = sVesselOfRuinDescription, + [ABILITY_SWORD_OF_RUIN] = sSwordOfRuinDescription, + [ABILITY_TABLETS_OF_RUIN] = sTabletsOfRuinDescription, + [ABILITY_BEADS_OF_RUIN] = sBeadsOfRuinDescription, + [ABILITY_ORICHALCUM_PULSE] = sOrichalcumPulseDescription, + [ABILITY_HADRON_ENGINE] = sHadronEngineDescription, + [ABILITY_OPPORTUNIST] = sOpportunistDescription, + [ABILITY_CUD_CHEW] = sCudChewDescription, + [ABILITY_SHARPNESS] = sSharpnessDescription, + [ABILITY_SUPREME_OVERLORD] = sSupremeOverlordDescription, + [ABILITY_COSTAR] = sCostarDescription, + [ABILITY_TOXIC_DEBRIS] = sToxicDebrisDescription, + [ABILITY_ARMOR_TAIL] = sArmorTailDescription, + [ABILITY_EARTH_EATER] = sEarthEaterDescription, + [ABILITY_MYCELIUM_MIGHT] = sMyceliumMightDescription, }; diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h index 08e5fc84688e..e815d8ae1fc4 100644 --- a/src/data/text/item_descriptions.h +++ b/src/data/text/item_descriptions.h @@ -3792,3 +3792,28 @@ static const u8 sSapphireDesc[] = _( "A brilliant blue gem\n" "that symbolizes\n" "honesty."); + +static const u8 sAbilityShieldDesc[] = _( + "Ability changes are\n" + "prevented for this\n" + "items's holder."); + +static const u8 sClearAmuletDesc[] = _( + "Stat lowering is\n" + "prevented for this\n" + "items's holder."); + +static const u8 sPunchingGloveDesc[] = _( + "Powers up punching\n" + "moves and removes\n" + "their contact."); + +static const u8 sCovertCloakDesc[] = _( + "Protects the holder\n" + "from secondary\n" + "move effects."); + +static const u8 sLoadedDiceDesc[] = _( + "Rolls high numbers.\n" + "Multihit strikes\n" + "hit more times."); diff --git a/src/data/text/move_descriptions.h b/src/data/text/move_descriptions.h index a4a1941adc97..7000759f75ab 100644 --- a/src/data/text/move_descriptions.h +++ b/src/data/text/move_descriptions.h @@ -2962,8 +2962,8 @@ static const u8 sPsyshieldBashDescription[] = _( "energy. May raise Defense."); static const u8 sPowerShiftDescription[] = _( - "The user swaps its offensive\n" - "and defensive stats."); + "The user swaps its Attack\n" + "and Defense stats."); static const u8 sStoneAxeDescription[] = _( "High critical hit ratio. Sets\n" @@ -2974,52 +2974,52 @@ static const u8 sSpringtideStormDescription[] = _( "Varies with the user's form."); static const u8 sMysticalPowerDescription[] = _( - "Increases the user's better\n" - "of Atk. and Def. stats."); + "A mysterious power strikes,\n" + "raising the user's Sp. Atk."); static const u8 sRagingFuryDescription[] = _( - "Viciously spews flames at\n" - "a foe, becoming fixated."); + "A rampage of 2 to 3 turns\n" + "that confuses the user."); static const u8 sWaveCrashDescription[] = _( - "A water slam. Hurts the user\n" - "and raises its Action Speed."); + "A slam shrouded in water.\n" + "It also hurts the user."); static const u8 sChloroblastDescription[] = _( - "An blast that hurts the user\n" - "and lowers its Action Speed."); + "A user-hurting blast of\n" + "amassed chlorophyll."); static const u8 sMountainGaleDescription[] = _( - "The user hurls giant chunks\n" - "of ice to damage the foe."); + "Giant chunks of ice damage\n" + "the foe. It may flinch."); static const u8 sVictoryDanceDescription[] = _( - "Dances to raise damage 50%,\n" - "plus offenses and defenses."); + "Dances to raise Attack,\n" + "Defense and Speed."); static const u8 sHeadlongRushDescription[] = _( - "Hits with a full-body tackle,\n" - "lowering the foe's Defense."); + "Hits with a full-body tackle.\n" + "Lowers the users's defenses."); static const u8 sBarbBarrageDescription[] = _( "Can poison on impact. Powers\n" - "up if the foe has an ailment."); + "up against poisoned foes."); static const u8 sEsperWingDescription[] = _( "High critical hit ratio.\n" - "Ups the user's Action Speed."); + "Ups the user's Speed."); static const u8 sBitterMaliceDescription[] = _( - "Hurts a foe harder if it has\n" - "an ailment. Can give FrstBte."); + "A spine-chilling resentment.\n" + "May lower the foe's Attack."); static const u8 sShelterDescription[] = _( - "The user hardens their skin\n" - "and obscures itself."); + "The user hardens their skin,\n" + "sharply raising its Defense."); static const u8 sTripleArrowsDescription[] = _( - "Ups critical-hit ratio for 3\n" - "turns. Lowers foe Defenses."); + "High critical hit ratio.\n" + "May lower Defense or flinch."); static const u8 sInfernalParadeDescription[] = _( "Hurts a foe harder if it has\n" @@ -3031,7 +3031,7 @@ static const u8 sCeaselessEdgeDescription[] = _( static const u8 sBleakwindStormDescription[] = _( "Hits with brutal, cold winds.\n" - "May inflict frostbite."); + "May lower the foe's Speed."); static const u8 sWildboltStormDescription[] = _( "Hits with a brutal tempest.\n" @@ -3042,13 +3042,200 @@ static const u8 sSandsearStormDescription[] = _( "May inflict a burn."); static const u8 sLunarBlessingDescription[] = _( - "The user heals themself and\n" - "conceals their presence."); + "The user heals and cures\n" + "itself and its ally."); static const u8 sTakeHeartDescription[] = _( "The user lifts its spirits to\n" "heal and strengthen itself."); +static const u8 sTeraBlastDescription[] = _( + "If the user's Terastallized,\n" + "it hits with its Tera-type."); + +static const u8 sSilkTrapDescription[] =_( + "Protects itself, lowering\n" + "Speed on contact."); + +static const u8 sAxeKickDescription[] = _( + "May miss and hurt the kicker.\n" + "May cause confusion."); + +static const u8 sLastRespectsDescription[] = _( + "This move deals more damage\n" + "for each defeated ally."); + +static const u8 sLuminaCrashDescription[] = _( + "A mind-affecting light\n" + "harshly lowers Sp. Def."); + +static const u8 sOrderUpDescription[] = _( + "Boosts a user's stats\n" + "depending on Tatsugiri."); + +static const u8 sJetPunchDescription[] = _( + "A punch is thrown at blinding\n" + "speed to strike first."); + +static const u8 sSpicyExtractDescription[] = _( + "Sharply ups target's Attack,\n" + "harshly lowers its Defense."); + +static const u8 sSpinOutDescription[] = _( + "Furiously strains its legs.\n" + "Harshly lowers user's Speed."); + +static const u8 sPopulationBombDescription[] = _( + "The user's fellows hit one\n" + "to ten times in a row."); + +static const u8 sIceSpinnerDescription[] = _( + "Ice-covered feet hit a foe\n" + "and destroy the terrain."); + +static const u8 sGlaiveRushDescription[] = _( + "Foe attacks next turn can't\n" + "miss and do double damage."); + +static const u8 sRevivalBlessingDescription[] = _( + "Revives a fainted party {PKMN}\n" + "and restores half of its HP."); + +static const u8 sSaltCureDescription[] = _( + "Hurts foe every turn. Double\n" + "damage to Steel and Water."); + +static const u8 sTripleDiveDescription[] = _( + "Hits target with splashes\n" + "of water 3 times in a row."); + +static const u8 sMortalSpinDescription[] = _( + "Erases trap moves and Leech\n" + "Seed. Poisons adjecent foes."); + +static const u8 sDoodleDescription[] = _( + "Changes user's and ally's\n" + "Ability into the target's."); + +static const u8 sFilletAwayDescription[] = _( + "Sharply boosts offenses and\n" + "Speed by using its own HP."); + +static const u8 sKowtowCleaveDescription[] = _( + "User slashes the foe after\n" + "kowtowing. It never misses."); + +static const u8 sFlowerTrickDescription[] = _( + "Rigged bouquet. Always gets\n" + "a critical hit, never missing."); + +static const u8 sTorchSongDescription[] = _( + "Flames scorch the target.\n" + "Boosts the user's Sp. Atk."); + +static const u8 sAquaStepDescription[] = _( + "Hits with light, fluid dance\n" + "steps. Ups the user's Speed."); + +static const u8 sRagingBullDescription[] = _( + "Tackle that breaks barriers.\n" + "User's form determines type."); + +static const u8 sMakeItRainDescription[] = _( + "Lowers the user's Sp. Atk.\n" + "Money is recovered after."); + +static const u8 sRuinationDescription[] = _( + "Summons a ruinous disaster\n" + "and cuts half the foe's HP."); + +static const u8 sCollisionCourseDescription[] = _( + "Prehistoric explosion that's\n" + "stronger if supereffective."); + +static const u8 sElectroDriftDescription[] = _( + "Futuristic electricity. It's\n" + "stronger if supereffective."); + +static const u8 sShedTailDescription[] = _( + "Creates a Substitute for\n" + "itself before switching out."); + +static const u8 sChillyReceptionDescription[] =_( + "Bad joke summons snowstorm.\n" + "The user also switches out."); + +static const u8 sTidyUpDescription[] = _( + "User tidies up hazards and\n" + "raises its Attack and Speed."); + +static const u8 sSnowscapeDescription[] = _( + "Summons a snowstorm that\n" + "lasts for five turns."); + +static const u8 sPounceDescription[] = _( + "The user pounces on the foe,\n" + "lowering its Speed."); + +static const u8 sTrailblazeDescription[] = _( + "The user attacks suddenly,\n" + "raising its Speed."); + +static const u8 sChillingWaterDescription[] = _( + "A shower with ice-cold water\n" + "lowers the target's Attack."); + +static const u8 sHyperDrillDescription[] = _( + "A spinning pointed part\n" + "bypasses a foe's Protect."); + +static const u8 sTwinBeamDescription[] = _( + "Mystical eye-beams that hit\n" + "the target twice in a row."); + +static const u8 sRageFistDescription[] = _( + "The more the user has been\n" + "hit, the stronger the move."); + +static const u8 sArmorCannonDescription[] = _( + "A strong attack but lowers\n" + "the defensive stats."); + +static const u8 sBitterBladeDescription[] = _( + "An attack that absorbs\n" + "half the damage inflicted."); + +static const u8 sDoubleShockDescription[] = _( + "Discharges all electricity,\n" + "losing the Electric type."); + +static const u8 sGigatonHammerDescription[] = _( + "Swings a huge hammer. Can't\n" + "be used twice in a row."); + +static const u8 sComeuppanceDescription[] = _( + "Retaliates strongly against\n" + "who last hurt the user."); + +static const u8 sAquaCutterDescription[] = _( + "Pressurized water cut with a\n" + "high critical-hit ratio."); + +static const u8 sBlazingTorqueDescription[] = _( + "---"); + +static const u8 sWickedTorqueDescription[] = _( + "---"); + +static const u8 sNoxiousTorqueDescription[] = _( + "---"); + +static const u8 sCombatTorqueDescription[] = _( + "---"); + +static const u8 sMagicalTorqueDescription[] = _( + "---"); + const u8 gNotDoneYetDescription[] = _( "This move can't be used. Its\n" "effect is in development."); @@ -3838,4 +4025,52 @@ const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] = [MOVE_SANDSEAR_STORM - 1] = sSandsearStormDescription, [MOVE_LUNAR_BLESSING - 1] = sLunarBlessingDescription, [MOVE_TAKE_HEART - 1] = sTakeHeartDescription, + [MOVE_TERA_BLAST - 1] = sTeraBlastDescription, + [MOVE_SILK_TRAP - 1] = sSilkTrapDescription, + [MOVE_AXE_KICK - 1] = sAxeKickDescription, + [MOVE_LAST_RESPECTS - 1] = sLastRespectsDescription, + [MOVE_LUMINA_CRASH - 1] = sLuminaCrashDescription, + [MOVE_ORDER_UP - 1] = sOrderUpDescription, + [MOVE_JET_PUNCH - 1] = sJetPunchDescription, + [MOVE_SPICY_EXTRACT - 1] = sSpicyExtractDescription, + [MOVE_SPIN_OUT - 1] = sSpinOutDescription, + [MOVE_POPULATION_BOMB - 1] = sPopulationBombDescription, + [MOVE_ICE_SPINNER - 1] = sIceSpinnerDescription, + [MOVE_GLAIVE_RUSH - 1] = sGlaiveRushDescription, + [MOVE_REVIVAL_BLESSING - 1] = sRevivalBlessingDescription, + [MOVE_SALT_CURE - 1] = sSaltCureDescription, + [MOVE_TRIPLE_DIVE - 1] = sTripleDiveDescription, + [MOVE_MORTAL_SPIN - 1] = sMortalSpinDescription, + [MOVE_DOODLE - 1] = sDoodleDescription, + [MOVE_FILLET_AWAY - 1] = sFilletAwayDescription, + [MOVE_KOWTOW_CLEAVE - 1] = sKowtowCleaveDescription, + [MOVE_FLOWER_TRICK - 1] = sFlowerTrickDescription, + [MOVE_TORCH_SONG - 1] = sTorchSongDescription, + [MOVE_AQUA_STEP - 1] = sAquaStepDescription, + [MOVE_RAGING_BULL - 1] = sRagingBullDescription, + [MOVE_MAKE_IT_RAIN - 1] = sMakeItRainDescription, + [MOVE_RUINATION - 1] = sRuinationDescription, + [MOVE_COLLISION_COURSE - 1] = sCollisionCourseDescription, + [MOVE_ELECTRO_DRIFT - 1] = sElectroDriftDescription, + [MOVE_SHED_TAIL - 1] = sShedTailDescription, + [MOVE_CHILLY_RECEPTION - 1] = sChillyReceptionDescription, + [MOVE_TIDY_UP - 1] = sTidyUpDescription, + [MOVE_SNOWSCAPE - 1] = sSnowscapeDescription, + [MOVE_POUNCE - 1] = sPounceDescription, + [MOVE_TRAILBLAZE - 1] = sTrailblazeDescription, + [MOVE_CHILLING_WATER - 1] = sChillingWaterDescription, + [MOVE_HYPER_DRILL - 1] = sHyperDrillDescription, + [MOVE_TWIN_BEAM - 1] = sTwinBeamDescription, + [MOVE_RAGE_FIST - 1] = sRageFistDescription, + [MOVE_ARMOR_CANNON - 1] = sArmorCannonDescription, + [MOVE_BITTER_BLADE - 1] = sBitterBladeDescription, + [MOVE_DOUBLE_SHOCK - 1] = sDoubleShockDescription, + [MOVE_GIGATON_HAMMER - 1] = sGigatonHammerDescription, + [MOVE_COMEUPPANCE - 1] = sComeuppanceDescription, + [MOVE_AQUA_CUTTER - 1] = sAquaCutterDescription, + [MOVE_BLAZING_TORQUE - 1] = sBlazingTorqueDescription, + [MOVE_WICKED_TORQUE - 1] = sWickedTorqueDescription, + [MOVE_NOXIOUS_TORQUE - 1] = sNoxiousTorqueDescription, + [MOVE_COMBAT_TORQUE - 1] = sCombatTorqueDescription, + [MOVE_MAGICAL_TORQUE - 1] = sMagicalTorqueDescription, }; diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h index 5f0a741cb4f4..221d3db73d25 100644 --- a/src/data/text/move_names.h +++ b/src/data/text/move_names.h @@ -781,6 +781,54 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_SANDSEAR_STORM] = _("Sandsear Storm"), [MOVE_LUNAR_BLESSING] = _("Lunar Blessing"), [MOVE_TAKE_HEART] = _("Take Heart"), + [MOVE_TERA_BLAST] = _("Tera Blast"), + [MOVE_SILK_TRAP] = _("Silk Trap"), + [MOVE_AXE_KICK] = _("Axe Kick"), + [MOVE_LAST_RESPECTS] = _("Last Respects"), + [MOVE_LUMINA_CRASH] = _("Lumina Crash"), + [MOVE_ORDER_UP] = _("Order Up"), + [MOVE_JET_PUNCH] = _("Jet Punch"), + [MOVE_SPICY_EXTRACT] = _("Spicy Extract"), + [MOVE_SPIN_OUT] = _("Spin Out"), + [MOVE_POPULATION_BOMB] = _("Population Bomb"), + [MOVE_ICE_SPINNER] = _("Ice Spinner"), + [MOVE_GLAIVE_RUSH] = _("Glaive Rush"), + [MOVE_REVIVAL_BLESSING] = _("Revival Blessing"), + [MOVE_SALT_CURE] = _("Salt Cure"), + [MOVE_TRIPLE_DIVE] = _("Triple Dive"), + [MOVE_MORTAL_SPIN] = _("Mortal Spin"), + [MOVE_DOODLE] = _("Doodle"), + [MOVE_FILLET_AWAY] = _("Fillet Away"), + [MOVE_KOWTOW_CLEAVE] = _("Kowtow Cleave"), + [MOVE_FLOWER_TRICK] = _("Flower Trick"), + [MOVE_TORCH_SONG] = _("Torch Song"), + [MOVE_AQUA_STEP] = _("Aqua Step"), + [MOVE_RAGING_BULL] = _("Raging Bull"), + [MOVE_MAKE_IT_RAIN] = _("Make It Rain"), + [MOVE_RUINATION] = _("Ruination"), + [MOVE_COLLISION_COURSE] = _("Collision Course"), + [MOVE_ELECTRO_DRIFT] = _("Electro Drift"), + [MOVE_SHED_TAIL] = _("Shed Tail"), + [MOVE_CHILLY_RECEPTION] = _("Chilly Reception"), + [MOVE_TIDY_UP] = _("Tidy Up"), + [MOVE_SNOWSCAPE] = _("Snowscape"), + [MOVE_POUNCE] = _("Pounce"), + [MOVE_TRAILBLAZE] = _("Trailblaze"), + [MOVE_CHILLING_WATER] = _("Chilling Water"), + [MOVE_HYPER_DRILL] = _("Hyper Drill"), + [MOVE_TWIN_BEAM] = _("Twin Beam"), + [MOVE_RAGE_FIST] = _("Rage Fist"), + [MOVE_ARMOR_CANNON] = _("Armor Cannon"), + [MOVE_BITTER_BLADE] = _("Bitter Blade"), + [MOVE_DOUBLE_SHOCK] = _("Double Shock"), + [MOVE_GIGATON_HAMMER] = _("Gigaton Hammer"), + [MOVE_COMEUPPANCE] = _("Comeuppance"), + [MOVE_AQUA_CUTTER] = _("Aqua Cutter"), + [MOVE_BLAZING_TORQUE] = _("Blazing Torque"), + [MOVE_WICKED_TORQUE] = _("Wicked Torque"), + [MOVE_NOXIOUS_TORQUE] = _("Noxious Torque"), + [MOVE_COMBAT_TORQUE] = _("Combat Torque"), + [MOVE_MAGICAL_TORQUE] = _("Magical Torque"), }; #else // 12 letters @@ -1565,6 +1613,54 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_SANDSEAR_STORM] = _("SndsearStorm"), [MOVE_LUNAR_BLESSING] = _("LunarBlessng"), [MOVE_TAKE_HEART] = _("Take Heart"), + [MOVE_TERA_BLAST] = _("Tera Blast"), + [MOVE_SILK_TRAP] = _("Silk Trap"), + [MOVE_AXE_KICK] = _("Axe Kick"), + [MOVE_LAST_RESPECTS] = _("LastRespects"), + [MOVE_LUMINA_CRASH] = _("Lumina Crash"), + [MOVE_ORDER_UP] = _("Order Up"), + [MOVE_JET_PUNCH] = _("Jet Punch"), + [MOVE_SPICY_EXTRACT] = _("SpicyExtract"), + [MOVE_SPIN_OUT] = _("Spin Out"), + [MOVE_POPULATION_BOMB] = _("PoplatinBomb"), + [MOVE_ICE_SPINNER] = _("Ice Spinner"), + [MOVE_GLAIVE_RUSH] = _("Glaive Rush"), + [MOVE_REVIVAL_BLESSING] = _("RevivlBlesng"), + [MOVE_SALT_CURE] = _("Salt Cure"), + [MOVE_TRIPLE_DIVE] = _("Triple Dive"), + [MOVE_MORTAL_SPIN] = _("Mortal Spin"), + [MOVE_DOODLE] = _("Doodle"), + [MOVE_FILLET_AWAY] = _("Fillet Away"), + [MOVE_KOWTOW_CLEAVE] = _("KowtowCleave"), + [MOVE_FLOWER_TRICK] = _("Flower Trick"), + [MOVE_TORCH_SONG] = _("Torch Song"), + [MOVE_AQUA_STEP] = _("Aqua Step"), + [MOVE_RAGING_BULL] = _("Raging Bull"), + [MOVE_MAKE_IT_RAIN] = _("Make It Rain"), + [MOVE_RUINATION] = _("Ruination"), + [MOVE_COLLISION_COURSE] = _("ColisinCours"), + [MOVE_ELECTRO_DRIFT] = _("ElectroDrift"), + [MOVE_SHED_TAIL] = _("Shed Tail"), + [MOVE_CHILLY_RECEPTION] = _("ChilReceptin"), + [MOVE_TIDY_UP] = _("Tidy Up"), + [MOVE_SNOWSCAPE] = _("Snowscape"), + [MOVE_POUNCE] = _("Pounce"), + [MOVE_TRAILBLAZE] = _("Trailblaze"), + [MOVE_CHILLING_WATER] = _("ChillingWatr"), + [MOVE_HYPER_DRILL] = _("Hyper Drill"), + [MOVE_TWIN_BEAM] = _("Twin Beam"), + [MOVE_RAGE_FIST] = _("Rage Fist"), + [MOVE_ARMOR_CANNON] = _("Armor Cannon"), + [MOVE_BITTER_BLADE] = _("Bitter Blade"), + [MOVE_DOUBLE_SHOCK] = _("Double Shock"), + [MOVE_GIGATON_HAMMER] = _("GigatonHammr"), + [MOVE_COMEUPPANCE] = _("Comeuppance"), + [MOVE_AQUA_CUTTER] = _("Aqua Cutter"), + [MOVE_BLAZING_TORQUE] = _("BlazngTorque"), + [MOVE_WICKED_TORQUE] = _("WickedTorque"), + [MOVE_NOXIOUS_TORQUE] = _("NoxiusTorque"), + [MOVE_COMBAT_TORQUE] = _("CombatTorque"), + [MOVE_MAGICAL_TORQUE] = _("MagiclTorque"), }; #endif diff --git a/src/data/trade.h b/src/data/trade.h index 80d17a49bad4..ef7e9231de5e 100644 --- a/src/data/trade.h +++ b/src/data/trade.h @@ -55,7 +55,7 @@ static const u8 sText_OnlyPkmnForBattle[] = _("That's your only\nPOKéMON for ba static const u8 sText_WaitingForYourFriend[] = _("{COLOR DARK_GRAY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GRAY}Waiting for your friend\nto finish…"); static const u8 sText_YourFriendWantsToTrade[] = _("Your friend wants\nto trade POKéMON."); -static const struct OamData sTradeOamData_32x16 = +static const struct OamData sOamData_MenuText = { .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), @@ -167,17 +167,17 @@ static const struct SpriteTemplate sSpriteTemplate_MenuText = { .tileTag = GFXTAG_MENU_TEXT, .paletteTag = PALTAG_MENU_TEXT, - .oam = &sTradeOamData_32x16, + .oam = &sOamData_MenuText, .anims = sAnims_MenuText, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -static const u16 sTradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal"); -static const struct SpritePalette sSpritePalette_TradeScreenText = +static const u16 sMenuText_Pal[] = INCBIN_U16("graphics/trade/text.gbapal"); +static const struct SpritePalette sSpritePalette_MenuText = { - .data = sTradeScreenTextPalette, + .data = sMenuText_Pal, .tag = PALTAG_MENU_TEXT }; @@ -193,7 +193,7 @@ static const struct SpritePalette sSpritePalette_TradeScreenText = // 1st array is the current positions // 2nd array is directions of input // 3rd array is the next positions to go to (unoccupied spaces are skipped over) -static const u8 sTradeNextSelectedMonTable[(PARTY_SIZE * 2) + 1][4][PARTY_SIZE] = +static const u8 sCursorMoveDestinations[(PARTY_SIZE * 2) + 1][4][PARTY_SIZE] = { { {4, 2, 12, 12, 0, 0}, // UP @@ -275,86 +275,67 @@ static const u8 sTradeNextSelectedMonTable[(PARTY_SIZE * 2) + 1][4][PARTY_SIZE] } }; -static const u8 sTradeMonSpriteCoords[(PARTY_SIZE * 2) + 1][2] = -{ - // Your party - {1, 5 }, - {8, 5 }, - {1, 10}, - {8, 10}, - {1, 15}, - {8, 15}, - - // Friend's party - {16, 5 }, - {23, 5 }, - {16, 10}, - {23, 10}, - {16, 15}, - {23, 15}, - - {23, 18} // CANCEL -}; +#define COL0_X 1 +#define COL1_X 8 +#define COL2_X 16 +#define COL3_X 23 +#define ROW0_Y 5 +#define ROW1_Y 10 +#define ROW2_Y 15 +#define ROW3_Y 18 -static const u8 sTradeMonLevelCoords[][2][2] = +static const u8 sTradeMonSpriteCoords[(PARTY_SIZE * 2) + 1][2] = { - // Your party - { - {5, 4}, - {12, 4}, - }, - { - {5, 9}, - {12, 9}, - }, - { - {5, 14}, + // Player's party + {COL0_X, ROW0_Y}, + {COL1_X, ROW0_Y}, + {COL0_X, ROW1_Y}, + {COL1_X, ROW1_Y}, + {COL0_X, ROW2_Y}, + {COL1_X, ROW2_Y}, + // Partners's party + {COL2_X, ROW0_Y}, + {COL3_X, ROW0_Y}, + {COL2_X, ROW1_Y}, + {COL3_X, ROW1_Y}, + {COL2_X, ROW2_Y}, + {COL3_X, ROW2_Y}, + // Cancel + {COL3_X, ROW3_Y} +}; + +static const u8 sTradeMonLevelCoords[PARTY_SIZE * 2][2] = { + [TRADE_PLAYER] = + { 5, 4}, + {12, 4}, + { 5, 9}, + {12, 9}, + { 5, 14}, {12, 14}, - }, - // Friend's party - { - - {20, 4}, - {27, 4}, - }, - { - {20, 9}, - {27, 9}, - }, - { + [TRADE_PARTNER * PARTY_SIZE] = + {20, 4}, + {27, 4}, + {20, 9}, + {27, 9}, {20, 14}, {27, 14}, - }, }; -static const u8 sTradeMonBoxCoords[][2][2] = -{ - // Your party - { - {1, 3}, - {8, 3}, - }, - { - {1, 8}, - {8, 8}, - }, - { - {1, 13}, - {8, 13}, - }, - // Friend's party - { - {16, 3}, - {23, 3}, - }, - { - {16, 8}, - {23, 8}, - }, - { +static const u8 sTradeMonBoxCoords[PARTY_SIZE * 2][2] = { + [TRADE_PLAYER] = + { 1, 3}, + { 8, 3}, + { 1, 8}, + { 8, 8}, + { 1, 13}, + { 8, 13}, + [TRADE_PARTNER * PARTY_SIZE] = + {16, 3}, + {23, 3}, + {16, 8}, + {23, 8}, {16, 13}, {23, 13}, - }, }; static const u8 sUnusedCoords[][2] = @@ -379,14 +360,14 @@ static const u8 sUnusedCoords[][2] = {23, 12} }; -static const u8 *const sTradeActionTexts[] = +static const u8 *const sActionTexts[] = { - [TRADE_TEXT_CANCEL] = sText_Cancel, - [TRADE_TEXT_CHOOSE_MON] = sText_ChooseAPkmn, - [TRADE_TEXT_SUMMARY] = sText_Summary, - [TRADE_TEXT_TRADE] = sText_Trade, - [TRADE_TEXT_CANCEL_TRADE] = sText_CancelTrade, - [TRADE_TEXT_JP_QUIT] = sJPText_PressBButtonToQuit + [TEXT_CANCEL] = sText_Cancel, + [TEXT_CHOOSE_MON] = sText_ChooseAPkmn, + [TEXT_SUMMARY] = sText_Summary, + [TEXT_TRADE] = sText_Trade, + [TEXT_CANCEL_TRADE] = sText_CancelTrade, + [TEXT_JP_QUIT] = sJPText_PressBButtonToQuit }; static const struct MenuAction sSelectTradeMonActions[] = @@ -395,17 +376,17 @@ static const struct MenuAction sSelectTradeMonActions[] = {sText_Trade2, Task_DrawSelectionTrade} }; -static const u8 *const sTradeMessages[] = +static const u8 *const sMessages[] = { - [TRADE_MSG_STANDBY] = sText_CommunicationStandby, - [TRADE_MSG_CANCELED] = sText_TheTradeHasBeenCanceled, - [TRADE_MSG_ONLY_MON1] = sText_OnlyPkmnForBattle, - [TRADE_MSG_ONLY_MON2] = gText_OnlyPkmnForBattle, //identical text to above - [TRADE_MSG_WAITING_FOR_FRIEND] = sText_WaitingForYourFriend, - [TRADE_MSG_FRIEND_WANTS_TO_TRADE] = sText_YourFriendWantsToTrade, - [TRADE_MSG_MON_CANT_BE_TRADED] = gText_PkmnCantBeTradedNow, - [TRADE_MSG_EGG_CANT_BE_TRADED] = gText_EggCantBeTradedNow, - [TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED] = gText_OtherTrainersPkmnCantBeTraded + [MSG_STANDBY] = sText_CommunicationStandby, + [MSG_CANCELED] = sText_TheTradeHasBeenCanceled, + [MSG_ONLY_MON1] = sText_OnlyPkmnForBattle, + [MSG_ONLY_MON2] = gText_OnlyPkmnForBattle, //identical text to above + [MSG_WAITING_FOR_FRIEND] = sText_WaitingForYourFriend, + [MSG_FRIEND_WANTS_TO_TRADE] = sText_YourFriendWantsToTrade, + [MSG_MON_CANT_BE_TRADED] = gText_PkmnCantBeTradedNow, + [MSG_EGG_CANT_BE_TRADED] = gText_EggCantBeTradedNow, + [MSG_FRIENDS_MON_CANT_BE_TRADED] = gText_OtherTrainersPkmnCantBeTraded }; static const u8 sTradeTextColors[] = @@ -415,7 +396,7 @@ static const u8 sTradeTextColors[] = TEXT_COLOR_DARK_GRAY //shadow color }; -static const struct BgTemplate sTradeMenuBgTemplates[] = +static const struct BgTemplate sBgTemplates[] = { { .bg = 0, @@ -455,7 +436,7 @@ static const struct BgTemplate sTradeMenuBgTemplates[] = }, }; -static const struct WindowTemplate sTradeMenuWindowTemplates[] = +static const struct WindowTemplate sWindowTemplates[] = { { .bg = 0, @@ -633,8 +614,8 @@ static const struct WindowTemplate sTradeYesNoWindowTemplate = .baseBlock = 582 }; -static const u8 sJPText_Shedinja[] = _("ヌケニン"); -static const u8 sTradeMenuPartyMonBoxDimensions[3][2] = +static const u8 sText_ShedinjaJP[] = _("ヌケニン"); +static const u8 sSelectedMonLevelGenderCoords[3][2] = { [TRADE_PLAYER] = {4, 3}, [TRADE_PARTNER] = {19, 3} @@ -643,8 +624,8 @@ static const u8 sTradeMenuPartyMonBoxDimensions[3][2] = static const u16 sPokeball_Pal[] = INCBIN_U16("graphics/trade/pokeball.gbapal"); static const u8 sPokeball_Gfx[] = INCBIN_U8("graphics/trade/pokeball.4bpp"); static const u8 sPokeballSymbol_Gfx[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); // unused -static const u16 sCrossingHighlightCable_Tilemap[] = INCBIN_U16("graphics/trade/crossing_highlight_cable.bin"); -static const u16 sTradeTilemap_PokeBallSymbol[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); // unused? +static const u16 sCableCloseup_Map[] = INCBIN_U16("graphics/trade/crossing_highlight_cable.bin"); +static const u16 sPokeballSymbol_Map[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); // unused? static const u16 sUnusedPal1[] = INCBIN_U16("graphics/trade/unused1.gbapal"); static const u16 sGba_Pal[] = INCBIN_U16("graphics/trade/gba.gbapal"); static const u16 sUnusedPal2[] = INCBIN_U16("graphics/trade/unused2.gbapal"); @@ -657,11 +638,11 @@ static const u8 sGbaScreen_Gfx[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); const u16 gTradePlatform_Tilemap[] = INCBIN_U16("graphics/trade/platform.bin"); static const u8 sGbaAffine_Gfx[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); // Only the gfx for when the GBA is zooming in/out static const u8 sEmptyGfx[64] = {}; -static const u8 sGbaCable_AffineTilemap[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); -static const u8 sGbaWireless_AffineTilemap[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); -static const u16 sGbaWireless_Tilemap[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); -static const u16 sGbaCable_Tilemap[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); -static const u32 sCrossingHighlightWireless_Tilemap[] = INCBIN_U32("graphics/trade/crossing_highlight_wireless.bin.lz"); +static const u8 sGbaAffineMapCable[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); +static const u8 sGbaAffineMapWireless[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); +static const u16 sGbaMapWireless[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); +static const u16 sGbaMapCable[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); +static const u32 sWirelessCloseup_Map[] = INCBIN_U32("graphics/trade/crossing_highlight_wireless.bin.lz"); static const u16 sWirelessSignalSend_Pal[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); static const u16 sWirelessSignalRecv_Pal[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); static const u16 sWirelessSignalNone_Pal[] = INCBIN_U16("graphics/trade/wireless_signal_none.gbapal"); @@ -749,7 +730,7 @@ static const union AffineAnimCmd *const sAffineAnims_Pokeball[] = static const struct SpriteSheet sPokeBallSpriteSheet = { .data = sPokeball_Gfx, - .size = 0x600, + .size = sizeof(sPokeball_Gfx), .tag = GFXTAG_POKEBALL }; @@ -805,7 +786,7 @@ static const union AffineAnimCmd *const sAffineAnims_LinkMonGlow[] = static const struct SpriteSheet sSpriteSheet_LinkMonGlow = { .data = sLinkMonGlow_Gfx, - .size = 0x200, + .size = sizeof(sLinkMonGlow_Gfx), .tag = GFXTAG_LINK_MON_GLOW }; @@ -962,7 +943,7 @@ static const union AnimCmd *const sAnims_GbaScreen_Short[] = static const struct SpriteSheet sSpriteSheet_GbaScreen = { .data = sGbaScreen_Gfx, - .size = 0x1000, + .size = sizeof(sGbaScreen_Gfx), .tag = GFXTAG_GBA_SCREEN }; @@ -1185,7 +1166,7 @@ static const s8 sTradeBallVerticalVelocityTable[] = 0, 0, 0, 1, 0, 1, 1, 2, 3 }; -static const u8 sWirelessSignalTiming[][2] = +static const u8 sWirelessSignalAnimParams[][2] = { { 0, 1}, { 1, 1}, diff --git a/src/data/union_room.h b/src/data/union_room.h index 07f8e48994a6..f32910388b15 100644 --- a/src/data/union_room.h +++ b/src/data/union_room.h @@ -717,9 +717,9 @@ static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = { .cursorShadowPal = 3, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 1 + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = FONT_NORMAL, + .cursorKind = CURSOR_INVISIBLE }; static const struct WindowTemplate sWindowTemplate_GroupList = { @@ -777,9 +777,9 @@ static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = { .cursorShadowPal = 3, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 1, - .fontId = 1, - .cursorKind = 0 + .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, + .fontId = FONT_NORMAL, + .cursorKind = CURSOR_BLACK_ARROW }; static const struct WindowTemplate sWindowTemplate_InviteToActivity = { @@ -815,9 +815,9 @@ static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = { .cursorShadowPal = 3, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = FONT_NORMAL, + .cursorKind = CURSOR_BLACK_ARROW }; static const struct WindowTemplate sWindowTemplate_RegisterForTrade = { @@ -852,9 +852,9 @@ static const struct ListMenuTemplate sListMenuTemplate_RegisterForTrade = { .cursorShadowPal = 3, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = FONT_NORMAL, + .cursorKind = CURSOR_BLACK_ARROW }; static const struct WindowTemplate sWindowTemplate_TradingBoardRequestType = { @@ -905,9 +905,9 @@ static const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = { .cursorShadowPal = 3, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = FONT_NORMAL, + .cursorKind = CURSOR_BLACK_ARROW }; static const struct WindowTemplate sWindowTemplate_TradingBoardHeader = { @@ -931,7 +931,7 @@ static const struct WindowTemplate sWindowTemplate_TradingBoardMain = { }; static const struct ListMenuItem sTradeBoardListMenuItems[] = { - { sText_EmptyString, -3 }, + { sText_EmptyString, LIST_HEADER }, { sText_EmptyString, 0 }, { sText_EmptyString, 1 }, { sText_EmptyString, 2 }, @@ -959,9 +959,9 @@ static const struct ListMenuTemplate sTradeBoardListMenuTemplate = { .cursorShadowPal = 13, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = FONT_NORMAL, + .cursorKind = CURSOR_BLACK_ARROW }; // Unused @@ -1011,9 +1011,9 @@ static const struct ListMenuTemplate sEmptyListMenuTemplate = { .cursorShadowPal = 3, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 1, - .fontId = 1, - .cursorKind = 0 + .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, + .fontId = FONT_NORMAL, + .cursorKind = CURSOR_BLACK_ARROW }; static const struct RfuPlayerData sUnionRoomPlayer_DummyRfu = {0}; diff --git a/src/daycare.c b/src/daycare.c index 18bc45eb013c..cabecc8ea53d 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -80,7 +80,7 @@ static const struct ListMenuTemplate sDaycareListMenuLevelTemplate = .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, .fontId = FONT_NORMAL, - .cursorKind = 0 + .cursorKind = CURSOR_BLACK_ARROW }; static const u8 *const sCompatibilityMessages[] = @@ -539,11 +539,17 @@ static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv) static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) { + u16 motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM); + u16 fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM); u8 i; - u8 selectedIvs[INHERITED_IV_COUNT]; + u8 selectedIvs[5]; u8 availableIVs[NUM_STATS]; - u8 whichParents[INHERITED_IV_COUNT]; + u8 whichParents[5]; u8 iv; + u8 howManyIVs = 3; + + if (motherItem == ITEM_DESTINY_KNOT || fatherItem == ITEM_DESTINY_KNOT) + howManyIVs = 5; // Initialize a list of IV indices. for (i = 0; i < NUM_STATS; i++) @@ -551,8 +557,8 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) availableIVs[i] = i; } - // Select the 3 IVs that will be inherited. - for (i = 0; i < INHERITED_IV_COUNT; i++) + // Select which IVs that will be inherited. + for (i = 0; i < howManyIVs; i++) { // Randomly pick an IV from the available list and stop from being chosen again. // BUG: Instead of removing the IV that was just picked, this @@ -571,13 +577,13 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) } // Determine which parent each of the selected IVs should inherit from. - for (i = 0; i < INHERITED_IV_COUNT; i++) + for (i = 0; i < howManyIVs; i++) { whichParents[i] = Random() % DAYCARE_MON_COUNT; } // Set each of inherited IVs on the egg mon. - for (i = 0; i < INHERITED_IV_COUNT; i++) + for (i = 0; i < howManyIVs; i++) { switch (selectedIvs[i]) { @@ -609,6 +615,33 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) } } +static void InheritPokeball(struct Pokemon *egg, struct BoxPokemon *father, struct BoxPokemon *mother) +{ + u16 inheritBall = ITEM_POKE_BALL; + u16 fatherBall = GetBoxMonData(father, MON_DATA_POKEBALL); + u16 motherBall = GetBoxMonData(mother, MON_DATA_POKEBALL); + u16 fatherSpecies = GetBoxMonData(father, MON_DATA_SPECIES); + u16 motherSpecies = GetBoxMonData(mother, MON_DATA_SPECIES); + + if (fatherBall == ITEM_MASTER_BALL || fatherBall == ITEM_CHERISH_BALL) + fatherBall = ITEM_POKE_BALL; + + if (motherBall == ITEM_MASTER_BALL || motherBall == ITEM_CHERISH_BALL) + motherBall = ITEM_POKE_BALL; + +#if P_BALL_INHERITING >= GEN_7 + if (fatherSpecies == motherSpecies) + inheritBall = (Random() % 2 == 0 ? motherBall : fatherBall); + else if (motherSpecies != SPECIES_DITTO) + inheritBall = motherBall; + else + inheritBall = fatherBall; +#elif P_BALL_INHERITING == GEN_6 + inheritBall = motherBall; +#endif + SetMonData(egg, MON_DATA_POKEBALL, &inheritBall); +} + // Counts the number of egg moves a pokemon learns and stores the moves in // the given array. static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) @@ -742,55 +775,66 @@ void RejectEggFromDayCare(void) RemoveEggFromDayCare(&gSaveBlock1Ptr->daycare); } +static const struct { + u16 currSpecies; + u16 item; + u16 babySpecies; +} IncenseBabyTable[][3] = +{ + // Regular offspring, Item, Incense Offspring + { SPECIES_WOBBUFFET, ITEM_LAX_INCENSE, SPECIES_WYNAUT }, + { SPECIES_MARILL, ITEM_SEA_INCENSE, SPECIES_AZURILL }, + { SPECIES_SNORLAX, ITEM_FULL_INCENSE, SPECIES_MUNCHLAX }, + { SPECIES_CHANSEY, ITEM_LUCK_INCENSE, SPECIES_HAPPINY }, + { SPECIES_MR_MIME, ITEM_ODD_INCENSE, SPECIES_MIME_JR }, + { SPECIES_CHIMECHO, ITEM_PURE_INCENSE, SPECIES_CHINGLING }, + { SPECIES_SUDOWOODO, ITEM_ROCK_INCENSE, SPECIES_BONSLY }, + { SPECIES_ROSELIA, ITEM_ROSE_INCENSE, SPECIES_BUDEW }, + { SPECIES_MANTINE, ITEM_WAVE_INCENSE, SPECIES_MANTYKE }, +}; + static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare) { + u32 i; u16 motherItem, fatherItem; 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; - 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) + for (i = 0; i < ARRAY_COUNT(IncenseBabyTable); i++) + { + if (IncenseBabyTable[i]->babySpecies == *species && motherItem != IncenseBabyTable[i]->item && fatherItem != IncenseBabyTable[i]->item) + { + *species = IncenseBabyTable[i]->currSpecies; + break; + } + } +} + +static const struct { + u16 offspring; + u16 item; + u16 move; +} BreedingSpecialMoveItemTable[][3] = { + // Offspring, Item, Move + { SPECIES_PICHU, ITEM_LIGHT_BALL, MOVE_VOLT_TACKLE }, +}; + +static void GiveMoveIfItem(struct Pokemon *mon, struct DayCare *daycare) +{ + u16 i, species = GetMonData(mon, MON_DATA_SPECIES); u32 motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM); u32 fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM); - if (motherItem == ITEM_LIGHT_BALL || fatherItem == ITEM_LIGHT_BALL) + for (i = 0; i < ARRAY_COUNT(BreedingSpecialMoveItemTable); i++) { - if (GiveMoveToMon(mon, MOVE_VOLT_TACKLE) == MON_HAS_MAX_MOVES) - DeleteFirstMoveAndGiveMoveToMon(mon, MOVE_VOLT_TACKLE); + if (BreedingSpecialMoveItemTable[i]->offspring == species + && (motherItem == BreedingSpecialMoveItemTable[i]->item || + fatherItem == BreedingSpecialMoveItemTable[i]->item)) + { + if (GiveMoveToMon(mon, BreedingSpecialMoveItemTable[i]->move) == MON_HAS_MAX_MOVES) + DeleteFirstMoveAndGiveMoveToMon(mon, BreedingSpecialMoveItemTable[i]->move); + } } } @@ -856,13 +900,15 @@ static void _GiveEggFromDaycare(struct DayCare *daycare) bool8 isEgg; species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots); +#if P_INCENSE_BREEDING < GEN_9 AlterEggSpeciesWithIncenseItem(&species, daycare); +#endif SetInitialEggData(&egg, species, daycare); InheritIVs(&egg, daycare); + InheritPokeball(&egg, &daycare->mons[parentSlots[1]].mon, &daycare->mons[parentSlots[0]].mon); BuildEggMoveset(&egg, &daycare->mons[parentSlots[1]].mon, &daycare->mons[parentSlots[0]].mon); - if (species == SPECIES_PICHU) - GiveVoltTackleIfLightBall(&egg, daycare); + GiveMoveIfItem(&egg, daycare); isEgg = TRUE; SetMonData(&egg, MON_DATA_IS_EGG, &isEgg); @@ -886,7 +932,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation) language = LANGUAGE_JAPANESE; SetMonData(mon, MON_DATA_POKEBALL, &ball); SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname); - SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles); + SetMonData(mon, MON_DATA_FRIENDSHIP, &gSpeciesInfo[species].eggCycles); SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); SetMonData(mon, MON_DATA_LANGUAGE, &language); if (setHotSpringsLocation) @@ -913,7 +959,7 @@ static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare * language = LANGUAGE_JAPANESE; SetMonData(mon, MON_DATA_POKEBALL, &ball); SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname); - SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles); + SetMonData(mon, MON_DATA_FRIENDSHIP, &gSpeciesInfo[species].eggCycles); SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); SetMonData(mon, MON_DATA_LANGUAGE, &language); } @@ -1075,8 +1121,8 @@ static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) trainerIds[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_OT_ID); personality = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_PERSONALITY); genders[i] = GetGenderFromSpeciesAndPersonality(species[i], personality); - eggGroups[i][0] = gBaseStats[species[i]].eggGroup1; - eggGroups[i][1] = gBaseStats[species[i]].eggGroup2; + eggGroups[i][0] = gSpeciesInfo[species[i]].eggGroups[0]; + eggGroups[i][1] = gSpeciesInfo[species[i]].eggGroups[1]; } // check unbreedable egg group diff --git a/src/debug.c b/src/debug.c index dd0aab732f39..90081eb61714 100644 --- a/src/debug.c +++ b/src/debug.c @@ -58,7 +58,7 @@ #include "constants/species.h" #include "constants/weather.h" -#if DEBUG_SYSTEM_ENABLE == TRUE +#if DEBUG_OVERWORLD_MENU == TRUE // ******************************* // Enums enum { // Main @@ -2178,6 +2178,8 @@ static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId) { PlaySE(MUS_LEVEL_UP); ScriptGiveMon(sDebugMonData->mon_speciesId, gTasks[taskId].data[3], ITEM_NONE, 0,0,0); + //Set flag for user convenience + FlagSet(FLAG_SYS_POKEMON_GET); Free(sDebugMonData); //Frees EWRAM of MonData Struct DebugAction_DestroyExtraWindow(taskId); } @@ -2732,6 +2734,9 @@ static void DebugAction_Give_Pokemon_ComplexCreateMon(u8 taskId) //https://githu break; } + //Set flag for user convenience + FlagSet(FLAG_SYS_POKEMON_GET); + Free(sDebugMonData); //Frees EWRAM of MonData Struct DebugAction_DestroyExtraWindow(taskId); //return sentToPc; } @@ -3515,4 +3520,4 @@ SOUND_LIST_SE }; #undef X -#endif //DEBUG_SYSTEM_ENABLE == TRUE +#endif //DEBUG_OVERWORLD_MENU == TRUE diff --git a/src/decoration.c b/src/decoration.c index cd3e185da3ce..6d95cfbdc307 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -314,8 +314,9 @@ static const struct ListMenuTemplate sDecorationItemsListMenuTemplate = .cursorShadowPal = 3, .lettersSpacing = FALSE, .itemVerticalPadding = 0, - .scrollMultiple = FALSE, - .fontId = FONT_NARROW + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = FONT_NARROW, + .cursorKind = CURSOR_BLACK_ARROW, }; #include "data/decoration/icon.h" @@ -687,7 +688,7 @@ static void ReturnToDecorationActionsAfterInvalidSelection(u8 taskId) static void SecretBasePC_PrepMenuForSelectingStoredDecors(u8 taskId) { - LoadPalette(sDecorationMenuPalette, 0xd0, 0x20); + LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), PLTT_SIZE_4BPP); ClearDialogWindowAndFrame(0, FALSE); RemoveDecorationWindow(WINDOW_MAIN_MENU); InitDecorationCategoriesWindow(taskId); @@ -833,7 +834,7 @@ static void ReturnToActionsMenuFromCategories(u8 taskId) void ShowDecorationCategoriesWindow(u8 taskId) { - LoadPalette(sDecorationMenuPalette, 0xd0, 0x20); + LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), PLTT_SIZE_4BPP); ClearDialogWindowAndFrame(0, FALSE); gTasks[taskId].tDecorationMenuCommand = DECOR_MENU_TRADE; sCurDecorationCategory = DECORCAT_DESK; @@ -890,7 +891,7 @@ static void PrintDecorationItemMenuItems(u8 taskId) StringCopy(sDecorationItemsMenu->names[i], gText_Cancel); sDecorationItemsMenu->items[i].name = sDecorationItemsMenu->names[i]; - sDecorationItemsMenu->items[i].id = -2; + sDecorationItemsMenu->items[i].id = LIST_CANCEL; gMultiuseListMenuTemplate = sDecorationItemsListMenuTemplate; gMultiuseListMenuTemplate.windowId = sDecorMenuWindowIds[WINDOW_DECORATION_CATEGORIES]; gMultiuseListMenuTemplate.totalItems = sDecorationItemsMenu->numMenuItems; @@ -1976,7 +1977,7 @@ static void SetDecorSelectionMetatiles(struct PlaceDecorationGraphicsDataBuffer shape = data->decoration->shape; for (i = 0; i < sDecorTilemaps[shape].size; i++) { - data->tiles[sDecorTilemaps[shape].tiles[i]] = GetMetatile(data->decoration->tiles[sDecorTilemaps[shape].y[i]] * 8 + sDecorTilemaps[shape].x[i]); + data->tiles[sDecorTilemaps[shape].tiles[i]] = GetMetatile(data->decoration->tiles[sDecorTilemaps[shape].y[i]] * NUM_TILES_PER_METATILE + sDecorTilemaps[shape].x[i]); } } @@ -2036,7 +2037,7 @@ static u8 gpu_pal_decompress_alloc_tag_and_upload(struct PlaceDecorationGraphics SetDecorSelectionMetatiles(data); SetDecorSelectionBoxOamAttributes(data->decoration->shape); SetDecorSelectionBoxTiles(data); - CopyPalette(data->palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(data->decoration->tiles[0] * 8) + 7] >> 12); + CopyPalette(data->palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(data->decoration->tiles[0] * NUM_TILES_PER_METATILE) + 7] >> 12); LoadSpritePalette(&sSpritePal_PlaceDecoration); return CreateSprite(&sDecorationSelectorSpriteTemplate, 0, 0, 0); } @@ -2092,7 +2093,7 @@ static u8 AddDecorationIconObjectFromObjectEvent(u16 tilesTag, u16 paletteTag, u SetDecorSelectionMetatiles(&sPlaceDecorationGraphicsDataBuffer); SetDecorSelectionBoxOamAttributes(sPlaceDecorationGraphicsDataBuffer.decoration->shape); SetDecorSelectionBoxTiles(&sPlaceDecorationGraphicsDataBuffer); - CopyPalette(sPlaceDecorationGraphicsDataBuffer.palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0] * 8) + 7] >> 12); + CopyPalette(sPlaceDecorationGraphicsDataBuffer.palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0] * NUM_TILES_PER_METATILE) + 7] >> 12); sheet.data = sPlaceDecorationGraphicsDataBuffer.image; sheet.size = sDecorShapeSizes[sPlaceDecorationGraphicsDataBuffer.decoration->shape] * TILE_SIZE_4BPP; sheet.tag = tilesTag; diff --git a/src/diploma.c b/src/diploma.c index a30d7155464b..4f6264492418 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -72,7 +72,7 @@ void CB2_ShowDiploma(void) ResetSpriteData(); ResetPaletteFade(); FreeAllSpritePalettes(); - LoadPalette(sDiplomaPalettes, 0, 64); + LoadPalette(sDiplomaPalettes, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); sDiplomaTilemapPtr = Alloc(0x1000); InitDiplomaBg(); InitDiplomaWindow(); @@ -196,7 +196,7 @@ static void InitDiplomaWindow(void) { InitWindows(sDiplomaWinTemplates); DeactivateAllTextPrinters(); - LoadPalette(gStandardMenuPalette, 0xF0, 0x20); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); FillWindowPixelBuffer(0, PIXEL_FILL(0)); PutWindowTilemap(0); } diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 268b930ae8f7..e23c04c1adf6 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -3005,8 +3005,8 @@ static void PrintRecordsText(u8 windowId, s32 width) recordNums[1] = gSaveBlock2Ptr->berryPick.bestScore; recordNums[2] = gSaveBlock2Ptr->berryPick.berriesPickedInRow; - LoadUserWindowBorderGfx_(windowId, 0x21D, 0xD0); - DrawTextBorderOuter(windowId, 0x21D, 0xD); + LoadUserWindowBorderGfx_(windowId, 0x21D, BG_PLTT_ID(13)); + DrawTextBorderOuter(windowId, 0x21D, 13); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); 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++) @@ -4429,12 +4429,12 @@ static void ResetBerryAndStatusBarSprites(void) static void LoadWindowFrameGfx(u8 frameId) { LoadBgTiles(BG_INTERFACE, GetWindowFrameTilesPal(frameId)->tiles, 0x120, 1); - LoadPalette(GetWindowFrameTilesPal(frameId)->pal, 0xA0, 0x20); + LoadPalette(GetWindowFrameTilesPal(frameId)->pal, BG_PLTT_ID(10), PLTT_SIZE_4BPP); } static void LoadUserWindowFrameGfx(void) { - LoadUserWindowBorderGfx_(0, 0xA, 0xB0); + LoadUserWindowBorderGfx_(0, 0xA, BG_PLTT_ID(11)); } static void ResetGfxState(void) @@ -5193,7 +5193,7 @@ static bool32 LoadBgGfx(void) switch (sGfx->loadState) { case 0: - LoadPalette(sBg_Pal, 0, sizeof(sBg_Pal)); + LoadPalette(sBg_Pal, BG_PLTT_ID(0), sizeof(sBg_Pal)); break; case 1: ResetTempTileDataBuffers(); @@ -5209,7 +5209,7 @@ static bool32 LoadBgGfx(void) return FALSE; break; case 5: - LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20); + LoadPalette(GetTextWindowPalette(3), BG_PLTT_ID(13), PLTT_SIZE_4BPP); break; default: sGfx->loadState = 0; diff --git a/src/easy_chat.c b/src/easy_chat.c index 054c65c0fba4..d08ea4b33dbc 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -226,18 +226,23 @@ static void DoQuizQuestionEasyChatScreen(void); static void DoQuizSetAnswerEasyChatScreen(void); static void DoQuizSetQuestionEasyChatScreen(void); -#define PALTAG_TRIANGLE_CURSOR 0 -#define PALTAG_RECTANGLE_CURSOR 1 -#define PALTAG_MISC_UI 2 -#define PALTAG_RS_INTERVIEW_FRAME 3 - -#define GFXTAG_TRIANGLE_CURSOR 0 -#define GFXTAG_RECTANGLE_CURSOR 1 -#define GFXTAG_SCROLL_INDICATOR 2 -#define GFXTAG_START_SELECT_BUTTONS 3 -#define GFXTAG_MODE_WINDOW 4 -#define GFXTAG_RS_INTERVIEW_FRAME 5 -#define GFXTAG_BUTTON_WINDOW 6 +enum { + PALTAG_TRIANGLE_CURSOR, + PALTAG_RECTANGLE_CURSOR, + PALTAG_MISC_UI, + PALTAG_RS_INTERVIEW_FRAME, +}; + +enum { + GFXTAG_TRIANGLE_CURSOR, + GFXTAG_RECTANGLE_CURSOR, + GFXTAG_SCROLL_INDICATOR, + GFXTAG_START_SELECT_BUTTONS, + GFXTAG_MODE_WINDOW, + GFXTAG_RS_INTERVIEW_FRAME, + GFXTAG_BUTTON_WINDOW, +}; + // State values for sEasyChatScreen->inputState // Control which input handler to use in HandleEasyChatInput @@ -376,6 +381,13 @@ enum { WINANIM_KEYBOARD_SWITCH_IN, }; +// Window IDs +enum { + WIN_TITLE, + WIN_MSG, + WIN_INPUT_SELECT, // Word groups, word list, and keyboard +}; + // Values for text frame tilemap #define FRAME_OFFSET_ORANGE 0x1000 // Orange frame, for phrase text #define FRAME_OFFSET_GREEN 0x4000 // Green frame, for keyboard/word select @@ -814,7 +826,7 @@ static const struct BgTemplate sEasyChatBgTemplates[] = { }; static const struct WindowTemplate sEasyChatWindowTemplates[] = { - { + [WIN_TITLE] = { .bg = 1, .tilemapLeft = 6, .tilemapTop = 0, @@ -823,7 +835,7 @@ static const struct WindowTemplate sEasyChatWindowTemplates[] = { .paletteNum = 10, .baseBlock = 0x10, }, - { + [WIN_MSG] = { .bg = 0, .tilemapLeft = 3, .tilemapTop = 15, @@ -832,7 +844,7 @@ static const struct WindowTemplate sEasyChatWindowTemplates[] = { .paletteNum = 15, .baseBlock = 0xA, }, - { + [WIN_INPUT_SELECT] = { .bg = 2, .tilemapLeft = 1, .tilemapTop = 0, @@ -867,17 +879,17 @@ static const u8 *const sEasyChatKeyboardAlphabet[NUM_ALPHABET_ROWS] = static const struct SpriteSheet sSpriteSheets[] = { { .data = sTriangleCursor_Gfx, - .size = 0x20, + .size = sizeof(sTriangleCursor_Gfx), .tag = GFXTAG_TRIANGLE_CURSOR }, { .data = sScrollIndicator_Gfx, - .size = 0x100, + .size = sizeof(sScrollIndicator_Gfx), .tag = GFXTAG_SCROLL_INDICATOR }, { .data = sStartSelectButtons_Gfx, - .size = 0x100, + .size = sizeof(sStartSelectButtons_Gfx), .tag = GFXTAG_START_SELECT_BUTTONS }, {0} @@ -3917,13 +3929,13 @@ static void InitEasyChatBgs(void) static void LoadEasyChatPalettes(void) { ResetPaletteFade(); - LoadPalette(gEasyChatMode_Pal, 0, 32); - LoadPalette(sTextInputFrameOrange_Pal, 1 * 16, 32); - LoadPalette(sTextInputFrameGreen_Pal, 4 * 16, 32); - LoadPalette(sTitleText_Pal, 10 * 16, 8); - LoadPalette(sText_Pal, 11 * 16, 12); - LoadPalette(sText_Pal, 15 * 16, 12); - LoadPalette(sText_Pal, 3 * 16, 12); + LoadPalette(gEasyChatMode_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); + LoadPalette(sTextInputFrameOrange_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + LoadPalette(sTextInputFrameGreen_Pal, BG_PLTT_ID(4), PLTT_SIZE_4BPP); + LoadPalette(sTitleText_Pal, BG_PLTT_ID(10), PLTT_SIZEOF(4)); + LoadPalette(sText_Pal, BG_PLTT_ID(11), PLTT_SIZEOF(6)); + LoadPalette(sText_Pal, BG_PLTT_ID(15), PLTT_SIZEOF(6)); + LoadPalette(sText_Pal, BG_PLTT_ID(3), PLTT_SIZEOF(6)); } static void PrintTitle(void) @@ -3934,10 +3946,10 @@ static void PrintTitle(void) return; xOffset = GetStringCenterAlignXOffset(FONT_NORMAL, titleText, 144); - FillWindowPixelBuffer(0, PIXEL_FILL(0)); - 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, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_TITLE, PIXEL_FILL(0)); + PrintEasyChatTextWithColors(WIN_TITLE, FONT_NORMAL, titleText, xOffset, 1, TEXT_SKIP_DRAW, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY); + PutWindowTilemap(WIN_TITLE); + CopyWindowToVram(WIN_TITLE, COPYWIN_FULL); } static void PrintEasyChatText(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) @@ -3957,10 +3969,10 @@ static void PrintEasyChatTextWithColors(u8 windowId, u8 fontId, const u8 *str, u static void PrintInitialInstructions(void) { FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17); - LoadUserWindowBorderGfx(1, 1, 0xE0); - DrawTextBorderOuter(1, 1, 14); + LoadUserWindowBorderGfx(WIN_MSG, 1, BG_PLTT_ID(14)); + DrawTextBorderOuter(WIN_MSG, 1, 14); PrintEasyChatStdMessage(MSG_INSTRUCTIONS); - PutWindowTilemap(1); + PutWindowTilemap(WIN_MSG); CopyBgTilemapBufferToVram(0); } @@ -4004,14 +4016,14 @@ static void PrintEasyChatStdMessage(u8 msgId) break; } - FillWindowPixelBuffer(1, PIXEL_FILL(1)); + FillWindowPixelBuffer(WIN_MSG, PIXEL_FILL(1)); if (text1) - PrintEasyChatText(1, FONT_NORMAL, text1, 0, 1, TEXT_SKIP_DRAW, 0); + PrintEasyChatText(WIN_MSG, FONT_NORMAL, text1, 0, 1, TEXT_SKIP_DRAW, 0); if (text2) - PrintEasyChatText(1, FONT_NORMAL, text2, 0, 17, TEXT_SKIP_DRAW, 0); + PrintEasyChatText(WIN_MSG, FONT_NORMAL, text2, 0, 17, TEXT_SKIP_DRAW, 0); - CopyWindowToVram(1, COPYWIN_FULL); + CopyWindowToVram(WIN_MSG, COPYWIN_FULL); } static void CreateEasyChatYesNoMenu(u8 initialCursorPos) @@ -4198,14 +4210,14 @@ static void AdjustBgTilemapForFooter(void) static void DrawLowerWindow(void) { - PutWindowTilemap(2); - CopyBgTilemapBufferToVram(2); + PutWindowTilemap(WIN_INPUT_SELECT); + CopyBgTilemapBufferToVram(WIN_INPUT_SELECT); } static void InitLowerWindowText(u32 whichText) { ResetLowerWindowScroll(); - FillWindowPixelBuffer(2, PIXEL_FILL(1)); + FillWindowPixelBuffer(WIN_INPUT_SELECT, PIXEL_FILL(1)); switch (whichText) { case TEXT_GROUPS: @@ -4219,7 +4231,7 @@ static void InitLowerWindowText(u32 whichText) break; } - CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(WIN_INPUT_SELECT, COPYWIN_GFX); } static void PrintKeyboardText(void) @@ -4248,7 +4260,7 @@ static void PrintKeyboardGroupNames(void) return; } - PrintEasyChatText(2, FONT_NORMAL, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SKIP_DRAW, NULL); + PrintEasyChatText(WIN_INPUT_SELECT, FONT_NORMAL, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SKIP_DRAW, NULL); } y += 16; @@ -4260,7 +4272,7 @@ static void PrintKeyboardAlphabet(void) u32 i; for (i = 0; i < ARRAY_COUNT(sEasyChatKeyboardAlphabet); i++) - PrintEasyChatText(2, FONT_NORMAL, sEasyChatKeyboardAlphabet[i], 10, 97 + i * 16, TEXT_SKIP_DRAW, NULL); + PrintEasyChatText(WIN_INPUT_SELECT, FONT_NORMAL, sEasyChatKeyboardAlphabet[i], 10, 97 + i * 16, TEXT_SKIP_DRAW, NULL); } static void PrintInitialWordSelectText(void) @@ -4331,16 +4343,16 @@ static void PrintWordSelectText(u8 scrollOffset, u8 numRows) { CopyEasyChatWordPadded(sScreenControl->wordSelectPrintBuffer, easyChatWord, 0); if (!DummyWordCheck(easyChatWord)) - PrintEasyChatText(2, FONT_NORMAL, sScreenControl->wordSelectPrintBuffer, (j * 13 + 3) * 8, y, TEXT_SKIP_DRAW, NULL); + PrintEasyChatText(WIN_INPUT_SELECT, FONT_NORMAL, sScreenControl->wordSelectPrintBuffer, (j * 13 + 3) * 8, y, TEXT_SKIP_DRAW, NULL); else // Never reached - 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); + PrintEasyChatTextWithColors(WIN_INPUT_SELECT, 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, COPYWIN_GFX); + CopyWindowToVram(WIN_INPUT_SELECT, COPYWIN_GFX); } static void EraseWordSelectRows(u8 scrollOffset, u8 numRows) @@ -4364,15 +4376,15 @@ static void EraseWordSelectRows(u8 scrollOffset, u8 numRows) var1 = 0; } - FillWindowPixelRect(2, PIXEL_FILL(1), 0, y, 224, var2); + FillWindowPixelRect(WIN_INPUT_SELECT, PIXEL_FILL(1), 0, y, 224, var2); if (var1) - FillWindowPixelRect(2, PIXEL_FILL(1), 0, 0, 224, var1); + FillWindowPixelRect(WIN_INPUT_SELECT, PIXEL_FILL(1), 0, 0, 224, var1); } static void ClearWordSelectWindow(void) { - FillWindowPixelBuffer(2, PIXEL_FILL(1)); - CopyWindowToVram(2, COPYWIN_GFX); + FillWindowPixelBuffer(WIN_INPUT_SELECT, PIXEL_FILL(1)); + CopyWindowToVram(WIN_INPUT_SELECT, COPYWIN_GFX); } static void InitLowerWindowAnim(int winAnimType) diff --git a/src/egg_hatch.c b/src/egg_hatch.c index b7ae2e2cebce..3a5937ba4dab 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -145,14 +145,14 @@ static const union AnimCmd *const sSpriteAnimTable_Egg[] = static const struct SpriteSheet sEggHatch_Sheet = { .data = sEggHatchTiles, - .size = 0x800, + .size = sizeof(sEggHatchTiles), .tag = GFXTAG_EGG, }; static const struct SpriteSheet sEggShards_Sheet = { .data = sEggShardTiles, - .size = 0x80, + .size = sizeof(sEggShardTiles), .tag = GFXTAG_EGG_SHARD, }; @@ -378,9 +378,6 @@ static void AddHatchedMonToParty(u8 id) GetMonNickname2(mon, gStringVar1); - ball = ITEM_POKE_BALL; - SetMonData(mon, MON_DATA_POKEBALL, &ball); - // A met level of 0 is interpreted on the summary screen as "hatched at" metLevel = 0; SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); @@ -532,7 +529,7 @@ static void CB2_LoadEggHatch(void) case 2: DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0); - LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20); + LoadCompressedPalette(gBattleTextboxPalette, BG_PLTT_ID(0), PLTT_SIZE_4BPP); gMain.state++; break; case 3: @@ -556,7 +553,7 @@ static void CB2_LoadEggHatch(void) break; case 7: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); - LoadPalette(gTradeGba2_Pal, 0x10, 0xA0); + LoadPalette(gTradeGba2_Pal, BG_PLTT_ID(1), 5 * PLTT_SIZE_4BPP); LoadBgTiles(1, gTradeGba_Gfx, 0x1420, 0); CopyToBgTilemapBuffer(1, gTradePlatform_Tilemap, 0x1000, 0); CopyBgTilemapBufferToVram(1); @@ -678,7 +675,7 @@ static void CB2_EggHatch(void) // Print the nickname prompt if (!IsTextPrinterActive(sEggHatchData->windowId)) { - LoadUserWindowBorderGfx(sEggHatchData->windowId, 0x140, 0xE0); + LoadUserWindowBorderGfx(sEggHatchData->windowId, 0x140, BG_PLTT_ID(14)); CreateYesNoMenu(&sYesNoWinTemplate, 0x140, 0xE, 0); sEggHatchData->state++; } diff --git a/src/ereader_screen.c b/src/ereader_screen.c index b6bf7133a02b..c625c78a9e3c 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -5,6 +5,7 @@ #include "link.h" #include "main.h" #include "mystery_gift_menu.h" +#include "mystery_gift_client.h" #include "save.h" #include "sound.h" #include "sprite.h" @@ -98,7 +99,7 @@ static u8 EReader_Transfer(struct EReaderData *eReader) static void OpenEReaderLink(void) { memset(gDecompressionBuffer, 0, 0x2000); - gLinkType = LINKTYPE_EREADER; + gLinkType = LINKTYPE_EREADER_EM; OpenLink(); SetSuppressLinkErrorMessage(TRUE); } @@ -259,7 +260,7 @@ void CreateEReaderTask(void) data->unused2 = 0; data->unused3 = 0; data->status = 0; - data->unusedBuffer = AllocZeroed(0x40); + data->unusedBuffer = AllocZeroed(CLIENT_MAX_MSG_SIZE); } static void ResetTimer(u16 *timer) @@ -342,7 +343,7 @@ static void Task_EReader(u8 taskId) case ER_STATE_MSG_SELECT_CONNECT: if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_SelectConnectFromEReaderMenu)) { - AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA); + MG_AddMessageTextPrinter(gJPText_SelectConnectWithGBA); ResetTimer(&data->timer); data->state = ER_STATE_MSG_SELECT_CONNECT_WAIT; } @@ -396,7 +397,7 @@ static void Task_EReader(u8 taskId) data->state = ER_STATE_MSG_SELECT_CONNECT; break; case ER_STATE_CONNECTING: - AddTextPrinterToWindow1(gJPText_Connecting); + MG_AddMessageTextPrinter(gJPText_Connecting); // 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; @@ -415,7 +416,7 @@ static void Task_EReader(u8 taskId) else if (data->status == TRANSFER_SUCCESS) { ResetTimer(&data->timer); - AddTextPrinterToWindow1(gJPText_PleaseWaitAMoment); + MG_AddMessageTextPrinter(gJPText_PleaseWaitAMoment); data->state = ER_STATE_TRANSFER_SUCCESS; } else // TRANSFER_CANCELED @@ -429,7 +430,7 @@ static void Task_EReader(u8 taskId) break; case ER_STATE_LOAD_CARD_START: OpenEReaderLink(); - AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard); + MG_AddMessageTextPrinter(gJPText_AllowEReaderToLoadCard); data->state = ER_STATE_LOAD_CARD; break; case ER_STATE_LOAD_CARD: @@ -438,7 +439,7 @@ static void Task_EReader(u8 taskId) case RECV_ACTIVE: break; case RECV_SUCCESS: - AddTextPrinterToWindow1(gJPText_Connecting); + MG_AddMessageTextPrinter(gJPText_Connecting); data->state = ER_STATE_WAIT_RECV_CARD; break; case RECV_CANCELED: @@ -486,7 +487,7 @@ static void Task_EReader(u8 taskId) case ER_STATE_SAVE: if (TryWriteTrainerHill((struct EReaderTrainerHillSet *)&gDecompressionBuffer)) { - AddTextPrinterToWindow1(gJPText_ConnectionComplete); + MG_AddMessageTextPrinter(gJPText_ConnectionComplete); ResetTimer(&data->timer); data->state = ER_STATE_SUCCESS_MSG; } @@ -498,7 +499,7 @@ static void Task_EReader(u8 taskId) case ER_STATE_SUCCESS_MSG: if (UpdateTimer(&data->timer, 120)) { - AddTextPrinterToWindow1(gJPText_NewTrainerHasComeToHoenn); + MG_AddMessageTextPrinter(gJPText_NewTrainerHasComeToHoenn); PlayFanfare(MUS_OBTAIN_ITEM); data->state = ER_STATE_SUCCESS_END; } diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 057b6185af88..ae48223c3a61 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -498,7 +498,12 @@ 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}, - {}, +#ifdef BUGFIX + {NULL, OBJ_EVENT_PAL_TAG_NONE}, +#else + {}, // BUG: FindObjectEventPaletteIndexByTag looks for OBJ_EVENT_PAL_TAG_NONE and not 0x0. + // If it's looking for a tag that isn't in this table, the game locks in an infinite loop. +#endif }; static const u16 sReflectionPaletteTags_Brendan[] = { @@ -1994,7 +1999,12 @@ static void LoadObjectEventPalette(u16 paletteTag) { u16 i = FindObjectEventPaletteIndexByTag(paletteTag); - if (i != OBJ_EVENT_PAL_TAG_NONE) // always true +// FindObjectEventPaletteIndexByTag returns 0xFF on failure, not OBJ_EVENT_PAL_TAG_NONE. +#ifdef BUGFIX + if (i != 0xFF) +#else + if (i != OBJ_EVENT_PAL_TAG_NONE) +#endif LoadSpritePaletteIfTagExists(&sObjectEventSpritePalettes[i]); } @@ -2017,9 +2027,10 @@ static u8 LoadSpritePaletteIfTagExists(const struct SpritePalette *spritePalette void PatchObjectPalette(u16 paletteTag, u8 paletteSlot) { + // paletteTag is assumed to exist in sObjectEventSpritePalettes u8 paletteIndex = FindObjectEventPaletteIndexByTag(paletteTag); - LoadPalette(sObjectEventSpritePalettes[paletteIndex].data, 16 * paletteSlot + 0x100, 0x20); + LoadPalette(sObjectEventSpritePalettes[paletteIndex].data, OBJ_PLTT_ID(paletteSlot), PLTT_SIZE_4BPP); } void PatchObjectPaletteRange(const u16 *paletteTags, u8 minSlot, u8 maxSlot) @@ -4643,7 +4654,7 @@ u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir) { u8 direction = dir; -#if DEBUG_SYSTEM_ENABLE == TRUE +#if DEBUG_FLAG_NO_COLLISION != 0 if (FlagGet(DEBUG_FLAG_NO_COLLISION)) return COLLISION_NONE; #endif diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 39cf8e4c23d2..a3639d4c7413 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -264,7 +264,7 @@ void EvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u currSpecies, personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(currSpecies, trainerId, personality); - LoadCompressedPalette(pokePal->data, 0x110, 0x20); + LoadCompressedPalette(pokePal->data, OBJ_PLTT_ID(1), PLTT_SIZE_4BPP); SetMultiuseSpriteTemplateToPokemon(currSpecies, B_POSITION_OPPONENT_LEFT); gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; @@ -279,7 +279,7 @@ void EvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u postEvoSpecies, personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality); - LoadCompressedPalette(pokePal->data, 0x120, 0x20); + LoadCompressedPalette(pokePal->data, OBJ_PLTT_ID(2), PLTT_SIZE_4BPP); SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, B_POSITION_OPPONENT_RIGHT); gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; @@ -357,7 +357,7 @@ static void CB2_EvolutionSceneLoadGraphics(void) personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality); - LoadCompressedPalette(pokePal->data, 0x120, 0x20); + LoadCompressedPalette(pokePal->data, OBJ_PLTT_ID(2), PLTT_SIZE_4BPP); SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, B_POSITION_OPPONENT_RIGHT); gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; @@ -428,7 +428,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) postEvoSpecies, personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality); - LoadCompressedPalette(pokePal->data, 0x120, 0x20); + LoadCompressedPalette(pokePal->data, OBJ_PLTT_ID(2), PLTT_SIZE_4BPP); gMain.state++; } break; @@ -493,7 +493,7 @@ void TradeEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, u8 preEvoSprit personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality); - LoadCompressedPalette(pokePal->data, 0x120, 0x20); + LoadCompressedPalette(pokePal->data, OBJ_PLTT_ID(2), PLTT_SIZE_4BPP); SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, B_POSITION_OPPONENT_LEFT); gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; @@ -1312,7 +1312,7 @@ static void Task_TradeEvolutionScene(u8 taskId) case T_MVSTATE_PRINT_YES_NO: if (!IsTextPrinterActive(0) && !IsSEPlaying()) { - LoadUserWindowBorderGfx(0, 0xA8, 0xE0); + LoadUserWindowBorderGfx(0, 0xA8, BG_PLTT_ID(14)); CreateYesNoMenu(&gTradeEvolutionSceneYesNoWindowTemplate, 0xA8, 0xE, 0); sEvoCursorPos = 0; gTasks[taskId].tLearnMoveState++; @@ -1518,7 +1518,7 @@ static void Task_UpdateBgPalette(u8 taskId) else { // Haven't reached final palette in current stage, load the current palette - LoadPalette(&sBgAnimPal[tPalStage * 16], 0xA0, 0x20); + LoadPalette(&sBgAnimPal[tPalStage * 16], BG_PLTT_ID(10), PLTT_SIZE_4BPP); tCycleTimer = 0; tPalStage++; } @@ -1616,7 +1616,7 @@ static void StartBgAnimation(bool8 isLink) else innerBgId = 1, outerBgId = 3; - LoadPalette(sBgAnim_Intro_Pal, 0xA0, 0x20); + LoadPalette(sBgAnim_Intro_Pal, BG_PLTT_ID(10), PLTT_SIZE_4BPP); DecompressAndLoadBgGfxUsingHeap(1, sBgAnim_Gfx, FALSE, 0, 0); CopyToBgTilemapBuffer(innerBgId, sBgAnim_Inner_Tilemap, 0, 0); @@ -1655,7 +1655,7 @@ static void PauseBgPaletteAnim(void) if (taskId != TASK_NONE) gTasks[taskId].tPaused = TRUE; - FillPalette(RGB_BLACK, 0xA0, 0x20); + FillPalette(RGB_BLACK, BG_PLTT_ID(10), PLTT_SIZE_4BPP); } #undef tPaused @@ -1669,7 +1669,7 @@ static void StopBgAnimation(void) if ((taskId = FindTaskIdByFunc(Task_AnimateBg)) != TASK_NONE) DestroyTask(taskId); - FillPalette(RGB_BLACK, 0xA0, 0x20); + FillPalette(RGB_BLACK, BG_PLTT_ID(10), PLTT_SIZE_4BPP); RestoreBgAfterAnim(); } diff --git a/src/expansion_intro.c b/src/expansion_intro.c new file mode 100644 index 000000000000..8fdb7c1cb8bf --- /dev/null +++ b/src/expansion_intro.c @@ -0,0 +1,417 @@ +#include "global.h" +#include "bg.h" +#include "decompress.h" +#include "palette.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "gpu_regs.h" +#include "trig.h" +#include "main.h" +#include "intro.h" +#include "m4a.h" +#include "expansion_intro.h" +#include "constants/rgb.h" +#include "constants/songs.h" + +#if EXPANSION_INTRO == TRUE + +#define TAG_DIZZY 20000 +#define TAG_PORYGON 20001 + +#define PAL_TAG_DIZZY 20000 +#define PAL_TAG_PORYGON 20001 + +#define DIZZY_POS_X 300 +#define DIZZY_POS_Y 138 +#define DIZZY_COLLISION_POS_X 172 +#define PORY_POS_X -32 +#define PORY_POS_Y 115 +#define PORYGON_COLLISION_POS_X 140 +#define PORYGON_WAIT_TIME 99 + +#define DIZZY_ANIM_SPEED 4 +#define DIZZY_STARS_SPEED 12 + +enum +{ + EXPANSION_INTRO_BG2, + EXPANSION_INTRO_BG3 +}; + +enum +{ + ANIM_PORY_IDLE, + ANIM_PORY_HIT, + ANIM_PORY_GO_UP +}; + +enum +{ + ANIM_DIZZY_WALKING, + ANIM_DIZZY_DIZZY +}; + +static const u32 sBgTiles_PoweredBy[] = INCBIN_U32("graphics/expansion_intro/powered_by.4bpp.lz"); +static const u32 sBgTiles_RhhCredits[] = INCBIN_U32("graphics/expansion_intro/rhh_credits.8bpp.lz"); +static const u32 sBgMap_PoweredBy[] = INCBIN_U32("graphics/expansion_intro/powered_by.bin.lz"); +static const u32 sBgMap_RhhCredits[] = INCBIN_U32("graphics/expansion_intro/rhh_credits.bin.lz"); +static const u32 sBgPal_Credits[] = INCBIN_U32("graphics/expansion_intro/credits.gbapal.lz"); +static const u32 sSpriteTiles_DizzyEgg[] = INCBIN_U32("graphics/expansion_intro/sprites/dizzy_egg.4bpp.lz"); +static const u32 sSpriteTiles_Porygon[] = INCBIN_U32("graphics/expansion_intro/sprites/porygon.4bpp.lz"); +static const u16 sSpritePal_DizzyEgg[] = INCBIN_U16("graphics/expansion_intro/sprites/dizzy_egg.gbapal"); +static const u16 sSpritePal_Porygon[] = INCBIN_U16("graphics/expansion_intro/sprites/porygon.gbapal"); +static const u16 sSpritePal_PorygonShiny[] = INCBIN_U16("graphics/expansion_intro/sprites/shiny.gbapal"); + +static void SpriteCallback_DizzyWalking(struct Sprite* sprite); +static void SpriteCallback_PorygonFlying(struct Sprite* sprite); +static void Task_ExpansionIntro_HandleBlend(u8 taskId); +static void VBlankCB_ExpansionIntro(void); +static void ExpansionIntro_InitBgs(); +static void ExpansionIntro_StartBlend(); +static void ExpansionIntro_LoadGraphics(); +static void ExpansionIntro_CreateSprites(); + +static const union AnimCmd sAnimCmd_DizzyWalking[] = +{ + ANIMCMD_FRAME(32, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(16, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(0, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(16, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(32, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(48, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(64, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(48, DIZZY_ANIM_SPEED), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnimCmd_DizzyisDizzy[] = +{ + ANIMCMD_FRAME(80, DIZZY_STARS_SPEED), + ANIMCMD_FRAME(96, DIZZY_STARS_SPEED), + ANIMCMD_FRAME(112, DIZZY_STARS_SPEED), + ANIMCMD_FRAME(96, DIZZY_STARS_SPEED), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const sAnimCmdTable_DizzyEgg[] = +{ + [ANIM_DIZZY_WALKING] = sAnimCmd_DizzyWalking, + [ANIM_DIZZY_DIZZY] = sAnimCmd_DizzyisDizzy, +}; + +static const union AnimCmd sAnimCmd_PorygonIdle[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sAnimCmd_PorygonHitted[] = +{ + ANIMCMD_FRAME(64, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sAnimCmd_PorygonGoUp[] = +{ + ANIMCMD_FRAME(64, 20), + ANIMCMD_FRAME(128, 10), + ANIMCMD_END, +}; + +static const union AnimCmd *const sAnimCmdTable_Porygon[] = +{ + [ANIM_PORY_IDLE] = sAnimCmd_PorygonIdle, + [ANIM_PORY_HIT] = sAnimCmd_PorygonHitted, + [ANIM_PORY_GO_UP] = sAnimCmd_PorygonGoUp, +}; + +static const union AffineAnimCmd sAffineAnimCmd_PorygonScale[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const sAffineAnimCmdTable_Porygon[] = +{ + sAffineAnimCmd_PorygonScale, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_DizzyEgg = +{ + .data = sSpriteTiles_DizzyEgg, + .size = 0x1000, + .tag = TAG_DIZZY, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Porygon = +{ + .data = sSpriteTiles_Porygon, + .size = 0x2800, + .tag = PAL_TAG_PORYGON, +}; + +static const struct SpritePalette sSpritePalette_DizzyEgg = +{ + .data = sSpritePal_DizzyEgg, + .tag = PAL_TAG_DIZZY, +}; + +static const struct SpritePalette sSpritePalette_Porygon = +{ + .data = sSpritePal_Porygon, + .tag = PAL_TAG_PORYGON, +}; + +static const struct OamData sOamData_DizzyEgg = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .priority = 0, +}; + +static const struct OamData sOamData_Porygon = +{ + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_DizzyEgg = +{ + .tileTag = TAG_DIZZY, + .paletteTag = PAL_TAG_DIZZY, + .oam = &sOamData_DizzyEgg, + .anims = sAnimCmdTable_DizzyEgg, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallback_DizzyWalking, +}; + +static const struct SpriteTemplate sSpriteTemplate_Porygon = +{ + .tileTag = TAG_PORYGON, + .paletteTag = PAL_TAG_PORYGON, + .oam = &sOamData_Porygon, + .anims = sAnimCmdTable_Porygon, + .images = NULL, + .affineAnims = sAffineAnimCmdTable_Porygon, + .callback = SpriteCallback_PorygonFlying, +}; + +static const struct BgTemplate sBgTemplates_RhhCopyrightScreen[] = +{ + [EXPANSION_INTRO_BG2] = { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 20, + .screenSize = 2, + .paletteMode = 1 + }, + [EXPANSION_INTRO_BG3] = { + .bg = 3, + .mapBaseIndex = 22, + .screenSize = 2 + }, +}; + +void CB2_ExpansionIntro(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +#define tState gTasks[taskId].data[0] +#define tFrameCounter gTasks[taskId].data[1] +void Task_HandleExpansionIntro(u8 taskId) +{ + switch (tState) + { + case 0: + SetVBlankCallback(VBlankCB_ExpansionIntro); + ExpansionIntro_InitBgs(); + ExpansionIntro_LoadGraphics(); + CpuFastFill16(RGB_BLACK, gPlttBufferFaded, 32); + ShowBg(3); + BeginNormalPaletteFade(1, 0, 16, 0, RGB_BLACK); + ExpansionIntro_StartBlend(); + ExpansionIntro_CreateSprites(); + tState++; + break; + case 1: + if (!gPaletteFade.active) + tState++; + break; + case 2: + if (tFrameCounter == 208) + { + tState++; + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + } + else if (gMain.newKeys != 0) + { + CpuFill16(0, gPlttBufferFaded, sizeof(gPlttBufferFaded)); + if (IsCryPlaying()) + StopCry(); + m4aSongNumStop(SE_BIKE_HOP); + m4aSongNumStop(SE_M_DOUBLE_SLAP); + tState++; + } + else + { + tFrameCounter++; + } + break; + case 3: + if (!gPaletteFade.active) + { + ResetSpriteData(); + FreeAllSpritePalettes(); + DestroyTask(taskId); + CreateTask(Task_Scene1_Load, 0); + SetMainCallback2(MainCB2_Intro); + } + break; + } +} +#undef tState + +static void VBlankCB_ExpansionIntro(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void ExpansionIntro_InitBgs(void) +{ + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sBgTemplates_RhhCopyrightScreen, ARRAY_COUNT(sBgTemplates_RhhCopyrightScreen)); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_EFFECT_DARKEN); + SetGpuReg(REG_OFFSET_BLDY, 0x1F); + HideBg(0); + HideBg(1); + HideBg(2); + HideBg(3); +} + +static void ExpansionIntro_LoadGraphics(void) +{ + LZ77UnCompVram(sBgTiles_PoweredBy, (void*) BG_CHAR_ADDR(sBgTemplates_RhhCopyrightScreen[EXPANSION_INTRO_BG3].charBaseIndex)); + LZ77UnCompVram(sBgMap_PoweredBy, (u16*) BG_SCREEN_ADDR(sBgTemplates_RhhCopyrightScreen[EXPANSION_INTRO_BG3].mapBaseIndex)); + LZ77UnCompVram(sBgTiles_RhhCredits, (void*) BG_CHAR_ADDR(sBgTemplates_RhhCopyrightScreen[EXPANSION_INTRO_BG2].charBaseIndex)); + LZ77UnCompVram(sBgMap_RhhCredits, (u16*) BG_SCREEN_ADDR(sBgTemplates_RhhCopyrightScreen[EXPANSION_INTRO_BG2].mapBaseIndex)); + LoadCompressedPalette(sBgPal_Credits, 0x00, 0x60); + + LoadCompressedSpriteSheet(&sSpriteSheet_DizzyEgg); + LoadCompressedSpriteSheet(&sSpriteSheet_Porygon); + LoadSpritePalette(&sSpritePalette_DizzyEgg); + LoadSpritePalette(&sSpritePalette_Porygon); +} + +static void ExpansionIntro_CreateSprites(void) +{ + u32 dizzyId, poryId; + + dizzyId = CreateSprite(&sSpriteTemplate_DizzyEgg, 0, DIZZY_POS_Y, 0); + gSprites[dizzyId].x2 = DIZZY_POS_X; + + poryId = CreateSprite(&sSpriteTemplate_Porygon, 0, PORY_POS_Y, 0); + gSprites[poryId].x2 = PORY_POS_X; +} + +static void ExpansionIntro_StartBlend(void) +{ + ShowBg(2); + CreateTask(Task_ExpansionIntro_HandleBlend, 0); +} + +static void Task_ExpansionIntro_HandleBlend(u8 taskId) +{ + if (GetGpuReg(REG_OFFSET_BLDY) != 0) + { + SetGpuReg(REG_OFFSET_BLDY, GetGpuReg(REG_OFFSET_BLDY) - 1); + } + else + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + DestroyTask(taskId); + } +} + +#define sTimer data[0] +static void SpriteCallback_DizzyWalking(struct Sprite* sprite) +{ + sprite->x2--; + + if (sprite->x2 <= DIZZY_COLLISION_POS_X) + { + StartSpriteAnim(sprite, ANIM_DIZZY_DIZZY); + sprite->callback = SpriteCallbackDummy; + } + + if (sprite->sTimer % 16 == 0 && sprite->sTimer / 16 > 2) + PlaySE(SE_BIKE_HOP); + + sprite->sTimer++; +} + + +static void SpriteCallback_PorygonHit(struct Sprite* sprite) +{ + sprite->x2-=2; + sprite ->y2 = Sin2(180 + sprite->sTimer * 4) / 128; + + if (sprite->sTimer >= 48) + { + StartSpriteAnim(sprite, ANIM_PORY_GO_UP); + sprite->callback = SpriteCallbackDummy; + } + + if (sprite->sTimer % 8 == 0) + { + if (sprite->sTimer % 16 == 0) + LoadPalette(sSpritePal_PorygonShiny, 0x10 * (16 + sprite->oam.paletteNum), 0x20); + else + LoadPalette(sSpritePal_Porygon, 0x10 * (16 + sprite->oam.paletteNum), 0x20); + } + + sprite->sTimer++; +} + +static void SpriteCallback_PorygonFlying(struct Sprite* sprite) +{ + if (sprite->sTimer >= PORYGON_WAIT_TIME) + { + sprite->x2 += 6; + + if (sprite->sTimer % 32 >= 16) + sprite->y2--; + else + sprite->y2++; + + if (sprite->x2 >= PORYGON_COLLISION_POS_X) + { + StartSpriteAnim(sprite, ANIM_PORY_HIT); + sprite->callback = SpriteCallback_PorygonHit; + sprite->sTimer = 0; + PlaySE(SE_M_DOUBLE_SLAP); + PlayCryInternal(SPECIES_PORYGON, 0, 120, 10, 0); + } + } + sprite->sTimer++; +} +#undef sTimer + +#endif //EXPANSION_INTRO diff --git a/src/field_camera.c b/src/field_camera.c index 8b53451c01c5..3f7e29208ca5 100644 --- a/src/field_camera.c +++ b/src/field_camera.c @@ -237,7 +237,7 @@ static void DrawMetatileAt(const struct MapLayout *mapLayout, u16 offset, int x, metatiles = mapLayout->secondaryTileset->metatiles; metatileId -= NUM_METATILES_IN_PRIMARY; } - DrawMetatile(MapGridGetMetatileLayerTypeAt(x, y), metatiles + metatileId * 8, offset); + DrawMetatile(MapGridGetMetatileLayerTypeAt(x, y), metatiles + metatileId * NUM_TILES_PER_METATILE, offset); } static void DrawMetatile(s32 metatileLayerType, const u16 *tiles, u16 offset) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 5066eca3a092..96e9173c9bcb 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -131,11 +131,11 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) else if (heldKeys & DPAD_RIGHT) input->dpadDirection = DIR_EAST; -#if DEBUG_SYSTEM_ENABLE == TRUE && DEBUG_SYSTEM_IN_MENU == FALSE - if ((heldKeys & DEBUG_SYSTEM_HELD_KEYS) && input->DEBUG_SYSTEM_TRIGGER_EVENT) +#if DEBUG_OVERWORLD_MENU == TRUE && DEBUG_OVERWORLD_IN_MENU == FALSE + if ((heldKeys & DEBUG_OVERWORLD_HELD_KEYS) && input->DEBUG_OVERWORLD_TRIGGER_EVENT) { input->input_field_1_2 = TRUE; - input->DEBUG_SYSTEM_TRIGGER_EVENT = FALSE; + input->DEBUG_OVERWORLD_TRIGGER_EVENT = FALSE; } #endif } @@ -197,7 +197,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input) if (input->pressedSelectButton && UseRegisteredKeyItemOnField() == TRUE) return TRUE; -#if DEBUG_SYSTEM_ENABLE == TRUE && DEBUG_SYSTEM_IN_MENU == FALSE +#if DEBUG_OVERWORLD_MENU == TRUE && DEBUG_OVERWORLD_IN_MENU == FALSE if (input->input_field_1_2) { PlaySE(SE_WIN_OPEN); diff --git a/src/field_effect.c b/src/field_effect.c index 4b651b2a3072..b5880b3fcbd7 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -903,7 +903,7 @@ u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buf void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) { LZDecompressVram(gTrainerFrontPicTable[gender].data, dest); - LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, 0x20); + LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, PLTT_SIZE_4BPP); } u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority) @@ -2630,7 +2630,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, sizeof(sFieldMoveStreaksOutdoors_Pal)); + LoadPalette(sFieldMoveStreaksOutdoors_Pal, BG_PLTT_ID(15), sizeof(sFieldMoveStreaksOutdoors_Pal)); LoadFieldMoveOutdoorStreaksTilemap(delta); task->tState++; } @@ -2793,7 +2793,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, sizeof(sFieldMoveStreaksIndoors_Pal)); + LoadPalette(sFieldMoveStreaksIndoors_Pal, BG_PLTT_ID(15), sizeof(sFieldMoveStreaksIndoors_Pal)); task->tState++; } @@ -3092,7 +3092,7 @@ u8 FldEff_RayquazaSpotlight(void) SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(14, 14)); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); - LoadPalette(sSpotlight_Pal, 0xC0, sizeof(sSpotlight_Pal)); + LoadPalette(sSpotlight_Pal, BG_PLTT_ID(12), sizeof(sSpotlight_Pal)); SetGpuReg(REG_OFFSET_BG0VOFS, 120); for (i = 3; i < 15; i++) { @@ -3831,26 +3831,38 @@ static void SpriteCB_DeoxysRockFragment(struct Sprite *sprite) DestroySprite(sprite); } +// Task data for Task_MoveDeoxysRock +#define tState data[0] +#define tSpriteId data[1] +#define tTargetX data[2] +#define tTargetY data[3] +#define tCurX data[4] +#define tCurY data[5] +#define tVelocityX data[6] +#define tVelocityY data[7] +#define tMoveSteps data[8] +#define tObjEventId data[9] + bool8 FldEff_MoveDeoxysRock(struct Sprite *sprite) { - u8 objectEventIdBuffer; - if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer)) + u8 objectEventId; + if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventId)) { struct ObjectEvent *object; int xPos, yPos; u8 taskId; - object = &gObjectEvents[objectEventIdBuffer]; + object = &gObjectEvents[objectEventId]; 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] + 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; - gTasks[taskId].data[3] = gSprites[object->spriteId].y + yPos; - gTasks[taskId].data[8] = gFieldEffectArguments[5]; - gTasks[taskId].data[9] = objectEventIdBuffer; + gTasks[taskId].tSpriteId = object->spriteId; + gTasks[taskId].tTargetX = gSprites[object->spriteId].x + xPos; + gTasks[taskId].tTargetY = gSprites[object->spriteId].y + yPos; + gTasks[taskId].tMoveSteps = gFieldEffectArguments[5]; + gTasks[taskId].tObjEventId = objectEventId; } return FALSE; } @@ -3858,29 +3870,30 @@ bool8 FldEff_MoveDeoxysRock(struct Sprite *sprite) static void Task_MoveDeoxysRock(u8 taskId) { s16 *data = gTasks[taskId].data; - struct Sprite *sprite = &gSprites[data[1]]; - switch (data[0]) + struct Sprite *sprite = &gSprites[tSpriteId]; + switch (tState) { case 0: - data[4] = sprite->x << 4; - data[5] = sprite->y << 4; - data[6] = SAFE_DIV(data[2] * 16 - data[4], data[8]); - data[7] = SAFE_DIV(data[3] * 16 - data[5], data[8]); - data[0]++; + tCurX = sprite->x << 4; + tCurY = sprite->y << 4; + tVelocityX = SAFE_DIV(tTargetX * 16 - tCurX, tMoveSteps); + tVelocityY = SAFE_DIV(tTargetY * 16 - tCurY, tMoveSteps); + tState++; + // fallthrough case 1: - if (data[8] != 0) + if (tMoveSteps != 0) { - data[8]--; - data[4] += data[6]; - data[5] += data[7]; - sprite->x = data[4] >> 4; - sprite->y = data[5] >> 4; + tMoveSteps--; + tCurX += tVelocityX; + tCurY += tVelocityY; + sprite->x = tCurX >> 4; + sprite->y = tCurY >> 4; } else { - struct ObjectEvent *object = &gObjectEvents[data[9]]; - sprite->x = data[2]; - sprite->y = data[3]; + struct ObjectEvent *object = &gObjectEvents[tObjEventId]; + sprite->x = tTargetX; + sprite->y = tTargetY; ShiftStillObjectEventCoords(object); object->triggerGroundEffectsOnStop = TRUE; FieldEffectActiveListRemove(FLDEFF_MOVE_DEOXYS_ROCK); @@ -3890,3 +3903,13 @@ static void Task_MoveDeoxysRock(u8 taskId) } } +#undef tState +#undef tSpriteId +#undef tTargetX +#undef tTargetY +#undef tCurX +#undef tCurY +#undef tVelocityX +#undef tVelocityY +#undef tMoveSteps +#undef tObjEventId diff --git a/src/field_region_map.c b/src/field_region_map.c index 43055174fa55..73fc14582b0d 100644 --- a/src/field_region_map.c +++ b/src/field_region_map.c @@ -23,9 +23,15 @@ * For the fly map, and utility functions all of the maps use, see region_map.c */ -// Static type declarations +enum { + WIN_MAPSEC_NAME, + WIN_TITLE, +}; -// Static RAM declarations +enum { + TAG_PLAYER_ICON, + TAG_CURSOR, +}; static EWRAM_DATA struct { MainCallback callback; @@ -34,16 +40,12 @@ static EWRAM_DATA struct { u16 state; } *sFieldRegionMapHandler = NULL; -// Static ROM declarations - static void MCB2_InitRegionMapRegisters(void); static void VBCB_FieldUpdateRegionMap(void); static void MCB2_FieldUpdateRegionMap(void); static void FieldUpdateRegionMap(void); static void PrintRegionMapSecName(void); -// .rodata - static const struct BgTemplate sFieldRegionMapBgTemplates[] = { { .bg = 0, @@ -66,7 +68,7 @@ static const struct BgTemplate sFieldRegionMapBgTemplates[] = { static const struct WindowTemplate sFieldRegionMapWindowTemplates[] = { - { + [WIN_MAPSEC_NAME] = { .bg = 0, .tilemapLeft = 17, .tilemapTop = 17, @@ -75,7 +77,7 @@ static const struct WindowTemplate sFieldRegionMapWindowTemplates[] = .paletteNum = 15, .baseBlock = 1 }, - { + [WIN_TITLE] = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 1, @@ -87,8 +89,6 @@ static const struct WindowTemplate sFieldRegionMapWindowTemplates[] = DUMMY_WIN_TEMPLATE }; -// .text - void FieldInitRegionMap(MainCallback callback) { SetVBlankCallback(NULL); @@ -115,7 +115,7 @@ static void MCB2_InitRegionMapRegisters(void) InitBgsFromTemplates(1, sFieldRegionMapBgTemplates, ARRAY_COUNT(sFieldRegionMapBgTemplates)); InitWindows(sFieldRegionMapWindowTemplates); DeactivateAllTextPrinters(); - LoadUserWindowBorderGfx(0, 0x27, 0xd0); + LoadUserWindowBorderGfx(0, 0x27, BG_PLTT_ID(13)); ClearScheduledBgCopiesToVram(); SetMainCallback2(MCB2_FieldUpdateRegionMap); SetVBlankCallback(VBCB_FieldUpdateRegionMap); @@ -145,16 +145,16 @@ static void FieldUpdateRegionMap(void) { case 0: InitRegionMap(&sFieldRegionMapHandler->regionMap, FALSE); - CreateRegionMapPlayerIcon(0, 0); - CreateRegionMapCursor(1, 1); + CreateRegionMapPlayerIcon(TAG_PLAYER_ICON, TAG_PLAYER_ICON); + CreateRegionMapCursor(TAG_CURSOR, TAG_CURSOR); sFieldRegionMapHandler->state++; break; case 1: - DrawStdFrameWithCustomTileAndPalette(1, FALSE, 0x27, 0xd); + DrawStdFrameWithCustomTileAndPalette(WIN_TITLE, FALSE, 0x27, 0xd); offset = GetStringCenterAlignXOffset(FONT_NORMAL, gText_Hoenn, 0x38); - AddTextPrinterParameterized(1, FONT_NORMAL, gText_Hoenn, offset, 1, 0, NULL); + AddTextPrinterParameterized(WIN_TITLE, FONT_NORMAL, gText_Hoenn, offset, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); - DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x27, 0xd); + DrawStdFrameWithCustomTileAndPalette(WIN_MAPSEC_NAME, FALSE, 0x27, 0xd); PrintRegionMapSecName(); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); sFieldRegionMapHandler->state++; @@ -203,13 +203,13 @@ static void PrintRegionMapSecName(void) { if (sFieldRegionMapHandler->regionMap.mapSecType != MAPSECTYPE_NONE) { - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, FONT_NORMAL, sFieldRegionMapHandler->regionMap.mapSecName, 0, 1, 0, NULL); - ScheduleBgCopyTilemapToVram(0); + FillWindowPixelBuffer(WIN_MAPSEC_NAME, PIXEL_FILL(1)); + AddTextPrinterParameterized(WIN_MAPSEC_NAME, FONT_NORMAL, sFieldRegionMapHandler->regionMap.mapSecName, 0, 1, 0, NULL); + ScheduleBgCopyTilemapToVram(WIN_MAPSEC_NAME); } else { - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - CopyWindowToVram(0, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_MAPSEC_NAME, PIXEL_FILL(1)); + CopyWindowToVram(WIN_MAPSEC_NAME, COPYWIN_FULL); } } diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 57f8cc52e4dd..616444116cee 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -1079,9 +1079,7 @@ static void LoadOrbEffectPalette(bool8 blueOrb) color[0] = RGB_BLUE; for (i = 0; i < 16; i++) - { - LoadPalette(color, 0xF0 + i, 2); - } + LoadPalette(color, BG_PLTT_ID(15) + i, PLTT_SIZEOF(1)); } static bool8 UpdateOrbEffectBlend(u16 shakeDir) diff --git a/src/field_specials.c b/src/field_specials.c index 4a3721d10af9..3ae01543c3a4 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -46,6 +46,7 @@ #include "wallclock.h" #include "window.h" #include "constants/battle_frontier.h" +#include "constants/battle_pyramid.h" #include "constants/battle_tower.h" #include "constants/decorations.h" #include "constants/event_objects.h" @@ -67,6 +68,15 @@ #include "palette.h" #include "battle_util.h" +#define TAG_ITEM_ICON 5500 + +#define GFXTAG_MULTICHOICE_SCROLL_ARROWS 2000 +#define PALTAG_MULTICHOICE_SCROLL_ARROWS 100 + +#define ELEVATOR_WINDOW_WIDTH 3 +#define ELEVATOR_WINDOW_HEIGHT 3 +#define ELEVATOR_LIGHT_STAGES 3 + EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE; EWRAM_DATA u8 gBikeCollisions = 0; static EWRAM_DATA u32 sBikeCyclingTimer = 0; @@ -95,8 +105,8 @@ 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 PCTurnOnEffect(struct Task *); +static void PCTurnOnEffect_SetMetatile(s16, s8, s8); static void PCTurnOffEffect(void); static void Task_LotteryCornerComputerEffect(u8); static void LotteryCornerComputerEffect(struct Task *); @@ -584,16 +594,16 @@ static void LoadLinkPartnerObjectEventSpritePalette(u8 graphicsId, u8 localEvent switch (graphicsId) { case OBJ_EVENT_GFX_LINK_RS_BRENDAN: - LoadPalette(gObjectEventPal_RubySapphireBrendan, 0x100 + (adjustedPaletteNum << 4), 0x20); + LoadPalette(gObjectEventPal_RubySapphireBrendan, OBJ_PLTT_ID(adjustedPaletteNum), PLTT_SIZE_4BPP); break; case OBJ_EVENT_GFX_LINK_RS_MAY: - LoadPalette(gObjectEventPal_RubySapphireMay, 0x100 + (adjustedPaletteNum << 4), 0x20); + LoadPalette(gObjectEventPal_RubySapphireMay, OBJ_PLTT_ID(adjustedPaletteNum), PLTT_SIZE_4BPP); break; case OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL: - LoadPalette(gObjectEventPal_Brendan, 0x100 + (adjustedPaletteNum << 4), 0x20); + LoadPalette(gObjectEventPal_Brendan, OBJ_PLTT_ID(adjustedPaletteNum), PLTT_SIZE_4BPP); break; case OBJ_EVENT_GFX_RIVAL_MAY_NORMAL: - LoadPalette(gObjectEventPal_May, 0x100 + (adjustedPaletteNum << 4), 0x20); + LoadPalette(gObjectEventPal_May, OBJ_PLTT_ID(adjustedPaletteNum), PLTT_SIZE_4BPP); break; } } @@ -969,34 +979,44 @@ static bool8 IsPlayerInFrontOfPC(void) || tileInFront == METATILE_Building_PC_Off); } +// Task data for Task_PCTurnOnEffect and Task_LotteryCornerComputerEffect +#define tPaused data[0] // Never set +#define tTaskId data[1] +#define tFlickerCount data[2] +#define tTimer data[3] +#define tIsScreenOn data[4] + +// For this special, gSpecialVar_0x8004 is expected to be some PC_LOCATION_* value. void DoPCTurnOnEffect(void) { if (FuncIsActiveTask(Task_PCTurnOnEffect) != TRUE && IsPlayerInFrontOfPC() == TRUE) { u8 taskId = CreateTask(Task_PCTurnOnEffect, 8); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = taskId; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tPaused = FALSE; + gTasks[taskId].tTaskId = taskId; + gTasks[taskId].tFlickerCount = 0; + gTasks[taskId].tTimer = 0; + gTasks[taskId].tIsScreenOn = FALSE; } } static void Task_PCTurnOnEffect(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (task->data[0] == 0) - PCTurnOnEffect_0(task); + if (!task->tPaused) + PCTurnOnEffect(task); } -static void PCTurnOnEffect_0(struct Task *task) +static void PCTurnOnEffect(struct Task *task) { u8 playerDirection; s8 dx = 0; s8 dy = 0; - if (task->data[3] == 6) + if (task->tTimer == 6) { - task->data[3] = 0; + task->tTimer = 0; + + // Get where the PC should be, depending on where the player is looking. playerDirection = GetPlayerFacingDirection(); switch (playerDirection) { @@ -1013,39 +1033,47 @@ static void PCTurnOnEffect_0(struct Task *task) dy = -1; break; } - PCTurnOnEffect_1(task->data[4], dx, dy); + + // Update map + PCTurnOnEffect_SetMetatile(task->tIsScreenOn, dx, dy); DrawWholeMapView(); - task->data[4] ^= 1; - if ((++task->data[2]) == 5) - DestroyTask(task->data[1]); + + // Screen flickers 5 times. Odd number and starting with the + // screen off means the animation ends with the screen on. + task->tIsScreenOn ^= 1; + if (++task->tFlickerCount == 5) + DestroyTask(task->tTaskId); } - task->data[3]++; + task->tTimer++; } -static void PCTurnOnEffect_1(s16 isPcTurnedOn, s8 dx, s8 dy) +static void PCTurnOnEffect_SetMetatile(s16 isScreenOn, s8 dx, s8 dy) { - u16 tileId = 0; - if (isPcTurnedOn) + u16 metatileId = 0; + if (isScreenOn) { + // Screen is on, set it off if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) - tileId = METATILE_Building_PC_Off; + metatileId = METATILE_Building_PC_Off; else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) - tileId = METATILE_BrendansMaysHouse_BrendanPC_Off; + metatileId = METATILE_BrendansMaysHouse_BrendanPC_Off; else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) - tileId = METATILE_BrendansMaysHouse_MayPC_Off; + metatileId = METATILE_BrendansMaysHouse_MayPC_Off; } else { + // Screen is off, set it on if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) - tileId = METATILE_Building_PC_On; + metatileId = METATILE_Building_PC_On; else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) - tileId = METATILE_BrendansMaysHouse_BrendanPC_On; + metatileId = METATILE_BrendansMaysHouse_BrendanPC_On; else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) - tileId = METATILE_BrendansMaysHouse_MayPC_On; + metatileId = METATILE_BrendansMaysHouse_MayPC_On; } - MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, tileId | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, metatileId | MAPGRID_COLLISION_MASK); } +// For this special, gSpecialVar_0x8004 is expected to be some PC_LOCATION_* value. void DoPCTurnOffEffect(void) { PCTurnOffEffect(); @@ -1055,7 +1083,9 @@ static void PCTurnOffEffect(void) { s8 dx = 0; s8 dy = 0; - u16 tileId = 0; + u16 metatileId = 0; + + // Get where the PC should be, depending on where the player is looking. u8 playerDirection = GetPlayerFacingDirection(); if (IsPlayerInFrontOfPC() == FALSE) @@ -1075,13 +1105,15 @@ static void PCTurnOffEffect(void) dy = -1; break; } + if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) - tileId = METATILE_Building_PC_Off; + metatileId = METATILE_Building_PC_Off; else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) - tileId = METATILE_BrendansMaysHouse_BrendanPC_Off; + metatileId = METATILE_BrendansMaysHouse_BrendanPC_Off; else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) - tileId = METATILE_BrendansMaysHouse_MayPC_Off; - MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, tileId | MAPGRID_COLLISION_MASK); + metatileId = METATILE_BrendansMaysHouse_MayPC_Off; + + MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, metatileId | MAPGRID_COLLISION_MASK); DrawWholeMapView(); } @@ -1090,42 +1122,47 @@ void DoLotteryCornerComputerEffect(void) if (FuncIsActiveTask(Task_LotteryCornerComputerEffect) != TRUE) { u8 taskId = CreateTask(Task_LotteryCornerComputerEffect, 8); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = taskId; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tPaused = FALSE; + gTasks[taskId].tTaskId = taskId; + gTasks[taskId].tFlickerCount = 0; + gTasks[taskId].tTimer = 0; + gTasks[taskId].tIsScreenOn = FALSE; } } static void Task_LotteryCornerComputerEffect(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (task->data[0] == 0) + if (!task->tPaused) LotteryCornerComputerEffect(task); } static void LotteryCornerComputerEffect(struct Task *task) { - if (task->data[3] == 6) + if (task->tTimer == 6) { - task->data[3] = 0; - if (task->data[4] != 0) + task->tTimer = 0; + if (task->tIsScreenOn) { + // Screen is on, set it off 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 { + // Screen is off, set it on 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]); + + // Screen flickers 5 times. Odd number and starting with the + // screen off means the animation ends with the screen on. + task->tIsScreenOn ^= 1; + if (++task->tFlickerCount == 5) + DestroyTask(task->tTaskId); } - task->data[3]++; + task->tTimer++; } void EndLotteryCornerComputerEffect(void) @@ -1135,6 +1172,12 @@ void EndLotteryCornerComputerEffect(void) DrawWholeMapView(); } +#undef tPaused +#undef tTaskId +#undef tFlickerCount +#undef tTimer +#undef tIsScreenOn + void SetTrickHouseNuggetFlag(void) { u16 *specVar = &gSpecialVar_0x8004; @@ -1202,7 +1245,7 @@ void IsGrassTypeInParty(void) if (GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) { species = GetMonData(pokemon, MON_DATA_SPECIES); - if (gBaseStats[species].type1 == TYPE_GRASS || gBaseStats[species].type2 == TYPE_GRASS) + if (gSpeciesInfo[species].types[0] == TYPE_GRASS || gSpeciesInfo[species].types[1] == TYPE_GRASS) { gSpecialVar_Result = TRUE; return; @@ -1219,7 +1262,7 @@ void SpawnCameraObject(void) OBJ_EVENT_ID_CAMERA, gSaveBlock1Ptr->pos.x + MAP_OFFSET, gSaveBlock1Ptr->pos.y + MAP_OFFSET, - 3); + 3); // elevation gObjectEvents[obj].invisible = TRUE; CameraObjectSetFollowedSpriteId(gObjectEvents[obj].spriteId); } @@ -1240,9 +1283,9 @@ void GetSecretBaseNearbyMapName(void) GetMapName(gStringVar1, VarGet(VAR_SECRET_BASE_MAP), 0); } -u16 GetBestBattleTowerStreak(void) +u16 GetBattleTowerSinglesStreak(void) { - return GetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK); + return GetGameStat(GAME_STAT_BATTLE_TOWER_SINGLES_STREAK); } void BufferEReaderTrainerName(void) @@ -1384,7 +1427,7 @@ void SetShoalItemFlag(u16 unused) FlagSet(FLAG_SYS_SHOAL_ITEM); } -void PutZigzagoonInPlayerParty(void) +void LoadWallyZigzagoon(void) { u16 monData; CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); @@ -1424,20 +1467,21 @@ bool8 IsPokerusInParty(void) return TRUE; } -#define horizontalPan data[0] -#define delayCounter data[1] -#define numShakes data[2] -#define delay data[3] -#define verticalPan data[4] +// Task data for Task_ShakeCamera +#define tHorizontalPan data[0] +#define tDelayCounter data[1] +#define tNumShakes data[2] +#define tDelay data[3] +#define tVerticalPan data[4] void ShakeCamera(void) { u8 taskId = CreateTask(Task_ShakeCamera, 9); - gTasks[taskId].horizontalPan = gSpecialVar_0x8005; - gTasks[taskId].delayCounter = 0; - gTasks[taskId].numShakes = gSpecialVar_0x8006; - gTasks[taskId].delay = gSpecialVar_0x8007; - gTasks[taskId].verticalPan = gSpecialVar_0x8004; + gTasks[taskId].tHorizontalPan = gSpecialVar_0x8005; + gTasks[taskId].tDelayCounter = 0; + gTasks[taskId].tNumShakes = gSpecialVar_0x8006; + gTasks[taskId].tDelay = gSpecialVar_0x8007; + gTasks[taskId].tVerticalPan = gSpecialVar_0x8004; SetCameraPanningCallback(NULL); PlaySE(SE_M_STRENGTH); } @@ -1446,15 +1490,15 @@ static void Task_ShakeCamera(u8 taskId) { s16 *data = gTasks[taskId].data; - delayCounter++; - if (delayCounter % delay == 0) + tDelayCounter++; + if (tDelayCounter % tDelay == 0) { - delayCounter = 0; - numShakes--; - horizontalPan = -horizontalPan; - verticalPan = -verticalPan; - SetCameraPanning(horizontalPan, verticalPan); - if (numShakes == 0) + tDelayCounter = 0; + tNumShakes--; + tHorizontalPan = -tHorizontalPan; + tVerticalPan = -tVerticalPan; + SetCameraPanning(tHorizontalPan, tVerticalPan); + if (tNumShakes == 0) { StopCameraShake(taskId); InstallCameraPanAheadCallback(); @@ -1468,11 +1512,11 @@ static void StopCameraShake(u8 taskId) ScriptContext_Enable(); } -#undef horizontalPan -#undef delayCounter -#undef numShakes -#undef delay -#undef verticalPan +#undef tHorizontalPan +#undef tDelayCounter +#undef tNumShakes +#undef tDelay +#undef tVerticalPan bool8 FoundBlackGlasses(void) { @@ -1497,7 +1541,8 @@ u8 GetLeadMonIndex(void) u8 partyCount = CalculatePlayerPartyCount(); for (i = 0; i < partyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != 0) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE) return i; } return 0; @@ -1637,7 +1682,7 @@ void OffsetCameraForBattle(void) SetCameraPanning(8, 0); } -const struct WindowTemplate gElevatorFloor_WindowTemplate = +static const struct WindowTemplate sWindowTemplate_ElevatorFloor = { .bg = 0, .tilemapLeft = 21, @@ -1648,7 +1693,7 @@ const struct WindowTemplate gElevatorFloor_WindowTemplate = .baseBlock = 8, }; -const u8 *const gDeptStoreFloorNames[] = +static const u8 *const sDeptStoreFloorNames[] = { [DEPT_STORE_FLOORNUM_B4F] = gText_B4F, [DEPT_STORE_FLOORNUM_B3F] = gText_B3F, @@ -1668,7 +1713,7 @@ const u8 *const gDeptStoreFloorNames[] = [DEPT_STORE_FLOORNUM_ROOFTOP] = gText_Rooftop }; -static const u16 sElevatorWindowTiles_Ascending[][3] = +static const u16 sElevatorWindowTiles_Ascending[ELEVATOR_WINDOW_HEIGHT][ELEVATOR_LIGHT_STAGES] = { { METATILE_BattleFrontier_Elevator_Top0, @@ -1687,7 +1732,7 @@ static const u16 sElevatorWindowTiles_Ascending[][3] = }, }; -static const u16 sElevatorWindowTiles_Descending[][3] = +static const u16 sElevatorWindowTiles_Descending[ELEVATOR_WINDOW_HEIGHT][ELEVATOR_LIGHT_STAGES] = { { METATILE_BattleFrontier_Elevator_Top0, @@ -1771,53 +1816,66 @@ u16 GetDeptStoreDefaultFloorChoice(void) return sLilycoveDeptStore_DefaultFloorChoice; } +// Task data for Task_MoveElevator +#define tTimer data[1] +#define tMoveCounter data[2] +#define tVerticalPan data[4] +#define tTotalMoves data[5] +#define tDescending data[6] + +// The maximum considered difference between floors. +// Elevator trips with a larger difference are treated the same +// (i.e. traveling 9 floors and 200 floors would take the same amount of time). +#define MAX_ELEVATOR_TRIP 9 + +// gSpecialVar_0x8005 here is expected to be the current floor number, and +// gSpecialVar_0x8006 is expected to be the destination floor number. void MoveElevator(void) { - static const u8 sElevatorTripLength[] = { 8, 16, 24, 32, 38, 46, 52, 56, 57 }; + static const u8 sElevatorTripLength[MAX_ELEVATOR_TRIP] = { 8, 16, 24, 32, 38, 46, 52, 56, 57 }; s16 *data = gTasks[CreateTask(Task_MoveElevator, 9)].data; u16 floorDelta; - data[1] = 0; - data[2] = 0; - data[4] = 1; + tTimer = 0; + tMoveCounter = 0; + tVerticalPan = 1; - // descending if (gSpecialVar_0x8005 > gSpecialVar_0x8006) { floorDelta = gSpecialVar_0x8005 - gSpecialVar_0x8006; - data[6] = TRUE; + tDescending = TRUE; } else { floorDelta = gSpecialVar_0x8006 - gSpecialVar_0x8005; - data[6] = FALSE; + tDescending = FALSE; } - if (floorDelta > 8) - floorDelta = 8; + if (floorDelta > MAX_ELEVATOR_TRIP - 1) + floorDelta = MAX_ELEVATOR_TRIP - 1; - data[5] = sElevatorTripLength[floorDelta]; + tTotalMoves = sElevatorTripLength[floorDelta]; SetCameraPanningCallback(NULL); - MoveElevatorWindowLights(floorDelta, data[6]); + MoveElevatorWindowLights(floorDelta, tDescending); PlaySE(SE_ELEVATOR); } static void Task_MoveElevator(u8 taskId) { s16 *data = gTasks[taskId].data; - data[1]++; - if (data[1] % 3 == 0) + tTimer++; + if (tTimer % 3 == 0) { - data[1] = 0; - data[2]++; - data[4] = -data[4]; - SetCameraPanning(0, data[4]); + tTimer = 0; + tMoveCounter++; + tVerticalPan = -tVerticalPan; + SetCameraPanning(0, tVerticalPan); - // arrived at floor - if (data[2] == data[5]) + if (tMoveCounter == tTotalMoves) { + // Arrived at floor PlaySE(SE_DING_DONG); DestroyTask(taskId); ScriptContext_Enable(); @@ -1826,18 +1884,24 @@ static void Task_MoveElevator(u8 taskId) } } +#undef tTimer +#undef tMoveCounter +#undef tVerticalPan +#undef tTotalMoves +#undef tDescending + void ShowDeptStoreElevatorFloorSelect(void) { int xPos; - sTutorMoveAndElevatorWindowId = AddWindow(&gElevatorFloor_WindowTemplate); + sTutorMoveAndElevatorWindowId = AddWindow(&sWindowTemplate_ElevatorFloor); SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, FALSE); xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gText_ElevatorNowOn, 64); AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, FONT_NORMAL, gText_ElevatorNowOn, xPos, 1, TEXT_SKIP_DRAW, NULL); - xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gDeptStoreFloorNames[gSpecialVar_0x8005], 64); - AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, FONT_NORMAL, gDeptStoreFloorNames[gSpecialVar_0x8005], xPos, 17, TEXT_SKIP_DRAW, NULL); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, sDeptStoreFloorNames[gSpecialVar_0x8005], 64); + AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, FONT_NORMAL, sDeptStoreFloorNames[gSpecialVar_0x8005], xPos, 17, TEXT_SKIP_DRAW, NULL); PutWindowTilemap(sTutorMoveAndElevatorWindowId); CopyWindowToVram(sTutorMoveAndElevatorWindowId, COPYWIN_FULL); @@ -1849,17 +1913,23 @@ void CloseDeptStoreElevatorWindow(void) RemoveWindow(sTutorMoveAndElevatorWindowId); } +// Task data for Task_MoveElevatorWindowLights +#define tMoveCounter data[0] +#define tTimer data[1] +#define tDescending data[2] +#define tTotalMoves data[3] + static void MoveElevatorWindowLights(u16 floorDelta, bool8 descending) { - static const u8 sElevatorLightCycles[] = { 3, 6, 9, 12, 15, 18, 21, 24, 27 }; + static const u8 sElevatorLightCycles[MAX_ELEVATOR_TRIP] = { 3, 6, 9, 12, 15, 18, 21, 24, 27 }; if (FuncIsActiveTask(Task_MoveElevatorWindowLights) != TRUE) { u8 taskId = CreateTask(Task_MoveElevatorWindowLights, 8); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = descending; - gTasks[taskId].data[3] = sElevatorLightCycles[floorDelta]; + gTasks[taskId].tMoveCounter = 0; + gTasks[taskId].tTimer = 0; + gTasks[taskId].tDescending = descending; + gTasks[taskId].tTotalMoves = sElevatorLightCycles[floorDelta]; } } @@ -1868,36 +1938,41 @@ static void Task_MoveElevatorWindowLights(u8 taskId) u8 x, y; s16 *data = gTasks[taskId].data; - if (data[1] == 6) + if (tTimer == 6) { - data[0]++; + tMoveCounter++; - // ascending - if (data[2] == FALSE) + if (!tDescending) { - for (y = 0; y < 3; y++) + // Ascending + for (y = 0; y < ELEVATOR_WINDOW_HEIGHT; y++) { - for (x = 0; x < 3; x++) - MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Ascending[y][data[0] % 3] | MAPGRID_COLLISION_MASK); + for (x = 0; x < ELEVATOR_WINDOW_WIDTH; x++) + MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Ascending[y][tMoveCounter % ELEVATOR_LIGHT_STAGES] | MAPGRID_COLLISION_MASK); } } - // descending else { - for (y = 0; y < 3; y++) + // Descending + for (y = 0; y < ELEVATOR_WINDOW_HEIGHT; y++) { - for (x = 0; x < 3; x++) - MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Descending[y][data[0] % 3] | MAPGRID_COLLISION_MASK); + for (x = 0; x < ELEVATOR_WINDOW_WIDTH; x++) + MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Descending[y][tMoveCounter % ELEVATOR_LIGHT_STAGES] | MAPGRID_COLLISION_MASK); } } DrawWholeMapView(); - data[1] = 0; - if (data[0] == data[3]) + tTimer = 0; + if (tMoveCounter == tTotalMoves) DestroyTask(taskId); } - data[1]++; + tTimer++; } +#undef tMoveCounter +#undef tTimer +#undef tDescending +#undef tTotalMoves + void BufferVarsForIVRater(void) { u8 i; @@ -1959,13 +2034,13 @@ bool8 UsedPokemonCenterWarp(void) MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F, MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F, MAP_UNION_ROOM, - 0xFFFF + MAP_UNDEFINED }; int i; u16 map = (gLastUsedWarp.mapGroup << 8) + gLastUsedWarp.mapNum; - for (i = 0; sPokemonCenters[i] != 0xFFFF; i++) + for (i = 0; sPokemonCenters[i] != MAP_UNDEFINED; i++) { if (sPokemonCenters[i] == map) return TRUE; @@ -2542,9 +2617,9 @@ static void InitScrollableMultichoice(void) gScrollableMultichoice_ListMenuTemplate.cursorShadowPal = 3; gScrollableMultichoice_ListMenuTemplate.lettersSpacing = 0; gScrollableMultichoice_ListMenuTemplate.itemVerticalPadding = 0; - gScrollableMultichoice_ListMenuTemplate.scrollMultiple = 0; + gScrollableMultichoice_ListMenuTemplate.scrollMultiple = LIST_NO_MULTIPLE_SCROLL; gScrollableMultichoice_ListMenuTemplate.fontId = FONT_NORMAL; - gScrollableMultichoice_ListMenuTemplate.cursorKind = 0; + gScrollableMultichoice_ListMenuTemplate.cursorKind = CURSOR_BLACK_ARROW; } static void ScrollableMultichoice_MoveCursor(s32 itemIndex, bool8 onInit, struct ListMenu *list) @@ -2663,21 +2738,21 @@ static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId) .secondY = 0, .fullyUpThreshold = 0, .fullyDownThreshold = 0, - .tileTag = 2000, - .palTag = 100, + .tileTag = GFXTAG_MULTICHOICE_SCROLL_ARROWS, + .palTag = PALTAG_MULTICHOICE_SCROLL_ARROWS, .palNum = 0 }; struct Task *task = &gTasks[taskId]; struct ScrollArrowsTemplate template = sScrollableMultichoice_ScrollArrowsTemplate; - if (task->tMaxItemsOnScreen != task->data[1]) + if (task->tMaxItemsOnScreen != task->tNumItems) { template.firstX = (task->tWidth / 2) * 8 + 12 + (task->tLeft - 1) * 8; template.firstY = 8; template.secondX = (task->tWidth / 2) * 8 + 12 + (task->tLeft - 1) * 8; template.secondY = task->tHeight * 8 + 10; template.fullyUpThreshold = 0; - template.fullyDownThreshold = task->data[1] - task->tMaxItemsOnScreen; + template.fullyDownThreshold = task->tNumItems - task->tMaxItemsOnScreen; task->tScrollArrowId = AddScrollIndicatorArrowPair(&template, &sScrollableMultichoice_ScrollOffset); } } @@ -2685,10 +2760,8 @@ static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId) static void ScrollableMultichoice_RemoveScrollArrows(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (task->tMaxItemsOnScreen != task->data[1]) - { + if (task->tMaxItemsOnScreen != task->tNumItems) RemoveScrollIndicatorArrowPair(task->tScrollArrowId); - } } // Removed for Emerald (replaced by ShowScrollableMultichoice) @@ -2912,8 +2985,6 @@ 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" @@ -3125,12 +3196,14 @@ void ScrollableMultichoice_ClosePersistentMenu(void) #undef tListTaskId #undef tTaskId +#define DEOXYS_ROCK_LEVELS 11 + void DoDeoxysRockInteraction(void) { CreateTask(Task_DeoxysRockInteraction, 8); } -static const u16 sDeoxysRockPalettes[][16] = { +static const u16 sDeoxysRockPalettes[DEOXYS_ROCK_LEVELS][16] = { 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"), @@ -3144,7 +3217,7 @@ static const u16 sDeoxysRockPalettes[][16] = { INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_11.gbapal"), }; -static const u8 sDeoxysRockCoords[][2] = { +static const u8 sDeoxysRockCoords[DEOXYS_ROCK_LEVELS][2] = { { 15, 12 }, { 11, 14 }, { 15, 8 }, @@ -3160,11 +3233,11 @@ static const u8 sDeoxysRockCoords[][2] = { static void Task_DeoxysRockInteraction(u8 taskId) { - static const u8 sStoneMaxStepCounts[] = { 4, 8, 8, 8, 4, 4, 4, 6, 3, 3 }; + static const u8 sStoneMaxStepCounts[DEOXYS_ROCK_LEVELS - 1] = { 4, 8, 8, 8, 4, 4, 4, 6, 3, 3 }; if (FlagGet(FLAG_DEOXYS_ROCK_COMPLETE) == TRUE) { - gSpecialVar_Result = 3; + gSpecialVar_Result = DEOXYS_ROCK_COMPLETE; ScriptContext_Enable(); DestroyTask(taskId); } @@ -3179,13 +3252,13 @@ static void Task_DeoxysRockInteraction(u8 taskId) // Player failed to take the shortest path to the stone, so it resets. ChangeDeoxysRockLevel(0); VarSet(VAR_DEOXYS_ROCK_LEVEL, 0); - gSpecialVar_Result = 0; + gSpecialVar_Result = DEOXYS_ROCK_FAILED; DestroyTask(taskId); } - else if (rockLevel == 10) + else if (rockLevel == DEOXYS_ROCK_LEVELS - 1) { FlagSet(FLAG_DEOXYS_ROCK_COMPLETE); - gSpecialVar_Result = 2; + gSpecialVar_Result = DEOXYS_ROCK_SOLVED; ScriptContext_Enable(); DestroyTask(taskId); } @@ -3194,7 +3267,7 @@ static void Task_DeoxysRockInteraction(u8 taskId) rockLevel++; ChangeDeoxysRockLevel(rockLevel); VarSet(VAR_DEOXYS_ROCK_LEVEL, rockLevel); - gSpecialVar_Result = 1; + gSpecialVar_Result = DEOXYS_ROCK_PROGRESSED; DestroyTask(taskId); } } @@ -3203,13 +3276,13 @@ static void Task_DeoxysRockInteraction(u8 taskId) static void ChangeDeoxysRockLevel(u8 rockLevel) { u8 objectEventId; - LoadPalette(&sDeoxysRockPalettes[rockLevel], 0x1A0, 8); + LoadPalette(&sDeoxysRockPalettes[rockLevel], OBJ_PLTT_ID(10), PLTT_SIZEOF(4)); TryGetObjectEventIdByLocalIdAndMap(LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId); if (rockLevel == 0) - PlaySE(SE_M_CONFUSE_RAY); + PlaySE(SE_M_CONFUSE_RAY); // Failure sound else - PlaySE(SE_RG_DEOXYS_MOVE); + PlaySE(SE_RG_DEOXYS_MOVE); // Success sound CreateTask(WaitForDeoxysRockMovement, 8); gFieldEffectArguments[0] = LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK; @@ -3218,6 +3291,8 @@ static void ChangeDeoxysRockLevel(u8 rockLevel) gFieldEffectArguments[3] = sDeoxysRockCoords[rockLevel][0]; gFieldEffectArguments[4] = sDeoxysRockCoords[rockLevel][1]; + // Set number of movement steps. + // Resetting for failure is slow, successful movement is fast. if (rockLevel == 0) gFieldEffectArguments[5] = 60; else @@ -3251,7 +3326,7 @@ void IncrementBirthIslandRockStepCount(void) void SetDeoxysRockPalette(void) { - LoadPalette(&sDeoxysRockPalettes[(u8)VarGet(VAR_DEOXYS_ROCK_LEVEL)], 0x1A0, 8); + LoadPalette(&sDeoxysRockPalettes[(u8)VarGet(VAR_DEOXYS_ROCK_LEVEL)], OBJ_PLTT_ID(10), PLTT_SIZEOF(4)); BlendPalettes(0x04000000, 16, 0); } @@ -3735,8 +3810,9 @@ static void Task_CloseBattlePikeCurtain(u8 taskId) void GetBattlePyramidHint(void) { - gSpecialVar_Result = gSpecialVar_0x8004 / 7; - gSpecialVar_Result -= (gSpecialVar_Result / 20) * 20; + // gSpecialVar_0x8004 here is expected to be the current Battle Pyramid win streak. + gSpecialVar_Result = gSpecialVar_0x8004 / FRONTIER_STAGES_PER_CHALLENGE; + gSpecialVar_Result -= (gSpecialVar_Result / TOTAL_PYRAMID_ROUNDS) * TOTAL_PYRAMID_ROUNDS; } // Used to avoid a potential softlock if the player respawns on Dewford with no way off @@ -3771,13 +3847,13 @@ bool8 InPokemonCenter(void) MAP_TRADE_CENTER, MAP_RECORD_CORNER, MAP_BATTLE_COLOSSEUM_4P, - 0xFFFF + MAP_UNDEFINED }; int i; u16 map = (gSaveBlock1Ptr->location.mapGroup << 8) + gSaveBlock1Ptr->location.mapNum; - for (i = 0; sPokemonCenters[i] != 0xFFFF; i++) + for (i = 0; sPokemonCenters[i] != MAP_UNDEFINED; i++) { if (sPokemonCenters[i] == map) return TRUE; diff --git a/src/field_weather.c b/src/field_weather.c index 891dbb1d1bd7..92863dee5f26 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -552,7 +552,7 @@ static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMap u8 gBlend = color.g; u8 bBlend = color.b; - palOffset = startPalIndex * 16; + palOffset = BG_PLTT_ID(startPalIndex); numPalettes += startPalIndex; colorMapIndex--; curPalIndex = startPalIndex; @@ -656,7 +656,7 @@ static void ApplyFogBlend(u8 blendCoeff, u16 blendColor) u8 bBlend; u16 curPalIndex; - BlendPalette(0, 256, blendCoeff, blendColor); + BlendPalette(BG_PLTT_ID(0), 16 * 16, blendCoeff, blendColor); color = *(struct RGBColor *)&blendColor; rBlend = color.r; gBlend = color.g; @@ -690,7 +690,7 @@ static void ApplyFogBlend(u8 blendCoeff, u16 blendColor) } else { - BlendPalette(curPalIndex * 16, 16, blendCoeff, blendColor); + BlendPalette(PLTT_ID(curPalIndex), 16, blendCoeff, blendColor); } } } @@ -830,8 +830,8 @@ void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex) } break; case WEATHER_PAL_STATE_SCREEN_FADING_OUT: - paletteIndex *= 16; - CpuFastCopy(gPlttBufferFaded + paletteIndex, gPlttBufferUnfaded + paletteIndex, 32); + paletteIndex = PLTT_ID(paletteIndex); + CpuFastCopy(gPlttBufferFaded + paletteIndex, gPlttBufferUnfaded + paletteIndex, PLTT_SIZE_4BPP); BlendPalette(paletteIndex, 16, gPaletteFade.y, gPaletteFade.blendColor); break; // WEATHER_PAL_STATE_CHANGING_WEATHER @@ -843,7 +843,7 @@ void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex) } else { - paletteIndex *= 16; + paletteIndex = PLTT_ID(paletteIndex); BlendPalette(paletteIndex, 16, 12, RGB(28, 31, 28)); } break; @@ -866,7 +866,7 @@ static bool8 IsFirstFrameOfWeatherFadeIn(void) void LoadCustomWeatherSpritePalette(const u16 *palette) { - LoadPalette(palette, 0x100 + gWeatherPtr->weatherPicSpritePalIndex * 16, 32); + LoadPalette(palette, OBJ_PLTT_ID(gWeatherPtr->weatherPicSpritePalIndex), PLTT_SIZE_4BPP); UpdateSpritePaletteWithWeather(gWeatherPtr->weatherPicSpritePalIndex); } diff --git a/src/fieldmap.c b/src/fieldmap.c index fa82a983ff31..89d6b602c2e4 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -879,9 +879,9 @@ void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size) { if (tileset->isSecondary == FALSE) { - LoadPalette(&black, destOffset, 2); - LoadPalette(tileset->palettes[0] + 1, destOffset + 1, size - 2); - ApplyGlobalTintToPaletteEntries(destOffset + 1, (size - 2) >> 1); + LoadPalette(&black, destOffset, PLTT_SIZEOF(1)); + LoadPalette(tileset->palettes[0] + 1, destOffset + 1, size - PLTT_SIZEOF(1)); + ApplyGlobalTintToPaletteEntries(destOffset + 1, (size - PLTT_SIZEOF(1)) >> 1); } else if (tileset->isSecondary == TRUE) { @@ -913,12 +913,12 @@ void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout) static void LoadPrimaryTilesetPalette(struct MapLayout const *mapLayout) { - LoadTilesetPalette(mapLayout->primaryTileset, 0, NUM_PALS_IN_PRIMARY * 16 * 2); + LoadTilesetPalette(mapLayout->primaryTileset, BG_PLTT_ID(0), NUM_PALS_IN_PRIMARY * PLTT_SIZE_4BPP); } void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout) { - LoadTilesetPalette(mapLayout->secondaryTileset, NUM_PALS_IN_PRIMARY * 16, (NUM_PALS_TOTAL - NUM_PALS_IN_PRIMARY) * 16 * 2); + LoadTilesetPalette(mapLayout->secondaryTileset, BG_PLTT_ID(NUM_PALS_IN_PRIMARY), (NUM_PALS_TOTAL - NUM_PALS_IN_PRIMARY) * PLTT_SIZE_4BPP); } void CopyMapTilesetsToVram(struct MapLayout const *mapLayout) diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index abdca2a88a70..87d011741028 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -218,8 +218,8 @@ static void Task_ExitCaveTransition2(u8 taskId) SetGpuReg(REG_OFFSET_DISPCNT, 0); LZ77UnCompVram(sCaveTransitionTiles, (void *)(VRAM + 0xC000)); LZ77UnCompVram(sCaveTransitionTilemap, (void *)(VRAM + 0xF800)); - LoadPalette(sCaveTransitionPalette_White, 0xE0, 0x20); - LoadPalette(sCaveTransitionPalette_Exit, 0xE0, 0x10); + LoadPalette(sCaveTransitionPalette_White, BG_PLTT_ID(14), PLTT_SIZE_4BPP); + LoadPalette(sCaveTransitionPalette_Exit, BG_PLTT_ID(14), PLTT_SIZEOF(8)); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 @@ -270,11 +270,11 @@ static void Task_ExitCaveTransition4(u8 taskId) if (count < 8) { gTasks[taskId].data[2]++; - LoadPalette(&sCaveTransitionPalette_Exit[count], 0xE0, 16 - 2 * count); + LoadPalette(&sCaveTransitionPalette_Exit[count], BG_PLTT_ID(14), PLTT_SIZEOF(8) - PLTT_SIZEOF(count)); } else { - LoadPalette(sCaveTransitionPalette_White, 0, 0x20); + LoadPalette(sCaveTransitionPalette_White, BG_PLTT_ID(0), PLTT_SIZE_4BPP); gTasks[taskId].func = Task_ExitCaveTransition5; gTasks[taskId].data[2] = 8; } @@ -315,8 +315,8 @@ static void Task_EnterCaveTransition2(u8 taskId) | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_OBJ_ON); - LoadPalette(sCaveTransitionPalette_White, 0xE0, 0x20); - LoadPalette(sCaveTransitionPalette_Black, 0, 0x20); + LoadPalette(sCaveTransitionPalette_White, BG_PLTT_ID(14), PLTT_SIZE_4BPP); + LoadPalette(sCaveTransitionPalette_Black, BG_PLTT_ID(0), PLTT_SIZE_4BPP); gTasks[taskId].func = Task_EnterCaveTransition3; gTasks[taskId].data[0] = 16; gTasks[taskId].data[1] = 0; @@ -331,7 +331,7 @@ static void Task_EnterCaveTransition3(u8 taskId) { gTasks[taskId].data[2]++; gTasks[taskId].data[2]++; - LoadPalette(&sCaveTransitionPalette_Enter[15 - count], 0xE0, 2 * (count + 1)); + LoadPalette(&sCaveTransitionPalette_Enter[15 - count], BG_PLTT_ID(14), PLTT_SIZEOF(count + 1)); } else { @@ -359,7 +359,7 @@ static void Task_EnterCaveTransition4(u8 taskId) } else { - LoadPalette(sCaveTransitionPalette_Black, 0, 0x20); + LoadPalette(sCaveTransitionPalette_Black, BG_PLTT_ID(0), PLTT_SIZE_4BPP); SetMainCallback2(gMain.savedCallback); } } diff --git a/src/frontier_pass.c b/src/frontier_pass.c index d25cb34cff89..07e06ad3b9a3 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -30,6 +30,17 @@ #include "constants/region_map_sections.h" #include "constants/songs.h" +// gFrontierPassBg_Pal has 8*16 colors, but they attempt to load 13*16 colors. +// As a result it goes out of bounds and interprets 160 bytes of whatever comes +// after gFrontierPassBg_Pal (by default, gFrontierPassBg_Gfx) as a palette. +// Nothing uses these colors (except the Trainer Card, which correctly writes them) +// so in practice this bug has no effect on the game. +#ifdef BUGFIX +#define NUM_BG_PAL_SLOTS 8 +#else +#define NUM_BG_PAL_SLOTS 13 +#endif + // All windows displayed in the frontier pass. enum { @@ -768,9 +779,9 @@ static bool32 InitFrontierPass(void) CopyBgTilemapBufferToVram(2); break; case 8: - LoadPalette(gFrontierPassBg_Pal[0], 0, 0x1A0); - LoadPalette(gFrontierPassBg_Pal[1 + sPassData->trainerStars], 0x10, 0x20); - LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20); + LoadPalette(gFrontierPassBg_Pal, 0, NUM_BG_PAL_SLOTS * PLTT_SIZE_4BPP); + LoadPalette(gFrontierPassBg_Pal[1 + sPassData->trainerStars], BG_PLTT_ID(1), PLTT_SIZE_4BPP); + LoadPalette(GetTextWindowPalette(0), BG_PLTT_ID(15), PLTT_SIZE_4BPP); DrawFrontierPassBg(); UpdateAreaHighlight(sPassData->cursorArea, sPassData->previousCursorArea); if (sPassData->areaToShow == CURSOR_AREA_MAP || sPassData->areaToShow == CURSOR_AREA_CARD) @@ -1412,8 +1423,8 @@ static bool32 InitFrontierMap(void) case 5: if (FreeTempTileDataBuffersIfPossible()) return FALSE; - LoadPalette(gFrontierPassBg_Pal[0], 0, 0x1A0); - LoadPalette(GetTextWindowPalette(0), 0xF0, 0x20); + LoadPalette(gFrontierPassBg_Pal, BG_PLTT_ID(0), NUM_BG_PAL_SLOTS * PLTT_SIZE_4BPP); + LoadPalette(GetTextWindowPalette(0), BG_PLTT_ID(15), PLTT_SIZE_4BPP); CopyToBgTilemapBuffer(2, sMapScreen_Tilemap, 0, 0); CopyBgTilemapBufferToVram(2); break; diff --git a/src/frontier_util.c b/src/frontier_util.c index d89fca436cdd..1863aa622e91 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -497,100 +497,46 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ }, }; -static const u8 sBattlePointAwards[][NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT] = +static const u8 sBattlePointAwards[NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT][30] = { + /* facility, mode, tier */ + [FRONTIER_FACILITY_TOWER] = /* Tier: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 */ { - {1, 2, 3, 3}, {1, 1}, {4, 5}, {1}, {3, 4}, {1}, {5} - }, - { - {2, 3, 4, 4}, {1, 1}, {4, 5}, {1}, {3, 4}, {1}, {5} - }, - { - {3, 4, 5, 5}, {2, 2}, {5, 6}, {1}, {4, 5}, {2}, {6} - }, - { - {4, 5, 6, 6}, {2, 2}, {5, 6}, {2}, {4, 5}, {2}, {6} - }, - { - {5, 6, 7, 7}, {3, 3}, {6, 7}, {2}, {5, 6}, {2}, {7} - }, - { - {6, 7, 8, 8}, {3, 3}, {6, 7}, {2}, {5, 6}, {4}, {7} - }, - { - {7, 8, 9, 9}, {4, 4}, {7, 8}, {3}, {6, 7}, {4}, {8} - }, - { - {8, 9, 10, 10}, {4, 4}, {7, 8}, {3},{6, 7}, {4}, {8} - }, - { - {9, 10, 11, 11}, {5, 5}, {8, 9}, {4}, {7, 8}, {8}, {9} - }, - { - {10, 11, 12, 12}, {5, 5}, {8, 9}, {4}, {7, 8}, {8}, {9} - }, - { - {11, 12, 13, 13}, {6, 6}, {9, 10}, {5,0}, {8, 9}, {8}, {10} - }, - { - {12, 13, 14, 14}, {6, 6}, {9, 10}, {6,0}, {8, 9}, {8}, {10} - }, - { - {13, 14, 15, 15}, {7, 7}, {10, 11}, {7}, {9, 10}, {10}, {11} - }, - { - {14, 15, 15, 15}, {7, 7}, {10, 11}, {8}, {9, 10}, {10}, {11} - }, - { - {15, 15, 15, 15}, {8, 8}, {11, 12}, {9}, {10, 11}, {10}, {12} - }, - { - {15, 15, 15, 15}, {8, 8}, {11, 12}, {10}, {10, 11}, {10}, {12} - }, - { - {15, 15, 15, 15}, {9, 9}, {12, 13}, {11}, {11, 12}, {12}, {13} - }, - { - {15, 15, 15, 15}, {9, 9}, {12, 13}, {12}, {11, 12}, {12}, {13} - }, - { - {15, 15, 15, 15}, {10, 10}, {13, 14}, {13}, {12, 13}, {12}, {14} - }, - { - {15, 15, 15, 15}, {10, 10}, {13, 14}, {14}, {12, 13}, {12}, {14} - }, - { - {15, 15, 15, 15}, {11, 11}, {14, 15}, {15}, {13, 14}, {12}, {15} - }, - { - {15, 15, 15, 15}, {11, 11}, {14, 15}, {15}, {13, 14}, {14}, {15} - }, - { - {15, 15, 15, 15}, {12, 12}, {15, 15}, {15}, {14, 15}, {14}, {15} - }, - { - {15, 15, 15, 15}, {12, 12}, {15, 15}, {15}, {14, 15}, {14}, {15} + [FRONTIER_MODE_SINGLES] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, + [FRONTIER_MODE_DOUBLES] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, + [FRONTIER_MODE_MULTIS] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, + [FRONTIER_MODE_LINK_MULTIS] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, }, + [FRONTIER_FACILITY_DOME] = { - {15, 15, 15, 15}, {13, 13}, {15, 15}, {15}, {15, 15}, {14}, {15} + [FRONTIER_MODE_SINGLES] = { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15 }, + [FRONTIER_MODE_DOUBLES] = { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15 }, }, + [FRONTIER_FACILITY_PALACE] = { - {15, 15, 15, 15}, {13, 13}, {15, 15}, {15}, {15, 15}, {15}, {15} + [FRONTIER_MODE_SINGLES] = { 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15 }, + [FRONTIER_MODE_DOUBLES] = { 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, }, + [FRONTIER_FACILITY_ARENA] = { - {15, 15, 15, 15}, {14, 14}, {15, 15}, {15}, {15, 15}, {15}, {15} + [FRONTIER_MODE_SINGLES] = { 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, }, + [FRONTIER_FACILITY_FACTORY] = { - {15, 15, 15, 15}, {14, 14}, {15, 15}, {15}, {15, 15}, {15}, {15} + [FRONTIER_MODE_SINGLES] = { 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 15, 15 }, + [FRONTIER_MODE_DOUBLES] = { 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15 }, }, + [FRONTIER_FACILITY_PIKE] = { - {15, 15, 15, 15}, {15, 15}, {15, 15}, {15}, {15, 15}, {15}, {15} + [FRONTIER_MODE_SINGLES] = { 1, 1, 2, 2, 2, 4, 4, 4, 8, 8, 8, 8, 10, 10, 10, 10, 12, 12, 12, 12, 12, 14, 14, 14, 14, 15, 15, 15, 15, 15 }, }, + [FRONTIER_FACILITY_PYRAMID] = { - {15, 15, 15, 15}, {15, 15}, {15, 15}, {15}, {15, 15}, {15}, {15} + [FRONTIER_MODE_SINGLES] = { 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, }, }; + // Flags to change the conversation when the Frontier Brain is encountered for a battle // First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol) static const u16 sBattledBrainBitFlags[NUM_FRONTIER_FACILITIES][2] = @@ -1885,10 +1831,10 @@ static void GiveBattlePoints(void) if (challengeNum != 0) challengeNum--; - if (challengeNum >= ARRAY_COUNT(sBattlePointAwards)) - challengeNum = ARRAY_COUNT(sBattlePointAwards) - 1; + if (challengeNum >= ARRAY_COUNT(sBattlePointAwards[0][0])) + challengeNum = ARRAY_COUNT(sBattlePointAwards[0][0]) - 1; - points = sBattlePointAwards[challengeNum][facility][battleMode]; + points = sBattlePointAwards[facility][battleMode][challengeNum]; if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) points += 10; gSaveBlock2Ptr->frontier.battlePoints += points; @@ -1897,8 +1843,8 @@ static void GiveBattlePoints(void) gSaveBlock2Ptr->frontier.battlePoints = MAX_BATTLE_FRONTIER_POINTS; points = gSaveBlock2Ptr->frontier.cardBattlePoints; - points += sBattlePointAwards[challengeNum][facility][battleMode]; - IncrementDailyBattlePoints(sBattlePointAwards[challengeNum][facility][battleMode]); + points += sBattlePointAwards[facility][battleMode][challengeNum]; + IncrementDailyBattlePoints(sBattlePointAwards[facility][battleMode][challengeNum]); if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) { points += 10; @@ -2122,7 +2068,7 @@ static void IncrementWinStreak(void) gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]++; if (battleMode == FRONTIER_MODE_SINGLES) { - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]); + SetGameStat(GAME_STAT_BATTLE_TOWER_SINGLES_STREAK, gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]); gSaveBlock2Ptr->frontier.towerSinglesStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; } } diff --git a/src/graphics.c b/src/graphics.c index 0126150fd980..61d0fdf757e1 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -286,6 +286,8 @@ const u32 gBattleAnimSpritePal_Tornado[] = INCBIN_U32("graphics/battle_anims/spr const u32 gBattleAnimSpriteGfx_ZMoveSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/z_move_symbol.4bpp.lz"); const u32 gBattleAnimSpritePal_ZMoveSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/z_move_symbol.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_Teapot[] = INCBIN_U32("graphics/battle_anims/sprites/new/teapot.4bpp.lz"); +const u32 gBattleAnimSpritePal_Teapot[] = INCBIN_U32("graphics/battle_anims/sprites/new/teapot.gbapal.lz"); // Battle anims const u32 gBattleAnimSpriteGfx_Bubble[] = INCBIN_U32("graphics/battle_anims/sprites/bubble.4bpp.lz"); @@ -673,19 +675,15 @@ const u16 gBattleInterface_BallDisplayPal[] = INCBIN_U16("graphics/battle_interf const u8 gHealthboxElementsGfxTable[] = INCBIN_U8("graphics/battle_interface/hpbar.4bpp", "graphics/battle_interface/expbar.4bpp", - "graphics/battle_interface/status_psn.4bpp", - "graphics/battle_interface/status_par.4bpp", - "graphics/battle_interface/status_slp.4bpp", - "graphics/battle_interface/status_frz.4bpp", - "graphics/battle_interface/status_brn.4bpp", + "graphics/battle_interface/status.4bpp", "graphics/battle_interface/misc.4bpp", "graphics/battle_interface/hpbar_anim.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/ball_caught_indicator.4bpp", + "graphics/battle_interface/status2.4bpp", // these three duplicate sets of graphics are for the opponent/partner pokemon + "graphics/battle_interface/status3.4bpp", + "graphics/battle_interface/status4.4bpp", "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"); @@ -756,7 +754,7 @@ const u32 gJPContestBgTilemap[] = INCBIN_U32("graphics/contest/japanese/bg.bin.l 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 gContestInterfaceAudiencePalette[] = INCBIN_U32("graphics/contest/interface_audience.gbapal.lz"); +const u32 gContestInterfaceAudiencePalette[] = INCBIN_U32("graphics/contest/interface.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"); @@ -1383,6 +1381,7 @@ const u32 gBattleAnimBgTilemap_GigaImpactPlayer[] = INCBIN_U32("graphics/battle_ const u32 gBattleAnimBgTilemap_GigaImpactOpponent[] = INCBIN_U32("graphics/battle_anims/backgrounds/giga_impact_opponent.bin.lz"); const u32 gBattleAnimBgTilemap_GigaImpactContest[] = INCBIN_U32("graphics/battle_anims/backgrounds/giga_impact_contest.bin.lz"); const u32 gBattleAnimBgImage_GigaImpact[] = INCBIN_U32("graphics/battle_anims/backgrounds/giga_impact.4bpp.lz"); +const u32 gBattleAnimBgImage_GigaImpactContest[] = INCBIN_U32("graphics/battle_anims/backgrounds/giga_impact_contest.4bpp.lz"); const u32 gBattleAnimBgPalette_GigaImpact[] = INCBIN_U32("graphics/battle_anims/backgrounds/giga_impact.gbapal.lz"); const u32 gBattleAnimBgImage_SpacialRend[] = INCBIN_U32("graphics/battle_anims/backgrounds/spacial_rend.4bpp.lz"); @@ -1865,24 +1864,24 @@ const u16 gUsePokeblockNatureWin_Pal[] = INCBIN_U16("graphics/pokeblock/use_scre // trainer card -const u16 gHoennTrainerCard0Star_Pal[] = INCBIN_U16("graphics/trainer_card/0star.gbapal"); -const u32 gHoennTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp.lz"); +const u16 gHoennTrainerCardGreen_Pal[] = INCBIN_U16("graphics/trainer_card/green.gbapal"); +const u32 gHoennTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/tiles.4bpp.lz"); const u32 gHoennTrainerCardBg_Tilemap[] = INCBIN_U32("graphics/trainer_card/bg.bin.lz"); const u32 gHoennTrainerCardFront_Tilemap[] = INCBIN_U32("graphics/trainer_card/front.bin.lz"); const u32 gHoennTrainerCardBack_Tilemap[] = INCBIN_U32("graphics/trainer_card/back.bin.lz"); const u32 gHoennTrainerCardFrontLink_Tilemap[] = INCBIN_U32("graphics/trainer_card/front_link.bin.lz"); -const u16 gKantoTrainerCard0Star_Pal[] = INCBIN_U16("graphics/trainer_card/0star_fr.gbapal"); -const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_fr.4bpp.lz"); -const u32 gKantoTrainerCardBg_Tilemap[] = INCBIN_U32("graphics/trainer_card/bg_fr.bin.lz"); -const u32 gKantoTrainerCardFront_Tilemap[] = INCBIN_U32("graphics/trainer_card/front_fr.bin.lz"); -const u32 gKantoTrainerCardBack_Tilemap[] = INCBIN_U32("graphics/trainer_card/back_fr.bin.lz"); -const u32 gKantoTrainerCardFrontLink_Tilemap[] = INCBIN_U32("graphics/trainer_card/front_link_fr.bin.lz"); +const u16 gKantoTrainerCardBlue_Pal[] = INCBIN_U16("graphics/trainer_card/frlg/blue.gbapal"); +const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/frlg/tiles.4bpp.lz"); +const u32 gKantoTrainerCardBg_Tilemap[] = INCBIN_U32("graphics/trainer_card/frlg/bg.bin.lz"); +const u32 gKantoTrainerCardFront_Tilemap[] = INCBIN_U32("graphics/trainer_card/frlg/front.bin.lz"); +const u32 gKantoTrainerCardBack_Tilemap[] = INCBIN_U32("graphics/trainer_card/frlg/back.bin.lz"); +const u32 gKantoTrainerCardFrontLink_Tilemap[] = INCBIN_U32("graphics/trainer_card/frlg/front_link.bin.lz"); // pokemon storage system const u32 gStorageSystemMenu_Gfx[] = INCBIN_U32("graphics/pokemon_storage/menu.4bpp.lz"); -const u16 gStorageSystemPartyMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/menu.gbapal"); // Only used by party menu, but generated from all menu gfx +const u16 gStorageSystemPartyMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/party_menu.gbapal"); const u32 gStorageSystemPartyMenu_Tilemap[] = INCBIN_U32("graphics/pokemon_storage/party_menu.bin.lz"); // naming screen @@ -2014,7 +2013,6 @@ const u16 gTitleScreenPressStartPal[] = INCBIN_U16("graphics/title_screen/p const u32 gTitleScreenPressStartGfx[] = INCBIN_U32("graphics/title_screen/press_start.4bpp.lz"); const u32 gTitleScreenPokemonLogoTilemap[] = INCBIN_U32("graphics/title_screen/pokemon_logo.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"); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 42e17e93dbb1..2be4132f5b7b 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -702,8 +702,8 @@ static void Task_Hof_DisplayPlayer(u8 taskId) ShowBg(3); 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); + LoadWindowGfx(1, gSaveBlock2Ptr->optionsWindowFrameType, 0x21D, BG_PLTT_ID(13)); + LoadPalette(GetTextWindowPalette(1), BG_PLTT_ID(14), PLTT_SIZE_4BPP); gTasks[taskId].tFrameCount = 120; gTasks[taskId].func = Task_Hof_WaitAndPrintPlayerInfo; } @@ -1269,7 +1269,7 @@ static void ClearVramOamPltt_LoadHofPal(void) DmaFill16(3, 0, plttOffset, plttSize); ResetPaletteFade(); - LoadPalette(sHallOfFame_Pal, 0, 0x20); + LoadPalette(sHallOfFame_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); } static void LoadHofGfx(void) diff --git a/src/international_string_util.c b/src/international_string_util.c index f71734fa7eac..457e3260bed2 100644 --- a/src/international_string_util.c +++ b/src/international_string_util.c @@ -133,7 +133,7 @@ void PadNameString(u8 *dest, u8 padChar) while (length < PLAYER_NAME_LENGTH - 1) { dest[length] = EXT_CTRL_CODE_BEGIN; - dest[length + 1] = EXT_CTRL_CODE_RESET_SIZE; + dest[length + 1] = EXT_CTRL_CODE_RESET_FONT; length += 2; } } diff --git a/src/intro.c b/src/intro.c index de08556e3ee0..38b2f0027378 100644 --- a/src/intro.c +++ b/src/intro.c @@ -23,6 +23,7 @@ #include "sound.h" #include "util.h" #include "title_screen.h" +#include "expansion_intro.h" #include "constants/rgb.h" #include "constants/battle_anim.h" @@ -37,7 +38,6 @@ */ // Scene 1 main tasks -static void Task_Scene1_Load(u8); static void Task_Scene1_FadeIn(u8); static void Task_Scene1_WaterDrops(u8); static void Task_Scene1_PanUp(u8); @@ -1033,7 +1033,7 @@ static void VBlankCB_Intro(void) ScanlineEffect_InitHBlankDmaTransfer(); } -static void MainCB2_Intro(void) +void MainCB2_Intro(void) { RunTasks(); AnimateSprites(); @@ -1051,11 +1051,11 @@ static void MainCB2_EndIntro(void) SetMainCallback2(CB2_InitTitleScreen); } -static void LoadCopyrightGraphics(u16 tilesetAddress, u16 tilemapAddress, u16 paletteAddress) +static void LoadCopyrightGraphics(u16 tilesetAddress, u16 tilemapAddress, u16 paletteOffset) { LZ77UnCompVram(gIntroCopyright_Gfx, (void *)(VRAM + tilesetAddress)); LZ77UnCompVram(gIntroCopyright_Tilemap, (void *)(VRAM + tilemapAddress)); - LoadPalette(gIntroCopyright_Pal, paletteAddress, 32); + LoadPalette(gIntroCopyright_Pal, paletteOffset, PLTT_SIZE_4BPP); } static void SerialCB_CopyrightScreen(void) @@ -1080,7 +1080,7 @@ static u8 SetUpCopyrightScreen(void) CpuFill32(0, (void *)OAM, OAM_SIZE); CpuFill16(0, (void *)(PLTT + 2), PLTT_SIZE - 2); ResetPaletteFade(); - LoadCopyrightGraphics(0, 0x3800, 0); + LoadCopyrightGraphics(0, 0x3800, BG_PLTT_ID(0)); ScanlineEffect_Stop(); ResetTasks(); ResetSpriteData(); @@ -1112,8 +1112,13 @@ static u8 SetUpCopyrightScreen(void) case 141: if (UpdatePaletteFade()) break; +#if EXPANSION_INTRO == TRUE + SetMainCallback2(CB2_ExpansionIntro); + CreateTask(Task_HandleExpansionIntro, 0); +#else CreateTask(Task_Scene1_Load, 0); SetMainCallback2(MainCB2_Intro); +#endif if (gMultibootProgramStruct.gcmb_field_2 != 0) { if (gMultibootProgramStruct.gcmb_field_2 == 2) @@ -1160,7 +1165,7 @@ void CB2_InitCopyrightScreenAfterTitleScreen(void) #define sBigDropSpriteId data[0] -static void Task_Scene1_Load(u8 taskId) +void Task_Scene1_Load(u8 taskId) { SetVBlankCallback(NULL); sIntroCharacterGender = Random() & 1; @@ -1178,7 +1183,7 @@ static void Task_Scene1_Load(u8 taskId) DmaClear16(3, BG_SCREEN_ADDR(21), BG_SCREEN_SIZE); LZ77UnCompVram(sIntro1Bg3_Tilemap, (void *)(BG_SCREEN_ADDR(22))); DmaClear16(3, BG_SCREEN_ADDR(23), BG_SCREEN_SIZE); - LoadPalette(sIntro1Bg_Pal, 0, sizeof(sIntro1Bg_Pal)); + LoadPalette(sIntro1Bg_Pal, BG_PLTT_ID(0), sizeof(sIntro1Bg_Pal)); SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(22) | BGCNT_16COLOR | BGCNT_TXT256x512); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(20) | BGCNT_16COLOR | BGCNT_TXT256x512); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(18) | BGCNT_16COLOR | BGCNT_TXT256x512); @@ -1717,7 +1722,7 @@ static void Task_Scene3_Load(u8 taskId) IntroResetGpuRegs(); LZ77UnCompVram(sIntroPokeball_Gfx, (void *)VRAM); LZ77UnCompVram(sIntroPokeball_Tilemap, (void *)(BG_CHAR_ADDR(1))); - LoadPalette(sIntroPokeball_Pal, 0, sizeof(sIntroPokeball_Pal)); + LoadPalette(sIntroPokeball_Pal, BG_PLTT_ID(0), sizeof(sIntroPokeball_Pal)); gTasks[taskId].tAlpha = 0; gTasks[taskId].tZoomDiv = 0; gTasks[taskId].tZoomDivSpeed = 0; @@ -2663,10 +2668,10 @@ static void Task_RayquazaAttack(u8 taskId) { if (--data[3] != 0) { - BlendPalette(0x50, 16, data[3], RGB(9, 10, 10)); - CpuCopy16(&gIntro3Bg_Pal[0x1AC], &gPlttBufferFaded[94], 2); - CpuCopy16(&gIntro3Bg_Pal[0x1AC], &gPlttBufferFaded[88], 2); - CpuCopy16(&gIntro3Bg_Pal[0x18C], &gPlttBufferFaded[92], 2); + BlendPalette(BG_PLTT_ID(5), 16, data[3], RGB(9, 10, 10)); + CpuCopy16(&gIntro3Bg_Pal[428], &gPlttBufferFaded[BG_PLTT_ID(5) + 14], PLTT_SIZEOF(1)); + CpuCopy16(&gIntro3Bg_Pal[428], &gPlttBufferFaded[BG_PLTT_ID(5) + 8], PLTT_SIZEOF(1)); + CpuCopy16(&gIntro3Bg_Pal[396], &gPlttBufferFaded[BG_PLTT_ID(5) + 12], PLTT_SIZEOF(1)); } else { diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index cf193018a40f..7593a296e882 100644 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -730,7 +730,7 @@ void LoadIntroPart2Graphics(u8 scenery) { LZ77UnCompVram(sGrass_Gfx, (void *)(BG_CHAR_ADDR(1))); LZ77UnCompVram(sGrass_Tilemap, (void *)(BG_SCREEN_ADDR(15))); - LoadPalette(&sGrass_Pal, 240, sizeof(sGrass_Pal)); + LoadPalette(&sGrass_Pal, BG_PLTT_ID(15), sizeof(sGrass_Pal)); switch (scenery) { case 0: @@ -739,17 +739,17 @@ void LoadIntroPart2Graphics(u8 scenery) // Clouds are never used in this part of the intro LZ77UnCompVram(sCloudsBg_Gfx, (void *)(VRAM)); LZ77UnCompVram(sCloudsBg_Tilemap, (void *)(BG_SCREEN_ADDR(6))); - LoadPalette(&sCloudsBg_Pal, 0, sizeof(sCloudsBg_Pal)); + LoadPalette(&sCloudsBg_Pal, BG_PLTT_ID(0), sizeof(sCloudsBg_Pal)); LoadCompressedSpriteSheet(sSpriteSheet_Clouds); - LoadPalette(&sClouds_Pal, 256, sizeof(sClouds_Pal)); + LoadPalette(&sClouds_Pal, OBJ_PLTT_ID(0), sizeof(sClouds_Pal)); CreateCloudSprites(); break; case 1: LZ77UnCompVram(sTrees_Gfx, (void *)(VRAM)); LZ77UnCompVram(sTrees_Tilemap, (void *)(BG_SCREEN_ADDR(6))); - LoadPalette(&sTrees_Pal, 0, sizeof(sTrees_Pal)); + LoadPalette(&sTrees_Pal, BG_PLTT_ID(0), sizeof(sTrees_Pal)); LoadCompressedSpriteSheet(sSpriteSheet_TreesSmall); - LoadPalette(&sTreesSmall_Pal, 256, sizeof(sTreesSmall_Pal)); + LoadPalette(&sTreesSmall_Pal, OBJ_PLTT_ID(0), sizeof(sTreesSmall_Pal)); CreateTreeSprites(); break; } @@ -843,42 +843,42 @@ void LoadCreditsSceneGraphics(u8 scene) { case SCENE_OCEAN_MORNING: default: - LoadPalette(&sGrass_Pal, 240, sizeof(sGrass_Pal)); + LoadPalette(&sGrass_Pal, BG_PLTT_ID(15), sizeof(sGrass_Pal)); LZ77UnCompVram(sCloudsBg_Gfx, (void *)(VRAM)); LZ77UnCompVram(sCloudsBg_Tilemap, (void *)(BG_SCREEN_ADDR(6))); - LoadPalette(&sCloudsBg_Pal, 0, sizeof(sCloudsBg_Pal)); + LoadPalette(&sCloudsBg_Pal, BG_PLTT_ID(0), sizeof(sCloudsBg_Pal)); LoadCompressedSpriteSheet(sSpriteSheet_Clouds); LZ77UnCompVram(sClouds_Gfx, (void *)(OBJ_VRAM0)); - LoadPalette(&sClouds_Pal, 256, sizeof(sClouds_Pal)); + LoadPalette(&sClouds_Pal, OBJ_PLTT_ID(0), sizeof(sClouds_Pal)); CreateCloudSprites(); break; case SCENE_OCEAN_SUNSET: - LoadPalette(&sGrassSunset_Pal, 240, sizeof(sGrassSunset_Pal)); + LoadPalette(&sGrassSunset_Pal, BG_PLTT_ID(15), sizeof(sGrassSunset_Pal)); LZ77UnCompVram(sCloudsBg_Gfx, (void *)(VRAM)); LZ77UnCompVram(sCloudsBg_Tilemap, (void *)(BG_SCREEN_ADDR(6))); - LoadPalette(&sCloudsBgSunset_Pal, 0, sizeof(sCloudsBgSunset_Pal)); + LoadPalette(&sCloudsBgSunset_Pal, BG_PLTT_ID(0), sizeof(sCloudsBgSunset_Pal)); LoadCompressedSpriteSheet(sSpriteSheet_Clouds); LZ77UnCompVram(sClouds_Gfx, (void *)(OBJ_VRAM0)); - LoadPalette(&sCloudsSunset_Pal, 256, sizeof(sCloudsSunset_Pal)); + LoadPalette(&sCloudsSunset_Pal, OBJ_PLTT_ID(0), sizeof(sCloudsSunset_Pal)); CreateCloudSprites(); break; case SCENE_FOREST_RIVAL_ARRIVE: case SCENE_FOREST_CATCH_RIVAL: - LoadPalette(&sGrassSunset_Pal, 240, sizeof(sGrassSunset_Pal)); + LoadPalette(&sGrassSunset_Pal, BG_PLTT_ID(15), sizeof(sGrassSunset_Pal)); LZ77UnCompVram(sTrees_Gfx, (void *)(VRAM)); LZ77UnCompVram(sTrees_Tilemap, (void *)(BG_SCREEN_ADDR(6))); - LoadPalette(&sTreesSunset_Pal, 0, sizeof(sTreesSunset_Pal)); + LoadPalette(&sTreesSunset_Pal, BG_PLTT_ID(0), sizeof(sTreesSunset_Pal)); LoadCompressedSpriteSheet(sSpriteSheet_TreesSmall); - LoadPalette(&sTreesSunset_Pal, 256, sizeof(sTreesSunset_Pal)); + LoadPalette(&sTreesSunset_Pal, OBJ_PLTT_ID(0), sizeof(sTreesSunset_Pal)); CreateTreeSprites(); break; case SCENE_CITY_NIGHT: - LoadPalette(&sGrassNight_Pal, 240, sizeof(sGrassNight_Pal)); + LoadPalette(&sGrassNight_Pal, BG_PLTT_ID(15), sizeof(sGrassNight_Pal)); LZ77UnCompVram(sHouses_Gfx, (void *)(VRAM)); LZ77UnCompVram(sHouses_Tilemap, (void *)(BG_SCREEN_ADDR(6))); - LoadPalette(&sHouses_Pal, 0, sizeof(sHouses_Pal)); + LoadPalette(&sHouses_Pal, BG_PLTT_ID(0), sizeof(sHouses_Pal)); LoadCompressedSpriteSheet(sSpriteSheet_HouseSilhouette); - LoadPalette(&sHouseSilhouette_Pal, 256, sizeof(sHouseSilhouette_Pal)); + LoadPalette(&sHouseSilhouette_Pal, OBJ_PLTT_ID(0), sizeof(sHouseSilhouette_Pal)); CreateHouseSprites(); break; } @@ -1006,8 +1006,8 @@ void CycleSceneryPalette(u8 mode) x = gPlttBufferUnfaded[10]; y = gPlttBufferUnfaded[9]; } - LoadPalette(&x, 9, sizeof(x)); - LoadPalette(&y, 10, sizeof(y)); + LoadPalette(&x, BG_PLTT_ID(0) + 9, sizeof(x)); + LoadPalette(&y, BG_PLTT_ID(0) + 10, sizeof(y)); break; case 2: if (gMain.vblankCounter1 & 3 || gPaletteFade.active) @@ -1022,8 +1022,8 @@ void CycleSceneryPalette(u8 mode) x = RGB(28, 24, 0); y = RGB(7, 9, 15); } - LoadPalette(&x, 12, sizeof(x)); - LoadPalette(&y, 13, sizeof(y)); + LoadPalette(&x, BG_PLTT_ID(0) + 12, sizeof(x)); + LoadPalette(&y, BG_PLTT_ID(0) + 13, sizeof(y)); break; case 1: break; diff --git a/src/item.c b/src/item.c index 18b6242c43a1..db24cb82e947 100644 --- a/src/item.c +++ b/src/item.c @@ -15,18 +15,14 @@ #include "constants/items.h" #include "constants/hold_effects.h" -// this file's functions static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count); static bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count); -// EWRAM variables EWRAM_DATA struct BagPocket gBagPockets[POCKETS_COUNT] = {0}; -// rodata #include "data/text/item_descriptions.h" #include "data/items.h" -// code static u16 GetBagItemQuantity(u16 *quantity) { return gSaveBlock2Ptr->encryptionKey ^ *quantity; diff --git a/src/item_menu.c b/src/item_menu.c index 0a49347a93ad..4c66b092391d 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -259,9 +259,9 @@ static const struct ListMenuTemplate sItemListMenu = .cursorShadowPal = 3, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, .fontId = FONT_NARROW, - .cursorKind = 0 + .cursorKind = CURSOR_BLACK_ARROW }; static const struct MenuAction sItemMenuActions[] = { @@ -818,9 +818,9 @@ static bool8 LoadBagMenu_Graphics(void) break; case 2: if (!IsWallysBag() && gSaveBlock2Ptr->playerGender != MALE) - LoadCompressedPalette(gBagScreenFemale_Pal, 0, 0x40); + LoadCompressedPalette(gBagScreenFemale_Pal, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); else - LoadCompressedPalette(gBagScreenMale_Pal, 0, 0x40); + LoadCompressedPalette(gBagScreenMale_Pal, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); gBagMenu->graphicsLoadState++; break; case 3: @@ -987,7 +987,7 @@ static void BagMenu_ItemPrintCallback(u8 windowId, u32 itemIndex, u8 y) else { // Print registered icon - if (gSaveBlock1Ptr->registeredItem && gSaveBlock1Ptr->registeredItem == itemId) + if (gSaveBlock1Ptr->registeredItem != ITEM_NONE && gSaveBlock1Ptr->registeredItem == itemId) BlitBitmapToWindow(windowId, sRegisteredSelect_Gfx, 96, y - 1, 24, 16); } } @@ -1909,7 +1909,7 @@ static void ItemMenu_Register(u8 taskId) u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId) - gSaveBlock1Ptr->registeredItem = 0; + gSaveBlock1Ptr->registeredItem = ITEM_NONE; else gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId; DestroyListMenuTask(tListTaskId, scrollPos, cursorPos); @@ -2448,10 +2448,10 @@ static void LoadBagMenuTextWindows(void) InitWindows(sDefaultBagWindows); DeactivateAllTextPrinters(); - LoadUserWindowBorderGfx(0, 1, 0xE0); - LoadMessageBoxGfx(0, 10, 0xD0); - ListMenuLoadStdPalAt(0xC0, 1); - LoadPalette(&gStandardMenuPalette, 0xF0, 0x20); + LoadUserWindowBorderGfx(0, 1, BG_PLTT_ID(14)); + LoadMessageBoxGfx(0, 10, BG_PLTT_ID(13)); + ListMenuLoadStdPalAt(BG_PLTT_ID(12), 1); + LoadPalette(&gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); for (i = 0; i <= WIN_POCKET_NAME; i++) { FillWindowPixelBuffer(i, PIXEL_FILL(0)); diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c index ff23c379258c..4e6339ba3096 100644 --- a/src/item_menu_icons.c +++ b/src/item_menu_icons.c @@ -205,7 +205,7 @@ static const union AffineAnimCmd *const sRotatingBallAnimCmds_FullRotation[] = static const struct SpriteSheet sRotatingBallTable = { - sRotatingBall_Gfx, 0x80, TAG_ROTATING_BALL_GFX + sRotatingBall_Gfx, sizeof(sRotatingBall_Gfx), TAG_ROTATING_BALL_GFX }; static const struct SpritePalette sRotatingBallPaletteTable = diff --git a/src/link.c b/src/link.c index 06907005fe9e..06bde1e38f3e 100644 --- a/src/link.c +++ b/src/link.c @@ -28,6 +28,13 @@ #include "constants/rgb.h" #include "constants/trade.h" +// Window IDs for the link error screens +enum { + WIN_LINK_ERROR_TOP, + WIN_LINK_ERROR_MID, + WIN_LINK_ERROR_BOTTOM, +}; + struct BlockTransfer { u16 pos; @@ -193,8 +200,9 @@ static const struct BgTemplate sLinkErrorBgTemplates[] = { .priority = 1 } }; + static const struct WindowTemplate sLinkErrorWindowTemplates[] = { - { + [WIN_LINK_ERROR_TOP] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 0, @@ -202,7 +210,8 @@ static const struct WindowTemplate sLinkErrorWindowTemplates[] = { .height = 5, .paletteNum = 15, .baseBlock = 0x002 - }, { + }, + [WIN_LINK_ERROR_MID] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 6, @@ -210,7 +219,8 @@ static const struct WindowTemplate sLinkErrorWindowTemplates[] = { .height = 7, .paletteNum = 15, .baseBlock = 0x098 - }, { + }, + [WIN_LINK_ERROR_BOTTOM] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 13, @@ -247,7 +257,7 @@ void Task_DestroySelf(u8 taskId) static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 baseChar) { - LoadPalette(sLinkTestDigitsPal, paletteNum * 16, 0x20); + LoadPalette(sLinkTestDigitsPal, BG_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); DmaCopy16(3, sLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * baseChar), sizeof sLinkTestDigitsGfx); gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; gLinkTestBGInfo.paletteNum = paletteNum; @@ -271,7 +281,7 @@ static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charB // Unused static void LoadLinkTestBgGfx(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) { - LoadPalette(sLinkTestDigitsPal, paletteNum * 16, 0x20); + LoadPalette(sLinkTestDigitsPal, BG_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); DmaCopy16(3, sLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof sLinkTestDigitsGfx); gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; gLinkTestBGInfo.paletteNum = paletteNum; @@ -1595,7 +1605,7 @@ void CB2_LinkError(void) ResetSpriteData(); FreeAllSpritePalettes(); ResetPaletteFadeControl(); - FillPalette(RGB_BLACK, 0, 2); + SetBackdropFromColor(RGB_BLACK); ResetTasks(); ScanlineEffect_Stop(); if (gWirelessCommType) @@ -1621,7 +1631,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(gStandardMenuPalette, 0xf0, 0x20); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); gSoftResetDisabled = FALSE; CreateTask(Task_DestroySelf, 0); StopMapMusic(); @@ -1641,26 +1651,26 @@ static void ErrorMsg_MoveCloserToPartner(void) CopyToBgTilemapBuffer(1, sWirelessLinkDisplayTilemap, 0, 0); CopyBgTilemapBufferToVram(1); LoadPalette(sWirelessLinkDisplayPal, 0, 0x20); - FillWindowPixelBuffer(0, PIXEL_FILL(0)); - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - 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, COPYWIN_NONE); // Does nothing - CopyWindowToVram(2, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_LINK_ERROR_TOP, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_LINK_ERROR_BOTTOM, PIXEL_FILL(0)); + AddTextPrinterParameterized3(WIN_LINK_ERROR_TOP, FONT_SHORT_COPY_1, 2, 6, sTextColors, 0, gText_CommErrorEllipsis); + AddTextPrinterParameterized3(WIN_LINK_ERROR_BOTTOM, FONT_SHORT_COPY_1, 2, 1, sTextColors, 0, gText_MoveCloserToLinkPartner); + PutWindowTilemap(WIN_LINK_ERROR_TOP); + PutWindowTilemap(WIN_LINK_ERROR_BOTTOM); + CopyWindowToVram(WIN_LINK_ERROR_TOP, COPYWIN_NONE); // Does nothing + CopyWindowToVram(WIN_LINK_ERROR_BOTTOM, COPYWIN_FULL); } static void ErrorMsg_CheckConnections(void) { LoadBgTiles(0, sCommErrorBg_Gfx, 0x20, 0); - FillWindowPixelBuffer(1, PIXEL_FILL(0)); - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized3(1, FONT_SHORT_COPY_1, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections); - PutWindowTilemap(1); - PutWindowTilemap(2); - CopyWindowToVram(1, COPYWIN_NONE); // Does nothing - CopyWindowToVram(2, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_LINK_ERROR_MID, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_LINK_ERROR_BOTTOM, PIXEL_FILL(0)); + AddTextPrinterParameterized3(WIN_LINK_ERROR_MID, FONT_SHORT_COPY_1, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections); + PutWindowTilemap(WIN_LINK_ERROR_MID); + PutWindowTilemap(WIN_LINK_ERROR_BOTTOM); + CopyWindowToVram(WIN_LINK_ERROR_MID, COPYWIN_NONE); // Does nothing + CopyWindowToVram(WIN_LINK_ERROR_BOTTOM, COPYWIN_FULL); } static void CB2_PrintErrorMessage(void) @@ -1691,9 +1701,9 @@ static void CB2_PrintErrorMessage(void) break; case 130: if (gWirelessCommType == 2) - AddTextPrinterParameterized3(0, FONT_SHORT_COPY_1, 2, 20, sTextColors, 0, gText_ABtnTitleScreen); + AddTextPrinterParameterized3(WIN_LINK_ERROR_TOP, FONT_SHORT_COPY_1, 2, 20, sTextColors, 0, gText_ABtnTitleScreen); else if (gWirelessCommType == 1) - AddTextPrinterParameterized3(0, FONT_SHORT_COPY_1, 2, 20, sTextColors, 0, gText_ABtnRegistrationCounter); + AddTextPrinterParameterized3(WIN_LINK_ERROR_TOP, FONT_SHORT_COPY_1, 2, 20, sTextColors, 0, gText_ABtnRegistrationCounter); break; } if (gMain.state == 160) diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 4730c74fde16..9d66a1837858 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -2525,9 +2525,8 @@ u8 RfuGetStatus(void) bool32 RfuHasErrored(void) { - // RFU_STATUS_OK will underflow here intentionally - u32 var = RfuGetStatus() - 1; - if (var < RFU_STATUS_CONNECTION_ERROR) + u32 status = RfuGetStatus(); + if (status == RFU_STATUS_FATAL_ERROR || status == RFU_STATUS_CONNECTION_ERROR) return TRUE; else return FALSE; @@ -2656,7 +2655,7 @@ static u8 GetPartnerIndexByNameAndTrainerID(const u8 *name, u16 id) for (i = 0; i < RFU_CHILD_MAX; i++) { - u16 trainerId = ReadU16(gRfuLinkStatus->partner[i].gname + 2); + u16 trainerId = ReadU16(((struct RfuGameData *)gRfuLinkStatus->partner[i].gname)->compatibility.playerTrainerId); if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[i].serialNo) && !StringCompare(name, gRfuLinkStatus->partner[i].uname) && id == trainerId) @@ -2682,9 +2681,9 @@ static void RfuReqDisconnectSlot(u32 slot) void RequestDisconnectSlotByTrainerNameAndId(const u8 *name, u16 id) { - u8 var = GetPartnerIndexByNameAndTrainerID(name, id); - if (var != 0xFF) - RfuReqDisconnectSlot(1 << var); + u8 index = GetPartnerIndexByNameAndTrainerID(name, id); + if (index != 0xFF) + RfuReqDisconnectSlot(1 << index); } void Rfu_DisconnectPlayerById(u32 playerIdx) diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 0d028cd48abc..1936d3741ba5 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -134,7 +134,7 @@ static const u8 sWireless_ASCIItoRSETable[256] = { 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94 }; -static const u8 sWireless_RSEtoASCIITable[256] = { +const u8 gWireless_RSEtoASCIITable[256] = { [CHAR_SPACE] = ' ', 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, @@ -612,7 +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] = gWireless_RSEtoASCIITable[pkmnStr[i]]; asciiStr[i] = 0; } @@ -677,7 +677,7 @@ void InitHostRfuGameData(struct RfuGameData *data, u8 activity, bool32 startedAc data->compatibility.hasNews = FALSE; data->compatibility.hasCard = FALSE; data->compatibility.unknown = FALSE; - data->compatibility.isChampion = FlagGet(FLAG_IS_CHAMPION); + data->compatibility.canLinkNationally = FlagGet(FLAG_IS_CHAMPION); data->compatibility.hasNationalDex = IsNationalPokedexEnabled(); data->compatibility.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR); } diff --git a/src/list_menu.c b/src/list_menu.c index 112fca75307d..546ec6f6cd52 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -13,6 +13,10 @@ #include "sound.h" #include "constants/songs.h" +// Cursors after this point are created using a sprite with their own task. +// This allows them to have idle animations. Cursors prior to this are simply printed text. +#define CURSOR_OBJECT_START CURSOR_RED_OUTLINE + struct UnkIndicatorsStruct { u8 field_0; @@ -70,7 +74,7 @@ static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAn static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count); static void ListMenuDrawCursor(struct ListMenu *list); static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 onInit); -static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind); +static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorObjId); static void Task_ScrollIndicatorArrowPair(u8 taskId); static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor); static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor); @@ -78,9 +82,9 @@ static void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y); static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y); static void ListMenuRemoveRedOutlineCursorObject(u8 taskId); static void ListMenuRemoveRedArrowCursorObject(u8 taskId); -static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind); -static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind); -static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind); +static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorObjId); +static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorObjId); +static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorObjId); static void SpriteCallback_ScrollIndicatorArrow(struct Sprite *sprite); static void SpriteCallback_RedArrowCursor(struct Sprite *sprite); @@ -301,10 +305,10 @@ static const struct SpriteTemplate sSpriteTemplate_RedArrowCursor = .callback = SpriteCallback_RedArrowCursor, }; -static const u16 sRedArrowPal[] = INCBIN_U16("graphics/interface/red_arrow.gbapal"); -static const u32 sRedArrowOtherGfx[] = INCBIN_U32("graphics/interface/red_arrow_other.4bpp.lz"); -static const u32 sSelectorOutlineGfx[] = INCBIN_U32("graphics/interface/selector_outline.4bpp.lz"); -static const u32 sRedArrowGfx[] = INCBIN_U32("graphics/interface/red_arrow.4bpp.lz"); +static const u16 sRedInterface_Pal[] = INCBIN_U16("graphics/interface/red.gbapal"); // Shared by all of the below gfx +static const u32 sScrollIndicator_Gfx[] = INCBIN_U32("graphics/interface/scroll_indicator.4bpp.lz"); +static const u32 sOutlineCursor_Gfx[] = INCBIN_U32("graphics/interface/outline_cursor.4bpp.lz"); +static const u32 sArrowCursor_Gfx[] = INCBIN_U32("graphics/interface/arrow_cursor.4bpp.lz"); // code static void ListMenuDummyTask(u8 taskId) @@ -477,7 +481,7 @@ void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow) *selectedRow = list->selectedRow; if (list->taskId != TASK_NONE) - ListMenuRemoveCursorObject(list->taskId, list->template.cursorKind - 2); + ListMenuRemoveCursorObject(list->taskId, list->template.cursorKind - CURSOR_OBJECT_START); DestroyTask(listTaskId); } @@ -650,31 +654,33 @@ static void ListMenuDrawCursor(struct ListMenu *list) u8 y = list->selectedRow * yMultiplier + list->template.upText_Y; switch (list->template.cursorKind) { - case 0: + case CURSOR_BLACK_ARROW: ListMenuPrint(list, gText_SelectorArrow2, x, y); break; - case 1: + case CURSOR_INVISIBLE: break; - case 2: + case CURSOR_RED_OUTLINE: if (list->taskId == TASK_NONE) - list->taskId = ListMenuAddCursorObject(list, 0); + list->taskId = ListMenuAddCursorObject(list, CURSOR_RED_OUTLINE - CURSOR_OBJECT_START); ListMenuUpdateCursorObject(list->taskId, GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 - 1, - GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y - 1, 0); + GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y - 1, + CURSOR_RED_OUTLINE - CURSOR_OBJECT_START); break; - case 3: + case CURSOR_RED_ARROW: if (list->taskId == TASK_NONE) - list->taskId = ListMenuAddCursorObject(list, 1); + list->taskId = ListMenuAddCursorObject(list, CURSOR_RED_ARROW - CURSOR_OBJECT_START); ListMenuUpdateCursorObject(list->taskId, GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 + x, - GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y, 1); + GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y, + CURSOR_RED_ARROW - CURSOR_OBJECT_START); break; } } #undef TASK_NONE -static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind) +static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorObjId) { struct CursorStruct cursor; @@ -686,13 +692,13 @@ static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind) cursor.palTag = TAG_NONE; cursor.palNum = 15; - return ListMenuAddCursorObjectInternal(&cursor, cursorKind); + return ListMenuAddCursorObjectInternal(&cursor, cursorObjId); } static void ListMenuErasePrintedCursor(struct ListMenu *list, u16 selectedRow) { u8 cursorKind = list->template.cursorKind; - if (cursorKind == 0) + if (cursorKind == CURSOR_BLACK_ARROW) { u8 yMultiplier = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + list->template.itemVerticalPadding; u8 width = GetMenuCursorDimensionByFont(list->template.fontId, 0); @@ -1071,18 +1077,18 @@ u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate *arrowInfo, u16 struct ScrollIndicatorPair *data; u8 taskId; - spriteSheet.data = sRedArrowOtherGfx; + spriteSheet.data = sScrollIndicator_Gfx; spriteSheet.size = 0x100; spriteSheet.tag = arrowInfo->tileTag; LoadCompressedSpriteSheet(&spriteSheet); if (arrowInfo->palTag == TAG_NONE) { - LoadPalette(sRedArrowPal, (16 * arrowInfo->palNum) + 0x100, 0x20); + LoadPalette(sRedInterface_Pal, OBJ_PLTT_ID(arrowInfo->palNum), PLTT_SIZE_4BPP); } else { - spritePal.data = sRedArrowPal; + spritePal.data = sRedInterface_Pal; spritePal.tag = arrowInfo->palTag; LoadSpritePalette(&spritePal); } @@ -1190,39 +1196,39 @@ void RemoveScrollIndicatorArrowPair(u8 taskId) DestroyTask(taskId); } -static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind) +static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorObjId) { - switch (cursorKind) + switch (cursorObjId) { - case 0: + case CURSOR_RED_OUTLINE - CURSOR_OBJECT_START: default: return ListMenuAddRedOutlineCursorObject(cursor); - case 1: + case CURSOR_RED_ARROW - CURSOR_OBJECT_START: return ListMenuAddRedArrowCursorObject(cursor); } } -static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind) +static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorObjId) { - switch (cursorKind) + switch (cursorObjId) { - case 0: + case CURSOR_RED_OUTLINE - CURSOR_OBJECT_START: ListMenuUpdateRedOutlineCursorObject(taskId, x, y); break; - case 1: + case CURSOR_RED_ARROW - CURSOR_OBJECT_START: ListMenuUpdateRedArrowCursorObject(taskId, x, y); break; } } -static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind) +static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorObjId) { - switch (cursorKind) + switch (cursorObjId) { - case 0: + case CURSOR_RED_OUTLINE - CURSOR_OBJECT_START: ListMenuRemoveRedOutlineCursorObject(taskId); break; - case 1: + case CURSOR_RED_ARROW - CURSOR_OBJECT_START: ListMenuRemoveRedArrowCursorObject(taskId); break; } @@ -1317,18 +1323,18 @@ static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor) struct SpriteTemplate spriteTemplate; u8 taskId; - spriteSheet.data = sSelectorOutlineGfx; + spriteSheet.data = sOutlineCursor_Gfx; spriteSheet.size = 0x100; spriteSheet.tag = cursor->tileTag; LoadCompressedSpriteSheet(&spriteSheet); if (cursor->palTag == TAG_NONE) { - LoadPalette(sRedArrowPal, (16 * cursor->palNum) + 0x100, 0x20); + LoadPalette(sRedInterface_Pal, OBJ_PLTT_ID(cursor->palNum), PLTT_SIZE_4BPP); } else { - spritePal.data = sRedArrowPal; + spritePal.data = sRedInterface_Pal; spritePal.tag = cursor->palTag; LoadSpritePalette(&spritePal); } @@ -1402,18 +1408,18 @@ static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor) struct SpriteTemplate spriteTemplate; u8 taskId; - spriteSheet.data = sRedArrowGfx; + spriteSheet.data = sArrowCursor_Gfx; spriteSheet.size = 0x80; spriteSheet.tag = cursor->tileTag; LoadCompressedSpriteSheet(&spriteSheet); if (cursor->palTag == TAG_NONE) { - LoadPalette(sRedArrowPal, (16 * cursor->palNum) + 0x100, 0x20); + LoadPalette(sRedInterface_Pal, OBJ_PLTT_ID(cursor->palNum), PLTT_SIZE_4BPP); } else { - spritePal.data = sRedArrowPal; + spritePal.data = sRedInterface_Pal; spritePal.tag = cursor->palTag; LoadSpritePalette(&spritePal); } diff --git a/src/mail.c b/src/mail.c index e20a53cba75d..575be706172d 100644 --- a/src/mail.c +++ b/src/mail.c @@ -566,13 +566,13 @@ static bool8 MailReadBuildGraphics(void) CopyBgTilemapBufferToVram(2); break; case 12: - LoadPalette(GetOverworldTextboxPalettePtr(), 240, 32); + LoadPalette(GetOverworldTextboxPalettePtr(), BG_PLTT_ID(15), PLTT_SIZE_4BPP); gPlttBufferUnfaded[250] = sMailGraphics[sMailRead->mailType].textColor; gPlttBufferFaded[250] = sMailGraphics[sMailRead->mailType].textColor; gPlttBufferUnfaded[251] = sMailGraphics[sMailRead->mailType].textShadow; gPlttBufferFaded[251] = sMailGraphics[sMailRead->mailType].textShadow; - LoadPalette(sMailGraphics[sMailRead->mailType].palette, 0, 32); + LoadPalette(sMailGraphics[sMailRead->mailType].palette, BG_PLTT_ID(0), PLTT_SIZE_4BPP); gPlttBufferUnfaded[10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; gPlttBufferFaded[10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; diff --git a/src/main.c b/src/main.c index 3a306b2cf8ea..69c6c7a16bfd 100644 --- a/src/main.c +++ b/src/main.c @@ -31,6 +31,9 @@ static void VCountIntr(void); static void SerialIntr(void); static void IntrDummy(void); +// Defined in the linker script so that the test build can override it. +extern void gInitialMainCB2(void); + const u8 gGameVersion = GAME_VERSION; const u8 gGameLanguage = GAME_LANGUAGE; // English @@ -68,6 +71,7 @@ IntrFunc gIntrTable[INTR_COUNT]; u8 gLinkVSyncDisabled; u32 IntrMain_Buffer[0x200]; s8 gPcmDmaCounter; +void *gAgbMainLoop_sp; static EWRAM_DATA u16 sTrainerId = 0; @@ -126,6 +130,12 @@ void AgbMain() AGBPrintfInit(); #endif #endif + gAgbMainLoop_sp = __builtin_frame_address(0); + AgbMainLoop(); +} + +void AgbMainLoop(void) +{ for (;;) { ReadKeys(); @@ -178,7 +188,7 @@ static void InitMainCallbacks(void) gTrainerHillVBlankCounter = NULL; gMain.vblankCounter2 = 0; gMain.callback1 = NULL; - SetMainCallback2(CB2_InitCopyrightScreenAfterBootup); + SetMainCallback2(gInitialMainCB2); gSaveBlock2Ptr = &gSaveblock2.block; gPokemonStoragePtr = &gPokemonStorage.block; } diff --git a/src/main_menu.c b/src/main_menu.c index 4fe0f5e61fb0..377cd635c1de 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -503,7 +503,9 @@ static const u8 *const sFemalePresetNames[] = { gText_DefaultNameHalie }; -// .text +// The number of male vs. female names is assumed to be the same. +// If they aren't, the smaller of the two sizes will be used and any extra names will be ignored. +#define NUM_PRESET_NAMES min(ARRAY_COUNT(sMalePresetNames), ARRAY_COUNT(sFemalePresetNames)) enum { @@ -571,8 +573,8 @@ static u32 InitMainMenu(bool8 returningFromOptionsMenu) DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); ResetPaletteFade(); - LoadPalette(sMainMenuBgPal, 0, 32); - LoadPalette(sMainMenuTextPal, 0xF0, 32); + LoadPalette(sMainMenuBgPal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); + LoadPalette(sMainMenuTextPal, BG_PLTT_ID(15), PLTT_SIZE_4BPP); ScanlineEffect_Stop(); ResetTasks(); ResetSpriteData(); @@ -750,28 +752,28 @@ static void Task_DisplayMainMenu(u8 taskId) SetGpuReg(REG_OFFSET_BLDY, 7); palette = RGB_BLACK; - LoadPalette(&palette, 254, 2); + LoadPalette(&palette, BG_PLTT_ID(15) + 14, PLTT_SIZEOF(1)); palette = RGB_WHITE; - LoadPalette(&palette, 250, 2); + LoadPalette(&palette, BG_PLTT_ID(15) + 10, PLTT_SIZEOF(1)); palette = RGB(12, 12, 12); - LoadPalette(&palette, 251, 2); + LoadPalette(&palette, BG_PLTT_ID(15) + 11, PLTT_SIZEOF(1)); palette = RGB(26, 26, 25); - LoadPalette(&palette, 252, 2); + LoadPalette(&palette, BG_PLTT_ID(15) + 12, PLTT_SIZEOF(1)); // Note: If there is no save file, the save block is zeroed out, // so the default gender is MALE. if (gSaveBlock2Ptr->playerGender == MALE) { palette = RGB(4, 16, 31); - LoadPalette(&palette, 241, 2); + LoadPalette(&palette, BG_PLTT_ID(15) + 1, PLTT_SIZEOF(1)); } else { palette = RGB(31, 3, 21); - LoadPalette(&palette, 241, 2); + LoadPalette(&palette, BG_PLTT_ID(15) + 1, PLTT_SIZEOF(1)); } switch (gTasks[taskId].tMenuType) @@ -1274,8 +1276,8 @@ static void Task_NewGameBirchSpeech_Init(u8 taskId) LZ77UnCompVram(sBirchSpeechShadowGfx, (void *)VRAM); LZ77UnCompVram(sBirchSpeechBgMap, (void *)(BG_SCREEN_ADDR(7))); - LoadPalette(sBirchSpeechBgPals, 0, 64); - LoadPalette(sBirchSpeechPlatformBlackPal, 1, 16); + LoadPalette(sBirchSpeechBgPals, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); + LoadPalette(sBirchSpeechPlatformBlackPal, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(8)); ScanlineEffect_Stop(); ResetSpriteData(); FreeAllSpritePalettes(); @@ -1327,7 +1329,7 @@ static void Task_NewGameBirchSpeech_WaitForSpriteFadeInWelcome(u8 taskId) { InitWindows(sNewGameBirchSpeechTextWindows); LoadMainMenuWindowFrameTiles(0, 0xF3); - LoadMessageBoxGfx(0, 0xFC, 0xF0); + LoadMessageBoxGfx(0, 0xFC, BG_PLTT_ID(15)); NewGameBirchSpeech_ShowDialogueWindow(0, 1); PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_GFX); @@ -1597,7 +1599,7 @@ static void Task_NewGameBirchSpeech_StartNamingScreen(u8 taskId) { FreeAllWindowBuffers(); FreeAndDestroyMonPicSprite(gTasks[taskId].tLotadSpriteId); - NewGameBirchSpeech_SetDefaultPlayerName(Random() % 20); + NewGameBirchSpeech_SetDefaultPlayerName(Random() % NUM_PRESET_NAMES); DestroyTask(taskId); DoNamingScreen(NAMING_SCREEN_PLAYER, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_NewGameBirchSpeech_ReturnFromNamingScreen); } @@ -1631,7 +1633,7 @@ static void Task_NewGameBirchSpeech_ProcessNameYesNoMenu(u8 taskId) NewGameBirchSpeech_StartFadePlatformIn(taskId, 1); gTasks[taskId].func = Task_NewGameBirchSpeech_SlidePlatformAway2; break; - case -1: + case MENU_B_PRESSED: case 1: PlaySE(SE_SELECT); gTasks[taskId].func = Task_NewGameBirchSpeech_BoyOrGirl; @@ -1809,8 +1811,8 @@ static void CB2_NewGameBirchSpeech_ReturnFromNamingScreen(void) ResetPaletteFade(); LZ77UnCompVram(sBirchSpeechShadowGfx, (u8 *)VRAM); LZ77UnCompVram(sBirchSpeechBgMap, (u8 *)(BG_SCREEN_ADDR(7))); - LoadPalette(sBirchSpeechBgPals, 0, 64); - LoadPalette(&sBirchSpeechBgGradientPal[1], 1, 16); + LoadPalette(sBirchSpeechBgPals, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); + LoadPalette(&sBirchSpeechBgGradientPal[1], BG_PLTT_ID(0) + 1, PLTT_SIZEOF(8)); ResetTasks(); taskId = CreateTask(Task_NewGameBirchSpeech_ReturnFromNamingScreenShowTextbox, 0); gTasks[taskId].tTimer = 5; @@ -1853,7 +1855,7 @@ static void CB2_NewGameBirchSpeech_ReturnFromNamingScreen(void) SetMainCallback2(CB2_MainMenu); InitWindows(sNewGameBirchSpeechTextWindows); LoadMainMenuWindowFrameTiles(0, 0xF3); - LoadMessageBoxGfx(0, 0xFC, 0xF0); + LoadMessageBoxGfx(0, 0xFC, BG_PLTT_ID(15)); PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_FULL); } @@ -2029,7 +2031,7 @@ static void Task_NewGameBirchSpeech_FadePlatformIn(u8 taskId) { gTasks[taskId].tDelayTimer = gTasks[taskId].tDelay; gTasks[taskId].tPalIndex++; - LoadPalette(&sBirchSpeechBgGradientPal[gTasks[taskId].tPalIndex], 1, 16); + LoadPalette(&sBirchSpeechBgGradientPal[gTasks[taskId].tPalIndex], BG_PLTT_ID(0) + 1, PLTT_SIZEOF(8)); } } @@ -2063,7 +2065,7 @@ static void Task_NewGameBirchSpeech_FadePlatformOut(u8 taskId) { gTasks[taskId].tDelayTimer = gTasks[taskId].tDelay; gTasks[taskId].tPalIndex--; - LoadPalette(&sBirchSpeechBgGradientPal[gTasks[taskId].tPalIndex], 1, 16); + LoadPalette(&sBirchSpeechBgGradientPal[gTasks[taskId].tPalIndex], BG_PLTT_ID(0) + 1, PLTT_SIZEOF(8)); } } @@ -2191,7 +2193,7 @@ static void MainMenu_FormatSavegameBadges(void) static void LoadMainMenuWindowFrameTiles(u8 bgId, u16 tileOffset) { LoadBgTiles(bgId, GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->tiles, 0x120, tileOffset); - LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, 32, 32); + LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); } static void DrawMainMenuWindowBorder(const struct WindowTemplate *template, u16 baseTileNum) diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 866072a2c36b..07e4f98708fc 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -385,8 +385,8 @@ static void LoadMapNamePopUpWindowBg(void) CallWindowFunction(popupWindowId, DrawMapNamePopUpFrame); PutWindowTilemap(popupWindowId); if (gMapHeader.weather == WEATHER_UNDERWATER_BUBBLES) - LoadPalette(&sMapPopUp_Palette_Underwater, 0xE0, sizeof(sMapPopUp_Palette_Underwater)); + LoadPalette(&sMapPopUp_Palette_Underwater, BG_PLTT_ID(14), sizeof(sMapPopUp_Palette_Underwater)); else - LoadPalette(sMapPopUp_PaletteTable[popUpThemeId], 0xE0, sizeof(sMapPopUp_PaletteTable[0])); + LoadPalette(sMapPopUp_PaletteTable[popUpThemeId], BG_PLTT_ID(14), sizeof(sMapPopUp_PaletteTable[0])); BlitBitmapToWindow(popupWindowId, sMapPopUp_Table[popUpThemeId], 0, 0, 80, 24); } diff --git a/src/match_call.c b/src/match_call.c index 4f6a7b9821db..a9d18b3477a0 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -1267,8 +1267,8 @@ 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)); + LoadPalette(sMatchCallWindow_Pal, BG_PLTT_ID(14), sizeof(sMatchCallWindow_Pal)); + LoadPalette(sPokenavIcon_Pal, BG_PLTT_ID(15), sizeof(sPokenavIcon_Pal)); ChangeBgY(0, -0x2000, BG_COORD_SET); return TRUE; } @@ -2102,7 +2102,7 @@ void LoadMatchCallWindowGfx(u32 windowId, u32 destOffset, u32 paletteId) { u8 bg = GetWindowAttribute(windowId, WINDOW_BG); LoadBgTiles(bg, sMatchCallWindow_Gfx, 0x100, destOffset); - LoadPalette(sMatchCallWindow_Pal, paletteId << 4, sizeof(sMatchCallWindow_Pal)); + LoadPalette(sMatchCallWindow_Pal, BG_PLTT_ID(paletteId), sizeof(sMatchCallWindow_Pal)); } void DrawMatchCallTextBoxBorder(u32 windowId, u32 tileOffset, u32 paletteId) diff --git a/src/menu.c b/src/menu.c index 4afda8cc8911..ca61f8b8765b 100644 --- a/src/menu.c +++ b/src/menu.c @@ -23,6 +23,7 @@ #define DLG_WINDOW_PALETTE_NUM 15 #define DLG_WINDOW_BASE_TILE_NUM 0x200 #define STD_WINDOW_PALETTE_NUM 14 +#define STD_WINDOW_PALETTE_SIZE PLTT_SIZEOF(10) #define STD_WINDOW_BASE_TILE_NUM 0x214 struct MenuInfoIcon @@ -209,8 +210,8 @@ void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonP void LoadMessageBoxAndBorderGfx(void) { - LoadMessageBoxGfx(0, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM * 0x10); - LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM * 0x10); + LoadMessageBoxGfx(0, DLG_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(DLG_WINDOW_PALETTE_NUM)); + LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(STD_WINDOW_PALETTE_NUM)); } void DrawDialogueFrame(u8 windowId, bool8 copyToVram) @@ -428,18 +429,18 @@ void SetStandardWindowBorderStyle(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); + LoadMessageBoxGfx(windowId, DLG_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(DLG_WINDOW_PALETTE_NUM)); + DrawDialogFrameWithCustomTileAndPalette(windowId, copyToVram, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM); } void Menu_LoadStdPal(void) { - LoadPalette(gStandardMenuPalette, STD_WINDOW_PALETTE_NUM * 0x10, 0x14); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(STD_WINDOW_PALETTE_NUM), STD_WINDOW_PALETTE_SIZE); } void Menu_LoadStdPalAt(u16 offset) { - LoadPalette(gStandardMenuPalette, offset, 0x14); + LoadPalette(gStandardMenuPalette, offset, STD_WINDOW_PALETTE_SIZE); } // Unused @@ -551,7 +552,7 @@ void AddTextPrinterWithCallbackForMessage(bool8 canSpeedUp, void (*callback)(str void EraseFieldMessageBox(bool8 copyToVram) { - FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x11); + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 17); if (copyToVram == TRUE) CopyBgTilemapBufferToVram(0); } @@ -807,9 +808,9 @@ u8 HofPCTopBar_AddWindow(u8 bg, u8 xPos, u8 yPos, u8 palette, u16 baseTile) sHofPCTopBarWindowId = AddWindow(&window); if (palette > 15) - palette = 15 * 16; + palette = BG_PLTT_ID(15); else - palette *= 16; + palette = BG_PLTT_ID(palette); LoadPalette(sHofPC_TopBar_Pal, palette, sizeof(sHofPC_TopBar_Pal)); return sHofPCTopBarWindowId; @@ -2085,7 +2086,7 @@ static void UnusedBlitBitmapRect(const struct Bitmap *src, struct Bitmap *dst, u // Unused static void LoadMonIconPalAtOffset(u8 palOffset, u16 speciesId) { - LoadPalette(GetValidMonIconPalettePtr(speciesId), palOffset, 0x20); + LoadPalette(GetValidMonIconPalettePtr(speciesId), palOffset, PLTT_SIZE_4BPP); } // Unused @@ -2112,7 +2113,7 @@ void ListMenuLoadStdPalAt(u8 palOffset, u8 palId) break; } - LoadPalette(palette, palOffset, 0x20); + LoadPalette(palette, palOffset, PLTT_SIZE_4BPP); } void BlitMenuInfoIcon(u8 windowId, u8 iconId, u16 x, u16 y) diff --git a/src/menu_specialized.c b/src/menu_specialized.c index d844b8225a64..5422087bfc3b 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -106,52 +106,52 @@ static const u8 sConditionToLineLength[MAX_CONDITION + 1] = 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35 }; - static const struct WindowTemplate sMoveRelearnerWindowTemplates[] = { - { + [RELEARNERWIN_DESC_BATTLE] = { .bg = 1, .tilemapLeft = 1, .tilemapTop = 1, .width = 16, .height = 12, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0xA }, - { + [RELEARNERWIN_DESC_CONTEST] = { .bg = 1, .tilemapLeft = 1, .tilemapTop = 1, .width = 16, .height = 12, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0xCA }, - { + [RELEARNERWIN_MOVE_LIST] = { .bg = 1, .tilemapLeft = 19, .tilemapTop = 1, .width = 10, .height = 12, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x18A }, - { + [RELEARNERWIN_MSG] = { .bg = 1, .tilemapLeft = 4, .tilemapTop = 15, .width = 22, .height = 4, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x202 }, - { + // Unused. Identical to sMoveRelearnerYesNoMenuTemplate + [RELEARNERWIN_YESNO] = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 8, .width = 5, .height = 4, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x25A }, DUMMY_WIN_TEMPLATE @@ -164,7 +164,7 @@ static const struct WindowTemplate sMoveRelearnerYesNoMenuTemplate = .tilemapTop = 8, .width = 5, .height = 4, - .paletteNum = 0xF, + .paletteNum = 15, .baseBlock = 0x25A }; @@ -176,7 +176,7 @@ static const struct ListMenuTemplate sMoveRelearnerMovesListTemplate = .itemPrintFunc = NULL, .totalItems = 0, .maxShowed = 0, - .windowId = 2, + .windowId = RELEARNERWIN_MOVE_LIST, .header_X = 0, .item_X = 8, .cursor_X = 0, @@ -188,7 +188,7 @@ static const struct ListMenuTemplate sMoveRelearnerMovesListTemplate = .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, .fontId = FONT_NORMAL, - .cursorKind = 0 + .cursorKind = CURSOR_BLACK_ARROW }; //-------------- @@ -285,7 +285,7 @@ u8 MailboxMenu_CreateList(struct PlayerPCItemPageStruct *page) gMultiuseListMenuTemplate.moveCursorFunc = MailboxMenu_MoveCursorFunc; gMultiuseListMenuTemplate.itemPrintFunc = MailboxMenu_ItemPrintFunc; gMultiuseListMenuTemplate.fontId = FONT_NORMAL; - gMultiuseListMenuTemplate.cursorKind = 0; + gMultiuseListMenuTemplate.cursorKind = CURSOR_BLACK_ARROW; gMultiuseListMenuTemplate.lettersSpacing = 0; gMultiuseListMenuTemplate.itemVerticalPadding = 0; gMultiuseListMenuTemplate.scrollMultiple = LIST_NO_MULTIPLE_SCROLL; @@ -702,32 +702,32 @@ void ConditionGraph_CalcPositions(u8 *conditions, struct UCoords16 *positions) // Move relearner //---------------- -void InitMoveRelearnerWindows(bool8 useContextWindow) +void InitMoveRelearnerWindows(bool8 useContestWindow) { u8 i; InitWindows(sMoveRelearnerWindowTemplates); DeactivateAllTextPrinters(); - LoadUserWindowBorderGfx(0, 1, 0xE0); - LoadPalette(gStandardMenuPalette, 0xF0, 0x20); + LoadUserWindowBorderGfx(0, 1, BG_PLTT_ID(14)); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); for (i = 0; i < ARRAY_COUNT(sMoveRelearnerWindowTemplates) - 1; i++) FillWindowPixelBuffer(i, PIXEL_FILL(1)); - if (!useContextWindow) + if (!useContestWindow) { - PutWindowTilemap(0); - DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x1, 0xE); + PutWindowTilemap(RELEARNERWIN_DESC_BATTLE); + DrawStdFrameWithCustomTileAndPalette(RELEARNERWIN_DESC_BATTLE, FALSE, 0x1, 0xE); } else { - PutWindowTilemap(1); - DrawStdFrameWithCustomTileAndPalette(1, FALSE, 1, 0xE); + PutWindowTilemap(RELEARNERWIN_DESC_CONTEST); + DrawStdFrameWithCustomTileAndPalette(RELEARNERWIN_DESC_CONTEST, FALSE, 1, 0xE); } - PutWindowTilemap(2); - PutWindowTilemap(3); - DrawStdFrameWithCustomTileAndPalette(2, FALSE, 1, 0xE); - DrawStdFrameWithCustomTileAndPalette(3, FALSE, 1, 0xE); + PutWindowTilemap(RELEARNERWIN_MOVE_LIST); + PutWindowTilemap(RELEARNERWIN_MSG); + DrawStdFrameWithCustomTileAndPalette(RELEARNERWIN_MOVE_LIST, FALSE, 1, 0xE); + DrawStdFrameWithCustomTileAndPalette(RELEARNERWIN_MSG, FALSE, 1, 0xE); MoveRelearnerDummy(); ScheduleBgCopyTilemapToVram(1); } @@ -758,33 +758,34 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) u8 buffer[32]; const u8 *str; - FillWindowPixelBuffer(0, PIXEL_FILL(1)); + FillWindowPixelBuffer(RELEARNERWIN_DESC_BATTLE, PIXEL_FILL(1)); str = gText_MoveRelearnerBattleMoves; - x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 0x80); - AddTextPrinterParameterized(0, FONT_NORMAL, str, x, 1, TEXT_SKIP_DRAW, NULL); + x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 128); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, x, 1, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerPP; - AddTextPrinterParameterized(0, FONT_NORMAL, str, 4, 0x29, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, 4, 41, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerPower; - x = GetStringRightAlignXOffset(FONT_NORMAL, str, 0x6A); - AddTextPrinterParameterized(0, FONT_NORMAL, str, x, 0x19, TEXT_SKIP_DRAW, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 106); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, x, 25, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerAccuracy; - x = GetStringRightAlignXOffset(FONT_NORMAL, str, 0x6A); - AddTextPrinterParameterized(0, FONT_NORMAL, str, x, 0x29, TEXT_SKIP_DRAW, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 106); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, x, 41, TEXT_SKIP_DRAW, NULL); if (chosenMove == LIST_CANCEL) { - CopyWindowToVram(0, COPYWIN_GFX); + // On "Cancel", skip printing move data + CopyWindowToVram(RELEARNERWIN_DESC_BATTLE, COPYWIN_GFX); return; } move = &gBattleMoves[chosenMove]; str = gTypeNames[move->type]; - AddTextPrinterParameterized(0, FONT_NORMAL, str, 4, 0x19, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, 4, 25, TEXT_SKIP_DRAW, NULL); x = 4 + GetStringWidth(FONT_NORMAL, gText_MoveRelearnerPP, 0); ConvertIntToDecimalStringN(buffer, move->pp, STR_CONV_MODE_LEFT_ALIGN, 2); - AddTextPrinterParameterized(0, FONT_NORMAL, buffer, x, 0x29, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, buffer, x, 41, TEXT_SKIP_DRAW, NULL); if (move->power < 2) { @@ -795,7 +796,7 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) ConvertIntToDecimalStringN(buffer, move->power, STR_CONV_MODE_LEFT_ALIGN, 3); str = buffer; } - AddTextPrinterParameterized(0, FONT_NORMAL, str, 0x6A, 0x19, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, 106, 25, TEXT_SKIP_DRAW, NULL); if (move->accuracy == 0) { @@ -806,14 +807,14 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) ConvertIntToDecimalStringN(buffer, move->accuracy, STR_CONV_MODE_LEFT_ALIGN, 3); str = buffer; } - AddTextPrinterParameterized(0, FONT_NORMAL, str, 0x6A, 0x29, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, 106, 41, TEXT_SKIP_DRAW, NULL); if (move->effect != EFFECT_PLACEHOLDER) str = gMoveDescriptionPointers[chosenMove - 1]; else str = gNotDoneYetDescription; - AddTextPrinterParameterized(0, FONT_NARROW, str, 0, 0x41, 0, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NARROW, str, 0, 65, 0, NULL); } static void MoveRelearnerMenuLoadContestMoveDescription(u32 chosenMove) @@ -823,33 +824,33 @@ static void MoveRelearnerMenuLoadContestMoveDescription(u32 chosenMove) const struct ContestMove *move; MoveRelearnerShowHideHearts(chosenMove); - FillWindowPixelBuffer(1, PIXEL_FILL(1)); + FillWindowPixelBuffer(RELEARNERWIN_DESC_CONTEST, PIXEL_FILL(1)); str = gText_MoveRelearnerContestMovesTitle; - x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 0x80); - AddTextPrinterParameterized(1, FONT_NORMAL, str, x, 1, TEXT_SKIP_DRAW, NULL); + x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 128); + AddTextPrinterParameterized(RELEARNERWIN_DESC_CONTEST, FONT_NORMAL, str, x, 1, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerAppeal; - x = GetStringRightAlignXOffset(FONT_NORMAL, str, 0x5C); - AddTextPrinterParameterized(1, FONT_NORMAL, str, x, 0x19, TEXT_SKIP_DRAW, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 92); + AddTextPrinterParameterized(RELEARNERWIN_DESC_CONTEST, FONT_NORMAL, str, x, 25, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerJam; - x = GetStringRightAlignXOffset(FONT_NORMAL, str, 0x5C); - AddTextPrinterParameterized(1, FONT_NORMAL, str, x, 0x29, TEXT_SKIP_DRAW, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 92); + AddTextPrinterParameterized(RELEARNERWIN_DESC_CONTEST, FONT_NORMAL, str, x, 41, TEXT_SKIP_DRAW, NULL); if (chosenMove == MENU_NOTHING_CHOSEN) { - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(RELEARNERWIN_DESC_CONTEST, COPYWIN_GFX); return; } move = &gContestMoves[chosenMove]; str = gContestMoveTypeTextPointers[move->contestCategory]; - AddTextPrinterParameterized(1, FONT_NORMAL, str, 4, 0x19, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_CONTEST, FONT_NORMAL, str, 4, 25, TEXT_SKIP_DRAW, NULL); str = gContestEffectDescriptionPointers[move->effect]; - AddTextPrinterParameterized(1, FONT_NARROW, str, 0, 0x41, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_CONTEST, FONT_NARROW, str, 0, 65, TEXT_SKIP_DRAW, NULL); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(RELEARNERWIN_DESC_CONTEST, COPYWIN_GFX); } static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list) @@ -860,20 +861,20 @@ static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct List MoveRelearnerMenuLoadContestMoveDescription(itemIndex); } -void MoveRelearnerPrintText(u8 *str) +void MoveRelearnerPrintMessage(u8 *str) { u8 speed; - FillWindowPixelBuffer(3, PIXEL_FILL(1)); + FillWindowPixelBuffer(RELEARNERWIN_MSG, PIXEL_FILL(1)); gTextFlags.canABSpeedUpPrint = TRUE; speed = GetPlayerTextSpeedDelay(); - AddTextPrinterParameterized2(3, FONT_NORMAL, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, 3); + AddTextPrinterParameterized2(RELEARNERWIN_MSG, FONT_NORMAL, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, 3); } bool16 MoveRelearnerRunTextPrinters(void) { RunTextPrinters(); - return IsTextPrinterActive(3); + return IsTextPrinterActive(RELEARNERWIN_MSG); } void MoveRelearnerCreateYesNoMenu(void) @@ -1543,7 +1544,7 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bg 0, 15 * i, color, - -1, + TEXT_SKIP_DRAW, sLvlUpStatStrings[i]); StringCopy(text, (statsDiff[i] >= 0) ? gText_Plus : gText_Dash); @@ -1552,7 +1553,7 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bg 56, 15 * i, color, - -1, + TEXT_SKIP_DRAW, text); if (abs(statsDiff[i]) <= 9) x = 18; @@ -1565,7 +1566,7 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bg 56 + x, 15 * i, color, - -1, + TEXT_SKIP_DRAW, text); } } @@ -1607,7 +1608,7 @@ void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 s 0, 15 * i, color, - -1, + TEXT_SKIP_DRAW, sLvlUpStatStrings[i]); AddTextPrinterParameterized3(windowId, @@ -1615,7 +1616,7 @@ void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 s 56 + x, 15 * i, color, - -1, + TEXT_SKIP_DRAW, text); } } diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index e35a5b29ac3c..924428aea4de 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -23,7 +23,7 @@ static const u8 sTileBitAttributes[NUM_METATILE_BEHAVIORS] = [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_INTERIOR_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, @@ -852,7 +852,7 @@ bool8 MetatileBehavior_IsMountain(u8 metatileBehavior) bool8 MetatileBehavior_IsDiveable(u8 metatileBehavior) { - if (metatileBehavior == MB_SEMI_DEEP_WATER + if (metatileBehavior == MB_INTERIOR_DEEP_WATER || metatileBehavior == MB_DEEP_WATER || metatileBehavior == MB_SOOTOPOLIS_DEEP_WATER) return TRUE; @@ -905,7 +905,7 @@ bool8 MetatileBehavior_IsCrackedIce(u8 metatileBehavior) bool8 MetatileBehavior_IsDeepOrOceanWater(u8 metatileBehavior) { if (metatileBehavior == MB_OCEAN_WATER - || metatileBehavior == MB_SEMI_DEEP_WATER + || metatileBehavior == MB_INTERIOR_DEEP_WATER || metatileBehavior == MB_DEEP_WATER) return TRUE; else @@ -1163,7 +1163,7 @@ bool8 MetatileBehavior_IsSurfableFishableWater(u8 metatileBehavior) { if (metatileBehavior == MB_POND_WATER || metatileBehavior == MB_OCEAN_WATER - || metatileBehavior == MB_SEMI_DEEP_WATER + || metatileBehavior == MB_INTERIOR_DEEP_WATER || metatileBehavior == MB_DEEP_WATER || metatileBehavior == MB_SOOTOPOLIS_DEEP_WATER || (metatileBehavior == MB_EASTWARD_CURRENT diff --git a/src/mini_printf.c b/src/mini_printf.c index 8345a3935e72..d96a9379a147 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -142,7 +142,7 @@ static s32 mini_strlen(const char *s) return len; } -static s32 mini_itoa(u32 value, u32 radix, s32 uppercase, bool32 unsig, char *buffer) +static s32 mini_itoa(s32 value, u32 radix, s32 uppercase, bool32 unsig, char *buffer) { char *pbuffer = buffer; s32 negative = 0; diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 37096619d36c..01b87393aeed 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -96,7 +96,7 @@ static const s16 sCeilingCrumblePositions[][3] = static const struct SpriteSheet sCeilingCrumbleSpriteSheets[] = { - {sMirageTowerCrumbles_Gfx, 0x80, TAG_CEILING_CRUMBLE}, + {sMirageTowerCrumbles_Gfx, sizeof(sMirageTowerCrumbles_Gfx), TAG_CEILING_CRUMBLE}, {} }; diff --git a/src/move_relearner.c b/src/move_relearner.c index d9c943b576cd..af4593e53331 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -145,12 +145,19 @@ // The different versions of hearts are selected using animation // commands. -#define APPEAL_HEART_EMPTY 0 -#define APPEAL_HEART_FULL 1 -#define JAM_HEART_EMPTY 2 -#define JAM_HEART_FULL 3 +enum { + APPEAL_HEART_EMPTY, + APPEAL_HEART_FULL, + JAM_HEART_EMPTY, + JAM_HEART_FULL, +}; + +#define TAG_MODE_ARROWS 5325 +#define TAG_LIST_ARROWS 5425 +#define GFXTAG_UI 5525 +#define PALTAG_UI 5526 -#define MAX_RELEARNER_MOVES (MAX_LEVEL_UP_MOVES > 25 ? MAX_LEVEL_UP_MOVES : 25) +#define MAX_RELEARNER_MOVES max(MAX_LEVEL_UP_MOVES, 25) static EWRAM_DATA struct { @@ -174,11 +181,11 @@ static EWRAM_DATA struct { bool8 showContestInfo; } sMoveRelearnerMenuSate = {0}; -static const u16 sMoveRelearnerPaletteData[] = INCBIN_U16("graphics/interface/ui_learn_move.gbapal"); +static const u16 sUI_Pal[] = INCBIN_U16("graphics/interface/ui_learn_move.gbapal"); // The arrow sprites in this spritesheet aren't used. The scroll-arrow system provides its own // arrow sprites. -static const u8 sMoveRelearnerSpriteSheetData[] = INCBIN_U8("graphics/interface/ui_learn_move.4bpp"); +static const u8 sUI_Tiles[] = INCBIN_U8("graphics/interface/ui_learn_move.4bpp"); static const struct OamData sHeartSpriteOamData = { @@ -233,15 +240,15 @@ static const struct OamData sUnusedOam2 = static const struct SpriteSheet sMoveRelearnerSpriteSheet = { - .data = sMoveRelearnerSpriteSheetData, - .size = 0x180, - .tag = 5525 + .data = sUI_Tiles, + .size = sizeof(sUI_Tiles), + .tag = GFXTAG_UI }; static const struct SpritePalette sMoveRelearnerPalette = { - .data = sMoveRelearnerPaletteData, - .tag = 5526 + .data = sUI_Pal, + .tag = PALTAG_UI }; static const struct ScrollArrowsTemplate sDisplayModeArrowsTemplate = @@ -254,8 +261,8 @@ static const struct ScrollArrowsTemplate sDisplayModeArrowsTemplate = .secondY = 16, .fullyUpThreshold = -1, .fullyDownThreshold = -1, - .tileTag = 5325, - .palTag = 5325, + .tileTag = TAG_MODE_ARROWS, + .palTag = TAG_MODE_ARROWS, .palNum = 0, }; @@ -269,8 +276,8 @@ static const struct ScrollArrowsTemplate sMoveListScrollArrowsTemplate = .secondY = 104, .fullyUpThreshold = 0, .fullyDownThreshold = 0, - .tileTag = 5425, - .palTag = 5425, + .tileTag = TAG_LIST_ARROWS, + .palTag = TAG_LIST_ARROWS, .palNum = 0, }; @@ -308,8 +315,8 @@ static const union AnimCmd *const sHeartSpriteAnimationCommands[] = static const struct SpriteTemplate sConstestMoveHeartSprite = { - .tileTag = 5525, - .paletteTag = 5526, + .tileTag = GFXTAG_UI, + .paletteTag = PALTAG_UI, .oam = &sHeartSpriteOamData, .anims = sHeartSpriteAnimationCommands, .images = NULL, @@ -405,7 +412,7 @@ static void CB2_InitLearnMove(void) CreateUISprites(); sMoveRelearnerStruct->moveListMenuTask = ListMenuInit(&gMultiuseListMenuTemplate, sMoveRelearnerMenuSate.listOffset, sMoveRelearnerMenuSate.listRow); - FillPalette(RGB_BLACK, 0, 2); + SetBackdropFromColor(RGB_BLACK); SetMainCallback2(CB2_MoveRelearnerMain); } @@ -430,7 +437,7 @@ static void CB2_InitLearnMoveReturnFromSelectMove(void) CreateUISprites(); sMoveRelearnerStruct->moveListMenuTask = ListMenuInit(&gMultiuseListMenuTemplate, sMoveRelearnerMenuSate.listOffset, sMoveRelearnerMenuSate.listRow); - FillPalette(RGB_BLACK, 0, 2); + SetBackdropFromColor(RGB_BLACK); SetMainCallback2(CB2_MoveRelearnerMain); } @@ -458,10 +465,10 @@ static void CB2_MoveRelearnerMain(void) UpdatePaletteFade(); } -static void FormatAndPrintText(const u8 *src) +static void PrintMessageWithPlaceholders(const u8 *src) { StringExpandPlaceholders(gStringVar4, src); - MoveRelearnerPrintText(gStringVar4); + MoveRelearnerPrintMessage(gStringVar4); } // See the state machine doc at the top of the file. @@ -515,7 +522,7 @@ static void DoMoveRelearnerMain(void) { if (GiveMoveToMon(&gPlayerParty[sMoveRelearnerStruct->partyMon], GetCurrentSelectedMove()) != MON_HAS_MAX_MOVES) { - FormatAndPrintText(gText_MoveRelearnerPkmnLearnedMove); + PrintMessageWithPlaceholders(gText_MoveRelearnerPkmnLearnedMove); gSpecialVar_0x8004 = TRUE; sMoveRelearnerStruct->state = MENU_STATE_PRINT_TEXT_THEN_FANFARE; } @@ -553,7 +560,7 @@ static void DoMoveRelearnerMain(void) gSpecialVar_0x8004 = FALSE; sMoveRelearnerStruct->state = MENU_STATE_FADE_AND_RETURN; } - else if (selection == -1 || selection == 1) + else if (selection == MENU_B_PRESSED || selection == 1) { if (sMoveRelearnerMenuSate.showContestInfo == FALSE) { @@ -567,7 +574,7 @@ static void DoMoveRelearnerMain(void) } break; case MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT: - FormatAndPrintText(gText_MoveRelearnerPkmnTryingToLearnMove); + PrintMessageWithPlaceholders(gText_MoveRelearnerPkmnTryingToLearnMove); sMoveRelearnerStruct->state++; break; case MENU_STATE_WAIT_FOR_TRYING_TO_LEARN: @@ -579,14 +586,14 @@ static void DoMoveRelearnerMain(void) break; case MENU_STATE_CONFIRM_DELETE_OLD_MOVE: { - s8 var = Menu_ProcessInputNoWrapClearOnChoose(); + s8 selection = Menu_ProcessInputNoWrapClearOnChoose(); - if (var == 0) + if (selection == 0) { - FormatAndPrintText(gText_MoveRelearnerWhichMoveToForget); + PrintMessageWithPlaceholders(gText_MoveRelearnerWhichMoveToForget); sMoveRelearnerStruct->state = MENU_STATE_PRINT_WHICH_MOVE_PROMPT; } - else if (var == -1 || var == 1) + else if (selection == MENU_B_PRESSED || selection == 1) { sMoveRelearnerStruct->state = MENU_STATE_PRINT_STOP_TEACHING; } @@ -594,7 +601,7 @@ static void DoMoveRelearnerMain(void) break; case MENU_STATE_PRINT_STOP_TEACHING: StringCopy(gStringVar2, gMoveNames[GetCurrentSelectedMove()]); - FormatAndPrintText(gText_MoveRelearnerStopTryingToTeachMove); + PrintMessageWithPlaceholders(gText_MoveRelearnerStopTryingToTeachMove); sMoveRelearnerStruct->state++; break; case MENU_STATE_WAIT_FOR_STOP_TEACHING: @@ -606,13 +613,13 @@ static void DoMoveRelearnerMain(void) break; case MENU_STATE_CONFIRM_STOP_TEACHING: { - s8 var = Menu_ProcessInputNoWrapClearOnChoose(); + s8 selection = Menu_ProcessInputNoWrapClearOnChoose(); - if (var == 0) + if (selection == 0) { sMoveRelearnerStruct->state = MENU_STATE_CHOOSE_SETUP_STATE; } - else if (var == MENU_B_PRESSED || var == 1) + else if (selection == MENU_B_PRESSED || selection == 1) { // What's the point? It gets set to MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT, anyway. if (sMoveRelearnerMenuSate.showContestInfo == FALSE) @@ -630,7 +637,7 @@ static void DoMoveRelearnerMain(void) case MENU_STATE_CHOOSE_SETUP_STATE: if (!MoveRelearnerRunTextPrinters()) { - FillWindowPixelBuffer(3, 0x11); + FillWindowPixelBuffer(RELEARNERWIN_MSG, 0x11); if (sMoveRelearnerMenuSate.showContestInfo == FALSE) { sMoveRelearnerStruct->state = MENU_STATE_SETUP_BATTLE_MODE; @@ -687,7 +694,7 @@ static void DoMoveRelearnerMain(void) ShowTeachMoveText(TRUE); } RemoveScrollArrows(); - CopyWindowToVram(3, COPYWIN_GFX); + CopyWindowToVram(RELEARNERWIN_MSG, COPYWIN_GFX); break; case MENU_STATE_TRY_OVERWRITE_MOVE: if (!gPaletteFade.active) @@ -704,7 +711,7 @@ static void DoMoveRelearnerMain(void) RemoveMonPPBonus(&gPlayerParty[sMoveRelearnerStruct->partyMon], sMoveRelearnerStruct->moveSlot); SetMonMoveSlot(&gPlayerParty[sMoveRelearnerStruct->partyMon], GetCurrentSelectedMove(), sMoveRelearnerStruct->moveSlot); StringCopy(gStringVar2, gMoveNames[GetCurrentSelectedMove()]); - FormatAndPrintText(gText_MoveRelearnerAndPoof); + PrintMessageWithPlaceholders(gText_MoveRelearnerAndPoof); sMoveRelearnerStruct->state = MENU_STATE_DOUBLE_FANFARE_FORGOT_MOVE; gSpecialVar_0x8004 = TRUE; } @@ -713,7 +720,7 @@ static void DoMoveRelearnerMain(void) case MENU_STATE_DOUBLE_FANFARE_FORGOT_MOVE: if (!MoveRelearnerRunTextPrinters()) { - FormatAndPrintText(gText_MoveRelearnerPkmnForgotMoveAndLearnedNew); + PrintMessageWithPlaceholders(gText_MoveRelearnerPkmnForgotMoveAndLearnedNew); sMoveRelearnerStruct->state = MENU_STATE_PRINT_TEXT_THEN_FANFARE; PlayFanfare(MUS_LEVEL_UP); } @@ -758,15 +765,13 @@ static void HideHeartSpritesAndShowTeachMoveText(bool8 onlyHideSprites) s32 i; for (i = 0; i < 16; i++) - { gSprites[sMoveRelearnerStruct->heartSpriteIds[i]].invisible = TRUE; - } if (!onlyHideSprites) { StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToPkmn); - FillWindowPixelBuffer(3, 0x11); - AddTextPrinterParameterized(3, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); + FillWindowPixelBuffer(RELEARNERWIN_MSG, 0x11); + AddTextPrinterParameterized(RELEARNERWIN_MSG, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); } } @@ -779,21 +784,19 @@ static void HandleInput(bool8 showContest) { case LIST_NOTHING_CHOSEN: if (!(JOY_NEW(DPAD_LEFT | DPAD_RIGHT)) && !GetLRKeysPressed()) - { break; - } PlaySE(SE_SELECT); if (showContest == FALSE) { - PutWindowTilemap(1); + PutWindowTilemap(RELEARNERWIN_DESC_CONTEST); sMoveRelearnerStruct->state = MENU_STATE_SETUP_CONTEST_MODE; sMoveRelearnerMenuSate.showContestInfo = TRUE; } else { - PutWindowTilemap(0); + PutWindowTilemap(RELEARNERWIN_DESC_BATTLE); sMoveRelearnerStruct->state = MENU_STATE_SETUP_BATTLE_MODE; sMoveRelearnerMenuSate.showContestInfo = FALSE; } @@ -806,7 +809,7 @@ static void HandleInput(bool8 showContest) RemoveScrollArrows(); sMoveRelearnerStruct->state = MENU_STATE_PRINT_GIVE_UP_PROMPT; StringExpandPlaceholders(gStringVar4, gText_MoveRelearnerGiveUp); - MoveRelearnerPrintText(gStringVar4); + MoveRelearnerPrintMessage(gStringVar4); break; default: PlaySE(SE_SELECT); @@ -814,7 +817,7 @@ static void HandleInput(bool8 showContest) sMoveRelearnerStruct->state = MENU_STATE_PRINT_TEACH_MOVE_PROMPT; StringCopy(gStringVar2, gMoveNames[itemId]); StringExpandPlaceholders(gStringVar4, gText_MoveRelearnerTeachMoveConfirm); - MoveRelearnerPrintText(gStringVar4); + MoveRelearnerPrintMessage(gStringVar4); break; } } @@ -835,8 +838,8 @@ static void ShowTeachMoveText(bool8 shouldDoNothingInstead) if (shouldDoNothingInstead == FALSE) { StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToPkmn); - FillWindowPixelBuffer(3, 0x11); - AddTextPrinterParameterized(3, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); + FillWindowPixelBuffer(RELEARNERWIN_MSG, 0x11); + AddTextPrinterParameterized(RELEARNERWIN_MSG, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); } } @@ -850,9 +853,7 @@ static void CreateUISprites(void) // These are the appeal hearts. for (i = 0; i < 8; i++) - { sMoveRelearnerStruct->heartSpriteIds[i] = CreateSprite(&sConstestMoveHeartSprite, (i - (i / 4) * 4) * 8 + 104, (i / 4) * 8 + 36, 0); - } // These are the jam harts. // The animation is used to toggle between full/empty heart sprites. @@ -863,17 +864,13 @@ static void CreateUISprites(void) } for (i = 0; i < 16; i++) - { gSprites[sMoveRelearnerStruct->heartSpriteIds[i]].invisible = TRUE; - } } static void AddScrollArrows(void) { if (sMoveRelearnerStruct->moveDisplayArrowTask == TASK_NONE) - { sMoveRelearnerStruct->moveDisplayArrowTask = AddScrollIndicatorArrowPair(&sDisplayModeArrowsTemplate, &sMoveRelearnerStruct->scrollOffset); - } if (sMoveRelearnerStruct->moveListScrollArrowTask == TASK_NONE) { @@ -927,49 +924,35 @@ void MoveRelearnerShowHideHearts(s32 moveId) if (!sMoveRelearnerMenuSate.showContestInfo || moveId == LIST_CANCEL) { for (i = 0; i < 16; i++) - { gSprites[sMoveRelearnerStruct->heartSpriteIds[i]].invisible = TRUE; - } } else { numHearts = (u8)(gContestEffects[gContestMoves[moveId].effect].appeal / 10); if (numHearts == 0xFF) - { numHearts = 0; - } for (i = 0; i < 8; i++) { if (i < numHearts) - { StartSpriteAnim(&gSprites[sMoveRelearnerStruct->heartSpriteIds[i]], 1); - } else - { StartSpriteAnim(&gSprites[sMoveRelearnerStruct->heartSpriteIds[i]], 0); - } gSprites[sMoveRelearnerStruct->heartSpriteIds[i]].invisible = FALSE; } numHearts = (u8)(gContestEffects[gContestMoves[moveId].effect].jam / 10); if (numHearts == 0xFF) - { numHearts = 0; - } for (i = 0; i < 8; i++) { if (i < numHearts) - { StartSpriteAnim(&gSprites[sMoveRelearnerStruct->heartSpriteIds[i + 8]], 3); - } else - { StartSpriteAnim(&gSprites[sMoveRelearnerStruct->heartSpriteIds[i + 8]], 2); - } gSprites[sMoveRelearnerStruct->heartSpriteIds[i + 8]].invisible = FALSE; } } diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index 0af051ab7731..79cab2b050a9 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -20,6 +20,11 @@ #include "decompress.h" #include "constants/rgb.h" +enum { + WIN_MSG, + WIN_LOADING, +}; + static void CB2_MysteryEventMenu(void); static void PrintMysteryMenuText(u8 windowId, const u8 *text, u8 x, u8 y, s32 speed); @@ -40,7 +45,7 @@ static const struct BgTemplate sBgTemplates[] = static const struct WindowTemplate sWindowTemplates[] = { - { + [WIN_MSG] = { .bg = 0, .tilemapLeft = 4, .tilemapTop = 15, @@ -49,7 +54,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 20 }, - { + [WIN_LOADING] = { .bg = 0, .tilemapLeft = 7, .tilemapTop = 6, @@ -87,12 +92,12 @@ void CB2_InitMysteryEventMenu(void) s32 i; DeactivateAllTextPrinters(); - for (i = 0; i < 2; i++) + for (i = 0; i < (int)ARRAY_COUNT(sWindowTemplates) - 1; i++) FillWindowPixelBuffer(i, PIXEL_FILL(0)); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT); - LoadUserWindowBorderGfx(0, 1u, 0xD0u); - Menu_LoadStdPalAt(0xE0); + LoadUserWindowBorderGfx(0, 1, BG_PLTT_ID(13)); + Menu_LoadStdPalAt(BG_PLTT_ID(14)); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON); SetGpuReg(REG_OFFSET_BLDCNT, 0); CreateTask(Task_DestroySelf, 0); @@ -102,7 +107,7 @@ void CB2_InitMysteryEventMenu(void) BuildOamBuffer(); RunTextPrinters(); UpdatePaletteFade(); - FillPalette(RGB_BLACK, 0, 2); + SetBackdropFromColor(RGB_BLACK); SetMainCallback2(CB2_MysteryEventMenu); } } @@ -131,9 +136,9 @@ static void CB2_MysteryEventMenu(void) switch (gMain.state) { case 0: - DrawStdFrameWithCustomTileAndPalette(0, TRUE, 1, 0xD); - PutWindowTilemap(0); - CopyWindowToVram(0, COPYWIN_FULL); + DrawStdFrameWithCustomTileAndPalette(WIN_MSG, TRUE, 1, 0xD); + PutWindowTilemap(WIN_MSG); + CopyWindowToVram(WIN_MSG, COPYWIN_FULL); ShowBg(0); BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK); gMain.state++; @@ -141,12 +146,12 @@ static void CB2_MysteryEventMenu(void) case 1: if (!gPaletteFade.active) { - PrintMysteryMenuText(0, gText_LinkStandby2, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gText_LinkStandby2, 1, 2, 1); gMain.state++; } break; case 2: - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_MSG)) { gMain.state++; gLinkType = LINKTYPE_MYSTERY_EVENT; @@ -154,10 +159,10 @@ static void CB2_MysteryEventMenu(void) } break; case 3: - if ((gLinkStatus & 0x20) && (gLinkStatus & 0x1C) > 4) + if ((gLinkStatus & LINK_STAT_MASTER) && (gLinkStatus & LINK_STAT_PLAYER_COUNT) > 4) { PlaySE(SE_PIN); - PrintMysteryMenuText(0, gText_PressAToLoadEvent, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gText_PressAToLoadEvent, 1, 2, 1); gMain.state++; } if (JOY_NEW(B_BUTTON)) @@ -168,7 +173,7 @@ static void CB2_MysteryEventMenu(void) } break; case 4: - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_MSG)) gMain.state++; break; case 5: @@ -178,10 +183,10 @@ static void CB2_MysteryEventMenu(void) { PlaySE(SE_SELECT); CheckShouldAdvanceLinkState(); - DrawStdFrameWithCustomTileAndPalette(1, TRUE, 1, 0xD); - PrintMysteryMenuText(1, gText_LoadingEvent, 1, 2, 0); - PutWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_FULL); + DrawStdFrameWithCustomTileAndPalette(WIN_LOADING, TRUE, 1, 0xD); + PrintMysteryMenuText(WIN_LOADING, gText_LoadingEvent, 1, 2, 0); + PutWindowTilemap(WIN_LOADING); + CopyWindowToVram(WIN_LOADING, COPYWIN_FULL); gMain.state++; } else if (JOY_NEW(B_BUTTON)) @@ -194,7 +199,7 @@ static void CB2_MysteryEventMenu(void) else { GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR); - PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gStringVar4, 1, 2, 1); gMain.state = 13; } break; @@ -207,19 +212,19 @@ static void CB2_MysteryEventMenu(void) { SetCloseLinkCallback(); GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR); - PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gStringVar4, 1, 2, 1); gMain.state = 13; } else if (CheckLanguageMatch()) { - PrintMysteryMenuText(0, gText_DontRemoveCableTurnOff, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gText_DontRemoveCableTurnOff, 1, 2, 1); gMain.state++; } else { CloseLink(); GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR); - PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gStringVar4, 1, 2, 1); gMain.state = 13; } } @@ -232,7 +237,7 @@ static void CB2_MysteryEventMenu(void) } break; case 7: - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_MSG)) gMain.state++; break; case 8: @@ -260,11 +265,11 @@ static void CB2_MysteryEventMenu(void) } break; case 12: - PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gStringVar4, 1, 2, 1); gMain.state++; break; case 13: - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_MSG)) { gMain.state++; sUnused = 0; @@ -287,11 +292,11 @@ static void CB2_MysteryEventMenu(void) break; } - if (gLinkStatus & 0x40 && !IsLinkMaster()) + if (gLinkStatus & LINK_STAT_CONN_ESTABLISHED && !IsLinkMaster()) { CloseLink(); GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR); - PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gStringVar4, 1, 2, 1); gMain.state = 13; } diff --git a/src/mystery_gift.c b/src/mystery_gift.c index c4e63bfbb81e..ee601059f8aa 100755 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -27,7 +27,7 @@ static void IncrementCardStatForNewTrainer(u32, u32, u32 *, int); void ClearMysteryGift(void) { CpuFill32(0, &gSaveBlock1Ptr->mysteryGift, sizeof(gSaveBlock1Ptr->mysteryGift)); - ClearSavedWonderNewsMetadata(); // Clear is redundant, InitSavedWonderNews would be sufficient + ClearSavedWonderNewsMetadata(); // Clear is redundant, WonderNews_Reset would be sufficient InitQuestionnaireWords(); } @@ -109,7 +109,7 @@ static void ClearSavedWonderNews(void) static void ClearSavedWonderNewsMetadata(void) { CpuFill32(0, GetSavedWonderNewsMetadata(), sizeof(gSaveBlock1Ptr->mysteryGift.newsMetadata)); - InitSavedWonderNews(); + WonderNews_Reset(); } bool32 IsWonderNewsSameAsSaved(const u8 *news) diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 78afc709ceaf..c73f43a56887 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -32,8 +32,14 @@ #include "wonder_news.h" #include "constants/cable_club.h" +enum { + WIN_HEADER, + WIN_MSG, + WIN_UNK, // Cleared, but nothing is ever apparently rendered on it +}; + #define LIST_MENU_TILE_NUM 10 -#define LIST_MENU_PAL_NUM 224 +#define LIST_MENU_PAL_NUM BG_PLTT_ID(14) static void LoadMysteryGiftTextboxBorder(u8 bgId); static void CreateMysteryGiftTask(void); @@ -98,7 +104,7 @@ static const struct BgTemplate sBGTemplates[] = { }; static const struct WindowTemplate sMainWindows[] = { - { + [WIN_HEADER] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 0, @@ -106,7 +112,8 @@ static const struct WindowTemplate sMainWindows[] = { .height = 2, .paletteNum = 12, .baseBlock = 0x0013 - }, { + }, + [WIN_MSG] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 15, @@ -114,7 +121,8 @@ static const struct WindowTemplate sMainWindows[] = { .height = 4, .paletteNum = 12, .baseBlock = 0x004f - }, { + }, + [WIN_UNK] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 15, @@ -224,7 +232,7 @@ static const struct ListMenuTemplate sListMenuTemplate_ThreeOptions = { .itemPrintFunc = NULL, .totalItems = 3, .maxShowed = 3, - .windowId = 0, + .windowId = 0, // Overwritten by DoMysteryGiftListMenu .header_X = 0, .item_X = 8, .cursor_X = 0, @@ -234,9 +242,9 @@ static const struct ListMenuTemplate sListMenuTemplate_ThreeOptions = { .cursorShadowPal = 3, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, .fontId = FONT_NORMAL, - .cursorKind = 0 + .cursorKind = CURSOR_BLACK_ARROW }; static const struct ListMenuItem sListMenuItems_ReceiveSendToss[] = { @@ -269,7 +277,7 @@ static const struct ListMenuTemplate sListMenu_ReceiveSendToss = { .itemPrintFunc = NULL, .totalItems = 4, .maxShowed = 4, - .windowId = 0, + .windowId = 0, // Overwritten by DoMysteryGiftListMenu .header_X = 0, .item_X = 8, .cursor_X = 0, @@ -279,9 +287,9 @@ static const struct ListMenuTemplate sListMenu_ReceiveSendToss = { .cursorShadowPal = 3, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, .fontId = FONT_NORMAL, - .cursorKind = 0 + .cursorKind = CURSOR_BLACK_ARROW }; static const struct ListMenuTemplate sListMenu_ReceiveToss = { @@ -290,7 +298,7 @@ static const struct ListMenuTemplate sListMenu_ReceiveToss = { .itemPrintFunc = NULL, .totalItems = 3, .maxShowed = 3, - .windowId = 0, + .windowId = 0, // Overwritten by DoMysteryGiftListMenu .header_X = 0, .item_X = 8, .cursor_X = 0, @@ -300,9 +308,9 @@ static const struct ListMenuTemplate sListMenu_ReceiveToss = { .cursorShadowPal = 3, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, .fontId = FONT_NORMAL, - .cursorKind = 0 + .cursorKind = CURSOR_BLACK_ARROW }; static const struct ListMenuTemplate sListMenu_ReceiveSend = { @@ -311,7 +319,7 @@ static const struct ListMenuTemplate sListMenu_ReceiveSend = { .itemPrintFunc = NULL, .totalItems = 3, .maxShowed = 3, - .windowId = 0, + .windowId = 0, // Overwritten by DoMysteryGiftListMenu .header_X = 0, .item_X = 8, .cursor_X = 0, @@ -321,9 +329,9 @@ static const struct ListMenuTemplate sListMenu_ReceiveSend = { .cursorShadowPal = 3, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, .fontId = FONT_NORMAL, - .cursorKind = 0 + .cursorKind = CURSOR_BLACK_ARROW }; static const struct ListMenuTemplate sListMenu_Receive = { @@ -332,7 +340,7 @@ static const struct ListMenuTemplate sListMenu_Receive = { .itemPrintFunc = NULL, .totalItems = 2, .maxShowed = 2, - .windowId = 0, + .windowId = 0, // Overwritten by DoMysteryGiftListMenu .header_X = 0, .item_X = 8, .cursor_X = 0, @@ -342,9 +350,9 @@ static const struct ListMenuTemplate sListMenu_Receive = { .cursorShadowPal = 3, .lettersSpacing = 0, .itemVerticalPadding = 0, - .scrollMultiple = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, .fontId = FONT_NORMAL, - .cursorKind = 0 + .cursorKind = CURSOR_BLACK_ARROW }; static const u8 *const sUnusedMenuTexts[] = { @@ -354,9 +362,9 @@ static const u8 *const sUnusedMenuTexts[] = { 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 }; +ALIGNED(2) static const u8 sTextColors_Header[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; +ALIGNED(2) static const u8 sTextColors_Header_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) { @@ -411,16 +419,16 @@ static bool32 HandleMysteryGiftOrEReaderSetup(s32 isEReader) 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); + LoadPalette(sTextboxBorder_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); + LoadPalette(GetTextWindowPalette(2), BG_PLTT_ID(13), PLTT_SIZE_4BPP); + Menu_LoadStdPalAt(BG_PLTT_ID(12)); + LoadUserWindowBorderGfx(0, 0xA, BG_PLTT_ID(14)); + LoadUserWindowBorderGfx_(0, 0x1, BG_PLTT_ID(15)); + FillBgTilemapBufferRect(0, 0x000, 0, 0, 32, 32, 17); + FillBgTilemapBufferRect(1, 0x000, 0, 0, 32, 32, 17); + FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 17); MG_DrawCheckerboardPattern(3); - PrintMysteryGiftOrEReaderTopMenu(isEReader, FALSE); + PrintMysteryGiftOrEReaderHeader(isEReader, FALSE); gMain.state++; break; case 2: @@ -474,26 +482,27 @@ void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void) SetMainCallback2(CB2_InitTitleScreen); } -void PrintMysteryGiftOrEReaderTopMenu(bool8 isEReader, bool32 useCancel) +// Print the text window at the top of the screen with the title and control instructions +void PrintMysteryGiftOrEReaderHeader(bool8 isEReader, bool32 useCancel) { - const u8 *header; + const u8 *title; const u8 *options; - FillWindowPixelBuffer(0, 0); + FillWindowPixelBuffer(WIN_HEADER, 0); if (!isEReader) { - header = gText_MysteryGift; + title = gText_MysteryGift; options = !useCancel ? gText_PickOKExit : gText_PickOKCancel; } else { - header = gJPText_MysteryGift; + title = 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); + AddTextPrinterParameterized4(WIN_HEADER, FONT_NORMAL, 4, 1, 0, 0, sTextColors_Header, TEXT_SKIP_DRAW, title); + AddTextPrinterParameterized4(WIN_HEADER, FONT_SMALL, GetStringRightAlignXOffset(FONT_SMALL, options, 0xDE), 1, 0, 0, sTextColors_Header, TEXT_SKIP_DRAW, options); + CopyWindowToVram(WIN_HEADER, COPYWIN_GFX); + PutWindowTilemap(WIN_HEADER); } void MG_DrawTextBorder(u8 windowId) @@ -505,16 +514,16 @@ void MG_DrawCheckerboardPattern(u32 bg) { s32 i = 0, j; - FillBgTilemapBufferRect(bg, 0x003, 0, 0, 32, 2, 0x11); + FillBgTilemapBufferRect(bg, 0x003, 0, 0, 32, 2, 17); 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); + FillBgTilemapBufferRect(bg, 1, j, i + 2, 1, 1, 17); else - FillBgTilemapBufferRect(bg, 2, j, i + 2, 1, 1, 0x11); + FillBgTilemapBufferRect(bg, 2, j, i + 2, 1, 1, 17); } } } @@ -524,30 +533,30 @@ static void ClearScreenInBg0(bool32 ignoreTopTwoRows) switch (ignoreTopTwoRows) { case 0: - FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x11); + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 17); break; case 1: - FillBgTilemapBufferRect(0, 0, 0, 2, 32, 30, 0x11); + FillBgTilemapBufferRect(0, 0, 0, 2, 32, 30, 17); break; } CopyBgTilemapBufferToVram(0); } -void AddTextPrinterToWindow1(const u8 *str) +void MG_AddMessageTextPrinter(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); + FillWindowPixelBuffer(WIN_MSG, 0x11); + AddTextPrinterParameterized4(WIN_MSG, FONT_NORMAL, 0, 1, 0, 0, sMG_Ereader_TextColor_2, 0, gStringVar4); + DrawTextBorderOuter(WIN_MSG, 0x001, 0xF); + PutWindowTilemap(WIN_MSG); + CopyWindowToVram(WIN_MSG, COPYWIN_FULL); } -static void ClearTextWindow(void) +static void ClearMessage(void) { - rbox_fill_rectangle(1); - ClearWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_MAP); + rbox_fill_rectangle(WIN_MSG); + ClearWindowTilemap(WIN_MSG); + CopyWindowToVram(WIN_MSG, COPYWIN_MAP); } #define DOWN_ARROW_X 208 @@ -558,18 +567,18 @@ bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str) switch (*textState) { case 0: - AddTextPrinterToWindow1(str); + MG_AddMessageTextPrinter(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);})) + DrawDownArrow(WIN_MSG, 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]); + DrawDownArrow(WIN_MSG, DOWN_ARROW_X, DOWN_ARROW_Y, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); *textState = 0; - ClearTextWindow(); + ClearMessage(); return TRUE; case 0xFF: *textState = 2; @@ -580,12 +589,12 @@ bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str) static void HideDownArrow(void) { - DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); + DrawDownArrow(WIN_MSG, 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]); + DrawDownArrow(WIN_MSG, DOWN_ARROW_X, DOWN_ARROW_Y, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); } // Unused @@ -609,12 +618,12 @@ static bool32 HideDownArrowAndWaitButton(u8 *textState) static bool32 PrintStringAndWait2Seconds(u8 *counter, const u8 *str) { if (*counter == 0) - AddTextPrinterToWindow1(str); + MG_AddMessageTextPrinter(str); if (++(*counter) > 120) { *counter = 0; - ClearTextWindow(); + ClearMessage(); return TRUE; } else @@ -648,8 +657,8 @@ static u32 MysteryGift_HandleThreeOptionMenu(u8 *unused0, u16 * unused1, u8 whic response = DoMysteryGiftListMenu(&windowTemplate, &listMenuTemplate, 1, LIST_MENU_TILE_NUM, LIST_MENU_PAL_NUM); if (response != LIST_NOTHING_CHOSEN) { - ClearWindowTilemap(2); - CopyWindowToVram(2, COPYWIN_MAP); + ClearWindowTilemap(WIN_UNK); + CopyWindowToVram(WIN_UNK, COPYWIN_MAP); } return response; } @@ -865,7 +874,7 @@ static bool32 SaveOnMysteryGiftMenu(u8 *state) switch (*state) { case 0: - AddTextPrinterToWindow1(gText_DataWillBeSaved); + MG_AddMessageTextPrinter(gText_DataWillBeSaved); (*state)++; break; case 1: @@ -873,7 +882,7 @@ static bool32 SaveOnMysteryGiftMenu(u8 *state) (*state)++; break; case 2: - AddTextPrinterToWindow1(gText_SaveCompletedPressA); + MG_AddMessageTextPrinter(gText_SaveCompletedPressA); (*state)++; break; case 3: @@ -882,7 +891,7 @@ static bool32 SaveOnMysteryGiftMenu(u8 *state) break; case 4: *state = 0; - ClearTextWindow(); + ClearMessage(); return TRUE; } @@ -967,7 +976,7 @@ static bool32 PrintSuccessMessage(u8 *state, const u8 *msg, u16 * timer) { case 0: if (msg != NULL) - AddTextPrinterToWindow1(msg); + MG_AddMessageTextPrinter(msg); PlayFanfare(MUS_OBTAIN_ITEM); *timer = 0; (*state)++; @@ -980,7 +989,7 @@ static bool32 PrintSuccessMessage(u8 *state, const u8 *msg, u16 * timer) if (IsFanfareTaskInactive()) { *state = 0; - ClearTextWindow(); + ClearMessage(); return TRUE; } break; @@ -1161,7 +1170,7 @@ static void Task_MysteryGift(u8 taskId) if (PrintMysteryGiftMenuMessage(&data->textState, gText_DontHaveCardNewOneInput)) { data->state = MG_STATE_SOURCE_PROMPT; - PrintMysteryGiftOrEReaderTopMenu(FALSE, TRUE); + PrintMysteryGiftOrEReaderHeader(FALSE, TRUE); } } else @@ -1169,16 +1178,16 @@ static void Task_MysteryGift(u8 taskId) if (PrintMysteryGiftMenuMessage(&data->textState, gText_DontHaveNewsNewOneInput)) { data->state = MG_STATE_SOURCE_PROMPT; - PrintMysteryGiftOrEReaderTopMenu(FALSE, TRUE); + PrintMysteryGiftOrEReaderHeader(FALSE, TRUE); } } break; } case MG_STATE_SOURCE_PROMPT: if (!data->isWonderNews) - AddTextPrinterToWindow1(gText_WhereShouldCardBeAccessed); + MG_AddMessageTextPrinter(gText_WhereShouldCardBeAccessed); else - AddTextPrinterToWindow1(gText_WhereShouldNewsBeAccessed); + MG_AddMessageTextPrinter(gText_WhereShouldNewsBeAccessed); data->state = MG_STATE_SOURCE_PROMPT_INPUT; break; case MG_STATE_SOURCE_PROMPT_INPUT: @@ -1186,17 +1195,17 @@ static void Task_MysteryGift(u8 taskId) switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->var, TRUE)) { case 0: // "Wireless Communication" - ClearTextWindow(); + ClearMessage(); data->state = MG_STATE_CLIENT_LINK_START; data->sourceIsFriend = FALSE; break; case 1: // "Friend" - ClearTextWindow(); + ClearMessage(); data->state = MG_STATE_CLIENT_LINK_START; data->sourceIsFriend = TRUE; break; case LIST_CANCEL: - ClearTextWindow(); + ClearMessage(); if (ValidateCardOrNews(data->isWonderNews)) { data->state = MG_STATE_LOAD_GIFT; @@ -1204,7 +1213,7 @@ static void Task_MysteryGift(u8 taskId) else { data->state = MG_STATE_TO_MAIN_MENU; - PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + PrintMysteryGiftOrEReaderHeader(FALSE, FALSE); } break; } @@ -1246,7 +1255,7 @@ static void Task_MysteryGift(u8 taskId) } break; case MG_STATE_CLIENT_COMMUNICATING: - AddTextPrinterToWindow1(gText_Communicating); + MG_AddMessageTextPrinter(gText_Communicating); data->state = MG_STATE_CLIENT_LINK; break; case MG_STATE_CLIENT_LINK: @@ -1258,7 +1267,7 @@ static void Task_MysteryGift(u8 taskId) data->state = MG_STATE_CLIENT_LINK_END; break; case CLI_RET_COPY_MSG: - memcpy(data->clientMsg, MysteryGiftClient_GetMsg(), 0x40); + memcpy(data->clientMsg, MysteryGiftClient_GetMsg(), CLIENT_MAX_MSG_SIZE); MysteryGiftClient_AdvanceState(); break; case CLI_RET_PRINT_MSG: @@ -1371,15 +1380,15 @@ static void Task_MysteryGift(u8 taskId) if (data->msgId == CLI_MSG_NEWS_RECEIVED) { if (data->sourceIsFriend == TRUE) - GenerateRandomWonderNews(WONDER_NEWS_RECV_FRIEND); + WonderNews_SetReward(WONDER_NEWS_RECV_FRIEND); else - GenerateRandomWonderNews(WONDER_NEWS_RECV_WIRELESS); + WonderNews_SetReward(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); + PrintMysteryGiftOrEReaderHeader(FALSE, FALSE); } else { @@ -1500,7 +1509,7 @@ static void Task_MysteryGift(u8 taskId) if (PrintThrownAway(&data->textState, data->isWonderNews)) { data->state = MG_STATE_TO_MAIN_MENU; - PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + PrintMysteryGiftOrEReaderHeader(FALSE, FALSE); } break; case MG_STATE_GIFT_INPUT_EXIT: @@ -1546,12 +1555,12 @@ static void Task_MysteryGift(u8 taskId) if (!data->isWonderNews) { - AddTextPrinterToWindow1(gText_SendingWonderCard); + MG_AddMessageTextPrinter(gText_SendingWonderCard); MysterGiftServer_CreateForCard(); } else { - AddTextPrinterToWindow1(gText_SendingWonderNews); + MG_AddMessageTextPrinter(gText_SendingWonderNews); MysterGiftServer_CreateForNews(); } data->state = MG_STATE_SERVER_LINK; @@ -1580,13 +1589,13 @@ static void Task_MysteryGift(u8 taskId) { if (data->sourceIsFriend == TRUE && data->msgId == SVR_MSG_NEWS_SENT) { - GenerateRandomWonderNews(WONDER_NEWS_SENT); + WonderNews_SetReward(WONDER_NEWS_SENT); data->state = MG_STATE_SAVE_LOAD_GIFT; } else { data->state = MG_STATE_TO_MAIN_MENU; - PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + PrintMysteryGiftOrEReaderHeader(FALSE, FALSE); } } break; @@ -1595,7 +1604,7 @@ static void Task_MysteryGift(u8 taskId) if (PrintMysteryGiftMenuMessage(&data->textState, gText_CommunicationError)) { data->state = MG_STATE_TO_MAIN_MENU; - PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + PrintMysteryGiftOrEReaderHeader(FALSE, FALSE); } break; case MG_STATE_EXIT: diff --git a/src/mystery_gift_scripts.c b/src/mystery_gift_scripts.c index fcd7f568d086..0bad35eb0f69 100644 --- a/src/mystery_gift_scripts.c +++ b/src/mystery_gift_scripts.c @@ -172,7 +172,7 @@ static const struct MysteryGiftServerCmd sServerScript_TossPrompt[] = { {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_IF_EQ, FALSE, sServerScript_SendCard}, // Tossed old card, send new one {SVR_GOTO, .ptr = sServerScript_ClientCanceledCard} // Kept old card, cancel new one }; diff --git a/src/mystery_gift_view.c b/src/mystery_gift_view.c index 43605564e037..bc1939adf19a 100644 --- a/src/mystery_gift_view.c +++ b/src/mystery_gift_view.c @@ -240,9 +240,9 @@ s32 WonderCard_Enter(void) case 3: if (FreeTempTileDataBuffersIfPossible()) return 0; - LoadPalette(GetTextWindowPalette(1), 0x20, 0x20); + LoadPalette(GetTextWindowPalette(1), BG_PLTT_ID(2), PLTT_SIZE_4BPP); gPaletteFade.bufferTransferDisabled = TRUE; - LoadPalette(sWonderCardData->gfx->pal, 0x10, 0x20); + LoadPalette(sWonderCardData->gfx->pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); LZ77UnCompWram(sWonderCardData->gfx->map, sWonderCardData->bgTilemapBuffer); CopyRectToBgTilemapBufferRect(2, sWonderCardData->bgTilemapBuffer, 0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT, 0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT, 1, 0x008, 0); CopyBgTilemapBufferToVram(2); @@ -310,7 +310,7 @@ s32 WonderCard_Exit(bool32 useCancel) FreeMonIconPalettes(); break; case 5: - PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, useCancel); + PrintMysteryGiftOrEReaderHeader(gGiftIsFromEReader, useCancel); CopyBgTilemapBufferToVram(0); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); break; @@ -703,9 +703,9 @@ s32 WonderNews_Enter(void) case 3: if (FreeTempTileDataBuffersIfPossible()) return 0; - LoadPalette(GetTextWindowPalette(1), 0x20, 0x20); + LoadPalette(GetTextWindowPalette(1), BG_PLTT_ID(2), PLTT_SIZE_4BPP); gPaletteFade.bufferTransferDisabled = TRUE; - LoadPalette(sWonderNewsData->gfx->pal, 0x10, 0x20); + LoadPalette(sWonderNewsData->gfx->pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); LZ77UnCompWram(sWonderNewsData->gfx->map, sWonderNewsData->bgTilemapBuffer); CopyRectToBgTilemapBufferRect(1, sWonderNewsData->bgTilemapBuffer, 0, 0, DISPLAY_TILE_WIDTH, 3, 0, 0, DISPLAY_TILE_WIDTH, 3, 1, 8, 0); CopyRectToBgTilemapBufferRect(3, sWonderNewsData->bgTilemapBuffer, 0, 3, DISPLAY_TILE_WIDTH, 3 + DISPLAY_TILE_HEIGHT, 0, 3, DISPLAY_TILE_WIDTH, 3 + DISPLAY_TILE_HEIGHT, 1, 8, 0); @@ -785,7 +785,7 @@ s32 WonderNews_Exit(bool32 useCancel) } break; case 5: - PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, useCancel); + PrintMysteryGiftOrEReaderHeader(gGiftIsFromEReader, useCancel); MG_DrawCheckerboardPattern(3); CopyBgTilemapBufferToVram(0); CopyBgTilemapBufferToVram(3); diff --git a/src/naming_screen.c b/src/naming_screen.c index c2838275542a..14a75166fa9a 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -1880,9 +1880,9 @@ static void CreateHelperTasks(void) static void LoadPalettes(void) { - LoadPalette(gNamingScreenMenu_Pal, 0, sizeof(gNamingScreenMenu_Pal)); - LoadPalette(sKeyboard_Pal, 0xA0, sizeof(sKeyboard_Pal)); - LoadPalette(GetTextWindowPalette(2), 0xB0, 0x20); + LoadPalette(gNamingScreenMenu_Pal, BG_PLTT_ID(0), sizeof(gNamingScreenMenu_Pal)); + LoadPalette(sKeyboard_Pal, BG_PLTT_ID(10), sizeof(sKeyboard_Pal)); + LoadPalette(GetTextWindowPalette(2), BG_PLTT_ID(11), PLTT_SIZE_4BPP); } static void DrawBgTilemap(u8 bg, const void *src) diff --git a/src/new_game.c b/src/new_game.c index 8f8aa9b82bca..0efc12d47f29 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -182,7 +182,7 @@ void NewGameInitData(void) ResetPokemonStorageSystem(); ClearRoamerData(); ClearRoamerLocationData(); - gSaveBlock1Ptr->registeredItem = 0; + gSaveBlock1Ptr->registeredItem = ITEM_NONE; ClearBag(); NewGameInitPCItems(); ClearPokeblocks(); diff --git a/src/option_menu.c b/src/option_menu.c index 3ca9857e84b3..67169b1f9bc1 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -1,34 +1,29 @@ #include "global.h" #include "option_menu.h" +#include "bg.h" +#include "gpu_regs.h" +#include "international_string_util.h" #include "main.h" #include "menu.h" -#include "scanline_effect.h" #include "palette.h" +#include "scanline_effect.h" #include "sprite.h" +#include "strings.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 "window.h" #include "gba/m4a_internal.h" #include "constants/rgb.h" -// Task data -enum -{ - TD_MENUSELECTION, - TD_TEXTSPEED, - TD_BATTLESCENE, - TD_BATTLESTYLE, - TD_SOUND, - TD_BUTTONMODE, - TD_FRAMETYPE, -}; +#define tMenuSelection data[0] +#define tTextSpeed data[1] +#define tBattleSceneOff data[2] +#define tBattleStyle data[3] +#define tSound data[4] +#define tButtonMode data[5] +#define tWindowFrameType data[6] -// Menu items enum { MENUITEM_TEXTSPEED, @@ -41,10 +36,9 @@ enum MENUITEM_COUNT, }; -// Window Ids enum { - WIN_TEXT_OPTION, + WIN_HEADER, WIN_OPTIONS }; @@ -55,25 +49,24 @@ enum #define YPOS_BUTTONMODE (MENUITEM_BUTTONMODE * 16) #define YPOS_FRAMETYPE (MENUITEM_FRAMETYPE * 16) -// this file's functions static void Task_OptionMenuFadeIn(u8 taskId); static void Task_OptionMenuProcessInput(u8 taskId); static void Task_OptionMenuSave(u8 taskId); static void Task_OptionMenuFadeOut(u8 taskId); static void HighlightOptionMenuItem(u8 selection); -static u8 TextSpeed_ProcessInput(u8 selection); +static u8 TextSpeed_ProcessInput(u8 selection); static void TextSpeed_DrawChoices(u8 selection); -static u8 BattleScene_ProcessInput(u8 selection); +static u8 BattleScene_ProcessInput(u8 selection); static void BattleScene_DrawChoices(u8 selection); -static u8 BattleStyle_ProcessInput(u8 selection); +static u8 BattleStyle_ProcessInput(u8 selection); static void BattleStyle_DrawChoices(u8 selection); -static u8 Sound_ProcessInput(u8 selection); +static u8 Sound_ProcessInput(u8 selection); static void Sound_DrawChoices(u8 selection); -static u8 FrameType_ProcessInput(u8 selection); +static u8 FrameType_ProcessInput(u8 selection); static void FrameType_DrawChoices(u8 selection); -static u8 ButtonMode_ProcessInput(u8 selection); +static u8 ButtonMode_ProcessInput(u8 selection); static void ButtonMode_DrawChoices(u8 selection); -static void DrawTextOption(void); +static void DrawHeaderText(void); static void DrawOptionMenuTexts(void); static void DrawBgWindowFrames(void); @@ -96,7 +89,7 @@ static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = static const struct WindowTemplate sOptionMenuWinTemplates[] = { - { + [WIN_HEADER] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 1, @@ -105,7 +98,7 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = .paletteNum = 1, .baseBlock = 2 }, - { + [WIN_OPTIONS] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 5, @@ -119,29 +112,28 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = static const struct BgTemplate sOptionMenuBgTemplates[] = { - { - .bg = 1, - .charBaseIndex = 1, - .mapBaseIndex = 30, - .screenSize = 0, - .paletteMode = 0, - .priority = 0, - .baseTile = 0 - }, - { - .bg = 0, - .charBaseIndex = 1, - .mapBaseIndex = 31, - .screenSize = 0, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 - } + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 0, + .charBaseIndex = 1, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + } }; static const u16 sOptionMenuBg_Pal[] = {RGB(17, 18, 31)}; -// code static void MainCB2(void) { RunTasks(); @@ -207,24 +199,24 @@ void CB2_InitOptionMenu(void) gMain.state++; break; case 4: - LoadPalette(sOptionMenuBg_Pal, 0, sizeof(sOptionMenuBg_Pal)); - LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, 0x70, 0x20); + LoadPalette(sOptionMenuBg_Pal, BG_PLTT_ID(0), sizeof(sOptionMenuBg_Pal)); + LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, BG_PLTT_ID(7), PLTT_SIZE_4BPP); gMain.state++; break; case 5: - LoadPalette(sOptionMenuText_Pal, 16, sizeof(sOptionMenuText_Pal)); + LoadPalette(sOptionMenuText_Pal, BG_PLTT_ID(1), sizeof(sOptionMenuText_Pal)); gMain.state++; break; case 6: - PutWindowTilemap(0); - DrawTextOption(); + PutWindowTilemap(WIN_HEADER); + DrawHeaderText(); gMain.state++; break; case 7: gMain.state++; break; case 8: - PutWindowTilemap(1); + PutWindowTilemap(WIN_OPTIONS); DrawOptionMenuTexts(); gMain.state++; case 9: @@ -235,28 +227,28 @@ void CB2_InitOptionMenu(void) { u8 taskId = CreateTask(Task_OptionMenuFadeIn, 0); - gTasks[taskId].data[TD_MENUSELECTION] = 0; - gTasks[taskId].data[TD_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed; - gTasks[taskId].data[TD_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff; - gTasks[taskId].data[TD_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle; - gTasks[taskId].data[TD_SOUND] = gSaveBlock2Ptr->optionsSound; - gTasks[taskId].data[TD_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; - gTasks[taskId].data[TD_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; - - TextSpeed_DrawChoices(gTasks[taskId].data[TD_TEXTSPEED]); - BattleScene_DrawChoices(gTasks[taskId].data[TD_BATTLESCENE]); - BattleStyle_DrawChoices(gTasks[taskId].data[TD_BATTLESTYLE]); - Sound_DrawChoices(gTasks[taskId].data[TD_SOUND]); - ButtonMode_DrawChoices(gTasks[taskId].data[TD_BUTTONMODE]); - FrameType_DrawChoices(gTasks[taskId].data[TD_FRAMETYPE]); - HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); + gTasks[taskId].tMenuSelection = 0; + gTasks[taskId].tTextSpeed = gSaveBlock2Ptr->optionsTextSpeed; + gTasks[taskId].tBattleSceneOff = gSaveBlock2Ptr->optionsBattleSceneOff; + gTasks[taskId].tBattleStyle = gSaveBlock2Ptr->optionsBattleStyle; + gTasks[taskId].tSound = gSaveBlock2Ptr->optionsSound; + gTasks[taskId].tButtonMode = gSaveBlock2Ptr->optionsButtonMode; + gTasks[taskId].tWindowFrameType = gSaveBlock2Ptr->optionsWindowFrameType; + + TextSpeed_DrawChoices(gTasks[taskId].tTextSpeed); + BattleScene_DrawChoices(gTasks[taskId].tBattleSceneOff); + BattleStyle_DrawChoices(gTasks[taskId].tBattleStyle); + Sound_DrawChoices(gTasks[taskId].tSound); + ButtonMode_DrawChoices(gTasks[taskId].tButtonMode); + FrameType_DrawChoices(gTasks[taskId].tWindowFrameType); + HighlightOptionMenuItem(gTasks[taskId].tMenuSelection); CopyWindowToVram(WIN_OPTIONS, COPYWIN_FULL); gMain.state++; break; } case 11: - BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); SetVBlankCallback(VBlankCB); SetMainCallback2(MainCB2); return; @@ -273,7 +265,7 @@ static void Task_OptionMenuProcessInput(u8 taskId) { if (JOY_NEW(A_BUTTON)) { - if (gTasks[taskId].data[TD_MENUSELECTION] == MENUITEM_CANCEL) + if (gTasks[taskId].tMenuSelection == MENUITEM_CANCEL) gTasks[taskId].func = Task_OptionMenuSave; } else if (JOY_NEW(B_BUTTON)) @@ -282,67 +274,67 @@ static void Task_OptionMenuProcessInput(u8 taskId) } else if (JOY_NEW(DPAD_UP)) { - if (gTasks[taskId].data[TD_MENUSELECTION] > 0) - gTasks[taskId].data[TD_MENUSELECTION]--; + if (gTasks[taskId].tMenuSelection > 0) + gTasks[taskId].tMenuSelection--; else - gTasks[taskId].data[TD_MENUSELECTION] = MENUITEM_CANCEL; - HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); + gTasks[taskId].tMenuSelection = MENUITEM_CANCEL; + HighlightOptionMenuItem(gTasks[taskId].tMenuSelection); } else if (JOY_NEW(DPAD_DOWN)) { - if (gTasks[taskId].data[TD_MENUSELECTION] < MENUITEM_CANCEL) - gTasks[taskId].data[TD_MENUSELECTION]++; + if (gTasks[taskId].tMenuSelection < MENUITEM_CANCEL) + gTasks[taskId].tMenuSelection++; else - gTasks[taskId].data[TD_MENUSELECTION] = 0; - HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); + gTasks[taskId].tMenuSelection = 0; + HighlightOptionMenuItem(gTasks[taskId].tMenuSelection); } else { u8 previousOption; - switch (gTasks[taskId].data[TD_MENUSELECTION]) + switch (gTasks[taskId].tMenuSelection) { case MENUITEM_TEXTSPEED: - previousOption = gTasks[taskId].data[TD_TEXTSPEED]; - gTasks[taskId].data[TD_TEXTSPEED] = TextSpeed_ProcessInput(gTasks[taskId].data[TD_TEXTSPEED]); + previousOption = gTasks[taskId].tTextSpeed; + gTasks[taskId].tTextSpeed = TextSpeed_ProcessInput(gTasks[taskId].tTextSpeed); - if (previousOption != gTasks[taskId].data[TD_TEXTSPEED]) - TextSpeed_DrawChoices(gTasks[taskId].data[TD_TEXTSPEED]); + if (previousOption != gTasks[taskId].tTextSpeed) + TextSpeed_DrawChoices(gTasks[taskId].tTextSpeed); break; case MENUITEM_BATTLESCENE: - previousOption = gTasks[taskId].data[TD_BATTLESCENE]; - gTasks[taskId].data[TD_BATTLESCENE] = BattleScene_ProcessInput(gTasks[taskId].data[TD_BATTLESCENE]); + previousOption = gTasks[taskId].tBattleSceneOff; + gTasks[taskId].tBattleSceneOff = BattleScene_ProcessInput(gTasks[taskId].tBattleSceneOff); - if (previousOption != gTasks[taskId].data[TD_BATTLESCENE]) - BattleScene_DrawChoices(gTasks[taskId].data[TD_BATTLESCENE]); + if (previousOption != gTasks[taskId].tBattleSceneOff) + BattleScene_DrawChoices(gTasks[taskId].tBattleSceneOff); break; case MENUITEM_BATTLESTYLE: - previousOption = gTasks[taskId].data[TD_BATTLESTYLE]; - gTasks[taskId].data[TD_BATTLESTYLE] = BattleStyle_ProcessInput(gTasks[taskId].data[TD_BATTLESTYLE]); + previousOption = gTasks[taskId].tBattleStyle; + gTasks[taskId].tBattleStyle = BattleStyle_ProcessInput(gTasks[taskId].tBattleStyle); - if (previousOption != gTasks[taskId].data[TD_BATTLESTYLE]) - BattleStyle_DrawChoices(gTasks[taskId].data[TD_BATTLESTYLE]); + if (previousOption != gTasks[taskId].tBattleStyle) + BattleStyle_DrawChoices(gTasks[taskId].tBattleStyle); break; case MENUITEM_SOUND: - previousOption = gTasks[taskId].data[TD_SOUND]; - gTasks[taskId].data[TD_SOUND] = Sound_ProcessInput(gTasks[taskId].data[TD_SOUND]); + previousOption = gTasks[taskId].tSound; + gTasks[taskId].tSound = Sound_ProcessInput(gTasks[taskId].tSound); - if (previousOption != gTasks[taskId].data[TD_SOUND]) - Sound_DrawChoices(gTasks[taskId].data[TD_SOUND]); + if (previousOption != gTasks[taskId].tSound) + Sound_DrawChoices(gTasks[taskId].tSound); break; case MENUITEM_BUTTONMODE: - previousOption = gTasks[taskId].data[TD_BUTTONMODE]; - gTasks[taskId].data[TD_BUTTONMODE] = ButtonMode_ProcessInput(gTasks[taskId].data[TD_BUTTONMODE]); + previousOption = gTasks[taskId].tButtonMode; + gTasks[taskId].tButtonMode = ButtonMode_ProcessInput(gTasks[taskId].tButtonMode); - if (previousOption != gTasks[taskId].data[TD_BUTTONMODE]) - ButtonMode_DrawChoices(gTasks[taskId].data[TD_BUTTONMODE]); + if (previousOption != gTasks[taskId].tButtonMode) + ButtonMode_DrawChoices(gTasks[taskId].tButtonMode); break; case MENUITEM_FRAMETYPE: - previousOption = gTasks[taskId].data[TD_FRAMETYPE]; - gTasks[taskId].data[TD_FRAMETYPE] = FrameType_ProcessInput(gTasks[taskId].data[TD_FRAMETYPE]); + previousOption = gTasks[taskId].tWindowFrameType; + gTasks[taskId].tWindowFrameType = FrameType_ProcessInput(gTasks[taskId].tWindowFrameType); - if (previousOption != gTasks[taskId].data[TD_FRAMETYPE]) - FrameType_DrawChoices(gTasks[taskId].data[TD_FRAMETYPE]); + if (previousOption != gTasks[taskId].tWindowFrameType) + FrameType_DrawChoices(gTasks[taskId].tWindowFrameType); break; default: return; @@ -358,14 +350,14 @@ static void Task_OptionMenuProcessInput(u8 taskId) static void Task_OptionMenuSave(u8 taskId) { - gSaveBlock2Ptr->optionsTextSpeed = gTasks[taskId].data[TD_TEXTSPEED]; - gSaveBlock2Ptr->optionsBattleSceneOff = gTasks[taskId].data[TD_BATTLESCENE]; - gSaveBlock2Ptr->optionsBattleStyle = gTasks[taskId].data[TD_BATTLESTYLE]; - gSaveBlock2Ptr->optionsSound = gTasks[taskId].data[TD_SOUND]; - gSaveBlock2Ptr->optionsButtonMode = gTasks[taskId].data[TD_BUTTONMODE]; - gSaveBlock2Ptr->optionsWindowFrameType = gTasks[taskId].data[TD_FRAMETYPE]; - - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + gSaveBlock2Ptr->optionsTextSpeed = gTasks[taskId].tTextSpeed; + gSaveBlock2Ptr->optionsBattleSceneOff = gTasks[taskId].tBattleSceneOff; + gSaveBlock2Ptr->optionsBattleStyle = gTasks[taskId].tBattleStyle; + gSaveBlock2Ptr->optionsSound = gTasks[taskId].tSound; + gSaveBlock2Ptr->optionsButtonMode = gTasks[taskId].tButtonMode; + gSaveBlock2Ptr->optionsWindowFrameType = gTasks[taskId].tWindowFrameType; + + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); gTasks[taskId].func = Task_OptionMenuFadeOut; } @@ -390,13 +382,13 @@ static void DrawOptionMenuChoice(const u8 *text, u8 x, u8 y, u8 style) u8 dst[16]; u16 i; - for (i = 0; *text != EOS && i <= 14; i++) + for (i = 0; *text != EOS && i < ARRAY_COUNT(dst) - 1; i++) dst[i] = *(text++); if (style != 0) { - dst[2] = 4; - dst[5] = 5; + dst[2] = TEXT_COLOR_RED; + dst[5] = TEXT_COLOR_LIGHT_RED; } dst[i] = EOS; @@ -529,7 +521,7 @@ static u8 FrameType_ProcessInput(u8 selection) selection = 0; LoadBgTiles(1, GetWindowFrameTilesPal(selection)->tiles, 0x120, 0x1A2); - LoadPalette(GetWindowFrameTilesPal(selection)->pal, 0x70, 0x20); + LoadPalette(GetWindowFrameTilesPal(selection)->pal, BG_PLTT_ID(7), PLTT_SIZE_4BPP); sArrowPressed = TRUE; } if (JOY_NEW(DPAD_LEFT)) @@ -540,7 +532,7 @@ static u8 FrameType_ProcessInput(u8 selection) selection = WINDOW_FRAMES_COUNT - 1; LoadBgTiles(1, GetWindowFrameTilesPal(selection)->tiles, 0x120, 0x1A2); - LoadPalette(GetWindowFrameTilesPal(selection)->pal, 0x70, 0x20); + LoadPalette(GetWindowFrameTilesPal(selection)->pal, BG_PLTT_ID(7), PLTT_SIZE_4BPP); sArrowPressed = TRUE; } return selection; @@ -567,7 +559,7 @@ static void FrameType_DrawChoices(u8 selection) { text[i] = n % 10 + CHAR_0; i++; - text[i] = 0x77; + text[i] = CHAR_SPACER; i++; } @@ -623,11 +615,11 @@ static void ButtonMode_DrawChoices(u8 selection) DrawOptionMenuChoice(gText_ButtonTypeLEqualsA, GetStringRightAlignXOffset(FONT_NORMAL, gText_ButtonTypeLEqualsA, 198), YPOS_BUTTONMODE, styles[2]); } -static void DrawTextOption(void) +static void DrawHeaderText(void) { - FillWindowPixelBuffer(WIN_TEXT_OPTION, PIXEL_FILL(1)); - AddTextPrinterParameterized(WIN_TEXT_OPTION, FONT_NORMAL, gText_Option, 8, 1, TEXT_SKIP_DRAW, NULL); - CopyWindowToVram(WIN_TEXT_OPTION, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_HEADER, PIXEL_FILL(1)); + AddTextPrinterParameterized(WIN_HEADER, FONT_NORMAL, gText_Option, 8, 1, TEXT_SKIP_DRAW, NULL); + CopyWindowToVram(WIN_HEADER, COPYWIN_FULL); } static void DrawOptionMenuTexts(void) diff --git a/src/party_menu.c b/src/party_menu.c index 635cd3fe03b8..8debf9f3c75c 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -161,14 +161,18 @@ enum { #define MENU_DIR_RIGHT 2 #define MENU_DIR_LEFT -2 -enum -{ +enum { CAN_LEARN_MOVE, CANNOT_LEARN_MOVE, ALREADY_KNOWS_MOVE, CANNOT_LEARN_MOVE_IS_EGG }; +enum { + // Window ids 0-5 are implicitly assigned to each party pokemon in InitPartyMenuBoxes + WIN_MSG = PARTY_SIZE, +}; + struct PartyMenuBoxInfoRects { void (*blitFunc)(u8, u8, u8, u8, u8, bool8); @@ -321,7 +325,7 @@ 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 PrintMessage(const u8 *); static void Task_PrintAndWaitForText(u8); static bool16 IsMonAllowedInPokemonJump(struct Pokemon *); static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *); @@ -741,8 +745,8 @@ static bool8 AllocPartyMenuBgGfx(void) } break; case 2: - LoadCompressedPalette(gPartyMenuBg_Pal, 0, 0x160); - CpuCopy16(gPlttBufferUnfaded, sPartyMenuInternal->palBuffer, 0x160); + LoadCompressedPalette(gPartyMenuBg_Pal, BG_PLTT_ID(0), 11 * PLTT_SIZE_4BPP); + CpuCopy16(gPlttBufferUnfaded, sPartyMenuInternal->palBuffer, 11 * PLTT_SIZE_4BPP); sPartyMenuInternal->data[0]++; break; case 3: @@ -1702,7 +1706,7 @@ u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen) { u8 taskId; - PartyMenuPrintText(str); + PrintMessage(str); taskId = CreateTask(Task_PrintAndWaitForText, 1); gTasks[taskId].tKeepOpen = keepOpen; return taskId; @@ -1710,12 +1714,12 @@ u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen) static void Task_PrintAndWaitForText(u8 taskId) { - if (RunTextPrintersRetIsActive(6) != TRUE) + if (RunTextPrintersRetIsActive(WIN_MSG) != TRUE) { if (gTasks[taskId].tKeepOpen == FALSE) { - ClearStdWindowAndFrameToTransparent(6, FALSE); - ClearWindowTilemap(6); + ClearStdWindowAndFrameToTransparent(WIN_MSG, FALSE); + ClearWindowTilemap(WIN_MSG); } DestroyTask(taskId); } @@ -1741,8 +1745,8 @@ static void Task_ReturnToChooseMonAfterText(u8 taskId) { if (IsPartyMenuTextPrinterActive() != TRUE) { - ClearStdWindowAndFrameToTransparent(6, FALSE); - ClearWindowTilemap(6); + ClearStdWindowAndFrameToTransparent(WIN_MSG, FALSE); + ClearWindowTilemap(WIN_MSG); if (MenuHelpers_IsLinkActive() == TRUE) { gTasks[taskId].func = Task_WaitForLinkAndReturnToChooseMon; @@ -2061,9 +2065,9 @@ static void InitPartyMenuWindows(u8 layout) DeactivateAllTextPrinters(); for (i = 0; i < PARTY_SIZE; i++) FillWindowPixelBuffer(i, PIXEL_FILL(0)); - LoadUserWindowBorderGfx(0, 0x4F, 0xD0); - LoadPalette(GetOverworldTextboxPalettePtr(), 0xE0, 0x20); - LoadPalette(gStandardMenuPalette, 0xF0, 0x20); + LoadUserWindowBorderGfx(0, 0x4F, BG_PLTT_ID(13)); + LoadPalette(GetOverworldTextboxPalettePtr(), BG_PLTT_ID(14), PLTT_SIZE_4BPP); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); } static void CreateCancelConfirmWindows(bool8 chooseHalf) @@ -2165,9 +2169,9 @@ static void DrawEmptySlot(u8 windowId) #define LOAD_PARTY_BOX_PAL(paletteIds, paletteOffsets) \ { \ - LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[0]), paletteOffsets[0] + palNum, 2); \ - LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[1]), paletteOffsets[1] + palNum, 2); \ - LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[2]), paletteOffsets[2] + palNum, 2); \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[0]), paletteOffsets[0] + palNum, PLTT_SIZEOF(1)); \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[1]), paletteOffsets[1] + palNum, PLTT_SIZEOF(1)); \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[2]), paletteOffsets[2] + palNum, PLTT_SIZEOF(1)); \ } static void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags) @@ -2309,13 +2313,13 @@ static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, stru switch (gender) { case MON_MALE: - LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[0]), sGenderPalOffsets[0] + palNum, 2); - LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[1]), sGenderPalOffsets[1] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[0]), sGenderPalOffsets[0] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[1]), sGenderPalOffsets[1] + palNum, PLTT_SIZEOF(1)); DisplayPartyPokemonBarDetail(menuBox->windowId, gText_MaleSymbol, 2, &menuBox->infoRects->dimensions[8]); break; case MON_FEMALE: - LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[0]), sGenderPalOffsets[0] + palNum, 2); - LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[1]), sGenderPalOffsets[1] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[0]), sGenderPalOffsets[0] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[1]), sGenderPalOffsets[1] + palNum, PLTT_SIZEOF(1)); DisplayPartyPokemonBarDetail(menuBox->windowId, gText_FemaleSymbol, 2, &menuBox->infoRects->dimensions[8]); break; } @@ -2395,16 +2399,16 @@ static void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct PartyMenuBox *men { case HP_BAR_GREEN: case HP_BAR_FULL: - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[0]), sHPBarPalOffsets[0] + palNum, 2); - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[1]), sHPBarPalOffsets[1] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[0]), sHPBarPalOffsets[0] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[1]), sHPBarPalOffsets[1] + palNum, PLTT_SIZEOF(1)); break; case HP_BAR_YELLOW: - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[0]), sHPBarPalOffsets[0] + palNum, 2); - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[1]), sHPBarPalOffsets[1] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[0]), sHPBarPalOffsets[0] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[1]), sHPBarPalOffsets[1] + palNum, PLTT_SIZEOF(1)); break; default: - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[0]), sHPBarPalOffsets[0] + palNum, 2); - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[1]), sHPBarPalOffsets[1] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[0]), sHPBarPalOffsets[0] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[1]), sHPBarPalOffsets[1] + palNum, PLTT_SIZEOF(1)); break; } @@ -2482,7 +2486,7 @@ void DisplayPartyMenuStdMessage(u32 stringId) else if (!ShouldUseChooseMonText()) stringId = PARTY_MSG_CHOOSE_MON_OR_CANCEL; } - DrawStdFrameWithCustomTileAndPalette(*windowPtr, FALSE, 0x4F, 0xD); + DrawStdFrameWithCustomTileAndPalette(*windowPtr, FALSE, 0x4F, 13); StringExpandPlaceholders(gStringVar4, sActionStringTable[stringId]); AddTextPrinterParameterized(*windowPtr, FONT_NORMAL, gStringVar4, 0, 1, 0, 0); ScheduleBgCopyTilemapToVram(2); @@ -2550,11 +2554,11 @@ static u8 DisplaySelectionWindow(u8 windowType) return sPartyMenuInternal->windowId[0]; } -static void PartyMenuPrintText(const u8 *text) +static void PrintMessage(const u8 *text) { - DrawStdFrameWithCustomTileAndPalette(6, FALSE, 0x4F, 13); + DrawStdFrameWithCustomTileAndPalette(WIN_MSG, FALSE, 0x4F, 13); gTextFlags.canABSpeedUpPrint = TRUE; - AddTextPrinterParameterized2(6, FONT_NORMAL, text, GetPlayerTextSpeedDelay(), 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(WIN_MSG, FONT_NORMAL, text, GetPlayerTextSpeedDelay(), 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } static void PartyMenuDisplayYesNoMenu(void) @@ -4466,8 +4470,8 @@ void Task_AbilityCapsule(u8 taskId) { case 0: // Can't use. - if (gBaseStats[tSpecies].abilities[0] == gBaseStats[tSpecies].abilities[1] - || gBaseStats[tSpecies].abilities[1] == 0 + if (gSpeciesInfo[tSpecies].abilities[0] == gSpeciesInfo[tSpecies].abilities[1] + || gSpeciesInfo[tSpecies].abilities[1] == 0 || tAbilityNum > 1 || !tSpecies) { @@ -4554,7 +4558,7 @@ void Task_AbilityPatch(u8 taskId) { case 0: // Can't use. - if (gBaseStats[tSpecies].abilities[tAbilityNum] == 0 + if (gSpeciesInfo[tSpecies].abilities[tAbilityNum] == 0 || !tSpecies || GetMonData(&gPlayerParty[tMonId], MON_DATA_ABILITY_NUM, NULL) > 1 ) @@ -5161,8 +5165,8 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task) u16 *itemPtr = &gSpecialVar_ItemId; bool8 cannotUseEffect; u8 holdEffectParam = ItemId_GetHoldEffectParam(*itemPtr); - sInitialLevel = GetMonData(mon, MON_DATA_LEVEL); + sInitialLevel = GetMonData(mon, MON_DATA_LEVEL); if (sInitialLevel != MAX_LEVEL) { BufferMonStatsToTaskData(mon, arrayPtr); @@ -5176,10 +5180,30 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task) PlaySE(SE_SELECT); if (cannotUseEffect) { - gPartyMenuUseExitCallback = FALSE; - DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); - ScheduleBgCopyTilemapToVram(2); - gTasks[taskId].func = task; + u16 targetSpecies = SPECIES_NONE; + + // Resets values to 0 so other means of teaching moves doesn't overwrite levels + sInitialLevel = 0; + sFinalLevel = 0; + + if (holdEffectParam == 0) + targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_NORMAL, ITEM_NONE, NULL); + + if (targetSpecies != SPECIES_NONE) + { + RemoveBagItem(gSpecialVar_ItemId, 1); + FreePartyPointers(); + gCB2_AfterEvolution = gPartyMenu.exitCallback; + BeginEvolutionScene(mon, targetSpecies, TRUE, gPartyMenu.slotId); + DestroyTask(taskId); + } + else + { + gPartyMenuUseExitCallback = FALSE; + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = task; + } } else { diff --git a/src/player_pc.c b/src/player_pc.c index b1a323a3289e..f53e08f5323e 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -290,8 +290,9 @@ static const struct ListMenuTemplate sListMenuTemplate_ItemStorage = .cursorShadowPal = 3, .lettersSpacing = FALSE, .itemVerticalPadding = 0, - .scrollMultiple = FALSE, - .fontId = FONT_NARROW + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = FONT_NARROW, + .cursorKind = CURSOR_BLACK_ARROW, }; static const struct WindowTemplate sWindowTemplates_ItemStorage[ITEMPC_WIN_COUNT] = diff --git a/src/pokeblock.c b/src/pokeblock.c index cf0513f80e7b..e490f372c469 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -440,7 +440,7 @@ static const struct ListMenuTemplate sPokeblockListMenuTemplate = .itemVerticalPadding = 0, .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, .fontId = FONT_NORMAL, - .cursorKind = 1 + .cursorKind = CURSOR_INVISIBLE }; void OpenPokeblockCase(u8 caseId, void (*callback)(void)) @@ -653,7 +653,7 @@ static bool8 LoadPokeblockMenuGfx(void) } break; case 2: - LoadCompressedPalette(gMenuPokeblock_Pal, 0, 0xC0); + LoadCompressedPalette(gMenuPokeblock_Pal, BG_PLTT_ID(0), 6 * PLTT_SIZE_4BPP); sPokeblockMenu->gfxState++; break; case 3: @@ -679,9 +679,9 @@ static void HandleInitWindows(void) InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); - LoadUserWindowBorderGfx(0, 1, 0xE0); - LoadMessageBoxGfx(0, 0xA, 0xD0); - LoadPalette(gStandardMenuPalette, 0xF0, 0x20); + LoadUserWindowBorderGfx(0, 1, BG_PLTT_ID(14)); + LoadMessageBoxGfx(0, 0xA, BG_PLTT_ID(13)); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); for (i = 0; i < ARRAY_COUNT(sWindowTemplates) - 1; i++) FillWindowPixelBuffer(i, PIXEL_FILL(0)); @@ -765,7 +765,7 @@ static void DrawPokeblockInfo(s32 pkblId) struct Pokeblock *pokeblock; u16 rectTilemapSrc[2]; - FillWindowPixelBuffer(7, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_FEEL, PIXEL_FILL(0)); if (pkblId != LIST_CANCEL) { @@ -802,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, COPYWIN_GFX); + CopyWindowToVram(WIN_FEEL, COPYWIN_GFX); } ScheduleBgCopyTilemapToVram(0); diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 46355e14647b..9a7ce414d6ee 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -771,7 +771,7 @@ static bool8 LoadMonAndSceneGfx(struct Pokemon *mon) } break; case 8: - LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60); + LoadCompressedPalette(gBattleTerrainPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); sPokeblockFeed->loadGfxState = 0; return TRUE; } @@ -783,8 +783,8 @@ static void HandleInitWindows(void) { InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); - LoadUserWindowBorderGfx(0, 1, 0xE0); - LoadPalette(gStandardMenuPalette, 0xF0, 0x20); + LoadUserWindowBorderGfx(0, 1, BG_PLTT_ID(14)); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); FillWindowPixelBuffer(0, PIXEL_FILL(0)); PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); diff --git a/src/pokedex.c b/src/pokedex.c index de7f186a574b..2388626ff4cf 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -2145,12 +2145,12 @@ static bool8 LoadPokedexListPage(u8 page) static void LoadPokedexBgPalette(bool8 isSearchResults) { if (isSearchResults == TRUE) - LoadPalette(gPokedexSearchResults_Pal + 1, 1, 0xBE); + LoadPalette(gPokedexSearchResults_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); else if (!IsNationalPokedexEnabled()) - LoadPalette(gPokedexBgHoenn_Pal + 1, 1, 0xBE); + LoadPalette(gPokedexBgHoenn_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); else - LoadPalette(gPokedexBgNational_Pal + 1, 1, 0xBE); - LoadPalette(GetOverworldTextboxPalettePtr(), 0xF0, 32); + LoadPalette(gPokedexBgNational_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(6 * 16 - 1)); + LoadPalette(GetOverworldTextboxPalettePtr(), BG_PLTT_ID(15), PLTT_SIZE_4BPP); } static void FreeWindowAndBgBuffers(void) @@ -3264,7 +3264,7 @@ static void Task_LoadInfoScreen(u8 taskId) case 4: PrintMonInfo(sPokedexListItem->dexNum, sPokedexView->dexMode == DEX_MODE_HOENN ? FALSE : TRUE, sPokedexListItem->owned, 0); if (!sPokedexListItem->owned) - LoadPalette(gPlttBufferUnfaded + 1, 0x31, 0x1E); + LoadPalette(gPlttBufferUnfaded + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(16 - 1)); CopyWindowToVram(WIN_INFO, COPYWIN_FULL); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); @@ -3713,7 +3713,7 @@ static void LoadPlayArrowPalette(bool8 cryPlaying) color = RGB(18, 28, 0); else color = RGB(15, 21, 0); - LoadPalette(&color, 0x5D, 2); + LoadPalette(&color, BG_PLTT_ID(5) + 13, PLTT_SIZEOF(1)); } static void Task_LoadSizeScreen(u8 taskId) @@ -3768,7 +3768,7 @@ static void Task_LoadSizeScreen(u8 taskId) gSprites[spriteId].oam.priority = 0; 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); + LoadPalette(sSizeScreenSilhouette_Pal, OBJ_PLTT_ID2(gSprites[spriteId].oam.paletteNum), PLTT_SIZE_4BPP); gTasks[taskId].tTrainerSpriteId = spriteId; gMain.state++; break; @@ -3779,7 +3779,7 @@ static void Task_LoadSizeScreen(u8 taskId) gSprites[spriteId].oam.priority = 0; gSprites[spriteId].y2 = gPokedexEntries[sPokedexListItem->dexNum].pokemonOffset; SetOamMatrix(2, gPokedexEntries[sPokedexListItem->dexNum].pokemonScale, 0, 0, gPokedexEntries[sPokedexListItem->dexNum].pokemonScale); - LoadPalette(sSizeScreenSilhouette_Pal, (gSprites[spriteId].oam.paletteNum + 16) * 16, 0x20); + LoadPalette(sSizeScreenSilhouette_Pal, OBJ_PLTT_ID2(gSprites[spriteId].oam.paletteNum), PLTT_SIZE_4BPP); gTasks[taskId].tMonSpriteId = spriteId; CopyWindowToVram(WIN_INFO, COPYWIN_FULL); CopyBgTilemapBufferToVram(1); @@ -4030,11 +4030,11 @@ static void Task_HandleCaughtMonPageInput(u8 taskId) // Flicker caught screen color else if (++gTasks[taskId].tPalTimer & 16) { - LoadPalette(gPokedexBgHoenn_Pal + 1, 0x31, 14); + LoadPalette(gPokedexBgHoenn_Pal + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(7)); } else { - LoadPalette(gPokedexCaughtScreen_Pal + 1, 0x31, 14); + LoadPalette(gPokedexCaughtScreen_Pal + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(7)); } } @@ -4063,7 +4063,7 @@ static void Task_ExitCaughtMonPage(u8 taskId) personality = ((u16)gTasks[taskId].tPersonalityHi << 16) | (u16)gTasks[taskId].tPersonalityLo; paletteNum = gSprites[gTasks[taskId].tMonSpriteId].oam.paletteNum; lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality); - LoadCompressedPalette(lzPaletteData, 0x100 | paletteNum * 16, 32); + LoadCompressedPalette(lzPaletteData, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); DestroyTask(taskId); } } @@ -4379,7 +4379,7 @@ bool16 HasAllMons(void) for (i = 1; i < NATIONAL_DEX_COUNT + 1; i++) { - if (!(gBaseStats[i].flags & SPECIES_FLAG_MYTHICAL) && !GetSetPokedexFlag(i, FLAG_GET_CAUGHT)) + if (!(gSpeciesInfo[i].flags & SPECIES_FLAG_MYTHICAL) && !GetSetPokedexFlag(i, FLAG_GET_CAUGHT)) return FALSE; } @@ -4660,7 +4660,7 @@ static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 t { species = NationalPokedexNumToSpecies(sPokedexView->pokedexList[i].dexNum); - if (bodyColor == gBaseStats[species].bodyColor) + if (bodyColor == gSpeciesInfo[species].bodyColor) { sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i]; resultsCount++; @@ -4686,8 +4686,8 @@ static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 t { species = NationalPokedexNumToSpecies(sPokedexView->pokedexList[i].dexNum); - types[0] = gBaseStats[species].type1; - types[1] = gBaseStats[species].type2; + types[0] = gSpeciesInfo[species].types[0]; + types[1] = gSpeciesInfo[species].types[1]; if (types[0] == type1 || types[1] == type1) { sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i]; @@ -4704,8 +4704,8 @@ static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 t { species = NationalPokedexNumToSpecies(sPokedexView->pokedexList[i].dexNum); - types[0] = gBaseStats[species].type1; - types[1] = gBaseStats[species].type2; + types[0] = gSpeciesInfo[species].types[0]; + types[1] = gSpeciesInfo[species].types[1]; if ((types[0] == type1 && types[1] == type2) || (types[0] == type2 && types[1] == type1)) { sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i]; @@ -4795,7 +4795,7 @@ static void Task_LoadSearchMenu(u8 taskId) CopyToBgTilemapBuffer(3, gPokedexSearchMenuHoenn_Tilemap, 0, 0); else CopyToBgTilemapBuffer(3, gPokedexSearchMenuNational_Tilemap, 0, 0); - LoadPalette(gPokedexSearchMenu_Pal + 1, 1, 0x7E); + LoadPalette(gPokedexSearchMenu_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(4 * 16 - 1)); gMain.state = 1; } break; diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c index 406d1377d68b..2c352c67a00d 100644 --- a/src/pokedex_cry_screen.c +++ b/src/pokedex_cry_screen.c @@ -27,6 +27,8 @@ #define WAVEFORM_WINDOW_HEIGHT 56 +#define TAG_NEEDLE 0x2000 + struct PokedexCryMeterNeedle { s8 rotation; s8 targetRotation; @@ -202,8 +204,8 @@ static const struct OamData sOamData_CryMeterNeedle = static const struct SpriteTemplate sCryMeterNeedleSpriteTemplate = { - .tileTag = 0x2000, - .paletteTag = 0x2000, + .tileTag = TAG_NEEDLE, + .paletteTag = TAG_NEEDLE, .oam = &sOamData_CryMeterNeedle, .anims = sSpriteAnimTable_CryMeterNeedle, .images = NULL, @@ -213,13 +215,13 @@ static const struct SpriteTemplate sCryMeterNeedleSpriteTemplate = static const struct SpriteSheet sCryMeterNeedleSpriteSheets[] = { - {sCryMeterNeedle_Gfx, 0x800, 0x2000}, + {sCryMeterNeedle_Gfx, sizeof(sCryMeterNeedle_Gfx), TAG_NEEDLE}, {} }; static const struct SpritePalette sCryMeterNeedleSpritePalettes[] = { - {sCryMeterNeedle_Pal, 0x2000}, + {sCryMeterNeedle_Pal, TAG_NEEDLE}, {} }; @@ -258,7 +260,7 @@ bool8 LoadCryWaveformWindow(struct CryScreenWindow *window, u8 windowId) break; case 2: DrawWaveformWindow(windowId); - LoadPalette(sCryScreenBg_Pal, window->paletteNo * 16, 32); + LoadPalette(sCryScreenBg_Pal, BG_PLTT_ID(window->paletteNo), PLTT_SIZE_4BPP); finished = TRUE; break; } @@ -458,7 +460,7 @@ bool8 LoadCryMeter(struct CryScreenWindow *window, u8 windowId) sCryMeterNeedle = AllocZeroed(sizeof(*sCryMeterNeedle)); CopyToWindowPixelBuffer(windowId, sCryMeter_Gfx, 0, 0); - LoadPalette(sCryMeter_Pal, window->paletteNo * 16, 32); + LoadPalette(sCryMeter_Pal, BG_PLTT_ID(window->paletteNo), PLTT_SIZE_4BPP); gDexCryScreenState++; break; case 1: diff --git a/src/pokemon.c b/src/pokemon.c index 9478e7bafd14..71dcb5bcbcc6 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -39,7 +39,6 @@ #include "trainer_hill.h" #include "util.h" #include "constants/abilities.h" -#include "constants/battle_config.h" #include "constants/battle_frontier.h" #include "constants/battle_move_effects.h" #include "constants/battle_script_commands.h" @@ -1950,7 +1949,7 @@ const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] = #include "data/pokemon/trainer_class_lookups.h" #include "data/pokemon/experience_tables.h" -#include "data/pokemon/base_stats.h" +#include "data/pokemon/species_info.h" #include "data/pokemon/level_up_learnsets.h" #include "data/pokemon/teachable_learnsets.h" #include "data/pokemon/evolution.h" @@ -1962,11 +1961,7 @@ const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] = #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, @@ -3465,14 +3460,26 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, | (gSaveBlock2Ptr->playerTrainerId[2] << 16) | (gSaveBlock2Ptr->playerTrainerId[3] << 24); - if (gBaseStats[species].flags & SPECIES_FLAG_SHINY_LOCKED) +#if P_FLAG_FORCE_NO_SHINY != 0 + if (FlagGet(P_FLAG_FORCE_NO_SHINY)) { while (GET_SHINY_VALUE(value, personality) < SHINY_ODDS) - { personality = Random32(); - } } +#endif +#if P_FLAG_FORCE_SHINY != 0 + #if P_FLAG_FORCE_NO_SHINY != 0 + else + #endif + if (FlagGet(P_FLAG_FORCE_SHINY)) + { + while (GET_SHINY_VALUE(value, personality) >= SHINY_ODDS) + personality = Random32(); + } +#endif +#if P_FLAG_FORCE_SHINY != 0 || P_FLAG_FORCE_NO_SHINY != 0 else +#endif { u32 totalRerolls = 0; if (CheckBagHasItem(ITEM_SHINY_CHARM, 1)) @@ -3499,8 +3506,8 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, SetBoxMonData(boxMon, MON_DATA_LANGUAGE, &gGameLanguage); SetBoxMonData(boxMon, MON_DATA_OT_NAME, gSaveBlock2Ptr->playerName); SetBoxMonData(boxMon, MON_DATA_SPECIES, &species); - SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gBaseStats[species].growthRate][level]); - SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship); + SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gSpeciesInfo[species].growthRate][level]); + SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gSpeciesInfo[species].friendship); value = GetCurrentRegionMapSectionId(); SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, &value); SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level); @@ -3539,7 +3546,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); - if (gBaseStats[species].flags & SPECIES_FLAG_ALL_PERFECT_IVS) + if (gSpeciesInfo[species].flags & SPECIES_FLAG_ALL_PERFECT_IVS) { iv = MAX_PER_STAT_IVS; SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv); @@ -3550,7 +3557,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); } #if P_LEGENDARY_PERFECT_IVS >= GEN_6 - else if (gBaseStats[species].flags & (SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_MYTHICAL | SPECIES_FLAG_ULTRA_BEAST)) + else if (gSpeciesInfo[species].flags & (SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_MYTHICAL | SPECIES_FLAG_ULTRA_BEAST)) { iv = MAX_PER_STAT_IVS; // Initialize a list of IV indices. @@ -3594,7 +3601,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, #endif } - if (gBaseStats[species].abilities[1]) + if (gSpeciesInfo[species].abilities[1]) { value = personality & 1; SetBoxMonData(boxMon, MON_DATA_ABILITY_NUM, &value); @@ -4069,7 +4076,7 @@ static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon) #define CALC_STAT(base, iv, ev, statIndex, field) \ { \ - u8 baseStat = gBaseStats[species].base; \ + u8 baseStat = gSpeciesInfo[species].base; \ s32 n = (((2 * baseStat + iv + ev / 4) * level) / 100) + 5; \ u8 nature = GetNature(mon); \ n = ModifyStatByNature(nature, n, statIndex); \ @@ -4104,7 +4111,7 @@ void CalculateMonStats(struct Pokemon *mon) } else { - s32 n = 2 * gBaseStats[species].baseHP + hpIV; + s32 n = 2 * gSpeciesInfo[species].baseHP + hpIV; newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10; } @@ -4164,7 +4171,7 @@ u8 GetLevelFromMonExp(struct Pokemon *mon) u32 exp = GetMonData(mon, MON_DATA_EXP, NULL); s32 level = 1; - while (level <= MAX_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp) + while (level <= MAX_LEVEL && gExperienceTables[gSpeciesInfo[species].growthRate][level] <= exp) level++; return level - 1; @@ -4176,7 +4183,7 @@ u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon) u32 exp = GetBoxMonData(boxMon, MON_DATA_EXP, NULL); s32 level = 1; - while (level <= MAX_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp) + while (level <= MAX_LEVEL && gExperienceTables[gSpeciesInfo[species].growthRate][level] <= exp) level++; return level - 1; @@ -4418,15 +4425,15 @@ u8 GetBoxMonGender(struct BoxPokemon *boxMon) u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL); u32 personality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL); - switch (gBaseStats[species].genderRatio) + switch (gSpeciesInfo[species].genderRatio) { case MON_MALE: case MON_FEMALE: case MON_GENDERLESS: - return gBaseStats[species].genderRatio; + return gSpeciesInfo[species].genderRatio; } - if (gBaseStats[species].genderRatio > (personality & 0xFF)) + if (gSpeciesInfo[species].genderRatio > (personality & 0xFF)) return MON_FEMALE; else return MON_MALE; @@ -4434,15 +4441,15 @@ u8 GetBoxMonGender(struct BoxPokemon *boxMon) u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality) { - switch (gBaseStats[species].genderRatio) + switch (gSpeciesInfo[species].genderRatio) { case MON_MALE: case MON_FEMALE: case MON_GENDERLESS: - return gBaseStats[species].genderRatio; + return gSpeciesInfo[species].genderRatio; } - if (gBaseStats[species].genderRatio > (personality & 0xFF)) + if (gSpeciesInfo[species].genderRatio > (personality & 0xFF)) return MON_FEMALE; else return MON_MALE; @@ -5472,7 +5479,7 @@ u16 GetAbilityBySpecies(u16 species, u8 abilityNum) int i; if (abilityNum < NUM_ABILITY_SLOTS) - gLastUsedAbility = gBaseStats[species].abilities[abilityNum]; + gLastUsedAbility = gSpeciesInfo[species].abilities[abilityNum]; else gLastUsedAbility = ABILITY_NONE; @@ -5480,13 +5487,13 @@ u16 GetAbilityBySpecies(u16 species, u8 abilityNum) { for (i = NUM_NORMAL_ABILITY_SLOTS; i < NUM_ABILITY_SLOTS && gLastUsedAbility == ABILITY_NONE; i++) { - gLastUsedAbility = gBaseStats[species].abilities[i]; + gLastUsedAbility = gSpeciesInfo[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]; + gLastUsedAbility = gSpeciesInfo[species].abilities[i]; } return gLastUsedAbility; @@ -5638,8 +5645,8 @@ void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst) dst->spDefense = GetMonData(src, MON_DATA_SPDEF, NULL); dst->abilityNum = GetMonData(src, MON_DATA_ABILITY_NUM, NULL); dst->otId = GetMonData(src, MON_DATA_OT_ID, NULL); - dst->type1 = gBaseStats[dst->species].type1; - dst->type2 = gBaseStats[dst->species].type2; + dst->type1 = gSpeciesInfo[dst->species].types[0]; + dst->type2 = gSpeciesInfo[dst->species].types[1]; dst->type3 = TYPE_MYSTERY; dst->ability = GetAbilityBySpecies(dst->species, dst->abilityNum); GetMonData(src, MON_DATA_NICKNAME, nickname); @@ -5891,14 +5898,14 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (param == 0) // Rare Candy { - dataUnsigned = gExperienceTables[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1]; + dataUnsigned = gExperienceTables[gSpeciesInfo[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1]; } else if (param - 1 < 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]; + if (dataUnsigned > gExperienceTables[gSpeciesInfo[species].growthRate][MAX_LEVEL]) + dataUnsigned = gExperienceTables[gSpeciesInfo[species].growthRate][MAX_LEVEL]; } if (dataUnsigned != 0) // Failsafe @@ -6692,8 +6699,8 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s for (j = 0; j < PARTY_SIZE; j++) { u16 currSpecies = GetMonData(&gPlayerParty[j], MON_DATA_SPECIES, NULL); - if (gBaseStats[currSpecies].type1 == TYPE_DARK - || gBaseStats[currSpecies].type2 == TYPE_DARK) + if (gSpeciesInfo[currSpecies].types[0] == TYPE_DARK + || gSpeciesInfo[currSpecies].types[1] == TYPE_DARK) { targetSpecies = gEvolutionTable[species][i].targetSpecies; break; @@ -7241,39 +7248,39 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) { case STAT_HP: if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_HP) - evIncrease = (gBaseStats[defeatedSpecies].evYield_HP + bonus) * multiplier; + evIncrease = (gSpeciesInfo[defeatedSpecies].evYield_HP + bonus) * multiplier; else - evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier; + evIncrease = gSpeciesInfo[defeatedSpecies].evYield_HP * multiplier; break; case STAT_ATK: if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_ATK) - evIncrease = (gBaseStats[defeatedSpecies].evYield_Attack + bonus) * multiplier; + evIncrease = (gSpeciesInfo[defeatedSpecies].evYield_Attack + bonus) * multiplier; else - evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier; + evIncrease = gSpeciesInfo[defeatedSpecies].evYield_Attack * multiplier; break; case STAT_DEF: if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_DEF) - evIncrease = (gBaseStats[defeatedSpecies].evYield_Defense + bonus) * multiplier; + evIncrease = (gSpeciesInfo[defeatedSpecies].evYield_Defense + bonus) * multiplier; else - evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier; + evIncrease = gSpeciesInfo[defeatedSpecies].evYield_Defense * multiplier; break; case STAT_SPEED: if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_SPEED) - evIncrease = (gBaseStats[defeatedSpecies].evYield_Speed + bonus) * multiplier; + evIncrease = (gSpeciesInfo[defeatedSpecies].evYield_Speed + bonus) * multiplier; else - evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier; + evIncrease = gSpeciesInfo[defeatedSpecies].evYield_Speed * multiplier; break; case STAT_SPATK: if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_SPATK) - evIncrease = (gBaseStats[defeatedSpecies].evYield_SpAttack + bonus) * multiplier; + evIncrease = (gSpeciesInfo[defeatedSpecies].evYield_SpAttack + bonus) * multiplier; else - evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier; + evIncrease = gSpeciesInfo[defeatedSpecies].evYield_SpAttack * multiplier; break; case STAT_SPDEF: if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_SPDEF) - evIncrease = (gBaseStats[defeatedSpecies].evYield_SpDefense + bonus) * multiplier; + evIncrease = (gSpeciesInfo[defeatedSpecies].evYield_SpDefense + bonus) * multiplier; else - evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier; + evIncrease = gSpeciesInfo[defeatedSpecies].evYield_SpDefense * multiplier; break; } @@ -7462,12 +7469,12 @@ bool8 TryIncrementMonLevel(struct Pokemon *mon) u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); u8 nextLevel = GetMonData(mon, MON_DATA_LEVEL, 0) + 1; u32 expPoints = GetMonData(mon, MON_DATA_EXP, 0); - if (expPoints > gExperienceTables[gBaseStats[species].growthRate][MAX_LEVEL]) + if (expPoints > gExperienceTables[gSpeciesInfo[species].growthRate][MAX_LEVEL]) { - expPoints = gExperienceTables[gBaseStats[species].growthRate][MAX_LEVEL]; + expPoints = gExperienceTables[gSpeciesInfo[species].growthRate][MAX_LEVEL]; SetMonData(mon, MON_DATA_EXP, &expPoints); } - if (nextLevel > MAX_LEVEL || expPoints < gExperienceTables[gBaseStats[species].growthRate][nextLevel]) + if (nextLevel > MAX_LEVEL || expPoints < gExperienceTables[gSpeciesInfo[species].growthRate][nextLevel]) { return FALSE; } @@ -7824,7 +7831,7 @@ bool32 IsHMMove2(u16 move) bool8 IsMonSpriteNotFlipped(u16 species) { - return gBaseStats[species].noFlip; + return gSpeciesInfo[species].noFlip; } s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor) @@ -7957,26 +7964,26 @@ void SetWildMonHeldItem(void) if (rnd < chanceNoItem) continue; if (rnd < chanceNotRare) - SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemCommon); else - SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemRare); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemRare); } } else { - if (gBaseStats[species].itemCommon == gBaseStats[species].itemRare && gBaseStats[species].itemCommon != ITEM_NONE) + if (gSpeciesInfo[species].itemCommon == gSpeciesInfo[species].itemRare && gSpeciesInfo[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); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemCommon); } else { if (rnd < chanceNoItem) continue; if (rnd < chanceNotRare) - SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemCommon); else - SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemRare); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gSpeciesInfo[species].itemRare); } } } @@ -8610,7 +8617,9 @@ void TrySpecialOverworldEvo(void) bool32 ShouldShowFemaleDifferences(u16 species, u32 personality) { - return (gBaseStats[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE; + if (species >= NUM_SPECIES) + return FALSE; + return (gSpeciesInfo[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE; } void TryToSetBattleFormChangeMoves(struct Pokemon *mon) @@ -8672,3 +8681,32 @@ u32 GetMonFriendshipScore(struct Pokemon *pokemon) return FRIENDSHIP_NONE; } + +void UpdateMonPersonality(struct BoxPokemon *boxMon, u32 personality) +{ + struct PokemonSubstruct0 *old0, *new0; + struct PokemonSubstruct1 *old1, *new1; + struct PokemonSubstruct2 *old2, *new2; + struct PokemonSubstruct3 *old3, *new3; + struct BoxPokemon old; + + old = *boxMon; + old0 = &(GetSubstruct(&old, old.personality, 0)->type0); + old1 = &(GetSubstruct(&old, old.personality, 1)->type1); + old2 = &(GetSubstruct(&old, old.personality, 2)->type2); + old3 = &(GetSubstruct(&old, old.personality, 3)->type3); + + new0 = &(GetSubstruct(boxMon, personality, 0)->type0); + new1 = &(GetSubstruct(boxMon, personality, 1)->type1); + new2 = &(GetSubstruct(boxMon, personality, 2)->type2); + new3 = &(GetSubstruct(boxMon, personality, 3)->type3); + + DecryptBoxMon(&old); + boxMon->personality = personality; + *new0 = *old0; + *new1 = *old1; + *new2 = *old2; + *new3 = *old3; + boxMon->checksum = CalculateBoxMonChecksum(boxMon); + EncryptBoxMon(boxMon); +} diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 936ef037d4f5..c7518ba23ed8 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "palette.h" #include "pokemon.h" #include "pokemon_animation.h" #include "sprite.h" @@ -907,11 +908,11 @@ u8 GetSpeciesBackAnimSet(u16 species) // as 0xFFFFXXXX instead of the desired 0x02YYXXXX. // By dumb luck, this is not an issue in vanilla. However, // changing the link order revealed this bug. -#if MODERN +#if MODERN || defined(BUGFIX) #define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | ((u16)gTasks[taskId].tPtrLo))) #else #define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | (gTasks[taskId].tPtrLo))) -#endif //MODERN +#endif //MODERN || BUGFIX static void Task_HandleMonAnimation(u8 taskId) { @@ -1544,7 +1545,7 @@ static void Anim_CircleCounterclockwise(struct Sprite *sprite) #define GlowColor(color, colorIncrement, speed) \ { \ if (sprite->data[2] == 0) \ - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; \ + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); \ \ if (sprite->data[2] > 128) \ { \ @@ -2479,7 +2480,7 @@ static void Anim_FlashYellow(struct Sprite *sprite) { if (++sprite->data[2] == 1) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[6] = 0; sprite->data[5] = 0; sprite->data[4] = 0; @@ -5268,7 +5269,7 @@ static void Anim_ShakeFlashYellow_Fast(struct Sprite *sprite) { if (++sprite->data[2] == 1) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[6] = 0; sprite->data[5] = 0; sprite->data[4] = 0; @@ -5282,7 +5283,7 @@ static void Anim_ShakeFlashYellow(struct Sprite *sprite) { if (++sprite->data[2] == 1) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[6] = 0; sprite->data[5] = 0; sprite->data[4] = 0; @@ -5296,7 +5297,7 @@ static void Anim_ShakeFlashYellow_Slow(struct Sprite *sprite) { if (++sprite->data[2] == 1) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[6] = 0; sprite->data[5] = 0; sprite->data[4] = 0; @@ -5366,7 +5367,7 @@ static void Anim_ShakeGlowRed_Fast(struct Sprite *sprite) { if (sprite->data[2] == 0) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[0] = 10; sprite->data[5] = 0; sprite->data[4] = 2; @@ -5387,7 +5388,7 @@ static void Anim_ShakeGlowRed(struct Sprite *sprite) { if (sprite->data[2] == 0) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[0] = 20; sprite->data[5] = 0; sprite->data[4] = 1; @@ -5408,7 +5409,7 @@ static void Anim_ShakeGlowRed_Slow(struct Sprite *sprite) { if (sprite->data[2] == 0) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[0] = 80; sprite->data[5] = 0; sprite->data[4] = 1; @@ -5429,7 +5430,7 @@ static void Anim_ShakeGlowGreen_Fast(struct Sprite *sprite) { if (sprite->data[2] == 0) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[0] = 10; sprite->data[5] = 0; sprite->data[4] = 2; @@ -5450,7 +5451,7 @@ static void Anim_ShakeGlowGreen(struct Sprite *sprite) { if (sprite->data[2] == 0) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[0] = 20; sprite->data[5] = 0; sprite->data[4] = 1; @@ -5471,7 +5472,7 @@ static void Anim_ShakeGlowGreen_Slow(struct Sprite *sprite) { if (sprite->data[2] == 0) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[0] = 80; sprite->data[5] = 0; sprite->data[4] = 1; @@ -5492,7 +5493,7 @@ static void Anim_ShakeGlowBlue_Fast(struct Sprite *sprite) { if (sprite->data[2] == 0) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[0] = 10; sprite->data[5] = 0; sprite->data[4] = 2; @@ -5513,7 +5514,7 @@ static void Anim_ShakeGlowBlue(struct Sprite *sprite) { if (sprite->data[2] == 0) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[0] = 20; sprite->data[5] = 0; sprite->data[4] = 1; @@ -5534,7 +5535,7 @@ static void Anim_ShakeGlowBlue_Slow(struct Sprite *sprite) { if (sprite->data[2] == 0) { - sprite->data[7] = (sprite->oam.paletteNum * 16) + 256; + sprite->data[7] = OBJ_PLTT_ID(sprite->oam.paletteNum); sprite->data[0] = 80; sprite->data[5] = 0; sprite->data[4] = 1; diff --git a/src/pokemon_debug.c b/src/pokemon_debug.c index 447590e2800f..2e9f04506961 100644 --- a/src/pokemon_debug.c +++ b/src/pokemon_debug.c @@ -39,7 +39,7 @@ #include "constants/items.h" -#if P_ENABLE_DEBUG == TRUE +#if DEBUG_POKEMON_MENU == TRUE extern const struct BattleBackground sBattleTerrainTable[]; extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow; extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow; @@ -417,21 +417,21 @@ static void PrintInstructionsOnWindow(struct PokemonDebugMenu *data) FillWindowPixelBuffer(WIN_INSTRUCTIONS, 0x11); if (data->currentSubmenu == 0) { - if (gBaseStats[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) + if (gSpeciesInfo[species].flags & SPECIES_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 & SPECIES_FLAG_GENDER_DIFFERENCE) + if (gSpeciesInfo[species].flags & SPECIES_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 & SPECIES_FLAG_GENDER_DIFFERENCE) + if (gSpeciesInfo[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuTwoGender, x, 0, 0, NULL); else AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuTwo, x, 0, 0, NULL); @@ -485,7 +485,7 @@ static void PrintDigitChars(struct PokemonDebugMenu *data) text[i++] = CHAR_SPACE; text[i++] = CHAR_HYPHEN; - if (gBaseStats[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) + if (gSpeciesInfo[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) { if (data->isFemale) text[i++] = CHAR_FEMALE; @@ -688,14 +688,14 @@ static const struct CompressedSpritePalette *GetMonSpritePalStructCustom(u16 spe { if (isShiny) { - if ((gBaseStats[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && isFemale) + if ((gSpeciesInfo[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && isFemale) return &gMonShinyPaletteTableFemale[species]; else return &gMonShinyPaletteTable[species]; } else { - if ((gBaseStats[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && isFemale) + if ((gSpeciesInfo[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && isFemale) return &gMonPaletteTableFemale[species]; else return &gMonPaletteTable[species]; @@ -714,14 +714,14 @@ static void BattleLoadOpponentMonSpriteGfxCustom(u16 species, bool8 isFemale, bo if (isShiny) { - if ((gBaseStats[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && isFemale) + if ((gSpeciesInfo[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && isFemale) lzPaletteData = gMonShinyPaletteTableFemale[species].data; else lzPaletteData = gMonShinyPaletteTable[species].data; } else { - if ((gBaseStats[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && isFemale) + if ((gSpeciesInfo[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && isFemale) lzPaletteData = gMonPaletteTableFemale[species].data; else lzPaletteData = gMonPaletteTable[species].data; @@ -1493,7 +1493,7 @@ static void Handle_Input_Debug_Pokemon(u8 taskId) ReloadPokemonSprites(data); ApplyOffsetSpriteValues(data); } - if (JOY_NEW(SELECT_BUTTON) && (gBaseStats[data->currentmonId].flags & SPECIES_FLAG_GENDER_DIFFERENCE)) + if (JOY_NEW(SELECT_BUTTON) && (gSpeciesInfo[data->currentmonId].flags & SPECIES_FLAG_GENDER_DIFFERENCE)) { data->isFemale = !data->isFemale; PrintDigitChars(data); diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index c9dae53432cc..0758ea37d3f4 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1309,9 +1309,14 @@ const u8 *const gMonIconTableFemale[] = [SPECIES_KRICKETUNE] = gMonIcon_Kricketune, [SPECIES_SHINX] = gMonIcon_Shinx, [SPECIES_COMBEE] = gMonIcon_Combee, +#if P_HIPPO_GENDER_DIFF_ICONS == TRUE + [SPECIES_HIPPOPOTAS] = gMonIcon_HippopotasF, + [SPECIES_HIPPOWDON] = gMonIcon_HippowdonF, +#else [SPECIES_HIPPOPOTAS] = gMonIcon_Hippopotas, [SPECIES_HIPPOWDON] = gMonIcon_Hippowdon, #endif +#endif #if P_GEN_5_POKEMON == TRUE [SPECIES_UNFEZANT] = gMonIcon_UnfezantF, [SPECIES_FRILLISH] = gMonIcon_FrillishF, @@ -2865,12 +2870,12 @@ void TryLoadAllMonIconPalettesAtOffset(u16 offset) s32 i; const struct SpritePalette* monIconPalettePtr; - if (offset <= 0xA0) + if (offset <= BG_PLTT_ID(10)) { monIconPalettePtr = gMonIconPaletteTable; - for(i = ARRAY_COUNT(gMonIconPaletteTable) - 1; i >= 0; i--) + for (i = ARRAY_COUNT(gMonIconPaletteTable) - 1; i >= 0; i--) { - LoadPalette(monIconPalettePtr->data, offset, 0x20); + LoadPalette(monIconPalettePtr->data, offset, PLTT_SIZE_4BPP); offset += 0x10; monIconPalettePtr++; } diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index ccd3125e4c0c..f7438f1395e6 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -3364,21 +3364,21 @@ static void LoadPokeJumpGfx(void) ResetTempTileDataBuffers(); LoadSpriteSheetsAndPalettes(sPokemonJumpGfx); InitDigitPrinters(); - LoadPalette(sBg_Pal, 0, 0x20); + LoadPalette(sBg_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); DecompressAndCopyTileDataToVram(BG_SCENERY, sBg_Gfx, 0, 0, 0); DecompressAndCopyTileDataToVram(BG_SCENERY, sBg_Tilemap, 0, 0, 1); - LoadPalette(sVenusaur_Pal, 0x30, 0x20); + LoadPalette(sVenusaur_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); DecompressAndCopyTileDataToVram(BG_VENUSAUR, sVenusaur_Gfx, 0, 0, 0); DecompressAndCopyTileDataToVram(BG_VENUSAUR, sVenusaur_Tilemap, 0, 0, 1); - LoadPalette(sBonuses_Pal, 0x10, 0x20); + LoadPalette(sBonuses_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); DecompressAndCopyTileDataToVram(BG_BONUSES, sBonuses_Gfx, 0, 0, 0); DecompressAndCopyTileDataToVram(BG_BONUSES, sBonuses_Tilemap, 0, 0, 1); - LoadPalette(sInterface_Pal, 0x20, 0x20); + LoadPalette(sInterface_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); SetBgTilemapBuffer(BG_INTERFACE, sPokemonJumpGfx->tilemapBuffer); FillBgTilemapBufferRect_Palette0(BG_INTERFACE, 0, 0, 0, 0x20, 0x20); PrintScoreSuffixes(); PrintScore(0); - LoadUserWindowBorderGfxOnBg(0, 1, 0xE0); + LoadUserWindowBorderGfxOnBg(0, 1, BG_PLTT_ID(14)); CopyBgTilemapBufferToVram(BG_INTERFACE); CopyBgTilemapBufferToVram(BG_VENUSAUR); CopyBgTilemapBufferToVram(BG_BONUSES); @@ -3782,7 +3782,7 @@ static u32 AddMessageWindow(u32 left, u32 top, u32 width, u32 height) window.tilemapTop = top; window.width = width; window.height = height; - window.paletteNum = 0xF; + window.paletteNum = 15; window.baseBlock = 0x43; windowId = AddWindow(&window); @@ -4394,8 +4394,8 @@ static void PrintRecordsText(u16 windowId, int width) recordNums[1] = records->bestJumpScore; recordNums[2] = records->excellentsInRow; - LoadUserWindowBorderGfx_(windowId, 0x21D, 0xD0); - DrawTextBorderOuter(windowId, 0x21D, 0xD); + LoadUserWindowBorderGfx_(windowId, 0x21D, BG_PLTT_ID(13)); + DrawTextBorderOuter(windowId, 0x21D, 13); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); 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++) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 1146d0789b8c..d83533d59e3a 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -257,7 +257,7 @@ enum { // The maximum number of Pokémon icons that can appear on-screen. // By default the limit is 40 (though in practice only 37 can be). -#define MAX_MON_ICONS (IN_BOX_COUNT + PARTY_SIZE + 1 >= 40 ? IN_BOX_COUNT + PARTY_SIZE + 1 : 40) +#define MAX_MON_ICONS max(IN_BOX_COUNT + PARTY_SIZE + 1, 40) // The maximum number of item icons that can appear on-screen while // moving held items. 1 in the cursor, and 2 more while switching @@ -950,26 +950,26 @@ 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[] = INCBIN_U16("graphics/pokemon_storage/pkmn_data.bin"); +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[] = 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 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 sScrollingBg_Pal[] = INCBIN_U16("graphics/pokemon_storage/scrolling_bg.gbapal"); +static const u16 sScrollingBgMoveItems_Pal[] = INCBIN_U16("graphics/pokemon_storage/scrolling_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[] = { @@ -1245,7 +1245,7 @@ static const union AffineAnimCmd *const sAffineAnims_ReleaseMon[] = static const u16 sUnusedColor = RGB(26, 29, 8); -static const struct SpriteSheet sSpriteSheet_Arrow = {sArrow_Gfx, 0x80, GFXTAG_ARROW}; +static const struct SpriteSheet sSpriteSheet_Arrow = {sArrow_Gfx, sizeof(sArrow_Gfx), GFXTAG_ARROW}; static const struct OamData sOamData_BoxTitle = { @@ -1768,6 +1768,8 @@ void ResetPokemonStorageSystem(void) static void LoadChooseBoxMenuGfx(struct ChooseBoxMenu *menu, u16 tileTag, u16 palTag, u8 subpriority, bool32 loadPal) { + // Because loadPal is always false, the below palette is never used. + // The Choose Box menu instead uses the palette indicated by palTag, which is always PALTAG_MISC_1 (sHandCursor_Pal) struct SpritePalette palette = { sChooseBoxMenu_Pal, palTag @@ -2132,7 +2134,7 @@ static void Task_InitPokeStorage(u8 taskId) PutWindowTilemap(WIN_DISPLAY_INFO); ClearWindowTilemap(WIN_MESSAGE); CpuFill32(0, (void *)VRAM, 0x200); - LoadUserWindowBorderGfx(WIN_MESSAGE, 0xB, 0xE0); + LoadUserWindowBorderGfx(WIN_MESSAGE, 0xB, BG_PLTT_ID(14)); break; case 3: ResetAllBgCoords(); @@ -3862,13 +3864,13 @@ static void LoadWaveformSpritePalette(void) static void InitPalettesAndSprites(void) { - LoadPalette(sInterface_Pal, 0, sizeof(sInterface_Pal)); - LoadPalette(sPkmnDataGray_Pal, 0x20, sizeof(sPkmnDataGray_Pal)); - LoadPalette(sTextWindows_Pal, 0xF0, sizeof(sTextWindows_Pal)); + LoadPalette(sInterface_Pal, BG_PLTT_ID(0), sizeof(sInterface_Pal)); + LoadPalette(sPkmnDataGray_Pal, BG_PLTT_ID(2), sizeof(sPkmnDataGray_Pal)); + LoadPalette(sTextWindows_Pal, BG_PLTT_ID(15), sizeof(sTextWindows_Pal)); if (sStorage->boxOption != OPTION_MOVE_ITEMS) - LoadPalette(sBg_Pal, 0x30, sizeof(sBg_Pal)); + LoadPalette(sScrollingBg_Pal, BG_PLTT_ID(3), sizeof(sScrollingBg_Pal)); else - LoadPalette(sBgMoveItems_Pal, 0x30, sizeof(sBgMoveItems_Pal)); + LoadPalette(sScrollingBgMoveItems_Pal, BG_PLTT_ID(3), sizeof(sScrollingBgMoveItems_Pal)); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_16COLOR | BGCNT_SCREENBASE(30)); CreateDisplayMonSprite(); @@ -3971,7 +3973,7 @@ static void CreateDisplayMonSprite(void) break; sStorage->displayMonSprite = &gSprites[spriteId]; - sStorage->displayMonPalOffset = palSlot * 16 + 0x100; + sStorage->displayMonPalOffset = OBJ_PLTT_ID(palSlot); sStorage->displayMonTilePtr = (void *) OBJ_VRAM0 + tileStart * TILE_SIZE_4BPP; } while (0); @@ -3992,7 +3994,7 @@ static void LoadDisplayMonGfx(u16 species, u32 pid) 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); + LoadPalette(sStorage->displayMonPalBuffer, sStorage->displayMonPalOffset, PLTT_SIZE_4BPP); sStorage->displayMonSprite->invisible = FALSE; } else @@ -4058,7 +4060,7 @@ static void UpdateWaveformAnimation(void) static void InitSupplementalTilemaps(void) { LZ77UnCompWram(gStorageSystemPartyMenu_Tilemap, sStorage->partyMenuTilemapBuffer); - LoadPalette(gStorageSystemPartyMenu_Pal, 0x10, 0x20); + LoadPalette(gStorageSystemPartyMenu_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); TilemapUtil_SetMap(TILEMAPID_PARTY_MENU, 1, sStorage->partyMenuTilemapBuffer, 12, 22); TilemapUtil_SetMap(TILEMAPID_CLOSE_BUTTON, 1, sCloseBoxButton_Tilemap, 9, 4); TilemapUtil_SetPos(TILEMAPID_PARTY_MENU, 10, 0); @@ -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(WIN_MESSAGE, 2, 208); + LoadUserWindowBorderGfx(WIN_MESSAGE, 2, BG_PLTT_ID(13)); FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17); CopyBgTilemapBufferToVram(0); } @@ -5416,9 +5418,9 @@ static void LoadWallpaperGfx(u8 boxId, s8 direction) DrawWallpaper(sStorage->wallpaperTilemap, sStorage->wallpaperLoadDir, sStorage->wallpaperOffset); if (sStorage->wallpaperLoadDir != 0) - LoadPalette(wallpaper->palettes, (sStorage->wallpaperOffset * 32) + 0x40, 0x40); + LoadPalette(wallpaper->palettes, BG_PLTT_ID(4) + BG_PLTT_ID(sStorage->wallpaperOffset * 2), 2 * PLTT_SIZE_4BPP); else - CpuCopy16(wallpaper->palettes, &gPlttBufferUnfaded[(sStorage->wallpaperOffset * 32) + 0x40], 0x40); + CpuCopy16(wallpaper->palettes, &gPlttBufferUnfaded[BG_PLTT_ID(4) + BG_PLTT_ID(sStorage->wallpaperOffset * 2)], 2 * PLTT_SIZE_4BPP); sStorage->wallpaperTiles = malloc_and_decompress(wallpaper->tiles, &tilesSize); LoadBgTiles(2, sStorage->wallpaperTiles, tilesSize, sStorage->wallpaperOffset << 8); @@ -5434,9 +5436,9 @@ static void LoadWallpaperGfx(u8 boxId, s8 direction) CpuCopy16(GetWaldaWallpaperColorsPtr(), &sStorage->wallpaperTilemap[17], 4); if (sStorage->wallpaperLoadDir != 0) - LoadPalette(sStorage->wallpaperTilemap, (sStorage->wallpaperOffset * 32) + 0x40, 0x40); + LoadPalette(sStorage->wallpaperTilemap, BG_PLTT_ID(4) + BG_PLTT_ID(sStorage->wallpaperOffset * 2), 2 * PLTT_SIZE_4BPP); else - CpuCopy16(sStorage->wallpaperTilemap, &gPlttBufferUnfaded[(sStorage->wallpaperOffset * 32) + 0x40], 0x40); + CpuCopy16(sStorage->wallpaperTilemap, &gPlttBufferUnfaded[BG_PLTT_ID(4) + BG_PLTT_ID(sStorage->wallpaperOffset * 2)], 2 * PLTT_SIZE_4BPP); sStorage->wallpaperTiles = malloc_and_decompress(wallpaper->tiles, &tilesSize); iconGfx = malloc_and_decompress(sWaldaWallpaperIcons[GetWaldaWallpaperIconId()], &iconSize); @@ -5473,7 +5475,7 @@ static void DrawWallpaper(const void *tilemap, s8 direction, u8 offset) else x -= 4; - FillBgTilemapBufferRect(2, 0, x, 2, 4, 0x12, 0x11); + FillBgTilemapBufferRect(2, 0, x, 2, 4, 0x12, 17); } static void TrimOldWallpaper(void *tilemap) @@ -5524,7 +5526,7 @@ static void InitBoxTitle(u8 boxId) sStorage->wallpaperPalBits = 0x3f0; tagIndex = IndexOfSpritePaletteTag(PALTAG_BOX_TITLE); - sStorage->boxTitlePalOffset = 0x10e + 16 * tagIndex; + sStorage->boxTitlePalOffset = OBJ_PLTT_ID(tagIndex) + 14; sStorage->wallpaperPalBits |= 0x10000 << tagIndex; // The below seems intended to have separately tracked @@ -5532,7 +5534,7 @@ static void InitBoxTitle(u8 boxId) // share a palette tag, all colors (and fields in some cases) // this is redundant along with the use of boxTitleAltPalOffset tagIndex = IndexOfSpritePaletteTag(PALTAG_BOX_TITLE); - sStorage->boxTitleAltPalOffset = 0x10e + 16 * tagIndex; + sStorage->boxTitleAltPalOffset = OBJ_PLTT_ID(tagIndex) + 14; sStorage->wallpaperPalBits |= 0x10000 << tagIndex; StringCopyPadded(sStorage->boxTitleText, GetBoxNamePtr(boxId), 0, BOX_NAME_LENGTH); @@ -8210,7 +8212,7 @@ static bool8 MultiMove_Start(void) { case 0: HideBg(0); - TryLoadAllMonIconPalettesAtOffset(0x80); + TryLoadAllMonIconPalettesAtOffset(BG_PLTT_ID(8)); sMultiMove->state++; break; case 1: @@ -8259,7 +8261,7 @@ static bool8 MultiMove_Cancel(void) if (!IsDma3ManagerBusyWithBgCopy()) { SetCursorPriorityTo1(); - LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20); + LoadPalette(GetTextWindowPalette(3), BG_PLTT_ID(13), PLTT_SIZE_4BPP); ShowBg(0); return FALSE; } @@ -8365,7 +8367,7 @@ static bool8 MultiMove_PlaceMons(void) case 3: if (!IsDma3ManagerBusyWithBgCopy()) { - LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20); + LoadPalette(GetTextWindowPalette(3), BG_PLTT_ID(13), PLTT_SIZE_4BPP); SetCursorPriorityTo1(); ShowBg(0); return FALSE; @@ -9161,7 +9163,7 @@ static void LoadItemIconGfx(u8 id, const u32 *itemTiles, const u32 *itemPal) CpuFastCopy(sStorage->itemIconBuffer, sStorage->itemIcons[id].tiles, 0x200); LZ77UnCompWram(itemPal, sStorage->itemIconBuffer); - LoadPalette(sStorage->itemIconBuffer, sStorage->itemIcons[id].palIndex, 0x20); + LoadPalette(sStorage->itemIconBuffer, sStorage->itemIcons[id].palIndex, PLTT_SIZE_4BPP); } static void SetItemIconAffineAnim(u8 id, u8 animNum) @@ -9294,7 +9296,7 @@ static bool8 UpdateItemInfoWindowSlideOut(void) if (pos >= 0) DrawItemInfoWindow(pos); - FillBgTilemapBufferRect(0, 0, pos + 1, 12, 1, 9, 0x11); + FillBgTilemapBufferRect(0, 0, pos + 1, 12, 1, 9, 17); ScheduleBgCopyTilemapToVram(0); return TRUE; } @@ -9303,12 +9305,12 @@ static void DrawItemInfoWindow(u32 x) { if (x != 0) { - FillBgTilemapBufferRect(0, 0x13A, 0, 0xC, x, 1, 0xFu); - FillBgTilemapBufferRect(0, 0x93A, 0, 0x14, x, 1, 0xFu); + FillBgTilemapBufferRect(0, 0x13A, 0, 0xC, x, 1, 15); + FillBgTilemapBufferRect(0, 0x93A, 0, 0x14, x, 1, 15); } - FillBgTilemapBufferRect(0, 0x13B, x, 0xD, 1, 7, 0xFu); - FillBgTilemapBufferRect(0, 0x13C, x, 0xC, 1, 1, 0xFu); - FillBgTilemapBufferRect(0, 0x13D, x, 0x14, 1, 1, 0xFu); + FillBgTilemapBufferRect(0, 0x13B, x, 0xD, 1, 7, 15); + FillBgTilemapBufferRect(0, 0x13C, x, 0xC, 1, 1, 15); + FillBgTilemapBufferRect(0, 0x13D, x, 0x14, 1, 1, 15); ScheduleBgCopyTilemapToVram(0); } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 93f85de6ffbf..2d42002adbf3 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -41,7 +41,6 @@ #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" @@ -110,6 +109,7 @@ enum { #define PSS_DATA_WINDOW_MOVE_DESCRIPTION 2 #define MOVE_SELECTOR_SPRITES_COUNT 10 +#define TYPE_ICON_SPRITE_COUNT (MAX_MON_MOVES + 1) // for the spriteIds field in PokemonSummaryScreenData enum { @@ -117,7 +117,7 @@ enum SPRITE_ARR_ID_BALL, SPRITE_ARR_ID_STATUS, SPRITE_ARR_ID_TYPE, // 2 for mon types, 5 for move types(4 moves and 1 to learn), used interchangeably, because mon types and move types aren't shown on the same screen - SPRITE_ARR_ID_MOVE_SELECTOR1 = SPRITE_ARR_ID_TYPE + 5, // 10 sprites that make up the selector + SPRITE_ARR_ID_MOVE_SELECTOR1 = SPRITE_ARR_ID_TYPE + TYPE_ICON_SPRITE_COUNT, // 10 sprites that make up the selector SPRITE_ARR_ID_MOVE_SELECTOR2 = SPRITE_ARR_ID_MOVE_SELECTOR1 + MOVE_SELECTOR_SPRITES_COUNT, SPRITE_ARR_ID_COUNT = SPRITE_ARR_ID_MOVE_SELECTOR2 + MOVE_SELECTOR_SPRITES_COUNT }; @@ -1417,8 +1417,8 @@ static bool8 DecompressGraphics(void) sMonSummaryScreen->switchCounter++; break; case 6: - LoadCompressedPalette(gSummaryScreen_Pal, 0, 0x100); - LoadPalette(&gPPTextPalette, 0x81, 0x1E); + LoadCompressedPalette(gSummaryScreen_Pal, BG_PLTT_ID(0), 8 * PLTT_SIZE_4BPP); + LoadPalette(&gPPTextPalette, BG_PLTT_ID(8) + 1, PLTT_SIZEOF(16 - 1)); sMonSummaryScreen->switchCounter++; break; case 7: @@ -1442,7 +1442,7 @@ static bool8 DecompressGraphics(void) sMonSummaryScreen->switchCounter++; break; case 12: - LoadCompressedPalette(gMoveTypes_Pal, 0x1D0, 0x60); + LoadCompressedPalette(gMoveTypes_Pal, OBJ_PLTT_ID(13), 3 * PLTT_SIZE_4BPP); LoadCompressedSpriteSheet(&sSpriteSheet_SplitIcons); LoadSpritePalette(&sSpritePal_SplitIcons); sMonSummaryScreen->switchCounter = 0; @@ -1640,7 +1640,7 @@ static void Task_HandleInput(u8 taskId) PlaySE(SE_SELECT); BeginCloseSummaryScreen(taskId); } - #if P_ENABLE_DEBUG == TRUE + #if DEBUG_POKEMON_MENU == TRUE else if (JOY_NEW(SELECT_BUTTON) && !gMain.inBattle) { sMonSummaryScreen->callback = CB2_Debug_Pokemon; @@ -1648,7 +1648,7 @@ static void Task_HandleInput(u8 taskId) PlaySE(SE_SELECT); CloseSummaryScreen(taskId); } - #endif + #endif } } @@ -2714,8 +2714,8 @@ static void DrawExperienceProgressBar(struct Pokemon *unused) if (summary->level < MAX_LEVEL) { - u32 expBetweenLevels = gExperienceTables[gBaseStats[summary->species].growthRate][summary->level + 1] - gExperienceTables[gBaseStats[summary->species].growthRate][summary->level]; - u32 expSinceLastLevel = summary->exp - gExperienceTables[gBaseStats[summary->species].growthRate][summary->level]; + u32 expBetweenLevels = gExperienceTables[gSpeciesInfo[summary->species].growthRate][summary->level + 1] - gExperienceTables[gSpeciesInfo[summary->species].growthRate][summary->level]; + u32 expSinceLastLevel = summary->exp - gExperienceTables[gSpeciesInfo[summary->species].growthRate][summary->level]; // Calculate the number of 1-pixel "ticks" to illuminate in the experience progress bar. // There are 8 tiles that make up the bar, and each tile has 8 "ticks". Hence, the numerator @@ -3518,7 +3518,7 @@ static void PrintExpPointsNextLevel(void) PrintTextOnWindow(windowId, gStringVar1, x, 1, 0, 0); if (sum->level < MAX_LEVEL) - expToNextLevel = gExperienceTables[gBaseStats[sum->species].growthRate][sum->level + 1] - sum->exp; + expToNextLevel = gExperienceTables[gSpeciesInfo[sum->species].growthRate][sum->level + 1] - sum->exp; else expToNextLevel = 0; @@ -3874,7 +3874,7 @@ static void CreateMoveTypeIcons(void) { u8 i; - for (i = SPRITE_ARR_ID_TYPE; i < SPRITE_ARR_ID_TYPE + 5; i++) + for (i = SPRITE_ARR_ID_TYPE; i < SPRITE_ARR_ID_TYPE + TYPE_ICON_SPRITE_COUNT; i++) { if (sMonSummaryScreen->spriteIds[i] == SPRITE_NONE) sMonSummaryScreen->spriteIds[i] = CreateSprite(&sSpriteTemplate_MoveTypes, 0, 0, 2); @@ -3903,10 +3903,10 @@ static void SetMonTypeIcons(void) } else { - SetTypeSpritePosAndPal(gBaseStats[summary->species].type1, 120, 48, SPRITE_ARR_ID_TYPE); - if (gBaseStats[summary->species].type1 != gBaseStats[summary->species].type2) + SetTypeSpritePosAndPal(gSpeciesInfo[summary->species].types[0], 120, 48, SPRITE_ARR_ID_TYPE); + if (gSpeciesInfo[summary->species].types[0] != gSpeciesInfo[summary->species].types[1]) { - SetTypeSpritePosAndPal(gBaseStats[summary->species].type2, 160, 48, SPRITE_ARR_ID_TYPE + 1); + SetTypeSpritePosAndPal(gSpeciesInfo[summary->species].types[1], 160, 48, SPRITE_ARR_ID_TYPE + 1); SetSpriteInvisibility(SPRITE_ARR_ID_TYPE + 1, FALSE); } else @@ -4098,7 +4098,7 @@ static void StopPokemonAnimations(void) // A subtle effect, this function stops gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_MON]].callback = SpriteCallbackDummy; StopPokemonAnimationDelayTask(); - paletteIndex = (gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_MON]].oam.paletteNum * 16) | 0x100; + paletteIndex = OBJ_PLTT_ID(gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_MON]].oam.paletteNum); for (i = 0; i < 16; i++) { diff --git a/src/pokenav_conditions_gfx.c b/src/pokenav_conditions_gfx.c index 5631f5bb2af3..e382cbf69958 100644 --- a/src/pokenav_conditions_gfx.c +++ b/src/pokenav_conditions_gfx.c @@ -224,8 +224,8 @@ static u32 LoopedTask_OpenConditionGraphMenu(s32 state) CopyToBgTilemapBufferRect(3, gPokenavOptions_Tilemap, 0, 5, 9, 4); CopyBgTilemapBufferToVram(3); - CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, 0x10, 0x20); - CopyPaletteIntoBufferUnfaded(gConditionText_Pal, 0xF0, 0x20); + CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(gConditionText_Pal, BG_PLTT_ID(15), PLTT_SIZE_4BPP); menu->monTransitionX = -80; return LT_INC_AND_PAUSE; case 4: @@ -235,7 +235,7 @@ static u32 LoopedTask_OpenConditionGraphMenu(s32 state) LZ77UnCompVram(sConditionGraphData_Tilemap, menu->tilemapBuffers[2]); SetBgTilemapBuffer(2, menu->tilemapBuffers[2]); CopyBgTilemapBufferToVram(2); - CopyPaletteIntoBufferUnfaded(gConditionGraphData_Pal, 0x30, 0x20); + CopyPaletteIntoBufferUnfaded(gConditionGraphData_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); ConditionGraph_InitWindow(2); return LT_INC_AND_PAUSE; case 5: @@ -827,13 +827,13 @@ static void CreateConditionMonPic(u8 id) menu->monPicSpriteId = spriteId; gSprites[menu->monPicSpriteId].callback = MonPicGfxSpriteCallback; menu->monGfxPtr = (void *)VRAM + BG_VRAM_SIZE + (menu->monGfxTileStart * 32); - menu->monPalIndex = (menu->monPalIndex * 16) + 0x100; + menu->monPalIndex = OBJ_PLTT_ID(menu->monPalIndex); } } else { DmaCopy16Defvars(3, GetConditionMonPicGfx(id), menu->monGfxPtr, MON_PIC_SIZE); - LoadPalette(GetConditionMonPal(id), menu->monPalIndex, 0x20); + LoadPalette(GetConditionMonPal(id), menu->monPalIndex, PLTT_SIZE_4BPP); } } diff --git a/src/pokenav_conditions_search_results.c b/src/pokenav_conditions_search_results.c index f1d442111133..db24220309be 100644 --- a/src/pokenav_conditions_search_results.c +++ b/src/pokenav_conditions_search_results.c @@ -2,6 +2,7 @@ #include "pokenav.h" #include "bg.h" #include "menu.h" +#include "palette.h" #include "window.h" #include "sound.h" #include "dynamic_placeholder_text_util.h" @@ -431,7 +432,7 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) SetBgTilemapBuffer(1, gfx->buff); CopyToBgTilemapBuffer(1, sConditionSearchResultTilemap, 0, 0); CopyBgTilemapBufferToVram(1); - CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, 0x10, 0x20); + CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: @@ -443,7 +444,7 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - CopyPaletteIntoBufferUnfaded(sListBg_Pal, 0x20, 32); + CopyPaletteIntoBufferUnfaded(sListBg_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); CreateSearchResultsList(); return LT_INC_AND_PAUSE; case 3: diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index c51ab10baefc..bfc5ba0cb4f7 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -349,7 +349,7 @@ static u32 LoopedTask_InitPokenavMenu(s32 state) DecompressAndCopyTileDataToVram(0, &gPokenavHeader_Gfx, 0, 0, 0); SetBgTilemapBuffer(0, menu->tilemapBuffer); CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); - CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, 0, 0x20); + CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); CopyBgTilemapBufferToVram(0); return LT_INC_AND_PAUSE; case 2: @@ -460,8 +460,8 @@ void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes) } else { - index = (index * 16) + 0x100; - CopyPaletteIntoBufferUnfaded(current->data, index, 0x20); + index = OBJ_PLTT_ID(index); + CopyPaletteIntoBufferUnfaded(current->data, index, PLTT_SIZE_4BPP); } } } @@ -683,7 +683,7 @@ static void LoadLeftHeaderGfxForMenu(u32 menuGfxId) 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); + LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], OBJ_PLTT_ID(IndexOfSpritePaletteTag(1)), PLTT_SIZE_4BPP); LZ77UnCompWram(sMenuLeftHeaderSpriteSheets[menuGfxId].data, gDecompressionBuffer); RequestDma3Copy(gDecompressionBuffer, (void *)OBJ_VRAM0 + (GetSpriteTileStartByTag(2) * 32), size, 1); menu->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + sMenuLeftHeaderSpriteSheets[menuGfxId].size; @@ -703,7 +703,7 @@ static void LoadLeftHeaderGfxForSubMenu(u32 menuGfxId) tag = sPokenavSubMenuLeftHeaderSpriteSheets[menuGfxId].tag; size = GetDecompressedDataSize(sPokenavSubMenuLeftHeaderSpriteSheets[menuGfxId].data); - LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], (IndexOfSpritePaletteTag(2) * 16) + 0x100, 0x20); + LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], OBJ_PLTT_ID(IndexOfSpritePaletteTag(2)), PLTT_SIZE_4BPP); LZ77UnCompWram(sPokenavSubMenuLeftHeaderSpriteSheets[menuGfxId].data, &gDecompressionBuffer[0x1000]); RequestDma3Copy(&gDecompressionBuffer[0x1000], (void *)OBJ_VRAM0 + 0x800 + (GetSpriteTileStartByTag(2) * 32), size, 1); } diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c index fd5b36fae08a..626e584b70dd 100755 --- a/src/pokenav_match_call_gfx.c +++ b/src/pokenav_match_call_gfx.c @@ -333,7 +333,7 @@ static u32 LoopedTask_OpenMatchCall(s32 state) SetBgTilemapBuffer(2, gfx->bgTilemapBuffer2); CopyToBgTilemapBuffer(2, sMatchCallUI_Tilemap, 0, 0); CopyBgTilemapBufferToVram(2); - CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, 0x20, 0x20); + CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); CopyBgTilemapBufferToVram(2); return LT_INC_AND_PAUSE; case 1: @@ -343,7 +343,7 @@ static u32 LoopedTask_OpenMatchCall(s32 state) BgDmaFill(1, 0, 0, 1); SetBgTilemapBuffer(1, gfx->bgTilemapBuffer1); FillBgTilemapBufferRect_Palette0(1, 0x1000, 0, 0, 32, 20); - CopyPaletteIntoBufferUnfaded(sCallWindow_Pal, 0x10, 0x20); + CopyPaletteIntoBufferUnfaded(sCallWindow_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 2: @@ -352,8 +352,8 @@ static u32 LoopedTask_OpenMatchCall(s32 state) LoadCallWindowAndFade(gfx); DecompressAndCopyTileDataToVram(3, sPokeball_Gfx, 0, 0, 0); - CopyPaletteIntoBufferUnfaded(sListWindow_Pal, 0x30, 0x20); - CopyPaletteIntoBufferUnfaded(sPokeball_Pal, 0x50, 0x20); + CopyPaletteIntoBufferUnfaded(sListWindow_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sPokeball_Pal, BG_PLTT_ID(5), PLTT_SIZE_4BPP); return LT_INC_AND_PAUSE; case 3: if (FreeTempTileDataBuffersIfPossible() || !IsMatchCallListInitFinished()) @@ -1102,7 +1102,7 @@ static void DrawMsgBoxForMatchCallMsg(struct Pokenav_MatchCallGfx *gfx) static void DrawMsgBoxForCloseByMsg(struct Pokenav_MatchCallGfx *gfx) { - LoadUserWindowBorderGfx(gfx->msgBoxWindowId, 1, 0x40); + LoadUserWindowBorderGfx(gfx->msgBoxWindowId, 1, BG_PLTT_ID(4)); DrawTextBorderOuter(gfx->msgBoxWindowId, 1, 4); FillWindowPixelBuffer(gfx->msgBoxWindowId, PIXEL_FILL(1)); PutWindowTilemap(gfx->msgBoxWindowId); @@ -1186,7 +1186,7 @@ static void AllocMatchCallSprites(void) spriteSheet.tag = GFXTAG_TRAINER_PIC; gfx->trainerPicGfxPtr = (u8 *)OBJ_VRAM0 + LoadSpriteSheet(&spriteSheet) * 0x20; paletteNum = AllocSpritePalette(PALTAG_TRAINER_PIC); - gfx->trainerPicPalOffset = 0x100 + paletteNum * 0x10; + gfx->trainerPicPalOffset = OBJ_PLTT_ID(paletteNum); gfx->trainerPicSprite = CreateTrainerPicSprite(); gfx->trainerPicSprite->invisible = TRUE; } diff --git a/src/pokenav_menu_handler_gfx.c b/src/pokenav_menu_handler_gfx.c index 291c10ce9e1a..0c664a0d07c1 100644 --- a/src/pokenav_menu_handler_gfx.c +++ b/src/pokenav_menu_handler_gfx.c @@ -457,7 +457,7 @@ static u32 LoopedTask_OpenMenu(s32 state) SetBgTilemapBuffer(1, gfx->bg1TilemapBuffer); CopyToBgTilemapBuffer(1, gPokenavMessageBox_Tilemap, 0, 0); CopyBgTilemapBufferToVram(1); - CopyPaletteIntoBufferUnfaded(gPokenavMessageBox_Pal, 0x10, 0x20); + CopyPaletteIntoBufferUnfaded(gPokenavMessageBox_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); ChangeBgX(1, 0, BG_COORD_SET); ChangeBgY(1, 0, BG_COORD_SET); ChangeBgX(2, 0, BG_COORD_SET); @@ -470,14 +470,14 @@ static u32 LoopedTask_OpenMenu(s32 state) return LT_PAUSE; DecompressAndCopyTileDataToVram(2, sPokenavDeviceBgTiles, 0, 0, 0); DecompressAndCopyTileDataToVram(2, sPokenavDeviceBgTilemap, 0, 0, 1); - CopyPaletteIntoBufferUnfaded(sPokenavDeviceBgPal, 0x20, 0x20); + CopyPaletteIntoBufferUnfaded(sPokenavDeviceBgPal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); return LT_INC_AND_PAUSE; case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; DecompressAndCopyTileDataToVram(3, sPokenavBgDotsTiles, 0, 0, 0); DecompressAndCopyTileDataToVram(3, sPokenavBgDotsTilemap, 0, 0, 1); - CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal, 0x30, 0x20); + CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); if (GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION || GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION_SEARCH) ChangeBgDotsColorToPurple(); return LT_INC_AND_PAUSE; @@ -1270,7 +1270,7 @@ static void CreateBgDotPurplePalTask(void) static void ChangeBgDotsColorToPurple(void) { - CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal + 7, 0x31, 4); + CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal + 7, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(2)); } static void CreateBgDotLightBluePalTask(void) @@ -1293,7 +1293,7 @@ static void Task_UpdateBgDotsPalette(u8 taskId) const u16 * pal2 = (const u16 *)GetWordTaskArg(taskId, 3); PokenavCopyPalette(pal1, pal2, 2, 12, ++data[0], sp8); - LoadPalette(sp8, 0x31, 4); + LoadPalette(sp8, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(2)); if (data[0] == 12) DestroyTask(taskId); } diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index 036ea5ff10e0..50f01345c8d8 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -509,14 +509,14 @@ static void LoadPokenavRegionMapGfx(struct Pokenav_RegionMapGfx *state) CpuFill16(0x1040, state->tilemapBuffer, 0x800); SetBgTilemapBuffer(1, state->tilemapBuffer); state->infoWindowId = AddWindow(&sMapSecInfoWindowTemplate); - LoadUserWindowBorderGfx_(state->infoWindowId, 0x42, 0x40); + LoadUserWindowBorderGfx_(state->infoWindowId, 0x42, BG_PLTT_ID(4)); DrawTextBorderOuter(state->infoWindowId, 0x42, 4); DecompressAndCopyTileDataToVram(1, sRegionMapCityZoomTiles_Gfx, 0, 0, 0); FillWindowPixelBuffer(state->infoWindowId, PIXEL_FILL(1)); PutWindowTilemap(state->infoWindowId); CopyWindowToVram(state->infoWindowId, COPYWIN_FULL); - CopyPaletteIntoBufferUnfaded(sMapSecInfoWindow_Pal, 0x10, 0x20); - CopyPaletteIntoBufferUnfaded(gRegionMapCityZoomTiles_Pal, 0x30, 0x20); + CopyPaletteIntoBufferUnfaded(sMapSecInfoWindow_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(gRegionMapCityZoomTiles_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); if (!IsRegionMapZoomed()) ChangeBgY(1, -0x6000, BG_COORD_SET); else diff --git a/src/pokenav_ribbons_list.c b/src/pokenav_ribbons_list.c index cf5f99104e24..075bcc7ce27b 100644 --- a/src/pokenav_ribbons_list.c +++ b/src/pokenav_ribbons_list.c @@ -2,6 +2,7 @@ #include "pokenav.h" #include "bg.h" #include "menu.h" +#include "palette.h" #include "window.h" #include "sound.h" #include "string_util.h" @@ -431,7 +432,7 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) DecompressAndCopyTileDataToVram(1, sMonRibbonListFrameTiles, 0, 0, 0); SetBgTilemapBuffer(1, menu->buff); CopyToBgTilemapBuffer(1, sMonRibbonListFrameTilemap, 0, 0); - CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, 0x10, 0x20); + CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: @@ -446,7 +447,7 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - CopyPaletteIntoBufferUnfaded(sMonRibbonListUi_Pal, 0x20, 0x20); + CopyPaletteIntoBufferUnfaded(sMonRibbonListUi_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); CreateRibbonMonsList(); return LT_INC_AND_PAUSE; case 3: diff --git a/src/pokenav_ribbons_summary.c b/src/pokenav_ribbons_summary.c index 3bc7cb236cbf..f9432c834968 100644 --- a/src/pokenav_ribbons_summary.c +++ b/src/pokenav_ribbons_summary.c @@ -3,6 +3,7 @@ #include "dynamic_placeholder_text_util.h" #include "graphics.h" #include "international_string_util.h" +#include "palette.h" #include "pokenav.h" #include "sound.h" #include "sprite.h" @@ -572,7 +573,7 @@ static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) DecompressAndCopyTileDataToVram(2, gPokenavRibbonsSummaryBg_Gfx, 0, 0, 0); SetBgTilemapBuffer(2, menu->tilemapBuffers[0]); CopyToBgTilemapBuffer(2, gPokenavRibbonsSummaryBg_Tilemap, 0, 0); - CopyPaletteIntoBufferUnfaded(gPokenavRibbonsSummaryBg_Pal, 0x10, 0x20); + CopyPaletteIntoBufferUnfaded(gPokenavRibbonsSummaryBg_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); CopyBgTilemapBufferToVram(2); return LT_INC_AND_PAUSE; case 1: @@ -582,8 +583,8 @@ static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) DecompressAndCopyTileDataToVram(1, sRibbonIconsSmall_Gfx, 0, 1, 0); SetBgTilemapBuffer(1, menu->tilemapBuffers[1]); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); - CopyPaletteIntoBufferUnfaded(sRibbonIcons1_Pal, 0x20, 0xA0); - CopyPaletteIntoBufferUnfaded(sMonInfo_Pal, 0xA0, 0x20); + CopyPaletteIntoBufferUnfaded(sRibbonIcons1_Pal, BG_PLTT_ID(2), 5 * PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMonInfo_Pal, BG_PLTT_ID(10), PLTT_SIZE_4BPP); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; } diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c index 83298b03df45..c984dfec8a18 100644 --- a/src/rayquaza_scene.c +++ b/src/rayquaza_scene.c @@ -1301,7 +1301,7 @@ static void CB2_InitRayquazaScene(void) ResetPaletteFade(); ResetSpriteData(); ResetTasks(); - FillPalette(RGB_BLACK, 0xF0, 32); + FillPalette(RGB_BLACK, BG_PLTT_ID(15), PLTT_SIZE_4BPP); CreateTask(sTasksForAnimations[sRayScene->animId], 0); SetMainCallback2(CB2_RayquazaScene); } @@ -1592,7 +1592,7 @@ static void LoadDuoFightSceneGfx(void) LZDecompressWram(gRaySceneDuoFight_Clouds2_Tilemap, sRayScene->tilemapBuffers[0]); LZDecompressWram(gRaySceneDuoFight_Clouds1_Tilemap, sRayScene->tilemapBuffers[1]); LZDecompressWram(gRaySceneDuoFight_Clouds3_Tilemap, sRayScene->tilemapBuffers[2]); - LoadCompressedPalette(gRaySceneDuoFight_Clouds_Pal, 0, 0x40); + LoadCompressedPalette(gRaySceneDuoFight_Clouds_Pal, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); LoadCompressedSpriteSheet(&sSpriteSheet_DuoFight_Groudon); LoadCompressedSpriteSheet(&sSpriteSheet_DuoFight_GroudonShoulder); LoadCompressedSpriteSheet(&sSpriteSheet_DuoFight_GroudonClaw); @@ -2032,7 +2032,7 @@ static void LoadTakesFlightSceneGfx(void) LZDecompressWram(gRaySceneDuoFight_Clouds2_Tilemap, sRayScene->tilemapBuffers[0]); LZDecompressWram(gRaySceneTakesFlight_Bg_Tilemap, sRayScene->tilemapBuffers[1]); LZDecompressWram(gRaySceneTakesFlight_Rayquaza_Tilemap, sRayScene->tilemapBuffers[2]); - LoadCompressedPalette(gRaySceneTakesFlight_Rayquaza_Pal, 0, 64); + LoadCompressedPalette(gRaySceneTakesFlight_Rayquaza_Pal, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); LoadCompressedSpriteSheet(&sSpriteSheet_TakesFlight_Smoke); LoadCompressedSpritePalette(&sSpritePal_TakesFlight_Smoke); } @@ -2238,7 +2238,7 @@ static void LoadDescendsSceneGfx(void) CpuFastCopy(sRayScene->tilemapBuffers[3], sRayScene->tilemapBuffers[1], BG_SCREEN_SIZE); CpuFastFill16(0, &sRayScene->tilemapBuffers[1][0x100], 0x340); - LoadCompressedPalette(gRaySceneDescends_Bg_Pal, 0, 0x40); + LoadCompressedPalette(gRaySceneDescends_Bg_Pal, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); gPlttBufferUnfaded[0] = RGB_WHITE; gPlttBufferFaded[0] = RGB_WHITE; LoadCompressedSpriteSheet(&sSpriteSheet_Descends_Rayquaza); @@ -2487,7 +2487,7 @@ static void LoadChargesSceneGfx(void) LZDecompressWram(gRaySceneCharges_Rayquaza_Tilemap, sRayScene->tilemapBuffers[1]); LZDecompressWram(gRaySceneCharges_Streaks_Tilemap, sRayScene->tilemapBuffers[2]); LZDecompressWram(gRaySceneCharges_Bg_Tilemap, sRayScene->tilemapBuffers[3]); - LoadCompressedPalette(gRaySceneCharges_Bg_Pal, 0, 0x80); + LoadCompressedPalette(gRaySceneCharges_Bg_Pal, BG_PLTT_ID(0), 4 * PLTT_SIZE_4BPP); } #define tState data[0] @@ -2671,7 +2671,7 @@ static void LoadChasesAwaySceneGfx(void) LZDecompressWram(gRaySceneChasesAway_Bg_Tilemap, sRayScene->tilemapBuffers[1]); LZDecompressWram(gRaySceneChasesAway_Light_Tilemap, sRayScene->tilemapBuffers[0]); LZDecompressWram(gRaySceneChasesAway_Ring_Tilemap, sRayScene->tilemapBuffers[2]); - LoadCompressedPalette(gRaySceneChasesAway_Bg_Pal, 0, 0x60); + LoadCompressedPalette(gRaySceneChasesAway_Bg_Pal, BG_PLTT_ID(0), 3 * PLTT_SIZE_4BPP); LoadCompressedSpriteSheet(&sSpriteSheet_ChasesAway_Groudon); LoadCompressedSpriteSheet(&sSpriteSheet_ChasesAway_GroudonTail); LoadCompressedSpriteSheet(&sSpriteSheet_ChasesAway_Kyogre); diff --git a/src/record_mixing.c b/src/record_mixing.c index 5d75f3fc8962..d6edd078b700 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -59,23 +59,23 @@ struct PlayerRecordRS struct RecordMixingDaycareMail daycareMail; struct RSBattleTowerRecord battleTowerRecord; u16 giftItem; - u16 padding[50]; + u16 filler[50]; }; struct PlayerRecordEmerald { /* 0x0000 */ struct SecretBase secretBases[SECRET_BASES_COUNT]; - /* 0x0c80 */ TVShow tvShows[TV_SHOWS_COUNT]; + /* 0x0C80 */ TVShow tvShows[TV_SHOWS_COUNT]; /* 0x1004 */ PokeNews pokeNews[POKE_NEWS_COUNT]; /* 0x1044 */ OldMan oldMan; /* 0x1084 */ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT]; - /* 0x10ac */ struct RecordMixingDaycareMail daycareMail; + /* 0x10AC */ struct RecordMixingDaycareMail daycareMail; /* 0x1124 */ struct EmeraldBattleTowerRecord battleTowerRecord; /* 0x1210 */ u16 giftItem; /* 0x1214 */ LilycoveLady lilycoveLady; /* 0x1254 */ struct Apprentice apprentices[2]; - /* 0x12dc */ struct PlayerHallRecords hallRecords; - /* 0x1434 */ u8 padding[16]; + /* 0x12DC */ struct PlayerHallRecords hallRecords; + /* 0x1434 */ u8 filler_1434[16]; }; // 0x1444 union PlayerRecord diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 33228255d21e..4cfa0e4c0c32 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -14,14 +14,13 @@ #include "malloc.h" #include "util.h" #include "task.h" +#include "test_runner.h" #include "text.h" #include "battle_setup.h" #include "frontier_util.h" #include "constants/trainers.h" #include "constants/rgb.h" -#define BATTLER_RECORD_SIZE 664 - struct PlayerInfo { u32 trainerId; @@ -31,37 +30,6 @@ struct PlayerInfo u16 language; }; -struct RecordedBattleSave -{ - struct Pokemon playerParty[PARTY_SIZE]; - struct Pokemon opponentParty[PARTY_SIZE]; - u8 playersName[MAX_BATTLERS_COUNT][PLAYER_NAME_LENGTH + 1]; - u8 playersGender[MAX_BATTLERS_COUNT]; - u32 playersTrainerId[MAX_BATTLERS_COUNT]; - u8 playersLanguage[MAX_BATTLERS_COUNT]; - u32 rngSeed; - u32 battleFlags; - u8 playersBattlers[MAX_BATTLERS_COUNT]; - u16 opponentA; - u16 opponentB; - u16 partnerId; - u16 multiplayerId; - u8 lvlMode; - u8 frontierFacility; - u8 frontierBrainSymbol; - u8 battleScene:1; - u8 textSpeed:3; - u32 AI_scripts; - u8 recordMixFriendName[PLAYER_NAME_LENGTH + 1]; - u8 recordMixFriendClass; - u8 apprenticeId; - 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); @@ -205,8 +173,11 @@ void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear) } } -u8 RecordedBattle_GetBattlerAction(u8 battlerId) +u8 RecordedBattle_GetBattlerAction(u32 actionType, u8 battlerId) { + if (gTestRunnerEnabled) + BattleTest_CheckBattleRecordActionType(battlerId, sBattlerRecordSizes[battlerId], actionType); + // Trying to read past array or invalid action byte, battle is over. if (sBattlerRecordSizes[battlerId] >= BATTLER_RECORD_SIZE || sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]] == 0xFF) { @@ -522,7 +493,7 @@ static void Task_StartAfterCountdown(u8 taskId) } } -static void SetVariablesForRecordedBattle(struct RecordedBattleSave *src) +void SetVariablesForRecordedBattle(struct RecordedBattleSave *src) { bool8 var; s32 i, j; @@ -755,14 +726,14 @@ void RecordedBattle_CheckMovesetChanges(u8 mode) // We know the current action is ACTION_MOVE_CHANGE, retrieve // it without saving it to move on to the next action. - RecordedBattle_GetBattlerAction(battlerId); + RecordedBattle_GetBattlerAction(RECORDED_BYTE, 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++) { - moveSlots[j] = RecordedBattle_GetBattlerAction(battlerId); + moveSlots[j] = RecordedBattle_GetBattlerAction(RECORDED_BYTE, battlerId); movePp.moves[j] = gBattleMons[battlerId].moves[moveSlots[j]]; movePp.currentPp[j] = gBattleMons[battlerId].pp[moveSlots[j]]; movePp.maxPp[j] = ppBonuses[moveSlots[j]]; diff --git a/src/region_map.c b/src/region_map.c index 67f1643d6cde..ebe3afb8e9d5 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -53,6 +53,13 @@ enum { TAG_FLY_ICON, }; +// Window IDs for the fly map +enum { + WIN_MAPSEC_NAME, + WIN_MAPSEC_NAME_TALL, // For fly destinations with subtitles (just Ever Grande) + WIN_FLY_TO_WHERE, +}; + struct MultiNameFlyDest { const u8 *const *name; @@ -378,7 +385,7 @@ static const struct BgTemplate sFlyMapBgTemplates[] = static const struct WindowTemplate sFlyMapWindowTemplates[] = { - { + [WIN_MAPSEC_NAME] = { .bg = 0, .tilemapLeft = 17, .tilemapTop = 17, @@ -387,7 +394,7 @@ static const struct WindowTemplate sFlyMapWindowTemplates[] = .paletteNum = 15, .baseBlock = 0x01 }, - { + [WIN_MAPSEC_NAME_TALL] = { .bg = 0, .tilemapLeft = 17, .tilemapTop = 15, @@ -396,7 +403,7 @@ static const struct WindowTemplate sFlyMapWindowTemplates[] = .paletteNum = 15, .baseBlock = 0x19 }, - { + [WIN_FLY_TO_WHERE] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 18, @@ -557,7 +564,7 @@ bool8 LoadRegionMapGfx(void) break; case 2: if (!FreeTempTileDataBuffersIfPossible()) - LoadPalette(sRegionMapBg_Pal, 0x70, 0x60); + LoadPalette(sRegionMapBg_Pal, BG_PLTT_ID(7), 3 * PLTT_SIZE_4BPP); break; case 3: LZ77UnCompWram(sRegionMapCursorSmallGfxLZ, sRegionMap->cursorSmallImage); @@ -1394,7 +1401,7 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) } LoadSpriteSheet(&sheet); LoadSpritePalette(&palette); - spriteId = CreateSprite(&template, 0x38, 0x48, 0); + spriteId = CreateSprite(&template, 56, 72, 0); if (spriteId != MAX_SPRITES) { sRegionMap->cursorSprite = &gSprites[spriteId]; @@ -1679,7 +1686,7 @@ void CB2_OpenFlyMap(void) gMain.state++; break; case 3: - LoadUserWindowBorderGfx(0, 0x65, 0xd0); + LoadUserWindowBorderGfx(0, 0x65, BG_PLTT_ID(13)); ClearScheduledBgCopiesToVram(); gMain.state++; break; @@ -1702,10 +1709,10 @@ void CB2_OpenFlyMap(void) gMain.state++; break; case 7: - LoadPalette(sRegionMapFramePal, 0x10, sizeof(sRegionMapFramePal)); - PutWindowTilemap(2); - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized(2, FONT_NORMAL, gText_FlyToWhere, 0, 1, 0, NULL); + LoadPalette(sRegionMapFramePal, BG_PLTT_ID(1), sizeof(sRegionMapFramePal)); + PutWindowTilemap(WIN_FLY_TO_WHERE); + FillWindowPixelBuffer(WIN_FLY_TO_WHERE, PIXEL_FILL(0)); + AddTextPrinterParameterized(WIN_FLY_TO_WHERE, FONT_NORMAL, gText_FlyToWhere, 0, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); gMain.state++; break; @@ -1758,7 +1765,7 @@ static void DrawFlyDestTextWindow(void) bool32 namePrinted; const u8 *name; - if (sFlyMap->regionMap.mapSecType > MAPSECTYPE_NONE && sFlyMap->regionMap.mapSecType <= MAPSECTYPE_BATTLE_FRONTIER) + if (sFlyMap->regionMap.mapSecType > MAPSECTYPE_NONE && sFlyMap->regionMap.mapSecType < NUM_MAPSEC_TYPES) { namePrinted = FALSE; for (i = 0; i < ARRAY_COUNT(sMultiNameFlyDestinations); i++) @@ -1769,11 +1776,11 @@ static void DrawFlyDestTextWindow(void) { StringLength(sMultiNameFlyDestinations[i].name[sFlyMap->regionMap.posWithinMapSec]); namePrinted = TRUE; - ClearStdWindowAndFrameToTransparent(0, FALSE); - DrawStdFrameWithCustomTileAndPalette(1, FALSE, 101, 13); - AddTextPrinterParameterized(1, FONT_NORMAL, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); + ClearStdWindowAndFrameToTransparent(WIN_MAPSEC_NAME, FALSE); + DrawStdFrameWithCustomTileAndPalette(WIN_MAPSEC_NAME_TALL, FALSE, 101, 13); + AddTextPrinterParameterized(WIN_MAPSEC_NAME_TALL, FONT_NORMAL, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); name = sMultiNameFlyDestinations[i].name[sFlyMap->regionMap.posWithinMapSec]; - AddTextPrinterParameterized(1, FONT_NORMAL, name, GetStringRightAlignXOffset(FONT_NORMAL, name, 96), 17, 0, NULL); + AddTextPrinterParameterized(WIN_MAPSEC_NAME_TALL, FONT_NORMAL, name, GetStringRightAlignXOffset(FONT_NORMAL, name, 96), 17, 0, NULL); ScheduleBgCopyTilemapToVram(0); sDrawFlyDestTextWindow = TRUE; } @@ -1784,15 +1791,15 @@ static void DrawFlyDestTextWindow(void) { if (sDrawFlyDestTextWindow == TRUE) { - ClearStdWindowAndFrameToTransparent(1, FALSE); - DrawStdFrameWithCustomTileAndPalette(0, FALSE, 101, 13); + ClearStdWindowAndFrameToTransparent(WIN_MAPSEC_NAME_TALL, FALSE); + DrawStdFrameWithCustomTileAndPalette(WIN_MAPSEC_NAME, FALSE, 101, 13); } else { // Window is already drawn, just empty it - FillWindowPixelBuffer(0, PIXEL_FILL(1)); + FillWindowPixelBuffer(WIN_MAPSEC_NAME, PIXEL_FILL(1)); } - AddTextPrinterParameterized(0, FONT_NORMAL, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); + AddTextPrinterParameterized(WIN_MAPSEC_NAME, FONT_NORMAL, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); sDrawFlyDestTextWindow = FALSE; } @@ -1802,11 +1809,11 @@ static void DrawFlyDestTextWindow(void) // Selection is on MAPSECTYPE_NONE, draw empty fly destination text window if (sDrawFlyDestTextWindow == TRUE) { - ClearStdWindowAndFrameToTransparent(1, FALSE); - DrawStdFrameWithCustomTileAndPalette(0, FALSE, 101, 13); + ClearStdWindowAndFrameToTransparent(WIN_MAPSEC_NAME_TALL, FALSE); + DrawStdFrameWithCustomTileAndPalette(WIN_MAPSEC_NAME, FALSE, 101, 13); } - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - CopyWindowToVram(0, COPYWIN_GFX); + FillWindowPixelBuffer(WIN_MAPSEC_NAME, PIXEL_FILL(1)); + CopyWindowToVram(WIN_MAPSEC_NAME, COPYWIN_GFX); ScheduleBgCopyTilemapToVram(0); sDrawFlyDestTextWindow = FALSE; } diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c index 5c9314867548..98ccb71b640d 100644 --- a/src/reset_rtc_screen.c +++ b/src/reset_rtc_screen.c @@ -49,6 +49,11 @@ enum { SELECTION_NONE }; +enum { + WIN_TIME, + WIN_MSG, +}; + struct ResetRtcInputMap { /*0x0*/ u8 dataIndex; @@ -79,7 +84,7 @@ static const struct BgTemplate sBgTemplates[] = static const struct WindowTemplate sWindowTemplates[] = { - { + [WIN_TIME] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 1, @@ -88,7 +93,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 0x155 }, - { + [WIN_MSG] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 15, @@ -562,8 +567,8 @@ static void VBlankCB(void) static void ShowMessage(const u8 *str) { - DrawDialogFrameWithCustomTileAndPalette(1, FALSE, 0x200, 0xF); - AddTextPrinterParameterized(1, FONT_NORMAL, str, 0, 1, 0, NULL); + DrawDialogFrameWithCustomTileAndPalette(WIN_MSG, FALSE, 0x200, 0xF); + AddTextPrinterParameterized(WIN_MSG, FONT_NORMAL, str, 0, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); } @@ -576,11 +581,11 @@ static void Task_ShowResetRtcPrompt(u8 taskId) switch (tState) { case 0: - DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x214, 0xE); + DrawStdFrameWithCustomTileAndPalette(WIN_TIME, FALSE, 0x214, 0xE); - AddTextPrinterParameterized(0, FONT_NORMAL, gText_PresentTime, 0, 1, TEXT_SKIP_DRAW, 0); + AddTextPrinterParameterized(WIN_TIME, FONT_NORMAL, gText_PresentTime, 0, 1, TEXT_SKIP_DRAW, 0); PrintTime( - 0, + WIN_TIME, 0, 17, gLocalTime.days, @@ -588,9 +593,9 @@ static void Task_ShowResetRtcPrompt(u8 taskId) gLocalTime.minutes, gLocalTime.seconds); - AddTextPrinterParameterized(0, FONT_NORMAL, gText_PreviousTime, 0, 33, TEXT_SKIP_DRAW, 0); + AddTextPrinterParameterized(WIN_TIME, FONT_NORMAL, gText_PreviousTime, 0, 33, TEXT_SKIP_DRAW, 0); PrintTime( - 0, + WIN_TIME, 0, 49, gSaveBlock2Ptr->lastBerryTreeUpdate.days, @@ -599,7 +604,7 @@ static void Task_ShowResetRtcPrompt(u8 taskId) gSaveBlock2Ptr->lastBerryTreeUpdate.seconds); ShowMessage(gText_ResetRTCConfirmCancel); - CopyWindowToVram(0, COPYWIN_GFX); + CopyWindowToVram(WIN_TIME, COPYWIN_GFX); ScheduleBgCopyTilemapToVram(0); tState++; case 1: @@ -666,7 +671,7 @@ static void Task_ResetRtcScreen(u8 taskId) // Wait for A or B press on prompt first if (gTasks[tSubTaskId].isActive != TRUE) { - ClearStdWindowAndFrameToTransparent(0, FALSE); + ClearStdWindowAndFrameToTransparent(WIN_TIME, FALSE); ShowMessage(gText_PleaseResetTime); gLocalTime = gSaveBlock2Ptr->lastBerryTreeUpdate; tSubTaskId = CreateTask(Task_ResetRtc_Init, 80); diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 16310a7c3664..b24db3f8764e 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -258,6 +258,8 @@ static void CreateBattlerSprite(u8 battler) { if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0) return; + if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_IS_EGG)) + return; SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler)); gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler)); @@ -311,7 +313,7 @@ static void CreateHealthboxSprite(u8 battler) } else if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) { - if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0) + if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0 || GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_IS_EGG)) SetHealthboxSpriteInvisible(healthboxSpriteId); } } diff --git a/src/rom_header_gf.c b/src/rom_header_gf.c index 558bfdb8c88a..118cc5e27706 100644 --- a/src/rom_header_gf.c +++ b/src/rom_header_gf.c @@ -69,7 +69,7 @@ struct GFRomHeader u32 externalEventFlagsOffset; u32 externalEventDataOffset; u32 unk18; - const struct BaseStats * baseStats; + const struct SpeciesInfo * speciesInfo; const u8 (* abilityNames)[]; const u8 *const * abilityDescriptions; const struct Item * items; @@ -150,7 +150,7 @@ static const struct GFRomHeader sGFRomHeader = { .externalEventFlagsOffset = offsetof(struct SaveBlock1, externalEventFlags), .externalEventDataOffset = offsetof(struct SaveBlock1, externalEventData), .unk18 = 0x00000000, - .baseStats = gBaseStats, + .speciesInfo = gSpeciesInfo, .abilityNames = gAbilityNames, .abilityDescriptions = gAbilityDescriptionPointers, .items = gItems, diff --git a/src/rotating_gate.c b/src/rotating_gate.c index d1184dae018b..f9e732eb7410 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -264,14 +264,14 @@ static const struct OamData sOamData_RotatingGateRegular = static const struct SpriteSheet sRotatingGatesGraphicsTable[] = { - {sRotatingGateTiles_1, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L1}, - {sRotatingGateTiles_2, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L2}, - {sRotatingGateTiles_3, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L3}, - {sRotatingGateTiles_4, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L4}, - {sRotatingGateTiles_5, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T1}, - {sRotatingGateTiles_6, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T2}, - {sRotatingGateTiles_7, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T3}, - {sRotatingGateTiles_8, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T4}, + {sRotatingGateTiles_1, sizeof(sRotatingGateTiles_1), ROTATING_GATE_TILE_TAG + GATE_SHAPE_L1}, + {sRotatingGateTiles_2, sizeof(sRotatingGateTiles_2), ROTATING_GATE_TILE_TAG + GATE_SHAPE_L2}, + {sRotatingGateTiles_3, sizeof(sRotatingGateTiles_3), ROTATING_GATE_TILE_TAG + GATE_SHAPE_L3}, + {sRotatingGateTiles_4, sizeof(sRotatingGateTiles_4), ROTATING_GATE_TILE_TAG + GATE_SHAPE_L4}, + {sRotatingGateTiles_5, sizeof(sRotatingGateTiles_5), ROTATING_GATE_TILE_TAG + GATE_SHAPE_T1}, + {sRotatingGateTiles_6, sizeof(sRotatingGateTiles_6), ROTATING_GATE_TILE_TAG + GATE_SHAPE_T2}, + {sRotatingGateTiles_7, sizeof(sRotatingGateTiles_7), ROTATING_GATE_TILE_TAG + GATE_SHAPE_T3}, + {sRotatingGateTiles_8, sizeof(sRotatingGateTiles_8), ROTATING_GATE_TILE_TAG + GATE_SHAPE_T4}, {NULL}, }; diff --git a/src/roulette.c b/src/roulette.c index 52efc8779fd3..283cceebfe57 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -1195,7 +1195,7 @@ static void CB2_LoadRoulette(void) ResetTempTileDataBuffers(); break; case 3: - LoadPalette(&sWheel_Pal, 0, 0x1C0); + LoadPalette(&sWheel_Pal, BG_PLTT_ID(0), 14 * PLTT_SIZE_4BPP); DecompressAndCopyTileDataToVram(1, gRouletteMenu_Gfx, 0, 0, 0); DecompressAndCopyTileDataToVram(2, gRouletteWheel_Gfx, 0, 0, 0); break; @@ -2167,16 +2167,16 @@ static void FlashSelectionOnWheel(u8 selectionId) // The specific color of the poke it references doesn't matter, because the icons of a poke share a palette // So it just uses the first sprite ID of each case COL_WYNAUT: - palOffset = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_ORANGE_WYNAUT]].oam.paletteNum * 16; + palOffset = PLTT_ID(gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_ORANGE_WYNAUT]].oam.paletteNum); break; case COL_AZURILL: - palOffset = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_GREEN_AZURILL]].oam.paletteNum * 16; + palOffset = PLTT_ID(gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_GREEN_AZURILL]].oam.paletteNum); break; case COL_SKITTY: - palOffset = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_PURPLE_SKITTY]].oam.paletteNum * 16; + palOffset = PLTT_ID(gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_PURPLE_SKITTY]].oam.paletteNum); break; case COL_MAKUHITA: - palOffset = gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_ORANGE_MAKUHITA]].oam.paletteNum * 16; + palOffset = PLTT_ID(gSprites[sRoulette->spriteIds[SPR_WHEEL_ICON_ORANGE_MAKUHITA]].oam.paletteNum); break; } if (numSelected == 1) diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index 877482728f6b..f7f0162ff412 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -196,7 +196,7 @@ static void CB2_SaveFailedScreen(void) DmaFill16(3, 0, VRAM, VRAM_SIZE); DmaFill32(3, 0, OAM, OAM_SIZE); DmaFill16(3, 0, PLTT, PLTT_SIZE); - LZ77UnCompVram(gBirchHelpGfx, (void *)VRAM); + LZ77UnCompVram(gBirchBagGrass_Gfx, (void *)VRAM); LZ77UnCompVram(gBirchBagTilemap, (void *)(BG_SCREEN_ADDR(14))); LZ77UnCompVram(gBirchGrassTilemap, (void *)(BG_SCREEN_ADDR(15))); LZ77UnCompVram(sSaveFailedClockGfx, (void *)(OBJ_VRAM0 + 0x20)); @@ -214,10 +214,10 @@ static void CB2_SaveFailedScreen(void) ResetSpriteData(); ResetTasks(); ResetPaletteFade(); - LoadPalette(gBirchBagGrassPal, 0, 0x40); - LoadPalette(sSaveFailedClockPal, 0x100, 0x20); - LoadPalette(gTextWindowFrame1_Pal, 0xE0, 0x20); - LoadPalette(gStandardMenuPalette, 0xF0, 0x20); + LoadPalette(gBirchBagGrass_Pal, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); + LoadPalette(sSaveFailedClockPal, OBJ_PLTT_ID(0), PLTT_SIZE_4BPP); + LoadPalette(gTextWindowFrame1_Pal, BG_PLTT_ID(14), PLTT_SIZE_4BPP); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); 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? diff --git a/src/scrcmd.c b/src/scrcmd.c index 745e0d8822f4..7b51df9f926e 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1524,7 +1524,7 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx) winTemplate = CreateWindowTemplate(0, xWindow, yWindow + 1, width, height, 0xF, 0x1); sBrailleWindowId = AddWindow(&winTemplate); - LoadUserWindowBorderGfx(sBrailleWindowId, 0x214, 0xE0); + LoadUserWindowBorderGfx(sBrailleWindowId, 0x214, BG_PLTT_ID(14)); DrawStdWindowFrame(sBrailleWindowId, FALSE); PutWindowTilemap(sBrailleWindowId); FillWindowPixelBuffer(sBrailleWindowId, PIXEL_FILL(1)); diff --git a/src/secret_base.c b/src/secret_base.c index ea199934399e..1a4a0ac9cdc6 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -214,7 +214,7 @@ static const struct ListMenuTemplate sRegistryListMenuTemplate = .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, .fontId = FONT_NORMAL, - .cursorKind = 0, + .cursorKind = CURSOR_BLACK_ARROW, }; static void ClearSecretBase(struct SecretBase *secretBase) @@ -953,7 +953,7 @@ static void BuildRegistryMenuItems(u8 taskId) } sRegistryMenu->items[count].name = gText_Cancel; - sRegistryMenu->items[count].id = -2; + sRegistryMenu->items[count].id = LIST_CANCEL; tNumBases = count + 1; if (tNumBases < 8) tMaxShownItems = tNumBases; diff --git a/src/shop.c b/src/shop.c index b34bded8441d..8fea1e1178b4 100644 --- a/src/shop.c +++ b/src/shop.c @@ -216,7 +216,7 @@ static const struct ListMenuTemplate sShopBuyMenuListTemplate = .itemVerticalPadding = 0, .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, .fontId = FONT_NARROW, - .cursorKind = 0 + .cursorKind = CURSOR_BLACK_ARROW }; static const struct BgTemplate sShopBuyMenuBgTemplates[] = @@ -740,15 +740,15 @@ static void BuyMenuDecompressBgGraphics(void) { DecompressAndCopyTileDataToVram(1, gShopMenu_Gfx, 0x3A0, 0x3E3, 0); LZDecompressWram(gShopMenu_Tilemap, sShopData->tilemapBuffers[0]); - LoadCompressedPalette(gShopMenu_Pal, 0xC0, 0x20); + LoadCompressedPalette(gShopMenu_Pal, BG_PLTT_ID(12), PLTT_SIZE_4BPP); } static void BuyMenuInitWindows(void) { InitWindows(sShopBuyMenuWindowTemplates); DeactivateAllTextPrinters(); - LoadUserWindowBorderGfx(WIN_MONEY, 1, 0xD0); - LoadMessageBoxGfx(WIN_MONEY, 0xA, 0xE0); + LoadUserWindowBorderGfx(WIN_MONEY, 1, BG_PLTT_ID(13)); + LoadMessageBoxGfx(WIN_MONEY, 0xA, BG_PLTT_ID(14)); PutWindowTilemap(WIN_MONEY); PutWindowTilemap(WIN_ITEM_LIST); PutWindowTilemap(WIN_ITEM_DESCRIPTION); @@ -808,9 +808,9 @@ static void BuyMenuDrawMapBg(void) metatileLayerType = METATILE_LAYER_TYPE_COVERED; if (metatile < NUM_METATILES_IN_PRIMARY) - BuyMenuDrawMapMetatile(i, j, mapLayout->primaryTileset->metatiles + metatile * 8, metatileLayerType); + BuyMenuDrawMapMetatile(i, j, mapLayout->primaryTileset->metatiles + metatile * NUM_TILES_PER_METATILE, metatileLayerType); else - BuyMenuDrawMapMetatile(i, j, mapLayout->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType); + BuyMenuDrawMapMetatile(i, j, mapLayout->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * NUM_TILES_PER_METATILE), metatileLayerType); } } } diff --git a/src/slot_machine.c b/src/slot_machine.c index 8a67acae36c6..2fc0e2c03541 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -1247,8 +1247,8 @@ static void SlotMachineSetup_LoadGfxAndTilemaps(void) LoadMenuGfx(); LoadMenuAndReelOverlayTilemaps(); LoadSlotMachineGfx(); - LoadMessageBoxGfx(0, 0x200, 0xF0); - LoadUserWindowBorderGfx(0, 0x214, 0xE0); + LoadMessageBoxGfx(0, 0x200, BG_PLTT_ID(15)); + LoadUserWindowBorderGfx(0, 0x214, BG_PLTT_ID(14)); PutWindowTilemap(0); } @@ -3211,12 +3211,12 @@ static void StopReelButton_Unpress(struct Task *task, u8 taskId) static void LightenMatchLine(u8 matchLineId) { - LoadPalette(sLitMatchLinePalTable[matchLineId], sMatchLinePalOffsets[matchLineId], 2); + LoadPalette(sLitMatchLinePalTable[matchLineId], sMatchLinePalOffsets[matchLineId], PLTT_SIZEOF(1)); } static void DarkenMatchLine(u8 matchLineId) { - LoadPalette(sDarkMatchLinePalTable[matchLineId], sMatchLinePalOffsets[matchLineId], 2); + LoadPalette(sDarkMatchLinePalTable[matchLineId], sMatchLinePalOffsets[matchLineId], PLTT_SIZEOF(1)); } // light up the match line for each bet by the player @@ -3360,7 +3360,7 @@ static bool8 TryStopSlotMachineLights(void) if (gTasks[taskId].sFlashState == 0) { DestroyTask(taskId); - LoadPalette(sSlotMachineMenu_Pal, 0x10, 0x20); + LoadPalette(sSlotMachineMenu_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); return TRUE; } return FALSE; @@ -3376,7 +3376,7 @@ static void Task_FlashSlotMachineLights(u8 taskId) if (task->sFlashState == 0 || task->sFlashState == 2) task->sFlashDir = -task->sFlashDir; } - LoadPalette(sFlashingLightsPalTable[task->sFlashState], 0x10, 0x20); + LoadPalette(sFlashingLightsPalTable[task->sFlashState], BG_PLTT_ID(1), PLTT_SIZE_4BPP); } #undef sDelayTimer @@ -4857,7 +4857,7 @@ static void SpriteCB_DigitalDisplay_PokeballShining(struct Sprite *sprite) { if (sprite->sCounter < 3) { - LoadPalette(sPokeballShiningPalTable[sprite->sCounter], (IndexOfSpritePaletteTag(PALTAG_DIG_DISPLAY) << 4) + 0x100, 32); + LoadPalette(sPokeballShiningPalTable[sprite->sCounter], OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_DIG_DISPLAY)), PLTT_SIZE_4BPP); if (++sprite->data[2] >= 4) { sprite->data[1]++; @@ -4866,7 +4866,7 @@ static void SpriteCB_DigitalDisplay_PokeballShining(struct Sprite *sprite) } else { - LoadPalette(sPokeballShiningPalTable[sprite->sCounter], (IndexOfSpritePaletteTag(PALTAG_DIG_DISPLAY) << 4) + 0x100, 32); + LoadPalette(sPokeballShiningPalTable[sprite->sCounter], OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_DIG_DISPLAY)), PLTT_SIZE_4BPP); if (++sprite->data[2] >= 25) { sprite->sCounter = 0; @@ -4995,7 +4995,7 @@ static void EndDigitalDisplayScene_StopReel(void) static void EndDigitalDisplayScene_Win(void) { - LoadPalette(sDigitalDisplay_Pal, (IndexOfSpritePaletteTag(PALTAG_DIG_DISPLAY) << 4) + 0x100, 0x20); + LoadPalette(sDigitalDisplay_Pal, OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_DIG_DISPLAY)), PLTT_SIZE_4BPP); } static void EndDigitalDisplayScene_InsertBet(void) @@ -5054,8 +5054,8 @@ static void LoadMenuGfx(void) sMenuGfx = Alloc(0x2200); LZDecompressWram(gSlotMachineMenu_Gfx, sMenuGfx); LoadBgTiles(2, sMenuGfx, 0x2200, 0); - LoadPalette(gSlotMachineMenu_Pal, 0, 160); - LoadPalette(sUnkPalette, 208, 32); + LoadPalette(gSlotMachineMenu_Pal, BG_PLTT_ID(0), 5 * PLTT_SIZE_4BPP); + LoadPalette(sUnkPalette, BG_PLTT_ID(13), PLTT_SIZE_4BPP); } static void LoadMenuAndReelOverlayTilemaps(void) @@ -7879,19 +7879,19 @@ static const u16 *const sLitMatchLinePalTable[NUM_MATCH_LINES] = static const u16 *const sDarkMatchLinePalTable[NUM_MATCH_LINES] = { - [MATCH_MIDDLE_ROW] = &gSlotMachineMenu_Pal[74], - [MATCH_TOP_ROW] = &gSlotMachineMenu_Pal[75], - [MATCH_BOTTOM_ROW] = &gSlotMachineMenu_Pal[76], - [MATCH_NWSE_DIAG] = &gSlotMachineMenu_Pal[77], - [MATCH_NESW_DIAG] = &gSlotMachineMenu_Pal[78], + [MATCH_MIDDLE_ROW] = &gSlotMachineMenu_Pal[BG_PLTT_ID(4) + 10], + [MATCH_TOP_ROW] = &gSlotMachineMenu_Pal[BG_PLTT_ID(4) + 11], + [MATCH_BOTTOM_ROW] = &gSlotMachineMenu_Pal[BG_PLTT_ID(4) + 12], + [MATCH_NWSE_DIAG] = &gSlotMachineMenu_Pal[BG_PLTT_ID(4) + 13], + [MATCH_NESW_DIAG] = &gSlotMachineMenu_Pal[BG_PLTT_ID(4) + 14], }; static const u8 sMatchLinePalOffsets[NUM_MATCH_LINES] = { - [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 + [MATCH_MIDDLE_ROW] = BG_PLTT_ID(4) + 10, + [MATCH_TOP_ROW] = BG_PLTT_ID(4) + 11, + [MATCH_BOTTOM_ROW] = BG_PLTT_ID(4) + 12, + [MATCH_NWSE_DIAG] = BG_PLTT_ID(4) + 14, // Diag colors flipped for some reason + [MATCH_NESW_DIAG] = BG_PLTT_ID(4) + 13 // Doesn't matter as both are identical }; static const u8 sBetToMatchLineIds[MAX_BET][2] = diff --git a/src/start_menu.c b/src/start_menu.c index 3bf8824293f1..ea8123ef9a2e 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -286,7 +286,7 @@ static void BuildStartMenuActions(void) } else { - #if DEBUG_SYSTEM_ENABLE == TRUE && DEBUG_SYSTEM_IN_MENU == TRUE + #if DEBUG_OVERWORLD_MENU == TRUE && DEBUG_OVERWORLD_IN_MENU == TRUE BuildDebugStartMenu(); #else BuildNormalStartMenu(); @@ -760,7 +760,7 @@ static bool8 StartMenuDebugCallback(void) RemoveExtraStartMenuWindows(); HideStartMenuDebug(); // Hide start menu without enabling movement -#if DEBUG_SYSTEM_ENABLE == TRUE +#if DEBUG_OVERWORLD_MENU == TRUE FreezeObjectEvents(); Debug_ShowMainMenu(); #endif @@ -1044,7 +1044,7 @@ static u8 SaveConfirmInputCallback(void) sSaveDialogCallback = SaveFileExistsCallback; return SAVE_IN_PROGRESS; } - case -1: // B Button + case MENU_B_PRESSED: case 1: // No HideSaveInfoWindow(); HideSaveMessageWindow(); @@ -1090,7 +1090,7 @@ static u8 SaveOverwriteInputCallback(void) case 0: // Yes sSaveDialogCallback = SaveSavingMessageCallback; return SAVE_IN_PROGRESS; - case -1: // B Button + case MENU_B_PRESSED: case 1: // No HideSaveInfoWindow(); HideSaveMessageWindow(); @@ -1209,7 +1209,7 @@ static u8 BattlePyramidRetireInputCallback(void) { case 0: // Yes return SAVE_CANCELED; - case -1: // B Button + case MENU_B_PRESSED: case 1: // No HideSaveMessageWindow(); return SAVE_SUCCESS; @@ -1244,8 +1244,8 @@ static bool32 InitSaveWindowAfterLinkBattle(u8 *state) ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sBgTemplates_LinkBattleSave, ARRAY_COUNT(sBgTemplates_LinkBattleSave)); InitWindows(sWindowTemplates_LinkBattleSave); - LoadUserWindowBorderGfx_(0, 8, 224); - Menu_LoadStdPalAt(240); + LoadUserWindowBorderGfx_(0, 8, BG_PLTT_ID(14)); + Menu_LoadStdPalAt(BG_PLTT_ID(15)); break; case 3: ShowBg(0); diff --git a/src/starter_choose.c b/src/starter_choose.c index cbe0c7ee61a4..3d5291e88775 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -51,17 +51,12 @@ static void SpriteCB_StarterPokemon(struct Sprite *sprite); static u16 sStarterLabelWindowId; -const u16 gBirchBagGrassPal[][16] = -{ - INCBIN_U16("graphics/starter_choose/birch_bag.gbapal"), - INCBIN_U16("graphics/starter_choose/birch_grass.gbapal"), -}; - +const u16 gBirchBagGrass_Pal[] = INCBIN_U16("graphics/starter_choose/tiles.gbapal"); 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 gBirchBagGrass_Gfx[] = INCBIN_U32("graphics/starter_choose/tiles.4bpp.lz"); 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"); @@ -402,7 +397,7 @@ void CB2_ChooseStarter(void) DmaFill32(3, 0, OAM, OAM_SIZE); DmaFill16(3, 0, PLTT, PLTT_SIZE); - LZ77UnCompVram(gBirchHelpGfx, (void *)VRAM); + LZ77UnCompVram(gBirchBagGrass_Gfx, (void *)VRAM); LZ77UnCompVram(gBirchBagTilemap, (void *)(BG_SCREEN_ADDR(6))); LZ77UnCompVram(gBirchGrassTilemap, (void *)(BG_SCREEN_ADDR(7))); @@ -411,7 +406,7 @@ void CB2_ChooseStarter(void) InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); - LoadUserWindowBorderGfx(0, 0x2A8, 0xD0); + LoadUserWindowBorderGfx(0, 0x2A8, BG_PLTT_ID(13)); ClearScheduledBgCopiesToVram(); ScanlineEffect_Stop(); ResetTasks(); @@ -420,8 +415,8 @@ void CB2_ChooseStarter(void) FreeAllSpritePalettes(); ResetAllPicSprites(); - LoadPalette(GetOverworldTextboxPalettePtr(), 0xE0, 0x20); - LoadPalette(gBirchBagGrassPal, 0, 0x40); + LoadPalette(GetOverworldTextboxPalettePtr(), BG_PLTT_ID(14), PLTT_SIZE_4BPP); + LoadPalette(gBirchBagGrass_Pal, BG_PLTT_ID(0), sizeof(gBirchBagGrass_Pal)); LoadCompressedSpriteSheet(&sSpriteSheet_PokeballSelect[0]); LoadCompressedSpriteSheet(&sSpriteSheet_StarterCircle[0]); LoadSpritePalettes(sSpritePalettes_StarterChoose); diff --git a/src/test_runner_stub.c b/src/test_runner_stub.c new file mode 100644 index 000000000000..2c8b54020453 --- /dev/null +++ b/src/test_runner_stub.c @@ -0,0 +1,46 @@ +#include "global.h" +#include "test_runner.h" + +__attribute__((weak)) +const bool8 gTestRunnerEnabled = FALSE; + +// The Makefile patches gTestRunnerHeadless as part of make test. +// This allows us to open the ROM in an mgba with a UI and see the +// animations and messages play, which helps when debugging a test. +const bool8 gTestRunnerHeadless = FALSE; +const bool8 gTestRunnerSkipIsFail = FALSE; + +__attribute__((weak)) +void TestRunner_Battle_RecordAbilityPopUp(u32 battlerId, u32 ability) +{ +} + +__attribute__((weak)) +void TestRunner_Battle_RecordAnimation(u32 animType, u32 animId) +{ +} + +__attribute__((weak)) +void TestRunner_Battle_RecordHP(u32 battlerId, u32 oldHP, u32 newHP) +{ +} + +__attribute__((weak)) +void TestRunner_Battle_RecordMessage(const u8 *string) +{ +} + +__attribute__((weak)) +void TestRunner_Battle_RecordStatus1(u32 battlerId, u32 status1) +{ +} + +__attribute__((weak)) +void TestRunner_Battle_AfterLastTurn(void) +{ +} + +__attribute__((weak)) +void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType) +{ +} diff --git a/src/text_window.c b/src/text_window.c index 798b791ced02..df06837299e0 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -93,7 +93,7 @@ const struct TilesPal *GetWindowFrameTilesPal(u8 id) void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset) { LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gMessageBox_Gfx, 0x1C0, destOffset); - LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, 0x20); + LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, PLTT_SIZE_4BPP); } void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset) @@ -104,7 +104,7 @@ void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset) void LoadWindowGfx(u8 windowId, u8 frameId, u16 destOffset, u8 palOffset) { LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), sWindowFrames[frameId].tiles, 0x120, destOffset); - LoadPalette(sWindowFrames[frameId].pal, palOffset, 0x20); + LoadPalette(sWindowFrames[frameId].pal, palOffset, PLTT_SIZE_4BPP); } void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palOffset) @@ -164,7 +164,7 @@ const u16 *GetTextWindowPalette(u8 id) switch (id) { case 0: - id = 0; + id = 0x00; break; case 1: id = 0x10; @@ -193,5 +193,5 @@ const u16 *GetOverworldTextboxPalettePtr(void) void LoadUserWindowBorderGfxOnBg(u8 bg, u16 destOffset, u8 palOffset) { LoadBgTiles(bg, sWindowFrames[gSaveBlock2Ptr->optionsWindowFrameType].tiles, 0x120, destOffset); - LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, palOffset, 0x20); + LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, palOffset, PLTT_SIZE_4BPP); } diff --git a/src/tileset_anims.c b/src/tileset_anims.c index 6a7589e36fc3..12701fb5f0ef 100644 --- a/src/tileset_anims.c +++ b/src/tileset_anims.c @@ -484,14 +484,14 @@ const u16 *const gTilesetAnims_BikeShop_BlinkingLights[] = { gTilesetAnims_BikeShop_BlinkingLights_Frame1 }; -const u16 gTilesetAnims_Sootopolis_StormyWater_Frame0[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/0.4bpp"); -const u16 gTilesetAnims_Sootopolis_StormyWater_Frame1[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/1.4bpp"); -const u16 gTilesetAnims_Sootopolis_StormyWater_Frame2[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/2.4bpp"); -const u16 gTilesetAnims_Sootopolis_StormyWater_Frame3[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/3.4bpp"); -const u16 gTilesetAnims_Sootopolis_StormyWater_Frame4[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/4.4bpp"); -const u16 gTilesetAnims_Sootopolis_StormyWater_Frame5[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/5.4bpp"); -const u16 gTilesetAnims_Sootopolis_StormyWater_Frame6[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/6.4bpp"); -const u16 gTilesetAnims_Sootopolis_StormyWater_Frame7[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/7.4bpp"); +const u16 gTilesetAnims_Sootopolis_StormyWater_Frame0[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/0_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/0_groudon.4bpp"); +const u16 gTilesetAnims_Sootopolis_StormyWater_Frame1[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/1_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/1_groudon.4bpp"); +const u16 gTilesetAnims_Sootopolis_StormyWater_Frame2[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/2_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/2_groudon.4bpp"); +const u16 gTilesetAnims_Sootopolis_StormyWater_Frame3[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/3_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/3_groudon.4bpp"); +const u16 gTilesetAnims_Sootopolis_StormyWater_Frame4[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/4_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/4_groudon.4bpp"); +const u16 gTilesetAnims_Sootopolis_StormyWater_Frame5[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/5_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/5_groudon.4bpp"); +const u16 gTilesetAnims_Sootopolis_StormyWater_Frame6[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/6_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/6_groudon.4bpp"); +const u16 gTilesetAnims_Sootopolis_StormyWater_Frame7[] = INCBIN_U16("data/tilesets/secondary/sootopolis/anim/stormy_water/7_kyogre.4bpp", "data/tilesets/secondary/sootopolis/anim/stormy_water/7_groudon.4bpp"); const u16 tileset_anims_space_8[16] = {}; const u16 gTilesetAnims_Unused1_Frame0[] = INCBIN_U16("data/tilesets/secondary/unused_1/0.4bpp"); @@ -1168,7 +1168,7 @@ static void QueueAnimTiles_BattlePyramid_StatueShadow(u16 timer) static void BlendAnimPalette_BattleDome_FloorLights(u16 timer) { CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); - BlendPalette(0x80, 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); + BlendPalette(BG_PLTT_ID(8), 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); if ((u8)FindTaskIdByFunc(Task_BattleTransition_Intro) != TASK_NONE) { sSecondaryTilesetAnimCallback = TilesetAnim_BattleDome2; @@ -1181,7 +1181,7 @@ static void BlendAnimPalette_BattleDome_FloorLightsNoBlend(u16 timer) 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); + BlendPalette(BG_PLTT_ID(8), 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); if (!--sSecondaryTilesetAnimCounterMax) sSecondaryTilesetAnimCallback = NULL; } diff --git a/src/title_screen.c b/src/title_screen.c index 689c96863dda..bb73df5bc5b7 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -548,7 +548,7 @@ void CB2_InitTitleScreen(void) // bg2 LZ77UnCompVram(gTitleScreenPokemonLogoGfx, (void *)(BG_CHAR_ADDR(0))); LZ77UnCompVram(gTitleScreenPokemonLogoTilemap, (void *)(BG_SCREEN_ADDR(9))); - LoadPalette(gTitleScreenBgPalettes, 0, 0x1E0); + LoadPalette(gTitleScreenBgPalettes, BG_PLTT_ID(0), 15 * PLTT_SIZE_4BPP); // bg3 LZ77UnCompVram(sTitleScreenRayquazaGfx, (void *)(BG_CHAR_ADDR(2))); LZ77UnCompVram(sTitleScreenRayquazaTilemap, (void *)(BG_SCREEN_ADDR(26))); @@ -563,7 +563,7 @@ void CB2_InitTitleScreen(void) LoadCompressedSpriteSheet(&sSpriteSheet_EmeraldVersion[0]); LoadCompressedSpriteSheet(&sSpriteSheet_PressStart[0]); LoadCompressedSpriteSheet(&sPokemonLogoShineSpriteSheet[0]); - LoadPalette(gTitleScreenEmeraldVersionPal, 0x100, 0x20); + LoadPalette(gTitleScreenEmeraldVersionPal, OBJ_PLTT_ID(0), PLTT_SIZE_4BPP); LoadSpritePalette(&sSpritePalette_PressStart[0]); gMain.state = 2; break; @@ -812,6 +812,6 @@ static void UpdateLegendaryMarkingColor(u8 frameNum) s32 b = 12; u16 color = RGB(r, g, b); - LoadPalette(&color, 0xEF, sizeof(color)); + LoadPalette(&color, BG_PLTT_ID(14) + 15, sizeof(color)); } } diff --git a/src/trade.c b/src/trade.c index 8ded41a1e12b..9186864fb37a 100644 --- a/src/trade.c +++ b/src/trade.c @@ -51,6 +51,68 @@ #include "constants/songs.h" #include "constants/union_room.h" +// IDs for RunTradeMenuCallback +enum { + CB_MAIN_MENU, + CB_SELECTED_MON, + CB_SHOW_MON_SUMMARY, + CB_CONFIRM_TRADE_PROMPT, + CB_CANCEL_TRADE_PROMPT, + CB_READY_WAIT, // Unused in Emerald, equivalent to CB_IDLE + CB_SET_SELECTED_MONS, + CB_PRINT_IS_THIS_OKAY, + CB_HANDLE_TRADE_CANCELED, + CB_FADE_TO_START_TRADE, + CB_WAIT_TO_START_TRADE, + CB_INIT_EXIT_CANCELED_TRADE, + CB_EXIT_CANCELED_TRADE, + CB_START_LINK_TRADE, + CB_INIT_CONFIRM_TRADE_PROMPT, + CB_UNUSED_CLOSE_MSG, + CB_WAIT_TO_START_RFU_TRADE, + CB_PARTNER_MON_INVALID, + CB_IDLE = 100, +}; + +// Indexes for sActionTexts +enum { + TEXT_CANCEL, + TEXT_CHOOSE_MON, + TEXT_SUMMARY, + TEXT_TRADE, + TEXT_CANCEL_TRADE, + TEXT_JP_QUIT, +}; + +// Indexes for sMessages +enum { + MSG_STANDBY, + MSG_CANCELED, + MSG_ONLY_MON1, + MSG_ONLY_MON2, + MSG_WAITING_FOR_FRIEND, + MSG_FRIEND_WANTS_TO_TRADE, + MSG_MON_CANT_BE_TRADED, + MSG_EGG_CANT_BE_TRADED, + MSG_FRIENDS_MON_CANT_BE_TRADED, +}; + +// IDs for QueueAction +enum { + QUEUE_SEND_DATA, + QUEUE_STANDBY, + QUEUE_ONLY_MON1, + QUEUE_ONLY_MON2, + QUEUE_UNUSED1, // Presumably intended for MSG_WAITING_FOR_FRIEND + QUEUE_UNUSED2, // Presumably intended for MSG_FRIEND_WANTS_TO_TRADE + QUEUE_MON_CANT_BE_TRADED, + QUEUE_EGG_CANT_BE_TRADED, + QUEUE_FRIENDS_MON_CANT_BE_TRADED, +}; + +#define QUEUE_DELAY_MSG 3 +#define QUEUE_DELAY_DATA 5 + // The following tags are offsets from GFXTAG_MENU_TEXT // They're looped over in CB2_CreateTradeMenu and CB2_ReturnToTradeMenu // and used as indexes into sMenuTextTileBuffers @@ -69,153 +131,160 @@ enum { GFXTAG_CHOOSE_PKMN_EMPTY_1, // 6 sprites to cover the full bottom bar, but only first 3 are needed GFXTAG_CHOOSE_PKMN_EMPTY_2, GFXTAG_CHOOSE_PKMN_EMPTY_3, - GFXTAG_MENU_TEXT_COUNT + NUM_MENU_TEXT_SPRITES }; -#define GFXTAG_PLAYER_NAME (1 + GFXTAG_PLAYER_NAME_R - GFXTAG_PLAYER_NAME_L) -#define GFXTAG_PARTNER_NAME (1 + GFXTAG_PARTNER_NAME_R - GFXTAG_PARTNER_NAME_L) -#define GFXTAG_CHOOSE_PKMN (1 + GFXTAG_CHOOSE_PKMN_EMPTY_3 - GFXTAG_CHOOSE_PKMN_L) +#define NUM_PLAYER_NAME_SPRITES (1 + GFXTAG_PLAYER_NAME_R - GFXTAG_PLAYER_NAME_L) +#define NUM_PARTNER_NAME_SPRITES (1 + GFXTAG_PARTNER_NAME_R - GFXTAG_PARTNER_NAME_L) +#define NUM_CHOOSE_PKMN_SPRITES (1 + GFXTAG_CHOOSE_PKMN_EMPTY_3 - GFXTAG_CHOOSE_PKMN_L) + +// Values for signaling to/from the link partner +enum { + STATUS_NONE, + STATUS_READY, + STATUS_CANCEL, +}; + +// Checked to confirm DrawSelectedMonScreen has reached final state +#define DRAW_SELECTED_FINISH 5 struct InGameTrade { - /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; - /*0x0C*/ u16 species; - /*0x0E*/ u8 ivs[NUM_STATS]; - /*0x14*/ u8 abilityNum; - /*0x18*/ u32 otId; - /*0x1C*/ u8 conditions[CONTEST_CATEGORIES_COUNT]; - /*0x24*/ u32 personality; - /*0x28*/ u16 heldItem; - /*0x2A*/ u8 mailNum; - /*0x2B*/ u8 otName[11]; - /*0x36*/ u8 otGender; - /*0x37*/ u8 sheen; - /*0x38*/ u16 requestedSpecies; + u8 nickname[POKEMON_NAME_LENGTH + 1]; + u16 species; + u8 ivs[NUM_STATS]; + u8 abilityNum; + u32 otId; + u8 conditions[CONTEST_CATEGORIES_COUNT]; + u32 personality; + u16 heldItem; + u8 mailNum; + u8 otName[11]; + u8 otGender; + u8 sheen; + u16 requestedSpecies; }; -static EWRAM_DATA u8 *sMenuTextAllocBuffer = NULL; +static EWRAM_DATA u8 *sMenuTextTileBuffer = NULL; // Bytes 0-2 are used for the player's name text // Bytes 3-5 are used for the partner's name text // Bytes 6-7 are used for the Cancel text // Bytes 8-13 are used for the Choose a Pokemon text // See the corresponding GFXTAGs in src/data/trade.h -static EWRAM_DATA u8 *sMenuTextTileBuffers[GFXTAG_MENU_TEXT_COUNT] = {NULL}; +static EWRAM_DATA u8 *sMenuTextTileBuffers[NUM_MENU_TEXT_SPRITES] = {NULL}; EWRAM_DATA struct Mail gTradeMail[PARTY_SIZE] = {0}; EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; static EWRAM_DATA struct { - /*0x0000*/ u8 bg2hofs; - /*0x0001*/ u8 bg3hofs; - /*0x0002*/ u8 filler_2[38]; - /*0x0028*/ u8 partySpriteIds[2][PARTY_SIZE]; - /*0x0034*/ u8 cursorSpriteId; - /*0x0035*/ u8 cursorPosition; - /*0x0036*/ u8 partyCounts[2]; - /*0x0038*/ bool8 monPresent[PARTY_SIZE * 2]; - /*0x0044*/ bool8 neverRead_44; - /*0x0045*/ bool8 isLiveMon[2][PARTY_SIZE]; - /*0x0051*/ bool8 isEgg[2][PARTY_SIZE]; - /*0x005D*/ u8 hpBarLevels[2][PARTY_SIZE]; - /*0x0069*/ u8 bufferPartyState; - /*0x006A*/ u8 filler_6A[5]; - /*0x006F*/ u8 tradeMenuFunc; - /*0x0070*/ u8 neverRead_70; - /*0x0071*/ u8 filler_71; - /*0x0072*/ u16 bottomTextTileStart; - /*0x0074*/ u8 drawPartyState[2]; - /*0x0076*/ u8 selectedMonIdx[2]; - /*0x0078*/ u8 playerLinkFlagChoseAction; - /*0x0079*/ u8 partnerLinkFlagChoseAction; - /*0x007A*/ u8 playerLinkFlagStatus; - /*0x007B*/ u8 partnerLinkFlagStatus; - /*0x007C*/ u8 filler_7C[2]; - /*0x007E*/ u8 partnerCursorPosition; - /*0x007F*/ u8 unused_7F; - /*0x0080*/ u16 linkData[20]; - /*0x00A8*/ u8 timer; - /*0x00A9*/ u8 giftRibbons[GIFT_RIBBONS_COUNT]; - /*0x00B4*/ u8 filler_B4[0x81C]; - /*0x08D0*/ struct { - bool8 queued; - u16 queueDelay; + u8 bg2hofs; + u8 bg3hofs; + u8 filler_2[38]; + u8 partySpriteIds[2][PARTY_SIZE]; + u8 cursorSpriteId; + u8 cursorPosition; + u8 partyCounts[2]; + bool8 optionsActive[PARTY_SIZE * 2 + 1]; + bool8 isLiveMon[2][PARTY_SIZE]; + bool8 isEgg[2][PARTY_SIZE]; + u8 hpBarLevels[2][PARTY_SIZE]; + u8 bufferPartyState; + u8 filler_6A[5]; + u8 callbackId; + u8 neverRead_70; + u16 bottomTextTileStart; + u8 drawSelectedMonState[2]; + u8 selectedMonIdx[2]; + u8 playerSelectStatus; + u8 partnerSelectStatus; + u8 playerConfirmStatus; + u8 partnerConfirmStatus; + u8 filler_7C[2]; + u8 partnerCursorPosition; + u16 linkData[20]; + u8 timer; + u8 giftRibbons[GIFT_RIBBONS_COUNT]; + u8 filler_B4[0x81C]; + struct { + bool8 active; + u16 delay; u8 actionId; } queuedActions[4]; - /*0x08F0*/ u16 tilemapBuffer[0x400]; -} *sTradeMenuData = {NULL}; + u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; +} *sTradeMenu = NULL; static EWRAM_DATA struct { - /*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]; - /*0x72*/ u8 playerLinkFlagFinishTrade; - /*0x73*/ u8 partnerLinkFlagFinishTrade; - /*0x74*/ u16 linkData[10]; - /*0x88*/ u8 linkTimeoutZero1; - /*0x89*/ u8 linkTimeoutZero2; - /*0x8A*/ u16 linkTimeoutCounter; - /*0x8C*/ u16 neverRead_8C; - /*0x8E*/ u8 monSpriteIds[2]; - /*0x90*/ u8 connectionSpriteId1; // Multi-purpose sprite ids used during the transfer sequence - /*0x91*/ u8 connectionSpriteId2; - /*0x92*/ u8 cableEndSpriteId; - /*0x93*/ u8 sendTradeFinishState; - /*0x94*/ u16 state; - /*0x96*/ u8 filler_96[0xD2 - 0x96]; - /*0xD2*/ u8 releasePokeballSpriteId; - /*0xD3*/ u8 bouncingPokeballSpriteId; - /*0xD4*/ u16 texX; - /*0xD6*/ u16 texY; - /*0xD8*/ u16 neverRead_D8; - /*0xDA*/ u16 neverRead_DA; - /*0xDC*/ u16 scrX; - /*0xDE*/ u16 scrY; - /*0xE0*/ s16 bg1vofs; - /*0xE2*/ s16 bg1hofs; - /*0xE4*/ s16 bg2vofs; - /*0xE6*/ s16 bg2hofs; - /*0xE8*/ u16 sXY; - /*0xEA*/ u16 gbaScale; - /*0xEC*/ u16 alpha; - /*0xEE*/ bool8 isLinkTrade; - /*0xF0*/ u16 monSpecies[2]; - /*0xF4*/ u16 cachedMapMusic; - /*0xF6*/ u8 textColors[3]; - /*0xF9*/ u8 filler_F9; - /*0xFA*/ bool8 isCableTrade; - /*0xFB*/ u8 wirelessWinLeft; - /*0xFC*/ u8 wirelessWinTop; - /*0xFD*/ u8 wirelessWinRight; - /*0xFE*/ u8 wirelessWinBottom; -} *sTradeData = {NULL}; + struct Pokemon tempMon; // Used as a temp variable when swapping Pokémon + u32 timer; + u32 monPersonalities[2]; + u8 filler_70[2]; + u8 playerFinishStatus; + u8 partnerFinishStatus; + u16 linkData[10]; + u8 linkTimeoutZero1; + u8 linkTimeoutZero2; + u16 linkTimeoutTimer; + u16 neverRead_8C; + u8 monSpriteIds[2]; + u8 connectionSpriteId1; // Multi-purpose sprite ids used during the transfer sequence + u8 connectionSpriteId2; + u8 cableEndSpriteId; + u8 scheduleLinkTransfer; + u16 state; + u8 filler_96[0x3C]; + u8 releasePokeballSpriteId; + u8 bouncingPokeballSpriteId; + u16 texX; + u16 texY; + u16 neverRead_D8; + u16 neverRead_DA; + u16 scrX; + u16 scrY; + s16 bg1vofs; + s16 bg1hofs; + s16 bg2vofs; + s16 bg2hofs; + u16 sXY; + u16 gbaScale; + u16 alpha; + bool8 isLinkTrade; + u16 monSpecies[2]; + u16 cachedMapMusic; + u8 textColors[3]; + u8 filler_F9; + bool8 isCableTrade; + u8 wirelessWinLeft; + u8 wirelessWinTop; + u8 wirelessWinRight; + u8 wirelessWinBottom; +} *sTradeAnim = NULL; static bool32 IsWirelessTrade(void); static void CB2_CreateTradeMenu(void); static void VBlankCB_TradeMenu(void); static void CB2_TradeMenu(void); static void LoadTradeBgGfx(u8); -static void SetTradePartyMonsVisible(void); +static void SetActiveMenuOptions(void); static bool8 BufferTradeParties(void); -static void CB1_SendOrReactToLinkTradeData(void); -static void CallTradeMenuFunc(void); +static void CB1_UpdateLink(void); +static void RunTradeMenuCallback(void); static void SetSelectedMon(u8); -static void DrawTradeMenuParty(u8); +static void DrawSelectedMonScreen(u8); static u8 GetMonNicknameWidth(u8 *, u8, u8); -static void BufferTradeMonMoves(u8 *, u8, u8); -static void PrintPartyNicknamesForTradeMenu(u8); -static void DrawTradeMenuPartyMonInfo(u8, u8, u8, u8, u8, u8); -static void DrawTradeMenuPartyInfo(u8); -static void PrintNicknamesForTradeMenu(void); -static void RedrawTradeMenuParty(u8); +static void BufferMovesString(u8 *, u8, u8); +static void PrintPartyNicknames(u8); +static void PrintLevelAndGender(u8, u8, u8, u8, u8, u8); +static void PrintPartyLevelsAndGenders(u8); +static void PrintTradePartnerPartyNicknames(void); +static void RedrawPartyWindow(u8); static void Task_DrawSelectionSummary(u8); static void Task_DrawSelectionTrade(u8); static void QueueAction(u16, u8); static u32 GetNumQueuedActions(void); static void DoQueuedActions(void); static void PrintTradeMessage(u8); -static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void); +static bool8 LoadUISpriteGfx(void); static void DrawBottomRowText(const u8 *, u8 *, u8); -static void SetTradePartyLiveStatuses(u8); -static void GetTradePartyHPBarLevels(u8); +static void ComputePartyTradeableFlags(u8); +static void ComputePartyHPBarLevels(u8); static void SetTradePartyHPBarSprites(void); static void SaveTradeGiftRibbons(void); static u32 CanTradeSelectedMon(struct Pokemon *, int, int); @@ -224,29 +293,29 @@ static void SpriteCB_LinkMonShadow(struct Sprite *); static void SpriteCB_CableEndSending(struct Sprite *); static void SpriteCB_CableEndReceiving(struct Sprite *); static void SpriteCB_GbaScreen(struct Sprite *); -static void InitTradeBgInternal(void); -static void CB2_UpdateInGameTrade(void); +static void TradeAnimInit_LoadGfx(void); +static void CB2_InGameTrade(void); static void SetTradeSequenceBgGpuRegs(u8); static void LoadTradeSequenceSpriteSheetsAndPalettes(void); static void BufferTradeSceneStrings(void); -static bool8 AnimateTradeSequence(void); -static bool8 AnimateTradeSequenceCable(void); -static bool8 AnimateTradeSequenceWireless(void); +static bool8 DoTradeAnim(void); +static bool8 DoTradeAnim_Cable(void); +static bool8 DoTradeAnim_Wireless(void); static void SpriteCB_BouncingPokeball(struct Sprite *); 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 Mail *, const struct InGameTrade *); +static void GetInGameTradeMail(struct Mail *, const struct InGameTrade *); static void CB2_UpdateLinkTrade(void); -static void CB2_TryFinishTrade(void); +static void CB2_WaitTradeComplete(void); static void CB2_SaveAndEndTrade(void); -static void CB2_FreeTradeData(void); +static void CB2_FreeTradeAnim(void); static void Task_InGameTrade(u8); static void CheckPartnersMonForRibbons(void); static void Task_AnimateWirelessSignal(u8); -static void Task_NarrowWindowForCrossing_Wireless(u8); -static void Task_NarrowWindowForCrossing_Cable(u8); +static void Task_OpenCenterWhiteColumn(u8); +static void Task_CloseCenterWhiteColumn(u8); static void CB2_SaveAndEndWirelessTrade(void); #include "data/trade.h" @@ -333,36 +402,36 @@ static void InitTradeMenu(void) gPaletteFade.bufferTransferDisabled = TRUE; SetVBlankCallback(VBlankCB_TradeMenu); - LoadPalette(gStandardMenuPalette, 0xF0, 20); - LoadPalette(gStandardMenuPalette, 0xD0, 20); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(15), PLTT_SIZEOF(10)); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(13), PLTT_SIZEOF(10)); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sTradeMenuBgTemplates, ARRAY_COUNT(sTradeMenuBgTemplates)); - SetBgTilemapBuffer(1, sTradeMenuData->tilemapBuffer); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); + SetBgTilemapBuffer(1, sTradeMenu->tilemapBuffer); - if (InitWindows(sTradeMenuWindowTemplates)) + if (InitWindows(sWindowTemplates)) { u32 i; DeactivateAllTextPrinters(); - for (i = 0; i < 18; i++) + for (i = 0; i < ARRAY_COUNT(sWindowTemplates) - 1; i++) { ClearWindowTilemap(i); FillWindowPixelBuffer(i, PIXEL_FILL(0)); } FillBgTilemapBufferRect(0, 0, 0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT, 15); - LoadUserWindowBorderGfx_(0, 20, 0xC0); - LoadUserWindowBorderGfx(2, 1, 0xE0); + LoadUserWindowBorderGfx_(0, 20, BG_PLTT_ID(12)); + LoadUserWindowBorderGfx(2, 1, BG_PLTT_ID(14)); LoadMonIconPalettes(); - sTradeMenuData->bufferPartyState = 0; - sTradeMenuData->tradeMenuFunc = 0; - sTradeMenuData->neverRead_70 = 0; - sTradeMenuData->drawPartyState[TRADE_PLAYER] = 0; - sTradeMenuData->drawPartyState[TRADE_PARTNER] = 0; - sTradeMenuData->playerLinkFlagStatus = 0; - sTradeMenuData->partnerLinkFlagStatus = 0; - sTradeMenuData->timer = 0; + sTradeMenu->bufferPartyState = 0; + sTradeMenu->callbackId = CB_MAIN_MENU; + sTradeMenu->neverRead_70 = 0; + sTradeMenu->drawSelectedMonState[TRADE_PLAYER] = 0; + sTradeMenu->drawSelectedMonState[TRADE_PARTNER] = 0; + sTradeMenu->playerConfirmStatus = STATUS_NONE; + sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->timer = 0; } } @@ -383,12 +452,12 @@ static void CB2_CreateTradeMenu(void) switch (gMain.state) { case 0: - sTradeMenuData = AllocZeroed(sizeof(*sTradeMenuData)); + sTradeMenu = AllocZeroed(sizeof(*sTradeMenu)); InitTradeMenu(); - sMenuTextAllocBuffer = AllocZeroed(GFXTAG_MENU_TEXT_COUNT * 256); + sMenuTextTileBuffer = AllocZeroed(NUM_MENU_TEXT_SPRITES * 256); - for (i = 0; i < GFXTAG_MENU_TEXT_COUNT; i++) - sMenuTextTileBuffers[i] = &sMenuTextAllocBuffer[i * 256]; + for (i = 0; i < NUM_MENU_TEXT_SPRITES; i++) + sMenuTextTileBuffers[i] = &sMenuTextTileBuffer[i * 256]; gMain.state++; break; @@ -398,13 +467,13 @@ static void CB2_CreateTradeMenu(void) for (i = 0; i < PARTY_SIZE; i++) CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); - PrintTradeMessage(TRADE_MSG_STANDBY); + PrintTradeMessage(MSG_STANDBY); ShowBg(0); if (!gReceivedRemoteLinkPlayers) { gLinkType = LINKTYPE_TRADE_CONNECTING; - sTradeMenuData->timer = 0; + sTradeMenu->timer = 0; if (gWirelessCommType) { @@ -425,10 +494,10 @@ static void CB2_CreateTradeMenu(void) } break; case 2: - sTradeMenuData->timer++; - if (sTradeMenuData->timer > 11) + sTradeMenu->timer++; + if (sTradeMenu->timer > 11) { - sTradeMenuData->timer = 0; + sTradeMenu->timer = 0; gMain.state++; } break; @@ -437,7 +506,7 @@ static void CB2_CreateTradeMenu(void) { if (IsLinkMaster()) { - if (++sTradeMenuData->timer > 30) + if (++sTradeMenu->timer > 30) { CheckShouldAdvanceLinkState(); gMain.state++; @@ -455,7 +524,7 @@ static void CB2_CreateTradeMenu(void) DestroyTask_RfuIdle(); CalculatePlayerPartyCount(); gMain.state++; - sTradeMenuData->timer = 0; + sTradeMenu->timer = 0; if (gWirelessCommType) { Rfu_SetLinkRecovery(TRUE); @@ -489,13 +558,13 @@ static void CB2_CreateTradeMenu(void) CalculateEnemyPartyCount(); SetGpuReg(REG_OFFSET_DISPCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0); - sTradeMenuData->partyCounts[TRADE_PLAYER] = gPlayerPartyCount; - sTradeMenuData->partyCounts[TRADE_PARTNER] = gEnemyPartyCount; + sTradeMenu->partyCounts[TRADE_PLAYER] = gPlayerPartyCount; + sTradeMenu->partyCounts[TRADE_PARTNER] = gEnemyPartyCount; - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { struct Pokemon *mon = &gPlayerParty[i]; - sTradeMenuData->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), + sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i][0] * 8) + 14, (sTradeMonSpriteCoords[i][1] * 8) - 12, @@ -503,10 +572,10 @@ static void CB2_CreateTradeMenu(void) GetMonData(mon, MON_DATA_PERSONALITY)); } - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PARTNER]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { struct Pokemon *mon = &gEnemyParty[i]; - sTradeMenuData->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, @@ -517,30 +586,30 @@ static void CB2_CreateTradeMenu(void) break; case 8: LoadHeldItemIcons(); - DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PLAYER); + DrawHeldItemIconsForTrade(&sTradeMenu->partyCounts[0], sTradeMenu->partySpriteIds[0], TRADE_PLAYER); gMain.state++; break; case 9: - DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PARTNER); + DrawHeldItemIconsForTrade(&sTradeMenu->partyCounts[0], sTradeMenu->partySpriteIds[0], TRADE_PARTNER); gMain.state++; break; case 10: DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMenuTextTileBuffers[GFXTAG_PLAYER_NAME_L], 0, 0, 3); id = GetMultiplayerId(); DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMenuTextTileBuffers[GFXTAG_PARTNER_NAME_L], 0, 0, 3); - DrawTextWindowAndBufferTiles(sTradeActionTexts[TRADE_TEXT_CANCEL], sMenuTextTileBuffers[GFXTAG_CANCEL_L], 0, 0, 2); - DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], sMenuTextTileBuffers[GFXTAG_CHOOSE_PKMN_L], 24); + DrawTextWindowAndBufferTiles(sActionTexts[TEXT_CANCEL], sMenuTextTileBuffers[GFXTAG_CANCEL_L], 0, 0, 2); + DrawBottomRowText(sActionTexts[TEXT_CHOOSE_MON], sMenuTextTileBuffers[GFXTAG_CHOOSE_PKMN_L], 24); gMain.state++; - sTradeMenuData->timer = 0; + sTradeMenu->timer = 0; break; case 11: - if (LoadTradeMenuSpriteSheetsAndPalettes()) + if (LoadUISpriteGfx()) gMain.state++; break; case 12: // Create player's name text sprites xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gSaveBlock2Ptr->playerName, 120); - for (i = 0; i < GFXTAG_PLAYER_NAME; i++) + for (i = 0; i < NUM_PLAYER_NAME_SPRITES; i++) { temp = sSpriteTemplate_MenuText; temp.tileTag += i + GFXTAG_PLAYER_NAME_L; @@ -549,7 +618,7 @@ static void CB2_CreateTradeMenu(void) // Create partner's name text sprites xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gLinkPlayers[GetMultiplayerId() ^ 1].name, 120); - for (i = 0; i < GFXTAG_PARTNER_NAME; i++) + for (i = 0; i < NUM_PARTNER_NAME_SPRITES; i++) { temp = sSpriteTemplate_MenuText; temp.tileTag += i + GFXTAG_PARTNER_NAME_L; @@ -564,33 +633,33 @@ static void CB2_CreateTradeMenu(void) CreateSprite(&temp, 215, 152, 1); temp = sSpriteTemplate_MenuText; temp.tileTag += GFXTAG_CANCEL_R; - CreateSprite(&temp, 247, 152, 1); + CreateSprite(&temp, 215 + 32, 152, 1); // Create Choose a Pokémon text sprites (only 3 are needed, other 3 are empty) - for (i = 0; i < GFXTAG_CHOOSE_PKMN; i++) + for (i = 0; i < NUM_CHOOSE_PKMN_SPRITES; i++) { temp = sSpriteTemplate_MenuText; temp.tileTag += i + GFXTAG_CHOOSE_PKMN_L; CreateSprite(&temp, (i * 32) + 24, 150, 1); } - sTradeMenuData->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, sTradeMonSpriteCoords[0][0] * 8 + 32, sTradeMonSpriteCoords[0][1] * 8, 2); - sTradeMenuData->cursorPosition = 0; + sTradeMenu->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, sTradeMonSpriteCoords[0][0] * 8 + 32, sTradeMonSpriteCoords[0][1] * 8, 2); + sTradeMenu->cursorPosition = 0; gMain.state++; rbox_fill_rectangle(0); break; case 14: - SetTradePartyLiveStatuses(TRADE_PLAYER); - PrintPartyNicknamesForTradeMenu(TRADE_PLAYER); - sTradeMenuData->bg2hofs = 0; - sTradeMenuData->bg3hofs = 0; - SetTradePartyMonsVisible(); + ComputePartyTradeableFlags(TRADE_PLAYER); + PrintPartyNicknames(TRADE_PLAYER); + sTradeMenu->bg2hofs = 0; + sTradeMenu->bg3hofs = 0; + SetActiveMenuOptions(); gMain.state++; PlayBGM(MUS_SCHOOL); break; case 15: - SetTradePartyLiveStatuses(TRADE_PARTNER); - PrintPartyNicknamesForTradeMenu(TRADE_PARTNER); + ComputePartyTradeableFlags(TRADE_PARTNER); + PrintPartyNicknames(TRADE_PARTNER); gMain.state++; // fallthrough case 16: @@ -611,18 +680,18 @@ static void CB2_CreateTradeMenu(void) gMain.state++; break; case 20: - GetTradePartyHPBarLevels(TRADE_PLAYER); + ComputePartyHPBarLevels(TRADE_PLAYER); gMain.state++; break; case 21: - GetTradePartyHPBarLevels(TRADE_PARTNER); + ComputePartyHPBarLevels(TRADE_PARTNER); SetTradePartyHPBarSprites(); gMain.state++; break; case 22: if (!gPaletteFade.active) { - gMain.callback1 = CB1_SendOrReactToLinkTradeData; + gMain.callback1 = CB1_UpdateLink; SetMainCallback2(CB2_TradeMenu); } break; @@ -650,7 +719,7 @@ static void CB2_ReturnToTradeMenu(void) break; case 1: gMain.state++; - sTradeMenuData->timer = 0; + sTradeMenu->timer = 0; break; case 2: gMain.state++; @@ -675,16 +744,16 @@ static void CB2_ReturnToTradeMenu(void) break; case 7: CalculateEnemyPartyCount(); - sTradeMenuData->partyCounts[TRADE_PLAYER] = gPlayerPartyCount; - sTradeMenuData->partyCounts[TRADE_PARTNER] = gEnemyPartyCount; + sTradeMenu->partyCounts[TRADE_PLAYER] = gPlayerPartyCount; + sTradeMenu->partyCounts[TRADE_PARTNER] = gEnemyPartyCount; ClearWindowTilemap(0); - PrintPartyNicknamesForTradeMenu(TRADE_PLAYER); - PrintPartyNicknamesForTradeMenu(TRADE_PARTNER); + PrintPartyNicknames(TRADE_PLAYER); + PrintPartyNicknames(TRADE_PARTNER); - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { struct Pokemon *mon = &gPlayerParty[i]; - sTradeMenuData->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i][0] * 8) + 14, (sTradeMonSpriteCoords[i][1] * 8) - 12, @@ -692,10 +761,10 @@ static void CB2_ReturnToTradeMenu(void) GetMonData(mon, MON_DATA_PERSONALITY)); } - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PARTNER]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { struct Pokemon *mon = &gEnemyParty[i]; - sTradeMenuData->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, @@ -706,30 +775,30 @@ static void CB2_ReturnToTradeMenu(void) break; case 8: LoadHeldItemIcons(); - DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PLAYER); + DrawHeldItemIconsForTrade(&sTradeMenu->partyCounts[0], sTradeMenu->partySpriteIds[0], TRADE_PLAYER); gMain.state++; break; case 9: - DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PARTNER); + DrawHeldItemIconsForTrade(&sTradeMenu->partyCounts[0], sTradeMenu->partySpriteIds[0], TRADE_PARTNER); gMain.state++; break; case 10: DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMenuTextTileBuffers[GFXTAG_PLAYER_NAME_L], 0, 0, 3); id = GetMultiplayerId(); DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMenuTextTileBuffers[GFXTAG_PARTNER_NAME_L], 0, 0, 3); - DrawTextWindowAndBufferTiles(sTradeActionTexts[TRADE_TEXT_CANCEL], sMenuTextTileBuffers[GFXTAG_CANCEL_L], 0, 0, 2); - DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], sMenuTextTileBuffers[GFXTAG_CHOOSE_PKMN_L], 24); + DrawTextWindowAndBufferTiles(sActionTexts[TEXT_CANCEL], sMenuTextTileBuffers[GFXTAG_CANCEL_L], 0, 0, 2); + DrawBottomRowText(sActionTexts[TEXT_CHOOSE_MON], sMenuTextTileBuffers[GFXTAG_CHOOSE_PKMN_L], 24); gMain.state++; - sTradeMenuData->timer = 0; + sTradeMenu->timer = 0; break; case 11: - if (LoadTradeMenuSpriteSheetsAndPalettes()) + if (LoadUISpriteGfx()) gMain.state++; break; case 12: // Create player's name text sprites xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gSaveBlock2Ptr->playerName, 120); - for (i = 0; i < GFXTAG_PLAYER_NAME; i++) + for (i = 0; i < NUM_PLAYER_NAME_SPRITES; i++) { temp = sSpriteTemplate_MenuText; temp.tileTag += i + GFXTAG_PLAYER_NAME_L; @@ -738,7 +807,7 @@ static void CB2_ReturnToTradeMenu(void) // Create partner's name text sprites xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gLinkPlayers[GetMultiplayerId() ^ 1].name, 120); - for (i = 0; i < GFXTAG_PARTNER_NAME; i++) + for (i = 0; i < NUM_PARTNER_NAME_SPRITES; i++) { temp = sSpriteTemplate_MenuText; temp.tileTag += i + GFXTAG_PARTNER_NAME_L; @@ -753,24 +822,24 @@ static void CB2_ReturnToTradeMenu(void) CreateSprite(&temp, 215, 152, 1); temp = sSpriteTemplate_MenuText; temp.tileTag += GFXTAG_CANCEL_R; - CreateSprite(&temp, 247, 152, 1); + CreateSprite(&temp, 215 + 32, 152, 1); // Create Choose a Pokémon text sprites - for (i = 0; i < GFXTAG_CHOOSE_PKMN; i++) + for (i = 0; i < NUM_CHOOSE_PKMN_SPRITES; i++) { temp = sSpriteTemplate_MenuText; temp.tileTag += i + GFXTAG_CHOOSE_PKMN_L; CreateSprite(&temp, (i * 32) + 24, 150, 1); } - if (sTradeMenuData->cursorPosition < PARTY_SIZE) - sTradeMenuData->cursorPosition = gLastViewedMonIndex; + if (sTradeMenu->cursorPosition < PARTY_SIZE) + sTradeMenu->cursorPosition = gLastViewedMonIndex; else - sTradeMenuData->cursorPosition = gLastViewedMonIndex + PARTY_SIZE; + sTradeMenu->cursorPosition = gLastViewedMonIndex + PARTY_SIZE; - sTradeMenuData->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, - sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][0] * 8 + 32, - sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][1] * 8, 2); + sTradeMenu->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, + sTradeMonSpriteCoords[sTradeMenu->cursorPosition][0] * 8 + 32, + sTradeMonSpriteCoords[sTradeMenu->cursorPosition][1] * 8, 2); gMain.state = 16; break; case 16: @@ -779,9 +848,9 @@ static void CB2_ReturnToTradeMenu(void) break; case 17: LoadTradeBgGfx(1); - sTradeMenuData->bg2hofs = 0; - sTradeMenuData->bg3hofs = 0; - SetTradePartyMonsVisible(); + sTradeMenu->bg2hofs = 0; + sTradeMenu->bg3hofs = 0; + SetActiveMenuOptions(); gMain.state++; break; case 18: @@ -804,9 +873,7 @@ static void CB2_ReturnToTradeMenu(void) break; case 22: if (!gPaletteFade.active) - { SetMainCallback2(CB2_TradeMenu); - } break; } @@ -823,59 +890,59 @@ static void VBlankCB_TradeMenu(void) TransferPlttBuffer(); } -static void LinkTradeFadeOut(void) +static void CB_FadeToStartTrade(void) { - if (++sTradeMenuData->timer > 15) + if (++sTradeMenu->timer > 15) { BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_WAIT_FADE; + sTradeMenu->callbackId = CB_WAIT_TO_START_TRADE; } } -static void LinkTradeWaitForFade(void) +static void CB_WaitToStartTrade(void) { if (!gPaletteFade.active) { - gSelectedTradeMonPositions[TRADE_PLAYER] = sTradeMenuData->cursorPosition; - gSelectedTradeMonPositions[TRADE_PARTNER] = sTradeMenuData->partnerCursorPosition; + gSelectedTradeMonPositions[TRADE_PLAYER] = sTradeMenu->cursorPosition; + gSelectedTradeMonPositions[TRADE_PARTNER] = sTradeMenu->partnerCursorPosition; if (gWirelessCommType) { - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE; + sTradeMenu->callbackId = CB_WAIT_TO_START_RFU_TRADE; } else { SetCloseLinkCallbackAndType(32); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE; + sTradeMenu->callbackId = CB_START_LINK_TRADE; } } } -static void SetLinkTradeCallbacks(void) +static void CB_StartLinkTrade(void) { gMain.savedCallback = CB2_StartCreateTradeMenu; - // Wireless Link Trade if (gWirelessCommType) { + // Wireless Link Trade if (IsLinkRfuTaskFinished()) { - Free(sMenuTextAllocBuffer); + Free(sMenuTextTileBuffer); FreeAllWindowBuffers(); - Free(sTradeMenuData); + Free(sTradeMenu); gMain.callback1 = NULL; DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(CB2_LinkTrade); } } - // Cable Link Trade else { + // Cable Link Trade if (!gReceivedRemoteLinkPlayers) { - Free(sMenuTextAllocBuffer); + Free(sMenuTextTileBuffer); FreeAllWindowBuffers(); - Free(sTradeMenuData); + Free(sTradeMenu); gMain.callback1 = NULL; SetMainCallback2(CB2_LinkTrade); } @@ -884,13 +951,15 @@ static void SetLinkTradeCallbacks(void) static void CB2_TradeMenu(void) { - CallTradeMenuFunc(); + RunTradeMenuCallback(); DoQueuedActions(); - DrawTradeMenuParty(TRADE_PLAYER); - DrawTradeMenuParty(TRADE_PARTNER); - SetGpuReg(REG_OFFSET_BG2HOFS, sTradeMenuData->bg2hofs++); - SetGpuReg(REG_OFFSET_BG3HOFS, sTradeMenuData->bg3hofs--); + // As long as drawSelectedMonState is 0, these do nothing + DrawSelectedMonScreen(TRADE_PLAYER); + DrawSelectedMonScreen(TRADE_PARTNER); + + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeMenu->bg2hofs++); + SetGpuReg(REG_OFFSET_BG3HOFS, sTradeMenu->bg3hofs--); RunTextPrintersAndIsPrinter0Active(); RunTasks(); @@ -906,15 +975,15 @@ static void LoadTradeBgGfx(u8 state) switch (state) { case 0: - LoadPalette(gTradeMenu_Pal, 0, 0x60); + LoadPalette(gTradeMenu_Pal, BG_PLTT_ID(0), 3 * PLTT_SIZE_4BPP); LoadBgTiles(1, gTradeMenu_Gfx, 0x1280, 0); CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenu_Tilemap, 0, 0, 32, 20, 0); LoadBgTilemap(2, sTradeStripesBG2Tilemap, 0x800, 0); break; case 1: LoadBgTilemap(3, sTradeStripesBG3Tilemap, 0x800, 0); - DrawTradeMenuPartyInfo(TRADE_PLAYER); - DrawTradeMenuPartyInfo(TRADE_PARTNER); + PrintPartyLevelsAndGenders(TRADE_PLAYER); + PrintPartyLevelsAndGenders(TRADE_PARTNER); CopyBgTilemapBufferToVram(1); break; case 2: @@ -928,47 +997,50 @@ static void LoadTradeBgGfx(u8 state) } } -static void SetTradePartyMonsVisible(void) +// Determine (based on party counts) where the main menu cursor can go +static void SetActiveMenuOptions(void) { int i; for (i = 0; i < PARTY_SIZE; i++) { - if (i < sTradeMenuData->partyCounts[TRADE_PLAYER]) + if (i < sTradeMenu->partyCounts[TRADE_PLAYER]) { - gSprites[sTradeMenuData->partySpriteIds[TRADE_PLAYER][i]].invisible = FALSE; - sTradeMenuData->monPresent[i] = TRUE; + // Present player pokemon + gSprites[sTradeMenu->partySpriteIds[TRADE_PLAYER][i]].invisible = FALSE; + sTradeMenu->optionsActive[i] = TRUE; } else { - sTradeMenuData->monPresent[i] = FALSE; + // Absent player pokemon + sTradeMenu->optionsActive[i] = FALSE; } - if (i < sTradeMenuData->partyCounts[TRADE_PARTNER]) + if (i < sTradeMenu->partyCounts[TRADE_PARTNER]) { - gSprites[sTradeMenuData->partySpriteIds[TRADE_PARTNER][i]].invisible = FALSE; - sTradeMenuData->monPresent[i + PARTY_SIZE] = TRUE; + // Present partner pokemon + gSprites[sTradeMenu->partySpriteIds[TRADE_PARTNER][i]].invisible = FALSE; + sTradeMenu->optionsActive[i + PARTY_SIZE] = TRUE; } else { - sTradeMenuData->monPresent[i + PARTY_SIZE] = FALSE; + // Absent partner pokemon + sTradeMenu->optionsActive[i + PARTY_SIZE] = FALSE; } } - sTradeMenuData->neverRead_44 = TRUE; + // Cancel is always active + sTradeMenu->optionsActive[PARTY_SIZE * 2] = TRUE; } // why not just use memcpy? -static void Trade_Memcpy(void *dataDest, const void *dataSrc, u32 count) +static void Trade_Memcpy(void *dest, const void *src, u32 size) { - u8 *dest = dataDest; - const u8 *src = dataSrc; + u8 *_dest = dest; + const u8 *_src = src; u32 i; - - for (i = 0; i < count; i++) - { - dest[i] = src[i]; - } + for (i = 0; i < size; i++) + _dest[i] = _src[i]; } static bool8 BufferTradeParties(void) @@ -977,107 +1049,107 @@ static bool8 BufferTradeParties(void) int i; struct Pokemon *mon; - switch (sTradeMenuData->bufferPartyState) + switch (sTradeMenu->bufferPartyState) { case 0: // The parties are sent in pairs rather than all at once Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[0], 2 * sizeof(struct Pokemon)); - sTradeMenuData->bufferPartyState++; - sTradeMenuData->timer = 0; + sTradeMenu->bufferPartyState++; + sTradeMenu->timer = 0; break; case 1: if (IsLinkTradeTaskFinished()) { if (_GetBlockReceivedStatus() == 0) { - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } else { TradeResetReceivedFlags(); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } } break; case 3: if (id == 0) RequestLinkData(BLOCK_REQ_SIZE_200); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 4: if (_GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[0], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); TradeResetReceivedFlags(); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } break; case 5: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[2], 2 * sizeof(struct Pokemon)); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 7: if (id == 0) RequestLinkData(BLOCK_REQ_SIZE_200); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 8: if (_GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); TradeResetReceivedFlags(); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } break; case 9: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 2 * sizeof(struct Pokemon)); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 11: if (id == 0) RequestLinkData(BLOCK_REQ_SIZE_200); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 12: if (_GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); TradeResetReceivedFlags(); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } break; case 13: Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, PARTY_SIZE * sizeof(struct Mail) + 4); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 15: if (id == 0) RequestLinkData(BLOCK_REQ_SIZE_220); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 16: if (_GetBlockReceivedStatus() == 3) { Trade_Memcpy(gTradeMail, gBlockRecvBuffer[id ^ 1], PARTY_SIZE * sizeof(struct Mail)); TradeResetReceivedFlags(); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } break; case 17: - Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, sizeof(sTradeMenuData->giftRibbons)); - sTradeMenuData->bufferPartyState++; + Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, sizeof(sTradeMenu->giftRibbons)); + sTradeMenu->bufferPartyState++; break; case 19: if (id == 0) RequestLinkData(BLOCK_REQ_SIZE_40); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 20: if (_GetBlockReceivedStatus() == 3) { - Trade_Memcpy(sTradeMenuData->giftRibbons, gBlockRecvBuffer[id ^ 1], sizeof(sTradeMenuData->giftRibbons)); + Trade_Memcpy(sTradeMenu->giftRibbons, gBlockRecvBuffer[id ^ 1], sizeof(sTradeMenu->giftRibbons)); TradeResetReceivedFlags(); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } break; case 21: @@ -1092,10 +1164,8 @@ static bool8 BufferTradeParties(void) { GetMonData(mon, MON_DATA_NICKNAME, name); - if (!StringCompareWithoutExtCtrlCodes(name, sJPText_Shedinja)) - { + if (!StringCompareWithoutExtCtrlCodes(name, sText_ShedinjaJP)) SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[SPECIES_SHEDINJA]); - } } } } @@ -1106,40 +1176,39 @@ static bool8 BufferTradeParties(void) case 10: case 14: case 18: - sTradeMenuData->timer++; - if (sTradeMenuData->timer > 10) + sTradeMenu->timer++; + if (sTradeMenu->timer > 10) { - sTradeMenuData->timer = 0; - sTradeMenuData->bufferPartyState++; + sTradeMenu->timer = 0; + sTradeMenu->bufferPartyState++; } break; } return FALSE; } -static void DrawIsThisTradeOkay(void) +static void PrintIsThisTradeOkay(void) { - DrawBottomRowText(sText_IsThisTradeOkay, (void *)(OBJ_VRAM0 + (sTradeMenuData->bottomTextTileStart * 32)), 24); + DrawBottomRowText(sText_IsThisTradeOkay, (void *)(OBJ_VRAM0 + (sTradeMenu->bottomTextTileStart * 32)), 24); } -// mpId is unused -static void UpdateLinkTradeFlags(u8 mpId, u8 status) +static void Leader_ReadLinkBuffer(u8 mpId, u8 status) { if (status & 1) { switch (gBlockRecvBuffer[0][0]) { case LINKCMD_REQUEST_CANCEL: - sTradeMenuData->playerLinkFlagChoseAction = WANTS_TO_CANCEL; + sTradeMenu->playerSelectStatus = STATUS_CANCEL; break; case LINKCMD_READY_TO_TRADE: - sTradeMenuData->playerLinkFlagChoseAction = WANTS_TO_TRADE; + sTradeMenu->playerSelectStatus = STATUS_READY; break; case LINKCMD_INIT_BLOCK: - sTradeMenuData->playerLinkFlagStatus = INITIATE_TRADE; + sTradeMenu->playerConfirmStatus = STATUS_READY; break; case LINKCMD_READY_CANCEL_TRADE: - sTradeMenuData->playerLinkFlagStatus = CANCEL_TRADE; + sTradeMenu->playerConfirmStatus = STATUS_CANCEL; break; } TradeResetReceivedFlag(0); @@ -1150,25 +1219,24 @@ static void UpdateLinkTradeFlags(u8 mpId, u8 status) switch (gBlockRecvBuffer[1][0]) { case LINKCMD_REQUEST_CANCEL: - sTradeMenuData->partnerLinkFlagChoseAction = WANTS_TO_CANCEL; + sTradeMenu->partnerSelectStatus = STATUS_CANCEL; break; case LINKCMD_READY_TO_TRADE: - sTradeMenuData->partnerCursorPosition = gBlockRecvBuffer[1][1] + 6; - sTradeMenuData->partnerLinkFlagChoseAction = WANTS_TO_TRADE; + sTradeMenu->partnerCursorPosition = gBlockRecvBuffer[1][1] + PARTY_SIZE; + sTradeMenu->partnerSelectStatus = STATUS_READY; break; case LINKCMD_INIT_BLOCK: - sTradeMenuData->partnerLinkFlagStatus = INITIATE_TRADE; + sTradeMenu->partnerConfirmStatus = STATUS_READY; break; case LINKCMD_READY_CANCEL_TRADE: - sTradeMenuData->partnerLinkFlagStatus = CANCEL_TRADE; + sTradeMenu->partnerConfirmStatus = STATUS_CANCEL; break; } TradeResetReceivedFlag(1); } } -// mpId is unused -static void ReactToLinkTradeData(u8 mpId, u8 status) +static void Follower_ReadLinkBuffer(u8 mpId, u8 status) { if (status & 1) { @@ -1176,27 +1244,27 @@ static void ReactToLinkTradeData(u8 mpId, u8 status) { case LINKCMD_BOTH_CANCEL_TRADE: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - PrintTradeMessage(TRADE_MSG_WAITING_FOR_FRIEND); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_1; + PrintTradeMessage(MSG_WAITING_FOR_FRIEND); + sTradeMenu->callbackId = CB_INIT_EXIT_CANCELED_TRADE; break; case LINKCMD_PARTNER_CANCEL_TRADE: - PrintTradeMessage(TRADE_MSG_FRIEND_WANTS_TO_TRADE); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + PrintTradeMessage(MSG_FRIEND_WANTS_TO_TRADE); + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; break; case LINKCMD_SET_MONS_TO_TRADE: - sTradeMenuData->partnerCursorPosition = gBlockRecvBuffer[0][1] + 6; + sTradeMenu->partnerCursorPosition = gBlockRecvBuffer[0][1] + PARTY_SIZE; rbox_fill_rectangle(0); - SetSelectedMon(sTradeMenuData->cursorPosition); - SetSelectedMon(sTradeMenuData->partnerCursorPosition); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CONFIRM_TRADE_PROMPT; + SetSelectedMon(sTradeMenu->cursorPosition); + SetSelectedMon(sTradeMenu->partnerCursorPosition); + sTradeMenu->callbackId = CB_PRINT_IS_THIS_OKAY; break; case LINKCMD_START_TRADE: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_WAIT_FADE; + sTradeMenu->callbackId = CB_WAIT_TO_START_TRADE; break; case LINKCMD_PLAYER_CANCEL_TRADE: - PrintTradeMessage(TRADE_MSG_CANCELED); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + PrintTradeMessage(MSG_CANCELED); + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; } TradeResetReceivedFlag(0); } @@ -1205,76 +1273,87 @@ static void ReactToLinkTradeData(u8 mpId, u8 status) TradeResetReceivedFlag(1); } -static void QueueLinkTradeData(void) +static void Leader_HandleCommunication(void) { - if (sTradeMenuData->playerLinkFlagChoseAction && sTradeMenuData->partnerLinkFlagChoseAction) + if (sTradeMenu->playerSelectStatus != STATUS_NONE + && sTradeMenu->partnerSelectStatus != STATUS_NONE) { - if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_TRADE - && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_TRADE) + if (sTradeMenu->playerSelectStatus == STATUS_READY + && sTradeMenu->partnerSelectStatus == STATUS_READY) { - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_BOTH_MONS_SELECTED; - sTradeMenuData->linkData[0] = LINKCMD_SET_MONS_TO_TRADE; - sTradeMenuData->linkData[1] = sTradeMenuData->cursorPosition; + // Both players have selected a pokemon to trade + sTradeMenu->callbackId = CB_SET_SELECTED_MONS; + sTradeMenu->linkData[0] = LINKCMD_SET_MONS_TO_TRADE; + sTradeMenu->linkData[1] = sTradeMenu->cursorPosition; QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); - sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0; + sTradeMenu->playerSelectStatus = sTradeMenu->partnerSelectStatus = STATUS_NONE; } - else if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_TRADE - && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_CANCEL) + else if (sTradeMenu->playerSelectStatus == STATUS_READY + && sTradeMenu->partnerSelectStatus == STATUS_CANCEL) { - PrintTradeMessage(TRADE_MSG_CANCELED); - sTradeMenuData->linkData[0] = LINKCMD_PARTNER_CANCEL_TRADE; - sTradeMenuData->linkData[1] = 0; + // The player has selected a pokemon to trade, + // but the partner has selected Cancel + PrintTradeMessage(MSG_CANCELED); + sTradeMenu->linkData[0] = LINKCMD_PARTNER_CANCEL_TRADE; + sTradeMenu->linkData[1] = 0; QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); - sTradeMenuData->playerLinkFlagStatus = sTradeMenuData->partnerLinkFlagStatus = 0; - sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; - } - else if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_CANCEL - && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_TRADE) - { - PrintTradeMessage(TRADE_MSG_FRIEND_WANTS_TO_TRADE); - sTradeMenuData->linkData[0] = LINKCMD_PLAYER_CANCEL_TRADE; - sTradeMenuData->linkData[1] = 0; + sTradeMenu->playerConfirmStatus = sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->playerSelectStatus = sTradeMenu->partnerSelectStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; + } + else if (sTradeMenu->playerSelectStatus == STATUS_CANCEL + && sTradeMenu->partnerSelectStatus == STATUS_READY) + { + // The partner has selected a pokemon to trade, + // but the player has selected cancel + PrintTradeMessage(MSG_FRIEND_WANTS_TO_TRADE); + sTradeMenu->linkData[0] = LINKCMD_PLAYER_CANCEL_TRADE; + sTradeMenu->linkData[1] = 0; QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); - sTradeMenuData->playerLinkFlagStatus = sTradeMenuData->partnerLinkFlagStatus = 0; - sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + sTradeMenu->playerConfirmStatus = sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->playerSelectStatus = sTradeMenu->partnerSelectStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; } - else if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_CANCEL - && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_CANCEL) + else if (sTradeMenu->playerSelectStatus == STATUS_CANCEL + && sTradeMenu->partnerSelectStatus == STATUS_CANCEL) { - sTradeMenuData->linkData[0] = LINKCMD_BOTH_CANCEL_TRADE; - sTradeMenuData->linkData[1] = 0; + // Both players have selected Cancel + sTradeMenu->linkData[0] = LINKCMD_BOTH_CANCEL_TRADE; + sTradeMenu->linkData[1] = 0; QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_1; + sTradeMenu->playerSelectStatus = sTradeMenu->partnerSelectStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_INIT_EXIT_CANCELED_TRADE; } } - if (sTradeMenuData->playerLinkFlagStatus && sTradeMenuData->partnerLinkFlagStatus) + if (sTradeMenu->playerConfirmStatus != STATUS_NONE + && sTradeMenu->partnerConfirmStatus != STATUS_NONE) { - if (sTradeMenuData->playerLinkFlagStatus == INITIATE_TRADE - && sTradeMenuData->partnerLinkFlagStatus == INITIATE_TRADE) + if (sTradeMenu->playerConfirmStatus == STATUS_READY + && sTradeMenu->partnerConfirmStatus == STATUS_READY) { - sTradeMenuData->linkData[0] = LINKCMD_START_TRADE; - sTradeMenuData->linkData[1] = 0; + // Both players have confirmed trade + sTradeMenu->linkData[0] = LINKCMD_START_TRADE; + sTradeMenu->linkData[1] = 0; QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); - sTradeMenuData->playerLinkFlagStatus = 0; - sTradeMenuData->partnerLinkFlagStatus = 0; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_FADE_OUT; + sTradeMenu->playerConfirmStatus = STATUS_NONE; + sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_FADE_TO_START_TRADE; } - if (sTradeMenuData->playerLinkFlagStatus == CANCEL_TRADE - || sTradeMenuData->partnerLinkFlagStatus == CANCEL_TRADE) + if (sTradeMenu->playerConfirmStatus == STATUS_CANCEL + || sTradeMenu->partnerConfirmStatus == STATUS_CANCEL) { - PrintTradeMessage(TRADE_MSG_CANCELED); - sTradeMenuData->linkData[0] = LINKCMD_PLAYER_CANCEL_TRADE; - sTradeMenuData->linkData[1] = 0; + // One of the players has decided not to confirm the trade, + // or the trade was not allowed. + PrintTradeMessage(MSG_CANCELED); + sTradeMenu->linkData[0] = LINKCMD_PLAYER_CANCEL_TRADE; + sTradeMenu->linkData[1] = 0; QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); - sTradeMenuData->playerLinkFlagStatus = 0; - sTradeMenuData->partnerLinkFlagStatus = 0; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + sTradeMenu->playerConfirmStatus = STATUS_NONE; + sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; } } } @@ -1288,10 +1367,10 @@ static void _SetLinkData(u16 *linkData, u16 linkCmd, u16 cursorPosition) static void SetLinkData(u16 linkCmd, u16 cursorPosition) { - _SetLinkData(sTradeMenuData->linkData, linkCmd, cursorPosition); + _SetLinkData(sTradeMenu->linkData, linkCmd, cursorPosition); } -static void CB1_SendOrReactToLinkTradeData(void) +static void CB1_UpdateLink(void) { u8 mpId = GetMultiplayerId(); u8 status; @@ -1299,25 +1378,25 @@ static void CB1_SendOrReactToLinkTradeData(void) if ((status = _GetBlockReceivedStatus())) { if (mpId == 0) - UpdateLinkTradeFlags(mpId, status); + Leader_ReadLinkBuffer(mpId, status); else - ReactToLinkTradeData(mpId, status); + Follower_ReadLinkBuffer(mpId, status); } if (mpId == 0) - QueueLinkTradeData(); + Leader_HandleCommunication(); } -static u8 GetNewTradeMenuPosition(u8 oldPosition, u8 direction) +static u8 GetNewCursorPosition(u8 oldPosition, u8 direction) { int i; u8 newPosition = 0; for (i = 0; i < PARTY_SIZE; i++) { - if (sTradeMenuData->monPresent[sTradeNextSelectedMonTable[oldPosition][direction][i]] == TRUE) + if (sTradeMenu->optionsActive[sCursorMoveDestinations[oldPosition][direction][i]] == TRUE) { - newPosition = sTradeNextSelectedMonTable[oldPosition][direction][i]; + newPosition = sCursorMoveDestinations[oldPosition][direction][i]; break; } } @@ -1327,157 +1406,151 @@ static u8 GetNewTradeMenuPosition(u8 oldPosition, u8 direction) static void TradeMenuMoveCursor(u8 *cursorPosition, u8 direction) { - u8 newPosition = GetNewTradeMenuPosition(*cursorPosition, direction); + u8 newPosition = GetNewCursorPosition(*cursorPosition, direction); if (newPosition == (PARTY_SIZE * 2)) // CANCEL { - StartSpriteAnim(&gSprites[sTradeMenuData->cursorSpriteId], CURSOR_ANIM_ON_CANCEL); - gSprites[sTradeMenuData->cursorSpriteId].x = DISPLAY_WIDTH - 16; - gSprites[sTradeMenuData->cursorSpriteId].y = DISPLAY_HEIGHT; + StartSpriteAnim(&gSprites[sTradeMenu->cursorSpriteId], CURSOR_ANIM_ON_CANCEL); + gSprites[sTradeMenu->cursorSpriteId].x = DISPLAY_WIDTH - 16; + gSprites[sTradeMenu->cursorSpriteId].y = DISPLAY_HEIGHT; } else { - StartSpriteAnim(&gSprites[sTradeMenuData->cursorSpriteId], CURSOR_ANIM_NORMAL); - gSprites[sTradeMenuData->cursorSpriteId].x = sTradeMonSpriteCoords[newPosition][0] * 8 + 32; - gSprites[sTradeMenuData->cursorSpriteId].y = sTradeMonSpriteCoords[newPosition][1] * 8; + StartSpriteAnim(&gSprites[sTradeMenu->cursorSpriteId], CURSOR_ANIM_NORMAL); + gSprites[sTradeMenu->cursorSpriteId].x = sTradeMonSpriteCoords[newPosition][0] * 8 + 32; + gSprites[sTradeMenu->cursorSpriteId].y = sTradeMonSpriteCoords[newPosition][1] * 8; } if (*cursorPosition != newPosition) - { PlaySE(SE_SELECT); - } *cursorPosition = newPosition; } static void SetReadyToTrade(void) { - PrintTradeMessage(TRADE_MSG_STANDBY); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + PrintTradeMessage(MSG_STANDBY); + sTradeMenu->callbackId = CB_IDLE; if (GetMultiplayerId() == 1) - SetLinkData(LINKCMD_READY_TO_TRADE, sTradeMenuData->cursorPosition); + { + // Communicate to the link leader that we're ready to trade + SetLinkData(LINKCMD_READY_TO_TRADE, sTradeMenu->cursorPosition); + } else - sTradeMenuData->playerLinkFlagChoseAction = WANTS_TO_TRADE; + { + // We are the link leader, no communication necessary + sTradeMenu->playerSelectStatus = STATUS_READY; + } } -static void TradeMenuProcessInput(void) +static void CB_ProcessMenuInput(void) { if (JOY_REPEAT(DPAD_UP)) - { - TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 0); - } + TradeMenuMoveCursor(&sTradeMenu->cursorPosition, 0); else if (JOY_REPEAT(DPAD_DOWN)) - { - TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 1); - } + TradeMenuMoveCursor(&sTradeMenu->cursorPosition, 1); else if (JOY_REPEAT(DPAD_LEFT)) - { - TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 2); - } + TradeMenuMoveCursor(&sTradeMenu->cursorPosition, 2); else if (JOY_REPEAT(DPAD_RIGHT)) - { - TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 3); - } + TradeMenuMoveCursor(&sTradeMenu->cursorPosition, 3); if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - // Cursor is in player's party - if (sTradeMenuData->cursorPosition < PARTY_SIZE) + if (sTradeMenu->cursorPosition < PARTY_SIZE) { + // Selected pokemon in player's party DrawTextBorderOuter(1, 1, 14); FillWindowPixelBuffer(1, PIXEL_FILL(1)); PrintMenuTable(1, ARRAY_COUNT(sSelectTradeMonActions), sSelectTradeMonActions); InitMenuInUpperLeftCornerNormal(1, ARRAY_COUNT(sSelectTradeMonActions), 0); PutWindowTilemap(1); CopyWindowToVram(1, COPYWIN_FULL); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SELECTED_MON; + sTradeMenu->callbackId = CB_SELECTED_MON; } - // Cursor is in partner's party - else if (sTradeMenuData->cursorPosition < PARTY_SIZE * 2) + else if (sTradeMenu->cursorPosition < PARTY_SIZE * 2) { + // Selected pokemon in partner's party BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SHOW_MON_SUMMARY; + sTradeMenu->callbackId = CB_SHOW_MON_SUMMARY; } - // Cursor is on Cancel - else if (sTradeMenuData->cursorPosition == PARTY_SIZE * 2) + else if (sTradeMenu->cursorPosition == PARTY_SIZE * 2) { + // Selected Cancel CreateYesNoMenu(&sTradeYesNoWindowTemplate, 1, 14, 0); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_PROMPT; - DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CANCEL_TRADE], (void *)(OBJ_VRAM0 + sTradeMenuData->bottomTextTileStart * 32), 24); + sTradeMenu->callbackId = CB_CANCEL_TRADE_PROMPT; + DrawBottomRowText(sActionTexts[TEXT_CANCEL_TRADE], (void *)(OBJ_VRAM0 + sTradeMenu->bottomTextTileStart * 32), 24); } } } -static void TradeMenuChooseMon(void) +static void RedrawChooseAPokemonWindow(void) { - PrintNicknamesForTradeMenu(); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_MAIN_MENU; - gSprites[sTradeMenuData->cursorSpriteId].invisible = FALSE; - DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + sTradeMenuData->bottomTextTileStart * 32), 24); + PrintTradePartnerPartyNicknames(); + sTradeMenu->callbackId = CB_MAIN_MENU; + gSprites[sTradeMenu->cursorSpriteId].invisible = FALSE; + DrawBottomRowText(sActionTexts[TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + sTradeMenu->bottomTextTileStart * 32), 24); } -static void TradeMenuProcessInput_SelectedMon(void) +static void CB_ProcessSelectedMonInput(void) { switch (Menu_ProcessInputNoWrap()) { case MENU_B_PRESSED: PlaySE(SE_SELECT); - TradeMenuChooseMon(); + RedrawChooseAPokemonWindow(); break; case MENU_NOTHING_CHOSEN: break; case 0: // Summary BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SHOW_MON_SUMMARY; + sTradeMenu->callbackId = CB_SHOW_MON_SUMMARY; break; case 1: // Trade - switch (CanTradeSelectedMon(gPlayerParty, gPlayerPartyCount, sTradeMenuData->cursorPosition)) + switch (CanTradeSelectedMon(gPlayerParty, gPlayerPartyCount, sTradeMenu->cursorPosition)) { case CAN_TRADE_MON: SetReadyToTrade(); - gSprites[sTradeMenuData->cursorSpriteId].invisible = TRUE; + gSprites[sTradeMenu->cursorSpriteId].invisible = TRUE; break; case CANT_TRADE_LAST_MON: QueueAction(QUEUE_DELAY_MSG, QUEUE_ONLY_MON2); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; break; case CANT_TRADE_NATIONAL: case CANT_TRADE_INVALID_MON: QueueAction(QUEUE_DELAY_MSG, QUEUE_MON_CANT_BE_TRADED); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; break; case CANT_TRADE_EGG_YET: - case CANT_TRADE_EGG_YET2: + case CANT_TRADE_PARTNER_EGG_YET: QueueAction(QUEUE_DELAY_MSG, QUEUE_EGG_CANT_BE_TRADED); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; break; } break; } } -static void ChooseMonAfterButtonPress(void) +static void CB_ChooseMonAfterButtonPress(void) { - if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - TradeMenuChooseMon(); + RedrawChooseAPokemonWindow(); } } -static void TradeMenuShowMonSummaryScreen(void) +static void CB_ShowTradeMonSummaryScreen(void) { if (!gPaletteFade.active) { - // Player's party - if (sTradeMenuData->cursorPosition < PARTY_SIZE) - ShowPokemonSummaryScreen(SUMMARY_MODE_LOCK_MOVES, gPlayerParty, sTradeMenuData->cursorPosition, sTradeMenuData->partyCounts[TRADE_PLAYER] - 1, CB2_ReturnToTradeMenu); - // Partner's party + if (sTradeMenu->cursorPosition < PARTY_SIZE) + ShowPokemonSummaryScreen(SUMMARY_MODE_LOCK_MOVES, gPlayerParty, sTradeMenu->cursorPosition, sTradeMenu->partyCounts[TRADE_PLAYER] - 1, CB2_ReturnToTradeMenu); else - ShowPokemonSummaryScreen(SUMMARY_MODE_LOCK_MOVES, gEnemyParty, sTradeMenuData->cursorPosition - PARTY_SIZE, sTradeMenuData->partyCounts[TRADE_PARTNER] - 1, CB2_ReturnToTradeMenu); + ShowPokemonSummaryScreen(SUMMARY_MODE_LOCK_MOVES, gEnemyParty, sTradeMenu->cursorPosition - PARTY_SIZE, sTradeMenu->partyCounts[TRADE_PARTNER] - 1, CB2_ReturnToTradeMenu); FreeAllWindowBuffers(); } } @@ -1505,13 +1578,13 @@ static u8 CheckValidityOfTradeMons(u8 *aliveMons, u8 playerPartyCount, u8 player } // Can't trade specific species - if (gBaseStats[partnerSpecies].flags & SPECIES_FLAG_CANNOT_BE_TRADED) + if (gSpeciesInfo[partnerSpecies].flags & SPECIES_FLAG_CANNOT_BE_TRADED) return PARTNER_MON_INVALID; // Partner cant trade Egg or non-Hoenn mon if player doesn't have National Dex if (!IsNationalPokedexEnabled()) { - if (sTradeMenuData->isEgg[TRADE_PARTNER][partnerMonIdx] || !IsSpeciesInHoennDex(partnerSpecies)) + if (sTradeMenu->isEgg[TRADE_PARTNER][partnerMonIdx] || !IsSpeciesInHoennDex(partnerSpecies)) return PARTNER_MON_INVALID; } @@ -1527,14 +1600,12 @@ static bool32 CheckMonsBeforeTrade(void) int i; u8 aliveMons[PARTY_SIZE * 2]; - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++) - { - aliveMons[i] = sTradeMenuData->isLiveMon[TRADE_PLAYER][i]; - } + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) + aliveMons[i] = sTradeMenu->isLiveMon[TRADE_PLAYER][i]; - switch (CheckValidityOfTradeMons(aliveMons, sTradeMenuData->partyCounts[TRADE_PLAYER], - sTradeMenuData->cursorPosition, - sTradeMenuData->partnerCursorPosition)) + switch (CheckValidityOfTradeMons(aliveMons, sTradeMenu->partyCounts[TRADE_PLAYER], + sTradeMenu->cursorPosition, + sTradeMenu->partnerCursorPosition)) { case PLAYER_MON_INVALID: QueueAction(QUEUE_DELAY_MSG, QUEUE_ONLY_MON2); @@ -1552,24 +1623,24 @@ static bool32 CheckMonsBeforeTrade(void) return FALSE; } -static void ConfirmOrCancelTrade(void) +static void CB_ProcessConfirmTradeInput(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case 0: // Confirm Trade + case 0: // YES, Confirm selection if (!CheckMonsBeforeTrade()) - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + sTradeMenu->callbackId = CB_IDLE; else - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_PARTNER_MON_INVALID; + sTradeMenu->callbackId = CB_PARTNER_MON_INVALID; PutWindowTilemap(17); break; - case 1: // Cancel Trade + case 1: // NO, Cancel Trade case MENU_B_PRESSED: QueueAction(QUEUE_DELAY_MSG, QUEUE_STANDBY); if (IsLinkTradeTaskFinished()) SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + sTradeMenu->callbackId = CB_IDLE; PutWindowTilemap(17); break; } @@ -1580,66 +1651,65 @@ static void RestoreNicknamesCoveredByYesNo(void) { int i; - for (i = 0; i < sTradeMenuData->partyCounts[1] - 4; i++) + for (i = 0; i < sTradeMenu->partyCounts[1] - 4; i++) { - PutWindowTilemap(i + 12); - CopyWindowToVram(i + 12, COPYWIN_MAP); + PutWindowTilemap(i + PARTY_SIZE * 2); + CopyWindowToVram(i + PARTY_SIZE * 2, COPYWIN_MAP); } } -static void CancelTradeYesNo(void) +static void CB_ProcessCancelTradeInput(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: // YES, Cancel - PrintTradeMessage(TRADE_MSG_WAITING_FOR_FRIEND); + PrintTradeMessage(MSG_WAITING_FOR_FRIEND); SetLinkData(LINKCMD_REQUEST_CANCEL, 0); - gSprites[sTradeMenuData->cursorSpriteId].invisible = TRUE; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + gSprites[sTradeMenu->cursorSpriteId].invisible = TRUE; + sTradeMenu->callbackId = CB_IDLE; RestoreNicknamesCoveredByYesNo(); break; case 1: // NO, Continue case MENU_B_PRESSED: PlaySE(SE_SELECT); - TradeMenuChooseMon(); + RedrawChooseAPokemonWindow(); break; } } -static void SetBothSelectedMons(void) +static void CB_SetSelectedMons(void) { if (GetMultiplayerId() == 0) { rbox_fill_rectangle(0); - SetSelectedMon(sTradeMenuData->cursorPosition); - SetSelectedMon(sTradeMenuData->partnerCursorPosition); + SetSelectedMon(sTradeMenu->cursorPosition); + SetSelectedMon(sTradeMenu->partnerCursorPosition); } - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CONFIRM_TRADE_PROMPT; + sTradeMenu->callbackId = CB_PRINT_IS_THIS_OKAY; } -static void ConfirmTradePrompt(void) +static void CB_PrintIsThisTradeOkay(void) { - if (sTradeMenuData->drawPartyState[TRADE_PLAYER] == DRAW_PARTY_FINISH - && sTradeMenuData->drawPartyState[TRADE_PARTNER] == DRAW_PARTY_FINISH) + if (sTradeMenu->drawSelectedMonState[TRADE_PLAYER] == DRAW_SELECTED_FINISH + && sTradeMenu->drawSelectedMonState[TRADE_PARTNER] == DRAW_SELECTED_FINISH) { - DrawIsThisTradeOkay(); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_DELAY_TRADE_CONFIRM; + PrintIsThisTradeOkay(); + sTradeMenu->callbackId = CB_INIT_CONFIRM_TRADE_PROMPT; } } -static void DelayTradeConfirmation(void) +static void CB_InitConfirmTradePrompt(void) { - sTradeMenuData->timer++; - - if (sTradeMenuData->timer > 120) + sTradeMenu->timer++; + if (sTradeMenu->timer > 120) { CreateYesNoMenu(&sTradeYesNoWindowTemplate, 1, 14, 0); - sTradeMenuData->timer = 0; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE; + sTradeMenu->timer = 0; + sTradeMenu->callbackId = CB_CONFIRM_TRADE_PROMPT; } } -static void RedrawTradeMenuAfterPressA(void) +static void CB_HandleTradeCanceled(void) { int i; @@ -1655,38 +1725,34 @@ static void RedrawTradeMenuAfterPressA(void) rbox_fill_rectangle(i + 14); } - RedrawTradeMenuParty(TRADE_PLAYER); - RedrawTradeMenuParty(TRADE_PARTNER); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_MAIN_MENU; - gSprites[sTradeMenuData->cursorSpriteId].invisible = FALSE; + RedrawPartyWindow(TRADE_PLAYER); + RedrawPartyWindow(TRADE_PARTNER); + sTradeMenu->callbackId = CB_MAIN_MENU; + gSprites[sTradeMenu->cursorSpriteId].invisible = FALSE; } } -static void CancelTrade_1(void) +static void CB_InitExitCanceledTrade(void) { if (!gPaletteFade.active) { if (gWirelessCommType) - { SetLinkStandbyCallback(); - } else - { SetCloseLinkCallbackAndType(12); - } - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_2; + sTradeMenu->callbackId = CB_EXIT_CANCELED_TRADE; } } -static void CancelTrade_2(void) +static void CB_ExitCanceledTrade(void) { if (gWirelessCommType) { if (IsLinkTradeTaskFinished() && GetNumQueuedActions() == 0) { - Free(sMenuTextAllocBuffer); - Free(sTradeMenuData); + Free(sMenuTextTileBuffer); + Free(sTradeMenu); FreeAllWindowBuffers(); DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(CB2_ReturnToFieldFromMultiplayer); @@ -1696,88 +1762,88 @@ static void CancelTrade_2(void) { if (!gReceivedRemoteLinkPlayers) { - Free(sMenuTextAllocBuffer); - Free(sTradeMenuData); + Free(sMenuTextTileBuffer); + Free(sTradeMenu); FreeAllWindowBuffers(); SetMainCallback2(CB2_ReturnToFieldFromMultiplayer); } } } -static void LinkTradeWaitForQueue(void) +static void CB_WaitToStartRfuTrade(void) { if (!Rfu_SetLinkRecovery(FALSE) && GetNumQueuedActions() == 0) { SetLinkStandbyCallback(); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE; + sTradeMenu->callbackId = CB_START_LINK_TRADE; } } -static void PartnersMonWasInvalid(void) +static void CB_PartnersMonWasInvalid(void) { if (JOY_NEW(A_BUTTON)) { SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + sTradeMenu->callbackId = CB_IDLE; } } -static void CallTradeMenuFunc(void) +static void RunTradeMenuCallback(void) { - switch (sTradeMenuData->tradeMenuFunc) + switch (sTradeMenu->callbackId) { - case TRADEMENUFUNC_MAIN_MENU: - TradeMenuProcessInput(); + case CB_MAIN_MENU: + CB_ProcessMenuInput(); break; - case TRADEMENUFUNC_SELECTED_MON: - TradeMenuProcessInput_SelectedMon(); + case CB_SELECTED_MON: + CB_ProcessSelectedMonInput(); break; - case TRADEMENUFUNC_SHOW_MON_SUMMARY: - TradeMenuShowMonSummaryScreen(); + case CB_SHOW_MON_SUMMARY: + CB_ShowTradeMonSummaryScreen(); break; - case TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE: - ConfirmOrCancelTrade(); + case CB_CONFIRM_TRADE_PROMPT: + CB_ProcessConfirmTradeInput(); break; - case TRADEMENUFUNC_CANCEL_TRADE_PROMPT: - CancelTradeYesNo(); + case CB_CANCEL_TRADE_PROMPT: + CB_ProcessCancelTradeInput(); break; - case TRADEMENUFUNC_BOTH_MONS_SELECTED: - SetBothSelectedMons(); + case CB_SET_SELECTED_MONS: + CB_SetSelectedMons(); break; - case TRADEMENUFUNC_CONFIRM_TRADE_PROMPT: - ConfirmTradePrompt(); + case CB_PRINT_IS_THIS_OKAY: + CB_PrintIsThisTradeOkay(); break; - case TRADEMENUFUNC_REDRAW_MAIN_MENU: - RedrawTradeMenuAfterPressA(); + case CB_HANDLE_TRADE_CANCELED: + CB_HandleTradeCanceled(); break; - case TRADEMENUFUNC_LINK_TRADE_FADE_OUT: - LinkTradeFadeOut(); + case CB_FADE_TO_START_TRADE: + CB_FadeToStartTrade(); break; - case TRADEMENUFUNC_LINK_TRADE_WAIT_FADE: - LinkTradeWaitForFade(); + case CB_WAIT_TO_START_TRADE: + CB_WaitToStartTrade(); break; - case TRADEMENUFUNC_CANCEL_TRADE_1: - CancelTrade_1(); + case CB_INIT_EXIT_CANCELED_TRADE: + CB_InitExitCanceledTrade(); break; - case TRADEMENUFUNC_CANCEL_TRADE_2: - CancelTrade_2(); + case CB_EXIT_CANCELED_TRADE: + CB_ExitCanceledTrade(); break; - case TRADEMENUFUNC_START_LINK_TRADE: - SetLinkTradeCallbacks(); + case CB_START_LINK_TRADE: + CB_StartLinkTrade(); break; - case TRADEMENUFUNC_DELAY_TRADE_CONFIRM: - DelayTradeConfirmation(); + case CB_INIT_CONFIRM_TRADE_PROMPT: + CB_InitConfirmTradePrompt(); break; - case TRADEMENUFUNC_UNUSED_15: - ChooseMonAfterButtonPress(); + case CB_UNUSED_CLOSE_MSG: + CB_ChooseMonAfterButtonPress(); break; - case TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE: - LinkTradeWaitForQueue(); + case CB_WAIT_TO_START_RFU_TRADE: + CB_WaitToStartRfuTrade(); break; - case TRADEMENUFUNC_PARTNER_MON_INVALID: - PartnersMonWasInvalid(); + case CB_PARTNER_MON_INVALID: + CB_PartnersMonWasInvalid(); break; - //case TRADEMENUFUNC_STANDBY: is nop + //case CB_IDLE: is nop } } @@ -1786,14 +1852,16 @@ static void SetSelectedMon(u8 cursorPosition) //cursorPosition 0-5 are the player's mons, 6-11 are the partner's u8 whichParty = cursorPosition / PARTY_SIZE; - if (sTradeMenuData->drawPartyState[whichParty] == 0) + if (sTradeMenu->drawSelectedMonState[whichParty] == 0) { - sTradeMenuData->drawPartyState[whichParty] = 1; - sTradeMenuData->selectedMonIdx[whichParty] = cursorPosition; + // Start the animation to display just the selected + // pokemon in the middle of the screen + sTradeMenu->drawSelectedMonState[whichParty] = 1; + sTradeMenu->selectedMonIdx[whichParty] = cursorPosition; } } -static void DrawTradeMenuParty(u8 whichParty) +static void DrawSelectedMonScreen(u8 whichParty) { s8 nameStringWidth; u8 nickname[20]; @@ -1801,105 +1869,111 @@ static void DrawTradeMenuParty(u8 whichParty) u8 i; u8 partyIdx; u8 selectedMonParty; - u8 selectedMonIdx = sTradeMenuData->selectedMonIdx[whichParty]; + u8 selectedMonIdx = sTradeMenu->selectedMonIdx[whichParty]; selectedMonParty = TRADE_PARTNER; - if (sTradeMenuData->selectedMonIdx[whichParty] < PARTY_SIZE) + if (sTradeMenu->selectedMonIdx[whichParty] < PARTY_SIZE) selectedMonParty = TRADE_PLAYER; partyIdx = selectedMonIdx % PARTY_SIZE; nameStringWidth = 0; - switch (sTradeMenuData->drawPartyState[whichParty]) + switch (sTradeMenu->drawSelectedMonState[whichParty]) { + default: + // Idle while state is 0, and once it reaches the final state (DRAW_SELECTED_FINISH) + break; case 1: - for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) - { - gSprites[sTradeMenuData->partySpriteIds[0][i + (selectedMonParty * PARTY_SIZE)]].invisible = TRUE; - } - - for (i = 0; i < 6; i++) - { + // Erase the rest of the party + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][i]].invisible = TRUE; + for (i = 0; i < PARTY_SIZE; i++) ClearWindowTilemap(i + (whichParty * PARTY_SIZE + 2)); - } - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].invisible = FALSE; - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[0] = 20; - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[2] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] - + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[4] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12; - StoreSpriteCallbackInData6(&gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]], SpriteCB_MonIcon); - sTradeMenuData->drawPartyState[whichParty]++; - TradeMenuBouncePartySprites(&gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]]); + // Re-display the selected pokemon + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].invisible = FALSE; + + // Move the selected pokemon to the center + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].data[0] = 20; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].data[2] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].data[4] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12; + StoreSpriteCallbackInData6(&gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]], SpriteCB_MonIcon); + sTradeMenu->drawSelectedMonState[whichParty]++; + Trade_MoveSelectedMonToTarget(&gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]]); + CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(0); if (selectedMonParty == TRADE_PLAYER) - PrintNicknamesForTradeMenu(); + PrintTradePartnerPartyNicknames(); break; case 2: - if (gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].callback == SpriteCB_MonIcon) - sTradeMenuData->drawPartyState[whichParty] = 3; + // Wait for the selected pokemon's sprite to move to the correct position + if (gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].callback == SpriteCB_MonIcon) + sTradeMenu->drawSelectedMonState[whichParty] = 3; break; case 3: + // Redisplay the bg box CopyToBgTilemapBufferRect_ChangePalette(1, sTradeMovesBoxTilemap, selectedMonParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].x = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] - + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].y = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12; - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].x2 = 0; - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].y2 = 0; + + // Finalize the selected pokemon's position + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].x = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].y = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].x2 = 0; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].y2 = 0; + + // Print selected pokemon's name and moves nameStringWidth = GetMonNicknameWidth(nickname, selectedMonParty, partyIdx); AddTextPrinterParameterized3((whichParty * 2) + 14, FONT_SMALL, (80 - nameStringWidth) / 2, 4, sTradeTextColors, 0, nickname); - BufferTradeMonMoves(movesString, selectedMonParty, partyIdx); + BufferMovesString(movesString, selectedMonParty, partyIdx); AddTextPrinterParameterized4((whichParty * 2) + 15, FONT_NORMAL, 0, 0, 0, 0, sTradeTextColors, 0, movesString); PutWindowTilemap((whichParty * 2) + 14); CopyWindowToVram((whichParty * 2) + 14, COPYWIN_FULL); PutWindowTilemap((whichParty * 2) + 15); CopyWindowToVram((whichParty * 2) + 15, COPYWIN_FULL); - sTradeMenuData->drawPartyState[whichParty]++; + + sTradeMenu->drawSelectedMonState[whichParty]++; break; case 4: - DrawTradeMenuPartyMonInfo(whichParty, partyIdx, - sTradeMenuPartyMonBoxDimensions[whichParty][0] + 4, - sTradeMenuPartyMonBoxDimensions[whichParty][1] + 1, - sTradeMenuPartyMonBoxDimensions[whichParty][0], - sTradeMenuPartyMonBoxDimensions[whichParty][1]); - sTradeMenuData->drawPartyState[whichParty]++; + PrintLevelAndGender(whichParty, partyIdx, + sSelectedMonLevelGenderCoords[whichParty][0] + 4, + sSelectedMonLevelGenderCoords[whichParty][1] + 1, + sSelectedMonLevelGenderCoords[whichParty][0], + sSelectedMonLevelGenderCoords[whichParty][1]); + sTradeMenu->drawSelectedMonState[whichParty]++; break; } } -static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 monIdx) +static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 partyIdx) { - u8 nickname[12]; + u8 nickname[POKEMON_NAME_LENGTH]; if (whichParty == TRADE_PLAYER) - GetMonData(&gPlayerParty[monIdx], MON_DATA_NICKNAME, nickname); + GetMonData(&gPlayerParty[partyIdx], MON_DATA_NICKNAME, nickname); else - GetMonData(&gEnemyParty[monIdx], MON_DATA_NICKNAME, nickname); + GetMonData(&gEnemyParty[partyIdx], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(str, nickname); return GetStringWidth(FONT_SMALL, str, GetFontAttribute(FONT_SMALL, FONTATTR_LETTER_SPACING)); } -static void BufferTradeMonMoves(u8 *str, u8 whichParty, u8 partyIdx) +static void BufferMovesString(u8 *str, u8 whichParty, u8 partyIdx) { u16 moves[MAX_MON_MOVES]; u16 i; - if (!sTradeMenuData->isEgg[whichParty][partyIdx]) + if (!sTradeMenu->isEgg[whichParty][partyIdx]) { for (i = 0; i < MAX_MON_MOVES; i++) { if (whichParty == TRADE_PLAYER) - { moves[i] = GetMonData(&gPlayerParty[partyIdx], i + MON_DATA_MOVE1, NULL); - } else - { moves[i] = GetMonData(&gEnemyParty[partyIdx], i + MON_DATA_MOVE1, NULL); - } } StringCopy(str, sText_EmptyString); @@ -1907,9 +1981,7 @@ static void BufferTradeMonMoves(u8 *str, u8 whichParty, u8 partyIdx) for (i = 0; i < MAX_MON_MOVES; i++) { if (moves[i] != MOVE_NONE) - { StringAppend(str, gMoveNames[moves[i]]); - } StringAppend(str, sText_NewLine); } @@ -1921,7 +1993,7 @@ static void BufferTradeMonMoves(u8 *str, u8 whichParty, u8 partyIdx) } } -static void PrintMonNicknameForTradeMenu(u8 whichParty, u8 windowId, u8 *nickname) +static void PrintPartyMonNickname(u8 whichParty, u8 windowId, u8 *nickname) { u8 xPos; windowId += (whichParty * PARTY_SIZE) + 2; @@ -1931,27 +2003,27 @@ static void PrintMonNicknameForTradeMenu(u8 whichParty, u8 windowId, u8 *nicknam CopyWindowToVram(windowId, COPYWIN_FULL); } -static void PrintPartyNicknamesForTradeMenu(u8 whichParty) +static void PrintPartyNicknames(u8 whichParty) { u8 i; u8 nickname[20]; u8 str[32]; struct Pokemon *party = (whichParty == TRADE_PLAYER) ? gPlayerParty : gEnemyParty; - for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { GetMonData(&party[i], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(str, nickname); - PrintMonNicknameForTradeMenu(whichParty, i, str); + PrintPartyMonNickname(whichParty, i, str); } } -static void DrawTradeMenuPartyMonInfo(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 width, u8 height) +static void PrintLevelAndGender(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 width, u8 height) { u8 level; u32 symbolTile; u8 gender; - u8 nickname[12]; + u8 nickname[POKEMON_NAME_LENGTH]; CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenuMonBox_Tilemap, width, height, 6, 3, 0); CopyBgTilemapBufferToVram(1); @@ -1961,20 +2033,20 @@ static void DrawTradeMenuPartyMonInfo(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 w else level = GetMonData(&gEnemyParty[monIdx], MON_DATA_LEVEL, NULL); - if (!sTradeMenuData->isEgg[whichParty][monIdx]) + if (!sTradeMenu->isEgg[whichParty][monIdx]) { if (level / 10 != 0) - sTradeMenuData->tilemapBuffer[x + (y * 32)] = (level / 10) + 0x60; + sTradeMenu->tilemapBuffer[x + (y * 32)] = (level / 10) + 0x60; - sTradeMenuData->tilemapBuffer[x + (y * 32) + 1] = (level % 10) + 0x70; + sTradeMenu->tilemapBuffer[x + (y * 32) + 1] = (level % 10) + 0x70; } else { - sTradeMenuData->tilemapBuffer[x + (y * 32) - 32] = sTradeMenuData->tilemapBuffer[x + (y * 32) - 33]; - sTradeMenuData->tilemapBuffer[x + (y * 32) - 31] = sTradeMenuData->tilemapBuffer[x + (y * 32) - 36] | 0x400; + sTradeMenu->tilemapBuffer[x + (y * 32) - 32] = sTradeMenu->tilemapBuffer[x + (y * 32) - 33]; + sTradeMenu->tilemapBuffer[x + (y * 32) - 31] = sTradeMenu->tilemapBuffer[x + (y * 32) - 36] | 0x400; } - if (sTradeMenuData->isEgg[whichParty][monIdx]) + if (sTradeMenu->isEgg[whichParty][monIdx]) { symbolTile = 0x480; } @@ -2004,62 +2076,57 @@ static void DrawTradeMenuPartyMonInfo(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 w break; } } - sTradeMenuData->tilemapBuffer[(y - 1) * 32 + x + 1] = symbolTile; + sTradeMenu->tilemapBuffer[(y - 1) * 32 + x + 1] = symbolTile; } -static void DrawTradeMenuPartyInfo(u8 whichParty) +static void PrintPartyLevelsAndGenders(u8 whichParty) { s32 i; - for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { - const u8 (*r5)[2]; - const u8 (*r4)[2]; - u32 r0 = 3 * whichParty; - const u8 (*r1)[2][2] = sTradeMonLevelCoords; - - r5 = r1[r0]; - r4 = sTradeMonBoxCoords[r0]; - DrawTradeMenuPartyMonInfo( + s32 j = i + PARTY_SIZE * whichParty; + PrintLevelAndGender( whichParty, i, - r5[i][0], - r5[i][1], - r4[i][0], - r4[i][1] + sTradeMonLevelCoords[j][0], + sTradeMonLevelCoords[j][1], + sTradeMonBoxCoords[j][0], + sTradeMonBoxCoords[j][1] ); } } -static void ResetTradeMenuPartyPositions(u8 whichParty) +static void ShowTradePartyMonIcons(u8 whichParty) { int i; - for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { - gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].invisible = FALSE; - gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].x = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; - gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].y = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; - gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].x2 = 0; - gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].y2 = 0; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].invisible = FALSE; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].x = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].y = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].x2 = 0; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].y2 = 0; } } -static void PrintNicknamesForTradeMenu(void) +static void PrintTradePartnerPartyNicknames(void) { rbox_fill_rectangle(1); - //PrintPartyNicknamesForTradeMenu(TRADE_PLAYER); ? - PrintPartyNicknamesForTradeMenu(TRADE_PARTNER); + //PrintPartyNicknames(TRADE_PLAYER); ? + PrintPartyNicknames(TRADE_PARTNER); } -static void RedrawTradeMenuParty(u8 whichParty) +// Returning to the party selection screen from the "is this trade ok?" screen +static void RedrawPartyWindow(u8 whichParty) { CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); - DrawTradeMenuPartyInfo(whichParty); - PrintPartyNicknamesForTradeMenu(whichParty); - ResetTradeMenuPartyPositions(whichParty); - DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + (sTradeMenuData->bottomTextTileStart * 32)), 24); - sTradeMenuData->drawPartyState[whichParty] = 0; + PrintPartyLevelsAndGenders(whichParty); + PrintPartyNicknames(whichParty); + ShowTradePartyMonIcons(whichParty); + DrawBottomRowText(sActionTexts[TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + (sTradeMenu->bottomTextTileStart * 32)), 24); + sTradeMenu->drawSelectedMonState[whichParty] = 0; } static void Task_DrawSelectionSummary(u8 taskId) @@ -2078,13 +2145,14 @@ static void QueueAction(u16 delay, u8 actionId) { int i; - for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->queuedActions); i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenu->queuedActions); i++) { - if (!sTradeMenuData->queuedActions[i].queued) + // Find first available spot + if (!sTradeMenu->queuedActions[i].active) { - sTradeMenuData->queuedActions[i].queueDelay = delay; - sTradeMenuData->queuedActions[i].actionId = actionId; - sTradeMenuData->queuedActions[i].queued = TRUE; + sTradeMenu->queuedActions[i].delay = delay; + sTradeMenu->queuedActions[i].actionId = actionId; + sTradeMenu->queuedActions[i].active = TRUE; break; } } @@ -2095,9 +2163,9 @@ static u32 GetNumQueuedActions(void) u32 numActions = 0; int i; - for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->queuedActions); i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenu->queuedActions); i++) { - numActions += sTradeMenuData->queuedActions[i].queued; + numActions += sTradeMenu->queuedActions[i].active; } return numActions; @@ -2107,43 +2175,43 @@ static void DoQueuedActions(void) { int i; - for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->queuedActions); i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenu->queuedActions); i++) { - if (sTradeMenuData->queuedActions[i].queued) + if (sTradeMenu->queuedActions[i].active) { - if (sTradeMenuData->queuedActions[i].queueDelay) + if (sTradeMenu->queuedActions[i].delay != 0) { - sTradeMenuData->queuedActions[i].queueDelay--; + sTradeMenu->queuedActions[i].delay--; } else { - switch (sTradeMenuData->queuedActions[i].actionId) + switch (sTradeMenu->queuedActions[i].actionId) { case QUEUE_SEND_DATA: - SendLinkData(sTradeMenuData->linkData, 20); + SendLinkData(sTradeMenu->linkData, 20); break; case QUEUE_STANDBY: - PrintTradeMessage(TRADE_MSG_STANDBY); + PrintTradeMessage(MSG_STANDBY); break; case QUEUE_ONLY_MON1: - PrintTradeMessage(TRADE_MSG_ONLY_MON1); + PrintTradeMessage(MSG_ONLY_MON1); break; case QUEUE_ONLY_MON2: case QUEUE_UNUSED1: case QUEUE_UNUSED2: - PrintTradeMessage(TRADE_MSG_ONLY_MON2); + PrintTradeMessage(MSG_ONLY_MON2); break; case QUEUE_MON_CANT_BE_TRADED: - PrintTradeMessage(TRADE_MSG_MON_CANT_BE_TRADED); + PrintTradeMessage(MSG_MON_CANT_BE_TRADED); break; case QUEUE_EGG_CANT_BE_TRADED: - PrintTradeMessage(TRADE_MSG_EGG_CANT_BE_TRADED); + PrintTradeMessage(MSG_EGG_CANT_BE_TRADED); break; case QUEUE_FRIENDS_MON_CANT_BE_TRADED: - PrintTradeMessage(TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED); + PrintTradeMessage(MSG_FRIENDS_MON_CANT_BE_TRADED); break; } - sTradeMenuData->queuedActions[i].queued = FALSE; + sTradeMenu->queuedActions[i].active = FALSE; } } } @@ -2152,24 +2220,24 @@ static void DoQueuedActions(void) static void PrintTradeMessage(u8 messageId) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, FONT_NORMAL, sTradeMessages[messageId], 0, 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, sMessages[messageId], 0, 1, TEXT_SKIP_DRAW, NULL); DrawTextBorderOuter(0, 20, 12); PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_FULL); } -static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void) +static bool8 LoadUISpriteGfx(void) { struct SpriteSheet sheet; - if (sTradeMenuData->timer < GFXTAG_MENU_TEXT_COUNT) + if (sTradeMenu->timer < NUM_MENU_TEXT_SPRITES) { - sheet.data = sMenuTextTileBuffers[sTradeMenuData->timer]; + sheet.data = sMenuTextTileBuffers[sTradeMenu->timer]; sheet.size = 0x100; - sheet.tag = GFXTAG_MENU_TEXT + sTradeMenuData->timer; + sheet.tag = GFXTAG_MENU_TEXT + sTradeMenu->timer; } - switch (sTradeMenuData->timer) + switch (sTradeMenu->timer) { case GFXTAG_PLAYER_NAME_L: case GFXTAG_PLAYER_NAME_M: @@ -2180,11 +2248,11 @@ static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void) case GFXTAG_CANCEL_L: case GFXTAG_CANCEL_R: LoadSpriteSheet(&sheet); - sTradeMenuData->timer++; + sTradeMenu->timer++; break; case GFXTAG_CHOOSE_PKMN_L: - sTradeMenuData->bottomTextTileStart = LoadSpriteSheet(&sheet); - sTradeMenuData->timer++; + sTradeMenu->bottomTextTileStart = LoadSpriteSheet(&sheet); + sTradeMenu->timer++; break; case GFXTAG_CHOOSE_PKMN_M: case GFXTAG_CHOOSE_PKMN_R: @@ -2192,22 +2260,22 @@ static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void) case GFXTAG_CHOOSE_PKMN_EMPTY_2: case GFXTAG_CHOOSE_PKMN_EMPTY_3: LoadSpriteSheet(&sheet); - sTradeMenuData->timer++; + sTradeMenu->timer++; break; - case GFXTAG_MENU_TEXT_COUNT: - LoadSpritePalette(&sSpritePalette_TradeScreenText); - sTradeMenuData->timer++; + case NUM_MENU_TEXT_SPRITES: + LoadSpritePalette(&sSpritePalette_MenuText); + sTradeMenu->timer++; break; - case GFXTAG_MENU_TEXT_COUNT + 1: + case NUM_MENU_TEXT_SPRITES + 1: LoadSpritePalette(&sCursor_SpritePalette); - sTradeMenuData->timer++; + sTradeMenu->timer++; break; - case GFXTAG_MENU_TEXT_COUNT + 2: + case NUM_MENU_TEXT_SPRITES + 2: LoadSpriteSheet(&sCursor_SpriteSheet); - sTradeMenuData->timer++; + sTradeMenu->timer++; break; - case GFXTAG_MENU_TEXT_COUNT + 3: - sTradeMenuData->timer = 0; + case NUM_MENU_TEXT_SPRITES + 3: + sTradeMenu->timer = 0; return TRUE; } @@ -2219,75 +2287,75 @@ static void DrawBottomRowText(const u8 *str, u8 *dest, u8 unused) DrawTextWindowAndBufferTiles(str, dest, 0, 0, 6); } -static void SetTradePartyLiveStatuses(u8 whichParty) +static void ComputePartyTradeableFlags(u8 whichParty) { int i; switch (whichParty) { case TRADE_PLAYER: - for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE) { - sTradeMenuData->isLiveMon[whichParty][i] = FALSE; - sTradeMenuData->isEgg[whichParty][i] = TRUE; + sTradeMenu->isLiveMon[whichParty][i] = FALSE; + sTradeMenu->isEgg[whichParty][i] = TRUE; } else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) { - sTradeMenuData->isLiveMon[whichParty][i] = FALSE; - sTradeMenuData->isEgg[whichParty][i] = FALSE; + sTradeMenu->isLiveMon[whichParty][i] = FALSE; + sTradeMenu->isEgg[whichParty][i] = FALSE; } else { - sTradeMenuData->isLiveMon[whichParty][i] = TRUE; - sTradeMenuData->isEgg[whichParty][i] = FALSE; + sTradeMenu->isLiveMon[whichParty][i] = TRUE; + sTradeMenu->isEgg[whichParty][i] = FALSE; } } break; case TRADE_PARTNER: - for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE) { - sTradeMenuData->isLiveMon[whichParty][i] = FALSE; - sTradeMenuData->isEgg[whichParty][i] = TRUE; + sTradeMenu->isLiveMon[whichParty][i] = FALSE; + sTradeMenu->isEgg[whichParty][i] = TRUE; } else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) { - sTradeMenuData->isLiveMon[whichParty][i] = FALSE; - sTradeMenuData->isEgg[whichParty][i] = FALSE; + sTradeMenu->isLiveMon[whichParty][i] = FALSE; + sTradeMenu->isEgg[whichParty][i] = FALSE; } else { - sTradeMenuData->isLiveMon[whichParty][i] = TRUE; - sTradeMenuData->isEgg[whichParty][i] = FALSE; + sTradeMenu->isLiveMon[whichParty][i] = TRUE; + sTradeMenu->isEgg[whichParty][i] = FALSE; } } break; } } -static void GetTradePartyHPBarLevels(u8 who) +static void ComputePartyHPBarLevels(u8 whichParty) { u16 i, curHp, maxHp; - switch (who) + switch (whichParty) { case TRADE_PLAYER: - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP); maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); - sTradeMenuData->hpBarLevels[TRADE_PLAYER][i] = GetHPBarLevel(curHp, maxHp); + sTradeMenu->hpBarLevels[TRADE_PLAYER][i] = GetHPBarLevel(curHp, maxHp); } break; case TRADE_PARTNER: - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PARTNER]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP); maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP); - sTradeMenuData->hpBarLevels[TRADE_PARTNER][i] = GetHPBarLevel(curHp, maxHp); + sTradeMenu->hpBarLevels[TRADE_PARTNER][i] = GetHPBarLevel(curHp, maxHp); } break; } @@ -2299,10 +2367,8 @@ static void SetTradePartyHPBarSprites(void) for (i = 0; i < 2; i++) { - for (j = 0; j < sTradeMenuData->partyCounts[i]; j++) - { - SetPartyHPBarSprite(&gSprites[sTradeMenuData->partySpriteIds[i][j]], 4 - sTradeMenuData->hpBarLevels[i][j]); - } + for (j = 0; j < sTradeMenu->partyCounts[i]; j++) + SetPartyHPBarSprite(&gSprites[sTradeMenu->partySpriteIds[i][j]], 4 - sTradeMenu->hpBarLevels[i][j]); } } @@ -2310,12 +2376,12 @@ static void SaveTradeGiftRibbons(void) { int i; - for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->giftRibbons); i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenu->giftRibbons); i++) { - if (gSaveBlock1Ptr->giftRibbons[i] == 0 && sTradeMenuData->giftRibbons[i] != 0) + if (gSaveBlock1Ptr->giftRibbons[i] == 0 && sTradeMenu->giftRibbons[i] != 0) { - if (sTradeMenuData->giftRibbons[i] < 64) - gSaveBlock1Ptr->giftRibbons[i] = sTradeMenuData->giftRibbons[i]; + if (sTradeMenu->giftRibbons[i] < 64) + gSaveBlock1Ptr->giftRibbons[i] = sTradeMenu->giftRibbons[i]; } } } @@ -2323,7 +2389,7 @@ static void SaveTradeGiftRibbons(void) static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int monIdx) { int i, numMonsLeft; - struct LinkPlayer *player; + struct LinkPlayer *partner; u32 species[PARTY_SIZE]; u32 species2[PARTY_SIZE]; @@ -2343,15 +2409,15 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int return CANT_TRADE_NATIONAL; } - player = &gLinkPlayers[GetMultiplayerId() ^ 1]; - if ((player->version & 0xFF) != VERSION_RUBY && - (player->version & 0xFF) != VERSION_SAPPHIRE) + partner = &gLinkPlayers[GetMultiplayerId() ^ 1]; + if ((partner->version & 0xFF) != VERSION_RUBY && + (partner->version & 0xFF) != VERSION_SAPPHIRE) { // Does partner not have National Dex - if (!(player->progressFlagsCopy & 0xF)) + if (!(partner->progressFlagsCopy & 0xF)) { if (species2[monIdx] == SPECIES_EGG) - return CANT_TRADE_EGG_YET2; + return CANT_TRADE_PARTNER_EGG_YET; if (!IsSpeciesInHoennDex(species2[monIdx])) return CANT_TRADE_INVALID_MON; @@ -2365,7 +2431,7 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int } // Can't trade specific species - if (gBaseStats[species[monIdx]].flags & SPECIES_FLAG_CANNOT_BE_TRADED) + if (gSpeciesInfo[species[monIdx]].flags & SPECIES_FLAG_CANNOT_BE_TRADED) return CANT_TRADE_INVALID_MON; // Make Eggs not count for numMonsLeft @@ -2390,30 +2456,30 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int s32 GetGameProgressForLinkTrade(void) { - // isGameFrLg could have been a bool but they use 2 and > 0 instead - // possible other checks (for other game versions?) were planned/removed - s32 isGameFrLg; + // The usage of this value is a little unusual given it's treated as a bool, + // but it's the result of its usage in FRLG, where 0 is FRLG, 1 is RS, and 2 is Emerald. + s32 versionId; // 0: RSE, 2: FRLG u16 version; if (gReceivedRemoteLinkPlayers) { - isGameFrLg = 0; + versionId = 0; version = (gLinkPlayers[GetMultiplayerId() ^ 1].version & 0xFF); if (version == VERSION_RUBY || version == VERSION_SAPPHIRE || version == VERSION_EMERALD) - isGameFrLg = 0; + versionId = 0; else if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) - isGameFrLg = 2; + versionId = 2; - // If trading with FRLG, both players must be champion - if (isGameFrLg > 0) + // If trading with FRLG, both players must have progessed the story enough + if (versionId > 0) { // Is player champion if (gLinkPlayers[GetMultiplayerId()].progressFlagsCopy & 0xF0) { - if (isGameFrLg == 2) //unnecessary check, isGameFrLg always 2 here + if (versionId == 2) // Check is only relevant in FRLG, this will always be true { - // Is partner champion + // Has FRLG partner finished the Sevii Islands if (gLinkPlayers[GetMultiplayerId() ^ 1].progressFlagsCopy & 0xF0) return TRADE_BOTH_PLAYERS_READY; else @@ -2442,17 +2508,18 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isEventLegal) int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isEventLegal) { bool8 playerHasNationalDex = player.hasNationalDex; - bool8 playerIsChampion = player.isChampion; + bool8 playerCanLinkNationally = player.canLinkNationally; bool8 partnerHasNationalDex = partner.hasNationalDex; - bool8 partnerIsChampion = partner.isChampion; + bool8 partnerCanLinkNationally = partner.canLinkNationally; u8 partnerVersion = partner.version; - // If partner is not using Emerald, both players must be champion + // If partner is not using Emerald, both players must have progressed the story + // to a certain point (becoming champion in RSE, finishing the Sevii islands in FRLG) if (partnerVersion != VERSION_EMERALD) { - if (!playerIsChampion) + if (!playerCanLinkNationally) return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_1; - else if (!partnerIsChampion) + else if (!partnerCanLinkNationally) return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2; } @@ -2461,7 +2528,7 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf return UR_TRADE_MSG_MON_CANT_BE_TRADED; // Can't trade specific species - if (gBaseStats[playerSpecies].flags & SPECIES_FLAG_CANNOT_BE_TRADED) + if (gSpeciesInfo[playerSpecies].flags & SPECIES_FLAG_CANNOT_BE_TRADED) return UR_TRADE_MSG_MON_CANT_BE_TRADED; if (partnerSpecies == SPECIES_EGG) @@ -2473,8 +2540,8 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf else { // Player's Pokémon must be of the type the partner requested - if (gBaseStats[playerSpecies2].type1 != requestedType - && gBaseStats[playerSpecies2].type2 != requestedType) + if (gSpeciesInfo[playerSpecies2].types[0] != requestedType + && gSpeciesInfo[playerSpecies2].types[1] != requestedType) return UR_TRADE_MSG_NOT_MON_PARTNER_WANTS; } @@ -2512,7 +2579,7 @@ int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 sp return CANT_REGISTER_MON_NOW; // Can't trade specific species - if (gBaseStats[species].flags & SPECIES_FLAG_CANNOT_BE_TRADED) + if (gSpeciesInfo[species].flags & SPECIES_FLAG_CANNOT_BE_TRADED) return CANT_REGISTER_MON; if (hasNationalDex) @@ -2610,6 +2677,7 @@ static void SpriteCB_LinkMonGlowWireless(struct Sprite *sprite) } } +// Palette flash for trade glow core static void SpriteCB_LinkMonShadow(struct Sprite *sprite) { if (!sprite->data[1]) @@ -2617,7 +2685,7 @@ static void SpriteCB_LinkMonShadow(struct Sprite *sprite) if (++sprite->data[0] == 12) sprite->data[0] = 0; - LoadPalette(&sLinkMonShadow_Pal[sprite->data[0]], (sprite->oam.paletteNum + 16) * 16 + 4, 2); + LoadPalette(&sLinkMonShadow_Pal[sprite->data[0]], OBJ_PLTT_ID2(sprite->oam.paletteNum) + 4, PLTT_SIZEOF(1)); } } @@ -2654,7 +2722,7 @@ static void SetTradeBGAffine(void) { struct BgAffineDstData affine; - DoBgAffineSet(&affine, sTradeData->texX * 0x100, sTradeData->texY * 0x100, sTradeData->scrX, sTradeData->scrY, sTradeData->sXY, sTradeData->sXY, sTradeData->alpha); + DoBgAffineSet(&affine, sTradeAnim->texX * 0x100, sTradeAnim->texY * 0x100, sTradeAnim->scrX, sTradeAnim->scrY, sTradeAnim->sXY, sTradeAnim->sXY, sTradeAnim->alpha); SetGpuReg(REG_OFFSET_BG2PA, affine.pa); SetGpuReg(REG_OFFSET_BG2PB, affine.pb); SetGpuReg(REG_OFFSET_BG2PC, affine.pc); @@ -2669,14 +2737,14 @@ static void SetTradeGpuRegs(void) { u16 dispcnt; - SetGpuReg(REG_OFFSET_BG1VOFS, sTradeData->bg1vofs); - SetGpuReg(REG_OFFSET_BG1HOFS, sTradeData->bg1hofs); + SetGpuReg(REG_OFFSET_BG1VOFS, sTradeAnim->bg1vofs); + SetGpuReg(REG_OFFSET_BG1HOFS, sTradeAnim->bg1hofs); dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); if ((dispcnt & 7) == DISPCNT_MODE_0) { - SetGpuReg(REG_OFFSET_BG2VOFS, sTradeData->bg2vofs); - SetGpuReg(REG_OFFSET_BG2HOFS, sTradeData->bg2hofs); + SetGpuReg(REG_OFFSET_BG2VOFS, sTradeAnim->bg2vofs); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeAnim->bg2hofs); } else { @@ -2684,7 +2752,7 @@ static void SetTradeGpuRegs(void) } } -static void VBlankCB_Trade(void) +static void VBlankCB_TradeAnim(void) { SetTradeGpuRegs(); LoadOam(); @@ -2692,30 +2760,30 @@ static void VBlankCB_Trade(void) TransferPlttBuffer(); } -static void ClearLinkTimeoutCounter(void) +static void ClearLinkTimeoutTimer(void) { - sTradeData->linkTimeoutCounter = 0; - sTradeData->linkTimeoutZero1 = 0; - sTradeData->linkTimeoutZero2 = 0; + sTradeAnim->linkTimeoutTimer = 0; + sTradeAnim->linkTimeoutZero1 = 0; + sTradeAnim->linkTimeoutZero2 = 0; } static void CheckForLinkTimeout(void) { - if (sTradeData->linkTimeoutZero1 == sTradeData->linkTimeoutZero2) - sTradeData->linkTimeoutCounter++; + if (sTradeAnim->linkTimeoutZero1 == sTradeAnim->linkTimeoutZero2) + sTradeAnim->linkTimeoutTimer++; else - sTradeData->linkTimeoutCounter = 0; + sTradeAnim->linkTimeoutTimer = 0; - if (sTradeData->linkTimeoutCounter > LINK_TRADE_TIMEOUT) + if (sTradeAnim->linkTimeoutTimer > 300) { CloseLink(); SetMainCallback2(CB2_LinkError); - sTradeData->linkTimeoutCounter = 0; - sTradeData->linkTimeoutZero2 = 0; - sTradeData->linkTimeoutZero1 = 0; + sTradeAnim->linkTimeoutTimer = 0; + sTradeAnim->linkTimeoutZero2 = 0; + sTradeAnim->linkTimeoutZero1 = 0; } - sTradeData->linkTimeoutZero2 = sTradeData->linkTimeoutZero1; + sTradeAnim->linkTimeoutZero2 = sTradeAnim->linkTimeoutZero1; } static u32 TradeGetMultiplayerId(void) @@ -2753,14 +2821,14 @@ static void LoadTradeMonPic(u8 whichParty, u8 state) HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites.ptr[whichParty * 2 + B_POSITION_OPPONENT_LEFT], species, personality); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); - sTradeData->monSpecies[whichParty] = species; - sTradeData->monPersonalities[whichParty] = personality; + sTradeAnim->monSpecies[whichParty] = species; + sTradeAnim->monPersonalities[whichParty] = personality; break; case 1: SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); - sTradeData->monSpriteIds[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); - gSprites[sTradeData->monSpriteIds[whichParty]].invisible = TRUE; - gSprites[sTradeData->monSpriteIds[whichParty]].callback = SpriteCallbackDummy; + sTradeAnim->monSpriteIds[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); + gSprites[sTradeAnim->monSpriteIds[whichParty]].invisible = TRUE; + gSprites[sTradeAnim->monSpriteIds[whichParty]].callback = SpriteCallbackDummy; break; } } @@ -2775,34 +2843,34 @@ void CB2_LinkTrade(void) gLinkType = LINKTYPE_TRADE_DISCONNECTED; CloseLink(); } - sTradeData = AllocZeroed(sizeof(*sTradeData)); + sTradeAnim = AllocZeroed(sizeof(*sTradeAnim)); AllocateMonSpritesGfx(); ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); - SetVBlankCallback(VBlankCB_Trade); - InitTradeBgInternal(); - ClearLinkTimeoutCounter(); + SetVBlankCallback(VBlankCB_TradeAnim); + TradeAnimInit_LoadGfx(); + ClearLinkTimeoutTimer(); gMain.state++; - sTradeData->neverRead_8C = 0; - sTradeData->state = 0; - sTradeData->isLinkTrade = TRUE; - sTradeData->texX = 64; - sTradeData->texY = 64; - sTradeData->neverRead_D8 = 0; - sTradeData->neverRead_DA = 0; - sTradeData->scrX = 120; - sTradeData->scrY = 80; - sTradeData->sXY = 256; - sTradeData->alpha = 0; + sTradeAnim->neverRead_8C = 0; + sTradeAnim->state = 0; + sTradeAnim->isLinkTrade = TRUE; + sTradeAnim->texX = 64; + sTradeAnim->texY = 64; + sTradeAnim->neverRead_D8 = 0; + sTradeAnim->neverRead_DA = 0; + sTradeAnim->scrX = DISPLAY_WIDTH / 2; + sTradeAnim->scrY = DISPLAY_HEIGHT / 2; + sTradeAnim->sXY = 256; + sTradeAnim->alpha = 0; break; case 1: if (!gReceivedRemoteLinkPlayers) { - sTradeData->isCableTrade = TRUE; + sTradeAnim->isCableTrade = TRUE; OpenLink(); gMain.state++; - sTradeData->timer = 0; + sTradeAnim->timer = 0; } else { @@ -2810,9 +2878,9 @@ void CB2_LinkTrade(void) } break; case 2: - if (++sTradeData->timer > 60) + if (++sTradeAnim->timer > 60) { - sTradeData->timer = 0; + sTradeAnim->timer = 0; gMain.state++; } break; @@ -2821,7 +2889,7 @@ void CB2_LinkTrade(void) { if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) { - if (++sTradeData->timer > 30) + if (++sTradeAnim->timer > 30) { CheckShouldAdvanceLinkState(); gMain.state++; @@ -2843,9 +2911,9 @@ void CB2_LinkTrade(void) gMain.state++; break; case 5: - sTradeData->playerLinkFlagFinishTrade = 0; - sTradeData->partnerLinkFlagFinishTrade = 0; - sTradeData->sendTradeFinishState = 0; + sTradeAnim->playerFinishStatus = 0; + sTradeAnim->partnerFinishStatus = 0; + sTradeAnim->scheduleLinkTransfer = 0; LoadTradeMonPic(TRADE_PLAYER, 0); gMain.state++; break; @@ -2910,7 +2978,7 @@ void LinkTradeDrawWindow(void) CopyWindowToVram(0, COPYWIN_FULL); } -static void InitTradeBgInternal(void) +static void TradeAnimInit_LoadGfx(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); @@ -2921,18 +2989,20 @@ static void InitTradeBgInternal(void) SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); DeactivateAllTextPrinters(); + // Doing the graphics load... DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer); - CopyToBgTilemapBuffer(0, gDecompressionBuffer, 0x800, 0); - LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20); + CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); + LoadCompressedPalette(gBattleTextboxPalette, BG_PLTT_ID(0), PLTT_SIZE_4BPP); InitWindows(sTradeSequenceWindowTemplates); + // ... and doing the same load again DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer); - CopyToBgTilemapBuffer(0, gDecompressionBuffer, 0x800, 0); - LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20); + CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); + LoadCompressedPalette(gBattleTextboxPalette, BG_PLTT_ID(0), PLTT_SIZE_4BPP); } -static void CB2_InGameTrade(void) +static void CB2_InitInGameTrade(void) { u8 otName[11]; @@ -2946,25 +3016,25 @@ static void CB2_InGameTrade(void) StringCopy(gLinkPlayers[1].name, otName); gLinkPlayers[0].language = GAME_LANGUAGE; gLinkPlayers[1].language = GetMonData(&gEnemyParty[0], MON_DATA_LANGUAGE); - sTradeData = AllocZeroed(sizeof(*sTradeData)); + sTradeAnim = AllocZeroed(sizeof(*sTradeAnim)); AllocateMonSpritesGfx(); ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); - SetVBlankCallback(VBlankCB_Trade); - InitTradeBgInternal(); - sTradeData->isLinkTrade = FALSE; - sTradeData->neverRead_8C = 0; - sTradeData->state = 0; - sTradeData->texX = 64; - sTradeData->texY = 64; - sTradeData->neverRead_D8 = 0; - sTradeData->neverRead_DA = 0; - sTradeData->scrX = 120; - sTradeData->scrY = 80; - sTradeData->sXY = 256; - sTradeData->alpha = 0; - sTradeData->timer = 0; + SetVBlankCallback(VBlankCB_TradeAnim); + TradeAnimInit_LoadGfx(); + sTradeAnim->isLinkTrade = FALSE; + sTradeAnim->neverRead_8C = 0; + sTradeAnim->state = 0; + sTradeAnim->texX = 64; + sTradeAnim->texY = 64; + sTradeAnim->neverRead_D8 = 0; + sTradeAnim->neverRead_DA = 0; + sTradeAnim->scrX = DISPLAY_WIDTH / 2; + sTradeAnim->scrY = DISPLAY_HEIGHT / 2; + sTradeAnim->sXY = 256; + sTradeAnim->alpha = 0; + sTradeAnim->timer = 0; gMain.state = 5; break; case 5: @@ -3004,7 +3074,7 @@ static void CB2_InGameTrade(void) gMain.state++; break; case 12: - SetMainCallback2(CB2_UpdateInGameTrade); + SetMainCallback2(CB2_InGameTrade); break; } @@ -3048,11 +3118,14 @@ static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx]; u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); + // The mail attached to the sent Pokemon no longer exists in your file. if (playerMail != MAIL_NONE) ClearMail(&gSaveBlock1Ptr->mail[playerMail]); - SWAP(*playerMon, *partnerMon, sTradeData->tempMon); + SWAP(*playerMon, *partnerMon, sTradeAnim->tempMon); + // By default, a Pokemon received from a trade will have 70 Friendship. + // Eggs use Friendship to track egg cycles, so don't set this on Eggs. friendship = 70; if (!GetMonData(playerMon, MON_DATA_IS_EGG)) SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship); @@ -3065,26 +3138,26 @@ static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) TryEnableNationalDexFromLinkPartner(); } -static void TrySendTradeFinishData(void) +static void HandleLinkDataSend(void) { - switch (sTradeData->sendTradeFinishState) + switch (sTradeAnim->scheduleLinkTransfer) { case 1: if (IsLinkTaskFinished()) { - SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, sizeof(sTradeData->linkData)); - sTradeData->sendTradeFinishState++; + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeAnim->linkData, sizeof(sTradeAnim->linkData)); + sTradeAnim->scheduleLinkTransfer++; } // fallthrough case 2: - sTradeData->sendTradeFinishState = 0; + sTradeAnim->scheduleLinkTransfer = 0; break; } } -static void CB2_UpdateInGameTrade(void) +static void CB2_InGameTrade(void) { - AnimateTradeSequence(); + DoTradeAnim(); RunTasks(); RunTextPrinters(); AnimateSprites(); @@ -3097,8 +3170,8 @@ static void SetTradeSequenceBgGpuRegs(u8 state) switch (state) { case 0: - sTradeData->bg2vofs = 0; - sTradeData->bg2hofs = 180; + sTradeAnim->bg2vofs = 0; + sTradeAnim->bg2hofs = 180; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | @@ -3109,13 +3182,13 @@ static void SetTradeSequenceBgGpuRegs(u8 state) BGCNT_16COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); - LoadPalette(gTradeGba2_Pal, 16, 0x60); + LoadPalette(gTradeGba2_Pal, BG_PLTT_ID(1), 3 * PLTT_SIZE_4BPP); DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000); DmaCopy16Defvars(3, gTradePlatform_Tilemap, (void *) BG_SCREEN_ADDR(18), 0x1000); break; case 1: - sTradeData->bg1hofs = 0; - sTradeData->bg1vofs = 348; + sTradeAnim->bg1hofs = 0; + sTradeAnim->bg1vofs = 348; SetGpuReg(REG_OFFSET_BG1VOFS, 348); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | @@ -3128,13 +3201,13 @@ static void SetTradeSequenceBgGpuRegs(u8 state) BGCNT_SCREENBASE(18) | BGCNT_TXT256x512); - if (sTradeData->isCableTrade) + if (sTradeAnim->isCableTrade) { - DmaCopy16Defvars(3, sGbaCable_Tilemap, (void *) BG_SCREEN_ADDR(5), 0x1000); + DmaCopy16Defvars(3, sGbaMapCable, (void *) BG_SCREEN_ADDR(5), 0x1000); } else { - DmaCopy16Defvars(3, sGbaWireless_Tilemap, (void *) BG_SCREEN_ADDR(5), 0x1000); + DmaCopy16Defvars(3, sGbaMapWireless, (void *) BG_SCREEN_ADDR(5), 0x1000); } DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(0), 0x1420, 0x1000); @@ -3144,15 +3217,15 @@ static void SetTradeSequenceBgGpuRegs(u8 state) DISPCNT_OBJ_ON); break; case 2: - sTradeData->bg1vofs = 0; - sTradeData->bg1hofs = 0; - if (!sTradeData->isCableTrade) + sTradeAnim->bg1vofs = 0; + sTradeAnim->bg1hofs = 0; + if (!sTradeAnim->isCableTrade) { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - LZ77UnCompVram(sCrossingHighlightWireless_Tilemap, (void *) BG_SCREEN_ADDR(5)); + LZ77UnCompVram(sWirelessCloseup_Map, (void *) BG_SCREEN_ADDR(5)); BlendPalettes(0x8, 16, RGB_BLACK); } else @@ -3161,15 +3234,15 @@ static void SetTradeSequenceBgGpuRegs(u8 state) DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - DmaCopy16Defvars(3, sCrossingHighlightCable_Tilemap, (void *) BG_SCREEN_ADDR(5), 0x800); + DmaCopy16Defvars(3, sCableCloseup_Map, (void *) BG_SCREEN_ADDR(5), 0x800); BlendPalettes(0x1, 16, RGB_BLACK); } break; case 3: - LoadPalette(sWirelessSignalNone_Pal, 48, 0x20); + LoadPalette(sWirelessSignalNone_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); LZ77UnCompVram(sWirelessSignal_Gfx, (void *) BG_CHAR_ADDR(1)); LZ77UnCompVram(sWirelessSignal_Tilemap, (void *) BG_SCREEN_ADDR(18)); - sTradeData->bg2vofs = 80; + sTradeAnim->bg2vofs = 80; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | @@ -3186,26 +3259,26 @@ static void SetTradeSequenceBgGpuRegs(u8 state) BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); - sTradeData->texX = 64; - sTradeData->texY = 92; - sTradeData->sXY = 32; - sTradeData->gbaScale = 1024; - sTradeData->alpha = 0; + sTradeAnim->texX = 64; + sTradeAnim->texY = 92; + sTradeAnim->sXY = 32; + sTradeAnim->gbaScale = 1024; + sTradeAnim->alpha = 0; DmaCopyLarge16(3, sGbaAffine_Gfx, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeData->isCableTrade) + if (sTradeAnim->isCableTrade) { - DmaCopy16Defvars(3, sGbaCable_AffineTilemap, (void *) BG_SCREEN_ADDR(18), 0x100); + DmaCopy16Defvars(3, sGbaAffineMapCable, (void *) BG_SCREEN_ADDR(18), 0x100); } else { - DmaCopy16Defvars(3, sGbaWireless_AffineTilemap, (void *) BG_SCREEN_ADDR(18), 0x100); + DmaCopy16Defvars(3, sGbaAffineMapWireless, (void *) BG_SCREEN_ADDR(18), 0x100); } break; case 5: - sTradeData->bg1vofs = 0; - sTradeData->bg1hofs = 0; + sTradeAnim->bg1vofs = 0; + sTradeAnim->bg1hofs = 0; break; case 6: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | @@ -3217,35 +3290,35 @@ static void SetTradeSequenceBgGpuRegs(u8 state) BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); - sTradeData->texX = 64; - sTradeData->texY = 92; - sTradeData->sXY = 256; - sTradeData->gbaScale = 128; - sTradeData->scrX = 120; - sTradeData->scrY = 80; - sTradeData->alpha = 0; + sTradeAnim->texX = 64; + sTradeAnim->texY = 92; + sTradeAnim->sXY = 256; + sTradeAnim->gbaScale = 128; + sTradeAnim->scrX = 120; + sTradeAnim->scrY = 80; + sTradeAnim->alpha = 0; DmaCopyLarge16(3, sGbaAffine_Gfx, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeData->isCableTrade) + if (sTradeAnim->isCableTrade) { - DmaCopy16Defvars(3, sGbaCable_AffineTilemap, (void *) BG_SCREEN_ADDR(18), 0x100); + DmaCopy16Defvars(3, sGbaAffineMapCable, (void *) BG_SCREEN_ADDR(18), 0x100); } else { - DmaCopy16Defvars(3, sGbaWireless_AffineTilemap, (void *) BG_SCREEN_ADDR(18), 0x100); + DmaCopy16Defvars(3, sGbaAffineMapWireless, (void *) BG_SCREEN_ADDR(18), 0x100); } break; case 7: - sTradeData->bg2vofs = 0; - sTradeData->bg2hofs = 0; + sTradeAnim->bg2vofs = 0; + sTradeAnim->bg2hofs = 0; SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_16COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); - LoadPalette(gTradeGba2_Pal, 16, 0x60); + LoadPalette(gTradeGba2_Pal, BG_PLTT_ID(1), 3 * PLTT_SIZE_4BPP); DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000); DmaCopy16Defvars(3, gTradePlatform_Tilemap, (void *) BG_SCREEN_ADDR(18), 0x1000); break; @@ -3269,7 +3342,7 @@ static void BufferTradeSceneStrings(void) u8 name[20]; const struct InGameTrade *ingameTrade; - if (sTradeData->isLinkTrade) + if (sTradeAnim->isLinkTrade) { mpId = GetMultiplayerId(); StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name); @@ -3289,476 +3362,476 @@ static void BufferTradeSceneStrings(void) } // returns TRUE if it finished a link trade, FALSE if it finished an in-game trade or if sequence is still going -static bool8 AnimateTradeSequence(void) +static bool8 DoTradeAnim(void) { - if (sTradeData->isCableTrade) - return AnimateTradeSequenceCable(); + if (sTradeAnim->isCableTrade) + return DoTradeAnim_Cable(); else - return AnimateTradeSequenceWireless(); + return DoTradeAnim_Wireless(); } -// Below are the states for the main switch in AnimateTradeSequenceCable and AnimateTradeSequenceWireless -// When AnimateTradeSequenceWireless has a unique version of a -// state used by AnimateTradeSequenceCable, it adds the below modifier -#define TS_WIRELESS_STATE 100 +// Below are the states for the main switch in DoTradeAnim_Cable and DoTradeAnim_Wireless +// When DoTradeAnim_Wireless has a unique version of a state used by DoTradeAnim_Cable, it adds the below modifier +#define STATE_WIRELESS 100 enum { - TS_STATE_START, - TS_STATE_MON_SLIDE_IN, + STATE_START, + STATE_MON_SLIDE_IN, // 2-9 unused - TS_STATE_SEND_MSG = 10, - TS_STATE_BYE_BYE, - TS_STATE_POKEBALL_DEPART, - TS_STATE_POKEBALL_DEPART_WAIT, - TS_STATE_FADE_OUT_TO_GBA_SEND, + STATE_SEND_MSG = 10, + STATE_BYE_BYE, + STATE_POKEBALL_DEPART, + STATE_POKEBALL_DEPART_WAIT, + STATE_FADE_OUT_TO_GBA_SEND, // 15-19 unused - TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND = 20, - TS_STATE_FADE_IN_TO_GBA_SEND, - TS_STATE_WAIT_FADE_IN_TO_GBA_SEND, - TS_STATE_GBA_ZOOM_OUT, - TS_STATE_GBA_FLASH_SEND, - TS_STATE_GBA_STOP_FLASH_SEND, - TS_STATE_PAN_AWAY_GBA, - TS_STATE_CREATE_LINK_MON_LEAVING, - TS_STATE_LINK_MON_TRAVEL_OUT, - TS_STATE_FADE_OUT_TO_CROSSING, - TS_STATE_WAIT_FADE_OUT_TO_CROSSING, - TS_STATE_FADE_IN_TO_CROSSING, - TS_STATE_WAIT_FADE_IN_TO_CROSSING, - TS_STATE_CROSSING_LINK_MONS_ENTER, - TS_STATE_CROSSING_BLEND_WHITE_1, - TS_STATE_CROSSING_BLEND_WHITE_2, - TS_STATE_CROSSING_BLEND_WHITE_3, - TS_STATE_CROSSING_CREATE_MON_PICS, - TS_STATE_CROSSING_MON_PICS_MOVE, - TS_STATE_CROSSING_LINK_MONS_EXIT, - TS_STATE_CREATE_LINK_MON_ARRIVING, - TS_STATE_FADE_OUT_TO_GBA_RECV, - TS_STATE_WAIT_FADE_OUT_TO_GBA_RECV, - TS_STATE_LINK_MON_TRAVEL_IN, - TS_STATE_PAN_TO_GBA, - TS_STATE_DESTROY_LINK_MON, - TS_STATE_LINK_MON_ARRIVED_DELAY, - TS_STATE_MOVE_GBA_TO_CENTER, - TS_STATE_GBA_FLASH_RECV, - TS_STATE_UNUSED, - TS_STATE_GBA_STOP_FLASH_RECV, - TS_STATE_GBA_ZOOM_IN, - TS_STATE_FADE_OUT_TO_NEW_MON, + STATE_WAIT_FADE_OUT_TO_GBA_SEND = 20, + STATE_FADE_IN_TO_GBA_SEND, + STATE_WAIT_FADE_IN_TO_GBA_SEND, + STATE_GBA_ZOOM_OUT, + STATE_GBA_FLASH_SEND, + STATE_GBA_STOP_FLASH_SEND, + STATE_PAN_AWAY_GBA, + STATE_CREATE_LINK_MON_LEAVING, + STATE_LINK_MON_TRAVEL_OUT, + STATE_FADE_OUT_TO_CROSSING, + STATE_WAIT_FADE_OUT_TO_CROSSING, + STATE_FADE_IN_TO_CROSSING, + STATE_WAIT_FADE_IN_TO_CROSSING, + STATE_CROSSING_LINK_MONS_ENTER, + STATE_CROSSING_BLEND_WHITE_1, + STATE_CROSSING_BLEND_WHITE_2, + STATE_CROSSING_BLEND_WHITE_3, + STATE_CROSSING_CREATE_MON_PICS, + STATE_CROSSING_MON_PICS_MOVE, + STATE_CROSSING_LINK_MONS_EXIT, + STATE_CREATE_LINK_MON_ARRIVING, + STATE_FADE_OUT_TO_GBA_RECV, + STATE_WAIT_FADE_OUT_TO_GBA_RECV, + STATE_LINK_MON_TRAVEL_IN, + STATE_PAN_TO_GBA, + STATE_DESTROY_LINK_MON, + STATE_LINK_MON_ARRIVED_DELAY, + STATE_MOVE_GBA_TO_CENTER, + STATE_GBA_FLASH_RECV, + STATE_UNUSED, + STATE_GBA_STOP_FLASH_RECV, + STATE_GBA_ZOOM_IN, + STATE_FADE_OUT_TO_NEW_MON, // 53-59 unused - TS_STATE_WAIT_FADE_OUT_TO_NEW_MON = 60, - TS_STATE_FADE_IN_TO_NEW_MON, - TS_STATE_WAIT_FADE_IN_TO_NEW_MON, - TS_STATE_POKEBALL_ARRIVE, - TS_STATE_FADE_POKEBALL_TO_NORMAL, - TS_STATE_POKEBALL_ARRIVE_WAIT, - TS_STATE_SHOW_NEW_MON, - TS_STATE_NEW_MON_MSG, - TS_STATE_TAKE_CARE_OF_MON, - TS_STATE_AFTER_NEW_MON_DELAY, - TS_STATE_CHECK_RIBBONS, - TS_STATE_END_LINK_TRADE, - TS_STATE_TRY_EVOLUTION, - TS_STATE_FADE_OUT_END, - TS_STATE_WAIT_FADE_OUT_END, + STATE_WAIT_FADE_OUT_TO_NEW_MON = 60, + STATE_FADE_IN_TO_NEW_MON, + STATE_WAIT_FADE_IN_TO_NEW_MON, + STATE_POKEBALL_ARRIVE, + STATE_FADE_POKEBALL_TO_NORMAL, + STATE_POKEBALL_ARRIVE_WAIT, + STATE_SHOW_NEW_MON, + STATE_NEW_MON_MSG, + STATE_TAKE_CARE_OF_MON, + STATE_AFTER_NEW_MON_DELAY, + STATE_CHECK_RIBBONS, + STATE_END_LINK_TRADE, + STATE_TRY_EVOLUTION, + STATE_FADE_OUT_END, + STATE_WAIT_FADE_OUT_END, // Special states - TS_STATE_GBA_FLASH_SEND_WIRELESS = TS_STATE_GBA_FLASH_SEND + TS_WIRELESS_STATE, - TS_STATE_GBA_STOP_FLASH_SEND_WIRELESS, - TS_STATE_WAIT_WIRELESS_SIGNAL_SEND, - TS_STATE_PAN_TO_GBA_WIRELESS = TS_STATE_PAN_TO_GBA + TS_WIRELESS_STATE, - TS_STATE_DESTROY_LINK_MON_WIRELESS, - TS_STATE_WAIT_WIRELESS_SIGNAL_RECV, - TS_STATE_DELAY_FOR_MON_ANIM = 167, - TS_STATE_LINK_MON_TRAVEL_OFFSCREEN = 200, - TS_STATE_WAIT_FOR_MON_CRY = 267, + STATE_GBA_FLASH_SEND_WIRELESS = STATE_GBA_FLASH_SEND + STATE_WIRELESS, + STATE_GBA_STOP_FLASH_SEND_WIRELESS, + STATE_WAIT_WIRELESS_SIGNAL_SEND, + STATE_PAN_TO_GBA_WIRELESS = STATE_PAN_TO_GBA + STATE_WIRELESS, + STATE_DESTROY_LINK_MON_WIRELESS, + STATE_WAIT_WIRELESS_SIGNAL_RECV, + STATE_DELAY_FOR_MON_ANIM = 167, + STATE_LINK_MON_TRAVEL_OFFSCREEN = 200, + STATE_WAIT_FOR_MON_CRY = 267, }; -static bool8 AnimateTradeSequenceCable(void) +static bool8 DoTradeAnim_Cable(void) { u16 evoTarget; - switch (sTradeData->state) + switch (sTradeAnim->state) { - case TS_STATE_START: - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x2 = -180; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset; - sTradeData->state++; - sTradeData->cachedMapMusic = GetCurrentMapMusic(); + case STATE_START: + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 = -180; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 = gMonFrontPicCoords[sTradeAnim->monSpecies[TRADE_PLAYER]].y_offset; + sTradeAnim->state++; + sTradeAnim->cachedMapMusic = GetCurrentMapMusic(); PlayNewMapMusic(MUS_EVOLUTION); break; - case TS_STATE_MON_SLIDE_IN: - if (sTradeData->bg2hofs > 0) + case STATE_MON_SLIDE_IN: + if (sTradeAnim->bg2hofs > 0) { // Sliding - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x2 += 3; - sTradeData->bg2hofs -= 3; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 += 3; + sTradeAnim->bg2hofs -= 3; } else { // Pokémon has arrived onscreen - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x2 = 0; - sTradeData->bg2hofs = 0; - sTradeData->state = TS_STATE_SEND_MSG; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 = 0; + sTradeAnim->bg2hofs = 0; + sTradeAnim->state = STATE_SEND_MSG; } break; - case TS_STATE_SEND_MSG: + case STATE_SEND_MSG: StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); DrawTextOnTradeWindow(0, gStringVar4, 0); - if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG) - PlayCry_Normal(sTradeData->monSpecies[TRADE_PLAYER], 0); + if (sTradeAnim->monSpecies[TRADE_PLAYER] != SPECIES_EGG) + PlayCry_Normal(sTradeAnim->monSpecies[TRADE_PLAYER], 0); - sTradeData->state = TS_STATE_BYE_BYE; - sTradeData->timer = 0; + sTradeAnim->state = STATE_BYE_BYE; + sTradeAnim->timer = 0; break; - case TS_STATE_BYE_BYE: - if (++sTradeData->timer == 80) + case STATE_BYE_BYE: + if (++sTradeAnim->timer == 80) { - sTradeData->releasePokeballSpriteId = CreateTradePokeballSprite(sTradeData->monSpriteIds[0], gSprites[sTradeData->monSpriteIds[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); - sTradeData->state++; + sTradeAnim->releasePokeballSpriteId = CreateTradePokeballSprite(sTradeAnim->monSpriteIds[TRADE_PLAYER], gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeAnim->state++; StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); DrawTextOnTradeWindow(0, gStringVar4, 0); } break; - case TS_STATE_POKEBALL_DEPART: - if (gSprites[sTradeData->releasePokeballSpriteId].callback == SpriteCallbackDummy) + case STATE_POKEBALL_DEPART: + if (gSprites[sTradeAnim->releasePokeballSpriteId].callback == SpriteCallbackDummy) { - sTradeData->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, 32, 0); - gSprites[sTradeData->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballDepart; - DestroySprite(&gSprites[sTradeData->releasePokeballSpriteId]); - sTradeData->state++; + sTradeAnim->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, 32, 0); + gSprites[sTradeAnim->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballDepart; + DestroySprite(&gSprites[sTradeAnim->releasePokeballSpriteId]); + sTradeAnim->state++; } break; - case TS_STATE_POKEBALL_DEPART_WAIT: + case STATE_POKEBALL_DEPART_WAIT: // The game waits here for the sprite to finish its animation sequence. break; - case TS_STATE_FADE_OUT_TO_GBA_SEND: + case STATE_FADE_OUT_TO_GBA_SEND: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_GBA_SEND; break; - case TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND: + case STATE_WAIT_FADE_OUT_TO_GBA_SEND: if (!gPaletteFade.active) { SetTradeSequenceBgGpuRegs(4); FillWindowPixelBuffer(0, PIXEL_FILL(15)); CopyWindowToVram(0, COPYWIN_FULL); - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_FADE_IN_TO_GBA_SEND: + case STATE_FADE_IN_TO_GBA_SEND: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_IN_TO_GBA_SEND: + case STATE_WAIT_FADE_IN_TO_GBA_SEND: if (!gPaletteFade.active) - sTradeData->state = TS_STATE_GBA_ZOOM_OUT; + sTradeAnim->state = STATE_GBA_ZOOM_OUT; break; - case TS_STATE_GBA_ZOOM_OUT: - if (sTradeData->gbaScale > 0x100) + case STATE_GBA_ZOOM_OUT: + if (sTradeAnim->gbaScale > 0x100) { - sTradeData->gbaScale -= 0x34; + sTradeAnim->gbaScale -= 0x34; } else { SetTradeSequenceBgGpuRegs(1); - sTradeData->gbaScale = 0x80; - sTradeData->state++; - sTradeData->timer = 0; + sTradeAnim->gbaScale = 0x80; + sTradeAnim->state++; + sTradeAnim->timer = 0; } - sTradeData->sXY = 0x8000 / sTradeData->gbaScale; + sTradeAnim->sXY = 0x8000 / sTradeAnim->gbaScale; break; - case TS_STATE_GBA_FLASH_SEND: - if (++sTradeData->timer > 20) + case STATE_GBA_FLASH_SEND: + if (++sTradeAnim->timer > 20) { SetTradeBGAffine(); - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); - sTradeData->state++; + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); + sTradeAnim->state++; } break; - case TS_STATE_GBA_STOP_FLASH_SEND: - if (gSprites[sTradeData->connectionSpriteId2].animEnded) + case STATE_GBA_STOP_FLASH_SEND: + if (gSprites[sTradeAnim->connectionSpriteId2].animEnded) { - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4)); - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_PAN_AWAY_GBA: - if (--sTradeData->bg1vofs == 316) - sTradeData->state++; + case STATE_PAN_AWAY_GBA: + if (--sTradeAnim->bg1vofs == 316) + sTradeAnim->state++; - if (sTradeData->bg1vofs == 328) - sTradeData->cableEndSpriteId = CreateSprite(&sSpriteTemplate_CableEnd, 128, 65, 0); + if (sTradeAnim->bg1vofs == 328) + sTradeAnim->cableEndSpriteId = CreateSprite(&sSpriteTemplate_CableEnd, 128, 65, 0); break; - case TS_STATE_CREATE_LINK_MON_LEAVING: - sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 128, 80, 3); - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 128, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->connectionSpriteId2], ANIM_LINKMON_SMALL); - sTradeData->state++; + case STATE_CREATE_LINK_MON_LEAVING: + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 128, 80, 3); + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 128, 80, 0); + StartSpriteAnim(&gSprites[sTradeAnim->connectionSpriteId2], ANIM_LINKMON_SMALL); + sTradeAnim->state++; break; - case TS_STATE_LINK_MON_TRAVEL_OUT: - if ((sTradeData->bg1vofs -= 2) == 166) - sTradeData->state = TS_STATE_LINK_MON_TRAVEL_OFFSCREEN; + case STATE_LINK_MON_TRAVEL_OUT: + if ((sTradeAnim->bg1vofs -= 2) == 166) + sTradeAnim->state = STATE_LINK_MON_TRAVEL_OFFSCREEN; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); break; - case TS_STATE_LINK_MON_TRAVEL_OFFSCREEN: - gSprites[sTradeData->connectionSpriteId1].y -= 2; - gSprites[sTradeData->connectionSpriteId2].y -= 2; - if (gSprites[sTradeData->connectionSpriteId1].y < -8) - sTradeData->state = TS_STATE_FADE_OUT_TO_CROSSING; + case STATE_LINK_MON_TRAVEL_OFFSCREEN: + gSprites[sTradeAnim->connectionSpriteId1].y -= 2; + gSprites[sTradeAnim->connectionSpriteId2].y -= 2; + if (gSprites[sTradeAnim->connectionSpriteId1].y < -8) + sTradeAnim->state = STATE_FADE_OUT_TO_CROSSING; break; - case TS_STATE_FADE_OUT_TO_CROSSING: + case STATE_FADE_OUT_TO_CROSSING: BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); - sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_CROSSING; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_CROSSING; break; - case TS_STATE_WAIT_FADE_OUT_TO_CROSSING: + case STATE_WAIT_FADE_OUT_TO_CROSSING: if (!gPaletteFade.active) { - DestroySprite(&gSprites[sTradeData->connectionSpriteId1]); - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetTradeSequenceBgGpuRegs(2); - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_FADE_IN_TO_CROSSING: + case STATE_FADE_IN_TO_CROSSING: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 111, 170, 0); - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 129, -10, 0); - sTradeData->state++; + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 111, 170, 0); + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 129, -10, 0); + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_IN_TO_CROSSING: + case STATE_WAIT_FADE_IN_TO_CROSSING: if (!gPaletteFade.active) { PlaySE(SE_WARP_OUT); - sTradeData->state++; + sTradeAnim->state++; } - gSprites[sTradeData->connectionSpriteId1].y2 -= 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; break; - case TS_STATE_CROSSING_LINK_MONS_ENTER: - gSprites[sTradeData->connectionSpriteId1].y2 -= 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; - if (gSprites[sTradeData->connectionSpriteId1].y2 <= -90) + case STATE_CROSSING_LINK_MONS_ENTER: + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 <= -90) { - gSprites[sTradeData->connectionSpriteId1].data[1] = 1; - gSprites[sTradeData->connectionSpriteId2].data[1] = 1; - sTradeData->state++; + gSprites[sTradeAnim->connectionSpriteId1].data[1] = 1; + gSprites[sTradeAnim->connectionSpriteId2].data[1] = 1; + sTradeAnim->state++; } break; - case TS_STATE_CROSSING_BLEND_WHITE_1: + case STATE_CROSSING_BLEND_WHITE_1: BlendPalettes(0x1, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_BLEND_WHITE_2: + case STATE_CROSSING_BLEND_WHITE_2: BlendPalettes(0x1, 0, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_BLEND_WHITE_3: + case STATE_CROSSING_BLEND_WHITE_3: BlendPalettes(0x1, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_CREATE_MON_PICS: - if (!IsMonSpriteNotFlipped(sTradeData->monSpecies[TRADE_PLAYER])) + case STATE_CROSSING_CREATE_MON_PICS: + if (!IsMonSpriteNotFlipped(sTradeAnim->monSpecies[TRADE_PLAYER])) { - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].affineAnims = sAffineAnims_CrossingMonPics; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE; - CalcCenterToCornerVec(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE); - StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], 0); + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].affineAnims = sAffineAnims_CrossingMonPics; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE; + CalcCenterToCornerVec(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE); + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], 0); } else { - StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], 0); + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], 0); } - StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0); - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x = 60; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x = 180; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y = 192; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y = -32; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].invisible = FALSE; - sTradeData->state++; + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]], 0); + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x = 60; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x = 180; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y = 192; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y = -32; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].invisible = FALSE; + sTradeAnim->state++; break; - 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 - && gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 >= -DISPLAY_HEIGHT - 3) + case STATE_CROSSING_MON_PICS_MOVE: + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 -= 3; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y2 += 3; + if (gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 < -DISPLAY_HEIGHT + && gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 >= -DISPLAY_HEIGHT - 3) { PlaySE(SE_WARP_IN); } - if (gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 < -222) + if (gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 < -222) { - gSprites[sTradeData->connectionSpriteId1].data[1] = 0; - gSprites[sTradeData->connectionSpriteId2].data[1] = 0; - sTradeData->state++; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = TRUE; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].invisible = TRUE; + gSprites[sTradeAnim->connectionSpriteId1].data[1] = 0; + gSprites[sTradeAnim->connectionSpriteId2].data[1] = 0; + sTradeAnim->state++; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = TRUE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].invisible = TRUE; BlendPalettes(0x1, 0, RGB_WHITEALPHA); } break; - case TS_STATE_CROSSING_LINK_MONS_EXIT: - gSprites[sTradeData->connectionSpriteId1].y2 -= 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; - if (gSprites[sTradeData->connectionSpriteId1].y2 <= -222) + case STATE_CROSSING_LINK_MONS_EXIT: + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 <= -222) { BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); - sTradeData->state++; - DestroySprite(&gSprites[sTradeData->connectionSpriteId1]); - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + sTradeAnim->state++; + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); } break; - case TS_STATE_CREATE_LINK_MON_ARRIVING: + case STATE_CREATE_LINK_MON_ARRIVING: if (!gPaletteFade.active) { - sTradeData->state++; + sTradeAnim->state++; SetTradeSequenceBgGpuRegs(1); - sTradeData->bg1vofs = 166; - sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 128, -20, 3); - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 128, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->connectionSpriteId2], ANIM_LINKMON_SMALL); + sTradeAnim->bg1vofs = 166; + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 128, -20, 3); + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 128, -20, 0); + StartSpriteAnim(&gSprites[sTradeAnim->connectionSpriteId2], ANIM_LINKMON_SMALL); } break; - case TS_STATE_FADE_OUT_TO_GBA_RECV: + case STATE_FADE_OUT_TO_GBA_RECV: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_OUT_TO_GBA_RECV: + case STATE_WAIT_FADE_OUT_TO_GBA_RECV: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); if (!gPaletteFade.active) - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_LINK_MON_TRAVEL_IN: - gSprites[sTradeData->connectionSpriteId1].y2 += 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; - if (gSprites[sTradeData->connectionSpriteId1].y2 + gSprites[sTradeData->connectionSpriteId1].y == 64) - { - sTradeData->state++; - } + case STATE_LINK_MON_TRAVEL_IN: + gSprites[sTradeAnim->connectionSpriteId1].y2 += 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 + gSprites[sTradeAnim->connectionSpriteId1].y == 64) + sTradeAnim->state++; break; - case TS_STATE_PAN_TO_GBA: - if ((sTradeData->bg1vofs += 2) > 316) + case STATE_PAN_TO_GBA: + if ((sTradeAnim->bg1vofs += 2) > 316) { - sTradeData->bg1vofs = 316; - sTradeData->state++; + sTradeAnim->bg1vofs = 316; + sTradeAnim->state++; } break; - case TS_STATE_DESTROY_LINK_MON: - DestroySprite(&gSprites[sTradeData->connectionSpriteId1]); - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); - sTradeData->state++; - sTradeData->timer = 0; + case STATE_DESTROY_LINK_MON: + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); + sTradeAnim->state++; + sTradeAnim->timer = 0; break; - case TS_STATE_LINK_MON_ARRIVED_DELAY: - if (++sTradeData->timer == 10) - sTradeData->state++; + case STATE_LINK_MON_ARRIVED_DELAY: + if (++sTradeAnim->timer == 10) + sTradeAnim->state++; break; - case TS_STATE_MOVE_GBA_TO_CENTER: - if (++sTradeData->bg1vofs > 348) + case STATE_MOVE_GBA_TO_CENTER: + if (++sTradeAnim->bg1vofs > 348) { - sTradeData->bg1vofs = 348; - sTradeData->state++; + sTradeAnim->bg1vofs = 348; + sTradeAnim->state++; } - if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade) + if (sTradeAnim->bg1vofs == 328 && sTradeAnim->isCableTrade) { - sTradeData->cableEndSpriteId = CreateSprite(&sSpriteTemplate_CableEnd, 128, 65, 0); - gSprites[sTradeData->cableEndSpriteId].callback = SpriteCB_CableEndReceiving; + sTradeAnim->cableEndSpriteId = CreateSprite(&sSpriteTemplate_CableEnd, 128, 65, 0); + gSprites[sTradeAnim->cableEndSpriteId].callback = SpriteCB_CableEndReceiving; } break; - case TS_STATE_GBA_FLASH_RECV: - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); - sTradeData->state = TS_STATE_GBA_STOP_FLASH_RECV; + case STATE_GBA_FLASH_RECV: + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); + sTradeAnim->state = STATE_GBA_STOP_FLASH_RECV; break; - case TS_STATE_GBA_STOP_FLASH_RECV: - if (gSprites[sTradeData->connectionSpriteId2].animEnded) + case STATE_GBA_STOP_FLASH_RECV: + if (gSprites[sTradeAnim->connectionSpriteId2].animEnded) { - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetTradeSequenceBgGpuRegs(6); - sTradeData->state++; + sTradeAnim->state++; PlaySE(SE_M_SAND_ATTACK); } break; - case TS_STATE_GBA_ZOOM_IN: - if (sTradeData->gbaScale < 0x400) + case STATE_GBA_ZOOM_IN: + if (sTradeAnim->gbaScale < 0x400) { - sTradeData->gbaScale += 0x34; + sTradeAnim->gbaScale += 0x34; } else { - sTradeData->gbaScale = 0x400; - sTradeData->state++; + sTradeAnim->gbaScale = 0x400; + sTradeAnim->state++; } - sTradeData->sXY = 0x8000 / sTradeData->gbaScale; + sTradeAnim->sXY = 0x8000 / sTradeAnim->gbaScale; break; - case TS_STATE_FADE_OUT_TO_NEW_MON: + case STATE_FADE_OUT_TO_NEW_MON: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_NEW_MON; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_NEW_MON; break; - case TS_STATE_WAIT_FADE_OUT_TO_NEW_MON: + case STATE_WAIT_FADE_OUT_TO_NEW_MON: if (!gPaletteFade.active) { SetTradeSequenceBgGpuRegs(5); SetTradeSequenceBgGpuRegs(7); gPaletteFade.bufferTransferDisabled = TRUE; - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_FADE_IN_TO_NEW_MON: + case STATE_FADE_IN_TO_NEW_MON: gPaletteFade.bufferTransferDisabled = FALSE; BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_IN_TO_NEW_MON: + case STATE_WAIT_FADE_IN_TO_NEW_MON: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); if (!gPaletteFade.active) - sTradeData->state++; - break; - case TS_STATE_POKEBALL_ARRIVE: - sTradeData->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); - gSprites[sTradeData->bouncingPokeballSpriteId].data[3] = 74; - gSprites[sTradeData->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive; - StartSpriteAnim(&gSprites[sTradeData->bouncingPokeballSpriteId], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->bouncingPokeballSpriteId], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA); - sTradeData->state++; - sTradeData->timer = 0; - break; - case TS_STATE_FADE_POKEBALL_TO_NORMAL: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); - sTradeData->state++; - break; - case TS_STATE_POKEBALL_ARRIVE_WAIT: - if (gSprites[sTradeData->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) - { - HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); - sTradeData->state++; - } - break; - case TS_STATE_SHOW_NEW_MON: - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x = 120; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PARTNER]].y_offset + 60; - 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, PALETTES_BG | (0xF << 16), sTradeData->monSpecies[TRADE_PARTNER]); - FreeSpriteOamMatrix(&gSprites[sTradeData->bouncingPokeballSpriteId]); - DestroySprite(&gSprites[sTradeData->bouncingPokeballSpriteId]); - sTradeData->state++; - break; - case TS_STATE_NEW_MON_MSG: + sTradeAnim->state++; + break; + case STATE_POKEBALL_ARRIVE: + sTradeAnim->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); + gSprites[sTradeAnim->bouncingPokeballSpriteId].data[3] = 74; + gSprites[sTradeAnim->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive; + StartSpriteAnim(&gSprites[sTradeAnim->bouncingPokeballSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sTradeAnim->bouncingPokeballSpriteId], 2); + BlendPalettes(1 << (16 + gSprites[sTradeAnim->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeAnim->state++; + sTradeAnim->timer = 0; + break; + case STATE_FADE_POKEBALL_TO_NORMAL: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeAnim->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeAnim->state++; + break; + case STATE_POKEBALL_ARRIVE_WAIT: + if (gSprites[sTradeAnim->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) + { + HandleLoadSpecialPokePic(TRUE, + gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT], + sTradeAnim->monSpecies[TRADE_PARTNER], + sTradeAnim->monPersonalities[TRADE_PARTNER]); + sTradeAnim->state++; + } + break; + case STATE_SHOW_NEW_MON: + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x = 120; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y = gMonFrontPicCoords[sTradeAnim->monSpecies[TRADE_PARTNER]].y_offset + 60; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x2 = 0; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y2 = 0; + StartSpriteAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]], 0); + CreatePokeballSpriteToReleaseMon(sTradeAnim->monSpriteIds[TRADE_PARTNER], gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, PALETTES_BG | (0xF << 16), sTradeAnim->monSpecies[TRADE_PARTNER]); + FreeSpriteOamMatrix(&gSprites[sTradeAnim->bouncingPokeballSpriteId]); + DestroySprite(&gSprites[sTradeAnim->bouncingPokeballSpriteId]); + sTradeAnim->state++; + break; + case STATE_NEW_MON_MSG: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | @@ -3766,76 +3839,70 @@ static bool8 AnimateTradeSequenceCable(void) DISPCNT_OBJ_ON); StringExpandPlaceholders(gStringVar4, gText_XSentOverY); DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->state = TS_STATE_DELAY_FOR_MON_ANIM; - sTradeData->timer = 0; + sTradeAnim->state = STATE_DELAY_FOR_MON_ANIM; + sTradeAnim->timer = 0; break; - case TS_STATE_DELAY_FOR_MON_ANIM: - if (++sTradeData->timer > 60) + case STATE_DELAY_FOR_MON_ANIM: + if (++sTradeAnim->timer > 60) { - sTradeData->state = TS_STATE_WAIT_FOR_MON_CRY; - sTradeData->timer = 0; + sTradeAnim->state = STATE_WAIT_FOR_MON_CRY; + sTradeAnim->timer = 0; } break; - case TS_STATE_WAIT_FOR_MON_CRY: + case STATE_WAIT_FOR_MON_CRY: if (IsCryFinished()) - sTradeData->state = TS_STATE_TAKE_CARE_OF_MON; + sTradeAnim->state = STATE_TAKE_CARE_OF_MON; break; - case TS_STATE_TAKE_CARE_OF_MON: - if (++sTradeData->timer == 10) + case STATE_TAKE_CARE_OF_MON: + if (++sTradeAnim->timer == 10) PlayFanfare(MUS_EVOLVED); - if (sTradeData->timer == 250) + if (sTradeAnim->timer == 250) { - sTradeData->state++; + sTradeAnim->state++; StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->timer = 0; + sTradeAnim->timer = 0; } break; - case TS_STATE_AFTER_NEW_MON_DELAY: - if (++sTradeData->timer == 60) - sTradeData->state++; + case STATE_AFTER_NEW_MON_DELAY: + if (++sTradeAnim->timer == 60) + sTradeAnim->state++; break; - case TS_STATE_CHECK_RIBBONS: + case STATE_CHECK_RIBBONS: CheckPartnersMonForRibbons(); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_END_LINK_TRADE: - if (sTradeData->isLinkTrade) - { + case STATE_END_LINK_TRADE: + if (sTradeAnim->isLinkTrade) return TRUE; - } else if (JOY_NEW(A_BUTTON)) - { - sTradeData->state++; - } + sTradeAnim->state++; break; - case TS_STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution + case STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution TradeMons(gSpecialVar_0x8005, 0); - gCB2_AfterEvolution = CB2_UpdateInGameTrade; + gCB2_AfterEvolution = CB2_InGameTrade; 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]); - } - sTradeData->state++; + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeAnim->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); + sTradeAnim->state++; break; - case TS_STATE_FADE_OUT_END: + case STATE_FADE_OUT_END: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_OUT_END: + case STATE_WAIT_FADE_OUT_END: if (!gPaletteFade.active) { - PlayNewMapMusic(sTradeData->cachedMapMusic); - if (sTradeData) + PlayNewMapMusic(sTradeAnim->cachedMapMusic); + if (sTradeAnim) { FreeAllWindowBuffers(); Free(GetBgTilemapBuffer(3)); Free(GetBgTilemapBuffer(1)); Free(GetBgTilemapBuffer(0)); FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); + FREE_AND_SET_NULL(sTradeAnim); } SetMainCallback2(CB2_ReturnToField); BufferInGameTradeMonName(); @@ -3845,111 +3912,116 @@ static bool8 AnimateTradeSequenceCable(void) return FALSE; } -static bool8 AnimateTradeSequenceWireless(void) +// Task data for Task_AnimateWirelessSignal +#define tIdx data[0] +#define tCounter data[1] +#define tSignalComingBack data[2] + +static bool8 DoTradeAnim_Wireless(void) { u16 evoTarget; - switch (sTradeData->state) + switch (sTradeAnim->state) { - case TS_STATE_START: - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x2 = -180; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset; - sTradeData->state++; - sTradeData->cachedMapMusic = GetCurrentMapMusic(); + case STATE_START: + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 = -180; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 = gMonFrontPicCoords[sTradeAnim->monSpecies[TRADE_PLAYER]].y_offset; + sTradeAnim->state++; + sTradeAnim->cachedMapMusic = GetCurrentMapMusic(); PlayNewMapMusic(MUS_EVOLUTION); break; - case TS_STATE_MON_SLIDE_IN: - if (sTradeData->bg2hofs > 0) + case STATE_MON_SLIDE_IN: + if (sTradeAnim->bg2hofs > 0) { - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x2 += 3; - sTradeData->bg2hofs -= 3; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 += 3; + sTradeAnim->bg2hofs -= 3; } else { - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x2 = 0; - sTradeData->bg2hofs = 0; - sTradeData->state = TS_STATE_SEND_MSG; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 = 0; + sTradeAnim->bg2hofs = 0; + sTradeAnim->state = STATE_SEND_MSG; } break; - case TS_STATE_SEND_MSG: + case STATE_SEND_MSG: StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); DrawTextOnTradeWindow(0, gStringVar4, 0); - if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG) - PlayCry_Normal(sTradeData->monSpecies[TRADE_PLAYER], 0); + if (sTradeAnim->monSpecies[TRADE_PLAYER] != SPECIES_EGG) + PlayCry_Normal(sTradeAnim->monSpecies[TRADE_PLAYER], 0); - sTradeData->state = TS_STATE_BYE_BYE; - sTradeData->timer = 0; + sTradeAnim->state = STATE_BYE_BYE; + sTradeAnim->timer = 0; break; - case TS_STATE_BYE_BYE: - if (++sTradeData->timer == 80) + case STATE_BYE_BYE: + if (++sTradeAnim->timer == 80) { - sTradeData->releasePokeballSpriteId = CreateTradePokeballSprite(sTradeData->monSpriteIds[0], gSprites[sTradeData->monSpriteIds[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); - sTradeData->state++; + sTradeAnim->releasePokeballSpriteId = CreateTradePokeballSprite(sTradeAnim->monSpriteIds[TRADE_PLAYER], gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeAnim->state++; StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); DrawTextOnTradeWindow(0, gStringVar4, 0); } break; - case TS_STATE_POKEBALL_DEPART: - if (gSprites[sTradeData->releasePokeballSpriteId].callback == SpriteCallbackDummy) + case STATE_POKEBALL_DEPART: + if (gSprites[sTradeAnim->releasePokeballSpriteId].callback == SpriteCallbackDummy) { - sTradeData->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, 32, 0); - gSprites[sTradeData->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballDepart; - DestroySprite(&gSprites[sTradeData->releasePokeballSpriteId]); - sTradeData->state++; + sTradeAnim->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, 32, 0); + gSprites[sTradeAnim->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballDepart; + DestroySprite(&gSprites[sTradeAnim->releasePokeballSpriteId]); + sTradeAnim->state++; } break; - case TS_STATE_POKEBALL_DEPART_WAIT: + case STATE_POKEBALL_DEPART_WAIT: // The game waits here for the sprite to finish its animation sequence. break; - case TS_STATE_FADE_OUT_TO_GBA_SEND: + case STATE_FADE_OUT_TO_GBA_SEND: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_GBA_SEND; break; - case TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND: + case STATE_WAIT_FADE_OUT_TO_GBA_SEND: if (!gPaletteFade.active) { SetTradeSequenceBgGpuRegs(4); FillWindowPixelBuffer(0, PIXEL_FILL(15)); CopyWindowToVram(0, COPYWIN_FULL); - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_FADE_IN_TO_GBA_SEND: + case STATE_FADE_IN_TO_GBA_SEND: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_IN_TO_GBA_SEND: + case STATE_WAIT_FADE_IN_TO_GBA_SEND: if (!gPaletteFade.active) - sTradeData->state = TS_STATE_GBA_ZOOM_OUT; + sTradeAnim->state = STATE_GBA_ZOOM_OUT; break; - case TS_STATE_GBA_ZOOM_OUT: - if (sTradeData->gbaScale > 0x100) + case STATE_GBA_ZOOM_OUT: + if (sTradeAnim->gbaScale > 0x100) { - sTradeData->gbaScale -= 0x34; + sTradeAnim->gbaScale -= 0x34; } else { SetTradeSequenceBgGpuRegs(1); - sTradeData->gbaScale = 0x80; - sTradeData->state = TS_STATE_GBA_FLASH_SEND_WIRELESS; - sTradeData->timer = 0; + sTradeAnim->gbaScale = 0x80; + sTradeAnim->state = STATE_GBA_FLASH_SEND_WIRELESS; + sTradeAnim->timer = 0; } - sTradeData->sXY = 0x8000 / sTradeData->gbaScale; + sTradeAnim->sXY = 0x8000 / sTradeAnim->gbaScale; break; - case TS_STATE_GBA_FLASH_SEND_WIRELESS: - if (++sTradeData->timer > 20) + case STATE_GBA_FLASH_SEND_WIRELESS: + if (++sTradeAnim->timer > 20) { SetTradeSequenceBgGpuRegs(3); - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Short, 120, 80, 0); - sTradeData->state++; + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Short, 120, 80, 0); + sTradeAnim->state++; } break; - case TS_STATE_GBA_STOP_FLASH_SEND_WIRELESS: - if (gSprites[sTradeData->connectionSpriteId2].animEnded) + case STATE_GBA_STOP_FLASH_SEND_WIRELESS: + if (gSprites[sTradeAnim->connectionSpriteId2].animEnded) { - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_BLEND | @@ -3958,307 +4030,305 @@ static bool8 AnimateTradeSequenceWireless(void) // Start wireless signal effect CreateTask(Task_AnimateWirelessSignal, 5); - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_WAIT_WIRELESS_SIGNAL_SEND: + case STATE_WAIT_WIRELESS_SIGNAL_SEND: if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) - sTradeData->state = TS_STATE_PAN_AWAY_GBA; + sTradeAnim->state = STATE_PAN_AWAY_GBA; break; - case TS_STATE_PAN_AWAY_GBA: - if (--sTradeData->bg1vofs == 316) - sTradeData->state++; + case STATE_PAN_AWAY_GBA: + if (--sTradeAnim->bg1vofs == 316) + sTradeAnim->state++; break; - case TS_STATE_CREATE_LINK_MON_LEAVING: - sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 120, 80, 3); - gSprites[sTradeData->connectionSpriteId1].callback = SpriteCB_LinkMonGlowWireless; - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 120, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->connectionSpriteId2], ANIM_LINKMON_SMALL); - sTradeData->state++; + case STATE_CREATE_LINK_MON_LEAVING: + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 120, 80, 3); + gSprites[sTradeAnim->connectionSpriteId1].callback = SpriteCB_LinkMonGlowWireless; + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 120, 80, 0); + StartSpriteAnim(&gSprites[sTradeAnim->connectionSpriteId2], ANIM_LINKMON_SMALL); + sTradeAnim->state++; break; - case TS_STATE_LINK_MON_TRAVEL_OUT: - if ((sTradeData->bg1vofs -= 3) == 166) - sTradeData->state = TS_STATE_LINK_MON_TRAVEL_OFFSCREEN; + case STATE_LINK_MON_TRAVEL_OUT: + if ((sTradeAnim->bg1vofs -= 3) == 166) + sTradeAnim->state = STATE_LINK_MON_TRAVEL_OFFSCREEN; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); break; - case TS_STATE_LINK_MON_TRAVEL_OFFSCREEN: - gSprites[sTradeData->connectionSpriteId1].y -= 2; - gSprites[sTradeData->connectionSpriteId2].y -= 2; - if (gSprites[sTradeData->connectionSpriteId1].y < -8) - { - sTradeData->state = TS_STATE_FADE_OUT_TO_CROSSING; - } + case STATE_LINK_MON_TRAVEL_OFFSCREEN: + gSprites[sTradeAnim->connectionSpriteId1].y -= 2; + gSprites[sTradeAnim->connectionSpriteId2].y -= 2; + if (gSprites[sTradeAnim->connectionSpriteId1].y < -8) + sTradeAnim->state = STATE_FADE_OUT_TO_CROSSING; break; - case TS_STATE_FADE_OUT_TO_CROSSING: + case STATE_FADE_OUT_TO_CROSSING: BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); - sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_CROSSING; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_CROSSING; break; - case TS_STATE_WAIT_FADE_OUT_TO_CROSSING: + case STATE_WAIT_FADE_OUT_TO_CROSSING: if (!gPaletteFade.active) { - DestroySprite(&gSprites[sTradeData->connectionSpriteId1]); - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetTradeSequenceBgGpuRegs(2); - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_FADE_IN_TO_CROSSING: + case STATE_FADE_IN_TO_CROSSING: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 111, 170, 0); - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 129, -10, 0); - sTradeData->state++; + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 111, 170, 0); + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 129, -10, 0); + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_IN_TO_CROSSING: + case STATE_WAIT_FADE_IN_TO_CROSSING: if (!gPaletteFade.active) { PlaySE(SE_WARP_OUT); - sTradeData->state++; + sTradeAnim->state++; } - gSprites[sTradeData->connectionSpriteId1].y2 -= 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; break; - case TS_STATE_CROSSING_LINK_MONS_ENTER: - gSprites[sTradeData->connectionSpriteId1].y2 -= 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; - if (gSprites[sTradeData->connectionSpriteId1].y2 <= -90) + case STATE_CROSSING_LINK_MONS_ENTER: + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 <= -90) { - gSprites[sTradeData->connectionSpriteId1].data[1] = 1; - gSprites[sTradeData->connectionSpriteId2].data[1] = 1; - sTradeData->state++; - CreateTask(Task_NarrowWindowForCrossing_Wireless, 5); + gSprites[sTradeAnim->connectionSpriteId1].data[1] = 1; + gSprites[sTradeAnim->connectionSpriteId2].data[1] = 1; + sTradeAnim->state++; + CreateTask(Task_OpenCenterWhiteColumn, 5); } break; - case TS_STATE_CROSSING_BLEND_WHITE_1: + case STATE_CROSSING_BLEND_WHITE_1: BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_BLEND_WHITE_2: + case STATE_CROSSING_BLEND_WHITE_2: BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_BLEND_WHITE_3: + case STATE_CROSSING_BLEND_WHITE_3: BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_CREATE_MON_PICS: - if (!IsMonSpriteNotFlipped(sTradeData->monSpecies[TRADE_PLAYER])) + case STATE_CROSSING_CREATE_MON_PICS: + if (!IsMonSpriteNotFlipped(sTradeAnim->monSpecies[TRADE_PLAYER])) { - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].affineAnims = sAffineAnims_CrossingMonPics; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE; - CalcCenterToCornerVec(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE); - StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], 0); + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].affineAnims = sAffineAnims_CrossingMonPics; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE; + CalcCenterToCornerVec(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE); + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], 0); } else { - StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], 0); + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], 0); } - StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0); - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x = 40; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x = 200; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y = 192; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y = -32; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].invisible = FALSE; - sTradeData->state++; + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]], 0); + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x = 40; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x = 200; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y = 192; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y = -32; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].invisible = FALSE; + sTradeAnim->state++; break; - 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 - && gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 >= -DISPLAY_HEIGHT - 3) + case STATE_CROSSING_MON_PICS_MOVE: + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 -= 3; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y2 += 3; + if (gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 < -DISPLAY_HEIGHT + && gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 >= -DISPLAY_HEIGHT - 3) { PlaySE(SE_WARP_IN); } - if (gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 < -222) + if (gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 < -222) { - gSprites[sTradeData->connectionSpriteId1].data[1] = 0; - gSprites[sTradeData->connectionSpriteId2].data[1] = 0; - sTradeData->state++; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = TRUE; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].invisible = TRUE; - CreateTask(Task_NarrowWindowForCrossing_Cable, 5); + gSprites[sTradeAnim->connectionSpriteId1].data[1] = 0; + gSprites[sTradeAnim->connectionSpriteId2].data[1] = 0; + sTradeAnim->state++; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = TRUE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].invisible = TRUE; + CreateTask(Task_CloseCenterWhiteColumn, 5); } break; - case TS_STATE_CROSSING_LINK_MONS_EXIT: - gSprites[sTradeData->connectionSpriteId1].y2 -= 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; - if (gSprites[sTradeData->connectionSpriteId1].y2 <= -222) + case STATE_CROSSING_LINK_MONS_EXIT: + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 <= -222) { BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); - sTradeData->state++; - DestroySprite(&gSprites[sTradeData->connectionSpriteId1]); - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + sTradeAnim->state++; + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); } break; - case TS_STATE_CREATE_LINK_MON_ARRIVING: + case STATE_CREATE_LINK_MON_ARRIVING: if (!gPaletteFade.active) { - sTradeData->state++; + sTradeAnim->state++; SetTradeSequenceBgGpuRegs(1); - sTradeData->bg1vofs = 166; + sTradeAnim->bg1vofs = 166; SetTradeSequenceBgGpuRegs(3); - sTradeData->bg2vofs = 412; - sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 120, -20, 3); - gSprites[sTradeData->connectionSpriteId1].callback = SpriteCB_LinkMonGlowWireless; - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 120, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->connectionSpriteId2], ANIM_LINKMON_SMALL); + sTradeAnim->bg2vofs = 412; + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 120, -20, 3); + gSprites[sTradeAnim->connectionSpriteId1].callback = SpriteCB_LinkMonGlowWireless; + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 120, -20, 0); + StartSpriteAnim(&gSprites[sTradeAnim->connectionSpriteId2], ANIM_LINKMON_SMALL); } break; - case TS_STATE_FADE_OUT_TO_GBA_RECV: + case STATE_FADE_OUT_TO_GBA_RECV: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_OUT_TO_GBA_RECV: + case STATE_WAIT_FADE_OUT_TO_GBA_RECV: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); if (!gPaletteFade.active) - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_LINK_MON_TRAVEL_IN: - gSprites[sTradeData->connectionSpriteId1].y2 += 4; - gSprites[sTradeData->connectionSpriteId2].y2 += 4; - if (gSprites[sTradeData->connectionSpriteId1].y2 + gSprites[sTradeData->connectionSpriteId1].y == 64) + case STATE_LINK_MON_TRAVEL_IN: + gSprites[sTradeAnim->connectionSpriteId1].y2 += 4; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 4; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 + gSprites[sTradeAnim->connectionSpriteId1].y == 64) { - sTradeData->state = TS_STATE_PAN_TO_GBA_WIRELESS; - sTradeData->timer = 0; + sTradeAnim->state = STATE_PAN_TO_GBA_WIRELESS; + sTradeAnim->timer = 0; } break; - case TS_STATE_PAN_TO_GBA_WIRELESS: + case STATE_PAN_TO_GBA_WIRELESS: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - sTradeData->bg1vofs += 3; - sTradeData->bg2vofs += 3; - if (++sTradeData->timer == 10) + sTradeAnim->bg1vofs += 3; + sTradeAnim->bg2vofs += 3; + if (++sTradeAnim->timer == 10) { u8 taskId = CreateTask(Task_AnimateWirelessSignal, 5); - gTasks[taskId].data[2] = TRUE; + gTasks[taskId].tSignalComingBack = TRUE; } - if (sTradeData->bg1vofs > 316) + if (sTradeAnim->bg1vofs > 316) { - sTradeData->bg1vofs = 316; - sTradeData->state++; + sTradeAnim->bg1vofs = 316; + sTradeAnim->state++; } break; - case TS_STATE_DESTROY_LINK_MON_WIRELESS: - DestroySprite(&gSprites[sTradeData->connectionSpriteId1]); - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); - sTradeData->state++; - sTradeData->timer = 0; + case STATE_DESTROY_LINK_MON_WIRELESS: + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); + sTradeAnim->state++; + sTradeAnim->timer = 0; break; - case TS_STATE_WAIT_WIRELESS_SIGNAL_RECV: + case STATE_WAIT_WIRELESS_SIGNAL_RECV: if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) { - sTradeData->state = TS_STATE_LINK_MON_ARRIVED_DELAY; - sTradeData->timer = 0; + sTradeAnim->state = STATE_LINK_MON_ARRIVED_DELAY; + sTradeAnim->timer = 0; } break; - case TS_STATE_LINK_MON_ARRIVED_DELAY: - if (++sTradeData->timer == 10) - sTradeData->state++; + case STATE_LINK_MON_ARRIVED_DELAY: + if (++sTradeAnim->timer == 10) + sTradeAnim->state++; break; - case TS_STATE_MOVE_GBA_TO_CENTER: - if (++sTradeData->bg1vofs > 348) + case STATE_MOVE_GBA_TO_CENTER: + if (++sTradeAnim->bg1vofs > 348) { - sTradeData->bg1vofs = 348; - sTradeData->state++; + sTradeAnim->bg1vofs = 348; + sTradeAnim->state++; } break; - case TS_STATE_GBA_FLASH_RECV: - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); - sTradeData->state = TS_STATE_GBA_STOP_FLASH_RECV; + case STATE_GBA_FLASH_RECV: + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); + sTradeAnim->state = STATE_GBA_STOP_FLASH_RECV; break; - case TS_STATE_GBA_STOP_FLASH_RECV: - if (gSprites[sTradeData->connectionSpriteId2].animEnded) + case STATE_GBA_STOP_FLASH_RECV: + if (gSprites[sTradeAnim->connectionSpriteId2].animEnded) { - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetTradeSequenceBgGpuRegs(6); - sTradeData->state++; + sTradeAnim->state++; PlaySE(SE_M_SAND_ATTACK); } break; - case TS_STATE_GBA_ZOOM_IN: - if (sTradeData->gbaScale < 0x400) + case STATE_GBA_ZOOM_IN: + if (sTradeAnim->gbaScale < 0x400) { - sTradeData->gbaScale += 0x34; + sTradeAnim->gbaScale += 0x34; } else { - sTradeData->gbaScale = 0x400; - sTradeData->state++; + sTradeAnim->gbaScale = 0x400; + sTradeAnim->state++; } - sTradeData->sXY = 0x8000 / sTradeData->gbaScale; + sTradeAnim->sXY = 0x8000 / sTradeAnim->gbaScale; break; - case TS_STATE_FADE_OUT_TO_NEW_MON: + case STATE_FADE_OUT_TO_NEW_MON: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_NEW_MON; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_NEW_MON; break; - case TS_STATE_WAIT_FADE_OUT_TO_NEW_MON: + case STATE_WAIT_FADE_OUT_TO_NEW_MON: if (!gPaletteFade.active) { SetTradeSequenceBgGpuRegs(5); SetTradeSequenceBgGpuRegs(7); gPaletteFade.bufferTransferDisabled = TRUE; - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_FADE_IN_TO_NEW_MON: + case STATE_FADE_IN_TO_NEW_MON: gPaletteFade.bufferTransferDisabled = FALSE; BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_IN_TO_NEW_MON: + case STATE_WAIT_FADE_IN_TO_NEW_MON: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); if (!gPaletteFade.active) - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_POKEBALL_ARRIVE: - sTradeData->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); - gSprites[sTradeData->bouncingPokeballSpriteId].data[3] = 74; - gSprites[sTradeData->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive; - StartSpriteAnim(&gSprites[sTradeData->bouncingPokeballSpriteId], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->bouncingPokeballSpriteId], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA); - sTradeData->state++; - sTradeData->timer = 0; + case STATE_POKEBALL_ARRIVE: + sTradeAnim->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); + gSprites[sTradeAnim->bouncingPokeballSpriteId].data[3] = 74; + gSprites[sTradeAnim->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive; + StartSpriteAnim(&gSprites[sTradeAnim->bouncingPokeballSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sTradeAnim->bouncingPokeballSpriteId], 2); + BlendPalettes(1 << (16 + gSprites[sTradeAnim->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeAnim->state++; + sTradeAnim->timer = 0; break; - case TS_STATE_FADE_POKEBALL_TO_NORMAL: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); - sTradeData->state++; + case STATE_FADE_POKEBALL_TO_NORMAL: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeAnim->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeAnim->state++; break; - case TS_STATE_POKEBALL_ARRIVE_WAIT: - if (gSprites[sTradeData->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) + case STATE_POKEBALL_ARRIVE_WAIT: + if (gSprites[sTradeAnim->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) { HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT], - sTradeData->monSpecies[TRADE_PARTNER], - sTradeData->monPersonalities[TRADE_PARTNER]); - sTradeData->state++; - } - break; - case TS_STATE_SHOW_NEW_MON: - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x = 120; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PARTNER]].y_offset + 60; - 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, PALETTES_BG | (0xF << 16), sTradeData->monSpecies[TRADE_PARTNER]); - FreeSpriteOamMatrix(&gSprites[sTradeData->bouncingPokeballSpriteId]); - DestroySprite(&gSprites[sTradeData->bouncingPokeballSpriteId]); - sTradeData->state++; - break; - case TS_STATE_NEW_MON_MSG: + sTradeAnim->monSpecies[TRADE_PARTNER], + sTradeAnim->monPersonalities[TRADE_PARTNER]); + sTradeAnim->state++; + } + break; + case STATE_SHOW_NEW_MON: + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x = 120; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y = gMonFrontPicCoords[sTradeAnim->monSpecies[TRADE_PARTNER]].y_offset + 60; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x2 = 0; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y2 = 0; + StartSpriteAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]], 0); + CreatePokeballSpriteToReleaseMon(sTradeAnim->monSpriteIds[TRADE_PARTNER], gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, PALETTES_BG | (0xF << 16), sTradeAnim->monSpecies[TRADE_PARTNER]); + FreeSpriteOamMatrix(&gSprites[sTradeAnim->bouncingPokeballSpriteId]); + DestroySprite(&gSprites[sTradeAnim->bouncingPokeballSpriteId]); + sTradeAnim->state++; + break; + case STATE_NEW_MON_MSG: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | @@ -4266,76 +4336,70 @@ static bool8 AnimateTradeSequenceWireless(void) DISPCNT_OBJ_ON); StringExpandPlaceholders(gStringVar4, gText_XSentOverY); DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->state = TS_STATE_DELAY_FOR_MON_ANIM; - sTradeData->timer = 0; + sTradeAnim->state = STATE_DELAY_FOR_MON_ANIM; + sTradeAnim->timer = 0; break; - case TS_STATE_DELAY_FOR_MON_ANIM: - if (++sTradeData->timer > 60) + case STATE_DELAY_FOR_MON_ANIM: + if (++sTradeAnim->timer > 60) { - sTradeData->state = TS_STATE_WAIT_FOR_MON_CRY; - sTradeData->timer = 0; + sTradeAnim->state = STATE_WAIT_FOR_MON_CRY; + sTradeAnim->timer = 0; } break; - case TS_STATE_WAIT_FOR_MON_CRY: + case STATE_WAIT_FOR_MON_CRY: if (IsCryFinished()) - sTradeData->state = TS_STATE_TAKE_CARE_OF_MON; + sTradeAnim->state = STATE_TAKE_CARE_OF_MON; break; - case TS_STATE_TAKE_CARE_OF_MON: - if (++sTradeData->timer == 10) + case STATE_TAKE_CARE_OF_MON: + if (++sTradeAnim->timer == 10) PlayFanfare(MUS_EVOLVED); - if (sTradeData->timer == 250) + if (sTradeAnim->timer == 250) { - sTradeData->state++; + sTradeAnim->state++; StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->timer = 0; + sTradeAnim->timer = 0; } break; - case TS_STATE_AFTER_NEW_MON_DELAY: - if (++sTradeData->timer == 60) - sTradeData->state++; + case STATE_AFTER_NEW_MON_DELAY: + if (++sTradeAnim->timer == 60) + sTradeAnim->state++; break; - case TS_STATE_CHECK_RIBBONS: + case STATE_CHECK_RIBBONS: CheckPartnersMonForRibbons(); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_END_LINK_TRADE: - if (sTradeData->isLinkTrade) - { + case STATE_END_LINK_TRADE: + if (sTradeAnim->isLinkTrade) return TRUE; - } else if (JOY_NEW(A_BUTTON)) - { - sTradeData->state++; - } + sTradeAnim->state++; break; - case TS_STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution + case STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution TradeMons(gSpecialVar_0x8005, 0); - gCB2_AfterEvolution = CB2_UpdateInGameTrade; + gCB2_AfterEvolution = CB2_InGameTrade; 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]); - } - sTradeData->state++; + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeAnim->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); + sTradeAnim->state++; break; - case TS_STATE_FADE_OUT_END: + case STATE_FADE_OUT_END: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_OUT_END: + case STATE_WAIT_FADE_OUT_END: if (!gPaletteFade.active) { - PlayNewMapMusic(sTradeData->cachedMapMusic); - if (sTradeData) + PlayNewMapMusic(sTradeAnim->cachedMapMusic); + if (sTradeAnim) { FreeAllWindowBuffers(); Free(GetBgTilemapBuffer(3)); Free(GetBgTilemapBuffer(1)); Free(GetBgTilemapBuffer(0)); FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); + FREE_AND_SET_NULL(sTradeAnim); } SetMainCallback2(CB2_ReturnToField); BufferInGameTradeMonName(); @@ -4346,7 +4410,7 @@ static bool8 AnimateTradeSequenceWireless(void) } // Try to evolve a Pokémon received in a link trade -// In-game trades resolve evolution during the trade sequence, in TS_STATE_TRY_EVOLUTION +// In-game trades resolve evolution during the trade sequence, in STATE_TRY_EVOLUTION static void CB2_TryLinkTradeEvolution(void) { u16 evoTarget; @@ -4360,7 +4424,7 @@ static void CB2_TryLinkTradeEvolution(void) gCB2_AfterEvolution = CB2_SaveAndEndTrade; 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]); + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeAnim->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); else if (IsWirelessTrade()) SetMainCallback2(CB2_SaveAndEndWirelessTrade); else @@ -4375,25 +4439,25 @@ static void CB2_TryLinkTradeEvolution(void) UpdatePaletteFade(); } -static void UpdateTradeFinishFlags(void) +static void HandleLinkDataReceive(void) { - u8 blockReceivedStatus; + u8 recvStatus; TradeGetMultiplayerId(); // no effect call, ret val ignored - blockReceivedStatus = GetBlockReceivedStatus(); - if (blockReceivedStatus & 0x01) + recvStatus = GetBlockReceivedStatus(); + if (recvStatus & (1 << 0)) { if (gBlockRecvBuffer[0][0] == LINKCMD_CONFIRM_FINISH_TRADE) SetMainCallback2(CB2_TryLinkTradeEvolution); if (gBlockRecvBuffer[0][0] == LINKCMD_READY_FINISH_TRADE) - sTradeData->playerLinkFlagFinishTrade = READY_FINISH_TRADE; + sTradeAnim->playerFinishStatus = STATUS_READY; ResetBlockReceivedFlag(0); } - if (blockReceivedStatus & 0x02) + if (recvStatus & (1 << 1)) { if (gBlockRecvBuffer[1][0] == LINKCMD_READY_FINISH_TRADE) - sTradeData->partnerLinkFlagFinishTrade = READY_FINISH_TRADE; + sTradeAnim->partnerFinishStatus = STATUS_READY; ResetBlockReceivedFlag(1); } @@ -4444,7 +4508,7 @@ static void SpriteCB_BouncingPokeballDepartEnd(struct Sprite *sprite) if (++ sprite->data[0] == 23) { DestroySprite(sprite); - sTradeData->state = TS_STATE_FADE_OUT_TO_GBA_SEND; // Resume the master trade animation + sTradeAnim->state = STATE_FADE_OUT_TO_GBA_SEND; // Resume the master trade animation } } } @@ -4491,14 +4555,14 @@ static void BufferInGameTradeMonName(void) StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); } -static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) +static void CreateInGameTradePokemonInternal(u8 whichPlayerMon, u8 whichInGameTrade) { const struct InGameTrade *inGameTrade = &sIngameTrades[whichInGameTrade]; u8 level = GetMonData(&gPlayerParty[whichPlayerMon], MON_DATA_LEVEL); struct Mail mail; u8 metLocation = METLOC_IN_GAME_TRADE; - u8 isMail; + u8 mailNum; struct Pokemon *pokemon = &gEnemyParty[0]; CreateMon(pokemon, inGameTrade->species, level, USE_RANDOM_IVS, TRUE, inGameTrade->personality, OT_ID_PRESET, inGameTrade->otId); @@ -4521,14 +4585,14 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) SetMonData(pokemon, MON_DATA_SHEEN, &inGameTrade->sheen); SetMonData(pokemon, MON_DATA_MET_LOCATION, &metLocation); - isMail = FALSE; + mailNum = 0; if (inGameTrade->heldItem != ITEM_NONE) { if (ItemIsMail(inGameTrade->heldItem)) { - SetInGameTradeMail(&mail, inGameTrade); + GetInGameTradeMail(&mail, inGameTrade); gTradeMail[0] = mail; - SetMonData(pokemon, MON_DATA_MAIL, &isMail); + SetMonData(pokemon, MON_DATA_MAIL, &mailNum); SetMonData(pokemon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); } else @@ -4539,14 +4603,12 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) CalculateMonStats(&gEnemyParty[0]); } -static void SetInGameTradeMail(struct Mail *mail, const struct InGameTrade *trade) +static void GetInGameTradeMail(struct Mail *mail, const struct InGameTrade *trade) { s32 i; for (i = 0; i < MAIL_WORDS_COUNT; i++) - { mail->words[i] = sIngameTradeMail[trade->mailNum][i]; - } StringCopy(mail->playerName, trade->otName); PadNameString(mail->playerName, CHAR_SPACE); @@ -4568,25 +4630,25 @@ u16 GetTradeSpecies(void) void CreateInGameTradePokemon(void) { - _CreateInGameTradePokemon(gSpecialVar_0x8005, gSpecialVar_0x8004); + CreateInGameTradePokemonInternal(gSpecialVar_0x8005, gSpecialVar_0x8004); } static void CB2_UpdateLinkTrade(void) { - if (AnimateTradeSequence() == TRUE) + if (DoTradeAnim() == TRUE) { - DestroySprite(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]]); - FreeSpriteOamMatrix(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]]); + DestroySprite(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]]); + FreeSpriteOamMatrix(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]]); TradeMons(gSelectedTradeMonPositions[TRADE_PLAYER], gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE); if (!IsWirelessTrade()) { - sTradeData->linkData[0] = LINKCMD_READY_FINISH_TRADE; - sTradeData->sendTradeFinishState = 1; + sTradeAnim->linkData[0] = LINKCMD_READY_FINISH_TRADE; + sTradeAnim->scheduleLinkTransfer = 1; } - SetMainCallback2(CB2_TryFinishTrade); + SetMainCallback2(CB2_WaitTradeComplete); } - TrySendTradeFinishData(); - UpdateTradeFinishFlags(); + HandleLinkDataSend(); + HandleLinkDataReceive(); RunTasks(); RunTextPrinters(); AnimateSprites(); @@ -4594,7 +4656,7 @@ static void CB2_UpdateLinkTrade(void) UpdatePaletteFade(); } -static void CB2_TryFinishTrade(void) +static void CB2_WaitTradeComplete(void) { u8 mpId = TradeGetMultiplayerId(); if (IsWirelessTrade()) @@ -4603,15 +4665,15 @@ static void CB2_TryFinishTrade(void) } else { - UpdateTradeFinishFlags(); + HandleLinkDataReceive(); if (mpId == 0 - && sTradeData->playerLinkFlagFinishTrade == READY_FINISH_TRADE - && sTradeData->partnerLinkFlagFinishTrade == READY_FINISH_TRADE) + && sTradeAnim->playerFinishStatus == STATUS_READY + && sTradeAnim->partnerFinishStatus == STATUS_READY) { - sTradeData->linkData[0] = LINKCMD_CONFIRM_FINISH_TRADE; - SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, sizeof(sTradeData->linkData)); - sTradeData->playerLinkFlagFinishTrade = FINISH_TRADE; - sTradeData->partnerLinkFlagFinishTrade = FINISH_TRADE; + sTradeAnim->linkData[0] = LINKCMD_CONFIRM_FINISH_TRADE; + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeAnim->linkData, sizeof(sTradeAnim->linkData)); + sTradeAnim->playerFinishStatus = STATUS_CANCEL; + sTradeAnim->partnerFinishStatus = STATUS_CANCEL; } } RunTasks(); @@ -4632,24 +4694,20 @@ static void CB2_SaveAndEndTrade(void) case 1: SetTradeLinkStandbyCallback(0); gMain.state = 100; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 100: - if (++sTradeData->timer > 180) + if (++sTradeAnim->timer > 180) { gMain.state = 101; - sTradeData->timer = 0; + sTradeAnim->timer = 0; } if (_IsLinkTaskFinished()) - { gMain.state = 2; - } break; case 101: if (_IsLinkTaskFinished()) - { gMain.state = 2; - } break; case 2: gMain.state = 50; @@ -4665,10 +4723,10 @@ static void CB2_SaveAndEndTrade(void) SetContinueGameWarpStatusToDynamicWarp(); LinkFullSave_Init(); gMain.state++; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 51: - if (++sTradeData->timer == 5) + if (++sTradeAnim->timer == 5) gMain.state++; break; case 52: @@ -4680,38 +4738,34 @@ static void CB2_SaveAndEndTrade(void) else { // Save isn't finished, delay again - sTradeData->timer = 0; + sTradeAnim->timer = 0; gMain.state = 51; } break; case 4: LinkFullSave_ReplaceLastSector(); gMain.state = 40; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 40: - if (++sTradeData->timer > 50) + if (++sTradeAnim->timer > 50) { if (GetMultiplayerId() == 0) - { - sTradeData->timer = Random() % 30; - } + sTradeAnim->timer = Random() % 30; else - { - sTradeData->timer = 0; - } + sTradeAnim->timer = 0; gMain.state = 41; } break; case 41: - if (sTradeData->timer == 0) + if (sTradeAnim->timer == 0) { SetTradeLinkStandbyCallback(1); gMain.state = 42; } else { - sTradeData->timer--; + sTradeAnim->timer--; } break; case 42: @@ -4722,7 +4776,7 @@ static void CB2_SaveAndEndTrade(void) } break; case 5: - if (++sTradeData->timer > 60) + if (++sTradeAnim->timer > 60) { gMain.state++; SetTradeLinkStandbyCallback(2); @@ -4746,13 +4800,9 @@ static void CB2_SaveAndEndTrade(void) if (IsBGMStopped() == TRUE) { if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu) - { SetTradeLinkStandbyCallback(3); - } else - { SetCloseLinkCallback(); - } gMain.state++; } break; @@ -4762,13 +4812,13 @@ static void CB2_SaveAndEndTrade(void) if (_IsLinkTaskFinished()) { gSoftResetDisabled = FALSE; - SetMainCallback2(CB2_FreeTradeData); + SetMainCallback2(CB2_FreeTradeAnim); } } else if (!gReceivedRemoteLinkPlayers) { gSoftResetDisabled = FALSE; - SetMainCallback2(CB2_FreeTradeData); + SetMainCallback2(CB2_FreeTradeAnim); } break; } @@ -4781,7 +4831,7 @@ static void CB2_SaveAndEndTrade(void) UpdatePaletteFade(); } -static void CB2_FreeTradeData(void) +static void CB2_FreeTradeAnim(void) { if (!gPaletteFade.active) { @@ -4790,7 +4840,7 @@ static void CB2_FreeTradeData(void) Free(GetBgTilemapBuffer(1)); Free(GetBgTilemapBuffer(0)); FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); + FREE_AND_SET_NULL(sTradeAnim); if (gWirelessCommType) DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(gMain.savedCallback); @@ -4812,7 +4862,7 @@ static void Task_InGameTrade(u8 taskId) { if (!gPaletteFade.active) { - SetMainCallback2(CB2_InGameTrade); + SetMainCallback2(CB2_InitInGameTrade); gFieldCallback = FieldCB_ContinueScriptHandleMusic; DestroyTask(taskId); } @@ -4822,85 +4872,80 @@ static void CheckPartnersMonForRibbons(void) { u8 i; u8 numRibbons = 0; - for (i = 0; i < (MON_DATA_UNUSED_RIBBONS - MON_DATA_CHAMPION_RIBBON); 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); - } + if (numRibbons != 0) FlagSet(FLAG_SYS_RIBBON_GET); } void LoadTradeAnimGfx(void) { - InitTradeBgInternal(); + TradeAnimInit_LoadGfx(); } void DrawTextOnTradeWindow(u8 windowId, const u8 *str, u8 speed) { FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); - sTradeData->textColors[0] = TEXT_DYNAMIC_COLOR_6; - sTradeData->textColors[1] = TEXT_COLOR_WHITE; - sTradeData->textColors[2] = TEXT_COLOR_GREEN; - AddTextPrinterParameterized4(windowId, FONT_NORMAL, 0, 2, 0, 0, sTradeData->textColors, speed, str); + sTradeAnim->textColors[0] = TEXT_DYNAMIC_COLOR_6; + sTradeAnim->textColors[1] = TEXT_COLOR_WHITE; + sTradeAnim->textColors[2] = TEXT_COLOR_GREEN; + AddTextPrinterParameterized4(windowId, FONT_NORMAL, 0, 2, 0, 0, sTradeAnim->textColors, speed, str); CopyWindowToVram(windowId, COPYWIN_FULL); } -#define idx data[0] -#define counter data[1] -#define signalComingBack data[2] - static void Task_AnimateWirelessSignal(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 paletteIdx = sWirelessSignalTiming[idx][0] * 16; + u16 paletteIdx = sWirelessSignalAnimParams[tIdx][0] * 16; - if (!signalComingBack) + if (!tSignalComingBack) { if (paletteIdx == 256) - LoadPalette(sWirelessSignalNone_Pal, 0x30, 32); + LoadPalette(sWirelessSignalNone_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); else - LoadPalette(&sWirelessSignalSend_Pal[paletteIdx], 0x30, 32); + LoadPalette(&sWirelessSignalSend_Pal[paletteIdx], BG_PLTT_ID(3), PLTT_SIZE_4BPP); } else { if (paletteIdx == 256) - LoadPalette(sWirelessSignalNone_Pal, 0x30, 32); + LoadPalette(sWirelessSignalNone_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); else - LoadPalette(&sWirelessSignalRecv_Pal[paletteIdx], 0x30, 32); + LoadPalette(&sWirelessSignalRecv_Pal[paletteIdx], BG_PLTT_ID(3), PLTT_SIZE_4BPP); } - if (sWirelessSignalTiming[idx][0] == 0 && counter == 0) + if (sWirelessSignalAnimParams[tIdx][0] == 0 && tCounter == 0) PlaySE(SE_M_HEAL_BELL); - if (counter == sWirelessSignalTiming[idx][1]) + if (tCounter == sWirelessSignalAnimParams[tIdx][1]) { - idx++; - counter = 0; - if (sWirelessSignalTiming[idx][1] == 0xFF) + tIdx++; + tCounter = 0; + if (sWirelessSignalAnimParams[tIdx][1] == 0xFF) { DestroyTask(taskId); } } else { - counter++; + tCounter++; } } -#undef idx -#undef counter -#undef signalComingBack +#undef tIdx +#undef tCounter +#undef tSignalComingBack -static void Task_NarrowWindowForCrossing_Wireless(u8 taskId) +static void Task_OpenCenterWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; if (data[0] == 0) { - sTradeData->wirelessWinLeft = sTradeData->wirelessWinRight = DISPLAY_WIDTH / 2; - sTradeData->wirelessWinTop = 0; - sTradeData->wirelessWinBottom = DISPLAY_HEIGHT; + sTradeAnim->wirelessWinLeft = sTradeAnim->wirelessWinRight = DISPLAY_WIDTH / 2; + sTradeAnim->wirelessWinTop = 0; + sTradeAnim->wirelessWinBottom = DISPLAY_HEIGHT; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | @@ -4908,41 +4953,41 @@ static void Task_NarrowWindowForCrossing_Wireless(u8 taskId) WININ_WIN0_OBJ); } - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->wirelessWinLeft, sTradeData->wirelessWinRight)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->wirelessWinTop, sTradeData->wirelessWinBottom)); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeAnim->wirelessWinLeft, sTradeAnim->wirelessWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeAnim->wirelessWinTop, sTradeAnim->wirelessWinBottom)); data[0]++; - sTradeData->wirelessWinLeft -= 5; - sTradeData->wirelessWinRight += 5; + sTradeAnim->wirelessWinLeft -= 5; + sTradeAnim->wirelessWinRight += 5; - if (sTradeData->wirelessWinLeft < 80) + if (sTradeAnim->wirelessWinLeft < 80) DestroyTask(taskId); } -static void Task_NarrowWindowForCrossing_Cable(u8 taskId) +static void Task_CloseCenterWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; if (data[0] == 0) { - sTradeData->wirelessWinLeft = 80; - sTradeData->wirelessWinRight = DISPLAY_WIDTH - 80; + sTradeAnim->wirelessWinLeft = 80; + sTradeAnim->wirelessWinRight = DISPLAY_WIDTH - 80; SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_OBJ); } - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->wirelessWinLeft, sTradeData->wirelessWinRight)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->wirelessWinTop, sTradeData->wirelessWinBottom)); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeAnim->wirelessWinLeft, sTradeAnim->wirelessWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeAnim->wirelessWinTop, sTradeAnim->wirelessWinBottom)); - if (sTradeData->wirelessWinLeft != DISPLAY_WIDTH / 2) + if (sTradeAnim->wirelessWinLeft != DISPLAY_WIDTH / 2) { data[0]++; - sTradeData->wirelessWinLeft += 5; - sTradeData->wirelessWinRight -= 5; + sTradeAnim->wirelessWinLeft += 5; + sTradeAnim->wirelessWinRight -= 5; - if (sTradeData->wirelessWinLeft > DISPLAY_WIDTH / 2 - 5) + if (sTradeAnim->wirelessWinLeft > DISPLAY_WIDTH / 2 - 5) BlendPalettes(0x8, 0, RGB_WHITEALPHA); } else @@ -4964,7 +5009,7 @@ static void CB2_SaveAndEndWirelessTrade(void) case 1: SetTradeLinkStandbyCallback(0); gMain.state = 2; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 2: if (_IsLinkTaskFinished()) @@ -4974,11 +5019,11 @@ static void CB2_SaveAndEndWirelessTrade(void) DrawTextOnTradeWindow(0, gStringVar4, 0); IncrementGameStat(GAME_STAT_POKEMON_TRADES); LinkFullSave_Init(); - sTradeData->timer = 0; + sTradeAnim->timer = 0; } break; case 3: - if (++sTradeData->timer == 5) + if (++sTradeAnim->timer == 5) gMain.state = 4; break; case 4: @@ -4988,34 +5033,34 @@ static void CB2_SaveAndEndWirelessTrade(void) } else { - sTradeData->timer = 0; + sTradeAnim->timer = 0; gMain.state = 3; } break; case 5: LinkFullSave_ReplaceLastSector(); gMain.state = 6; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 6: - if (++sTradeData->timer > 10) + if (++sTradeAnim->timer > 10) { if (GetMultiplayerId() == 0) - sTradeData->timer = Random() % 30; + sTradeAnim->timer = Random() % 30; else - sTradeData->timer = 0; + sTradeAnim->timer = 0; gMain.state = 7; } break; case 7: - if (sTradeData->timer == 0) + if (sTradeAnim->timer == 0) { SetTradeLinkStandbyCallback(1); gMain.state = 8; } else { - sTradeData->timer--; + sTradeAnim->timer--; } break; case 8: @@ -5026,7 +5071,7 @@ static void CB2_SaveAndEndWirelessTrade(void) } break; case 9: - if (++sTradeData->timer > 60) + if (++sTradeAnim->timer > 60) { gMain.state++; SetTradeLinkStandbyCallback(2); @@ -5051,7 +5096,7 @@ static void CB2_SaveAndEndWirelessTrade(void) if (_IsLinkTaskFinished()) { gSoftResetDisabled = FALSE; - SetMainCallback2(CB2_FreeTradeData); + SetMainCallback2(CB2_FreeTradeAnim); } break; } diff --git a/src/trainer_card.c b/src/trainer_card.c index 04b8f686abcc..1535c3d997b8 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -33,6 +33,12 @@ #include "constants/trainers.h" #include "constants/union_room.h" +enum { + WIN_MSG, + WIN_CARD_TEXT, + WIN_TRAINER_PIC, +}; + struct TrainerCardData { u8 mainState; @@ -162,27 +168,27 @@ static bool8 Task_EndCardFlip(struct Task *task); static void UpdateCardFlipRegs(u16); static void LoadMonIconGfx(void); -static const u32 sTrainerCardStickers_Gfx[] = INCBIN_U32("graphics/trainer_card/stickers_fr.4bpp.lz"); +static const u32 sTrainerCardStickers_Gfx[] = INCBIN_U32("graphics/trainer_card/frlg/stickers.4bpp.lz"); static const u16 sUnused_Pal[] = INCBIN_U16("graphics/trainer_card/unused.gbapal"); -static const u16 sHoennTrainerCard1Star_Pal[] = INCBIN_U16("graphics/trainer_card/one_star.gbapal"); -static const u16 sKantoTrainerCard1Star_Pal[] = INCBIN_U16("graphics/trainer_card/one_star_fr.gbapal"); -static const u16 sHoennTrainerCard2Star_Pal[] = INCBIN_U16("graphics/trainer_card/two_stars.gbapal"); -static const u16 sKantoTrainerCard2Star_Pal[] = INCBIN_U16("graphics/trainer_card/two_stars_fr.gbapal"); -static const u16 sHoennTrainerCard3Star_Pal[] = INCBIN_U16("graphics/trainer_card/three_stars.gbapal"); -static const u16 sKantoTrainerCard3Star_Pal[] = INCBIN_U16("graphics/trainer_card/three_stars_fr.gbapal"); -static const u16 sHoennTrainerCard4Star_Pal[] = INCBIN_U16("graphics/trainer_card/four_stars.gbapal"); -static const u16 sKantoTrainerCard4Star_Pal[] = INCBIN_U16("graphics/trainer_card/four_stars_fr.gbapal"); +static const u16 sHoennTrainerCardBronze_Pal[] = INCBIN_U16("graphics/trainer_card/bronze.gbapal"); +static const u16 sKantoTrainerCardGreen_Pal[] = INCBIN_U16("graphics/trainer_card/frlg/green.gbapal"); +static const u16 sHoennTrainerCardCopper_Pal[] = INCBIN_U16("graphics/trainer_card/copper.gbapal"); +static const u16 sKantoTrainerCardBronze_Pal[] = INCBIN_U16("graphics/trainer_card/frlg/bronze.gbapal"); +static const u16 sHoennTrainerCardSilver_Pal[] = INCBIN_U16("graphics/trainer_card/silver.gbapal"); +static const u16 sKantoTrainerCardSilver_Pal[] = INCBIN_U16("graphics/trainer_card/frlg/silver.gbapal"); +static const u16 sHoennTrainerCardGold_Pal[] = INCBIN_U16("graphics/trainer_card/gold.gbapal"); +static const u16 sKantoTrainerCardGold_Pal[] = INCBIN_U16("graphics/trainer_card/frlg/gold.gbapal"); static const u16 sHoennTrainerCardFemaleBg_Pal[] = INCBIN_U16("graphics/trainer_card/female_bg.gbapal"); -static const u16 sKantoTrainerCardFemaleBg_Pal[] = INCBIN_U16("graphics/trainer_card/female_bg_fr.gbapal"); +static const u16 sKantoTrainerCardFemaleBg_Pal[] = INCBIN_U16("graphics/trainer_card/frlg/female_bg.gbapal"); static const u16 sHoennTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/badges.gbapal"); -static const u16 sKantoTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/badges_fr.gbapal"); -static const u16 sTrainerCardGold_Pal[] = INCBIN_U16("graphics/trainer_card/gold.gbapal"); -static const u16 sTrainerCardSticker1_Pal[] = INCBIN_U16("graphics/trainer_card/stickers_fr1.gbapal"); -static const u16 sTrainerCardSticker2_Pal[] = INCBIN_U16("graphics/trainer_card/stickers_fr2.gbapal"); -static const u16 sTrainerCardSticker3_Pal[] = INCBIN_U16("graphics/trainer_card/stickers_fr3.gbapal"); -static const u16 sTrainerCardSticker4_Pal[] = INCBIN_U16("graphics/trainer_card/stickers_fr4.gbapal"); +static const u16 sKantoTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/frlg/badges.gbapal"); +static const u16 sTrainerCardStar_Pal[] = INCBIN_U16("graphics/trainer_card/star.gbapal"); +static const u16 sTrainerCardSticker1_Pal[] = INCBIN_U16("graphics/trainer_card/frlg/stickers1.gbapal"); +static const u16 sTrainerCardSticker2_Pal[] = INCBIN_U16("graphics/trainer_card/frlg/stickers2.gbapal"); +static const u16 sTrainerCardSticker3_Pal[] = INCBIN_U16("graphics/trainer_card/frlg/stickers3.gbapal"); +static const u16 sTrainerCardSticker4_Pal[] = INCBIN_U16("graphics/trainer_card/frlg/stickers4.gbapal"); static const u32 sHoennTrainerCardBadges_Gfx[] = INCBIN_U32("graphics/trainer_card/badges.4bpp.lz"); -static const u32 sKantoTrainerCardBadges_Gfx[] = INCBIN_U32("graphics/trainer_card/badges_fr.4bpp.lz"); +static const u32 sKantoTrainerCardBadges_Gfx[] = INCBIN_U32("graphics/trainer_card/frlg/badges.4bpp.lz"); static const struct BgTemplate sTrainerCardBgTemplates[4] = { @@ -226,7 +232,7 @@ static const struct BgTemplate sTrainerCardBgTemplates[4] = static const struct WindowTemplate sTrainerCardWindowTemplates[] = { - { + [WIN_MSG] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 15, @@ -235,7 +241,7 @@ static const struct WindowTemplate sTrainerCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 0x253, }, - { + [WIN_CARD_TEXT] = { .bg = 1, .tilemapLeft = 1, .tilemapTop = 1, @@ -244,7 +250,7 @@ static const struct WindowTemplate sTrainerCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 0x1, }, - { + [WIN_TRAINER_PIC] = { .bg = 3, .tilemapLeft = 19, .tilemapTop = 5, @@ -256,22 +262,22 @@ static const struct WindowTemplate sTrainerCardWindowTemplates[] = DUMMY_WIN_TEMPLATE }; -static const u16 *const sHoennTrainerCardStarPals[] = +static const u16 *const sHoennTrainerCardPals[] = { - gHoennTrainerCard0Star_Pal, - sHoennTrainerCard1Star_Pal, - sHoennTrainerCard2Star_Pal, - sHoennTrainerCard3Star_Pal, - sHoennTrainerCard4Star_Pal, + gHoennTrainerCardGreen_Pal, // Default (0 stars) + sHoennTrainerCardBronze_Pal, // 1 star + sHoennTrainerCardCopper_Pal, // 2 stars + sHoennTrainerCardSilver_Pal, // 3 stars + sHoennTrainerCardGold_Pal, // 4 stars }; -static const u16 *const sKantoTrainerCardStarPals[] = +static const u16 *const sKantoTrainerCardPals[] = { - gKantoTrainerCard0Star_Pal, - sKantoTrainerCard1Star_Pal, - sKantoTrainerCard2Star_Pal, - sKantoTrainerCard3Star_Pal, - sKantoTrainerCard4Star_Pal, + gKantoTrainerCardBlue_Pal, // Default (0 stars) + sKantoTrainerCardGreen_Pal, // 1 star + sKantoTrainerCardBronze_Pal, // 2 stars + sKantoTrainerCardSilver_Pal, // 3 stars + sKantoTrainerCardGold_Pal, // 4 stars }; static const u8 sTrainerCardTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}; @@ -376,7 +382,7 @@ static void Task_TrainerCard(u8 taskId) case 0: if (!IsDma3ManagerBusyWithBgCopy()) { - FillWindowPixelBuffer(1, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_CARD_TEXT, PIXEL_FILL(0)); sData->mainState++; } break; @@ -385,13 +391,13 @@ static void Task_TrainerCard(u8 taskId) sData->mainState++; break; case 2: - DrawTrainerCardWindow(1); + DrawTrainerCardWindow(WIN_CARD_TEXT); sData->mainState++; break; case 3: - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_TRAINER_PIC, PIXEL_FILL(0)); CreateTrainerCardTrainerPic(); - DrawTrainerCardWindow(2); + DrawTrainerCardWindow(WIN_TRAINER_PIC); sData->mainState++; break; case 4: @@ -411,7 +417,7 @@ static void Task_TrainerCard(u8 taskId) if (gWirelessCommType == 1 && gReceivedRemoteLinkPlayers == TRUE) { LoadWirelessStatusIndicatorSpriteGfx(); - CreateWirelessStatusIndicatorSprite(230, 150); + CreateWirelessStatusIndicatorSprite(DISPLAY_WIDTH - 10, DISPLAY_HEIGHT - 10); } BlendPalettes(PALETTES_ALL, 16, sData->blendColor); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, sData->blendColor); @@ -434,7 +440,7 @@ static void Task_TrainerCard(u8 taskId) if (!gReceivedRemoteLinkPlayers && sData->timeColonNeedDraw) { PrintTimeOnCard(); - DrawTrainerCardWindow(1); + DrawTrainerCardWindow(WIN_CARD_TEXT); sData->timeColonNeedDraw = FALSE; } if (JOY_NEW(A_BUTTON)) @@ -497,9 +503,9 @@ static void Task_TrainerCard(u8 taskId) break; case STATE_WAIT_LINK_PARTNER: SetCloseLinkCallback(); - DrawDialogueFrame(0, TRUE); - AddTextPrinterParameterized(0, FONT_NORMAL, gText_WaitingTrainerFinishReading, 0, 1, 255, 0); - CopyWindowToVram(0, COPYWIN_FULL); + DrawDialogueFrame(WIN_MSG, TRUE); + AddTextPrinterParameterized(WIN_MSG, FONT_NORMAL, gText_WaitingTrainerFinishReading, 0, 1, 255, 0); + CopyWindowToVram(WIN_MSG, COPYWIN_FULL); sData->mainState = STATE_CLOSE_CARD_LINK; break; case STATE_CLOSE_CARD_LINK: @@ -1002,9 +1008,9 @@ static void PrintNameOnCardFront(void) StringCopy(txtPtr, sData->trainerCard.playerName); ConvertInternationalString(txtPtr, sData->language); if (sData->cardType == CARD_TYPE_FRLG) - AddTextPrinterParameterized3(1, FONT_NORMAL, 20, 28, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 20, 28, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); else - AddTextPrinterParameterized3(1, FONT_NORMAL, 16, 33, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 16, 33, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); } static void PrintIdOnCard(void) @@ -1026,7 +1032,7 @@ static void PrintIdOnCard(void) top = 9; } - AddTextPrinterParameterized3(1, FONT_NORMAL, xPos, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, xPos, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); } static void PrintMoneyOnCard(void) @@ -1035,9 +1041,9 @@ static void PrintMoneyOnCard(void) u8 top; if (!sData->isHoenn) - AddTextPrinterParameterized3(1, FONT_NORMAL, 20, 56, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardMoney); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 20, 56, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardMoney); else - AddTextPrinterParameterized3(1, FONT_NORMAL, 16, 57, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardMoney); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 16, 57, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardMoney); ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); @@ -1051,7 +1057,7 @@ static void PrintMoneyOnCard(void) xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 128); top = 57; } - AddTextPrinterParameterized3(1, FONT_NORMAL, xOffset, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, xOffset, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); } static u16 GetCaughtMonsCount(void) @@ -1069,9 +1075,9 @@ static void PrintPokedexOnCard(void) if (FlagGet(FLAG_SYS_POKEDEX_GET)) { if (!sData->isHoenn) - AddTextPrinterParameterized3(1, FONT_NORMAL, 20, 72, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardPokedex); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 20, 72, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardPokedex); else - AddTextPrinterParameterized3(1, FONT_NORMAL, 16, 73, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardPokedex); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 16, 73, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardPokedex); StringCopy(ConvertIntToDecimalStringN(gStringVar4, sData->trainerCard.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3), gText_EmptyString6); if (!sData->isHoenn) { @@ -1083,7 +1089,7 @@ static void PrintPokedexOnCard(void) xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 128); top = 73; } - AddTextPrinterParameterized3(1, FONT_NORMAL, xOffset, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, xOffset, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); } } @@ -1097,9 +1103,9 @@ static void PrintTimeOnCard(void) u32 x, y, totalWidth; if (!sData->isHoenn) - AddTextPrinterParameterized3(1, FONT_NORMAL, 20, 88, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardTime); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 20, 88, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardTime); else - AddTextPrinterParameterized3(1, FONT_NORMAL, 16, 89, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardTime); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 16, 89, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardTime); if (sData->isLink) { @@ -1131,14 +1137,14 @@ static void PrintTimeOnCard(void) totalWidth = width + 30; x -= totalWidth; - FillWindowPixelRect(1, PIXEL_FILL(0), x, y, totalWidth, 15); + FillWindowPixelRect(WIN_CARD_TEXT, PIXEL_FILL(0), x, y, totalWidth, 15); ConvertIntToDecimalStringN(gStringVar4, hours, STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, x, y, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); x += 18; - AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, sTimeColonTextColors[sData->timeColonInvisible], TEXT_SKIP_DRAW, gText_Colon2); + AddTextPrinterParameterized3(WIN_CARD_TEXT, 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, FONT_NORMAL, x, y, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, x, y, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); } static void PrintProfilePhraseOnCard(void) @@ -1148,10 +1154,10 @@ static void PrintProfilePhraseOnCard(void) if (sData->isLink) { - 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]); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 8, yOffsetsLine1[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[0]); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, GetStringWidth(FONT_NORMAL, sData->easyChatProfile[0], 0) + 14, yOffsetsLine1[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[1]); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 8, yOffsetsLine2[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[2]); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, GetStringWidth(FONT_NORMAL, sData->easyChatProfile[2], 0) + 14, yOffsetsLine2[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[3]); } } @@ -1169,9 +1175,9 @@ static void BufferNameForCardBack(void) static void PrintNameOnCardBack(void) { if (!sData->isHoenn) - AddTextPrinterParameterized3(1, FONT_NORMAL, 136, 9, sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->textPlayersCard); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 136, 9, sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->textPlayersCard); else - AddTextPrinterParameterized3(1, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, sData->textPlayersCard, 216), 9, sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->textPlayersCard); + AddTextPrinterParameterized3(WIN_CARD_TEXT, 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}"); @@ -1192,8 +1198,8 @@ static void PrintStatOnBackOfCard(u8 top, const u8 *statName, u8 *stat, const u8 static const u8 xOffsets[] = {8, 16}; static const u8 widths[] = {216, 216}; - 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); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, xOffsets[sData->isHoenn], top * 16 + 33, sTrainerCardTextColors, TEXT_SKIP_DRAW, statName); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, stat, widths[sData->isHoenn]), top * 16 + 33, color, TEXT_SKIP_DRAW, stat); } static void PrintHofDebutTimeOnCard(void) @@ -1372,7 +1378,7 @@ static void LoadMonIconGfx(void) TintPalette_SepiaTone(sData->monIconPal, 96); break; } - LoadPalette(sData->monIconPal, 80, 192); + LoadPalette(sData->monIconPal, BG_PLTT_ID(5), 6 * PLTT_SIZE_4BPP); for (i = 0; i < PARTY_SIZE; i++) { @@ -1399,10 +1405,10 @@ static void PrintStickersOnCard(void) static void LoadStickerGfx(void) { - LoadPalette(sTrainerCardSticker1_Pal, 176, 32); - LoadPalette(sTrainerCardSticker2_Pal, 192, 32); - LoadPalette(sTrainerCardSticker3_Pal, 208, 32); - LoadPalette(sTrainerCardSticker4_Pal, 224, 32); + LoadPalette(sTrainerCardSticker1_Pal, BG_PLTT_ID(11), PLTT_SIZE_4BPP); + LoadPalette(sTrainerCardSticker2_Pal, BG_PLTT_ID(12), PLTT_SIZE_4BPP); + LoadPalette(sTrainerCardSticker3_Pal, BG_PLTT_ID(13), PLTT_SIZE_4BPP); + LoadPalette(sTrainerCardSticker4_Pal, BG_PLTT_ID(14), PLTT_SIZE_4BPP); LoadBgTiles(3, sData->stickerTiles, 1024, 128); } @@ -1425,19 +1431,19 @@ static u8 SetCardBgsAndPals(void) case 2: if (sData->cardType != CARD_TYPE_FRLG) { - LoadPalette(sHoennTrainerCardStarPals[sData->trainerCard.stars], 0, 96); - LoadPalette(sHoennTrainerCardBadges_Pal, 48, 32); + LoadPalette(sHoennTrainerCardPals[sData->trainerCard.stars], BG_PLTT_ID(0), 3 * PLTT_SIZE_4BPP); + LoadPalette(sHoennTrainerCardBadges_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); if (sData->trainerCard.gender != MALE) - LoadPalette(sHoennTrainerCardFemaleBg_Pal, 16, 32); + LoadPalette(sHoennTrainerCardFemaleBg_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); } else { - LoadPalette(sKantoTrainerCardStarPals[sData->trainerCard.stars], 0, 96); - LoadPalette(sKantoTrainerCardBadges_Pal, 48, 32); + LoadPalette(sKantoTrainerCardPals[sData->trainerCard.stars], BG_PLTT_ID(0), 3 * PLTT_SIZE_4BPP); + LoadPalette(sKantoTrainerCardBadges_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); if (sData->trainerCard.gender != MALE) - LoadPalette(sKantoTrainerCardFemaleBg_Pal, 16, 32); + LoadPalette(sKantoTrainerCardFemaleBg_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); } - LoadPalette(sTrainerCardGold_Pal, 64, 32); + LoadPalette(sTrainerCardStar_Pal, BG_PLTT_ID(4), PLTT_SIZE_4BPP); break; case 3: SetBgTilemapBuffer(0, sData->cardTilemapBuffer); @@ -1672,7 +1678,7 @@ static bool8 Task_DrawFlippedCardSide(struct Task *task) switch (sData->flipDrawState) { case 0: - FillWindowPixelBuffer(1, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_CARD_TEXT, PIXEL_FILL(0)); FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20); break; case 1: @@ -1691,13 +1697,13 @@ static bool8 Task_DrawFlippedCardSide(struct Task *task) if (!sData->onBack) DrawCardFrontOrBack(sData->backTilemap); else - DrawTrainerCardWindow(1); + DrawTrainerCardWindow(WIN_CARD_TEXT); break; case 3: if (!sData->onBack) DrawCardBackStats(); else - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_TRAINER_PIC, PIXEL_FILL(0)); break; case 4: if (sData->onBack) @@ -1722,12 +1728,12 @@ static bool8 Task_SetCardFlipped(struct Task *task) // If on back of card, draw front of card because its being flipped if (sData->onBack) { - DrawTrainerCardWindow(2); + DrawTrainerCardWindow(WIN_TRAINER_PIC); DrawCardScreenBackground(sData->bgTilemap); DrawCardFrontOrBack(sData->frontTilemap); DrawStarsAndBadgesOnCard(); } - DrawTrainerCardWindow(1); + DrawTrainerCardWindow(WIN_CARD_TEXT); sData->onBack ^= 1; task->tFlipState++; sData->allowDMACopy = TRUE; @@ -1882,7 +1888,7 @@ static void CreateTrainerCardTrainerPic(void) sTrainerPicOffset[sData->isHoenn][sData->trainerCard.gender][0], sTrainerPicOffset[sData->isHoenn][sData->trainerCard.gender][1], 8, - 2); + WIN_TRAINER_PIC); } else { @@ -1891,6 +1897,6 @@ static void CreateTrainerCardTrainerPic(void) sTrainerPicOffset[sData->isHoenn][sData->trainerCard.gender][0], sTrainerPicOffset[sData->isHoenn][sData->trainerCard.gender][1], 8, - 2); + WIN_TRAINER_PIC); } } diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 206060f1b71a..f6ee9e8182f1 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -924,7 +924,7 @@ u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId) static void SetTrainerHillMonLevel(struct Pokemon *mon, u8 level) { u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); - u32 exp = gExperienceTables[gBaseStats[species].growthRate][level]; + u32 exp = gExperienceTables[gSpeciesInfo[species].growthRate][level]; SetMonData(mon, MON_DATA_EXP, &exp); SetMonData(mon, MON_DATA_LEVEL, &level); @@ -951,7 +951,7 @@ static void SetAllTrainerFlags(void) void TryLoadTrainerHillEReaderPalette(void) { if (OnTrainerHillEReaderChallengeFloor() == TRUE) - LoadPalette(sEReader_Pal, 0x70, 0x20); + LoadPalette(sEReader_Pal, BG_PLTT_ID(7), PLTT_SIZE_4BPP); } static void GetGameSaved(void) diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index dcc664718209..7707e59cc1d7 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -83,7 +83,7 @@ static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 if (paletteTag == TAG_NONE) { sCreatingSpriteTemplate.paletteTag = TAG_NONE; - LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), OBJ_PLTT_ID(paletteSlot), PLTT_SIZE_4BPP); } else { @@ -96,7 +96,7 @@ static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 if (paletteTag == TAG_NONE) { sCreatingSpriteTemplate.paletteTag = TAG_NONE; - LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, 0x100 + paletteSlot * 0x10, 0x20); + LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, OBJ_PLTT_ID(paletteSlot), PLTT_SIZE_4BPP); } else { @@ -109,9 +109,9 @@ static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 static void LoadPicPaletteBySlot(u16 species, u32 otId, u32 personality, u8 paletteSlot, bool8 isTrainer) { if (!isTrainer) - LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), paletteSlot * 0x10, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), PLTT_ID(paletteSlot), PLTT_SIZE_4BPP); else - LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, paletteSlot * 0x10, 0x20); + LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, PLTT_ID(paletteSlot), PLTT_SIZE_4BPP); } static void AssignSpriteAnimsTable(bool8 isTrainer) diff --git a/src/trainer_see.c b/src/trainer_see.c index 41534a55d81f..8d3450628848 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -216,7 +216,7 @@ bool8 CheckForTrainersWantingBattle(void) if (gNoOfApproachingTrainers > 1) break; - if (GetMonsStateToDoubles_2() != 0) // one trainer found and cant have a double battle + if (GetMonsStateToDoubles_2() != PLAYER_HAS_TWO_USABLE_MONS) // one trainer found and cant have a double battle break; } @@ -283,7 +283,7 @@ static u8 CheckTrainer(u8 objectEventId) || scriptPtr[1] == TRAINER_BATTLE_REMATCH_DOUBLE || scriptPtr[1] == TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE) { - if (GetMonsStateToDoubles_2() != 0) + if (GetMonsStateToDoubles_2() != PLAYER_HAS_TWO_USABLE_MONS) return 0; numTrainers = 2; @@ -692,8 +692,8 @@ void TryPrepareSecondApproachingTrainer(void) #define sLocalId data[0] #define sMapNum data[1] #define sMapGroup data[2] -#define sData3 data[3] -#define sData4 data[4] +#define sYVelocity data[3] +#define sYOffset data[4] #define sFldEffId data[7] u8 FldEff_ExclamationMarkIcon(void) @@ -739,7 +739,7 @@ static void SetIconSpriteData(struct Sprite *sprite, u16 fldEffId, u8 spriteAnim sprite->sLocalId = gFieldEffectArguments[0]; sprite->sMapNum = gFieldEffectArguments[1]; sprite->sMapGroup = gFieldEffectArguments[2]; - sprite->sData3 = -5; + sprite->sYVelocity = -5; sprite->sFldEffId = fldEffId; StartSpriteAnim(sprite, spriteAnimNum); @@ -757,23 +757,23 @@ static void SpriteCB_TrainerIcons(struct Sprite *sprite) else { struct Sprite *objEventSprite = &gSprites[gObjectEvents[objEventId].spriteId]; - sprite->sData4 += sprite->sData3; + sprite->sYOffset += sprite->sYVelocity; sprite->x = objEventSprite->x; sprite->y = objEventSprite->y - 16; sprite->x2 = objEventSprite->x2; - sprite->y2 = objEventSprite->y2 + sprite->sData4; - if (sprite->sData4) - sprite->sData3++; + sprite->y2 = objEventSprite->y2 + sprite->sYOffset; + if (sprite->sYOffset) + sprite->sYVelocity++; else - sprite->sData3 = 0; + sprite->sYVelocity = 0; } } #undef sLocalId #undef sMapNum #undef sMapGroup -#undef sData3 -#undef sData4 +#undef sYVelocity +#undef sYOffset #undef sFldEffId u8 GetCurrentApproachingTrainerObjectEventId(void) diff --git a/src/union_room.c b/src/union_room.c index 5bc010a46611..3739c59527ed 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -271,7 +271,7 @@ static void GetURoomActivityRejectMsg(u8 *, s32, u32); static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct RfuPlayer *); static void GetURoomActivityStartMsg(u8 *, u8); static void UR_ClearBg0(void); -static s32 IsRequestedTypeOrEggInPlayerParty(u32, u32); +static s32 IsRequestedTradeInPlayerParty(u32, u32); static bool32 UR_PrintFieldMessage(const u8 *); static s32 GetChatLeaderActionRequestMessage(u8 *, u32, u16 *, struct WirelessLink_URoom *); static void Task_InitUnionRoom(u8 taskId); @@ -319,9 +319,9 @@ static void PrintPlayerNameAndIdOnWindow(u8 windowId) PrintUnionRoomText(windowId, FONT_NORMAL, text, 0, 17, UR_COLOR_DEFAULT); } -static void GetAwaitingCommunicationText(u8 *dst, u8 caseId) +static void GetAwaitingCommunicationText(u8 *dst, u8 activity) { - switch (caseId) + switch (activity) { case ACTIVITY_BATTLE_SINGLE: case ACTIVITY_BATTLE_DOUBLE: @@ -343,18 +343,18 @@ static void GetAwaitingCommunicationText(u8 *dst, u8 caseId) case ACTIVITY_CONTEST_TOUGH: // BUG: argument *dst isn't used, instead it always prints to gStringVar4 // not an issue in practice since Gamefreak never used any other arguments here besides gStringVar4 - #ifndef BUGFIX + #ifndef BUGFIX StringExpandPlaceholders(gStringVar4, sText_AwaitingCommunication); - #else + #else StringExpandPlaceholders(dst, sText_AwaitingCommunication); - #endif + #endif break; } } -static bool32 IsActivityWithVariableGroupSize(u32 caseId) +static bool32 IsActivityWithVariableGroupSize(u32 activity) { - switch (caseId) + switch (activity) { case ACTIVITY_POKEMON_JUMP: case ACTIVITY_BERRY_CRUSH: @@ -507,11 +507,11 @@ static void Task_TryBecomeLinkLeader(u8 taskId) // BUG: sPlayerActivityGroupSize was meant below, not gPlayerCurrActivity // This will be false for all but ACTIVITY_BATTLE_DOUBLE and ACTIVITY_DECLINE // All this changes is which of two texts gets printed - #ifdef BUGFIX + #ifdef BUGFIX id = (GROUP_MAX(sPlayerActivityGroupSize) == 2) ? 0 : 1; - #else + #else id = (GROUP_MAX(gPlayerCurrActivity) == 2) ? 1 : 0; - #endif + #endif if (PrintOnTextbox(&data->textState, sPlayerUnavailableTexts[id])) { data->playerCount = LeaderPrunePlayerList(data->playerList); @@ -559,6 +559,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) { if (data->joinRequestAnswer == RFU_STATUS_JOIN_GROUP_OK) { + // Sent "OK" data->playerList->players[data->playerCount].newPlayerCountdown = 0; RedrawListMenu(data->listTaskId); data->playerCount++; @@ -596,6 +597,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) } else if (val == 2) { + // Disconnect RfuSetStatus(RFU_STATUS_OK, 0); data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; } @@ -734,9 +736,9 @@ static void Leader_DestroyResources(struct WirelessLink_Leader *data) Free(data->incomingPlayerList); } -static void Leader_GetAcceptNewMemberPrompt(u8 *dst, u8 caseId) +static void Leader_GetAcceptNewMemberPrompt(u8 *dst, u8 activity) { - switch (caseId) + switch (activity) { case ACTIVITY_BATTLE_SINGLE: case ACTIVITY_BATTLE_DOUBLE: @@ -765,9 +767,9 @@ static void Leader_GetAcceptNewMemberPrompt(u8 *dst, u8 caseId) } } -static void GetYouDeclinedTheOfferMessage(u8 *dst, u8 caseId) +static void GetYouDeclinedTheOfferMessage(u8 *dst, u8 activity) { - switch (caseId) + switch (activity) { case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM: case ACTIVITY_TRADE | IN_UNION_ROOM: @@ -780,9 +782,9 @@ static void GetYouDeclinedTheOfferMessage(u8 *dst, u8 caseId) } } -static void GetYouAskedToJoinGroupPleaseWaitMessage(u8 *dst, u8 caseId) +static void GetYouAskedToJoinGroupPleaseWaitMessage(u8 *dst, u8 activity) { - switch (caseId) + switch (activity) { case ACTIVITY_BATTLE_SINGLE: case ACTIVITY_BATTLE_DOUBLE: @@ -809,9 +811,9 @@ static void GetYouAskedToJoinGroupPleaseWaitMessage(u8 *dst, u8 caseId) } } -static void GetGroupLeaderSentAnOKMessage(u8 *dst, u8 caseId) +static void GetGroupLeaderSentAnOKMessage(u8 *dst, u8 activity) { - switch (caseId) + switch (activity) { case ACTIVITY_BATTLE_SINGLE: case ACTIVITY_BATTLE_DOUBLE: @@ -1039,7 +1041,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) break; case 0: id = ListMenu_ProcessInput(data->listTaskId); - if (JOY_NEW(A_BUTTON) && id != MENU_B_PRESSED) + if (JOY_NEW(A_BUTTON) && id != LIST_NOTHING_CHOSEN) { // this unused variable along with the assignment is needed to match u32 activity = data->playerList->players[id].rfu.data.activity; @@ -1269,7 +1271,7 @@ static u32 IsTryingToTradeAcrossVersionTooSoon(struct WirelessLink_Group *data, { if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP)) return UR_TRADE_PLAYER_NOT_READY; - else if (partner->rfu.data.compatibility.isChampion) + else if (partner->rfu.data.compatibility.canLinkNationally) return UR_TRADE_READY; } else @@ -1469,9 +1471,7 @@ static void Task_CreateTradeMenu(u8 taskId) u8 CreateTask_CreateTradeMenu(void) { - u8 taskId = CreateTask(Task_CreateTradeMenu, 0); - - return taskId; + return CreateTask(Task_CreateTradeMenu, 0); } static void Task_StartUnionRoomTrade(u8 taskId) @@ -1927,7 +1927,7 @@ static void Task_SendMysteryGift(u8 taskId) data->state = 3; break; case 3: - AddTextPrinterToWindow1(gStringVar4); + MG_AddMessageTextPrinter(gStringVar4); data->state = 4; break; case 4: @@ -2001,7 +2001,7 @@ static void Task_SendMysteryGift(u8 taskId) } break; case 9: - AddTextPrinterToWindow1(gStringVar4); + MG_AddMessageTextPrinter(gStringVar4); data->state = 10; break; case 10: @@ -2104,7 +2104,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) data->state = 1; break; case 1: - AddTextPrinterToWindow1(sText_ChooseTrainer); + MG_AddMessageTextPrinter(sText_ChooseTrainer); data->state = 2; break; case 2: @@ -2147,11 +2147,10 @@ static void Task_CardOrNewsWithFriend(u8 taskId) break; case 0: id = ListMenu_ProcessInput(data->listTaskId); - if (JOY_NEW(A_BUTTON) && id != -1) + if (JOY_NEW(A_BUTTON) && id != LIST_NOTHING_CHOSEN) { // this unused variable along with the assignment is needed to match - u32 unusedVar; - unusedVar = data->playerList->players[id].rfu.data.activity; + u32 activity = data->playerList->players[id].rfu.data.activity; if (data->playerList->players[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->playerList->players[id].rfu.data.startedActivity) { @@ -2177,7 +2176,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) } break; case 4: - AddTextPrinterToWindow1(sText_AwaitingPlayersResponse); + MG_AddMessageTextPrinter(sText_AwaitingPlayersResponse); CopyAndTranslatePlayerName(gStringVar1, &data->playerList->players[data->leaderId]); data->state = 5; break; @@ -2196,7 +2195,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) data->state = 8; break; case RFU_STATUS_JOIN_GROUP_OK: - AddTextPrinterToWindow1(sText_PlayerSentBackOK); + MG_AddMessageTextPrinter(sText_PlayerSentBackOK); RfuSetStatus(RFU_STATUS_OK, 0); break; } @@ -2224,7 +2223,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) break; case 7: DestroyWirelessStatusIndicatorSprite(); - AddTextPrinterToWindow1(sText_PleaseStartOver); + MG_AddMessageTextPrinter(sText_PleaseStartOver); DestroyTask(taskId); LinkRfu_Shutdown(); gSpecialVar_Result = LINKUP_FAILED; @@ -2273,7 +2272,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) data->state = 1; break; case 1: - AddTextPrinterToWindow1(sText_SearchingForWirelessSystemWait); + MG_AddMessageTextPrinter(sText_SearchingForWirelessSystemWait); data->state = 2; break; case 2: @@ -2342,7 +2341,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) } break; case 4: - AddTextPrinterToWindow1(sText_AwaitingResponseFromWirelessSystem); + MG_AddMessageTextPrinter(sText_AwaitingResponseFromWirelessSystem); CopyAndTranslatePlayerName(gStringVar1, &data->playerList->players[data->leaderId]); data->state = 5; break; @@ -2361,7 +2360,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) data->state = 8; break; case RFU_STATUS_JOIN_GROUP_OK: - AddTextPrinterToWindow1(sText_WirelessLinkEstablished); + MG_AddMessageTextPrinter(sText_WirelessLinkEstablished); RfuSetStatus(RFU_STATUS_OK, 0); break; } @@ -2439,7 +2438,7 @@ void RunUnionRoom(void) uroom->unreadPlayerId = 0; gSpecialVar_Result = 0; - ListMenuLoadStdPalAt(0xD0, 1); + ListMenuLoadStdPalAt(BG_PLTT_ID(13), 1); } static u16 ReadAsU16(const u8 *ptr) @@ -2504,7 +2503,7 @@ static void Task_RunUnionRoom(u8 taskId) break; case UR_STATE_INIT_OBJECTS: CreateUnionRoomPlayerSprites(uroom->spriteIds, taskData[0]); - if (++taskData[0] == 8) + if (++taskData[0] == MAX_UNION_ROOM_LEADERS) uroom->state = UR_STATE_INIT_LINK; break; case UR_STATE_INIT_LINK: @@ -2711,7 +2710,7 @@ static void Task_RunUnionRoom(u8 taskId) &uroom->topListMenuId, &sWindowTemplate_InviteToActivity, &sListMenuTemplate_InviteToActivity); - if (input != -1) + if (input != LIST_NOTHING_CHOSEN) { if (!gReceivedRemoteLinkPlayers) { @@ -2721,7 +2720,7 @@ static void Task_RunUnionRoom(u8 taskId) { uroom->partnerYesNoResponse = 0; playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->playerList); - if (input == -2 || input == IN_UNION_ROOM) + if (input == LIST_CANCEL || input == IN_UNION_ROOM) { uroom->playerSendBuffer[0] = IN_UNION_ROOM; Rfu_SendPacket(uroom->playerSendBuffer); @@ -3068,9 +3067,9 @@ static void Task_RunUnionRoom(u8 taskId) &uroom->tradeBoardHeaderWindowId, &sWindowTemplate_RegisterForTrade, &sListMenuTemplate_RegisterForTrade); - if (input != -1) + if (input != LIST_NOTHING_CHOSEN) { - if (input == -2 || input == 3) + if (input == LIST_CANCEL || input == 3) // Exit { uroom->state = UR_STATE_MAIN; HandleCancelActivity(TRUE); @@ -3090,7 +3089,7 @@ static void Task_RunUnionRoom(u8 taskId) } break; case UR_STATE_REGISTER_SELECT_MON_FADE: - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); uroom->state = UR_STATE_REGISTER_SELECT_MON; break; case UR_STATE_REGISTER_SELECT_MON: @@ -3107,11 +3106,11 @@ static void Task_RunUnionRoom(u8 taskId) &uroom->tradeBoardHeaderWindowId, &sWindowTemplate_TradingBoardRequestType, &sMenuTemplate_TradingBoardRequestType); - if (input != -1) + if (input != LIST_NOTHING_CHOSEN) { switch (input) { - case -2: + case LIST_CANCEL: case NUMBER_OF_MON_TYPES: // Exit ResetUnionRoomTrade(&sUnionRoomTrade); SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0); @@ -3166,18 +3165,18 @@ static void Task_RunUnionRoom(u8 taskId) &sWindowTemplate_TradingBoardMain, &sTradeBoardListMenuTemplate, uroom->playerList); - if (input != -1) + if (input != LIST_NOTHING_CHOSEN) { switch (input) { - case -2: + case LIST_CANCEL: case 8: // EXIT HandleCancelActivity(TRUE); uroom->state = UR_STATE_MAIN; break; default: UR_ClearBg0(); - switch (IsRequestedTypeOrEggInPlayerParty(uroom->playerList->players[input].rfu.data.tradeType, uroom->playerList->players[input].rfu.data.tradeSpecies)) + switch (IsRequestedTradeInPlayerParty(uroom->playerList->players[input].rfu.data.tradeType, uroom->playerList->players[input].rfu.data.tradeSpecies)) { case UR_TRADE_MATCH: CopyAndTranslatePlayerName(gStringVar1, &uroom->playerList->players[input]); @@ -3707,12 +3706,12 @@ static s32 ListMenuHandler_AllItemsAvailable(u8 *state, u8 *windowId, u8 *listMe ClearStdWindowAndFrame(*windowId, TRUE); RemoveWindow(*windowId); *state = 0; - return -2; + return LIST_CANCEL; } break; } - return -1; + return LIST_NOTHING_CHOSEN; } static s32 TradeBoardMenuHandler(u8 *state, u8 *mainWindowId, u8 *listMenuId, u8 *headerWindowId, @@ -3742,13 +3741,14 @@ static s32 TradeBoardMenuHandler(u8 *state, u8 *mainWindowId, u8 *listMenuId, u8 input = ListMenu_ProcessInput(*listMenuId); if (JOY_NEW(A_BUTTON | B_BUTTON)) { + // Exit or B button if (input == 8 || JOY_NEW(B_BUTTON)) { DestroyListMenuTask(*listMenuId, NULL, NULL); RemoveWindow(*mainWindowId); DeleteTradeBoardWindow(*headerWindowId); *state = 0; - return -2; + return LIST_CANCEL; } else { @@ -3770,7 +3770,7 @@ static s32 TradeBoardMenuHandler(u8 *state, u8 *mainWindowId, u8 *listMenuId, u8 break; } - return -1; + return LIST_NOTHING_CHOSEN; } static void UR_ClearBg0(void) @@ -4090,7 +4090,7 @@ static s32 UnionRoomGetPlayerInteractionResponse(struct RfuPlayerList *list, boo } } -void ItemPrintFunc_EmptyList(u8 windowId, u32 itemId, u8 y) +static void ItemPrintFunc_EmptyList(u8 windowId, u32 itemId, u8 y) { } @@ -4120,7 +4120,7 @@ static void TradeBoardListMenuItemPrintFunc(u8 windowId, u32 itemId, u8 y) struct WirelessLink_Leader *leader = sWirelessLinkMain.leader; struct RfuGameData *gameData; s32 i, j; - u8 playerName[11]; + u8 playerName[RFU_USER_NAME_LENGTH + 1]; if (itemId == LIST_HEADER && y == sTradeBoardListMenuTemplate.upText_Y) { @@ -4168,7 +4168,7 @@ static s32 GetUnionRoomPlayerGender(s32 playerIdx, struct RfuPlayerList *list) return list->players[playerIdx].rfu.data.playerGender; } -static s32 IsRequestedTypeOrEggInPlayerParty(u32 type, u32 species) +static s32 IsRequestedTradeInPlayerParty(u32 type, u32 species) { s32 i; @@ -4187,7 +4187,7 @@ static s32 IsRequestedTypeOrEggInPlayerParty(u32 type, u32 species) for (i = 0; i < gPlayerPartyCount; i++) { species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - if (gBaseStats[species].type1 == type || gBaseStats[species].type2 == type) + if (gSpeciesInfo[species].types[0] == type || gSpeciesInfo[species].types[1] == type) return UR_TRADE_MATCH; } return UR_TRADE_NOTYPE; diff --git a/src/union_room_battle.c b/src/union_room_battle.c index ed8a52ef5894..4d5f7d827883 100644 --- a/src/union_room_battle.c +++ b/src/union_room_battle.c @@ -43,7 +43,7 @@ static const struct WindowTemplate sWindowTemplates[] = { .tilemapTop = 15, .width = 24, .height = 4, - .paletteNum = 0xE, + .paletteNum = 14, .baseBlock = 0x014 }, DUMMY_WIN_TEMPLATE @@ -130,8 +130,8 @@ void CB2_UnionRoomBattle(void) FillWindowPixelBuffer(0, PIXEL_FILL(0)); FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillBgTilemapBufferRect(0, 0, 0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT, 0xF); - LoadUserWindowBorderGfx(0, 1, 0xD0); - LoadUserWindowBorderGfx_(0, 1, 0xD0); + LoadUserWindowBorderGfx(0, 1, BG_PLTT_ID(13)); + LoadUserWindowBorderGfx_(0, 1, BG_PLTT_ID(13)); Menu_LoadStdPal(); SetVBlankCallback(VBlankCB_UnionRoomBattle); gMain.state++; diff --git a/src/union_room_chat.c b/src/union_room_chat.c index e1ca7c0b0dcc..5d91e264a0bf 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -116,6 +116,13 @@ enum { // Shared by all above #define PALTAG_INTERFACE 0 +enum { + WIN_CHAT_HISTORY, + WIN_TEXT_ENTRY, + WIN_KEYBOARD, + WIN_SWAP_MENU, +}; + struct UnionRoomChat { u32 filler1; @@ -560,7 +567,7 @@ static const struct BgTemplate sBgTemplates[] = { }; static const struct WindowTemplate sWinTemplates[] = { - { + [WIN_CHAT_HISTORY] = { .bg = 3, .tilemapLeft = 8, .tilemapTop = 1, @@ -568,7 +575,8 @@ static const struct WindowTemplate sWinTemplates[] = { .height = 19, .paletteNum = 15, .baseBlock = 0x0001, - }, { + }, + [WIN_TEXT_ENTRY] = { .bg = 1, .tilemapLeft = 9, .tilemapTop = 18, @@ -576,7 +584,8 @@ static const struct WindowTemplate sWinTemplates[] = { .height = 2, .paletteNum = 12, .baseBlock = 0x007a, - }, { + }, + [WIN_KEYBOARD] = { .bg = 1, .tilemapLeft = 0, .tilemapTop = 2, @@ -584,7 +593,8 @@ static const struct WindowTemplate sWinTemplates[] = { .height = 15, .paletteNum = 7, .baseBlock = 0x0020, - }, { + }, + [WIN_SWAP_MENU] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 2, @@ -1171,7 +1181,7 @@ static void Chat_AskQuitChatting(void) input = ProcessMenuInput(); switch (input) { - case -1: + case MENU_B_PRESSED: case 1: StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0); sChat->funcState = 3; @@ -1210,7 +1220,7 @@ static void Chat_AskQuitChatting(void) input = ProcessMenuInput(); switch (input) { - case -1: + case MENU_B_PRESSED: case 1: StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0); sChat->funcState = 3; @@ -1512,7 +1522,7 @@ static void Chat_SaveAndExit(void) input = ProcessMenuInput(); switch (input) { - case -1: + case MENU_B_PRESSED: case 1: sChat->funcState = 12; break; @@ -1537,7 +1547,7 @@ static void Chat_SaveAndExit(void) input = ProcessMenuInput(); switch (input) { - case -1: + case MENU_B_PRESSED: case 1: sChat->funcState = 12; break; @@ -2280,7 +2290,7 @@ static bool32 Display_ShowKeyboardSwapMenu(u8 *state) { case 0: ShowKeyboardSwapMenu(); - CopyWindowToVram(3, COPYWIN_FULL); + CopyWindowToVram(WIN_SWAP_MENU, COPYWIN_FULL); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -2296,7 +2306,7 @@ static bool32 Display_HideKeyboardSwapMenu(u8 *state) { case 0: HideKeyboardSwapMenu(); - CopyWindowToVram(3, COPYWIN_FULL); + CopyWindowToVram(WIN_SWAP_MENU, COPYWIN_FULL); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -2316,7 +2326,7 @@ static bool32 Display_SwitchPages(u8 *state) return TRUE; PrintCurrentKeyboardPage(); - CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(WIN_KEYBOARD, COPYWIN_GFX); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) @@ -2393,7 +2403,7 @@ static bool32 Display_UpdateMessageBuffer(u8 *state) FillTextEntryWindow(x, width, 0); str = GetMessageEntryBuffer(); DrawTextEntryMessage(0, str, 3, 1, 2); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2422,7 +2432,7 @@ static bool32 Display_AskRegisterText(u8 *state) length = StringLength_Multibyte(str); FillTextEntryWindow(x, length, PIXEL_FILL(6)); DrawTextEntryMessage(x, str, 0, 4, 5); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2463,7 +2473,7 @@ static bool32 Display_CancelRegister(u8 *state) length = StringLength_Multibyte(str); FillTextEntryWindow(x, length, PIXEL_FILL(0)); DrawTextEntryMessage(x, str, 3, 1, 2); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2501,7 +2511,7 @@ static bool32 Display_ReturnToKeyboard(u8 *state) { case 0: PrintCurrentKeyboardPage(); - CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(WIN_KEYBOARD, COPYWIN_GFX); (*state)++; break; case 1: @@ -2527,7 +2537,7 @@ static bool32 Display_ScrollChat(u8 *state) str = GetLastReceivedMessage(); colorIdx = GetReceivedPlayerIndex(); PrintChatMessage(row, str, colorIdx); - CopyWindowToVram(0, COPYWIN_GFX); + CopyWindowToVram(WIN_CHAT_HISTORY, COPYWIN_GFX); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) @@ -2546,8 +2556,8 @@ static bool32 Display_ScrollChat(u8 *state) } // fall through case 2: - ScrollWindow(0, 0, 5, PIXEL_FILL(1)); - CopyWindowToVram(0, COPYWIN_GFX); + ScrollWindow(WIN_CHAT_HISTORY, 0, 5, PIXEL_FILL(1)); + CopyWindowToVram(WIN_CHAT_HISTORY, COPYWIN_GFX); sDisplay->scrollCount++; (*state)++; // fall through @@ -2864,7 +2874,7 @@ static void DestroyStdMessageWindow(void) static void FillTextEntryWindow(u16 x, u16 width, u8 fillValue) { - FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14); + FillWindowPixelRect(WIN_TEXT_ENTRY, fillValue, x * 8, 1, width * 8, 14); } static void DrawTextEntryMessage(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor) @@ -2881,7 +2891,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, FONT_SHORT, x * 8, 1, color, TEXT_SKIP_DRAW, strBuffer); + AddTextPrinterParameterized3(WIN_TEXT_ENTRY, FONT_SHORT, x * 8, 1, color, TEXT_SKIP_DRAW, strBuffer); } static void PrintCurrentKeyboardPage(void) @@ -2894,7 +2904,7 @@ static void PrintCurrentKeyboardPage(void) u8 str[45]; u8 *str2; - FillWindowPixelBuffer(2, PIXEL_FILL(15)); + FillWindowPixelBuffer(WIN_KEYBOARD, PIXEL_FILL(15)); page = GetCurrentKeyboardPage(); color[0] = TEXT_COLOR_TRANSPARENT; color[1] = TEXT_DYNAMIC_COLOR_5; @@ -2916,7 +2926,7 @@ static void PrintCurrentKeyboardPage(void) return; StringCopy(&str[3], sUnionRoomKeyboardText[page][i]); - AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); } } else @@ -2927,7 +2937,7 @@ static void PrintCurrentKeyboardPage(void) str2 = GetRegisteredTextByRow(i); if (GetStringWidth(FONT_SMALL, str2, 0) <= 40) { - AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str2); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str2); } else { @@ -2938,8 +2948,8 @@ static void PrintCurrentKeyboardPage(void) StringCopyN_Multibyte(str, str2, length); } while (GetStringWidth(FONT_SMALL, str, 0) > 35); - AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); - AddTextPrinterParameterized3(2, FONT_SMALL, left + 35, top, color, TEXT_SKIP_DRAW, sText_Ellipsis); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left + 35, top, color, TEXT_SKIP_DRAW, sText_Ellipsis); } } } @@ -2989,17 +2999,17 @@ static bool32 SlideKeyboardPageIn(void) static void ShowKeyboardSwapMenu(void) { - FillWindowPixelBuffer(3, PIXEL_FILL(1)); - DrawTextBorderOuter(3, 1, 13); - PrintMenuActionTextsAtPos(3, FONT_SHORT, 8, 1, 14, ARRAY_COUNT(sKeyboardPageTitleTexts), sKeyboardPageTitleTexts); - InitMenuNormal(3, FONT_SHORT, 0, 1, 14, 5, GetCurrentKeyboardPage()); - PutWindowTilemap(3); + FillWindowPixelBuffer(WIN_SWAP_MENU, PIXEL_FILL(1)); + DrawTextBorderOuter(WIN_SWAP_MENU, 1, 13); + PrintMenuActionTextsAtPos(WIN_SWAP_MENU, FONT_SHORT, 8, 1, 14, ARRAY_COUNT(sKeyboardPageTitleTexts), sKeyboardPageTitleTexts); + InitMenuNormal(WIN_SWAP_MENU, FONT_SHORT, 0, 1, 14, 5, GetCurrentKeyboardPage()); + PutWindowTilemap(WIN_SWAP_MENU); } static void HideKeyboardSwapMenu(void) { - ClearStdWindowAndFrameToTransparent(3, FALSE); - ClearWindowTilemap(3); + ClearStdWindowAndFrameToTransparent(WIN_SWAP_MENU, FALSE); + ClearWindowTilemap(WIN_SWAP_MENU); } static void PrintChatMessage(u16 row, u8 *str, u8 colorIdx) @@ -3009,8 +3019,8 @@ static void PrintChatMessage(u16 row, u8 *str, u8 colorIdx) color[0] = TEXT_COLOR_WHITE; color[1] = colorIdx * 2 + 2; color[2] = colorIdx * 2 + 3; - FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15); - AddTextPrinterParameterized3(0, FONT_SHORT, 0, row * 15 + 1, color, TEXT_SKIP_DRAW, str); + FillWindowPixelRect(WIN_CHAT_HISTORY, PIXEL_FILL(1), 0, row * 15, 168, 15); + AddTextPrinterParameterized3(WIN_CHAT_HISTORY, FONT_SHORT, 0, row * 15 + 1, color, TEXT_SKIP_DRAW, str); } static void ResetGpuBgState(void) @@ -3055,8 +3065,8 @@ static void ClearBg0(void) static void LoadChatWindowBorderGfx(void) { - LoadPalette(gUnionRoomChat_Window_Pal2, 0x70, 0x20); - LoadPalette(gUnionRoomChat_Window_Pal1, 0xC0, 0x20); + LoadPalette(gUnionRoomChat_Window_Pal2, BG_PLTT_ID(7), PLTT_SIZE_4BPP); + LoadPalette(gUnionRoomChat_Window_Pal1, BG_PLTT_ID(12), PLTT_SIZE_4BPP); DecompressAndCopyTileDataToVram(1, gUnionRoomChat_Border_Gfx, 0, 0, 0); CopyToBgTilemapBuffer(1, gUnionRoomChat_Border_Tilemap, 0, 0); CopyBgTilemapBufferToVram(1); @@ -3066,7 +3076,7 @@ static void LoadChatWindowGfx(void) { u8 *ptr; - LoadPalette(gUnionRoomChat_Background_Pal, 0, 0x20); + LoadPalette(gUnionRoomChat_Background_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); ptr = DecompressAndCopyTileDataToVram(2, gUnionRoomChat_Background_Gfx, 0, 0, 0); if (ptr) { @@ -3080,23 +3090,23 @@ static void LoadChatWindowGfx(void) static void LoadChatUnkPalette(void) { - LoadPalette(sUnk_Palette1, 0x80, sizeof(sUnk_Palette1)); + LoadPalette(sUnk_Palette1, BG_PLTT_ID(8), sizeof(sUnk_Palette1)); RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1); } static void LoadChatMessagesWindow(void) { - LoadPalette(sUnk_Palette2, 0xF0, sizeof(sUnk_Palette2)); - PutWindowTilemap(0); - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - CopyWindowToVram(0, COPYWIN_FULL); + LoadPalette(sUnk_Palette2, BG_PLTT_ID(15), sizeof(sUnk_Palette2)); + PutWindowTilemap(WIN_CHAT_HISTORY); + FillWindowPixelBuffer(WIN_CHAT_HISTORY, PIXEL_FILL(1)); + CopyWindowToVram(WIN_CHAT_HISTORY, COPYWIN_FULL); } static void LoadKeyboardWindow(void) { - PutWindowTilemap(2); + PutWindowTilemap(WIN_KEYBOARD); PrintCurrentKeyboardPage(); - CopyWindowToVram(2, COPYWIN_FULL); + CopyWindowToVram(WIN_KEYBOARD, COPYWIN_FULL); } static void LoadTextEntryWindow(void) @@ -3107,19 +3117,19 @@ static void LoadTextEntryWindow(void) unused[1] = 0xFF; for (i = 0; i < MAX_MESSAGE_LENGTH; i++) - BlitBitmapToWindow(1, sDisplay->unk2128, i * 8, 0, 8, 16); + BlitBitmapToWindow(WIN_TEXT_ENTRY, sDisplay->unk2128, i * 8, 0, 8, 16); - FillWindowPixelBuffer(1, PIXEL_FILL(0)); - PutWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_TEXT_ENTRY, PIXEL_FILL(0)); + PutWindowTilemap(WIN_TEXT_ENTRY); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_FULL); } static void LoadKeyboardSwapWindow(void) { - FillWindowPixelBuffer(3, PIXEL_FILL(1)); - LoadUserWindowBorderGfx(3, 1, 0xD0); - LoadUserWindowBorderGfx_(3, 0xA, 0x20); - LoadPalette(gStandardMenuPalette, 0xE0, 0x20); + FillWindowPixelBuffer(WIN_SWAP_MENU, PIXEL_FILL(1)); + LoadUserWindowBorderGfx(WIN_SWAP_MENU, 1, BG_PLTT_ID(13)); + LoadUserWindowBorderGfx_(WIN_SWAP_MENU, 0xA, BG_PLTT_ID(2)); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(14), PLTT_SIZE_4BPP); } static void InitScanlineEffect(void) @@ -3202,7 +3212,7 @@ static void SetRegisteredTextPalette(bool32 registering) { const u16 *palette = &sUnionRoomChatInterfacePal[registering * 2 + 1]; u8 index = IndexOfSpritePaletteTag(PALTAG_INTERFACE); - LoadPalette(palette, index * 16 + 0x101, 4); + LoadPalette(palette, OBJ_PLTT_ID(index) + 1, PLTT_SIZEOF(2)); } static void StartKeyboardCursorAnim(void) diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c index 0eed65a63536..31f535310d15 100644 --- a/src/union_room_player_avatar.c +++ b/src/union_room_player_avatar.c @@ -340,15 +340,10 @@ static void AnimateUnionRoomPlayer(u32 leaderId, struct UnionRoomObject * object } break; case 1: - if (object->schedAnim == UNION_ROOM_SPAWN_OUT) - { - object->state = 3; - object->animState = 0; - } - else - { + if (object->schedAnim != UNION_ROOM_SPAWN_OUT) break; - } + object->state = 3; + object->animState = 0; // fallthrough case 3: if (AnimateUnionRoomPlayerDespawn(&object->animState, leaderId, object) == 1) diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 2f16f220aa94..be6fc8934904 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -505,7 +505,7 @@ static void LoadUsePokeblockMenu(void) InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); - LoadUserWindowBorderGfx(0, 0x97, 0xE0); + LoadUserWindowBorderGfx(0, 0x97, BG_PLTT_ID(14)); sInfo->mainState++; break; case 4: @@ -1233,13 +1233,13 @@ static void UpdateMonPic(u8 loadId) gSprites[sMenu->curMonSpriteId].callback = SpriteCB_MonPic; gSprites[sMenu->curMonSpriteId].y2 -= 34; sMenu->curMonTileStart = (void *)(OBJ_VRAM0 + (sMenu->curMonSheet * 32)); - sMenu->curMonPalette = (sMenu->curMonPalette * 16) + 0x100; + sMenu->curMonPalette = OBJ_PLTT_ID(sMenu->curMonPalette); } } else { Dma3CopyLarge16_(sMenu->partySheets[loadId], sMenu->curMonTileStart, MON_PIC_SIZE); - LoadPalette(sMenu->partyPalettes[loadId], sMenu->curMonPalette, 32); + LoadPalette(sMenu->partyPalettes[loadId], sMenu->curMonPalette, PLTT_SIZE_4BPP); } } @@ -1340,7 +1340,7 @@ static bool8 LoadUsePokeblockMenuGfx(void) LoadBgTilemap(3, sMonFrame_TilemapPtr, 1280, 0); break; case 5: - LoadPalette(sMonFrame_Pal, 208, 32); + LoadPalette(sMonFrame_Pal, BG_PLTT_ID(13), PLTT_SIZE_4BPP); sMenu->curMonXOffset = -80; break; case 6: @@ -1348,7 +1348,7 @@ static bool8 LoadUsePokeblockMenuGfx(void) break; case 7: LZ77UnCompVram(gUsePokeblockGraph_Tilemap, sGraph_Tilemap); - LoadPalette(gUsePokeblockGraph_Pal, 32, 32); + LoadPalette(gUsePokeblockGraph_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); break; case 8: LoadBgTiles(1, sGraph_Gfx, 6656, 160 << 2); @@ -1363,8 +1363,8 @@ static bool8 LoadUsePokeblockMenuGfx(void) break; case 11: LoadBgTilemap(2, sMenu->tilemapBuffer, 1280, 0); - LoadPalette(gConditionGraphData_Pal, 48, 32); - LoadPalette(gConditionText_Pal, 240, 32); + LoadPalette(gConditionGraphData_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); + LoadPalette(gConditionText_Pal, BG_PLTT_ID(15), PLTT_SIZE_4BPP); ConditionGraph_InitWindow(2); break; default: diff --git a/src/wallclock.c b/src/wallclock.c index 5e0fae3a1351..ab1add25a0b5 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -55,25 +55,28 @@ static void SpriteCB_AMIndicator(struct Sprite *sprite); #define PALTAG_WALL_CLOCK_MALE 0x1000 #define PALTAG_WALL_CLOCK_FEMALE 0x1001 -enum -{ +enum { PERIOD_AM, PERIOD_PM, }; -enum -{ +enum { MOVE_NONE, MOVE_BACKWARD, MOVE_FORWARD, }; +enum { + WIN_MSG, + WIN_BUTTON_LABEL, +}; + static const u32 sHand_Gfx[] = INCBIN_U32("graphics/wallclock/hand.4bpp.lz"); static const u16 sTextPrompt_Pal[] = INCBIN_U16("graphics/wallclock/text_prompt.gbapal"); // for "Cancel" or "Confirm" static const struct WindowTemplate sWindowTemplates[] = { - { + [WIN_MSG] = { .bg = 0, .tilemapLeft = 3, .tilemapTop = 17, @@ -82,7 +85,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 512 }, - { + [WIN_BUTTON_LABEL] = { .bg = 2, .tilemapLeft = 24, .tilemapTop = 16, @@ -644,17 +647,17 @@ static void LoadWallClockGraphics(void) LZ77UnCompVram(gWallClock_Gfx, (void *)VRAM); if (gSpecialVar_0x8004 == MALE) - LoadPalette(gWallClockMale_Pal, 0, 32); + LoadPalette(gWallClockMale_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); else - LoadPalette(gWallClockFemale_Pal, 0, 32); + LoadPalette(gWallClockFemale_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); - LoadPalette(GetOverworldTextboxPalettePtr(), 0xe0, 32); - LoadPalette(sTextPrompt_Pal, 0xc0, 8); + LoadPalette(GetOverworldTextboxPalettePtr(), BG_PLTT_ID(14), PLTT_SIZE_4BPP); + LoadPalette(sTextPrompt_Pal, BG_PLTT_ID(12), PLTT_SIZEOF(4)); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); - LoadUserWindowBorderGfx(0, 0x250, 0xd0); + LoadUserWindowBorderGfx(0, 0x250, BG_PLTT_ID(13)); ClearScheduledBgCopiesToVram(); ScanlineEffect_Stop(); ResetTasks(); @@ -717,8 +720,8 @@ void CB2_StartWallClock(void) WallClockInit(); - AddTextPrinterParameterized(1, FONT_NORMAL, gText_Confirm3, 0, 1, 0, NULL); - PutWindowTilemap(1); + AddTextPrinterParameterized(WIN_BUTTON_LABEL, FONT_NORMAL, gText_Confirm3, 0, 1, 0, NULL); + PutWindowTilemap(WIN_BUTTON_LABEL); ScheduleBgCopyTilemapToVram(2); } @@ -765,8 +768,8 @@ void CB2_ViewWallClock(void) WallClockInit(); - AddTextPrinterParameterized(1, FONT_NORMAL, gText_Cancel4, 0, 1, 0, NULL); - PutWindowTilemap(1); + AddTextPrinterParameterized(WIN_BUTTON_LABEL, FONT_NORMAL, gText_Cancel4, 0, 1, 0, NULL); + PutWindowTilemap(WIN_BUTTON_LABEL); ScheduleBgCopyTilemapToVram(2); } @@ -829,9 +832,9 @@ static void Task_SetClock_HandleInput(u8 taskId) static void Task_SetClock_AskConfirm(u8 taskId) { - DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x250, 0x0d); - AddTextPrinterParameterized(0, FONT_NORMAL, gText_IsThisTheCorrectTime, 0, 1, 0, NULL); - PutWindowTilemap(0); + DrawStdFrameWithCustomTileAndPalette(WIN_MSG, FALSE, 0x250, 0x0d); + AddTextPrinterParameterized(WIN_MSG, FONT_NORMAL, gText_IsThisTheCorrectTime, 0, 1, 0, NULL); + PutWindowTilemap(WIN_MSG); ScheduleBgCopyTilemapToVram(0); CreateYesNoMenu(&sWindowTemplate_ConfirmYesNo, 0x250, 0x0d, 1); gTasks[taskId].func = Task_SetClock_HandleConfirmInput; @@ -848,8 +851,8 @@ static void Task_SetClock_HandleConfirmInput(u8 taskId) case 1: // NO case MENU_B_PRESSED: PlaySE(SE_SELECT); - ClearStdWindowAndFrameToTransparent(0, FALSE); - ClearWindowTilemap(0); + ClearStdWindowAndFrameToTransparent(WIN_MSG, FALSE); + ClearWindowTilemap(WIN_MSG); gTasks[taskId].func = Task_SetClock_HandleInput; break; } diff --git a/src/wild_encounter.c b/src/wild_encounter.c index a7ea56b82fb3..d228b87a143a 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -18,7 +18,6 @@ #include "battle_pike.h" #include "battle_pyramid.h" #include "constants/abilities.h" -#include "constants/battle_config.h" #include "constants/game_stat.h" #include "constants/item.h" #include "constants/items.h" @@ -434,7 +433,7 @@ static void CreateWildMon(u16 species, u8 level) ZeroEnemyPartyMons(); checkCuteCharm = TRUE; - switch (gBaseStats[species].genderRatio) + switch (gSpeciesInfo[species].genderRatio) { case MON_MALE: case MON_FEMALE: @@ -1031,7 +1030,7 @@ static bool8 TryGetRandomWildMonIndexByType(const struct WildPokemon *wildMon, u for (validMonCount = 0, i = 0; i < numMon; i++) { - if (gBaseStats[wildMon[i].species].type1 == type || gBaseStats[wildMon[i].species].type2 == type) + if (gSpeciesInfo[wildMon[i].species].types[0] == type || gSpeciesInfo[wildMon[i].species].types[1] == type) validIndexes[validMonCount++] = i; } @@ -1105,7 +1104,7 @@ bool8 TryDoDoubleWildBattle(void) return TRUE; #endif #if B_DOUBLE_WILD_CHANCE != 0 - else if ((Random() % 100) + 1 < B_DOUBLE_WILD_CHANCE) + 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 40e4bb84df4f..f80e2356eee9 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -18,6 +18,7 @@ #include "union_room.h" #include "constants/songs.h" #include "constants/union_room.h" +#include "constants/rgb.h" enum { COLORMODE_NORMAL, @@ -27,12 +28,21 @@ enum { COLORMODE_WHITE_DGRAY, }; -#define GROUPTYPE_TRADE 0 -#define GROUPTYPE_BATTLE 1 -#define GROUPTYPE_UNION 2 -#define GROUPTYPE_TOTAL 3 -#define GROUPTYPE_NONE -1 -#define NUM_GROUPTYPES 4 +enum { + WIN_TITLE, + WIN_GROUP_NAMES, + WIN_GROUP_COUNTS, +}; + +enum { + GROUPTYPE_TRADE, + GROUPTYPE_BATTLE, + GROUPTYPE_UNION, + GROUPTYPE_TOTAL, + NUM_GROUPTYPES +}; + +#define GROUPTYPE_NONE 0xFF struct WirelessCommunicationStatusScreen { @@ -51,9 +61,26 @@ 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/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 u16 sPalettes[][16] = { + INCBIN_U16("graphics/wireless_status_screen/default.gbapal"), + {}, // All black. Never read + INCBIN_U16("graphics/wireless_status_screen/anim_00.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_01.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_02.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_03.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_04.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_05.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_06.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_07.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_08.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_09.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_10.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_11.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_12.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_13.gbapal") +}; +static const u32 sBgTiles_Gfx[] = INCBIN_U32("graphics/wireless_status_screen/bg.4bpp.lz"); +static const u32 sBgTiles_Tilemap[] = INCBIN_U32("graphics/wireless_status_screen/bg.bin.lz"); static const struct BgTemplate sBgTemplates[] = { { @@ -70,7 +97,7 @@ static const struct BgTemplate sBgTemplates[] = { }; static const struct WindowTemplate sWindowTemplates[] = { - { + [WIN_TITLE] = { .bg = 0, .tilemapLeft = 3, .tilemapTop = 0, @@ -78,7 +105,8 @@ static const struct WindowTemplate sWindowTemplates[] = { .height = 3, .paletteNum = 15, .baseBlock = 0x0001 - }, { + }, + [WIN_GROUP_NAMES] = { .bg = 0, .tilemapLeft = 3, .tilemapTop = 4, @@ -86,7 +114,8 @@ static const struct WindowTemplate sWindowTemplates[] = { .height = 15, .paletteNum = 15, .baseBlock = 0x0049 - }, { + }, + [WIN_GROUP_COUNTS] = { .bg = 0, .tilemapLeft = 24, .tilemapTop = 4, @@ -108,7 +137,6 @@ static const u8 *const sHeaderTexts[NUM_GROUPTYPES + 1] = { // Activity, group type, number of players // 0 players means the number of players can change and should be counted dynamically // GROUPTYPE_TOTAL have no unique group and are simply counted in the total of "people communicating" -// UB: GROUPTYPE_NONE (-1) can potentially be used as an index into a u8[4] in CountPlayersInGroupAndGetActivity static const u8 sActivityGroupInfo[][3] = { {ACTIVITY_BATTLE_SINGLE, GROUPTYPE_BATTLE, 2}, {ACTIVITY_BATTLE_DOUBLE, GROUPTYPE_BATTLE, 2}, @@ -193,10 +221,10 @@ static void CB2_InitWirelessCommunicationScreen(void) ChangeBgY(0, 0, BG_COORD_SET); ChangeBgX(1, 0, BG_COORD_SET); ChangeBgY(1, 0, BG_COORD_SET); - LoadPalette(sBgTiles_Pal, 0x00, 0x20); + LoadPalette(sPalettes, BG_PLTT_ID(0), PLTT_SIZE_4BPP); Menu_LoadStdPalAt(0xF0); DynamicPlaceholderTextUtil_Reset(); - FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x0F); + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 15); CopyBgTilemapBufferToVram(1); SetMainCallback2(CB2_RunWirelessCommunicationScreen); RunTasks(); @@ -218,34 +246,42 @@ static void CB2_ExitWirelessCommunicationStatusScreen(void) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } -static void WCSS_CyclePalette(s16 * counter, s16 * palIdx) +// Cycle through palettes that relocate various shades of blue to create the wave effect at the bottom of the screen. +static void CyclePalette(s16 * counter, s16 * palIdx) { + s32 idx; if (++(*counter) > 5) { - if (++(*palIdx) == 14) + if (++(*palIdx) == (int)ARRAY_COUNT(sPalettes) - 2) *palIdx = 0; *counter = 0; } - LoadPalette(sBgTiles_Pal + 16 * (*palIdx + 2), 0, 0x10); + idx = *palIdx + 2; // +2 skips over default.pal and the empty black palette after it + LoadPalette(sPalettes[idx], BG_PLTT_ID(0), PLTT_SIZEOF(8)); } static void PrintHeaderTexts(void) { s32 i; - FillWindowPixelBuffer(0, PIXEL_FILL(0)); - FillWindowPixelBuffer(1, PIXEL_FILL(0)); - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - 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, FONT_NORMAL, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY); - } - WCSS_AddTextPrinterParameterized(1, FONT_NORMAL, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_RED); - PutWindowTilemap(0); - CopyWindowToVram(0, COPYWIN_GFX); - PutWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_GFX); + FillWindowPixelBuffer(WIN_TITLE, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_GROUP_NAMES, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_GROUP_COUNTS, PIXEL_FILL(0)); + + // Print title + WCSS_AddTextPrinterParameterized(WIN_TITLE, FONT_NORMAL, sHeaderTexts[0], GetStringCenterAlignXOffset(FONT_NORMAL, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN); + + // Print label for each group (excluding total) + for (i = 0; i < NUM_GROUPTYPES - 1; i++) + WCSS_AddTextPrinterParameterized(WIN_GROUP_NAMES, FONT_NORMAL, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY); + + // Print label for total + WCSS_AddTextPrinterParameterized(WIN_GROUP_NAMES, FONT_NORMAL, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_RED); + + PutWindowTilemap(WIN_TITLE); + CopyWindowToVram(WIN_TITLE, COPYWIN_GFX); + PutWindowTilemap(WIN_GROUP_NAMES); + CopyWindowToVram(WIN_GROUP_NAMES, COPYWIN_GFX); } #define tState data[0] @@ -260,7 +296,7 @@ static void Task_WirelessCommunicationScreen(u8 taskId) gTasks[taskId].tState++; break; case 1: - BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, 0); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); ShowBg(1); CopyBgTilemapBufferToVram(0); ShowBg(0); @@ -268,24 +304,22 @@ static void Task_WirelessCommunicationScreen(u8 taskId) break; case 2: if (!gPaletteFade.active) - { gTasks[taskId].tState++; - } break; case 3: if (UpdateCommunicationCounts(sStatusScreen->groupCounts, sStatusScreen->prevGroupCounts, sStatusScreen->activities, sStatusScreen->rfuTaskId)) { - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_GROUP_COUNTS, PIXEL_FILL(0)); for (i = 0; i < NUM_GROUPTYPES; i++) { ConvertIntToDecimalStringN(gStringVar4, sStatusScreen->groupCounts[i], STR_CONV_MODE_RIGHT_ALIGN, 2); if (i != GROUPTYPE_TOTAL) - WCSS_AddTextPrinterParameterized(2, FONT_NORMAL, gStringVar4, 12, 30 * i + 8, COLORMODE_WHITE_LGRAY); + WCSS_AddTextPrinterParameterized(WIN_GROUP_COUNTS, FONT_NORMAL, gStringVar4, 12, 30 * i + 8, COLORMODE_WHITE_LGRAY); else - WCSS_AddTextPrinterParameterized(2, FONT_NORMAL, gStringVar4, 12, 98, COLORMODE_RED); + WCSS_AddTextPrinterParameterized(WIN_GROUP_COUNTS, FONT_NORMAL, gStringVar4, 12, 98, COLORMODE_RED); } - PutWindowTilemap(2); - CopyWindowToVram(2, COPYWIN_FULL); + PutWindowTilemap(WIN_GROUP_COUNTS); + CopyWindowToVram(WIN_GROUP_COUNTS, COPYWIN_FULL); } if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { @@ -293,10 +327,10 @@ static void Task_WirelessCommunicationScreen(u8 taskId) gTasks[sStatusScreen->rfuTaskId].data[15] = 0xFF; gTasks[taskId].tState++; } - WCSS_CyclePalette(&gTasks[taskId].data[7], &gTasks[taskId].data[8]); + CyclePalette(&gTasks[taskId].data[7], &gTasks[taskId].data[8]); break; case 4: - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, 0); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); gTasks[taskId].tState++; break; case 5: @@ -358,6 +392,13 @@ static u32 CountPlayersInGroupAndGetActivity(struct RfuPlayer * player, u32 * gr for (i = 0; i < ARRAY_COUNT(sActivityGroupInfo); i++) { +#ifdef UBFIX + // GROUPTYPE_NONE is 0xFF, and shouldn't be used as an index into groupCounts. + // In theory the only activity with this group type (ACTIVITY_SEARCH) wouldn't + // satisfy the condition below, but not necessarily. + if (group_type(i) == GROUPTYPE_NONE) + continue; +#endif if (activity == group_activity(i) && player->groupScheduledAnim == UNION_ROOM_SPAWN_IN) { if (group_players(i) == 0) diff --git a/src/wonder_news.c b/src/wonder_news.c index e083575d9525..4b5f32d1dc08 100644 --- a/src/wonder_news.c +++ b/src/wonder_news.c @@ -3,30 +3,22 @@ #include "random.h" #include "event_data.h" #include "wonder_news.h" +#include "constants/items.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) +// Every 4th reward for sending Wonder News to a link partner is a "big" reward. +#define MAX_SENT_REWARD 4 + +// Only up to 5 rewards can be received in a short period. After this the player +// must take 500 steps before any more rewards can be received. +#define MAX_REWARD 5 + +static u32 GetRewardItem(struct WonderNewsMetadata *); +static u32 GetRewardType(struct WonderNewsMetadata *); +static void IncrementRewardCounter(struct WonderNewsMetadata *); +static void IncrementSentRewardCounter(struct WonderNewsMetadata *); +static void ResetSentRewardCounter(struct WonderNewsMetadata *); + +void WonderNews_SetReward(u32 newsType) { struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); @@ -37,124 +29,128 @@ void GenerateRandomWonderNews(u32 newsType) break; case WONDER_NEWS_RECV_FRIEND: case WONDER_NEWS_RECV_WIRELESS: - data->rand = (Random() % 15) + 16; + // Random berry between ITEM_RAZZ_BERRY and ITEM_NOMEL_BERRY + data->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_RAZZ_BERRY); break; case WONDER_NEWS_SENT: - data->rand = (Random() % 15) + 1; + // Random berry between ITEM_CHERI_BERRY and ITEM_IAPAPA_BERRY + data->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_CHERI_BERRY); break; } } -void InitSavedWonderNews(void) +void WonderNews_Reset(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); + data->sentRewardCounter = 0; + data->rewardCounter = 0; + data->berry = 0; + VarSet(VAR_WONDER_NEWS_STEP_COUNTER, 0); } -// Unused -static void TryIncrementWonderNewsVar(void) +// Only used in FRLG +void WonderNews_IncrementStepCounter(void) { - u16 *var = GetVarPointer(VAR_WONDER_NEWS_COUNTER); + u16 *stepCounter = GetVarPointer(VAR_WONDER_NEWS_STEP_COUNTER); struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); - if (data->getCounter > 4 && ++(*var) >= 500) + // If the player has reached the reward limit, start counting steps. + // When they reach 500 steps reset the reward counter to allow them to + // receive rewards again. + if (data->rewardCounter >= MAX_REWARD && ++(*stepCounter) >= 500) { - data->getCounter = 0; - *var = 0; + data->rewardCounter = 0; + *stepCounter = 0; } } -// Unused -u16 RetrieveWonderNewsVal(void) +// Only used in FRLG +u16 WonderNews_GetRewardInfo(void) { u16 *result = &gSpecialVar_Result; struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata(); - u16 newsVal; + u16 rewardType; // Checks if Mystery Event is enabled, not Mystery Gift? if (!IsMysteryEventEnabled() || !ValidateSavedWonderNews()) - return 0; + return NEWS_REWARD_NONE; - newsVal = GetNewsValByNewsType(data); + rewardType = GetRewardType(data); - switch (newsVal) + switch (rewardType) { - case NEWS_VAL_RECV_FRIEND: - *result = GetNewsId(data); - break; - case NEWS_VAL_RECV_WIRELESS: - *result = GetNewsId(data); + case NEWS_REWARD_RECV_SMALL: + case NEWS_REWARD_RECV_BIG: + *result = GetRewardItem(data); break; - case NEWS_VAL_SENT: - *result = GetNewsId(data); - IncrementSentNewsCounter(data); + case NEWS_REWARD_SENT_SMALL: + *result = GetRewardItem(data); + IncrementSentRewardCounter(data); break; - case NEWS_VAL_SENT_MAX: - *result = GetNewsId(data); - ResetSentNewsCounter(data); + case NEWS_REWARD_SENT_BIG: + *result = GetRewardItem(data); + ResetSentRewardCounter(data); break; - case NEWS_VAL_INVALID: - case NEWS_VAL_NONE: - case NEWS_VAL_GET_MAX: + case NEWS_REWARD_NONE: + case NEWS_REWARD_WAITING: + case NEWS_REWARD_AT_MAX: break; } - return newsVal; + return rewardType; } -static u32 GetNewsId(struct WonderNewsMetadata *data) +static u32 GetRewardItem(struct WonderNewsMetadata *data) { - u32 id; + u32 itemId; data->newsType = WONDER_NEWS_NONE; - id = data->rand + 132; - data->rand = 0; - IncrementGetNewsCounter(data); - return id; + itemId = data->berry + FIRST_BERRY_INDEX - 1; + data->berry = 0; + IncrementRewardCounter(data); + return itemId; } -static void ResetSentNewsCounter(struct WonderNewsMetadata *data) +static void ResetSentRewardCounter(struct WonderNewsMetadata *data) { - data->sentCounter = 0; + data->sentRewardCounter = 0; } -static void IncrementSentNewsCounter(struct WonderNewsMetadata *data) +// Track number of times a reward was received (or attmepted to receive) for sending Wonder News to a link partner. +static void IncrementSentRewardCounter(struct WonderNewsMetadata *data) { - data->sentCounter++; - if (data->sentCounter > 4) - data->sentCounter = 4; + data->sentRewardCounter++; + if (data->sentRewardCounter > MAX_SENT_REWARD) + data->sentRewardCounter = MAX_SENT_REWARD; } -static void IncrementGetNewsCounter(struct WonderNewsMetadata *data) +static void IncrementRewardCounter(struct WonderNewsMetadata *data) { - data->getCounter++; - if (data->getCounter > 5) - data->getCounter = 5; + data->rewardCounter++; + if (data->rewardCounter > MAX_REWARD) + data->rewardCounter = MAX_REWARD; } -static u32 GetNewsValByNewsType(struct WonderNewsMetadata *data) +static u32 GetRewardType(struct WonderNewsMetadata *data) { - if (data->getCounter == 5) - return NEWS_VAL_GET_MAX; + if (data->rewardCounter == MAX_REWARD) + return NEWS_REWARD_AT_MAX; switch (data->newsType) { case WONDER_NEWS_NONE: - return NEWS_VAL_NONE; + return NEWS_REWARD_WAITING; case WONDER_NEWS_RECV_FRIEND: - return NEWS_VAL_RECV_FRIEND; + return NEWS_REWARD_RECV_SMALL; case WONDER_NEWS_RECV_WIRELESS: - return NEWS_VAL_RECV_WIRELESS; + return NEWS_REWARD_RECV_BIG; case WONDER_NEWS_SENT: - if (data->sentCounter < 3) - return NEWS_VAL_SENT; - return NEWS_VAL_SENT_MAX; + if (data->sentRewardCounter < MAX_SENT_REWARD - 1) + return NEWS_REWARD_SENT_SMALL; + return NEWS_REWARD_SENT_BIG; default: AGB_ASSERT(0); - return NEWS_VAL_INVALID; + return NEWS_REWARD_NONE; } } diff --git a/test/ability_blaze.c b/test/ability_blaze.c new file mode 100644 index 000000000000..259b863ec360 --- /dev/null +++ b/test/ability_blaze.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Blaze boosts Fire-type moves in a pinch", s16 damage) +{ + u16 hp; + PARAMETRIZE { hp = 99; } + PARAMETRIZE { hp = 33; } + GIVEN { + ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); + PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); MaxHP(99); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EMBER); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_GT(results[1].damage, results[0].damage); + } +} diff --git a/test/ability_cloud_nine.c b/test/ability_cloud_nine.c new file mode 100644 index 000000000000..02da15ee15d9 --- /dev/null +++ b/test/ability_cloud_nine.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Cloud Nine prevents weather effects") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SANDSTORM].effect == EFFECT_SANDSTORM); + PLAYER(SPECIES_PSYDUCK) { Ability(ABILITY_CLOUD_NINE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SANDSTORM); } + TURN {} + } SCENE { + NONE_OF { HP_BAR(player); } + } +} diff --git a/test/ability_compound_eyes.c b/test/ability_compound_eyes.c new file mode 100644 index 000000000000..97ab84dd2739 --- /dev/null +++ b/test/ability_compound_eyes.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") +{ + PASSES_RANDOMLY(91, 100); + GIVEN { + ASSUME(gBattleMoves[MOVE_THUNDER].accuracy == 70); + PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_COMPOUND_EYES); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THUNDER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER, player); + HP_BAR(opponent); + } +} + +// This fails even though the ability works correctly. The failure is due to +// a statistical anomaly in the test system where FISSURE hits 3 times more often +// than we expect. +SINGLE_BATTLE_TEST("Compound Eyes does not affect OHKO moves") +{ + KNOWN_FAILING; + PASSES_RANDOMLY(30, 100); + GIVEN { + ASSUME(gBattleMoves[MOVE_FISSURE].accuracy == 30); + ASSUME(gBattleMoves[MOVE_FISSURE].effect == EFFECT_OHKO); + PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_TINTED_LENS); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FISSURE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FISSURE, player); + HP_BAR(opponent, hp: 0); + } +} diff --git a/test/ability_cute_charm.c b/test/ability_cute_charm.c new file mode 100644 index 000000000000..5e089efdf26d --- /dev/null +++ b/test/ability_cute_charm.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "test_battle.h" + +// TODO: Currently PASSES_RANDOMLY is incapable of testing Cute Charm +// because it only activates 33% of the time, but we only want to +// measure the 50% of the time that the infatuation prevents our move. +SINGLE_BATTLE_TEST("Cute Charm inflicts infatuation on contact") +{ + u32 move; + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_SWIFT; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].flags & FLAG_MAKES_CONTACT); + ASSUME(!(gBattleMoves[MOVE_SWIFT].flags & FLAG_MAKES_CONTACT)); + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); } + OPPONENT(SPECIES_CLEFAIRY) { Gender(MON_FEMALE); Ability(ABILITY_CUTE_CHARM); } + } WHEN { + TURN { MOVE(player, move); } + TURN { MOVE(player, move); } + } SCENE { + if (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) { + ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); + MESSAGE("Foe Clefairy's Cute Charm infatuated Wobbuffet!"); + MESSAGE("Wobbuffet is in love with Foe Clefairy!"); + } else { + NOT ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); + NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); + NOT MESSAGE("Foe Clefairy's Cute Charm infatuated Wobbuffet!"); + NOT MESSAGE("Wobbuffet is in love with Foe Clefairy!"); + } + } +} + +SINGLE_BATTLE_TEST("Cute Charm cannot infatuate same gender") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); } + OPPONENT(SPECIES_CLEFAIRY) { Gender(MON_MALE); Ability(ABILITY_CUTE_CHARM); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + NOT ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + } +} diff --git a/test/ability_damp.c b/test/ability_damp.c new file mode 100644 index 000000000000..33d1ae466ac0 --- /dev/null +++ b/test/ability_damp.c @@ -0,0 +1,54 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Damp prevents explosion-like moves from enemies") +{ + u32 move; + PARAMETRIZE { move = MOVE_EXPLOSION; } + PARAMETRIZE { move = MOVE_SELF_DESTRUCT; } + PARAMETRIZE { move = MOVE_MIND_BLOWN; } + PARAMETRIZE { move = MOVE_MISTY_EXPLOSION; } + GIVEN { + PLAYER(SPECIES_PARAS) { Ability(ABILITY_DAMP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ABILITY_POPUP(player, ABILITY_DAMP); + NONE_OF { HP_BAR(player); HP_BAR(opponent); } + } +} + +SINGLE_BATTLE_TEST("Damp prevents explosion-like moves from self") +{ + u32 move; + PARAMETRIZE { move = MOVE_EXPLOSION; } + PARAMETRIZE { move = MOVE_SELF_DESTRUCT; } + PARAMETRIZE { move = MOVE_MIND_BLOWN; } + PARAMETRIZE { move = MOVE_MISTY_EXPLOSION; } + GIVEN { + PLAYER(SPECIES_PARAS) { Ability(ABILITY_DAMP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ABILITY_POPUP(player, ABILITY_DAMP); + NONE_OF { HP_BAR(player); HP_BAR(opponent); } + } +} + +SINGLE_BATTLE_TEST("Damp prevents damage from aftermath") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].flags & FLAG_MAKES_CONTACT); + PLAYER(SPECIES_PARAS) { Ability(ABILITY_DAMP); }; + OPPONENT(SPECIES_VOLTORB) { Ability(ABILITY_AFTERMATH); HP(1); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); SEND_OUT(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_AFTERMATH); + ABILITY_POPUP(player, ABILITY_DAMP); + NONE_OF { HP_BAR(player); } + } +} diff --git a/test/ability_drizzle.c b/test/ability_drizzle.c new file mode 100644 index 000000000000..1b99324763f9 --- /dev/null +++ b/test/ability_drizzle.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Drizzle summons rain", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_DRIZZLE; } + PARAMETRIZE { ability = ABILITY_DAMP; } + + GIVEN { + PLAYER(SPECIES_POLITOED) { Ability(ability); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BUBBLE); } + } SCENE { + if (ability == ABILITY_DRIZZLE) { + ABILITY_POPUP(player, ABILITY_DRIZZLE); + MESSAGE("Politoed's Drizzle made it rain!"); + } + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(1.5), results[0].damage); + } +} diff --git a/test/ability_flame_body.c b/test/ability_flame_body.c new file mode 100644 index 000000000000..303337693172 --- /dev/null +++ b/test/ability_flame_body.c @@ -0,0 +1,29 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Flame Body inflicts burn on contact") +{ + u32 move; + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_SWIFT; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].flags & FLAG_MAKES_CONTACT); + ASSUME(!(gBattleMoves[MOVE_SWIFT].flags & FLAG_MAKES_CONTACT)); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_MAGMAR) { Ability(ABILITY_FLAME_BODY); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + if (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) { + ABILITY_POPUP(opponent, ABILITY_FLAME_BODY); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, player); + MESSAGE("Foe Magmar's Flame Body burned Wobbuffet!"); + STATUS_ICON(player, burn: TRUE); + } else { + NOT ABILITY_POPUP(opponent, ABILITY_FLAME_BODY); + NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, player); + NOT MESSAGE("Foe Magmar's Flame Body burned Wobbuffet!"); + NOT STATUS_ICON(player, burn: TRUE); + } + } +} diff --git a/test/ability_immunity.c b/test/ability_immunity.c new file mode 100644 index 000000000000..fea2eb522541 --- /dev/null +++ b/test/ability_immunity.c @@ -0,0 +1,47 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Immunity prevents Poison Sting poison") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_POISON_STING].effect == EFFECT_POISON_HIT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SNORLAX) { Ability(ABILITY_IMMUNITY); } + } WHEN { + TURN { MOVE(player, MOVE_POISON_STING); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_STING, player); + NOT STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Immunity prevents Toxic bad poison") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SNORLAX) { Ability(ABILITY_IMMUNITY); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC); } + } SCENE { + MESSAGE("Wobbuffet used Toxic!"); + ABILITY_POPUP(opponent, ABILITY_IMMUNITY); + MESSAGE("Foe Snorlax's Immunity prevents poisoning!"); + NOT STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Immunity prevents Toxic Spikes poison") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TOXIC_SPIKES].effect == EFFECT_TOXIC_SPIKES); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SNORLAX) { Ability(ABILITY_IMMUNITY); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { SWITCH(opponent, 1); } + } SCENE { + NOT STATUS_ICON(opponent, poison: TRUE); + } +} diff --git a/test/ability_insomnia.c b/test/ability_insomnia.c new file mode 100644 index 000000000000..b9fe38753283 --- /dev/null +++ b/test/ability_insomnia.c @@ -0,0 +1,59 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Insomnia prevents sleep") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SPORE].effect == EFFECT_SLEEP); + PLAYER(SPECIES_DROWZEE) { Ability(ABILITY_INSOMNIA); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SPORE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_INSOMNIA); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); + STATUS_ICON(player, sleep: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Insomnia prevents yawn") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_YAWN].effect == EFFECT_YAWN); + PLAYER(SPECIES_DROWZEE) { Ability(ABILITY_INSOMNIA); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SPORE); } + TURN { } + TURN { } + } SCENE { + ABILITY_POPUP(player, ABILITY_INSOMNIA); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_YAWN, opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); + STATUS_ICON(player, sleep: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Insomnia prevents rest") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_REST].effect == EFFECT_REST); + PLAYER(SPECIES_DROWZEE) { Ability(ABILITY_INSOMNIA); HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_REST); } + } SCENE { + ABILITY_POPUP(player, ABILITY_INSOMNIA); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REST, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); + STATUS_ICON(player, sleep: TRUE); + HP_BAR(player); + } + } +} diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c new file mode 100644 index 000000000000..450ca640294c --- /dev/null +++ b/test/ability_intimidate.c @@ -0,0 +1,50 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); +} + +SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch out", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_INTIMIDATE; } + PARAMETRIZE { ability = ABILITY_RECKLESS; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_STARAPTOR) { Ability(ability); }; + } WHEN { + TURN { SWITCH(opponent, 1); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + if (ability == ABILITY_INTIMIDATE) + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 damage) +{ + u32 ability; + KNOWN_FAILING; + PARAMETRIZE { ability = ABILITY_INTIMIDATE; } + PARAMETRIZE { ability = ABILITY_RECKLESS; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(2); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); }; + OPPONENT(SPECIES_STARAPTOR) { Ability(ABILITY_INTIMIDATE); Speed(1); }; + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + if (ability == ABILITY_INTIMIDATE) + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/ability_limber.c b/test/ability_limber.c new file mode 100644 index 000000000000..4b428d0c10c9 --- /dev/null +++ b/test/ability_limber.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Limber prevents paralysis") +{ + GIVEN { + PLAYER(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_THUNDER_SHOCK); } + } SCENE { + HP_BAR(player); + NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); } + NONE_OF { STATUS_ICON(player, paralysis: TRUE); } + } +} diff --git a/test/ability_magic_bounce.c b/test/ability_magic_bounce.c new file mode 100644 index 000000000000..d52b93c4a54b --- /dev/null +++ b/test/ability_magic_bounce.c @@ -0,0 +1,84 @@ +#include "global.h" +#include "test_battle.h" + + +SINGLE_BATTLE_TEST("Magic Bounce bounces back status moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE);}; + } WHEN { + TURN { MOVE(player, MOVE_TOXIC); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + MESSAGE("Wynaut's Toxic was bounced back by Foe Espeon's Magic Bounce!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, opponent); + STATUS_ICON(player, badPoison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Magic Bounce bounces back powder moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].flags & FLAG_POWDER); + ASSUME(gBattleMoves[MOVE_STUN_SPORE].effect == EFFECT_PARALYZE); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE);}; + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + MESSAGE("Wynaut's Stun Spore was bounced back by Foe Espeon's Magic Bounce!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent); + STATUS_ICON(player, paralysis: TRUE); + } +} + +SINGLE_BATTLE_TEST("Magic Bounce cannot bounce back powder moves against Grass Types") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].flags & FLAG_POWDER); + ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); + PLAYER(SPECIES_ODDISH); + OPPONENT(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE);}; + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("Oddish's Stun Spore was bounced back by Foe Espeon's Magic Bounce!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent); + MESSAGE("It doesn't affect Oddish…"); + NOT STATUS_ICON(player, paralysis: TRUE); + } +} + + +DOUBLE_BATTLE_TEST("Magic Bounce bounces back moves hitting both foes at two foes") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_LEER].effect == EFFECT_DEFENSE_DOWN); + ASSUME(gBattleMoves[MOVE_LEER].target == MOVE_TARGET_BOTH); + PLAYER(SPECIES_ABRA); + PLAYER(SPECIES_KADABRA); + OPPONENT(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE);}; + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_LEER); } + } SCENE { + ABILITY_POPUP(opponentLeft, ABILITY_MAGIC_BOUNCE); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, playerLeft); + MESSAGE("Abra's Leer was bounced back by Foe Espeon's Magic Bounce!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Abra's defense fell!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Kadabra's defense fell!"); + // Also check if second original target gets hit by Leer as this was once bugged + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Wynaut's defense fell!"); + } +} diff --git a/test/ability_oblivious.c b/test/ability_oblivious.c new file mode 100644 index 000000000000..0708845ed167 --- /dev/null +++ b/test/ability_oblivious.c @@ -0,0 +1,68 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Oblivious prevents Infatuation") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_ATTRACT].effect == EFFECT_ATTRACT); + PLAYER(SPECIES_SLOWPOKE) { Ability(ABILITY_OBLIVIOUS); Gender(MON_MALE); }; + OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); }; + } WHEN { + TURN { MOVE(opponent, MOVE_ATTRACT); } + } SCENE { + ABILITY_POPUP(player, ABILITY_OBLIVIOUS); + NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); } + MESSAGE("It doesn't affect Slowpoke…"); + } +} + +SINGLE_BATTLE_TEST("Oblivious prevents Captivate") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_CAPTIVATE].effect == EFFECT_CAPTIVATE); + PLAYER(SPECIES_SLOWPOKE) { Ability(ABILITY_OBLIVIOUS); Gender(MON_MALE); }; + OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); }; + } WHEN { + TURN { MOVE(opponent, MOVE_ATTRACT); } + } SCENE { + ABILITY_POPUP(player, ABILITY_OBLIVIOUS); + NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } + MESSAGE("It doesn't affect Slowpoke…"); + } +} + +SINGLE_BATTLE_TEST("Oblivious prevents Taunt") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TAUNT].effect == EFFECT_TAUNT); + ASSUME(B_OBLIVIOUS_TAUNT >= GEN_6); + PLAYER(SPECIES_SLOWPOKE) { Ability(ABILITY_OBLIVIOUS); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TAUNT); } + TURN { MOVE(player, MOVE_SPORE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_OBLIVIOUS); + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_TAUNT, opponent); } + MESSAGE("It doesn't affect Slowpoke…"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); + } +} + +SINGLE_BATTLE_TEST("Oblivious prevents Intimidate") +{ + GIVEN { + ASSUME(B_UPDATED_INTIMIDATE >= GEN_8); + PLAYER(SPECIES_SLOWPOKE) { Ability(ABILITY_OBLIVIOUS); }; + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; + } WHEN { + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + ABILITY_POPUP(player, ABILITY_OBLIVIOUS); + NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } + MESSAGE("Slowpoke's attack was not lowered!"); + } +} diff --git a/test/ability_pastel_veil.c b/test/ability_pastel_veil.c new file mode 100644 index 000000000000..5d7a8f020353 --- /dev/null +++ b/test/ability_pastel_veil.c @@ -0,0 +1,169 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Pastel Veil prevents Poison Sting poison") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_POISON_STING].effect == EFFECT_POISON_HIT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + } WHEN { + TURN { MOVE(player, MOVE_POISON_STING); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_STING, player); + NOT STATUS_ICON(opponent, poison: TRUE); + } +} + +DOUBLE_BATTLE_TEST("Pastel Veil prevents Poison Sting poison on partner") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_POISON_STING].effect == EFFECT_POISON_HIT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_POISON_STING, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_STING, playerLeft); + NOT STATUS_ICON(opponentRight, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Pastel Veil immediately cures Mold Breaker poison") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); + PLAYER(SPECIES_DRILBUR) { Ability(ABILITY_MOLD_BREAKER); } + OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + STATUS_ICON(opponent, badPoison: TRUE); + ABILITY_POPUP(opponent, ABILITY_PASTEL_VEIL); + MESSAGE("Foe Ponyta's Pastel Veil cured its poison problem!"); + STATUS_ICON(opponent, none: TRUE); + } +} + +DOUBLE_BATTLE_TEST("Pastel Veil does not cure Mold Breaker poison on partner") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); + PLAYER(SPECIES_DRILBUR) { Ability(ABILITY_MOLD_BREAKER); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_TOXIC, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, playerLeft, target: opponentRight); + STATUS_ICON(opponentRight, badPoison: TRUE); + NOT STATUS_ICON(opponentRight, none: TRUE); + } +} + +SINGLE_BATTLE_TEST("Pastel Veil prevents Toxic bad poison") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC); } + } SCENE { + MESSAGE("Wobbuffet used Toxic!"); + ABILITY_POPUP(opponent, ABILITY_PASTEL_VEIL); + MESSAGE("Foe Ponyta is protected by a pastel veil!"); + NOT STATUS_ICON(opponent, badPoison: TRUE); + } +} + +DOUBLE_BATTLE_TEST("Pastel Veil prevents Toxic bad poison on partner") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_TOXIC, target: opponentRight); } + } SCENE { + MESSAGE("Wobbuffet used Toxic!"); + ABILITY_POPUP(opponentLeft, ABILITY_PASTEL_VEIL); + MESSAGE("Foe Wynaut is protected by a pastel veil!"); + NOT STATUS_ICON(opponentRight, badPoison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Pastel Veil prevents Toxic Spikes poison") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TOXIC_SPIKES].effect == EFFECT_TOXIC_SPIKES); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { SWITCH(opponent, 1); } + } SCENE { + MESSAGE("2 sent out Ponyta!"); + NOT STATUS_ICON(opponent, poison: TRUE); + } +} + +DOUBLE_BATTLE_TEST("Pastel Veil prevents Toxic Spikes poison on partner") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TOXIC_SPIKES].effect == EFFECT_TOXIC_SPIKES); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_TOXIC_SPIKES); } + TURN { SWITCH(opponentRight, 2); } + } SCENE { + MESSAGE("2 sent out Wynaut!"); + NOT STATUS_ICON(opponentRight, poison: TRUE); + } +} + +DOUBLE_BATTLE_TEST("Pastel Veil cures partner's poison on initial switch in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + } WHEN { + TURN {} + } SCENE { + MESSAGE("2 sent out Wobbuffet and Ponyta!"); + ABILITY_POPUP(opponentRight, ABILITY_PASTEL_VEIL); + MESSAGE("Foe Wobbuffet was cured of its poisoning!"); + STATUS_ICON(opponentLeft, none: TRUE); + } +} + +DOUBLE_BATTLE_TEST("Pastel Veil cures partner's poison on switch in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + } WHEN { + TURN { SWITCH(opponentRight, 2); } + } SCENE { + MESSAGE("2 sent out Ponyta!"); + ABILITY_POPUP(opponentRight, ABILITY_PASTEL_VEIL); + MESSAGE("Foe Wobbuffet was cured of its poisoning!"); + STATUS_ICON(opponentLeft, none: TRUE); + } +} diff --git a/test/ability_poison_point.c b/test/ability_poison_point.c new file mode 100644 index 000000000000..a85edd85ba71 --- /dev/null +++ b/test/ability_poison_point.c @@ -0,0 +1,30 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Poison Point inflicts poison on contact") +{ + u32 move; + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_SWIFT; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].flags & FLAG_MAKES_CONTACT); + ASSUME(!(gBattleMoves[MOVE_SWIFT].flags & FLAG_MAKES_CONTACT)); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_NIDORAN_M) { Ability(ABILITY_POISON_POINT); } + } WHEN { + TURN { MOVE(player, move); } + TURN {} + } SCENE { + if (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) { + ABILITY_POPUP(opponent, ABILITY_POISON_POINT); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); + MESSAGE("Wobbuffet was poisoned by Foe Nidoran♂'s Poison Point!"); + STATUS_ICON(player, poison: TRUE); + } else { + NOT ABILITY_POPUP(opponent, ABILITY_POISON_POINT); + NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); + NOT MESSAGE("Wobbuffet was poisoned by Foe Nidoran♂'s Poison Point!"); + NOT STATUS_ICON(player, poison: TRUE); + } + } +} diff --git a/test/ability_sand_veil.c b/test/ability_sand_veil.c new file mode 100644 index 000000000000..5d2325140d13 --- /dev/null +++ b/test/ability_sand_veil.c @@ -0,0 +1,30 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Sand Veil prevents damage from sandstorm") +{ + GIVEN { + PLAYER(SPECIES_SANDSHREW) { Ability(ABILITY_SAND_VEIL); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SANDSTORM); } + TURN {} + } SCENE { + NONE_OF { HP_BAR(player); } + } +} + +SINGLE_BATTLE_TEST("Sand Veil reduces accuracy during sandstorm") +{ + PASSES_RANDOMLY(4,5); + GIVEN { + ASSUME(gBattleMoves[MOVE_POUND].accuracy == 100); + PLAYER(SPECIES_SANDSHREW) { Ability(ABILITY_SAND_VEIL); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SANDSTORM); } + TURN { MOVE(opponent, MOVE_POUND); } + } SCENE { + HP_BAR(player); + } +} diff --git a/test/ability_speed_boost.c b/test/ability_speed_boost.c new file mode 100644 index 000000000000..b3e128931a32 --- /dev/null +++ b/test/ability_speed_boost.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Speed Boost gradually boosts speed") +{ + GIVEN { + PLAYER(SPECIES_TORCHIC) { Ability(ABILITY_SPEED_BOOST); Speed(99); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }; + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("Torchic used Celebrate!"); + ABILITY_POPUP(player, ABILITY_SPEED_BOOST); + MESSAGE("Torchic's Speed Boost raised its SPEED!"); + MESSAGE("Torchic used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + } +} diff --git a/test/ability_static.c b/test/ability_static.c new file mode 100644 index 000000000000..022efa5bb81e --- /dev/null +++ b/test/ability_static.c @@ -0,0 +1,29 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Static inflicts paralysis on contact") +{ + u32 move; + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_SWIFT; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].flags & FLAG_MAKES_CONTACT); + ASSUME(!(gBattleMoves[MOVE_SWIFT].flags & FLAG_MAKES_CONTACT)); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIKACHU) { Ability(ABILITY_STATIC); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + if (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) { + ABILITY_POPUP(opponent, ABILITY_STATIC); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); + MESSAGE("Foe Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); + STATUS_ICON(player, paralysis: TRUE); + } else { + NOT ABILITY_POPUP(opponent, ABILITY_STATIC); + NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); + NOT MESSAGE("Foe Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); + NOT STATUS_ICON(player, paralysis: TRUE); + } + } +} diff --git a/test/ability_stench.c b/test/ability_stench.c new file mode 100644 index 000000000000..7285ee768c61 --- /dev/null +++ b/test/ability_stench.c @@ -0,0 +1,34 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") +{ + PASSES_RANDOMLY(1,10); + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].power > 0); + PLAYER(SPECIES_STUNKY) { Ability(ABILITY_STENCH); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Foe Wobbuffet flinched!"); + } +} + +SINGLE_BATTLE_TEST("Stench does not stack with King's Rock") +{ + PASSES_RANDOMLY(1,10); + GIVEN { + ASSUME(gItems[ITEM_KINGS_ROCK].holdEffect == HOLD_EFFECT_FLINCH); + ASSUME(gBattleMoves[MOVE_TACKLE].power > 0); + + PLAYER(SPECIES_STUNKY) { Ability(ABILITY_STENCH); Item(ITEM_KINGS_ROCK); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Foe Wobbuffet flinched!"); + } +} + +// TODO: Test against interaction with multi hits diff --git a/test/ability_sturdy.c b/test/ability_sturdy.c new file mode 100644 index 000000000000..42cdab11fe98 --- /dev/null +++ b/test/ability_sturdy.c @@ -0,0 +1,47 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Sturdy prevents OHKO moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_FISSURE].effect == EFFECT_OHKO); + PLAYER(SPECIES_GEODUDE) { Ability(ABILITY_STURDY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_FISSURE); } + } SCENE { + MESSAGE("Foe Wobbuffet used Fissure!"); + ABILITY_POPUP(player, ABILITY_STURDY); + MESSAGE("Geodude was protected by Sturdy!"); + } THEN { + EXPECT_EQ(player->hp, player->maxHP); + } +} + +SINGLE_BATTLE_TEST("Sturdy prevents OHKOs") +{ + GIVEN { + PLAYER(SPECIES_GEODUDE) { Ability(ABILITY_STURDY); MaxHP(100); HP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SEISMIC_TOSS); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SEISMIC_TOSS, opponent); + HP_BAR(player, hp: 1); + ABILITY_POPUP(player, ABILITY_STURDY); + MESSAGE("Geodude endured the hit using Sturdy!"); + } +} + +SINGLE_BATTLE_TEST("Sturdy does not prevent non-OHKOs") +{ + GIVEN { + PLAYER(SPECIES_GEODUDE) { Ability(ABILITY_STURDY); MaxHP(100); HP(99); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SEISMIC_TOSS); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SEISMIC_TOSS, opponent); + HP_BAR(player, hp: 0); + } +} diff --git a/test/ability_volt_absorb.c b/test/ability_volt_absorb.c new file mode 100644 index 000000000000..f485f6557493 --- /dev/null +++ b/test/ability_volt_absorb.c @@ -0,0 +1,85 @@ +#include "global.h" +#include "test_battle.h" + +#define TEST_MAX_HP (100) + +SINGLE_BATTLE_TEST("Volt Absorb heals 25% when hit by electric type moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_THUNDER_SHOCK].type == TYPE_ELECTRIC); + PLAYER(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); HP(1); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_THUNDER_SHOCK); } + } SCENE { + ABILITY_POPUP(player, ABILITY_VOLT_ABSORB); + HP_BAR(player, hp: TEST_MAX_HP / 4 + 1); + MESSAGE("Jolteon restored HP using its Volt Absorb!"); + } +} + +SINGLE_BATTLE_TEST("Volt Absorb does not activate if protected") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_THUNDER_SHOCK].type == TYPE_ELECTRIC); + PLAYER(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); HP(1); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PROTECT); MOVE(opponent, MOVE_THUNDER_SHOCK); } + } SCENE { + NONE_OF { ABILITY_POPUP(player, ABILITY_VOLT_ABSORB); HP_BAR(player); MESSAGE("Jolteon restored HP using its Volt Absorb!"); } + } +} + +SINGLE_BATTLE_TEST("Volt Absorb activates on status moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_THUNDER_WAVE].type == TYPE_ELECTRIC); + ASSUME(gBattleMoves[MOVE_THUNDER_WAVE].split == SPLIT_STATUS); + PLAYER(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); HP(1); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_THUNDER_WAVE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_VOLT_ABSORB); + HP_BAR(player, hp: TEST_MAX_HP / 4 + 1); + MESSAGE("Jolteon restored HP using its Volt Absorb!"); + } +} + +SINGLE_BATTLE_TEST("Volt Absorb is only triggered once on multi strike moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_FURY_SWIPES].type == TYPE_NORMAL); + ASSUME(gBattleMoves[MOVE_FURY_SWIPES].effect == EFFECT_MULTI_HIT); + PLAYER(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); HP(1); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_GRAVELER_ALOLAN) { Ability(ABILITY_GALVANIZE); }; + } WHEN { + TURN { MOVE(opponent, MOVE_FURY_SWIPES); } + } SCENE { + ABILITY_POPUP(player, ABILITY_VOLT_ABSORB); + HP_BAR(player, hp: TEST_MAX_HP / 4 + 1); + MESSAGE("Jolteon restored HP using its Volt Absorb!"); + } +} + +SINGLE_BATTLE_TEST("Volt Absorb prevents Cell Battery from activating") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_THUNDER_SHOCK].type == TYPE_ELECTRIC); + PLAYER(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); HP(1); MaxHP(TEST_MAX_HP); Item(ITEM_CELL_BATTERY); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_THUNDER_SHOCK); } + } SCENE { + ABILITY_POPUP(player, ABILITY_VOLT_ABSORB); + HP_BAR(player, hp: TEST_MAX_HP / 4 + 1); + MESSAGE("Jolteon restored HP using its Volt Absorb!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Cell Battery, the attack of Jolteon rose!"); + } + + } +} diff --git a/test/ability_water_absorb.c b/test/ability_water_absorb.c new file mode 100644 index 000000000000..1748ee7ff5d9 --- /dev/null +++ b/test/ability_water_absorb.c @@ -0,0 +1,87 @@ +#include "global.h" +#include "test_battle.h" + +#define TEST_MAX_HP (100) + +SINGLE_BATTLE_TEST("Water Absorb heals 25% when hit by water type moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_BUBBLE].type == TYPE_WATER); + PLAYER(SPECIES_POLIWAG) { Ability(ABILITY_WATER_ABSORB); HP(1); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_BUBBLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_WATER_ABSORB); + HP_BAR(player, hp: TEST_MAX_HP / 4 + 1); + MESSAGE("Poliwag restored HP using its Water Absorb!"); + } +} + +SINGLE_BATTLE_TEST("Water Absorb does not activate if protected") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_BUBBLE].type == TYPE_WATER); + PLAYER(SPECIES_POLIWAG) { Ability(ABILITY_WATER_ABSORB); HP(1); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PROTECT); MOVE(opponent, MOVE_BUBBLE); } + } SCENE { + NONE_OF { ABILITY_POPUP(player, ABILITY_WATER_ABSORB); HP_BAR(player); MESSAGE("Poliwag restored HP using its Water Absorb!"); } + } +} + +SINGLE_BATTLE_TEST("Water Absorb activates on status moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SOAK].type == TYPE_WATER); + ASSUME(gBattleMoves[MOVE_SOAK].split == SPLIT_STATUS); + PLAYER(SPECIES_POLIWAG) { Ability(ABILITY_WATER_ABSORB); HP(1); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SOAK); } + } SCENE { + ABILITY_POPUP(player, ABILITY_WATER_ABSORB); + HP_BAR(player, hp: TEST_MAX_HP / 4 + 1); + MESSAGE("Poliwag restored HP using its Water Absorb!"); + } +} + +SINGLE_BATTLE_TEST("Water Absorb is only triggered once on multi strike moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_WATER_SHURIKEN].type == TYPE_WATER); + ASSUME(gBattleMoves[MOVE_WATER_SHURIKEN].effect == EFFECT_MULTI_HIT); + PLAYER(SPECIES_POLIWAG) { Ability(ABILITY_WATER_ABSORB); HP(1); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_WATER_SHURIKEN); } + } SCENE { + ABILITY_POPUP(player, ABILITY_WATER_ABSORB); + HP_BAR(player, hp: TEST_MAX_HP / 4 + 1); + MESSAGE("Poliwag restored HP using its Water Absorb!"); + } +} + +SINGLE_BATTLE_TEST("Water Absorb prevents Items from activating") +{ + u32 item; + PARAMETRIZE { item = ITEM_ABSORB_BULB; } + PARAMETRIZE { item = ITEM_LUMINOUS_MOSS; } + GIVEN { + ASSUME(gBattleMoves[MOVE_BUBBLE].type == TYPE_WATER); + PLAYER(SPECIES_POLIWAG) { Ability(ABILITY_WATER_ABSORB); HP(1); MaxHP(TEST_MAX_HP); Item(item); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_BUBBLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_WATER_ABSORB); + HP_BAR(player, hp: TEST_MAX_HP / 4 + 1); + MESSAGE("Poliwag restored HP using its Water Absorb!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + } + + } +} diff --git a/test/hold_effect_leftovers.c b/test/hold_effect_leftovers.c new file mode 100644 index 000000000000..ee65205872fa --- /dev/null +++ b/test/hold_effect_leftovers.c @@ -0,0 +1,54 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + gItems[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS; +}; + +SINGLE_BATTLE_TEST("Leftovers recovers 1/16th HP at end of turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); Item(ITEM_LEFTOVERS); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); + HP_BAR(player, damage: -maxHP / 16); + } +} + +SINGLE_BATTLE_TEST("Leftovers does nothing if max HP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); + HP_BAR(player); + } + } +} + +SINGLE_BATTLE_TEST("Leftovers does nothing if Heal Block applies") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); Item(ITEM_LEFTOVERS); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_HEAL_BLOCK); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); + HP_BAR(player); + } + } +} diff --git a/test/mega_evolution.c b/test/mega_evolution.c new file mode 100644 index 000000000000..13e9cd5b22a6 --- /dev/null +++ b/test/mega_evolution.c @@ -0,0 +1,68 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Venusaur can Mega Evolve holding Venusaurite") +{ + GIVEN { + PLAYER(SPECIES_VENUSAUR) { Item(ITEM_VENUSAURITE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); } + } SCENE { + MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); + MESSAGE("Venusaur has Mega Evolved into Mega Venusaur!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_VENUSAUR_MEGA); + } +} + +SINGLE_BATTLE_TEST("Rayquaza can Mega Evolve knowing Dragon Ascent") +{ + GIVEN { + PLAYER(SPECIES_RAYQUAZA) { Moves(MOVE_DRAGON_ASCENT, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); } + } SCENE { + MESSAGE("1's fervent wish has reached Rayquaza!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); + MESSAGE("Rayquaza has Mega Evolved into Mega Rayquaza!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_RAYQUAZA_MEGA); + } +} + +SINGLE_BATTLE_TEST("Mega Evolution affects turn order") +{ + GIVEN { + ASSUME(B_MEGA_EVO_TURN_ORDER); + PLAYER(SPECIES_DIANCIE) { Item(ITEM_DIANCITE); Speed(105); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(106); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); } + } SCENE { + MESSAGE("Diancie used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + } THEN { + ASSUME(player->speed == 225); + } +} + +SINGLE_BATTLE_TEST("Abilities replaced by Mega Evolution do not affect turn order") +{ + GIVEN { + ASSUME(B_MEGA_EVO_TURN_ORDER); + ASSUME(gSpeciesInfo[SPECIES_SABLEYE_MEGA].abilities[0] != ABILITY_STALL + && gSpeciesInfo[SPECIES_SABLEYE_MEGA].abilities[1] != ABILITY_STALL); + PLAYER(SPECIES_SABLEYE) { Item(ITEM_SABLENITE); Ability(ABILITY_STALL); Speed(105); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(44); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); } + } SCENE { + MESSAGE("Sableye used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + } THEN { + ASSUME(player->speed == 45); + } +} diff --git a/test/move.c b/test/move.c new file mode 100644 index 000000000000..d7e759f27a54 --- /dev/null +++ b/test/move.c @@ -0,0 +1,158 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Accuracy controls the proportion of misses") +{ + u32 move; + PARAMETRIZE { move = MOVE_DYNAMIC_PUNCH; } + PARAMETRIZE { move = MOVE_THUNDER; } + PARAMETRIZE { move = MOVE_HYDRO_PUMP; } + PARAMETRIZE { move = MOVE_RAZOR_LEAF; } + PARAMETRIZE { move = MOVE_SCRATCH; } + ASSUME(0 < gBattleMoves[move].accuracy && gBattleMoves[move].accuracy <= 100); + PASSES_RANDOMLY(gBattleMoves[move].accuracy, 100); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + } +} + +SINGLE_BATTLE_TEST("Secondary Effect Chance controls the proportion of secondary effects") +{ + u32 move; + PARAMETRIZE { move = MOVE_THUNDER_SHOCK; } + PARAMETRIZE { move = MOVE_DISCHARGE; } + PARAMETRIZE { move = MOVE_NUZZLE; } + ASSUME(gBattleMoves[move].accuracy == 100); + ASSUME(gBattleMoves[move].effect == EFFECT_PARALYZE_HIT); + ASSUME(0 < gBattleMoves[move].secondaryEffectChance && gBattleMoves[move].secondaryEffectChance <= 100); + PASSES_RANDOMLY(gBattleMoves[move].secondaryEffectChance, 100); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + STATUS_ICON(opponent, paralysis: TRUE); + } +} + +SINGLE_BATTLE_TEST("Turn order is determined by priority") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_QUICK_ATTACK].priority > gBattleMoves[MOVE_TACKLE].priority); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_QUICK_ATTACK); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Turn order is determined by speed if priority ties") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } + } WHEN { + TURN { MOVE(player, MOVE_QUICK_ATTACK); MOVE(opponent, MOVE_QUICK_ATTACK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, opponent); + } +} + +SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and speed tie") +{ + PASSES_RANDOMLY(1, 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } + } WHEN { + TURN { MOVE(player, MOVE_QUICK_ATTACK); MOVE(opponent, MOVE_QUICK_ATTACK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, opponent); + } +} + +SINGLE_BATTLE_TEST("Critical hits occur at a 1/24 rate") +{ + ASSUME(B_CRIT_CHANCE >= GEN_7); + ASSUME(gBattleMoves[MOVE_SCRATCH].accuracy == 100); + PASSES_RANDOMLY(100 / 24, 100); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + MESSAGE("It's a critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Critical hits deal 50% more damage", s16 damage) +{ + bool32 criticalHit; + PARAMETRIZE { criticalHit = FALSE; } + PARAMETRIZE { criticalHit = TRUE; } + GIVEN { + ASSUME(B_CRIT_MULTIPLIER >= GEN_6); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH, criticalHit: criticalHit); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Critical hits do not ignore positive stat stages", s16 damage) +{ + u32 move; + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_HOWL; } + PARAMETRIZE { move = MOVE_TAIL_WHIP; } + GIVEN { + ASSUME(gBattleMoves[MOVE_SCRATCH].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + TURN { MOVE(player, MOVE_SCRATCH, criticalHit: TRUE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } THEN { + if (i > 0) + EXPECT_LT(results[0].damage, results[i].damage); + } +} + +SINGLE_BATTLE_TEST("Critical hits ignore negative stat stages", s16 damage) +{ + u32 move; + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_HARDEN; } + PARAMETRIZE { move = MOVE_GROWL; } + GIVEN { + ASSUME(gBattleMoves[MOVE_SCRATCH].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + TURN { MOVE(player, MOVE_SCRATCH, criticalHit: TRUE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } THEN { + if (i > 0) + EXPECT_EQ(results[0].damage, results[i].damage); + } +} diff --git a/test/move_effect_absorb.c b/test/move_effect_absorb.c new file mode 100644 index 000000000000..2ea49ef9e241 --- /dev/null +++ b/test/move_effect_absorb.c @@ -0,0 +1,41 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_ABSORB].effect == EFFECT_ABSORB); +} + +SINGLE_BATTLE_TEST("Absorb recovers 50% of the damage dealt") +{ + s16 damage; + s16 healed; + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ABSORB); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); + HP_BAR(opponent, captureDamage: &damage); + HP_BAR(player, captureDamage: &healed); + } THEN { + EXPECT_MUL_EQ(damage, Q_4_12(-0.5), healed); + } +} + +SINGLE_BATTLE_TEST("Absorb fails if Heal Block applies") +{ + ASSUME(B_HEAL_BLOCKING >= GEN_6); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_HEAL_BLOCK); MOVE(player, MOVE_ABSORB); } + } SCENE { + MESSAGE("Wobbuffet was prevented from healing!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); + NOT HP_BAR(opponent); + NOT HP_BAR(player); + } +} diff --git a/test/move_effect_accuracy_down.c b/test/move_effect_accuracy_down.c new file mode 100644 index 000000000000..2a90d8ea25d1 --- /dev/null +++ b/test/move_effect_accuracy_down.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_SAND_ATTACK].effect == EFFECT_ACCURACY_DOWN); +} + +SINGLE_BATTLE_TEST("Sand Attack lowers Accuracy") +{ + ASSUME(gBattleMoves[MOVE_SCRATCH].accuracy == 100); + PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SAND_ATTACK); MOVE(opponent, MOVE_SCRATCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SAND_ATTACK, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's accuracy fell!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); + } +} diff --git a/test/move_effect_after_you.c b/test/move_effect_after_you.c new file mode 100644 index 000000000000..a488d7a8c501 --- /dev/null +++ b/test/move_effect_after_you.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_AFTER_YOU].effect == EFFECT_AFTER_YOU); +} + +DOUBLE_BATTLE_TEST("After You makes the target move after user") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + PLAYER(SPECIES_WYNAUT) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(3); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { + MOVE(playerLeft, MOVE_AFTER_YOU, target: playerRight); + MOVE(playerRight, MOVE_CELEBRATE); + MOVE(opponentLeft, MOVE_CELEBRATE); + MOVE(opponentRight, MOVE_CELEBRATE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_AFTER_YOU, playerLeft); + MESSAGE("Wynaut took the kind offer!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + } +} + +DOUBLE_BATTLE_TEST("After You does nothing if the target has already moved") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + PLAYER(SPECIES_WYNAUT) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(3); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { + MOVE(playerLeft, MOVE_CELEBRATE); + MOVE(playerRight, MOVE_CELEBRATE); + MOVE(opponentLeft, MOVE_CELEBRATE); + MOVE(opponentRight, MOVE_AFTER_YOU, target: opponentLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + MESSAGE("Foe Wynaut used After You!"); + MESSAGE("But it failed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + } +} diff --git a/test/move_effect_attack_down.c b/test/move_effect_attack_down.c new file mode 100644 index 000000000000..6333bbea1f0e --- /dev/null +++ b/test/move_effect_attack_down.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_GROWL].effect == EFFECT_ATTACK_DOWN); +} + +SINGLE_BATTLE_TEST("Growl lowers Attack", s16 damage) +{ + bool32 lowerAttack; + PARAMETRIZE { lowerAttack = FALSE; } + PARAMETRIZE { lowerAttack = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (lowerAttack) TURN { MOVE(player, MOVE_GROWL); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (lowerAttack) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's attack fell!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(1.5), results[0].damage); + } +} diff --git a/test/move_effect_attack_up.c b/test/move_effect_attack_up.c new file mode 100644 index 000000000000..7b57fa0d2680 --- /dev/null +++ b/test/move_effect_attack_up.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_MEDITATE].effect == EFFECT_ATTACK_UP); +} + +SINGLE_BATTLE_TEST("Meditate raises Attack", s16 damage) +{ + bool32 raiseAttack; + PARAMETRIZE { raiseAttack = FALSE; } + PARAMETRIZE { raiseAttack = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (raiseAttack) TURN { MOVE(player, MOVE_MEDITATE); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + if (raiseAttack) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MEDITATE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's attack rose!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/move_effect_attack_up_user_ally.c b/test/move_effect_attack_up_user_ally.c new file mode 100644 index 000000000000..e98df30d8ed8 --- /dev/null +++ b/test/move_effect_attack_up_user_ally.c @@ -0,0 +1,65 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_HOWL].effect == EFFECT_ATTACK_UP_USER_ALLY); +} + +SINGLE_BATTLE_TEST("Howl raises user's Attack", s16 damage) +{ + bool32 raiseAttack; + PARAMETRIZE { raiseAttack = FALSE; } + PARAMETRIZE { raiseAttack = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (raiseAttack) TURN { MOVE(player, MOVE_HOWL); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + if (raiseAttack) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HOWL, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's attack rose!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +DOUBLE_BATTLE_TEST("Howl raises user's and partner's Attack", s16 damageLeft, s16 damageRight) +{ + bool32 raiseAttack; + PARAMETRIZE { raiseAttack = FALSE; } + PARAMETRIZE { raiseAttack = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET) { Speed(15); }; + PLAYER(SPECIES_WYNAUT) { Speed(10); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(13); }; + OPPONENT(SPECIES_WYNAUT) { Speed(12); }; + } WHEN { + if (raiseAttack) TURN { MOVE(playerLeft, MOVE_HOWL); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + TURN { MOVE(playerRight, MOVE_TACKLE, target: opponentRight); } + } SCENE { + if (raiseAttack) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HOWL, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Wobbuffet's attack rose!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Wynaut's attack rose!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + HP_BAR(opponentLeft, captureDamage: &results[i].damageLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + HP_BAR(opponentRight, captureDamage: &results[i].damageRight); + } FINALLY { + EXPECT_MUL_EQ(results[0].damageLeft, Q_4_12(1.5), results[1].damageLeft); + EXPECT_MUL_EQ(results[0].damageRight, Q_4_12(1.5), results[1].damageRight); + } +} diff --git a/test/move_effect_bide.c b/test/move_effect_bide.c new file mode 100644 index 000000000000..3a5c38735327 --- /dev/null +++ b/test/move_effect_bide.c @@ -0,0 +1,34 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_BIDE].effect == EFFECT_BIDE); +} + +SINGLE_BATTLE_TEST("Bide deals twice the taken damage over two turns") +{ + s16 damage1; + s16 damage2; + s16 bideDamage; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BIDE); MOVE(opponent, MOVE_TACKLE); } + TURN { SKIP_TURN(player); MOVE(opponent, MOVE_TACKLE); } + TURN { SKIP_TURN(player); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BIDE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &damage1); + MESSAGE("Wobbuffet is storing energy!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &damage2); + MESSAGE("Wobbuffet unleashed energy!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BIDE, player); + HP_BAR(opponent, captureDamage: &bideDamage); + } FINALLY { + EXPECT_EQ(bideDamage, damage1 + damage2); + } +} diff --git a/test/move_effect_burn_hit.c b/test/move_effect_burn_hit.c new file mode 100644 index 000000000000..88fef17cb8d2 --- /dev/null +++ b/test/move_effect_burn_hit.c @@ -0,0 +1,38 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_EMBER].effect == EFFECT_BURN_HIT); +} + +SINGLE_BATTLE_TEST("Ember inflicts burn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EMBER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); + STATUS_ICON(opponent, burn: TRUE); + } +} + +SINGLE_BATTLE_TEST("Ember cannot burn a Fire-type") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_CHARMANDER].types[0] == TYPE_FIRE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_CHARMANDER); + } WHEN { + TURN { MOVE(player, MOVE_EMBER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); + NOT STATUS_ICON(opponent, burn: TRUE); + } +} diff --git a/test/move_effect_defense_down.c b/test/move_effect_defense_down.c new file mode 100644 index 000000000000..6e5a45e8480c --- /dev/null +++ b/test/move_effect_defense_down.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TAIL_WHIP].effect == EFFECT_DEFENSE_DOWN); +} + +SINGLE_BATTLE_TEST("Tail Whip lowers Defense", s16 damage) +{ + bool32 lowerDefense; + PARAMETRIZE { lowerDefense = FALSE; } + PARAMETRIZE { lowerDefense = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (lowerDefense) TURN { MOVE(player, MOVE_TAIL_WHIP); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + if (lowerDefense) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAIL_WHIP, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's defense fell!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/move_effect_defense_up.c b/test/move_effect_defense_up.c new file mode 100644 index 000000000000..8db9a7f7e485 --- /dev/null +++ b/test/move_effect_defense_up.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_HARDEN].effect == EFFECT_DEFENSE_UP); +} + +SINGLE_BATTLE_TEST("Harden raises Defense", s16 damage) +{ + bool32 raiseDefense; + PARAMETRIZE { raiseDefense = FALSE; } + PARAMETRIZE { raiseDefense = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (raiseDefense) TURN { MOVE(player, MOVE_HARDEN); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (raiseDefense) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HARDEN, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's defense rose!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(1.5), results[0].damage); + } +} diff --git a/test/move_effect_dream_eater.c b/test/move_effect_dream_eater.c new file mode 100644 index 000000000000..fa17b94a6266 --- /dev/null +++ b/test/move_effect_dream_eater.c @@ -0,0 +1,54 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_DREAM_EATER].effect == EFFECT_DREAM_EATER); +} + +SINGLE_BATTLE_TEST("Dream Eater recovers 50% of the damage dealt") +{ + s16 damage; + s16 healed; + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } + } WHEN { + TURN { MOVE(player, MOVE_DREAM_EATER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DREAM_EATER, player); + HP_BAR(opponent, captureDamage: &damage); + HP_BAR(player, captureDamage: &healed); + } THEN { + EXPECT_MUL_EQ(damage, Q_4_12(-1.0/2.0), healed); + } +} + +SINGLE_BATTLE_TEST("Dream Eater fails on awake targets") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DREAM_EATER); } + } SCENE { + MESSAGE("Wobbuffet used Dream Eater!"); + MESSAGE("Foe Wobbuffet wasn't affected!"); + } +} + +SINGLE_BATTLE_TEST("Dream Eater fails if Heal Block applies") +{ + ASSUME(B_HEAL_BLOCKING >= GEN_6); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_HEAL_BLOCK); MOVE(player, MOVE_DREAM_EATER); } + } SCENE { + MESSAGE("Wobbuffet was prevented from healing!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DREAM_EATER, player); + NOT HP_BAR(opponent); + NOT HP_BAR(player); + } +} diff --git a/test/move_effect_encore.c b/test/move_effect_encore.c new file mode 100644 index 000000000000..f8a178512a4a --- /dev/null +++ b/test/move_effect_encore.c @@ -0,0 +1,54 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_ENCORE].effect == EFFECT_ENCORE); +} + +SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 2 turns") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_ENCORE); } + TURN { FORCED_MOVE(player); } + TURN { FORCED_MOVE(player); } + TURN { MOVE(player, MOVE_SPLASH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, player); + } +} + +SINGLE_BATTLE_TEST("Encore has no effect if no previous move") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Foe Wobbuffet used Encore!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Encore overrides the chosen move if it occurs first") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_SPLASH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + } +} diff --git a/test/move_effect_evasion_up.c b/test/move_effect_evasion_up.c new file mode 100644 index 000000000000..d14d15334465 --- /dev/null +++ b/test/move_effect_evasion_up.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_DOUBLE_TEAM].effect == EFFECT_EVASION_UP); +} + +SINGLE_BATTLE_TEST("Double Team raises Evasion") +{ + ASSUME(gBattleMoves[MOVE_SCRATCH].accuracy == 100); + PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DOUBLE_TEAM); MOVE(opponent, MOVE_SCRATCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_TEAM, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's evasiveness rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); + } +} diff --git a/test/move_effect_explosion.c b/test/move_effect_explosion.c new file mode 100644 index 000000000000..872f3f709054 --- /dev/null +++ b/test/move_effect_explosion.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); +} + +SINGLE_BATTLE_TEST("Explosion causes the user to faint") +{ + u16 remainingHP; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + } +} + +SINGLE_BATTLE_TEST("Explosion causes the user to faint even if it misses") +{ + u16 remainingHP; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION, hit: FALSE); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + } +} + +SINGLE_BATTLE_TEST("Explosion causes the user to faint even if it has no effect") +{ + u16 remainingHP; + GIVEN { + ASSUME(gBattleMoves[MOVE_EXPLOSION].type == TYPE_NORMAL); + ASSUME(gSpeciesInfo[SPECIES_GASTLY].types[0] == TYPE_GHOST); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GASTLY); + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + MESSAGE("It doesn't affect Foe Gastly…"); + NOT HP_BAR(opponent); + } +} diff --git a/test/move_effect_freeze_hit.c b/test/move_effect_freeze_hit.c new file mode 100644 index 000000000000..bb0878d0d9cd --- /dev/null +++ b/test/move_effect_freeze_hit.c @@ -0,0 +1,38 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_POWDER_SNOW].effect == EFFECT_FREEZE_HIT); +} + +SINGLE_BATTLE_TEST("Powder Snow inflicts freeze") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_POWDER_SNOW); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER_SNOW, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); + STATUS_ICON(opponent, freeze: TRUE); + } +} + +SINGLE_BATTLE_TEST("Powder Snow cannot freeze an Ice-type") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_SNORUNT].types[0] == TYPE_ICE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SNORUNT); + } WHEN { + TURN { MOVE(player, MOVE_POWDER_SNOW); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER_SNOW, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); + NOT STATUS_ICON(opponent, freeze: TRUE); + } +} diff --git a/test/move_effect_haze.c b/test/move_effect_haze.c new file mode 100644 index 000000000000..bd43c6947dc2 --- /dev/null +++ b/test/move_effect_haze.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_HAZE].effect == EFFECT_HAZE); +} + +SINGLE_BATTLE_TEST("Haze resets stat changes", s16 damage) +{ + bool32 haze; + PARAMETRIZE { haze = FALSE; } + PARAMETRIZE { haze = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_MEDITATE].effect == EFFECT_ATTACK_UP); + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (haze) TURN { MOVE(player, MOVE_MEDITATE); MOVE(opponent, MOVE_HAZE); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + if (haze) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HAZE, opponent); + MESSAGE("All stat changes were eliminated!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} diff --git a/test/move_effect_hex.c b/test/move_effect_hex.c new file mode 100644 index 000000000000..2847aeb1798d --- /dev/null +++ b/test/move_effect_hex.c @@ -0,0 +1,33 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_HEX].effect == EFFECT_HEX); +} + +SINGLE_BATTLE_TEST("Hex deals double damage to foes with a status", s16 damage) +{ + u32 status1; + PARAMETRIZE { status1 = STATUS1_NONE; } + PARAMETRIZE { status1 = STATUS1_SLEEP; } + PARAMETRIZE { status1 = STATUS1_POISON; } + PARAMETRIZE { status1 = STATUS1_BURN; } + PARAMETRIZE { status1 = STATUS1_FREEZE; } + PARAMETRIZE { status1 = STATUS1_PARALYSIS; } + PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); } + } WHEN { + TURN { MOVE(player, MOVE_HEX); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEX, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } THEN { + if (i > 0) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[i].damage); + if (i > 1) + EXPECT_EQ(results[i-1].damage, results[i].damage); + } +} diff --git a/test/move_effect_hit_escape.c b/test/move_effect_hit_escape.c new file mode 100644 index 000000000000..cc34db2e280b --- /dev/null +++ b/test/move_effect_hit_escape.c @@ -0,0 +1,96 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_U_TURN].effect == EFFECT_HIT_ESCAPE); +} + +SINGLE_BATTLE_TEST("U-turn switches the user out") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); + HP_BAR(opponent); + MESSAGE("Go! Wynaut!"); + } +} + +SINGLE_BATTLE_TEST("U-turn does not switch the user out if the battle ends") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_U_TURN); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("U-turn does not switch the user out if no replacements") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_U_TURN); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("U-turn does not switch the user out if replacements fainted") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT) { HP(0); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_U_TURN); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("U-turn does not switch the user out if Wimp Out activates") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WIMPOD) { MaxHP(100); HP(51); Ability(ABILITY_WIMP_OUT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); + HP_BAR(opponent); + ABILITY_POPUP(opponent, ABILITY_WIMP_OUT); + MESSAGE("2 sent out Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("U-turn switches the user out if Wimp Out fails to activate") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WIMPOD) { MaxHP(100); HP(51); Ability(ABILITY_WIMP_OUT); } + } WHEN { + TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); + HP_BAR(opponent); + NOT ABILITY_POPUP(opponent); + MESSAGE("Your foe's weak! Get 'em, Wynaut!"); + } +} diff --git a/test/move_effect_paralyze_hit.c b/test/move_effect_paralyze_hit.c new file mode 100644 index 000000000000..8e7d259f7868 --- /dev/null +++ b/test/move_effect_paralyze_hit.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_THUNDER_SHOCK].effect == EFFECT_PARALYZE_HIT); +} + +SINGLE_BATTLE_TEST("Thunder Shock inflicts paralysis") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THUNDER_SHOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_SHOCK, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponent); + STATUS_ICON(opponent, paralysis: TRUE); + } +} + +SINGLE_BATTLE_TEST("Thunder Shock cannot paralyze an Electric-type") +{ + GIVEN { + ASSUME(B_PARALYZE_ELECTRIC >= GEN_6); + ASSUME(gSpeciesInfo[SPECIES_PIKACHU].types[0] == TYPE_ELECTRIC); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIKACHU); + } WHEN { + TURN { MOVE(player, MOVE_THUNDER_SHOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_SHOCK, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponent); + NOT STATUS_ICON(opponent, paralysis: TRUE); + } +} diff --git a/test/move_effect_poison_hit.c b/test/move_effect_poison_hit.c new file mode 100644 index 000000000000..b1a15481051f --- /dev/null +++ b/test/move_effect_poison_hit.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_POISON_STING].effect == EFFECT_POISON_HIT); +} + +SINGLE_BATTLE_TEST("Poison Sting inflicts poison") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_POISON_STING); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_STING, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Poison Sting cannot poison Poison-type") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_NIDORAN_M].types[0] == TYPE_POISON); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_NIDORAN_M); + } WHEN { + TURN { MOVE(player, MOVE_POISON_STING); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_STING, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + NOT STATUS_ICON(opponent, poison: TRUE); + } +} diff --git a/test/move_effect_rampage.c b/test/move_effect_rampage.c new file mode 100644 index 000000000000..a3afebf6bac7 --- /dev/null +++ b/test/move_effect_rampage.c @@ -0,0 +1,91 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_THRASH].effect == EFFECT_RAMPAGE); +} + +SINGLE_BATTLE_TEST("Thrash lasts for 2 or 3 turns") +{ + PASSES_RANDOMLY(1, 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THRASH); } + TURN { SKIP_TURN(player); } + TURN { SKIP_TURN(player); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THRASH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THRASH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THRASH, player); + } +} + +SINGLE_BATTLE_TEST("Thrash confuses the user after it finishes") +{ + GIVEN { + RNGSeed(0x00000000); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THRASH); } + TURN { SKIP_TURN(player); } + TURN { SKIP_TURN(player); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THRASH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THRASH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THRASH, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player); + } +} + +SINGLE_BATTLE_TEST("Thrash does not confuse the user if it is canceled on turn 1 of 3") +{ + GIVEN { + ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); + RNGSeed(0x00000000); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THRASH); } + TURN { MOVE(opponent, MOVE_PROTECT); SKIP_TURN(player); } + TURN { SKIP_TURN(player); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player); + } +} + +SINGLE_BATTLE_TEST("Thrash does not confuse the user if it is canceled on turn 2 of 3") +{ + GIVEN { + ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); + RNGSeed(0x00000000); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THRASH); } + TURN { MOVE(opponent, MOVE_PROTECT); SKIP_TURN(player); } + TURN { SKIP_TURN(player); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player); + } +} + +SINGLE_BATTLE_TEST("Thrash confuses the user if it is canceled on turn 3 of 3") +{ + KNOWN_FAILING; + GIVEN { + ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); + RNGSeed(0x00000000); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THRASH); } + TURN { SKIP_TURN(player); } + TURN { MOVE(opponent, MOVE_PROTECT); SKIP_TURN(player); } + } SCENE { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player); + } +} diff --git a/test/move_effect_recoil_if_miss.c b/test/move_effect_recoil_if_miss.c new file mode 100644 index 000000000000..5c1f1a61af39 --- /dev/null +++ b/test/move_effect_recoil_if_miss.c @@ -0,0 +1,57 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_JUMP_KICK].effect == EFFECT_RECOIL_IF_MISS); +} + +SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on miss") +{ + s16 recoil; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_JUMP_KICK, hit: FALSE); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + MESSAGE("Wobbuffet used Jump Kick!"); + MESSAGE("Wobbuffet's attack missed!"); + MESSAGE("Wobbuffet kept going and crashed!"); + HP_BAR(player, damage: maxHP / 2); + } +} + +SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on protect") +{ + s16 recoil; + GIVEN { + ASSUME(gBattleMoves[MOVE_JUMP_KICK].flags & FLAG_PROTECT_AFFECTED); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_JUMP_KICK, hit: FALSE); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_JUMP_KICK, player); + HP_BAR(player, damage: maxHP / 2); + } +} + +SINGLE_BATTLE_TEST("Jump Kick has no recoil if no target") +{ + KNOWN_FAILING; // #2596. + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_HEALING_WISH); MOVE(player, MOVE_JUMP_KICK, hit: FALSE); SEND_OUT(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEALING_WISH, opponent); + NOT HP_BAR(player, damage: maxHP / 2); + } +} diff --git a/test/move_effect_reflect.c b/test/move_effect_reflect.c new file mode 100644 index 000000000000..4ea875f35af8 --- /dev/null +++ b/test/move_effect_reflect.c @@ -0,0 +1,77 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_REFLECT].effect == EFFECT_REFLECT); +} + +SINGLE_BATTLE_TEST("Reflect reduces physical damage", s16 damage) +{ + u32 move; + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_REFLECT; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_LT(results[1].damage, results[0].damage); + } +} + +SINGLE_BATTLE_TEST("Reflect applies for 5 turns") +{ + u16 damage[6]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_REFLECT); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &damage[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &damage[1]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &damage[2]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &damage[3]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &damage[4]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &damage[5]); + } THEN { + EXPECT_MUL_EQ(damage[0], Q_4_12(1.0), damage[1]); + EXPECT_MUL_EQ(damage[0], Q_4_12(1.0), damage[2]); + EXPECT_MUL_EQ(damage[0], Q_4_12(1.0), damage[3]); + EXPECT_MUL_EQ(damage[0], Q_4_12(1.0), damage[4]); + EXPECT_LT(damage[0], damage[5]); + } +} + +SINGLE_BATTLE_TEST("Reflect fails if already active") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_REFLECT); } + TURN { MOVE(player, MOVE_REFLECT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT, player); + MESSAGE("Wobbuffet used Reflect!"); + MESSAGE("But it failed!"); + } +} diff --git a/test/move_effect_sleep.c b/test/move_effect_sleep.c new file mode 100644 index 000000000000..c80faf4bdf92 --- /dev/null +++ b/test/move_effect_sleep.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_HYPNOSIS].effect == EFFECT_SLEEP); +} + +SINGLE_BATTLE_TEST("Hypnosis inflicts sleep") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_HYPNOSIS); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPNOSIS, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); + STATUS_ICON(opponent, sleep: TRUE); + } +} diff --git a/test/move_effect_special_attack_down.c b/test/move_effect_special_attack_down.c new file mode 100644 index 000000000000..a20b8558e712 --- /dev/null +++ b/test/move_effect_special_attack_down.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_CONFIDE].effect == EFFECT_SPECIAL_ATTACK_DOWN); +} + +SINGLE_BATTLE_TEST("Confide lowers Special Attack", s16 damage) +{ + bool32 lowerSpecialAttack; + PARAMETRIZE { lowerSpecialAttack = FALSE; } + PARAMETRIZE { lowerSpecialAttack = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (lowerSpecialAttack) TURN { MOVE(player, MOVE_CONFIDE); } + TURN { MOVE(opponent, MOVE_GUST); } + } SCENE { + if (lowerSpecialAttack) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFIDE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's sp. attack fell!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(1.5), results[0].damage); + } +} diff --git a/test/move_effect_special_attack_up_3.c b/test/move_effect_special_attack_up_3.c new file mode 100644 index 000000000000..f7e7e11d14a3 --- /dev/null +++ b/test/move_effect_special_attack_up_3.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TAIL_GLOW].effect == EFFECT_SPECIAL_ATTACK_UP_3); +} + +SINGLE_BATTLE_TEST("Tail Glow drastically raises Special Attack", s16 damage) +{ + bool32 raiseSpecialAttack; + PARAMETRIZE { raiseSpecialAttack = FALSE; } + PARAMETRIZE { raiseSpecialAttack = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (raiseSpecialAttack) TURN { MOVE(player, MOVE_TAIL_GLOW); } + TURN { MOVE(player, MOVE_GUST); } + } SCENE { + if (raiseSpecialAttack) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAIL_GLOW, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's sp. attack drastically rose!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.5), results[1].damage); + } +} diff --git a/test/move_effect_spikes.c b/test/move_effect_spikes.c new file mode 100644 index 000000000000..33b0bad4b99e --- /dev/null +++ b/test/move_effect_spikes.c @@ -0,0 +1,135 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_SPIKES].effect == EFFECT_SPIKES); +} + +SINGLE_BATTLE_TEST("Spikes damage on switch in") +{ + u32 layers; + u32 divisor; + PARAMETRIZE { layers = 1; divisor = 8; } + PARAMETRIZE { layers = 2; divisor = 6; } + PARAMETRIZE { layers = 3; divisor = 4; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + u32 count; + for (count = 0; count < layers; ++count) { + TURN { MOVE(player, MOVE_SPIKES); } + } + TURN { SWITCH(opponent, 1); } + } SCENE { + u32 count; + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + for (count = 0; count < layers; ++count) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); + MESSAGE("Spikes were scattered all around the opponent's side!"); + } + MESSAGE("2 sent out Wynaut!"); + HP_BAR(opponent, damage: maxHP / divisor); + MESSAGE("Foe Wynaut is hurt by spikes!"); + } +} + +SINGLE_BATTLE_TEST("Spikes fails after 3 layers") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_SPIKES); } + TURN { MOVE(player, MOVE_SPIKES); } + TURN { MOVE(player, MOVE_SPIKES); } + TURN { MOVE(player, MOVE_SPIKES); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); + MESSAGE("Spikes were scattered all around the opponent's side!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); + MESSAGE("Spikes were scattered all around the opponent's side!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); + MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Wobbuffet used Spikes!"); + MESSAGE("But it failed!"); + MESSAGE("2 sent out Wynaut!"); + HP_BAR(opponent, damage: maxHP / 4); + MESSAGE("Foe Wynaut is hurt by spikes!"); + } +} + +SINGLE_BATTLE_TEST("Spikes damage on subsequent switch ins") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_SPIKES); } + TURN { SWITCH(opponent, 1); } + TURN { SWITCH(opponent, 0); } + } SCENE { + s32 maxHP0 = GetMonData(&OPPONENT_PARTY[0], MON_DATA_MAX_HP); + s32 maxHP1 = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + MESSAGE("2 sent out Wynaut!"); + HP_BAR(opponent, damage: maxHP1 / 8); + MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("2 sent out Wobbuffet!"); + HP_BAR(opponent, damage: maxHP0 / 8); + MESSAGE("Foe Wobbuffet is hurt by spikes!"); + } +} + +SINGLE_BATTLE_TEST("Spikes do not damage airborne Pokemon") +{ + u32 species = SPECIES_WOBBUFFET; + u32 item = ITEM_NONE; + u32 move1 = MOVE_CELEBRATE; + u32 move2 = MOVE_CELEBRATE; + bool32 airborne; + + ASSUME(gSpeciesInfo[SPECIES_PIDGEY].types[1] == TYPE_FLYING); + PARAMETRIZE { species = SPECIES_PIDGEY; airborne = TRUE; } + PARAMETRIZE { species = SPECIES_PIDGEY; item = ITEM_IRON_BALL; airborne = FALSE; } + PARAMETRIZE { species = SPECIES_PIDGEY; move1 = MOVE_GRAVITY; airborne = FALSE; } + PARAMETRIZE { species = SPECIES_PIDGEY; move1 = MOVE_INGRAIN; airborne = FALSE; } + + ASSUME(gSpeciesInfo[SPECIES_UNOWN].abilities[0] == ABILITY_LEVITATE); + PARAMETRIZE { species = SPECIES_UNOWN; airborne = TRUE; } + PARAMETRIZE { species = SPECIES_UNOWN; item = ITEM_IRON_BALL; airborne = FALSE; } + PARAMETRIZE { species = SPECIES_UNOWN; move1 = MOVE_GRAVITY; airborne = FALSE; } + PARAMETRIZE { species = SPECIES_UNOWN; move1 = MOVE_INGRAIN; airborne = FALSE; } + + PARAMETRIZE { move1 = MOVE_MAGNET_RISE; airborne = TRUE; } + PARAMETRIZE { move1 = MOVE_MAGNET_RISE; item = ITEM_IRON_BALL; airborne = FALSE; } + PARAMETRIZE { move1 = MOVE_MAGNET_RISE; move2 = MOVE_GRAVITY; airborne = FALSE; } + // Magnet Rise fails under Gravity. + // Magnet Rise fails under Ingrain and vice-versa. + + PARAMETRIZE { item = ITEM_AIR_BALLOON; airborne = TRUE; } + PARAMETRIZE { item = ITEM_AIR_BALLOON; move1 = MOVE_GRAVITY; airborne = FALSE; } + PARAMETRIZE { item = ITEM_AIR_BALLOON; move1 = MOVE_INGRAIN; airborne = FALSE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(species) { Item(item); } + } WHEN { + TURN { MOVE(player, MOVE_SPIKES); MOVE(opponent, move1); } + TURN { MOVE(opponent, move2); } + TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + if (airborne) { + NOT HP_BAR(opponent, damage: maxHP / 8); + } else { + HP_BAR(opponent, damage: maxHP / 8); + } + } +} diff --git a/test/move_effect_tailwind.c b/test/move_effect_tailwind.c new file mode 100644 index 000000000000..7dfffdbe0ff1 --- /dev/null +++ b/test/move_effect_tailwind.c @@ -0,0 +1,55 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TAILWIND].effect == EFFECT_TAILWIND); +} + +SINGLE_BATTLE_TEST("Tailwind applies for 4 turns") +{ + GIVEN { + ASSUME(B_TAILWIND_TURNS >= GEN_5); + PLAYER(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(15); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_TAILWIND); } + TURN {} + TURN {} + TURN {} + TURN {} + } SCENE { + MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet used Tailwind!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet used Celebrate!"); + } +} + +DOUBLE_BATTLE_TEST("Tailwind affects partner on first turn") +{ + GIVEN { + ASSUME(B_RECALC_TURN_AFTER_ACTIONS); + PLAYER(SPECIES_WOBBUFFET) { Speed(20); } + PLAYER(SPECIES_WYNAUT) { Speed(10); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(15); } + OPPONENT(SPECIES_WYNAUT) { Speed(14); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TAILWIND); } + } SCENE { + MESSAGE("Wobbuffet used Tailwind!"); + MESSAGE("Wynaut used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("Foe Wynaut used Celebrate!"); + } +} diff --git a/test/move_effect_torment.c b/test/move_effect_torment.c new file mode 100644 index 000000000000..43f05e29fb7f --- /dev/null +++ b/test/move_effect_torment.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TORMENT].effect == EFFECT_TORMENT); +} + +SINGLE_BATTLE_TEST("Torment prevents consecutive move uses") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_TORMENT); MOVE(opponent, MOVE_SPLASH); } + TURN { MOVE(opponent, MOVE_SPLASH, allowed: FALSE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TORMENT, player); + MESSAGE("Foe Wobbuffet was subjected to torment!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } +} + +SINGLE_BATTLE_TEST("Torment forces Struggle if the only move is prevented") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH); } + } WHEN { + TURN { MOVE(player, MOVE_TORMENT); MOVE(opponent, MOVE_SPLASH); } + TURN { MOVE(opponent, MOVE_SPLASH, allowed: FALSE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Torment allows non-consecutive move uses") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TORMENT); MOVE(opponent, MOVE_SPLASH); } + TURN { MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(opponent, MOVE_SPLASH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponent); + } +} diff --git a/test/move_effect_toxic.c b/test/move_effect_toxic.c new file mode 100644 index 000000000000..f71d2a97266a --- /dev/null +++ b/test/move_effect_toxic.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); +} + +SINGLE_BATTLE_TEST("Toxic inflicts bad poison") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TOXIC); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, badPoison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Toxic cannot miss if used by a Poison-type") +{ + u32 species; + bool32 hit; + PARAMETRIZE { species = SPECIES_WOBBUFFET; hit = FALSE; } + PARAMETRIZE { species = SPECIES_NIDORAN_M; hit = TRUE; } + GIVEN { + ASSUME(B_TOXIC_NEVER_MISS >= GEN_6); + ASSUME(gSpeciesInfo[SPECIES_NIDORAN_M].types[0] == TYPE_POISON); + PLAYER(species); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TOXIC, hit: FALSE); } + } SCENE { + if (hit) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, badPoison: TRUE); + } else { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + NOT STATUS_ICON(opponent, badPoison: TRUE); + } + } +} diff --git a/test/move_effect_toxic_spikes.c b/test/move_effect_toxic_spikes.c new file mode 100644 index 000000000000..44780da21049 --- /dev/null +++ b/test/move_effect_toxic_spikes.c @@ -0,0 +1,210 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TOXIC_SPIKES].effect == EFFECT_TOXIC_SPIKES); +} + +SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { SWITCH(opponent, 1); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("2 sent out Wynaut!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Toxic Spikes inflicts bad poison on switch in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { SWITCH(opponent, 1); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("2 sent out Wynaut!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, badPoison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Toxic Spikes fails after 2 layers") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { SWITCH(opponent, 1); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Wobbuffet used Toxic Spikes!"); + MESSAGE("But it failed!"); + MESSAGE("2 sent out Wynaut!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, badPoison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on subsequent switch ins") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { SWITCH(opponent, 1); } + TURN { SWITCH(opponent, 0); } + TURN {} + } SCENE { + MESSAGE("2 sent out Wynaut!"); + STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Toxic Spikes do not poison airborne Pokemon") +{ + u32 species = SPECIES_WOBBUFFET; + u32 item = ITEM_NONE; + u32 move1 = MOVE_CELEBRATE; + u32 move2 = MOVE_CELEBRATE; + bool32 airborne; + + ASSUME(gSpeciesInfo[SPECIES_PIDGEY].types[1] == TYPE_FLYING); + PARAMETRIZE { species = SPECIES_PIDGEY; airborne = TRUE; } + PARAMETRIZE { species = SPECIES_PIDGEY; item = ITEM_IRON_BALL; airborne = FALSE; } + PARAMETRIZE { species = SPECIES_PIDGEY; move1 = MOVE_GRAVITY; airborne = FALSE; } + PARAMETRIZE { species = SPECIES_PIDGEY; move1 = MOVE_INGRAIN; airborne = FALSE; } + + ASSUME(gSpeciesInfo[SPECIES_UNOWN].abilities[0] == ABILITY_LEVITATE); + PARAMETRIZE { species = SPECIES_UNOWN; airborne = TRUE; } + PARAMETRIZE { species = SPECIES_UNOWN; item = ITEM_IRON_BALL; airborne = FALSE; } + PARAMETRIZE { species = SPECIES_UNOWN; move1 = MOVE_GRAVITY; airborne = FALSE; } + PARAMETRIZE { species = SPECIES_UNOWN; move1 = MOVE_INGRAIN; airborne = FALSE; } + + PARAMETRIZE { move1 = MOVE_MAGNET_RISE; airborne = TRUE; } + PARAMETRIZE { move1 = MOVE_MAGNET_RISE; item = ITEM_IRON_BALL; airborne = FALSE; } + PARAMETRIZE { move1 = MOVE_MAGNET_RISE; move2 = MOVE_GRAVITY; airborne = FALSE; } + // Magnet Rise fails under Gravity. + // Magnet Rise fails under Ingrain and vice-versa. + + PARAMETRIZE { item = ITEM_AIR_BALLOON; airborne = TRUE; } + PARAMETRIZE { item = ITEM_AIR_BALLOON; move1 = MOVE_GRAVITY; airborne = FALSE; } + PARAMETRIZE { item = ITEM_AIR_BALLOON; move1 = MOVE_INGRAIN; airborne = FALSE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(species) { Item(item); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); MOVE(opponent, move1); } + TURN { MOVE(opponent, move2); } + TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } + } SCENE { + if (airborne) { + NOT STATUS_ICON(opponent, poison: TRUE); + } else { + STATUS_ICON(opponent, poison: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Toxic Spikes do not affect Steel-types") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_STEELIX].types[0] == TYPE_STEEL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_STEELIX); + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { SWITCH(opponent, 1); } + } SCENE { + NOT STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-types") +{ + u32 species; + u32 item = ITEM_NONE; + u32 move = MOVE_CELEBRATE; + bool32 grounded; + PARAMETRIZE { species = SPECIES_EKANS; grounded = TRUE; } + PARAMETRIZE { species = SPECIES_ZUBAT; grounded = FALSE; } + PARAMETRIZE { species = SPECIES_ZUBAT; item = ITEM_IRON_BALL; grounded = TRUE; } + PARAMETRIZE { species = SPECIES_ZUBAT; move = MOVE_GRAVITY; grounded = TRUE; } + PARAMETRIZE { species = SPECIES_ZUBAT; move = MOVE_INGRAIN; grounded = TRUE; } + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_EKANS].types[0] == TYPE_POISON); + ASSUME(gSpeciesInfo[SPECIES_ZUBAT].types[0] == TYPE_POISON); + ASSUME(gSpeciesInfo[SPECIES_ZUBAT].types[1] == TYPE_FLYING); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(species) { Item(item); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); MOVE(opponent, move); } + TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } + TURN { SWITCH(opponent, 0); } + } SCENE { + if (grounded) { + NOT STATUS_ICON(opponent, poison: TRUE); + MESSAGE("The poison spikes disappeared from around the opposing team's feet!"); + NOT STATUS_ICON(opponent, poison: TRUE); + } else { + NOT STATUS_ICON(opponent, poison: TRUE); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); + STATUS_ICON(opponent, poison: TRUE); + } + } +} + +// This would test for what I believe to be a bug in the mainline games. +// A Pokémon that gets passed magnet rise should still remove the Toxic +// Spikes even though it is airborne. +// The test currently fails, because we don't incorporate this bug. +SINGLE_BATTLE_TEST("Toxic Spikes are removed by Poison-types affected by Magnet Rise") +{ + KNOWN_FAILING; + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_EKANS].types[0] == TYPE_POISON); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EKANS); + } WHEN { + TURN { MOVE(opponent, MOVE_MAGNET_RISE); } + TURN { MOVE(player, MOVE_TOXIC_SPIKES); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } + TURN { SWITCH(opponent, 0); } + } SCENE { + NOT STATUS_ICON(opponent, poison: TRUE); + MESSAGE("The poison spikes disappeared from around the opposing team's feet!"); + NOT STATUS_ICON(opponent, poison: TRUE); + } +} diff --git a/test/powder_moves.c b/test/powder_moves.c new file mode 100644 index 000000000000..cb0aee528220 --- /dev/null +++ b/test/powder_moves.c @@ -0,0 +1,47 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Powder Moves are blocked by Grass Types") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].flags & FLAG_POWDER); + ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ODDISH); + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("It doesn't affect Foe Oddish…"); + } +} + +SINGLE_BATTLE_TEST("Powder Moves are blocked by Ability Overcoat") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].flags & FLAG_POWDER); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_PINECO) { Ability(ABILITY_OVERCOAT);}; + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_OVERCOAT); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("It doesn't affect Foe Pineco…"); + } +} + +SINGLE_BATTLE_TEST("Powder Moves are blocked by Item Safety Goggles") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].flags & FLAG_POWDER); + ASSUME(gItems[ITEM_SAFETY_GOGGLES].holdEffect == HOLD_EFFECT_SAFETY_GOGGLES); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ABRA) { Item(ITEM_SAFETY_GOGGLES);}; + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("Foe Abra is not affected thanks to its SafetyGoggles!"); + } +} diff --git a/test/status1.c b/test/status1.c new file mode 100644 index 000000000000..63a9cd041411 --- /dev/null +++ b/test/status1.c @@ -0,0 +1,194 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Sleep prevents the battler from using a move") +{ + u32 turns; + PARAMETRIZE { turns = 1; } + PARAMETRIZE { turns = 2; } + PARAMETRIZE { turns = 3; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP_TURN(turns)); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + for (i = 0; i < turns; i++) + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + for (i = 0; i < turns - 1; i++) + MESSAGE("Wobbuffet is fast asleep."); + MESSAGE("Wobbuffet woke up!"); + STATUS_ICON(player, none: TRUE); + MESSAGE("Wobbuffet used Celebrate!"); + } +} + +SINGLE_BATTLE_TEST("Poison deals 1/8th damage per turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + for (i = 0; i < 4; i++) + TURN {} + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + for (i = 0; i < 4; i++) + HP_BAR(player, damage: maxHP / 8); + } +} + +SINGLE_BATTLE_TEST("Burn deals 1/16th damage per turn") +{ + GIVEN { + ASSUME(B_BURN_DAMAGE >= GEN_LATEST); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + for (i = 0; i < 4; i++) + TURN {} + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + for (i = 0; i < 4; i++) + HP_BAR(player, damage: maxHP / 16); + } +} + +SINGLE_BATTLE_TEST("Burn reduces attack by 50%", s16 damage) +{ + bool32 burned; + PARAMETRIZE { burned = FALSE; } + PARAMETRIZE { burned = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { if (burned) Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Freeze has a 20% chance of being thawed") +{ + PASSES_RANDOMLY(20, 100); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + STATUS_ICON(player, none: TRUE); + } +} + +SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_EMBER); } + } SCENE { + MESSAGE("Wobbuffet is frozen solid!"); + MESSAGE("Foe Wobbuffet used Ember!"); + MESSAGE("Wobbuffet was defrosted!"); + STATUS_ICON(player, none: TRUE); + } +} + +SINGLE_BATTLE_TEST("Freeze is thawed by user's Flame Wheel") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_FLAME_WHEEL].flags & FLAG_THAW_USER); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FLAME_WHEEL); } + } SCENE { + MESSAGE("Wobbuffet was defrosted by Flame Wheel!"); + STATUS_ICON(player, none: TRUE); + MESSAGE("Wobbuffet used Flame Wheel!"); + } +} + +SINGLE_BATTLE_TEST("Paralysis reduces speed by 50%") +{ + u16 playerSpeed; + bool32 playerFirst; + PARAMETRIZE { playerSpeed = 98; playerFirst = FALSE; } + PARAMETRIZE { playerSpeed = 102; playerFirst = TRUE; } + GIVEN { + ASSUME(B_PARALYSIS_SPEED >= GEN_7); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); Speed(playerSpeed); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + if (playerFirst) { + ONE_OF { + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + } + MESSAGE("Foe Wobbuffet used Celebrate!"); + } else { + MESSAGE("Foe Wobbuffet used Celebrate!"); + ONE_OF { + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") +{ + PASSES_RANDOMLY(25, 100); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + } +} + +SINGLE_BATTLE_TEST("Bad poison deals 1/16th cumulative damage per turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_TOXIC_POISON); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + for (i = 0; i < 4; i++) + TURN {} + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + for (i = 0; i < 4; i++) + HP_BAR(player, damage: maxHP / 16 * (i + 1)); + } +} + +SINGLE_BATTLE_TEST("Bad poison cumulative damage resets on switch") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_TOXIC_POISON); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + TURN {} + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + TURN {} + TURN {} + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + for (i = 0; i < 2; i++) + HP_BAR(player, damage: maxHP / 16 * (i + 1)); + for (i = 0; i < 2; i++) + HP_BAR(player, damage: maxHP / 16 * (i + 1)); + } +} diff --git a/test/test.h b/test/test.h new file mode 100644 index 000000000000..cbcf117178fa --- /dev/null +++ b/test/test.h @@ -0,0 +1,142 @@ +#ifndef GUARD_TEST_H +#define GUARD_TEST_H + +#include "test_runner.h" + +#define MAX_PROCESSES 32 // See also tools/mgba-rom-test-hydra/main.c + +enum TestResult +{ + TEST_RESULT_FAIL, + TEST_RESULT_PASS, + TEST_RESULT_SKIP, + TEST_RESULT_INVALID, + TEST_RESULT_ERROR, + TEST_RESULT_TIMEOUT, +}; + +struct TestRunner +{ + u32 (*estimateCost)(void *); + void (*setUp)(void *); + void (*run)(void *); + void (*tearDown)(void *); + bool32 (*checkProgress)(void *); + bool32 (*handleExitWithResult)(void *, enum TestResult); +}; + +struct Test +{ + const char *name; + const char *filename; + const struct TestRunner *runner; + void *data; +}; + +struct TestRunnerState +{ + u8 state; + u8 exitCode; + s32 tests; + s32 passes; + s32 skips; + const char *skipFilename; + const struct Test *test; + u32 processCosts[MAX_PROCESSES]; + + u8 result; + u8 expectedResult; + u32 timeoutSeconds; +}; + +extern const u8 gTestRunnerN; +extern const u8 gTestRunnerI; +extern const char gTestRunnerArgv[256]; + +extern const struct TestRunner gAssumptionsRunner; +extern struct TestRunnerState gTestRunnerState; + +void CB2_TestRunner(void); + +void Test_ExpectedResult(enum TestResult); +void Test_ExitWithResult(enum TestResult, const char *fmt, ...); + +s32 MgbaPrintf_(const char *fmt, ...); + +#define ASSUMPTIONS \ + static void Assumptions(void); \ + __attribute__((section(".tests"))) static const struct Test sAssumptions = \ + { \ + .name = "ASSUMPTIONS: " __FILE__, \ + .filename = __FILE__, \ + .runner = &gAssumptionsRunner, \ + .data = Assumptions, \ + }; \ + static void Assumptions(void) + +#define ASSUME(c) \ + do \ + { \ + if (!(c)) \ + Test_ExitWithResult(TEST_RESULT_SKIP, "%s:%d: ASSUME failed", gTestRunnerState.test->filename, __LINE__); \ + } while (0) + +#define EXPECT(c) \ + do \ + { \ + if (!(c)) \ + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT failed", gTestRunnerState.test->filename, __LINE__); \ + } while (0) + +#define EXPECT_EQ(a, b) \ + do \ + { \ + typeof(a) _a = (a), _b = (b); \ + if (_a != _b) \ + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_EQ(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + } while (0) + +#define EXPECT_NE(a, b) \ + do \ + { \ + typeof(a) _a = (a), _b = (b); \ + if (_a == _b) \ + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_NE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + } while (0) + +#define EXPECT_LT(a, b) \ + do \ + { \ + typeof(a) _a = (a), _b = (b); \ + if (_a >= _b) \ + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_LT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + } while (0) + +#define EXPECT_LE(a, b) \ + do \ + { \ + typeof(a) _a = (a), _b = (b); \ + if (_a > _b) \ + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_LE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + } while (0) + +#define EXPECT_GT(a, b) \ + do \ + { \ + typeof(a) _a = (a), _b = (b); \ + if (_a <= _b) \ + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_GT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + } while (0) + +#define EXPECT_GE(a, b) \ + do \ + { \ + typeof(a) _a = (a), _b = (b); \ + if (_a < _b) \ + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_GE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + } while (0) + +#define KNOWN_FAILING \ + Test_ExpectedResult(TEST_RESULT_FAIL) + +#endif diff --git a/test/test_battle.h b/test/test_battle.h new file mode 100644 index 000000000000..806e7947e1de --- /dev/null +++ b/test/test_battle.h @@ -0,0 +1,826 @@ +/* Embedded DSL for automated black-box testing of battle mechanics. + * + * To run all the tests use: + * make check + * To run specific tests, e.g. Spikes ones, use: + * make check TESTS='Spikes' + * To build a ROM (pokemerald-test.elf) that can be opened in mgba to + * view specific tests, e.g. Spikes ones, use: + * make pokeemerald-test.elf TESTS='Spikes' + * + * Manually testing a battle mechanic often follows this pattern: + * 1. Create a party which can activate the mechanic. + * 2. Start a battle and play a few turns which activate the mechanic. + * 3. Look at the UI outputs to decide if the mechanic works. + * + * Automated testing follows the same pattern: + * 1. Initialize the party in GIVEN. + * 2. Play the turns in WHEN. + * 3. Check the UI outputs in SCENE. + * + * As a concrete example, to manually test EFFECT_PARALYZE, e.g. the + * effect of Stun Spore you might: + * 1. Put a Wobbuffet that knows Stun Spore in your party. + * 2. Battle a wild Wobbuffet. + * 3. Use Stun Spore. + * 4. Check that the Wobbuffet is paralyzed. + * + * This can be translated to an automated test as follows: + * + * ASSUMPTIONS + * { + * ASSUME(gBattleMoves[MOVE_STUN_SPORE].effect == EFFECT_PARALYZE); + * } + * + * SINGLE_BATTLE_TEST("Stun Spore inflicts paralysis") + * { + * GIVEN { + * PLAYER(SPECIES_WOBBUFFET); // 1. + * OPPONENT(SPECIES_WOBBUFFET); // 2. + * } WHEN { + * TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. + * } SCENE { + * ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + * MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); // 4 + * STATUS_ICON(opponent, paralysis: TRUE); // 4. + * } + * } + * + * The ASSUMPTIONS block documents that Stun Spore has EFFECT_PARALYZE. + * If Stun Spore did not have that effect it would cause the tests in + * the file to be skipped. We write our tests like this so that hackers + * can change the effects of moves without causing tests to fail. + * + * SINGLE_BATTLE_TEST defines the name of the test. Related tests should + * start with the same prefix, e.g. Stun Spore tests should start with + * "Stun Spore", this allows just the Stun Spore-related tests to be run + * with: + * make check TESTS='Stun Spore' + * + * GIVEN initializes the parties, PLAYER and OPPONENT add a Pokémon to + * their respective parties. They can both accept a block which further + * customizes the Pokémon's stats, moves, item, ability, etc. + * + * WHEN describes the turns, and TURN describes the choices made in a + * single turn. MOVE causes the player to use Stun Spore and adds the + * move to the Pokémon's moveset if an explicit Moves was not specified. + * Pokémon that are not mentioned in a TURN use Celebrate. + * The test runner attempts to rig the RNG so that the first move used + * in a turn does not miss and activates its secondary effects (if any). + * + * SCENE describes the player-visible output of the battle. In this case + * ANIMATION checks that the Stun Spore animation played, MESSAGE checks + * the paralysis message was shown, and STATUS_ICON checks that the + * opponent's HP bar shows a PRZ icon. + * + * As a second example, to manually test that Stun Spore does not effect + * Grass-types you might: + * 1. Put a Wobbuffet that knows Stun Spore in your party. + * 2. Battle a wild Oddish. + * 3. Use Stun Spore. + * 4. Check that the move animation does not play. + * 5. Check that a "It doesn't affect Foe Oddish…" message is shown. + * + * This can again be translated as follows: + * + * SINGLE_BATTLE_TEST("Stun Spore does not affect Grass-types") + * { + * GIVEN { + * ASSUME(gBattleMoves[MOVE_STUN_SPORE].flags & FLAG_POWDER); + * ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); + * PLAYER(SPECIES_ODDISH); // 1. + * OPPONENT(SPECIES_ODDISH); // 2. + * } WHEN { + * TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. + * } SCENE { + * NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); // 4. + * MESSAGE("It doesn't affect Foe Oddish…"); // 5. + * } + * } + * + * The ASSUMEs are documenting the reasons why Stun Spore does not + * affect Oddish, namely that Stun Spore is a powder move, and Oddish + * is a Grass-type. These ASSUMEs function similarly to the ones in + * ASSUMPTIONS but apply only to the one test. + * + * NOT inverts the meaning of a SCENE check, so applying it to ANIMATION + * requires that the Stun Spore animation does not play. MESSAGE checks + * that the message was shown. The checks in SCENE are ordered, so + * together this says "The doesn't affect message is shown, and the Stun + * Spore animation does not play at any time before that". Normally you + * would only test one or the other, or even better, just + * NOT STATUS_ICON(opponent, paralysis: TRUE); to say that Oddish was + * not paralyzed without specifying the exact outputs which led to that. + * + * As a final example, to test that Meditate works you might: + * 1. Put a Wobbuffet that knows Meditate and Tackle in your party. + * 2. Battle a wild Wobbuffet. + * 3. Use Tackle and note the amount the HP bar reduced. + * 4. Battle a wild Wobbuffet. + * 5. Use Meditate and that the stat change animation and message play. + * 6. Use Tackle and check that the HP bar reduced by more than in 3. + * + * This can be translated to an automated test as follows: + * + * SINGLE_BATTLE_TEST("Meditate raises Attack", s16 damage) + * { + * bool32 raiseAttack; + * PARAMETRIZE { raiseAttack = FALSE; } + * PARAMETRIZE { raiseAttack = TRUE; } + * GIVEN { + * ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + * PLAYER(SPECIES_WOBBUFFET); + * OPPONENT(SPECIES_WOBBUFFET); + * } WHEN { + * if (raiseAttack) TURN { MOVE(player, MOVE_MEDITATE); } // 5. + * TURN { MOVE(player, MOVE_TACKLE); } // 3 & 6. + * } SCENE { + * if (raiseAttack) { + * ANIMATION(ANIM_TYPE_MOVE, MOVE_MEDITATE, player); + * ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); // 5. + * MESSAGE("Wobbuffet's attack rose!"); // 5. + * } + * ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + * HP_BAR(opponent, captureDamage: &results[i].damage); // 3 & 6. + * } FINALLY { + * EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); // 6. + * } + * } + * + * PARAMETRIZE causes a test to run multiple times, once per PARAMETRIZE + * block (e.g. once with raiseAttack = FALSE and once with raiseAttack = + * TRUE). + * HP_BAR's captureDamage causes the change in HP to be stored in a + * variable, and the variable chosen is results[i].damage. results[i] + * contains all the variables defined at the end of SINGLE_BATTLE_TEST, + * i is the current PARAMETRIZE index. + * FINALLY runs after the last parameter has finished, and uses + * EXPECT_MUL_EQ to check that the second battle deals 1.5× the damage + * of the first battle (with a small tolerance to account for rounding). + * + * You might notice that all the tests check the outputs the player + * could see rather than the internal battle state. e.g. the Meditate test + * could have used gBattleMons[B_POSITION_OPPONENT_LEFT].hp instead of + * using HP_BAR to capture the damage. This is a deliberate choice, by + * checking what the player can observe the tests are more robust to + * refactoring, e.g. if gBattleMons got moved into gBattleStruct then + * any test that used it would need to be updated. + * + * REFERENCE + * ========= + * + * ASSUME(cond) + * Causes the test to be skipped if cond is false. Used to document any + * prerequisites of the test, e.g. to test Burn reducing the Attack of a + * Pokémon we can observe the damage of a physical attack with and + * without the burn. To document that this test assumes the attack is + * physical we can use: + * ASSUME(gBattleMoves[MOVE_WHATEVER].split == SPLIT_PHYSICAL); + * + * ASSUMPTIONS + * Should be placed immediately after any #includes and contain any + * ASSUMEs which should apply to the whole file, e.g. to test + * EFFECT_POISON_HIT we need to choose a move with that effect, if + * we chose to use Poison Sting in every test then the top of + * move_effect_poison_hit.c should be: + * ASSUMPTIONS + * { + * ASSUME(gBattleMoves[MOVE_POISON_STING].effect == EFFECT_POISON_HIT); + * } + * + * SINGLE_BATTLE_TEST(name, results...) and DOUBLE_BATTLE_TEST(name, results...) + * Define single- and double- battles. The names should start with the + * name of the mechanic being tested so that it is easier to run all the + * related tests. results contains variable declarations to be placed + * into the results array which is available in PARAMETRIZEd tests. + * The main differences for doubles are: + * - Move targets sometimes need to be explicit. + * - Instead of player and opponent there is playerLeft, playerRight, + * opponentLeft, and opponentRight. + * + * KNOWN_FAILING + * Marks a test as not passing due to a bug. If there is an issue number + * associated with the bug it should be included in a comment. If the + * test passes the developer will be notified to remove KNOWN_FAILING. + * For example: + * SINGLE_BATTLE_TEST("Jump Kick has no recoil if no target") + * { + * KNOWN_FAILING; // #2596. + * + * PARAMETRIZE + * Runs a test multiple times. i will be set to which parameter is + * running, and results will contain an entry for each parameter, e.g.: + * SINGLE_BATTLE_TEST("Blaze boosts Fire-type moves in a pinch", s16 damage) + * { + * u16 hp; + * PARAMETRIZE { hp = 99; } + * PARAMETRIZE { hp = 33; } + * GIVEN { + * ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); + * PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); MaxHP(99); HP(hp); } + * OPPONENT(SPECIES_WOBBUFFET); + * } WHEN { + * TURN { MOVE(player, MOVE_EMBER); } + * } SCENE { + * HP_BAR(opponent, captureDamage: &results[i].damage); + * } FINALLY { + * EXPECT(results[1].damage > results[0].damage); + * } + * } + * + * PASSES_RANDOMLY(successes, trials) + * Checks that the test passes approximately successes/trials. Used for + * testing RNG-based attacks, e.g.: + * PASSES_RANDOMLY(gBattleMoves[move].accuracy, 100); + * Note that PASSES_RANDOMLY makes the tests run very slowly and should + * be avoided where possible. + * + * GIVEN + * Contains the initial state of the parties before the battle. + * + * RNGSeed(seed) + * Explicitly sets the RNG seed. Try to avoid using this because it is a + * very fragile tool. + * Example: + * GIVEN { + * RNGSeed(0xC0DEIDEA); + * + * PLAYER(species) and OPPONENT(species) + * Adds the species to the player's or opponent's party respectively. + * The Pokémon can be further customized with the following functions: + * - Gender(MON_MALE | MON_FEMALE) + * - Nature(nature) + * - Ability(ability) + * - Level(level) + * - MaxHP(n), HP(n), Attack(n), Defense(n), SpAttack(n), SpDefense(n) + * - Speed(n) + * - Item(item) + * - Moves(moves...) + * - Friendship(friendship) + * - Status1(status1) + * For example to create a Wobbuffet that is poisoned: + * PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + * Note if Speed is specified for any Pokémon then it must be specified + * for all Pokémon. + * Note if Moves is specified then MOVE will not automatically add moves + * to the moveset. + * + * WHEN + * Contains the choices that battlers make during the battle. + * + * TURN + * Groups the choices made by the battlers on a single turn. If Speeds + * have not been explicitly specified then the order of the MOVEs in the + * TURN will be used to infer the Speeds of the Pokémon, e.g.: + * // player's speed will be greater than opponent's speed. + * TURN { MOVE(player, MOVE_SPLASH); MOVE(opponent, MOVE_SPLASH); } + * // opponent's speed will be greater than player's speed. + * TURN { MOVE(opponent, MOVE_SPLASH); MOVE(player, MOVE_SPLASH); } + * The inference process is naive, if your test contains anything that + * modifies the speed of a battler you should specify them explicitly. + * + * MOVE(battler, move | moveSlot:, [megaEvolve:], [hit:], [criticalHit:], [target:], [allowed:]) + * Used when the battler chooses Fight. Either the move ID or move slot + * must be specified. megaEvolve: TRUE causes the battler to Mega Evolve + * if able, hit: FALSE causes the move to miss, criticalHit: TRUE causes + * the move to land a critical hit, target: is used in double battles to + * choose the target (when necessary), and allowed: FALSE is used to + * reject an illegal move e.g. a Disabled one. + * MOVE(playerLeft, MOVE_TACKLE, target: opponentRight); + * If the battler does not have an explicit Moves specified the moveset + * will be populated based on the MOVEs it uses. + * + * FORCED_MOVE(battler) + * Used when the battler chooses Fight and then their move is chosen for + * them, e.g. when affected by Encore. + * FORCED_MOVE(player); + * + * SWITCH(battler, partyIndex) + * Used when the battler chooses Switch. + * SWITCH(player, 1); + * + * SKIP_TURN(battler) + * Used when the battler cannot choose an action, e.g. when locked into + * Thrash. + * SKIP_TURN(player); + * + * SEND_OUT(battler, partyIndex) + * Used when the battler chooses to switch to another Pokémon but not + * via Switch, e.g. after fainting or due to a U-turn. + * SEND_OUT(player, 1); + * + * SCENE + * Contains an abridged description of the UI during the THEN. The order + * of the description must match too, e.g. + * // ABILITY_POPUP followed by a MESSAGE + * ABILITY_POPUP(player, ABILITY_STURDY); + * MESSAGE("Geodude was protected by Sturdy!"); + * + * ABILITY_POPUP(battler, [ability]) + * Causes the test to fail if the battler's ability pop-up is not shown. + * If specified, ability is the ability shown in the pop-up. + * ABILITY_POPUP(opponent, ABILITY_MOLD_BREAKER); + * + * ANIMATION(type, animId, [battler], [target:]) + * Causes the test to fail if the animation does not play. A common use + * of this command is to check if a move was successful, e.g.: + * ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + * target can only be specified for ANIM_TYPE_MOVE. + * + * HP_BAR(battler, [damage: | hp: | captureDamage: | captureHP:]) + * If hp: or damage: are used, causes the test to fail if that amount of + * damage is not dealt, e.g.: + * HP_BAR(player, hp: 0); + * If captureDamage: or captureHP: are used, causes the test to fail if + * the HP bar does not change, and then writes that change to the + * pointer, e.g.: + * s16 damage; + * HP_BAR(player, captureDamage: &damage); + * If none of the above are used, causes the test to fail if the HP + * changes at all. + * + * MESSAGE(pattern) + * Causes the test to fail if the message in pattern is not displayed. + * Spaces in pattern match newlines (\n, \l, and \p) in the message. + * Often used to check that a battler took its turn but it failed, e.g.: + * MESSAGE("Wobbuffet used Dream Eater!"); + * MESSAGE("Foe Wobbuffet wasn't affected!"); + * + * STATUS_ICON(battler, status1 | none: | sleep: | poison: | burn: | freeze: | paralysis:, badPoison:) + * Causes the test to fail if the battler's status is not changed to the + * specified status. + * STATUS_ICON(player, badPoison: TRUE); + * If the expected status icon is parametrized the corresponding STATUS1 + * constant can be provided, e.g.: + * u32 status1; + * PARAMETRIZE { status1 = STATUS1_NONE; } + * PARAMETRIZE { status1 = STATUS1_BURN; } + * ... + * STATUS_ICON(player, status1); + * + * NOT + * Causes the test to fail if the SCENE command succeeds before the + * following command succeeds. + * // Our Wobbuffet does not Celebrate before the foe's. + * NOT MESSAGE("Wobbuffet used Celebrate!"); + * MESSAGE("Foe Wobbuffet used Celebrate!"); + * WARNING: NOT is an alias of NONE_OF, so it behaves surprisingly when + * applied to multiple commands wrapped in braces. + * + * ONE_OF + * Causes the test to fail unless one of the SCENE commands succeeds. + * ONE_OF { + * MESSAGE("Wobbuffet used Celebrate!"); + * MESSAGE("Wobbuffet is paralyzed! It can't move!"); + * } + * + * NONE_OF + * Causes the test to fail if one of the SCENE commands succeeds before + * the command after the NONE_OF succeeds. + * // Our Wobbuffet does not move before the foe's. + * NONE_OF { + * MESSAGE("Wobbuffet used Celebrate!"); + * MESSAGE("Wobbuffet is paralyzed! It can't move!"); + * } + * MESSAGE("Foe Wobbuffet used Celebrate!"); + * + * PLAYER_PARTY and OPPONENT_PARTY + * Refer to the party members defined in GIVEN, e.g.: + * s32 maxHP = GetMonData(&OPPONENT_PARTY[0], MON_DATA_MAX_HP); + * HP_BAR(opponent, damage: maxHP / 2); + * + * THEN + * Contains code to run after the battle has finished. If the test is + * PARAMETRIZEd then EXPECTs between the results should go here. Is also + * occasionally used to check the internal battle state when checking + * the behavior via a SCENE is too difficult, verbose, or error-prone. + * + * FINALLY + * Contains checks to run after all PARAMETERIZEs have run. Prefer to + * write your checks in THEN where possible, because a failure in THEN + * will be tagged with which parameter it corresponds to. + * + * EXPECT(cond) + * Causes the test to fail if cond is false. + * + * EXPECT_EQ(a, b), EXPECT_NE(a, b), EXPECT_LT(a, b), EXPECT_LE(a, b), EXPECT_GT(a, b), EXPECT_GE(a, b) + * Causes the test to fail if a and b compare incorrectly, e.g. + * EXPECT_EQ(results[0].damage, results[1].damage); + * + * EXPECT_MUL_EQ(a, m, b) + * Causes the test to fail if a*m != b (within a threshold), e.g. + * // Expect results[0].damage * 1.5 == results[1].damage. + * EXPECT_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); */ + +#ifndef GUARD_TEST_BATTLE_H +#define GUARD_TEST_BATTLE_H + +#include "battle.h" +#include "battle_anim.h" +#include "data.h" +#include "item.h" +#include "recorded_battle.h" +#include "test.h" +#include "util.h" +#include "constants/abilities.h" +#include "constants/battle_anim.h" +#include "constants/battle_move_effects.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/species.h" + +// NOTE: If the stack is too small the test runner will probably crash +// or loop. +#define BATTLE_TEST_STACK_SIZE 1024 +#define MAX_QUEUED_EVENTS 16 + +enum { BATTLE_TEST_SINGLES, BATTLE_TEST_DOUBLES }; + +typedef void (*SingleBattleTestFunction)(void *, u32, struct BattlePokemon *, struct BattlePokemon *); +typedef void (*DoubleBattleTestFunction)(void *, u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); + +struct BattleTest +{ + u8 type; + u16 sourceLine; + union + { + SingleBattleTestFunction singles; + DoubleBattleTestFunction doubles; + } function; + size_t resultsSize; +}; + +enum +{ + QUEUED_ABILITY_POPUP_EVENT, + QUEUED_ANIMATION_EVENT, + QUEUED_HP_EVENT, + QUEUED_MESSAGE_EVENT, + QUEUED_STATUS_EVENT, +}; + +struct QueuedAbilityEvent +{ + u8 battlerId; + u16 ability; +}; + +struct QueuedAnimationEvent +{ + u8 type; + u16 id; + u8 attacker:4; + u8 target:4; +}; + +enum { HP_EVENT_NEW_HP, HP_EVENT_DELTA_HP }; + +struct QueuedHPEvent +{ + u32 battlerId:3; + u32 type:1; + u32 address:28; +}; + +struct QueuedMessageEvent +{ + const u8 *pattern; +}; + +struct QueuedStatusEvent +{ + u32 battlerId:3; + u32 mask:8; + u32 unused_01:21; +}; + +struct QueuedEvent +{ + u8 type; + u8 sourceLineOffset; + u8 groupType:2; + u8 groupSize:6; + union + { + struct QueuedAbilityEvent ability; + struct QueuedAnimationEvent animation; + struct QueuedHPEvent hp; + struct QueuedMessageEvent message; + struct QueuedStatusEvent status; + } as; +}; + +struct BattleTestData +{ + u8 stack[BATTLE_TEST_STACK_SIZE]; + + u8 playerPartySize; + u8 opponentPartySize; + u8 explicitMoves[NUM_BATTLE_SIDES]; + bool8 hasExplicitSpeeds; + u8 explicitSpeeds[NUM_BATTLE_SIDES]; + u16 slowerThan[NUM_BATTLE_SIDES][PARTY_SIZE]; + u8 currentSide; + u8 currentPartyIndex; + struct Pokemon *currentMon; + u8 gender; + u8 nature; + + u8 currentMonIndexes[MAX_BATTLERS_COUNT]; + u8 turnState; + u8 turns; + u8 actionBattlers; + u8 moveBattlers; + bool8 hasRNGActions:1; + + struct RecordedBattleSave recordedBattle; + u8 battleRecordTypes[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; + u8 battleRecordSourceLineOffsets[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; + u16 recordIndexes[MAX_BATTLERS_COUNT]; + u8 lastActionTurn; + u8 nextRNGTurn; + + u8 queuedEventsCount; + u8 queueGroupType; + u8 queueGroupStart; + u8 queuedEvent; + struct QueuedEvent queuedEvents[MAX_QUEUED_EVENTS]; +}; + +struct BattleTestRunnerState +{ + u8 battlersCount; + u8 parametersCount; // Valid only in BattleTest_Setup. + u8 parameters; + u8 runParameter; + u8 trials; + u8 expectedPasses; + u8 observedPasses; + u8 skippedTrials; + u8 runTrial; + bool8 runRandomly:1; + bool8 runGiven:1; + bool8 runWhen:1; + bool8 runScene:1; + bool8 runThen:1; + bool8 runFinally:1; + bool8 runningFinally:1; + struct BattleTestData data; + u8 *results; + u8 checkProgressParameter; + u8 checkProgressTrial; + u8 checkProgressTurn; +}; + +extern const struct TestRunner gBattleTestRunner; +extern struct BattleTestRunnerState *gBattleTestRunnerState; + +#define MEMBERS(...) VARARG_8(MEMBERS_, __VA_ARGS__) +#define MEMBERS_0() +#define MEMBERS_1(a) a; +#define MEMBERS_2(a, b) a; b; +#define MEMBERS_3(a, b, c) a; b; c; +#define MEMBERS_4(a, b, c, d) a; b; c; d; +#define MEMBERS_5(a, b, c, d, e) a; b; c; d; e; +#define MEMBERS_6(a, b, c, d, e, f) a; b; c; d; e; f; +#define MEMBERS_7(a, b, c, d, e, f, g) a; b; c; d; e; f; g; +#define MEMBERS_8(a, b, c, d, e, f, g, h) a; b; c; d; e; f; g; h; + +#define APPEND_TRUE(...) VARARG_8(APPEND_TRUE_, __VA_ARGS__) +#define APPEND_TRUE_0() +#define APPEND_TRUE_1(a) a, TRUE +#define APPEND_TRUE_2(a, b) a, TRUE, b, TRUE +#define APPEND_TRUE_3(a, b, c) a, TRUE, b, TRUE, c, TRUE +#define APPEND_TRUE_4(a, b, c, d) a, TRUE, b, TRUE, c, TRUE, d, TRUE +#define APPEND_TRUE_5(a, b, c, d, e) a, TRUE, b, TRUE, c, TRUE, d, TRUE, e, TRUE +#define APPEND_TRUE_6(a, b, c, d, e, f) a, TRUE, b, TRUE, c, TRUE, d, TRUE, e, TRUE, f, TRUE +#define APPEND_TRUE_7(a, b, c, d, e, f, g) a, TRUE, b, TRUE, c, TRUE, d, TRUE, e, TRUE, f, TRUE, g, TRUE +#define APPEND_TRUE_8(a, b, c, d, e, f, g, h) a, TRUE, b, TRUE, c, TRUE, d, TRUE, e, TRUE, f, TRUE, g, TRUE, h, TRUE + +/* Test */ + +#define SINGLE_BATTLE_TEST(_name, ...) \ + struct CAT(Result, __LINE__) { MEMBERS(__VA_ARGS__) }; \ + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, u32, struct BattlePokemon *, struct BattlePokemon *); \ + __attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \ + { \ + .name = _name, \ + .filename = __FILE__, \ + .runner = &gBattleTestRunner, \ + .data = (void *)&(const struct BattleTest) \ + { \ + .type = BATTLE_TEST_SINGLES, \ + .sourceLine = __LINE__, \ + .function = { .singles = (SingleBattleTestFunction)CAT(Test, __LINE__) }, \ + .resultsSize = sizeof(struct CAT(Result, __LINE__)), \ + }, \ + }; \ + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *results, u32 i, struct BattlePokemon *player, struct BattlePokemon *opponent) + +#define DOUBLE_BATTLE_TEST(_name, ...) \ + struct CAT(Result, __LINE__) { MEMBERS(__VA_ARGS__) }; \ + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); \ + __attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \ + { \ + .name = _name, \ + .filename = __FILE__, \ + .runner = &gBattleTestRunner, \ + .data = (void *)&(const struct BattleTest) \ + { \ + .type = BATTLE_TEST_DOUBLES, \ + .sourceLine = __LINE__, \ + .function = { .doubles = (DoubleBattleTestFunction)CAT(Test, __LINE__) }, \ + .resultsSize = sizeof(struct CAT(Result, __LINE__)), \ + }, \ + }; \ + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *results, u32 i, struct BattlePokemon *playerLeft, struct BattlePokemon *opponentLeft, struct BattlePokemon *playerRight, struct BattlePokemon *opponentRight) + +/* Parametrize */ + +#define PARAMETRIZE if (gBattleTestRunnerState->parametersCount++ == i) + +/* Randomly */ + +#define PASSES_RANDOMLY(passes, trials) for (; gBattleTestRunnerState->runRandomly; gBattleTestRunnerState->runRandomly = FALSE) Randomly(__LINE__, passes, trials) + +void Randomly(u32 sourceLine, u32 passes, u32 trials); + +/* Given */ + +#define GIVEN for (; gBattleTestRunnerState->runGiven; gBattleTestRunnerState->runGiven = FALSE) + +#define RNGSeed(seed) RNGSeed_(__LINE__, seed) + +#define PLAYER(species) for (OpenPokemon(__LINE__, B_SIDE_PLAYER, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) +#define OPPONENT(species) for (OpenPokemon(__LINE__, B_SIDE_OPPONENT, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) + +#define Gender(gender) Gender_(__LINE__, gender) +#define Nature(nature) Nature_(__LINE__, nature) +#define Ability(ability) Ability_(__LINE__, ability) +#define Level(level) Level_(__LINE__, level) +#define MaxHP(maxHP) MaxHP_(__LINE__, maxHP) +#define HP(hp) HP_(__LINE__, hp) +#define Attack(attack) Attack_(__LINE__, attack) +#define Defense(defense) Defense_(__LINE__, defense) +#define SpAttack(spAttack) SpAttack_(__LINE__, spAttack) +#define SpDefense(spDefense) SpDefense_(__LINE__, spDefense) +#define Speed(speed) Speed_(__LINE__, speed) +#define Item(item) Item_(__LINE__, item) +#define Moves(move1, ...) Moves_(__LINE__, (const u16 [MAX_MON_MOVES]) { move1, __VA_ARGS__ }) +#define Friendship(friendship) Friendship_(__LINE__, friendship) +#define Status1(status1) Status1_(__LINE__, status1) + +void OpenPokemon(u32 sourceLine, u32 side, u32 species); +void ClosePokemon(u32 sourceLine); + +void RNGSeed_(u32 sourceLine, u32 seed); +void Gender_(u32 sourceLine, u32 gender); +void Nature_(u32 sourceLine, u32 nature); +void Ability_(u32 sourceLine, u32 ability); +void Level_(u32 sourceLine, u32 level); +void MaxHP_(u32 sourceLine, u32 maxHP); +void HP_(u32 sourceLine, u32 hp); +void Attack_(u32 sourceLine, u32 attack); +void Defense_(u32 sourceLine, u32 defense); +void SpAttack_(u32 sourceLine, u32 spAttack); +void SpDefense_(u32 sourceLine, u32 spDefense); +void Speed_(u32 sourceLine, u32 speed); +void Item_(u32 sourceLine, u32 item); +void Moves_(u32 sourceLine, const u16 moves[MAX_MON_MOVES]); +void Friendship_(u32 sourceLine, u32 friendship); +void Status1_(u32 sourceLine, u32 status1); + +#define PLAYER_PARTY (gBattleTestRunnerState->data.recordedBattle.playerParty) +#define OPPONENT_PARTY (gBattleTestRunnerState->data.recordedBattle.opponentParty) + +/* When */ + +#define WHEN for (; gBattleTestRunnerState->runWhen; gBattleTestRunnerState->runWhen = FALSE) + +enum { TURN_CLOSED, TURN_OPEN, TURN_CLOSING }; + +#define TURN for (OpenTurn(__LINE__); gBattleTestRunnerState->data.turnState == TURN_OPEN; CloseTurn(__LINE__)) + +#define MOVE(battler, ...) Move(__LINE__, battler, (struct MoveContext) { APPEND_TRUE(__VA_ARGS__) }) +#define FORCED_MOVE(battler) ForcedMove(__LINE__, battler) +#define SWITCH(battler, partyIndex) Switch(__LINE__, battler, partyIndex) +#define SKIP_TURN(battler) SkipTurn(__LINE__, battler) +#define SEND_OUT(battler, partyIndex) SendOut(__LINE__, battler, partyIndex) + +struct MoveContext +{ + u16 move; + u16 explicitMove:1; + u16 moveSlot:2; + u16 explicitMoveSlot:1; + u16 hit:1; + u16 explicitHit:1; + u16 criticalHit:1; + u16 explicitCriticalHit:1; + u16 megaEvolve:1; + u16 explicitMegaEvolve:1; + // TODO: u8 zMove:1; + u16 allowed:1; + u16 explicitAllowed:1; + struct BattlePokemon *target; + bool8 explicitTarget; +}; + +void OpenTurn(u32 sourceLine); +void CloseTurn(u32 sourceLine); +void Move(u32 sourceLine, struct BattlePokemon *, struct MoveContext); +void ForcedMove(u32 sourceLine, struct BattlePokemon *); +void Switch(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); +void SkipTurn(u32 sourceLine, struct BattlePokemon *); + +void SendOut(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); + +/* Scene */ + +#define SCENE for (; gBattleTestRunnerState->runScene; gBattleTestRunnerState->runScene = FALSE) + +#define ONE_OF for (OpenQueueGroup(__LINE__, QUEUE_GROUP_ONE_OF); gBattleTestRunnerState->data.queueGroupType != QUEUE_GROUP_NONE; CloseQueueGroup(__LINE__)) +#define NONE_OF for (OpenQueueGroup(__LINE__, QUEUE_GROUP_NONE_OF); gBattleTestRunnerState->data.queueGroupType != QUEUE_GROUP_NONE; CloseQueueGroup(__LINE__)) +#define NOT NONE_OF + +#define ABILITY_POPUP(battler, ...) QueueAbility(__LINE__, battler, (struct AbilityEventContext) { __VA_ARGS__ }) +#define ANIMATION(type, id, ...) QueueAnimation(__LINE__, type, id, (struct AnimationEventContext) { __VA_ARGS__ }) +#define HP_BAR(battler, ...) QueueHP(__LINE__, battler, (struct HPEventContext) { APPEND_TRUE(__VA_ARGS__) }) +#define MESSAGE(pattern) QueueMessage(__LINE__, (const u8 []) _(pattern)) +#define STATUS_ICON(battler, status) QueueStatus(__LINE__, battler, (struct StatusEventContext) { status }) + +enum QueueGroupType +{ + QUEUE_GROUP_NONE, + QUEUE_GROUP_ONE_OF, + QUEUE_GROUP_NONE_OF, +}; + +struct AbilityEventContext +{ + u16 ability; +}; + +struct AnimationEventContext +{ + struct BattlePokemon *attacker; + struct BattlePokemon *target; +}; + +struct HPEventContext +{ + u8 _; + u16 hp; + bool8 explicitHP; + s16 damage; + bool8 explicitDamage; + u16 *captureHP; + bool8 explicitCaptureHP; + s16 *captureDamage; + bool8 explicitCaptureDamage; +}; + +struct StatusEventContext +{ + u8 status1; + bool8 none:1; + bool8 sleep:1; + bool8 poison:1; + bool8 burn:1; + bool8 freeze:1; + bool8 paralysis:1; + bool8 badPoison:1; +}; + +void OpenQueueGroup(u32 sourceLine, enum QueueGroupType); +void CloseQueueGroup(u32 sourceLine); + +void QueueAbility(u32 sourceLine, struct BattlePokemon *battler, struct AbilityEventContext); +void QueueAnimation(u32 sourceLine, u32 type, u32 id, struct AnimationEventContext); +void QueueHP(u32 sourceLine, struct BattlePokemon *battler, struct HPEventContext); +void QueueMessage(u32 sourceLine, const u8 *pattern); +void QueueStatus(u32 sourceLine, struct BattlePokemon *battler, struct StatusEventContext); + +/* Then */ + +#define THEN for (; gBattleTestRunnerState->runThen; gBattleTestRunnerState->runThen = FALSE) + +/* Finally */ + +#define FINALLY for (; gBattleTestRunnerState->runFinally; gBattleTestRunnerState->runFinally = FALSE) if ((gBattleTestRunnerState->runningFinally = TRUE)) + +/* Expect */ + +#define EXPECT_MUL_EQ(a, m, b) \ + do \ + { \ + s32 _a = (a), _m = (m), _b = (b); \ + s32 _am = Q_4_12_TO_INT(_a * _m); \ + s32 _t = Q_4_12_TO_INT(abs(_m) + Q_4_12_ROUND); \ + if (abs(_am-_b) > _t) \ + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_MUL_EQ(%d, %q, %d) failed: %d not in [%d..%d]", gTestRunnerState.test->filename, __LINE__, _a, _m, _b, _am, _b-_t, _b+_t); \ + } while (0) + +#endif diff --git a/test/test_runner.c b/test/test_runner.c new file mode 100644 index 000000000000..3cb1f7c21379 --- /dev/null +++ b/test/test_runner.c @@ -0,0 +1,449 @@ +#include +#include "global.h" +#include "characters.h" +#include "gpu_regs.h" +#include "main.h" +#include "malloc.h" +#include "test.h" +#include "test_runner.h" + +#define TIMEOUT_SECONDS 30 + +void CB2_TestRunner(void); + +EWRAM_DATA struct TestRunnerState gTestRunnerState; + +void TestRunner_Battle(const struct Test *); + +static bool32 MgbaOpen_(void); +static void MgbaExit_(u8 exitCode); +static s32 MgbaPuts_(const char *s); +static s32 MgbaVPrintf_(const char *fmt, va_list va); +static void Intr_Timer2(void); + +extern const struct Test __start_tests[]; +extern const struct Test __stop_tests[]; + +static bool32 PrefixMatch(const char *pattern, const char *string) +{ + if (string == NULL) + return TRUE; + + while (TRUE) + { + if (!*pattern) + return TRUE; + if (*pattern != *string) + return FALSE; + pattern++; + string++; + } +} + +enum { STATE_INIT, STATE_NEXT_TEST, STATE_REPORT_RESULT, STATE_EXIT }; + +void CB2_TestRunner(void) +{ + switch (gTestRunnerState.state) + { + case STATE_INIT: + if (!MgbaOpen_()) + { + gTestRunnerState.state = STATE_EXIT; + gTestRunnerState.exitCode = 2; + return; + } + + gIntrTable[7] = Intr_Timer2; + + gTestRunnerState.state = STATE_NEXT_TEST; + gTestRunnerState.exitCode = 0; + gTestRunnerState.tests = 0; + gTestRunnerState.passes = 0; + gTestRunnerState.skips = 0; + gTestRunnerState.skipFilename = NULL; + gTestRunnerState.test = __start_tests - 1; + break; + + case STATE_NEXT_TEST: + gTestRunnerState.test++; + + if (gTestRunnerState.test == __stop_tests) + { + MgbaPrintf_("%s%d/%d PASSED\e[0m", gTestRunnerState.exitCode == 0 ? "\e[32m" : "\e[31m", gTestRunnerState.passes, gTestRunnerState.tests); + if (gTestRunnerState.skips) + { + if (gTestRunnerSkipIsFail) + MgbaPrintf_("\e[31m%d SKIPPED\e[0m", gTestRunnerState.skips); + else + MgbaPrintf_("%d SKIPPED", gTestRunnerState.skips); + } + gTestRunnerState.state = STATE_EXIT; + return; + } + + if (!PrefixMatch(gTestRunnerArgv, gTestRunnerState.test->name)) + return; + + // Greedily assign tests to processes based on estimated cost. + // TODO: Make processCosts a min heap. + if (gTestRunnerState.test->runner != &gAssumptionsRunner) + { + u32 i; + u32 minCost, minCostProcess; + minCost = gTestRunnerState.processCosts[0]; + minCostProcess = 0; + for (i = 1; i < gTestRunnerN; i++) + { + if (gTestRunnerState.processCosts[i] < minCost) + { + minCost = gTestRunnerState.processCosts[i]; + minCostProcess = i; + } + } + + if (gTestRunnerState.test->runner->estimateCost) + gTestRunnerState.processCosts[minCostProcess] += gTestRunnerState.test->runner->estimateCost(gTestRunnerState.test->data); + else + gTestRunnerState.processCosts[minCostProcess] += 1; + + if (minCostProcess != gTestRunnerI) + return; + } + + gTestRunnerState.state = STATE_REPORT_RESULT; + gTestRunnerState.result = TEST_RESULT_PASS; + gTestRunnerState.expectedResult = TEST_RESULT_PASS; + if (gTestRunnerHeadless) + gTestRunnerState.timeoutSeconds = TIMEOUT_SECONDS; + else + gTestRunnerState.timeoutSeconds = UINT_MAX; + InitHeap(gHeap, HEAP_SIZE); + EnableInterrupts(INTR_FLAG_TIMER2); + REG_TM2CNT_L = UINT16_MAX - (274 * 60); // Approx. 1 second. + REG_TM2CNT_H = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_1024CLK; + + // NOTE: Assumes that the compiler interns __FILE__. + if (gTestRunnerState.skipFilename == gTestRunnerState.test->filename) + { + gTestRunnerState.result = TEST_RESULT_SKIP; + } + else + { + MgbaPrintf_(":N%s", gTestRunnerState.test->name); + if (gTestRunnerState.test->runner->setUp) + gTestRunnerState.test->runner->setUp(gTestRunnerState.test->data); + gTestRunnerState.test->runner->run(gTestRunnerState.test->data); + } + break; + + case STATE_REPORT_RESULT: + REG_TM2CNT_H = 0; + + gTestRunnerState.state = STATE_NEXT_TEST; + + if (gTestRunnerState.test->runner->tearDown) + gTestRunnerState.test->runner->tearDown(gTestRunnerState.test->data); + + if (gTestRunnerState.test->runner == &gAssumptionsRunner) + { + if (gTestRunnerState.result != TEST_RESULT_PASS) + gTestRunnerState.skipFilename = gTestRunnerState.test->filename; + } + else if (gTestRunnerState.result == TEST_RESULT_SKIP) + { + gTestRunnerState.skips++; + if (gTestRunnerSkipIsFail) + gTestRunnerState.exitCode = 1; + } + else + { + const char *color; + const char *result; + + gTestRunnerState.tests++; + + if (gTestRunnerState.result == gTestRunnerState.expectedResult) + { + gTestRunnerState.passes++; + color = "\e[32m"; + MgbaPrintf_(":N%s", gTestRunnerState.test->name); + } + else if (gTestRunnerState.result != TEST_RESULT_SKIP || gTestRunnerSkipIsFail) + { + gTestRunnerState.exitCode = 1; + color = "\e[31m"; + } + else + { + color = ""; + } + + if (gTestRunnerState.result == TEST_RESULT_PASS + && gTestRunnerState.result != gTestRunnerState.expectedResult) + { + MgbaPuts_("\e[31mPlease remove KNOWN_FAILING if this test intentionally PASSes\e[0m"); + } + + switch (gTestRunnerState.result) + { + case TEST_RESULT_FAIL: + if (gTestRunnerState.expectedResult == TEST_RESULT_FAIL) + { + result = "KNOWN_FAILING"; + color = "\e[33m"; + } + else + { + result = "FAIL"; + } + break; + case TEST_RESULT_PASS: result = "PASS"; break; + case TEST_RESULT_SKIP: result = "SKIP"; break; + case TEST_RESULT_INVALID: result = "INVALID"; break; + case TEST_RESULT_ERROR: result = "ERROR"; break; + case TEST_RESULT_TIMEOUT: result = "TIMEOUT"; break; + default: result = "UNKNOWN"; break; + } + + MgbaPrintf_(":R%s%s\e[0m", color, result); + } + + break; + + case STATE_EXIT: + MgbaExit_(gTestRunnerState.exitCode); + break; + } +} + +void Test_ExpectedResult(enum TestResult result) +{ + gTestRunnerState.expectedResult = result; +} + +static void Assumptions_Run(void *data) +{ + void (*function)(void) = data; + function(); +} + +const struct TestRunner gAssumptionsRunner = +{ + .run = Assumptions_Run, +}; + +#define IRQ_LR (*(vu32 *)0x3007F9C) + +/* Returns to AgbMainLoop. + * Similar to a longjmp except that we only restore sp (and cpsr via + * overwriting the value of lr_irq on the stack). + * + * WARNING: This could potentially be flaky because other global state + * will not be cleaned up, we may decide to Exit on a timeout instead. */ +static NAKED void JumpToAgbMainLoop(void) +{ + asm(".arm\n\ + .word 0xe3104778\n\ + ldr r0, =gAgbMainLoop_sp\n\ + ldr sp, [r0]\n\ + ldr r0, =AgbMainLoop\n\ + bx r0\n\ + .pool"); +} + +void ReinitCallbacks(void) +{ + gMain.callback1 = NULL; + SetMainCallback2(CB2_TestRunner); + gMain.vblankCallback = NULL; + gMain.hblankCallback = NULL; +} + +static void Intr_Timer2(void) +{ + if (--gTestRunnerState.timeoutSeconds == 0) + { + if (gTestRunnerState.test->runner->checkProgress + && gTestRunnerState.test->runner->checkProgress(gTestRunnerState.test->data)) + { + gTestRunnerState.timeoutSeconds = TIMEOUT_SECONDS; + } + else + { + gTestRunnerState.result = TEST_RESULT_TIMEOUT; + ReinitCallbacks(); + IRQ_LR = ((uintptr_t)JumpToAgbMainLoop & ~1) + 4; + } + } +} + +void Test_ExitWithResult(enum TestResult result, const char *fmt, ...) +{ + gTestRunnerState.result = result; + ReinitCallbacks(); + if (gTestRunnerState.test->runner->handleExitWithResult + && !gTestRunnerState.test->runner->handleExitWithResult(gTestRunnerState.test->data, result) + && gTestRunnerState.result != gTestRunnerState.expectedResult) + { + va_list va; + va_start(va, fmt); + MgbaVPrintf_(fmt, va); + } + JumpToAgbMainLoop(); +} + +#define REG_DEBUG_ENABLE (*(vu16 *)0x4FFF780) +#define REG_DEBUG_FLAGS (*(vu16 *)0x4FFF700) +#define REG_DEBUG_STRING ((char *)0x4FFF600) + +static bool32 MgbaOpen_(void) +{ + REG_DEBUG_ENABLE = 0xC0DE; + return REG_DEBUG_ENABLE == 0x1DEA; +} + +static void MgbaExit_(u8 exitCode) +{ + register u32 _exitCode asm("r0") = exitCode; + asm("swi 0x3" :: "r" (_exitCode)); +} + +static s32 MgbaPuts_(const char *s) +{ + return MgbaPrintf_("%s", s); +} + +s32 MgbaPrintf_(const char *fmt, ...) +{ + va_list va; + va_start(va, fmt); + return MgbaVPrintf_(fmt, va); +} + +static s32 MgbaPutchar_(s32 i, s32 c) +{ + REG_DEBUG_STRING[i++] = c; + if (i == 255) + { + REG_DEBUG_STRING[i] = '\0'; + REG_DEBUG_FLAGS = MGBA_LOG_INFO | 0x100; + i = 0; + } + return i; +} + +extern const u8 gWireless_RSEtoASCIITable[]; + +// Bare-bones, only supports plain %s, %S, and %d. +static s32 MgbaVPrintf_(const char *fmt, va_list va) +{ + s32 i = 0; + s32 c, d; + const char *s; + while (*fmt) + { + switch ((c = *fmt++)) + { + case '%': + switch (*fmt++) + { + case '%': + i = MgbaPutchar_(i, '%'); + break; + case 'd': + d = va_arg(va, int); + if (d == 0) + { + i = MgbaPutchar_(i, '0'); + } + else + { + char buffer[10]; + s32 n = 0; + u32 u = abs(d); + if (d < 0) + i = MgbaPutchar_(i, '-'); + while (u > 0) + { + buffer[n++] = '0' + (u % 10); + u /= 10; + } + while (n > 0) + i = MgbaPutchar_(i, buffer[--n]); + } + break; + case 'q': + d = va_arg(va, int); + { + char buffer[10]; + s32 n = 0; + u32 u = abs(d) >> 12; + if (u == 0) + { + i = MgbaPutchar_(i, '0'); + } + else + { + if (d < 0) + i = MgbaPutchar_(i, '-'); + while (u > 0) + { + buffer[n++] = '0' + (u % 10); + u /= 10; + } + while (n > 0) + i = MgbaPutchar_(i, buffer[--n]); + } + + n = 0; + i = MgbaPutchar_(i, '.'); + u = d & 0xFFF; + while (TRUE) + { + u *= 10; + i = MgbaPutchar_(i, '0' + (u >> 12)); + u &= 0xFFF; + if (u == 0) + break; + if (++n == 2) + { + u *= 10; + i = MgbaPutchar_(i, '0' + ((u + UQ_4_12_ROUND) >> 12)); + break; + } + } + } + break; + case 's': + s = va_arg(va, const char *); + while ((c = *s++) != '\0') + i = MgbaPutchar_(i, c); + break; + case 'S': + s = va_arg(va, const u8 *); + while ((c = *s++) != EOS) + { + if ((c = gWireless_RSEtoASCIITable[c]) != '\0') + i = MgbaPutchar_(i, c); + else + i = MgbaPutchar_(i, '?'); + } + break; + } + break; + case '\n': + i = 254; + i = MgbaPutchar_(i, '\0'); + break; + default: + i = MgbaPutchar_(i, c); + break; + } + } + if (i != 0) + { + REG_DEBUG_FLAGS = MGBA_LOG_INFO | 0x100; + } + return i; +} diff --git a/test/test_runner_args.c b/test/test_runner_args.c new file mode 100644 index 000000000000..9c0bf2ee5c92 --- /dev/null +++ b/test/test_runner_args.c @@ -0,0 +1,8 @@ +#include "global.h" + +// These values are patched by patchelf. Therefore we have put them in +// their own TU so that the optimizer cannot inline them. +const bool8 gTestRunnerEnabled = TRUE; +const u8 gTestRunnerN = 0; +const u8 gTestRunnerI = 0; +const char gTestRunnerArgv[256] = {'\0'}; diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c new file mode 100644 index 000000000000..e40ed3e50b88 --- /dev/null +++ b/test/test_runner_battle.c @@ -0,0 +1,1545 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_controllers.h" +#include "characters.h" +#include "main.h" +#include "malloc.h" +#include "random.h" +#include "test_battle.h" +#include "window.h" + +#define INVALID(fmt, ...) Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__) +#define INVALID_IF(c, fmt, ...) do { if (c) Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__); } while (0) + +#define STATE gBattleTestRunnerState +#define DATA gBattleTestRunnerState->data + +/* RNG seeds for controlling the first move of the turn. + * Found via brute force. */ + +/* Default seed, triggers most things. + * The 1st roll % 100 is <= 29, to make 30%+ accuracycheck pass. + * The 2nd roll is not a critical hit at the regular crit stage. + * The 3rd roll is consumed by damagecalc. + * The 4th roll is consumed by adjustdamage. + * The 5th roll % 100 is <= 9, to make 10%+ seteffectwithchance pass + * and % 3 is == 0, to make Poison Point and other 1/3s pass. */ +#define RNG_SEED_DEFAULT 0x000002BE + +/* Causes the first attack to critical hit if B_CRIT_CHANCE >= GEN_6. + * The 2nd roll % 24 == 0 to be a critical hit at any stage. + * The other rolls match RNG_SEED_DEFAULT. */ +#define RNG_SEED_CRITICAL_HIT 0x0000A9F4 + +/* Causes the first attack to miss if possible. + * The 1st roll % 100 is 99, to make 99%- accuracycheck fail. */ +#define RNG_SEED_MISS 0x00000074 + +EWRAM_DATA struct BattleTestRunnerState *gBattleTestRunnerState = NULL; + +static void CB2_BattleTest_NextParameter(void); +static void CB2_BattleTest_NextTrial(void); +static void PushBattlerAction(u32 sourceLine, s32 battlerId, u32 actionType, u32 byte); + +NAKED static void InvokeSingleTestFunctionWithStack(void *results, u32 i, struct BattlePokemon *player, struct BattlePokemon *opponent, SingleBattleTestFunction function, void *stack) +{ + asm("push {r4-r6,lr}\n\ + ldr r4, [sp, #16] @ function\n\ + ldr r5, [sp, #20] @ stack\n\ + mov r6, sp\n\ + mov sp, r5\n\ + push {r6}\n\ + ldr r6, =SingleRestoreSP + 1\n\ + mov lr, r6\n\ + bx r4\n\ + SingleRestoreSP:\n\ + pop {r0}\n\ + mov sp, r0\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); +} + +NAKED static void InvokeDoubleTestFunctionWithStack(void *results, u32 i, struct BattlePokemon *playerLeft, struct BattlePokemon *opponentLeft, struct BattlePokemon *playerRight, struct BattlePokemon *opponentRight, SingleBattleTestFunction function, void *stack) +{ + asm("push {r4-r7,lr}\n\ + ldr r4, [sp, #28] @ function\n\ + ldr r5, [sp, #32] @ stack\n\ + mov r6, sp\n\ + mov sp, r5\n\ + push {r6}\n\ + add r6, #20\n\ + ldmia r6, {r6, r7} @ playerRight, opponentRight\n\ + push {r6, r7}\n\ + ldr r6, =DoubleRestoreSP + 1\n\ + mov lr, r6\n\ + bx r4\n\ + DoubleRestoreSP:\n\ + add sp, #8\n\ + pop {r0}\n\ + mov sp, r0\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); +} + +// Calls test->function, but pointing its stack at DATA.stack so that +// local variables are live after the function returns (and so can be +// referenced by HP_BAR, or the next call, etc). +// NOTE: This places the stack in EWRAM which has longer waitstates than +// IWRAM so could be much slower, but a) not that much code executes, +// and b) mga-rom-test isn't meaningfully limited by the GBA frame rate. +static void InvokeTestFunction(const struct BattleTest *test) +{ + STATE->parametersCount = 0; + switch (test->type) + { + case BATTLE_TEST_SINGLES: + InvokeSingleTestFunctionWithStack(STATE->results, STATE->runParameter, &gBattleMons[B_POSITION_PLAYER_LEFT], &gBattleMons[B_POSITION_OPPONENT_LEFT], test->function.singles, &DATA.stack[BATTLE_TEST_STACK_SIZE]); + break; + case BATTLE_TEST_DOUBLES: + InvokeDoubleTestFunctionWithStack(STATE->results, STATE->runParameter, &gBattleMons[B_POSITION_PLAYER_LEFT], &gBattleMons[B_POSITION_OPPONENT_LEFT], &gBattleMons[B_POSITION_PLAYER_RIGHT], &gBattleMons[B_POSITION_OPPONENT_RIGHT], test->function.singles, &DATA.stack[BATTLE_TEST_STACK_SIZE]); + break; + } +} + +static u32 SourceLine(u32 sourceLineOffset) +{ + const struct BattleTest *test = gTestRunnerState.test->data; + return test->sourceLine + sourceLineOffset; +} + +static u32 SourceLineOffset(u32 sourceLine) +{ + const struct BattleTest *test = gTestRunnerState.test->data; + if (sourceLine - test->sourceLine > 0xFF) + return 0; + else + return sourceLine - test->sourceLine; +} + +static u32 BattleTest_EstimateCost(void *data) +{ + u32 cost; + const struct BattleTest *test = data; + STATE = AllocZeroed(sizeof(*STATE)); + if (!STATE) + return 0; + STATE->runRandomly = TRUE; + DATA.recordedBattle.rngSeed = RNG_SEED_DEFAULT; + InvokeTestFunction(test); + cost = 1; + if (STATE->parametersCount != 0) + cost *= STATE->parametersCount; + if (STATE->trials != 0) + cost *= STATE->trials; + FREE_AND_SET_NULL(STATE); + return cost; +} + +static void BattleTest_SetUp(void *data) +{ + const struct BattleTest *test = data; + STATE = AllocZeroed(sizeof(*STATE)); + if (!STATE) + Test_ExitWithResult(TEST_RESULT_ERROR, "OOM: STATE = AllocZerod(%d)", sizeof(*STATE)); + InvokeTestFunction(test); + STATE->parameters = STATE->parametersCount; + STATE->results = AllocZeroed(test->resultsSize * STATE->parameters); + if (!STATE->results) + Test_ExitWithResult(TEST_RESULT_ERROR, "OOM: STATE->results = AllocZerod(%d)", sizeof(test->resultsSize * STATE->parameters)); + switch (test->type) + { + case BATTLE_TEST_SINGLES: + STATE->battlersCount = 2; + break; + case BATTLE_TEST_DOUBLES: + STATE->battlersCount = 4; + break; + } +} + +// This does not take into account priority, statuses, or any other +// modifiers. +static void SetImplicitSpeeds(void) +{ + s32 i, j; + u32 speed = 12; + u32 hasSpeeds = 0; + u32 allSpeeds = ((1 << DATA.playerPartySize) - 1) | (((1 << DATA.opponentPartySize) - 1) << 6); + bool32 madeProgress; + while (hasSpeeds != allSpeeds) + { + madeProgress = FALSE; + for (i = 0; i < DATA.playerPartySize; i++) + { + if (!(hasSpeeds & (1 << i)) + && !(DATA.slowerThan[B_SIDE_PLAYER][i] & ~hasSpeeds)) + { + SetMonData(&DATA.recordedBattle.playerParty[i], MON_DATA_SPEED, &speed); + speed--; + hasSpeeds |= 1 << i; + madeProgress = TRUE; + } + } + for (i = 0; i < DATA.opponentPartySize; i++) + { + if (!(hasSpeeds & ((1 << 6) << i)) + && !(DATA.slowerThan[B_SIDE_OPPONENT][i] & ~hasSpeeds)) + { + SetMonData(&DATA.recordedBattle.opponentParty[i], MON_DATA_SPEED, &speed); + speed--; + hasSpeeds |= (1 << 6) << i; + madeProgress = TRUE; + } + } + if (!madeProgress) + Test_ExitWithResult(TEST_RESULT_INVALID, "TURNs have contradictory speeds"); + } +} + +static void BattleTest_Run(void *data) +{ + s32 i; + u32 requiredPlayerPartySize; + u32 requiredOpponentPartySize; + const struct BattleTest *test = data; + + memset(&DATA, 0, sizeof(DATA)); + + DATA.recordedBattle.rngSeed = RNG_SEED_DEFAULT; + + DATA.recordedBattle.textSpeed = OPTIONS_TEXT_SPEED_FAST; + DATA.recordedBattle.battleFlags = BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_IS_MASTER; + if (test->type == BATTLE_TEST_DOUBLES) + DATA.recordedBattle.battleFlags |= BATTLE_TYPE_DOUBLE; + for (i = 0; i < STATE->battlersCount; i++) + { + DATA.recordedBattle.playersName[i][0] = CHAR_1 + i; + DATA.recordedBattle.playersName[i][1] = EOS; + DATA.recordedBattle.playersLanguage[i] = GAME_LANGUAGE; + DATA.recordedBattle.playersBattlers[i] = i; + + DATA.currentMonIndexes[i] = (i & BIT_FLANK) == B_FLANK_LEFT ? 0 : 1; + } + + STATE->runRandomly = TRUE; + STATE->runGiven = TRUE; + STATE->runWhen = TRUE; + STATE->runScene = TRUE; + InvokeTestFunction(test); + STATE->runRandomly = FALSE; + STATE->runGiven = FALSE; + STATE->runWhen = FALSE; + STATE->runScene = FALSE; + + requiredPlayerPartySize = 0; + requiredOpponentPartySize = 0; + for (i = 0; i < STATE->battlersCount; i++) + { + if ((i & BIT_SIDE) == B_SIDE_PLAYER) + requiredPlayerPartySize = DATA.currentMonIndexes[i] + 1; + else + requiredOpponentPartySize = DATA.currentMonIndexes[i] + 1; + } + if (DATA.playerPartySize < requiredPlayerPartySize) + Test_ExitWithResult(TEST_RESULT_INVALID, "%d PLAYER Pokemon required", requiredPlayerPartySize); + if (DATA.opponentPartySize < requiredOpponentPartySize) + Test_ExitWithResult(TEST_RESULT_INVALID, "%d OPPONENT Pokemon required", requiredOpponentPartySize); + + for (i = 0; i < STATE->battlersCount; i++) + PushBattlerAction(0, i, RECORDED_BYTE, 0xFF); + + if (DATA.hasExplicitSpeeds) + { + if (DATA.explicitSpeeds[B_SIDE_PLAYER] != (1 << DATA.playerPartySize) - 1 + && DATA.explicitSpeeds[B_SIDE_OPPONENT] != (1 << DATA.opponentPartySize) - 1) + { + Test_ExitWithResult(TEST_RESULT_INVALID, "Speed required for all PLAYERs and OPPONENTs"); + } + } + else + { + SetImplicitSpeeds(); + } + + SetVariablesForRecordedBattle(&DATA.recordedBattle); + + if (STATE->trials) + gMain.savedCallback = CB2_BattleTest_NextTrial; + else if (STATE->parameters) + gMain.savedCallback = CB2_BattleTest_NextParameter; + else + gMain.savedCallback = CB2_TestRunner; + SetMainCallback2(CB2_InitBattle); + + STATE->checkProgressParameter = 0; + STATE->checkProgressTrial = 0; + STATE->checkProgressTurn = 0; + + if (STATE->trials && STATE->parameters) + MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); + else if (STATE->trials) + MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); + else if (STATE->parameters) + MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters); +} + +static s32 TryAbilityPopUp(s32 i, s32 n, u32 battlerId, u32 ability) +{ + struct QueuedAbilityEvent *event; + s32 iMax = i + n; + for (; i < iMax; i++) + { + if (DATA.queuedEvents[i].type != QUEUED_ABILITY_POPUP_EVENT) + continue; + + event = &DATA.queuedEvents[i].as.ability; + + if (event->battlerId == battlerId + && (event->ability == ABILITY_NONE || event->ability == ability)) + return i; + } + return -1; +} + +void TestRunner_Battle_RecordAbilityPopUp(u32 battlerId, u32 ability) +{ + s32 queuedEvent; + s32 match; + struct QueuedEvent *event; + + if (DATA.queuedEvent == DATA.queuedEventsCount) + return; + + event = &DATA.queuedEvents[DATA.queuedEvent]; + switch (event->groupType) + { + case QUEUE_GROUP_NONE: + case QUEUE_GROUP_ONE_OF: + if (TryAbilityPopUp(DATA.queuedEvent, event->groupSize, battlerId, ability) != -1) + DATA.queuedEvent += event->groupSize; + break; + case QUEUE_GROUP_NONE_OF: + queuedEvent = DATA.queuedEvent; + do + { + if ((match = TryAbilityPopUp(queuedEvent, event->groupSize, battlerId, ability)) != -1) + { + const char *filename = gTestRunnerState.test->filename; + u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset); + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched ABILITY_POPUP", filename, line); + } + + queuedEvent += event->groupSize; + if (queuedEvent == DATA.queuedEventsCount) + break; + + event = &DATA.queuedEvents[queuedEvent]; + if (event->groupType == QUEUE_GROUP_NONE_OF) + continue; + + if (TryAbilityPopUp(queuedEvent, event->groupSize, battlerId, ability) != -1) + DATA.queuedEvent = queuedEvent + event->groupSize; + } while (FALSE); + break; + } +} + +static s32 TryAnimation(s32 i, s32 n, u32 animType, u32 animId) +{ + struct QueuedAnimationEvent *event; + s32 iMax = i + n; + for (; i < iMax; i++) + { + if (DATA.queuedEvents[i].type != QUEUED_ANIMATION_EVENT) + continue; + + event = &DATA.queuedEvents[i].as.animation; + + if (event->type == animType + && event->id == animId + && (event->attacker == 0xF || event->attacker == gBattleAnimAttacker) + && (event->target == 0xF || event->target == gBattleAnimTarget)) + return i; + } + return -1; +} + +void TestRunner_Battle_RecordAnimation(u32 animType, u32 animId) +{ + s32 queuedEvent; + s32 match; + struct QueuedEvent *event; + + if (DATA.queuedEvent == DATA.queuedEventsCount) + return; + + event = &DATA.queuedEvents[DATA.queuedEvent]; + switch (event->groupType) + { + case QUEUE_GROUP_NONE: + case QUEUE_GROUP_ONE_OF: + if (TryAnimation(DATA.queuedEvent, event->groupSize, animType, animId) != -1) + DATA.queuedEvent += event->groupSize; + break; + case QUEUE_GROUP_NONE_OF: + queuedEvent = DATA.queuedEvent; + do + { + if ((match = TryAnimation(queuedEvent, event->groupSize, animType, animId)) != -1) + { + const char *filename = gTestRunnerState.test->filename; + u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset); + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched ANIMATION", filename, line); + } + + queuedEvent += event->groupSize; + if (queuedEvent == DATA.queuedEventsCount) + break; + + event = &DATA.queuedEvents[queuedEvent]; + if (event->groupType == QUEUE_GROUP_NONE_OF) + continue; + + if (TryAnimation(queuedEvent, event->groupSize, animType, animId) != -1) + DATA.queuedEvent = queuedEvent + event->groupSize; + } while (FALSE); + break; + } +} + +static s32 TryHP(s32 i, s32 n, u32 battlerId, u32 oldHP, u32 newHP) +{ + struct QueuedHPEvent *event; + s32 iMax = i + n; + for (; i < iMax; i++) + { + if (DATA.queuedEvents[i].type != QUEUED_HP_EVENT) + continue; + + event = &DATA.queuedEvents[i].as.hp; + + if (event->battlerId == battlerId) + { + if (event->address <= 0xFFFF) + { + switch (event->type) + { + case HP_EVENT_NEW_HP: + if (event->address == newHP) + return i; + break; + case HP_EVENT_DELTA_HP: + if (event->address == 0) + return i; + else if ((s16)event->address == oldHP - newHP) + return i; + break; + } + } + else + { + switch (event->type) + { + case HP_EVENT_NEW_HP: + *(u16 *)event->address = newHP; + break; + case HP_EVENT_DELTA_HP: + *(s16 *)event->address = oldHP - newHP; + break; + } + return i; + } + } + } + return -1; +} + +void TestRunner_Battle_RecordHP(u32 battlerId, u32 oldHP, u32 newHP) +{ + s32 queuedEvent; + s32 match; + struct QueuedEvent *event; + + if (DATA.queuedEvent == DATA.queuedEventsCount) + return; + + event = &DATA.queuedEvents[DATA.queuedEvent]; + switch (event->groupType) + { + case QUEUE_GROUP_NONE: + case QUEUE_GROUP_ONE_OF: + if (TryHP(DATA.queuedEvent, event->groupSize, battlerId, oldHP, newHP) != -1) + DATA.queuedEvent += event->groupSize; + break; + case QUEUE_GROUP_NONE_OF: + queuedEvent = DATA.queuedEvent; + do + { + if ((match = TryHP(queuedEvent, event->groupSize, battlerId, oldHP, newHP)) != -1) + { + const char *filename = gTestRunnerState.test->filename; + u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset); + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched HP_BAR", filename, line); + } + + queuedEvent += event->groupSize; + if (queuedEvent == DATA.queuedEventsCount) + break; + + event = &DATA.queuedEvents[queuedEvent]; + if (event->groupType == QUEUE_GROUP_NONE_OF) + continue; + + if (TryHP(queuedEvent, event->groupSize, battlerId, oldHP, newHP) != -1) + DATA.queuedEvent = queuedEvent + event->groupSize; + } while (FALSE); + break; + } +} + +static s32 TryMessage(s32 i, s32 n, const u8 *string) +{ + s32 j, k; + struct QueuedMessageEvent *event; + s32 iMax = i + n; + for (; i < iMax; i++) + { + if (DATA.queuedEvents[i].type != QUEUED_MESSAGE_EVENT) + continue; + + event = &DATA.queuedEvents[i].as.message; + for (j = k = 0; ; j++, k++) + { + if (event->pattern[k] == CHAR_SPACE) + { + switch (string[j]) + { + case CHAR_SPACE: + case CHAR_PROMPT_SCROLL: + case CHAR_PROMPT_CLEAR: + case CHAR_NEWLINE: + j++; + k++; + break; + } + } + if (event->pattern[k] == EOS) + { + // Consume any trailing '\p'. + if (string[j] == CHAR_PROMPT_CLEAR) + j++; + } + if (string[j] != event->pattern[k]) + { + break; + } + else if (string[j] == EOS) + { + return i; + } + } + } + return -1; +} + +void TestRunner_Battle_RecordMessage(const u8 *string) +{ + s32 queuedEvent; + s32 match; + struct QueuedEvent *event; + + if (DATA.queuedEvent == DATA.queuedEventsCount) + return; + + event = &DATA.queuedEvents[DATA.queuedEvent]; + switch (event->groupType) + { + case QUEUE_GROUP_NONE: + case QUEUE_GROUP_ONE_OF: + if (TryMessage(DATA.queuedEvent, event->groupSize, string) != -1) + DATA.queuedEvent += event->groupSize; + break; + case QUEUE_GROUP_NONE_OF: + queuedEvent = DATA.queuedEvent; + do + { + if ((match = TryMessage(queuedEvent, event->groupSize, string)) != -1) + { + const char *filename = gTestRunnerState.test->filename; + u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset); + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched MESSAGE", filename, line); + } + + queuedEvent += event->groupSize; + if (queuedEvent == DATA.queuedEventsCount) + break; + + event = &DATA.queuedEvents[queuedEvent]; + if (event->groupType == QUEUE_GROUP_NONE_OF) + continue; + + if (TryMessage(queuedEvent, event->groupSize, string) != -1) + DATA.queuedEvent = queuedEvent + event->groupSize; + } while (FALSE); + break; + } +} + +static s32 TryStatus(s32 i, s32 n, u32 battlerId, u32 status1) +{ + struct QueuedStatusEvent *event; + s32 iMax = i + n; + for (; i < iMax; i++) + { + if (DATA.queuedEvents[i].type != QUEUED_STATUS_EVENT) + continue; + + event = &DATA.queuedEvents[i].as.status; + + if (event->battlerId == battlerId) + { + if (event->mask == 0 && status1 == STATUS1_NONE) + return i; + else if (event->mask & status1) + return i; + } + } + return -1; +} + +void TestRunner_Battle_RecordStatus1(u32 battlerId, u32 status1) +{ + s32 queuedEvent; + s32 match; + struct QueuedEvent *event; + + if (DATA.queuedEvent == DATA.queuedEventsCount) + return; + + event = &DATA.queuedEvents[DATA.queuedEvent]; + switch (event->groupType) + { + case QUEUE_GROUP_NONE: + case QUEUE_GROUP_ONE_OF: + if (TryStatus(DATA.queuedEvent, event->groupSize, battlerId, status1) != -1) + DATA.queuedEvent += event->groupSize; + break; + case QUEUE_GROUP_NONE_OF: + queuedEvent = DATA.queuedEvent; + do + { + if ((match = TryStatus(queuedEvent, event->groupSize, battlerId, status1)) != -1) + { + const char *filename = gTestRunnerState.test->filename; + u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset); + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched STATUS_ICON", filename, line); + } + + queuedEvent += event->groupSize; + if (queuedEvent == DATA.queuedEventsCount) + break; + + event = &DATA.queuedEvents[queuedEvent]; + if (event->groupType == QUEUE_GROUP_NONE_OF) + continue; + + if (TryStatus(queuedEvent, event->groupSize, battlerId, status1) != -1) + DATA.queuedEvent = queuedEvent + event->groupSize; + } while (FALSE); + break; + } +} + +static const char *const sEventTypeMacros[] = +{ + [QUEUED_ABILITY_POPUP_EVENT] = "ABILITY_POPUP", + [QUEUED_ANIMATION_EVENT] = "ANIMATION", + [QUEUED_HP_EVENT] = "HP_BAR", + [QUEUED_MESSAGE_EVENT] = "MESSAGE", + [QUEUED_STATUS_EVENT] = "STATUS_ICON", +}; + +void TestRunner_Battle_AfterLastTurn(void) +{ + const struct BattleTest *test = gTestRunnerState.test->data; + + if (DATA.turns - 1 != DATA.lastActionTurn) + { + const char *filename = gTestRunnerState.test->filename; + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: %d TURNs specified, but %d ran", filename, SourceLine(0), DATA.turns, DATA.lastActionTurn + 1); + } + + while (DATA.queuedEvent < DATA.queuedEventsCount + && DATA.queuedEvents[DATA.queuedEvent].groupType == QUEUE_GROUP_NONE_OF) + { + DATA.queuedEvent += DATA.queuedEvents[DATA.queuedEvent].groupSize; + } + if (DATA.queuedEvent != DATA.queuedEventsCount) + { + const char *filename = gTestRunnerState.test->filename; + u32 line = SourceLine(DATA.queuedEvents[DATA.queuedEvent].sourceLineOffset); + const char *macro = sEventTypeMacros[DATA.queuedEvents[DATA.queuedEvent].type]; + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched %s", filename, line, macro); + } + + STATE->runThen = TRUE; + STATE->runFinally = STATE->runParameter + 1 == STATE->parameters; + InvokeTestFunction(test); + STATE->runThen = FALSE; + STATE->runFinally = FALSE; +} + +static void CB2_BattleTest_NextParameter(void) +{ + if (++STATE->runParameter >= STATE->parameters) + SetMainCallback2(CB2_TestRunner); + else + BattleTest_Run(gTestRunnerState.test->data); +} + +static void CB2_BattleTest_NextTrial(void) +{ + FreeMonSpritesGfx(); + FreeBattleSpritesData(); + FreeBattleResources(); + FreeAllWindowBuffers(); + + SetMainCallback2(CB2_BattleTest_NextParameter); + + if (++STATE->runTrial < STATE->trials) + { + switch (gTestRunnerState.result) + { + case TEST_RESULT_FAIL: + break; + case TEST_RESULT_PASS: + STATE->observedPasses++; + break; + case TEST_RESULT_SKIP: + STATE->skippedTrials++; + if (STATE->skippedTrials > STATE->trials / 4) + Test_ExitWithResult(TEST_RESULT_INVALID, "25%% of the trials were SKIPed"); + break; + default: + return; + } + if (STATE->parameters) + MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); + else + MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); + gTestRunnerState.result = TEST_RESULT_PASS; + DATA.recordedBattle.rngSeed = ISO_RANDOMIZE1(STATE->runTrial); + DATA.queuedEvent = 0; + DATA.lastActionTurn = 0; + DATA.nextRNGTurn = 0; + SetVariablesForRecordedBattle(&DATA.recordedBattle); + SetMainCallback2(CB2_InitBattle); + } + else + { + // This is a tolerance of +/- 4%. + if (abs(STATE->observedPasses - STATE->expectedPasses) <= 2) + gTestRunnerState.result = TEST_RESULT_PASS; + else + Test_ExitWithResult(TEST_RESULT_FAIL, "Expected %d/%d passes, observed %d/%d", STATE->expectedPasses, STATE->trials, STATE->observedPasses, STATE->trials); + } +} + +static void BattleTest_TearDown(void *data) +{ + if (STATE) + { + FREE_AND_SET_NULL(STATE->results); + FREE_AND_SET_NULL(STATE); + } +} + +static bool32 BattleTest_CheckProgress(void *data) +{ + bool32 madeProgress + = STATE->checkProgressParameter < STATE->runParameter + || STATE->checkProgressTrial < STATE->runTrial + || STATE->checkProgressTurn < gBattleResults.battleTurnCounter; + STATE->checkProgressParameter = STATE->runParameter; + STATE->checkProgressTrial = STATE->runTrial; + STATE->checkProgressTurn = gBattleResults.battleTurnCounter; + return madeProgress; +} + +static bool32 BattleTest_HandleExitWithResult(void *data, enum TestResult result) +{ + if (result != TEST_RESULT_INVALID + && result != TEST_RESULT_ERROR + && result != TEST_RESULT_TIMEOUT + && STATE->runTrial < STATE->trials) + { + SetMainCallback2(CB2_BattleTest_NextTrial); + return TRUE; + } + else + { + return FALSE; + } +} + +void Randomly(u32 sourceLine, u32 passes, u32 trials) +{ + INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); + // This is a precision of 2%. + STATE->trials = 50; + STATE->expectedPasses = STATE->trials * passes / trials; + STATE->observedPasses = 0; + STATE->skippedTrials = 0; + STATE->runTrial = 0; + DATA.recordedBattle.rngSeed = 0; +} + +void RNGSeed_(u32 sourceLine, u32 seed) +{ + INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); + DATA.recordedBattle.rngSeed = seed; +} + +const struct TestRunner gBattleTestRunner = +{ + .estimateCost = BattleTest_EstimateCost, + .setUp = BattleTest_SetUp, + .run = BattleTest_Run, + .tearDown = BattleTest_TearDown, + .checkProgress = BattleTest_CheckProgress, + .handleExitWithResult = BattleTest_HandleExitWithResult, +}; + +void OpenPokemon(u32 sourceLine, u32 side, u32 species) +{ + s32 i, data; + u8 *partySize; + struct Pokemon *party; + INVALID_IF(species >= SPECIES_EGG, "Invalid species: %d", species); + if (side == B_SIDE_PLAYER) + { + partySize = &DATA.playerPartySize; + party = DATA.recordedBattle.playerParty; + } + else + { + partySize = &DATA.opponentPartySize; + party = DATA.recordedBattle.opponentParty; + } + INVALID_IF(*partySize == PARTY_SIZE, "Too many Pokemon in party"); + DATA.currentSide = side; + DATA.currentPartyIndex = *partySize; + DATA.currentMon = &party[DATA.currentPartyIndex]; + DATA.gender = MON_MALE; + DATA.nature = NATURE_HARDY; + (*partySize)++; + + CreateMon(DATA.currentMon, species, 100, 0, TRUE, 0, OT_ID_PRESET, 0); + data = MOVE_NONE; + for (i = 0; i < MAX_MON_MOVES; i++) + SetMonData(DATA.currentMon, MON_DATA_MOVE1 + i, &data); +} + +// (sNaturePersonalities[i] % NUM_NATURES) == i +// (sNaturePersonalities[i] & 0xFF) == 0 +// NOTE: Using 25 << 8 rather than 0 << 8 to prevent shiny females. +static const u16 sNaturePersonalities[NUM_NATURES] = +{ + 25 << 8, 21 << 8, 17 << 8, 13 << 8, 9 << 8, + 5 << 8, 1 << 8, 22 << 8, 18 << 8, 14 << 8, + 10 << 8, 6 << 8, 2 << 8, 23 << 8, 19 << 8, + 15 << 8, 11 << 8, 7 << 8, 3 << 8, 24 << 8, + 20 << 8, 16 << 8, 12 << 8, 8 << 8, 4 << 8, +}; + +static u32 GenerateNature(u32 nature, u32 offset) +{ + int i; + if (offset <= nature) + nature -= offset; + else + nature = nature + NUM_NATURES - offset; + return sNaturePersonalities[nature]; +} + +void ClosePokemon(u32 sourceLine) +{ + s32 i; + INVALID_IF(DATA.hasExplicitSpeeds && !(DATA.explicitSpeeds[DATA.currentSide] & (1 << DATA.currentPartyIndex)), "Speed required"); + for (i = 0; i < STATE->battlersCount; i++) + { + if ((i & BIT_SIDE) == DATA.currentSide + && DATA.currentMonIndexes[i] == DATA.currentPartyIndex) + { + INVALID_IF(GetMonData(DATA.currentMon, MON_DATA_HP) == 0, "Battlers cannot be fainted"); + } + } + UpdateMonPersonality(&DATA.currentMon->box, GenerateNature(DATA.nature, DATA.gender % NUM_NATURES) | DATA.gender); + DATA.currentMon = NULL; +} + +void Gender_(u32 sourceLine, u32 gender) +{ + const struct SpeciesInfo *info; + INVALID_IF(!DATA.currentMon, "Gender outside of PLAYER/OPPONENT"); + info = &gSpeciesInfo[GetMonData(DATA.currentMon, MON_DATA_SPECIES)]; + switch (gender) + { + case MON_MALE: + DATA.gender = 0xFF; + INVALID_IF(info->genderRatio == MON_GENDERLESS || info->genderRatio == MON_FEMALE, "Illegal male"); + break; + case MON_FEMALE: + DATA.gender = 0x00; + INVALID_IF(info->genderRatio == MON_GENDERLESS || info->genderRatio == MON_MALE, "Illegal female"); + break; + case MON_GENDERLESS: + INVALID_IF(info->genderRatio != gender, "Illegal genderless"); + break; + } +} + +void Nature_(u32 sourceLine, u32 nature) +{ + INVALID_IF(!DATA.currentMon, "Nature outside of PLAYER/OPPONENT"); + INVALID_IF(nature >= NUM_NATURES, "Illegal nature: %d", nature); + DATA.nature = nature; +} + +void Ability_(u32 sourceLine, u32 ability) +{ + s32 i; + u32 species; + const struct SpeciesInfo *info; + INVALID_IF(!DATA.currentMon, "Ability outside of PLAYER/OPPONENT"); + species = GetMonData(DATA.currentMon, MON_DATA_SPECIES); + info = &gSpeciesInfo[species]; + for (i = 0; i < NUM_ABILITY_SLOTS; i++) + { + if (info->abilities[i] == ability) + { + SetMonData(DATA.currentMon, MON_DATA_ABILITY_NUM, &i); + break; + } + } + INVALID_IF(i == NUM_ABILITY_SLOTS, "%S cannot have %S", gSpeciesNames[species], gAbilityNames[ability]); +} + +void Level_(u32 sourceLine, u32 level) +{ + // TODO: Preserve any explicitly-set stats. + INVALID_IF(!DATA.currentMon, "Level outside of PLAYER/OPPONENT"); + INVALID_IF(level == 0 || level > MAX_LEVEL, "Illegal level: %d", level); + SetMonData(DATA.currentMon, MON_DATA_LEVEL, &level); +} + +void MaxHP_(u32 sourceLine, u32 maxHP) +{ + INVALID_IF(!DATA.currentMon, "MaxHP outside of PLAYER/OPPONENT"); + INVALID_IF(maxHP == 0, "Illegal max HP: %d", maxHP); + SetMonData(DATA.currentMon, MON_DATA_MAX_HP, &maxHP); +} + +void HP_(u32 sourceLine, u32 hp) +{ + INVALID_IF(!DATA.currentMon, "HP outside of PLAYER/OPPONENT"); + if (hp > GetMonData(DATA.currentMon, MON_DATA_MAX_HP)) + SetMonData(DATA.currentMon, MON_DATA_MAX_HP, &hp); + SetMonData(DATA.currentMon, MON_DATA_HP, &hp); +} + +void Attack_(u32 sourceLine, u32 attack) +{ + INVALID_IF(!DATA.currentMon, "Attack outside of PLAYER/OPPONENT"); + INVALID_IF(attack == 0, "Illegal attack: %d", attack); + SetMonData(DATA.currentMon, MON_DATA_ATK, &attack); +} + +void Defense_(u32 sourceLine, u32 defense) +{ + INVALID_IF(!DATA.currentMon, "Defense outside of PLAYER/OPPONENT"); + INVALID_IF(defense == 0, "Illegal defense: %d", defense); + SetMonData(DATA.currentMon, MON_DATA_DEF, &defense); +} + +void SpAttack_(u32 sourceLine, u32 spAttack) +{ + INVALID_IF(!DATA.currentMon, "SpAttack outside of PLAYER/OPPONENT"); + INVALID_IF(spAttack == 0, "Illegal special attack: %d", spAttack); + SetMonData(DATA.currentMon, MON_DATA_SPATK, &spAttack); +} + +void SpDefense_(u32 sourceLine, u32 spDefense) +{ + INVALID_IF(!DATA.currentMon, "SpDefense outside of PLAYER/OPPONENT"); + INVALID_IF(spDefense == 0, "Illegal special defense: %d", spDefense); + SetMonData(DATA.currentMon, MON_DATA_SPDEF, &spDefense); +} + +void Speed_(u32 sourceLine, u32 speed) +{ + INVALID_IF(!DATA.currentMon, "Speed outside of PLAYER/OPPONENT"); + INVALID_IF(speed == 0, "Illegal speed: %d", speed); + SetMonData(DATA.currentMon, MON_DATA_SPEED, &speed); + DATA.hasExplicitSpeeds = TRUE; + DATA.explicitSpeeds[DATA.currentSide] |= 1 << DATA.currentPartyIndex; +} + +void Item_(u32 sourceLine, u32 item) +{ + INVALID_IF(!DATA.currentMon, "Item outside of PLAYER/OPPONENT"); + INVALID_IF(item >= ITEMS_COUNT, "Illegal item: %d", item); + SetMonData(DATA.currentMon, MON_DATA_HELD_ITEM, &item); +} + +void Moves_(u32 sourceLine, const u16 moves[MAX_MON_MOVES]) +{ + s32 i; + INVALID_IF(!DATA.currentMon, "Moves outside of PLAYER/OPPONENT"); + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] == MOVE_NONE) + break; + INVALID_IF(moves[i] >= MOVES_COUNT, "Illegal move: %d", moves[i]); + SetMonData(DATA.currentMon, MON_DATA_MOVE1 + i, &moves[i]); + SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &gBattleMoves[moves[i]].pp); + } + DATA.explicitMoves[DATA.currentSide] |= 1 << DATA.currentPartyIndex; +} + +void Friendship_(u32 sourceLine, u32 friendship) +{ + INVALID_IF(!DATA.currentMon, "Friendship outside of PLAYER/OPPONENT"); + SetMonData(DATA.currentMon, MON_DATA_FRIENDSHIP, &friendship); +} + +void Status1_(u32 sourceLine, u32 status1) +{ + INVALID_IF(!DATA.currentMon, "Status1 outside of PLAYER/OPPONENT"); + INVALID_IF(status1 & STATUS1_TOXIC_COUNTER, "Illegal status1: has TOXIC_TURN"); + SetMonData(DATA.currentMon, MON_DATA_STATUS, &status1); +} + +static void PushBattlerAction(u32 sourceLine, s32 battlerId, u32 actionType, u32 byte) +{ + u32 recordIndex = DATA.recordIndexes[battlerId]++; + if (recordIndex >= BATTLER_RECORD_SIZE) + Test_ExitWithResult(TEST_RESULT_INVALID, "Too many actions"); + DATA.battleRecordTypes[battlerId][recordIndex] = actionType; + DATA.battleRecordSourceLineOffsets[battlerId][recordIndex] = SourceLineOffset(sourceLine); + DATA.recordedBattle.battleRecord[battlerId][recordIndex] = byte; +} + +void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType) +{ + // TODO: Support explicit seeds for each turn? + if (DATA.nextRNGTurn == gBattleResults.battleTurnCounter + && (DATA.recordedBattle.rngSeed == RNG_SEED_DEFAULT + || DATA.recordedBattle.rngSeed == RNG_SEED_CRITICAL_HIT + || DATA.recordedBattle.rngSeed == RNG_SEED_MISS)) + { + gRngValue = DATA.recordedBattle.rngSeed; + DATA.nextRNGTurn++; + } + + // An illegal move choice will cause the battle to request a new + // move slot and target. This detects the move slot. + if (actionType == RECORDED_MOVE_SLOT + && recordIndex > 0 + && DATA.battleRecordTypes[battlerId][recordIndex-1] != RECORDED_ACTION_TYPE) + { + s32 i; + const char *filename = gTestRunnerState.test->filename; + for (i = recordIndex; i > 0; i--) + { + if (DATA.battleRecordTypes[battlerId][i-1] == RECORDED_ACTION_TYPE + && DATA.recordedBattle.battleRecord[battlerId][i-1] == B_ACTION_USE_MOVE) + { + u32 line = SourceLine(DATA.battleRecordSourceLineOffsets[battlerId][i-1]); + Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: Illegal MOVE", filename, line); + } + } + Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: Illegal MOVE", filename, SourceLine(0)); + } + + if (DATA.battleRecordTypes[battlerId][recordIndex] != RECORDED_BYTE) + { + DATA.lastActionTurn = gBattleResults.battleTurnCounter; + + if (actionType != DATA.battleRecordTypes[battlerId][recordIndex]) + { + const char *actualMacro = NULL; + const char *filename = gTestRunnerState.test->filename; + u32 line = SourceLine(DATA.battleRecordSourceLineOffsets[battlerId][recordIndex]); + + switch (DATA.battleRecordTypes[battlerId][recordIndex]) + { + case RECORDED_ACTION_TYPE: + switch (DATA.recordedBattle.battleRecord[battlerId][recordIndex]) + { + case B_ACTION_USE_MOVE: + actualMacro = "MOVE"; + break; + case B_ACTION_SWITCH: + actualMacro = "SWITCH"; + break; + } + break; + case RECORDED_PARTY_INDEX: + actualMacro = "SEND_OUT"; + break; + } + + if (actualMacro) + { + switch (actionType) + { + case RECORDED_ACTION_TYPE: + Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: Expected MOVE/SWITCH, got %s", filename, line, actualMacro); + case RECORDED_PARTY_INDEX: + Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: Expected SEND_OUT, got %s", filename, line, actualMacro); + } + } + + Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: Illegal battle record", filename, line); + } + } + else + { + if (DATA.lastActionTurn == gBattleResults.battleTurnCounter) + { + const char *filename = gTestRunnerState.test->filename; + Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: TURN %d incomplete", filename, SourceLine(0), gBattleResults.battleTurnCounter + 1); + } + } +} + +void OpenTurn(u32 sourceLine) +{ + INVALID_IF(DATA.turnState != TURN_CLOSED, "Nested TURN"); + DATA.turnState = TURN_OPEN; + DATA.actionBattlers = 0x00; + DATA.moveBattlers = 0x00; + DATA.hasRNGActions = FALSE; +} + +static void SetSlowerThan(s32 battlerId) +{ + s32 i, slowerThan; + slowerThan = 0; + for (i = 0; i < STATE->battlersCount; i++) + { + if (i == battlerId) + continue; + if (DATA.moveBattlers & (1 << i)) + { + if ((i & BIT_SIDE) == B_SIDE_PLAYER) + slowerThan |= 1 << DATA.currentMonIndexes[i]; + else + slowerThan |= (1 << 6) << DATA.currentMonIndexes[i]; + } + } + DATA.slowerThan[battlerId & BIT_SIDE][DATA.currentMonIndexes[battlerId]] |= slowerThan; +} + +void CloseTurn(u32 sourceLine) +{ + s32 i; + INVALID_IF(DATA.turnState != TURN_OPEN, "Nested TURN"); + DATA.turnState = TURN_CLOSING; + for (i = 0; i < STATE->battlersCount; i++) + { + if (!(DATA.actionBattlers & (1 << i))) + Move(sourceLine, &gBattleMons[i], (struct MoveContext) { move: MOVE_CELEBRATE, explicitMove: TRUE }); + } + DATA.turnState = TURN_CLOSED; + DATA.turns++; +} + +static struct Pokemon *CurrentMon(s32 battlerId) +{ + struct Pokemon *party; + if ((battlerId & BIT_SIDE) == B_SIDE_PLAYER) + party = DATA.recordedBattle.playerParty; + else + party = DATA.recordedBattle.opponentParty; + return &party[DATA.currentMonIndexes[battlerId]]; +} + +void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) +{ + s32 i; + s32 battlerId = battler - gBattleMons; + struct Pokemon *mon = CurrentMon(battlerId); + u32 moveId, moveSlot; + s32 target; + + INVALID_IF(DATA.turnState == TURN_CLOSED, "MOVE outside TURN"); + + if (ctx.explicitMove) + { + INVALID_IF(ctx.move == MOVE_NONE || ctx.move >= MOVES_COUNT, "Illegal move: %d", ctx.move); + for (i = 0; i < MAX_MON_MOVES; i++) + { + moveId = GetMonData(mon, MON_DATA_MOVE1 + i); + if (moveId == ctx.move) + { + moveSlot = i; + break; + } + else if (moveId == MOVE_NONE) + { + INVALID_IF(DATA.explicitMoves[battlerId & BIT_SIDE] & (1 << DATA.currentMonIndexes[battlerId]), "Missing explicit %S", gMoveNames[ctx.move]); + INVALID_IF(i == MAX_MON_MOVES, "Too many different moves"); + SetMonData(mon, MON_DATA_MOVE1 + i, &ctx.move); + SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &gBattleMoves[ctx.move].pp); + moveSlot = i; + moveId = ctx.move; + break; + } + } + } + else if (ctx.explicitMoveSlot) + { + moveSlot = ctx.moveSlot; + moveId = GetMonData(mon, MON_DATA_MOVE1 + moveSlot); + INVALID_IF(moveId == MOVE_NONE, "Empty moveSlot: %d", ctx.moveSlot); + } + else + { + INVALID("No move or moveSlot"); + } + + if (ctx.explicitMegaEvolve && ctx.megaEvolve) + moveSlot |= RET_MEGA_EVOLUTION; + + if (ctx.explicitTarget) + { + target = ctx.target - gBattleMons; + } + else + { + const struct BattleMove *move = &gBattleMoves[moveId]; + if (move->target == MOVE_TARGET_RANDOM + || move->target == MOVE_TARGET_BOTH + || move->target == MOVE_TARGET_FOES_AND_ALLY + || move->target == MOVE_TARGET_OPPONENTS_FIELD + || move->target == MOVE_TARGET_ALL_BATTLERS) + { + target = BATTLE_OPPOSITE(battlerId); + } + else if (move->target == MOVE_TARGET_SELECTED) + { + INVALID_IF(STATE->battlersCount > 2, "%S requires explicit target", gMoveNames[moveId]); + + target = BATTLE_OPPOSITE(battlerId); + } + else if (move->target == MOVE_TARGET_USER) + { + target = battlerId; + } + else if (move->target == MOVE_TARGET_ALLY) + { + target = BATTLE_PARTNER(battlerId); + } + else + { + INVALID("%S requires explicit target", gMoveNames[moveId]); + } + } + + if (ctx.explicitHit && !ctx.hit) + { + if (DATA.hasRNGActions != 0) + Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: hit only supported on the first move", gTestRunnerState.test->filename, sourceLine); + INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); + DATA.recordedBattle.rngSeed = RNG_SEED_MISS; + } + + if (ctx.explicitCriticalHit && ctx.criticalHit) + { + if (DATA.hasRNGActions != 0) + Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: criticalHit only supported on the first move", gTestRunnerState.test->filename, sourceLine); + INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); + DATA.recordedBattle.rngSeed = RNG_SEED_CRITICAL_HIT; + } + + if (!(DATA.actionBattlers & (1 << battlerId))) + { + PushBattlerAction(sourceLine, battlerId, RECORDED_ACTION_TYPE, B_ACTION_USE_MOVE); + } + + if (!ctx.explicitAllowed || ctx.allowed) + { + PushBattlerAction(sourceLine, battlerId, RECORDED_MOVE_SLOT, moveSlot); + PushBattlerAction(sourceLine, battlerId, RECORDED_MOVE_TARGET, target); + } + + if (DATA.turnState == TURN_OPEN) + { + if (!DATA.hasExplicitSpeeds) + SetSlowerThan(battlerId); + + DATA.actionBattlers |= 1 << battlerId; + DATA.moveBattlers |= 1 << battlerId; + } + + // WARNING: Approximation. The move could still cause the RNG to + // advance. + if (gBattleMoves[moveId].accuracy != 0 + || gBattleMoves[moveId].split != SPLIT_STATUS) + { + DATA.hasRNGActions = TRUE; + } +} + +void ForcedMove(u32 sourceLine, struct BattlePokemon *battler) +{ + s32 battlerId = battler - gBattleMons; + INVALID_IF(DATA.turnState == TURN_CLOSED, "SKIP_TURN outside TURN"); + PushBattlerAction(sourceLine, battlerId, RECORDED_ACTION_TYPE, B_ACTION_USE_MOVE); + if (DATA.turnState == TURN_OPEN) + { + if (!DATA.hasExplicitSpeeds) + SetSlowerThan(battlerId); + + DATA.actionBattlers |= 1 << battlerId; + DATA.moveBattlers |= 1 << battlerId; + } +} + +void Switch(u32 sourceLine, struct BattlePokemon *battler, u32 partyIndex) +{ + s32 i; + s32 battlerId = battler - gBattleMons; + INVALID_IF(DATA.turnState == TURN_CLOSED, "SWITCH outside TURN"); + INVALID_IF(DATA.actionBattlers & (1 << battlerId), "Multiple battler actions"); + INVALID_IF(partyIndex >= ((battlerId & BIT_SIDE) == B_SIDE_PLAYER ? DATA.playerPartySize : DATA.opponentPartySize), "SWITCH to invalid party index"); + + for (i = 0; i < STATE->battlersCount; i++) + { + if (battlerId != i && (battlerId & BIT_SIDE) == (i & BIT_SIDE)) + INVALID_IF(DATA.currentMonIndexes[i] == partyIndex, "SWITCH to battler"); + } + + PushBattlerAction(sourceLine, battlerId, RECORDED_ACTION_TYPE, B_ACTION_SWITCH); + PushBattlerAction(sourceLine, battlerId, RECORDED_PARTY_INDEX, partyIndex); + DATA.currentMonIndexes[battlerId] = partyIndex; + + DATA.actionBattlers |= 1 << battlerId; +} + +void SkipTurn(u32 sourceLine, struct BattlePokemon *battler) +{ + s32 battlerId = battler - gBattleMons; + INVALID_IF(DATA.turnState == TURN_CLOSED, "SKIP_TURN outside TURN"); + DATA.actionBattlers |= 1 << battlerId; +} + +void SendOut(u32 sourceLine, struct BattlePokemon *battler, u32 partyIndex) +{ + s32 i; + s32 battlerId = battler - gBattleMons; + INVALID_IF(DATA.turnState == TURN_CLOSED, "SEND_OUT outside TURN"); + INVALID_IF(partyIndex >= ((battlerId & BIT_SIDE) == B_SIDE_PLAYER ? DATA.playerPartySize : DATA.opponentPartySize), "SWITCH to invalid party index"); + for (i = 0; i < STATE->battlersCount; i++) + { + if (battlerId != i && (battlerId & BIT_SIDE) == (i & BIT_SIDE)) + INVALID_IF(DATA.currentMonIndexes[i] == partyIndex, "SEND_OUT to battler"); + } + if (!(DATA.actionBattlers & (1 << battlerId))) + Move(sourceLine, battler, (struct MoveContext) { move: MOVE_CELEBRATE, explicitMove: TRUE }); + PushBattlerAction(sourceLine, battlerId, RECORDED_PARTY_INDEX, partyIndex); + DATA.currentMonIndexes[battlerId] = partyIndex; +} + +static const char *const sQueueGroupTypeMacros[] = +{ + [QUEUE_GROUP_NONE] = NULL, + [QUEUE_GROUP_ONE_OF] = "ONE_OF", + [QUEUE_GROUP_NONE_OF] = "NONE_OF", +}; + +void OpenQueueGroup(u32 sourceLine, enum QueueGroupType type) +{ + INVALID_IF(DATA.queueGroupType, "%s inside %s", sQueueGroupTypeMacros[type], sQueueGroupTypeMacros[DATA.queueGroupType]); + DATA.queueGroupType = type; + DATA.queueGroupStart = DATA.queuedEventsCount; +} + +void CloseQueueGroup(u32 sourceLine) +{ + u32 groupSize = DATA.queuedEventsCount - DATA.queueGroupStart; + if (groupSize > 0) + { + DATA.queuedEvents[DATA.queueGroupStart].groupType = DATA.queueGroupType; + DATA.queuedEvents[DATA.queueGroupStart].groupSize = groupSize; + DATA.queueGroupType = QUEUE_GROUP_NONE; + } +} + +void QueueAbility(u32 sourceLine, struct BattlePokemon *battler, struct AbilityEventContext ctx) +{ +#if B_ABILITY_POP_UP + s32 battlerId = battler - gBattleMons; + INVALID_IF(!STATE->runScene, "ABILITY_POPUP outside of SCENE"); + if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS) + Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: ABILITY exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); + DATA.queuedEvents[DATA.queuedEventsCount++] = (struct QueuedEvent) { + .type = QUEUED_ABILITY_POPUP_EVENT, + .sourceLineOffset = SourceLineOffset(sourceLine), + .groupType = QUEUE_GROUP_NONE, + .groupSize = 1, + .as = { .ability = { + .battlerId = battlerId, + .ability = ctx.ability, + }}, + }; +#endif +} + +void QueueAnimation(u32 sourceLine, u32 type, u32 id, struct AnimationEventContext ctx) +{ + s32 attackerId, targetId; + + INVALID_IF(!STATE->runScene, "ANIMATION outside of SCENE"); + if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS) + Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: ANIMATION exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); + + attackerId = ctx.attacker ? ctx.attacker - gBattleMons : 0xF; + if (type == ANIM_TYPE_MOVE) + { + targetId = ctx.target ? ctx.target - gBattleMons : 0xF; + } + else + { + INVALID_IF(ctx.target, "ANIMATION target set for non-ANIM_TYPE_MOVE"); + targetId = 0xF; + } + + DATA.queuedEvents[DATA.queuedEventsCount++] = (struct QueuedEvent) { + .type = QUEUED_ANIMATION_EVENT, + .sourceLineOffset = SourceLineOffset(sourceLine), + .groupType = QUEUE_GROUP_NONE, + .groupSize = 1, + .as = { .animation = { + .type = type, + .id = id, + .attacker = attackerId, + .target = targetId, + }}, + }; +} + +void QueueHP(u32 sourceLine, struct BattlePokemon *battler, struct HPEventContext ctx) +{ + s32 battlerId = battler - gBattleMons; + u32 type; + uintptr_t address; + + INVALID_IF(!STATE->runScene, "HP_BAR outside of SCENE"); + if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS) + Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: HP_BAR exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); + + if (ctx.explicitHP) + { + type = HP_EVENT_NEW_HP; + address = (u16)ctx.hp; + } + else if (ctx.explicitDamage) + { + INVALID_IF(ctx.damage == 0, "damage is 0"); + type = HP_EVENT_DELTA_HP; + address = (u16)ctx.damage; + } + else if (ctx.explicitCaptureHP) + { + INVALID_IF(ctx.captureHP == NULL, "captureHP is NULL"); + type = HP_EVENT_NEW_HP; + address = (uintptr_t)ctx.captureHP; + } + else if (ctx.explicitCaptureDamage) + { + INVALID_IF(ctx.captureDamage == NULL, "captureDamage is NULL"); + type = HP_EVENT_DELTA_HP; + *ctx.captureDamage = 0; + address = (uintptr_t)ctx.captureDamage; + } + else + { + type = HP_EVENT_DELTA_HP; + address = 0; + } + + DATA.queuedEvents[DATA.queuedEventsCount++] = (struct QueuedEvent) { + .type = QUEUED_HP_EVENT, + .sourceLineOffset = SourceLineOffset(sourceLine), + .groupType = QUEUE_GROUP_NONE, + .groupSize = 1, + .as = { .hp = { + .battlerId = battlerId, + .type = type, + .address = address, + }}, + }; +} + +void QueueMessage(u32 sourceLine, const u8 *pattern) +{ + INVALID_IF(!STATE->runScene, "MESSAGE outside of SCENE"); + if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS) + Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: MESSAGE exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); + DATA.queuedEvents[DATA.queuedEventsCount++] = (struct QueuedEvent) { + .type = QUEUED_MESSAGE_EVENT, + .sourceLineOffset = SourceLineOffset(sourceLine), + .groupType = QUEUE_GROUP_NONE, + .groupSize = 1, + .as = { .message = { + .pattern = pattern, + }}, + }; +} + + +void QueueStatus(u32 sourceLine, struct BattlePokemon *battler, struct StatusEventContext ctx) +{ + s32 battlerId = battler - gBattleMons; + u32 mask; + + INVALID_IF(!STATE->runScene, "STATUS_ICON outside of SCENE"); + if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS) + Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: STATUS_ICON exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine); + + if (ctx.none) + mask = 0; + else if (ctx.sleep) + mask = STATUS1_SLEEP; + else if (ctx.poison) + mask = STATUS1_POISON; + else if (ctx.burn) + mask = STATUS1_BURN; + else if (ctx.freeze) + mask = STATUS1_FREEZE; + else if (ctx.paralysis) + mask = STATUS1_PARALYSIS; + else if (ctx.badPoison) + mask = STATUS1_TOXIC_POISON; + else + mask = ctx.status1; + + DATA.queuedEvents[DATA.queuedEventsCount++] = (struct QueuedEvent) { + .type = QUEUED_STATUS_EVENT, + .sourceLineOffset = SourceLineOffset(sourceLine), + .groupType = QUEUE_GROUP_NONE, + .groupSize = 1, + .as = { .status = { + .battlerId = battlerId, + .mask = mask, + }}, + }; +} diff --git a/tools/gbagfx/convert_png.c b/tools/gbagfx/convert_png.c index 4f1b39e6dd2a..a5fefbd8b6e6 100644 --- a/tools/gbagfx/convert_png.c +++ b/tools/gbagfx/convert_png.c @@ -62,10 +62,7 @@ static unsigned char *ConvertBitDepth(unsigned char *src, int srcBitDepth, int d for (j = 8 - srcBitDepth; j >= 0; j -= srcBitDepth) { - unsigned char pixel = (srcByte >> j) % (1 << srcBitDepth); - - if (pixel >= (1 << destBitDepth)) - FATAL_ERROR("Image exceeds the maximum color value for a %ibpp image.\n", destBitDepth); + unsigned char pixel = (srcByte >> j) % (1 << destBitDepth); *dest |= pixel << destBit; destBit -= destBitDepth; if (destBit < 0) diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 71814269c84c..dc8b9080a5c9 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -60,13 +60,41 @@ void write_text_file(string filepath, string text) { out_file.close(); } + +string json_to_string(const Json &data, const string &field = "") { + const Json value = !field.empty() ? data[field] : data; + string output = ""; + switch (value.type()) { + case Json::Type::STRING: + output = value.string_value(); + break; + case Json::Type::NUMBER: + output = std::to_string(value.int_value()); + break; + case Json::Type::BOOL: + output = value.bool_value() ? "TRUE" : "FALSE"; + break; + default:{ + string s = !field.empty() ? ("Value for '" + field + "'") : "JSON field"; + FATAL_ERROR("%s is unexpected type; expected string, number, or bool.\n", s.c_str()); + } + } + + if (output.empty()){ + string s = !field.empty() ? ("Value for '" + field + "'") : "JSON field"; + FATAL_ERROR("%s cannot be empty.\n", s.c_str()); + } + + return output; +} + string generate_map_header_text(Json map_data, Json layouts_data, string version) { - string map_layout_id = map_data["layout"].string_value(); + string map_layout_id = json_to_string(map_data, "layout"); vector matched; for (auto &field : layouts_data["layouts"].array_items()) { - if (map_layout_id == field["id"].string_value()) + if (map_layout_id == json_to_string(field, "id")) matched.push_back(field); } @@ -77,47 +105,47 @@ string generate_map_header_text(Json map_data, Json layouts_data, string version ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/" - << map_data["name"].string_value() - << "/map.json\n@\n\n"; + string mapName = json_to_string(map_data, "name"); + + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/" << mapName << "/map.json\n@\n\n"; - text << map_data["name"].string_value() << ":\n" - << "\t.4byte " << layout["name"].string_value() << "\n"; + text << mapName << ":\n" + << "\t.4byte " << json_to_string(layout, "name") << "\n"; if (map_data.object_items().find("shared_events_map") != map_data.object_items().end()) - text << "\t.4byte " << map_data["shared_events_map"].string_value() << "_MapEvents\n"; + text << "\t.4byte " << json_to_string(map_data, "shared_events_map") << "_MapEvents\n"; else - text << "\t.4byte " << map_data["name"].string_value() << "_MapEvents\n"; + text << "\t.4byte " << mapName << "_MapEvents\n"; if (map_data.object_items().find("shared_scripts_map") != map_data.object_items().end()) - text << "\t.4byte " << map_data["shared_scripts_map"].string_value() << "_MapScripts\n"; + text << "\t.4byte " << json_to_string(map_data, "shared_scripts_map") << "_MapScripts\n"; else - text << "\t.4byte " << map_data["name"].string_value() << "_MapScripts\n"; + text << "\t.4byte " << mapName << "_MapScripts\n"; if (map_data.object_items().find("connections") != map_data.object_items().end() && map_data["connections"].array_items().size() > 0) - text << "\t.4byte " << map_data["name"].string_value() << "_MapConnections\n"; + text << "\t.4byte " << mapName << "_MapConnections\n"; else text << "\t.4byte 0x0\n"; - text << "\t.2byte " << map_data["music"].string_value() << "\n" - << "\t.2byte " << layout["id"].string_value() << "\n" - << "\t.byte " << map_data["region_map_section"].string_value() << "\n" - << "\t.byte " << map_data["requires_flash"].bool_value() << "\n" - << "\t.byte " << map_data["weather"].string_value() << "\n" - << "\t.byte " << map_data["map_type"].string_value() << "\n" + text << "\t.2byte " << json_to_string(map_data, "music") << "\n" + << "\t.2byte " << json_to_string(layout, "id") << "\n" + << "\t.byte " << json_to_string(map_data, "region_map_section") << "\n" + << "\t.byte " << json_to_string(map_data, "requires_flash") << "\n" + << "\t.byte " << json_to_string(map_data, "weather") << "\n" + << "\t.byte " << json_to_string(map_data, "map_type") << "\n" << "\t.2byte 0\n"; if (version == "ruby") - text << "\t.byte " << map_data["show_map_name"].bool_value() << "\n"; + text << "\t.byte " << json_to_string(map_data, "show_map_name") << "\n"; else if (version == "emerald") text << "\tmap_header_flags " - << "allow_cycling=" << map_data["allow_cycling"].bool_value() << ", " - << "allow_escaping=" << map_data["allow_escaping"].bool_value() << ", " - << "allow_running=" << map_data["allow_running"].bool_value() << ", " - << "show_map_name=" << map_data["show_map_name"].bool_value() << "\n"; + << "allow_cycling=" << json_to_string(map_data, "allow_cycling") << ", " + << "allow_escaping=" << json_to_string(map_data, "allow_escaping") << ", " + << "allow_running=" << json_to_string(map_data, "allow_running") << ", " + << "show_map_name=" << json_to_string(map_data, "show_map_name") << "\n"; - text << "\t.byte " << map_data["battle_scene"].string_value() << "\n\n"; + text << "\t.byte " << json_to_string(map_data, "battle_scene") << "\n\n"; return text.str(); } @@ -128,22 +156,22 @@ string generate_map_connections_text(Json map_data) { ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/" - << map_data["name"].string_value() - << "/map.json\n@\n\n"; + string mapName = json_to_string(map_data, "name"); - text << map_data["name"].string_value() << "_MapConnectionsList:\n"; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/" << mapName << "/map.json\n@\n\n"; + + text << mapName << "_MapConnectionsList:\n"; for (auto &connection : map_data["connections"].array_items()) { text << "\tconnection " - << connection["direction"].string_value() << ", " - << connection["offset"].int_value() << ", " - << connection["map"].string_value() << "\n"; + << json_to_string(connection, "direction") << ", " + << json_to_string(connection, "offset") << ", " + << json_to_string(connection, "map") << "\n"; } - text << "\n" << map_data["name"].string_value() << "_MapConnections:\n" + text << "\n" << mapName << "_MapConnections:\n" << "\t.4byte " << map_data["connections"].array_items().size() << "\n" - << "\t.4byte " << map_data["name"].string_value() << "_MapConnectionsList\n\n"; + << "\t.4byte " << mapName << "_MapConnectionsList\n\n"; return text.str(); } @@ -154,29 +182,29 @@ string generate_map_events_text(Json map_data) { ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/" - << map_data["name"].string_value() - << "/map.json\n@\n\n"; + string mapName = json_to_string(map_data, "name"); + + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/" << mapName << "/map.json\n@\n\n"; string objects_label, warps_label, coords_label, bgs_label; if (map_data["object_events"].array_items().size() > 0) { - objects_label = map_data["name"].string_value() + "_ObjectEvents"; + objects_label = mapName + "_ObjectEvents"; text << objects_label << ":\n"; for (unsigned int i = 0; i < map_data["object_events"].array_items().size(); i++) { auto obj_event = map_data["object_events"].array_items()[i]; text << "\tobject_event " << i + 1 << ", " - << obj_event["graphics_id"].string_value() << ", 0, " - << obj_event["x"].int_value() << ", " - << obj_event["y"].int_value() << ", " - << obj_event["elevation"].int_value() << ", " - << obj_event["movement_type"].string_value() << ", " - << obj_event["movement_range_x"].int_value() << ", " - << obj_event["movement_range_y"].int_value() << ", " - << obj_event["trainer_type"].string_value() << ", " - << obj_event["trainer_sight_or_berry_tree_id"].string_value() << ", " - << obj_event["script"].string_value() << ", " - << obj_event["flag"].string_value() << "\n"; + << json_to_string(obj_event, "graphics_id") << ", 0, " + << json_to_string(obj_event, "x") << ", " + << json_to_string(obj_event, "y") << ", " + << json_to_string(obj_event, "elevation") << ", " + << json_to_string(obj_event, "movement_type") << ", " + << json_to_string(obj_event, "movement_range_x") << ", " + << json_to_string(obj_event, "movement_range_y") << ", " + << json_to_string(obj_event, "trainer_type") << ", " + << json_to_string(obj_event, "trainer_sight_or_berry_tree_id") << ", " + << json_to_string(obj_event, "script") << ", " + << json_to_string(obj_event, "flag") << "\n"; } text << "\n"; } else { @@ -184,15 +212,15 @@ string generate_map_events_text(Json map_data) { } if (map_data["warp_events"].array_items().size() > 0) { - warps_label = map_data["name"].string_value() + "_MapWarps"; + warps_label = mapName + "_MapWarps"; text << warps_label << ":\n"; for (auto &warp_event : map_data["warp_events"].array_items()) { text << "\twarp_def " - << warp_event["x"].int_value() << ", " - << warp_event["y"].int_value() << ", " - << warp_event["elevation"].int_value() << ", " - << warp_event["dest_warp_id"].string_value() << ", " - << warp_event["dest_map"].string_value() << "\n"; + << json_to_string(warp_event, "x") << ", " + << json_to_string(warp_event, "y") << ", " + << json_to_string(warp_event, "elevation") << ", " + << json_to_string(warp_event, "dest_warp_id") << ", " + << json_to_string(warp_event, "dest_map") << "\n"; } text << "\n"; } else { @@ -200,24 +228,24 @@ string generate_map_events_text(Json map_data) { } if (map_data["coord_events"].array_items().size() > 0) { - coords_label = map_data["name"].string_value() + "_MapCoordEvents"; + coords_label = mapName + "_MapCoordEvents"; text << coords_label << ":\n"; for (auto &coord_event : map_data["coord_events"].array_items()) { - if (coord_event["type"].string_value() == "trigger") { + if (json_to_string(coord_event, "type") == "trigger") { text << "\tcoord_event " - << coord_event["x"].int_value() << ", " - << coord_event["y"].int_value() << ", " - << coord_event["elevation"].int_value() << ", " - << coord_event["var"].string_value() << ", " - << coord_event["var_value"].string_value() << ", " - << coord_event["script"].string_value() << "\n"; + << json_to_string(coord_event, "x") << ", " + << json_to_string(coord_event, "y") << ", " + << json_to_string(coord_event, "elevation") << ", " + << json_to_string(coord_event, "var") << ", " + << json_to_string(coord_event, "var_value") << ", " + << json_to_string(coord_event, "script") << "\n"; } else if (coord_event["type"] == "weather") { text << "\tcoord_weather_event " - << coord_event["x"].int_value() << ", " - << coord_event["y"].int_value() << ", " - << coord_event["elevation"].int_value() << ", " - << coord_event["weather"].string_value() << "\n"; + << json_to_string(coord_event, "x") << ", " + << json_to_string(coord_event, "y") << ", " + << json_to_string(coord_event, "elevation") << ", " + << json_to_string(coord_event, "weather") << "\n"; } } text << "\n"; @@ -226,31 +254,31 @@ string generate_map_events_text(Json map_data) { } if (map_data["bg_events"].array_items().size() > 0) { - bgs_label = map_data["name"].string_value() + "_MapBGEvents"; + bgs_label = mapName + "_MapBGEvents"; text << bgs_label << ":\n"; for (auto &bg_event : map_data["bg_events"].array_items()) { if (bg_event["type"] == "sign") { text << "\tbg_sign_event " - << bg_event["x"].int_value() << ", " - << bg_event["y"].int_value() << ", " - << bg_event["elevation"].int_value() << ", " - << bg_event["player_facing_dir"].string_value() << ", " - << bg_event["script"].string_value() << "\n"; + << json_to_string(bg_event, "x") << ", " + << json_to_string(bg_event, "y") << ", " + << json_to_string(bg_event, "elevation") << ", " + << json_to_string(bg_event, "player_facing_dir") << ", " + << json_to_string(bg_event, "script") << "\n"; } else if (bg_event["type"] == "hidden_item") { text << "\tbg_hidden_item_event " - << bg_event["x"].int_value() << ", " - << bg_event["y"].int_value() << ", " - << bg_event["elevation"].int_value() << ", " - << bg_event["item"].string_value() << ", " - << bg_event["flag"].string_value() << "\n"; + << json_to_string(bg_event, "x") << ", " + << json_to_string(bg_event, "y") << ", " + << json_to_string(bg_event, "elevation") << ", " + << json_to_string(bg_event, "item") << ", " + << json_to_string(bg_event, "flag") << "\n"; } else if (bg_event["type"] == "secret_base") { text << "\tbg_secret_base_event " - << bg_event["x"].int_value() << ", " - << bg_event["y"].int_value() << ", " - << bg_event["elevation"].int_value() << ", " - << bg_event["secret_base_id"].string_value() << "\n"; + << json_to_string(bg_event, "x") << ", " + << json_to_string(bg_event, "y") << ", " + << json_to_string(bg_event, "elevation") << ", " + << json_to_string(bg_event, "secret_base_id") << "\n"; } } text << "\n"; @@ -258,7 +286,7 @@ string generate_map_events_text(Json map_data) { bgs_label = "0x0"; } - text << map_data["name"].string_value() << "_MapEvents::\n" + text << mapName << "_MapEvents::\n" << "\tmap_events " << objects_label << ", " << warps_label << ", " << coords_label << ", " << bgs_label << "\n\n"; @@ -301,17 +329,17 @@ string generate_groups_text(Json groups_data) { text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; for (auto &key : groups_data["group_order"].array_items()) { - string group = key.string_value(); + string group = json_to_string(key); text << group << "::\n"; auto maps = groups_data[group].array_items(); for (Json &map_name : maps) - text << "\t.4byte " << map_name.string_value() << "\n"; + text << "\t.4byte " << json_to_string(map_name) << "\n"; text << "\n"; } text << "\t.align 2\n" << "gMapGroups::\n"; for (auto &group : groups_data["group_order"].array_items()) - text << "\t.4byte " << group.string_value() << "\n"; + text << "\t.4byte " << json_to_string(group) << "\n"; text << "\n"; return text.str(); @@ -321,7 +349,7 @@ string generate_connections_text(Json groups_data) { vector map_names; for (auto &group : groups_data["group_order"].array_items()) - for (auto map_name : groups_data[group.string_value()].array_items()) + for (auto map_name : groups_data[json_to_string(group)].array_items()) map_names.push_back(map_name); vector connections_include_order = groups_data["connections_include_order"].array_items(); @@ -342,7 +370,7 @@ string generate_connections_text(Json groups_data) { text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; for (Json map_name : map_names) - text << "\t.include \"data/maps/" << map_name.string_value() << "/connections.inc\"\n"; + text << "\t.include \"data/maps/" << json_to_string(map_name) << "/connections.inc\"\n"; return text.str(); } @@ -351,8 +379,8 @@ string generate_headers_text(Json groups_data) { vector map_names; for (auto &group : groups_data["group_order"].array_items()) - for (auto map_name : groups_data[group.string_value()].array_items()) - map_names.push_back(map_name.string_value()); + for (auto map_name : groups_data[json_to_string(group)].array_items()) + map_names.push_back(json_to_string(map_name)); ostringstream text; @@ -368,8 +396,8 @@ string generate_events_text(Json groups_data) { vector map_names; for (auto &group : groups_data["group_order"].array_items()) - for (auto map_name : groups_data[group.string_value()].array_items()) - map_names.push_back(map_name.string_value()); + for (auto map_name : groups_data[json_to_string(group)].array_items()) + map_names.push_back(json_to_string(map_name)); ostringstream text; @@ -397,25 +425,28 @@ string generate_map_constants_text(string groups_filepath, Json groups_data) { vector map_count_vec; //DEBUG for (auto &group : groups_data["group_order"].array_items()) { - text << "// " << group.string_value() << "\n"; + string groupName = json_to_string(group); + text << "// " << groupName << "\n"; vector map_ids; size_t max_length = 0; int map_count = 0; //DEBUG - for (auto &map_name : groups_data[group.string_value()].array_items()) { - string header_filepath = file_dir + map_name.string_value() + dir_separator + "map.json"; + for (auto &map_name : groups_data[groupName].array_items()) { + string header_filepath = file_dir + json_to_string(map_name) + dir_separator + "map.json"; string err_str; Json map_data = Json::parse(read_text_file(header_filepath), err_str); map_ids.push_back(map_data["id"]); - if (map_data["id"].string_value().length() > max_length) - max_length = map_data["id"].string_value().length(); + string id = json_to_string(map_data, "id"); + if (id.length() > max_length) + max_length = id.length(); map_count++; //DEBUG } int map_id_num = 0; for (Json map_id : map_ids) { - text << "#define " << map_id.string_value() << string((max_length - map_id.string_value().length() + 1), ' ') + string id = json_to_string(map_id); + text << "#define " << id << string((max_length - id.length() + 1), ' ') << "(" << map_id_num++ << " | (" << group_num << " << 8))\n"; } text << "\n"; @@ -467,20 +498,21 @@ string generate_layout_headers_text(Json layouts_data) { text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json\n@\n\n"; for (auto &layout : layouts_data["layouts"].array_items()) { - string border_label = layout["name"].string_value() + "_Border"; - string blockdata_label = layout["name"].string_value() + "_Blockdata"; + string layoutName = json_to_string(layout, "name"); + string border_label = layoutName + "_Border"; + string blockdata_label = layoutName + "_Blockdata"; text << border_label << "::\n" - << "\t.incbin \"" << layout["border_filepath"].string_value() << "\"\n\n" + << "\t.incbin \"" << json_to_string(layout, "border_filepath") << "\"\n\n" << blockdata_label << "::\n" - << "\t.incbin \"" << layout["blockdata_filepath"].string_value() << "\"\n\n" + << "\t.incbin \"" << json_to_string(layout, "blockdata_filepath") << "\"\n\n" << "\t.align 2\n" - << layout["name"].string_value() << "::\n" - << "\t.4byte " << layout["width"].int_value() << "\n" - << "\t.4byte " << layout["height"].int_value() << "\n" + << layoutName << "::\n" + << "\t.4byte " << json_to_string(layout, "width") << "\n" + << "\t.4byte " << json_to_string(layout, "height") << "\n" << "\t.4byte " << border_label << "\n" << "\t.4byte " << blockdata_label << "\n" - << "\t.4byte " << layout["primary_tileset"].string_value() << "\n" - << "\t.4byte " << layout["secondary_tileset"].string_value() << "\n\n"; + << "\t.4byte " << json_to_string(layout, "primary_tileset") << "\n" + << "\t.4byte " << json_to_string(layout, "secondary_tileset") << "\n\n"; } return text.str(); @@ -492,10 +524,10 @@ string generate_layouts_table_text(Json layouts_data) { text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json\n@\n\n"; text << "\t.align 2\n" - << layouts_data["layouts_table_label"].string_value() << "::\n"; + << json_to_string(layouts_data, "layouts_table_label") << "::\n"; for (auto &layout : layouts_data["layouts"].array_items()) - text << "\t.4byte " << layout["name"].string_value() << "\n"; + text << "\t.4byte " << json_to_string(layout, "name") << "\n"; return text.str(); } @@ -510,7 +542,7 @@ string generate_layouts_constants_text(Json layouts_data) { int i = 0; for (auto &layout : layouts_data["layouts"].array_items()) - text << "#define " << layout["id"].string_value() << " " << ++i << "\n"; + text << "#define " << json_to_string(layout, "id") << " " << ++i << "\n"; text << "\n#endif // GUARD_CONSTANTS_LAYOUTS_H\n"; diff --git a/tools/mgba-rom-test-hydra/.gitignore b/tools/mgba-rom-test-hydra/.gitignore new file mode 100644 index 000000000000..b3b89034bdcf --- /dev/null +++ b/tools/mgba-rom-test-hydra/.gitignore @@ -0,0 +1 @@ +mgba-rom-test-hydra diff --git a/tools/mgba-rom-test-hydra/Makefile b/tools/mgba-rom-test-hydra/Makefile new file mode 100644 index 000000000000..5f33f001b2ae --- /dev/null +++ b/tools/mgba-rom-test-hydra/Makefile @@ -0,0 +1,18 @@ +.PHONY: all clean + +SRCS = main.c + +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: mgba-rom-test-hydra$(EXE) + @: + +mgba-rom-test-hydra$(EXE): $(SRCS) + $(CC) $(SRCS) -o $@ $(LDFLAGS) + +clean: + $(RM) mgba-rom-test-hydra$(EXE) diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c new file mode 100644 index 000000000000..5dfc995176ca --- /dev/null +++ b/tools/mgba-rom-test-hydra/main.c @@ -0,0 +1,419 @@ +/* mgba-rom-test-hydra. Runs multiple mgba-rom-test processes and + * parses the output to display human-readable progress. + * + * Output lines starting with "GBA Debug: :" are parsed as commands to + * Hydra, other output lines starting with "GBA Debug: " are parsed as + * output from the current test, and any other lines are parsed as + * output from the mgba-rom-test process itself. + * + * COMMANDS + * N: Sets the test name to the remainder of the line. + * R: Sets the result to the remainder of the line, and flushes any + * output buffered since the previous R. */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_PROCESSES 32 // See also test/test.h + +struct Runner +{ + pid_t pid; + int outfd; + char rom_path[FILENAME_MAX]; + char test_name[256]; + size_t input_buffer_size; + size_t input_buffer_capacity; + char *input_buffer; + size_t output_buffer_size; + size_t output_buffer_capacity; + char *output_buffer; +}; + +static unsigned nrunners = 0; +static struct Runner *runners = NULL; + +static void handle_read(struct Runner *runner) +{ + char *sol = runner->input_buffer; + char *eol; + size_t consumed = 0; + size_t remaining = runner->input_buffer_size; + while ((eol = memchr(sol, '\n', remaining))) + { + eol++; + size_t n = eol - sol; + if (runner->input_buffer_size >= strlen("GBA Debug: ") + && !strncmp(sol, "GBA Debug: ", strlen("GBA Debug: "))) + { + char *soc = sol + strlen("GBA Debug: "); + if (soc[0] == ':') + { + switch (soc[1]) + { + case 'N': + soc += 2; + if (sizeof(runner->test_name) <= eol - soc - 1) + { + fprintf(stderr, "test_name too long\n"); + exit(2); + } + strncpy(runner->test_name, soc, eol - soc - 1); + runner->test_name[eol - soc - 1] = '\0'; + break; + + case 'R': + soc += 2; + fprintf(stdout, "%s: ", runner->test_name); + fwrite(soc, 1, eol - soc, stdout); + fwrite(runner->output_buffer, 1, runner->output_buffer_size, stdout); + strcpy(runner->test_name, "WAITING..."); + runner->output_buffer_size = 0; + break; + + default: + goto buffer_output; + } + } + else + { +buffer_output: + if (runner->output_buffer_size + eol - soc >= runner->output_buffer_capacity) + { + runner->output_buffer_capacity *= 2; + if (runner->output_buffer_capacity < runner->output_buffer_size + eol - soc) + runner->output_buffer_capacity = runner->output_buffer_size + eol - soc; + runner->output_buffer = realloc(runner->output_buffer, runner->output_buffer_capacity); + if (!runner->output_buffer) + { + perror("realloc output_buffer failed"); + exit(2); + } + } + memcpy(runner->output_buffer + runner->output_buffer_size, soc, eol - soc); + runner->output_buffer_size += eol - soc; + } + } + else + { + if (write(STDOUT_FILENO, sol, eol - sol) == -1) + { + perror("write failed"); + exit(2); + } + } + sol += n; + consumed += n; + remaining -= n; + } + + memcpy(runner->input_buffer, sol, remaining); + runner->input_buffer_size -= consumed; + + if (runner->input_buffer_size == runner->input_buffer_capacity) + { + runner->input_buffer_capacity *= 2; + runner->input_buffer = realloc(runner->input_buffer, runner->input_buffer_capacity); + if (!runner->input_buffer) + { + perror("realloc input_buffer failed"); + exit(2); + } + } +} + +static void unlink_roms(void) +{ + for (int i = 0; i < nrunners; i++) + { + if (runners[i].rom_path[0]) + { + if (unlink(runners[i].rom_path) == -1) + perror("unlink rom_path failed"); + } + } +} + +static void exit2(int _) +{ + exit(2); +} + +int main(int argc, char *argv[]) +{ + if (argc < 3) + { + fprintf(stderr, "usage %s mgba-rom-test rom\n", argv[0]); + exit(2); + } + + bool tty = isatty(STDOUT_FILENO); + if (!tty) + { + const char *v = getenv("MAKE_TERMOUT"); + tty = v && v[0] == '\0'; + } + + if (tty) + { + char *stdout_buffer = malloc(64 * 1024); + if (!stdout_buffer) + { + perror("malloc stdout_buffer failed"); + exit(2); + } + setvbuf(stdout, stdout_buffer, _IOFBF, 64 * 1024); + } + else + { + setvbuf(stdout, NULL, _IONBF, 0); + } + + int elffd; + if ((elffd = open(argv[2], O_RDONLY)) == -1) + { + perror("open elffd failed"); + exit(2); + } + + struct stat elfst; + if (fstat(elffd, &elfst) == -1) + { + perror("stat elffd failed"); + exit(2); + } + + void *elf; + if ((elf = mmap(NULL, elfst.st_size, PROT_READ, MAP_PRIVATE, elffd, 0)) == MAP_FAILED) + { + perror("mmap elffd failed"); + exit(2); + } + + nrunners = sysconf(_SC_NPROCESSORS_ONLN); + if (nrunners > MAX_PROCESSES) + nrunners = MAX_PROCESSES; + runners = calloc(nrunners, sizeof(*runners)); + if (!runners) + { + perror("calloc runners failed"); + exit(2); + } + for (int i = 0; i < nrunners; i++) + { + runners[i].input_buffer_capacity = 4096; + runners[i].input_buffer = malloc(runners[i].input_buffer_capacity); + runners[i].output_buffer_capacity = 4096; + runners[i].output_buffer = malloc(runners[i].output_buffer_capacity); + strcpy(runners[i].test_name, "WAITING..."); + if (tty) + fprintf(stdout, "%s\n", runners[i].test_name); + } + fflush(stdout); + atexit(unlink_roms); + signal(SIGINT, exit2); + signal(SIGTERM, exit2); + + // Start test runners. + pid_t parent_pid = getpid(); + for (int i = 0; i < nrunners; i++) + { + int pipefds[2]; + if (pipe(pipefds) == -1) + { + perror("pipe failed"); + exit(2); + } + pid_t pid = fork(); + if (pid == -1) { + perror("fork mgba-rom-test failed"); + exit(2); + } else if (pid == 0) { + if (prctl(PR_SET_PDEATHSIG, SIGTERM) == -1) + { + perror("prctl failed"); + _exit(2); + } + if (getppid() != parent_pid) // Parent died. + { + _exit(2); + } + if (close(pipefds[0]) == -1) + { + perror("close pipefds[0] failed"); + _exit(2); + } + if (dup2(pipefds[1], STDOUT_FILENO) == -1) + { + perror("dup2 stdout failed"); + _exit(2); + } + if (close(pipefds[1]) == -1) + { + perror("close pipefds[1] failed"); + _exit(2); + } + char rom_path[FILENAME_MAX]; + sprintf(rom_path, "/tmp/file%05d", getpid()); + int tmpfd; + if ((tmpfd = open(rom_path, O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR)) == -1) + { + perror("open tmpfd failed"); + _exit(2); + } + if ((write(tmpfd, elf, elfst.st_size)) == -1) + { + perror("write tmpfd failed"); + _exit(2); + } + pid_t patchelfpid = fork(); + if (patchelfpid == -1) + { + perror("fork patchelf failed"); + _exit(2); + } + else if (patchelfpid == 0) + { + char n_arg[5], i_arg[5]; + snprintf(n_arg, sizeof(n_arg), "\\x%02x", nrunners); + snprintf(i_arg, sizeof(i_arg), "\\x%02x", i); + if (execlp("tools/patchelf/patchelf", "tools/patchelf/patchelf", rom_path, "gTestRunnerN", n_arg, "gTestRunnerI", i_arg, NULL) == -1) + { + perror("execlp patchelf failed"); + _exit(2); + } + } + else + { + int wstatus; + if (waitpid(patchelfpid, &wstatus, 0) == -1) + { + perror("waitpid patchelfpid failed"); + _exit(2); + } + if (!WIFEXITED(wstatus) || WEXITSTATUS(wstatus) != 0) + { + fprintf(stderr, "patchelf exited with an error\n"); + _exit(2); + } + } + // stdbuf is required because otherwise mgba never flushes + // stdout. + if (execlp("stdbuf", "stdbuf", "-oL", argv[1], "-l15", "-ClogLevel.gba.dma=16", "-Rr0", rom_path, NULL) == -1) + { + perror("execl stdbuf mgba-rom-test failed"); + _exit(2); + } + } else { + runners[i].pid = pid; + sprintf(runners[i].rom_path, "/tmp/file%05d", runners[i].pid); + runners[i].outfd = pipefds[0]; + if (close(pipefds[1]) == -1) + { + perror("close pipefds[1] failed"); + exit(2); + } + } + } + + // Process test runner output. + int openfds = nrunners; + struct pollfd *pollfds = calloc(nrunners, sizeof(*pollfds)); + if (!pollfds) + { + perror("calloc pollfds failed"); + exit(2); + } + for (int i = 0; i < nrunners; i++) + { + pollfds[i].fd = runners[i].outfd; + pollfds[i].events = POLLIN; + } + while (openfds > 0) + { + if (tty) + { + struct winsize winsize; + if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &winsize) == -1) + { + perror("ioctl TIOCGWINSZ failed"); + exit(2); + } + int scrollback = 0; + for (int i = 0; i < nrunners; i++) + { + if (runners[i].outfd >= 0) + scrollback += (strlen(runners[i].test_name) + winsize.ws_col - 1) / winsize.ws_col; + } + if (scrollback > 0) + fprintf(stdout, "\e[%dF\e[J", scrollback); + } + + if (poll(pollfds, nrunners, -1) == -1) + { + perror("poll failed"); + exit(2); + } + for (int i = 0; i < nrunners; i++) + { + if (pollfds[i].revents & POLLIN) + { + int n; + if ((n = read(pollfds[i].fd, runners[i].input_buffer + runners[i].input_buffer_size, runners[i].input_buffer_capacity - runners[i].input_buffer_size)) == -1) + { + perror("read pollfds[i] failed"); + exit(2); + } + runners[i].input_buffer_size += n; + handle_read(&runners[i]); + } + + if (pollfds[i].revents & (POLLERR | POLLHUP)) + { + if (close(pollfds[i].fd) == -1) + { + perror("close pollfds[i] failed"); + exit(2); + } + runners[i].outfd = pollfds[i].fd = -pollfds[i].fd; + openfds--; + } + } + + if (tty) + { + for (int i = 0; i < nrunners; i++) + { + if (runners[i].outfd >= 0) + fprintf(stdout, "%s\n", runners[i].test_name); + } + + fflush(stdout); + } + } + + // Reap test runners and collate exit codes. + int exit_code = 0; + for (int i = 0; i < nrunners; i++) + { + int wstatus; + if (waitpid(runners[i].pid, &wstatus, 0) == -1) + { + perror("waitpid runners[i] failed"); + exit(2); + } + if (WIFEXITED(wstatus) && WEXITSTATUS(wstatus) > exit_code) + exit_code = WEXITSTATUS(wstatus); + } + return exit_code; +} diff --git a/tools/mgba/README.md b/tools/mgba/README.md new file mode 100644 index 000000000000..617e6e058f55 --- /dev/null +++ b/tools/mgba/README.md @@ -0,0 +1,7 @@ +# mGBA + +The binaries in this folder are built from `mGBA`, an emulator for running Game Boy Advance games. The source code is available here: . +The source code for these specific builds is available from: + + - Windows: + - Linux: diff --git a/tools/mgba/mgba-rom-test b/tools/mgba/mgba-rom-test new file mode 100755 index 000000000000..09c683a2f368 Binary files /dev/null and b/tools/mgba/mgba-rom-test differ diff --git a/tools/mgba/mgba-rom-test.exe b/tools/mgba/mgba-rom-test.exe new file mode 100755 index 000000000000..5b25e16f638c Binary files /dev/null and b/tools/mgba/mgba-rom-test.exe differ diff --git a/tools/patchelf/.gitignore b/tools/patchelf/.gitignore new file mode 100644 index 000000000000..fca4680084fb --- /dev/null +++ b/tools/patchelf/.gitignore @@ -0,0 +1 @@ +patchelf diff --git a/tools/patchelf/Makefile b/tools/patchelf/Makefile new file mode 100644 index 000000000000..4e60bd6319d9 --- /dev/null +++ b/tools/patchelf/Makefile @@ -0,0 +1,18 @@ +.PHONY: all clean + +SRCS = patchelf.c + +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: patchelf$(EXE) + @: + +patchelf$(EXE): $(SRCS) + $(CC) $(SRCS) -o $@ $(LDFLAGS) + +clean: + $(RM) patchelf$(EXE) diff --git a/tools/patchelf/patchelf.c b/tools/patchelf/patchelf.c new file mode 100644 index 000000000000..19363c55f08a --- /dev/null +++ b/tools/patchelf/patchelf.c @@ -0,0 +1,191 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static bool try_patch_value(const char *sym, char *dest, const char *source, size_t size); + +int main(int argc, char *argv[]) +{ + int exit_code = 1; + + int fd = -1; + char *f = MAP_FAILED; + + if (argc < 2 || argc % 2 != 0) + { + fprintf(stderr, "Usage: %s [ ]...\n", argv[0]); + goto error; + } + + if ((fd = open(argv[1], O_RDWR)) == -1) + { + fprintf(stderr, "open(%s, O_RDWR) failed: %s\n", argv[1], strerror(errno)); + goto error; + } + + struct stat st; + if (fstat(fd, &st) == -1) + { + perror("stat failed"); + goto error; + } + + if ((f = mmap(NULL, st.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) == MAP_FAILED) + { + perror("mmap failed"); + goto error; + } + + if (memcmp(f, ELFMAG, 4) != 0) + { + fprintf(stderr, "not an ELF file\n"); + goto error; + } + + const Elf32_Ehdr *ehdr = (Elf32_Ehdr *)f; + const Elf32_Shdr *shdrs = (Elf32_Shdr *)(f + ehdr->e_shoff); + + if (ehdr->e_shstrndx == SHN_UNDEF) + { + fprintf(stderr, "no section name string table\n"); + goto error; + } + const Elf32_Shdr *shdr_shstr = &shdrs[ehdr->e_shstrndx]; + const char *shstr = (const char *)(f + shdr_shstr->sh_offset); + const Elf32_Shdr *shdr_symtab = NULL; + const Elf32_Shdr *shdr_strtab = NULL; + for (int i = 0; i < ehdr->e_shnum; i++) + { + const char *sh_name = shstr + shdrs[i].sh_name; + if (strcmp(sh_name, ".symtab") == 0) + shdr_symtab = &shdrs[i]; + else if (strcmp(sh_name, ".strtab") == 0) + shdr_strtab = &shdrs[i]; + } + if (!shdr_symtab) + { + fprintf(stderr, "no .symtab section\n"); + goto error; + } + if (!shdr_strtab) + { + fprintf(stderr, "no .strtab section\n"); + goto error; + } + + const Elf32_Sym *symtab = (Elf32_Sym *)(f + shdr_symtab->sh_offset); + const char *strtab = (const char *)(f + shdr_strtab->sh_offset); + for (int i = 0; i < shdr_symtab->sh_size / shdr_symtab->sh_entsize; i++) + { + if (symtab[i].st_name == 0) continue; + if (symtab[i].st_shndx > ehdr->e_shnum) continue; + const char *st_name = strtab + symtab[i].st_name; + const Elf32_Shdr *shdr = &shdrs[symtab[i].st_shndx]; + uint32_t sym_offset = symtab[i].st_value - shdr->sh_addr; + for (int j = 2; j < argc; j += 2) + { + const char *arg_name = argv[j + 0]; + const char *arg_value = argv[j + 1]; + if (strcmp(st_name, arg_name) == 0) + { + char *value = (char *)(f + shdr->sh_offset + sym_offset); + if (!try_patch_value(st_name, value, arg_value, symtab[i].st_size)) + goto error; + } + } + } + + exit_code = 0; + +error: + if (f != MAP_FAILED) + { + if (msync(f, st.st_size, MS_SYNC) == -1) + { + perror("msync failed"); + f = MAP_FAILED; + } + } + if (f != MAP_FAILED) + { + if (munmap(f, st.st_size) == -1) + { + perror("munmap failed"); + } + } + if (fd != -1) + { + if (close(fd) == -1) + { + perror("close failed"); + } + } + + return exit_code; +} + +static int parsexdigit(char c) +{ + if ('0' <= c && c <= '9') + return c - '0'; + else if ('a' <= c && c <= 'f') + return c - 'a' + 10; + else if ('A' <= c && c <= 'F') + return c - 'A' + 10; + else + return -1; +} + +static bool try_patch_value(const char *sym, char *dest, const char *source, size_t size) +{ + int i = 0; + while (*source) + { + if (i == size) + { + fprintf(stderr, "%s: overflows size (%lu)\n", sym, size); + return false; + } + char c, value; + switch ((c = *source++)) + { + case '\\': + switch ((c = *source++)) + { + case '0': + value = 0; + break; + case 'x': + if (!isxdigit((c = *source++))) + { + fprintf(stderr, "%s: illegal escape \\x%c\n", sym, c); + return false; + } + value = parsexdigit(c); + if (!isxdigit((c = *source++))) + { + fprintf(stderr, "%s: illegal escape \\x%c%c\n", sym, *(source - 2), c); + return false; + } + value = value * 16 + parsexdigit(c); + break; + default: + fprintf(stderr, "%s: illegal escape \\%c\n", sym, c); + return false; + } + break; + default: + value = c; + break; + } + dest[i++] = value; + } + return true; +}