diff options
370 files changed, 29846 insertions, 17963 deletions
@@ -1,4 +1,5 @@ TOOLCHAIN := $(DEVKITARM) +COMPARE ?= 0 ifeq ($(CC),) HOSTCC := gcc @@ -108,7 +109,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) +.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -120,9 +121,13 @@ else NODEP := 1 endif -C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) +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)) +C_ASM_SRCS += $(wildcard $(C_SUBDIR)/*.s $(C_SUBDIR)/*/*.s $(C_SUBDIR)/*/*/*.s) +C_ASM_OBJS := $(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o,$(C_ASM_SRCS)) + ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s) ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS)) @@ -135,7 +140,7 @@ SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS)) MID_SRCS := $(wildcard $(MID_SUBDIR)/*.mid) MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS)) -OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) +OBJS := $(C_OBJS) $(C_ASM_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) SUBDIRS := $(sort $(dir $(OBJS))) @@ -151,11 +156,13 @@ tools: $(TOOLDIRS) $(TOOLDIRS): @$(MAKE) -C $@ CC=$(HOSTCC) CXX=$(HOSTCXX) -rom: $(ROM) +rom: berry_fix $(ROM) +ifeq ($(COMPARE),1) + @$(SHA1) rom.sha1 +endif # For contributors to make sure a change didn't affect the contents of the ROM. -compare: all - @$(SHA1) rom.sha1 +compare: ; @$(MAKE) COMPARE=1 clean: mostlyclean clean-tools @@ -170,6 +177,7 @@ mostlyclean: tidy rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc find $(DATA_ASM_SUBDIR)/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} + rm -f $(AUTO_GEN_TARGETS) + @$(MAKE) clean -C berry_fix tidy: rm -f $(ROM) $(ELF) $(MAP) @@ -222,7 +230,7 @@ endif ifeq ($(NODEP),1) $(C_BUILDDIR)/%.o: c_dep := else -$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c) +$(C_BUILDDIR)/%.o: c_dep = $(shell [[ -f $(C_SUBDIR)/$*.c ]] && $(SCANINC) -I include -I tools/agbcc/include $(C_SUBDIR)/$*.c) endif ifeq ($(DINFO),1) @@ -236,6 +244,15 @@ $(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep) $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s ifeq ($(NODEP),1) +$(C_BUILDDIR)/%.o: c_asm_dep := +else +$(C_BUILDDIR)/%.o: c_asm_dep = $(shell [[ -f $(C_SUBDIR)/$*.s ]] && $(SCANINC) -I "" $(C_SUBDIR)/$*.s) +endif + +$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s $$(c_asm_dep) + $(AS) $(ASFLAGS) -o $@ $< + +ifeq ($(NODEP),1) $(ASM_BUILDDIR)/%.o: asm_dep := else $(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) -I "" $(ASM_SUBDIR)/$*.s) @@ -285,3 +302,8 @@ $(ROM): $(ELF) $(FIX) $@ -p --silent modern: ; @$(MAKE) MODERN=1 + +berry_fix/berry_fix.gba: berry_fix + +berry_fix: + @$(MAKE) -C berry_fix COMPARE=$(COMPARE) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index e00bdb600..54078332c 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -765,7 +765,8 @@ .2byte \y .endm - .macro moveobjectoffscreen index:req + @ Copies a live event object's xy position to its template, so that if the sprite goes off screen, it'll still be there when it comes back on screen. + .macro copyobjectxytoperm index:req .byte 0x64 .2byte \index .endm @@ -824,7 +825,7 @@ .byte \y .endm - @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined (gMultichoiceLists) and the one to be used is specified with list. If b is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button. + @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined (sMultichoiceLists) and the one to be used is specified with list. If b is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button. .macro multichoice x:req, y:req, list:req, b:req .byte 0x6f .byte \x @@ -833,7 +834,7 @@ .byte \b .endm - @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined (gMultichoiceLists) and the one to be used is specified with list. The default argument determines the initial position of the cursor when the box is first opened; it is zero-indexed, and if it is too large, it is treated as 0x00. If b is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button. + @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined (sMultichoiceLists) and the one to be used is specified with list. The default argument determines the initial position of the cursor when the box is first opened; it is zero-indexed, and if it is too large, it is treated as 0x00. If b is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button. .macro multichoicedefault x:req, y:req, list:req, default:req, b:req .byte 0x70 .byte \x @@ -843,7 +844,7 @@ .byte \b .endm - @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined (gMultichoiceLists) and the one to be used is specified with list. The per_row argument determines how many list items will be shown on a single row of the box. + @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined (sMultichoiceLists) and the one to be used is specified with list. The per_row argument determines how many list items will be shown on a single row of the box. .macro multichoicegrid x:req, y:req, list:req, per_row:req, B:req .byte 0x71 .byte \x @@ -901,15 +902,15 @@ .4byte \text .endm - @ Gives the player one of the specified (species) Pokemon at level level holding item. The unknown arguments should all be zeroes. - .macro givemon species:req, level:req, item:req, unknown1:req, unknown2:req, unknown3:req + @ Gives the player one of the specified (species) Pokemon at level level holding item. The trailing 0s are unused parameters + .macro givemon species:req, level:req, item:req .byte 0x79 .2byte \species .byte \level .2byte \item - .4byte \unknown1 - .4byte \unknown2 - .byte \unknown3 + .4byte 0x0 + .4byte 0x0 + .byte 0 .endm .macro giveegg species:req @@ -1089,6 +1090,7 @@ .byte 0x95 .byte \x .byte \y + .byte 0 @ 1 = don't perform this command. Always 0 in vanilla. Why this is a thing is beyond me. .endm @ Gets the price reduction for the index given. In FireRed, this command is a nop. diff --git a/berry_fix/Makefile b/berry_fix/Makefile new file mode 100644 index 000000000..2bc225eba --- /dev/null +++ b/berry_fix/Makefile @@ -0,0 +1,166 @@ +include $(DEVKITARM)/base_tools +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld +COMPARE ?= 0 + +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +GAME_CODE := AGBJ +MAKER_CODE := 01 +REVISION := 0 + +SHELL := /bin/bash -o pipefail + +CPPFLAGS := -I ../tools/agbcc/include -I ../tools/agbcc -iquote include -nostdinc -undef + +ROM := berry_fix.gba +OBJ_DIR := build +CC1 := ../tools/agbcc/bin/agbcc$(EXE) +override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm + + +ELF = $(ROM:.gba=.elf) +MAP = $(ROM:.gba=.map) + +C_SUBDIR = src +ASM_SUBDIR = asm +DATA_ASM_SUBDIR = data + +C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR) +ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR) +DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR) + +ASFLAGS := -mcpu=arm7tdmi + +LDFLAGS = -Map ../$(MAP) + +SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c +GFX := ../tools/gbagfx/gbagfx$(EXE) +AIF := ../tools/aif2pcm/aif2pcm$(EXE) +MID := ../tools/mid2agb/mid2agb$(EXE) +SCANINC := ../tools/scaninc/scaninc$(EXE) +PREPROC := ../tools/preproc/preproc$(EXE) +RAMSCRGEN := ../tools/ramscrgen/ramscrgen$(EXE) +FIX := ../tools/gbafix/gbafix$(EXE) + +# Clear the default suffixes +.SUFFIXES: +# Don't delete intermediate files +.SECONDARY: +# Delete files that weren't built properly +.DELETE_ON_ERROR: + +# Secondary expansion is required for dependency variables in object rules. +.SECONDEXPANSION: + +.PHONY: all rom clean compare tidy payload + +C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) +C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) + +ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s) +ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS)) + +DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s) +DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS)) + +SONG_SRCS := $(wildcard $(SONG_SUBDIR)/*.s) +SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS)) + +MID_SRCS := $(wildcard $(MID_SUBDIR)/*.mid) +MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS)) + +OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) +# OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) + +SUBDIRS := $(sort $(dir $(OBJS))) + +$(shell mkdir -p $(SUBDIRS)) + +all: payload rom + @: + +rom: $(ROM) +ifeq ($(COMPARE),1) + @$(SHA1) rom.sha1 +endif + +# For contributors to make sure a change didn't affect the contents of the ROM. +compare: ; @$(MAKE) COMPARE=1 + +clean: tidy + rm -f sound/direct_sound_samples/*.bin + rm -f $(SONG_OBJS) $(MID_OBJS) $(MID_SUBDIR)/*.s + find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + + make -C payload clean + +tidy: + rm -f $(ROM) $(ELF) $(MAP) + rm -r build/* + make -C payload tidy + +%.s: ; +%.png: ; +%.pal: ; +%.aif: ; + +%.1bpp: %.png ; $(GFX) $< $@ +%.4bpp: %.png ; $(GFX) $< $@ +%.8bpp: %.png ; $(GFX) $< $@ +%.gbapal: %.pal ; $(GFX) $< $@ +%.gbapal: %.png ; $(GFX) $< $@ +%.lz: % ; $(GFX) $< $@ +%.rl: % ; $(GFX) $< $@ + + +ifeq ($(NODEP),1) +$(C_BUILDDIR)/%.o: c_dep := +else +$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c) +endif + +$(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep) + @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i + @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s + $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s + +ifeq ($(NODEP),1) +$(ASM_BUILDDIR)/%.o: asm_dep := +else +$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) $(ASM_SUBDIR)/$*.s) +endif + +$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep) + $(AS) $(ASFLAGS) -o $@ $< + +ifeq ($(NODEP),1) +$(DATA_ASM_BUILDDIR)/%.o: data_dep := +else +$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) $(DATA_ASM_SUBDIR)/$*.s) +endif + +payload: + @$(MAKE) -C payload COMPARE=$(COMPARE) + +payload/payload.gba: payload + +data/payload.gba.lz: payload/payload.gba + $(GFX) $< $@ -search 1 + +$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep) + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + +$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s + $(AS) $(ASFLAGS) -I sound -o $@ $< + +$(ELF): ld_script.txt $(OBJS) + cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../ld_script.txt -o ../$@ + +$(ROM): $(ELF) + $(OBJCOPY) -O binary $< $@ + $(FIX) $@ -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent + diff --git a/berry_fix/asm/berry_fix_header.inc b/berry_fix/asm/berry_fix_header.inc new file mode 100644 index 000000000..5167d2ff0 --- /dev/null +++ b/berry_fix/asm/berry_fix_header.inc @@ -0,0 +1,35 @@ + .global BerryFixMBHeaderNintendoLogo +BerryFixMBHeaderNintendoLogo: + .space 156 + +BerryFixMBHeaderGameTitle: + .space 12 + + .global BerryFixMBHeaderGameCode +BerryFixMBHeaderGameCode: + .space 4 + +BerryFixMBHeaderMakerCode: + .space 2 + +BerryFixMBHeaderMagic: + .byte 0 + +BerryFixMBHeaderMainUnitCode: + .byte 0 + +BerryFixMBHeaderDeviceType: + .byte 0 + +BerryFixMBHeaderReserved1: + .space 7 + + .global BerryFixMBHeaderSoftwareVersion +BerryFixMBHeaderSoftwareVersion: + .byte 0 + +BerryFixMBHeaderChecksum: + .byte 0 + +BerryFixMBHeaderReserved2: + .space 2 diff --git a/berry_fix/asm/loader.s b/berry_fix/asm/loader.s new file mode 100644 index 000000000..39e0b768a --- /dev/null +++ b/berry_fix/asm/loader.s @@ -0,0 +1,119 @@ + .include "../asm/macros/asm.inc" + .include "../asm/macros/function.inc" + .include "../constants/gba_constants.inc" + + .set SIO_ERROR, 0x0040 + .set SIO_MULTI_BUSY, 0x0080 + + .set EWRAM_ORIG, 0x02000000 + .set gCode, 0x02010000 + .set PROG_ORIG, 0x00008000 + + .syntax unified + + .text + + arm_func_start _start +_start: @ 0 + b _entry + arm_func_end _start + + .include "asm/berry_fix_header.inc" + +@ C0 + .word 0 + + .global _GPIOPortData +_GPIOPortData: @ C4 + .2byte 0 + + .global _GPIOPortDirection +_GPIOPortDirection: @ C6 + .2byte 0 + + .global _GPIOPortReadEnable +_GPIOPortReadEnable: @ C8 + .2byte 0 + +@ CA + .2byte 0 + +@ CC + .space 0x34 + + arm_func_start _entry +_entry: @ 100 + b _send + arm_func_end _entry + + .space 0x1C + + arm_func_start _recv +_recv: + @ Waits until link cable is no longer busy. + @ Returns nz if an error has occurred + @ Otherwise, returns the received short in r1. + @ Preserves r0 +_120: + ldrh r1, [r0, 0x8] @ SIOCNT + tst r1, SIO_MULTI_BUSY + beq _120 +_12c: + ldrh r1, [r0, 0x8] @ SIOCNT + tst r1, SIO_MULTI_BUSY + bne _12c + ldrh r1, [r0, 0x8] @ SIOCNT + tst r1, SIO_ERROR + bxne lr + ldrh r1, [r0] @ SIOMULTI0 + bx lr + arm_func_end _recv + + arm_func_start _send +_send: @ 14c + ldr r0, =REG_SIOMULTI0 +_150: + bl _recv + bne _150 + mov r2, 0 + strh r2, [r0, 0xa] @ SIOMLT_SEND + cmp r1, 0 + bne _150 + mov r2, 0x8000 +_16c: + mov r1, 0 +_170: + strh r1, [r0, 0xa] @ SIOMLT_SEND + bl _recv + bne _150 + cmp r1, r2 + bne _16c + lsr r2, 5 + cmp r1, 0 + bne _170 + ldr r3, =BerryFixMBHeaderGameCode + ldrh r2, [r3] + strh r2, [r0, 0xa] @ SIOMLT_SEND + bl _recv +_1a0: + bne _1a0 + cmp r1, r2 + bne _1a0 + ldrh r2, [r3, 0x2] + strh r2, [r0, 0xa] @ SIOMLT_SEND + bl _recv + bne _1a0 + cmp r1, r2 + bne _1a0 + mov r1, 0 + strh r1, [r0, 0xa] @ SIOMLT_SEND + ldr r0, =_data_2f0 + ldr r1, =gCode + swi 0x11 << 16 + ldr lr, =gCode + bx lr + .pool + arm_func_end _send + @ 1f0 + + .align 2, 0 @ don't pad with nop diff --git a/berry_fix/charmap.txt b/berry_fix/charmap.txt new file mode 100644 index 000000000..a736b40f2 --- /dev/null +++ b/berry_fix/charmap.txt @@ -0,0 +1,1067 @@ +' ' = 00 +'À' = 01 +'Á' = 02 +'Â' = 03 +'Ç' = 04 +'È' = 05 +'É' = 06 +'Ê' = 07 +'Ë' = 08 +'Ì' = 09 +'Î' = 0B +'Ï' = 0C +'Ò' = 0D +'Ó' = 0E +'Ô' = 0F +'Œ' = 10 +'Ù' = 11 +'Ú' = 12 +'Û' = 13 +'Ñ' = 14 +'ß' = 15 +'à' = 16 +'á' = 17 +'ç' = 19 +'è' = 1A +'é' = 1B +'ê' = 1C +'ë' = 1D +'ì' = 1E +'î' = 20 +'ï' = 21 +'ò' = 22 +'ó' = 23 +'ô' = 24 +'œ' = 25 +'ù' = 26 +'ú' = 27 +'û' = 28 +'ñ' = 29 +'º' = 2A +'ª' = 2B +SUPER_ER = 2C +'&' = 2D +'+' = 2E +LV = 34 +'=' = 35 +';' = 36 +'¿' = 51 +'¡' = 52 +PK = 53 +PKMN = 53 54 +POKEBLOCK = 55 56 57 58 59 +'Í' = 5A +'%' = 5B +'(' = 5C +')' = 5D +'â' = 68 +'í' = 6F +UNK_SPACER = 77 +UP_ARROW = 79 +DOWN_ARROW = 7A +LEFT_ARROW = 7B +RIGHT_ARROW = 7C +'0' = A1 +'1' = A2 +'2' = A3 +'3' = A4 +'4' = A5 +'5' = A6 +'6' = A7 +'7' = A8 +'8' = A9 +'9' = AA +'!' = AB +'?' = AC +'.' = AD +'-' = AE +'·' = AF +'…' = B0 +'“' = B1 +'”' = B2 +'‘' = B3 +'’' = B4 +'♂' = B5 +'♀' = B6 +'¥' = B7 +',' = B8 +'×' = B9 +'/' = BA +'A' = BB +'B' = BC +'C' = BD +'D' = BE +'E' = BF +'F' = C0 +'G' = C1 +'H' = C2 +'I' = C3 +'J' = C4 +'K' = C5 +'L' = C6 +'M' = C7 +'N' = C8 +'O' = C9 +'P' = CA +'Q' = CB +'R' = CC +'S' = CD +'T' = CE +'U' = CF +'V' = D0 +'W' = D1 +'X' = D2 +'Y' = D3 +'Z' = D4 +'a' = D5 +'b' = D6 +'c' = D7 +'d' = D8 +'e' = D9 +'f' = DA +'g' = DB +'h' = DC +'i' = DD +'j' = DE +'k' = DF +'l' = E0 +'m' = E1 +'n' = E2 +'o' = E3 +'p' = E4 +'q' = E5 +'r' = E6 +'s' = E7 +'t' = E8 +'u' = E9 +'v' = EA +'w' = EB +'x' = EC +'y' = ED +'z' = EE +'▶' = EF +':' = F0 +'Ä' = F1 +'Ö' = F2 +'Ü' = F3 +'ä' = F4 +'ö' = F5 +'ü' = F6 +TALL_PLUS = FC 0C FB +'$' = FF + +@ Hiragana +'あ' = 01 +'い' = 02 +'う' = 03 +'え' = 04 +'お' = 05 +'か' = 06 +'き' = 07 +'く' = 08 +'け' = 09 +'こ' = 0A +'さ' = 0B +'し' = 0C +'す' = 0D +'せ' = 0E +'そ' = 0F +'た' = 10 +'ち' = 11 +'つ' = 12 +'て' = 13 +'と' = 14 +'な' = 15 +'に' = 16 +'ぬ' = 17 +'ね' = 18 +'の' = 19 +'は' = 1A +'ひ' = 1B +'ふ' = 1C +'へ' = 1D +'ほ' = 1E +'ま' = 1F +'み' = 20 +'む' = 21 +'め' = 22 +'も' = 23 +'や' = 24 +'ゆ' = 25 +'よ' = 26 +'ら' = 27 +'り' = 28 +'る' = 29 +'れ' = 2A +'ろ' = 2B +'わ' = 2C +'を' = 2D +'ん' = 2E +'ぁ' = 2F +'ぃ' = 30 +'ぅ' = 31 +'ぇ' = 32 +'ぉ' = 33 +'ゃ' = 34 +'ゅ' = 35 +'ょ' = 36 +'が' = 37 +'ぎ' = 38 +'ぐ' = 39 +'げ' = 3A +'ご' = 3B +'ざ' = 3C +'じ' = 3D +'ず' = 3E +'ぜ' = 3F +'ぞ' = 40 +'だ' = 41 +'ぢ' = 42 +'づ' = 43 +'で' = 44 +'ど' = 45 +'ば' = 46 +'び' = 47 +'ぶ' = 48 +'べ' = 49 +'ぼ' = 4A +'ぱ' = 4B +'ぴ' = 4C +'ぷ' = 4D +'ぺ' = 4E +'ぽ' = 4F +'っ' = 50 + +@ Katakana +'ア' = 51 +'イ' = 52 +'ウ' = 53 +'エ' = 54 +'オ' = 55 +'カ' = 56 +'キ' = 57 +'ク' = 58 +'ケ' = 59 +'コ' = 5A +'サ' = 5B +'シ' = 5C +'ス' = 5D +'セ' = 5E +'ソ' = 5F +'タ' = 60 +'チ' = 61 +'ツ' = 62 +'テ' = 63 +'ト' = 64 +'ナ' = 65 +'ニ' = 66 +'ヌ' = 67 +'ネ' = 68 +'ノ' = 69 +'ハ' = 6A +'ヒ' = 6B +'フ' = 6C +'ヘ' = 6D +'ホ' = 6E +'マ' = 6F +'ミ' = 70 +'ム' = 71 +'メ' = 72 +'モ' = 73 +'ヤ' = 74 +'ユ' = 75 +'ヨ' = 76 +'ラ' = 77 +'リ' = 78 +'ル' = 79 +'レ' = 7A +'ロ' = 7B +'ワ' = 7C +'ヲ' = 7D +'ン' = 7E +'ァ' = 7F +'ィ' = 80 +'ゥ' = 81 +'ェ' = 82 +'ォ' = 83 +'ャ' = 84 +'ュ' = 85 +'ョ' = 86 +'ガ' = 87 +'ギ' = 88 +'グ' = 89 +'ゲ' = 8A +'ゴ' = 8B +'ザ' = 8C +'ジ' = 8D +'ズ' = 8E +'ゼ' = 8F +'ゾ' = 90 +'ダ' = 91 +'ヂ' = 92 +'ヅ' = 93 +'デ' = 94 +'ド' = 95 +'バ' = 96 +'ビ' = 97 +'ブ' = 98 +'ベ' = 99 +'ボ' = 9A +'パ' = 9B +'ピ' = 9C +'プ' = 9D +'ペ' = 9E +'ポ' = 9F +'ッ' = A0 + +@ Japanese punctuation +' ' = 00 +'!' = AB +'?' = AC +'。' = AD +'ー' = AE +'⋯' = B0 + +STRING = FD + +@ string placeholders +PLAYER = FD 01 +STR_VAR_1 = FD 02 +STR_VAR_2 = FD 03 +STR_VAR_3 = FD 04 +KUN = FD 05 +RIVAL = FD 06 +@ version-dependent strings (originally made for Ruby/Sapphire differences) +@ Emerald uses the Sapphire strings (except for VERSION). +VERSION = FD 07 @ "EMERALD" +AQUA = FD 08 +MAGMA = FD 09 +ARCHIE = FD 0A +MAXIE = FD 0B +KYOGRE = FD 0C +GROUDON = FD 0D + +@ battle string placeholders + +B_BUFF1 = FD 00 +B_BUFF2 = FD 01 +B_COPY_VAR_1 = FD 02 +B_COPY_VAR_2 = FD 03 +B_COPY_VAR_3 = FD 04 +B_PLAYER_MON1_NAME = FD 05 +B_OPPONENT_MON1_NAME = FD 06 +B_PLAYER_MON2_NAME = FD 07 +B_OPPONENT_MON2_NAME = FD 08 +B_LINK_PLAYER_MON1_NAME = FD 09 +B_LINK_OPPONENT_MON1_NAME = FD 0A +B_LINK_PLAYER_MON2_NAME = FD 0B +B_LINK_OPPONENT_MON2_NAME = FD 0C +B_ATK_NAME_WITH_PREFIX_MON1 = FD 0D +B_ATK_PARTNER_NAME = FD 0E +B_ATK_NAME_WITH_PREFIX = FD 0F +B_DEF_NAME_WITH_PREFIX = FD 10 +B_EFF_NAME_WITH_PREFIX = FD 11 @ EFF = short for gEffectBattler +B_ACTIVE_NAME_WITH_PREFIX = FD 12 +B_SCR_ACTIVE_NAME_WITH_PREFIX = FD 13 +B_CURRENT_MOVE = FD 14 +B_LAST_MOVE = FD 15 +B_LAST_ITEM = FD 16 +B_LAST_ABILITY = FD 17 +B_ATK_ABILITY = FD 18 +B_DEF_ABILITY = FD 19 +B_SCR_ACTIVE_ABILITY = FD 1A +B_EFF_ABILITY = FD 1B +B_TRAINER1_CLASS = FD 1C +B_TRAINER1_NAME = FD 1D +B_LINK_PLAYER_NAME = FD 1E +B_LINK_PARTNER_NAME = FD 1F +B_LINK_OPPONENT1_NAME = FD 20 +B_LINK_OPPONENT2_NAME = FD 21 +B_LINK_SCR_TRAINER_NAME = FD 22 +B_PLAYER_NAME = FD 23 +B_TRAINER1_LOSE_TEXT = FD 24 +B_TRAINER1_WIN_TEXT = FD 25 +B_26 = FD 26 +B_PC_CREATOR_NAME = FD 27 +B_ATK_PREFIX1 = FD 28 +B_DEF_PREFIX1 = FD 29 +B_ATK_PREFIX2 = FD 2A +B_DEF_PREFIX2 = FD 2B +B_ATK_PREFIX3 = FD 2C +B_DEF_PREFIX3 = FD 2D +B_TRAINER2_CLASS = FD 2E +B_TRAINER2_NAME = FD 2F +B_TRAINER2_LOSE_TEXT = FD 30 +B_TRAINER2_WIN_TEXT = FD 31 +B_PARTNER_CLASS = FD 32 +B_PARTNER_NAME = FD 33 +B_BUFF3 = FD 34 + +@ indicates the end of a town/city name (before " TOWN" or " CITY") +NAME_END = FC 00 + +@ special 0xF7 character +SPECIAL_F7 = F7 + +@ more text functions + +COLOR = FC 01 @ use a color listed below right after +HIGHLIGHT = FC 02 @ same as fc 01 +SHADOW = FC 03 @ same as fc 01 +COLOR_HIGHLIGHT_SHADOW = FC 04 @ takes 3 bytes +PALETTE = FC 05 @ used in credits +SIZE = FC 06 @ note that anything other than "SMALL" is invalid +UNKNOWN_7 = FC 07 +PAUSE = FC 08 @ manually print the wait byte after this, havent mapped them +PAUSE_UNTIL_PRESS = FC 09 +UNKNOWN_A = FC 0A +PLAY_BGM = FC 0B +ESCAPE = FC 0C +SHIFT_TEXT = FC 0D +UNKNOWN_E = FC 0E +UNKNOWN_F = FC 0F +PLAY_SE = FC 10 +CLEAR = FC 11 +SKIP = FC 12 +CLEAR_TO = FC 13 +UNKNOWN_14 = FC 14 +JPN = FC 15 +ENG = FC 16 +PAUSE_MUSIC = FC 17 +RESUME_MUSIC = FC 18 + +@ colors + +TRANSPARENT = 00 +WHITE = 01 +DARK_GREY = 02 +LIGHT_GREY = 03 +RED = 04 +LIGHT_RED = 05 +GREEN = 06 +LIGHT_GREEN = 07 +BLUE = 08 +LIGHT_BLUE = 09 +@ these next colors can be set to anything arbitrary at runtime +@ usually though they'll have the textbox border colors as described below +DYNAMIC_COLOR1 = 0A @ white +DYNAMIC_COLOR2 = 0B @ white with a tinge of green +DYNAMIC_COLOR3 = 0C @ white 2 +DYNAMIC_COLOR4 = 0D @ aquamarine +DYNAMIC_COLOR5 = 0E @ blue-green +DYNAMIC_COLOR6 = 0F @ cerulean + +@ sound and music + +MUS_DUMMY = 00 00 +SE_KAIFUKU = 01 00 +SE_PC_LOGIN = 02 00 +SE_PC_OFF = 03 00 +SE_PC_ON = 04 00 +SE_SELECT = 05 00 +SE_WIN_OPEN = 06 00 +SE_WALL_HIT = 07 00 +SE_DOOR = 08 00 +SE_KAIDAN = 09 00 +SE_DANSA = 0A 00 +SE_JITENSYA = 0B 00 +SE_KOUKA_L = 0C 00 +SE_KOUKA_M = 0D 00 +SE_KOUKA_H = 0E 00 +SE_BOWA2 = 0F 00 +SE_POKE_DEAD = 10 00 +SE_NIGERU = 11 00 +SE_JIDO_DOA = 12 00 +SE_NAMINORI = 13 00 +SE_BAN = 14 00 +SE_PIN = 15 00 +SE_BOO = 16 00 +SE_BOWA = 17 00 +SE_JYUNI = 18 00 +SE_A = 19 00 +SE_I = 1A 00 +SE_U = 1B 00 +SE_E = 1C 00 +SE_O = 1D 00 +SE_N = 1E 00 +SE_SEIKAI = 1F 00 +SE_HAZURE = 20 00 +SE_EXP = 21 00 +SE_JITE_PYOKO = 22 00 +SE_MU_PACHI = 23 00 +SE_TK_KASYA = 24 00 +SE_FU_ZAKU = 25 00 +SE_FU_ZAKU2 = 26 00 +SE_FU_ZUZUZU = 27 00 +SE_RU_GASHIN = 28 00 +SE_RU_GASYAN = 29 00 +SE_RU_BARI = 2A 00 +SE_RU_HYUU = 2B 00 +SE_KI_GASYAN = 2C 00 +SE_TK_WARPIN = 2D 00 +SE_TK_WARPOUT = 2E 00 +SE_TU_SAA = 2F 00 +SE_HI_TURUN = 30 00 +SE_TRACK_MOVE = 31 00 +SE_TRACK_STOP = 32 00 +SE_TRACK_HAIKI = 33 00 +SE_TRACK_DOOR = 34 00 +SE_MOTER = 35 00 +SE_CARD = 36 00 +SE_SAVE = 37 00 +SE_KON = 38 00 +SE_KON2 = 39 00 +SE_KON3 = 3A 00 +SE_KON4 = 3B 00 +SE_SUIKOMU = 3C 00 +SE_NAGERU = 3D 00 +SE_TOY_C = 3E 00 +SE_TOY_D = 3F 00 +SE_TOY_E = 40 00 +SE_TOY_F = 41 00 +SE_TOY_G = 42 00 +SE_TOY_A = 43 00 +SE_TOY_B = 44 00 +SE_TOY_C1 = 45 00 +SE_MIZU = 46 00 +SE_HASHI = 47 00 +SE_DAUGI = 48 00 +SE_PINPON = 49 00 +SE_FUUSEN1 = 4A 00 +SE_FUUSEN2 = 4B 00 +SE_FUUSEN3 = 4C 00 +SE_TOY_KABE = 4D 00 +SE_TOY_DANGO = 4E 00 +SE_DOKU = 4F 00 +SE_ESUKA = 50 00 +SE_T_AME = 51 00 +SE_T_AME_E = 52 00 +SE_T_OOAME = 53 00 +SE_T_OOAME_E = 54 00 +SE_T_KOAME = 55 00 +SE_T_KOAME_E = 56 00 +SE_T_KAMI = 57 00 +SE_T_KAMI2 = 58 00 +SE_ELEBETA = 59 00 +SE_HINSI = 5A 00 +SE_EXPMAX = 5B 00 +SE_TAMAKORO = 5C 00 +SE_TAMAKORO_E = 5D 00 +SE_BASABASA = 5E 00 +SE_REGI = 5F 00 +SE_C_GAJI = 60 00 +SE_C_MAKU_U = 61 00 +SE_C_MAKU_D = 62 00 +SE_C_PASI = 63 00 +SE_C_SYU = 64 00 +SE_C_PIKON = 65 00 +SE_REAPOKE = 66 00 +SE_OP_BASYU = 67 00 +SE_BT_START = 68 00 +SE_DENDOU = 69 00 +SE_JIHANKI = 6A 00 +SE_TAMA = 6B 00 +SE_Z_SCROLL = 6C 00 +SE_Z_PAGE = 6D 00 +SE_PN_ON = 6E 00 +SE_PN_OFF = 6F 00 +SE_Z_SEARCH = 70 00 +SE_TAMAGO = 71 00 +SE_TB_START = 72 00 +SE_TB_KON = 73 00 +SE_TB_KARA = 74 00 +SE_BIDORO = 75 00 +SE_W085 = 76 00 +SE_W085B = 77 00 +SE_W231 = 78 00 +SE_W171 = 79 00 +SE_W233 = 7A 00 +SE_W233B = 7B 00 +SE_W145 = 7C 00 +SE_W145B = 7D 00 +SE_W145C = 7E 00 +SE_W240 = 7F 00 +SE_W015 = 80 00 +SE_W081 = 81 00 +SE_W081B = 82 00 +SE_W088 = 83 00 +SE_W016 = 84 00 +SE_W016B = 85 00 +SE_W003 = 86 00 +SE_W104 = 87 00 +SE_W013 = 88 00 +SE_W196 = 89 00 +SE_W086 = 8A 00 +SE_W004 = 8B 00 +SE_W025 = 8C 00 +SE_W025B = 8D 00 +SE_W152 = 8E 00 +SE_W026 = 8F 00 +SE_W172 = 90 00 +SE_W172B = 91 00 +SE_W053 = 92 00 +SE_W007 = 93 00 +SE_W092 = 94 00 +SE_W221 = 95 00 +SE_W221B = 96 00 +SE_W052 = 97 00 +SE_W036 = 98 00 +SE_W059 = 99 00 +SE_W059B = 9A 00 +SE_W010 = 9B 00 +SE_W011 = 9C 00 +SE_W017 = 9D 00 +SE_W019 = 9E 00 +SE_W028 = 9F 00 +SE_W013B = A0 00 +SE_W044 = A1 00 +SE_W029 = A2 00 +SE_W057 = A3 00 +SE_W056 = A4 00 +SE_W250 = A5 00 +SE_W030 = A6 00 +SE_W039 = A7 00 +SE_W054 = A8 00 +SE_W077 = A9 00 +SE_W020 = AA 00 +SE_W082 = AB 00 +SE_W047 = AC 00 +SE_W195 = AD 00 +SE_W006 = AE 00 +SE_W091 = AF 00 +SE_W146 = B0 00 +SE_W120 = B1 00 +SE_W153 = B2 00 +SE_W071B = B3 00 +SE_W071 = B4 00 +SE_W103 = B5 00 +SE_W062 = B6 00 +SE_W062B = B7 00 +SE_W048 = B8 00 +SE_W187 = B9 00 +SE_W118 = BA 00 +SE_W155 = BB 00 +SE_W122 = BC 00 +SE_W060 = BD 00 +SE_W185 = BE 00 +SE_W014 = BF 00 +SE_W043 = C0 00 +SE_W207 = C1 00 +SE_W207B = C2 00 +SE_W215 = C3 00 +SE_W109 = C4 00 +SE_W173 = C5 00 +SE_W280 = C6 00 +SE_W202 = C7 00 +SE_W060B = C8 00 +SE_W076 = C9 00 +SE_W080 = CA 00 +SE_W100 = CB 00 +SE_W107 = CC 00 +SE_W166 = CD 00 +SE_W129 = CE 00 +SE_W115 = CF 00 +SE_W112 = D0 00 +SE_W197 = D1 00 +SE_W199 = D2 00 +SE_W236 = D3 00 +SE_W204 = D4 00 +SE_W268 = D5 00 +SE_W070 = D6 00 +SE_W063 = D7 00 +SE_W127 = D8 00 +SE_W179 = D9 00 +SE_W151 = DA 00 +SE_W201 = DB 00 +SE_W161 = DC 00 +SE_W161B = DD 00 +SE_W227 = DE 00 +SE_W227B = DF 00 +SE_W226 = E0 00 +SE_W208 = E1 00 +SE_W213 = E2 00 +SE_W213B = E3 00 +SE_W234 = E4 00 +SE_W260 = E5 00 +SE_W328 = E6 00 +SE_W320 = E7 00 +SE_W255 = E8 00 +SE_W291 = E9 00 +SE_W089 = EA 00 +SE_W239 = EB 00 +SE_W230 = EC 00 +SE_W281 = ED 00 +SE_W327 = EE 00 +SE_W287 = EF 00 +SE_W257 = F0 00 +SE_W253 = F1 00 +SE_W258 = F2 00 +SE_W322 = F3 00 +SE_W298 = F4 00 +SE_W287B = F5 00 +SE_W114 = F6 00 +SE_W063B = F7 00 +SE_RG_W_DOOR = F8 00 +SE_RG_CARD1 = F9 00 +SE_RG_CARD2 = FA 00 +SE_RG_CARD3 = FB 00 +SE_RG_BAG1 = FC 00 +SE_RG_BAG2 = FD 00 +SE_RG_GETTING = FE 00 +SE_RG_SHOP = FF 00 +SE_RG_KITEKI = 00 01 +SE_RG_HELP_OP = 01 01 +SE_RG_HELP_CL = 02 01 +SE_RG_HELP_NG = 03 01 +SE_RG_DEOMOV = 04 01 +SE_RG_EXCELLENT = 05 01 +SE_RG_NAWAMISS = 06 01 +SE_TOREEYE = 07 01 +SE_TOREOFF = 08 01 +SE_HANTEI1 = 09 01 +SE_HANTEI2 = 0A 01 +SE_CURTAIN = 0B 01 +SE_CURTAIN1 = 0C 01 +SE_USSOKI = 0D 01 +MUS_TETSUJI = 5E 01 +MUS_FIELD13 = 5F 01 +MUS_KACHI22 = 60 01 +MUS_KACHI2 = 61 01 +MUS_KACHI3 = 62 01 +MUS_KACHI5 = 63 01 +MUS_PCC = 64 01 +MUS_NIBI = 65 01 +MUS_SUIKUN = 66 01 +MUS_DOORO1 = 67 01 +MUS_DOORO_X1 = 68 01 +MUS_DOORO_X3 = 69 01 +MUS_MACHI_S2 = 6A 01 +MUS_MACHI_S4 = 6B 01 +MUS_GIM = 6C 01 +MUS_NAMINORI = 6D 01 +MUS_DAN01 = 6E 01 +MUS_FANFA1 = 6F 01 +MUS_ME_ASA = 70 01 +MUS_ME_BACHI = 71 01 +MUS_FANFA4 = 72 01 +MUS_FANFA5 = 73 01 +MUS_ME_WAZA = 74 01 +MUS_BIJYUTU = 75 01 +MUS_DOORO_X4 = 76 01 +MUS_FUNE_KAN = 77 01 +MUS_ME_SHINKA = 78 01 +MUS_SHINKA = 79 01 +MUS_ME_WASURE = 7A 01 +MUS_SYOUJOEYE = 7B 01 +MUS_BOYEYE = 7C 01 +MUS_DAN02 = 7D 01 +MUS_MACHI_S3 = 7E 01 +MUS_ODAMAKI = 7F 01 +MUS_B_TOWER = 80 01 +MUS_SWIMEYE = 81 01 +MUS_DAN03 = 82 01 +MUS_ME_KINOMI = 83 01 +MUS_ME_TAMA = 84 01 +MUS_ME_B_BIG = 85 01 +MUS_ME_B_SMALL = 86 01 +MUS_ME_ZANNEN = 87 01 +MUS_BD_TIME = 88 01 +MUS_TEST1 = 89 01 +MUS_TEST2 = 8A 01 +MUS_TEST3 = 8B 01 +MUS_TEST4 = 8C 01 +MUS_TEST = 8D 01 +MUS_GOMACHI0 = 8E 01 +MUS_GOTOWN = 8F 01 +MUS_POKECEN = 90 01 +MUS_NEXTROAD = 91 01 +MUS_GRANROAD = 92 01 +MUS_CYCLING = 93 01 +MUS_FRIENDLY = 94 01 +MUS_MISHIRO = 95 01 +MUS_TOZAN = 96 01 +MUS_GIRLEYE = 97 01 +MUS_MINAMO = 98 01 +MUS_ASHROAD = 99 01 +MUS_EVENT0 = 9A 01 +MUS_DEEPDEEP = 9B 01 +MUS_KACHI1 = 9C 01 +MUS_TITLE3 = 9D 01 +MUS_DEMO1 = 9E 01 +MUS_GIRL_SUP = 9F 01 +MUS_HAGESHII = A0 01 +MUS_KAKKOII = A1 01 +MUS_KAZANBAI = A2 01 +MUS_AQA_0 = A3 01 +MUS_TSURETEK = A4 01 +MUS_BOY_SUP = A5 01 +MUS_RAINBOW = A6 01 +MUS_AYASII = A7 01 +MUS_KACHI4 = A8 01 +MUS_ROPEWAY = A9 01 +MUS_CASINO = AA 01 +MUS_HIGHTOWN = AB 01 +MUS_SAFARI = AC 01 +MUS_C_ROAD = AD 01 +MUS_AJITO = AE 01 +MUS_M_BOAT = AF 01 +MUS_M_DUNGON = B0 01 +MUS_FINECITY = B1 01 +MUS_MACHUPI = B2 01 +MUS_P_SCHOOL = B3 01 +MUS_DENDOU = B4 01 +MUS_TONEKUSA = B5 01 +MUS_MABOROSI = B6 01 +MUS_CON_FAN = B7 01 +MUS_CONTEST0 = B8 01 +MUS_MGM0 = B9 01 +MUS_T_BATTLE = BA 01 +MUS_OOAME = BB 01 +MUS_HIDERI = BC 01 +MUS_RUNECITY = BD 01 +MUS_CON_K = BE 01 +MUS_EIKOU_R = BF 01 +MUS_KARAKURI = C0 01 +MUS_HUTAGO = C1 01 +MUS_SITENNOU = C2 01 +MUS_YAMA_EYE = C3 01 +MUS_CONLOBBY = C4 01 +MUS_INTER_V = C5 01 +MUS_DAIGO = C6 01 +MUS_THANKFOR = C7 01 +MUS_END = C8 01 +MUS_B_FRONTIER = C9 01 +MUS_B_ARENA = CA 01 +MUS_ME_POINTGET = CB 01 +MUS_ME_TORE_EYE = CC 01 +MUS_PYRAMID = CD 01 +MUS_PYRAMID_TOP = CE 01 +MUS_B_PALACE = CF 01 +MUS_REKKUU_KOURIN = D0 01 +MUS_SATTOWER = D1 01 +MUS_ME_SYMBOLGET = D2 01 +MUS_B_DOME = D3 01 +MUS_B_TUBE = D4 01 +MUS_B_FACTORY = D5 01 +MUS_VS_REKKU = D6 01 +MUS_VS_FRONT = D7 01 +MUS_VS_MEW = D8 01 +MUS_B_DOME1 = D9 01 +MUS_BATTLE27 = DA 01 +MUS_BATTLE31 = DB 01 +MUS_BATTLE20 = DC 01 +MUS_BATTLE32 = DD 01 +MUS_BATTLE33 = DE 01 +MUS_BATTLE36 = DF 01 +MUS_BATTLE34 = E0 01 +MUS_BATTLE35 = E1 01 +MUS_BATTLE38 = E2 01 +MUS_BATTLE30 = E3 01 +MUS_RG_ANNAI = E4 01 +MUS_RG_SLOT = E5 01 +MUS_RG_AJITO = E6 01 +MUS_RG_GYM = E7 01 +MUS_RG_PURIN = E8 01 +MUS_RG_DEMO = E9 01 +MUS_RG_TITLE = EA 01 +MUS_RG_GUREN = EB 01 +MUS_RG_SHION = EC 01 +MUS_RG_KAIHUKU = ED 01 +MUS_RG_CYCLING = EE 01 +MUS_RG_ROCKET = EF 01 +MUS_RG_SHOUJO = F0 01 +MUS_RG_SHOUNEN = F1 01 +MUS_RG_DENDOU = F2 01 +MUS_RG_T_MORI = F3 01 +MUS_RG_OTSUKIMI = F4 01 +MUS_RG_POKEYASHI = F5 01 +MUS_RG_ENDING = F6 01 +MUS_RG_LOAD01 = F7 01 +MUS_RG_OPENING = F8 01 +MUS_RG_LOAD02 = F9 01 +MUS_RG_LOAD03 = FA 01 +MUS_RG_CHAMP_R = FB 01 +MUS_RG_VS_GYM = FC 01 +MUS_RG_VS_TORE = FD 01 +MUS_RG_VS_YASEI = FE 01 +MUS_RG_VS_LAST = FF 01 +MUS_RG_MASARA = 00 02 +MUS_RG_KENKYU = 01 02 +MUS_RG_OHKIDO = 02 02 +MUS_RG_POKECEN = 03 02 +MUS_RG_SANTOAN = 04 02 +MUS_RG_NAMINORI = 05 02 +MUS_RG_P_TOWER = 06 02 +MUS_RG_SHIRUHU = 07 02 +MUS_RG_HANADA = 08 02 +MUS_RG_TAMAMUSI = 09 02 +MUS_RG_WIN_TRE = 0A 02 +MUS_RG_WIN_YASEI = 0B 02 +MUS_RG_WIN_GYM = 0C 02 +MUS_RG_KUCHIBA = 0D 02 +MUS_RG_NIBI = 0E 02 +MUS_RG_RIVAL1 = 0F 02 +MUS_RG_RIVAL2 = 10 02 +MUS_RG_FAN2 = 11 02 +MUS_RG_FAN5 = 12 02 +MUS_RG_FAN6 = 13 02 +MUS_ME_RG_PHOTO = 14 02 +MUS_RG_TITLEROG = 15 02 +MUS_RG_GET_YASEI = 16 02 +MUS_RG_SOUSA = 17 02 +MUS_RG_SEKAIKAN = 18 02 +MUS_RG_SEIBETU = 19 02 +MUS_RG_JUMP = 1A 02 +MUS_RG_UNION = 1B 02 +MUS_RG_NETWORK = 1C 02 +MUS_RG_OKURIMONO = 1D 02 +MUS_RG_KINOMIKUI = 1E 02 +MUS_RG_NANADUNGEON = 1F 02 +MUS_RG_OSHIE_TV = 20 02 +MUS_RG_NANASHIMA = 21 02 +MUS_RG_NANAISEKI = 22 02 +MUS_RG_NANA123 = 23 02 +MUS_RG_NANA45 = 24 02 +MUS_RG_NANA67 = 25 02 +MUS_RG_POKEFUE = 26 02 +MUS_RG_VS_DEO = 27 02 +MUS_RG_VS_MYU2 = 28 02 +MUS_RG_VS_DEN = 29 02 +MUS_RG_EXEYE = 2A 02 +MUS_RG_DEOEYE = 2B 02 +MUS_RG_T_TOWER = 2C 02 +MUS_RG_SLOWMASARA = 2D 02 +MUS_RG_TVNOIZE = 2E 02 +PH_TRAP_BLEND = 2F 02 +PH_TRAP_HELD = 30 02 +PH_TRAP_SOLO = 31 02 +PH_FACE_BLEND = 32 02 +PH_FACE_HELD = 33 02 +PH_FACE_SOLO = 34 02 +PH_CLOTH_BLEND = 35 02 +PH_CLOTH_HELD = 36 02 +PH_CLOTH_SOLO = 37 02 +PH_DRESS_BLEND = 38 02 +PH_DRESS_HELD = 39 02 +PH_DRESS_SOLO = 3A 02 +PH_FLEECE_BLEND = 3B 02 +PH_FLEECE_HELD = 3C 02 +PH_FLEECE_SOLO = 3D 02 +PH_KIT_BLEND = 3E 02 +PH_KIT_HELD = 3F 02 +PH_KIT_SOLO = 40 02 +PH_PRICE_BLEND = 41 02 +PH_PRICE_HELD = 42 02 +PH_PRICE_SOLO = 43 02 +PH_LOT_BLEND = 44 02 +PH_LOT_HELD = 45 02 +PH_LOT_SOLO = 46 02 +PH_GOAT_BLEND = 47 02 +PH_GOAT_HELD = 48 02 +PH_GOAT_SOLO = 49 02 +PH_THOUGHT_BLEND = 4A 02 +PH_THOUGHT_HELD = 4B 02 +PH_THOUGHT_SOLO = 4C 02 +PH_CHOICE_BLEND = 4D 02 +PH_CHOICE_HELD = 4E 02 +PH_CHOICE_SOLO = 4F 02 +PH_MOUTH_BLEND = 50 02 +PH_MOUTH_HELD = 51 02 +PH_MOUTH_SOLO = 52 02 +PH_FOOT_BLEND = 53 02 +PH_FOOT_HELD = 54 02 +PH_FOOT_SOLO = 55 02 +PH_GOOSE_BLEND = 56 02 +PH_GOOSE_HELD = 57 02 +PH_GOOSE_SOLO = 58 02 +PH_STRUT_BLEND = 59 02 +PH_STRUT_HELD = 5A 02 +PH_STRUT_SOLO = 5B 02 +PH_CURE_BLEND = 5C 02 +PH_CURE_HELD = 5D 02 +PH_CURE_SOLO = 5E 02 +PH_NURSE_BLEND = 5F 02 +PH_NURSE_HELD = 60 02 +PH_NURSE_SOLO = 61 02 + +A_BUTTON = F8 00 +B_BUTTON = F8 01 +DPAD_UPDOWN = F8 0A +DPAD_NONE = F8 0C + +UP_ARROW_2 = F9 00 +DOWN_ARROW_2 = F9 01 +LEFT_ARROW_2 = F9 02 +RIGHT_ARROW_2 = F9 03 +PLUS = F9 04 +LV_2 = F9 05 +PP = F9 06 +ID = F9 07 +NO = F9 08 +UNDERSCORE = F9 09 +CIRCLE_1 = F9 0A +CIRCLE_2 = F9 0B +CIRCLE_3 = F9 0C +CIRCLE_4 = F9 0D +CIRCLE_5 = F9 0E +CIRCLE_6 = F9 0F +CIRCLE_7 = F9 10 +CIRCLE_8 = F9 11 +CIRCLE_9 = F9 12 +ROUND_LEFT_PAREN = F9 13 +ROUND_RIGHT_PAREN = F9 14 +CIRCLE_DOT = F9 15 +TRIANGLE = F9 16 +BIG_MULT_X = F9 17 + +EMOJI_UNDERSCORE = F9 D0 +EMOJI_PIPE = F9 D1 +EMOJI_HIGHBAR = F9 D2 +EMOJI_TILDE = F9 D3 +EMOJI_LEFT_PAREN = F9 D4 +EMOJI_RIGHT_PAREN = F9 D5 +EMOJI_UNION = F9 D6 @ ⊂ +EMOJI_GREATER_THAN = F9 D7 +EMOJI_LEFT_EYE = F9 D8 +EMOJI_RIGHT_EYE = F9 D9 +EMOJI_AT = F9 DA +EMOJI_SEMICOLON = F9 DB +EMOJI_PLUS = F9 DC +EMOJI_MINUS = F9 DD +EMOJI_EQUALS = F9 DE +EMOJI_SPIRAL = F9 DF +EMOJI_TONGUE = F9 E0 +EMOJI_TRIANGLE_OUTLINE = F9 E1 +EMOJI_ACUTE = F9 E2 +EMOJI_GRAVE = F9 E3 +EMOJI_CIRCLE = F9 E4 +EMOJI_TRIANGLE = F9 E5 +EMOJI_SQUARE = F9 E6 +EMOJI_HEART = F9 E7 +EMOJI_MOON = F9 E8 +EMOJI_NOTE = F9 E9 +EMOJI_BALL = F9 EA +EMOJI_BOLT = F9 EB +EMOJI_LEAF = F9 EC +EMOJI_FIRE = F9 ED +EMOJI_WATER = F9 EE +EMOJI_LEFT_FIST = F9 EF +EMOJI_RIGHT_FIST = F9 F0 +EMOJI_BIGWHEEL = F9 F1 +EMOJI_SMALLWHEEL = F9 F2 +EMOJI_SPHERE = F9 F3 +EMOJI_IRRITATED = F9 F4 +EMOJI_MISCHIEVOUS = F9 F5 +EMOJI_HAPPY = F9 F6 +EMOJI_ANGRY = F9 F7 +EMOJI_SURPRISED = F9 F8 +EMOJI_BIGSMILE = F9 F9 +EMOJI_EVIL = F9 FA +EMOJI_TIRED = F9 FB +EMOJI_NEUTRAL = F9 FC +EMOJI_SHOCKED = F9 FD +EMOJI_BIGANGER = F9 FE + +'\l' = FA @ scroll up window text +'\p' = FB @ new paragraph +'\n' = FE @ new line diff --git a/berry_fix/data/data.s b/berry_fix/data/data.s new file mode 100644 index 000000000..dbb86b13b --- /dev/null +++ b/berry_fix/data/data.s @@ -0,0 +1,4 @@ + .section .rodata + +_data_2f0:: + .incbin "data/payload.gba.lz" diff --git a/berry_fix/ld_script.sed b/berry_fix/ld_script.sed new file mode 100644 index 000000000..b91542b6f --- /dev/null +++ b/berry_fix/ld_script.sed @@ -0,0 +1,14 @@ +/<EWRAM>/ { + r sym_ewram.ld + d +} + +/<BSS>/ { + r sym_bss.ld + d +} + +/<COMMON>/ { + r sym_common.ld + d +} diff --git a/berry_fix/ld_script.txt b/berry_fix/ld_script.txt new file mode 100644 index 000000000..2edeaef7c --- /dev/null +++ b/berry_fix/ld_script.txt @@ -0,0 +1,31 @@ +ENTRY(_start) + +SECTIONS { + . = 0x2000000; + + .text : + ALIGN(4) + { + asm/loader.o(.text); + } =0 + + . += 0x100; + .rodata : + ALIGN(4) + { + data/data.o(.rodata); + } =0 + + . = 0x2010000; + + ewram (NOLOAD) : + ALIGN(4) + { + gCode = .; + } + + /DISCARD/ : + { + *(*); + } +} diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile new file mode 100644 index 000000000..63e326724 --- /dev/null +++ b/berry_fix/payload/Makefile @@ -0,0 +1,172 @@ +include $(DEVKITARM)/base_tools +export CPP := $(PREFIX)cpp +export LD := $(PREFIX)ld +COMPARE ?= 0 + +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +SHELL := /bin/bash -o pipefail + +CPPFLAGS := -I ../../tools/agbcc/include -I ../../tools/agbcc -iquote include -nostdinc -undef + +ROM := payload.gba +OBJ_DIR := build +CC1 := ../../tools/agbcc/bin/agbcc$(EXE) +override CC1FLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm + + +ELF = $(ROM:.gba=.elf) +MAP = $(ROM:.gba=.map) + +C_SUBDIR = src +ASM_SUBDIR = asm +DATA_ASM_SUBDIR = data + +C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR) +ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR) +DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR) + +ASFLAGS := -mcpu=arm7tdmi + +LDFLAGS = -Map ../$(MAP) + +LIB := -L ../../../tools/agbcc/lib -lgcc + +SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c +GFX := ../../tools/gbagfx/gbagfx$(EXE) +AIF := ../../tools/aif2pcm/aif2pcm$(EXE) +MID := ../../tools/mid2agb/mid2agb$(EXE) +SCANINC := ../../tools/scaninc/scaninc$(EXE) +PREPROC := ../../tools/preproc/preproc$(EXE) +RAMSCRGEN := ../../tools/ramscrgen/ramscrgen$(EXE) +FIX := ../../tools/gbafix/gbafix$(EXE) + +# Clear the default suffixes +.SUFFIXES: +# Don't delete intermediate files +.SECONDARY: +# Delete files that weren't built properly +.DELETE_ON_ERROR: + +# Secondary expansion is required for dependency variables in object rules. +.SECONDEXPANSION: + +.PHONY: all rom clean compare tidy + +C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) +C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) + +ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s) +ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS)) + +DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s) +DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS)) + +SONG_SRCS := $(wildcard $(SONG_SUBDIR)/*.s) +SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS)) + +MID_SRCS := $(wildcard $(MID_SUBDIR)/*.mid) +MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS)) + +OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) +# OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) + +SUBDIRS := $(sort $(dir $(OBJS))) + +$(shell mkdir -p $(SUBDIRS)) + +$(C_BUILDDIR)/siirtc.o: CC1FLAGS := -mthumb-interwork +$(C_BUILDDIR)/agb_flash.o: CC1FLAGS := -O1 -mthumb-interwork +$(C_BUILDDIR)/agb_flash_1m.o: CC1FLAGS := -O1 -mthumb-interwork +$(C_BUILDDIR)/agb_flash_mx.o: CC1FLAGS := -O1 -mthumb-interwork +$(C_BUILDDIR)/agb_flash_le.o: CC1FLAGS := -O1 -mthumb-interwork + +all: rom + @: + +rom: $(ROM) +ifeq ($(COMPARE),1) + @$(SHA1) rom.sha1 +endif + +# For contributors to make sure a change didn't affect the contents of the ROM. +compare: ; @$(MAKE) COMPARE=1 + +clean: tidy + rm -f sound/direct_sound_samples/*.bin + rm -f $(SONG_OBJS) $(MID_OBJS) $(MID_SUBDIR)/*.s + find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + + +tidy: + rm -f $(ROM) $(ELF) $(MAP) + rm -r build/* + +%.s: ; +%.png: ; +%.pal: ; +%.aif: ; + +%.1bpp: %.png ; $(GFX) $< $@ +%.4bpp: %.png ; $(GFX) $< $@ +%.8bpp: %.png ; $(GFX) $< $@ +%.gbapal: %.pal ; $(GFX) $< $@ +%.gbapal: %.png ; $(GFX) $< $@ +%.lz: % ; $(GFX) $< $@ +%.rl: % ; $(GFX) $< $@ + + +ifeq ($(NODEP),1) +$(C_BUILDDIR)/%.o: c_dep := +else +$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c) +endif + +$(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep) + @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i + @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CC1FLAGS) -o $(C_BUILDDIR)/$*.s + @echo -e ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s + $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s + +ifeq ($(NODEP),1) +$(ASM_BUILDDIR)/%.o: asm_dep := +else +$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) $(ASM_SUBDIR)/$*.s) +endif + +$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep) + $(AS) $(ASFLAGS) -o $@ $< + +ifeq ($(NODEP),1) +$(DATA_ASM_BUILDDIR)/%.o: data_dep := +else +$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) $(DATA_ASM_SUBDIR)/$*.s) +endif + +$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep) + $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ + +$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s + $(AS) $(ASFLAGS) -I sound -o $@ $< + +$(OBJ_DIR)/sym_bss.ld: sym_bss.txt + $(RAMSCRGEN) .bss $< ENGLISH > $@ + +$(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt) + $(RAMSCRGEN) COMMON $< ENGLISH -c $(C_BUILDDIR),common_syms > $@ + +$(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt + $(RAMSCRGEN) ewram_data $< ENGLISH > $@ + +$(OBJ_DIR)/ld_script.ld: ld_script.txt $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld + cd $(OBJ_DIR) && sed -f ../../ld_script.sed ../$< | sed "s#tools/#../tools/#g" > ld_script.ld + +$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) + cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../$@ $(LIB) + +$(ROM): $(ELF) + $(OBJCOPY) -O binary $< $@ + diff --git a/berry_fix/payload/asm/crt0.s b/berry_fix/payload/asm/crt0.s new file mode 100644 index 000000000..872a63018 --- /dev/null +++ b/berry_fix/payload/asm/crt0.s @@ -0,0 +1,82 @@ + .include "asm/macros/function.inc" + .include "constants/gba_constants.inc" + + .syntax unified + + .text + + .arm + .align 2, 0 + .global Init +Init: + mov r0, PSR_IRQ_MODE + msr cpsr_cf, r0 + ldr sp, sp_irq + mov r0, PSR_SYS_MODE + msr cpsr_cf, r0 + ldr sp, sp_sys + ldr r1, =INTR_VECTOR + ldr r0, =IntrMain + str r0, [r1] + ldr r1, =AgbMain + 1 + mov lr, pc + bx r1 + b Init + + .align 2, 0 +sp_sys: .word IWRAM_END - 0x100 +sp_irq: .word IWRAM_END - 0x60 + + .pool + .size Init, .-Init + + .arm + .align 2, 0 + .global IntrMain +IntrMain: @ 0x2010048 + mov ip, REG_BASE + add r3, ip, OFFSET_REG_IE + ldr r2, [r3] + and r1, r2, r2, lsr #16 + mov r2, #0 + ands r0, r1, #0x2000 + strbne r0, [r3, #-0x17c] +_02010064: + bne _02010064 + ands r0, r1, #0xc0 + bne _020100DC + add r2, r2, #4 + ands r0, r1, #1 + strhne r0, [ip, #-8] + bne _020100DC + add r2, r2, #4 + ands r0, r1, #2 + bne _020100DC + add r2, r2, #4 + ands r0, r1, #4 + bne _020100DC + add r2, r2, #4 + ands r0, r1, #0x100 + bne _020100DC + add r2, r2, #4 + ands r0, r1, #0x200 + bne _020100DC + add r2, r2, #4 + ands r0, r1, #0x400 + bne _020100DC + add r2, r2, #4 + ands r0, r1, #0x800 + bne _020100DC + add r2, r2, #4 + ands r0, r1, #0x1000 + bne _020100DC + add r2, r2, #4 + ands r0, r1, #8 +_020100DC: + strh r0, [r3, #2] + ldr r1, =gIntrTable + add r1, r1, r2 + ldr r0, [r1] + bx r0 + .pool + .size IntrMain, .-IntrMain diff --git a/berry_fix/payload/asm/libagbsyscall.s b/berry_fix/payload/asm/libagbsyscall.s new file mode 100644 index 000000000..ea8ef3e89 --- /dev/null +++ b/berry_fix/payload/asm/libagbsyscall.s @@ -0,0 +1,46 @@ + .include "asm/macros/function.inc" + .include "constants/gba_constants.inc" + + .syntax unified + + .text + + thumb_func_start CpuSet +CpuSet: @ 81E3B64 + swi 0xB + bx lr + thumb_func_end CpuSet + + thumb_func_start Div +Div: @ 81E3B68 + swi 0x6 + bx lr + thumb_func_end Div + + thumb_func_start Mod +Mod: + swi 0x6 + adds r0, r1, 0 + bx lr + thumb_func_end Mod + + thumb_func_start LZ77UnCompVram +LZ77UnCompVram: @ 81E3B6C + swi 0x12 + bx lr + thumb_func_end LZ77UnCompVram + + thumb_func_start RegisterRamReset +RegisterRamReset: @ 81E3B80 + swi 0x1 + bx lr + thumb_func_end RegisterRamReset + + thumb_func_start VBlankIntrWait +VBlankIntrWait: @ 81E3BA0 + movs r2, 0 + swi 0x5 + bx lr + thumb_func_end VBlankIntrWait + + .align 2, 0 @ Don't pad with nop. diff --git a/berry_fix/payload/asm/macros/function.inc b/berry_fix/payload/asm/macros/function.inc new file mode 100644 index 000000000..67fb373a8 --- /dev/null +++ b/berry_fix/payload/asm/macros/function.inc @@ -0,0 +1,29 @@ + .macro arm_func_start name + .align 2, 0 + .global \name + .arm + .type \name, function + .endm + + .macro arm_func_end name + .size \name, .-\name + .endm + + .macro thumb_func_start name + .align 2, 0 + .global \name + .thumb + .thumb_func + .type \name, function + .endm + + .macro non_word_aligned_thumb_func_start name + .global \name + .thumb + .thumb_func + .type \name, function + .endm + + .macro thumb_func_end name + .size \name, .-\name + .endm diff --git a/berry_fix/payload/charmap.txt b/berry_fix/payload/charmap.txt new file mode 100644 index 000000000..a736b40f2 --- /dev/null +++ b/berry_fix/payload/charmap.txt @@ -0,0 +1,1067 @@ +' ' = 00 +'À' = 01 +'Á' = 02 +'Â' = 03 +'Ç' = 04 +'È' = 05 +'É' = 06 +'Ê' = 07 +'Ë' = 08 +'Ì' = 09 +'Î' = 0B +'Ï' = 0C +'Ò' = 0D +'Ó' = 0E +'Ô' = 0F +'Œ' = 10 +'Ù' = 11 +'Ú' = 12 +'Û' = 13 +'Ñ' = 14 +'ß' = 15 +'à' = 16 +'á' = 17 +'ç' = 19 +'è' = 1A +'é' = 1B +'ê' = 1C +'ë' = 1D +'ì' = 1E +'î' = 20 +'ï' = 21 +'ò' = 22 +'ó' = 23 +'ô' = 24 +'œ' = 25 +'ù' = 26 +'ú' = 27 +'û' = 28 +'ñ' = 29 +'º' = 2A +'ª' = 2B +SUPER_ER = 2C +'&' = 2D +'+' = 2E +LV = 34 +'=' = 35 +';' = 36 +'¿' = 51 +'¡' = 52 +PK = 53 +PKMN = 53 54 +POKEBLOCK = 55 56 57 58 59 +'Í' = 5A +'%' = 5B +'(' = 5C +')' = 5D +'â' = 68 +'í' = 6F +UNK_SPACER = 77 +UP_ARROW = 79 +DOWN_ARROW = 7A +LEFT_ARROW = 7B +RIGHT_ARROW = 7C +'0' = A1 +'1' = A2 +'2' = A3 +'3' = A4 +'4' = A5 +'5' = A6 +'6' = A7 +'7' = A8 +'8' = A9 +'9' = AA +'!' = AB +'?' = AC +'.' = AD +'-' = AE +'·' = AF +'…' = B0 +'“' = B1 +'”' = B2 +'‘' = B3 +'’' = B4 +'♂' = B5 +'♀' = B6 +'¥' = B7 +',' = B8 +'×' = B9 +'/' = BA +'A' = BB +'B' = BC +'C' = BD +'D' = BE +'E' = BF +'F' = C0 +'G' = C1 +'H' = C2 +'I' = C3 +'J' = C4 +'K' = C5 +'L' = C6 +'M' = C7 +'N' = C8 +'O' = C9 +'P' = CA +'Q' = CB +'R' = CC +'S' = CD +'T' = CE +'U' = CF +'V' = D0 +'W' = D1 +'X' = D2 +'Y' = D3 +'Z' = D4 +'a' = D5 +'b' = D6 +'c' = D7 +'d' = D8 +'e' = D9 +'f' = DA +'g' = DB +'h' = DC +'i' = DD +'j' = DE +'k' = DF +'l' = E0 +'m' = E1 +'n' = E2 +'o' = E3 +'p' = E4 +'q' = E5 +'r' = E6 +'s' = E7 +'t' = E8 +'u' = E9 +'v' = EA +'w' = EB +'x' = EC +'y' = ED +'z' = EE +'▶' = EF +':' = F0 +'Ä' = F1 +'Ö' = F2 +'Ü' = F3 +'ä' = F4 +'ö' = F5 +'ü' = F6 +TALL_PLUS = FC 0C FB +'$' = FF + +@ Hiragana +'あ' = 01 +'い' = 02 +'う' = 03 +'え' = 04 +'お' = 05 +'か' = 06 +'き' = 07 +'く' = 08 +'け' = 09 +'こ' = 0A +'さ' = 0B +'し' = 0C +'す' = 0D +'せ' = 0E +'そ' = 0F +'た' = 10 +'ち' = 11 +'つ' = 12 +'て' = 13 +'と' = 14 +'な' = 15 +'に' = 16 +'ぬ' = 17 +'ね' = 18 +'の' = 19 +'は' = 1A +'ひ' = 1B +'ふ' = 1C +'へ' = 1D +'ほ' = 1E +'ま' = 1F +'み' = 20 +'む' = 21 +'め' = 22 +'も' = 23 +'や' = 24 +'ゆ' = 25 +'よ' = 26 +'ら' = 27 +'り' = 28 +'る' = 29 +'れ' = 2A +'ろ' = 2B +'わ' = 2C +'を' = 2D +'ん' = 2E +'ぁ' = 2F +'ぃ' = 30 +'ぅ' = 31 +'ぇ' = 32 +'ぉ' = 33 +'ゃ' = 34 +'ゅ' = 35 +'ょ' = 36 +'が' = 37 +'ぎ' = 38 +'ぐ' = 39 +'げ' = 3A +'ご' = 3B +'ざ' = 3C +'じ' = 3D +'ず' = 3E +'ぜ' = 3F +'ぞ' = 40 +'だ' = 41 +'ぢ' = 42 +'づ' = 43 +'で' = 44 +'ど' = 45 +'ば' = 46 +'び' = 47 +'ぶ' = 48 +'べ' = 49 +'ぼ' = 4A +'ぱ' = 4B +'ぴ' = 4C +'ぷ' = 4D +'ぺ' = 4E +'ぽ' = 4F +'っ' = 50 + +@ Katakana +'ア' = 51 +'イ' = 52 +'ウ' = 53 +'エ' = 54 +'オ' = 55 +'カ' = 56 +'キ' = 57 +'ク' = 58 +'ケ' = 59 +'コ' = 5A +'サ' = 5B +'シ' = 5C +'ス' = 5D +'セ' = 5E +'ソ' = 5F +'タ' = 60 +'チ' = 61 +'ツ' = 62 +'テ' = 63 +'ト' = 64 +'ナ' = 65 +'ニ' = 66 +'ヌ' = 67 +'ネ' = 68 +'ノ' = 69 +'ハ' = 6A +'ヒ' = 6B +'フ' = 6C +'ヘ' = 6D +'ホ' = 6E +'マ' = 6F +'ミ' = 70 +'ム' = 71 +'メ' = 72 +'モ' = 73 +'ヤ' = 74 +'ユ' = 75 +'ヨ' = 76 +'ラ' = 77 +'リ' = 78 +'ル' = 79 +'レ' = 7A +'ロ' = 7B +'ワ' = 7C +'ヲ' = 7D +'ン' = 7E +'ァ' = 7F +'ィ' = 80 +'ゥ' = 81 +'ェ' = 82 +'ォ' = 83 +'ャ' = 84 +'ュ' = 85 +'ョ' = 86 +'ガ' = 87 +'ギ' = 88 +'グ' = 89 +'ゲ' = 8A +'ゴ' = 8B +'ザ' = 8C +'ジ' = 8D +'ズ' = 8E +'ゼ' = 8F +'ゾ' = 90 +'ダ' = 91 +'ヂ' = 92 +'ヅ' = 93 +'デ' = 94 +'ド' = 95 +'バ' = 96 +'ビ' = 97 +'ブ' = 98 +'ベ' = 99 +'ボ' = 9A +'パ' = 9B +'ピ' = 9C +'プ' = 9D +'ペ' = 9E +'ポ' = 9F +'ッ' = A0 + +@ Japanese punctuation +' ' = 00 +'!' = AB +'?' = AC +'。' = AD +'ー' = AE +'⋯' = B0 + +STRING = FD + +@ string placeholders +PLAYER = FD 01 +STR_VAR_1 = FD 02 +STR_VAR_2 = FD 03 +STR_VAR_3 = FD 04 +KUN = FD 05 +RIVAL = FD 06 +@ version-dependent strings (originally made for Ruby/Sapphire differences) +@ Emerald uses the Sapphire strings (except for VERSION). +VERSION = FD 07 @ "EMERALD" +AQUA = FD 08 +MAGMA = FD 09 +ARCHIE = FD 0A +MAXIE = FD 0B +KYOGRE = FD 0C +GROUDON = FD 0D + +@ battle string placeholders + +B_BUFF1 = FD 00 +B_BUFF2 = FD 01 +B_COPY_VAR_1 = FD 02 +B_COPY_VAR_2 = FD 03 +B_COPY_VAR_3 = FD 04 +B_PLAYER_MON1_NAME = FD 05 +B_OPPONENT_MON1_NAME = FD 06 +B_PLAYER_MON2_NAME = FD 07 +B_OPPONENT_MON2_NAME = FD 08 +B_LINK_PLAYER_MON1_NAME = FD 09 +B_LINK_OPPONENT_MON1_NAME = FD 0A +B_LINK_PLAYER_MON2_NAME = FD 0B +B_LINK_OPPONENT_MON2_NAME = FD 0C +B_ATK_NAME_WITH_PREFIX_MON1 = FD 0D +B_ATK_PARTNER_NAME = FD 0E +B_ATK_NAME_WITH_PREFIX = FD 0F +B_DEF_NAME_WITH_PREFIX = FD 10 +B_EFF_NAME_WITH_PREFIX = FD 11 @ EFF = short for gEffectBattler +B_ACTIVE_NAME_WITH_PREFIX = FD 12 +B_SCR_ACTIVE_NAME_WITH_PREFIX = FD 13 +B_CURRENT_MOVE = FD 14 +B_LAST_MOVE = FD 15 +B_LAST_ITEM = FD 16 +B_LAST_ABILITY = FD 17 +B_ATK_ABILITY = FD 18 +B_DEF_ABILITY = FD 19 +B_SCR_ACTIVE_ABILITY = FD 1A +B_EFF_ABILITY = FD 1B +B_TRAINER1_CLASS = FD 1C +B_TRAINER1_NAME = FD 1D +B_LINK_PLAYER_NAME = FD 1E +B_LINK_PARTNER_NAME = FD 1F +B_LINK_OPPONENT1_NAME = FD 20 +B_LINK_OPPONENT2_NAME = FD 21 +B_LINK_SCR_TRAINER_NAME = FD 22 +B_PLAYER_NAME = FD 23 +B_TRAINER1_LOSE_TEXT = FD 24 +B_TRAINER1_WIN_TEXT = FD 25 +B_26 = FD 26 +B_PC_CREATOR_NAME = FD 27 +B_ATK_PREFIX1 = FD 28 +B_DEF_PREFIX1 = FD 29 +B_ATK_PREFIX2 = FD 2A +B_DEF_PREFIX2 = FD 2B +B_ATK_PREFIX3 = FD 2C +B_DEF_PREFIX3 = FD 2D +B_TRAINER2_CLASS = FD 2E +B_TRAINER2_NAME = FD 2F +B_TRAINER2_LOSE_TEXT = FD 30 +B_TRAINER2_WIN_TEXT = FD 31 +B_PARTNER_CLASS = FD 32 +B_PARTNER_NAME = FD 33 +B_BUFF3 = FD 34 + +@ indicates the end of a town/city name (before " TOWN" or " CITY") +NAME_END = FC 00 + +@ special 0xF7 character +SPECIAL_F7 = F7 + +@ more text functions + +COLOR = FC 01 @ use a color listed below right after +HIGHLIGHT = FC 02 @ same as fc 01 +SHADOW = FC 03 @ same as fc 01 +COLOR_HIGHLIGHT_SHADOW = FC 04 @ takes 3 bytes +PALETTE = FC 05 @ used in credits +SIZE = FC 06 @ note that anything other than "SMALL" is invalid +UNKNOWN_7 = FC 07 +PAUSE = FC 08 @ manually print the wait byte after this, havent mapped them +PAUSE_UNTIL_PRESS = FC 09 +UNKNOWN_A = FC 0A +PLAY_BGM = FC 0B +ESCAPE = FC 0C +SHIFT_TEXT = FC 0D +UNKNOWN_E = FC 0E +UNKNOWN_F = FC 0F +PLAY_SE = FC 10 +CLEAR = FC 11 +SKIP = FC 12 +CLEAR_TO = FC 13 +UNKNOWN_14 = FC 14 +JPN = FC 15 +ENG = FC 16 +PAUSE_MUSIC = FC 17 +RESUME_MUSIC = FC 18 + +@ colors + +TRANSPARENT = 00 +WHITE = 01 +DARK_GREY = 02 +LIGHT_GREY = 03 +RED = 04 +LIGHT_RED = 05 +GREEN = 06 +LIGHT_GREEN = 07 +BLUE = 08 +LIGHT_BLUE = 09 +@ these next colors can be set to anything arbitrary at runtime +@ usually though they'll have the textbox border colors as described below +DYNAMIC_COLOR1 = 0A @ white +DYNAMIC_COLOR2 = 0B @ white with a tinge of green +DYNAMIC_COLOR3 = 0C @ white 2 +DYNAMIC_COLOR4 = 0D @ aquamarine +DYNAMIC_COLOR5 = 0E @ blue-green +DYNAMIC_COLOR6 = 0F @ cerulean + +@ sound and music + +MUS_DUMMY = 00 00 +SE_KAIFUKU = 01 00 +SE_PC_LOGIN = 02 00 +SE_PC_OFF = 03 00 +SE_PC_ON = 04 00 +SE_SELECT = 05 00 +SE_WIN_OPEN = 06 00 +SE_WALL_HIT = 07 00 +SE_DOOR = 08 00 +SE_KAIDAN = 09 00 +SE_DANSA = 0A 00 +SE_JITENSYA = 0B 00 +SE_KOUKA_L = 0C 00 +SE_KOUKA_M = 0D 00 +SE_KOUKA_H = 0E 00 +SE_BOWA2 = 0F 00 +SE_POKE_DEAD = 10 00 +SE_NIGERU = 11 00 +SE_JIDO_DOA = 12 00 +SE_NAMINORI = 13 00 +SE_BAN = 14 00 +SE_PIN = 15 00 +SE_BOO = 16 00 +SE_BOWA = 17 00 +SE_JYUNI = 18 00 +SE_A = 19 00 +SE_I = 1A 00 +SE_U = 1B 00 +SE_E = 1C 00 +SE_O = 1D 00 +SE_N = 1E 00 +SE_SEIKAI = 1F 00 +SE_HAZURE = 20 00 +SE_EXP = 21 00 +SE_JITE_PYOKO = 22 00 +SE_MU_PACHI = 23 00 +SE_TK_KASYA = 24 00 +SE_FU_ZAKU = 25 00 +SE_FU_ZAKU2 = 26 00 +SE_FU_ZUZUZU = 27 00 +SE_RU_GASHIN = 28 00 +SE_RU_GASYAN = 29 00 +SE_RU_BARI = 2A 00 +SE_RU_HYUU = 2B 00 +SE_KI_GASYAN = 2C 00 +SE_TK_WARPIN = 2D 00 +SE_TK_WARPOUT = 2E 00 +SE_TU_SAA = 2F 00 +SE_HI_TURUN = 30 00 +SE_TRACK_MOVE = 31 00 +SE_TRACK_STOP = 32 00 +SE_TRACK_HAIKI = 33 00 +SE_TRACK_DOOR = 34 00 +SE_MOTER = 35 00 +SE_CARD = 36 00 +SE_SAVE = 37 00 +SE_KON = 38 00 +SE_KON2 = 39 00 +SE_KON3 = 3A 00 +SE_KON4 = 3B 00 +SE_SUIKOMU = 3C 00 +SE_NAGERU = 3D 00 +SE_TOY_C = 3E 00 +SE_TOY_D = 3F 00 +SE_TOY_E = 40 00 +SE_TOY_F = 41 00 +SE_TOY_G = 42 00 +SE_TOY_A = 43 00 +SE_TOY_B = 44 00 +SE_TOY_C1 = 45 00 +SE_MIZU = 46 00 +SE_HASHI = 47 00 +SE_DAUGI = 48 00 +SE_PINPON = 49 00 +SE_FUUSEN1 = 4A 00 +SE_FUUSEN2 = 4B 00 +SE_FUUSEN3 = 4C 00 +SE_TOY_KABE = 4D 00 +SE_TOY_DANGO = 4E 00 +SE_DOKU = 4F 00 +SE_ESUKA = 50 00 +SE_T_AME = 51 00 +SE_T_AME_E = 52 00 +SE_T_OOAME = 53 00 +SE_T_OOAME_E = 54 00 +SE_T_KOAME = 55 00 +SE_T_KOAME_E = 56 00 +SE_T_KAMI = 57 00 +SE_T_KAMI2 = 58 00 +SE_ELEBETA = 59 00 +SE_HINSI = 5A 00 +SE_EXPMAX = 5B 00 +SE_TAMAKORO = 5C 00 +SE_TAMAKORO_E = 5D 00 +SE_BASABASA = 5E 00 +SE_REGI = 5F 00 +SE_C_GAJI = 60 00 +SE_C_MAKU_U = 61 00 +SE_C_MAKU_D = 62 00 +SE_C_PASI = 63 00 +SE_C_SYU = 64 00 +SE_C_PIKON = 65 00 +SE_REAPOKE = 66 00 +SE_OP_BASYU = 67 00 +SE_BT_START = 68 00 +SE_DENDOU = 69 00 +SE_JIHANKI = 6A 00 +SE_TAMA = 6B 00 +SE_Z_SCROLL = 6C 00 +SE_Z_PAGE = 6D 00 +SE_PN_ON = 6E 00 +SE_PN_OFF = 6F 00 +SE_Z_SEARCH = 70 00 +SE_TAMAGO = 71 00 +SE_TB_START = 72 00 +SE_TB_KON = 73 00 +SE_TB_KARA = 74 00 +SE_BIDORO = 75 00 +SE_W085 = 76 00 +SE_W085B = 77 00 +SE_W231 = 78 00 +SE_W171 = 79 00 +SE_W233 = 7A 00 +SE_W233B = 7B 00 +SE_W145 = 7C 00 +SE_W145B = 7D 00 +SE_W145C = 7E 00 +SE_W240 = 7F 00 +SE_W015 = 80 00 +SE_W081 = 81 00 +SE_W081B = 82 00 +SE_W088 = 83 00 +SE_W016 = 84 00 +SE_W016B = 85 00 +SE_W003 = 86 00 +SE_W104 = 87 00 +SE_W013 = 88 00 +SE_W196 = 89 00 +SE_W086 = 8A 00 +SE_W004 = 8B 00 +SE_W025 = 8C 00 +SE_W025B = 8D 00 +SE_W152 = 8E 00 +SE_W026 = 8F 00 +SE_W172 = 90 00 +SE_W172B = 91 00 +SE_W053 = 92 00 +SE_W007 = 93 00 +SE_W092 = 94 00 +SE_W221 = 95 00 +SE_W221B = 96 00 +SE_W052 = 97 00 +SE_W036 = 98 00 +SE_W059 = 99 00 +SE_W059B = 9A 00 +SE_W010 = 9B 00 +SE_W011 = 9C 00 +SE_W017 = 9D 00 +SE_W019 = 9E 00 +SE_W028 = 9F 00 +SE_W013B = A0 00 +SE_W044 = A1 00 +SE_W029 = A2 00 +SE_W057 = A3 00 +SE_W056 = A4 00 +SE_W250 = A5 00 +SE_W030 = A6 00 +SE_W039 = A7 00 +SE_W054 = A8 00 +SE_W077 = A9 00 +SE_W020 = AA 00 +SE_W082 = AB 00 +SE_W047 = AC 00 +SE_W195 = AD 00 +SE_W006 = AE 00 +SE_W091 = AF 00 +SE_W146 = B0 00 +SE_W120 = B1 00 +SE_W153 = B2 00 +SE_W071B = B3 00 +SE_W071 = B4 00 +SE_W103 = B5 00 +SE_W062 = B6 00 +SE_W062B = B7 00 +SE_W048 = B8 00 +SE_W187 = B9 00 +SE_W118 = BA 00 +SE_W155 = BB 00 +SE_W122 = BC 00 +SE_W060 = BD 00 +SE_W185 = BE 00 +SE_W014 = BF 00 +SE_W043 = C0 00 +SE_W207 = C1 00 +SE_W207B = C2 00 +SE_W215 = C3 00 +SE_W109 = C4 00 +SE_W173 = C5 00 +SE_W280 = C6 00 +SE_W202 = C7 00 +SE_W060B = C8 00 +SE_W076 = C9 00 +SE_W080 = CA 00 +SE_W100 = CB 00 +SE_W107 = CC 00 +SE_W166 = CD 00 +SE_W129 = CE 00 +SE_W115 = CF 00 +SE_W112 = D0 00 +SE_W197 = D1 00 +SE_W199 = D2 00 +SE_W236 = D3 00 +SE_W204 = D4 00 +SE_W268 = D5 00 +SE_W070 = D6 00 +SE_W063 = D7 00 +SE_W127 = D8 00 +SE_W179 = D9 00 +SE_W151 = DA 00 +SE_W201 = DB 00 +SE_W161 = DC 00 +SE_W161B = DD 00 +SE_W227 = DE 00 +SE_W227B = DF 00 +SE_W226 = E0 00 +SE_W208 = E1 00 +SE_W213 = E2 00 +SE_W213B = E3 00 +SE_W234 = E4 00 +SE_W260 = E5 00 +SE_W328 = E6 00 +SE_W320 = E7 00 +SE_W255 = E8 00 +SE_W291 = E9 00 +SE_W089 = EA 00 +SE_W239 = EB 00 +SE_W230 = EC 00 +SE_W281 = ED 00 +SE_W327 = EE 00 +SE_W287 = EF 00 +SE_W257 = F0 00 +SE_W253 = F1 00 +SE_W258 = F2 00 +SE_W322 = F3 00 +SE_W298 = F4 00 +SE_W287B = F5 00 +SE_W114 = F6 00 +SE_W063B = F7 00 +SE_RG_W_DOOR = F8 00 +SE_RG_CARD1 = F9 00 +SE_RG_CARD2 = FA 00 +SE_RG_CARD3 = FB 00 +SE_RG_BAG1 = FC 00 +SE_RG_BAG2 = FD 00 +SE_RG_GETTING = FE 00 +SE_RG_SHOP = FF 00 +SE_RG_KITEKI = 00 01 +SE_RG_HELP_OP = 01 01 +SE_RG_HELP_CL = 02 01 +SE_RG_HELP_NG = 03 01 +SE_RG_DEOMOV = 04 01 +SE_RG_EXCELLENT = 05 01 +SE_RG_NAWAMISS = 06 01 +SE_TOREEYE = 07 01 +SE_TOREOFF = 08 01 +SE_HANTEI1 = 09 01 +SE_HANTEI2 = 0A 01 +SE_CURTAIN = 0B 01 +SE_CURTAIN1 = 0C 01 +SE_USSOKI = 0D 01 +MUS_TETSUJI = 5E 01 +MUS_FIELD13 = 5F 01 +MUS_KACHI22 = 60 01 +MUS_KACHI2 = 61 01 +MUS_KACHI3 = 62 01 +MUS_KACHI5 = 63 01 +MUS_PCC = 64 01 +MUS_NIBI = 65 01 +MUS_SUIKUN = 66 01 +MUS_DOORO1 = 67 01 +MUS_DOORO_X1 = 68 01 +MUS_DOORO_X3 = 69 01 +MUS_MACHI_S2 = 6A 01 +MUS_MACHI_S4 = 6B 01 +MUS_GIM = 6C 01 +MUS_NAMINORI = 6D 01 +MUS_DAN01 = 6E 01 +MUS_FANFA1 = 6F 01 +MUS_ME_ASA = 70 01 +MUS_ME_BACHI = 71 01 +MUS_FANFA4 = 72 01 +MUS_FANFA5 = 73 01 +MUS_ME_WAZA = 74 01 +MUS_BIJYUTU = 75 01 +MUS_DOORO_X4 = 76 01 +MUS_FUNE_KAN = 77 01 +MUS_ME_SHINKA = 78 01 +MUS_SHINKA = 79 01 +MUS_ME_WASURE = 7A 01 +MUS_SYOUJOEYE = 7B 01 +MUS_BOYEYE = 7C 01 +MUS_DAN02 = 7D 01 +MUS_MACHI_S3 = 7E 01 +MUS_ODAMAKI = 7F 01 +MUS_B_TOWER = 80 01 +MUS_SWIMEYE = 81 01 +MUS_DAN03 = 82 01 +MUS_ME_KINOMI = 83 01 +MUS_ME_TAMA = 84 01 +MUS_ME_B_BIG = 85 01 +MUS_ME_B_SMALL = 86 01 +MUS_ME_ZANNEN = 87 01 +MUS_BD_TIME = 88 01 +MUS_TEST1 = 89 01 +MUS_TEST2 = 8A 01 +MUS_TEST3 = 8B 01 +MUS_TEST4 = 8C 01 +MUS_TEST = 8D 01 +MUS_GOMACHI0 = 8E 01 +MUS_GOTOWN = 8F 01 +MUS_POKECEN = 90 01 +MUS_NEXTROAD = 91 01 +MUS_GRANROAD = 92 01 +MUS_CYCLING = 93 01 +MUS_FRIENDLY = 94 01 +MUS_MISHIRO = 95 01 +MUS_TOZAN = 96 01 +MUS_GIRLEYE = 97 01 +MUS_MINAMO = 98 01 +MUS_ASHROAD = 99 01 +MUS_EVENT0 = 9A 01 +MUS_DEEPDEEP = 9B 01 +MUS_KACHI1 = 9C 01 +MUS_TITLE3 = 9D 01 +MUS_DEMO1 = 9E 01 +MUS_GIRL_SUP = 9F 01 +MUS_HAGESHII = A0 01 +MUS_KAKKOII = A1 01 +MUS_KAZANBAI = A2 01 +MUS_AQA_0 = A3 01 +MUS_TSURETEK = A4 01 +MUS_BOY_SUP = A5 01 +MUS_RAINBOW = A6 01 +MUS_AYASII = A7 01 +MUS_KACHI4 = A8 01 +MUS_ROPEWAY = A9 01 +MUS_CASINO = AA 01 +MUS_HIGHTOWN = AB 01 +MUS_SAFARI = AC 01 +MUS_C_ROAD = AD 01 +MUS_AJITO = AE 01 +MUS_M_BOAT = AF 01 +MUS_M_DUNGON = B0 01 +MUS_FINECITY = B1 01 +MUS_MACHUPI = B2 01 +MUS_P_SCHOOL = B3 01 +MUS_DENDOU = B4 01 +MUS_TONEKUSA = B5 01 +MUS_MABOROSI = B6 01 +MUS_CON_FAN = B7 01 +MUS_CONTEST0 = B8 01 +MUS_MGM0 = B9 01 +MUS_T_BATTLE = BA 01 +MUS_OOAME = BB 01 +MUS_HIDERI = BC 01 +MUS_RUNECITY = BD 01 +MUS_CON_K = BE 01 +MUS_EIKOU_R = BF 01 +MUS_KARAKURI = C0 01 +MUS_HUTAGO = C1 01 +MUS_SITENNOU = C2 01 +MUS_YAMA_EYE = C3 01 +MUS_CONLOBBY = C4 01 +MUS_INTER_V = C5 01 +MUS_DAIGO = C6 01 +MUS_THANKFOR = C7 01 +MUS_END = C8 01 +MUS_B_FRONTIER = C9 01 +MUS_B_ARENA = CA 01 +MUS_ME_POINTGET = CB 01 +MUS_ME_TORE_EYE = CC 01 +MUS_PYRAMID = CD 01 +MUS_PYRAMID_TOP = CE 01 +MUS_B_PALACE = CF 01 +MUS_REKKUU_KOURIN = D0 01 +MUS_SATTOWER = D1 01 +MUS_ME_SYMBOLGET = D2 01 +MUS_B_DOME = D3 01 +MUS_B_TUBE = D4 01 +MUS_B_FACTORY = D5 01 +MUS_VS_REKKU = D6 01 +MUS_VS_FRONT = D7 01 +MUS_VS_MEW = D8 01 +MUS_B_DOME1 = D9 01 +MUS_BATTLE27 = DA 01 +MUS_BATTLE31 = DB 01 +MUS_BATTLE20 = DC 01 +MUS_BATTLE32 = DD 01 +MUS_BATTLE33 = DE 01 +MUS_BATTLE36 = DF 01 +MUS_BATTLE34 = E0 01 +MUS_BATTLE35 = E1 01 +MUS_BATTLE38 = E2 01 +MUS_BATTLE30 = E3 01 +MUS_RG_ANNAI = E4 01 +MUS_RG_SLOT = E5 01 +MUS_RG_AJITO = E6 01 +MUS_RG_GYM = E7 01 +MUS_RG_PURIN = E8 01 +MUS_RG_DEMO = E9 01 +MUS_RG_TITLE = EA 01 +MUS_RG_GUREN = EB 01 +MUS_RG_SHION = EC 01 +MUS_RG_KAIHUKU = ED 01 +MUS_RG_CYCLING = EE 01 +MUS_RG_ROCKET = EF 01 +MUS_RG_SHOUJO = F0 01 +MUS_RG_SHOUNEN = F1 01 +MUS_RG_DENDOU = F2 01 +MUS_RG_T_MORI = F3 01 +MUS_RG_OTSUKIMI = F4 01 +MUS_RG_POKEYASHI = F5 01 +MUS_RG_ENDING = F6 01 +MUS_RG_LOAD01 = F7 01 +MUS_RG_OPENING = F8 01 +MUS_RG_LOAD02 = F9 01 +MUS_RG_LOAD03 = FA 01 +MUS_RG_CHAMP_R = FB 01 +MUS_RG_VS_GYM = FC 01 +MUS_RG_VS_TORE = FD 01 +MUS_RG_VS_YASEI = FE 01 +MUS_RG_VS_LAST = FF 01 +MUS_RG_MASARA = 00 02 +MUS_RG_KENKYU = 01 02 +MUS_RG_OHKIDO = 02 02 +MUS_RG_POKECEN = 03 02 +MUS_RG_SANTOAN = 04 02 +MUS_RG_NAMINORI = 05 02 +MUS_RG_P_TOWER = 06 02 +MUS_RG_SHIRUHU = 07 02 +MUS_RG_HANADA = 08 02 +MUS_RG_TAMAMUSI = 09 02 +MUS_RG_WIN_TRE = 0A 02 +MUS_RG_WIN_YASEI = 0B 02 +MUS_RG_WIN_GYM = 0C 02 +MUS_RG_KUCHIBA = 0D 02 +MUS_RG_NIBI = 0E 02 +MUS_RG_RIVAL1 = 0F 02 +MUS_RG_RIVAL2 = 10 02 +MUS_RG_FAN2 = 11 02 +MUS_RG_FAN5 = 12 02 +MUS_RG_FAN6 = 13 02 +MUS_ME_RG_PHOTO = 14 02 +MUS_RG_TITLEROG = 15 02 +MUS_RG_GET_YASEI = 16 02 +MUS_RG_SOUSA = 17 02 +MUS_RG_SEKAIKAN = 18 02 +MUS_RG_SEIBETU = 19 02 +MUS_RG_JUMP = 1A 02 +MUS_RG_UNION = 1B 02 +MUS_RG_NETWORK = 1C 02 +MUS_RG_OKURIMONO = 1D 02 +MUS_RG_KINOMIKUI = 1E 02 +MUS_RG_NANADUNGEON = 1F 02 +MUS_RG_OSHIE_TV = 20 02 +MUS_RG_NANASHIMA = 21 02 +MUS_RG_NANAISEKI = 22 02 +MUS_RG_NANA123 = 23 02 +MUS_RG_NANA45 = 24 02 +MUS_RG_NANA67 = 25 02 +MUS_RG_POKEFUE = 26 02 +MUS_RG_VS_DEO = 27 02 +MUS_RG_VS_MYU2 = 28 02 +MUS_RG_VS_DEN = 29 02 +MUS_RG_EXEYE = 2A 02 +MUS_RG_DEOEYE = 2B 02 +MUS_RG_T_TOWER = 2C 02 +MUS_RG_SLOWMASARA = 2D 02 +MUS_RG_TVNOIZE = 2E 02 +PH_TRAP_BLEND = 2F 02 +PH_TRAP_HELD = 30 02 +PH_TRAP_SOLO = 31 02 +PH_FACE_BLEND = 32 02 +PH_FACE_HELD = 33 02 +PH_FACE_SOLO = 34 02 +PH_CLOTH_BLEND = 35 02 +PH_CLOTH_HELD = 36 02 +PH_CLOTH_SOLO = 37 02 +PH_DRESS_BLEND = 38 02 +PH_DRESS_HELD = 39 02 +PH_DRESS_SOLO = 3A 02 +PH_FLEECE_BLEND = 3B 02 +PH_FLEECE_HELD = 3C 02 +PH_FLEECE_SOLO = 3D 02 +PH_KIT_BLEND = 3E 02 +PH_KIT_HELD = 3F 02 +PH_KIT_SOLO = 40 02 +PH_PRICE_BLEND = 41 02 +PH_PRICE_HELD = 42 02 +PH_PRICE_SOLO = 43 02 +PH_LOT_BLEND = 44 02 +PH_LOT_HELD = 45 02 +PH_LOT_SOLO = 46 02 +PH_GOAT_BLEND = 47 02 +PH_GOAT_HELD = 48 02 +PH_GOAT_SOLO = 49 02 +PH_THOUGHT_BLEND = 4A 02 +PH_THOUGHT_HELD = 4B 02 +PH_THOUGHT_SOLO = 4C 02 +PH_CHOICE_BLEND = 4D 02 +PH_CHOICE_HELD = 4E 02 +PH_CHOICE_SOLO = 4F 02 +PH_MOUTH_BLEND = 50 02 +PH_MOUTH_HELD = 51 02 +PH_MOUTH_SOLO = 52 02 +PH_FOOT_BLEND = 53 02 +PH_FOOT_HELD = 54 02 +PH_FOOT_SOLO = 55 02 +PH_GOOSE_BLEND = 56 02 +PH_GOOSE_HELD = 57 02 +PH_GOOSE_SOLO = 58 02 +PH_STRUT_BLEND = 59 02 +PH_STRUT_HELD = 5A 02 +PH_STRUT_SOLO = 5B 02 +PH_CURE_BLEND = 5C 02 +PH_CURE_HELD = 5D 02 +PH_CURE_SOLO = 5E 02 +PH_NURSE_BLEND = 5F 02 +PH_NURSE_HELD = 60 02 +PH_NURSE_SOLO = 61 02 + +A_BUTTON = F8 00 +B_BUTTON = F8 01 +DPAD_UPDOWN = F8 0A +DPAD_NONE = F8 0C + +UP_ARROW_2 = F9 00 +DOWN_ARROW_2 = F9 01 +LEFT_ARROW_2 = F9 02 +RIGHT_ARROW_2 = F9 03 +PLUS = F9 04 +LV_2 = F9 05 +PP = F9 06 +ID = F9 07 +NO = F9 08 +UNDERSCORE = F9 09 +CIRCLE_1 = F9 0A +CIRCLE_2 = F9 0B +CIRCLE_3 = F9 0C +CIRCLE_4 = F9 0D +CIRCLE_5 = F9 0E +CIRCLE_6 = F9 0F +CIRCLE_7 = F9 10 +CIRCLE_8 = F9 11 +CIRCLE_9 = F9 12 +ROUND_LEFT_PAREN = F9 13 +ROUND_RIGHT_PAREN = F9 14 +CIRCLE_DOT = F9 15 +TRIANGLE = F9 16 +BIG_MULT_X = F9 17 + +EMOJI_UNDERSCORE = F9 D0 +EMOJI_PIPE = F9 D1 +EMOJI_HIGHBAR = F9 D2 +EMOJI_TILDE = F9 D3 +EMOJI_LEFT_PAREN = F9 D4 +EMOJI_RIGHT_PAREN = F9 D5 +EMOJI_UNION = F9 D6 @ ⊂ +EMOJI_GREATER_THAN = F9 D7 +EMOJI_LEFT_EYE = F9 D8 +EMOJI_RIGHT_EYE = F9 D9 +EMOJI_AT = F9 DA +EMOJI_SEMICOLON = F9 DB +EMOJI_PLUS = F9 DC +EMOJI_MINUS = F9 DD +EMOJI_EQUALS = F9 DE +EMOJI_SPIRAL = F9 DF +EMOJI_TONGUE = F9 E0 +EMOJI_TRIANGLE_OUTLINE = F9 E1 +EMOJI_ACUTE = F9 E2 +EMOJI_GRAVE = F9 E3 +EMOJI_CIRCLE = F9 E4 +EMOJI_TRIANGLE = F9 E5 +EMOJI_SQUARE = F9 E6 +EMOJI_HEART = F9 E7 +EMOJI_MOON = F9 E8 +EMOJI_NOTE = F9 E9 +EMOJI_BALL = F9 EA +EMOJI_BOLT = F9 EB +EMOJI_LEAF = F9 EC +EMOJI_FIRE = F9 ED +EMOJI_WATER = F9 EE +EMOJI_LEFT_FIST = F9 EF +EMOJI_RIGHT_FIST = F9 F0 +EMOJI_BIGWHEEL = F9 F1 +EMOJI_SMALLWHEEL = F9 F2 +EMOJI_SPHERE = F9 F3 +EMOJI_IRRITATED = F9 F4 +EMOJI_MISCHIEVOUS = F9 F5 +EMOJI_HAPPY = F9 F6 +EMOJI_ANGRY = F9 F7 +EMOJI_SURPRISED = F9 F8 +EMOJI_BIGSMILE = F9 F9 +EMOJI_EVIL = F9 FA +EMOJI_TIRED = F9 FB +EMOJI_NEUTRAL = F9 FC +EMOJI_SHOCKED = F9 FD +EMOJI_BIGANGER = F9 FE + +'\l' = FA @ scroll up window text +'\p' = FB @ new paragraph +'\n' = FE @ new line diff --git a/berry_fix/payload/common_syms/agb_flash.txt b/berry_fix/payload/common_syms/agb_flash.txt new file mode 100644 index 000000000..cb421ec80 --- /dev/null +++ b/berry_fix/payload/common_syms/agb_flash.txt @@ -0,0 +1,10 @@ +gFlashTimeoutFlag +PollFlashStatus +WaitForFlashWrite +ProgramFlashSector +gFlash +ProgramFlashByte +gFlashNumRemainingBytes +EraseFlashChip +EraseFlashSector +gFlashMaxTime diff --git a/berry_fix/payload/common_syms/main.txt b/berry_fix/payload/common_syms/main.txt new file mode 100644 index 000000000..b62c72124 --- /dev/null +++ b/berry_fix/payload/common_syms/main.txt @@ -0,0 +1,9 @@ +gIntrTable +gHeldKeys +gNewKeys +gIntrVector +gUpdateSuccessful +gUnknown_3001194 +gUnknown_30011A0 +gMainCallbackState +gGameVersion diff --git a/berry_fix/payload/common_syms/rtc.txt b/berry_fix/payload/common_syms/rtc.txt new file mode 100644 index 000000000..7aafbe65d --- /dev/null +++ b/berry_fix/payload/common_syms/rtc.txt @@ -0,0 +1,2 @@ +gTimeSinceBerryUpdate +gRtcUTCTime diff --git a/berry_fix/payload/constants/gba_constants.inc b/berry_fix/payload/constants/gba_constants.inc new file mode 100644 index 000000000..9d59c8fcd --- /dev/null +++ b/berry_fix/payload/constants/gba_constants.inc @@ -0,0 +1,490 @@ + .set PSR_USR_MODE, 0x00000010 + .set PSR_FIQ_MODE, 0x00000011 + .set PSR_IRQ_MODE, 0x00000012 + .set PSR_SVC_MODE, 0x00000013 + .set PSR_ABT_MODE, 0x00000017 + .set PSR_UND_MODE, 0x0000001b + .set PSR_SYS_MODE, 0x0000001f + .set PSR_MODE_MASK, 0x0000001f + .set PSR_T_BIT, 0x00000020 + .set PSR_F_BIT, 0x00000040 + .set PSR_I_BIT, 0x00000080 + + .set EWRAM_START, 0x02000000 + .set EWRAM_END, EWRAM_START + 0x40000 + .set IWRAM_START, 0x03000000 + .set IWRAM_END, IWRAM_START + 0x8000 + + .set PLTT, 0x5000000 + .set BG_PLTT, PLTT + .set OBJ_PLTT, PLTT + 0x200 + + .set VRAM, 0x6000000 + .set BG_VRAM, VRAM + .set OBJ_VRAM0, VRAM + 0x10000 @ text-mode BG + .set OBJ_VRAM1, VRAM + 0x14000 @ bitmap-mode BG + + .set OAM, 0x7000000 + + .set SOUND_INFO_PTR, 0x3007FF0 + .set INTR_CHECK, 0x3007FF8 + .set INTR_VECTOR, 0x3007FFC + + .set INTR_FLAG_VBLANK, 1 << 0 + .set INTR_FLAG_HBLANK, 1 << 1 + .set INTR_FLAG_VCOUNT, 1 << 2 + .set INTR_FLAG_TIMER0, 1 << 3 + .set INTR_FLAG_TIMER1, 1 << 4 + .set INTR_FLAG_TIMER2, 1 << 5 + .set INTR_FLAG_TIMER3, 1 << 6 + .set INTR_FLAG_SERIAL, 1 << 7 + .set INTR_FLAG_DMA0, 1 << 8 + .set INTR_FLAG_DMA1, 1 << 9 + .set INTR_FLAG_DMA2, 1 << 10 + .set INTR_FLAG_DMA3, 1 << 11 + .set INTR_FLAG_KEYPAD, 1 << 12 + .set INTR_FLAG_GAMEPAK, 1 << 13 + + .set VCOUNT_VBLANK, 160 + .set TOTAL_SCANLINES, 228 + + .set REG_BASE, 0x4000000 @ I/O register base address + +@ I/O register offsets + .set OFFSET_REG_DISPCNT, 0x0 + .set OFFSET_REG_DISPSTAT, 0x4 + .set OFFSET_REG_VCOUNT, 0x6 + .set OFFSET_REG_BG0CNT, 0x8 + .set OFFSET_REG_BG1CNT, 0xa + .set OFFSET_REG_BG2CNT, 0xc + .set OFFSET_REG_BG3CNT, 0xe + .set OFFSET_REG_BG0HOFS, 0x10 + .set OFFSET_REG_BG0VOFS, 0x12 + .set OFFSET_REG_BG1HOFS, 0x14 + .set OFFSET_REG_BG1VOFS, 0x16 + .set OFFSET_REG_BG2HOFS, 0x18 + .set OFFSET_REG_BG2VOFS, 0x1a + .set OFFSET_REG_BG3HOFS, 0x1c + .set OFFSET_REG_BG3VOFS, 0x1e + .set OFFSET_REG_BG2PA, 0x20 + .set OFFSET_REG_BG2PB, 0x22 + .set OFFSET_REG_BG2PC, 0x24 + .set OFFSET_REG_BG2PD, 0x26 + .set OFFSET_REG_BG2X_L, 0x28 + .set OFFSET_REG_BG2X_H, 0x2a + .set OFFSET_REG_BG2Y_L, 0x2c + .set OFFSET_REG_BG2Y_H, 0x2e + .set OFFSET_REG_BG3PA, 0x30 + .set OFFSET_REG_BG3PB, 0x32 + .set OFFSET_REG_BG3PC, 0x34 + .set OFFSET_REG_BG3PD, 0x36 + .set OFFSET_REG_BG3X_L, 0x38 + .set OFFSET_REG_BG3X_H, 0x3a + .set OFFSET_REG_BG3Y_L, 0x3c + .set OFFSET_REG_BG3Y_H, 0x3e + .set OFFSET_REG_WIN0H, 0x40 + .set OFFSET_REG_WIN1H, 0x42 + .set OFFSET_REG_WIN0V, 0x44 + .set OFFSET_REG_WIN1V, 0x46 + .set OFFSET_REG_WININ, 0x48 + .set OFFSET_REG_WINOUT, 0x4a + .set OFFSET_REG_MOSAIC, 0x4c + .set OFFSET_REG_BLDCNT, 0x50 + .set OFFSET_REG_BLDALPHA, 0x52 + .set OFFSET_REG_BLDY, 0x54 + + .set OFFSET_REG_SOUND1CNT, 0x60 + .set OFFSET_REG_SOUND1CNT_L, 0x60 + .set OFFSET_REG_NR10, 0x60 + .set OFFSET_REG_SOUND1CNT_H, 0x62 + .set OFFSET_REG_NR11, 0x62 + .set OFFSET_REG_NR12, 0x63 + .set OFFSET_REG_SOUND1CNT_X, 0x64 + .set OFFSET_REG_NR13, 0x64 + .set OFFSET_REG_NR14, 0x65 + .set OFFSET_REG_SOUND2CNT, 0x68 + .set OFFSET_REG_SOUND2CNT_L, 0x68 + .set OFFSET_REG_NR21, 0x68 + .set OFFSET_REG_NR22, 0x69 + .set OFFSET_REG_SOUND2CNT_H, 0x6c + .set OFFSET_REG_NR23, 0x6c + .set OFFSET_REG_NR24, 0x6d + .set OFFSET_REG_SOUND3CNT, 0x70 + .set OFFSET_REG_SOUND3CNT_L, 0x70 + .set OFFSET_REG_NR30, 0x70 + .set OFFSET_REG_SOUND3CNT_H, 0x72 + .set OFFSET_REG_NR31, 0x72 + .set OFFSET_REG_NR32, 0x73 + .set OFFSET_REG_SOUND3CNT_X, 0x74 + .set OFFSET_REG_NR33, 0x74 + .set OFFSET_REG_NR34, 0x75 + .set OFFSET_REG_SOUND4CNT, 0x78 + .set OFFSET_REG_SOUND4CNT_L, 0x78 + .set OFFSET_REG_NR41, 0x78 + .set OFFSET_REG_NR42, 0x79 + .set OFFSET_REG_SOUND4CNT_H, 0x7c + .set OFFSET_REG_NR43, 0x7c + .set OFFSET_REG_NR44, 0x7d + .set OFFSET_REG_SOUNDCNT, 0x80 + .set OFFSET_REG_SOUNDCNT_L, 0x80 + .set OFFSET_REG_NR50, 0x80 + .set OFFSET_REG_NR51, 0x81 + .set OFFSET_REG_SOUNDCNT_H, 0x82 + .set OFFSET_REG_SOUNDCNT_X, 0x84 + .set OFFSET_REG_NR52, 0x84 + .set OFFSET_REG_SOUNDBIAS, 0x88 + .set OFFSET_REG_WAVE_RAM, 0x90 + .set OFFSET_REG_WAVE_RAM0, 0x90 + .set OFFSET_REG_WAVE_RAM0_L, 0x90 + .set OFFSET_REG_WAVE_RAM0_H, 0x92 + .set OFFSET_REG_WAVE_RAM1, 0x94 + .set OFFSET_REG_WAVE_RAM1_L, 0x94 + .set OFFSET_REG_WAVE_RAM1_H, 0x96 + .set OFFSET_REG_WAVE_RAM2, 0x98 + .set OFFSET_REG_WAVE_RAM2_L, 0x98 + .set OFFSET_REG_WAVE_RAM2_H, 0x9a + .set OFFSET_REG_WAVE_RAM3, 0x9c + .set OFFSET_REG_WAVE_RAM3_L, 0x9c + .set OFFSET_REG_WAVE_RAM3_H, 0x9e + .set OFFSET_REG_FIFO, 0xa0 + .set OFFSET_REG_FIFO_A, 0xa0 + .set OFFSET_REG_FIFO_A_L, 0xa0 + .set OFFSET_REG_FIFO_A_H, 0xa2 + .set OFFSET_REG_FIFO_B, 0xa4 + .set OFFSET_REG_FIFO_B_L, 0xa4 + .set OFFSET_REG_FIFO_B_H, 0xa6 + + .set OFFSET_REG_DMA0, 0xb0 + .set OFFSET_REG_DMA0SAD, 0xb0 + .set OFFSET_REG_DMA0SAD_L, 0xb0 + .set OFFSET_REG_DMA0SAD_H, 0xb2 + .set OFFSET_REG_DMA0DAD, 0xb4 + .set OFFSET_REG_DMA0DAD_L, 0xb4 + .set OFFSET_REG_DMA0DAD_H, 0xb6 + .set OFFSET_REG_DMA0CNT, 0xb8 + .set OFFSET_REG_DMA0CNT_L, 0xb8 + .set OFFSET_REG_DMA0CNT_H, 0xba + .set OFFSET_REG_DMA1, 0xbc + .set OFFSET_REG_DMA1SAD, 0xbc + .set OFFSET_REG_DMA1SAD_L, 0xbc + .set OFFSET_REG_DMA1SAD_H, 0xbe + .set OFFSET_REG_DMA1DAD, 0xc0 + .set OFFSET_REG_DMA1DAD_L, 0xc0 + .set OFFSET_REG_DMA1DAD_H, 0xc2 + .set OFFSET_REG_DMA1CNT, 0xc4 + .set OFFSET_REG_DMA1CNT_L, 0xc4 + .set OFFSET_REG_DMA1CNT_H, 0xc6 + .set OFFSET_REG_DMA2, 0xc8 + .set OFFSET_REG_DMA2SAD, 0xc8 + .set OFFSET_REG_DMA2SAD_L, 0xc8 + .set OFFSET_REG_DMA2SAD_H, 0xca + .set OFFSET_REG_DMA2DAD, 0xcc + .set OFFSET_REG_DMA2DAD_L, 0xcc + .set OFFSET_REG_DMA2DAD_H, 0xce + .set OFFSET_REG_DMA2CNT, 0xd0 + .set OFFSET_REG_DMA2CNT_L, 0xd0 + .set OFFSET_REG_DMA2CNT_H, 0xd2 + .set OFFSET_REG_DMA3, 0xd4 + .set OFFSET_REG_DMA3SAD, 0xd4 + .set OFFSET_REG_DMA3SAD_L, 0xd4 + .set OFFSET_REG_DMA3SAD_H, 0xd6 + .set OFFSET_REG_DMA3DAD, 0xd8 + .set OFFSET_REG_DMA3DAD_L, 0xd8 + .set OFFSET_REG_DMA3DAD_H, 0xda + .set OFFSET_REG_DMA3CNT, 0xdc + .set OFFSET_REG_DMA3CNT_L, 0xdc + .set OFFSET_REG_DMA3CNT_H, 0xde + + .set OFFSET_REG_TM0CNT, 0x100 + .set OFFSET_REG_TM0CNT_L, 0x100 + .set OFFSET_REG_TM0CNT_H, 0x102 + .set OFFSET_REG_TM1CNT, 0x104 + .set OFFSET_REG_TM1CNT_L, 0x104 + .set OFFSET_REG_TM1CNT_H, 0x106 + .set OFFSET_REG_TM2CNT, 0x108 + .set OFFSET_REG_TM2CNT_L, 0x108 + .set OFFSET_REG_TM2CNT_H, 0x10a + .set OFFSET_REG_TM3CNT, 0x10c + .set OFFSET_REG_TM3CNT_L, 0x10c + .set OFFSET_REG_TM3CNT_H, 0x10e + + .set OFFSET_REG_SIOCNT, 0x128 + .set OFFSET_REG_SIODATA8, 0x12a + .set OFFSET_REG_SIODATA32, 0x120 + .set OFFSET_REG_SIOMLT_SEND, 0x12a + .set OFFSET_REG_SIOMLT_RECV, 0x120 + .set OFFSET_REG_SIOMULTI0, 0x120 + .set OFFSET_REG_SIOMULTI1, 0x122 + .set OFFSET_REG_SIOMULTI2, 0x124 + .set OFFSET_REG_SIOMULTI3, 0x126 + + .set OFFSET_REG_KEYINPUT, 0x130 + .set OFFSET_REG_KEYCNT, 0x132 + + .set OFFSET_REG_RCNT, 0x134 + + .set OFFSET_REG_JOYCNT, 0x140 + .set OFFSET_REG_JOYSTAT, 0x158 + .set OFFSET_REG_JOY_RECV, 0x150 + .set OFFSET_REG_JOY_RECV_L, 0x150 + .set OFFSET_REG_JOY_RECV_H, 0x152 + .set OFFSET_REG_JOY_TRANS, 0x154 + .set OFFSET_REG_JOY_TRANS_L, 0x154 + .set OFFSET_REG_JOY_TRANS_H, 0x156 + + .set OFFSET_REG_IME, 0x208 + .set OFFSET_REG_IE, 0x200 + .set OFFSET_REG_IF, 0x202 + + .set OFFSET_REG_WAITCNT, 0x204 + +@ I/O register addresses + .set REG_DISPCNT, REG_BASE + OFFSET_REG_DISPCNT + .set REG_DISPSTAT, REG_BASE + OFFSET_REG_DISPSTAT + .set REG_VCOUNT, REG_BASE + OFFSET_REG_VCOUNT + .set REG_BG0CNT, REG_BASE + OFFSET_REG_BG0CNT + .set REG_BG1CNT, REG_BASE + OFFSET_REG_BG1CNT + .set REG_BG2CNT, REG_BASE + OFFSET_REG_BG2CNT + .set REG_BG3CNT, REG_BASE + OFFSET_REG_BG3CNT + .set REG_BG0HOFS, REG_BASE + OFFSET_REG_BG0HOFS + .set REG_BG0VOFS, REG_BASE + OFFSET_REG_BG0VOFS + .set REG_BG1HOFS, REG_BASE + OFFSET_REG_BG1HOFS + .set REG_BG1VOFS, REG_BASE + OFFSET_REG_BG1VOFS + .set REG_BG2HOFS, REG_BASE + OFFSET_REG_BG2HOFS + .set REG_BG2VOFS, REG_BASE + OFFSET_REG_BG2VOFS + .set REG_BG3HOFS, REG_BASE + OFFSET_REG_BG3HOFS + .set REG_BG3VOFS, REG_BASE + OFFSET_REG_BG3VOFS + .set REG_BG2PA, REG_BASE + OFFSET_REG_BG2PA + .set REG_BG2PB, REG_BASE + OFFSET_REG_BG2PB + .set REG_BG2PC, REG_BASE + OFFSET_REG_BG2PC + .set REG_BG2PD, REG_BASE + OFFSET_REG_BG2PD + .set REG_BG2X_L, REG_BASE + OFFSET_REG_BG2X_L + .set REG_BG2X_H, REG_BASE + OFFSET_REG_BG2X_H + .set REG_BG2Y_L, REG_BASE + OFFSET_REG_BG2Y_L + .set REG_BG2Y_H, REG_BASE + OFFSET_REG_BG2Y_H + .set REG_BG3PA, REG_BASE + OFFSET_REG_BG3PA + .set REG_BG3PB, REG_BASE + OFFSET_REG_BG3PB + .set REG_BG3PC, REG_BASE + OFFSET_REG_BG3PC + .set REG_BG3PD, REG_BASE + OFFSET_REG_BG3PD + .set REG_BG3X_L, REG_BASE + OFFSET_REG_BG3X_L + .set REG_BG3X_H, REG_BASE + OFFSET_REG_BG3X_H + .set REG_BG3Y_L, REG_BASE + OFFSET_REG_BG3Y_L + .set REG_BG3Y_H, REG_BASE + OFFSET_REG_BG3Y_H + .set REG_WIN0H, REG_BASE + OFFSET_REG_WIN0H + .set REG_WIN1H, REG_BASE + OFFSET_REG_WIN1H + .set REG_WIN0V, REG_BASE + OFFSET_REG_WIN0V + .set REG_WIN1V, REG_BASE + OFFSET_REG_WIN1V + .set REG_WININ, REG_BASE + OFFSET_REG_WININ + .set REG_WINOUT, REG_BASE + OFFSET_REG_WINOUT + .set REG_MOSAIC, REG_BASE + OFFSET_REG_MOSAIC + .set REG_BLDCNT, REG_BASE + OFFSET_REG_BLDCNT + .set REG_BLDALPHA, REG_BASE + OFFSET_REG_BLDALPHA + .set REG_BLDY, REG_BASE + OFFSET_REG_BLDY + + .set REG_SOUND1CNT, REG_BASE + OFFSET_REG_SOUND1CNT + .set REG_SOUND1CNT_L, REG_BASE + OFFSET_REG_SOUND1CNT_L + .set REG_NR10, REG_BASE + OFFSET_REG_NR10 + .set REG_SOUND1CNT_H, REG_BASE + OFFSET_REG_SOUND1CNT_H + .set REG_NR11, REG_BASE + OFFSET_REG_NR11 + .set REG_NR12, REG_BASE + OFFSET_REG_NR12 + .set REG_SOUND1CNT_X, REG_BASE + OFFSET_REG_SOUND1CNT_X + .set REG_NR13, REG_BASE + OFFSET_REG_NR13 + .set REG_NR14, REG_BASE + OFFSET_REG_NR14 + .set REG_SOUND2CNT, REG_BASE + OFFSET_REG_SOUND2CNT + .set REG_SOUND2CNT_L, REG_BASE + OFFSET_REG_SOUND2CNT_L + .set REG_NR21, REG_BASE + OFFSET_REG_NR21 + .set REG_NR22, REG_BASE + OFFSET_REG_NR22 + .set REG_SOUND2CNT_H, REG_BASE + OFFSET_REG_SOUND2CNT_H + .set REG_NR23, REG_BASE + OFFSET_REG_NR23 + .set REG_NR24, REG_BASE + OFFSET_REG_NR24 + .set REG_SOUND3CNT, REG_BASE + OFFSET_REG_SOUND3CNT + .set REG_SOUND3CNT_L, REG_BASE + OFFSET_REG_SOUND3CNT_L + .set REG_NR30, REG_BASE + OFFSET_REG_NR30 + .set REG_SOUND3CNT_H, REG_BASE + OFFSET_REG_SOUND3CNT_H + .set REG_NR31, REG_BASE + OFFSET_REG_NR31 + .set REG_NR32, REG_BASE + OFFSET_REG_NR32 + .set REG_SOUND3CNT_X, REG_BASE + OFFSET_REG_SOUND3CNT_X + .set REG_NR33, REG_BASE + OFFSET_REG_NR33 + .set REG_NR34, REG_BASE + OFFSET_REG_NR34 + .set REG_SOUND4CNT, REG_BASE + OFFSET_REG_SOUND4CNT + .set REG_SOUND4CNT_L, REG_BASE + OFFSET_REG_SOUND4CNT_L + .set REG_NR41, REG_BASE + OFFSET_REG_NR41 + .set REG_NR42, REG_BASE + OFFSET_REG_NR42 + .set REG_SOUND4CNT_H, REG_BASE + OFFSET_REG_SOUND4CNT_H + .set REG_NR43, REG_BASE + OFFSET_REG_NR43 + .set REG_NR44, REG_BASE + OFFSET_REG_NR44 + .set REG_SOUNDCNT, REG_BASE + OFFSET_REG_SOUNDCNT + .set REG_SOUNDCNT_L, REG_BASE + OFFSET_REG_SOUNDCNT_L + .set REG_NR50, REG_BASE + OFFSET_REG_NR50 + .set REG_NR51, REG_BASE + OFFSET_REG_NR51 + .set REG_SOUNDCNT_H, REG_BASE + OFFSET_REG_SOUNDCNT_H + .set REG_SOUNDCNT_X, REG_BASE + OFFSET_REG_SOUNDCNT_X + .set REG_NR52, REG_BASE + OFFSET_REG_NR52 + .set REG_SOUNDBIAS, REG_BASE + OFFSET_REG_SOUNDBIAS + .set REG_WAVE_RAM, REG_BASE + OFFSET_REG_WAVE_RAM + .set REG_WAVE_RAM0, REG_BASE + OFFSET_REG_WAVE_RAM0 + .set REG_WAVE_RAM0_L, REG_BASE + OFFSET_REG_WAVE_RAM0_L + .set REG_WAVE_RAM0_H, REG_BASE + OFFSET_REG_WAVE_RAM0_H + .set REG_WAVE_RAM1, REG_BASE + OFFSET_REG_WAVE_RAM1 + .set REG_WAVE_RAM1_L, REG_BASE + OFFSET_REG_WAVE_RAM1_L + .set REG_WAVE_RAM1_H, REG_BASE + OFFSET_REG_WAVE_RAM1_H + .set REG_WAVE_RAM2, REG_BASE + OFFSET_REG_WAVE_RAM2 + .set REG_WAVE_RAM2_L, REG_BASE + OFFSET_REG_WAVE_RAM2_L + .set REG_WAVE_RAM2_H, REG_BASE + OFFSET_REG_WAVE_RAM2_H + .set REG_WAVE_RAM3, REG_BASE + OFFSET_REG_WAVE_RAM3 + .set REG_WAVE_RAM3_L, REG_BASE + OFFSET_REG_WAVE_RAM3_L + .set REG_WAVE_RAM3_H, REG_BASE + OFFSET_REG_WAVE_RAM3_H + .set REG_FIFO, REG_BASE + OFFSET_REG_FIFO + .set REG_FIFO_A, REG_BASE + OFFSET_REG_FIFO_A + .set REG_FIFO_A_L, REG_BASE + OFFSET_REG_FIFO_A_L + .set REG_FIFO_A_H, REG_BASE + OFFSET_REG_FIFO_A_H + .set REG_FIFO_B, REG_BASE + OFFSET_REG_FIFO_B + .set REG_FIFO_B_L, REG_BASE + OFFSET_REG_FIFO_B_L + .set REG_FIFO_B_H, REG_BASE + OFFSET_REG_FIFO_B_H + + .set REG_DMA0, REG_BASE + OFFSET_REG_DMA0 + .set REG_DMA0SAD, REG_BASE + OFFSET_REG_DMA0SAD + .set REG_DMA0SAD_L, REG_BASE + OFFSET_REG_DMA0SAD_L + .set REG_DMA0SAD_H, REG_BASE + OFFSET_REG_DMA0SAD_H + .set REG_DMA0DAD, REG_BASE + OFFSET_REG_DMA0DAD + .set REG_DMA0DAD_L, REG_BASE + OFFSET_REG_DMA0DAD_L + .set REG_DMA0DAD_H, REG_BASE + OFFSET_REG_DMA0DAD_H + .set REG_DMA0CNT, REG_BASE + OFFSET_REG_DMA0CNT + .set REG_DMA0CNT_L, REG_BASE + OFFSET_REG_DMA0CNT_L + .set REG_DMA0CNT_H, REG_BASE + OFFSET_REG_DMA0CNT_H + .set REG_DMA1, REG_BASE + OFFSET_REG_DMA1 + .set REG_DMA1SAD, REG_BASE + OFFSET_REG_DMA1SAD + .set REG_DMA1SAD_L, REG_BASE + OFFSET_REG_DMA1SAD_L + .set REG_DMA1SAD_H, REG_BASE + OFFSET_REG_DMA1SAD_H + .set REG_DMA1DAD, REG_BASE + OFFSET_REG_DMA1DAD + .set REG_DMA1DAD_L, REG_BASE + OFFSET_REG_DMA1DAD_L + .set REG_DMA1DAD_H, REG_BASE + OFFSET_REG_DMA1DAD_H + .set REG_DMA1CNT, REG_BASE + OFFSET_REG_DMA1CNT + .set REG_DMA1CNT_L, REG_BASE + OFFSET_REG_DMA1CNT_L + .set REG_DMA1CNT_H, REG_BASE + OFFSET_REG_DMA1CNT_H + .set REG_DMA2, REG_BASE + OFFSET_REG_DMA2 + .set REG_DMA2SAD, REG_BASE + OFFSET_REG_DMA2SAD + .set REG_DMA2SAD_L, REG_BASE + OFFSET_REG_DMA2SAD_L + .set REG_DMA2SAD_H, REG_BASE + OFFSET_REG_DMA2SAD_H + .set REG_DMA2DAD, REG_BASE + OFFSET_REG_DMA2DAD + .set REG_DMA2DAD_L, REG_BASE + OFFSET_REG_DMA2DAD_L + .set REG_DMA2DAD_H, REG_BASE + OFFSET_REG_DMA2DAD_H + .set REG_DMA2CNT, REG_BASE + OFFSET_REG_DMA2CNT + .set REG_DMA2CNT_L, REG_BASE + OFFSET_REG_DMA2CNT_L + .set REG_DMA2CNT_H, REG_BASE + OFFSET_REG_DMA2CNT_H + .set REG_DMA3, REG_BASE + OFFSET_REG_DMA3 + .set REG_DMA3SAD, REG_BASE + OFFSET_REG_DMA3SAD + .set REG_DMA3SAD_L, REG_BASE + OFFSET_REG_DMA3SAD_L + .set REG_DMA3SAD_H, REG_BASE + OFFSET_REG_DMA3SAD_H + .set REG_DMA3DAD, REG_BASE + OFFSET_REG_DMA3DAD + .set REG_DMA3DAD_L, REG_BASE + OFFSET_REG_DMA3DAD_L + .set REG_DMA3DAD_H, REG_BASE + OFFSET_REG_DMA3DAD_H + .set REG_DMA3CNT, REG_BASE + OFFSET_REG_DMA3CNT + .set REG_DMA3CNT_L, REG_BASE + OFFSET_REG_DMA3CNT_L + .set REG_DMA3CNT_H, REG_BASE + OFFSET_REG_DMA3CNT_H + + .set REG_TM0CNT, REG_BASE + OFFSET_REG_TM0CNT + .set REG_TM0CNT_L, REG_BASE + OFFSET_REG_TM0CNT_L + .set REG_TM0CNT_H, REG_BASE + OFFSET_REG_TM0CNT_H + .set REG_TM1CNT, REG_BASE + OFFSET_REG_TM1CNT + .set REG_TM1CNT_L, REG_BASE + OFFSET_REG_TM1CNT_L + .set REG_TM1CNT_H, REG_BASE + OFFSET_REG_TM1CNT_H + .set REG_TM2CNT, REG_BASE + OFFSET_REG_TM2CNT + .set REG_TM2CNT_L, REG_BASE + OFFSET_REG_TM2CNT_L + .set REG_TM2CNT_H, REG_BASE + OFFSET_REG_TM2CNT_H + .set REG_TM3CNT, REG_BASE + OFFSET_REG_TM3CNT + .set REG_TM3CNT_L, REG_BASE + OFFSET_REG_TM3CNT_L + .set REG_TM3CNT_H, REG_BASE + OFFSET_REG_TM3CNT_H + + .set REG_SIOCNT, REG_BASE + OFFSET_REG_SIOCNT + .set REG_SIODATA8, REG_BASE + OFFSET_REG_SIODATA8 + .set REG_SIODATA32, REG_BASE + OFFSET_REG_SIODATA32 + .set REG_SIOMLT_SEND, REG_BASE + OFFSET_REG_SIOMLT_SEND + .set REG_SIOMLT_RECV, REG_BASE + OFFSET_REG_SIOMLT_RECV + .set REG_SIOMULTI0, REG_BASE + OFFSET_REG_SIOMULTI0 + .set REG_SIOMULTI1, REG_BASE + OFFSET_REG_SIOMULTI1 + .set REG_SIOMULTI2, REG_BASE + OFFSET_REG_SIOMULTI2 + .set REG_SIOMULTI3, REG_BASE + OFFSET_REG_SIOMULTI3 + + .set REG_KEYINPUT, REG_BASE + OFFSET_REG_KEYINPUT + .set REG_KEYCNT, REG_BASE + OFFSET_REG_KEYCNT + + .set REG_RCNT, REG_BASE + OFFSET_REG_RCNT + + .set REG_JOYCNT, REG_BASE + OFFSET_REG_JOYCNT + .set REG_JOYSTAT, REG_BASE + OFFSET_REG_JOYSTAT + .set REG_JOY_RECV, REG_BASE + OFFSET_REG_JOY_RECV + .set REG_JOY_RECV_L, REG_BASE + OFFSET_REG_JOY_RECV_L + .set REG_JOY_RECV_H, REG_BASE + OFFSET_REG_JOY_RECV_H + .set REG_JOY_TRANS, REG_BASE + OFFSET_REG_JOY_TRANS + .set REG_JOY_TRANS_L, REG_BASE + OFFSET_REG_JOY_TRANS_L + .set REG_JOY_TRANS_H, REG_BASE + OFFSET_REG_JOY_TRANS_H + + .set REG_IME, REG_BASE + OFFSET_REG_IME + .set REG_IE, REG_BASE + OFFSET_REG_IE + .set REG_IF, REG_BASE + OFFSET_REG_IF + + .set REG_WAITCNT, REG_BASE + OFFSET_REG_WAITCNT + +@ DMA register constants + + .set DMA_DEST_INC, 0x0000 + .set DMA_DEST_DEC, 0x0020 + .set DMA_DEST_FIXED, 0x0040 + .set DMA_DEST_RELOAD, 0x0060 + .set DMA_SRC_INC, 0x0000 + .set DMA_SRC_DEC, 0x0080 + .set DMA_SRC_FIXED, 0x0100 + .set DMA_REPEAT, 0x0200 + .set DMA_16BIT, 0x0000 + .set DMA_32BIT, 0x0400 + .set DMA_DREQ_ON, 0x0800 + .set DMA_START_NOW, 0x0000 + .set DMA_START_VBLANK, 0x1000 + .set DMA_START_HBLANK, 0x2000 + .set DMA_START_SPECIAL, 0x3000 + .set DMA_INTR_ENABLE, 0x4000 + .set DMA_ENABLE, 0x8000 + +@ OAM attribute constants + + .set OAM_OBJ_NORMAL, 0x00000000 + .set OAM_OBJ_BLEND, 0x00000400 + .set OAM_OBJ_WINDOW, 0x00000800 + + .set OAM_AFFINE_NONE, 0x00000000 + .set OAM_AFFINE_NORMAL_SIZE, 0x00000100 + .set OAM_OBJ_DISABLED, 0x00000200 + .set OAM_AFFINE_DOUBLE_SIZE, 0x00000300 + + .set OAM_MOSAIC_OFF, 0x00000000 + .set OAM_MOSAIC_ON, 0x00001000 + + .set OAM_4BPP, 0x00000000 + .set OAM_8BPP, 0x00002000 + + .set OAM_H_FLIP, 0x10000000 + .set OAM_V_FLIP, 0x20000000 + + .set OAM_SQUARE, 0x00000000 + .set OAM_H_RECTANGLE, 0x00004000 + .set OAM_V_RECTANGLE, 0x00008000 + .set OAM_SIZE_0, 0x00000000 + .set OAM_SIZE_1, 0x40000000 + .set OAM_SIZE_2, 0x80000000 + .set OAM_SIZE_3, 0xc0000000 + + .set OAM_SIZE_8x8, OAM_SIZE_0 | OAM_SQUARE + .set OAM_SIZE_16x16, OAM_SIZE_1 | OAM_SQUARE + .set OAM_SIZE_32x32, OAM_SIZE_2 | OAM_SQUARE + .set OAM_SIZE_64x64, OAM_SIZE_3 | OAM_SQUARE + + .set OAM_SIZE_16x8, OAM_SIZE_0 | OAM_H_RECTANGLE + .set OAM_SIZE_32x8, OAM_SIZE_1 | OAM_H_RECTANGLE + .set OAM_SIZE_32x16, OAM_SIZE_2 | OAM_H_RECTANGLE + .set OAM_SIZE_64x32, OAM_SIZE_3 | OAM_H_RECTANGLE + + .set OAM_SIZE_8x16, OAM_SIZE_0 | OAM_V_RECTANGLE + .set OAM_SIZE_8x32, OAM_SIZE_1 | OAM_V_RECTANGLE + .set OAM_SIZE_16x32, OAM_SIZE_2 | OAM_V_RECTANGLE + .set OAM_SIZE_32x64, OAM_SIZE_3 | OAM_V_RECTANGLE diff --git a/berry_fix/payload/graphics/debug_digits.png b/berry_fix/payload/graphics/debug_digits.png Binary files differnew file mode 100644 index 000000000..edf0d36c9 --- /dev/null +++ b/berry_fix/payload/graphics/debug_digits.png diff --git a/berry_fix/payload/graphics/msg_box.png b/berry_fix/payload/graphics/msg_box.png Binary files differnew file mode 100644 index 000000000..00d1bbe37 --- /dev/null +++ b/berry_fix/payload/graphics/msg_box.png diff --git a/berry_fix/payload/graphics/msg_box.tilemap b/berry_fix/payload/graphics/msg_box.tilemap Binary files differnew file mode 100644 index 000000000..5b82401ba --- /dev/null +++ b/berry_fix/payload/graphics/msg_box.tilemap diff --git a/berry_fix/payload/include/constants/game_stat.h b/berry_fix/payload/include/constants/game_stat.h new file mode 100644 index 000000000..47d703d85 --- /dev/null +++ b/berry_fix/payload/include/constants/game_stat.h @@ -0,0 +1,56 @@ +#ifndef GUARD_CONSTANTS_GAME_STAT_H +#define GUARD_CONSTANTS_GAME_STAT_H + +#define GAME_STAT_SAVED_GAME 0 +#define GAME_STAT_FIRST_HOF_PLAY_TIME 1 +#define GAME_STAT_STARTED_TRENDS 2 +#define GAME_STAT_PLANTED_BERRIES 3 +#define GAME_STAT_TRADED_BIKES 4 +#define GAME_STAT_STEPS 5 +#define GAME_STAT_GOT_INTERVIEWED 6 +#define GAME_STAT_TOTAL_BATTLES 7 +#define GAME_STAT_WILD_BATTLES 8 +#define GAME_STAT_TRAINER_BATTLES 9 +#define GAME_STAT_ENTERED_HOF 10 +#define GAME_STAT_POKEMON_CAPTURES 11 +#define GAME_STAT_FISHING_CAPTURES 12 +#define GAME_STAT_HATCHED_EGGS 13 +#define GAME_STAT_EVOLVED_POKEMON 14 +#define GAME_STAT_USED_POKECENTER 15 +#define GAME_STAT_RESTED_AT_HOME 16 +#define GAME_STAT_ENTERED_SAFARI_ZONE 17 +#define GAME_STAT_USED_CUT 18 +#define GAME_STAT_USED_ROCK_SMASH 19 +#define GAME_STAT_MOVED_SECRET_BASE 20 +#define GAME_STAT_POKEMON_TRADES 21 +#define GAME_STAT_UNKNOWN_22 22 +#define GAME_STAT_LINK_BATTLE_WINS 23 +#define GAME_STAT_LINK_BATTLE_LOSSES 24 +#define GAME_STAT_LINK_BATTLE_DRAWS 25 +#define GAME_STAT_USED_SPLASH 26 +#define GAME_STAT_USED_STRUGGLE 27 +#define GAME_STAT_SLOT_JACKPOTS 28 +#define GAME_STAT_CONSECUTIVE_ROULETTE_WINS 29 +#define GAME_STAT_ENTERED_BATTLE_TOWER 30 +#define GAME_STAT_UNKNOWN_31 31 +#define GAME_STAT_BATTLE_TOWER_BEST_STREAK 32 +#define GAME_STAT_POKEBLOCKS 33 +#define GAME_STAT_POKEBLOCKS_WITH_FRIENDS 34 +#define GAME_STAT_WON_LINK_CONTEST 35 +#define GAME_STAT_ENTERED_CONTEST 36 +#define GAME_STAT_WON_CONTEST 37 +#define GAME_STAT_SHOPPED 38 +#define GAME_STAT_USED_ITEMFINDER 39 +#define GAME_STAT_GOT_RAINED_ON 40 +#define GAME_STAT_CHECKED_POKEDEX 41 +#define GAME_STAT_RECEIVED_RIBBONS 42 +#define GAME_STAT_JUMPED_DOWN_LEDGES 43 +#define GAME_STAT_WATCHED_TV 44 +#define GAME_STAT_CHECKED_CLOCK 45 +#define GAME_STAT_WON_POKEMON_LOTTERY 46 +#define GAME_STAT_USED_DAYCARE 47 +#define GAME_STAT_RODE_CABLE_CAR 48 +#define GAME_STAT_ENTERED_HOT_SPRINGS 49 +#define NUM_GAME_STATS 50 + +#endif // GUARD_CONSTANTS_GAME_STAT_H diff --git a/berry_fix/payload/include/constants/vars.h b/berry_fix/payload/include/constants/vars.h new file mode 100644 index 000000000..4b40c1d8c --- /dev/null +++ b/berry_fix/payload/include/constants/vars.h @@ -0,0 +1,196 @@ +#ifndef GUARD_CONSTANTS_VARS_H +#define GUARD_CONSTANTS_VARS_H + +#define VAR_0x3F20 0x3F20 + +#define VARS_START 0x4000 + +// temporary vars +// The first 0x10 vars are are temporary--they are cleared every time a map is loaded. +#define VAR_TEMP_0 0x4000 +#define VAR_TEMP_1 0x4001 +#define VAR_TEMP_2 0x4002 +#define VAR_TEMP_3 0x4003 +#define VAR_TEMP_4 0x4004 +#define VAR_TEMP_5 0x4005 +#define VAR_TEMP_6 0x4006 +#define VAR_TEMP_7 0x4007 +#define VAR_TEMP_8 0x4008 +#define VAR_TEMP_9 0x4009 +#define VAR_TEMP_A 0x400A +#define VAR_TEMP_B 0x400B +#define VAR_TEMP_C 0x400C +#define VAR_TEMP_D 0x400D +#define VAR_TEMP_E 0x400E +#define VAR_TEMP_F 0x400F + +// object gfx id vars +// These 0x10 vars are used to dynamically control a event object's sprite. +// For example, the rival's sprite id is dynamically set based on the player's gender. +// See VarGetEventObjectGraphicsId(). +#define VAR_OBJ_GFX_ID_0 0x4010 +#define VAR_OBJ_GFX_ID_1 0x4011 +#define VAR_OBJ_GFX_ID_2 0x4012 +#define VAR_OBJ_GFX_ID_3 0x4013 +#define VAR_OBJ_GFX_ID_4 0x4014 +#define VAR_OBJ_GFX_ID_5 0x4015 +#define VAR_OBJ_GFX_ID_6 0x4016 +#define VAR_OBJ_GFX_ID_7 0x4017 +#define VAR_OBJ_GFX_ID_8 0x4018 +#define VAR_OBJ_GFX_ID_9 0x4019 +#define VAR_OBJ_GFX_ID_A 0x401A +#define VAR_OBJ_GFX_ID_B 0x401B +#define VAR_OBJ_GFX_ID_C 0x401C +#define VAR_OBJ_GFX_ID_D 0x401D +#define VAR_OBJ_GFX_ID_E 0x401E +#define VAR_OBJ_GFX_ID_F 0x401F + +// general purpose vars +#define VAR_RECYCLE_GOODS 0x4020 +#define VAR_REPEL_STEP_COUNT 0x4021 +#define VAR_ICE_STEP_COUNT 0x4022 +#define VAR_STARTER_MON 0x4023 // 0=Treecko, 1=Torchic, 2=Mudkip +#define VAR_MIRAGE_RND_H 0x4024 +#define VAR_MIRAGE_RND_L 0x4025 +#define VAR_SECRET_BASE_MAP 0x4026 +#define VAR_CYCLING_ROAD_RECORD_COLLISIONS 0x4027 +#define VAR_CYCLING_ROAD_RECORD_TIME_L 0x4028 +#define VAR_CYCLING_ROAD_RECORD_TIME_H 0x4029 +#define VAR_HAPPINESS_STEP_COUNTER 0x402A +#define VAR_POISON_STEP_COUNTER 0x402B +#define VAR_RESET_RTC_ENABLE 0x402C +#define VAR_ENIGMA_BERRY_AVAILABLE 0x402D + +#define VAR_DAYS 0x4040 +#define VAR_FANCLUB_UNKNOWN_1 0x4041 // TODO: document these two fanclub vars +#define VAR_FANCLUB_UNKNOWN_2 0x4042 +#define VAR_DEPT_STORE_FLOOR 0x4043 +#define VAR_TRICK_HOUSE_ROOMS_COMPLETED 0x4044 +#define VAR_LOTTERY_PRIZE 0x4045 +#define VAR_NATIONAL_DEX 0x4046 +#define VAR_SHROOMISH_SIZE_RECORD 0x4047 +#define VAR_ASH_GATHER_COUNT 0x4048 +#define VAR_BIRCH_STATE 0x4049 +#define VAR_CRUISE_STEP_COUNT 0x404A +#define VAR_LOTTERY_RND_L 0x404B +#define VAR_LOTTERY_RND_H 0x404C + +#define VAR_BARBOACH_SIZE_RECORD 0x404F +#define VAR_LITTLEROOT_STATE 0x4050 +#define VAR_ROUTE102_ACCESSIBLE 0x4051 + +#define VAR_LAVARIDGE_RIVAL_STATE 0x4053 +#define VAR_CURRENT_SECRET_BASE 0x4054 + +#define VAR_PETALBURG_STATE 0x4057 +#define VAR_SLATEPORT_STATE 0x4058 + +#define VAR_RUSTBORO_STATE 0x405A + +#define VAR_SOOTOPOLIS_STATE 0x405E + +#define VAR_ROUTE101_STATE 0x4060 + +#define VAR_ROUTE103_STATE 0x4062 + +#define VAR_ROUTE110_STATE 0x4069 + +#define VAR_ROUTE116_STATE 0x406F + +#define VAR_ROUTE118_STATE 0x4071 +#define VAR_ROUTE119_STATE 0x4072 + +#define VAR_ROUTE121_STATE 0x4074 +#define VAR_ROUTE128_STATE 0x407B + +#define VAR_LITTLEROOT_HOUSES_STATE 0x4082 // TODO: needs more investigation + +#define VAR_BIRCH_LAB_STATE 0x4084 +#define VAR_PETALBURG_GYM_STATE 0x4085 +#define VAR_LINK_CONTEST_ROOM_STATE 0x4086 +#define VAR_CABLE_CLUB_STATE 0x4087 +#define VAR_CONTEST_LOCATION 0x4088 +#define VAR_MAP_SCENE_SIX_ISLAND_POKEMON_CENTER_1F 0x4089 // TODO: related to decorations +#define VAR_CONTEST_PRIZE_PICKUP 0x408A + +#define VAR_LITTLEROOT_HOUSES_STATE_2 0x408C // TODO: needs more investigation +#define VAR_LITTLEROOT_RIVAL_STATE 0x408D +#define VAR_BOARD_BRINEY_BOAT_ROUTE104_STATE 0x408E +#define VAR_DEVON_CORP_3F_STATE 0x408F +#define VAR_BRINEY_HOUSE_STATE 0x4090 + +#define VAR_LITTLEROOT_INTRO_STATE 0x4092 +#define VAR_MAUVILLE_GYM_STATE 0x4093 +#define VAR_LILYCOVE_MUSEUM_2F_STATE 0x4094 +#define VAR_LILYCOVE_FAN_CLUB_STATE 0x4095 +#define VAR_BRINEY_LOCATION 0x4096 +#define VAR_0x4097 0x4097 // TODO: related to creating new secret base +#define VAR_PETALBURG_WOODS_STATE 0x4098 +#define VAR_LILYCOVE_CONTEST_LOBBY_STATE 0x4099 +#define VAR_RUSTURF_TUNNEL_STATE 0x409a +#define VAR_CAVE_OF_ORIGIN_B4F_STATE 0x409B +#define VAR_ELITE_4_STATE 0x409C + +#define VAR_SLATEPORT_HARBOR_STATE 0x40A0 + +#define VAR_SEAFLOOR_CAVERN_STATE 0x40A2 +#define VAR_CABLE_CAR_STATION_STATE 0x40A3 +#define VAR_SAFARI_ZONE_STATE 0x40A4 +#define VAR_TRICK_HOUSE_ENTRANCE_STATE 0x40A5 +#define VAR_TRICK_HOUSE_ENTRANCE_STATE_2 0x40A6 +#define VAR_TRICK_HOUSE_ENTRANCE_STATE_3 0x40A7 + +#define VAR_CYCLING_CHALLENGE_STATE 0x40A9 +#define VAR_SLATEPORT_MUSEUM_1F_STATE 0x40AA +#define VAR_TRICK_HOUSE_PUZZLE_1_STATE 0x40AB +#define VAR_TRICK_HOUSE_PUZZLE_2_STATE 0x40AC +#define VAR_TRICK_HOUSE_PUZZLE_3_STATE 0x40AD +#define VAR_TRICK_HOUSE_PUZZLE_4_STATE 0x40AE +#define VAR_TRICK_HOUSE_PUZZLE_5_STATE 0x40AF +#define VAR_TRICK_HOUSE_PUZZLE_6_STATE 0x40B0 +#define VAR_TRICK_HOUSE_PUZZLE_7_STATE 0x40B1 +#define VAR_TRICK_HOUSE_PUZZLE_8_STATE 0x40B2 +#define VAR_WEATHER_INSTITUTE_STATE 0x40B3 +#define VAR_PORTHOLE_STATE 0x40B4 +#define VAR_TRICK_HOUSE_STATE 0x40B5 // TODO: needs some further investigation +#define VAR_TRICK_HOUSE_PUZZLE_7_STATE_2 0x40B6 +#define VAR_SLATEPORT_FAN_CLUB_STATE 0x40B7 + +#define VAR_MT_PYRE_STATE 0x40B9 +#define VAR_NEW_MAUVILLE_STATE 0x40BA + +#define VAR_BRAVO_TRAINER_BATTLE_TOWER_ON 0x40BC +#define VAR_JAGGED_PASS_VOLCANIC_ASH_WEATHER 0x40BD +#define VAR_GLASS_WORKSHOP_STATE 0x40BE +#define VAR_METEOR_FALLS_STATE 0x40BF +#define VAR_GAME_CORNER_STATE 0x40C0 +#define VAR_TRICK_HOUSE_PRIZE_PICKUP 0x40C1 +#define VAR_PACIFIDLOG_TM_RECEIVED_DAY 0x40C2 +#define VAR_VICTORY_ROAD_1F_STATE 0x40C3 +#define VAR_FOSSIL_RESURRECTION_STATE 0x40C4 +#define VAR_WHICH_FOSSIL_REVIVED 0x40C5 +#define VAR_STEVENS_HOUSE_STATE 0x40C6 +#define VAR_OLDALE_STATE 0x40C7 + +// special vars +// They are commonly used as parameters to commands, or return values from commands. +#define VAR_SPECIAL_0 0x8000 +#define VAR_SPECIAL_1 0x8001 +#define VAR_SPECIAL_2 0x8002 +#define VAR_SPECIAL_3 0x8003 +#define VAR_SPECIAL_4 0x8004 +#define VAR_SPECIAL_5 0x8005 +#define VAR_SPECIAL_6 0x8006 +#define VAR_SPECIAL_7 0x8007 +#define VAR_SPECIAL_8 0x8008 +#define VAR_SPECIAL_9 0x8009 +#define VAR_SPECIAL_A 0x800A +#define VAR_SPECIAL_B 0x800B +#define FACING 0x800C +#define RESULT 0x800D +#define ITEM_ID 0x800E +#define LAST_TALKED 0x800F +#define CONTEST_RANK 0x8010 +#define CONTEST_CATEGORY 0x8011 + +#endif // GUARD_CONSTANTS_VARS_H diff --git a/berry_fix/payload/include/flash.h b/berry_fix/payload/include/flash.h new file mode 100644 index 000000000..7fc35896d --- /dev/null +++ b/berry_fix/payload/include/flash.h @@ -0,0 +1,55 @@ +#ifndef GUARD_FLASH_H +#define GUARD_FLASH_H + +#include "gba/gba.h" + +enum +{ + SECTOR_DAMAGED, + SECTOR_OK, + SECTOR_CHECK, // unused +}; + +enum MsgBoxUpdateMessage +{ + MSGBOX_WILL_NOW_UPDATE = 0, + MSGBOX_HAS_BEEN_UPDATED, + MSGBOX_UNABLE_TO_UPDATE, + MSGBOX_NO_NEED_TO_UPDATE, + MSGBOX_UPDATING +}; + +struct SaveSector +{ + u8 data[0xFF4]; + u16 id; + u16 checksum; + u32 signature; + u32 counter; +}; // size is 0x1000 + +// headless save section? +struct UnkSaveSection +{ + u8 data[0xFF4]; + u32 signature; +}; // size is 0xFF8 + +#define eSaveSection ((struct SaveSector *)0x2020000) + +#define NUM_SECTORS_PER_SAVE_SLOT 14 // Number of sectors occupied by a save slot +#define FILE_SIGNATURE 0x08012025 + +#define SAVE_STATUS_EMPTY 0 +#define SAVE_STATUS_OK 1 +#define SAVE_STATUS_NO_FLASH 4 +#define SAVE_STATUS_ERROR 0xFF + +bool32 flash_maincb_ident_is_valid(void); +bool8 flash_maincb_read_save(u32); +void msg_load_gfx(void); +void msg_display(enum MsgBoxUpdateMessage); +bool32 flash_maincb_check_need_reset_pacifidlog_tm(void); +bool32 flash_maincb_reset_pacifidlog_tm(void); + +#endif //GUARD_FLASH_H diff --git a/berry_fix/payload/include/gba/defines.h b/berry_fix/payload/include/gba/defines.h new file mode 100644 index 000000000..289518cf3 --- /dev/null +++ b/berry_fix/payload/include/gba/defines.h @@ -0,0 +1,87 @@ +#ifndef GUARD_GBA_DEFINES +#define GUARD_GBA_DEFINES + +#include <stddef.h> + +#define TRUE 1 +#define FALSE 0 + +#define BSS_DATA __attribute__((section(".bss"))) +#define IWRAM_DATA __attribute__((section("iwram_data"))) +#define EWRAM_DATA __attribute__((section("ewram_data"))) +#define UNUSED __attribute__((unused)) +#define NAKED __attribute__((naked)) + +#define ALIGNED(n) __attribute__((aligned(n))) + +#define SOUND_INFO_PTR (*(struct SoundInfo **)0x3007FF0) +#define INTR_CHECK (*(u16 *)0x3007FF8) +#define INTR_VECTOR (*(void **)0x3007FFC) + +#define EWRAM_START 0x02000000 +#define EWRAM_END (EWRAM_START + 0x40000) +#define IWRAM_START 0x03000000 +#define IWRAM_END (IWRAM_START + 0x8000) + +#define PLTT 0x5000000 +#define PLTT_SIZE 0x400 + +#define BG_PLTT PLTT +#define BG_PLTT_SIZE 0x200 + +#define OBJ_PLTT (PLTT + 0x200) +#define OBJ_PLTT_SIZE 0x200 + +#define VRAM 0x6000000 +#define VRAM_SIZE 0x18000 + +#define BG_VRAM VRAM +#define BG_VRAM_SIZE 0x10000 +#define BG_CHAR_SIZE 0x4000 +#define BG_SCREEN_SIZE 0x800 +#define BG_CHAR_ADDR(n) (void *)(BG_VRAM + (0x4000 * (n))) +#define BG_SCREEN_ADDR(n) (void *)(BG_VRAM + (0x800 * (n))) +#define BG_TILE_ADDR(n) (void *)(BG_VRAM + (0x80 * (n))) + +#define BG_TILE_H_FLIP(n) (0x400 + (n)) +#define BG_TILE_V_FLIP(n) (0x800 + (n)) + +// text-mode BG +#define OBJ_VRAM0 (void *)(VRAM + 0x10000) +#define OBJ_VRAM0_SIZE 0x8000 + +// bitmap-mode BG +#define OBJ_VRAM1 (void *)(VRAM + 0x14000) +#define OBJ_VRAM1_SIZE 0x4000 + +#define OAM 0x7000000 +#define OAM_SIZE 0x400 + +#define ROM_HEADER_SIZE 0xC0 + +#define DISPLAY_WIDTH 240 +#define DISPLAY_HEIGHT 160 + +#define TILE_SIZE_4BPP 32 +#define TILE_SIZE_8BPP 64 + +#define TILE_OFFSET_4BPP(n) ((n) * TILE_SIZE_4BPP) +#define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP) + +#define TOTAL_OBJ_TILE_COUNT 1024 + +#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10)) +#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r)) +#define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F)) + +#define RGB_BLACK RGB(0, 0, 0) +#define RGB_WHITE RGB(31, 31, 31) +#define RGB_RED RGB(31, 0, 0) +#define RGB_GREEN RGB(0, 31, 0) +#define RGB_BLUE RGB(0, 0, 31) +#define RGB_YELLOW RGB(31, 31, 0) +#define RGB_MAGENTA RGB(31, 0, 31) +#define RGB_CYAN RGB(0, 31, 31) +#define RGB_WHITEALPHA (RGB_WHITE | 0x8000) + +#endif // GUARD_GBA_DEFINES diff --git a/berry_fix/payload/include/gba/flash_internal.h b/berry_fix/payload/include/gba/flash_internal.h new file mode 100644 index 000000000..6fbec31f1 --- /dev/null +++ b/berry_fix/payload/include/gba/flash_internal.h @@ -0,0 +1,85 @@ +#ifndef GUARD_GBA_FLASH_INTERNAL_H +#define GUARD_GBA_FLASH_INTERNAL_H + +#include "gba/gba.h" + +#define FLASH_BASE ((u8 *)0xE000000) + +#define FLASH_WRITE(addr, data) ((*(vu8 *)(FLASH_BASE + (addr))) = (data)) + +#define FLASH_ROM_SIZE_1M 131072 // 1 megabit ROM + +#define SECTORS_PER_BANK 16 + +struct FlashSector +{ + u32 size; + u8 shift; + u16 count; + u16 top; +}; + +struct FlashType { + u32 romSize; + struct FlashSector sector; + u16 wait[2]; // game pak bus read/write wait + + // TODO: add support for anonymous unions/structs if possible + union { + struct { + u8 makerId; + u8 deviceId; + } separate; + u16 joined; + } ids; +}; + +struct FlashSetupInfo +{ + u16 (*programFlashByte)(u16, u32, u8); + u16 (*programFlashSector)(u16, void *); + u16 (*eraseFlashChip)(void); + u16 (*eraseFlashSector)(u16); + u16 (*WaitForFlashWrite)(u8, u8 *, u8); + const u16 *maxTime; + struct FlashType type; +}; + +extern u16 gFlashNumRemainingBytes; + +extern u16 (*ProgramFlashByte)(u16, u32, u8); +extern u16 (*ProgramFlashSector)(u16, void *); +extern u16 (*EraseFlashChip)(void); +extern u16 (*EraseFlashSector)(u16); +extern u16 (*WaitForFlashWrite)(u8, u8 *, u8); +extern const u16 *gFlashMaxTime; +extern const struct FlashType *gFlash; + +extern u8 (*PollFlashStatus)(u8 *); +extern u8 gFlashTimeoutFlag; + +extern const struct FlashSetupInfo MX29L010; +extern const struct FlashSetupInfo LE26FV10N1TS; +extern const struct FlashSetupInfo DefaultFlash; + +void SwitchFlashBank(u8 bankNum); +u16 ReadFlashId(void); +void StartFlashTimer(u8 phase); +void SetReadFlash1(u16 *dest); +void StopFlashTimer(void); +u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)); +u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src); +void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size); +u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *dataSrc, u32 n); + +u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData); + +u16 EraseFlashChip_MX(void); +u16 EraseFlashSector_MX(u16 sectorNum); +u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data); +u16 ProgramFlashSector_MX(u16 sectorNum, void *src); + +// agb_flash_1m +u32 IdentifyFlash(void); + +#endif // GUARD_GBA_FLASH_INTERNAL_H diff --git a/berry_fix/payload/include/gba/gba.h b/berry_fix/payload/include/gba/gba.h new file mode 100644 index 000000000..349344031 --- /dev/null +++ b/berry_fix/payload/include/gba/gba.h @@ -0,0 +1,12 @@ +#ifndef GUARD_GBA_GBA_H +#define GUARD_GBA_GBA_H + +#include "gba/defines.h" +#include "gba/io_reg.h" +#include "gba/types.h" +#include "gba/multiboot.h" +#include "gba/syscall.h" +#include "gba/macro.h" +#include "gba/isagbprint.h" + +#endif // GUARD_GBA_GBA_H diff --git a/berry_fix/payload/include/gba/io_reg.h b/berry_fix/payload/include/gba/io_reg.h new file mode 100644 index 000000000..df79b084d --- /dev/null +++ b/berry_fix/payload/include/gba/io_reg.h @@ -0,0 +1,770 @@ +#ifndef GUARD_GBA_IO_REG_H +#define GUARD_GBA_IO_REG_H + +#define REG_BASE 0x4000000 // I/O register base address + +// I/O register offsets + +#define REG_OFFSET_DISPCNT 0x0 +#define REG_OFFSET_DISPSTAT 0x4 +#define REG_OFFSET_VCOUNT 0x6 +#define REG_OFFSET_BG0CNT 0x8 +#define REG_OFFSET_BG1CNT 0xa +#define REG_OFFSET_BG2CNT 0xc +#define REG_OFFSET_BG3CNT 0xe +#define REG_OFFSET_BG0HOFS 0x10 +#define REG_OFFSET_BG0VOFS 0x12 +#define REG_OFFSET_BG1HOFS 0x14 +#define REG_OFFSET_BG1VOFS 0x16 +#define REG_OFFSET_BG2HOFS 0x18 +#define REG_OFFSET_BG2VOFS 0x1a +#define REG_OFFSET_BG3HOFS 0x1c +#define REG_OFFSET_BG3VOFS 0x1e +#define REG_OFFSET_BG2PA 0x20 +#define REG_OFFSET_BG2PB 0x22 +#define REG_OFFSET_BG2PC 0x24 +#define REG_OFFSET_BG2PD 0x26 +#define REG_OFFSET_BG2X 0x28 +#define REG_OFFSET_BG2X_L 0x28 +#define REG_OFFSET_BG2X_H 0x2a +#define REG_OFFSET_BG2Y 0x2c +#define REG_OFFSET_BG2Y_L 0x2c +#define REG_OFFSET_BG2Y_H 0x2e +#define REG_OFFSET_BG3PA 0x30 +#define REG_OFFSET_BG3PB 0x32 +#define REG_OFFSET_BG3PC 0x34 +#define REG_OFFSET_BG3PD 0x36 +#define REG_OFFSET_BG3X 0x38 +#define REG_OFFSET_BG3X_L 0x38 +#define REG_OFFSET_BG3X_H 0x3a +#define REG_OFFSET_BG3Y 0x3c +#define REG_OFFSET_BG3Y_L 0x3c +#define REG_OFFSET_BG3Y_H 0x3e +#define REG_OFFSET_WIN0H 0x40 +#define REG_OFFSET_WIN1H 0x42 +#define REG_OFFSET_WIN0V 0x44 +#define REG_OFFSET_WIN1V 0x46 +#define REG_OFFSET_WININ 0x48 +#define REG_OFFSET_WINOUT 0x4a +#define REG_OFFSET_MOSAIC 0x4c +#define REG_OFFSET_BLDCNT 0x50 +#define REG_OFFSET_BLDALPHA 0x52 +#define REG_OFFSET_BLDY 0x54 + +#define REG_OFFSET_SOUND1CNT_L 0x60 +#define REG_OFFSET_NR10 0x60 +#define REG_OFFSET_SOUND1CNT_H 0x62 +#define REG_OFFSET_NR11 0x62 +#define REG_OFFSET_NR12 0x63 +#define REG_OFFSET_SOUND1CNT_X 0x64 +#define REG_OFFSET_NR13 0x64 +#define REG_OFFSET_NR14 0x65 +#define REG_OFFSET_SOUND2CNT_L 0x68 +#define REG_OFFSET_NR21 0x68 +#define REG_OFFSET_NR22 0x69 +#define REG_OFFSET_SOUND2CNT_H 0x6c +#define REG_OFFSET_NR23 0x6c +#define REG_OFFSET_NR24 0x6d +#define REG_OFFSET_SOUND3CNT_L 0x70 +#define REG_OFFSET_NR30 0x70 +#define REG_OFFSET_SOUND3CNT_H 0x72 +#define REG_OFFSET_NR31 0x72 +#define REG_OFFSET_NR32 0x73 +#define REG_OFFSET_SOUND3CNT_X 0x74 +#define REG_OFFSET_NR33 0x74 +#define REG_OFFSET_NR34 0x75 +#define REG_OFFSET_SOUND4CNT_L 0x78 +#define REG_OFFSET_NR41 0x78 +#define REG_OFFSET_NR42 0x79 +#define REG_OFFSET_SOUND4CNT_H 0x7c +#define REG_OFFSET_NR43 0x7c +#define REG_OFFSET_NR44 0x7d +#define REG_OFFSET_SOUNDCNT_L 0x80 +#define REG_OFFSET_NR50 0x80 +#define REG_OFFSET_NR51 0x81 +#define REG_OFFSET_SOUNDCNT_H 0x82 +#define REG_OFFSET_SOUNDCNT_X 0x84 +#define REG_OFFSET_NR52 0x84 +#define REG_OFFSET_SOUNDBIAS 0x88 +#define REG_OFFSET_SOUNDBIAS_L 0x88 +#define REG_OFFSET_SOUNDBIAS_H 0x89 +#define REG_OFFSET_WAVE_RAM0 0x90 +#define REG_OFFSET_WAVE_RAM1 0x94 +#define REG_OFFSET_WAVE_RAM2 0x98 +#define REG_OFFSET_WAVE_RAM3 0x9c +#define REG_OFFSET_FIFO_A 0xa0 +#define REG_OFFSET_FIFO_B 0xa4 + +#define REG_OFFSET_DMA0 0xb0 +#define REG_OFFSET_DMA0SAD 0xb0 +#define REG_OFFSET_DMA0SAD_L 0xb0 +#define REG_OFFSET_DMA0SAD_H 0xb2 +#define REG_OFFSET_DMA0DAD 0xb4 +#define REG_OFFSET_DMA0DAD_L 0xb4 +#define REG_OFFSET_DMA0DAD_H 0xb6 +#define REG_OFFSET_DMA0CNT 0xb8 +#define REG_OFFSET_DMA0CNT_L 0xb8 +#define REG_OFFSET_DMA0CNT_H 0xba +#define REG_OFFSET_DMA1 0xbc +#define REG_OFFSET_DMA1SAD 0xbc +#define REG_OFFSET_DMA1SAD_L 0xbc +#define REG_OFFSET_DMA1SAD_H 0xbe +#define REG_OFFSET_DMA1DAD 0xc0 +#define REG_OFFSET_DMA1DAD_L 0xc0 +#define REG_OFFSET_DMA1DAD_H 0xc2 +#define REG_OFFSET_DMA1CNT 0xc4 +#define REG_OFFSET_DMA1CNT_L 0xc4 +#define REG_OFFSET_DMA1CNT_H 0xc6 +#define REG_OFFSET_DMA2 0xc8 +#define REG_OFFSET_DMA2SAD 0xc8 +#define REG_OFFSET_DMA2SAD_L 0xc8 +#define REG_OFFSET_DMA2SAD_H 0xca +#define REG_OFFSET_DMA2DAD 0xcc +#define REG_OFFSET_DMA2DAD_L 0xcc +#define REG_OFFSET_DMA2DAD_H 0xce +#define REG_OFFSET_DMA2CNT 0xd0 +#define REG_OFFSET_DMA2CNT_L 0xd0 +#define REG_OFFSET_DMA2CNT_H 0xd2 +#define REG_OFFSET_DMA3 0xd4 +#define REG_OFFSET_DMA3SAD 0xd4 +#define REG_OFFSET_DMA3SAD_L 0xd4 +#define REG_OFFSET_DMA3SAD_H 0xd6 +#define REG_OFFSET_DMA3DAD 0xd8 +#define REG_OFFSET_DMA3DAD_L 0xd8 +#define REG_OFFSET_DMA3DAD_H 0xda +#define REG_OFFSET_DMA3CNT 0xdc +#define REG_OFFSET_DMA3CNT_L 0xdc +#define REG_OFFSET_DMA3CNT_H 0xde + +#define REG_OFFSET_TMCNT 0x100 +#define REG_OFFSET_TMCNT_L 0x100 +#define REG_OFFSET_TMCNT_H 0x102 +#define REG_OFFSET_TM0CNT 0x100 +#define REG_OFFSET_TM0CNT_L 0x100 +#define REG_OFFSET_TM0CNT_H 0x102 +#define REG_OFFSET_TM1CNT 0x104 +#define REG_OFFSET_TM1CNT_L 0x104 +#define REG_OFFSET_TM1CNT_H 0x106 +#define REG_OFFSET_TM2CNT 0x108 +#define REG_OFFSET_TM2CNT_L 0x108 +#define REG_OFFSET_TM2CNT_H 0x10a +#define REG_OFFSET_TM3CNT 0x10c +#define REG_OFFSET_TM3CNT_L 0x10c +#define REG_OFFSET_TM3CNT_H 0x10e + +#define REG_OFFSET_SIOCNT 0x128 +#define REG_OFFSET_SIODATA8 0x12a +#define REG_OFFSET_SIODATA32 0x120 +#define REG_OFFSET_SIOMLT_SEND 0x12a +#define REG_OFFSET_SIOMLT_RECV 0x120 +#define REG_OFFSET_SIOMULTI0 0x120 +#define REG_OFFSET_SIOMULTI1 0x122 +#define REG_OFFSET_SIOMULTI2 0x124 +#define REG_OFFSET_SIOMULTI3 0x126 + +#define REG_OFFSET_KEYINPUT 0x130 +#define REG_OFFSET_KEYCNT 0x132 + +#define REG_OFFSET_RCNT 0x134 + +#define REG_OFFSET_JOYCNT 0x140 +#define REG_OFFSET_JOYSTAT 0x158 +#define REG_OFFSET_JOY_RECV 0x150 +#define REG_OFFSET_JOY_RECV_L 0x150 +#define REG_OFFSET_JOY_RECV_H 0x152 +#define REG_OFFSET_JOY_TRANS 0x154 +#define REG_OFFSET_JOY_TRANS_L 0x154 +#define REG_OFFSET_JOY_TRANS_H 0x156 + +#define REG_OFFSET_IME 0x208 +#define REG_OFFSET_IE 0x200 +#define REG_OFFSET_IF 0x202 + +#define REG_OFFSET_WAITCNT 0x204 + +// I/O register addresses + +#define REG_ADDR_DISPCNT (REG_BASE + REG_OFFSET_DISPCNT) +#define REG_ADDR_DISPSTAT (REG_BASE + REG_OFFSET_DISPSTAT) +#define REG_ADDR_VCOUNT (REG_BASE + REG_OFFSET_VCOUNT) +#define REG_ADDR_BG0CNT (REG_BASE + REG_OFFSET_BG0CNT) +#define REG_ADDR_BG1CNT (REG_BASE + REG_OFFSET_BG1CNT) +#define REG_ADDR_BG2CNT (REG_BASE + REG_OFFSET_BG2CNT) +#define REG_ADDR_BG3CNT (REG_BASE + REG_OFFSET_BG3CNT) +#define REG_ADDR_BG0HOFS (REG_BASE + REG_OFFSET_BG0HOFS) +#define REG_ADDR_BG0VOFS (REG_BASE + REG_OFFSET_BG0VOFS) +#define REG_ADDR_BG1HOFS (REG_BASE + REG_OFFSET_BG1HOFS) +#define REG_ADDR_BG1VOFS (REG_BASE + REG_OFFSET_BG1VOFS) +#define REG_ADDR_BG2HOFS (REG_BASE + REG_OFFSET_BG2HOFS) +#define REG_ADDR_BG2VOFS (REG_BASE + REG_OFFSET_BG2VOFS) +#define REG_ADDR_BG3HOFS (REG_BASE + REG_OFFSET_BG3HOFS) +#define REG_ADDR_BG3VOFS (REG_BASE + REG_OFFSET_BG3VOFS) +#define REG_ADDR_BG2PA (REG_BASE + REG_OFFSET_BG2PA) +#define REG_ADDR_BG2PB (REG_BASE + REG_OFFSET_BG2PB) +#define REG_ADDR_BG2PC (REG_BASE + REG_OFFSET_BG2PC) +#define REG_ADDR_BG2PD (REG_BASE + REG_OFFSET_BG2PD) +#define REG_ADDR_BG2X (REG_BASE + REG_OFFSET_BG2X) +#define REG_ADDR_BG2X_L (REG_BASE + REG_OFFSET_BG2X_L) +#define REG_ADDR_BG2X_H (REG_BASE + REG_OFFSET_BG2X_H) +#define REG_ADDR_BG2Y (REG_BASE + REG_OFFSET_BG2Y) +#define REG_ADDR_BG2Y_L (REG_BASE + REG_OFFSET_BG2Y_L) +#define REG_ADDR_BG2Y_H (REG_BASE + REG_OFFSET_BG2Y_H) +#define REG_ADDR_BG3PA (REG_BASE + REG_OFFSET_BG3PA) +#define REG_ADDR_BG3PB (REG_BASE + REG_OFFSET_BG3PB) +#define REG_ADDR_BG3PC (REG_BASE + REG_OFFSET_BG3PC) +#define REG_ADDR_BG3PD (REG_BASE + REG_OFFSET_BG3PD) +#define REG_ADDR_BG3X (REG_BASE + REG_OFFSET_BG3X) +#define REG_ADDR_BG3X_L (REG_BASE + REG_OFFSET_BG3X_L) +#define REG_ADDR_BG3X_H (REG_BASE + REG_OFFSET_BG3X_H) +#define REG_ADDR_BG3Y (REG_BASE + REG_OFFSET_BG3Y) +#define REG_ADDR_BG3Y_L (REG_BASE + REG_OFFSET_BG3Y_L) +#define REG_ADDR_BG3Y_H (REG_BASE + REG_OFFSET_BG3Y_H) +#define REG_ADDR_WIN0H (REG_BASE + REG_OFFSET_WIN0H) +#define REG_ADDR_WIN1H (REG_BASE + REG_OFFSET_WIN1H) +#define REG_ADDR_WIN0V (REG_BASE + REG_OFFSET_WIN0V) +#define REG_ADDR_WIN1V (REG_BASE + REG_OFFSET_WIN1V) +#define REG_ADDR_WININ (REG_BASE + REG_OFFSET_WININ) +#define REG_ADDR_WINOUT (REG_BASE + REG_OFFSET_WINOUT) +#define REG_ADDR_MOSAIC (REG_BASE + REG_OFFSET_MOSAIC) +#define REG_ADDR_BLDCNT (REG_BASE + REG_OFFSET_BLDCNT) +#define REG_ADDR_BLDALPHA (REG_BASE + REG_OFFSET_BLDALPHA) +#define REG_ADDR_BLDY (REG_BASE + REG_OFFSET_BLDY) + +#define REG_ADDR_SOUND1CNT_L (REG_BASE + REG_OFFSET_SOUND1CNT_L) +#define REG_ADDR_NR10 (REG_BASE + REG_OFFSET_NR10) +#define REG_ADDR_SOUND1CNT_H (REG_BASE + REG_OFFSET_SOUND1CNT_H) +#define REG_ADDR_NR11 (REG_BASE + REG_OFFSET_NR11) +#define REG_ADDR_NR12 (REG_BASE + REG_OFFSET_NR12) +#define REG_ADDR_SOUND1CNT_X (REG_BASE + REG_OFFSET_SOUND1CNT_X) +#define REG_ADDR_NR13 (REG_BASE + REG_OFFSET_NR13) +#define REG_ADDR_NR14 (REG_BASE + REG_OFFSET_NR14) +#define REG_ADDR_SOUND2CNT_L (REG_BASE + REG_OFFSET_SOUND2CNT_L) +#define REG_ADDR_NR21 (REG_BASE + REG_OFFSET_NR21) +#define REG_ADDR_NR22 (REG_BASE + REG_OFFSET_NR22) +#define REG_ADDR_SOUND2CNT_H (REG_BASE + REG_OFFSET_SOUND2CNT_H) +#define REG_ADDR_NR23 (REG_BASE + REG_OFFSET_NR23) +#define REG_ADDR_NR24 (REG_BASE + REG_OFFSET_NR24) +#define REG_ADDR_SOUND3CNT_L (REG_BASE + REG_OFFSET_SOUND3CNT_L) +#define REG_ADDR_NR30 (REG_BASE + REG_OFFSET_NR30) +#define REG_ADDR_SOUND3CNT_H (REG_BASE + REG_OFFSET_SOUND3CNT_H) +#define REG_ADDR_NR31 (REG_BASE + REG_OFFSET_NR31) +#define REG_ADDR_NR32 (REG_BASE + REG_OFFSET_NR32) +#define REG_ADDR_SOUND3CNT_X (REG_BASE + REG_OFFSET_SOUND3CNT_X) +#define REG_ADDR_NR33 (REG_BASE + REG_OFFSET_NR33) +#define REG_ADDR_NR34 (REG_BASE + REG_OFFSET_NR34) +#define REG_ADDR_SOUND4CNT_L (REG_BASE + REG_OFFSET_SOUND4CNT_L) +#define REG_ADDR_NR41 (REG_BASE + REG_OFFSET_NR41) +#define REG_ADDR_NR42 (REG_BASE + REG_OFFSET_NR42) +#define REG_ADDR_SOUND4CNT_H (REG_BASE + REG_OFFSET_SOUND4CNT_H) +#define REG_ADDR_NR43 (REG_BASE + REG_OFFSET_NR43) +#define REG_ADDR_NR44 (REG_BASE + REG_OFFSET_NR44) +#define REG_ADDR_SOUNDCNT_L (REG_BASE + REG_OFFSET_SOUNDCNT_L) +#define REG_ADDR_NR50 (REG_BASE + REG_OFFSET_NR50) +#define REG_ADDR_NR51 (REG_BASE + REG_OFFSET_NR51) +#define REG_ADDR_SOUNDCNT_H (REG_BASE + REG_OFFSET_SOUNDCNT_H) +#define REG_ADDR_SOUNDCNT_X (REG_BASE + REG_OFFSET_SOUNDCNT_X) +#define REG_ADDR_NR52 (REG_BASE + REG_OFFSET_NR52) +#define REG_ADDR_SOUNDBIAS (REG_BASE + REG_OFFSET_SOUNDBIAS) +#define REG_ADDR_SOUNDBIAS_L (REG_BASE + REG_OFFSET_SOUNDBIAS_L) +#define REG_ADDR_SOUNDBIAS_H (REG_BASE + REG_OFFSET_SOUNDBIAS_H) +#define REG_ADDR_WAVE_RAM0 (REG_BASE + REG_OFFSET_WAVE_RAM0) +#define REG_ADDR_WAVE_RAM1 (REG_BASE + REG_OFFSET_WAVE_RAM1) +#define REG_ADDR_WAVE_RAM2 (REG_BASE + REG_OFFSET_WAVE_RAM2) +#define REG_ADDR_WAVE_RAM3 (REG_BASE + REG_OFFSET_WAVE_RAM3) +#define REG_ADDR_FIFO_A (REG_BASE + REG_OFFSET_FIFO_A) +#define REG_ADDR_FIFO_B (REG_BASE + REG_OFFSET_FIFO_B) + +#define REG_ADDR_DMA0 (REG_BASE + REG_OFFSET_DMA0) +#define REG_ADDR_DMA0SAD (REG_BASE + REG_OFFSET_DMA0SAD) +#define REG_ADDR_DMA0DAD (REG_BASE + REG_OFFSET_DMA0DAD) +#define REG_ADDR_DMA0CNT (REG_BASE + REG_OFFSET_DMA0CNT) +#define REG_ADDR_DMA0CNT_L (REG_BASE + REG_OFFSET_DMA0CNT_L) +#define REG_ADDR_DMA0CNT_H (REG_BASE + REG_OFFSET_DMA0CNT_H) +#define REG_ADDR_DMA1 (REG_BASE + REG_OFFSET_DMA1) +#define REG_ADDR_DMA1SAD (REG_BASE + REG_OFFSET_DMA1SAD) +#define REG_ADDR_DMA1DAD (REG_BASE + REG_OFFSET_DMA1DAD) +#define REG_ADDR_DMA1CNT (REG_BASE + REG_OFFSET_DMA1CNT) +#define REG_ADDR_DMA1CNT_L (REG_BASE + REG_OFFSET_DMA1CNT_L) +#define REG_ADDR_DMA1CNT_H (REG_BASE + REG_OFFSET_DMA1CNT_H) +#define REG_ADDR_DMA2 (REG_BASE + REG_OFFSET_DMA2) +#define REG_ADDR_DMA2SAD (REG_BASE + REG_OFFSET_DMA2SAD) +#define REG_ADDR_DMA2DAD (REG_BASE + REG_OFFSET_DMA2DAD) +#define REG_ADDR_DMA2CNT (REG_BASE + REG_OFFSET_DMA2CNT) +#define REG_ADDR_DMA2CNT_L (REG_BASE + REG_OFFSET_DMA2CNT_L) +#define REG_ADDR_DMA2CNT_H (REG_BASE + REG_OFFSET_DMA2CNT_H) +#define REG_ADDR_DMA3 (REG_BASE + REG_OFFSET_DMA3) +#define REG_ADDR_DMA3SAD (REG_BASE + REG_OFFSET_DMA3SAD) +#define REG_ADDR_DMA3DAD (REG_BASE + REG_OFFSET_DMA3DAD) +#define REG_ADDR_DMA3CNT (REG_BASE + REG_OFFSET_DMA3CNT) +#define REG_ADDR_DMA3CNT_L (REG_BASE + REG_OFFSET_DMA3CNT_L) +#define REG_ADDR_DMA3CNT_H (REG_BASE + REG_OFFSET_DMA3CNT_H) + +#define REG_ADDR_TMCNT (REG_BASE + REG_OFFSET_TMCNT) +#define REG_ADDR_TMCNT_L (REG_BASE + REG_OFFSET_TMCNT_L) +#define REG_ADDR_TMCNT_H (REG_BASE + REG_OFFSET_TMCNT_H) +#define REG_ADDR_TM0CNT (REG_BASE + REG_OFFSET_TM0CNT) +#define REG_ADDR_TM0CNT_L (REG_BASE + REG_OFFSET_TM0CNT_L) +#define REG_ADDR_TM0CNT_H (REG_BASE + REG_OFFSET_TM0CNT_H) +#define REG_ADDR_TM1CNT (REG_BASE + REG_OFFSET_TM1CNT) +#define REG_ADDR_TM1CNT_L (REG_BASE + REG_OFFSET_TM1CNT_L) +#define REG_ADDR_TM1CNT_H (REG_BASE + REG_OFFSET_TM1CNT_H) +#define REG_ADDR_TM2CNT (REG_BASE + REG_OFFSET_TM2CNT) +#define REG_ADDR_TM2CNT_L (REG_BASE + REG_OFFSET_TM2CNT_L) +#define REG_ADDR_TM2CNT_H (REG_BASE + REG_OFFSET_TM2CNT_H) +#define REG_ADDR_TM3CNT (REG_BASE + REG_OFFSET_TM3CNT) +#define REG_ADDR_TM3CNT_L (REG_BASE + REG_OFFSET_TM3CNT_L) +#define REG_ADDR_TM3CNT_H (REG_BASE + REG_OFFSET_TM3CNT_H) + +#define REG_ADDR_SIOCNT (REG_BASE + REG_OFFSET_SIOCNT) +#define REG_ADDR_SIODATA8 (REG_BASE + REG_OFFSET_SIODATA8) +#define REG_ADDR_SIODATA32 (REG_BASE + REG_OFFSET_SIODATA32) +#define REG_ADDR_SIOMLT_SEND (REG_BASE + REG_OFFSET_SIOMLT_SEND) +#define REG_ADDR_SIOMLT_RECV (REG_BASE + REG_OFFSET_SIOMLT_RECV) +#define REG_ADDR_SIOMULTI0 (REG_BASE + REG_OFFSET_SIOMULTI0) +#define REG_ADDR_SIOMULTI1 (REG_BASE + REG_OFFSET_SIOMULTI1) +#define REG_ADDR_SIOMULTI2 (REG_BASE + REG_OFFSET_SIOMULTI2) +#define REG_ADDR_SIOMULTI3 (REG_BASE + REG_OFFSET_SIOMULTI3) + +#define REG_ADDR_KEYINPUT (REG_BASE + REG_OFFSET_KEYINPUT) +#define REG_ADDR_KEYCNT (REG_BASE + REG_OFFSET_KEYCNT) + +#define REG_ADDR_RCNT (REG_BASE + REG_OFFSET_RCNT) + +#define REG_ADDR_JOYCNT (REG_BASE + REG_OFFSET_JOYCNT) +#define REG_ADDR_JOYSTAT (REG_BASE + REG_OFFSET_JOYSTAT) +#define REG_ADDR_JOY_RECV (REG_BASE + REG_OFFSET_JOY_RECV) +#define REG_ADDR_JOY_RECV_L (REG_BASE + REG_OFFSET_JOY_RECV_L) +#define REG_ADDR_JOY_RECV_H (REG_BASE + REG_OFFSET_JOY_RECV_H) +#define REG_ADDR_JOY_TRANS (REG_BASE + REG_OFFSET_JOY_TRANS) +#define REG_ADDR_JOY_TRANS_L (REG_BASE + REG_OFFSET_JOY_TRANS_L) +#define REG_ADDR_JOY_TRANS_H (REG_BASE + REG_OFFSET_JOY_TRANS_H) + +#define REG_ADDR_IME (REG_BASE + REG_OFFSET_IME) +#define REG_ADDR_IE (REG_BASE + REG_OFFSET_IE) +#define REG_ADDR_IF (REG_BASE + REG_OFFSET_IF) + +#define REG_ADDR_WAITCNT (REG_BASE + REG_OFFSET_WAITCNT) + +// I/O registers + +#define REG_DISPCNT (*(vu16 *)REG_ADDR_DISPCNT) +#define REG_DISPSTAT (*(vu16 *)REG_ADDR_DISPSTAT) +#define REG_VCOUNT (*(vu16 *)REG_ADDR_VCOUNT) +#define REG_BG0CNT (*(vu16 *)REG_ADDR_BG0CNT) +#define REG_BG1CNT (*(vu16 *)REG_ADDR_BG1CNT) +#define REG_BG2CNT (*(vu16 *)REG_ADDR_BG2CNT) +#define REG_BG3CNT (*(vu16 *)REG_ADDR_BG3CNT) +#define REG_BG0HOFS (*(vu16 *)REG_ADDR_BG0HOFS) +#define REG_BG0VOFS (*(vu16 *)REG_ADDR_BG0VOFS) +#define REG_BG1HOFS (*(vu16 *)REG_ADDR_BG1HOFS) +#define REG_BG1VOFS (*(vu16 *)REG_ADDR_BG1VOFS) +#define REG_BG2HOFS (*(vu16 *)REG_ADDR_BG2HOFS) +#define REG_BG2VOFS (*(vu16 *)REG_ADDR_BG2VOFS) +#define REG_BG3HOFS (*(vu16 *)REG_ADDR_BG3HOFS) +#define REG_BG3VOFS (*(vu16 *)REG_ADDR_BG3VOFS) +#define REG_BG2PA (*(vu16 *)REG_ADDR_BG2PA) +#define REG_BG2PB (*(vu16 *)REG_ADDR_BG2PB) +#define REG_BG2PC (*(vu16 *)REG_ADDR_BG2PC) +#define REG_BG2PD (*(vu16 *)REG_ADDR_BG2PD) +#define REG_BG2X (*(vu32 *)REG_ADDR_BG2X) +#define REG_BG2X_L (*(vu16 *)REG_ADDR_BG2X_L) +#define REG_BG2X_H (*(vu16 *)REG_ADDR_BG2X_H) +#define REG_BG2Y (*(vu32 *)REG_ADDR_BG2Y) +#define REG_BG2Y_L (*(vu16 *)REG_ADDR_BG2Y_L) +#define REG_BG2Y_H (*(vu16 *)REG_ADDR_BG2Y_H) +#define REG_BG3PA (*(vu16 *)REG_ADDR_BG3PA) +#define REG_BG3PB (*(vu16 *)REG_ADDR_BG3PB) +#define REG_BG3PC (*(vu16 *)REG_ADDR_BG3PC) +#define REG_BG3PD (*(vu16 *)REG_ADDR_BG3PD) +#define REG_BG3X (*(vu32 *)REG_ADDR_BG3X) +#define REG_BG3X_L (*(vu16 *)REG_ADDR_BG3X_L) +#define REG_BG3X_H (*(vu16 *)REG_ADDR_BG3X_H) +#define REG_BG3Y (*(vu32 *)REG_ADDR_BG3Y) +#define REG_BG3Y_L (*(vu16 *)REG_ADDR_BG3Y_L) +#define REG_BG3Y_H (*(vu16 *)REG_ADDR_BG3Y_H) +#define REG_WIN0H (*(vu16 *)REG_ADDR_WIN0H) +#define REG_WIN1H (*(vu16 *)REG_ADDR_WIN1H) +#define REG_WIN0V (*(vu16 *)REG_ADDR_WIN0V) +#define REG_WIN1V (*(vu16 *)REG_ADDR_WIN1V) +#define REG_WININ (*(vu16 *)REG_ADDR_WININ) +#define REG_WINOUT (*(vu16 *)REG_ADDR_WINOUT) +#define REG_MOSAIC (*(vu16 *)REG_ADDR_MOSAIC) +#define REG_BLDCNT (*(vu16 *)REG_ADDR_BLDCNT) +#define REG_BLDALPHA (*(vu16 *)REG_ADDR_BLDALPHA) +#define REG_BLDY (*(vu16 *)REG_ADDR_BLDY) + +#define REG_SOUND1CNT_L (*(vu16 *)REG_ADDR_SOUND1CNT_L) +#define REG_NR10 (*(vu8 *)REG_ADDR_NR10) +#define REG_SOUND1CNT_H (*(vu16 *)REG_ADDR_SOUND1CNT_H) +#define REG_NR11 (*(vu8 *)REG_ADDR_NR11) +#define REG_NR12 (*(vu8 *)REG_ADDR_NR12) +#define REG_SOUND1CNT_X (*(vu16 *)REG_ADDR_SOUND1CNT_X) +#define REG_NR13 (*(vu8 *)REG_ADDR_NR13) +#define REG_NR14 (*(vu8 *)REG_ADDR_NR14) +#define REG_SOUND2CNT_L (*(vu16 *)REG_ADDR_SOUND2CNT_L) +#define REG_NR21 (*(vu8 *)REG_ADDR_NR21) +#define REG_NR22 (*(vu8 *)REG_ADDR_NR22) +#define REG_SOUND2CNT_H (*(vu16 *)REG_ADDR_SOUND2CNT_H) +#define REG_NR23 (*(vu8 *)REG_ADDR_NR23) +#define REG_NR24 (*(vu8 *)REG_ADDR_NR24) +#define REG_SOUND3CNT_L (*(vu16 *)REG_ADDR_SOUND3CNT_L) +#define REG_NR30 (*(vu8 *)REG_ADDR_NR30) +#define REG_SOUND3CNT_H (*(vu16 *)REG_ADDR_SOUND3CNT_H) +#define REG_NR31 (*(vu8 *)REG_ADDR_NR31) +#define REG_NR32 (*(vu8 *)REG_ADDR_NR32) +#define REG_SOUND3CNT_X (*(vu16 *)REG_ADDR_SOUND3CNT_X) +#define REG_NR33 (*(vu8 *)REG_ADDR_NR33) +#define REG_NR34 (*(vu8 *)REG_ADDR_NR34) +#define REG_SOUND4CNT_L (*(vu16 *)REG_ADDR_SOUND4CNT_L) +#define REG_NR41 (*(vu8 *)REG_ADDR_NR41) +#define REG_NR42 (*(vu8 *)REG_ADDR_NR42) +#define REG_SOUND4CNT_H (*(vu16 *)REG_ADDR_SOUND4CNT_H) +#define REG_NR43 (*(vu8 *)REG_ADDR_NR43) +#define REG_NR44 (*(vu8 *)REG_ADDR_NR44) +#define REG_SOUNDCNT_L (*(vu16 *)REG_ADDR_SOUNDCNT_L) +#define REG_NR50 (*(vu8 *)REG_ADDR_NR50) +#define REG_NR51 (*(vu8 *)REG_ADDR_NR51) +#define REG_SOUNDCNT_H (*(vu16 *)REG_ADDR_SOUNDCNT_H) +#define REG_SOUNDCNT_X (*(vu16 *)REG_ADDR_SOUNDCNT_X) +#define REG_NR52 (*(vu8 *)REG_ADDR_NR52) +#define REG_SOUNDBIAS (*(vu16 *)REG_ADDR_SOUNDBIAS) +#define REG_SOUNDBIAS_L (*(vu8 *)REG_ADDR_SOUNDBIAS_L) +#define REG_SOUNDBIAS_H (*(vu8 *)REG_ADDR_SOUNDBIAS_H) +#define REG_WAVE_RAM0 (*(vu32 *)REG_ADDR_WAVE_RAM0) +#define REG_WAVE_RAM1 (*(vu32 *)REG_ADDR_WAVE_RAM1) +#define REG_WAVE_RAM2 (*(vu32 *)REG_ADDR_WAVE_RAM2) +#define REG_WAVE_RAM3 (*(vu32 *)REG_ADDR_WAVE_RAM3) +#define REG_FIFO_A (*(vu32 *)REG_ADDR_FIFO_A) +#define REG_FIFO_B (*(vu32 *)REG_ADDR_FIFO_B) + +#define REG_DMA0SAD (*(vu32 *)REG_ADDR_DMA0SAD) +#define REG_DMA0DAD (*(vu32 *)REG_ADDR_DMA0DAD) +#define REG_DMA0CNT (*(vu32 *)REG_ADDR_DMA0CNT) +#define REG_DMA0CNT_L (*(vu16 *)REG_ADDR_DMA0CNT_L) +#define REG_DMA0CNT_H (*(vu16 *)REG_ADDR_DMA0CNT_H) + +#define REG_DMA1SAD (*(vu32 *)REG_ADDR_DMA1SAD) +#define REG_DMA1DAD (*(vu32 *)REG_ADDR_DMA1DAD) +#define REG_DMA1CNT (*(vu32 *)REG_ADDR_DMA1CNT) +#define REG_DMA1CNT_L (*(vu16 *)REG_ADDR_DMA1CNT_L) +#define REG_DMA1CNT_H (*(vu16 *)REG_ADDR_DMA1CNT_H) + +#define REG_DMA2SAD (*(vu32 *)REG_ADDR_DMA2SAD) +#define REG_DMA2DAD (*(vu32 *)REG_ADDR_DMA2DAD) +#define REG_DMA2CNT (*(vu32 *)REG_ADDR_DMA2CNT) +#define REG_DMA2CNT_L (*(vu16 *)REG_ADDR_DMA2CNT_L) +#define REG_DMA2CNT_H (*(vu16 *)REG_ADDR_DMA2CNT_H) + +#define REG_DMA3SAD (*(vu32 *)REG_ADDR_DMA3SAD) +#define REG_DMA3DAD (*(vu32 *)REG_ADDR_DMA3DAD) +#define REG_DMA3CNT (*(vu32 *)REG_ADDR_DMA3CNT) +#define REG_DMA3CNT_L (*(vu16 *)REG_ADDR_DMA3CNT_L) +#define REG_DMA3CNT_H (*(vu16 *)REG_ADDR_DMA3CNT_H) + +#define REG_TMCNT(n) (*(vu16 *)(REG_ADDR_TMCNT + ((n) * 4))) +#define REG_TMCNT_L(n) (*(vu16 *)(REG_ADDR_TMCNT_L + ((n) * 4))) +#define REG_TMCNT_H(n) (*(vu16 *)(REG_ADDR_TMCNT_H + ((n) * 4))) +#define REG_TM0CNT (*(vu32 *)REG_ADDR_TM0CNT) +#define REG_TM0CNT_L (*(vu16 *)REG_ADDR_TM0CNT_L) +#define REG_TM0CNT_H (*(vu16 *)REG_ADDR_TM0CNT_H) +#define REG_TM1CNT (*(vu32 *)REG_ADDR_TM1CNT) +#define REG_TM1CNT_L (*(vu16 *)REG_ADDR_TM1CNT_L) +#define REG_TM1CNT_H (*(vu16 *)REG_ADDR_TM1CNT_H) +#define REG_TM2CNT (*(vu32 *)REG_ADDR_TM2CNT) +#define REG_TM2CNT_L (*(vu16 *)REG_ADDR_TM2CNT_L) +#define REG_TM2CNT_H (*(vu16 *)REG_ADDR_TM2CNT_H) +#define REG_TM3CNT (*(vu32 *)REG_ADDR_TM3CNT) +#define REG_TM3CNT_L (*(vu16 *)REG_ADDR_TM3CNT_L) +#define REG_TM3CNT_H (*(vu16 *)REG_ADDR_TM3CNT_H) + +#define REG_SIOCNT (*(vu16 *)REG_ADDR_SIOCNT) +#define REG_SIODATA8 (*(vu16 *)REG_ADDR_SIODATA8) +#define REG_SIODATA32 (*(vu32 *)REG_ADDR_SIODATA32) +#define REG_SIOMLT_SEND (*(vu16 *)REG_ADDR_SIOMLT_SEND) +#define REG_SIOMLT_RECV (*(vu64 *)REG_ADDR_SIOMLT_RECV) +#define REG_SIOMULTI0 (*(vu16 *)REG_ADDR_SIOMULTI0) +#define REG_SIOMULTI1 (*(vu16 *)REG_ADDR_SIOMULTI1) +#define REG_SIOMULTI2 (*(vu16 *)REG_ADDR_SIOMULTI2) +#define REG_SIOMULTI3 (*(vu16 *)REG_ADDR_SIOMULTI3) + +#define REG_KEYINPUT (*(vu16 *)REG_ADDR_KEYINPUT) +#define REG_KEYCNT (*(vu16 *)REG_ADDR_KEYCNT) + +#define REG_RCNT (*(vu16 *)REG_ADDR_RCNT) + +#define REG_IME (*(vu16 *)REG_ADDR_IME) +#define REG_IE (*(vu16 *)REG_ADDR_IE) +#define REG_IF (*(vu16 *)REG_ADDR_IF) + +#define REG_WAITCNT (*(vu16 *)REG_ADDR_WAITCNT) + +// I/O register fields + +// DISPCNT +#define DISPCNT_MODE_0 0x0000 // BG0: text, BG1: text, BG2: text, BG3: text +#define DISPCNT_MODE_1 0x0001 // BG0: text, BG1: text, BG2: affine, BG3: off +#define DISPCNT_MODE_2 0x0002 // BG0: off, BG1: off, BG2: affine, BG3: affine +#define DISPCNT_MODE_3 0x0003 // Bitmap mode, 240x160, BGR555 color +#define DISPCNT_MODE_4 0x0004 // Bitmap mode, 240x160, 256 color palette +#define DISPCNT_MODE_5 0x0005 // Bitmap mode, 160x128, BGR555 color +#define DISPCNT_HBLANK_INTERVAL 0x0020 // Allow access to OAM during H-Blank +#define DISPCNT_OBJ_1D_MAP 0x0040 +#define DISPCNT_FORCED_BLANK 0x0080 +#define DISPCNT_BG0_ON 0x0100 +#define DISPCNT_BG1_ON 0x0200 +#define DISPCNT_BG2_ON 0x0400 +#define DISPCNT_BG3_ON 0x0800 +#define DISPCNT_BG_ALL_ON 0x0F00 +#define DISPCNT_OBJ_ON 0x1000 +#define DISPCNT_WIN0_ON 0x2000 +#define DISPCNT_WIN1_ON 0x4000 +#define DISPCNT_OBJWIN_ON 0x8000 + +// DISPSTAT +#define DISPSTAT_VBLANK 0x0001 // in V-Blank +#define DISPSTAT_HBLANK 0x0002 // in H-Blank +#define DISPSTAT_VCOUNT 0x0004 // V-Count match +#define DISPSTAT_VBLANK_INTR 0x0008 // V-Blank interrupt enabled +#define DISPSTAT_HBLANK_INTR 0x0010 // H-Blank interrupt enabled +#define DISPSTAT_VCOUNT_INTR 0x0020 // V-Count interrupt enabled + +// BGCNT +#define BGCNT_PRIORITY(n) (n) // Values 0 - 3. Lower priority BGs will be drawn on top of higher priority BGs. +#define BGCNT_CHARBASE(n) ((n) << 2) // Values 0 - 3. Base block for tile pixel data. +#define BGCNT_MOSAIC 0x0040 +#define BGCNT_16COLOR 0x0000 // 4 bits per pixel +#define BGCNT_256COLOR 0x0080 // 8 bits per pixel +#define BGCNT_SCREENBASE(n) ((n) << 8) // Values 0 - 31. Base block for tile map. +#define BGCNT_WRAP 0x2000 // Only affects affine BGs. Text BGs wrap by default. +#define BGCNT_TXT256x256 0x0000 // Internal screen size size of text mode BG in pixels. +#define BGCNT_TXT512x256 0x4000 +#define BGCNT_TXT256x512 0x8000 +#define BGCNT_TXT512x512 0xC000 +#define BGCNT_AFF128x128 0x0000 // Internal screen size size of affine mode BG in pixels. +#define BGCNT_AFF256x256 0x4000 +#define BGCNT_AFF512x512 0x8000 +#define BGCNT_AFF1024x1024 0xC000 + +// WININ/OUT +#define WININ_WIN0_BG0 (1 << 0) +#define WININ_WIN0_BG1 (1 << 1) +#define WININ_WIN0_BG2 (1 << 2) +#define WININ_WIN0_BG3 (1 << 3) +#define WININ_WIN0_BG_ALL (WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3) +#define WININ_WIN0_OBJ (1 << 4) +#define WININ_WIN0_CLR (1 << 5) +#define WININ_WIN1_BG0 (1 << 8) +#define WININ_WIN1_BG1 (1 << 9) +#define WININ_WIN1_BG2 (1 << 10) +#define WININ_WIN1_BG3 (1 << 11) +#define WININ_WIN1_BG_ALL (WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3) +#define WININ_WIN1_OBJ (1 << 12) +#define WININ_WIN1_CLR (1 << 13) + +#define WINOUT_WIN01_BG0 (1 << 0) +#define WINOUT_WIN01_BG1 (1 << 1) +#define WINOUT_WIN01_BG2 (1 << 2) +#define WINOUT_WIN01_BG3 (1 << 3) +#define WINOUT_WIN01_BG_ALL (WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3) +#define WINOUT_WIN01_OBJ (1 << 4) +#define WINOUT_WIN01_CLR (1 << 5) +#define WINOUT_WINOBJ_BG0 (1 << 8) +#define WINOUT_WINOBJ_BG1 (1 << 9) +#define WINOUT_WINOBJ_BG2 (1 << 10) +#define WINOUT_WINOBJ_BG3 (1 << 11) +#define WINOUT_WINOBJ_BG_ALL (WINOUT_WINOBJ_BG0 | WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_BG3) +#define WINOUT_WINOBJ_OBJ (1 << 12) +#define WINOUT_WINOBJ_CLR (1 << 13) + +#define WIN_RANGE(a, b) (((a) << 8) | (b)) +#define WIN_RANGE2(a, b) ((b) | ((a) << 8)) + +// BLDCNT +// Bits 0-5 select layers for the 1st target +#define BLDCNT_TGT1_BG0 (1 << 0) +#define BLDCNT_TGT1_BG1 (1 << 1) +#define BLDCNT_TGT1_BG2 (1 << 2) +#define BLDCNT_TGT1_BG3 (1 << 3) +#define BLDCNT_TGT1_OBJ (1 << 4) +#define BLDCNT_TGT1_BD (1 << 5) +#define BLDCNT_TGT1_ALL (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD) +// Bits 6-7 select the special effect +#define BLDCNT_EFFECT_NONE (0 << 6) // no special effect +#define BLDCNT_EFFECT_BLEND (1 << 6) // 1st+2nd targets mixed (controlled by BLDALPHA) +#define BLDCNT_EFFECT_LIGHTEN (2 << 6) // 1st target becomes whiter (controlled by BLDY) +#define BLDCNT_EFFECT_DARKEN (3 << 6) // 1st target becomes blacker (controlled by BLDY) +// Bits 8-13 select layers for the 2nd target +#define BLDCNT_TGT2_BG0 (1 << 8) +#define BLDCNT_TGT2_BG1 (1 << 9) +#define BLDCNT_TGT2_BG2 (1 << 10) +#define BLDCNT_TGT2_BG3 (1 << 11) +#define BLDCNT_TGT2_OBJ (1 << 12) +#define BLDCNT_TGT2_BD (1 << 13) +#define BLDCNT_TGT2_ALL (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD) + +// BLDALPHA +#define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1)) + +// SOUNDCNT_H +#define SOUND_CGB_MIX_QUARTER 0x0000 +#define SOUND_CGB_MIX_HALF 0x0001 +#define SOUND_CGB_MIX_FULL 0x0002 +#define SOUND_A_MIX_HALF 0x0000 +#define SOUND_A_MIX_FULL 0x0004 +#define SOUND_B_MIX_HALF 0x0000 +#define SOUND_B_MIX_FULL 0x0008 +#define SOUND_ALL_MIX_FULL 0x000E +#define SOUND_A_RIGHT_OUTPUT 0x0100 +#define SOUND_A_LEFT_OUTPUT 0x0200 +#define SOUND_A_TIMER_0 0x0000 +#define SOUND_A_TIMER_1 0x0400 +#define SOUND_A_FIFO_RESET 0x0800 +#define SOUND_B_RIGHT_OUTPUT 0x1000 +#define SOUND_B_LEFT_OUTPUT 0x2000 +#define SOUND_B_TIMER_0 0x0000 +#define SOUND_B_TIMER_1 0x4000 +#define SOUND_B_FIFO_RESET 0x8000 + +// SOUNDCNT_X +#define SOUND_1_ON 0x0001 +#define SOUND_2_ON 0x0002 +#define SOUND_3_ON 0x0004 +#define SOUND_4_ON 0x0008 +#define SOUND_MASTER_ENABLE 0x0080 + +// DMA +#define DMA_DEST_INC 0x0000 +#define DMA_DEST_DEC 0x0020 +#define DMA_DEST_FIXED 0x0040 +#define DMA_DEST_RELOAD 0x0060 +#define DMA_SRC_INC 0x0000 +#define DMA_SRC_DEC 0x0080 +#define DMA_SRC_FIXED 0x0100 +#define DMA_REPEAT 0x0200 +#define DMA_16BIT 0x0000 +#define DMA_32BIT 0x0400 +#define DMA_DREQ_ON 0x0800 +#define DMA_START_NOW 0x0000 +#define DMA_START_VBLANK 0x1000 +#define DMA_START_HBLANK 0x2000 +#define DMA_START_SPECIAL 0x3000 +#define DMA_START_MASK 0x3000 +#define DMA_INTR_ENABLE 0x4000 +#define DMA_ENABLE 0x8000 + +// timer +#define TIMER_1CLK 0x00 +#define TIMER_64CLK 0x01 +#define TIMER_256CLK 0x02 +#define TIMER_1024CLK 0x03 +#define TIMER_INTR_ENABLE 0x40 +#define TIMER_ENABLE 0x80 + +// serial +#define SIO_ID 0x0030 // Communication ID + +#define SIO_8BIT_MODE 0x0000 // Normal 8-bit communication mode +#define SIO_32BIT_MODE 0x1000 // Normal 32-bit communication mode +#define SIO_MULTI_MODE 0x2000 // Multi-player communication mode +#define SIO_UART_MODE 0x3000 // UART communication mode + +#define SIO_9600_BPS 0x0000 // baud rate 9600 bps +#define SIO_38400_BPS 0x0001 // 38400 bps +#define SIO_57600_BPS 0x0002 // 57600 bps +#define SIO_115200_BPS 0x0003 // 115200 bps + +#define SIO_MULTI_SI 0x0004 // Multi-player communication SI terminal +#define SIO_MULTI_SD 0x0008 // SD terminal +#define SIO_MULTI_BUSY 0x0080 + +#define SIO_ERROR 0x0040 // Detect error +#define SIO_START 0x0080 // Start transfer +#define SIO_ENABLE 0x0080 // Enable SIO + +#define SIO_INTR_ENABLE 0x4000 + +#define SIO_MULTI_SI_SHIFT 2 +#define SIO_MULTI_SI_MASK 0x1 +#define SIO_MULTI_DI_SHIFT 3 +#define SIO_MULTI_DI_MASK 0x1 + +// keys +#define A_BUTTON 0x0001 +#define B_BUTTON 0x0002 +#define SELECT_BUTTON 0x0004 +#define START_BUTTON 0x0008 +#define DPAD_RIGHT 0x0010 +#define DPAD_LEFT 0x0020 +#define DPAD_UP 0x0040 +#define DPAD_DOWN 0x0080 +#define R_BUTTON 0x0100 +#define L_BUTTON 0x0200 +#define KEYS_MASK 0x03FF +#define KEY_INTR_ENABLE 0x0400 +#define KEY_OR_INTR 0x0000 +#define KEY_AND_INTR 0x8000 +#define DPAD_ANY ((DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN)) +#define JOY_EXCL_DPAD 0x030F + +// interrupt flags +#define INTR_FLAG_VBLANK (1 << 0) +#define INTR_FLAG_HBLANK (1 << 1) +#define INTR_FLAG_VCOUNT (1 << 2) +#define INTR_FLAG_TIMER0 (1 << 3) +#define INTR_FLAG_TIMER1 (1 << 4) +#define INTR_FLAG_TIMER2 (1 << 5) +#define INTR_FLAG_TIMER3 (1 << 6) +#define INTR_FLAG_SERIAL (1 << 7) +#define INTR_FLAG_DMA0 (1 << 8) +#define INTR_FLAG_DMA1 (1 << 9) +#define INTR_FLAG_DMA2 (1 << 10) +#define INTR_FLAG_DMA3 (1 << 11) +#define INTR_FLAG_KEYPAD (1 << 12) +#define INTR_FLAG_GAMEPAK (1 << 13) + +// WAITCNT +#define WAITCNT_SRAM_4 (0 << 0) +#define WAITCNT_SRAM_3 (1 << 0) +#define WAITCNT_SRAM_2 (2 << 0) +#define WAITCNT_SRAM_8 (3 << 0) +#define WAITCNT_SRAM_MASK (3 << 0) + +#define WAITCNT_WS0_N_4 (0 << 2) +#define WAITCNT_WS0_N_3 (1 << 2) +#define WAITCNT_WS0_N_2 (2 << 2) +#define WAITCNT_WS0_N_8 (3 << 2) +#define WAITCNT_WS0_N_MASK (3 << 2) + +#define WAITCNT_WS0_S_2 (0 << 4) +#define WAITCNT_WS0_S_1 (1 << 4) + +#define WAITCNT_WS1_N_4 (0 << 5) +#define WAITCNT_WS1_N_3 (1 << 5) +#define WAITCNT_WS1_N_2 (2 << 5) +#define WAITCNT_WS1_N_8 (3 << 5) +#define WAITCNT_WS1_N_MASK (3 << 5) + +#define WAITCNT_WS1_S_4 (0 << 7) +#define WAITCNT_WS1_S_1 (1 << 7) + +#define WAITCNT_WS2_N_4 (0 << 8) +#define WAITCNT_WS2_N_3 (1 << 8) +#define WAITCNT_WS2_N_2 (2 << 8) +#define WAITCNT_WS2_N_8 (3 << 8) +#define WAITCNT_WS2_N_MASK (3 << 8) + +#define WAITCNT_WS2_S_8 (0 << 10) +#define WAITCNT_WS2_S_1 (1 << 10) + +#define WAITCNT_PHI_OUT_NONE (0 << 11) +#define WAITCNT_PHI_OUT_4MHZ (1 << 11) +#define WAITCNT_PHI_OUT_8MHZ (2 << 11) +#define WAITCNT_PHI_OUT_16MHZ (3 << 11) +#define WAITCNT_PHI_OUT_MASK (3 << 11) + +#define WAITCNT_PREFETCH_ENABLE (1 << 14) + +#define WAITCNT_AGB (0 << 15) +#define WAITCNT_CGB (1 << 15) + +#endif // GUARD_GBA_IO_REG_H diff --git a/berry_fix/payload/include/gba/isagbprint.h b/berry_fix/payload/include/gba/isagbprint.h new file mode 100644 index 000000000..c5eb456c3 --- /dev/null +++ b/berry_fix/payload/include/gba/isagbprint.h @@ -0,0 +1,50 @@ +#ifndef GUARD_GBA_ISAGBPRINT_H +#define GUARD_GBA_ISAGBPRINT_H + +#ifdef NDEBUG +#define AGBPrintInit() +#define AGBPutc(cChr) +#define AGBPrint(pBuf) +#define AGBPrintf(pBuf, ...) +#define AGBPrintFlush1Block() +#define AGBPrintFlush() +#define AGBAssert(pFile, nLine, pExpression, nStopProgram) +#else +void AGBPrintInit(void); +void AGBPutc(const char cChr); +void AGBPrint(const char *pBuf); +void AGBPrintf(const char *pBuf, ...); +void AGBPrintFlush1Block(void); +void AGBPrintFlush(void); +void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopProgram); +#endif + +#undef AGB_ASSERT +#ifdef NDEBUG +#define AGB_ASSERT(exp) +#else +#define AGB_ASSERT(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 1); +#endif + +#undef AGB_WARNING +#ifdef NDEBUG +#define AGB_WARNING(exp) +#else +#define AGB_WARNING(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 0); +#endif + +// for matching purposes + +#ifdef NDEBUG +#define AGB_ASSERT_EX(exp, file, line) +#else +#define AGB_ASSERT_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 1); +#endif + +#ifdef NDEBUG +#define AGB_WARNING_EX(exp, file, line) +#else +#define AGB_WARNING_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 0); +#endif + +#endif // GUARD_GBA_ISAGBPRINT_H diff --git a/berry_fix/payload/include/gba/m4a_internal.h b/berry_fix/payload/include/gba/m4a_internal.h new file mode 100644 index 000000000..339a0774e --- /dev/null +++ b/berry_fix/payload/include/gba/m4a_internal.h @@ -0,0 +1,467 @@ +#ifndef GUARD_GBA_M4A_INTERNAL_H +#define GUARD_GBA_M4A_INTERNAL_H + +#include "gba/gba.h" + +// ASCII encoding of 'Smsh' in reverse +// This is presumably short for SMASH, the developer of MKS4AGB. +#define ID_NUMBER 0x68736D53 + +#define C_V 0x40 // center value for PAN, BEND, and TUNE + +#define SOUND_MODE_REVERB_VAL 0x0000007F +#define SOUND_MODE_REVERB_SET 0x00000080 +#define SOUND_MODE_MAXCHN 0x00000F00 +#define SOUND_MODE_MAXCHN_SHIFT 8 +#define SOUND_MODE_MASVOL 0x0000F000 +#define SOUND_MODE_MASVOL_SHIFT 12 +#define SOUND_MODE_FREQ_05734 0x00010000 +#define SOUND_MODE_FREQ_07884 0x00020000 +#define SOUND_MODE_FREQ_10512 0x00030000 +#define SOUND_MODE_FREQ_13379 0x00040000 +#define SOUND_MODE_FREQ_15768 0x00050000 +#define SOUND_MODE_FREQ_18157 0x00060000 +#define SOUND_MODE_FREQ_21024 0x00070000 +#define SOUND_MODE_FREQ_26758 0x00080000 +#define SOUND_MODE_FREQ_31536 0x00090000 +#define SOUND_MODE_FREQ_36314 0x000A0000 +#define SOUND_MODE_FREQ_40137 0x000B0000 +#define SOUND_MODE_FREQ_42048 0x000C0000 +#define SOUND_MODE_FREQ 0x000F0000 +#define SOUND_MODE_FREQ_SHIFT 16 +#define SOUND_MODE_DA_BIT_9 0x00800000 +#define SOUND_MODE_DA_BIT_8 0x00900000 +#define SOUND_MODE_DA_BIT_7 0x00A00000 +#define SOUND_MODE_DA_BIT_6 0x00B00000 +#define SOUND_MODE_DA_BIT 0x00B00000 +#define SOUND_MODE_DA_BIT_SHIFT 20 + +struct WaveData +{ + u16 type; + u16 status; + u32 freq; + u32 loopStart; + u32 size; // number of samples + s8 data[1]; // samples +}; + +#define TONEDATA_TYPE_CGB 0x07 +#define TONEDATA_TYPE_FIX 0x08 +#define TONEDATA_TYPE_SPL 0x40 // key split +#define TONEDATA_TYPE_RHY 0x80 // rhythm + +#define TONEDATA_P_S_PAN 0xc0 +#define TONEDATA_P_S_PAM TONEDATA_P_S_PAN + +struct ToneData +{ + u8 type; + u8 key; + u8 length; // sound length (compatible sound) + u8 pan_sweep; // pan or sweep (compatible sound ch. 1) + struct WaveData *wav; + u8 attack; + u8 decay; + u8 sustain; + u8 release; +}; + +struct CgbChannel +{ + u8 sf; + u8 ty; + u8 rightVolume; + u8 leftVolume; + u8 at; + u8 de; + u8 su; + u8 re; + u8 ky; + u8 ev; + u8 eg; + u8 ec; + u8 echoVolume; + u8 echoLength; + u8 d1; + u8 d2; + u8 gt; + u8 mk; + u8 ve; + u8 pr; + u8 rp; + u8 d3[3]; + u8 d5; + u8 sg; + u8 n4; + u8 pan; + u8 panMask; + u8 mo; + u8 le; + u8 sw; + u32 fr; + u32 wp; + u32 cp; + u32 tp; + u32 pp; + u32 np; + u8 d4[8]; +}; + +struct MusicPlayerTrack; + +struct SoundChannel +{ + u8 status; + u8 type; + u8 rightVolume; + u8 leftVolume; + u8 attack; + u8 decay; + u8 sustain; + u8 release; + u8 ky; + u8 ev; + u8 er; + u8 el; + u8 echoVolume; + u8 echoLength; + u8 d1; + u8 d2; + u8 gt; + u8 mk; + u8 ve; + u8 pr; + u8 rp; + u8 d3[3]; + u32 ct; + u32 fw; + u32 freq; + struct WaveData *wav; + u32 cp; + struct MusicPlayerTrack *track; + u32 pp; + u32 np; + u32 d4; + u16 xpi; + u16 xpc; +}; + +#define MAX_DIRECTSOUND_CHANNELS 12 + +#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer + +struct SoundInfo +{ + // This field is normally equal to ID_NUMBER but it is set to other + // values during sensitive operations for locking purposes. + // This field should be volatile but isn't. This could potentially cause + // race conditions. + u32 ident; + + vu8 pcmDmaCounter; + + // Direct Sound + u8 reverb; + u8 maxChans; + u8 masterVolume; + u8 freq; + + u8 mode; + u8 c15; + u8 pcmDmaPeriod; // number of V-blanks per PCM DMA + u8 maxLines; + u8 gap[3]; + s32 pcmSamplesPerVBlank; + s32 pcmFreq; + s32 divFreq; + struct CgbChannel *cgbChans; + u32 func; + u32 intp; + void (*CgbSound)(void); + void (*CgbOscOff)(u8); + u32 (*MidiKeyToCgbFreq)(u8, u8, u8); + u32 MPlayJumpTable; + u32 plynote; + u32 ExtVolPit; + u8 gap2[16]; + struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; + s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; +}; + +struct SongHeader +{ + u8 trackCount; + u8 blockCount; + u8 priority; + u8 reverb; + struct ToneData *tone; + u8 *part[1]; +}; + +struct PokemonCrySong +{ + u8 trackCount; + u8 blockCount; + u8 priority; + u8 reverb; + struct ToneData *tone; + u8 *part[2]; + u8 gap; + u8 part0; // 0x11 + u8 tuneValue; // 0x12 + u8 gotoCmd; // 0x13 + u32 gotoTarget; // 0x14 + u8 part1; // 0x18 + u8 tuneValue2; // 0x19 + u8 cont[2]; // 0x1A + u8 volCmd; // 0x1C + u8 volumeValue; // 0x1D + u8 unkCmd0D[2]; // 0x1E + u32 unkCmd0DParam; // 0x20 + u8 xreleCmd[2]; // 0x24 + u8 releaseValue; // 0x26 + u8 panCmd; + u8 panValue; // 0x28 + u8 tieCmd; // 0x29 + u8 tieKeyValue; // 0x2A + u8 tieVelocityValue; // 0x2B + u8 unkCmd0C[2]; // 0x2C + u16 unkCmd0CParam; // 0x2E + u8 end[2]; // 0x30 +}; + +#define MPT_FLG_VOLSET 0x01 +#define MPT_FLG_VOLCHG 0x03 +#define MPT_FLG_PITSET 0x04 +#define MPT_FLG_PITCHG 0x0C +#define MPT_FLG_START 0x40 +#define MPT_FLG_EXIST 0x80 + +struct MusicPlayerTrack +{ + u8 flags; + u8 wait; + u8 patternLevel; + u8 repN; + u8 gateTime; + u8 key; + u8 velocity; + u8 runningStatus; + u8 keyM; + u8 pitM; + s8 keyShift; + s8 keyShiftX; + s8 tune; + u8 pitX; + s8 bend; + u8 bendRange; + u8 volMR; + u8 volML; + u8 vol; + u8 volX; + s8 pan; + s8 panX; + s8 modM; + u8 mod; + u8 modT; + u8 lfoSpeed; + u8 lfoSpeedC; + u8 lfoDelay; + u8 lfoDelayC; + u8 priority; + u8 echoVolume; + u8 echoLength; + struct SoundChannel *chan; + struct ToneData tone; + u8 gap[10]; + u16 unk_3A; + u32 unk_3C; + u8 *cmdPtr; + u8 *patternStack[3]; +}; + +#define MUSICPLAYER_STATUS_TRACK 0x0000ffff +#define MUSICPLAYER_STATUS_PAUSE 0x80000000 + +#define MAX_MUSICPLAYER_TRACKS 16 + +#define TEMPORARY_FADE 0x0001 +#define FADE_IN 0x0002 +#define FADE_VOL_MAX 64 +#define FADE_VOL_SHIFT 2 + +struct MusicPlayerInfo +{ + struct SongHeader *songHeader; + u32 status; + u8 trackCount; + u8 priority; + u8 cmd; + u8 unk_B; + u32 clock; + u8 gap[8]; + u8 *memAccArea; + u16 tempoD; + u16 tempoU; + u16 tempoI; + u16 tempoC; + u16 fadeOI; + u16 fadeOC; + u16 fadeOV; + struct MusicPlayerTrack *tracks; + struct ToneData *tone; + u32 ident; + u32 func; + u32 intp; +}; + +struct MusicPlayer +{ + struct MusicPlayerInfo *info; + struct MusicPlayerTrack *track; + u8 unk_8; + u16 unk_A; +}; + +struct Song +{ + struct SongHeader *header; + u16 ms; + u16 me; +}; + +extern const struct MusicPlayer gMPlayTable[]; +extern const struct Song gSongTable[]; + + + +extern u8 gMPlayMemAccArea[]; + +//u8 gPokemonCrySong[52]; +//u8 gPokemonCrySongs[52 * MAX_POKEMON_CRIES]; + +#define MAX_POKEMON_CRIES 2 + +extern struct PokemonCrySong gPokemonCrySong; +extern struct PokemonCrySong gPokemonCrySongs[]; + +extern struct MusicPlayerInfo gPokemonCryMusicPlayers[]; +extern struct MusicPlayerTrack gPokemonCryTracks[]; + +extern char SoundMainRAM[]; + +extern void *gMPlayJumpTable[]; + +typedef void (*XcmdFunc)(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +extern const XcmdFunc gXcmdTable[]; + +extern struct CgbChannel gCgbChans[]; + +extern const u8 gScaleTable[]; +extern const u32 gFreqTable[]; +extern const u16 gPcmSamplesPerVBlankTable[]; + +extern const u8 gCgbScaleTable[]; +extern const s16 gCgbFreqTable[]; +extern const u8 gNoiseTable[]; + +extern const struct PokemonCrySong gPokemonCrySongTemplate; + +extern const struct ToneData voicegroup000; + +extern char gNumMusicPlayers[]; +extern char gMaxLines[]; + +#define NUM_MUSIC_PLAYERS ((u16)gNumMusicPlayers) +#define MAX_LINES ((u32)gMaxLines) + +u32 umul3232H32(u32 multiplier, u32 multiplicand); +void SoundMain(void); +void SoundMainBTM(void); +void TrackStop(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track); +void MPlayMain(void); +void RealClearChain(void *x); + +void MPlayContinue(struct MusicPlayerInfo *mplayInfo); +void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader); +void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo); +void FadeOutBody(struct MusicPlayerInfo *mplayInfo); +void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track); +void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed); +void ClearChain(void *x); +void Clear64byte(void *addr); +void SoundInit(struct SoundInfo *soundInfo); +void MPlayExtender(struct CgbChannel *cgbChans); +void m4aSoundMode(u32 mode); +void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track, u8 a3); +void CgbSound(void); +void CgbOscOff(u8); +u32 MidiKeyToCgbFreq(u8, u8, u8); +void DummyFunc(void); +void MPlayJumpTableCopy(void **mplayJumpTable); +void SampleFreqSet(u32 freq); +void m4aSoundVSyncOn(void); +void m4aSoundVSyncOff(void); + +void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo); +void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume); +void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch); +void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan); +void ClearModM(struct MusicPlayerTrack *track); +void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth); +void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed); + +struct MusicPlayerInfo *SetPokemonCryTone(struct ToneData *tone); +void SetPokemonCryVolume(u8 val); +void SetPokemonCryPanpot(s8 val); +void SetPokemonCryPitch(s16 val); +void SetPokemonCryLength(u16 val); +void SetPokemonCryRelease(u8 val); +void SetPokemonCryProgress(u32 val); +int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo); +void SetPokemonCryChorus(s8 val); +void SetPokemonCryStereo(u32 val); +void SetPokemonCryPriority(u8 val); + +// sound command handler functions +void ply_fine(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_goto(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_patt(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_pend(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_rept(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_memacc(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_prio(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_tempo(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_keysh(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_voice(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_vol(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_pan(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_bend(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_bendr(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_lfos(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_lfodl(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_mod(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_modt(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *); + +// extended sound command handler functions +void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xwave(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xtype(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xatta(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xdeca(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xsust(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xrele(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xiecv(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xiecl(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xleng(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xswee(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xcmd_0C(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xcmd_0D(struct MusicPlayerInfo *, struct MusicPlayerTrack *); + +#endif // GUARD_GBA_M4A_INTERNAL_H diff --git a/berry_fix/payload/include/gba/macro.h b/berry_fix/payload/include/gba/macro.h new file mode 100644 index 000000000..6f9c55f2e --- /dev/null +++ b/berry_fix/payload/include/gba/macro.h @@ -0,0 +1,247 @@ +#ifndef GUARD_GBA_MACRO_H +#define GUARD_GBA_MACRO_H + +#define CPU_FILL(value, dest, size, bit) \ +{ \ + vu##bit tmp = (vu##bit)(value); \ + CpuSet((void *)&tmp, \ + dest, \ + CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size)/(bit/8) & 0x1FFFFF)); \ +} + +#define CpuFill16(value, dest, size) CPU_FILL(value, dest, size, 16) +#define CpuFill32(value, dest, size) CPU_FILL(value, dest, size, 32) + +#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size)/(bit/8) & 0x1FFFFF)) + +#define CpuCopy16(src, dest, size) CPU_COPY(src, dest, size, 16) +#define CpuCopy32(src, dest, size) CPU_COPY(src, dest, size, 32) + +#define CpuFastFill(value, dest, size) \ +{ \ + vu32 tmp = (vu32)(value); \ + CpuFastSet((void *)&tmp, \ + dest, \ + CPU_FAST_SET_SRC_FIXED | ((size)/(32/8) & 0x1FFFFF)); \ +} + +#define CpuFastFill16(value, dest, size) CpuFastFill(((value) << 16) | (value), (dest), (size)) + +#define CpuFastFill8(value, dest, size) CpuFastFill(((value) << 24) | ((value) << 16) | ((value) << 8) | (value), (dest), (size)) + +#define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size)/(32/8) & 0x1FFFFF)) + +#define DmaSet(dmaNum, src, dest, control) \ +{ \ + vu32 *dmaRegs = (vu32 *)REG_ADDR_DMA##dmaNum; \ + dmaRegs[0] = (vu32)(src); \ + dmaRegs[1] = (vu32)(dest); \ + dmaRegs[2] = (vu32)(control); \ + dmaRegs[2]; \ +} + +#define DMA_FILL(dmaNum, value, dest, size, bit) \ +{ \ + vu##bit tmp = (vu##bit)(value); \ + DmaSet(dmaNum, \ + &tmp, \ + dest, \ + (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_FIXED | DMA_DEST_INC) << 16 \ + | ((size)/(bit/8))); \ +} + +#define DmaFill16(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 16) +#define DmaFill32(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 32) + +// Note that the DMA clear macros cause the DMA control value to be calculated +// at runtime rather than compile time. The size is divided by the DMA transfer +// unit size (2 or 4 bytes) and then combined with the DMA control flags using a +// bitwise OR operation. + +#define DMA_CLEAR(dmaNum, dest, size, bit) \ +{ \ + vu##bit *_dest = (vu##bit *)(dest); \ + u32 _size = size; \ + DmaFill##bit(dmaNum, 0, _dest, _size); \ +} + +#define DmaClear16(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 16) +#define DmaClear32(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 32) + +#define DMA_COPY(dmaNum, src, dest, size, bit) \ + DmaSet(dmaNum, \ + src, \ + dest, \ + (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 \ + | ((size)/(bit/8))) + +#define DmaCopy16(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 16) +#define DmaCopy32(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 32) + +#define DmaCopyLarge(dmaNum, src, dest, size, block, bit) \ +{ \ + const void *_src = src; \ + void *_dest = (void *)dest; \ + u32 _size = size; \ + while (1) \ + { \ + DmaCopy##bit(dmaNum, _src, _dest, (block)); \ + _src += (block); \ + _dest += (block); \ + _size -= (block); \ + if (_size <= (block)) \ + { \ + DmaCopy##bit(dmaNum, _src, _dest, _size); \ + break; \ + } \ + } \ +} + +#define DmaCopyLarge16(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 16) + +#define DmaCopyLarge32(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 32) + +#define DmaFillLarge(dmaNum, value, dest, size, block, bit) \ +{ \ + void *_dest = (void *)dest; \ + u32 _size = size; \ + while (1) \ + { \ + DmaFill##bit(dmaNum, value, _dest, (block)); \ + _dest += (block); \ + _size -= (block); \ + if (_size <= (block)) \ + { \ + DmaFill##bit(dmaNum, value, _dest, _size); \ + break; \ + } \ + } \ +} + +#define DmaFillLarge16(dmaNum, value, dest, size, block) DmaFillLarge(dmaNum, value, dest, size, block, 16) + +#define DmaFillLarge32(dmaNum, value, dest, size, block) DmaFillLarge(dmaNum, value, dest, size, block, 32) + +#define DmaClearLarge(dmaNum, dest, size, block, bit) \ +{ \ + void *_dest = (void *)dest; \ + u32 _size = size; \ + while (1) \ + { \ + DmaFill##bit(dmaNum, 0, _dest, (block)); \ + _dest += (block); \ + _size -= (block); \ + if (_size <= (block)) \ + { \ + DmaFill##bit(dmaNum, 0, _dest, _size); \ + break; \ + } \ + } \ +} + +#define DmaClearLarge16(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 16) + +#define DmaClearLarge32(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 32) + +#define DmaCopyDefvars(dmaNum, src, dest, size, bit) \ +{ \ + const void *_src = src; \ + void *_dest = (void *)(dest); \ + u32 _size = size; \ + DmaCopy##bit(dmaNum, _src, _dest, _size); \ +} + +#define DmaCopy16Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 16) +#define DmaCopy32Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 32) + +#define DmaFillDefvars(dmaNum, value, dest, size, bit) \ +{ \ + void *_dest = (void *)dest; \ + u32 _size = size; \ + DmaFill##bit(dmaNum, value, _dest, _size); \ +} + +#define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16) +#define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32) + +#define DmaClearDefvars(dmaNum, dest, size, bit) \ +{ \ + void *_dest = (void *)dest; \ + u32 _size = size; \ + DmaClear##bit(dmaNum, _dest, _size); \ +} + +#define DmaClear16Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 16) +#define DmaClear32Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 32) + +#define DmaStop(dmaNum) \ +{ \ + vu16 *dmaRegs = (vu16 *)REG_ADDR_DMA##dmaNum; \ + dmaRegs[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); \ + dmaRegs[5] &= ~DMA_ENABLE; \ + dmaRegs[5]; \ +} + +#define IntrEnable(flags) \ +{ \ + u16 imeTemp; \ + \ + imeTemp = REG_IME; \ + REG_IME = 0; \ + REG_IE |= flags; \ + REG_IME = imeTemp; \ +} \ +// from pokeemerald +// Maximum amount of data we will transfer in one operation +#define MAX_DMA_BLOCK_SIZE 0x1000 + +#define MAX_DMA_REQUESTS 128 + +#define DMA_REQUEST_COPY32 1 +#define DMA_REQUEST_FILL32 2 +#define DMA_REQUEST_COPY16 3 +#define DMA_REQUEST_FILL16 4 + +#define Dma3CopyLarge_(src, dest, size, bit) \ +{ \ + const void *_src = src; \ + void *_dest = (void *)dest; \ + u32 _size = size; \ + while (1) \ + { \ + if (_size <= MAX_DMA_BLOCK_SIZE) \ + { \ + DmaCopy##bit(3, _src, _dest, _size); \ + break; \ + } \ + DmaCopy##bit(3, _src, _dest, MAX_DMA_BLOCK_SIZE); \ + _src += MAX_DMA_BLOCK_SIZE; \ + _dest += MAX_DMA_BLOCK_SIZE; \ + _size -= MAX_DMA_BLOCK_SIZE; \ + } \ +} + +#define Dma3CopyLarge16_(src, dest, size) Dma3CopyLarge_(src, dest, size, 16) +#define Dma3CopyLarge32_(src, dest, size) Dma3CopyLarge_(src, dest, size, 32) + +#define Dma3FillLarge_(value, dest, size, bit) \ +{ \ + void *_dest = (void *)dest; \ + u32 _size = size; \ + while (1) \ + { \ + if (_size <= MAX_DMA_BLOCK_SIZE) \ + { \ + DmaFill##bit(3, value, _dest, _size); \ + break; \ + } \ + DmaFill##bit(3, value, _dest, MAX_DMA_BLOCK_SIZE); \ + _dest += MAX_DMA_BLOCK_SIZE; \ + _size -= MAX_DMA_BLOCK_SIZE; \ + } \ +} + +#define Dma3FillLarge16_(value, dest, size) Dma3FillLarge_(value, dest, size, 16) +#define Dma3FillLarge32_(value, dest, size) Dma3FillLarge_(value, dest, size, 32) + +#endif // GUARD_GBA_MACRO_H diff --git a/berry_fix/payload/include/gba/multiboot.h b/berry_fix/payload/include/gba/multiboot.h new file mode 100644 index 000000000..14b6594b2 --- /dev/null +++ b/berry_fix/payload/include/gba/multiboot.h @@ -0,0 +1,55 @@ +#ifndef GUARD_GBA_MULTIBOOT_H +#define GUARD_GBA_MULTIBOOT_H + +#define MULTIBOOT_NCHILD 3 // Maximum number of slaves +#define MULTIBOOT_HEADER_SIZE 0xc0 // Header size +#define MULTIBOOT_SEND_SIZE_MIN 0x100 // Minimum transmission size +#define MULTIBOOT_SEND_SIZE_MAX 0x40000 // Maximum transmission size + +struct MultiBootParam +{ + u32 system_work[5]; // 00 + u8 handshake_data; // 14 + u8 padding; // 15 + u16 handshake_timeout; // 16 + u8 probe_count; // 18 + u8 client_data[MULTIBOOT_NCHILD]; // 19 + u8 palette_data; // 1c + u8 response_bit; // 1d + u8 client_bit; // 1e + u8 reserved1; // 1f + const u8 *boot_srcp; // 20 + const u8 *boot_endp; // 24 + const u8 *masterp; + u8 *reserved2[MULTIBOOT_NCHILD]; + u32 system_work2[4]; + u8 sendflag; + u8 probe_target_bit; + u8 check_wait; + u8 server_type; +}; + +#define MULTIBOOT_ERROR_04 0x04 +#define MULTIBOOT_ERROR_08 0x08 +#define MULTIBOOT_ERROR_0c 0x0c +#define MULTIBOOT_ERROR_40 0x40 +#define MULTIBOOT_ERROR_44 0x44 +#define MULTIBOOT_ERROR_48 0x48 +#define MULTIBOOT_ERROR_4c 0x4c +#define MULTIBOOT_ERROR_80 0x80 +#define MULTIBOOT_ERROR_84 0x84 +#define MULTIBOOT_ERROR_88 0x88 +#define MULTIBOOT_ERROR_8c 0x8c +#define MULTIBOOT_ERROR_NO_PROBE_TARGET 0x50 +#define MULTIBOOT_ERROR_NO_DLREADY 0x60 +#define MULTIBOOT_ERROR_BOOT_FAILURE 0x70 +#define MULTIBOOT_ERROR_HANDSHAKE_FAILURE 0x71 + +#define MULTIBOOT_CONNECTION_CHECK_WAIT 15 + +#define MULTIBOOT_SERVER_TYPE_NORMAL 0 +#define MULTIBOOT_SERVER_TYPE_QUICK 1 + +#define MULTIBOOT_HANDSHAKE_TIMEOUT 400 + +#endif // GUARD_GBA_MULTIBOOT_H diff --git a/berry_fix/payload/include/gba/syscall.h b/berry_fix/payload/include/gba/syscall.h new file mode 100644 index 000000000..eb1bd4e20 --- /dev/null +++ b/berry_fix/payload/include/gba/syscall.h @@ -0,0 +1,57 @@ +#ifndef GUARD_GBA_SYSCALL_H +#define GUARD_GBA_SYSCALL_H + +#include "gba/types.h" + +#define RESET_EWRAM 0x01 +#define RESET_IWRAM 0x02 +#define RESET_PALETTE 0x04 +#define RESET_VRAM 0x08 +#define RESET_OAM 0x10 +#define RESET_SIO_REGS 0x20 +#define RESET_SOUND_REGS 0x40 +#define RESET_REGS 0x80 +#define RESET_ALL 0xFF + +void SoftReset(u32 resetFlags); + +void RegisterRamReset(u32 resetFlags); + +void VBlankIntrWait(void); + +u16 Sqrt(u32 num); + +u16 ArcTan2(s16 x, s16 y); + +#define CPU_SET_SRC_FIXED 0x01000000 +#define CPU_SET_16BIT 0x00000000 +#define CPU_SET_32BIT 0x04000000 + +void CpuSet(const void *src, void *dest, u32 control); + +#define CPU_FAST_SET_SRC_FIXED 0x01000000 + +void CpuFastSet(const void *src, void *dest, u32 control); + +void BgAffineSet(struct BgAffineSrcData *src, struct BgAffineDstData *dest, s32 count); + +void ObjAffineSet(struct ObjAffineSrcData *src, void *dest, s32 count, s32 offset); + +void LZ77UnCompWram(const void *src, void *dest); + +void LZ77UnCompVram(const void *src, void *dest); + +void RLUnCompWram(const void *src, void *dest); + +void RLUnCompVram(const void *src, void *dest); + +int MultiBoot(struct MultiBootParam *mp); + +void SoundBiasReset(void); + +void SoundBiasSet(void); + +u32 Div(u32 divisor, u32 dividend); +u32 Mod(u32 divisor, u32 dividend); + +#endif // GUARD_GBA_SYSCALL_H diff --git a/berry_fix/payload/include/gba/types.h b/berry_fix/payload/include/gba/types.h new file mode 100644 index 000000000..e919abc22 --- /dev/null +++ b/berry_fix/payload/include/gba/types.h @@ -0,0 +1,146 @@ +#ifndef GUARD_GBA_TYPES_H +#define GUARD_GBA_TYPES_H + +#include <stdint.h> + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; +typedef int8_t s8; +typedef int16_t s16; +typedef int32_t s32; +typedef int64_t s64; + +typedef volatile u8 vu8; +typedef volatile u16 vu16; +typedef volatile u32 vu32; +typedef volatile u64 vu64; +typedef volatile s8 vs8; +typedef volatile s16 vs16; +typedef volatile s32 vs32; +typedef volatile s64 vs64; + +typedef float f32; +typedef double f64; + +typedef u8 bool8; +typedef u16 bool16; +typedef u32 bool32; + +struct BgCnt +{ + u16 priority:2; + u16 charBaseBlock:2; + u16 dummy:2; + u16 mosaic:1; + u16 palettes:1; + u16 screenBaseBlock:5; + u16 areaOverflowMode:1; + u16 screenSize:2; +}; +typedef volatile struct BgCnt vBgCnt; + +struct PlttData +{ + u16 r:5; // red + u16 g:5; // green + u16 b:5; // blue + u16 unused_15:1; +}; + +struct OamData +{ + /*0x00*/ u32 y:8; + /*0x01*/ u32 affineMode:2; // 0x1, 0x2 -> 0x4 + u32 objMode:2; // 0x4, 0x8 -> 0xC + u32 mosaic:1; // 0x10 + u32 bpp:1; // 0x20 + u32 shape:2; // 0x40, 0x80 -> 0xC0 + + /*0x02*/ u32 x:9; + u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode + u32 size:2; + + /*0x04*/ u16 tileNum:10; // 0x3FF + u16 priority:2; // 0x400, 0x800 -> 0xC00 + u16 paletteNum:4; + /*0x06*/ u16 affineParam; +}; + +#define ST_OAM_OBJ_NORMAL 0 +#define ST_OAM_OBJ_BLEND 1 +#define ST_OAM_OBJ_WINDOW 2 + +#define ST_OAM_AFFINE_OFF 0 +#define ST_OAM_AFFINE_NORMAL 1 +#define ST_OAM_AFFINE_ERASE 2 +#define ST_OAM_AFFINE_DOUBLE 3 + +#define ST_OAM_AFFINE_ON_MASK 1 +#define ST_OAM_AFFINE_DOUBLE_MASK 2 + +#define ST_OAM_4BPP 0 +#define ST_OAM_8BPP 1 + +#define ST_OAM_SQUARE 0 +#define ST_OAM_H_RECTANGLE 1 +#define ST_OAM_V_RECTANGLE 2 + +struct BgAffineSrcData +{ + s32 texX; + s32 texY; + s16 scrX; + s16 scrY; + s16 sx; + s16 sy; + u16 alpha; +}; + +struct BgAffineDstData +{ + s16 pa; + s16 pb; + s16 pc; + s16 pd; + s32 dx; + s32 dy; +}; + +struct ObjAffineSrcData +{ + s16 xScale; + s16 yScale; + u16 rotation; +}; + +// Multi-player SIO Control Structure +struct SioMultiCnt +{ + u16 baudRate:2; // baud rate + u16 si:1; // SI terminal + u16 sd:1; // SD terminal + u16 id:2; // ID + u16 error:1; // error flag + u16 enable:1; // SIO enable + u16 unused_11_8:4; + u16 mode:2; // communication mode (should equal 2) + u16 intrEnable:1; // IRQ enable + u16 unused_15:1; + u16 data; // data +}; + +#define ST_SIO_MULTI_MODE 2 // Multi-player communication mode + +// baud rate +#define ST_SIO_9600_BPS 0 // 9600 bps +#define ST_SIO_38400_BPS 1 // 38400 bps +#define ST_SIO_57600_BPS 2 // 57600 bps +#define ST_SIO_115200_BPS 3 // 115200 bps + +typedef void (*MainCallback)(void); +typedef void (*IntrCallback)(void); +typedef void (*IntrFunc)(void); + +#endif // GUARD_GBA_TYPES_H diff --git a/berry_fix/payload/include/global.berry.h b/berry_fix/payload/include/global.berry.h new file mode 100644 index 000000000..8f185c8f9 --- /dev/null +++ b/berry_fix/payload/include/global.berry.h @@ -0,0 +1,62 @@ +#ifndef GUARD_GLOBAL_BERRY_H +#define GUARD_GLOBAL_BERRY_H + +struct Berry +{ + /*0x00*/ u8 name[7]; + /*0x07*/ u8 firmness; + /*0x08*/ u16 size; + /*0x0A*/ u8 maxYield; + /*0x0B*/ u8 minYield; + /*0x0C*/ const u8 *description1; + /*0x10*/ const u8 *description2; + /*0x14*/ u8 stageDuration; + /*0x15*/ u8 spicy; + /*0x16*/ u8 dry; + /*0x17*/ u8 sweet; + /*0x18*/ u8 bitter; + /*0x19*/ u8 sour; + /*0x1A*/ u8 smoothness; +}; + +struct EnigmaBerry +{ + /*0x000*/ struct Berry berry; + /*0x01B*/ u8 pic[(6 * 6) * TILE_SIZE_4BPP]; + /*0x49C*/ u16 palette[16]; + /*0x4BC*/ u8 description1[45]; + /*0x4E9*/ u8 description2[45]; + /*0x516*/ u8 itemEffect[18]; + /*0x528*/ u8 holdEffect; + /*0x529*/ u8 holdEffectParam; + /*0x52C*/ u32 checksum; +}; + +struct BattleEnigmaBerry +{ + /*0x00*/ u8 name[7]; + /*0x07*/ u8 holdEffect; + /*0x08*/ u8 itemEffect[18]; + /*0x1A*/ u8 holdEffectParam; +}; + +struct BerryTree +{ + /*0x00*/ u8 berry; + /*0x01*/ u8 stage:7; + /* + A berry sparkle is a state that a berry tree + can be in after growing within the player's + viewport. + */ + /*0x01*/ bool8 growthSparkle:1; + /*0x02*/ u16 minutesUntilNextStage; + /*0x04*/ u8 berryYield; + /*0x05*/ u8 regrowthCount:4; + /*0x05*/ u8 watered1:1; + /*0x05*/ u8 watered2:1; + /*0x05*/ u8 watered3:1; + /*0x05*/ u8 watered4:1; +}; + +#endif // GUARD_GLOBAL_BERRY_H diff --git a/berry_fix/payload/include/global.fieldmap.h b/berry_fix/payload/include/global.fieldmap.h new file mode 100644 index 000000000..f876e5a56 --- /dev/null +++ b/berry_fix/payload/include/global.fieldmap.h @@ -0,0 +1,317 @@ +#ifndef GUARD_GLOBAL_FIELDMAP_H +#define GUARD_GLOBAL_FIELDMAP_H + +enum +{ + CONNECTION_SOUTH = 1, + CONNECTION_NORTH, + CONNECTION_WEST, + CONNECTION_EAST, + CONNECTION_DIVE, + CONNECTION_EMERGE +}; + +typedef void (*TilesetCB)(void); + +struct Tileset +{ + /*0x00*/ bool8 isCompressed; + /*0x01*/ bool8 isSecondary; + /*0x04*/ void *tiles; + /*0x08*/ void *palettes; + /*0x0c*/ void *metatiles; + /*0x10*/ void *metatileAttributes; + /*0x14*/ TilesetCB callback; +}; + +struct MapLayout +{ + /*0x00*/ s32 width; + /*0x04*/ s32 height; + /*0x08*/ u16 *border; + /*0x0c*/ u16 *map; + /*0x10*/ struct Tileset *primaryTileset; + /*0x14*/ struct Tileset *secondaryTileset; +}; + +struct BackupMapLayout +{ + s32 width; + s32 height; + u16 *map; +}; + +struct EventObjectTemplate +{ + /*0x00*/ u8 localId; + /*0x01*/ u8 graphicsId; + /*0x02*/ u8 unk2; + /*0x04*/ s16 x; + /*0x06*/ s16 y; + /*0x08*/ u8 elevation; + /*0x09*/ u8 movementType; + /*0x0A*/ u8 movementRangeX:4; + u8 movementRangeY:4; + /*0x0C*/ u16 trainerType; + /*0x0E*/ u16 trainerRange_berryTreeId; + /*0x10*/ u8 *script; + /*0x14*/ u16 flagId; +}; + +struct WarpEvent +{ + s16 x, y; + u8 elevation; + u8 warpId; + u8 mapNum; + u8 mapGroup; +}; + +struct CoordEvent +{ + s16 x, y; + u8 elevation; + u16 trigger; + u16 index; + u8 filler_A[0x2]; + u8 *script; +}; + +struct BgEvent +{ + /*0x00*/u16 x; + /*0x02*/u16 y; + /*0x04*/u8 elevation; + /*0x05*/u8 kind; + /*0x08*/union { // carried over from diego's FR/LG work, seems to be the same struct + // in gen 3, "kind" (0x3 in BgEvent struct) determines the method to read the union. + u8 *script; + + // hidden item type + struct { + u16 item; + u16 hiddenItemId; // flag offset to determine flag lookup + } hiddenItem; + + // secret base type + u32 secretBaseId; + + } bgUnion; +}; + +struct MapEvents +{ + u8 eventObjectCount; + u8 warpCount; + u8 coordEventCount; + u8 bgEventCount; + + struct EventObjectTemplate *eventObjects; + struct WarpEvent *warps; + struct CoordEvent *coordEvents; + struct BgEvent *bgEvents; +}; + +struct MapConnection +{ + /*0x00*/ u8 direction; + /*0x01*/ u32 offset; + /*0x05*/ u8 mapGroup; + /*0x06*/ u8 mapNum; +}; + +struct MapConnections +{ + s32 count; + struct MapConnection *connections; +}; + +struct MapHeader +{ + /* 0x00 */ struct MapLayout *mapLayout; + /* 0x04 */ struct MapEvents *events; + /* 0x08 */ u8 *mapScripts; + /* 0x0C */ struct MapConnections *connections; + /* 0x10 */ u16 music; + /* 0x12 */ u16 mapLayoutId; + /* 0x14 */ u8 regionMapSectionId; + /* 0x15 */ u8 cave; + /* 0x16 */ u8 weather; + /* 0x17 */ u8 mapType; + /* 0x18 */ u8 filler_18; + /* 0x19 */ u8 escapeRope; + /* 0x1A */ u8 flags; + /* 0x1B */ u8 battleType; +}; + +struct EventObject +{ + /*0x00*/ u32 active:1; + u32 singleMovementActive:1; + u32 triggerGroundEffectsOnMove:1; + u32 triggerGroundEffectsOnStop:1; + u32 disableCoveringGroundEffects:1; // disables ground effects that cover parts of the object's sprite + u32 landingJump:1; + u32 heldMovementActive:1; + u32 heldMovementFinished:1; + /*0x01*/ u32 frozen:1; + u32 facingDirectionLocked:1; + u32 disableAnim:1; // used to disable forced movement sliding animations (like on ice) + u32 enableAnim:1; + u32 inanimate:1; + u32 invisible:1; + u32 offScreen:1; + u32 trackedByCamera:1; // only set for the player object + /*0x02*/ u32 isPlayer:1; + u32 hasReflection:1; + u32 inShortGrass:1; + u32 inShallowFlowingWater:1; + u32 inSandPile:1; + u32 inHotSprings:1; + u32 hasShadow:1; + u32 spriteAnimPausedBackup:1; + /*0x03*/ u32 spriteAffineAnimPausedBackup:1; + u32 disableJumpLandingGroundEffect:1; + u32 fixedPriority:1; + /*0x04*/ u8 spriteId; + /*0x05*/ u8 graphicsId; + /*0x06*/ u8 movementType; + /*0x07*/ u8 trainerType; + /*0x08*/ u8 localId; + /*0x09*/ u8 mapNum; + /*0x0A*/ u8 mapGroup; + /*0x0B*/ u8 currentElevation:4; + u8 previousElevation:4; + /*0x0C*/ struct Coords16 initialCoords; + /*0x10*/ struct Coords16 currentCoords; + /*0x14*/ struct Coords16 previousCoords; + /*0x18*/ u8 facingDirection:4; + /*0x18*/ u8 movementDirection:4; + /*0x19*/ union __attribute__((packed)) { + u8 as_byte; + struct __attribute__((packed)) { + u16 x:4; + u16 y:4; + } as_nybbles; + } range; + /*0x1A*/ u8 fieldEffectSpriteId; + /*0x1B*/ u8 warpArrowSpriteId; + /*0x1C*/ u8 movementActionId; + /*0x1D*/ u8 trainerRange_berryTreeId; + /*0x1E*/ u8 currentMetatileBehavior; + /*0x1F*/ u8 previousMetatileBehavior; + /*0x20*/ u8 previousMovementDirection; + /*0x21*/ u8 directionSequenceIndex; + /*0x22*/ u8 playerCopyableMovement; // used as an index to gCopyPlayerMovementFuncs for the "copy player" movement types + /*size = 0x24*/ +}; + +struct EventObjectGraphicsInfo +{ + /*0x00*/ u16 tileTag; + /*0x02*/ u16 paletteTag; + /*0x04*/ u16 bridgeReflectionPaletteTag; + /*0x06*/ u16 size; + /*0x08*/ s16 width; + /*0x0A*/ s16 height; + /*0x0C*/ u8 paletteSlot:4; + u8 shadowSize:2; + u8 inanimate:1; + u8 disableReflectionPaletteLoad:1; + /*0x0D*/ u8 tracks; + /*0x10*/ const struct OamData *oam; + /*0x14*/ const struct SubspriteTable *subspriteTables; + /*0x18*/ const union AnimCmd *const *anims; + /*0x1C*/ const struct SpriteFrameImage *images; + /*0x20*/ const union AffineAnimCmd *const *affineAnims; +}; + +#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0) +#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1) +#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2) +#define PLAYER_AVATAR_FLAG_SURFING (1 << 3) +#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4) +#define PLAYER_AVATAR_FLAG_5 (1 << 5) +#define PLAYER_AVATAR_FLAG_6 (1 << 6) +#define PLAYER_AVATAR_FLAG_DASH (1 << 7) + +enum +{ + ACRO_BIKE_NORMAL, + ACRO_BIKE_TURNING, + ACRO_BIKE_WHEELIE_STANDING, + ACRO_BIKE_BUNNY_HOP, + ACRO_BIKE_WHEELIE_MOVING, + ACRO_BIKE_STATE5, + ACRO_BIKE_STATE6, +}; + +enum +{ + DIR_NONE, + DIR_SOUTH, + DIR_NORTH, + DIR_WEST, + DIR_EAST, + DIR_SOUTHWEST, + DIR_SOUTHEAST, + DIR_NORTHWEST, + DIR_NORTHEAST, +}; + +enum +{ + COLLISION_LEDGE_JUMP = 6 +}; + +// player running states +enum +{ + NOT_MOVING, + TURN_DIRECTION, // not the same as turning! turns your avatar without moving. also known as a turn frame in some circles + MOVING, +}; + +// player tile transition states +enum +{ + T_NOT_MOVING, + T_TILE_TRANSITION, + T_TILE_CENTER, // player is on a frame in which they are centered on a tile during which the player either stops or keeps their momentum and keeps going, changing direction if necessary. +}; + +struct PlayerAvatar /* 0x202E858 */ +{ + /*0x00*/ u8 flags; + /*0x01*/ u8 unk1; // used to be named bike, but its definitely not that. seems to be some transition flags + /*0x02*/ u8 runningState; // this is a static running state. 00 is not moving, 01 is turn direction, 02 is moving. + /*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning. + /*0x04*/ u8 spriteId; + /*0x05*/ u8 eventObjectId; + /*0x06*/ bool8 preventStep; + /*0x07*/ u8 gender; + /*0x08*/ u8 acroBikeState; // 00 is normal, 01 is turning, 02 is standing wheelie, 03 is hopping wheelie + /*0x09*/ u8 newDirBackup; // during bike movement, the new direction as opposed to player's direction is backed up here. + /*0x0A*/ u8 bikeFrameCounter; // on the mach bike, when this value is 1, the bike is moving but not accelerating yet for 1 tile. on the acro bike, this acts as a timer for acro bike. + /*0x0B*/ u8 bikeSpeed; + // acro bike only + /*0x0C*/ u32 directionHistory; // up/down/left/right history is stored in each nybble, but using the field directions and not the io inputs. + /*0x10*/ u32 abStartSelectHistory; // same as above but for A + B + start + select only + // these two are timer history arrays which [0] is the active timer for acro bike. every element is backed up to the next element upon update. + /*0x14*/ u8 dirTimerHistory[8]; + /*0x1C*/ u8 abStartSelectTimerHistory[8]; +}; + +struct Camera +{ + bool8 active:1; + s32 x; + s32 y; +}; + +extern struct EventObject gMapObjects[]; +extern u8 gSelectedEventObject; +extern struct MapHeader gMapHeader; +extern struct PlayerAvatar gPlayerAvatar; + +#endif // GUARD_GLOBAL_FIELDMAP_H diff --git a/berry_fix/payload/include/global.h b/berry_fix/payload/include/global.h new file mode 100644 index 000000000..c218b5f4e --- /dev/null +++ b/berry_fix/payload/include/global.h @@ -0,0 +1,875 @@ +#ifndef GUARD_GLOBAL_H +#define GUARD_GLOBAL_H + +#include "gba/gba.h" + +// global.h from pokemon ruby + +// IDE support +#if defined(__APPLE__) || defined(__CYGWIN__) +#define _(x) x +#define __(x) x +#define INCBIN(x) {0} +#define INCBIN_U8 INCBIN +#define INCBIN_U16 INCBIN +#define INCBIN_U32 INCBIN +#define INCBIN_S8 INCBIN +#define INCBIN_S16 INCBIN +#define INCBIN_S32 INCBIN +#endif + +// Prevent cross-jump optimization. +#define BLOCK_CROSS_JUMP asm(""); + +// to help in decompiling +#define asm_comment(x) asm volatile("@ -- " x " -- ") + +#define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided\n") + +#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0])) + + +#define POKEMON_SLOTS_NUMBER 412 +#define POKEMON_NAME_LENGTH 10 +#define OT_NAME_LENGTH 7 + +#define min(a, b) ((a) < (b) ? (a) : (b)) +#define max(a, b) ((a) >= (b) ? (a) : (b)) + +// why does GF hate 2d arrays +#define MULTI_DIM_ARR(x, dim, y) ((x) * dim + (y)) + +// dim access enums +enum +{ + B_8 = 1, + B_16 = 2, + B_32 = 4 +}; + +// There are many quirks in the source code which have overarching behavioral differences from +// a number of other files. For example, diploma.c seems to declare rodata before each use while +// other files declare out of order and must be at the beginning. There are also a number of +// macros which differ from one file to the next due to the method of obtaining the result, such +// as these below. Because of this, there is a theory (Two Team Theory) that states that these +// programming projects had more than 1 "programming team" which utilized different macros for +// each of the files that were worked on. +#define T1_READ_8(ptr) ((ptr)[0]) +#define T1_READ_16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) +#define T1_READ_32(ptr) ((ptr)[0] | ((ptr)[1] << 8) | ((ptr)[2] << 16) | ((ptr)[3] << 24)) +#define T1_READ_PTR(ptr) (u8*) T1_READ_32(ptr) + +// T2_READ_8 is a duplicate to remain consistent with each group. +#define T2_READ_8(ptr) ((ptr)[0]) +#define T2_READ_16(ptr) ((ptr)[0] + ((ptr)[1] << 8)) +#define T2_READ_32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) +#define T2_READ_PTR(ptr) (void*) T2_READ_32(ptr) + +// Credits to Made (dolphin emoji) +#define S16TOPOSFLOAT(val) \ +({ \ + s16 v = (val); \ + float f = (float)v; \ + if(v < 0) f += 65536.0f; \ + f; \ +}) + +enum +{ + VERSION_SAPPHIRE = 1, + VERSION_RUBY = 2, + VERSION_EMERALD = 3, +}; + +enum LanguageId +{ + LANGUAGE_JAPANESE = 1, + LANGUAGE_ENGLISH = 2, + LANGUAGE_GERMAN = 5, +}; + +// capacities of various saveblock objects +#define DAYCARE_MON_COUNT 2 +#define POKEBLOCKS_COUNT 40 +#define PARTY_SIZE 6 +#define EVENT_OBJECTS_COUNT 16 +#define BERRY_TREES_COUNT 128 +#define FLAGS_COUNT 288 +#define VARS_COUNT 256 +#define MAIL_COUNT 16 +#define SECRET_BASES_COUNT 20 +#define TV_SHOWS_COUNT 25 +#define POKE_NEWS_COUNT 16 +#define PC_ITEMS_COUNT 50 +#define BAG_ITEMS_COUNT 20 +#define BAG_KEYITEMS_COUNT 20 +#define BAG_POKEBALLS_COUNT 16 +#define BAG_TMHM_COUNT 64 +#define BAG_BERRIES_COUNT 46 + +enum +{ + MALE, + FEMALE +}; + +enum +{ + OPTIONS_BUTTON_MODE_NORMAL, + OPTIONS_BUTTON_MODE_LR, + OPTIONS_BUTTON_MODE_L_EQUALS_A +}; + +enum +{ + OPTIONS_TEXT_SPEED_SLOW, + OPTIONS_TEXT_SPEED_MID, + OPTIONS_TEXT_SPEED_FAST +}; + +enum +{ + OPTIONS_SOUND_MONO, + OPTIONS_SOUND_STEREO +}; + +enum +{ + OPTIONS_BATTLE_STYLE_SHIFT, + OPTIONS_BATTLE_STYLE_SET +}; + +enum +{ + BAG_ITEMS = 1, + BAG_POKEBALLS, + BAG_TMsHMs, + BAG_BERRIES, + BAG_KEYITEMS +}; + +struct Coords16 +{ + s16 x; + s16 y; +}; + +struct UCoords16 +{ + u16 x; + u16 y; +}; + +struct SecretBaseRecord +{ + /*0x1A08*/ u8 secretBaseId; + /*0x1A09*/ u8 sbr_field_1_0:4; + /*0x1A09*/ u8 gender:1; + /*0x1A09*/ u8 sbr_field_1_5:1; + /*0x1A09*/ u8 sbr_field_1_6:2; + /*0x1A0A*/ u8 playerName[OT_NAME_LENGTH]; + /*0x1A11*/ u8 trainerId[4]; // byte 0 is used for determining trainer class + /*0x1A16*/ u16 sbr_field_e; + /*0x1A18*/ u8 sbr_field_10; + /*0x1A19*/ u8 sbr_field_11; + /*0x1A1A*/ u8 decorations[16]; + /*0x1A2A*/ u8 decorationPos[16]; + /*0x1A3C*/ u32 partyPersonality[6]; + /*0x1A54*/ u16 partyMoves[6 * 4]; + /*0x1A84*/ u16 partySpecies[6]; + /*0x1A90*/ u16 partyHeldItems[6]; + /*0x1A9C*/ u8 partyLevels[6]; + /*0x1AA2*/ u8 partyEVs[6]; +}; + +#include "constants/game_stat.h" +#include "global.fieldmap.h" +#include "global.berry.h" +#include "pokemon.h" + +struct WarpData +{ + s8 mapGroup; + s8 mapNum; + s8 warpId; + s16 x, y; +}; + +struct ItemSlot +{ + u16 itemId; + u16 quantity; +}; + +struct Pokeblock +{ + u8 color; + u8 spicy; + u8 dry; + u8 sweet; + u8 bitter; + u8 sour; + u8 feel; +}; + +struct Roamer +{ + /*0x00*/ u32 ivs; + /*0x04*/ u32 personality; + /*0x08*/ u16 species; + /*0x0A*/ u16 hp; + /*0x0C*/ u8 level; + /*0x0D*/ u8 status; + /*0x0E*/ u8 cool; + /*0x0F*/ u8 beauty; + /*0x10*/ u8 cute; + /*0x11*/ u8 smart; + /*0x12*/ u8 tough; + /*0x13*/ bool8 active; + /*0x14*/ u8 filler[0x8]; +}; + +struct RamScriptData +{ + u8 magic; + u8 mapGroup; + u8 mapNum; + u8 objectId; + u8 script[995]; +}; + +struct RamScript +{ + u32 checksum; + struct RamScriptData data; +}; + +struct EasyChatPair +{ + u16 unk0_0:7; + u16 unk0_7:7; + u16 unk1_6:1; + u16 unk2; + u16 words[2]; +}; /*size = 0x8*/ + +struct TVShowCommon +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u8 pad02[20]; + /*0x16*/ u16 var16[3]; + /*0x1C*/ u8 srcTrainerId3Lo; + /*0x1D*/ u8 srcTrainerId3Hi; + /*0x1E*/ u8 srcTrainerId2Lo; + /*0x1F*/ u8 srcTrainerId2Hi; + /*0x20*/ u8 srcTrainerIdLo; + /*0x21*/ u8 srcTrainerIdHi; + /*0x22*/ u8 trainerIdLo; + /*0x23*/ u8 trainerIdHi; +}; + +struct TVShowFanClubLetter +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u16 species; + /*0x04*/ u16 pad04[6]; + /*0x10*/ u8 playerName[8]; + /*0x18*/ u8 language; +}; + +struct TVShowRecentHappenings +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u16 var02; + /*0x04*/ u16 var04[6]; + /*0x10*/ u8 playerName[8]; + /*0x18*/ u8 language; + /*0x19*/ u8 pad19[10]; +}; + +struct TVShowFanclubOpinions +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u16 var02; + /*0x04*/ u8 var04A:4; + /*0x04*/ u8 var04B:4; + /*0x05*/ u8 playerName[8]; + /*0x0D*/ u8 language; + /*0x0E*/ u8 var0E; + /*0x0F*/ u8 var0F; + /*0x10*/ u8 var10[8]; + /*0x18*/ u16 var18[2]; + /*0x1C*/ u16 var1C[4]; +}; + +struct TVShowUnknownType04 +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u8 pad02[4]; + /*0x06*/ u16 var06; +}; + +struct TVShowNameRaterShow +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u16 species; + /*0x04*/ u8 pokemonName[11]; + /*0x0F*/ u8 trainerName[11]; + /*0x1A*/ u8 random; + /*0x1B*/ u8 random2; + /*0x1C*/ u16 var1C; + /*0x1E*/ u8 language; + /*0x1F*/ u8 pokemonNameLanguage; +}; + +struct TVShowBravoTrainerPokemonProfiles +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u16 species; + /*0x04*/ u16 var04[2]; + /*0x08*/ u8 pokemonNickname[11]; + /*0x13*/ u8 contestCategory:3; + /*0x13*/ u8 contestRank:2; + /*0x13*/ u8 contestResult:2; + /*0x13*/ u8 var13_7:1; + /*0x14*/ u16 var14; + /*0x16*/ u8 playerName[8]; + /*0x1E*/ u8 language; + /*0x1F*/ u8 var1f; +}; + +struct TVShowBravoTrainerBattleTowerSpotlight +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u8 trainerName[8]; + /*0x0A*/ u16 species; + /*0x0C*/ u8 enemyTrainerName[8]; + /*0x14*/ u16 defeatedSpecies; + /*0x16*/ u16 var16; + /*0x18*/ u16 var18[1]; + /*0x1A*/ u8 btLevel; + /*0x1B*/ u8 var1b; + /*0x1C*/ u8 var1c; + /*0x1D*/ u8 language; +}; + +struct TVShowPokemonToday +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u8 language; + /*0x03*/ u8 language2; + /*0x04*/ u8 nickname[11]; + /*0x0F*/ u8 ball; + /*0x10*/ u16 species; + /*0x12*/ u8 var12; + /*0x13*/ u8 playerName[8]; +}; + +struct TVShowSmartShopper +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u8 priceReduced; + /*0x03*/ u8 language; + /*0x04*/ u8 pad04[2]; + /*0x06*/ u16 itemIds[3]; + /*0x0C*/ u16 itemAmounts[3]; + /*0x12*/ u8 shopLocation; + /*0x13*/ u8 playerName[8]; +}; + +struct TVShowPokemonTodayFailed +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u8 language; + /*0x03*/ u8 pad03[9]; + /*0x0c*/ u16 species; + /*0x0e*/ u16 species2; + /*0x10*/ u8 var10; + /*0x11*/ u8 var11; + /*0x12*/ u8 var12; + /*0x13*/ u8 playerName[8]; +}; + +struct TVShowPokemonAngler +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u8 var02; + /*0x03*/ u8 var03; + /*0x04*/ u16 var04; + /*0x06*/ u8 language; + u8 pad07[12]; + /*0x13*/ u8 playerName[8]; +}; + +struct TVShowWorldOfMasters +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u16 var02; + /*0x04*/ u16 var04; + /*0x06*/ u16 var06; + /*0x08*/ u16 var08; + /*0x0a*/ u8 var0a; + /*0x0b*/ u8 language; + u8 pad0c[7]; + /*0x13*/ u8 playerName[8]; +}; + +struct TVShowMassOutbreak +{ + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u8 var02; + /*0x03*/ u8 var03; + /*0x04*/ u16 moves[4]; + /*0x0C*/ u16 species; + /*0x0E*/ u16 var0E; + /*0x10*/ u8 locationMapNum; + /*0x11*/ u8 locationMapGroup; + /*0x12*/ u8 var12; + /*0x13*/ u8 probability; + /*0x14*/ u8 level; + /*0x15*/ u8 var15; + /*0x16*/ u16 daysLeft; + /*0x18*/ u8 language; + u8 pad19[11]; +}; + +typedef union TVShow +{ + struct TVShowCommon common; + struct TVShowFanClubLetter fanclubLetter; + struct TVShowRecentHappenings recentHappenings; + struct TVShowFanclubOpinions fanclubOpinions; + struct TVShowUnknownType04 unkShow04; + struct TVShowNameRaterShow nameRaterShow; + struct TVShowBravoTrainerPokemonProfiles bravoTrainer; + struct TVShowBravoTrainerBattleTowerSpotlight bravoTrainerTower; + struct TVShowPokemonToday pokemonToday; + struct TVShowSmartShopper smartshopperShow; + struct TVShowPokemonTodayFailed pokemonTodayFailed; + struct TVShowPokemonAngler pokemonAngler; + struct TVShowWorldOfMasters worldOfMasters; + struct TVShowMassOutbreak massOutbreak; +} TVShow; + +struct MailStruct +{ + /*0x00*/ u16 words[9]; + /*0x12*/ u8 playerName[8]; + /*0x1A*/ u8 trainerId[4]; + /*0x1E*/ u16 species; + /*0x20*/ u16 itemId; +}; + + +// Mauville Pokemon Center men + +struct MauvilleManCommon +{ + u8 id; +}; + +struct MauvilleManBard +{ + /*0x00*/ u8 id; + /*0x02*/ u16 songLyrics[6]; + /*0x0E*/ u16 temporaryLyrics[6]; + /*0x1A*/ u8 playerName[8]; + /*0x22*/ u8 filler_2DB6[0x3]; + /*0x25*/ u8 playerTrainerId[4]; + /*0x29*/ bool8 hasChangedSong; +}; /*size = 0x2C*/ + +struct MauvilleManHipster +{ + u8 id; + bool8 alreadySpoken; +}; + +struct MauvilleManTrader +{ + u8 id; + u8 unk1[4]; + u8 unk5[4][11]; + bool8 alreadyTraded; +}; + +struct MauvilleManStoryteller +{ + u8 id; + bool8 alreadyRecorded; + u8 filler2[2]; + u8 gameStatIDs[4]; + u8 trainerNames[4][7]; + u8 statValues[4][4]; +}; + +struct MauvilleManGiddy +{ + /*0x00*/ u8 id; + /*0x01*/ u8 taleCounter; + /*0x02*/ u8 questionNum; + /*0x04*/ u16 randomWords[10]; + /*0x18*/ u8 questionList[12]; +}; /*size = 0x2C*/ + + +union MauvilleMan +{ + struct MauvilleManCommon common; + struct MauvilleManBard bard; + struct MauvilleManHipster hipster; + struct MauvilleManTrader trader; + struct MauvilleManStoryteller storyteller; + struct MauvilleManGiddy giddy; + u8 filler[0x40]; // needed to pad out the struct +}; + +struct PokeNews +{ + u8 kind; + u8 state; + u16 days; +}; + +struct GabbyAndTyData +{ + /*2b10*/ u16 mon1; + /*2b12*/ u16 mon2; + /*2b14*/ u16 lastMove; + /*2b16*/ u16 quote; + /*2b18*/ u8 mapnum; + /*2b19*/ u8 battleNum; + /*2b1a*/ u8 valA_0:1; + /*2b1a*/ u8 valA_1:1; + /*2b1a*/ u8 valA_2:1; + /*2b1a*/ u8 valA_3:1; + /*2b1a*/ u8 valA_4:1; + /*2b1a*/ u8 valA_5:3; + /*2b1b*/ u8 valB_0:1; + /*2b1b*/ u8 valB_1:1; + /*2b1b*/ u8 valB_2:1; + /*2b1b*/ u8 valB_3:1; + /*2b1b*/ u8 valB_4:1; + /*2b1b*/ u8 valB_5:3; +}; + +struct DayCareMail +{ + /*0x00*/ struct MailStruct message; + /*0x24*/ u8 names[19]; +}; + +struct DayCareStepCountersEtc { + u32 steps[DAYCARE_MON_COUNT]; + u16 pendingEggPersonality; + u8 eggCycleStepsRemaining; +}; + +struct RecordMixingDayCareMail +{ + struct DayCareMail mail[DAYCARE_MON_COUNT]; + u32 numDaycareMons; + u16 itemsHeld[DAYCARE_MON_COUNT]; // marks whether or not each daycare mon is currently holding an item. +}; + +struct DayCareMisc +{ + struct DayCareMail mail[DAYCARE_MON_COUNT]; + struct DayCareStepCountersEtc countersEtc; +}; + +struct DayCare { + struct BoxPokemon mons[DAYCARE_MON_COUNT]; + struct DayCareMisc misc; +}; + +struct LinkBattleRecord +{ + u8 name[8]; + u16 trainerId; + u16 wins; + u16 losses; + u16 draws; +}; + +struct RecordMixingGiftData +{ + u8 unk0; + u8 quantity; + u16 itemId; + u8 filler4[8]; +}; + +struct RecordMixingGift +{ + int checksum; + struct RecordMixingGiftData data; +}; + +struct ContestWinner +{ + /*0x00*/ u32 personality; // personality + /*0x04*/ u32 otId; // otId + /*0x08*/ u16 species; // species + /*0x0A*/ u8 contestCategory; + /*0x0B*/ u8 nickname[11]; + /*0x16*/ u8 trainerName[8]; +}; + +// there should be enough flags for all 412 slots +// each slot takes up 8 flags +// if the value is not divisible by 8, we need to account for the reminder as well +#define DEX_FLAGS_NO ((POKEMON_SLOTS_NUMBER / 8) + ((POKEMON_SLOTS_NUMBER % 8) ? 1 : 0)) + +struct SaveBlock1 /* 0x02025734 */ +{ + /*0x00*/ struct Coords16 pos; + /*0x04*/ struct WarpData location; + /*0x0C*/ struct WarpData warp1; + /*0x14*/ struct WarpData warp2; + /*0x1C*/ struct WarpData lastHealLocation; + /*0x24*/ struct WarpData warp4; + /*0x2C*/ u16 savedMusic; + /*0x2E*/ u8 weather; + /*0x2F*/ u8 weatherCycleStage; + /*0x30*/ u8 flashLevel; // flash level on current map, 0 being normal and 4 being the darkest + /*0x32*/ u16 mapLayoutId; + /*0x34*/ u16 mapView[0x100]; + /*0x234*/ u8 playerPartyCount; + /*0x238*/ struct Pokemon playerParty[6]; + /*0x490*/ u32 money; + /*0x494*/ u16 coins; + /*0x496*/ u16 registeredItem; // registered for use with SELECT button + /*0x498*/ struct ItemSlot pcItems[PC_ITEMS_COUNT]; + /*0x560*/ struct ItemSlot bagPocket_Items[BAG_ITEMS_COUNT]; + /*0x5B0*/ struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT]; + /*0x600*/ struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT]; + /*0x640*/ struct ItemSlot bagPocket_TMHM[BAG_TMHM_COUNT]; + /*0x740*/ struct ItemSlot bagPocket_Berries[BAG_BERRIES_COUNT]; + /*0x7F8*/ struct Pokeblock pokeblocks[POKEBLOCKS_COUNT]; + /*0x938*/ u8 dexSeen2[DEX_FLAGS_NO]; + /*0x96C*/ u16 berryBlenderRecords[3]; + /*0x972*/ u8 filler_972[0x6]; + /*0x978*/ u16 trainerRematchStepCounter; + /*0x97A*/ u8 trainerRematches[100]; + /*0x9E0*/ struct EventObject eventObjects[EVENT_OBJECTS_COUNT]; + /*0xC20*/ struct EventObjectTemplate eventObjectTemplates[64]; + /*0x1220*/ u8 flags[FLAGS_COUNT]; + /*0x1340*/ u16 vars[VARS_COUNT]; + /*0x1540*/ u32 gameStats[NUM_GAME_STATS]; + /*0x1608*/ struct BerryTree berryTrees[BERRY_TREES_COUNT]; + /*0x1A08*/ struct SecretBaseRecord secretBases[SECRET_BASES_COUNT]; + /*0x2688*/ u8 playerRoomDecor[12]; + /*0x2694*/ u8 playerRoomDecorPos[12]; + /*0x26A0*/ u8 decorDesk[10]; + /*0x26AA*/ u8 decorChair[10]; + /*0x26B4*/ u8 decorPlant[10]; + /*0x26BE*/ u8 decorOrnament[30]; + /*0x26DC*/ u8 decorMat[30]; + /*0x26FA*/ u8 decorPoster[10]; + /*0x2704*/ u8 decorDoll[40]; + /*0x272C*/ u8 decorCushion[10]; + /*0x2736*/ u8 padding_2736[2]; + /*0x2738*/ TVShow tvShows[TV_SHOWS_COUNT]; + /*0x2ABC*/ struct PokeNews pokeNews[POKE_NEWS_COUNT]; + /*0x2AFC*/ u16 outbreakPokemonSpecies; + /*0x2AFE*/ u8 outbreakLocationMapNum; + /*0x2AFF*/ u8 outbreakLocationMapGroup; + /*0x2B00*/ u8 outbreakPokemonLevel; + /*0x2B01*/ u8 outbreakUnk1; + /*0x2B02*/ u16 outbreakUnk2; + /*0x2B04*/ u16 outbreakPokemonMoves[4]; + /*0x2B0C*/ u8 outbreakUnk4; + /*0x2B0D*/ u8 outbreakPokemonProbability; + /*0x2B0E*/ u16 outbreakUnk5; + /*0x2B10*/ struct GabbyAndTyData gabbyAndTyData; + /*0x2B1C*/ struct { + /*0x2B1C*/ u16 unk2B1C[6]; + /*0x2B28*/ u16 unk2B28[6]; + /*0x2B34*/ u16 unk2B34[6]; + /*0x2B40*/ u16 unk2B40[6]; + } easyChats; + /*0x2B4C*/ struct MailStruct mail[MAIL_COUNT]; + /*0x2D8C*/ u8 unk2D8C[4]; // What is this? Apparently it's supposed to be 64 bytes in size. + /*0x2D90*/ u8 filler_2D90[0x4]; + /*0x2D94*/ union MauvilleMan mauvilleMan; + /*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff + /*0x2DFC*/ struct ContestWinner contestWinners[8]; + /*0x2EFC*/ struct ContestWinner museumPortraits[5]; + /*0x2F9C*/ struct DayCare daycare; + /*0x30B8*/ struct LinkBattleRecord linkBattleRecords[5]; + struct { + /*0x3108*/ u8 unknown1[8]; + /*0x3110*/ u8 giftRibbons[11]; + /*0x311B*/ u8 unknown2[8]; + /*0x3123*/ u32 currentPokeCoupons; + /*0x3127*/ u32 totalEarnedPokeCoupons; + /*0x312B*/ u8 unknown3[6]; + /*0x3131*/ u8 receivedWishmakerJirachi; + /*0x3132*/ u8 unknown4[18]; + } __attribute__((packed)) externalReservedData; + /*0x3144*/ struct Roamer roamer; + /*0x3160*/ struct EnigmaBerry enigmaBerry; + /*0x3690*/ struct RamScript ramScript; + /*0x3A7C*/ struct RecordMixingGift recordMixingGift; + /*0x3A8C*/ u8 dexSeen3[DEX_FLAGS_NO]; +}; + +extern struct SaveBlock1 gSaveBlock1; + +struct Time +{ + /*0x00*/ s16 days; + /*0x02*/ s8 hours; + /*0x03*/ s8 minutes; + /*0x04*/ s8 seconds; +}; + +struct Pokedex +{ + /*0x00*/ u8 order; + /*0x01*/ u8 unknown1; + /*0x02*/ u8 nationalMagic; // must equal 0xDA in order to have National mode + /*0x03*/ u8 unknown2; + /*0x04*/ u32 unownPersonality; // set when you first see Unown + /*0x08*/ u32 spindaPersonality; // set when you first see Spinda + /*0x0C*/ u32 unknown3; + /*0x10*/ u8 owned[DEX_FLAGS_NO]; + /*0x44*/ u8 seen[DEX_FLAGS_NO]; +}; + +struct BattleTowerTrainer +{ + /*0x00*/ u8 trainerClass; + /*0x01*/ u8 name[8]; + /*0x09*/ u8 teamFlags; + u8 filler0A[2]; + /*0x0C*/ u16 greeting[6]; +}; + +struct BattleTowerRecord // record mixing +{ + /*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100 + /*0x01*/ u8 trainerClass; + /*0x02*/ u16 winStreak; + /*0x04*/ u8 name[8]; + /*0x0C*/ u8 trainerId[4]; + /*0x10*/ u16 greeting[6]; + /*0x1C*/ struct BattleTowerPokemon party[3]; + /*0xA0*/ u32 checksum; +}; + +struct BattleTowerEReaderTrainer +{ + /*0x00*/ u8 unk0; + /*0x01*/ u8 trainerClass; + /*0x02*/ u16 winStreak; + /*0x04*/ u8 name[8]; + /*0x0C*/ u8 trainerId[4]; + /*0x10*/ u16 greeting[6]; + /*0x1C*/ u16 farewellPlayerLost[6]; + /*0x28*/ u16 farewellPlayerWon[6]; + /*0x34*/ struct BattleTowerPokemon party[3]; + /*0xB8*/ u32 checksum; +}; + +struct BattleTowerData +{ + /*0x0000, 0x00A8*/ struct BattleTowerRecord playerRecord; + /*0x00A4, 0x014C*/ struct BattleTowerRecord records[5]; // from record mixing + /*0x03D8, 0x0480*/ u16 firstMonSpecies; // species of the first pokemon in the player's battle tower party + /*0x03DA, 0x0482*/ u16 defeatedBySpecies; // species of the pokemon that defated the player + /*0x03DC, 0x0484*/ u8 defeatedByTrainerName[8]; + /*0x03E4, 0x048C*/ u8 firstMonNickname[POKEMON_NAME_LENGTH]; // nickname of the first pokemon in the player's battle tower party + /*0x03F0, 0x0498*/ struct BattleTowerEReaderTrainer ereaderTrainer; + /*0x04AC, 0x0554*/ u8 battleTowerLevelType:1; // 0 = level 50; 1 = level 100 + /*0x04AC, 0x0554*/ u8 unk_554:1; + /*0x04AD, 0x0555*/ u8 battleOutcome; + /*0x04AE, 0x0556*/ u8 var_4AE[2]; + /*0x04B0, 0x0558*/ u16 curChallengeBattleNum[2]; // 1-based index of battle in the current challenge. (challenges consist of 7 battles) + /*0x04B4, 0x055C*/ u16 curStreakChallengesNum[2]; // 1-based index of the current challenge in the current streak. + /*0x04B8, 0x0560*/ u16 recordWinStreaks[2]; + /*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table + /*0x04BD, 0x0565*/ u8 selectedPartyMons[0x3]; // indices of the 3 selected player party mons. + /*0x04C0, 0x0568*/ u16 prizeItem; + /*0x04C2, 0x056A*/ u8 battledTrainerIds[6]; + /*0x04C8, 0x0570*/ u16 totalBattleTowerWins; + /*0x04CA, 0x0572*/ u16 bestBattleTowerWinStreak; + /*0x04CC, 0x0574*/ u16 currentWinStreaks[2]; + /*0x04D0, 0x0578*/ u8 lastStreakLevelType; // 0 = level 50, 1 = level 100. level type of the last streak. Used by tv to report the level mode. + /*0x04D1, 0x0579*/ u8 filler_4D1[0x317]; +}; + +struct SaveBlock2 /* 0x02024EA4 */ +{ + /*0x00*/ u8 playerName[8]; + /*0x08*/ u8 playerGender; // MALE, FEMALE + /*0x09*/ u8 specialSaveWarp; + /*0x0A*/ u8 playerTrainerId[4]; + /*0x0E*/ u16 playTimeHours; + /*0x10*/ u8 playTimeMinutes; + /*0x11*/ u8 playTimeSeconds; + /*0x12*/ u8 playTimeVBlanks; + /*0x13*/ u8 optionsButtonMode; // OPTIONS_BUTTON_MODE_[NORMAL/LR/L_EQUALS_A] + /*0x14*/ u16 optionsTextSpeed:3; // OPTIONS_TEXT_SPEED_[SLOW/MID/FAST] + u16 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes + u16 optionsSound:1; // OPTIONS_SOUND_[MONO/STEREO] + u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET] + u16 optionsBattleSceneOff:1; // whether battle animations are disabled + u16 regionMapZoom:1; // whether the map is zoomed in + /*0x18*/ struct Pokedex pokedex; + /*0x90*/ u8 filler_90[0x8]; + /*0x98*/ struct Time localTimeOffset; + /*0xA0*/ struct Time lastBerryTreeUpdate; + /*0xA8*/ struct BattleTowerData battleTower; +}; + +struct MapPosition +{ + s16 x; + s16 y; + s8 height; +}; + +struct UnkStruct_8054FF8 +{ + u8 a; + u8 b; + u8 c; + u8 d; + struct MapPosition sub; + u16 field_C; +}; + +// wasnt defined so I had to define it +struct HallOfFame +{ + u8 filler[0x1F00]; +}; + +extern struct SaveBlock2 gSaveBlock2; + +#define RomHeaderGameTitle ((const char *)0x080000A0) +#define RomHeaderGameCode ((const char *)0x080000AC) +#define RomHeaderMakerCode ((const char *)0x080000B0) +#define RomHeaderMagic ((const u8 *) 0x080000B2) +#define RomHeaderSoftwareVersion ((const u8 *) 0x080000BC) + +#define LocalTimeOffset ((struct Time *)0x02028098) +#define LastBerryTreeUpdate ((struct Time *)0x020280A0) + +#endif //GUARD_GLOBAL_H diff --git a/berry_fix/payload/include/main.h b/berry_fix/payload/include/main.h new file mode 100644 index 000000000..cb58d5982 --- /dev/null +++ b/berry_fix/payload/include/main.h @@ -0,0 +1,45 @@ +#ifndef GUARD_MAIN_H +#define GUARD_MAIN_H + +#include "gba/gba.h" + +enum RomHeaderValidationResult +{ + SAPPHIRE_UPDATABLE = 2, + RUBY_UPDATABLE, + SAPPHIRE_NONEED, + RUBY_NONEED, + INVALID +}; + +enum MainCallbackState +{ + MAINCB_INIT = 0, + MAINCB_CHECK_RTC, + MAINCB_CHECK_FLASH, + MAINCB_READ_SAVE, + MAINCB_CHECK_TIME, + MAINCB_FIX_DATE, + MAINCB_NO_NEED_TO_FIX, + MAINCB_YEAR_MAKES_NO_SENSE, + MAINCB_FINISHED, + MAINCB_CHECK_PACIFIDLOG_TM, + MAINCB_FIX_PACIFIDLOG_TM, + MAINCB_ERROR +}; + +extern IntrFunc gIntrTable[]; +extern u16 gHeldKeys; +extern u16 gNewKeys; +extern u8 gIntrVector[]; +extern u32 gUpdateSuccessful; +extern u32 gUnknown_3001194; +extern u32 gUnknown_30011A0[]; +extern u32 gMainCallbackState; +extern u32 gGameVersion; + +extern u8 gSharedMem[0x8000]; + +extern const IntrFunc gIntrFuncPointers[]; + +#endif //GUARD_MAIN_H diff --git a/berry_fix/payload/include/pokemon.h b/berry_fix/payload/include/pokemon.h new file mode 100644 index 000000000..d3a14ffff --- /dev/null +++ b/berry_fix/payload/include/pokemon.h @@ -0,0 +1,154 @@ +#ifndef GUARD_POKEMON_H +#define GUARD_POKEMON_H + +struct PokemonSubstruct0 +{ + u16 species; + u16 heldItem; + u32 experience; + u8 ppBonuses; + u8 friendship; +}; + +struct PokemonSubstruct1 +{ + u16 moves[4]; + u8 pp[4]; +}; + +struct PokemonSubstruct2 +{ + u8 hpEV; + u8 attackEV; + u8 defenseEV; + u8 speedEV; + u8 spAttackEV; + u8 spDefenseEV; + u8 cool; + u8 beauty; + u8 cute; + u8 smart; + u8 tough; + u8 sheen; +}; + +struct PokemonSubstruct3 +{ + /*0x00*/ u8 pokerus; + /*0x01*/ u8 metLocation; + + /*0x02*/ u16 metLevel:7; + /*0x02*/ u16 metGame:4; + /*0x03*/ u16 pokeball:4; + /*0x03*/ u16 otGender:1; + + /*0x04*/ u32 hpIV:5; + /*0x04*/ u32 attackIV:5; + /*0x05*/ u32 defenseIV:5; + /*0x05*/ u32 speedIV:5; + /*0x05*/ u32 spAttackIV:5; + /*0x06*/ u32 spDefenseIV:5; + /*0x07*/ u32 isEgg:1; + /*0x07*/ u32 altAbility:1; + + /*0x08*/ u32 coolRibbon:3; + /*0x08*/ u32 beautyRibbon:3; + /*0x08*/ u32 cuteRibbon:3; + /*0x09*/ u32 smartRibbon:3; + /*0x09*/ u32 toughRibbon:3; + /*0x09*/ u32 championRibbon:1; + /*0x0A*/ u32 winningRibbon:1; + /*0x0A*/ u32 victoryRibbon:1; + /*0x0A*/ u32 artistRibbon:1; + /*0x0A*/ u32 effortRibbon:1; + /*0x0A*/ u32 giftRibbon1:1; + /*0x0A*/ u32 giftRibbon2:1; + /*0x0A*/ u32 giftRibbon3:1; + /*0x0A*/ u32 giftRibbon4:1; + /*0x0B*/ u32 giftRibbon5:1; + /*0x0B*/ u32 giftRibbon6:1; + /*0x0B*/ u32 giftRibbon7:1; + /*0x0B*/ u32 fatefulEncounter:5; // unused in Ruby/Sapphire, but the high bit must be set for Mew/Deoxys to obey in FR/LG/Emerald +}; + +union PokemonSubstruct +{ + struct PokemonSubstruct0 type0; + struct PokemonSubstruct1 type1; + struct PokemonSubstruct2 type2; + struct PokemonSubstruct3 type3; + u16 raw[6]; +}; + +struct BoxPokemon +{ + /*0x00*/ u32 personality; + /*0x04*/ u32 otId; + /*0x08*/ u8 nickname[POKEMON_NAME_LENGTH]; + /*0x12*/ u8 language; + /*0x13*/ u8 isBadEgg:1; + u8 hasSpecies:1; + u8 isEgg:1; + /*0x14*/ u8 otName[OT_NAME_LENGTH]; + /*0x1B*/ u8 markings; + /*0x1C*/ u16 checksum; + /*0x1E*/ u16 unknown; + + union + { + u32 raw[12]; + union PokemonSubstruct substructs[4]; + } secure; +}; /*size = 0x50*/ + +struct Pokemon +{ + /*0x00*/ struct BoxPokemon box; + /*0x50*/ u32 status; + /*0x54*/ u8 level; + /*0x55*/ u8 mail; + /*0x56*/ u16 hp; + /*0x58*/ u16 maxHP; + /*0x5A*/ u16 attack; + /*0x5C*/ u16 defense; + /*0x5E*/ u16 speed; + /*0x60*/ u16 spAttack; + /*0x62*/ u16 spDefense; +}; + +struct BattleTowerPokemon +{ + /*0x00*/u16 species; + /*0x02*/u16 heldItem; + /*0x04*/u16 moves[4]; + /*0x0C*/u8 level; + /*0x0D*/u8 ppBonuses; + /*0x0E*/u8 hpEV; + /*0x0F*/u8 attackEV; + /*0x10*/u8 defenseEV; + /*0x11*/u8 speedEV; + /*0x12*/u8 spAttackEV; + /*0x13*/u8 spDefenseEV; + /*0x14*/u32 otId; + /*0x18*/u32 hpIV:5; + /*0x18*/u32 attackIV:5; + /*0x19*/u32 defenseIV:5; + /*0x19*/u32 speedIV:5; + /*0x1A*/u32 spAttackIV:5; + /*0x1A*/u32 spDefenseIV:5; + /*0x1B*/u32 gap:1; + /*0x1B*/u32 altAbility:1; + /*0x1C*/u32 personality; + /*0x20*/u8 nickname[POKEMON_NAME_LENGTH + 1]; + /*0x2B*/u8 friendship; +}; + +struct PokemonStorage +{ + /*0x0000*/ u8 currentBox; + /*0x0004*/ struct BoxPokemon boxes[14][30]; + /*0x8344*/ u8 boxNames[14][9]; + /*0x83c2*/ u8 wallpaper[14]; +}; + +#endif // GUARD_POKEMON_H diff --git a/berry_fix/payload/include/rtc.h b/berry_fix/payload/include/rtc.h new file mode 100644 index 000000000..35654d866 --- /dev/null +++ b/berry_fix/payload/include/rtc.h @@ -0,0 +1,15 @@ +#ifndef GUARD_RTC_H +#define GUARD_RTC_H + +#include "gba/gba.h" +#include "siirtc.h" +#include "global.h" + +extern struct Time gTimeSinceBerryUpdate; +extern struct Time gRtcUTCTime; + +bool32 rtc_maincb_is_rtc_working(void); +bool32 rtc_maincb_is_time_since_last_berry_update_positive(u8 *); +void rtc_maincb_fix_date(void); + +#endif //GUARD_RTC_H diff --git a/berry_fix/payload/include/siirtc.h b/berry_fix/payload/include/siirtc.h new file mode 100644 index 000000000..de4fd634d --- /dev/null +++ b/berry_fix/payload/include/siirtc.h @@ -0,0 +1,54 @@ +#ifndef GUARD_RTC_H +#define GUARD_RTC_H + +#include "gba/gba.h" + +#define SIIRTCINFO_INTFE 0x01 // frequency interrupt enable +#define SIIRTCINFO_INTME 0x02 // per-minute interrupt enable +#define SIIRTCINFO_INTAE 0x04 // alarm interrupt enable +#define SIIRTCINFO_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode +#define SIIRTCINFO_POWER 0x80 // power on or power failure occurred + +enum +{ + MONTH_JAN = 1, + MONTH_FEB, + MONTH_MAR, + MONTH_APR, + MONTH_MAY, + MONTH_JUN, + MONTH_JUL, + MONTH_AUG, + MONTH_SEP, + MONTH_OCT, + MONTH_NOV, + MONTH_DEC +}; + +struct SiiRtcInfo +{ + u8 year; + u8 month; + u8 day; + u8 dayOfWeek; + u8 hour; + u8 minute; + u8 second; + u8 status; + u8 alarmHour; + u8 alarmMinute; +}; + +void SiiRtcUnprotect(void); +void SiiRtcProtect(void); +u8 SiiRtcProbe(void); +bool8 SiiRtcReset(void); +bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc); +bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc); +bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc); +bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc); +bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc); +bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc); +bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc); + +#endif // GUARD_RTC_H diff --git a/berry_fix/payload/ld_script.sed b/berry_fix/payload/ld_script.sed new file mode 100644 index 000000000..b91542b6f --- /dev/null +++ b/berry_fix/payload/ld_script.sed @@ -0,0 +1,14 @@ +/<EWRAM>/ { + r sym_ewram.ld + d +} + +/<BSS>/ { + r sym_bss.ld + d +} + +/<COMMON>/ { + r sym_common.ld + d +} diff --git a/berry_fix/payload/ld_script.txt b/berry_fix/payload/ld_script.txt new file mode 100644 index 000000000..d0a0af9ed --- /dev/null +++ b/berry_fix/payload/ld_script.txt @@ -0,0 +1,107 @@ +ENTRY(Init) + +SECTIONS { + . = 0x2010000; + + .text : + ALIGN(4) + { + asm/crt0.o(.text); + src/main.o(.text); + src/rtc.o(.text); + src/flash.o(.text); + } =0 + + lib_text : + ALIGN(4) + { + src/agb_flash.o(.text); + src/agb_flash_1m.o(.text); + src/agb_flash_mx.o(.text); + asm/libagbsyscall.o(.text); + src/siirtc.o(.text); + *libgcc.a:_call_via_rX.o(.text); + *libgcc.a:_modsi3.o(.text); + *libgcc.a:_umodsi3.o(.text); + *libgcc.a:_dvmd_tls.o(.text); + } =0 + + .rodata : + ALIGN(4) + { + src/main.o(.rodata); + src/rtc.o(.rodata); + src/flash.o(.rodata); + } =0 + + lib_rodata : + ALIGN(4) + { + src/agb_flash.o(.rodata); + src/agb_flash_1m.o(.rodata); + src/agb_flash_mx.o(.rodata); + src/agb_flash_le.o(.rodata); + src/siirtc.o(.rodata); + } + + . = 0x2020000; + + ewram (NOLOAD) : + ALIGN(4) + { +<EWRAM> + } + + . = 0x3001000; + + iwram (NOLOAD) : + ALIGN(4) + { +<BSS> + . = 0x40; +<COMMON> + end = .; + } + + . = 0x8000000; + + RS_Rom (NOLOAD) : + ALIGN(4) + { + _start = .; + . += 4; + RomHeaderNintendoLogo = .; + . += 156; + RS_RomHeader = .; + RomHeaderGameTitle = .; + . += 12; + RomHeaderGameCode = .; + . += 4; + RomHeaderMakerCode = .; + . += 2; + RomHeaderMagic = .; + . += 1; + RomHeaderMainUnitCode = .; + . += 1; + RomHeaderDeviceType = .; + . += 1; + RomHeaderReserved1 = .; + . += 7; + RomHeaderSoftwareVersion = .; + . += 1; + RomHeaderChecksum = .; + . += 1; + RomHeaderReserved2 = .; + . += 6; + GPIOPortData = .; + . += 2; + GPIOPortDirection = .; + . += 2; + GPIOPortReadEnable = .; + } =0 + + /DISCARD/ : + { + *(*); + } +} diff --git a/berry_fix/payload/rom.sha1 b/berry_fix/payload/rom.sha1 new file mode 100644 index 000000000..92eee7e87 --- /dev/null +++ b/berry_fix/payload/rom.sha1 @@ -0,0 +1 @@ +866991e2b5a8de02d12f53abe0ee9af03a2b6e01 payload.gba diff --git a/berry_fix/payload/src/agb_flash.c b/berry_fix/payload/src/agb_flash.c new file mode 100644 index 000000000..2c2c96e6e --- /dev/null +++ b/berry_fix/payload/src/agb_flash.c @@ -0,0 +1,296 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" + +static u8 sTimerNum; +static u16 sTimerCount; +static vu16 *sTimerReg; +static u16 sSavedIme; + +u8 gFlashTimeoutFlag; +u8 (*PollFlashStatus)(u8 *); +const struct FlashType *gFlash; +u16 gFlashNumRemainingBytes; +const u16 *gFlashMaxTime; + +u16 (*ProgramFlashByte)(u16, u32, u8); +u16 (*ProgramFlashSector)(u16, void *); +u16 (*EraseFlashChip)(void); +u16 (*EraseFlashSector)(u16); +u16 (*WaitForFlashWrite)(u8, u8 *, u8); + +void SetReadFlash1(u16 *dest); + +void SwitchFlashBank(u8 bankNum) +{ + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xB0); + FLASH_WRITE(0x0000, bankNum); +} + +#define DELAY() \ +do { \ + vu16 i; \ + for (i = 20000; i != 0; i--) \ + ; \ +} while (0) + +u16 ReadFlashId(void) +{ + u16 flashId; + u16 readFlash1Buffer[0x20]; + u8 (*readFlash1)(u8 *); + + SetReadFlash1(readFlash1Buffer); + readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1); + + // Enter ID mode. + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x90); + DELAY(); + + flashId = readFlash1(FLASH_BASE + 1) << 8; + flashId |= readFlash1(FLASH_BASE); + + // Leave ID mode. + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xF0); + FLASH_WRITE(0x5555, 0xF0); + DELAY(); + + return flashId; +} + +void FlashTimerIntr(void) +{ + if (sTimerCount != 0 && --sTimerCount == 0) + gFlashTimeoutFlag = 1; +} + +u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)) +{ + if (timerNum >= 4) + return 1; + + sTimerNum = timerNum; + sTimerReg = ®_TMCNT(sTimerNum); + *intrFunc = FlashTimerIntr; + return 0; +} + +void StartFlashTimer(u8 phase) +{ + const u16 *maxTime = &gFlashMaxTime[phase * 3]; + sSavedIme = REG_IME; + REG_IME = 0; + sTimerReg[1] = 0; + REG_IE |= (INTR_FLAG_TIMER0 << sTimerNum); + gFlashTimeoutFlag = 0; + sTimerCount = *maxTime++; + *sTimerReg++ = *maxTime++; + *sTimerReg-- = *maxTime++; + REG_IF = (INTR_FLAG_TIMER0 << sTimerNum); + REG_IME = 1; +} + +void StopFlashTimer(void) +{ + REG_IME = 0; + *sTimerReg++ = 0; + *sTimerReg-- = 0; + REG_IE &= ~(INTR_FLAG_TIMER0 << sTimerNum); + REG_IME = sSavedIme; +} + +u8 ReadFlash1(u8 *addr) +{ + return *addr; +} + +void SetReadFlash1(u16 *dest) +{ + u16 *src; + u16 i; + + PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1); + + src = (u16 *)ReadFlash1; + src = (u16 *)((s32)src ^ 1); + + i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1; + + while (i != 0) + { + *dest++ = *src++; + i--; + } +} + +void ReadFlash_Core(u8 *src, u8 *dest, u32 size) +{ + while (size-- != 0) + { + *dest++ = *src++; + } +} + +void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size) +{ + u8 *src; + u16 i; + u16 readFlash_Core_Buffer[0x40]; + u16 *funcSrc; + u16 *funcDest; + void (*readFlash_Core)(u8 *, u8 *, u32); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + if (gFlash->romSize == FLASH_ROM_SIZE_1M) + { + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + } + + funcSrc = (u16 *)ReadFlash_Core; + funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcDest = readFlash_Core_Buffer; + + i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1; + + while (i != 0) + { + *funcDest++ = *funcSrc++; + i--; + } + + readFlash_Core = (void (*)(u8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1); + + src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; + + readFlash_Core(src, dest, size); +} + +u32 VerifyFlashSector_Core(u8 *src, u8 *tgt, u32 size) +{ + while (size-- != 0) + { + if (*tgt++ != *src++) + return (u32)(tgt - 1); + } + + return 0; +} + +u32 VerifyFlashSector(u16 sectorNum, u8 *src) +{ + u16 i; + u16 verifyFlashSector_Core_Buffer[0x80]; + u16 *funcSrc; + u16 *funcDest; + u8 *tgt; + u16 size; + u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + if (gFlash->romSize == FLASH_ROM_SIZE_1M) + { + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + } + + funcSrc = (u16 *)VerifyFlashSector_Core; + funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcDest = verifyFlashSector_Core_Buffer; + + i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; + + while (i != 0) + { + *funcDest++ = *funcSrc++; + i--; + } + + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); + + tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); + size = gFlash->sector.size; + + return verifyFlashSector_Core(src, tgt, size); +} + +u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) +{ + u16 i; + u16 verifyFlashSector_Core_Buffer[0x80]; + u16 *funcSrc; + u16 *funcDest; + u8 *tgt; + u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); + + if (gFlash->romSize == FLASH_ROM_SIZE_1M) + { + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + } + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + funcSrc = (u16 *)VerifyFlashSector_Core; + funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcDest = verifyFlashSector_Core_Buffer; + + i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; + + while (i != 0) + { + *funcDest++ = *funcSrc++; + i--; + } + + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); + + tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); + + return verifyFlashSector_Core(src, tgt, n); +} + +u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src) +{ + u8 i; + u32 result; + + for (i = 0; i < 3; i++) + { + result = ProgramFlashSector(sectorNum, src); + if (result != 0) + continue; + + result = VerifyFlashSector(sectorNum, src); + if (result == 0) + break; + } + + return result; +} + +u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *src, u32 n) +{ + u8 i; + u32 result; + + for (i = 0; i < 3; i++) + { + result = ProgramFlashSector(sectorNum, src); + if (result != 0) + continue; + + result = VerifyFlashSectorNBytes(sectorNum, src, n); + if (result == 0) + break; + } + + return result; +} diff --git a/berry_fix/payload/src/agb_flash_1m.c b/berry_fix/payload/src/agb_flash_1m.c new file mode 100644 index 000000000..7f8bdeb5f --- /dev/null +++ b/berry_fix/payload/src/agb_flash_1m.c @@ -0,0 +1,86 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" + +static const char AgbLibFlashVersion[] = "FLASH1M_V103"; + +const struct FlashSetupInfo * const sSetupInfos[] = +{ + &MX29L010, + &LE26FV10N1TS, + &DefaultFlash +}; + +u32 IdentifyFlash(void) +{ + u16 result; + u16 flashId; + const struct FlashSetupInfo * const *setupInfo; + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + flashId = ReadFlashId(); + + setupInfo = sSetupInfos; + result = 1; + + for (;;) + { + if ((*setupInfo)->type.ids.separate.makerId == 0) + break; + + if (flashId == (*setupInfo)->type.ids.joined) + { + result = 0; + break; + } + + setupInfo++; + } + + ProgramFlashByte = (*setupInfo)->programFlashByte; + ProgramFlashSector = (*setupInfo)->programFlashSector; + EraseFlashChip = (*setupInfo)->eraseFlashChip; + EraseFlashSector = (*setupInfo)->eraseFlashSector; + WaitForFlashWrite = (*setupInfo)->WaitForFlashWrite; + gFlashMaxTime = (*setupInfo)->maxTime; + gFlash = &(*setupInfo)->type; + + return result; +} + +u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData) +{ + u16 result = 0; + u8 status; + + StartFlashTimer(phase); + + while ((status = PollFlashStatus(addr)) != lastData) + { + if (status & 0x20) + { + // The write operation exceeded the flash chip's time limit. + + if (PollFlashStatus(addr) == lastData) + break; + + FLASH_WRITE(0x5555, 0xF0); + result = phase | 0xA000u; + break; + } + + if (gFlashTimeoutFlag) + { + if (PollFlashStatus(addr) == lastData) + break; + + FLASH_WRITE(0x5555, 0xF0); + result = phase | 0xC000u; + break; + } + } + + StopFlashTimer(); + + return result; +} diff --git a/berry_fix/payload/src/agb_flash_le.c b/berry_fix/payload/src/agb_flash_le.c new file mode 100644 index 000000000..39d956e27 --- /dev/null +++ b/berry_fix/payload/src/agb_flash_le.c @@ -0,0 +1,31 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" + +const u16 leMaxTime[] = +{ + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, +}; + +const struct FlashSetupInfo LE26FV10N1TS = +{ + ProgramFlashByte_MX, + ProgramFlashSector_MX, + EraseFlashChip_MX, + EraseFlashSector_MX, + WaitForFlashWrite_Common, + leMaxTime, + { + 131072, // ROM size + { + 4096, // sector size + 12, // bit shift to multiply by sector size (4096 == 1 << 12) + 32, // number of sectors + 0 // appears to be unused + }, + { 3, 1 }, // wait state setup data + { { 0x62, 0x13 } } // ID + } +}; diff --git a/berry_fix/payload/src/agb_flash_mx.c b/berry_fix/payload/src/agb_flash_mx.c new file mode 100644 index 000000000..68eb00cd8 --- /dev/null +++ b/berry_fix/payload/src/agb_flash_mx.c @@ -0,0 +1,193 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" + +const u16 mxMaxTime[] = +{ + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, +}; + +const struct FlashSetupInfo MX29L010 = +{ + ProgramFlashByte_MX, + ProgramFlashSector_MX, + EraseFlashChip_MX, + EraseFlashSector_MX, + WaitForFlashWrite_Common, + mxMaxTime, + { + 131072, // ROM size + { + 4096, // sector size + 12, // bit shift to multiply by sector size (4096 == 1 << 12) + 32, // number of sectors + 0 // appears to be unused + }, + { 3, 1 }, // wait state setup data + { { 0xC2, 0x09 } } // ID + } +}; + +const struct FlashSetupInfo DefaultFlash = +{ + ProgramFlashByte_MX, + ProgramFlashSector_MX, + EraseFlashChip_MX, + EraseFlashSector_MX, + WaitForFlashWrite_Common, + mxMaxTime, + { + 131072, // ROM size + { + 4096, // sector size + 12, // bit shift to multiply by sector size (4096 == 1 << 12) + 32, // number of sectors + 0 // appears to be unused + }, + { 3, 1 }, // wait state setup data + { { 0x00, 0x00 } } // ID of 0 + } +}; + +u16 EraseFlashChip_MX(void) +{ + u16 result; + u16 readFlash1Buffer[0x20]; + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; + + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x80); + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x10); + + SetReadFlash1(readFlash1Buffer); + + result = WaitForFlashWrite(3, FLASH_BASE, 0xFF); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + return result; +} + +u16 EraseFlashSector_MX(u16 sectorNum) +{ + u16 numTries; + u16 result; + u8 *addr; + u16 readFlash1Buffer[0x20]; + + if (sectorNum >= gFlash->sector.count) + return 0x80FF; + + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + + numTries = 0; + +try_erase: + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; + + addr = FLASH_BASE + (sectorNum << gFlash->sector.shift); + + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x80); + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + *addr = 0x30; + + SetReadFlash1(readFlash1Buffer); + + result = WaitForFlashWrite(2, addr, 0xFF); + + if (!(result & 0xA000) || numTries > 3) + goto done; + + numTries++; + + goto try_erase; + +done: + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + return result; +} + +u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data) +{ + u8 *addr; + u16 readFlash1Buffer[0x20]; + + if (offset >= gFlash->sector.size) + return 0x8000; + + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + + addr = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; + + SetReadFlash1(readFlash1Buffer); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; + + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xA0); + *addr = data; + + return WaitForFlashWrite(1, addr, data); +} + +static u16 ProgramByte(u8 *src, u8 *dest) +{ + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xA0); + *dest = *src; + + return WaitForFlashWrite(1, dest, *src); +} + +u16 ProgramFlashSector_MX(u16 sectorNum, void *src) +{ + u16 result; + u8 *dest; + u16 readFlash1Buffer[0x20]; + + if (sectorNum >= gFlash->sector.count) + return 0x80FF; + + result = EraseFlashSector_MX(sectorNum); + + if (result != 0) + return result; + + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + + SetReadFlash1(readFlash1Buffer); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; + + gFlashNumRemainingBytes = gFlash->sector.size; + dest = FLASH_BASE + (sectorNum << gFlash->sector.shift); + + while (gFlashNumRemainingBytes > 0) + { + result = ProgramByte(src, dest); + + if (result != 0) + break; + + gFlashNumRemainingBytes--; + src++; + dest++; + } + + return result; +} diff --git a/berry_fix/payload/src/flash.c b/berry_fix/payload/src/flash.c new file mode 100644 index 000000000..1f09d0b8f --- /dev/null +++ b/berry_fix/payload/src/flash.c @@ -0,0 +1,752 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" +#include "constants/vars.h" +#include "global.h" +#include "main.h" +#include "flash.h" +#include "rtc.h" + +struct SaveBlockChunk +{ + u8 * data; + u16 size; +}; + +u8 WriteSaveBlockChunks(u16 a0, const struct SaveBlockChunk * a1); +u8 WriteSingleChunk(u16 a0, const struct SaveBlockChunk * a1); +u8 TryWriteSector(u8, u8 *); +u8 EraseCurrentChunk(u16 a0, const struct SaveBlockChunk * a1); +u8 TryReadAllSaveSectorsCurrentSlot(u16 a0, const struct SaveBlockChunk * a1); +u8 ReadAllSaveSectorsCurrentSlot(u16 a0, const struct SaveBlockChunk * a1); +u8 GetSaveValidStatus(const struct SaveBlockChunk * a1); +u32 DoReadFlashWholeSection(u8 a0, struct SaveSector * a1); +u16 CalculateChecksum(const void *, u16); + +u16 gFirstSaveSector; +u32 gPrevSaveCounter; +u16 gLastKnownGoodSector; +u32 gDamagedSaveSectors; +u32 gSaveCounter; +struct SaveSector * gFastSaveSection; +u16 gCurSaveChunk; +bool32 gFlashIdentIsValid; + +EWRAM_DATA struct SaveBlock2 gSaveBlock2 = {}; +EWRAM_DATA struct SaveBlock1 gSaveBlock1 = {}; +EWRAM_DATA struct PokemonStorage gPokemonStorage = {}; + +// Each 4 KiB flash sector contains 3968 bytes of actual data followed by a 128 byte footer +#define SECTOR_DATA_SIZE 3968 +#define SECTOR_FOOTER_SIZE 128 + +#define SAVEBLOCK_CHUNK(structure, chunkNum) \ +{ \ + (u8 *)&structure + chunkNum * SECTOR_DATA_SIZE, \ + min(sizeof(structure) - chunkNum * SECTOR_DATA_SIZE, SECTOR_DATA_SIZE) \ +} \ + +static const struct SaveBlockChunk sSaveBlockChunks[] = +{ + SAVEBLOCK_CHUNK(gSaveBlock2, 0), + + SAVEBLOCK_CHUNK(gSaveBlock1, 0), + SAVEBLOCK_CHUNK(gSaveBlock1, 1), + SAVEBLOCK_CHUNK(gSaveBlock1, 2), + SAVEBLOCK_CHUNK(gSaveBlock1, 3), + + SAVEBLOCK_CHUNK(gPokemonStorage, 0), + SAVEBLOCK_CHUNK(gPokemonStorage, 1), + SAVEBLOCK_CHUNK(gPokemonStorage, 2), + SAVEBLOCK_CHUNK(gPokemonStorage, 3), + SAVEBLOCK_CHUNK(gPokemonStorage, 4), + SAVEBLOCK_CHUNK(gPokemonStorage, 5), + SAVEBLOCK_CHUNK(gPokemonStorage, 6), + SAVEBLOCK_CHUNK(gPokemonStorage, 7), + SAVEBLOCK_CHUNK(gPokemonStorage, 8), +}; + +const u16 gInfoMessagesPal[] = INCBIN_U16("graphics/msg_box.gbapal"); +const u8 gInfoMessagesTilemap[] = INCBIN_U8("graphics/msg_box.tilemap.lz"); +const u8 gInfoMessagesGfx[] = INCBIN_U8("graphics/msg_box.4bpp.lz"); + +bool32 flash_maincb_ident_is_valid(void) +{ + gFlashIdentIsValid = TRUE; + if (!IdentifyFlash()) + { + SetFlashTimerIntr(0, &((IntrFunc *)gIntrFuncPointers)[9]); + return TRUE; + } + gFlashIdentIsValid = FALSE; + return FALSE; +} + +void Call_ReadFlash(u16 sectorNum, ptrdiff_t offset, void * dest, size_t size) +{ + ReadFlash(sectorNum, offset, dest, size); +} + +u8 Call_WriteSaveBlockChunks(u16 a0, const struct SaveBlockChunk * a1) +{ + return WriteSaveBlockChunks(a0, a1); +} + +u8 Call_TryReadAllSaveSectorsCurrentSlot(u16 a0, const struct SaveBlockChunk * a1) +{ + return TryReadAllSaveSectorsCurrentSlot(a0, a1); +} + +u32 * GetDamagedSaveSectorsPtr(void) +{ + return &gDamagedSaveSectors; +} + +s32 flash_write_save_block_chunks(u8 a0) +{ + u8 i; + + switch (a0) + { + case 0: + default: + Call_WriteSaveBlockChunks(0xFFFF, sSaveBlockChunks); + break; + case 1: + for (i = 0; i < 5; i++) + { + Call_WriteSaveBlockChunks(i, sSaveBlockChunks); + } + break; + case 2: + Call_WriteSaveBlockChunks(0, sSaveBlockChunks); + break; + } + + return 0; +} + +u8 flash_write_save_block_chunks_check_damage(u8 a0) +{ + flash_write_save_block_chunks(a0); + if (*GetDamagedSaveSectorsPtr() == 0) + return 1; + return 0xFF; +} + +u8 flash_maincb_read_save(u32 unused) +{ + return Call_TryReadAllSaveSectorsCurrentSlot(0xFFFF, sSaveBlockChunks); +} + +void msg_load_gfx(void) +{ + REG_DISPCNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BLDCNT = 0; + LZ77UnCompVram(gInfoMessagesGfx, (void *)BG_VRAM); + LZ77UnCompVram(gInfoMessagesTilemap, (void *)BG_SCREEN_ADDR(28)); + CpuCopy16(gInfoMessagesPal, (void *)BG_PLTT, 0x200); + REG_BG0CNT = BGCNT_SCREENBASE(28) | BGCNT_TXT512x512; + REG_DISPCNT = DISPCNT_BG0_ON; +} + +void msg_display(enum MsgBoxUpdateMessage a0) +{ + switch (a0) + { + case MSGBOX_WILL_NOW_UPDATE: + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + break; + case MSGBOX_HAS_BEEN_UPDATED: + REG_BG0HOFS = 0x100; + REG_BG0VOFS = 0; + break; + case MSGBOX_UNABLE_TO_UPDATE: + REG_BG0HOFS = 0x100; + REG_BG0VOFS = 0xB0; + break; + case MSGBOX_NO_NEED_TO_UPDATE: + REG_BG0HOFS = 0; + REG_BG0VOFS = 0xB0; + break; + case MSGBOX_UPDATING: + REG_BG0HOFS = 0; + REG_BG0VOFS = 0x160; + break; + } +} + +void Save_EraseAllData(void) +{ + u16 i; + for (i = 0; i < 32; i++) + EraseFlashSector(i); +} + +void Save_ResetSaveCounters(void) +{ + gSaveCounter = 0; + gFirstSaveSector = 0; + gDamagedSaveSectors = 0; +} + +bool32 SetSectorDamagedStatus(u8 op, u8 sectorNum) +{ + bool32 retVal = FALSE; + + switch (op) + { + case SECTOR_DAMAGED: + gDamagedSaveSectors |= (1 << sectorNum); + break; + case SECTOR_OK: + gDamagedSaveSectors &= ~(1 << sectorNum); + break; + case SECTOR_CHECK: // unused + if (gDamagedSaveSectors & (1 << sectorNum)) + retVal = TRUE; + break; + } + + return retVal; +} + +u8 WriteSaveBlockChunks(u16 chunkId, const struct SaveBlockChunk *chunks) +{ + u32 retVal; + u16 i; + + gFastSaveSection = eSaveSection; + + if (chunkId != 0xFFFF) // write single chunk + { + retVal = WriteSingleChunk(chunkId, chunks); + } + else // write all chunks + { + gLastKnownGoodSector = gFirstSaveSector; + gPrevSaveCounter = gSaveCounter; + gFirstSaveSector++; + gFirstSaveSector %= NUM_SECTORS_PER_SAVE_SLOT; + gSaveCounter++; + retVal = SAVE_STATUS_OK; + + for (i = 0; i < NUM_SECTORS_PER_SAVE_SLOT; i++) + WriteSingleChunk(i, chunks); + + // Check for any bad sectors + if (gDamagedSaveSectors != 0) // skip the damaged sector. + { + retVal = SAVE_STATUS_ERROR; + gFirstSaveSector = gLastKnownGoodSector; + gSaveCounter = gPrevSaveCounter; + } + } + + return retVal; +} + +u8 WriteSingleChunk(u16 chunkId, const struct SaveBlockChunk * chunks) +{ + u16 i; + u16 sectorNum; + u8 *chunkData; + u16 chunkSize; + + // select sector number + sectorNum = chunkId + gFirstSaveSector; + sectorNum %= NUM_SECTORS_PER_SAVE_SLOT; + // select save slot + sectorNum += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); + + chunkData = chunks[chunkId].data; + chunkSize = chunks[chunkId].size; + + // clear save section. + for (i = 0; i < sizeof(struct SaveSector); i++) + ((u8 *)gFastSaveSection)[i] = 0; + + gFastSaveSection->id = chunkId; + gFastSaveSection->signature = FILE_SIGNATURE; + gFastSaveSection->counter = gSaveCounter; + for (i = 0; i < chunkSize; i++) + gFastSaveSection->data[i] = chunkData[i]; + gFastSaveSection->checksum = CalculateChecksum(chunkData, chunkSize); + + return TryWriteSector(sectorNum, gFastSaveSection->data); +} + +u8 HandleWriteSectorNBytes(u8 sectorNum, u8 *data, u16 size) +{ + u16 i; + struct SaveSector *section = eSaveSection; + + for (i = 0; i < sizeof(struct SaveSector); i++) + ((char *)section)[i] = 0; + + section->signature = FILE_SIGNATURE; + for (i = 0; i < size; i++) + section->data[i] = data[i]; + section->id = CalculateChecksum(data, size); // though this appears to be incorrect, it might be some sector checksum instead of a whole save checksum and only appears to be relevent to HOF data, if used. + + return TryWriteSector(sectorNum, section->data); +} + +u8 TryWriteSector(u8 sectorNum, u8 *data) +{ + if (ProgramFlashSectorAndVerify(sectorNum, data) != 0) // is damaged? + { + SetSectorDamagedStatus(SECTOR_DAMAGED, sectorNum); // set damaged sector bits. + return SAVE_STATUS_ERROR; + } + else + { + SetSectorDamagedStatus(SECTOR_OK, sectorNum); // unset damaged sector bits. it's safe now. + return SAVE_STATUS_OK; + } +} + +u32 RestoreSaveBackupVarsAndIncrement(const struct SaveBlockChunk *chunk) // chunk is unused +{ + gFastSaveSection = eSaveSection; + gLastKnownGoodSector = gFirstSaveSector; + gPrevSaveCounter = gSaveCounter; + gFirstSaveSector++; + gFirstSaveSector %= NUM_SECTORS_PER_SAVE_SLOT; + gSaveCounter++; + gCurSaveChunk = 0; + gDamagedSaveSectors = 0; + return 0; +} + +u32 RestoreSaveBackupVars(const struct SaveBlockChunk *chunk) +{ + gFastSaveSection = eSaveSection; + gLastKnownGoodSector = gFirstSaveSector; + gPrevSaveCounter = gSaveCounter; + gCurSaveChunk = 0; + gDamagedSaveSectors = 0; + return 0; +} + +u8 WriteSingleChunkAndIncrement(u16 a1, const struct SaveBlockChunk * chunk) +{ + u8 retVal; + + if (gCurSaveChunk < a1 - 1) + { + retVal = SAVE_STATUS_OK; + WriteSingleChunk(gCurSaveChunk, chunk); + gCurSaveChunk++; + if (gDamagedSaveSectors) + { + retVal = SAVE_STATUS_ERROR; + gFirstSaveSector = gLastKnownGoodSector; + gSaveCounter = gPrevSaveCounter; + } + } + else + { + retVal = SAVE_STATUS_ERROR; + } + + return retVal; +} + +u8 ErasePreviousChunk(u16 a1, const struct SaveBlockChunk *chunk) +{ + u8 retVal = SAVE_STATUS_OK; + + EraseCurrentChunk(a1 - 1, chunk); + + if (gDamagedSaveSectors) + { + retVal = SAVE_STATUS_ERROR; + gFirstSaveSector = gLastKnownGoodSector; + gSaveCounter = gPrevSaveCounter; + } + return retVal; +} + +u8 EraseCurrentChunk(u16 chunkId, const struct SaveBlockChunk *chunks) +{ + u16 i; + u16 sector; + u8 *data; + u16 size; + u8 status; + + // select sector number + sector = chunkId + gFirstSaveSector; + sector %= NUM_SECTORS_PER_SAVE_SLOT; + // select save slot + sector += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); + + data = chunks[chunkId].data; + size = chunks[chunkId].size; + + // clear temp save section. + for (i = 0; i < sizeof(struct SaveSector); i++) + ((char *)gFastSaveSection)[i] = 0; + + gFastSaveSection->id = chunkId; + gFastSaveSection->signature = FILE_SIGNATURE; + gFastSaveSection->counter = gSaveCounter; + + // set temp section's data. + for (i = 0; i < size; i++) + gFastSaveSection->data[i] = data[i]; + + // calculate checksum. + gFastSaveSection->checksum = CalculateChecksum(data, size); + + EraseFlashSector(sector); + + status = SAVE_STATUS_OK; + + for (i = 0; i < sizeof(struct UnkSaveSection); i++) + { + if (ProgramFlashByte(sector, i, gFastSaveSection->data[i])) + { + status = SAVE_STATUS_ERROR; + break; + } + } + + if (status == SAVE_STATUS_ERROR) + { + SetSectorDamagedStatus(SECTOR_DAMAGED, sector); + return SAVE_STATUS_ERROR; + } + else + { + status = SAVE_STATUS_OK; + + for (i = 0; i < 7; i++) + { + if (ProgramFlashByte(sector, 0xFF9 + i, ((u8 *)gFastSaveSection)[0xFF9 + i])) + { + status = SAVE_STATUS_ERROR; + break; + } + } + + if (status == SAVE_STATUS_ERROR) + { + SetSectorDamagedStatus(SECTOR_DAMAGED, sector); + return SAVE_STATUS_ERROR; + } + else + { + SetSectorDamagedStatus(SECTOR_OK, sector); + return SAVE_STATUS_OK; + } + } +} + +u8 WriteSomeFlashByteToPrevSector(u16 a1, const struct SaveBlockChunk *chunk) +{ + u16 sector; + + // select sector number + sector = a1 + gFirstSaveSector - 1; + sector %= NUM_SECTORS_PER_SAVE_SLOT; + // select save slot + sector += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); + + if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), ((u8 *)gFastSaveSection)[sizeof(struct UnkSaveSection)])) + { + // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. + SetSectorDamagedStatus(SECTOR_DAMAGED, sector); + gFirstSaveSector = gLastKnownGoodSector; + gSaveCounter = gPrevSaveCounter; + return SAVE_STATUS_ERROR; + } + else + { + SetSectorDamagedStatus(SECTOR_OK, sector); + return SAVE_STATUS_OK; + } +} + +u8 WriteSomeFlashByte0x25ToPrevSector(u16 a1, const struct SaveBlockChunk *chunk) +{ + u16 sector; + + sector = a1 + gFirstSaveSector - 1; + sector %= NUM_SECTORS_PER_SAVE_SLOT; + sector += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); + + if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), 0x25)) + { + // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. + SetSectorDamagedStatus(SECTOR_DAMAGED, sector); + gFirstSaveSector = gLastKnownGoodSector; + gSaveCounter = gPrevSaveCounter; + return SAVE_STATUS_ERROR; + } + else + { + SetSectorDamagedStatus(SECTOR_OK, sector); + return SAVE_STATUS_OK; + } +} + +u8 TryReadAllSaveSectorsCurrentSlot(u16 a1, const struct SaveBlockChunk *chunk) +{ + u8 retVal; + gFastSaveSection = eSaveSection; + if (a1 != 0xFFFF) + { + retVal = SAVE_STATUS_ERROR; + } + else + { + retVal = GetSaveValidStatus(chunk); + ReadAllSaveSectorsCurrentSlot(0xFFFF, chunk); + } + + return retVal; +} + +u8 ReadAllSaveSectorsCurrentSlot(u16 a1, const struct SaveBlockChunk *chunks) +{ + u16 i; + u16 checksum; + u16 sector = NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); + u16 id; + + for (i = 0; i < NUM_SECTORS_PER_SAVE_SLOT; i++) + { + DoReadFlashWholeSection(i + sector, gFastSaveSection); + id = gFastSaveSection->id; + if (id == 0) + gFirstSaveSector = i; + checksum = CalculateChecksum(gFastSaveSection->data, chunks[id].size); + if (gFastSaveSection->signature == FILE_SIGNATURE + && gFastSaveSection->checksum == checksum) + { + u16 j; + for (j = 0; j < chunks[id].size; j++) + chunks[id].data[j] = gFastSaveSection->data[j]; + } + } + + return 1; +} + +u8 GetSaveValidStatus(const struct SaveBlockChunk *chunks) +{ + u16 sector; + bool8 signatureValid; + u16 checksum; + u32 slot1saveCounter = 0; + u32 slot2saveCounter = 0; + u8 slot1Status; + u8 slot2Status; + u32 validSectors; + const u32 ALL_SECTORS = (1 << NUM_SECTORS_PER_SAVE_SLOT) - 1; // bitmask of all saveblock sectors + + // check save slot 1. + validSectors = 0; + signatureValid = FALSE; + for (sector = 0; sector < NUM_SECTORS_PER_SAVE_SLOT; sector++) + { + DoReadFlashWholeSection(sector, gFastSaveSection); + if (gFastSaveSection->signature == FILE_SIGNATURE) + { + signatureValid = TRUE; + checksum = CalculateChecksum(gFastSaveSection->data, chunks[gFastSaveSection->id].size); + if (gFastSaveSection->checksum == checksum) + { + slot1saveCounter = gFastSaveSection->counter; + validSectors |= 1 << gFastSaveSection->id; + } + } + } + + if (signatureValid) + { + if (validSectors == ALL_SECTORS) + slot1Status = SAVE_STATUS_OK; + else + slot1Status = SAVE_STATUS_ERROR; + } + else + { + slot1Status = SAVE_STATUS_EMPTY; + } + + // check save slot 2. + validSectors = 0; + signatureValid = FALSE; + for (sector = 0; sector < NUM_SECTORS_PER_SAVE_SLOT; sector++) + { + DoReadFlashWholeSection(NUM_SECTORS_PER_SAVE_SLOT + sector, gFastSaveSection); + if (gFastSaveSection->signature == FILE_SIGNATURE) + { + signatureValid = TRUE; + checksum = CalculateChecksum(gFastSaveSection->data, chunks[gFastSaveSection->id].size); + if (gFastSaveSection->checksum == checksum) + { + slot2saveCounter = gFastSaveSection->counter; + validSectors |= 1 << gFastSaveSection->id; + } + } + } + + if (signatureValid) + { + if (validSectors == ALL_SECTORS) + slot2Status = SAVE_STATUS_OK; + else + slot2Status = SAVE_STATUS_ERROR; + } + else + { + slot2Status = SAVE_STATUS_EMPTY; + } + + if (slot1Status == SAVE_STATUS_OK && slot2Status == SAVE_STATUS_OK) + { + // Choose counter of the most recent save file + if ((slot1saveCounter == -1 && slot2saveCounter == 0) || (slot1saveCounter == 0 && slot2saveCounter == -1)) + { + if ((unsigned)(slot1saveCounter + 1) < (unsigned)(slot2saveCounter + 1)) + gSaveCounter = slot2saveCounter; + else + gSaveCounter = slot1saveCounter; + } + else + { + if (slot1saveCounter < slot2saveCounter) + gSaveCounter = slot2saveCounter; + else + gSaveCounter = slot1saveCounter; + } + return SAVE_STATUS_OK; + } + + if (slot1Status == SAVE_STATUS_OK) + { + gSaveCounter = slot1saveCounter; + if (slot2Status == SAVE_STATUS_ERROR) + return SAVE_STATUS_ERROR; + else + return SAVE_STATUS_OK; + } + + if (slot2Status == SAVE_STATUS_OK) + { + gSaveCounter = slot2saveCounter; + if (slot1Status == SAVE_STATUS_ERROR) + return SAVE_STATUS_ERROR; + else + return SAVE_STATUS_OK; + } + + if (slot1Status == SAVE_STATUS_EMPTY && slot2Status == SAVE_STATUS_EMPTY) + { + gSaveCounter = 0; + gFirstSaveSector = 0; + return SAVE_STATUS_EMPTY; + } + + gSaveCounter = 0; + gFirstSaveSector = 0; + return 2; +} + +u8 ReadSomeUnknownSectorAndVerify(u8 sector, u8 *data, u16 size) +{ + u16 i; + struct SaveSector *section = eSaveSection; + + DoReadFlashWholeSection(sector, section); + if (section->signature == FILE_SIGNATURE) + { + u16 checksum = CalculateChecksum(section->data, size); + if (section->id == checksum) + { + for (i = 0; i < size; i++) + data[i] = section->data[i]; + return SAVE_STATUS_OK; + } + else + { + return 2; + } + } + else + { + return SAVE_STATUS_EMPTY; + } +} + +u32 DoReadFlashWholeSection(u8 sector, struct SaveSector *section) +{ + ReadFlash(sector, 0, section->data, sizeof(struct SaveSector)); + return 1; +} + +u16 CalculateChecksum(const void *data, u16 size) +{ + u16 i; + u32 checksum = 0; + + for (i = 0; i < (size / 4); i++) + { + checksum += *((u32 *)data); + data += sizeof(u32); + } + + return ((checksum >> 16) + checksum); +} + +void nullsub_0201182C() +{ +} + +void nullsub_02011830() +{ +} + +void nullsub_02011834() +{ +} + +u16 * get_var_addr(u16 a0) +{ + if (a0 < VARS_START) + return NULL; + if (a0 < VAR_SPECIAL_0) + return &gSaveBlock1.vars[a0 - VARS_START]; + return NULL; +} + +bool32 flash_maincb_check_need_reset_pacifidlog_tm(void) +{ + u8 sp0; + u16 * data = get_var_addr(VAR_PACIFIDLOG_TM_RECEIVED_DAY); + rtc_maincb_is_time_since_last_berry_update_positive(&sp0); + if (*data <= gRtcUTCTime.days) + return TRUE; + else + return FALSE; +} + +bool32 flash_maincb_reset_pacifidlog_tm(void) +{ + u8 sp0; + if (flash_maincb_check_need_reset_pacifidlog_tm() == TRUE) + return TRUE; + rtc_maincb_is_time_since_last_berry_update_positive(&sp0); + if (gRtcUTCTime.days < 0) + return FALSE; + *get_var_addr(VAR_PACIFIDLOG_TM_RECEIVED_DAY) = 1; + if (flash_write_save_block_chunks_check_damage(0) != TRUE) + return FALSE; + return TRUE; +} diff --git a/berry_fix/payload/src/main.c b/berry_fix/payload/src/main.c new file mode 100644 index 000000000..325d3830e --- /dev/null +++ b/berry_fix/payload/src/main.c @@ -0,0 +1,289 @@ +#include "gba/gba.h" +#include "global.h" +#include "main.h" +#include "rtc.h" +#include "flash.h" + +static s32 gInitialWaitTimer; +IntrFunc gIntrTable[16]; +u16 gHeldKeys; +u16 gNewKeys; +u8 gIntrVector[0x100]; +u32 gUpdateSuccessful; +u32 gUnknown_3001194; +u32 gUnknown_30011A0[0x19]; +u32 gMainCallbackState; +u32 gGameVersion; + +EWRAM_DATA u8 gSharedMem[0x8000] = {}; + +void IntrMain(void); +void ReadKeys(void); +void dummy_intr_0(void); +void dummy_intr_1(void); +void main_callback(u32 *, void *, void *); + + +const char gBerryFixGameCode[] = "AGBJ"; +const IntrFunc gIntrFuncPointers[] = { + dummy_intr_0, + dummy_intr_1, + dummy_intr_0, + dummy_intr_0, + dummy_intr_0, + dummy_intr_0, + dummy_intr_0, + dummy_intr_0, + dummy_intr_0, + dummy_intr_0, + NULL, + NULL, + NULL +}; +const char gVersionData[][2] = { + {'J', 1}, + {'E', 2}, + {'D', 1}, + {'F', 1}, + {'I', 1}, + {'S', 1} +}; +const char gRubyTitleAndCode[] = "POKEMON RUBYAXV"; +const char gSapphireTitleAndCode[] = "POKEMON SAPPAXP"; +const u16 sDebugPals[20] = { + RGB(00, 00, 00), + RGB(31, 00, 00), + RGB(00, 31, 00), + RGB(00, 00, 31) +}; +const u16 sDebugDigitsGfx[] = INCBIN_U16("graphics/debug_digits.4bpp"); + +void AgbMain(void) +{ + RegisterRamReset(0x1E); + DmaCopy32(3, gIntrFuncPointers, gIntrTable, sizeof gIntrFuncPointers); + DmaCopy32(3, IntrMain, gIntrVector, sizeof(gIntrVector)); + INTR_VECTOR = gIntrVector; + REG_IE = INTR_FLAG_VBLANK; + if (*RomHeaderMagic == 0x96 && *(u32 *)RomHeaderGameCode == *(u32 *)gBerryFixGameCode) + REG_IE |= INTR_FLAG_GAMEPAK; + REG_DISPSTAT = DISPSTAT_VBLANK_INTR; + REG_IME = INTR_FLAG_VBLANK; + msg_load_gfx(); + gMainCallbackState = MAINCB_INIT; + gUnknown_3001194 = 0; + for (;;) + { + VBlankIntrWait(); + ReadKeys(); + main_callback(&gMainCallbackState, gUnknown_30011A0, gSharedMem); + } +} + +void dummy_intr_1(void) +{} + +void dummy_intr_0(void) +{} + +void ReadKeys(void) +{ + u16 keyInput = REG_KEYINPUT ^ KEYS_MASK; + gNewKeys = keyInput & ~gHeldKeys; + gHeldKeys = keyInput; +} + +void fill_palette(const u8 * src, u16 * dest, u8 value) +{ + s32 i; + for (i = 0; src[i] != 0; i++) + dest[i] = src[i] | value << 12; +} + +bool32 berry_fix_memcmp(const char * src1, const char * src2, size_t size) +{ + s32 i; + for (i = 0; i < size; i++) + { + if (src1[i] != src2[i]) + return FALSE; + } + return TRUE; +} + +s32 validate_rom_header_internal(void) +{ + char languageCode = *(RomHeaderGameCode + 3); + s32 softwareVersion = *RomHeaderSoftwareVersion; + s32 shouldUpdate = -1; + s32 i; + for (i = 0; i < ARRAY_COUNT(gVersionData); i++) + { + if (languageCode == gVersionData[i][0]) + { + if (softwareVersion >= gVersionData[i][1]) + { + shouldUpdate = 0; + } + else + { + shouldUpdate = 1; + } + break; + } + } + if (shouldUpdate != -1) + { + if (berry_fix_memcmp(RomHeaderGameTitle, gRubyTitleAndCode, 15) == TRUE) + { + if (shouldUpdate == 0) + return RUBY_NONEED; + else + { + gGameVersion = VERSION_RUBY; + return RUBY_UPDATABLE; + } + } + else if (berry_fix_memcmp(RomHeaderGameTitle, gSapphireTitleAndCode, 15) == TRUE) + { + if (shouldUpdate == 0) + return SAPPHIRE_NONEED; + else + { + gGameVersion = VERSION_SAPPHIRE; + return SAPPHIRE_UPDATABLE; + } + } + } + return INVALID; +} + +s32 validate_rom_header(void) +{ + if (*RomHeaderMakerCode == '0' && *(RomHeaderMakerCode + 1) == '1' && *RomHeaderMagic == 0x96) + return validate_rom_header_internal(); + else + return INVALID; +} + +void main_callback(u32 * state, void * unused1, void * unused2) +{ + u8 year; + switch (*state) + { + case MAINCB_INIT: + msg_display(MSGBOX_WILL_NOW_UPDATE); + if (++gInitialWaitTimer >= 180) + { + gInitialWaitTimer = 0; + gUpdateSuccessful = 0; + switch (validate_rom_header()) + { + case SAPPHIRE_UPDATABLE: + case RUBY_UPDATABLE: // Should Update Ruby + ++(*state); // MAINCB_CHECK_RTC + break; + case INVALID: // Invalid header + *state = MAINCB_ERROR; + break; + case SAPPHIRE_NONEED: // Should not update Sapphire + case RUBY_NONEED: // Should not update Ruby + *state = MAINCB_NO_NEED_TO_FIX; + break; + } + } + break; + case MAINCB_CHECK_RTC: + if (!rtc_maincb_is_rtc_working()) + *state = MAINCB_ERROR; + else + ++(*state); // MAINCB_CHECK_FLASH + break; + case MAINCB_CHECK_FLASH: + if (flash_maincb_ident_is_valid() == TRUE) + ++(*state); // MAINCB_READ_SAVE + else + *state = MAINCB_ERROR; + break; + case MAINCB_READ_SAVE: + if (flash_maincb_read_save(0) == SAVE_STATUS_OK) + ++(*state); // MAINCB_CHECK_TIME + else + *state = MAINCB_ERROR; + break; + case MAINCB_CHECK_TIME: + if (rtc_maincb_is_time_since_last_berry_update_positive(&year) == TRUE) + { + if (year == 0) + ++(*state); // MAINCB_FIX_DATE + else + *state = MAINCB_CHECK_PACIFIDLOG_TM; + } + else + { + if (year != 1) + *state = MAINCB_YEAR_MAKES_NO_SENSE; + else + ++(*state); // MAINCB_FIX_DATE + } + break; + case MAINCB_FIX_DATE: + rtc_maincb_fix_date(); + gUpdateSuccessful |= 1; + *state = MAINCB_CHECK_PACIFIDLOG_TM; + break; + case MAINCB_CHECK_PACIFIDLOG_TM: + if (flash_maincb_check_need_reset_pacifidlog_tm() == TRUE) + *state = MAINCB_FINISHED; + else + *state = MAINCB_FIX_PACIFIDLOG_TM; + break; + case MAINCB_FIX_PACIFIDLOG_TM: + msg_display(MSGBOX_UPDATING); + if (flash_maincb_reset_pacifidlog_tm() == TRUE) + { + gUpdateSuccessful |= 1; + *state = MAINCB_FINISHED; + } + else + *state = MAINCB_ERROR; + break; + case MAINCB_FINISHED: + if (gUpdateSuccessful == 0) + *state = MAINCB_NO_NEED_TO_FIX; + else + msg_display(MSGBOX_HAS_BEEN_UPDATED); + break; + case MAINCB_NO_NEED_TO_FIX: + msg_display(MSGBOX_NO_NEED_TO_UPDATE); + break; + case MAINCB_YEAR_MAKES_NO_SENSE: + msg_display(MSGBOX_UNABLE_TO_UPDATE); + break; + case MAINCB_ERROR: + msg_display(MSGBOX_UNABLE_TO_UPDATE); + break; + } +} + +void DBG_LoadDigitsPal(void) +{ + const u16 * src; + s32 i; + register vu16 * dest asm("r3") = (vu16 *)BG_PLTT + 1; + DmaFill16(3, RGB(31, 31, 31), (vu16 *)BG_PLTT, BG_PLTT_SIZE); + src = sDebugPals; + for (i = 0; i < 4; i++) + { + *dest = *src; + dest += 16; + src++; + } +} + +void DBG_LoadDigits(void) +{ + DmaFill16(3, 0x1111, (void *)VRAM + 0x8420, 0x1800); + DmaCopy32(3, sDebugDigitsGfx, (void *)VRAM + 0x8600, 0x200); + DBG_LoadDigitsPal(); +} diff --git a/berry_fix/payload/src/rtc.c b/berry_fix/payload/src/rtc.c new file mode 100644 index 000000000..e73f522aa --- /dev/null +++ b/berry_fix/payload/src/rtc.c @@ -0,0 +1,346 @@ +#include "gba/gba.h" +#include "siirtc.h" +#include "global.h" +#include "main.h" + +struct Time gTimeSinceBerryUpdate; +struct Time gRtcUTCTime; + +static u16 sRtcProbeStatus; +static struct SiiRtcInfo sRtcInfoBuffer; +static u8 sRtcProbeCode; +static u16 sImeBak; +static struct SiiRtcInfo sRtcInfoWork; + +const struct SiiRtcInfo sDefaultRTC = { + .year = 0, // 2000 + .month = 1, // January + .day = 1, // 01 + .dayOfWeek = 0, + .hour = 0, + .minute = 0, + .second = 0, + .status = 0, + .alarmHour = 0, + .alarmMinute = 0 +}; +const s32 sDaysPerMonth[] = { + 31, + 28, + 31, + 30, + 31, + 30, + 31, + 31, + 30, + 31, + 30, + 31 +}; + +void rtc_get_status_and_datetime(struct SiiRtcInfo *); +u16 rtc_validate_datetime(struct SiiRtcInfo *); + + +void rtc_intr_disable(void) +{ + sImeBak = REG_IME; + REG_IME = 0; +} + +void rtc_intr_enable(void) +{ + REG_IME = sImeBak; +} + +s32 bcd_to_hex(u8 a0) +{ + if (a0 >= 0xa0 || (a0 & 0xF) >= 10) + return 0xFF; + return ((a0 >> 4) & 0xF) * 10 + (a0 & 0xF); +} + +bool8 is_leap_year(u8 year) +{ + if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) + return TRUE; + return FALSE; +} + +u16 rtc_count_days_parameterized(u8 year, u8 month, u8 day) +{ + u16 numDays = 0; + s32 i; + for (i = year - 1; i > 0; i--) + { + numDays += 365; + if (is_leap_year(i) == TRUE) + numDays++; + } + for (i = 0; i < month - 1; i++) + numDays += sDaysPerMonth[i]; + if (month > MONTH_FEB && is_leap_year(year) == TRUE) + numDays++; + numDays += day; + return numDays; +} + +u16 rtc_count_days_from_info(struct SiiRtcInfo *info) +{ + return rtc_count_days_parameterized(bcd_to_hex(info->year), bcd_to_hex(info->month), bcd_to_hex(info->day)); +} + +static void rtc_probe_status(void) +{ + sRtcProbeStatus = 0; + rtc_intr_disable(); + SiiRtcUnprotect(); + sRtcProbeCode = SiiRtcProbe(); + rtc_intr_enable(); + if ((sRtcProbeCode & 0xF) != 1) + sRtcProbeStatus = 1; + else + { + if (sRtcProbeCode & 0xF0) + sRtcProbeStatus = 2; + else + sRtcProbeStatus = 0; + rtc_get_status_and_datetime(&sRtcInfoBuffer); + sRtcProbeStatus = rtc_validate_datetime(&sRtcInfoBuffer); + } +} + +u16 rtc_get_probe_status(void) +{ + return sRtcProbeStatus; +} + +void sub_020106EC(struct SiiRtcInfo * info) +{ + if (sRtcProbeStatus & 0xFF0) + *info = sDefaultRTC; + else + rtc_get_status_and_datetime(info); +} + +void rtc_get_datetime(struct SiiRtcInfo * info) +{ + rtc_intr_disable(); + SiiRtcGetDateTime(info); + rtc_intr_enable(); +} + +void rtc_get_status(struct SiiRtcInfo * info) +{ + rtc_intr_disable(); + SiiRtcGetStatus(info); + rtc_intr_enable(); +} + +void rtc_get_status_and_datetime(struct SiiRtcInfo * info) +{ + rtc_get_status(info); + rtc_get_datetime(info); +} + +u16 rtc_validate_datetime(struct SiiRtcInfo * info) +{ + s32 year, month, day; + u16 r4 = (info->status & SIIRTCINFO_POWER) ? 0x20 : 0; + if (!(info->status & SIIRTCINFO_24HOUR)) + r4 |= 0x10; + year = bcd_to_hex(info->year); + if (year == 0xFF) + r4 |= 0x40; + month = bcd_to_hex(info->month); + if (month == 0xFF || month == 0 || month > 12) + r4 |= 0x80; + day = bcd_to_hex(info->day); + if (day == 0xFF) + r4 |= 0x100; + if (month == MONTH_FEB) + { + if (day > is_leap_year(year) + sDaysPerMonth[1]) + r4 |= 0x100; + } + else + { + if (day > sDaysPerMonth[month - 1]) + r4 |= 0x100; + } + day = bcd_to_hex(info->hour); + if (day > 24) + r4 |= 0x200; + day = bcd_to_hex(info->minute); + if (day > 60) + r4 |= 0x400; + day = bcd_to_hex(info->second); + if (day > 60) + r4 |= 0x800; + return r4; +} + +void rtc_reset(void) +{ + rtc_intr_disable(); + SiiRtcReset(); + rtc_intr_enable(); +} + +void rtc_sub_time_from_datetime(struct SiiRtcInfo * datetime, struct Time * dest, struct Time * timediff) +{ + u16 r4 = rtc_count_days_from_info(datetime); + dest->seconds = bcd_to_hex(datetime->second) - timediff->seconds; + dest->minutes = bcd_to_hex(datetime->minute) - timediff->minutes; + dest->hours = bcd_to_hex(datetime->hour) - timediff->hours; + dest->days = r4 - timediff->days; + if (dest->seconds < 0) + { + dest->seconds += 60; + dest->minutes--; + } + if (dest->minutes < 0) + { + dest->minutes += 60; + dest->hours--; + } + if (dest->hours < 0) + { + dest->hours += 24; + dest->days--; + } +} + +void rtc_sub_time_from_time(struct Time * dest, struct Time * diff, struct Time * src) +{ + dest->seconds = src->seconds - diff->seconds; + dest->minutes = src->minutes - diff->minutes; + dest->hours = src->hours - diff->hours; + dest->days = src->days - diff->days; + if (dest->seconds < 0) + { + dest->seconds += 60; + dest->minutes--; + } + if (dest->minutes < 0) + { + dest->minutes += 60; + dest->hours--; + } + if (dest->hours < 0) + { + dest->hours += 24; + dest->days--; + } +} + +bool32 rtc_maincb_is_rtc_working(void) +{ + rtc_probe_status(); + if (rtc_get_probe_status() & 0xFF0) + return FALSE; + return TRUE; +} + +void rtc_set_datetime(struct SiiRtcInfo * info) +{ + vu16 imeBak = REG_IME; + REG_IME = 0; + SiiRtcSetDateTime(info); + REG_IME = imeBak; +} + +bool32 rtc_maincb_is_time_since_last_berry_update_positive(u8 * a0) +{ + rtc_get_status_and_datetime(&sRtcInfoWork); + *a0 = bcd_to_hex(sRtcInfoWork.year); + rtc_sub_time_from_datetime(&sRtcInfoWork, &gRtcUTCTime, LocalTimeOffset); + rtc_sub_time_from_time(&gTimeSinceBerryUpdate, LastBerryTreeUpdate, &gRtcUTCTime); + if (gTimeSinceBerryUpdate.days * 1440 + gTimeSinceBerryUpdate.hours * 60 + gTimeSinceBerryUpdate.minutes >= 0) + return TRUE; + return FALSE; +} + +u32 hex_to_bcd(u8 a0) +{ + u32 r4; + if (a0 > 99) + return 0xFF; + r4 = Div(a0, 10) << 4; + r4 |= Mod(a0, 10); + return r4; +} + +void sii_rtc_inc(u8 * a0) +{ + *a0 = hex_to_bcd(bcd_to_hex(*a0) + 1); +} + +void sii_rtc_inc_month(struct SiiRtcInfo * a0) +{ + sii_rtc_inc(&a0->month); + if (bcd_to_hex(a0->month) > 12) + { + sii_rtc_inc(&a0->year); + a0->month = MONTH_JAN; + } +} + +void sii_rtc_inc_day(struct SiiRtcInfo * a0) +{ + sii_rtc_inc(&a0->day); + if (bcd_to_hex(a0->day) > sDaysPerMonth[bcd_to_hex(a0->month) - 1]) + { + if (!is_leap_year(bcd_to_hex(a0->year)) || bcd_to_hex(a0->month) != MONTH_FEB || bcd_to_hex(a0->day) != 29) + { + a0->day = 1; + sii_rtc_inc_month(a0); + } + } +} + +bool32 rtc_is_past_feb_28_2000(struct SiiRtcInfo * a0) +{ + if (bcd_to_hex(a0->year) == 0) + { + if (bcd_to_hex(a0->month) == MONTH_JAN) + return FALSE; + if (bcd_to_hex(a0->month) > MONTH_FEB) + return TRUE; + if (bcd_to_hex(a0->day) == 29) + return TRUE; + return FALSE; + } + if (bcd_to_hex(a0->year) == 1) + return TRUE; + return FALSE; +} + +void rtc_maincb_fix_date(void) +{ + rtc_get_status_and_datetime(&sRtcInfoWork); + if (bcd_to_hex(sRtcInfoWork.year) == 0 || bcd_to_hex(sRtcInfoWork.year) == 1) + { + if (bcd_to_hex(sRtcInfoWork.year) == 1) + { + sRtcInfoWork.year = 2; + sRtcInfoWork.month = MONTH_JAN; + sRtcInfoWork.day = 2; + rtc_set_datetime(&sRtcInfoWork); + } + else + { + if (rtc_is_past_feb_28_2000(&sRtcInfoWork) == TRUE) + { + sii_rtc_inc_day(&sRtcInfoWork); + sii_rtc_inc(&sRtcInfoWork.year); + } + else + { + sii_rtc_inc(&sRtcInfoWork.year); + } + rtc_set_datetime(&sRtcInfoWork); + } + } +} diff --git a/berry_fix/payload/src/siirtc.c b/berry_fix/payload/src/siirtc.c new file mode 100644 index 000000000..965a068f1 --- /dev/null +++ b/berry_fix/payload/src/siirtc.c @@ -0,0 +1,432 @@ +// Ruby/Sapphire/Emerald cartridges contain a Seiko Instruments Inc. (SII) +// S-3511A real-time clock (RTC). This library ("SIIRTC_V001") is for +// communicating with the RTC. + +#include "gba/gba.h" +#include "siirtc.h" + +#define STATUS_INTFE 0x02 // frequency interrupt enable +#define STATUS_INTME 0x08 // per-minute interrupt enable +#define STATUS_INTAE 0x20 // alarm interrupt enable +#define STATUS_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode +#define STATUS_POWER 0x80 // power on or power failure occurred + +#define TEST_MODE 0x80 // flag in the "second" byte + +#define ALARM_AM 0x00 +#define ALARM_PM 0x80 + +#define OFFSET_YEAR offsetof(struct SiiRtcInfo, year) +#define OFFSET_MONTH offsetof(struct SiiRtcInfo, month) +#define OFFSET_DAY offsetof(struct SiiRtcInfo, day) +#define OFFSET_DAY_OF_WEEK offsetof(struct SiiRtcInfo, dayOfWeek) +#define OFFSET_HOUR offsetof(struct SiiRtcInfo, hour) +#define OFFSET_MINUTE offsetof(struct SiiRtcInfo, minute) +#define OFFSET_SECOND offsetof(struct SiiRtcInfo, second) +#define OFFSET_STATUS offsetof(struct SiiRtcInfo, status) +#define OFFSET_ALARM_HOUR offsetof(struct SiiRtcInfo, alarmHour) +#define OFFSET_ALARM_MINUTE offsetof(struct SiiRtcInfo, alarmMinute) + +#define INFO_BUF(info, index) (*((u8 *)(info) + (index))) + +#define DATETIME_BUF(info, index) INFO_BUF(info, OFFSET_YEAR + index) +#define DATETIME_BUF_LEN (OFFSET_SECOND - OFFSET_YEAR + 1) + +#define TIME_BUF(info, index) INFO_BUF(info, OFFSET_HOUR + index) +#define TIME_BUF_LEN (OFFSET_SECOND - OFFSET_HOUR + 1) + +#define WR 0 // command for writing data +#define RD 1 // command for reading data + +#define CMD(n) (0x60 | (n << 1)) + +#define CMD_RESET CMD(0) +#define CMD_STATUS CMD(1) +#define CMD_DATETIME CMD(2) +#define CMD_TIME CMD(3) +#define CMD_ALARM CMD(4) + +#define GPIO_PORT_DATA (*(vu16 *)0x80000C4) +#define GPIO_PORT_DIRECTION (*(vu16 *)0x80000C6) +#define GPIO_PORT_READ_ENABLE (*(vu16 *)0x80000C8) + +extern vu16 GPIOPortDirection; + +static u16 sDummy; // unused variable +static bool8 sLocked; + +static int WriteCommand(u8 value); +static int WriteData(u8 value); +static u8 ReadData(); +static void EnableGpioPortRead(); +static void DisableGpioPortRead(); + +static const char AgbLibRtcVersion[] = "SIIRTC_V001"; + +void SiiRtcUnprotect() +{ + EnableGpioPortRead(); + sLocked = FALSE; +} + +void SiiRtcProtect() +{ + DisableGpioPortRead(); + sLocked = TRUE; +} + +u8 SiiRtcProbe() +{ + u8 errorCode; + struct SiiRtcInfo rtc; + + if (!SiiRtcGetStatus(&rtc)) + return 0; + + errorCode = 0; + + if ((rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == SIIRTCINFO_POWER + || (rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == 0) + { + // The RTC is in 12-hour mode. Reset it and switch to 24-hour mode. + + // Note that the conditions are redundant and equivalent to simply + // "(rtc.status & SIIRTCINFO_24HOUR) == 0". It's possible that this + // was also intended to handle resetting the clock after power failure + // but a mistake was made. + + if (!SiiRtcReset()) + return 0; + + errorCode++; + } + + SiiRtcGetTime(&rtc); + + if (rtc.second & TEST_MODE) + { + // The RTC is in test mode. Reset it to leave test mode. + + if (!SiiRtcReset()) + return (errorCode << 4) & 0xF0; + + errorCode++; + } + + return (errorCode << 4) | 1; +} + +bool8 SiiRtcReset() +{ + u8 result; + struct SiiRtcInfo rtc; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_RESET | WR); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + rtc.status = SIIRTCINFO_24HOUR; + + result = SiiRtcSetStatus(&rtc); + + return result; +} + +bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc) +{ + u8 statusData; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_STATUS | RD); + + GPIO_PORT_DIRECTION = 5; + + statusData = ReadData(); + + rtc->status = (statusData & (STATUS_POWER | STATUS_24HOUR)) + | ((statusData & STATUS_INTAE) >> 3) + | ((statusData & STATUS_INTME) >> 2) + | ((statusData & STATUS_INTFE) >> 1); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc) +{ + u8 statusData; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + statusData = STATUS_24HOUR + | ((rtc->status & SIIRTCINFO_INTAE) << 3) + | ((rtc->status & SIIRTCINFO_INTME) << 2) + | ((rtc->status & SIIRTCINFO_INTFE) << 1); + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_STATUS | WR); + + WriteData(statusData); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc) +{ + u8 i; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_DATETIME | RD); + + GPIO_PORT_DIRECTION = 5; + + for (i = 0; i < DATETIME_BUF_LEN; i++) + DATETIME_BUF(rtc, i) = ReadData(); + + INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc) +{ + u8 i; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_DATETIME | WR); + + for (i = 0; i < DATETIME_BUF_LEN; i++) + WriteData(DATETIME_BUF(rtc, i)); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc) +{ + u8 i; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_TIME | RD); + + GPIO_PORT_DIRECTION = 5; + + for (i = 0; i < TIME_BUF_LEN; i++) + TIME_BUF(rtc, i) = ReadData(); + + INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc) +{ + u8 i; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_TIME | WR); + + for (i = 0; i < TIME_BUF_LEN; i++) + WriteData(TIME_BUF(rtc, i)); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc) +{ + u8 i; + u8 alarmData[2]; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + // Decode BCD. + alarmData[0] = (rtc->alarmHour & 0xF) + 10 * ((rtc->alarmHour >> 4) & 0xF); + + // The AM/PM flag must be set correctly even in 24-hour mode. + + if (alarmData[0] < 12) + alarmData[0] = rtc->alarmHour | ALARM_AM; + else + alarmData[0] = rtc->alarmHour | ALARM_PM; + + alarmData[1] = rtc->alarmMinute; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIOPortDirection = 7; // Why is this the only instance that uses a symbol? + + WriteCommand(CMD_ALARM | WR); + + for (i = 0; i < 2; i++) + WriteData(alarmData[i]); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +static int WriteCommand(u8 value) +{ + u8 i; + u8 temp; + + for (i = 0; i < 8; i++) + { + temp = ((value >> (7 - i)) & 1); + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 5; + } + + // control reaches end of non-void function +} + +static int WriteData(u8 value) +{ + u8 i; + u8 temp; + + for (i = 0; i < 8; i++) + { + temp = ((value >> i) & 1); + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 5; + } + + // control reaches end of non-void function +} + +static u8 ReadData() +{ + u8 i; + u8 temp; + u8 value; + + for (i = 0; i < 8; i++) + { + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 5; + + temp = ((GPIO_PORT_DATA & 2) >> 1); + value = (value >> 1) | (temp << 7); // UB: accessing uninitialized var + } + + return value; +} + +static void EnableGpioPortRead() +{ + GPIO_PORT_READ_ENABLE = 1; +} + +static void DisableGpioPortRead() +{ + GPIO_PORT_READ_ENABLE = 0; +} diff --git a/berry_fix/payload/sym_bss.txt b/berry_fix/payload/sym_bss.txt new file mode 100644 index 000000000..3b1c62ae9 --- /dev/null +++ b/berry_fix/payload/sym_bss.txt @@ -0,0 +1,5 @@ + .include "src/main.o" + .include "src/rtc.o" + .include "src/flash.o" + .include "src/agb_flash.o" + .include "src/siirtc.o" diff --git a/berry_fix/payload/sym_common.txt b/berry_fix/payload/sym_common.txt new file mode 100644 index 000000000..28b47f52e --- /dev/null +++ b/berry_fix/payload/sym_common.txt @@ -0,0 +1,29 @@ + .include "main.o" + .include "rtc.o" + + .align 4 +gFirstSaveSector: @ 0x03001220 + .space 0x4 + +gPrevSaveCounter: @ 0x03001224 + .space 0x4 + +gLastKnownGoodSector: @ 0x03001228 + .space 0x4 + +gDamagedSaveSectors: @ 0x0300122C + .space 0x4 + +gSaveCounter: @ 0x03001230 + .space 0x4 + +gFastSaveSection: @ 0x03001234 + .space 0x4 + +gCurSaveChunk: + .space 0x4 + +gFlashIdentIsValid: @ 0x0300123C + .space 0x4 + + .include "agb_flash.o" diff --git a/berry_fix/payload/sym_ewram.txt b/berry_fix/payload/sym_ewram.txt new file mode 100644 index 000000000..2c61f5e7e --- /dev/null +++ b/berry_fix/payload/sym_ewram.txt @@ -0,0 +1,3 @@ + .include "src/main.o" + .include "src/rtc.o" + .include "src/flash.o" diff --git a/berry_fix/rom.sha1 b/berry_fix/rom.sha1 new file mode 100644 index 000000000..145b083b2 --- /dev/null +++ b/berry_fix/rom.sha1 @@ -0,0 +1 @@ +2eb0a94a913bebfb4cb59ceb57f3f965da55ef6d berry_fix.gba diff --git a/build_tools.sh b/build_tools.sh index b11a9a1b2..93f6065be 100755 --- a/build_tools.sh +++ b/build_tools.sh @@ -1,12 +1,8 @@ #!/bin/sh -make -C tools/gbagfx CXX=${1:-g++} -make -C tools/scaninc CXX=${1:-g++} -make -C tools/preproc CXX=${1:-g++} -make -C tools/bin2c CXX=${1:-g++} -make -C tools/rsfont CXX=${1:-g++} -make -C tools/aif2pcm CXX=${1:-g++} -make -C tools/ramscrgen CXX=${1:-g++} -make -C tools/gbafix CXX=${1:-g++} -make -C tools/mid2agb CXX=${1:-g++} -make -C tools/mapjson CXX=${1:-g++} -make -C tools/jsonproc CXX=${1:-g++} + +echo "This script is deprecated. Next time, run \"make tools\" instead." +for dname in tools/*; do + if [ -f ${dname}/Makefile ]; then + make -C ${dname} CXX=${1:-g++} --no-print-directory + fi +done diff --git a/charmap.txt b/charmap.txt index 43ff737a0..c449d12b0 100644 --- a/charmap.txt +++ b/charmap.txt @@ -990,7 +990,16 @@ PH_NURSE_SOLO = 61 02 A_BUTTON = F8 00 B_BUTTON = F8 01 +L_BUTTON = F8 02 +R_BUTTON = F8 03 +START_BUTTON = F8 04 +SELECT_BUTTON = F8 05 +DPAD_UP = F8 06 +DPAD_DOWN = F8 07 +DPAD_LEFT = F8 08 +DPAD_RIGHT = F8 09 DPAD_UPDOWN = F8 0A +DPAD_LEFTRIGHT = F8 0B DPAD_NONE = F8 0C UP_ARROW_2 = F9 00 diff --git a/common_syms/field_specials.txt b/common_syms/field_specials.txt index 25d874a65..7adb3f669 100644 --- a/common_syms/field_specials.txt +++ b/common_syms/field_specials.txt @@ -1 +1 @@ -gUnknown_030061D0 +gScrollableMultichoice_ListMenuTemplate diff --git a/constants/berry_constants.inc b/constants/berry_constants.inc deleted file mode 100644 index 2ecd7ac36..000000000 --- a/constants/berry_constants.inc +++ /dev/null @@ -1,6 +0,0 @@ - .set BERRY_FIRMNESS_UNKNOWN, 0 - .set BERRY_FIRMNESS_VERY_SOFT, 1 - .set BERRY_FIRMNESS_SOFT, 2 - .set BERRY_FIRMNESS_HARD, 3 - .set BERRY_FIRMNESS_VERY_HARD, 4 - .set BERRY_FIRMNESS_SUPER_HARD, 5 diff --git a/constants/constants.inc b/constants/constants.inc index 7c74c8e87..a58bf92a2 100644 --- a/constants/constants.inc +++ b/constants/constants.inc @@ -1,6 +1,4 @@ .include "constants/gba_constants.inc" .include "constants/global.inc" .include "constants/contest_constants.inc" - .include "constants/pokemon_data_constants.inc" - .include "constants/berry_constants.inc" .include "constants/contest_move_effects.inc" diff --git a/constants/pokemon_data_constants.inc b/constants/pokemon_data_constants.inc deleted file mode 100644 index 646bd6d4c..000000000 --- a/constants/pokemon_data_constants.inc +++ /dev/null @@ -1,35 +0,0 @@ - .set GROWTH_MEDIUM_FAST, 0x00 - .set GROWTH_ERRATIC, 0x01 - .set GROWTH_FLUCTUATING, 0x02 - .set GROWTH_MEDIUM_SLOW, 0x03 - .set GROWTH_FAST, 0x04 - .set GROWTH_SLOW, 0x05 - - .set BODY_COLOR_RED, 0x00 - .set BODY_COLOR_BLUE, 0x01 - .set BODY_COLOR_YELLOW, 0x02 - .set BODY_COLOR_GREEN, 0x03 - .set BODY_COLOR_BLACK, 0x04 - .set BODY_COLOR_BROWN, 0x05 - .set BODY_COLOR_PURPLE, 0x06 - .set BODY_COLOR_GRAY, 0x07 - .set BODY_COLOR_WHITE, 0x08 - .set BODY_COLOR_PINK, 0x09 - - .set F_SUMMARY_SCREEN_FLIP_SPRITE, 0x80 - - .set EVO_FRIENDSHIP, 0x0001 @ Pokémon levels up with friendship ≥ 220 - .set EVO_FRIENDSHIP_DAY, 0x0002 @ Pokémon levels up during the day with friendship ≥ 220 - .set EVO_FRIENDSHIP_NIGHT, 0x0003 @ Pokémon levels up at night with friendship ≥ 220 - .set EVO_LEVEL, 0x0004 @ Pokémon reaches the specified level - .set EVO_TRADE, 0x0005 @ Pokémon is traded - .set EVO_TRADE_ITEM, 0x0006 @ Pokémon is traded while it's holding the specified item - .set EVO_ITEM, 0x0007 @ specified item is used on Pokémon - .set EVO_LEVEL_ATK_GT_DEF, 0x0008 @ Pokémon reaches the specified level with attack > defense - .set EVO_LEVEL_ATK_EQ_DEF, 0x0009 @ Pokémon reaches the specified level with attack = defense - .set EVO_LEVEL_ATK_LT_DEF, 0x000a @ Pokémon reaches the specified level with attack < defense - .set EVO_LEVEL_SILCOON, 0x000b @ Pokémon reaches the specified level with a Silcoon personality value - .set EVO_LEVEL_CASCOON, 0x000c @ Pokémon reaches the specified level with a Cascoon personality value - .set EVO_LEVEL_NINJASK, 0x000d @ Pokémon reaches the specified level (special value for Ninjask) - .set EVO_LEVEL_SHEDINJA, 0x000e @ Pokémon reaches the specified level (special value for Shedinja) - .set EVO_BEAUTY, 0x000f @ Pokémon levels up with beauty ≥ specified value diff --git a/data/berry_fix.mb b/data/berry_fix.mb Binary files differdeleted file mode 100644 index 0afff07f5..000000000 --- a/data/berry_fix.mb +++ /dev/null diff --git a/data/ereader_helpers.s b/data/ereader_helpers.s deleted file mode 100644 index 246fe749b..000000000 --- a/data/ereader_helpers.s +++ /dev/null @@ -1,53 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -gUnknown_08625B6C:: @ 8625B6C -@ apparently e-reader trainer data? idk - .byte 0x6f, 0x57, 0x54, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x14, 0x0c, 0x0e, 0x23, 0x10, 0x47, 0x0a, 0x1f, 0x06, 0x24, 0x0e, 0x48, 0x0a, 0x0f, 0x06 - .byte 0x22, 0x27, 0x2c, 0x16, 0x07, 0x06, 0x01, 0x0c, 0x47, 0x0a, 0x06, 0x06, 0x24, 0x0e, 0x00, 0x1e, 0x19, 0x12, 0x05, 0x0c, 0x25, 0x16, 0x25, 0x10, 0x0d, 0x1c, 0x2a, 0x1c, 0x06, 0x0a, 0x06, 0x0c - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .byte 0xff, 0xff, 0xff, 0x00, 0x70, 0x01, 0xdb, 0x00, 0xbc, 0x00, 0xf7, 0x00, 0xdc, 0x00, 0x19, 0x01, 0x00, 0x00, 0x37, 0xff, 0x64, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x8a - .byte 0x80, 0x00, 0x00, 0x00, 0x6f, 0x79, 0x69, 0xae, 0x71, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x01, 0xb3, 0x00, 0x3e, 0x01, 0xbc, 0x00, 0xf7, 0x00, 0xca, 0x00, 0x00, 0x00, 0x00, 0xff - .byte 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x95, 0x58, 0x59, 0x52, 0x79, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0x01, 0xb7, 0x00 - .byte 0xf6, 0x00, 0x39, 0x00, 0x59, 0x00, 0x85, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x9b, 0xff, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x2f, 0x00, 0x00, 0x00, 0x8d, 0xae, 0x77, 0x7e - .byte 0x5d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - - - .byte 0x6a, 0x79, 0x6b, 0x64, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, 0x00, 0x54, 0x27, 0x2b, 0x0e, 0xff, 0xff, 0x3b, 0x0a, 0x20, 0x06, 0x00, 0x0c, 0x13, 0x24, 0x2b, 0x0e - .byte 0xff, 0xff, 0x3b, 0x0a, 0x05, 0x12, 0x00, 0x0c, 0x6b, 0x26, 0x2b, 0x0e, 0xff, 0xff, 0x3b, 0x0a, 0x0e, 0x12, 0x00, 0x0c, 0x2c, 0x24, 0x2b, 0x0e, 0xff, 0xff, 0x3b, 0x0a, 0x17, 0x12, 0x00, 0x0c - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .byte 0xff, 0xff, 0xff, 0x00, 0x59, 0x01, 0xb7, 0x00, 0xca, 0x00, 0xb9, 0x00, 0x09, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x37, 0x00, 0x64, 0x00, 0xff, 0x64, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a - .byte 0x8c, 0x00, 0x00, 0x00, 0x69, 0x58, 0x60, 0x5d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x31, 0x01, 0xb3, 0x00, 0x07, 0x01, 0x4c, 0x01, 0x62, 0x00, 0x68, 0x00, 0x00, 0x00, 0xff, 0xff - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x80, 0x00, 0x00, 0x00, 0x55, 0x55, 0x5d, 0x96, 0x72, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x44, 0x01, 0x86, 0x00 - .byte 0x39, 0x00, 0x59, 0x00, 0x85, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x65, 0x6f, 0x8e, 0x7e - .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .byte 0x72, 0x52, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x27, 0x01, 0x00, 0x00, 0x00, 0x4a, 0x04, 0x0e, 0x02, 0x35, 0x16, 0x10, 0x10, 0xda, 0x26, 0x3e, 0x10, 0x4a, 0x04, 0x0e, 0x02 - .byte 0x47, 0x0a, 0xd9, 0x26, 0x21, 0x16, 0x3e, 0x10, 0x14, 0x1e, 0x07, 0x1e, 0x30, 0x06, 0x23, 0x16, 0x24, 0x0e, 0x06, 0x0c, 0x18, 0x14, 0x2f, 0x14, 0x1a, 0x08, 0x27, 0x1c, 0x00, 0x0c, 0xff, 0xff - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .byte 0xff, 0xff, 0xff, 0x00, 0x3c, 0x01, 0x8d, 0x00, 0x2f, 0x00, 0x22, 0x00, 0xf7, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a - .byte 0x03, 0x00, 0x00, 0x00, 0x54, 0x68, 0x5a, 0x7b, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6b, 0x01, 0xc8, 0x00, 0xca, 0x00, 0x40, 0x01, 0x5c, 0x00, 0x49, 0x00, 0x00, 0x00, 0xff, 0x00 - .byte 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x8a, 0x06, 0x00, 0x00, 0x00, 0x7b, 0x8f, 0x78, 0x51, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x24, 0x01, 0xb3, 0x00 - .byte 0x3e, 0x01, 0x4c, 0x01, 0xd5, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x64, 0xc8, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x51, 0x8a, 0x6a, 0x7e - .byte 0x64, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .byte 0x9c, 0x54, 0xae, 0x79, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0a, 0x02, 0x06, 0x20, 0x06, 0x0a, 0x0a, 0x23, 0x10, 0x00, 0x0c, 0x28, 0x0c, 0x14, 0x18 - .byte 0x32, 0x14, 0x02, 0x16, 0x05, 0x10, 0xff, 0xff, 0x0c, 0x1e, 0x0a, 0x0a, 0x34, 0x12, 0x11, 0x1e, 0x1a, 0x08, 0x05, 0x0c, 0x1e, 0x0a, 0x02, 0x06, 0x20, 0x06, 0x22, 0x0a, 0x15, 0x10, 0x01, 0x0c - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .byte 0xff, 0xff, 0xff, 0x00, 0x63, 0x01, 0xb3, 0x00, 0xf2, 0x00, 0x35, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0xff, 0x9b, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x8a - .byte 0x00, 0x00, 0x00, 0x00, 0x58, 0x61, 0xae, 0x64, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4b, 0x01, 0xc6, 0x00, 0x39, 0x00, 0xf2, 0x00, 0x26, 0x00, 0x59, 0x00, 0x00, 0x00, 0xff, 0x00 - .byte 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x96, 0x00, 0x00, 0x00, 0x5b, 0x72, 0x6a, 0x91, 0xae, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0x01, 0x8d, 0x00 - .byte 0x5e, 0x00, 0xf7, 0x00, 0x55, 0x00, 0x05, 0x01, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x96, 0x00, 0x00, 0x00, 0x8d, 0x85, 0x9e, 0xa0 - .byte 0x60, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff diff --git a/data/ereader_screen.s b/data/ereader_screen.s deleted file mode 100755 index 3d6572a49..000000000 --- a/data/ereader_screen.s +++ /dev/null @@ -1,7 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -gUnknown_0862609C:: @ 862609C - .incbin "data/unknown_jp_62609C.bin" diff --git a/data/event_scripts.s b/data/event_scripts.s index 191fe5d60..1ed8581f9 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1,26 +1,35 @@ #include "constants/global.h" +#include "constants/battle.h" #include "constants/battle_frontier.h" #include "constants/battle_setup.h" +#include "constants/berry.h" +#include "constants/contest.h" +#include "constants/daycare.h" +#include "constants/decorations.h" #include "constants/easy_chat.h" #include "constants/event_objects.h" #include "constants/event_object_movement_constants.h" #include "constants/field_effects.h" +#include "constants/field_specials.h" #include "constants/flags.h" -#include "constants/decorations.h" +#include "constants/game_stat.h" +#include "constants/item.h" #include "constants/items.h" #include "constants/heal_locations.h" #include "constants/layouts.h" +#include "constants/lilycove_lady.h" #include "constants/map_scripts.h" #include "constants/maps.h" +#include "constants/metatile_labels.h" #include "constants/moves.h" +#include "constants/pokemon.h" +#include "constants/script_menu.h" #include "constants/songs.h" #include "constants/species.h" +#include "constants/trainer_hill.h" #include "constants/trainers.h" #include "constants/vars.h" #include "constants/weather.h" -#include "constants/trainer_hill.h" -#include "constants/battle.h" -#include "constants/metatile_labels.h" .include "asm/macros.inc" .include "asm/macros/event.inc" .include "constants/constants.inc" @@ -466,22 +475,22 @@ gUnknown_0823B4E8:: @ 823B4E8 ;EventScript_SecretBasePCCancel? end EventScript_SecretBasePCMainMenuChoice:: @ 823B4EF - multichoice 0, 0, 6, 0 + multichoice 0, 0, MULTI_DECOR_REGISTRY, 0 switch VAR_RESULT case 0, EventScript_23B581 case 1, EventScript_23B568 case 2, EventScript_23B585 case 3, EventScript_23B66E - case 127, EventScript_23B66E + case MULTI_B_PRESSED, EventScript_23B66E end EventScript_23B531:: @ 823B531 - multichoice 0, 0, 5, 0 + multichoice 0, 0, MULTI_DECOR_NOREGISTRY, 0 switch VAR_RESULT case 0, EventScript_23B581 case 1, EventScript_23B568 case 2, EventScript_23B66E - case 127, EventScript_23B66E + case MULTI_B_PRESSED, EventScript_23B66E end EventScript_23B568:: @ 823B568 @@ -516,13 +525,13 @@ EventScript_RecordMixingSecretBasePC:: @ 823B589 EventScript_23B5A1:: @ 823B5A1 message Text_SecretBasePCStartMenu waitmessage - multichoice 0, 0, 7, 0 + multichoice 0, 0, MULTI_REGISTER_MENU, 0 switch VAR_RESULT case 0, EventScript_23B5F0 case 1, EventScript_23B585 case 2, EventScript_23B660 case 3, EventScript_23B66E - case 127, EventScript_23B66E + case MULTI_B_PRESSED, EventScript_23B66E end gUnknown_0823B5E9:: @ 823B5E9 @@ -849,86 +858,86 @@ Std_MsgboxAutoclose:: @ 8271494 return EventScript_ResetAllBerries:: @ 827149D - setberrytree 2, ITEM_TO_BERRY(ITEM_ORAN_BERRY), 5 - setberrytree 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5 - setberrytree 11, ITEM_TO_BERRY(ITEM_ORAN_BERRY), 5 - setberrytree 13, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5 - setberrytree 4, ITEM_TO_BERRY(ITEM_ORAN_BERRY), 5 - setberrytree 76, ITEM_TO_BERRY(ITEM_CHERI_BERRY), 5 - setberrytree 8, ITEM_TO_BERRY(ITEM_CHERI_BERRY), 5 - setberrytree 10, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), 5 - setberrytree 25, ITEM_TO_BERRY(ITEM_PINAP_BERRY), 5 - setberrytree 26, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), 5 - setberrytree 66, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), 5 - setberrytree 67, ITEM_TO_BERRY(ITEM_PINAP_BERRY), 5 - setberrytree 69, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), 5 - setberrytree 70, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), 5 - setberrytree 71, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), 5 - setberrytree 55, ITEM_TO_BERRY(ITEM_BLUK_BERRY), 5 - setberrytree 56, ITEM_TO_BERRY(ITEM_BLUK_BERRY), 5 - setberrytree 5, ITEM_TO_BERRY(ITEM_CHERI_BERRY), 5 - setberrytree 6, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), 5 - setberrytree 7, ITEM_TO_BERRY(ITEM_CHERI_BERRY), 5 - setberrytree 16, ITEM_TO_BERRY(ITEM_NANAB_BERRY), 5 - setberrytree 17, ITEM_TO_BERRY(ITEM_NANAB_BERRY), 5 - setberrytree 18, ITEM_TO_BERRY(ITEM_NANAB_BERRY), 5 - setberrytree 29, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), 5 - setberrytree 28, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), 5 - setberrytree 27, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), 5 - setberrytree 24, ITEM_TO_BERRY(ITEM_RAWST_BERRY), 5 - setberrytree 23, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5 - setberrytree 22, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5 - setberrytree 21, ITEM_TO_BERRY(ITEM_RAWST_BERRY), 5 - setberrytree 19, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), 5 - setberrytree 20, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), 5 - setberrytree 80, ITEM_TO_BERRY(ITEM_ORAN_BERRY), 5 - setberrytree 81, ITEM_TO_BERRY(ITEM_ORAN_BERRY), 5 - setberrytree 77, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), 5 - setberrytree 78, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), 5 - setberrytree 68, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), 5 - setberrytree 31, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), 5 - setberrytree 33, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), 5 - setberrytree 34, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5 - setberrytree 35, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5 - setberrytree 36, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5 - setberrytree 83, ITEM_TO_BERRY(ITEM_HONDEW_BERRY), 5 - setberrytree 84, ITEM_TO_BERRY(ITEM_HONDEW_BERRY), 5 - setberrytree 85, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), 5 - setberrytree 86, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), 5 - setberrytree 37, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), 5 - setberrytree 38, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), 5 - setberrytree 39, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), 5 - setberrytree 40, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5 - setberrytree 41, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5 - setberrytree 42, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5 - setberrytree 46, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), 5 - setberrytree 45, ITEM_TO_BERRY(ITEM_PINAP_BERRY), 5 - setberrytree 44, ITEM_TO_BERRY(ITEM_NANAB_BERRY), 5 - setberrytree 43, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), 5 - setberrytree 47, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), 5 - setberrytree 48, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), 5 - setberrytree 49, ITEM_TO_BERRY(ITEM_RAWST_BERRY), 5 - setberrytree 50, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), 5 - setberrytree 52, ITEM_TO_BERRY(ITEM_NANAB_BERRY), 5 - setberrytree 53, ITEM_TO_BERRY(ITEM_NANAB_BERRY), 5 - setberrytree 62, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), 5 - setberrytree 64, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), 5 - setberrytree 58, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5 - setberrytree 59, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5 - setberrytree 60, ITEM_TO_BERRY(ITEM_GREPA_BERRY), 5 - setberrytree 61, ITEM_TO_BERRY(ITEM_GREPA_BERRY), 5 - setberrytree 79, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), 5 - setberrytree 14, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), 5 - setberrytree 15, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5 - setberrytree 30, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5 - setberrytree 65, ITEM_TO_BERRY(ITEM_GREPA_BERRY), 5 - setberrytree 72, ITEM_TO_BERRY(ITEM_GREPA_BERRY), 5 - setberrytree 73, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), 5 - setberrytree 74, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), 5 - setberrytree 87, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5 - setberrytree 88, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), 5 - setberrytree 89, ITEM_TO_BERRY(ITEM_RAWST_BERRY), 5 - setberrytree 82, ITEM_TO_BERRY(ITEM_LIECHI_BERRY), 5 + setberrytree 2, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES + setberrytree 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES + setberrytree 11, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES + setberrytree 13, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES + setberrytree 4, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES + setberrytree 76, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES + setberrytree 8, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES + setberrytree 10, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES + setberrytree 25, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES + setberrytree 26, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES + setberrytree 66, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES + setberrytree 67, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES + setberrytree 69, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES + setberrytree 70, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES + setberrytree 71, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES + setberrytree 55, ITEM_TO_BERRY(ITEM_BLUK_BERRY), BERRY_STAGE_BERRIES + setberrytree 56, ITEM_TO_BERRY(ITEM_BLUK_BERRY), BERRY_STAGE_BERRIES + setberrytree 5, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES + setberrytree 6, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES + setberrytree 7, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES + setberrytree 16, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES + setberrytree 17, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES + setberrytree 18, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES + setberrytree 29, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES + setberrytree 28, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES + setberrytree 27, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES + setberrytree 24, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES + setberrytree 23, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES + setberrytree 22, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES + setberrytree 21, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES + setberrytree 19, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES + setberrytree 20, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES + setberrytree 80, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES + setberrytree 81, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES + setberrytree 77, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES + setberrytree 78, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES + setberrytree 68, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES + setberrytree 31, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES + setberrytree 33, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES + setberrytree 34, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES + setberrytree 35, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES + setberrytree 36, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES + setberrytree 83, ITEM_TO_BERRY(ITEM_HONDEW_BERRY), BERRY_STAGE_BERRIES + setberrytree 84, ITEM_TO_BERRY(ITEM_HONDEW_BERRY), BERRY_STAGE_BERRIES + setberrytree 85, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES + setberrytree 86, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES + setberrytree 37, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES + setberrytree 38, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES + setberrytree 39, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES + setberrytree 40, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES + setberrytree 41, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES + setberrytree 42, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES + setberrytree 46, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES + setberrytree 45, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES + setberrytree 44, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES + setberrytree 43, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES + setberrytree 47, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES + setberrytree 48, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES + setberrytree 49, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES + setberrytree 50, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES + setberrytree 52, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES + setberrytree 53, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES + setberrytree 62, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES + setberrytree 64, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES + setberrytree 58, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES + setberrytree 59, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES + setberrytree 60, ITEM_TO_BERRY(ITEM_GREPA_BERRY), BERRY_STAGE_BERRIES + setberrytree 61, ITEM_TO_BERRY(ITEM_GREPA_BERRY), BERRY_STAGE_BERRIES + setberrytree 79, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), BERRY_STAGE_BERRIES + setberrytree 14, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), BERRY_STAGE_BERRIES + setberrytree 15, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES + setberrytree 30, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES + setberrytree 65, ITEM_TO_BERRY(ITEM_GREPA_BERRY), BERRY_STAGE_BERRIES + setberrytree 72, ITEM_TO_BERRY(ITEM_GREPA_BERRY), BERRY_STAGE_BERRIES + setberrytree 73, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), BERRY_STAGE_BERRIES + setberrytree 74, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), BERRY_STAGE_BERRIES + setberrytree 87, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES + setberrytree 88, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES + setberrytree 89, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES + setberrytree 82, ITEM_TO_BERRY(ITEM_LIECHI_BERRY), BERRY_STAGE_BERRIES return EventScript_ResetAllMapFlags:: @ 82715DE @@ -1036,7 +1045,7 @@ EventScript_ResetAllMapFlags:: @ 82715DE setflag FLAG_HIDE_ROUTE_101_BIRCH setflag FLAG_HIDE_ROUTE_103_BIRCH setflag FLAG_HIDE_LILYCOVE_HARBOR_FERRY_SAILOR - setflag FLAG_HIDE_LILYCOVE_HARBOR_EON_TICKET_TAKER + setflag FLAG_HIDE_LILYCOVE_HARBOR_EVENT_TICKET_TAKER setflag FLAG_HIDE_SOUTHERN_ISLAND_EON_STONE setflag FLAG_HIDE_SOUTHERN_ISLAND_UNCHOSEN_EON_DUO_MON setflag FLAG_UNKNOWN_0x393 @@ -1390,50 +1399,50 @@ Std_ObtainItem:: @ 8271AD3 EventScript_271AE3:: @ 8271AE3 bufferitemnameplural 1, VAR_0x8000, VAR_0x8001 checkitemtype VAR_0x8000 - call EventScript_271B08 + call EventScript_BufferStdString compare VAR_0x8007, 1 call_if_eq EventScript_271B95 compare VAR_0x8007, 0 call_if_eq EventScript_271BA9 return -EventScript_271B08:: @ 8271B08 +EventScript_BufferStdString:: @ 8271B08 switch VAR_RESULT - case 1, EventScript_271B45 - case 5, EventScript_271B55 - case 2, EventScript_271B65 - case 3, EventScript_271B75 - case 4, EventScript_271B85 + case POCKET_ITEMS, EventScript_StdStringItem + case POCKET_KEY_ITEMS, EventScript_StdStringKeyItems + case POCKET_POKE_BALLS, EventScript_StdStringPokeballs + case POCKET_TM_HM, EventScript_StdStringTMHMS + case POCKET_BERRIES, EventScript_StdStringBerries end -EventScript_271B45:: @ 8271B45 - bufferstdstring 2, 14 +EventScript_StdStringItem:: @ 8271B45 + bufferstdstring 2, STDSTRING_ITEMS compare VAR_0x8007, 1 - call_if_eq EventScript_271BAF + call_if_eq EventScript_PlayFanfare4 return -EventScript_271B55:: @ 8271B55 - bufferstdstring 2, 15 +EventScript_StdStringKeyItems:: @ 8271B55 + bufferstdstring 2, STDSTRING_KEYITEMS compare VAR_0x8007, 1 - call_if_eq EventScript_271BAF + call_if_eq EventScript_PlayFanfare4 return -EventScript_271B65:: @ 8271B65 - bufferstdstring 2, 16 +EventScript_StdStringPokeballs:: @ 8271B65 + bufferstdstring 2, STDSTRING_POKEBALLS compare VAR_0x8007, 1 - call_if_eq EventScript_271BAF + call_if_eq EventScript_PlayFanfare4 return -EventScript_271B75:: @ 8271B75 - bufferstdstring 2, 17 +EventScript_StdStringTMHMS:: @ 8271B75 + bufferstdstring 2, STDSTRING_TMHMS compare VAR_0x8007, 1 call_if_eq EventScript_271BB3 return -EventScript_271B85:: @ 8271B85 - bufferstdstring 2, 18 +EventScript_StdStringBerries:: @ 8271B85 + bufferstdstring 2, STDSTRING_BERRIES compare VAR_0x8007, 1 - call_if_eq EventScript_271BAF + call_if_eq EventScript_PlayFanfare4 return EventScript_271B95:: @ 8271B95 @@ -1447,7 +1456,7 @@ EventScript_271BA9:: @ 8271BA9 setvar VAR_RESULT, 0 return -EventScript_271BAF:: @ 8271BAF +EventScript_PlayFanfare4:: @ 8271BAF playfanfare MUS_FANFA4 return @@ -1491,7 +1500,7 @@ Std_FindItem:: @ 8271BFD copyvar VAR_0x8007, VAR_RESULT bufferitemnameplural 1, VAR_0x8000, VAR_0x8001 checkitemtype VAR_0x8000 - call EventScript_271B08 + call EventScript_BufferStdString compare VAR_0x8007, 1 call_if_eq EventScript_PickItemUp compare VAR_0x8007, 0 @@ -1502,7 +1511,7 @@ Std_FindItem:: @ 8271BFD EventScript_PickItemUp:: @ 8271C3A removeobject VAR_LAST_TALKED giveitem VAR_0x8004, VAR_0x8005 - specialvar VAR_RESULT, sub_81398C0 + specialvar VAR_RESULT, BufferTMHMMoveName copyvar VAR_0x8008, VAR_RESULT compare VAR_0x8008, 1 call_if_eq EventScript_271C8F @@ -1544,7 +1553,7 @@ EventScript_HiddenItemScript:: @ 8271CB7 copyvar VAR_0x8007, VAR_RESULT bufferitemnameplural 1, VAR_0x8005, 1 checkitemtype VAR_0x8005 - call EventScript_271B08 + call EventScript_BufferStdString compare VAR_0x8007, 1 goto_if_eq EventScript_271CE8 compare VAR_0x8007, 0 @@ -1554,7 +1563,7 @@ EventScript_HiddenItemScript:: @ 8271CB7 EventScript_271CE8:: @ 8271CE8 copyvar VAR_0x8008, VAR_0x8004 copyvar VAR_0x8004, VAR_0x8005 - specialvar VAR_RESULT, sub_81398C0 + specialvar VAR_RESULT, BufferTMHMMoveName compare VAR_RESULT, 1 goto_if_eq EventScript_271D0E compare VAR_RESULT, 0 @@ -1625,7 +1634,7 @@ EventScript_PC:: @ 8271D92 EventScript_271DAC:: @ 8271DAC message gText_WhichPCShouldBeAccessed waitmessage - special ScrSpecial_CreatePCMenu + special ScriptMenu_CreatePCMultichoice waitstate goto EventScript_271DBC end @@ -1636,7 +1645,7 @@ EventScript_271DBC:: @ 8271DBC case 1, EventScript_271DF9 case 2, EventScript_271E54 case 3, EventScript_271E47 - case 127, EventScript_271E47 + case MULTI_B_PRESSED, EventScript_271E47 end EventScript_271DF9:: @ 8271DF9 @@ -2036,15 +2045,13 @@ Route101_EventScript_272184:: @ 8272184 msgbox gUnknown_082A633D, MSGBOX_DEFAULT return -BattleFrontier_OutsideWest_EventScript_2721E2:: @ 82721E2 -LilycoveCity_Harbor_EventScript_2721E2:: @ 82721E2 -SlateportCity_Harbor_EventScript_2721E2:: @ 82721E2 +Common_EventScript_FerryDepart:: @ 82721E2 delay 60 - applymovement VAR_0x8004, SlateportCity_Harbor_Movement_2721F0 + applymovement VAR_0x8004, Movement_FerryDepart waitmovement 0 return -SlateportCity_Harbor_Movement_2721F0: @ 82721F0 +Movement_FerryDepart: @ 82721F0 walk_slow_right walk_slow_right walk_slow_right @@ -2101,7 +2108,7 @@ SouthernIsland_Exterior_EventScript_272250:: @ 8272250 call_if_eq BattleFrontier_OutsideWest_EventScript_242A2C delay 30 hideobjectat 255, MAP_PETALBURG_CITY - call BattleFrontier_OutsideWest_EventScript_2721E2 + call Common_EventScript_FerryDepart return EventScript_272274:: @ 8272274 @@ -2556,7 +2563,7 @@ gUnknown_08272A3F:: @ 8272A3F .string "Please come again!$" gUnknown_08272A52:: @ 8272A52 - .string "{PLAYER}{STRING 5}, welcome!\pWhat can I do for you?$" + .string "{PLAYER}{KUN}, welcome!\pWhat can I do for you?$" gUnknown_08272A78:: @ 8272A78 .string "Obtained the {STR_VAR_2}!$" @@ -2893,34 +2900,34 @@ LittlerootTown_ProfessorBirchsLab_EventScript_2737A0:: @ 82737A0 MossdeepCity_StevensHouse_EventScript_2737A0:: @ 82737A0 Route119_WeatherInstitute_2F_EventScript_2737A0:: @ 82737A0 RustboroCity_DevonCorp_2F_EventScript_2737A0:: @ 82737A0 - bufferboxname 0, VAR_STORAGE_UNKNOWN + bufferboxname 0, VAR_PC_BOX_TO_SEND_MON bufferspeciesname 1, VAR_TEMP_1 call_if_unset FLAG_SYS_PC_LANETTE, LittlerootTown_ProfessorBirchsLab_EventScript_2737BB call_if_set FLAG_SYS_PC_LANETTE, LittlerootTown_ProfessorBirchsLab_EventScript_2737E6 return LittlerootTown_ProfessorBirchsLab_EventScript_2737BB:: @ 82737BB - specialvar VAR_RESULT, sub_813B21C + specialvar VAR_RESULT, ShouldShowBoxWasFullMessage compare VAR_RESULT, 1 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_2737D4 msgbox gText_PkmnTransferredSomeonesPC, MSGBOX_DEFAULT return LittlerootTown_ProfessorBirchsLab_EventScript_2737D4:: @ 82737D4 - specialvar VAR_RESULT, get_unknown_box_id + specialvar VAR_RESULT, GetPCBoxToSendMon bufferboxname 2, VAR_RESULT msgbox gText_PkmnBoxSomeonesPCFull, MSGBOX_DEFAULT return LittlerootTown_ProfessorBirchsLab_EventScript_2737E6:: @ 82737E6 - specialvar VAR_RESULT, sub_813B21C + specialvar VAR_RESULT, ShouldShowBoxWasFullMessage compare VAR_RESULT, 1 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_2737FF msgbox gText_PkmnTransferredLanettesPC, MSGBOX_DEFAULT return LittlerootTown_ProfessorBirchsLab_EventScript_2737FF:: @ 82737FF - specialvar VAR_RESULT, get_unknown_box_id + specialvar VAR_RESULT, GetPCBoxToSendMon bufferboxname 2, VAR_RESULT msgbox gText_PkmnBoxLanettesPCFull, MSGBOX_DEFAULT return @@ -2942,7 +2949,7 @@ EventScript_Questionnaire:: @ 827381B call Common_ShowEasyChatScreen lock faceplayer - specialvar VAR_0x8008, sub_813B490 + specialvar VAR_0x8008, GetMartEmployeeObjectEventId compare VAR_0x8004, 1 goto_if_eq EventScript_27386D compare VAR_0x8004, 2 @@ -3593,139 +3600,139 @@ gContestPaintingTough3:: .string "The mighty tough\n" .string "hyper POKéMON {STR_VAR_1}$" -gUnknown_0827ECBC:: @ 27ECBC +gTrickHouse_Mechadoll_Oddish:: @ 27ECBC .string "ODDISH$" -gUnknown_0827ECC3:: @ 27ECC3 +gTrickHouse_Mechadoll_Poochyena:: @ 27ECC3 .string "POOCHYENA$" -gUnknown_0827ECCD:: @ 27ECCD +gTrickHouse_Mechadoll_Taillow:: @ 27ECCD .string "TAILLOW$" -gUnknown_0827ECD5:: @ 27ECD5 +gTrickHouse_Mechadoll_Azurill:: @ 27ECD5 .string "AZURILL$" -gUnknown_0827ECDD:: @ 27ECDD +gTrickHouse_Mechadoll_Lotad:: @ 27ECDD .string "LOTAD$" -gUnknown_0827ECE3:: @ 27ECE3 +gTrickHouse_Mechadoll_Wingull:: @ 27ECE3 .string "WINGULL$" -gUnknown_0827ECEB:: @ 27ECEB +gTrickHouse_Mechadoll_Dustox:: @ 27ECEB .string "DUSTOX$" -gUnknown_0827ECF2:: @ 27ECF2 +gTrickHouse_Mechadoll_Zubat:: @ 27ECF2 .string "ZUBAT$" -gUnknown_0827ECF8:: @ 27ECF8 +gTrickHouse_Mechadoll_Nincada:: @ 27ECF8 .string "NINCADA$" -gUnknown_0827ED00:: @ 27ED00 +gTrickHouse_Mechadoll_Ralts:: @ 27ED00 .string "RALTS$" -gUnknown_0827ED06:: @ 27ED06 +gTrickHouse_Mechadoll_Zigzagoon:: @ 27ED06 .string "ZIGZAGOON$" -gUnknown_0827ED10:: @ 27ED10 +gTrickHouse_Mechadoll_Slakoth:: @ 27ED10 .string "SLAKOTH$" -gUnknown_0827ED18:: @ 27ED18 +gTrickHouse_Mechadoll_Poochyena2:: @ 27ED18 .string "POOCHYENA$" -gUnknown_0827ED22:: @ 27ED22 +gTrickHouse_Mechadoll_Shroomish:: @ 27ED22 .string "SHROOMISH$" -gUnknown_0827ED2C:: @ 27ED2C +gTrickHouse_Mechadoll_Zigzagoon2:: @ 27ED2C .string "ZIGZAGOON$" -gUnknown_0827ED36:: @ 27ED36 +gTrickHouse_Mechadoll_Poochyena3:: @ 27ED36 .string "POOCHYENA$" -gUnknown_0827ED40:: @ 27ED40 +gTrickHouse_Mechadoll_Zubat2:: @ 27ED40 .string "ZUBAT$" -gUnknown_0827ED46:: @ 27ED46 +gTrickHouse_Mechadoll_Carvanha:: @ 27ED46 .string "CARVANHA$" -gUnknown_0827ED4F:: @ 27ED4F +gTrickHouse_Mechadoll_BurnHeal:: @ 27ED4F .string "BURN HEAL$" -gUnknown_0827ED59:: @ 27ED59 +gTrickHouse_Mechadoll_HarborMail:: @ 27ED59 .string "HARBOR MAIL$" -gUnknown_0827ED65:: @ 27ED65 +gTrickHouse_Mechadoll_SamePrice:: @ 27ED65 .string "Same price$" -gUnknown_0827ED70:: @ 27ED70 +gTrickHouse_Mechadoll_60Yen:: @ 27ED70 .string "¥60$" -gUnknown_0827ED74:: @ 27ED74 +gTrickHouse_Mechadoll_55Yen:: @ 27ED74 .string "¥55$" -gUnknown_0827ED78:: @ 27ED78 +gTrickHouse_Mechadoll_Nothing:: @ 27ED78 .string "Nothing$" -gUnknown_0827ED80:: @ 27ED80 +gTrickHouse_Mechadoll_CostMore:: @ 27ED80 .string "They will cost more.$" -gUnknown_0827ED95:: @ 27ED95 +gTrickHouse_Mechadoll_CostLess:: @ 27ED95 .string "They will cost less.$" -gUnknown_0827EDAA:: @ 27EDAA +gTrickHouse_Mechadoll_SamePrice2:: @ 27EDAA .string "Same price$" -gUnknown_0827EDB5:: @ 27EDB5 +gTrickHouse_Mechadoll_Male:: @ 27EDB5 .string "Male$" -gUnknown_0827EDBA:: @ 27EDBA +gTrickHouse_Mechadoll_Female:: @ 27EDBA .string "Female$" -gUnknown_0827EDC1:: @ 27EDC1 +gTrickHouse_Mechadoll_Neither:: @ 27EDC1 .string "Neither$" -gUnknown_0827EDC9:: @ 27EDC9 +gTrickHouse_Mechadoll_ElderlyMen:: @ 27EDC9 .string "Elderly men$" -gUnknown_0827EDD5:: @ 27EDD5 +gTrickHouse_Mechadoll_ElderlyLadies:: @ 27EDD5 .string "Elderly ladies$" -gUnknown_0827EDE4:: @ 27EDE4 +gTrickHouse_Mechadoll_SameNumber:: @ 27EDE4 .string "Same number$" -gUnknown_0827EDF0:: @ 27EDF0 +gTrickHouse_Mechadoll_None:: @ 27EDF0 .string "None$" -gUnknown_0827EDF5:: @ 27EDF5 +gTrickHouse_Mechadoll_One:: @ 27EDF5 .string "1$" -gUnknown_0827EDF7:: @ 27EDF7 +gTrickHouse_Mechadoll_Two:: @ 27EDF7 .string "2$" -gUnknown_0827EDF9:: @ 27EDF9 +gTrickHouse_Mechadoll_Two2:: @ 27EDF9 .string "2$" -gUnknown_0827EDFB:: @ 27EDFB +gTrickHouse_Mechadoll_Three:: @ 27EDFB .string "3$" -gUnknown_0827EDFD:: @ 27EDFD +gTrickHouse_Mechadoll_Four:: @ 27EDFD .string "4$" -gUnknown_0827EDFF:: @ 27EDFF +gTrickHouse_Mechadoll_Six:: @ 27EDFF .string "6$" -gUnknown_0827EE01:: @ 27EE01 +gTrickHouse_Mechadoll_Seven:: @ 27EE01 .string "7$" -gUnknown_0827EE03:: @ 27EE03 +gTrickHouse_Mechadoll_Eight:: @ 27EE03 .string "8$" -gUnknown_0827EE05:: @ 27EE05 +gTrickHouse_Mechadoll_Six2:: @ 27EE05 .string "6$" -gUnknown_0827EE07:: @ 27EE07 +gTrickHouse_Mechadoll_Seven2:: @ 27EE07 .string "7$" -gUnknown_0827EE09:: @ 27EE09 +gTrickHouse_Mechadoll_Eight2:: @ 27EE09 .string "8$" .include "data/scripts/tv.inc" @@ -4013,7 +4020,7 @@ BattleFrontier_BattleTowerLobby_EventScript_28CB96:: @ 828CB96 BattleFrontier_BattleTowerLobby_EventScript_28CBD8:: @ 828CBD8 message BattleFrontier_BattleTowerLobby_Text_27F7BA waitmessage - multichoice 20, 8, 45, 1 + multichoice 20, 8, MULTI_SATISFACTION, 1 copyvar VAR_0x8008, VAR_RESULT compare VAR_RESULT, 0 call_if_eq BattleFrontier_BattleTowerLobby_EventScript_28CC38 @@ -4205,7 +4212,7 @@ MauvilleCity_GameCorner_EventScript_2A5B0D:: @ 82A5B0D .include "data/text/roulette.inc" .include "data/text/pokedex_rating.inc" .include "data/text/lottery_corner.inc" - .include "data/text/eon_ticket.inc" + .include "data/text/event_ticket_1.inc" .include "data/text/braille.inc" .include "data/text/berries.inc" .include "data/text/shoal_cave.inc" @@ -4281,23 +4288,23 @@ GraniteCave_B1F_Movement_2A8369: @ 82A8369 step_end LilycoveCity_PokemonCenter_1F_EventScript_2A836B:: @ 82A836B - special sub_818DAEC + special Script_GetLilycoveLadyId switch VAR_RESULT - case 0, LilycoveCity_PokemonCenter_1F_EventScript_2A8554 - case 1, LilycoveCity_PokemonCenter_1F_EventScript_2A8395 - case 2, LilycoveCity_PokemonCenter_1F_EventScript_2A882A + case LILYCOVE_LADY_QUIZ, LilycoveCity_PokemonCenter_1F_EventScript_2A8554 + case LILYCOVE_LADY_FAVOR, LilycoveCity_PokemonCenter_1F_EventScript_2A8395 + case LILYCOVE_LADY_CONTEST, LilycoveCity_PokemonCenter_1F_EventScript_2A882A end LilycoveCity_PokemonCenter_1F_EventScript_2A8395:: @ 82A8395 lock faceplayer msgbox LilycoveCity_PokemonCenter_1F_Text_2A8A69, MSGBOX_DEFAULT - specialvar VAR_RESULT, sub_818DBE8 - compare VAR_RESULT, 0 + specialvar VAR_RESULT, GetFavorLadyState + compare VAR_RESULT, LILYCOVE_LADY_STATE_READY goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A83D0 - compare VAR_RESULT, 1 + compare VAR_RESULT, LILYCOVE_LADY_STATE_COMPLETED goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A83C6 - compare VAR_RESULT, 2 + compare VAR_RESULT, LILYCOVE_LADY_STATE_PRIZE goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8510 end @@ -4307,9 +4314,9 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A83C6:: @ 82A83C6 end LilycoveCity_PokemonCenter_1F_EventScript_2A83D0:: @ 82A83D0 - special sub_818DC2C + special BufferFavorLadyRequest msgbox LilycoveCity_PokemonCenter_1F_Text_2A8A7D, MSGBOX_DEFAULT - specialvar VAR_RESULT, sub_818DC60 + specialvar VAR_RESULT, HasAnotherPlayerGivenFavorLadyItem compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8435 compare VAR_RESULT, 1 @@ -4317,9 +4324,9 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A83D0:: @ 82A83D0 end LilycoveCity_PokemonCenter_1F_EventScript_2A83F7:: @ 82A83F7 - special sub_818DCC8 - special sub_818DD14 - specialvar VAR_RESULT, sub_818DD54 + special BufferFavorLadyItemName + special BufferFavorLadyPlayerName + specialvar VAR_RESULT, DidFavorLadyLikeItem compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8419 compare VAR_RESULT, 1 @@ -4357,7 +4364,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A845E:: @ 82A845E LilycoveCity_PokemonCenter_1F_EventScript_2A846C:: @ 82A846C fadescreen 1 setvar VAR_RESULT, 0 - special sub_818DD78 + special Script_FavorLadyOpenBagMenu waitstate compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A848E @@ -4374,7 +4381,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A848E:: @ 82A848E end LilycoveCity_PokemonCenter_1F_EventScript_2A84AD:: @ 82A84AD - specialvar VAR_RESULT, sub_818DE44 + specialvar VAR_RESULT, Script_DoesFavorLadyLikeItem compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A84C9 compare VAR_RESULT, 1 @@ -4382,13 +4389,13 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A84AD:: @ 82A84AD end LilycoveCity_PokemonCenter_1F_EventScript_2A84C9:: @ 82A84C9 - special sub_818DC2C + special BufferFavorLadyRequest msgbox LilycoveCity_PokemonCenter_1F_Text_2A8C0F, MSGBOX_DEFAULT release end LilycoveCity_PokemonCenter_1F_EventScript_2A84D6:: @ 82A84D6 - specialvar VAR_RESULT, sub_818DE5C + specialvar VAR_RESULT, IsFavorLadyThresholdMet compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A84F2 compare VAR_RESULT, 1 @@ -4396,20 +4403,20 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A84D6:: @ 82A84D6 end LilycoveCity_PokemonCenter_1F_EventScript_2A84F2:: @ 82A84F2 - special sub_818DC2C + special BufferFavorLadyRequest msgbox LilycoveCity_PokemonCenter_1F_Text_2A8C6F, MSGBOX_DEFAULT release end LilycoveCity_PokemonCenter_1F_EventScript_2A84FF:: @ 82A84FF - special sub_818DC2C + special BufferFavorLadyRequest msgbox LilycoveCity_PokemonCenter_1F_Text_2A8CC8, MSGBOX_DEFAULT goto LilycoveCity_PokemonCenter_1F_EventScript_2A8510 end LilycoveCity_PokemonCenter_1F_EventScript_2A8510:: @ 82A8510 setvar VAR_0x8004, 0 - specialvar VAR_0x8004, sub_818DEA0 + specialvar VAR_0x8004, FavorLadyGetPrize msgbox LilycoveCity_PokemonCenter_1F_Text_2A8D5D, MSGBOX_DEFAULT giveitem_std VAR_0x8004 compare VAR_RESULT, 0 @@ -4424,7 +4431,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8545:: @ 82A8545 end LilycoveCity_PokemonCenter_1F_EventScript_2A854F:: @ 82A854F - special sub_818DEDC + special SetFavorLadyState_Complete release end @@ -4432,27 +4439,27 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8554:: @ 82A8554 lock faceplayer msgbox LilycoveCity_PokemonCenter_1F_Text_2A8E2B, MSGBOX_DEFAULT - specialvar VAR_RESULT, sub_818E038 - compare VAR_RESULT, 0 + specialvar VAR_RESULT, GetQuizLadyState + compare VAR_RESULT, LILYCOVE_LADY_STATE_READY goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8585 - compare VAR_RESULT, 1 + compare VAR_RESULT, LILYCOVE_LADY_STATE_COMPLETED goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A85AC - compare VAR_RESULT, 2 + compare VAR_RESULT, LILYCOVE_LADY_STATE_PRIZE goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A86EC end LilycoveCity_PokemonCenter_1F_EventScript_2A8585:: @ 82A8585 - specialvar VAR_RESULT, sub_818E06C - compare VAR_RESULT, 0 + specialvar VAR_RESULT, GetQuizAuthor + compare VAR_RESULT, QUIZ_AUTHOR_PLAYER goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A85C8 - compare VAR_RESULT, 1 + compare VAR_RESULT, QUIZ_AUTHOR_OTHER_PLAYER goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A85D2 - compare VAR_RESULT, 2 + compare VAR_RESULT, QUIZ_AUTHOR_LADY goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A85E0 end LilycoveCity_PokemonCenter_1F_EventScript_2A85AC:: @ 82A85AC - specialvar VAR_RESULT, sub_818E2D8 + specialvar VAR_RESULT, IsQuizLadyWaitingForChallenger compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8759 compare VAR_RESULT, 1 @@ -4489,7 +4496,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8612:: @ 82A8612 end LilycoveCity_PokemonCenter_1F_EventScript_2A861C:: @ 82A861C - special sub_818E3BC + special ClearQuizLadyPlayerAnswer compare VAR_0x8004, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A864C compare VAR_0x8004, EASY_CHAT_TYPE_QUIZ_ANSWER @@ -4503,13 +4510,13 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8635:: @ 82A8635 end LilycoveCity_PokemonCenter_1F_EventScript_2A864C:: @ 82A864C - special sub_811A858 + special QuizLadyShowQuizQuestion waitstate goto LilycoveCity_PokemonCenter_1F_EventScript_2A8635 end LilycoveCity_PokemonCenter_1F_EventScript_2A8656:: @ 82A8656 - special sub_818E2FC + special QuizLadyGetPlayerAnswer waitstate goto LilycoveCity_PokemonCenter_1F_EventScript_2A8635 end @@ -4528,9 +4535,9 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A867F:: @ 82A867F end LilycoveCity_PokemonCenter_1F_EventScript_2A8689:: @ 82A8689 - special sub_818E37C + special SetQuizLadyState_Complete msgbox LilycoveCity_PokemonCenter_1F_Text_2A8F4D, MSGBOX_DEFAULT - specialvar VAR_RESULT, sub_818E308 + specialvar VAR_RESULT, IsQuizAnswerCorrect compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A86C7 compare VAR_RESULT, 1 @@ -4546,8 +4553,8 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A86B0:: @ 82A86B0 end LilycoveCity_PokemonCenter_1F_EventScript_2A86C7:: @ 82A86C7 - special sub_818E538 - special sub_818E274 + special BufferQuizCorrectAnswer + special BufferQuizPrizeName playse SE_HAZURE delay 10 playse SE_HAZURE @@ -4556,8 +4563,9 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A86C7:: @ 82A86C7 goto LilycoveCity_PokemonCenter_1F_EventScript_2A8759 end +@ VAR_RESULT is essentially ignored, both jumps are identical LilycoveCity_PokemonCenter_1F_EventScript_2A86EC:: @ 82A86EC - specialvar VAR_RESULT, sub_818E298 + specialvar VAR_RESULT, BufferQuizAuthorNameAndCheckIfLady compare VAR_RESULT, 1 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8708 compare VAR_RESULT, 0 @@ -4576,8 +4584,8 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8716:: @ 82A8716 LilycoveCity_PokemonCenter_1F_EventScript_2A8724:: @ 82A8724 setvar VAR_0x8005, 0 - special sub_818E358 - special sub_818E37C + special BufferQuizPrizeItem + special SetQuizLadyState_Complete giveitem_std VAR_0x8005 compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A874C @@ -4586,7 +4594,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8724:: @ 82A8724 LilycoveCity_PokemonCenter_1F_EventScript_2A874C:: @ 82A874C msgbox LilycoveCity_PokemonCenter_1F_Text_2A906A, MSGBOX_DEFAULT - special sub_818E39C + special SetQuizLadyState_GivePrize release end @@ -4599,7 +4607,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8759:: @ 82A8759 end LilycoveCity_PokemonCenter_1F_EventScript_2A8778:: @ 82A8778 - special sub_818E3EC + special QuizLadyPickNewQuestion msgbox LilycoveCity_PokemonCenter_1F_Text_2A9131, MSGBOX_DEFAULT release end @@ -4610,7 +4618,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8785:: @ 82A8785 LilycoveCity_PokemonCenter_1F_EventScript_2A878D:: @ 82A878D fadescreen 1 setvar VAR_RESULT, 0 - special sub_818E3E0 + special Script_QuizLadyOpenBagMenu waitstate compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A87AF @@ -4628,13 +4636,13 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A87AF:: @ 82A87AF LilycoveCity_PokemonCenter_1F_EventScript_2A87CE:: @ 82A87CE msgbox LilycoveCity_PokemonCenter_1F_Text_2A9270, MSGBOX_DEFAULT - special sub_818E430 - special sub_818E3BC - setvar VAR_0x8004, 16 + special ClearQuizLadyQuestionAndAnswer + special ClearQuizLadyPlayerAnswer + setvar VAR_0x8004, EASY_CHAT_TYPE_QUIZ_QUESTION LilycoveCity_PokemonCenter_1F_EventScript_2A87E1:: @ 82A87E1 fadescreen 1 - special sub_818E47C + special QuizLadySetCustomQuestion waitstate compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A87F8 @@ -4650,9 +4658,9 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A87F8:: @ 82A87F8 end LilycoveCity_PokemonCenter_1F_EventScript_2A8817:: @ 82A8817 - special sub_818E490 - special sub_818E4A4 - special sub_818E510 + special QuizLadyTakePrizeForCustomQuiz + special QuizLadyRecordCustomQuizData + special QuizLadySetWaitingForChallenger msgbox LilycoveCity_PokemonCenter_1F_Text_2A9336, MSGBOX_DEFAULT release end @@ -4661,15 +4669,16 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A882A:: @ 82A882A lock faceplayer msgbox LilycoveCity_PokemonCenter_1F_Text_2A93A7, MSGBOX_DEFAULT - specialvar VAR_RESULT, sub_818E8B4 + specialvar VAR_RESULT, HasPlayerGivenContestLadyPokeblock compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8850 compare VAR_RESULT, 1 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A886C end +@ Redundant with above script, VAR_RESULT will always be 0 here LilycoveCity_PokemonCenter_1F_EventScript_2A8850:: @ 82A8850 - specialvar VAR_RESULT, sub_818E8E0 + specialvar VAR_RESULT, ShouldContestLadyShowGoOnAir compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8876 compare VAR_RESULT, 1 @@ -4682,7 +4691,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A886C:: @ 82A886C end LilycoveCity_PokemonCenter_1F_EventScript_2A8876:: @ 82A8876 - special sub_818E914 + special Script_BufferContestLadyCategoryAndMonName msgbox LilycoveCity_PokemonCenter_1F_Text_2A93F4, MSGBOX_DEFAULT checkitem ITEM_POKEBLOCK_CASE, 1 compare VAR_RESULT, 0 @@ -4701,7 +4710,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A88B0:: @ 82A88B0 LilycoveCity_PokemonCenter_1F_EventScript_2A88BA:: @ 82A88BA fadescreen 1 - special sub_818E92C + special OpenPokeblockCaseForContestLady waitstate compare VAR_RESULT, 65535 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A88D7 @@ -4719,11 +4728,12 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A88D7:: @ 82A88D7 LilycoveCity_PokemonCenter_1F_EventScript_2A88F6:: @ 82A88F6 msgbox LilycoveCity_PokemonCenter_1F_Text_2A9571, MSGBOX_DEFAULT - special sub_818E940 - special sub_818E960 + special SetContestLadyGivenPokeblock + special GetContestLadyMonSpecies goto LilycoveCity_PokemonCenter_1F_EventScript_2A890A end +@ VAR_0x8004 here is the return value from GivePokeblockToContestLady LilycoveCity_PokemonCenter_1F_EventScript_2A890A:: @ 82A890A applymovement 4, LilycoveCity_PokemonCenter_1F_Movement_2A89B8 waitmovement 0 @@ -4745,6 +4755,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A893F:: @ 82A893F waitmovement 0 delay 60 +@ VAR_0x8004 here is the return value from GivePokeblockToContestLady LilycoveCity_PokemonCenter_1F_EventScript_2A894C:: @ 82A894C applymovement 4, LilycoveCity_PokemonCenter_1F_Movement_2A89C0 waitmovement 0 @@ -4761,13 +4772,13 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8970:: @ 82A8970 end LilycoveCity_PokemonCenter_1F_EventScript_2A897E:: @ 82A897E - special sub_818E914 + special Script_BufferContestLadyCategoryAndMonName msgbox LilycoveCity_PokemonCenter_1F_Text_2A9605, MSGBOX_DEFAULT goto LilycoveCity_PokemonCenter_1F_EventScript_2A898F end LilycoveCity_PokemonCenter_1F_EventScript_2A898F:: @ 82A898F - specialvar VAR_RESULT, sub_818E8E0 + specialvar VAR_RESULT, ShouldContestLadyShowGoOnAir compare VAR_RESULT, 1 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A89A1 release @@ -4810,18 +4821,18 @@ LilycoveCity_PokemonCenter_1F_Movement_2A89C2: @ 82A89C2 step_end LilycoveCity_PokemonCenter_1F_EventScript_2A89C7:: @ 82A89C7 - specialvar VAR_RESULT, sub_818E990 - special sub_818E914 - special sub_818E960 - compare VAR_RESULT, 0 + specialvar VAR_RESULT, GetContestLadyCategory + special Script_BufferContestLadyCategoryAndMonName + special GetContestLadyMonSpecies + compare VAR_RESULT, CONTEST_CATEGORY_COOL goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8A0A - compare VAR_RESULT, 1 + compare VAR_RESULT, CONTEST_CATEGORY_BEAUTY goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8A1D - compare VAR_RESULT, 2 + compare VAR_RESULT, CONTEST_CATEGORY_CUTE goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8A30 - compare VAR_RESULT, 3 + compare VAR_RESULT, CONTEST_CATEGORY_SMART goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8A43 - compare VAR_RESULT, 4 + compare VAR_RESULT, CONTEST_CATEGORY_TOUGH goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8A56 end @@ -5542,17 +5553,17 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_2C3EE8:: @ 82C3EE8 goto_if_eq BattleFrontier_BattlePikeRandomRoom1_EventScript_2C3F3F hideobjectat 2, MAP_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM1 setvar VAR_TEMP_4, 1 - turnobject 255, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattlePikeRandomRoom1_EventScript_2C3F35:: @ 82C3F35 setvar VAR_TEMP_4, 1 - turnobject 255, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattlePikeRandomRoom1_EventScript_2C3F3F:: @ 82C3F3F setvar VAR_TEMP_4, 1 - turnobject 255, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH hideobjectat 1, MAP_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM1 end @@ -6296,77 +6307,7 @@ VerdanturfTown_BattleTentLobby_Text_2C6878: @ 82C6878 .string "The VERDANTURF BATTLE TENT\n" .string "rules are listed.$" -LilycoveCity_Harbor_Text_2C68A5: @ 82C68A5 - .string "What's up, youngster?\p" - .string "What, it's you who's supposed to have\n" - .string "a tattered old map?\p" - .string "Let's have a look.\n" - .string "… … … … … …\p" - .string "Boy, this is quite a ways away.\n" - .string "I'm afraid I can't help you…$" - -LilycoveCity_Harbor_Text_2C6951: @ 82C6951 - .string "BRINEY: Hold on a second!\p" - .string "What's the idea of turning down\n" - .string "someone that I owe so much to?$" - -LilycoveCity_Harbor_Text_2C69AA: @ 82C69AA - .string "{PLAYER}{KUN}, I'm terribly sorry.\p" - .string "You came to me seeking my help,\n" - .string "and we almost turned you away.\p" - .string "Well, let me make things right.\p" - .string "We'll sail right away, of course!\p" - .string "Let's find this island on\n" - .string "this OLD SEA MAP!$" - -LilycoveCity_Harbor_Text_2C6A71: @ 82C6A71 - .string "Is it you who brought that odd\n" - .string "ticket?\p" - .string "Where you're trying to go is an island\n" - .string "that's far, far away.\p" - .string "No one knows what awaits there…\p" - .string "The very thought excites my blood\n" - .string "as a sailing man!\p" - .string "Get on board, youngster!$" - -FarawayIsland_Entrance_Text_2C6B42: @ 82C6B42 - .string "CAPT. BRINEY can be so maddeningly\n" - .string "fickle…\p" - .string "Do you want to return to LILYCOVE?$" - -BirthIsland_Harbor_Text_2C6B90: @ 82C6B90 - .string "What an oddly shaped island, eh?\n" - .string "Do you want to return to LILYCOVE?$" - -LilycoveCity_Harbor_Text_2C6BD4: @ 82C6BD4 - .string "Is it you who brought those\n" - .string "odd tickets?\p" - .string "… … …Hm.\p" - .string "These tickets will get you to islands\n" - .string "that are far, far away.\p" - .string "No one knows what awaits there,\n" - .string "or what may happen there.\p" - .string "The very thought excites my blood\n" - .string "as a sailing man!\p" - .string "Get on board, youngster!\n" - .string "Where shall we sail first?$" - -NavelRock_Harbor_Text_2C6CE6: @ 82C6CE6 - .string "Did… Did you hear that?\n" - .string "That low growling from deep in there.\p" - .string "Are you sure it's safe?\n" - .string "Do you think we should leave?$" - -FarawayIsland_Entrance_Text_2C6D5A: @ 82C6D5A - .string "The writing is fading as if it was\n" - .string "written a long time ago…\p" - .string "“…ber, 6th day\n" - .string "If any human…sets foot here…\l" - .string "again…et it be a kindhearted pers…\l" - .string "…ith that hope, I depar…”$" - -FarawayIsland_Interior_Text_2C6DFF: @ 82C6DFF - .string "Myuu…$" + .include "data/text/event_ticket_2.inc" MauvilleCity_Text_2C6E05: @ 82C6E05 .string "This move can be learned only\n" diff --git a/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc index f3a0ecfb4..205ee0e71 100644 --- a/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc @@ -169,30 +169,30 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0:: @ 82576B0 call BattleFrontier_BattleArenaBattleRoom_EventScript_23E8E0 compare VAR_RESULT, 1 goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_257768 - multichoice 19, 4, 103, 1 + multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_25783A case 1, BattleFrontier_BattleArenaBattleRoom_EventScript_25779E case 2, BattleFrontier_BattleArenaBattleRoom_EventScript_2577DA case 3, BattleFrontier_BattleArenaBattleRoom_EventScript_257808 - case 127, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0 + case MULTI_B_PRESSED, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0 BattleFrontier_BattleArenaBattleRoom_EventScript_257768:: @ 8257768 - multichoice 20, 6, 104, 1 + multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_25783A case 1, BattleFrontier_BattleArenaBattleRoom_EventScript_2577DA case 2, BattleFrontier_BattleArenaBattleRoom_EventScript_257808 - case 127, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0 + case MULTI_B_PRESSED, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0 BattleFrontier_BattleArenaBattleRoom_EventScript_25779E:: @ 825779E message BattleFrontier_BattleArenaBattleRoom_Text_257F04 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0 case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_2577D0 - case 127, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0 + case MULTI_B_PRESSED, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0 BattleFrontier_BattleArenaBattleRoom_EventScript_2577D0:: @ 82577D0 call BattleFrontier_BattleArenaBattleRoom_EventScript_23E8B4 @@ -208,11 +208,11 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_2577DA:: @ 82577DA BattleFrontier_BattleArenaBattleRoom_EventScript_257808:: @ 8257808 message BattleFrontier_BattleArenaBattleRoom_Text_257E9E waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0 case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_257615 - case 127, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0 + case MULTI_B_PRESSED, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0 BattleFrontier_BattleArenaBattleRoom_EventScript_25783A:: @ 825783A closemessage @@ -286,21 +286,21 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_2578D4:: @ 82578D4 call BattleFrontier_BattleArenaBattleRoom_EventScript_23E8E0 compare VAR_RESULT, 1 goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_25792B - multichoice 19, 4, 103, 1 + multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_257961 case 1, BattleFrontier_BattleArenaBattleRoom_EventScript_25779E case 2, BattleFrontier_BattleArenaBattleRoom_EventScript_2577DA case 3, BattleFrontier_BattleArenaBattleRoom_EventScript_257808 - case 127, BattleFrontier_BattleArenaBattleRoom_EventScript_2578D4 + case MULTI_B_PRESSED, BattleFrontier_BattleArenaBattleRoom_EventScript_2578D4 BattleFrontier_BattleArenaBattleRoom_EventScript_25792B:: @ 825792B - multichoice 20, 6, 104, 1 + multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_257961 case 1, BattleFrontier_BattleArenaBattleRoom_EventScript_2577DA case 2, BattleFrontier_BattleArenaBattleRoom_EventScript_257808 - case 127, BattleFrontier_BattleArenaBattleRoom_EventScript_2578D4 + case MULTI_B_PRESSED, BattleFrontier_BattleArenaBattleRoom_EventScript_2578D4 BattleFrontier_BattleArenaBattleRoom_EventScript_257961:: @ 8257961 call BattleFrontier_BattleArenaBattleRoom_EventScript_242170 diff --git a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc index 5df47aed1..0c55e9917 100644 --- a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc @@ -9,7 +9,7 @@ BattleFrontier_BattleArenaLobby_MapScript2_255C41: @ 8255C41 BattleFrontier_BattleArenaLobby_EventScript_255C4B:: @ 8255C4B setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattleArenaLobby_MapScript2_255C55: @ 8255C55 @@ -101,11 +101,11 @@ BattleFrontier_BattleArenaLobby_EventScript_255D59:: @ 8255D59 goto_if_eq BattleFrontier_BattleArenaLobby_EventScript_255DBF message BattleFrontier_BattleArenaLobby_Text_256B19 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleArenaLobby_EventScript_255DBF case 0, BattleFrontier_BattleArenaLobby_EventScript_255DBA - case 127, BattleFrontier_BattleArenaLobby_EventScript_255DBF + case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_255DBF BattleFrontier_BattleArenaLobby_EventScript_255DBA:: @ 8255DBA call BattleFrontier_BattleArenaLobby_EventScript_23E8B4 @@ -140,20 +140,20 @@ BattleFrontier_BattleArenaLobby_EventScript_255DF4:: @ 8255DF4 BattleFrontier_BattleArenaLobby_EventScript_255E0B:: @ 8255E0B message BattleFrontier_BattleArenaLobby_Text_2561EA waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, BattleFrontier_BattleArenaLobby_EventScript_255E47 case 1, BattleFrontier_BattleArenaLobby_EventScript_255F9F case 2, BattleFrontier_BattleArenaLobby_EventScript_255FFB - case 127, BattleFrontier_BattleArenaLobby_EventScript_255FFB + case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_255FFB BattleFrontier_BattleArenaLobby_EventScript_255E47:: @ 8255E47 message BattleFrontier_BattleArenaLobby_Text_256513 waitmessage - multichoice 17, 6, 24, 0 + multichoice 17, 6, MULTI_LEVEL_MODE, 0 switch VAR_RESULT case 2, BattleFrontier_BattleArenaLobby_EventScript_255FFB - case 127, BattleFrontier_BattleArenaLobby_EventScript_255FFB + case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_255FFB setvar VAR_0x8004, 15 special CallFrontierUtilFunc compare VAR_0x8004, 1 @@ -377,14 +377,14 @@ BattleFrontier_BattleArenaLobby_EventScript_2560CA:: @ 82560CA BattleFrontier_BattleArenaLobby_EventScript_2560D9:: @ 82560D9 message BattleFrontier_BattleArenaLobby_Text_256DDF waitmessage - multichoice 17, 2, 96, 0 + multichoice 17, 2, MULTI_BATTLE_ARENA_RULES, 0 switch VAR_RESULT case 0, BattleFrontier_BattleArenaLobby_EventScript_25612C case 1, BattleFrontier_BattleArenaLobby_EventScript_25613A case 2, BattleFrontier_BattleArenaLobby_EventScript_256148 case 3, BattleFrontier_BattleArenaLobby_EventScript_256156 case 4, BattleFrontier_BattleArenaLobby_EventScript_256164 - case 127, BattleFrontier_BattleArenaLobby_EventScript_256164 + case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_256164 end BattleFrontier_BattleArenaLobby_EventScript_25612C:: @ 825612C diff --git a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc index 96e9f86f5..a44b51ef5 100644 --- a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc @@ -595,76 +595,76 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_24C52F:: @ 824C52F return BattleFrontier_BattleDomeBattleRoom_EventScript_24C530:: @ 824C530 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 1, 3, 0, 3, 1 - createvobject EVENT_OBJ_GFX_EXPERT_F, 4, 6, 0, 3, 1 - createvobject EVENT_OBJ_GFX_NINJA_BOY, 6, 8, 0, 3, 1 - createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 9, 11, 0, 3, 1 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 11, 13, 0, 3, 1 - createvobject EVENT_OBJ_GFX_MAN_5, 13, 15, 0, 3, 1 - createvobject EVENT_OBJ_GFX_BEAUTY, 19, 7, 1, 3, 1 - createvobject EVENT_OBJ_GFX_WOMAN_5, 22, 11, 1, 3, 1 - createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 15, 1, 3, 1 - createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 2, 2, 3, 1 - createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 5, 1, 3, 1 + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 1, 3, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_EXPERT_F, 4, 6, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_NINJA_BOY, 6, 8, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 9, 11, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 11, 13, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_MAN_5, 13, 15, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_BEAUTY, 19, 7, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_WOMAN_5, 22, 11, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 15, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 2, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 5, 1, 3, DIR_SOUTH return BattleFrontier_BattleDomeBattleRoom_EventScript_24C594:: @ 824C594 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 1, 3, 0, 3, 1 - createvobject EVENT_OBJ_GFX_EXPERT_F, 4, 6, 0, 3, 1 - createvobject EVENT_OBJ_GFX_NINJA_BOY, 6, 8, 0, 3, 1 - createvobject EVENT_OBJ_GFX_WOMAN_2, 7, 9, 0, 3, 1 - createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 9, 11, 0, 3, 1 - createvobject EVENT_OBJ_GFX_LASS, 10, 12, 0, 3, 1 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 11, 13, 0, 3, 1 - createvobject EVENT_OBJ_GFX_MAN_5, 13, 15, 0, 3, 1 - createvobject EVENT_OBJ_GFX_GENTLEMAN, 15, 2, 1, 3, 1 - createvobject EVENT_OBJ_GFX_NINJA_BOY, 16, 3, 1, 3, 1 - createvobject EVENT_OBJ_GFX_WOMAN_2, 17, 4, 1, 3, 1 - createvobject EVENT_OBJ_GFX_BEAUTY, 19, 7, 1, 3, 1 - createvobject EVENT_OBJ_GFX_EXPERT_F, 20, 9, 1, 3, 1 - createvobject EVENT_OBJ_GFX_WOMAN_5, 22, 11, 1, 3, 1 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 23, 13, 1, 3, 1 - createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 15, 1, 3, 1 - createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 2, 2, 3, 1 - createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 5, 2, 3, 1 - createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 5, 1, 3, 1 - createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 6, 2, 3, 1 + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 1, 3, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_EXPERT_F, 4, 6, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_NINJA_BOY, 6, 8, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_WOMAN_2, 7, 9, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 9, 11, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_LASS, 10, 12, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 11, 13, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_MAN_5, 13, 15, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_GENTLEMAN, 15, 2, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_NINJA_BOY, 16, 3, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_WOMAN_2, 17, 4, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_BEAUTY, 19, 7, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_EXPERT_F, 20, 9, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_WOMAN_5, 22, 11, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 23, 13, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 15, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 2, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 5, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 5, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 6, 2, 3, DIR_SOUTH createvobject EVENT_OBJ_GFX_WOMAN_5, 31, 8, 2, 3, 1 return BattleFrontier_BattleDomeBattleRoom_EventScript_24C652:: @ 824C652 - createvobject EVENT_OBJ_GFX_NINJA_BOY, 0, 2, 0, 3, 1 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 1, 3, 0, 3, 1 - createvobject EVENT_OBJ_GFX_BEAUTY, 2, 15, 0, 3, 1 - createvobject EVENT_OBJ_GFX_MAN_5, 3, 5, 0, 3, 1 - createvobject EVENT_OBJ_GFX_EXPERT_F, 4, 6, 0, 3, 1 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 5, 7, 0, 3, 1 - createvobject EVENT_OBJ_GFX_NINJA_BOY, 6, 8, 0, 3, 1 - createvobject EVENT_OBJ_GFX_WOMAN_2, 7, 9, 0, 3, 1 - createvobject EVENT_OBJ_GFX_WOMAN_3, 8, 10, 0, 3, 1 - createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 9, 11, 0, 3, 1 - createvobject EVENT_OBJ_GFX_LASS, 10, 12, 0, 3, 1 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 11, 13, 0, 3, 1 - createvobject EVENT_OBJ_GFX_BEAUTY, 12, 14, 0, 3, 1 - createvobject EVENT_OBJ_GFX_MAN_5, 13, 15, 2, 3, 1 - createvobject EVENT_OBJ_GFX_HIKER, 14, 12, 2, 3, 1 - createvobject EVENT_OBJ_GFX_GENTLEMAN, 15, 2, 1, 3, 1 - createvobject EVENT_OBJ_GFX_NINJA_BOY, 16, 3, 1, 3, 1 - createvobject EVENT_OBJ_GFX_WOMAN_2, 17, 4, 1, 3, 1 - createvobject EVENT_OBJ_GFX_WOMAN_3, 18, 6, 1, 3, 1 - createvobject EVENT_OBJ_GFX_BEAUTY, 19, 7, 1, 3, 1 - createvobject EVENT_OBJ_GFX_EXPERT_F, 20, 9, 1, 3, 1 - createvobject EVENT_OBJ_GFX_MAN_2, 21, 10, 1, 3, 1 - createvobject EVENT_OBJ_GFX_WOMAN_5, 22, 11, 1, 3, 1 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 23, 13, 1, 3, 1 - createvobject EVENT_OBJ_GFX_GENTLEMAN, 24, 14, 1, 3, 1 - createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 15, 1, 3, 1 - createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 2, 2, 3, 1 - createvobject EVENT_OBJ_GFX_FAT_MAN, 27, 3, 2, 3, 1 - createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 5, 2, 3, 1 - createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 5, 1, 3, 1 - createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 6, 2, 3, 1 - createvobject EVENT_OBJ_GFX_WOMAN_5, 31, 8, 2, 3, 1 + createvobject EVENT_OBJ_GFX_NINJA_BOY, 0, 2, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 1, 3, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_BEAUTY, 2, 15, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_MAN_5, 3, 5, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_EXPERT_F, 4, 6, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 5, 7, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_NINJA_BOY, 6, 8, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_WOMAN_2, 7, 9, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_WOMAN_3, 8, 10, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 9, 11, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_LASS, 10, 12, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 11, 13, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_BEAUTY, 12, 14, 0, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_MAN_5, 13, 15, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_HIKER, 14, 12, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_GENTLEMAN, 15, 2, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_NINJA_BOY, 16, 3, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_WOMAN_2, 17, 4, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_WOMAN_3, 18, 6, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_BEAUTY, 19, 7, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_EXPERT_F, 20, 9, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_MAN_2, 21, 10, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_WOMAN_5, 22, 11, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 23, 13, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_GENTLEMAN, 24, 14, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 15, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 2, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_FAT_MAN, 27, 3, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 5, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 5, 1, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 6, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_WOMAN_5, 31, 8, 2, 3, DIR_SOUTH return BattleFrontier_BattleArenaBattleRoom_Movement_24C773: @ 824C773 @@ -880,71 +880,71 @@ BattleFrontier_BattleDomeBattleRoom_Movement_24C82B: @ 824C82B step_end BattleFrontier_BattleDomeBattleRoom_EventScript_24C82E:: @ 824C82E - turnvobject 0, 4 - turnvobject 2, 4 - turnvobject 4, 4 - turnvobject 6, 4 - turnvobject 8, 4 - turnvobject 10, 3 - turnvobject 12, 3 - turnvobject 14, 3 - turnvobject 16, 3 - turnvobject 18, 3 - turnvobject 20, 4 - turnvobject 22, 4 - turnvobject 24, 4 - turnvobject 26, 4 - turnvobject 28, 4 - turnvobject 30, 4 + turnvobject 0, DIR_EAST + turnvobject 2, DIR_EAST + turnvobject 4, DIR_EAST + turnvobject 6, DIR_EAST + turnvobject 8, DIR_EAST + turnvobject 10, DIR_WEST + turnvobject 12, DIR_WEST + turnvobject 14, DIR_WEST + turnvobject 16, DIR_WEST + turnvobject 18, DIR_WEST + turnvobject 20, DIR_EAST + turnvobject 22, DIR_EAST + turnvobject 24, DIR_EAST + turnvobject 26, DIR_EAST + turnvobject 28, DIR_EAST + turnvobject 30, DIR_EAST delay 20 - turnvobject 0, 1 - turnvobject 2, 1 - turnvobject 4, 1 - turnvobject 6, 1 - turnvobject 8, 1 - turnvobject 10, 1 - turnvobject 12, 1 - turnvobject 14, 1 - turnvobject 16, 1 - turnvobject 18, 1 - turnvobject 20, 1 - turnvobject 22, 1 - turnvobject 24, 1 - turnvobject 26, 1 - turnvobject 28, 1 - turnvobject 30, 1 + turnvobject 0, DIR_SOUTH + turnvobject 2, DIR_SOUTH + turnvobject 4, DIR_SOUTH + turnvobject 6, DIR_SOUTH + turnvobject 8, DIR_SOUTH + turnvobject 10, DIR_SOUTH + turnvobject 12, DIR_SOUTH + turnvobject 14, DIR_SOUTH + turnvobject 16, DIR_SOUTH + turnvobject 18, DIR_SOUTH + turnvobject 20, DIR_SOUTH + turnvobject 22, DIR_SOUTH + turnvobject 24, DIR_SOUTH + turnvobject 26, DIR_SOUTH + turnvobject 28, DIR_SOUTH + turnvobject 30, DIR_SOUTH delay 20 - turnvobject 1, 4 - turnvobject 3, 4 - turnvobject 5, 4 - turnvobject 7, 4 - turnvobject 9, 4 - turnvobject 11, 3 - turnvobject 13, 3 - turnvobject 15, 3 - turnvobject 17, 3 - turnvobject 19, 3 - turnvobject 21, 4 - turnvobject 23, 4 - turnvobject 25, 4 - turnvobject 27, 3 - turnvobject 31, 3 + turnvobject 1, DIR_EAST + turnvobject 3, DIR_EAST + turnvobject 5, DIR_EAST + turnvobject 7, DIR_EAST + turnvobject 9, DIR_EAST + turnvobject 11, DIR_WEST + turnvobject 13, DIR_WEST + turnvobject 15, DIR_WEST + turnvobject 17, DIR_WEST + turnvobject 19, DIR_WEST + turnvobject 21, DIR_EAST + turnvobject 23, DIR_EAST + turnvobject 25, DIR_EAST + turnvobject 27, DIR_WEST + turnvobject 31, DIR_WEST delay 20 - turnvobject 1, 1 - turnvobject 3, 1 - turnvobject 5, 1 - turnvobject 7, 1 - turnvobject 9, 1 - turnvobject 11, 1 - turnvobject 13, 1 - turnvobject 15, 1 - turnvobject 17, 1 - turnvobject 19, 1 - turnvobject 21, 1 - turnvobject 23, 1 - turnvobject 25, 1 - turnvobject 27, 1 - turnvobject 31, 1 + turnvobject 1, DIR_SOUTH + turnvobject 3, DIR_SOUTH + turnvobject 5, DIR_SOUTH + turnvobject 7, DIR_SOUTH + turnvobject 9, DIR_SOUTH + turnvobject 11, DIR_SOUTH + turnvobject 13, DIR_SOUTH + turnvobject 15, DIR_SOUTH + turnvobject 17, DIR_SOUTH + turnvobject 19, DIR_SOUTH + turnvobject 21, DIR_SOUTH + turnvobject 23, DIR_SOUTH + turnvobject 25, DIR_SOUTH + turnvobject 27, DIR_SOUTH + turnvobject 31, DIR_SOUTH delay 20 return diff --git a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc index 68ecf802b..4ba6db967 100644 --- a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc @@ -16,7 +16,7 @@ BattleFrontier_BattlePyramidLobby_MapScript2_2497FB: @ 82497FB BattleFrontier_BattleDomeLobby_EventScript_249805:: @ 8249805 setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattleDomeLobby_MapScript2_24980F: @ 824980F @@ -131,11 +131,11 @@ BattleFrontier_BattleDomeLobby_EventScript_249991:: @ 8249991 goto_if_eq BattleFrontier_BattleDomeLobby_EventScript_2499E9 message BattleFrontier_BattleDomeLobby_Text_24AE17 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleDomeLobby_EventScript_2499E9 case 0, BattleFrontier_BattleDomeLobby_EventScript_2499E4 - case 127, BattleFrontier_BattleDomeLobby_EventScript_2499E9 + case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_2499E9 BattleFrontier_BattleDomeLobby_EventScript_2499E4:: @ 82499E4 call BattleFrontier_BattleDomeLobby_EventScript_23E8B4 @@ -193,20 +193,20 @@ BattleFrontier_BattleDomeLobby_EventScript_249A72:: @ 8249A72 compare VAR_FRONTIER_BATTLE_MODE, 1 call_if_eq BattleFrontier_BattleDomeLobby_EventScript_249D15 waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, BattleFrontier_BattleDomeLobby_EventScript_249ABF case 1, BattleFrontier_BattleDomeLobby_EventScript_249BFA case 2, BattleFrontier_BattleDomeLobby_EventScript_249C64 - case 127, BattleFrontier_BattleDomeLobby_EventScript_249C64 + case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_249C64 BattleFrontier_BattleDomeLobby_EventScript_249ABF:: @ 8249ABF message BattleFrontier_BattleDomeLobby_Text_24A210 waitmessage - multichoice 17, 6, 24, 0 + multichoice 17, 6, MULTI_LEVEL_MODE, 0 switch VAR_RESULT case 2, BattleFrontier_BattleDomeLobby_EventScript_249C64 - case 127, BattleFrontier_BattleDomeLobby_EventScript_249C64 + case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_249C64 setvar VAR_0x8004, 15 special CallFrontierUtilFunc compare VAR_0x8004, 1 @@ -503,13 +503,13 @@ BattleFrontier_BattleDomeLobby_EventScript_249E34:: @ 8249E34 BattleFrontier_BattleDomeLobby_EventScript_249E43:: @ 8249E43 message BattleFrontier_BattleDomeLobby_Text_24AE8B waitmessage - multichoice 17, 4, 98, 0 + multichoice 17, 4, MULTI_BATTLE_DOME_RULES, 0 switch VAR_RESULT case 0, BattleFrontier_BattleDomeLobby_EventScript_249E8B case 1, BattleFrontier_BattleDomeLobby_EventScript_249E99 case 2, BattleFrontier_BattleDomeLobby_EventScript_249EA7 case 3, BattleFrontier_BattleDomeLobby_EventScript_249EB5 - case 127, BattleFrontier_BattleDomeLobby_EventScript_249EB5 + case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_249EB5 end BattleFrontier_BattleDomeLobby_EventScript_249E8B:: @ 8249E8B diff --git a/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc index 3901201bb..3f5d53ac1 100644 --- a/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc @@ -9,7 +9,7 @@ BattleFrontier_BattleDomePreBattleRoom_MapScript2_24B204: @ 824B204 BattleFrontier_BattleDomePreBattleRoom_EventScript_24B20E:: @ 824B20E setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattleDomePreBattleRoom_MapScript2_24B218: @ 824B218 @@ -35,7 +35,7 @@ BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F:: @ 824B24F call BattleFrontier_BattleDomePreBattleRoom_EventScript_23E8E0 compare VAR_RESULT, 1 goto_if_eq BattleFrontier_BattleDomePreBattleRoom_EventScript_24B2C1 - multichoice 16, 0, 73, 1 + multichoice 16, 0, MULTI_TOURNEY_WITH_RECORD, 1 switch VAR_RESULT case 0, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B3DD case 1, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B3F5 @@ -43,26 +43,26 @@ BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F:: @ 824B24F case 3, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B30D case 4, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B349 case 5, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B377 - case 127, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F + case MULTI_B_PRESSED, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F BattleFrontier_BattleDomePreBattleRoom_EventScript_24B2C1:: @ 824B2C1 - multichoice 16, 2, 107, 1 + multichoice 16, 2, MULTI_TOURNEY_NO_RECORD, 1 switch VAR_RESULT case 0, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B3DD case 1, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B3F5 case 2, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B46D case 3, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B349 case 4, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B377 - case 127, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F + case MULTI_B_PRESSED, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F BattleFrontier_BattleDomePreBattleRoom_EventScript_24B30D:: @ 824B30D message BattleFrontier_BattleDomePreBattleRoom_Text_24BAF7 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F case 0, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B33F - case 127, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F + case MULTI_B_PRESSED, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F BattleFrontier_BattleDomePreBattleRoom_EventScript_24B33F:: @ 824B33F call BattleFrontier_BattleDomePreBattleRoom_EventScript_23E8B4 @@ -78,11 +78,11 @@ BattleFrontier_BattleDomePreBattleRoom_EventScript_24B349:: @ 824B349 BattleFrontier_BattleDomePreBattleRoom_EventScript_24B377:: @ 824B377 message BattleFrontier_BattleDomePreBattleRoom_Text_24BA93 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F case 0, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B3A9 - case 127, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F + case MULTI_B_PRESSED, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F BattleFrontier_BattleDomePreBattleRoom_EventScript_24B3A9:: @ 824B3A9 setvar VAR_0x8004, 12 diff --git a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc index a9e57dde6..9569d23ca 100644 --- a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc @@ -9,7 +9,7 @@ BattleFrontier_BattleFactoryLobby_MapScript2_2583F3: @ 82583F3 BattleFrontier_BattleFactoryLobby_EventScript_2583FD:: @ 82583FD setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattleFactoryLobby_MapScript2_258407: @ 8258407 @@ -106,11 +106,11 @@ BattleFrontier_BattleFactoryLobby_EventScript_25853B:: @ 825853B goto_if_eq BattleFrontier_BattleFactoryLobby_EventScript_258582 message BattleFrontier_BattleFactoryLobby_Text_259388 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleFactoryLobby_EventScript_258582 case 0, BattleFrontier_BattleFactoryLobby_EventScript_25857D - case 127, BattleFrontier_BattleFactoryLobby_EventScript_258582 + case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_258582 BattleFrontier_BattleFactoryLobby_EventScript_25857D:: @ 825857D call BattleFrontier_BattleFactoryLobby_EventScript_23E8B4 @@ -166,20 +166,20 @@ BattleFrontier_BattleFactoryLobby_EventScript_258606:: @ 8258606 compare VAR_FRONTIER_BATTLE_MODE, 1 call_if_eq BattleFrontier_BattleFactoryLobby_EventScript_2587C9 waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, BattleFrontier_BattleFactoryLobby_EventScript_258653 case 1, BattleFrontier_BattleFactoryLobby_EventScript_258768 case 2, BattleFrontier_BattleFactoryLobby_EventScript_25879D - case 127, BattleFrontier_BattleFactoryLobby_EventScript_25879D + case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_25879D BattleFrontier_BattleFactoryLobby_EventScript_258653:: @ 8258653 message BattleFrontier_BattleFactoryLobby_Text_258BE9 waitmessage - multichoice 17, 6, 24, 0 + multichoice 17, 6, MULTI_LEVEL_MODE, 0 switch VAR_RESULT case 2, BattleFrontier_BattleFactoryLobby_EventScript_25879D - case 127, BattleFrontier_BattleFactoryLobby_EventScript_25879D + case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_25879D setvar VAR_0x8004, 2 setvar VAR_0x8005, 1 copyvar VAR_0x8006, VAR_RESULT @@ -347,7 +347,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_258839:: @ 8258839 BattleFrontier_BattleFactoryLobby_EventScript_258848:: @ 8258848 message BattleFrontier_BattleFactoryLobby_Text_259743 waitmessage - multichoice 17, 0, 99, 0 + multichoice 17, 0, MULTI_BATTLE_FACTORY_RULES, 0 switch VAR_RESULT case 0, BattleFrontier_BattleFactoryLobby_EventScript_2588A6 case 1, BattleFrontier_BattleFactoryLobby_EventScript_2588B4 @@ -355,7 +355,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_258848:: @ 8258848 case 3, BattleFrontier_BattleFactoryLobby_EventScript_2588D0 case 4, BattleFrontier_BattleFactoryLobby_EventScript_2588DE case 5, BattleFrontier_BattleFactoryLobby_EventScript_2588EC - case 127, BattleFrontier_BattleFactoryLobby_EventScript_2588EC + case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_2588EC end BattleFrontier_BattleFactoryLobby_EventScript_2588A6:: @ 82588A6 diff --git a/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc index 0049b3f58..f65ffae0d 100644 --- a/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc @@ -12,10 +12,10 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259ACF:: @ 8259ACF compare VAR_0x8006, 1 goto_if_ne BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259AEA setobjectxy 1, 8, 7 - turnobject 1, 1 + turnobject 1, DIR_SOUTH BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259AEA:: @ 8259AEA - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattleFactoryPreBattleRoom_MapScript2_259AEF: @ 8259AEF @@ -118,30 +118,30 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C26:: @ 8259C26 call BattleFrontier_BattleFactoryPreBattleRoom_EventScript_23E8E0 compare VAR_RESULT, 1 goto_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259CC6 - multichoice 19, 4, 103, 1 + multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D98 case 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259CFC case 2, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D38 case 3, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D66 - case 127, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13 + case MULTI_B_PRESSED, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13 BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259CC6:: @ 8259CC6 - multichoice 20, 6, 104, 1 + multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D98 case 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D38 case 2, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D66 - case 127, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13 + case MULTI_B_PRESSED, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13 BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259CFC:: @ 8259CFC message BattleFrontier_BattleFactoryPreBattleRoom_Text_25ABD2 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13 case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D2E - case 127, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13 + case MULTI_B_PRESSED, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13 BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D2E:: @ 8259D2E call BattleFrontier_BattleFactoryPreBattleRoom_EventScript_23E8B4 @@ -157,11 +157,11 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D38:: @ 8259D38 BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D66:: @ 8259D66 message BattleFrontier_BattleFactoryPreBattleRoom_Text_25A37A waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13 case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25AEF8 - case 127, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13 + case MULTI_B_PRESSED, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13 BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D98:: @ 8259D98 setvar VAR_0x8004, 12 @@ -422,21 +422,21 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0B9:: @ 825A0B9 call BattleFrontier_BattleFactoryPreBattleRoom_EventScript_23E8E0 compare VAR_RESULT, 1 goto_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A110 - multichoice 19, 4, 103, 1 + multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A146 case 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259CFC case 2, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D38 case 3, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D66 - case 127, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0B9 + case MULTI_B_PRESSED, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0B9 BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A110:: @ 825A110 - multichoice 20, 6, 104, 1 + multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A146 case 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D38 case 2, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D66 - case 127, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0B9 + case MULTI_B_PRESSED, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0B9 BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A146:: @ 825A146 msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25AD61, MSGBOX_DEFAULT diff --git a/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc index bdd4a9ff4..605807580 100644 --- a/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc @@ -126,30 +126,30 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A:: @ 824F98A call BattleFrontier_BattlePalaceBattleRoom_EventScript_23E8E0 compare VAR_RESULT, 1 goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_24FA42 - multichoice 19, 4, 103, 1 + multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB14 case 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FA78 case 2, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAB4 case 3, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAE2 - case 127, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A + case MULTI_B_PRESSED, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A BattleFrontier_BattlePalaceBattleRoom_EventScript_24FA42:: @ 824FA42 - multichoice 20, 6, 104, 1 + multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB14 case 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAB4 case 2, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAE2 - case 127, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A + case MULTI_B_PRESSED, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A BattleFrontier_BattlePalaceBattleRoom_EventScript_24FA78:: @ 824FA78 message BattleFrontier_BattlePalaceBattleRoom_Text_25009E waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAAA - case 127, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A + case MULTI_B_PRESSED, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAAA:: @ 824FAAA call BattleFrontier_BattlePalaceBattleRoom_EventScript_23E8B4 @@ -165,11 +165,11 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAB4:: @ 824FAB4 BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAE2:: @ 824FAE2 message BattleFrontier_BattlePalaceBattleRoom_Text_25005A waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F8FA - case 127, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A + case MULTI_B_PRESSED, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB14:: @ 824FB14 applymovement 1, BattleFrontier_BattlePalaceBattleRoom_Movement_24FE97 @@ -209,21 +209,21 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB79:: @ 824FB79 call BattleFrontier_BattlePalaceBattleRoom_EventScript_23E8E0 compare VAR_RESULT, 1 goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_24FBD0 - multichoice 19, 4, 103, 1 + multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FC06 case 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FA78 case 2, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAB4 case 3, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAE2 - case 127, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB79 + case MULTI_B_PRESSED, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB79 BattleFrontier_BattlePalaceBattleRoom_EventScript_24FBD0:: @ 824FBD0 - multichoice 20, 6, 104, 1 + multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FC06 case 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAB4 case 2, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAE2 - case 127, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB79 + case MULTI_B_PRESSED, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB79 BattleFrontier_BattlePalaceBattleRoom_EventScript_24FC06:: @ 824FC06 call BattleFrontier_BattlePalaceBattleRoom_EventScript_242170 diff --git a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc index 40205e9b5..c3b688661 100644 --- a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc @@ -9,7 +9,7 @@ BattleFrontier_BattlePalaceLobby_MapScript2_24D789: @ 824D789 BattleFrontier_BattlePalaceLobby_EventScript_24D793:: @ 824D793 setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattlePalaceLobby_MapScript2_24D79D: @ 824D79D @@ -101,11 +101,11 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D8A1:: @ 824D8A1 goto_if_eq BattleFrontier_BattlePalaceLobby_EventScript_24D907 message BattleFrontier_BattlePalaceLobby_Text_24EF16 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattlePalaceLobby_EventScript_24D907 case 0, BattleFrontier_BattlePalaceLobby_EventScript_24D902 - case 127, BattleFrontier_BattlePalaceLobby_EventScript_24D907 + case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_24D907 BattleFrontier_BattlePalaceLobby_EventScript_24D902:: @ 824D902 call BattleFrontier_BattlePalaceLobby_EventScript_23E8B4 @@ -164,20 +164,20 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D999:: @ 824D999 compare VAR_FRONTIER_BATTLE_MODE, 1 call_if_eq BattleFrontier_BattlePalaceLobby_EventScript_24DBB6 waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, BattleFrontier_BattlePalaceLobby_EventScript_24D9E6 case 1, BattleFrontier_BattlePalaceLobby_EventScript_24DB20 case 2, BattleFrontier_BattlePalaceLobby_EventScript_24DB94 - case 127, BattleFrontier_BattlePalaceLobby_EventScript_24DB94 + case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_24DB94 BattleFrontier_BattlePalaceLobby_EventScript_24D9E6:: @ 824D9E6 message BattleFrontier_BattlePalaceLobby_Text_24E119 waitmessage - multichoice 17, 6, 24, 0 + multichoice 17, 6, MULTI_LEVEL_MODE, 0 switch VAR_RESULT case 2, BattleFrontier_BattlePalaceLobby_EventScript_24DB94 - case 127, BattleFrontier_BattlePalaceLobby_EventScript_24DB94 + case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_24DB94 setvar VAR_0x8004, 15 special CallFrontierUtilFunc compare VAR_0x8004, 1 @@ -406,7 +406,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24DCA6:: @ 824DCA6 BattleFrontier_BattlePalaceLobby_EventScript_24DCB5:: @ 824DCB5 message BattleFrontier_BattlePalaceLobby_Text_24EF88 waitmessage - multichoice 16, 0, 100, 0 + multichoice 16, 0, MULTI_BATTLE_PALACE_RULES, 0 switch VAR_RESULT case 0, BattleFrontier_BattlePalaceLobby_EventScript_24DD13 case 1, BattleFrontier_BattlePalaceLobby_EventScript_24DD21 @@ -414,7 +414,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24DCB5:: @ 824DCB5 case 3, BattleFrontier_BattlePalaceLobby_EventScript_24DD3D case 4, BattleFrontier_BattlePalaceLobby_EventScript_24DD4B case 5, BattleFrontier_BattlePalaceLobby_EventScript_24DD59 - case 127, BattleFrontier_BattlePalaceLobby_EventScript_24DD59 + case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_24DD59 end BattleFrontier_BattlePalaceLobby_EventScript_24DD13:: @ 824DD13 diff --git a/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc b/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc index c7421c2c8..20e14b72b 100644 --- a/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc @@ -42,7 +42,7 @@ BattleFrontier_BattlePikeCorridor_MapScript2_25C7F7: @ 825C7F7 BattleFrontier_BattlePikeCorridor_EventScript_25C801:: @ 825C801 setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattlePikeCorridor_Movement_25C80B: @ 825C80B diff --git a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc index 51d6023c8..05cdfa8a3 100644 --- a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc @@ -16,7 +16,7 @@ BattleFrontier_BattlePikeLobby_MapScript2_25B6F3: @ 825B6F3 BattleFrontier_BattlePikeLobby_EventScript_25B6FD:: @ 825B6FD setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattlePikeLobby_EventScript_25B707:: @ 825B707 @@ -133,20 +133,20 @@ BattleFrontier_BattlePikeLobby_EventScript_25B868:: @ 825B868 BattleFrontier_BattlePikeLobby_EventScript_25B87F:: @ 825B87F message BattleFrontier_BattlePikeLobby_Text_25BBC1 waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, BattleFrontier_BattlePikeLobby_EventScript_25B8BB case 1, BattleFrontier_BattlePikeLobby_EventScript_25BA1A case 2, BattleFrontier_BattlePikeLobby_EventScript_25BA76 - case 127, BattleFrontier_BattlePikeLobby_EventScript_25BA76 + case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_25BA76 BattleFrontier_BattlePikeLobby_EventScript_25B8BB:: @ 825B8BB message BattleFrontier_BattlePikeLobby_Text_25BE35 waitmessage - multichoice 17, 6, 24, 0 + multichoice 17, 6, MULTI_LEVEL_MODE, 0 switch VAR_RESULT case 2, BattleFrontier_BattlePikeLobby_EventScript_25BA76 - case 127, BattleFrontier_BattlePikeLobby_EventScript_25BA76 + case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_25BA76 setvar VAR_0x8004, 15 special CallFrontierUtilFunc compare VAR_0x8004, 1 @@ -297,13 +297,13 @@ BattleFrontier_BattlePikeLobby_EventScript_25BAC6:: @ 825BAC6 BattleFrontier_BattlePikeLobby_EventScript_25BAD5:: @ 825BAD5 message BattleFrontier_BattlePikeLobby_Text_25C621 waitmessage - multichoice 16, 4, 102, 0 + multichoice 16, 4, MULTI_BATTLE_PIKE_RULES, 0 switch VAR_RESULT case 0, BattleFrontier_BattlePikeLobby_EventScript_25BB1D case 1, BattleFrontier_BattlePikeLobby_EventScript_25BB2B case 2, BattleFrontier_BattlePikeLobby_EventScript_25BB39 case 3, BattleFrontier_BattlePikeLobby_EventScript_25BB47 - case 127, BattleFrontier_BattlePikeLobby_EventScript_25BB47 + case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_25BB47 end BattleFrontier_BattlePikeLobby_EventScript_25BB1D:: @ 825BB1D diff --git a/data/maps/BattleFrontier_BattlePikeRandomRoom2/scripts.inc b/data/maps/BattleFrontier_BattlePikeRandomRoom2/scripts.inc index 5d438d8bd..b12ff0d6e 100644 --- a/data/maps/BattleFrontier_BattlePikeRandomRoom2/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeRandomRoom2/scripts.inc @@ -34,7 +34,7 @@ BattleFrontier_BattlePikeRandomRoom2_MapScript2_25E3DE: @ 825E3DE BattleFrontier_BattlePikeRandomRoom2_EventScript_25E3E8:: @ 825E3E8 setvar VAR_TEMP_4, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattlePikeRandomRoom2_Text_25E3F2: @ 825E3F2 diff --git a/data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc b/data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc index 9f2dfec16..9a4448226 100644 --- a/data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc @@ -30,7 +30,7 @@ BattleFrontier_BattlePikeRandomRoom3_MapScript2_25E466: @ 825E466 BattleFrontier_BattlePikeRandomRoom3_EventScript_25E470:: @ 825E470 setvar VAR_TEMP_4, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattlePikeRandomRoom3_MapScript1_25E47A: @ 825E47A diff --git a/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc b/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc index 54f11f071..927222e8c 100644 --- a/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc @@ -18,7 +18,7 @@ BattleFrontier_BattlePikeThreePathRoom_MapScript2_25C87D: @ 825C87D BattleFrontier_BattlePikeThreePathRoom_EventScript_25C887:: @ 825C887 setvar VAR_TEMP_4, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattlePikeThreePathRoom_EventScript_25C891:: @ 825C891 @@ -159,7 +159,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_25CA2A:: @ 825CA2A BattleFrontier_BattlePikeThreePathRoom_EventScript_25CA5A:: @ 825CA5A message BattleFrontier_BattlePikeThreePathRoom_Text_25CD3C waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 0, BattleFrontier_BattlePikeThreePathRoom_EventScript_2C4222 release diff --git a/data/maps/BattleFrontier_BattlePointExchangeServiceCorner/scripts.inc b/data/maps/BattleFrontier_BattlePointExchangeServiceCorner/scripts.inc index 4fa8d142a..2011c42df 100644 --- a/data/maps/BattleFrontier_BattlePointExchangeServiceCorner/scripts.inc +++ b/data/maps/BattleFrontier_BattlePointExchangeServiceCorner/scripts.inc @@ -3,17 +3,17 @@ BattleFrontier_BattlePointExchangeServiceCorner_MapScripts:: @ 825F070 BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F071:: @ 825F071 msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25F7FA, MSGBOX_DEFAULT - special sub_813A958 + special ShowBattlePointsWindow return BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D:: @ 825F07D msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25FF12, MSGBOX_DEFAULT - special sub_813A988 + special CloseBattlePointsWindow release end BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A:: @ 825F08A - specialvar VAR_TEMP_1, sub_813AA04 + specialvar VAR_TEMP_1, GetFrontierBattlePoints compare VAR_TEMP_1, VAR_0x8008 goto_if_ge BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F0C9 msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25FE86, MSGBOX_DEFAULT @@ -39,9 +39,9 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F0E5:: @ 825F0E5 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F11D copyvar VAR_0x8004, VAR_0x8008 - special sub_813A9A4 + special TakeFrontierBattlePoints givedecoration VAR_0x8009 - special sub_813A8FC + special UpdateBattlePointsWindow playse SE_REGI msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25FE45, MSGBOX_DEFAULT compare VAR_TEMP_2, 0 @@ -51,7 +51,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F0E5:: @ 825F0E5 BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F11D:: @ 825F11D msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25FEB9, MSGBOX_DEFAULT - special sub_813A988 + special CloseBattlePointsWindow release end @@ -60,9 +60,9 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F12A:: @ 825F12A compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F166 copyvar VAR_0x8004, VAR_0x8008 - special sub_813A9A4 + special TakeFrontierBattlePoints giveitem VAR_0x8009, 1 - special sub_813A8FC + special UpdateBattlePointsWindow playse SE_REGI msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25FE72, MSGBOX_DEFAULT compare VAR_TEMP_2, 2 @@ -72,7 +72,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F12A:: @ 825F12A BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F166:: @ 825F166 msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25FEE3, MSGBOX_DEFAULT - special sub_813A988 + special CloseBattlePointsWindow release end @@ -85,11 +85,11 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F173:: @ 825F173 end BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185:: @ 825F185 - setvar VAR_0x8004, 3 - special sub_813AA18 - special sub_813A128 + setvar VAR_0x8004, SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1 + special ShowFrontierExchangeCornerItemIconWindow + special ShowScrollableMultichoice waitstate - special sub_813AA44 + special CloseFrontierExchangeCornerItemIconWindow switch VAR_RESULT case 0, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F21E case 1, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F241 @@ -102,7 +102,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185:: @ 825F185 case 8, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F336 case 9, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F359 case 10, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D - case 127, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D + case MULTI_B_PRESSED, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D end BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F21E:: @ 825F21E @@ -110,7 +110,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F21E:: @ 825F21E compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185 setvar VAR_0x8008, 16 - setvar VAR_0x8009, 75 + setvar VAR_0x8009, DECOR_KISS_POSTER goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -119,7 +119,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F241:: @ 825F241 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185 setvar VAR_0x8008, 32 - setvar VAR_0x8009, 103 + setvar VAR_0x8009, DECOR_KISS_CUSHION goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -128,7 +128,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F264:: @ 825F264 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185 setvar VAR_0x8008, 32 - setvar VAR_0x8009, 87 + setvar VAR_0x8009, DECOR_SMOOCHUM_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -137,7 +137,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F287:: @ 825F287 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185 setvar VAR_0x8008, 48 - setvar VAR_0x8009, 79 + setvar VAR_0x8009, DECOR_TOGEPI_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -146,7 +146,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F2AA:: @ 825F2AA compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185 setvar VAR_0x8008, 48 - setvar VAR_0x8009, 84 + setvar VAR_0x8009, DECOR_MEOWTH_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -155,7 +155,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F2CD:: @ 825F2CD compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185 setvar VAR_0x8008, 48 - setvar VAR_0x8009, 85 + setvar VAR_0x8009, DECOR_CLEFAIRY_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -164,7 +164,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F2F0:: @ 825F2F0 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185 setvar VAR_0x8008, 48 - setvar VAR_0x8009, 86 + setvar VAR_0x8009, DECOR_DITTO_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -173,7 +173,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F313:: @ 825F313 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185 setvar VAR_0x8008, 80 - setvar VAR_0x8009, 80 + setvar VAR_0x8009, DECOR_CYNDAQUIL_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -182,7 +182,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F336:: @ 825F336 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185 setvar VAR_0x8008, 80 - setvar VAR_0x8009, 81 + setvar VAR_0x8009, DECOR_CHIKORITA_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -191,7 +191,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F359:: @ 825F359 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185 setvar VAR_0x8008, 80 - setvar VAR_0x8009, 82 + setvar VAR_0x8009, DECOR_TOTODILE_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -204,11 +204,11 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F37C:: @ 825F37C end BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E:: @ 825F38E - setvar VAR_0x8004, 4 - special sub_813AA18 - special sub_813A128 + setvar VAR_0x8004, SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2 + special ShowFrontierExchangeCornerItemIconWindow + special ShowScrollableMultichoice waitstate - special sub_813AA44 + special CloseFrontierExchangeCornerItemIconWindow switch VAR_RESULT case 0, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F3F0 case 1, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F413 @@ -216,7 +216,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E:: @ 825F38E case 3, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F459 case 4, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F47C case 5, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D - case 127, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D + case MULTI_B_PRESSED, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D end BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F3F0:: @ 825F3F0 @@ -224,7 +224,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F3F0:: @ 825F3F0 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E setvar VAR_0x8008, 128 - setvar VAR_0x8009, 113 + setvar VAR_0x8009, DECOR_LAPRAS_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -233,7 +233,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F413:: @ 825F413 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E setvar VAR_0x8008, 128 - setvar VAR_0x8009, 111 + setvar VAR_0x8009, DECOR_SNORLAX_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -242,7 +242,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F436:: @ 825F436 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E setvar VAR_0x8008, 256 - setvar VAR_0x8009, 114 + setvar VAR_0x8009, DECOR_VENUSAUR_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -251,7 +251,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F459:: @ 825F459 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E setvar VAR_0x8008, 256 - setvar VAR_0x8009, 115 + setvar VAR_0x8009, DECOR_CHARIZARD_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -260,7 +260,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F47C:: @ 825F47C compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E setvar VAR_0x8008, 256 - setvar VAR_0x8009, 116 + setvar VAR_0x8009, DECOR_BLASTOISE_DOLL goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -273,11 +273,11 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F49F:: @ 825F49F end BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1:: @ 825F4B1 - setvar VAR_0x8004, 5 - special sub_813AA18 - special sub_813A128 + setvar VAR_0x8004, SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR + special ShowFrontierExchangeCornerItemIconWindow + special ShowScrollableMultichoice waitstate - special sub_813AA44 + special CloseFrontierExchangeCornerItemIconWindow switch VAR_RESULT case 0, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F51E case 1, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F541 @@ -286,7 +286,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1:: @ 825F4B1 case 4, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F5AA case 5, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F5CD case 6, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D - case 127, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D + case MULTI_B_PRESSED, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D end BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F51E:: @ 825F51E @@ -294,7 +294,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F51E:: @ 825F51E compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1 setvar VAR_0x8008, 1 - setvar VAR_0x8009, 64 + setvar VAR_0x8009, ITEM_PROTEIN goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -303,7 +303,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F541:: @ 825F541 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1 setvar VAR_0x8008, 1 - setvar VAR_0x8009, 67 + setvar VAR_0x8009, ITEM_CALCIUM goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -312,7 +312,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F564:: @ 825F564 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1 setvar VAR_0x8008, 1 - setvar VAR_0x8009, 65 + setvar VAR_0x8009, ITEM_IRON goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -321,7 +321,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F587:: @ 825F587 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1 setvar VAR_0x8008, 1 - setvar VAR_0x8009, 70 + setvar VAR_0x8009, ITEM_ZINC goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -330,7 +330,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F5AA:: @ 825F5AA compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1 setvar VAR_0x8008, 1 - setvar VAR_0x8009, 66 + setvar VAR_0x8009, ITEM_CARBOS goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -339,7 +339,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F5CD:: @ 825F5CD compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1 setvar VAR_0x8008, 1 - setvar VAR_0x8009, 63 + setvar VAR_0x8009, ITEM_HP_UP goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -352,11 +352,11 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F5F0:: @ 825F5F0 end BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602:: @ 825F602 - setvar VAR_0x8004, 6 - special sub_813AA18 - special sub_813A128 + setvar VAR_0x8004, SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR + special ShowFrontierExchangeCornerItemIconWindow + special ShowScrollableMultichoice waitstate - special sub_813AA44 + special CloseFrontierExchangeCornerItemIconWindow switch VAR_RESULT case 0, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F690 case 1, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F6B3 @@ -368,7 +368,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602:: @ 825F602 case 7, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F785 case 8, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F7A8 case 9, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D - case 127, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D + case MULTI_B_PRESSED, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D end BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F690:: @ 825F690 @@ -376,7 +376,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F690:: @ 825F690 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602 setvar VAR_0x8008, 48 - setvar VAR_0x8009, 200 + setvar VAR_0x8009, ITEM_LEFTOVERS goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -385,7 +385,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F6B3:: @ 825F6B3 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602 setvar VAR_0x8008, 48 - setvar VAR_0x8009, 180 + setvar VAR_0x8009, ITEM_WHITE_HERB goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -394,7 +394,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F6D6:: @ 825F6D6 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602 setvar VAR_0x8008, 48 - setvar VAR_0x8009, 183 + setvar VAR_0x8009, ITEM_QUICK_CLAW goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -403,7 +403,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F6F9:: @ 825F6F9 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602 setvar VAR_0x8008, 48 - setvar VAR_0x8009, 185 + setvar VAR_0x8009, ITEM_MENTAL_HERB goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -412,7 +412,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F71C:: @ 825F71C compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602 setvar VAR_0x8008, 64 - setvar VAR_0x8009, 179 + setvar VAR_0x8009, ITEM_BRIGHT_POWDER goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -421,7 +421,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F73F:: @ 825F73F compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602 setvar VAR_0x8008, 64 - setvar VAR_0x8009, 186 + setvar VAR_0x8009, ITEM_CHOICE_BAND goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -430,7 +430,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F762:: @ 825F762 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602 setvar VAR_0x8008, 64 - setvar VAR_0x8009, 187 + setvar VAR_0x8009, ITEM_KINGS_ROCK goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -439,7 +439,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F785:: @ 825F785 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602 setvar VAR_0x8008, 64 - setvar VAR_0x8009, 196 + setvar VAR_0x8009, ITEM_FOCUS_BAND goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end @@ -448,7 +448,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F7A8:: @ 825F7A8 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602 setvar VAR_0x8008, 64 - setvar VAR_0x8009, 198 + setvar VAR_0x8009, ITEM_SCOPE_LENS goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A end diff --git a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc index 667c4847e..b2f7d4579 100644 --- a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc @@ -9,7 +9,7 @@ BattleFrontier_BattlePyramidLobby_MapScript2_250721: @ 8250721 BattleFrontier_BattlePyramidLobby_EventScript_25072B: @ 825072B setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattlePyramidLobby_MapScript2_250735: @ 8250735 @@ -137,20 +137,20 @@ BattleFrontier_BattlePyramidLobby_EventScript_2508B1:: @ 82508B1 BattleFrontier_BattlePyramidLobby_EventScript_2508C8:: @ 82508C8 message BattleFrontier_BattlePyramidLobby_Text_250FA7 waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, BattleFrontier_BattlePyramidLobby_EventScript_250904 case 1, BattleFrontier_BattlePyramidLobby_EventScript_250A68 case 2, BattleFrontier_BattlePyramidLobby_EventScript_250AC4 - case 127, BattleFrontier_BattlePyramidLobby_EventScript_250AC4 + case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_250AC4 BattleFrontier_BattlePyramidLobby_EventScript_250904:: @ 8250904 message BattleFrontier_BattlePyramidLobby_Text_251248 waitmessage - multichoice 17, 6, 24, 0 + multichoice 17, 6, MULTI_LEVEL_MODE, 0 switch VAR_RESULT case 2, BattleFrontier_BattlePyramidLobby_EventScript_250AC4 - case 127, BattleFrontier_BattlePyramidLobby_EventScript_250AC4 + case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_250AC4 setvar VAR_0x8004, 15 special CallFrontierUtilFunc compare VAR_0x8004, 1 @@ -269,12 +269,12 @@ BattleFrontier_BattlePyramidLobby_EventScript_250ACE:: @ 8250ACE end BattleFrontier_BattlePyramidLobby_EventScript_250AF0:: @ 8250AF0 - multichoice 17, 6, 24, 0 + multichoice 17, 6, MULTI_LEVEL_MODE, 0 switch VAR_RESULT case 0, BattleFrontier_BattlePyramidLobby_EventScript_250B28 case 1, BattleFrontier_BattlePyramidLobby_EventScript_250B66 case 2, BattleFrontier_BattlePyramidLobby_EventScript_250B27 - case 127, BattleFrontier_BattlePyramidLobby_EventScript_250B27 + case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_250B27 return BattleFrontier_BattlePyramidLobby_EventScript_250B27:: @ 8250B27 @@ -318,7 +318,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_250B91:: @ 8250B91 BattleFrontier_BattlePyramidLobby_EventScript_250BA4:: @ 8250BA4 copyvar VAR_0x8004, VAR_RESULT - special sub_813B968 + special GetBattlePyramidHint switch VAR_RESULT case 0, BattleFrontier_BattlePyramidLobby_EventScript_250C8E case 1, BattleFrontier_BattlePyramidLobby_EventScript_250C97 @@ -508,12 +508,12 @@ BattleFrontier_BattlePyramidLobby_EventScript_250E00:: @ 8250E00 return BattleFrontier_BattlePyramidLobby_EventScript_250E09:: @ 8250E09 - multichoice 17, 6, 83, 0 + multichoice 17, 6, MULTI_FRONTIER_ITEM_CHOOSE, 0 switch VAR_RESULT case 0, BattleFrontier_BattlePyramidLobby_EventScript_250E40 case 1, BattleFrontier_BattlePyramidLobby_EventScript_250E50 case 2, BattleFrontier_BattlePyramidLobby_EventScript_250E60 - case 127, BattleFrontier_BattlePyramidLobby_EventScript_250E60 + case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_250E60 end BattleFrontier_BattlePyramidLobby_EventScript_250E40:: @ 8250E40 @@ -562,14 +562,14 @@ BattleFrontier_BattlePyramidLobby_EventScript_250E95:: @ 8250E95 BattleFrontier_BattlePyramidLobby_EventScript_250EA4:: @ 8250EA4 message BattleFrontier_BattlePyramidLobby_Text_2526D9 waitmessage - multichoice 15, 2, 101, 0 + multichoice 15, 2, MULTI_BATTLE_PYRAMID_RULES, 0 switch VAR_RESULT case 0, BattleFrontier_BattlePyramidLobby_EventScript_250EF7 case 1, BattleFrontier_BattlePyramidLobby_EventScript_250F05 case 2, BattleFrontier_BattlePyramidLobby_EventScript_250F13 case 3, BattleFrontier_BattlePyramidLobby_EventScript_250F21 case 4, BattleFrontier_BattlePyramidLobby_EventScript_250F2F - case 127, BattleFrontier_BattlePyramidLobby_EventScript_250F2F + case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_250F2F end BattleFrontier_BattlePyramidLobby_EventScript_250EF7:: @ 8250EF7 diff --git a/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc b/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc index 39bb39f49..211ab0c87 100644 --- a/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc @@ -19,7 +19,7 @@ BattleFrontier_BattlePyramidTop_MapScript2_2550CE: @ 82550CE BattleFrontier_BattlePyramidTop_EventScript_2550D8:: @ 82550D8 setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH compare VAR_TEMP_C, 0 goto_if_ne BattleFrontier_BattlePyramidTop_EventScript_2550F3 setobjectxyperm 2, 0, 0 diff --git a/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc index 6e3f0c8fa..ce171e3c0 100644 --- a/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc @@ -99,30 +99,30 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F:: @ 8241C8F call BattleFrontier_BattleTowerBattleRoom_EventScript_23E8E0 compare VAR_RESULT, 1 goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_241D0A - multichoice 19, 4, 103, 1 + multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_241DDC case 1, BattleFrontier_BattleTowerBattleRoom_EventScript_241D40 case 2, BattleFrontier_BattleTowerBattleRoom_EventScript_241D7C case 3, BattleFrontier_BattleTowerBattleRoom_EventScript_241DAA - case 127, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F BattleFrontier_BattleTowerBattleRoom_EventScript_241D0A:: @ 8241D0A - multichoice 20, 6, 104, 1 + multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_241DDC case 1, BattleFrontier_BattleTowerBattleRoom_EventScript_241D7C case 2, BattleFrontier_BattleTowerBattleRoom_EventScript_241DAA - case 127, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F BattleFrontier_BattleTowerBattleRoom_EventScript_241D40:: @ 8241D40 message BattleFrontier_BattleTowerBattleRoom_Text_2423A3 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_241D72 - case 127, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F BattleFrontier_BattleTowerBattleRoom_EventScript_241D72:: @ 8241D72 call BattleFrontier_BattleTowerBattleRoom_EventScript_23E8B4 @@ -138,11 +138,11 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_241D7C:: @ 8241D7C BattleFrontier_BattleTowerBattleRoom_EventScript_241DAA:: @ 8241DAA message BattleFrontier_BattleTowerBattleRoom_Text_24244C waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_24220E - case 127, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F BattleFrontier_BattleTowerBattleRoom_EventScript_241DDC:: @ 8241DDC closemessage @@ -256,21 +256,21 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_241F22:: @ 8241F22 call BattleFrontier_BattleTowerBattleRoom_EventScript_23E8E0 compare VAR_RESULT, 1 goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_241F79 - multichoice 19, 4, 103, 1 + multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_241FAF case 1, BattleFrontier_BattleTowerBattleRoom_EventScript_241D40 case 2, BattleFrontier_BattleTowerBattleRoom_EventScript_241D7C case 3, BattleFrontier_BattleTowerBattleRoom_EventScript_241DAA - case 127, BattleFrontier_BattleTowerBattleRoom_EventScript_241F22 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom_EventScript_241F22 BattleFrontier_BattleTowerBattleRoom_EventScript_241F79:: @ 8241F79 - multichoice 20, 6, 104, 1 + multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_241FAF case 1, BattleFrontier_BattleTowerBattleRoom_EventScript_241D7C case 2, BattleFrontier_BattleTowerBattleRoom_EventScript_241DAA - case 127, BattleFrontier_BattleTowerBattleRoom_EventScript_241F22 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom_EventScript_241F22 BattleFrontier_BattleTowerBattleRoom_EventScript_241FAF:: @ 8241FAF call BattleFrontier_BattleTowerBattleRoom_EventScript_242170 diff --git a/data/maps/BattleFrontier_BattleTowerBattleRoom2/scripts.inc b/data/maps/BattleFrontier_BattleTowerBattleRoom2/scripts.inc index 8ebb7ed25..07883c7ca 100644 --- a/data/maps/BattleFrontier_BattleTowerBattleRoom2/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerBattleRoom2/scripts.inc @@ -15,7 +15,7 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_248F0F:: @ 8248F0F setvar VAR_0x8004, 14 special sub_8161F74 checkplayergender - compare VAR_RESULT, 1 + compare VAR_RESULT, FEMALE goto_if_eq BattleFrontier_BattleTowerBattleRoom2_EventScript_248F29 setvar VAR_OBJ_GFX_ID_F, EVENT_OBJ_GFX_BRENDAN_NORMAL return @@ -25,7 +25,7 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_248F29:: @ 8248F29 return BattleFrontier_BattleTowerBattleRoom2_EventScript_248F2F:: @ 8248F2F - special sub_813A76C + special SetBattleTowerLinkPlayerGfx return BattleFrontier_BattleTowerBattleRoom2_MapScript2_248F33: @ 8248F33 @@ -173,30 +173,30 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_249143:: @ 8249143 call BattleFrontier_BattleTowerBattleRoom2_EventScript_23E8E0 compare VAR_RESULT, 1 goto_if_eq BattleFrontier_BattleTowerBattleRoom2_EventScript_2491B1 - multichoice 19, 4, 103, 1 + multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_249283 case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_2491E7 case 2, BattleFrontier_BattleTowerBattleRoom2_EventScript_249223 case 3, BattleFrontier_BattleTowerBattleRoom2_EventScript_249251 - case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 BattleFrontier_BattleTowerBattleRoom2_EventScript_2491B1:: @ 82491B1 - multichoice 20, 6, 104, 1 + multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_249283 case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_249223 case 2, BattleFrontier_BattleTowerBattleRoom2_EventScript_249251 - case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 BattleFrontier_BattleTowerBattleRoom2_EventScript_2491E7:: @ 82491E7 message BattleFrontier_BattleTowerBattleRoom2_Text_2423A3 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_249219 - case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 BattleFrontier_BattleTowerBattleRoom2_EventScript_249219:: @ 8249219 call BattleFrontier_BattleTowerBattleRoom2_EventScript_23E8B4 @@ -207,16 +207,16 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_249223:: @ 8249223 switch VAR_RESULT case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_2492DB - case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 BattleFrontier_BattleTowerBattleRoom2_EventScript_249251:: @ 8249251 message BattleFrontier_BattleTowerBattleRoom2_Text_24244C waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_24907E - case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 BattleFrontier_BattleTowerBattleRoom2_EventScript_249283:: @ 8249283 closemessage @@ -350,20 +350,20 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_249412:: @ 8249412 BattleFrontier_BattleTowerBattleRoom2_EventScript_249417:: @ 8249417 goto_if_set FLAG_TEMP_2, BattleFrontier_BattleTowerBattleRoom2_EventScript_249457 - multichoice 19, 6, 105, 1 + multichoice 19, 6, MULTI_GO_ON_RECORD_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_249483 case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494A8 case 2, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD - case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD end BattleFrontier_BattleTowerBattleRoom2_EventScript_249457:: @ 8249457 - multichoice 20, 8, 106, 1 + multichoice 20, 8, MULTI_GO_ON_RETIRE, 1 switch VAR_RESULT case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_249483 case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD - case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD end BattleFrontier_BattleTowerBattleRoom2_EventScript_249483:: @ 8249483 @@ -381,10 +381,10 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_249483:: @ 8249483 BattleFrontier_BattleTowerBattleRoom2_EventScript_2494A8:: @ 82494A8 message BattleFrontier_BattleTowerBattleRoom2_Text_2423A3 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 - case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 call BattleFrontier_BattleTowerBattleRoom2_EventScript_23E8B4 setflag FLAG_TEMP_2 goto BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 @@ -393,7 +393,7 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_2494A8:: @ 82494A8 BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD:: @ 82494DD message BattleFrontier_BattleTowerBattleRoom2_Text_24244C waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattleTowerBattleRoom2_EventScript_2494FA goto BattleFrontier_BattleTowerBattleRoom2_EventScript_249143 diff --git a/data/maps/BattleFrontier_BattleTowerCorridor2/scripts.inc b/data/maps/BattleFrontier_BattleTowerCorridor2/scripts.inc index efab7be70..6e3e05959 100644 --- a/data/maps/BattleFrontier_BattleTowerCorridor2/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerCorridor2/scripts.inc @@ -15,7 +15,7 @@ BattleFrontier_BattleTowerCorridor2_EventScript_248D71:: @ 8248D71 setvar VAR_0x8004, 14 special sub_8161F74 checkplayergender - compare VAR_RESULT, 1 + compare VAR_RESULT, FEMALE goto_if_eq BattleFrontier_BattleTowerCorridor2_EventScript_248D8B setvar VAR_OBJ_GFX_ID_F, EVENT_OBJ_GFX_BRENDAN_NORMAL return @@ -25,7 +25,7 @@ BattleFrontier_BattleTowerCorridor2_EventScript_248D8B:: @ 8248D8B return BattleFrontier_BattleTowerCorridor2_EventScript_248D91:: @ 8248D91 - special sub_813A76C + special SetBattleTowerLinkPlayerGfx return BattleFrontier_BattleTowerCorridor2_MapScript2_248D95: @ 8248D95 diff --git a/data/maps/BattleFrontier_BattleTowerElevator/scripts.inc b/data/maps/BattleFrontier_BattleTowerElevator/scripts.inc index 0d07f5be2..f84ec194d 100644 --- a/data/maps/BattleFrontier_BattleTowerElevator/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerElevator/scripts.inc @@ -12,9 +12,9 @@ BattleFrontier_BattleTowerElevator_EventScript_2419F0:: @ 82419F0 applymovement 1, BattleFrontier_BattleTowerElevator_Movement_241A86 applymovement EVENT_OBJ_ID_PLAYER, BattleFrontier_BattleTowerElevator_Movement_241A8A waitmovement 0 - special sub_813A080 + special BufferBattleTowerElevatorFloors waitse - special ShakeScreenInElevator + special MoveElevator waitstate delay 48 applymovement 1, BattleFrontier_BattleTowerElevator_Movement_241A8E @@ -85,6 +85,6 @@ BattleFrontier_BattleTowerElevator_MapScript2_241A96: @ 8241A96 BattleFrontier_BattleTowerElevator_EventScript_241AA0:: @ 8241AA0 setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc index 6d53a33e1..9b6a406b8 100644 --- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc @@ -35,7 +35,7 @@ BattleFrontier_BattleTowerLobby_MapScript2_23E6C9: @ 823E6C9 BattleFrontier_BattleTowerLobby_EventScript_23E6D3:: @ 823E6D3 setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattleTowerLobby_MapScript2_23E6DD: @ 823E6DD @@ -162,11 +162,11 @@ BattleFrontier_BattleTowerLobby_EventScript_23E84D:: @ 823E84D goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_23E8DF message BattleFrontier_BattleTowerLobby_Text_23FE3C waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleTowerLobby_EventScript_23E8DF case 0, BattleFrontier_BattleTowerLobby_EventScript_23E8B4 - case 127, BattleFrontier_BattleTowerLobby_EventScript_23E8DF + case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23E8DF BattleFrontier_BattleArenaBattleRoom_EventScript_23E8B4:: @ 823E8B4 BattleFrontier_BattleArenaLobby_EventScript_23E8B4:: @ 823E8B4 @@ -244,21 +244,21 @@ BattleFrontier_BattleTowerLobby_EventScript_23E936:: @ 823E936 BattleFrontier_BattleTowerLobby_EventScript_23E948:: @ 823E948 message BattleFrontier_BattleTowerLobby_Text_2405B3 waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, BattleFrontier_BattleTowerLobby_EventScript_23E984 case 1, BattleFrontier_BattleTowerLobby_EventScript_23EA91 case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 - case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 BattleFrontier_BattleTowerLobby_EventScript_23E984:: @ 823E984 setvar VAR_FRONTIER_BATTLE_MODE, 0 message BattleFrontier_BattleTowerLobby_Text_23FD3B waitmessage - multichoice 17, 6, 24, 0 + multichoice 17, 6, MULTI_LEVEL_MODE, 0 switch VAR_RESULT case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 - case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 setvar VAR_0x8004, 15 special CallFrontierUtilFunc compare VAR_0x8004, 1 @@ -324,21 +324,21 @@ BattleFrontier_BattleTowerLobby_EventScript_23EA9F:: @ 823EA9F BattleFrontier_BattleTowerLobby_EventScript_23EAB1:: @ 823EAB1 message BattleFrontier_BattleTowerLobby_Text_24085E waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, BattleFrontier_BattleTowerLobby_EventScript_23EAED case 1, BattleFrontier_BattleTowerLobby_EventScript_23EBFA case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 - case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 BattleFrontier_BattleTowerLobby_EventScript_23EAED:: @ 823EAED setvar VAR_FRONTIER_BATTLE_MODE, 1 message BattleFrontier_BattleTowerLobby_Text_23FD3B waitmessage - multichoice 17, 6, 24, 0 + multichoice 17, 6, MULTI_LEVEL_MODE, 0 switch VAR_RESULT case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 - case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 setvar VAR_0x8004, 15 special CallFrontierUtilFunc compare VAR_0x8004, 1 @@ -405,21 +405,21 @@ BattleFrontier_BattleTowerLobby_EventScript_23EC08:: @ 823EC08 BattleFrontier_BattleTowerLobby_EventScript_23EC1D:: @ 823EC1D message BattleFrontier_BattleTowerLobby_Text_240B06 waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, BattleFrontier_BattleTowerLobby_EventScript_23EC59 case 1, BattleFrontier_BattleTowerLobby_EventScript_23ED66 case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 - case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 BattleFrontier_BattleTowerLobby_EventScript_23EC59:: @ 823EC59 setvar VAR_FRONTIER_BATTLE_MODE, 2 message BattleFrontier_BattleTowerLobby_Text_23FD3B waitmessage - multichoice 17, 6, 24, 0 + multichoice 17, 6, MULTI_LEVEL_MODE, 0 switch VAR_RESULT case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 - case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 setvar VAR_0x8004, 15 special CallFrontierUtilFunc compare VAR_0x8004, 1 @@ -485,21 +485,21 @@ BattleFrontier_BattleTowerLobby_EventScript_23ED74:: @ 823ED74 BattleFrontier_BattleTowerLobby_EventScript_23ED86:: @ 823ED86 message BattleFrontier_BattleTowerLobby_Text_240E95 waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, BattleFrontier_BattleTowerLobby_EventScript_23EDC2 case 1, BattleFrontier_BattleTowerLobby_EventScript_23F3DA case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 - case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 BattleFrontier_BattleTowerLobby_EventScript_23EDC2:: @ 823EDC2 setvar VAR_FRONTIER_BATTLE_MODE, 3 message BattleFrontier_BattleTowerLobby_Text_23FD3B waitmessage - multichoice 17, 6, 24, 0 + multichoice 17, 6, MULTI_LEVEL_MODE, 0 switch VAR_RESULT case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 - case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 setvar VAR_0x8004, 15 special CallFrontierUtilFunc compare VAR_0x8004, 1 @@ -560,13 +560,13 @@ BattleFrontier_BattleTowerLobby_EventScript_23EEE7:: @ 823EEE7 faceplayer message BattleFrontier_BattleTowerLobby_Text_23F8CD waitmessage - multichoice 16, 4, 109, 0 + multichoice 16, 4, MULTI_BATTLE_TOWER_FEELINGS, 0 switch VAR_RESULT case 0, BattleFrontier_BattleTowerLobby_EventScript_23EF32 case 1, BattleFrontier_BattleTowerLobby_EventScript_23EF4C case 2, BattleFrontier_BattleTowerLobby_EventScript_23EF66 case 3, BattleFrontier_BattleTowerLobby_EventScript_23EF80 - case 127, BattleFrontier_BattleTowerLobby_EventScript_23EF80 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23EF80 release end @@ -816,19 +816,19 @@ BattleFrontier_BattleTowerLobby_EventScript_23F1A7:: @ 823F1A7 return BattleFrontier_BattleTowerLobby_EventScript_23F1D4:: @ 823F1D4 - bufferstdstring 0, 19 + bufferstdstring 0, STDSTRING_SINGLE return BattleFrontier_BattleTowerLobby_EventScript_23F1D9:: @ 823F1D9 - bufferstdstring 0, 20 + bufferstdstring 0, STDSTRING_DOUBLE return BattleFrontier_BattleTowerLobby_EventScript_23F1DE:: @ 823F1DE - bufferstdstring 0, 21 + bufferstdstring 0, STDSTRING_MULTI return BattleFrontier_BattleTowerLobby_EventScript_23F1E3:: @ 823F1E3 - bufferstdstring 0, 22 + bufferstdstring 0, STDSTRING_MULTI_LINK return BattleFrontier_BattleTowerLobby_EventScript_23F1E8:: @ 823F1E8 @@ -1022,12 +1022,12 @@ BattleFrontier_BattleTowerLobby_EventScript_23F3E8:: @ 823F3E8 BattleFrontier_BattleTowerLobby_EventScript_23F3F3:: @ 823F3F3 message BattleFrontier_BattleTowerLobby_Text_2792CD waitmessage - multichoice 16, 6, 81, 0 + multichoice 16, 6, MULTI_LINK_LEADER, 0 switch VAR_RESULT case 0, BattleFrontier_BattleTowerLobby_EventScript_23F463 case 1, BattleFrontier_BattleTowerLobby_EventScript_23F430 case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 - case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6 end BattleFrontier_BattleTowerLobby_EventScript_23F430:: @ 823F430 @@ -1080,14 +1080,14 @@ BattleFrontier_BattleTowerLobby_EventScript_23F4BE:: @ 823F4BE BattleFrontier_BattleTowerLobby_EventScript_23F4CD:: @ 823F4CD message BattleFrontier_BattleTowerLobby_Text_241563 waitmessage - multichoice 17, 2, 97, 0 + multichoice 17, 2, MULTI_BATTLE_TOWER_RULES, 0 switch VAR_RESULT case 0, BattleFrontier_BattleTowerLobby_EventScript_23F520 case 1, BattleFrontier_BattleTowerLobby_EventScript_23F52E case 2, BattleFrontier_BattleTowerLobby_EventScript_23F53C case 3, BattleFrontier_BattleTowerLobby_EventScript_23F54A case 4, BattleFrontier_BattleTowerLobby_EventScript_23F558 - case 127, BattleFrontier_BattleTowerLobby_EventScript_23F558 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F558 end BattleFrontier_BattleTowerLobby_EventScript_23F520:: @ 823F520 diff --git a/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc index 0bc74b1bd..29e14473d 100644 --- a/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc @@ -43,7 +43,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_MapScript2_243E14: @ 8243E14 .2byte 0 BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243E1E:: @ 8243E1E - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end BattleFrontier_BattleTowerMultiBattleRoom_MapScript2_243E23: @ 8243E23 @@ -63,7 +63,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243E41:: @ 8243E41 waitmovement 0 applymovement 1, BattleFrontier_BattleTowerMultiBattleRoom_Movement_243E77 waitmovement 0 - moveobjectoffscreen 1 + copyobjectxytoperm 1 applymovement EVENT_OBJ_ID_PLAYER, Common_Movement_WalkInPlaceUp waitmovement 0 msgbox BattleFrontier_BattleTowerMultiBattleRoom_Text_244056, MSGBOX_DEFAULT @@ -86,7 +86,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243E7A:: @ 8243E7A faceplayer message BattleFrontier_BattleTowerMultiBattleRoom_Text_244094 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 compare VAR_RESULT, 0 goto_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243E9D msgbox BattleFrontier_BattleTowerMultiBattleRoom_Text_24410C, MSGBOX_DEFAULT @@ -180,10 +180,10 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243F36:: @ 8243F36 setvar VAR_0x8005, 2 special sub_8161F74 waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243FC3 - case 127, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243FC3 + case MULTI_B_PRESSED, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243FC3 setvar VAR_0x8004, 11 setvar VAR_0x8005, 3 special sub_8161F74 diff --git a/data/maps/BattleFrontier_Lounge1/scripts.inc b/data/maps/BattleFrontier_Lounge1/scripts.inc index 28aab432b..dee3fd431 100644 --- a/data/maps/BattleFrontier_Lounge1/scripts.inc +++ b/data/maps/BattleFrontier_Lounge1/scripts.inc @@ -29,9 +29,9 @@ BattleFrontier_Lounge1_EventScript_25E7B6:: @ 825E7B6 BattleFrontier_Lounge1_EventScript_25E7BF:: @ 825E7BF specialvar VAR_RESULT, ScriptGetPartyMonSpecies - compare VAR_RESULT, 412 + compare VAR_RESULT, SPECIES_EGG goto_if_eq BattleFrontier_Lounge1_EventScript_25E7FF - special sub_8139D98 + special BufferVarsForIVRater compare VAR_0x8005, 90 goto_if_le BattleFrontier_Lounge1_EventScript_25E87F compare VAR_0x8005, 120 diff --git a/data/maps/BattleFrontier_Lounge2/scripts.inc b/data/maps/BattleFrontier_Lounge2/scripts.inc index 435eb4127..02dd09a52 100644 --- a/data/maps/BattleFrontier_Lounge2/scripts.inc +++ b/data/maps/BattleFrontier_Lounge2/scripts.inc @@ -40,7 +40,7 @@ BattleFrontier_Lounge2_EventScript_26066D:: @ 826066D call_if_le BattleFrontier_Lounge2_EventScript_2606F8 compare VAR_FRONTIER_MANIAC_FACILITY, 4 call_if_ge BattleFrontier_Lounge2_EventScript_260701 - special sub_8139F20 + special ShowFrontierManiacMessage waitmessage waitbuttonpress release @@ -55,43 +55,43 @@ BattleFrontier_Lounge2_EventScript_260701:: @ 8260701 return BattleFrontier_Lounge2_EventScript_26070A:: @ 826070A - bufferstdstring 0, 19 + bufferstdstring 0, STDSTRING_SINGLE return BattleFrontier_Lounge2_EventScript_26070F:: @ 826070F - bufferstdstring 0, 20 + bufferstdstring 0, STDSTRING_DOUBLE return BattleFrontier_Lounge2_EventScript_260714:: @ 8260714 - bufferstdstring 0, 21 + bufferstdstring 0, STDSTRING_MULTI return BattleFrontier_Lounge2_EventScript_260719:: @ 8260719 - bufferstdstring 0, 22 + bufferstdstring 0, STDSTRING_MULTI_LINK return BattleFrontier_Lounge2_EventScript_26071E:: @ 826071E - bufferstdstring 0, 24 + bufferstdstring 0, STDSTRING_BATTLE_DOME return BattleFrontier_Lounge2_EventScript_260723:: @ 8260723 - bufferstdstring 0, 25 + bufferstdstring 0, STDSTRING_BATTLE_FACTORY return BattleFrontier_Lounge2_EventScript_260728:: @ 8260728 - bufferstdstring 0, 26 + bufferstdstring 0, STDSTRING_BATTLE_PALACE return BattleFrontier_Lounge2_EventScript_26072D:: @ 826072D - bufferstdstring 0, 27 + bufferstdstring 0, STDSTRING_BATTLE_ARENA return BattleFrontier_Lounge2_EventScript_260732:: @ 8260732 - bufferstdstring 0, 28 + bufferstdstring 0, STDSTRING_BATTLE_PIKE return BattleFrontier_Lounge2_EventScript_260737:: @ 8260737 - bufferstdstring 0, 29 + bufferstdstring 0, STDSTRING_BATTLE_PYRAMID return BattleFrontier_Lounge2_EventScript_26073C:: @ 826073C diff --git a/data/maps/BattleFrontier_Lounge3/scripts.inc b/data/maps/BattleFrontier_Lounge3/scripts.inc index 7977e75b4..3be247099 100644 --- a/data/maps/BattleFrontier_Lounge3/scripts.inc +++ b/data/maps/BattleFrontier_Lounge3/scripts.inc @@ -14,7 +14,7 @@ BattleFrontier_Lounge3_EventScript_261D83:: @ 8261D83 end BattleFrontier_Lounge3_EventScript_261DAF:: @ 8261DAF - special sub_813A820 + special ShowFrontierGamblerLookingMessage waitmessage waitbuttonpress msgbox BattleFrontier_Lounge3_Text_262A60, MSGBOX_YESNO @@ -25,19 +25,19 @@ BattleFrontier_Lounge3_EventScript_261DAF:: @ 8261DAF goto_if_eq BattleFrontier_Lounge3_EventScript_261FA5 message BattleFrontier_Lounge3_Text_262B42 waitmessage - special sub_813A958 + special ShowBattlePointsWindow goto BattleFrontier_Lounge3_EventScript_261DE9 end BattleFrontier_Lounge3_EventScript_261DE9:: @ 8261DE9 - multichoice 20, 4, 87, 0 + multichoice 20, 4, MULTI_FRONTIER_GAMBLER_BET, 0 copyvar VAR_FRONTIER_GAMBLER_AMOUNT_BET, VAR_RESULT switch VAR_RESULT - case 0, BattleFrontier_Lounge3_EventScript_261E30 - case 1, BattleFrontier_Lounge3_EventScript_261E3B - case 2, BattleFrontier_Lounge3_EventScript_261E46 - case 3, BattleFrontier_Lounge3_EventScript_261FAF - case 127, BattleFrontier_Lounge3_EventScript_261FAF + case FRONTIER_GAMBLER_BET_5, BattleFrontier_Lounge3_EventScript_261E30 + case FRONTIER_GAMBLER_BET_10, BattleFrontier_Lounge3_EventScript_261E3B + case FRONTIER_GAMBLER_BET_15, BattleFrontier_Lounge3_EventScript_261E46 + case FRONTIER_GAMBLER_BET_CANCEL, BattleFrontier_Lounge3_EventScript_261FAF + case MULTI_B_PRESSED, BattleFrontier_Lounge3_EventScript_261FAF end BattleFrontier_Lounge3_EventScript_261E30:: @ 8261E30 @@ -56,7 +56,7 @@ BattleFrontier_Lounge3_EventScript_261E46:: @ 8261E46 end BattleFrontier_Lounge3_EventScript_261E51:: @ 8261E51 - specialvar VAR_TEMP_1, sub_813AA04 + specialvar VAR_TEMP_1, GetFrontierBattlePoints compare VAR_TEMP_1, VAR_0x8008 goto_if_ge BattleFrontier_Lounge3_EventScript_261E75 msgbox BattleFrontier_Lounge3_Text_262B6E, MSGBOX_DEFAULT @@ -67,19 +67,19 @@ BattleFrontier_Lounge3_EventScript_261E51:: @ 8261E51 BattleFrontier_Lounge3_EventScript_261E75:: @ 8261E75 copyvar VAR_0x8004, VAR_0x8008 - special sub_813A9A4 - setvar VAR_FRONTIER_GAMBLER_PLACED_BET_F, 1 - special sub_813A8FC + special TakeFrontierBattlePoints + setvar VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_PLACED_BET + special UpdateBattlePointsWindow playse SE_REGI msgbox BattleFrontier_Lounge3_Text_262BE0, MSGBOX_DEFAULT goto BattleFrontier_Lounge3_EventScript_261E96 end BattleFrontier_Lounge3_EventScript_261E96:: @ 8261E96 - special sub_813A854 + special ShowFrontierGamblerGoMessage waitmessage waitbuttonpress - special sub_813A988 + special CloseBattlePointsWindow release end @@ -105,37 +105,37 @@ BattleFrontier_Lounge3_EventScript_261EEB:: @ 8261EEB BattleFrontier_Lounge3_EventScript_261EF9:: @ 8261EF9 msgbox BattleFrontier_Lounge3_Text_26346B, MSGBOX_DEFAULT - compare VAR_FRONTIER_GAMBLER_PLACED_BET_F, 1 + compare VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_PLACED_BET goto_if_ge BattleFrontier_Lounge3_EventScript_261F12 goto BattleFrontier_Lounge3_EventScript_261DAF end BattleFrontier_Lounge3_EventScript_261F12:: @ 8261F12 - compare VAR_FRONTIER_GAMBLER_PLACED_BET_F, 1 + compare VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_PLACED_BET goto_if_eq BattleFrontier_Lounge3_EventScript_261F9E - compare VAR_FRONTIER_GAMBLER_PLACED_BET_F, 2 + compare VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_WON goto_if_eq BattleFrontier_Lounge3_EventScript_261F2E goto BattleFrontier_Lounge3_EventScript_261F71 end BattleFrontier_Lounge3_EventScript_261F2E:: @ 8261F2E msgbox BattleFrontier_Lounge3_Text_263334, MSGBOX_DEFAULT - compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, 0 + compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, FRONTIER_GAMBLER_BET_5 call_if_eq BattleFrontier_Lounge3_EventScript_261F80 - compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, 1 + compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, FRONTIER_GAMBLER_BET_10 call_if_eq BattleFrontier_Lounge3_EventScript_261F8A - compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, 2 + compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, FRONTIER_GAMBLER_BET_15 call_if_eq BattleFrontier_Lounge3_EventScript_261F94 msgbox BattleFrontier_Lounge3_Text_2633D4, 9 - special sub_813A9D0 + special GiveFrontierBattlePoints msgbox BattleFrontier_Lounge3_Text_2633F2, MSGBOX_DEFAULT - setvar VAR_FRONTIER_GAMBLER_PLACED_BET_F, 0 + setvar VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_WAITING release end BattleFrontier_Lounge3_EventScript_261F71:: @ 8261F71 msgbox BattleFrontier_Lounge3_Text_263298, MSGBOX_DEFAULT - setvar VAR_FRONTIER_GAMBLER_PLACED_BET_F, 0 + setvar VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_WAITING release end @@ -155,7 +155,7 @@ BattleFrontier_Lounge3_EventScript_261F94:: @ 8261F94 return BattleFrontier_Lounge3_EventScript_261F9E:: @ 8261F9E - special sub_813A854 + special ShowFrontierGamblerGoMessage waitmessage waitbuttonpress release @@ -167,7 +167,7 @@ BattleFrontier_Lounge3_EventScript_261FA5:: @ 8261FA5 end BattleFrontier_Lounge3_EventScript_261FAF:: @ 8261FAF - special sub_813A988 + special CloseBattlePointsWindow goto BattleFrontier_Lounge3_EventScript_261FA5 end diff --git a/data/maps/BattleFrontier_Lounge5/map.json b/data/maps/BattleFrontier_Lounge5/map.json index 698569d9b..3847e6691 100644 --- a/data/maps/BattleFrontier_Lounge5/map.json +++ b/data/maps/BattleFrontier_Lounge5/map.json @@ -24,7 +24,7 @@ "movement_range_y": 1, "trainer_type": "0", "trainer_sight_or_berry_tree_id": "0", - "script": "BattleFrontier_Lounge5_EventScript_2645C6", + "script": "BattleFrontier_Lounge5_EventScript_NatureGirl", "flag": "0" }, { diff --git a/data/maps/BattleFrontier_Lounge5/scripts.inc b/data/maps/BattleFrontier_Lounge5/scripts.inc index 7a8bd1929..020c8fdfb 100644 --- a/data/maps/BattleFrontier_Lounge5/scripts.inc +++ b/data/maps/BattleFrontier_Lounge5/scripts.inc @@ -1,34 +1,34 @@ BattleFrontier_Lounge5_MapScripts:: @ 82645C5 .byte 0 -BattleFrontier_Lounge5_EventScript_2645C6:: @ 82645C6 +BattleFrontier_Lounge5_EventScript_NatureGirl:: @ 82645C6 lock faceplayer - msgbox BattleFrontier_Lounge5_Text_264632, MSGBOX_YESNO + msgbox BattleFrontier_Lounge5_Text_NatureGirlGreeting, MSGBOX_YESNO compare VAR_RESULT, 0 - goto_if_eq BattleFrontier_Lounge5_EventScript_26460D + goto_if_eq BattleFrontier_Lounge5_EventScript_NatureGirlNoneShown special sub_81B94B0 waitstate lock faceplayer compare VAR_0x8004, 255 - goto_if_eq BattleFrontier_Lounge5_EventScript_26460D + goto_if_eq BattleFrontier_Lounge5_EventScript_NatureGirlNoneShown specialvar VAR_RESULT, ScriptGetPartyMonSpecies - compare VAR_RESULT, 412 - goto_if_eq BattleFrontier_Lounge5_EventScript_264603 - special sub_813A7B8 + compare VAR_RESULT, SPECIES_EGG + goto_if_eq BattleFrontier_Lounge5_EventScript_NatureGirlEgg + special ShowNatureGirlMessage waitmessage waitbuttonpress release end -BattleFrontier_Lounge5_EventScript_264603:: @ 8264603 - msgbox BattleFrontier_Lounge5_Text_264EEE, MSGBOX_DEFAULT +BattleFrontier_Lounge5_EventScript_NatureGirlEgg:: @ 8264603 + msgbox BattleFrontier_Lounge5_Text_NatureGirlEgg, MSGBOX_DEFAULT release end -BattleFrontier_Lounge5_EventScript_26460D:: @ 826460D - msgbox BattleFrontier_Lounge5_Text_26467F, MSGBOX_DEFAULT +BattleFrontier_Lounge5_EventScript_NatureGirlNoneShown:: @ 826460D + msgbox BattleFrontier_Lounge5_Text_NatureGirlNoneShown, MSGBOX_DEFAULT release end @@ -44,149 +44,149 @@ BattleFrontier_Lounge5_EventScript_264629:: @ 8264629 msgbox BattleFrontier_Lounge5_Text_264FAB, MSGBOX_NPC end -BattleFrontier_Lounge5_Text_264632:: @ 8264632 +BattleFrontier_Lounge5_Text_NatureGirlGreeting:: @ 8264632 .string "Ehehe!\n" .string "I can tell what POKéMON are thinking!\p" .string "Please!\n" .string "Can I see your POKéMON?$" -BattleFrontier_Lounge5_Text_26467F:: @ 826467F +BattleFrontier_Lounge5_Text_NatureGirlNoneShown:: @ 826467F .string "Boo!\n" .string "Cheapie!$" -BattleFrontier_Lounge5_Text_26468D:: @ 826468D +BattleFrontier_Lounge5_Text_NatureGirlHardy:: @ 826468D .string "Hmhm…\p" .string "This one says it likes to battle!\n" .string "It will battle even if it has a lot\l" .string "of ouchies!$" -BattleFrontier_Lounge5_Text_2646E5:: @ 82646E5 +BattleFrontier_Lounge5_Text_NatureGirlLonely:: @ 82646E5 .string "Hmhm…\p" .string "This one says it likes to be sneaky!\n" .string "But if it gets enough ouchies,\l" .string "it will hit back!$" -BattleFrontier_Lounge5_Text_264741:: @ 8264741 +BattleFrontier_Lounge5_Text_NatureGirlBrave:: @ 8264741 .string "Hmhm…\p" .string "This one says it likes to battle!\n" .string "But if it gets enough ouchies,\l" .string "it will worry about itself!$" -BattleFrontier_Lounge5_Text_2647A4:: @ 82647A4 +BattleFrontier_Lounge5_Text_NatureGirlAdamant:: @ 82647A4 .string "Hmhm…\p" .string "This one says it likes to battle!\n" .string "It will battle even if it has a lot\l" .string "of ouchies!$" -BattleFrontier_Lounge5_Text_2647FC:: @ 82647FC +BattleFrontier_Lounge5_Text_NatureGirlNaughty:: @ 82647FC .string "Hmhm…\p" .string "This one says it looks after itself!\n" .string "But if it gets enough ouchies,\l" .string "it will hit back!$" -BattleFrontier_Lounge5_Text_264858:: @ 8264858 +BattleFrontier_Lounge5_Text_NatureGirlBold:: @ 8264858 .string "Hmhm…\p" .string "This one says it likes to be sneaky!\n" .string "But if it gets enough ouchies,\l" .string "it will worry about itself!$" -BattleFrontier_Lounge5_Text_2648BE:: @ 82648BE +BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky:: @ 82648BE .string "Hmhm…\p" .string "This one says it likes to battle!\n" .string "It will battle even if it has a lot\l" .string "of ouchies!$" -BattleFrontier_Lounge5_Text_264916:: @ 8264916 +BattleFrontier_Lounge5_Text_NatureGirlRelaxed:: @ 8264916 .string "Hmhm…\p" .string "This one says it likes to be sneaky!\n" .string "But if it gets enough ouchies,\l" .string "it will hit back!$" -BattleFrontier_Lounge5_Text_264972:: @ 8264972 +BattleFrontier_Lounge5_Text_NatureGirlImpish:: @ 8264972 .string "Hmhm…\p" .string "This one says it likes to battle!\n" .string "But if it gets enough ouchies,\l" .string "it will worry about itself!$" -BattleFrontier_Lounge5_Text_2649D5:: @ 82649D5 +BattleFrontier_Lounge5_Text_NatureGirlLax:: @ 82649D5 .string "Hmhm…\p" .string "This one says it likes to be sneaky!\n" .string "It says it likes to be sneaky even\l" .string "if it has a lot of ouchies!$" -BattleFrontier_Lounge5_Text_264A3F:: @ 8264A3F +BattleFrontier_Lounge5_Text_NatureGirlTimid:: @ 8264A3F .string "Hmhm…\p" .string "This one says it likes to battle!\n" .string "But if it gets enough ouchies,\l" .string "it will turn sneaky!$" -BattleFrontier_Lounge5_Text_264A9B:: @ 8264A9B +BattleFrontier_Lounge5_Text_NatureGirlHasty:: @ 8264A9B .string "Hmhm…\p" .string "This one says it likes to battle!\n" .string "It will battle even if it has a lot\l" .string "of ouchies!$" -BattleFrontier_Lounge5_Text_264AF3:: @ 8264AF3 +BattleFrontier_Lounge5_Text_NatureGirlSerious:: @ 8264AF3 .string "Hmhm…\p" .string "This one says it likes to be sneaky!\n" .string "It says it likes to be sneaky even\l" .string "if it has a lot of ouchies!$" -BattleFrontier_Lounge5_Text_264B5D:: @ 8264B5D +BattleFrontier_Lounge5_Text_NatureGirlJolly:: @ 8264B5D .string "Hmhm…\p" .string "This one says it likes to be sneaky!\n" .string "But if it gets enough ouchies,\l" .string "it will worry about itself!$" -BattleFrontier_Lounge5_Text_264BC3:: @ 8264BC3 +BattleFrontier_Lounge5_Text_NatureGirlModest:: @ 8264BC3 .string "Hmhm…\p" .string "This one says it looks after itself!\n" .string "It says it worries about itself whether\l" .string "or not it has a lot of ouchies!$" -BattleFrontier_Lounge5_Text_264C36:: @ 8264C36 +BattleFrontier_Lounge5_Text_NatureGirlMild:: @ 8264C36 .string "Hmhm…\p" .string "This one says it looks after itself!\n" .string "But if it gets enough ouchies,\l" .string "it will turn sneaky!$" -BattleFrontier_Lounge5_Text_264C95:: @ 8264C95 +BattleFrontier_Lounge5_Text_NatureGirlBashful:: @ 8264C95 .string "Hmhm…\p" .string "This one says it looks after itself!\n" .string "It says it worries about itself even\l" .string "if it has a lot of ouchies!$" -BattleFrontier_Lounge5_Text_264D01:: @ 8264D01 +BattleFrontier_Lounge5_Text_NatureGirlRash:: @ 8264D01 .string "Hmhm…\p" .string "This one says it likes to be sneaky!\n" .string "It says it likes to be sneaky even\l" .string "if it has a lot of ouchies!$" -BattleFrontier_Lounge5_Text_264D6B:: @ 8264D6B +BattleFrontier_Lounge5_Text_NatureGirlCalm:: @ 8264D6B .string "Hmhm…\p" .string "This one says it looks after itself!\n" .string "It says it worries about itself even\l" .string "if it has a lot of ouchies!$" -BattleFrontier_Lounge5_Text_264DD7:: @ 8264DD7 +BattleFrontier_Lounge5_Text_NatureGirlGentle:: @ 8264DD7 .string "Hmhm…\p" .string "This one says it looks after itself!\n" .string "But if it gets enough ouchies,\l" .string "it will hit back!$" -BattleFrontier_Lounge5_Text_264E33:: @ 8264E33 +BattleFrontier_Lounge5_Text_NatureGirlSassy:: @ 8264E33 .string "Hmhm…\p" .string "This one says it likes to battle!\n" .string "But if it gets enough ouchies,\l" .string "it will turn sneaky!$" -BattleFrontier_Lounge5_Text_264E8F:: @ 8264E8F +BattleFrontier_Lounge5_Text_NatureGirlCareful:: @ 8264E8F .string "Hmhm…\p" .string "This one says it looks after itself!\n" .string "But if it gets enough ouchies,\l" .string "it will turn sneaky!$" -BattleFrontier_Lounge5_Text_264EEE:: @ 8264EEE +BattleFrontier_Lounge5_Text_NatureGirlEgg:: @ 8264EEE .string "That's silly! An EGG is asleep!\n" .string "I can't talk to it!$" diff --git a/data/maps/BattleFrontier_Lounge7/scripts.inc b/data/maps/BattleFrontier_Lounge7/scripts.inc index 1339b54c9..82b04023f 100644 --- a/data/maps/BattleFrontier_Lounge7/scripts.inc +++ b/data/maps/BattleFrontier_Lounge7/scripts.inc @@ -19,11 +19,11 @@ BattleFrontier_Lounge7_EventScript_265276:: @ 8265276 BattleFrontier_Lounge7_EventScript_265284:: @ 8265284 message BattleFrontier_Lounge7_Text_2658EF waitmessage - special sub_813A958 + special ShowBattlePointsWindow setvar VAR_TEMP_E, 0 - setvar VAR_0x8004, 9 + setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_1 setvar VAR_0x8006, 0 - special sub_813A128 + special ShowScrollableMultichoice waitstate copyvar VAR_TEMP_D, VAR_RESULT switch VAR_RESULT @@ -38,16 +38,16 @@ BattleFrontier_Lounge7_EventScript_265284:: @ 8265284 case 8, BattleFrontier_Lounge7_EventScript_26542F case 9, BattleFrontier_Lounge7_EventScript_26543A case 10, BattleFrontier_Lounge7_EventScript_265635 - case 127, BattleFrontier_Lounge7_EventScript_265635 + case MULTI_B_PRESSED, BattleFrontier_Lounge7_EventScript_265635 end BattleFrontier_Lounge7_EventScript_26532F:: @ 826532F message BattleFrontier_Lounge7_Text_2658EF waitmessage setvar VAR_TEMP_E, 0 - setvar VAR_0x8004, 9 + setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_1 setvar VAR_0x8006, 1 - special sub_813A128 + special ShowScrollableMultichoice waitstate copyvar VAR_TEMP_D, VAR_RESULT switch VAR_RESULT @@ -62,7 +62,7 @@ BattleFrontier_Lounge7_EventScript_26532F:: @ 826532F case 8, BattleFrontier_Lounge7_EventScript_26542F case 9, BattleFrontier_Lounge7_EventScript_26543A case 10, BattleFrontier_Lounge7_EventScript_265635 - case 127, BattleFrontier_Lounge7_EventScript_265635 + case MULTI_B_PRESSED, BattleFrontier_Lounge7_EventScript_265635 end BattleFrontier_Lounge7_EventScript_2653D7:: @ 82653D7 @@ -133,11 +133,11 @@ BattleFrontier_Lounge7_EventScript_265466:: @ 8265466 BattleFrontier_Lounge7_EventScript_265474:: @ 8265474 message BattleFrontier_Lounge7_Text_2658EF waitmessage - special sub_813A958 + special ShowBattlePointsWindow setvar VAR_TEMP_E, 1 - setvar VAR_0x8004, 10 + setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_2 setvar VAR_0x8006, 0 - special sub_813A128 + special ShowScrollableMultichoice waitstate copyvar VAR_TEMP_D, VAR_RESULT switch VAR_RESULT @@ -152,16 +152,16 @@ BattleFrontier_Lounge7_EventScript_265474:: @ 8265474 case 8, BattleFrontier_Lounge7_EventScript_26561F case 9, BattleFrontier_Lounge7_EventScript_26562A case 10, BattleFrontier_Lounge7_EventScript_265635 - case 127, BattleFrontier_Lounge7_EventScript_265635 + case MULTI_B_PRESSED, BattleFrontier_Lounge7_EventScript_265635 end BattleFrontier_Lounge7_EventScript_26551F:: @ 826551F message BattleFrontier_Lounge7_Text_2658EF waitmessage setvar VAR_TEMP_E, 1 - setvar VAR_0x8004, 10 + setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_2 setvar VAR_0x8006, 1 - special sub_813A128 + special ShowScrollableMultichoice waitstate copyvar VAR_TEMP_D, VAR_RESULT switch VAR_RESULT @@ -176,7 +176,7 @@ BattleFrontier_Lounge7_EventScript_26551F:: @ 826551F case 8, BattleFrontier_Lounge7_EventScript_26561F case 9, BattleFrontier_Lounge7_EventScript_26562A case 10, BattleFrontier_Lounge7_EventScript_265635 - case 127, BattleFrontier_Lounge7_EventScript_265635 + case MULTI_B_PRESSED, BattleFrontier_Lounge7_EventScript_265635 end BattleFrontier_Lounge7_EventScript_2655C7:: @ 82655C7 @@ -230,8 +230,8 @@ BattleFrontier_Lounge7_EventScript_26562A:: @ 826562A end BattleFrontier_Lounge7_EventScript_265635:: @ 8265635 - special sub_813ADB8 - special sub_813A988 + special CloseBattleFrontierTutorWindow + special CloseBattlePointsWindow msgbox BattleFrontier_Lounge7_Text_265A0E, MSGBOX_DEFAULT release end @@ -241,16 +241,18 @@ BattleFrontier_Lounge7_EventScript_265645:: @ 8265645 release end +@ VAR_0x8004 here is used to determine which move name to buffer +@ VAR_0x8005 here is used to determine which move tutor was spoken to BattleFrontier_Lounge7_EventScript_26564F:: @ 826564F copyvar VAR_0x8004, VAR_TEMP_D copyvar VAR_0x8005, VAR_TEMP_E - special sub_813AC7C + special BufferBattleFrontierTutorMoveName buffernumberstring 1, VAR_0x8008 copyvar VAR_0x8004, VAR_TEMP_C msgbox BattleFrontier_Lounge7_Text_265921, MSGBOX_YESNO compare VAR_RESULT, 0 goto_if_eq BattleFrontier_Lounge7_EventScript_2656CA - specialvar VAR_TEMP_1, sub_813AA04 + specialvar VAR_TEMP_1, GetFrontierBattlePoints compare VAR_TEMP_1, VAR_0x8008 goto_if_ge BattleFrontier_Lounge7_EventScript_265696 msgbox BattleFrontier_Lounge7_Text_265997, MSGBOX_DEFAULT @@ -259,17 +261,17 @@ BattleFrontier_Lounge7_EventScript_26564F:: @ 826564F BattleFrontier_Lounge7_EventScript_265696:: @ 8265696 msgbox BattleFrontier_Lounge7_Text_26595A, MSGBOX_DEFAULT - special sub_813AEB4 + special GetBattleFrontierTutorMoveIndex fadescreen 1 - special sub_813A988 - special sub_813ADB8 + special CloseBattlePointsWindow + special CloseBattleFrontierTutorWindow special sub_81B892C waitstate compare VAR_RESULT, 0 goto_if_eq BattleFrontier_Lounge7_EventScript_265645 msgbox BattleFrontier_Lounge7_Text_2659C7, MSGBOX_DEFAULT copyvar VAR_0x8004, VAR_0x8008 - special sub_813A9A4 + special TakeFrontierBattlePoints release end diff --git a/data/maps/BattleFrontier_OutsideWest/scripts.inc b/data/maps/BattleFrontier_OutsideWest/scripts.inc index 2d2bdb1c0..fb96172d2 100644 --- a/data/maps/BattleFrontier_OutsideWest/scripts.inc +++ b/data/maps/BattleFrontier_OutsideWest/scripts.inc @@ -20,12 +20,12 @@ BattleFrontier_OutsideWest_EventScript_23D3F0:: @ 823D3F0 end BattleFrontier_OutsideWest_EventScript_23D416:: @ 823D416 - multichoicedefault 18, 6, 53, 2, 0 + multichoicedefault 18, 6, MULTI_SSTIDAL_BATTLE_FRONTIER, 2, 0 switch VAR_RESULT case 0, BattleFrontier_OutsideWest_EventScript_23D458 case 1, BattleFrontier_OutsideWest_EventScript_23D483 case 2, BattleFrontier_OutsideWest_EventScript_23D4D8 - case 127, BattleFrontier_OutsideWest_EventScript_23D4D8 + case MULTI_B_PRESSED, BattleFrontier_OutsideWest_EventScript_23D4D8 end BattleFrontier_OutsideWest_EventScript_23D44E:: @ 823D44E diff --git a/data/maps/BattleFrontier_ReceptionGate/scripts.inc b/data/maps/BattleFrontier_ReceptionGate/scripts.inc index 5f0952cb0..3eac4655b 100644 --- a/data/maps/BattleFrontier_ReceptionGate/scripts.inc +++ b/data/maps/BattleFrontier_ReceptionGate/scripts.inc @@ -136,8 +136,8 @@ BattleFrontier_ReceptionGate_EventScript_266310:: @ 8266310 BattleFrontier_ReceptionGate_EventScript_266320:: @ 8266320 message BattleFrontier_ReceptionGate_Text_26689D waitmessage - setvar VAR_0x8004, 8 - special sub_813A128 + setvar VAR_0x8004, SCROLL_MULTI_BF_RECEPTIONIST + special ShowScrollableMultichoice waitstate switch VAR_RESULT case 0, BattleFrontier_ReceptionGate_EventScript_2663AE @@ -150,7 +150,7 @@ BattleFrontier_ReceptionGate_EventScript_266320:: @ 8266320 case 7, BattleFrontier_ReceptionGate_EventScript_266410 case 8, BattleFrontier_ReceptionGate_EventScript_26641E case 9, BattleFrontier_ReceptionGate_EventScript_26642C - case 127, BattleFrontier_ReceptionGate_EventScript_26642C + case MULTI_B_PRESSED, BattleFrontier_ReceptionGate_EventScript_26642C end BattleFrontier_ReceptionGate_EventScript_2663AE:: @ 82663AE @@ -213,7 +213,7 @@ BattleFrontier_ReceptionGate_EventScript_266436:: @ 8266436 BattleFrontier_ReceptionGate_EventScript_266446:: @ 8266446 message BattleFrontier_ReceptionGate_Text_266EE0 waitmessage - multichoice 15, 0, 95, 0 + multichoice 15, 0, MULTI_FRONTIER_RULES, 0 switch VAR_RESULT case 0, BattleFrontier_ReceptionGate_EventScript_2664A4 case 1, BattleFrontier_ReceptionGate_EventScript_2664B2 @@ -221,7 +221,7 @@ BattleFrontier_ReceptionGate_EventScript_266446:: @ 8266446 case 3, BattleFrontier_ReceptionGate_EventScript_2664CE case 4, BattleFrontier_ReceptionGate_EventScript_2664DC case 5, BattleFrontier_ReceptionGate_EventScript_2664EA - case 127, BattleFrontier_ReceptionGate_EventScript_2664EA + case MULTI_B_PRESSED, BattleFrontier_ReceptionGate_EventScript_2664EA end BattleFrontier_ReceptionGate_EventScript_2664A4:: @ 82664A4 @@ -264,13 +264,13 @@ BattleFrontier_ReceptionGate_EventScript_2664F4:: @ 82664F4 BattleFrontier_ReceptionGate_EventScript_266504:: @ 8266504 message BattleFrontier_ReceptionGate_Text_26737C waitmessage - multichoice 16, 4, 11, 0 + multichoice 16, 4, MULTI_FRONTIER_PASS_INFO, 0 switch VAR_RESULT case 0, BattleFrontier_ReceptionGate_EventScript_26654C case 1, BattleFrontier_ReceptionGate_EventScript_26655A case 2, BattleFrontier_ReceptionGate_EventScript_266568 case 3, BattleFrontier_ReceptionGate_EventScript_266576 - case 127, BattleFrontier_ReceptionGate_EventScript_266576 + case MULTI_B_PRESSED, BattleFrontier_ReceptionGate_EventScript_266576 end BattleFrontier_ReceptionGate_EventScript_26654C:: @ 826654C diff --git a/data/maps/BattleFrontier_ScottsHouse/scripts.inc b/data/maps/BattleFrontier_ScottsHouse/scripts.inc index 52863d474..b59adefcc 100644 --- a/data/maps/BattleFrontier_ScottsHouse/scripts.inc +++ b/data/maps/BattleFrontier_ScottsHouse/scripts.inc @@ -112,7 +112,7 @@ BattleFrontier_ScottsHouse_EventScript_26381B:: @ 826381B BattleFrontier_ScottsHouse_EventScript_26387A:: @ 826387A msgbox BattleFrontier_ScottsHouse_Text_264412, MSGBOX_DEFAULT - givedecoration_std 42 + givedecoration_std DECOR_SILVER_SHIELD compare VAR_RESULT, 0 goto_if_eq BattleFrontier_ScottsHouse_EventScript_2638A0 setflag FLAG_RECEIVED_SILVER_SHIELD @@ -155,7 +155,7 @@ BattleFrontier_ScottsHouse_EventScript_2638B4:: @ 82638B4 BattleFrontier_ScottsHouse_EventScript_263913:: @ 8263913 msgbox BattleFrontier_ScottsHouse_Text_26449F, MSGBOX_DEFAULT - givedecoration_std 43 + givedecoration_std DECOR_GOLD_SHIELD compare VAR_RESULT, 0 goto_if_eq BattleFrontier_ScottsHouse_EventScript_2638A0 setflag FLAG_RECEIVED_GOLD_SHIELD @@ -218,7 +218,7 @@ BattleFrontier_ScottsHouse_EventScript_2639E9:: @ 82639E9 end BattleFrontier_ScottsHouse_EventScript_2639F8:: @ 82639F8 - special sub_813A9D0 + special GiveFrontierBattlePoints msgbox BattleFrontier_ScottsHouse_Text_263CB0, 9 msgbox BattleFrontier_ScottsHouse_Text_263CD0, MSGBOX_DEFAULT setflag FLAG_SCOTT_GIVES_BATTLE_POINTS diff --git a/data/maps/BirthIsland_Harbor/scripts.inc b/data/maps/BirthIsland_Harbor/scripts.inc index 5f850ed7b..9ef54cdc8 100644 --- a/data/maps/BirthIsland_Harbor/scripts.inc +++ b/data/maps/BirthIsland_Harbor/scripts.inc @@ -4,10 +4,10 @@ BirthIsland_Harbor_MapScripts:: @ 826805C BirthIsland_Harbor_EventScript_26805D:: @ 826805D lock faceplayer - msgbox BirthIsland_Harbor_Text_2C6B90, MSGBOX_YESNO + msgbox BirthIsland_Harbor_Text_SailorReturn, MSGBOX_YESNO compare VAR_RESULT, 0 goto_if_eq BirthIsland_Harbor_EventScript_2680A2 - msgbox BirthIsland_Harbor_Text_2A6A5D, MSGBOX_DEFAULT + msgbox EventTicket_Text_SailHome, MSGBOX_DEFAULT closemessage applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceDown waitmovement 0 @@ -21,7 +21,7 @@ BirthIsland_Harbor_EventScript_26805D:: @ 826805D end BirthIsland_Harbor_EventScript_2680A2:: @ 82680A2 - msgbox BirthIsland_Harbor_Text_2A6A82, MSGBOX_DEFAULT + msgbox EventTicket_Text_AsYouLike, MSGBOX_DEFAULT release end diff --git a/data/maps/CaveOfOrigin_B1F/scripts.inc b/data/maps/CaveOfOrigin_B1F/scripts.inc index 5148d2942..3b130e756 100644 --- a/data/maps/CaveOfOrigin_B1F/scripts.inc +++ b/data/maps/CaveOfOrigin_B1F/scripts.inc @@ -22,7 +22,7 @@ CaveOfOrigin_B1F_EventScript_2357A9:: @ 82357A9 goto CaveOfOrigin_B1F_EventScript_2357F0 CaveOfOrigin_B1F_EventScript_2357F0:: @ 82357F0 - multichoice 0, 0, 110, 0 + multichoice 0, 0, MULTI_WHERES_RAYQUAZA, 0 switch VAR_RESULT case 0, CaveOfOrigin_B1F_EventScript_23582C case 1, CaveOfOrigin_B1F_EventScript_235837 diff --git a/data/maps/DewfordTown/scripts.inc b/data/maps/DewfordTown/scripts.inc index f56411104..1711405e1 100644 --- a/data/maps/DewfordTown/scripts.inc +++ b/data/maps/DewfordTown/scripts.inc @@ -12,12 +12,12 @@ DewfordTown_EventScript_1E9511:: @ 81E9511 goto_if_unset FLAG_DELIVERED_STEVEN_LETTER, DewfordTown_EventScript_1E9585 message DewfordTown_Text_1E9C8A waitmessage - multichoicedefault 21, 6, 0, 2, 0 + multichoicedefault 21, 6, MULTI_BRINEY_ON_DEWFORD, 2, 0 switch VAR_RESULT case 0, DewfordTown_EventScript_1E955A case 1, DewfordTown_EventScript_1E956A case 2, DewfordTown_EventScript_1E957A - case 127, DewfordTown_EventScript_1E957A + case MULTI_B_PRESSED, DewfordTown_EventScript_1E957A end DewfordTown_EventScript_1E955A:: @ 81E955A @@ -97,7 +97,7 @@ DewfordTown_EventScript_1E9620:: @ 81E9620 DewfordTown_EventScript_1E962A:: @ 81E962A message DewfordTown_Text_1E9FB8 waitmessage - multichoice 20, 8, 50, 1 + multichoice 20, 8, MULTI_HOWS_FISHING, 1 compare VAR_RESULT, 0 goto_if_eq DewfordTown_EventScript_1E964C compare VAR_RESULT, 1 @@ -180,7 +180,7 @@ DewfordTown_EventScript_1E96E7:: @ 81E96E7 copyvar VAR_BRINEY_LOCATION, VAR_0x8008 resetobjectpriority EVENT_OBJ_ID_PLAYER, MAP_DEWFORD_TOWN resetobjectpriority 2, MAP_ROUTE109 - moveobjectoffscreen 2 + copyobjectxytoperm 2 release end diff --git a/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc b/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc index 88d02b29b..b26e0e030 100644 --- a/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc +++ b/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc @@ -13,7 +13,7 @@ EverGrandeCity_ChampionsRoom_MapScript2_228A05: @ 8228A05 .2byte 0 EverGrandeCity_ChampionsRoom_EventScript_228A0F:: @ 8228A0F - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end EverGrandeCity_ChampionsRoom_MapScript2_228A14: @ 8228A14 diff --git a/data/maps/EverGrandeCity_DrakesRoom/scripts.inc b/data/maps/EverGrandeCity_DrakesRoom/scripts.inc index ed8d82be2..bfc1b6027 100644 --- a/data/maps/EverGrandeCity_DrakesRoom/scripts.inc +++ b/data/maps/EverGrandeCity_DrakesRoom/scripts.inc @@ -9,7 +9,7 @@ EverGrandeCity_DrakesRoom_MapScript2_2286AC: @ 82286AC .2byte 0 EverGrandeCity_DrakesRoom_EventScript_2286B6:: @ 82286B6 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end EverGrandeCity_DrakesRoom_MapScript2_2286BB: @ 82286BB diff --git a/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc b/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc index 24960d95e..00e829930 100644 --- a/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc +++ b/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc @@ -9,7 +9,7 @@ EverGrandeCity_GlaciasRoom_MapScript2_228422: @ 8228422 .2byte 0 EverGrandeCity_GlaciasRoom_EventScript_22842C:: @ 822842C - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end EverGrandeCity_GlaciasRoom_MapScript2_228431: @ 8228431 diff --git a/data/maps/EverGrandeCity_Hall1/scripts.inc b/data/maps/EverGrandeCity_Hall1/scripts.inc index d9a7adfe3..c2ffaca47 100644 --- a/data/maps/EverGrandeCity_Hall1/scripts.inc +++ b/data/maps/EverGrandeCity_Hall1/scripts.inc @@ -7,6 +7,6 @@ EverGrandeCity_Hall1_MapScript2_22956F: @ 822956F .2byte 0 EverGrandeCity_Hall1_EventScript_229579:: @ 8229579 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end diff --git a/data/maps/EverGrandeCity_Hall2/scripts.inc b/data/maps/EverGrandeCity_Hall2/scripts.inc index b831d0fd5..be19992ef 100644 --- a/data/maps/EverGrandeCity_Hall2/scripts.inc +++ b/data/maps/EverGrandeCity_Hall2/scripts.inc @@ -7,6 +7,6 @@ EverGrandeCity_Hall2_MapScript2_229584: @ 8229584 .2byte 0 EverGrandeCity_Hall2_EventScript_22958E:: @ 822958E - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end diff --git a/data/maps/EverGrandeCity_Hall3/scripts.inc b/data/maps/EverGrandeCity_Hall3/scripts.inc index d75cf95b6..eaf2f4e5a 100644 --- a/data/maps/EverGrandeCity_Hall3/scripts.inc +++ b/data/maps/EverGrandeCity_Hall3/scripts.inc @@ -7,6 +7,6 @@ EverGrandeCity_Hall3_MapScript2_229599: @ 8229599 .2byte 0 EverGrandeCity_Hall3_EventScript_2295A3:: @ 82295A3 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end diff --git a/data/maps/EverGrandeCity_Hall4/scripts.inc b/data/maps/EverGrandeCity_Hall4/scripts.inc index faf20646a..e36890874 100644 --- a/data/maps/EverGrandeCity_Hall4/scripts.inc +++ b/data/maps/EverGrandeCity_Hall4/scripts.inc @@ -7,6 +7,6 @@ EverGrandeCity_Hall4_MapScript2_2295AE: @ 82295AE .2byte 0 EverGrandeCity_Hall4_EventScript_2295B8:: @ 82295B8 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end diff --git a/data/maps/EverGrandeCity_Hall5/scripts.inc b/data/maps/EverGrandeCity_Hall5/scripts.inc index e586958c2..6079bbd42 100644 --- a/data/maps/EverGrandeCity_Hall5/scripts.inc +++ b/data/maps/EverGrandeCity_Hall5/scripts.inc @@ -7,6 +7,6 @@ EverGrandeCity_Hall5_MapScript2_2295C3: @ 82295C3 .2byte 0 EverGrandeCity_Hall5_EventScript_2295CD:: @ 82295CD - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end diff --git a/data/maps/EverGrandeCity_HallOfFame/scripts.inc b/data/maps/EverGrandeCity_HallOfFame/scripts.inc index 343614d85..ebfcb3311 100644 --- a/data/maps/EverGrandeCity_HallOfFame/scripts.inc +++ b/data/maps/EverGrandeCity_HallOfFame/scripts.inc @@ -8,7 +8,7 @@ EverGrandeCity_HallOfFame_MapScript2_229837: @ 8229837 .2byte 0 EverGrandeCity_HallOfFame_EventScript_229841:: @ 8229841 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end EverGrandeCity_HallOfFame_MapScript2_229846: @ 8229846 diff --git a/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc b/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc index 971eff7ca..b5a3a9999 100644 --- a/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc +++ b/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc @@ -9,7 +9,7 @@ EverGrandeCity_PhoebesRoom_MapScript2_228184: @ 8228184 .2byte 0 EverGrandeCity_PhoebesRoom_EventScript_22818E:: @ 822818E - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end EverGrandeCity_PhoebesRoom_MapScript2_228193: @ 8228193 diff --git a/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc b/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc index 959153d8a..f688918ea 100644 --- a/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc +++ b/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc @@ -67,8 +67,8 @@ EverGrandeCity_PokemonLeague_1F_EventScript_229636:: @ 8229636 waitmessage waitfanfare closemessage - moveobjectoffscreen 3 - moveobjectoffscreen 4 + copyobjectxytoperm 3 + copyobjectxytoperm 4 setflag FLAG_ENTERED_ELITE_FOUR releaseall end diff --git a/data/maps/EverGrandeCity_SidneysRoom/scripts.inc b/data/maps/EverGrandeCity_SidneysRoom/scripts.inc index 380b3aaf7..432747fda 100644 --- a/data/maps/EverGrandeCity_SidneysRoom/scripts.inc +++ b/data/maps/EverGrandeCity_SidneysRoom/scripts.inc @@ -30,7 +30,7 @@ EverGrandeCity_SidneysRoom_MapScript2_227F3E: @ 8227F3E .2byte 0 EverGrandeCity_SidneysRoom_EventScript_227F48:: @ 8227F48 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end EverGrandeCity_SidneysRoom_MapScript2_227F4D: @ 8227F4D diff --git a/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc b/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc index 7501f6e8d..b63846abd 100644 --- a/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc +++ b/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc @@ -120,7 +120,7 @@ FallarborTown_BattleTentBattleRoom_EventScript_200A2A:: @ 8200A2A call_if_eq FallarborTown_BattleTentBattleRoom_EventScript_200B43 compare VAR_RESULT, 2 call_if_eq FallarborTown_BattleTentBattleRoom_EventScript_200B4A - multichoice 20, 6, 104, 1 + multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1 switch VAR_RESULT case 0, FallarborTown_BattleTentBattleRoom_EventScript_200AD8 case 1, FallarborTown_BattleTentBattleRoom_EventScript_200A78 @@ -136,11 +136,11 @@ FallarborTown_BattleTentBattleRoom_EventScript_200A78:: @ 8200A78 FallarborTown_BattleTentBattleRoom_EventScript_200AA6:: @ 8200AA6 message FallarborTown_BattleTentBattleRoom_Text_257E9E waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, FallarborTown_BattleTentBattleRoom_EventScript_200A2A case 0, FallarborTown_BattleTentBattleRoom_EventScript_20097E - case 127, FallarborTown_BattleTentBattleRoom_EventScript_200A2A + case MULTI_B_PRESSED, FallarborTown_BattleTentBattleRoom_EventScript_200A2A FallarborTown_BattleTentBattleRoom_EventScript_200AD8:: @ 8200AD8 closemessage diff --git a/data/maps/FallarborTown_BattleTentLobby/scripts.inc b/data/maps/FallarborTown_BattleTentLobby/scripts.inc index f6b7e1097..3f6eec374 100644 --- a/data/maps/FallarborTown_BattleTentLobby/scripts.inc +++ b/data/maps/FallarborTown_BattleTentLobby/scripts.inc @@ -9,7 +9,7 @@ FallarborTown_BattleTentLobby_MapScript2_1FFE71: @ 81FFE71 FallarborTown_BattleTentLobby_EventScript_1FFE7B:: @ 81FFE7B setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end FallarborTown_BattleTentLobby_MapScript2_1FFE85: @ 81FFE85 @@ -140,12 +140,12 @@ FallarborTown_BattleTentLobby_EventScript_200001:: @ 8200001 FallarborTown_BattleTentLobby_EventScript_200021:: @ 8200021 message FallarborTown_BattleTentLobby_Text_2C4843 waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, FallarborTown_BattleTentLobby_EventScript_20005D case 1, FallarborTown_BattleTentLobby_EventScript_200169 case 2, FallarborTown_BattleTentLobby_EventScript_2001C5 - case 127, FallarborTown_BattleTentLobby_EventScript_2001C5 + case MULTI_B_PRESSED, FallarborTown_BattleTentLobby_EventScript_2001C5 FallarborTown_BattleTentLobby_EventScript_20005D:: @ 820005D setvar VAR_FRONTIER_FACILITY, 3 @@ -315,7 +315,7 @@ FallarborTown_BattleTentLobby_EventScript_20024F:: @ 820024F FallarborTown_BattleTentLobby_EventScript_20025E:: @ 820025E message FallarborTown_BattleTentLobby_Text_256DDF waitmessage - multichoice 17, 0, 112, 0 + multichoice 17, 0, MULTI_FALLARBOR_TENT_RULES, 0 switch VAR_RESULT case 0, FallarborTown_BattleTentLobby_EventScript_2002BC case 1, FallarborTown_BattleTentLobby_EventScript_2002CA @@ -323,7 +323,7 @@ FallarborTown_BattleTentLobby_EventScript_20025E:: @ 820025E case 3, FallarborTown_BattleTentLobby_EventScript_2002E6 case 4, FallarborTown_BattleTentLobby_EventScript_2002F4 case 5, FallarborTown_BattleTentLobby_EventScript_200302 - case 127, FallarborTown_BattleTentLobby_EventScript_200302 + case MULTI_B_PRESSED, FallarborTown_BattleTentLobby_EventScript_200302 end FallarborTown_BattleTentLobby_EventScript_2002BC:: @ 82002BC diff --git a/data/maps/FarawayIsland_Entrance/scripts.inc b/data/maps/FarawayIsland_Entrance/scripts.inc index bd91918c3..e0d54233b 100644 --- a/data/maps/FarawayIsland_Entrance/scripts.inc +++ b/data/maps/FarawayIsland_Entrance/scripts.inc @@ -19,10 +19,10 @@ FarawayIsland_Entrance_EventScript_267C9D:: @ 8267C9D FarawayIsland_Entrance_EventScript_267CA2:: @ 8267CA2 lock faceplayer - msgbox FarawayIsland_Entrance_Text_2C6B42, MSGBOX_YESNO + msgbox FarawayIsland_Entrance_Text_SailorReturn, MSGBOX_YESNO compare VAR_RESULT, 0 goto_if_eq FarawayIsland_Entrance_EventScript_267CE7 - msgbox FarawayIsland_Entrance_Text_2A6A5D, MSGBOX_DEFAULT + msgbox EventTicket_Text_SailHome, MSGBOX_DEFAULT closemessage applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceDown waitmovement 0 @@ -36,11 +36,11 @@ FarawayIsland_Entrance_EventScript_267CA2:: @ 8267CA2 end FarawayIsland_Entrance_EventScript_267CE7:: @ 8267CE7 - msgbox FarawayIsland_Entrance_Text_2A6A82, MSGBOX_DEFAULT + msgbox EventTicket_Text_AsYouLike, MSGBOX_DEFAULT release end FarawayIsland_Entrance_EventScript_267CF1:: @ 8267CF1 - msgbox FarawayIsland_Entrance_Text_2C6D5A, MSGBOX_SIGN + msgbox FarawayIsland_Entrance_Text_Sign, MSGBOX_SIGN end diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc index b6a278b03..3b8f1f88f 100644 --- a/data/maps/FarawayIsland_Interior/scripts.inc +++ b/data/maps/FarawayIsland_Interior/scripts.inc @@ -62,7 +62,7 @@ FarawayIsland_Interior_EventScript_267DA2:: @ 8267DA2 waitmovement 0 applymovement 1, FarawayIsland_Interior_Movement_267DCE waitmovement 0 - moveobjectoffscreen 1 + copyobjectxytoperm 1 setvar VAR_TEMP_1, 1 releaseall end @@ -122,7 +122,7 @@ FarawayIsland_Interior_EventScript_267DF2:: @ 8267DF2 waitmovement 0 setvar VAR_0x8004, 0 special sub_81D4A90 - message FarawayIsland_Interior_Text_2C6DFF + message FarawayIsland_Interior_Text_Mew waitse playmoncry SPECIES_MEW, 2 compare VAR_FACING, 2 diff --git a/data/maps/FortreeCity_House2/scripts.inc b/data/maps/FortreeCity_House2/scripts.inc index 34344bca3..14ab157ed 100644 --- a/data/maps/FortreeCity_House2/scripts.inc +++ b/data/maps/FortreeCity_House2/scripts.inc @@ -7,15 +7,15 @@ FortreeCity_House2_EventScript_2177CB:: @ 82177CB goto_if_set FLAG_RECEIVED_TM10, FortreeCity_House2_EventScript_21786E call_if_unset FLAG_MET_HIDDEN_POWER_GIVER, FortreeCity_House2_EventScript_217862 msgbox FortreeCity_House2_Text_2178D6, MSGBOX_DEFAULT - multichoice 21, 8, 54, 1 + multichoice 21, 8, MULTI_RIGHTLEFT, 1 switch VAR_RESULT case 1, FortreeCity_House2_EventScript_217878 msgbox FortreeCity_House2_Text_21796A, MSGBOX_DEFAULT - multichoice 21, 8, 54, 1 + multichoice 21, 8, MULTI_RIGHTLEFT, 1 switch VAR_RESULT case 1, FortreeCity_House2_EventScript_217878 msgbox FortreeCity_House2_Text_2179C9, MSGBOX_DEFAULT - multichoice 21, 8, 54, 1 + multichoice 21, 8, MULTI_RIGHTLEFT, 1 switch VAR_RESULT case 0, FortreeCity_House2_EventScript_217878 msgbox FortreeCity_House2_Text_217A28, MSGBOX_DEFAULT diff --git a/data/maps/LilycoveCity/scripts.inc b/data/maps/LilycoveCity/scripts.inc index 9a777e551..364b376bf 100644 --- a/data/maps/LilycoveCity/scripts.inc +++ b/data/maps/LilycoveCity/scripts.inc @@ -37,7 +37,7 @@ LilycoveCity_EventScript_1E2BD8:: @ 81E2BD8 goto_if_set FLAG_DAILY_LILYCOVE_RECEIVED_BERRY, LilycoveCity_EventScript_1E2C18 msgbox LilycoveCity_Text_2A7244, MSGBOX_DEFAULT random 10 - addvar VAR_RESULT, 133 + addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem_std VAR_RESULT compare VAR_RESULT, 0 goto_if_eq Common_EventScript_ShowBagIsFull diff --git a/data/maps/LilycoveCity_ContestLobby/scripts.inc b/data/maps/LilycoveCity_ContestLobby/scripts.inc index cd4749bfc..3a4753d8a 100644 --- a/data/maps/LilycoveCity_ContestLobby/scripts.inc +++ b/data/maps/LilycoveCity_ContestLobby/scripts.inc @@ -630,12 +630,12 @@ LilycoveCity_ContestLobby_EventScript_21A806:: @ 821A806 LilycoveCity_ContestLobby_EventScript_21A819:: @ 821A819 message LilycoveCity_ContestLobby_Text_27C0F6 waitmessage - multichoice 0, 0, 2, 0 + multichoice 0, 0, MULTI_ENTERINFO, 0 switch VAR_RESULT case 0, LilycoveCity_ContestLobby_EventScript_21A856 case 1, LilycoveCity_ContestLobby_EventScript_21A90D case 2, LilycoveCity_ContestLobby_EventScript_21A97F - case 127, LilycoveCity_ContestLobby_EventScript_21A97F + case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_21A97F end LilycoveCity_ContestLobby_EventScript_21A856:: @ 821A856 @@ -648,12 +648,12 @@ LilycoveCity_ContestLobby_EventScript_21A856:: @ 821A856 message LilycoveCity_ContestLobby_Text_27C8FD waitmessage specialvar VAR_TEMP_D, IsWirelessAdapterConnected - multichoice 0, 0, 85, 0 + multichoice 0, 0, MULTI_LINK_CONTEST_MODE, 0 switch VAR_RESULT case 0, LilycoveCity_ContestLobby_EventScript_21A8BB case 1, LilycoveCity_ContestLobby_EventScript_21A8C6 case 2, LilycoveCity_ContestLobby_EventScript_21A97F - case 127, LilycoveCity_ContestLobby_EventScript_21A97F + case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_21A97F end LilycoveCity_ContestLobby_EventScript_21A8BB:: @ 821A8BB @@ -671,10 +671,10 @@ LilycoveCity_ContestLobby_EventScript_21A8C6:: @ 821A8C6 LilycoveCity_ContestLobby_EventScript_21A8DC:: @ 821A8DC message LilycoveCity_ContestLobby_Text_27C119 waitmessage - multichoice 0, 0, 4, 0 + multichoice 0, 0, MULTI_CONTEST_TYPE, 0 switch VAR_RESULT case 5, LilycoveCity_ContestLobby_EventScript_21A97F - case 127, LilycoveCity_ContestLobby_EventScript_21A97F + case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_21A97F copyvar VAR_CONTEST_CATEGORY, VAR_RESULT goto LilycoveCity_ContestLobby_EventScript_21A98C end @@ -682,13 +682,13 @@ LilycoveCity_ContestLobby_EventScript_21A8DC:: @ 821A8DC LilycoveCity_ContestLobby_EventScript_21A90D:: @ 821A90D message LilycoveCity_ContestLobby_Text_27C0DA waitmessage - multichoice 0, 0, 84, 0 + multichoice 0, 0, MULTI_LINK_CONTEST_INFO, 0 switch VAR_RESULT case 0, LilycoveCity_ContestLobby_EventScript_21A955 case 1, LilycoveCity_ContestLobby_EventScript_21A963 case 2, LilycoveCity_ContestLobby_EventScript_21A971 case 3, LilycoveCity_ContestLobby_EventScript_21A819 - case 127, LilycoveCity_ContestLobby_EventScript_21A819 + case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_21A819 end LilycoveCity_ContestLobby_EventScript_21A955:: @ 821A955 @@ -877,12 +877,12 @@ LilycoveCity_ContestLobby_EventScript_21ABA0:: @ 821ABA0 LilycoveCity_ContestLobby_EventScript_21ABA6:: @ 821ABA6 message Text_DecideLinkLeader waitmessage - multichoice 16, 6, 81, 0 + multichoice 16, 6, MULTI_LINK_LEADER, 0 switch VAR_RESULT case 0, LilycoveCity_ContestLobby_EventScript_21AC0B case 1, LilycoveCity_ContestLobby_EventScript_21ABE3 case 2, LilycoveCity_ContestLobby_EventScript_21A97F - case 127, LilycoveCity_ContestLobby_EventScript_21A97F + case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_21A97F end LilycoveCity_ContestLobby_EventScript_21ABE3:: @ 821ABE3 diff --git a/data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc b/data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc index 18fc0404b..c22e0c0ec 100644 --- a/data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc @@ -7,11 +7,11 @@ LilycoveCity_DepartmentStoreElevator_EventScript_220624:: @ 8220624 setvar VAR_0x8004, 0 call_if_unset FLAG_TEMP_2, LilycoveCity_DepartmentStoreElevator_EventScript_2207FC copyvar VAR_0x8005, VAR_DEPT_STORE_FLOOR - special sub_8139B60 + special ShowDeptStoreElevatorFloorSelect message gUnknown_08272C1D waitmessage setvar VAR_0x8004, 0 - specialvar VAR_RESULT, sub_81399F4 + specialvar VAR_RESULT, GetDeptStoreDefaultFloorChoice switch VAR_RESULT case 0, LilycoveCity_DepartmentStoreElevator_EventScript_220689 case 1, LilycoveCity_DepartmentStoreElevator_EventScript_220695 @@ -21,27 +21,27 @@ LilycoveCity_DepartmentStoreElevator_EventScript_220624:: @ 8220624 end LilycoveCity_DepartmentStoreElevator_EventScript_220689:: @ 8220689 - multichoicedefault 0, 0, 57, 0, 0 + multichoicedefault 0, 0, MULTI_FLOORS, 0, 0 goto LilycoveCity_DepartmentStoreElevator_EventScript_2206C5 end LilycoveCity_DepartmentStoreElevator_EventScript_220695:: @ 8220695 - multichoicedefault 0, 0, 57, 1, 0 + multichoicedefault 0, 0, MULTI_FLOORS, 1, 0 goto LilycoveCity_DepartmentStoreElevator_EventScript_2206C5 end LilycoveCity_DepartmentStoreElevator_EventScript_2206A1:: @ 82206A1 - multichoicedefault 0, 0, 57, 2, 0 + multichoicedefault 0, 0, MULTI_FLOORS, 2, 0 goto LilycoveCity_DepartmentStoreElevator_EventScript_2206C5 end LilycoveCity_DepartmentStoreElevator_EventScript_2206AD:: @ 82206AD - multichoicedefault 0, 0, 57, 3, 0 + multichoicedefault 0, 0, MULTI_FLOORS, 3, 0 goto LilycoveCity_DepartmentStoreElevator_EventScript_2206C5 end LilycoveCity_DepartmentStoreElevator_EventScript_2206B9:: @ 82206B9 - multichoicedefault 0, 0, 57, 4, 0 + multichoicedefault 0, 0, MULTI_FLOORS, 4, 0 goto LilycoveCity_DepartmentStoreElevator_EventScript_2206C5 end @@ -53,76 +53,76 @@ LilycoveCity_DepartmentStoreElevator_EventScript_2206C5:: @ 82206C5 case 3, LilycoveCity_DepartmentStoreElevator_EventScript_220740 case 4, LilycoveCity_DepartmentStoreElevator_EventScript_220718 case 5, LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 - case 127, LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 + case MULTI_B_PRESSED, LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 end LilycoveCity_DepartmentStoreElevator_EventScript_220718:: @ 8220718 - setvar VAR_0x8006, 4 + setvar VAR_0x8006, DEPT_STORE_FLOORNUM_1F setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F, 255, 2, 1 - compare VAR_DEPT_STORE_FLOOR, 4 + compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_1F goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 call LilycoveCity_DepartmentStoreElevator_EventScript_2207E5 - setvar VAR_DEPT_STORE_FLOOR, 4 + setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_1F goto LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 end LilycoveCity_DepartmentStoreElevator_EventScript_220740:: @ 8220740 - setvar VAR_0x8006, 5 + setvar VAR_0x8006, DEPT_STORE_FLOORNUM_2F setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F, 255, 2, 1 - compare VAR_DEPT_STORE_FLOOR, 5 + compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_2F goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 call LilycoveCity_DepartmentStoreElevator_EventScript_2207E5 - setvar VAR_DEPT_STORE_FLOOR, 5 + setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_2F goto LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 end LilycoveCity_DepartmentStoreElevator_EventScript_220768:: @ 8220768 - setvar VAR_0x8006, 6 + setvar VAR_0x8006, DEPT_STORE_FLOORNUM_3F setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F, 255, 2, 1 - compare VAR_DEPT_STORE_FLOOR, 6 + compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_3F goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 call LilycoveCity_DepartmentStoreElevator_EventScript_2207E5 - setvar VAR_DEPT_STORE_FLOOR, 6 + setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_3F goto LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 end LilycoveCity_DepartmentStoreElevator_EventScript_220790:: @ 8220790 - setvar VAR_0x8006, 7 + setvar VAR_0x8006, DEPT_STORE_FLOORNUM_4F setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F, 255, 2, 1 - compare VAR_DEPT_STORE_FLOOR, 7 + compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_4F goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 call LilycoveCity_DepartmentStoreElevator_EventScript_2207E5 - setvar VAR_DEPT_STORE_FLOOR, 7 + setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_4F goto LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 end LilycoveCity_DepartmentStoreElevator_EventScript_2207B8:: @ 82207B8 - setvar VAR_0x8006, 8 + setvar VAR_0x8006, DEPT_STORE_FLOORNUM_5F setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F, 255, 2, 1 - compare VAR_DEPT_STORE_FLOOR, 8 + compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_5F goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 call LilycoveCity_DepartmentStoreElevator_EventScript_2207E5 - setvar VAR_DEPT_STORE_FLOOR, 8 + setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_5F goto LilycoveCity_DepartmentStoreElevator_EventScript_2207E0 end LilycoveCity_DepartmentStoreElevator_EventScript_2207E0:: @ 82207E0 - special sub_8139C10 + special CloseDeptStoreElevatorWindow release end LilycoveCity_DepartmentStoreElevator_EventScript_2207E5:: @ 82207E5 - special sub_8139C10 + special CloseDeptStoreElevatorWindow closemessage applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceDown waitmovement 0 waitse - special ShakeScreenInElevator + special MoveElevator waitstate setflag FLAG_TEMP_2 return LilycoveCity_DepartmentStoreElevator_EventScript_2207FC:: @ 82207FC - special SetDepartmentStoreFloorVar + special SetDeptStoreFloor return diff --git a/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc b/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc index 42ced50b9..c9e423ebb 100644 --- a/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc @@ -76,7 +76,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_220295:: @ 8220295 end LilycoveCity_DepartmentStoreRooftop_EventScript_2202A6:: @ 82202A6 - multichoice 16, 0, 42, 0 + multichoice 16, 0, MULTI_VENDING_MACHINE, 0 copyvar VAR_TEMP_1, VAR_RESULT switch VAR_TEMP_1 case 0, LilycoveCity_DepartmentStoreRooftop_EventScript_2202E4 @@ -87,42 +87,42 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_2202A6:: @ 82202A6 end LilycoveCity_DepartmentStoreRooftop_EventScript_2202E4:: @ 82202E4 - setvar VAR_TEMP_0, 26 + setvar VAR_TEMP_0, ITEM_FRESH_WATER goto LilycoveCity_DepartmentStoreRooftop_EventScript_22032F end LilycoveCity_DepartmentStoreRooftop_EventScript_2202EF:: @ 82202EF - setvar VAR_TEMP_0, 27 + setvar VAR_TEMP_0, ITEM_SODA_POP goto LilycoveCity_DepartmentStoreRooftop_EventScript_22032F end LilycoveCity_DepartmentStoreRooftop_EventScript_2202FA:: @ 82202FA - setvar VAR_TEMP_0, 28 + setvar VAR_TEMP_0, ITEM_LEMONADE goto LilycoveCity_DepartmentStoreRooftop_EventScript_22032F end LilycoveCity_DepartmentStoreRooftop_EventScript_220305:: @ 8220305 - checkmoney 0xc8, 0 + checkmoney 200, 0 return LilycoveCity_DepartmentStoreRooftop_EventScript_22030C:: @ 822030C - checkmoney 0x12c, 0 + checkmoney 300, 0 return LilycoveCity_DepartmentStoreRooftop_EventScript_220313:: @ 8220313 - checkmoney 0x15e, 0 + checkmoney 350, 0 return LilycoveCity_DepartmentStoreRooftop_EventScript_22031A:: @ 822031A - takemoney 0xc8, 0 + takemoney 200, 0 return LilycoveCity_DepartmentStoreRooftop_EventScript_220321:: @ 8220321 - takemoney 0x12c, 0 + takemoney 300, 0 return LilycoveCity_DepartmentStoreRooftop_EventScript_220328:: @ 8220328 - takemoney 0x15e, 0 + takemoney 350, 0 return LilycoveCity_DepartmentStoreRooftop_EventScript_22032F:: @ 822032F @@ -144,13 +144,12 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_22032F:: @ 822032F compare VAR_TEMP_1, 2 call_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_220328 updatemoneybox 0, 0 - nop bufferitemname 0, VAR_TEMP_0 playse SE_JIHANKI msgbox LilycoveCity_DepartmentStoreRooftop_Text_2205A1, MSGBOX_DEFAULT giveitem VAR_TEMP_0, 1 bufferitemname 1, VAR_TEMP_0 - bufferstdstring 2, 14 + bufferstdstring 2, STDSTRING_ITEMS msgbox gText_PutItemInPocket, MSGBOX_DEFAULT random 64 compare VAR_RESULT, 0 @@ -162,7 +161,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_22032F:: @ 822032F msgbox LilycoveCity_DepartmentStoreRooftop_Text_2205C2, MSGBOX_DEFAULT giveitem VAR_TEMP_0, 1 bufferitemname 1, VAR_TEMP_0 - bufferstdstring 2, 14 + bufferstdstring 2, STDSTRING_ITEMS msgbox gText_PutItemInPocket, MSGBOX_DEFAULT random 64 compare VAR_RESULT, 0 @@ -174,7 +173,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_22032F:: @ 822032F msgbox LilycoveCity_DepartmentStoreRooftop_Text_2205C2, MSGBOX_DEFAULT giveitem VAR_TEMP_0, 1 bufferitemname 1, VAR_TEMP_0 - bufferstdstring 2, 14 + bufferstdstring 2, STDSTRING_ITEMS msgbox gText_PutItemInPocket, MSGBOX_DEFAULT goto LilycoveCity_DepartmentStoreRooftop_EventScript_220436 end diff --git a/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc index 6b5796604..ccad13e27 100644 --- a/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc @@ -10,7 +10,7 @@ LilycoveCity_DepartmentStore_5F_MapScript2_21FF80: @ 821FF80 LilycoveCity_DepartmentStore_5F_EventScript_21FF9A:: @ 821FF9A setobjectxy 7, 16, 2 - turnobject 7, 2 + turnobject 7, DIR_NORTH end LilycoveCity_DepartmentStore_5F_EventScript_21FFA6:: @ 821FFA6 diff --git a/data/maps/LilycoveCity_Harbor/map.json b/data/maps/LilycoveCity_Harbor/map.json index 28e2366e6..1b97c298d 100644 --- a/data/maps/LilycoveCity_Harbor/map.json +++ b/data/maps/LilycoveCity_Harbor/map.json @@ -24,7 +24,7 @@ "movement_range_y": 0, "trainer_type": "0", "trainer_sight_or_berry_tree_id": "0", - "script": "LilycoveCity_Harbor_EventScript_21E00F", + "script": "LilycoveCity_Harbor_EventScript_FerryAttendant", "flag": "FLAG_HIDE_LILYCOVE_HARBOR_FERRY_ATTENDANT" }, { @@ -50,7 +50,7 @@ "movement_range_y": 1, "trainer_type": "0", "trainer_sight_or_berry_tree_id": "0", - "script": "LilycoveCity_Harbor_EventScript_21E637", + "script": "LilycoveCity_Harbor_EventScript_Sailor", "flag": "0" }, { @@ -77,7 +77,7 @@ "trainer_type": "0", "trainer_sight_or_berry_tree_id": "0", "script": "0x0", - "flag": "FLAG_HIDE_LILYCOVE_HARBOR_EON_TICKET_TAKER" + "flag": "FLAG_HIDE_LILYCOVE_HARBOR_EVENT_TICKET_TAKER" } ], "warp_events": [ diff --git a/data/maps/LilycoveCity_Harbor/scripts.inc b/data/maps/LilycoveCity_Harbor/scripts.inc index 4b446c39b..292180d31 100644 --- a/data/maps/LilycoveCity_Harbor/scripts.inc +++ b/data/maps/LilycoveCity_Harbor/scripts.inc @@ -6,106 +6,107 @@ LilycoveCity_Harbor_OnTransition: @ 821E006 setescapewarp MAP_LILYCOVE_CITY, 255, 12, 33 end -LilycoveCity_Harbor_EventScript_21E00F:: @ 821E00F +LilycoveCity_Harbor_EventScript_FerryAttendant:: @ 821E00F lock faceplayer - goto_if_unset FLAG_SYS_GAME_CLEAR, LilycoveCity_Harbor_EventScript_21E54D - call LilycoveCity_Harbor_EventScript_21E194 - call LilycoveCity_Harbor_EventScript_21E1C6 - call LilycoveCity_Harbor_EventScript_21E1F8 - call LilycoveCity_Harbor_EventScript_21E22A - call LilycoveCity_Harbor_EventScript_21E25C - call LilycoveCity_Harbor_EventScript_21E2A6 + goto_if_unset FLAG_SYS_GAME_CLEAR, LilycoveCity_Harbor_EventScript_FerryUnavailable + call LilycoveCity_Harbor_EventScript_GetEonTicketState + call LilycoveCity_Harbor_EventScript_GetAuroraTicketState + call LilycoveCity_Harbor_EventScript_GetOldSeaMapState + call LilycoveCity_Harbor_EventScript_GetMysticTicketState + call LilycoveCity_Harbor_EventScript_GetFirstTimeShowingTicket + call LilycoveCity_Harbor_EventScript_GetHasTicketsState compare VAR_TEMP_C, 2 - goto_if_eq LilycoveCity_Harbor_EventScript_21E350 + goto_if_eq LilycoveCity_Harbor_EventScript_OldSeaMapFirstTime compare VAR_TEMP_B, 1 - goto_if_eq LilycoveCity_Harbor_EventScript_21E2F0 + goto_if_eq LilycoveCity_Harbor_EventScript_EonTicketFirstTime compare VAR_TEMP_B, 2 - goto_if_eq LilycoveCity_Harbor_EventScript_21E320 + goto_if_eq LilycoveCity_Harbor_EventScript_AuroraTicketFirstTime compare VAR_TEMP_B, 4 - goto_if_eq LilycoveCity_Harbor_EventScript_21E350 - compare VAR_TEMP_B, 8 - goto_if_eq LilycoveCity_Harbor_EventScript_21E41D + goto_if_eq LilycoveCity_Harbor_EventScript_OldSeaMapFirstTime + compare VAR_TEMP_B, 8 + goto_if_eq LilycoveCity_Harbor_EventScript_MysticTicketFirstTime compare VAR_TEMP_B, 0 - goto_if_ne LilycoveCity_Harbor_EventScript_21E44D - goto LilycoveCity_Harbor_EventScript_21E080 + goto_if_ne LilycoveCity_Harbor_EventScript_MultipleEventTicketsFirstTime + goto LilycoveCity_Harbor_EventScript_NoFirstTimeEventTickets end -LilycoveCity_Harbor_EventScript_21E080:: @ 821E080 +@ First goto_if_eq is unnecessary; identical scripts +LilycoveCity_Harbor_EventScript_NoFirstTimeEventTickets:: @ 821E080 compare VAR_TEMP_A, 0 - goto_if_eq LilycoveCity_Harbor_EventScript_21E557 - msgbox LilycoveCity_Harbor_Text_21E758, MSGBOX_DEFAULT - message LilycoveCity_Harbor_Text_21E7ED + goto_if_eq LilycoveCity_Harbor_EventScript_NoEventTickets + msgbox LilycoveCity_Harbor_Text_MayISeeYourTicket, MSGBOX_DEFAULT + message LilycoveCity_Harbor_Text_FlashTicketWhereTo waitmessage - goto LilycoveCity_Harbor_EventScript_21E09F + goto LilycoveCity_Harbor_EventScript_FerryRegularLocationSelect end -LilycoveCity_Harbor_EventScript_21E09F:: @ 821E09F +LilycoveCity_Harbor_EventScript_FerryRegularLocationSelect:: @ 821E09F setvar VAR_0x8004, 0 - special sub_80E2548 + special ScriptMenu_CreateLilycoveSSTidalMultichoice waitstate - special sub_80E2878 + special GetLilycoveSSTidalSelection switch VAR_RESULT - case 0, LilycoveCity_Harbor_EventScript_21E149 - case 1, LilycoveCity_Harbor_EventScript_21E171 - case 2, LilycoveCity_Harbor_EventScript_21E109 - case 3, LilycoveCity_Harbor_EventScript_21E119 - case 4, LilycoveCity_Harbor_EventScript_21E129 - case 5, LilycoveCity_Harbor_EventScript_21E139 - case 6, LilycoveCity_Harbor_EventScript_21E626 - case 127, LilycoveCity_Harbor_EventScript_21E626 + case 0, LilycoveCity_Harbor_EventScript_GoToSlateport + case 1, LilycoveCity_Harbor_EventScript_GoToBattleFrontier + case 2, LilycoveCity_Harbor_EventScript_GoToSouthernIsland + case 3, LilycoveCity_Harbor_EventScript_GoToNavelRock + case 4, LilycoveCity_Harbor_EventScript_GoToBirthIsland + case 5, LilycoveCity_Harbor_EventScript_GoToFarawayIsland + case 6, LilycoveCity_Harbor_EventScript_ExitSailSelect + case MULTI_B_PRESSED, LilycoveCity_Harbor_EventScript_ExitSailSelect end -LilycoveCity_Harbor_EventScript_21E109:: @ 821E109 - call LilycoveCity_Harbor_EventScript_21E5CC +LilycoveCity_Harbor_EventScript_GoToSouthernIsland:: @ 821E109 + call LilycoveCity_Harbor_EventScript_BoardFerry warp MAP_SOUTHERN_ISLAND_EXTERIOR, 255, 13, 22 waitstate release end -LilycoveCity_Harbor_EventScript_21E119:: @ 821E119 - call LilycoveCity_Harbor_EventScript_21E5CC +LilycoveCity_Harbor_EventScript_GoToNavelRock:: @ 821E119 + call LilycoveCity_Harbor_EventScript_BoardFerry warp MAP_NAVEL_ROCK_HARBOR, 255, 8, 4 waitstate release end -LilycoveCity_Harbor_EventScript_21E129:: @ 821E129 - call LilycoveCity_Harbor_EventScript_21E5CC +LilycoveCity_Harbor_EventScript_GoToBirthIsland:: @ 821E129 + call LilycoveCity_Harbor_EventScript_BoardFerry warp MAP_BIRTH_ISLAND_HARBOR, 255, 8, 4 waitstate release end -LilycoveCity_Harbor_EventScript_21E139:: @ 821E139 - call LilycoveCity_Harbor_EventScript_21E5CC +LilycoveCity_Harbor_EventScript_GoToFarawayIsland:: @ 821E139 + call LilycoveCity_Harbor_EventScript_BoardFerry warp MAP_FARAWAY_ISLAND_ENTRANCE, 255, 13, 38 waitstate release end -LilycoveCity_Harbor_EventScript_21E149:: @ 821E149 - msgbox LilycoveCity_Harbor_Text_21E864, MSGBOX_YESNO +LilycoveCity_Harbor_EventScript_GoToSlateport:: @ 821E149 + msgbox LilycoveCity_Harbor_Text_SlateportItIs, MSGBOX_YESNO compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_Harbor_EventScript_21E5C0 + goto_if_eq LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind setvar VAR_PORTHOLE_STATE, 5 - call LilycoveCity_Harbor_EventScript_21E5CC + call LilycoveCity_Harbor_EventScript_BoardFerry warp MAP_SS_TIDAL_CORRIDOR, 255, 1, 10 waitstate release end -LilycoveCity_Harbor_EventScript_21E171:: @ 821E171 - msgbox LilycoveCity_Harbor_Text_21E880, MSGBOX_YESNO +LilycoveCity_Harbor_EventScript_GoToBattleFrontier:: @ 821E171 + msgbox LilycoveCity_Harbor_Text_BattleFrontierItIs, MSGBOX_YESNO compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_Harbor_EventScript_21E5C0 - call LilycoveCity_Harbor_EventScript_21E5CC + goto_if_eq LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind + call LilycoveCity_Harbor_EventScript_BoardFerry warp MAP_BATTLE_FRONTIER_OUTSIDE_WEST, 255, 19, 67 waitstate release end -LilycoveCity_Harbor_EventScript_21E194:: @ 821E194 +LilycoveCity_Harbor_EventScript_GetEonTicketState:: @ 821E194 setvar VAR_TEMP_E, 0 goto_if_unset FLAG_SYS_HAS_EON_TICKET, Common_EventScript_NopReturn checkitem ITEM_EON_TICKET, 1 @@ -116,7 +117,7 @@ LilycoveCity_Harbor_EventScript_21E194:: @ 821E194 setvar VAR_TEMP_E, 2 return -LilycoveCity_Harbor_EventScript_21E1C6:: @ 821E1C6 +LilycoveCity_Harbor_EventScript_GetAuroraTicketState:: @ 821E1C6 setvar VAR_TEMP_D, 0 goto_if_unset FLAG_ENABLE_SHIP_BIRTH_ISLAND, Common_EventScript_NopReturn checkitem ITEM_AURORA_TICKET, 1 @@ -127,7 +128,7 @@ LilycoveCity_Harbor_EventScript_21E1C6:: @ 821E1C6 setvar VAR_TEMP_D, 2 return -LilycoveCity_Harbor_EventScript_21E1F8:: @ 821E1F8 +LilycoveCity_Harbor_EventScript_GetOldSeaMapState:: @ 821E1F8 setvar VAR_TEMP_C, 0 goto_if_unset FLAG_ENABLE_SHIP_FARAWAY_ISLAND, Common_EventScript_NopReturn checkitem ITEM_OLD_SEA_MAP, 1 @@ -138,7 +139,7 @@ LilycoveCity_Harbor_EventScript_21E1F8:: @ 821E1F8 setvar VAR_TEMP_C, 2 return -LilycoveCity_Harbor_EventScript_21E22A:: @ 821E22A +LilycoveCity_Harbor_EventScript_GetMysticTicketState:: @ 821E22A setvar VAR_TEMP_9, 0 goto_if_unset FLAG_ENABLE_SHIP_NAVEL_ROCK, Common_EventScript_NopReturn checkitem ITEM_MYSTIC_TICKET, 1 @@ -149,102 +150,102 @@ LilycoveCity_Harbor_EventScript_21E22A:: @ 821E22A setvar VAR_TEMP_9, 2 return -LilycoveCity_Harbor_EventScript_21E25C:: @ 821E25C +LilycoveCity_Harbor_EventScript_GetFirstTimeShowingTicket:: @ 821E25C setvar VAR_TEMP_B, 0 compare VAR_TEMP_E, 2 - call_if_eq LilycoveCity_Harbor_EventScript_21E28E + call_if_eq LilycoveCity_Harbor_EventScript_SetFirstTimeShowingEonTicket compare VAR_TEMP_D, 2 - call_if_eq LilycoveCity_Harbor_EventScript_21E294 + call_if_eq LilycoveCity_Harbor_EventScript_SetFirstTimeShowingAuroraTicket compare VAR_TEMP_C, 2 - call_if_eq LilycoveCity_Harbor_EventScript_21E29A + call_if_eq LilycoveCity_Harbor_EventScript_SetFirstTimeShowingOldSeaMap compare VAR_TEMP_9, 2 - call_if_eq LilycoveCity_Harbor_EventScript_21E2A0 + call_if_eq LilycoveCity_Harbor_EventScript_SetFirstTimeShowingMysticTicket return -LilycoveCity_Harbor_EventScript_21E28E:: @ 821E28E +LilycoveCity_Harbor_EventScript_SetFirstTimeShowingEonTicket:: @ 821E28E addvar VAR_TEMP_B, 1 return -LilycoveCity_Harbor_EventScript_21E294:: @ 821E294 +LilycoveCity_Harbor_EventScript_SetFirstTimeShowingAuroraTicket:: @ 821E294 addvar VAR_TEMP_B, 2 return -LilycoveCity_Harbor_EventScript_21E29A:: @ 821E29A +LilycoveCity_Harbor_EventScript_SetFirstTimeShowingOldSeaMap:: @ 821E29A addvar VAR_TEMP_B, 4 return -LilycoveCity_Harbor_EventScript_21E2A0:: @ 821E2A0 +LilycoveCity_Harbor_EventScript_SetFirstTimeShowingMysticTicket:: @ 821E2A0 addvar VAR_TEMP_B, 8 return -LilycoveCity_Harbor_EventScript_21E2A6:: @ 821E2A6 +LilycoveCity_Harbor_EventScript_GetHasTicketsState:: @ 821E2A6 setvar VAR_TEMP_A, 0 compare VAR_TEMP_E, 1 - call_if_eq LilycoveCity_Harbor_EventScript_21E2D8 + call_if_eq LilycoveCity_Harbor_EventScript_SetHasEonTicket compare VAR_TEMP_D, 1 - call_if_eq LilycoveCity_Harbor_EventScript_21E2DE + call_if_eq LilycoveCity_Harbor_EventScript_SetHasAuroraTicket compare VAR_TEMP_C, 1 - call_if_eq LilycoveCity_Harbor_EventScript_21E2E4 + call_if_eq LilycoveCity_Harbor_EventScript_SetHasOldSeaMap compare VAR_TEMP_9, 1 - call_if_eq LilycoveCity_Harbor_EventScript_21E2EA + call_if_eq LilycoveCity_Harbor_EventScript_SetHasMysticTicket return -LilycoveCity_Harbor_EventScript_21E2D8:: @ 821E2D8 +LilycoveCity_Harbor_EventScript_SetHasEonTicket:: @ 821E2D8 addvar VAR_TEMP_A, 1 return -LilycoveCity_Harbor_EventScript_21E2DE:: @ 821E2DE +LilycoveCity_Harbor_EventScript_SetHasAuroraTicket:: @ 821E2DE addvar VAR_TEMP_A, 2 return -LilycoveCity_Harbor_EventScript_21E2E4:: @ 821E2E4 +LilycoveCity_Harbor_EventScript_SetHasOldSeaMap:: @ 821E2E4 addvar VAR_TEMP_A, 4 return -LilycoveCity_Harbor_EventScript_21E2EA:: @ 821E2EA +LilycoveCity_Harbor_EventScript_SetHasMysticTicket:: @ 821E2EA addvar VAR_TEMP_A, 8 return -LilycoveCity_Harbor_EventScript_21E2F0:: @ 821E2F0 +LilycoveCity_Harbor_EventScript_EonTicketFirstTime:: @ 821E2F0 setflag FLAG_HAS_EON_TICKET - msgbox LilycoveCity_Harbor_Text_2A68D2, MSGBOX_DEFAULT + msgbox EventTicket_Text_ThatPass, MSGBOX_DEFAULT closemessage - call LilycoveCity_Harbor_EventScript_21E4EE - msgbox LilycoveCity_Harbor_Text_2A68FC, MSGBOX_DEFAULT - goto LilycoveCity_Harbor_EventScript_21E30F + call LilycoveCity_Harbor_EventScript_GetEventTicketSailor + msgbox EventTicket_Text_ShowEonTicket, MSGBOX_DEFAULT + goto LilycoveCity_Harbor_EventScript_GoToSouthernIslandFirstTime end -LilycoveCity_Harbor_EventScript_21E30F:: @ 821E30F +LilycoveCity_Harbor_EventScript_GoToSouthernIslandFirstTime:: @ 821E30F closemessage - call LilycoveCity_Harbor_EventScript_21E514 + call LilycoveCity_Harbor_EventScript_BoardFerryWithSailor warp MAP_SOUTHERN_ISLAND_EXTERIOR, 255, 13, 22 waitstate release end -LilycoveCity_Harbor_EventScript_21E320:: @ 821E320 +LilycoveCity_Harbor_EventScript_AuroraTicketFirstTime:: @ 821E320 setflag FLAG_HAS_AURORA_TICKET - msgbox LilycoveCity_Harbor_Text_2A68D2, MSGBOX_DEFAULT + msgbox EventTicket_Text_ThatPass, MSGBOX_DEFAULT closemessage - call LilycoveCity_Harbor_EventScript_21E4EE - msgbox LilycoveCity_Harbor_Text_2C6A71, MSGBOX_DEFAULT - goto LilycoveCity_Harbor_EventScript_21E33F + call LilycoveCity_Harbor_EventScript_GetEventTicketSailor + msgbox EventTicket_Text_OddTicketGetOnBoard, MSGBOX_DEFAULT + goto LilycoveCity_Harbor_EventScript_GoToBirthIslandFirstTime end -LilycoveCity_Harbor_EventScript_21E33F:: @ 821E33F +LilycoveCity_Harbor_EventScript_GoToBirthIslandFirstTime:: @ 821E33F closemessage - call LilycoveCity_Harbor_EventScript_21E514 + call LilycoveCity_Harbor_EventScript_BoardFerryWithSailor warp MAP_BIRTH_ISLAND_HARBOR, 255, 8, 4 waitstate release end -LilycoveCity_Harbor_EventScript_21E350:: @ 821E350 +LilycoveCity_Harbor_EventScript_OldSeaMapFirstTime:: @ 821E350 setflag FLAG_HAS_OLD_SEA_MAP - msgbox LilycoveCity_Harbor_Text_2A6848, MSGBOX_DEFAULT + msgbox EventTicket_Text_ShowOldSeaMap, MSGBOX_DEFAULT closemessage - call LilycoveCity_Harbor_EventScript_21E4EE - msgbox LilycoveCity_Harbor_Text_2C68A5, MSGBOX_DEFAULT + call LilycoveCity_Harbor_EventScript_GetEventTicketSailor + msgbox EventTicket_Text_OldSeaMapTooFar, MSGBOX_DEFAULT closemessage applymovement 4, Common_Movement_WalkInPlaceUp waitmovement 0 @@ -253,80 +254,80 @@ LilycoveCity_Harbor_EventScript_21E350:: @ 821E350 waitmovement 0 applymovement 4, Common_Movement_Delay48 waitmovement 0 - compare VAR_FACING, 2 - call_if_eq LilycoveCity_Harbor_EventScript_21E656 - compare VAR_FACING, 4 - call_if_eq LilycoveCity_Harbor_EventScript_21E661 + compare VAR_FACING, DIR_NORTH + call_if_eq LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayNorth + compare VAR_FACING, DIR_EAST + call_if_eq LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayEast addobject 5 - compare VAR_FACING, 2 - call_if_eq LilycoveCity_Harbor_EventScript_21E675 - compare VAR_FACING, 4 - call_if_eq LilycoveCity_Harbor_EventScript_21E680 - msgbox LilycoveCity_Harbor_Text_2C6951, MSGBOX_DEFAULT - compare VAR_FACING, 2 - call_if_eq LilycoveCity_Harbor_EventScript_21E68B - compare VAR_FACING, 4 - call_if_eq LilycoveCity_Harbor_EventScript_21E696 - msgbox LilycoveCity_Harbor_Text_2C69AA, MSGBOX_DEFAULT + compare VAR_FACING, DIR_NORTH + call_if_eq LilycoveCity_Harbor_EventScript_BrineyFaceSailorNorth + compare VAR_FACING, DIR_EAST + call_if_eq LilycoveCity_Harbor_EventScript_BrineyFaceSailorEast + msgbox EventTicket_Text_BrineyHoldOnASecond, MSGBOX_DEFAULT + compare VAR_FACING, DIR_NORTH + call_if_eq LilycoveCity_Harbor_EventScript_BrineyFacePlayerNorth + compare VAR_FACING, DIR_EAST + call_if_eq LilycoveCity_Harbor_EventScript_BrineyFacePlayerEast + msgbox EventTicket_Text_BrineyLetsSail, MSGBOX_DEFAULT closemessage - compare VAR_FACING, 2 - call_if_eq LilycoveCity_Harbor_EventScript_21E6A1 - compare VAR_FACING, 4 - call_if_eq LilycoveCity_Harbor_EventScript_21E6BA + compare VAR_FACING, DIR_NORTH + call_if_eq LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorNorth + compare VAR_FACING, DIR_EAST + call_if_eq LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorEast setvar VAR_0x8004, 2 - call LilycoveCity_Harbor_EventScript_2721E2 + call Common_EventScript_FerryDepart warp MAP_FARAWAY_ISLAND_ENTRANCE, 255, 13, 38 waitstate release end -LilycoveCity_Harbor_EventScript_21E40C:: @ 821E40C +LilycoveCity_Harbor_EventScript_GoToFarawayIslandFirstTime:: @ 821E40C closemessage - call LilycoveCity_Harbor_EventScript_21E514 + call LilycoveCity_Harbor_EventScript_BoardFerryWithSailor warp MAP_FARAWAY_ISLAND_ENTRANCE, 255, 13, 38 waitstate release end -LilycoveCity_Harbor_EventScript_21E41D:: @ 821E41D +LilycoveCity_Harbor_EventScript_MysticTicketFirstTime:: @ 821E41D setflag FLAG_HAS_MYSTIC_TICKET - msgbox LilycoveCity_Harbor_Text_2A68D2, MSGBOX_DEFAULT + msgbox EventTicket_Text_ThatPass, MSGBOX_DEFAULT closemessage - call LilycoveCity_Harbor_EventScript_21E4EE - msgbox LilycoveCity_Harbor_Text_2C6A71, MSGBOX_DEFAULT - goto LilycoveCity_Harbor_EventScript_21E43C + call LilycoveCity_Harbor_EventScript_GetEventTicketSailor + msgbox EventTicket_Text_OddTicketGetOnBoard, MSGBOX_DEFAULT + goto LilycoveCity_Harbor_EventScript_GoToNavelRockFirstTime end -LilycoveCity_Harbor_EventScript_21E43C:: @ 821E43C +LilycoveCity_Harbor_EventScript_GoToNavelRockFirstTime:: @ 821E43C closemessage - call LilycoveCity_Harbor_EventScript_21E514 + call LilycoveCity_Harbor_EventScript_BoardFerryWithSailor warp MAP_NAVEL_ROCK_HARBOR, 255, 8, 4 waitstate release end -LilycoveCity_Harbor_EventScript_21E44D:: @ 821E44D - msgbox LilycoveCity_Harbor_Text_2A68D2, MSGBOX_DEFAULT +LilycoveCity_Harbor_EventScript_MultipleEventTicketsFirstTime:: @ 821E44D + msgbox EventTicket_Text_ThatPass, MSGBOX_DEFAULT closemessage - call LilycoveCity_Harbor_EventScript_21E4EE - message LilycoveCity_Harbor_Text_2C6BD4 + call LilycoveCity_Harbor_EventScript_GetEventTicketSailor + message EventTicket_Text_OddTicketsWhereTo waitmessage setvar VAR_0x8004, 1 - special sub_80E2548 + special ScriptMenu_CreateLilycoveSSTidalMultichoice waitstate - special sub_80E2878 + special GetLilycoveSSTidalSelection switch VAR_RESULT - case 2, LilycoveCity_Harbor_EventScript_21E30F - case 3, LilycoveCity_Harbor_EventScript_21E43C - case 4, LilycoveCity_Harbor_EventScript_21E33F - case 5, LilycoveCity_Harbor_EventScript_21E40C - case 6, LilycoveCity_Harbor_EventScript_21E4B6 - case 127, LilycoveCity_Harbor_EventScript_21E4B6 + case 2, LilycoveCity_Harbor_EventScript_GoToSouthernIslandFirstTime + case 3, LilycoveCity_Harbor_EventScript_GoToNavelRockFirstTime + case 4, LilycoveCity_Harbor_EventScript_GoToBirthIslandFirstTime + case 5, LilycoveCity_Harbor_EventScript_GoToFarawayIslandFirstTime + case 6, LilycoveCity_Harbor_EventScript_ExitFirstTimeTicketSailSelect + case MULTI_B_PRESSED, LilycoveCity_Harbor_EventScript_ExitFirstTimeTicketSailSelect release end -LilycoveCity_Harbor_EventScript_21E4B6:: @ 821E4B6 - msgbox LilycoveCity_Harbor_Text_2A6A82, MSGBOX_DEFAULT +LilycoveCity_Harbor_EventScript_ExitFirstTimeTicketSailSelect:: @ 821E4B6 + msgbox EventTicket_Text_AsYouLike, MSGBOX_DEFAULT closemessage applymovement 4, Common_Movement_WalkInPlaceUp waitmovement 0 @@ -337,11 +338,11 @@ LilycoveCity_Harbor_EventScript_21E4B6:: @ 821E4B6 waitmovement 0 showobjectat 1, MAP_LILYCOVE_CITY_HARBOR delay 30 - msgbox LilycoveCity_Harbor_Text_21E842, MSGBOX_DEFAULT + msgbox LilycoveCity_Harbor_Text_SailAnotherTime, MSGBOX_DEFAULT release end -LilycoveCity_Harbor_EventScript_21E4EE:: @ 821E4EE +LilycoveCity_Harbor_EventScript_GetEventTicketSailor:: @ 821E4EE applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceUp waitmovement 0 delay 30 @@ -353,194 +354,198 @@ LilycoveCity_Harbor_EventScript_21E4EE:: @ 821E4EE waitmovement 0 return -LilycoveCity_Harbor_EventScript_21E514:: @ 821E514 +LilycoveCity_Harbor_EventScript_BoardFerryWithSailor:: @ 821E514 applymovement 4, Common_Movement_WalkInPlaceUp waitmovement 0 delay 30 removeobject 4 - compare VAR_FACING, 2 - call_if_eq LilycoveCity_Harbor_EventScript_21E61B - compare VAR_FACING, 4 - call_if_eq LilycoveCity_Harbor_EventScript_21E610 + compare VAR_FACING, DIR_NORTH + call_if_eq LilycoveCity_Harbor_EventScript_PlayerBoardFerryNorth + compare VAR_FACING, DIR_EAST + call_if_eq LilycoveCity_Harbor_EventScript_PlayerBoardFerryEast delay 30 hideobjectat EVENT_OBJ_ID_PLAYER, MAP_PETALBURG_CITY setvar VAR_0x8004, 2 - call LilycoveCity_Harbor_EventScript_2721E2 + call Common_EventScript_FerryDepart return -LilycoveCity_Harbor_EventScript_21E54D:: @ 821E54D - msgbox LilycoveCity_Harbor_Text_21E6F1, MSGBOX_DEFAULT +LilycoveCity_Harbor_EventScript_FerryUnavailable:: @ 821E54D + msgbox LilycoveCity_Harbor_Text_FerryUnavailable, MSGBOX_DEFAULT release end -LilycoveCity_Harbor_EventScript_21E557:: @ 821E557 - msgbox LilycoveCity_Harbor_Text_21E758, MSGBOX_DEFAULT - message LilycoveCity_Harbor_Text_21E7ED +LilycoveCity_Harbor_EventScript_NoEventTickets:: @ 821E557 + msgbox LilycoveCity_Harbor_Text_MayISeeYourTicket, MSGBOX_DEFAULT + message LilycoveCity_Harbor_Text_FlashTicketWhereTo waitmessage - goto LilycoveCity_Harbor_EventScript_21E09F + goto LilycoveCity_Harbor_EventScript_FerryRegularLocationSelect end -LilycoveCity_Harbor_EventScript_21E56B:: @ 821E56B - msgbox LilycoveCity_Harbor_Text_21E792, MSGBOX_DEFAULT +@ Unused +LilycoveCity_Harbor_EventScript_NoTicket:: @ 821E56B + msgbox LilycoveCity_Harbor_Text_NoTicket, MSGBOX_DEFAULT release end -LilycoveCity_Harbor_EventScript_21E575:: @ 821E575 - msgbox LilycoveCity_Harbor_Text_21E864, MSGBOX_YESNO +@ Unused +LilycoveCity_Harbor_EventScript_GoToSlateportUnused:: @ 821E575 + msgbox LilycoveCity_Harbor_Text_SlateportItIs, MSGBOX_YESNO compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_Harbor_EventScript_21E5C0 + goto_if_eq LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind setvar VAR_PORTHOLE_STATE, 5 - call LilycoveCity_Harbor_EventScript_21E5CC + call LilycoveCity_Harbor_EventScript_BoardFerry warp MAP_SS_TIDAL_CORRIDOR, 255, 1, 10 waitstate release end -LilycoveCity_Harbor_EventScript_21E59D:: @ 821E59D - msgbox LilycoveCity_Harbor_Text_21E880, MSGBOX_YESNO +@ Unused +LilycoveCity_Harbor_EventScript_GoToBattleFrontierUnused:: @ 821E59D + msgbox LilycoveCity_Harbor_Text_BattleFrontierItIs, MSGBOX_YESNO compare VAR_RESULT, 0 - goto_if_eq LilycoveCity_Harbor_EventScript_21E5C0 - call LilycoveCity_Harbor_EventScript_21E5CC + goto_if_eq LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind + call LilycoveCity_Harbor_EventScript_BoardFerry warp MAP_BATTLE_FRONTIER_OUTSIDE_WEST, 255, 19, 67 waitstate release end -LilycoveCity_Harbor_EventScript_21E5C0:: @ 821E5C0 - message LilycoveCity_Harbor_Text_21E8CC +LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind:: @ 821E5C0 + message LilycoveCity_Harbor_Text_WhereWouldYouLikeToGo waitmessage - goto LilycoveCity_Harbor_EventScript_21E09F + goto LilycoveCity_Harbor_EventScript_FerryRegularLocationSelect end -LilycoveCity_Harbor_EventScript_21E5CC:: @ 821E5CC - msgbox LilycoveCity_Harbor_Text_21E89D, MSGBOX_DEFAULT +LilycoveCity_Harbor_EventScript_BoardFerry:: @ 821E5CC + msgbox LilycoveCity_Harbor_Text_PleaseBoard, MSGBOX_DEFAULT closemessage applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceUp waitmovement 0 delay 30 hideobjectat VAR_LAST_TALKED, MAP_LILYCOVE_CITY_HARBOR - compare VAR_FACING, 2 - call_if_eq LilycoveCity_Harbor_EventScript_21E61B - compare VAR_FACING, 4 - call_if_eq LilycoveCity_Harbor_EventScript_21E610 + compare VAR_FACING, DIR_NORTH + call_if_eq LilycoveCity_Harbor_EventScript_PlayerBoardFerryNorth + compare VAR_FACING, DIR_EAST + call_if_eq LilycoveCity_Harbor_EventScript_PlayerBoardFerryEast delay 30 hideobjectat EVENT_OBJ_ID_PLAYER, MAP_PETALBURG_CITY setvar VAR_0x8004, 2 - call LilycoveCity_Harbor_EventScript_2721E2 + call Common_EventScript_FerryDepart return -LilycoveCity_Harbor_EventScript_21E610:: @ 821E610 - applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_21E630 +LilycoveCity_Harbor_EventScript_PlayerBoardFerryEast:: @ 821E610 + applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_PlayerBoardFerryEast waitmovement 0 return -LilycoveCity_Harbor_EventScript_21E61B:: @ 821E61B - applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_21E633 +LilycoveCity_Harbor_EventScript_PlayerBoardFerryNorth:: @ 821E61B + applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_PlayerBoardFerryNorth waitmovement 0 return -LilycoveCity_Harbor_EventScript_21E626:: @ 821E626 - msgbox LilycoveCity_Harbor_Text_21E842, MSGBOX_DEFAULT +LilycoveCity_Harbor_EventScript_ExitSailSelect:: @ 821E626 + msgbox LilycoveCity_Harbor_Text_SailAnotherTime, MSGBOX_DEFAULT release end -LilycoveCity_Harbor_Movement_21E630: @ 821E630 +LilycoveCity_Harbor_Movement_PlayerBoardFerryEast: @ 821E630 walk_right walk_in_place_fastest_up step_end -LilycoveCity_Harbor_Movement_21E633: @ 821E633 +LilycoveCity_Harbor_Movement_PlayerBoardFerryNorth: @ 821E633 walk_up step_end +@ Unused LilycoveCity_Harbor_Movement_21E635: @ 821E635 walk_up step_end -LilycoveCity_Harbor_EventScript_21E637:: @ 821E637 +LilycoveCity_Harbor_EventScript_Sailor:: @ 821E637 lock faceplayer - goto_if_set FLAG_SYS_GAME_CLEAR, LilycoveCity_Harbor_EventScript_21E64C - msgbox LilycoveCity_Harbor_Text_21E8EE, MSGBOX_DEFAULT + goto_if_set FLAG_SYS_GAME_CLEAR, LilycoveCity_Harbor_EventScript_SailorFerryAvailable + msgbox LilycoveCity_Harbor_Text_SailorFerryUnavailable, MSGBOX_DEFAULT release end -LilycoveCity_Harbor_EventScript_21E64C:: @ 821E64C - msgbox LilycoveCity_Harbor_Text_21E976, MSGBOX_DEFAULT +LilycoveCity_Harbor_EventScript_SailorFerryAvailable:: @ 821E64C + msgbox LilycoveCity_Harbor_Text_SailorFerryAvailable, MSGBOX_DEFAULT release end -LilycoveCity_Harbor_EventScript_21E656:: @ 821E656 - applymovement 4, LilycoveCity_Harbor_Movement_21E66C +LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayNorth:: @ 821E656 + applymovement 4, LilycoveCity_Harbor_Movement_SailorOutOfWayNorth waitmovement 0 return -LilycoveCity_Harbor_EventScript_21E661:: @ 821E661 - applymovement 4, LilycoveCity_Harbor_Movement_21E671 +LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayEast:: @ 821E661 + applymovement 4, LilycoveCity_Harbor_Movement_SailorOutOfWayEast waitmovement 0 return -LilycoveCity_Harbor_Movement_21E66C: @ 821E66C +LilycoveCity_Harbor_Movement_SailorOutOfWayNorth: @ 821E66C walk_in_place_fastest_right lock_facing_direction walk_left unlock_facing_direction step_end -LilycoveCity_Harbor_Movement_21E671: @ 821E671 +LilycoveCity_Harbor_Movement_SailorOutOfWayEast: @ 821E671 lock_facing_direction walk_down unlock_facing_direction step_end -LilycoveCity_Harbor_EventScript_21E675:: @ 821E675 +LilycoveCity_Harbor_EventScript_BrineyFaceSailorNorth:: @ 821E675 applymovement 5, Common_Movement_WalkInPlaceLeft waitmovement 0 return -LilycoveCity_Harbor_EventScript_21E680:: @ 821E680 +LilycoveCity_Harbor_EventScript_BrineyFaceSailorEast:: @ 821E680 applymovement 5, Common_Movement_WalkInPlaceDown waitmovement 0 return -LilycoveCity_Harbor_EventScript_21E68B:: @ 821E68B +LilycoveCity_Harbor_EventScript_BrineyFacePlayerNorth:: @ 821E68B applymovement 5, Common_Movement_WalkInPlaceDown waitmovement 0 return -LilycoveCity_Harbor_EventScript_21E696:: @ 821E696 +LilycoveCity_Harbor_EventScript_BrineyFacePlayerEast:: @ 821E696 applymovement 5, Common_Movement_WalkInPlaceLeft waitmovement 0 return -LilycoveCity_Harbor_EventScript_21E6A1:: @ 821E6A1 - applymovement 5, LilycoveCity_Harbor_Movement_21E6D3 - applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_21E6D7 - applymovement 4, LilycoveCity_Harbor_Movement_21E6DC +LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorNorth:: @ 821E6A1 + applymovement 5, LilycoveCity_Harbor_Movement_BrineyBoardFerry + applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_PlayerBoardWithBrineyNorth + applymovement 4, LilycoveCity_Harbor_Movement_SailorBoardWithBrineyNorth waitmovement 0 return -LilycoveCity_Harbor_EventScript_21E6BA:: @ 821E6BA - applymovement 5, LilycoveCity_Harbor_Movement_21E6D3 - applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_21E6E4 - applymovement 4, LilycoveCity_Harbor_Movement_21E6EA +LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorEast:: @ 821E6BA + applymovement 5, LilycoveCity_Harbor_Movement_BrineyBoardFerry + applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_PlayerBoardWithBrineyEast + applymovement 4, LilycoveCity_Harbor_Movement_SailorBoardWithBrineyEast waitmovement 0 return -LilycoveCity_Harbor_Movement_21E6D3: @ 821E6D3 +LilycoveCity_Harbor_Movement_BrineyBoardFerry: @ 821E6D3 walk_in_place_fastest_up delay_8 set_invisible step_end -LilycoveCity_Harbor_Movement_21E6D7: @ 821E6D7 +LilycoveCity_Harbor_Movement_PlayerBoardWithBrineyNorth: @ 821E6D7 delay_16 walk_up delay_16 set_invisible step_end -LilycoveCity_Harbor_Movement_21E6DC: @ 821E6DC +LilycoveCity_Harbor_Movement_SailorBoardWithBrineyNorth: @ 821E6DC delay_16 delay_16 delay_16 @@ -550,7 +555,7 @@ LilycoveCity_Harbor_Movement_21E6DC: @ 821E6DC set_invisible step_end -LilycoveCity_Harbor_Movement_21E6E4: @ 821E6E4 +LilycoveCity_Harbor_Movement_PlayerBoardWithBrineyEast: @ 821E6E4 delay_16 walk_right walk_in_place_fastest_up @@ -558,7 +563,7 @@ LilycoveCity_Harbor_Movement_21E6E4: @ 821E6E4 set_invisible step_end -LilycoveCity_Harbor_Movement_21E6EA: @ 821E6EA +LilycoveCity_Harbor_Movement_SailorBoardWithBrineyEast: @ 821E6EA delay_16 delay_16 delay_16 @@ -567,51 +572,50 @@ LilycoveCity_Harbor_Movement_21E6EA: @ 821E6EA set_invisible step_end -LilycoveCity_Harbor_Text_21E6F1: @ 821E6F1 +LilycoveCity_Harbor_Text_FerryUnavailable: @ 821E6F1 .string "I beg your pardon?\n" .string "You're looking for a ship?\p" .string "I'm sorry, the ferry service isn't\n" .string "available at present…$" -LilycoveCity_Harbor_Text_21E758: @ 821E758 +LilycoveCity_Harbor_Text_MayISeeYourTicket: @ 821E758 .string "Hello, are you here for the ferry?\n" .string "May I see your TICKET?$" - -LilycoveCity_Harbor_Text_21E792: @ 821E792 +LilycoveCity_Harbor_Text_NoTicket: @ 821E792 .string "{PLAYER} doesn't have the TICKET…\p" .string "I'm terribly sorry.\p" .string "You must have a TICKET to board\n" .string "the ferry.$" -LilycoveCity_Harbor_Text_21E7ED: @ 821E7ED +LilycoveCity_Harbor_Text_FlashTicketWhereTo: @ 821E7ED .string "{PLAYER} flashed the TICKET.\p" .string "Perfect! That's all you need!\p" .string "And where would you like to go?$" -LilycoveCity_Harbor_Text_21E842: @ 821E842 +LilycoveCity_Harbor_Text_SailAnotherTime: @ 821E842 .string "Please sail with us another time!$" -LilycoveCity_Harbor_Text_21E864: @ 821E864 +LilycoveCity_Harbor_Text_SlateportItIs: @ 821E864 .string "SLATEPORT CITY it is, then!$" -LilycoveCity_Harbor_Text_21E880: @ 821E880 +LilycoveCity_Harbor_Text_BattleFrontierItIs: @ 821E880 .string "BATTLE FRONTIER it is, then!$" -LilycoveCity_Harbor_Text_21E89D: @ 821E89D +LilycoveCity_Harbor_Text_PleaseBoard: @ 821E89D .string "Please board the ferry and wait for\n" .string "departure.$" -LilycoveCity_Harbor_Text_21E8CC: @ 821E8CC +LilycoveCity_Harbor_Text_WhereWouldYouLikeToGo: @ 821E8CC .string "Then, where would you like to go?$" -LilycoveCity_Harbor_Text_21E8EE: @ 821E8EE +LilycoveCity_Harbor_Text_SailorFerryUnavailable: @ 821E8EE .string "Until they finish making the ferry,\n" .string "we sailors have nothing to do…\p" .string "I wish they'd get a move on, the folks\n" .string "at the SHIPYARD in SLATEPORT.$" -LilycoveCity_Harbor_Text_21E976: @ 821E976 +LilycoveCity_Harbor_Text_SailorFerryAvailable: @ 821E976 .string "The ferry S.S. TIDAL is finally in\n" .string "operation.\p" .string "The folks at the SHIPYARD in SLATEPORT\n" diff --git a/data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc b/data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc index 8f2cdde28..8ac18ba85 100644 --- a/data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc +++ b/data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc @@ -10,7 +10,7 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_218CC2:: @ 8218CC2 applymovement 2, Common_Movement_FacePlayer message LilycoveCity_LilycoveMuseum_1F_Text_218EBC waitmessage - multichoice 20, 8, 16, 1 + multichoice 20, 8, MULTI_VIEWED_PAINTINGS, 1 compare VAR_RESULT, 0 goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_218CF5 compare VAR_RESULT, 1 diff --git a/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc b/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc index add7ef22f..71aead3e4 100644 --- a/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc +++ b/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc @@ -118,7 +118,7 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_2198C3:: @ 82198C3 LilycoveCity_LilycoveMuseum_2F_EventScript_2198EA:: @ 82198EA applymovement 1, Common_Movement_FacePlayer msgbox LilycoveCity_LilycoveMuseum_2F_Text_219EC5, MSGBOX_DEFAULT - givedecoration_std 44 + givedecoration_std DECOR_GLASS_ORNAMENT compare VAR_RESULT, 0 goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_219911 setflag FLAG_RECEIVED_GLASS_ORNAMENT diff --git a/data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc b/data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc index 236eb3d23..c2e1deb5d 100644 --- a/data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc +++ b/data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc @@ -9,7 +9,7 @@ LilycoveCity_PokemonCenter_1F_OnTransition: @ 821C5BD end LilycoveCity_PokemonCenter_1F_EventScript_21C5C6:: @ 821C5C6 - special sub_818D9C0 + special SetLilycoveLadyGfx compare VAR_RESULT, 0 goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_21C5E0 compare VAR_RESULT, 1 diff --git a/data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc b/data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc index 62fdd3427..d9ba545fb 100644 --- a/data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc +++ b/data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc @@ -558,13 +558,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_21CE4D:: @ 821CE4D special BufferStreakTrainerText message LilycoveCity_PokemonTrainerFanClub_Text_281C95 waitmessage - setvar VAR_0x8004, 2 - special sub_813A128 + setvar VAR_0x8004, SCROLL_MULTI_POKEMON_FAN_CLUB_RATER + special ShowScrollableMultichoice waitstate setvar VAR_0x8004, 8 switch VAR_RESULT case 11, LilycoveCity_PokemonTrainerFanClub_EventScript_21CE9F - case 127, LilycoveCity_PokemonTrainerFanClub_EventScript_21CE9F + case MULTI_B_PRESSED, LilycoveCity_PokemonTrainerFanClub_EventScript_21CE9F setvar VAR_0x8004, 8 special BufferStreakTrainerText copyvar VAR_0x8006, VAR_0x800A diff --git a/data/maps/LinkContestRoom1/scripts.inc b/data/maps/LinkContestRoom1/scripts.inc index e0cd24eff..9fb83a7a9 100644 --- a/data/maps/LinkContestRoom1/scripts.inc +++ b/data/maps/LinkContestRoom1/scripts.inc @@ -172,131 +172,131 @@ LinkContestRoom1_EventScript_23B8F8:: @ 823B8F8 end LinkContestRoom1_EventScript_23BA6B:: @ 823BA6B - setvar VAR_TEMP_1, 5 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_NINJA_BOY return LinkContestRoom1_EventScript_23BA71:: @ 823BA71 - setvar VAR_TEMP_1, 6 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_TWIN return LinkContestRoom1_EventScript_23BA77:: @ 823BA77 - setvar VAR_TEMP_1, 7 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_BOY_1 return LinkContestRoom1_EventScript_23BA7D:: @ 823BA7D - setvar VAR_TEMP_1, 8 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_GIRL_1 return LinkContestRoom1_EventScript_23BA83:: @ 823BA83 - setvar VAR_TEMP_1, 10 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_GIRL_2 return LinkContestRoom1_EventScript_23BA89:: @ 823BA89 - setvar VAR_TEMP_1, 11 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_LITTLE_BOY return LinkContestRoom1_EventScript_23BA8F:: @ 823BA8F - setvar VAR_TEMP_1, 12 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_LITTLE_GIRL return LinkContestRoom1_EventScript_23BA95:: @ 823BA95 - setvar VAR_TEMP_1, 13 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_BOY_3 return LinkContestRoom1_EventScript_23BA9B:: @ 823BA9B - setvar VAR_TEMP_1, 14 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_GIRL_3 return LinkContestRoom1_EventScript_23BAA1:: @ 823BAA1 - setvar VAR_TEMP_1, 15 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_RICH_BOY return LinkContestRoom1_EventScript_23BAA7:: @ 823BAA7 - setvar VAR_TEMP_1, 17 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_FAT_MAN return LinkContestRoom1_EventScript_23BAAD:: @ 823BAAD - setvar VAR_TEMP_1, 18 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_POKEFAN_F return LinkContestRoom1_EventScript_23BAB3:: @ 823BAB3 - setvar VAR_TEMP_1, 19 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_MAN_1 return LinkContestRoom1_EventScript_23BAB9:: @ 823BAB9 - setvar VAR_TEMP_1, 20 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_WOMAN_2 return LinkContestRoom1_EventScript_23BABF:: @ 823BABF - setvar VAR_TEMP_1, 21 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_EXPERT_M return LinkContestRoom1_EventScript_23BAC5:: @ 823BAC5 - setvar VAR_TEMP_1, 22 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_EXPERT_F return LinkContestRoom1_EventScript_23BACB:: @ 823BACB - setvar VAR_TEMP_1, 25 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_POKEFAN_M return LinkContestRoom1_EventScript_23BAD1:: @ 823BAD1 - setvar VAR_TEMP_1, 26 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_WOMAN_4 return LinkContestRoom1_EventScript_23BAD7:: @ 823BAD7 - setvar VAR_TEMP_1, 27 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_COOK return LinkContestRoom1_EventScript_23BADD:: @ 823BADD - setvar VAR_TEMP_1, 47 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_LASS return LinkContestRoom1_EventScript_23BAE3:: @ 823BAE3 - setvar VAR_TEMP_1, 30 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_OLD_WOMAN return LinkContestRoom1_EventScript_23BAE9:: @ 823BAE9 - setvar VAR_TEMP_1, 31 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_CAMPER return LinkContestRoom1_EventScript_23BAEF:: @ 823BAEF - setvar VAR_TEMP_1, 32 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_PICNICKER return LinkContestRoom1_EventScript_23BAF5:: @ 823BAF5 - setvar VAR_TEMP_1, 33 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_MAN_3 return LinkContestRoom1_EventScript_23BAFB:: @ 823BAFB - setvar VAR_TEMP_1, 34 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_WOMAN_5 return LinkContestRoom1_EventScript_23BB01:: @ 823BB01 - setvar VAR_TEMP_1, 35 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_YOUNGSTER return LinkContestRoom1_EventScript_23BB07:: @ 823BB07 - setvar VAR_TEMP_1, 36 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_BUG_CATCHER return LinkContestRoom1_EventScript_23BB0D:: @ 823BB0D - setvar VAR_TEMP_1, 37 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_PSYCHIC_M return LinkContestRoom1_EventScript_23BB13:: @ 823BB13 - setvar VAR_TEMP_1, 38 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_SCHOOL_KID_M return LinkContestRoom1_EventScript_23BB19:: @ 823BB19 - setvar VAR_TEMP_1, 44 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_BLACK_BELT return LinkContestRoom1_EventScript_23BB1F:: @ 823BB1F - setvar VAR_TEMP_1, 45 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_BEAUTY return LinkContestRoom1_EventScript_23BB25:: @ 823BB25 - setvar VAR_TEMP_1, 46 + setvar VAR_TEMP_1, EVENT_OBJ_GFX_SCIENTIST_1 return LinkContestRoom1_EventScript_23BB2B:: @ 823BB2B @@ -312,97 +312,97 @@ LinkContestRoom1_EventScript_23BB2B:: @ 823BB2B return LinkContestRoom1_EventScript_23BB78:: @ 823BB78 - createvobject EVENT_OBJ_GFX_NINJA_BOY, 20, 3, 2, 3, 1 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, 1 + createvobject EVENT_OBJ_GFX_NINJA_BOY, 20, 3, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, DIR_SOUTH return LinkContestRoom1_EventScript_23BB8B:: @ 823BB8B - createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, 4 - createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, 4 - createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, 4 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 3, 2, 8, 3, 4 - createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, 3 - createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, 3 - createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, 3 - createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 13, 12, 8, 3, 3 - createvobject EVENT_OBJ_GFX_LASS, 20, 3, 2, 3, 1 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, 1 + createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 3, 2, 8, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 13, 12, 8, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_LASS, 20, 3, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, DIR_SOUTH return LinkContestRoom1_EventScript_23BBE6:: @ 823BBE6 - createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, 4 - createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, 4 - createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, 4 - createvobject EVENT_OBJ_GFX_GENTLEMAN, 3, 2, 8, 3, 4 - createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, 3 - createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, 3 - createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, 3 - createvobject EVENT_OBJ_GFX_BEAUTY, 13, 12, 8, 3, 3 - createvobject EVENT_OBJ_GFX_EXPERT_F, 20, 3, 2, 3, 1 - createvobject EVENT_OBJ_GFX_MAN_2, 20, 6, 2, 3, 1 - createvobject EVENT_OBJ_GFX_WOMAN_5, 20, 7, 2, 3, 1 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 8, 2, 3, 1 - createvobject EVENT_OBJ_GFX_GENTLEMAN, 24, 11, 2, 3, 1 - createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 3, 9, 3, 2 - createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 4, 9, 3, 2 - createvobject EVENT_OBJ_GFX_FAT_MAN, 27, 5, 9, 3, 2 - createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 9, 9, 3, 2 - createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 10, 9, 3, 2 - createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 11, 9, 3, 2 + createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_GENTLEMAN, 3, 2, 8, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_BEAUTY, 13, 12, 8, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_EXPERT_F, 20, 3, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_MAN_2, 20, 6, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_WOMAN_5, 20, 7, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 8, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_GENTLEMAN, 24, 11, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 3, 9, 3, DIR_NORTH + createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 4, 9, 3, DIR_NORTH + createvobject EVENT_OBJ_GFX_FAT_MAN, 27, 5, 9, 3, DIR_NORTH + createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 9, 9, 3, DIR_NORTH + createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 10, 9, 3, DIR_NORTH + createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 11, 9, 3, DIR_NORTH return LinkContestRoom1_EventScript_23BC92:: @ 823BC92 - createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, 4 - createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, 4 - createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, 4 - createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 3, 2, 8, 3, 4 - createvobject EVENT_OBJ_GFX_MANIAC, 4, 1, 3, 3, 4 - createvobject EVENT_OBJ_GFX_WOMAN_5, 6, 1, 5, 3, 4 - createvobject EVENT_OBJ_GFX_WOMAN_4, 7, 1, 6, 3, 4 - createvobject EVENT_OBJ_GFX_GENTLEMAN, 9, 1, 8, 3, 4 - createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, 3 - createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, 3 - createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, 3 - createvobject EVENT_OBJ_GFX_BEAUTY, 13, 12, 8, 3, 3 - createvobject EVENT_OBJ_GFX_FISHERMAN, 14, 13, 3, 3, 3 - createvobject EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F, 15, 13, 4, 3, 3 - createvobject EVENT_OBJ_GFX_MAN_4, 17, 13, 6, 3, 3 - createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 18, 13, 7, 3, 3 - createvobject EVENT_OBJ_GFX_DEVON_EMPLOYEE, 19, 13, 8, 3, 3 - createvobject EVENT_OBJ_GFX_POKEFAN_M, 20, 3, 2, 3, 1 - createvobject EVENT_OBJ_GFX_CAMPER, 21, 6, 2, 3, 1 - createvobject EVENT_OBJ_GFX_MAN_3, 22, 7, 2, 3, 1 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, 1 - createvobject EVENT_OBJ_GFX_SAILOR, 25, 3, 9, 3, 2 - createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 4, 9, 3, 2 - createvobject EVENT_OBJ_GFX_GENTLEMAN, 27, 5, 9, 3, 2 - createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 9, 9, 3, 2 - createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 10, 9, 3, 2 - createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 11, 9, 3, 2 + createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 3, 2, 8, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_MANIAC, 4, 1, 3, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_WOMAN_5, 6, 1, 5, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_WOMAN_4, 7, 1, 6, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_GENTLEMAN, 9, 1, 8, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_BEAUTY, 13, 12, 8, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_FISHERMAN, 14, 13, 3, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F, 15, 13, 4, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_MAN_4, 17, 13, 6, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 18, 13, 7, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_DEVON_EMPLOYEE, 19, 13, 8, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_POKEFAN_M, 20, 3, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_CAMPER, 21, 6, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_MAN_3, 22, 7, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SAILOR, 25, 3, 9, 3, DIR_NORTH + createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 4, 9, 3, DIR_NORTH + createvobject EVENT_OBJ_GFX_GENTLEMAN, 27, 5, 9, 3, DIR_NORTH + createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 9, 9, 3, DIR_NORTH + createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 10, 9, 3, DIR_NORTH + createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 11, 9, 3, DIR_NORTH return LinkContestRoom1_EventScript_23BD86:: @ 823BD86 - createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, 4 - createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, 4 - createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, 4 - createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 3, 2, 8, 3, 4 - createvobject EVENT_OBJ_GFX_MANIAC, 4, 1, 3, 3, 4 - createvobject EVENT_OBJ_GFX_WOMAN_5, 6, 1, 5, 3, 4 - createvobject EVENT_OBJ_GFX_WOMAN_4, 7, 1, 6, 3, 4 - createvobject EVENT_OBJ_GFX_GENTLEMAN, 9, 1, 8, 3, 4 - createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, 3 - createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, 3 - createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, 3 - createvobject EVENT_OBJ_GFX_BEAUTY, 13, 12, 8, 3, 3 - createvobject EVENT_OBJ_GFX_FISHERMAN, 14, 13, 3, 3, 3 - createvobject EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F, 15, 13, 4, 3, 3 - createvobject EVENT_OBJ_GFX_MAN_4, 17, 13, 6, 3, 3 - createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 18, 13, 7, 3, 3 - createvobject EVENT_OBJ_GFX_DEVON_EMPLOYEE, 19, 13, 8, 3, 3 - createvobject EVENT_OBJ_GFX_POKEFAN_M, 20, 3, 2, 3, 1 - createvobject EVENT_OBJ_GFX_CAMPER, 21, 6, 2, 3, 1 - createvobject EVENT_OBJ_GFX_MAN_3, 22, 7, 2, 3, 1 - createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, 1 + createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 3, 2, 8, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_MANIAC, 4, 1, 3, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_WOMAN_5, 6, 1, 5, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_WOMAN_4, 7, 1, 6, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_GENTLEMAN, 9, 1, 8, 3, DIR_EAST + createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_BEAUTY, 13, 12, 8, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_FISHERMAN, 14, 13, 3, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F, 15, 13, 4, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_MAN_4, 17, 13, 6, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 18, 13, 7, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_DEVON_EMPLOYEE, 19, 13, 8, 3, DIR_WEST + createvobject EVENT_OBJ_GFX_POKEFAN_M, 20, 3, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_CAMPER, 21, 6, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_MAN_3, 22, 7, 2, 3, DIR_SOUTH + createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, DIR_SOUTH return LinkContestRoom1_EventScript_23BE44:: @ 823BE44 diff --git a/data/maps/LittlerootTown/scripts.inc b/data/maps/LittlerootTown/scripts.inc index 8f10f2b4d..d42f277eb 100644 --- a/data/maps/LittlerootTown/scripts.inc +++ b/data/maps/LittlerootTown/scripts.inc @@ -208,7 +208,7 @@ LittlerootTown_EventScript_1E7FEC:: @ 81E7FEC addobject 8 addobject 7 checkplayergender - compare VAR_RESULT, 0 + compare VAR_RESULT, MALE goto_if_eq LittlerootTown_EventScript_1E8004 goto LittlerootTown_EventScript_1E8013 end diff --git a/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc b/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc index 17cca3ea9..397bdfb8f 100644 --- a/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc +++ b/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc @@ -17,7 +17,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1F777A:: @ 81F777A LittlerootTown_BrendansHouse_1F_EventScript_1F778D:: @ 81F778D checkplayergender - compare VAR_RESULT, 0 + compare VAR_RESULT, MALE goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1F779A return diff --git a/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc b/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc index 3bb088ccf..394db3e22 100644 --- a/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc +++ b/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc @@ -22,7 +22,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1F841A:: @ 81F841A LittlerootTown_BrendansHouse_2F_EventScript_1F8433:: @ 81F8433 checkplayergender - compare VAR_RESULT, 0 + compare VAR_RESULT, MALE goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_1F8456 compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 goto_if_ge LittlerootTown_BrendansHouse_2F_EventScript_1F9309 @@ -35,7 +35,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1F8456:: @ 81F8456 LittlerootTown_BrendansHouse_2F_EventScript_1F8457:: @ 81F8457 checkplayergender - compare VAR_RESULT, 1 + compare VAR_RESULT, FEMALE goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_1F8464 return @@ -49,7 +49,7 @@ LittlerootTown_BrendansHouse_2F_MapScript2_1F846A: @ 81F846A LittlerootTown_BrendansHouse_2F_EventScript_1F8474:: @ 81F8474 checkplayergender - compare VAR_RESULT, 0 + compare VAR_RESULT, MALE goto_if_eq EventScript_275D0C end diff --git a/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc b/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc index d983c9e64..510f8c249 100644 --- a/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc +++ b/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc @@ -17,7 +17,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1F88CA:: @ 81F88CA LittlerootTown_MaysHouse_1F_EventScript_1F88DD:: @ 81F88DD checkplayergender - compare VAR_RESULT, 1 + compare VAR_RESULT, FEMALE goto_if_eq LittlerootTown_MaysHouse_1F_EventScript_1F88EA return diff --git a/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc b/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc index dde6df71d..13fefa5a3 100644 --- a/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc +++ b/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc @@ -22,7 +22,7 @@ LittlerootTown_MaysHouse_2F_EventScript_1F92CD:: @ 81F92CD LittlerootTown_MaysHouse_2F_EventScript_1F92E6:: @ 81F92E6 checkplayergender - compare VAR_RESULT, 1 + compare VAR_RESULT, FEMALE goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_1F9309 compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 goto_if_ge LittlerootTown_MaysHouse_2F_EventScript_1F9309 @@ -36,7 +36,7 @@ LittlerootTown_MaysHouse_2F_EventScript_1F9309:: @ 81F9309 LittlerootTown_MaysHouse_2F_EventScript_1F930A:: @ 81F930A checkplayergender - compare VAR_RESULT, 0 + compare VAR_RESULT, MALE goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_1F9317 return @@ -50,7 +50,7 @@ LittlerootTown_MaysHouse_2F_MapScript2_1F931D: @ 81F931D LittlerootTown_MaysHouse_2F_EventScript_1F9327:: @ 81F9327 checkplayergender - compare VAR_RESULT, 1 + compare VAR_RESULT, FEMALE goto_if_eq EventScript_275D0C end diff --git a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc index c4f704520..9949df08c 100644 --- a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc +++ b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc @@ -48,18 +48,18 @@ LittlerootTown_ProfessorBirchsLab_MapScript2_1F9D06: @ 81F9D06 .2byte 0 LittlerootTown_ProfessorBirchsLab_EventScript_1F9D40:: @ 81F9D40 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end LittlerootTown_ProfessorBirchsLab_EventScript_1F9D45:: @ 81F9D45 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH addobject 2 addobject 3 - turnobject 3, 2 + turnobject 3, DIR_NORTH setobjectxy 3, 5, 5 - turnobject 2, 1 + turnobject 2, DIR_SOUTH setobjectxy 2, 6, 4 - turnobject 1, 4 + turnobject 1, DIR_EAST setobjectxy 1, 10, 10 end @@ -72,15 +72,15 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1F9D75:: @ 81F9D75 addobject 5 addobject 6 addobject 3 - turnobject 4, 1 + turnobject 4, DIR_SOUTH setobjectxy 4, 8, 4 - turnobject 5, 1 + turnobject 5, DIR_SOUTH setobjectxy 5, 9, 4 - turnobject 6, 1 + turnobject 6, DIR_SOUTH setobjectxy 6, 10, 4 - turnobject 2, 1 + turnobject 2, DIR_SOUTH setobjectxy 2, 6, 4 - turnobject 3, 4 + turnobject 3, DIR_EAST setobjectxy 3, 5, 5 end @@ -335,7 +335,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA061:: @ 81FA061 LittlerootTown_ProfessorBirchsLab_EventScript_1FA06C:: @ 81FA06C bufferspeciesname 0, SPECIES_CYNDAQUIL setvar VAR_TEMP_1, SPECIES_CYNDAQUIL - givemon SPECIES_CYNDAQUIL, 5, ITEM_NONE, 0x0, 0x0, 0 + givemon SPECIES_CYNDAQUIL, 5, ITEM_NONE compare VAR_RESULT, 0 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1FA0A1 compare VAR_RESULT, 1 @@ -380,7 +380,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA0FD:: @ 81FA0FD LittlerootTown_ProfessorBirchsLab_EventScript_1FA10D:: @ 81FA10D bufferspeciesname 0, SPECIES_TOTODILE setvar VAR_TEMP_1, SPECIES_TOTODILE - givemon SPECIES_TOTODILE, 5, ITEM_NONE, 0x0, 0x0, 0 + givemon SPECIES_TOTODILE, 5, ITEM_NONE compare VAR_RESULT, 0 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1FA142 compare VAR_RESULT, 1 @@ -425,7 +425,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA19E:: @ 81FA19E LittlerootTown_ProfessorBirchsLab_EventScript_1FA1AE:: @ 81FA1AE bufferspeciesname 0, SPECIES_CHIKORITA setvar VAR_TEMP_1, SPECIES_CHIKORITA - givemon SPECIES_CHIKORITA, 5, ITEM_NONE, 0x0, 0x0, 0 + givemon SPECIES_CHIKORITA, 5, ITEM_NONE compare VAR_RESULT, 0 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1FA1E3 compare VAR_RESULT, 1 diff --git a/data/maps/MauvilleCity_BikeShop/scripts.inc b/data/maps/MauvilleCity_BikeShop/scripts.inc index fe6832423..a5b20cf60 100644 --- a/data/maps/MauvilleCity_BikeShop/scripts.inc +++ b/data/maps/MauvilleCity_BikeShop/scripts.inc @@ -25,7 +25,7 @@ MauvilleCity_BikeShop_EventScript_20EBF7:: @ 820EBF7 MauvilleCity_BikeShop_EventScript_20EC16:: @ 820EC16 message MauvilleCity_BikeShop_Text_20EF32 waitmessage - multichoice 21, 8, 12, 1 + multichoice 21, 8, MULTI_BIKE, 1 switch VAR_RESULT case 0, MauvilleCity_BikeShop_EventScript_20EC53 case 1, MauvilleCity_BikeShop_EventScript_20EC6D @@ -112,13 +112,13 @@ MauvilleCity_BikeShop_EventScript_20ED3A:: @ 820ED3A end MauvilleCity_BikeShop_EventScript_20ED46:: @ 820ED46 - multichoice 0, 0, 43, 0 + multichoice 0, 0, MULTI_MACH_BIKE_INFO, 0 switch VAR_RESULT case 0, MauvilleCity_BikeShop_EventScript_20ED88 case 1, MauvilleCity_BikeShop_EventScript_20ED94 case 2, MauvilleCity_BikeShop_EventScript_20EDA0 case 3, MauvilleCity_BikeShop_EventScript_20EDAC - case 127, MauvilleCity_BikeShop_EventScript_20EDAC + case MULTI_B_PRESSED, MauvilleCity_BikeShop_EventScript_20EDAC end MauvilleCity_BikeShop_EventScript_20ED88:: @ 820ED88 @@ -150,13 +150,13 @@ MauvilleCity_BikeShop_EventScript_20EDAE:: @ 820EDAE end MauvilleCity_BikeShop_EventScript_20EDBA:: @ 820EDBA - multichoice 0, 0, 44, 0 + multichoice 0, 0, MULTI_ACRO_BIKE_INFO, 0 switch VAR_RESULT case 0, MauvilleCity_BikeShop_EventScript_20EDFC case 1, MauvilleCity_BikeShop_EventScript_20EE08 case 2, MauvilleCity_BikeShop_EventScript_20EE14 case 3, MauvilleCity_BikeShop_EventScript_20EE20 - case 127, MauvilleCity_BikeShop_EventScript_20EE20 + case MULTI_B_PRESSED, MauvilleCity_BikeShop_EventScript_20EE20 end MauvilleCity_BikeShop_EventScript_20EDFC:: @ 820EDFC diff --git a/data/maps/MauvilleCity_GameCorner/scripts.inc b/data/maps/MauvilleCity_GameCorner/scripts.inc index 88b1ded16..a6ee8ec85 100644 --- a/data/maps/MauvilleCity_GameCorner/scripts.inc +++ b/data/maps/MauvilleCity_GameCorner/scripts.inc @@ -15,7 +15,7 @@ MauvilleCity_GameCorner_EventScript_20FBB9:: @ 820FBB9 goto MauvilleCity_GameCorner_EventScript_20FBE5 MauvilleCity_GameCorner_EventScript_20FBE5:: @ 820FBE5 - multichoicedefault 15, 0, 49, 0, 0 + multichoicedefault 15, 0, MULTI_GAME_CORNER_COINS, 0, 0 switch VAR_RESULT case 0, MauvilleCity_GameCorner_EventScript_20FC33 case 1, MauvilleCity_GameCorner_EventScript_20FC75 @@ -23,7 +23,7 @@ MauvilleCity_GameCorner_EventScript_20FBE5:: @ 820FBE5 end MauvilleCity_GameCorner_EventScript_20FC0C:: @ 820FC0C - multichoicedefault 15, 0, 49, 1, 0 + multichoicedefault 15, 0, MULTI_GAME_CORNER_COINS, 1, 0 switch VAR_RESULT case 0, MauvilleCity_GameCorner_EventScript_20FC33 case 1, MauvilleCity_GameCorner_EventScript_20FC75 @@ -34,13 +34,12 @@ MauvilleCity_GameCorner_EventScript_20FC33:: @ 820FC33 checkcoins VAR_TEMP_1 compare VAR_TEMP_1, 9950 goto_if_ge MauvilleCity_GameCorner_EventScript_20FCE1 - checkmoney 0x3e8, 0 + checkmoney 1000, 0 compare VAR_RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_20FCC1 givecoins 50 - takemoney 0x3e8, 0 + takemoney 1000, 0 updatemoneybox 0, 0 - nop updatecoinsbox 1, 6 playse SE_REGI msgbox MauvilleCity_GameCorner_Text_210529, MSGBOX_DEFAULT @@ -55,13 +54,12 @@ MauvilleCity_GameCorner_EventScript_20FC75:: @ 820FC75 checkcoins VAR_TEMP_1 compare VAR_TEMP_1, 9500 goto_if_ge MauvilleCity_GameCorner_EventScript_20FCE1 - checkmoney 0x2710, 0 + checkmoney 10000, 0 compare VAR_RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_20FCC1 givecoins 500 - takemoney 0x2710, 0 + takemoney 10000, 0 updatemoneybox 0, 0 - nop updatecoinsbox 1, 6 playse SE_REGI msgbox MauvilleCity_GameCorner_Text_210529, MSGBOX_DEFAULT @@ -127,7 +125,7 @@ MauvilleCity_GameCorner_EventScript_20FD20:: @ 820FD20 goto MauvilleCity_GameCorner_EventScript_20FD2B MauvilleCity_GameCorner_EventScript_20FD2B:: @ 820FD2B - multichoice 12, 0, 48, 0 + multichoice 12, 0, MULTI_GAME_CORNER_DOLLS, 0 switch VAR_RESULT case 0, MauvilleCity_GameCorner_EventScript_20FD67 case 1, MauvilleCity_GameCorner_EventScript_20FD75 @@ -138,17 +136,17 @@ MauvilleCity_GameCorner_EventScript_20FD2B:: @ 820FD2B MauvilleCity_GameCorner_EventScript_20FD67:: @ 820FD67 setvar VAR_TEMP_1, 1 - bufferdecorationname 0, 88 + bufferdecorationname 0, DECOR_TREECKO_DOLL goto MauvilleCity_GameCorner_EventScript_20FD91 MauvilleCity_GameCorner_EventScript_20FD75:: @ 820FD75 setvar VAR_TEMP_1, 2 - bufferdecorationname 0, 89 + bufferdecorationname 0, DECOR_TORCHIC_DOLL goto MauvilleCity_GameCorner_EventScript_20FD91 MauvilleCity_GameCorner_EventScript_20FD83:: @ 820FD83 setvar VAR_TEMP_1, 3 - bufferdecorationname 0, 90 + bufferdecorationname 0, DECOR_MUDKIP_DOLL goto MauvilleCity_GameCorner_EventScript_20FD91 MauvilleCity_GameCorner_EventScript_20FD91:: @ 820FD91 @@ -165,12 +163,12 @@ MauvilleCity_GameCorner_EventScript_20FDCB:: @ 820FDCB checkcoins VAR_TEMP_2 compare VAR_TEMP_2, 1000 goto_if_lt MauvilleCity_GameCorner_EventScript_20FE79 - bufferdecorationname 1, 88 - checkdecorspace 88 + bufferdecorationname 1, DECOR_TREECKO_DOLL + checkdecorspace DECOR_TREECKO_DOLL compare VAR_RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_20FE87 takecoins 1000 - givedecoration 88 + givedecoration DECOR_TREECKO_DOLL updatecoinsbox 1, 1 playse SE_REGI msgbox MauvilleCity_GameCorner_Text_210646, MSGBOX_DEFAULT @@ -181,12 +179,12 @@ MauvilleCity_GameCorner_EventScript_20FE05:: @ 820FE05 checkcoins VAR_TEMP_2 compare VAR_TEMP_2, 1000 goto_if_lt MauvilleCity_GameCorner_EventScript_20FE79 - bufferdecorationname 1, 89 - checkdecorspace 89 + bufferdecorationname 1, DECOR_TORCHIC_DOLL + checkdecorspace DECOR_TORCHIC_DOLL compare VAR_RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_20FE87 takecoins 1000 - givedecoration 89 + givedecoration DECOR_TORCHIC_DOLL updatecoinsbox 1, 1 playse SE_REGI msgbox MauvilleCity_GameCorner_Text_210646, MSGBOX_DEFAULT @@ -197,12 +195,12 @@ MauvilleCity_GameCorner_EventScript_20FE3F:: @ 820FE3F checkcoins VAR_TEMP_2 compare VAR_TEMP_2, 1000 goto_if_lt MauvilleCity_GameCorner_EventScript_20FE79 - bufferdecorationname 1, 90 - checkdecorspace 90 + bufferdecorationname 1, DECOR_MUDKIP_DOLL + checkdecorspace DECOR_MUDKIP_DOLL compare VAR_RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_20FE87 takecoins 1000 - givedecoration 90 + givedecoration DECOR_MUDKIP_DOLL updatecoinsbox 1, 1 playse SE_REGI msgbox MauvilleCity_GameCorner_Text_210646, MSGBOX_DEFAULT @@ -248,7 +246,7 @@ MauvilleCity_GameCorner_EventScript_20FECE:: @ 820FECE goto MauvilleCity_GameCorner_EventScript_20FED9 MauvilleCity_GameCorner_EventScript_20FED9:: @ 820FED9 - multichoice 12, 0, 55, 0 + multichoice 12, 0, MULTI_GAME_CORNER_TMS, 0 switch VAR_RESULT case 0, MauvilleCity_GameCorner_EventScript_20FF2B case 1, MauvilleCity_GameCorner_EventScript_20FF3E @@ -290,7 +288,7 @@ MauvilleCity_GameCorner_EventScript_20FF77:: @ 820FF77 goto MauvilleCity_GameCorner_EventScript_20FF8A MauvilleCity_GameCorner_EventScript_20FF8A:: @ 820FF8A - special sub_81398C0 + special BufferTMHMMoveName msgbox MauvilleCity_GameCorner_Text_210629, MSGBOX_YESNO compare VAR_RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_210118 @@ -415,34 +413,34 @@ MauvilleCity_GameCorner_EventScript_210137:: @ 8210137 end MauvilleCity_GameCorner_EventScript_21017C:: @ 821017C - bufferdecorationname 1, 88 - checkdecorspace 88 + bufferdecorationname 1, DECOR_TREECKO_DOLL + checkdecorspace DECOR_TREECKO_DOLL compare VAR_RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_2101FA msgbox MauvilleCity_GameCorner_Text_21079C, MSGBOX_DEFAULT - givedecoration_std 88 + givedecoration_std DECOR_TREECKO_DOLL setflag FLAG_RECEIVED_STARTER_DOLL goto MauvilleCity_GameCorner_EventScript_210213 end MauvilleCity_GameCorner_EventScript_2101A6:: @ 82101A6 - bufferdecorationname 1, 89 - checkdecorspace 89 + bufferdecorationname 1, DECOR_TORCHIC_DOLL + checkdecorspace DECOR_TORCHIC_DOLL compare VAR_RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_2101FA msgbox MauvilleCity_GameCorner_Text_21079C, MSGBOX_DEFAULT - givedecoration_std 89 + givedecoration_std DECOR_TORCHIC_DOLL setflag FLAG_RECEIVED_STARTER_DOLL goto MauvilleCity_GameCorner_EventScript_210213 end MauvilleCity_GameCorner_EventScript_2101D0:: @ 82101D0 - bufferdecorationname 1, 90 - checkdecorspace 90 + bufferdecorationname 1, DECOR_MUDKIP_DOLL + checkdecorspace DECOR_MUDKIP_DOLL compare VAR_RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_2101FA msgbox MauvilleCity_GameCorner_Text_21079C, MSGBOX_DEFAULT - givedecoration_std 90 + givedecoration_std DECOR_MUDKIP_DOLL setflag FLAG_RECEIVED_STARTER_DOLL goto MauvilleCity_GameCorner_EventScript_210213 end diff --git a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc index b129e137e..144113d72 100644 --- a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc +++ b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc @@ -236,7 +236,7 @@ MossdeepCity_SpaceCenter_1F_EventScript_22321F:: @ 822321F msgbox MossdeepCity_SpaceCenter_1F_Text_223B90, MSGBOX_DEFAULT trainerbattle_no_intro TRAINER_GRUNT_23, MossdeepCity_SpaceCenter_1F_Text_223BC2 setflag FLAG_DEFEATED_GRUNT_SPACE_CENTER_1F - moveobjectoffscreen 9 + copyobjectxytoperm 9 switch VAR_FACING case 3, MossdeepCity_SpaceCenter_1F_EventScript_223278 case 3, MossdeepCity_SpaceCenter_1F_EventScript_223289 diff --git a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc index 11abafa0c..903dc8136 100644 --- a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc +++ b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc @@ -70,9 +70,9 @@ MossdeepCity_SpaceCenter_2F_EventScript_223E09:: @ 8223E09 applymovement 7, MossdeepCity_SpaceCenter_2F_Movement_223E89 waitmovement 0 setvar VAR_MOSSDEEP_SPACE_CENTER_STATE_2, 2 - moveobjectoffscreen 5 - moveobjectoffscreen 7 - moveobjectoffscreen 6 + copyobjectxytoperm 5 + copyobjectxytoperm 7 + copyobjectxytoperm 6 releaseall end @@ -300,11 +300,11 @@ MossdeepCity_SpaceCenter_2F_EventScript_224071:: @ 8224071 removeobject 8 removeobject 9 setobjectxy 3, 5, 6 - turnobject 3, 1 + turnobject 3, DIR_SOUTH setobjectxy 2, 11, 8 - turnobject 2, 2 + turnobject 2, DIR_NORTH setobjectxy 1, 6, 2 - turnobject 1, 2 + turnobject 1, DIR_NORTH call MossdeepCity_SpaceCenter_2F_EventScript_224131 fadescreen 0 msgbox MossdeepCity_SpaceCenter_2F_Text_224A4A, MSGBOX_DEFAULT @@ -331,11 +331,11 @@ MossdeepCity_SpaceCenter_2F_EventScript_224131:: @ 8224131 return MossdeepCity_SpaceCenter_2F_EventScript_22414D:: @ 822414D - turnobject 4, 2 + turnobject 4, DIR_NORTH return MossdeepCity_SpaceCenter_2F_EventScript_224152:: @ 8224152 - turnobject 4, 4 + turnobject 4, DIR_EAST return MossdeepCity_SpaceCenter_2F_EventScript_224157:: @ 8224157 diff --git a/data/maps/MossdeepCity_StevensHouse/scripts.inc b/data/maps/MossdeepCity_StevensHouse/scripts.inc index 69b5a01d4..62ddcf9ca 100644 --- a/data/maps/MossdeepCity_StevensHouse/scripts.inc +++ b/data/maps/MossdeepCity_StevensHouse/scripts.inc @@ -85,7 +85,7 @@ MossdeepCity_StevensHouse_EventScript_22285B:: @ 822285B MossdeepCity_StevensHouse_EventScript_222865:: @ 8222865 setvar VAR_TEMP_1, SPECIES_BELDUM - givemon SPECIES_BELDUM, 5, ITEM_NONE, 0x0, 0x0, 0 + givemon SPECIES_BELDUM, 5, ITEM_NONE compare VAR_RESULT, 0 goto_if_eq MossdeepCity_StevensHouse_EventScript_222895 compare VAR_RESULT, 1 diff --git a/data/maps/MtChimney/scripts.inc b/data/maps/MtChimney/scripts.inc index d770f095c..c646fc1cf 100644 --- a/data/maps/MtChimney/scripts.inc +++ b/data/maps/MtChimney/scripts.inc @@ -104,7 +104,7 @@ MtChimney_EventScript_22EEF3:: @ 822EEF3 msgbox MtChimney_Text_22FE04, MSGBOX_YESNO compare VAR_RESULT, 0 goto_if_eq MtChimney_EventScript_22EF69 - checkmoney 0xc8, 0 + checkmoney 200, 0 compare VAR_RESULT, 0 goto_if_eq MtChimney_EventScript_22EF76 msgbox MtChimney_Text_22FE4D, MSGBOX_DEFAULT @@ -129,9 +129,8 @@ MtChimney_EventScript_22EF51:: @ 822EF51 end MtChimney_EventScript_22EF5E:: @ 822EF5E - takemoney 0xc8, 0 + takemoney 200, 0 updatemoneybox 0, 0 - nop return MtChimney_EventScript_22EF69:: @ 822EF69 diff --git a/data/maps/NavelRock_Harbor/scripts.inc b/data/maps/NavelRock_Harbor/scripts.inc index 332e6dbea..873b4fd3b 100644 --- a/data/maps/NavelRock_Harbor/scripts.inc +++ b/data/maps/NavelRock_Harbor/scripts.inc @@ -4,10 +4,10 @@ NavelRock_Harbor_MapScripts:: @ 82690BC NavelRock_Harbor_EventScript_2690BD:: @ 82690BD lock faceplayer - msgbox NavelRock_Harbor_Text_2C6CE6, MSGBOX_YESNO + msgbox NavelRock_Harbor_Text_SailorReturn, MSGBOX_YESNO compare VAR_RESULT, 0 goto_if_eq NavelRock_Harbor_EventScript_269102 - msgbox NavelRock_Harbor_Text_2A6A5D, MSGBOX_DEFAULT + msgbox EventTicket_Text_SailHome, MSGBOX_DEFAULT closemessage applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceDown waitmovement 0 @@ -21,7 +21,7 @@ NavelRock_Harbor_EventScript_2690BD:: @ 82690BD end NavelRock_Harbor_EventScript_269102:: @ 8269102 - msgbox NavelRock_Harbor_Text_2A6A82, MSGBOX_DEFAULT + msgbox EventTicket_Text_AsYouLike, MSGBOX_DEFAULT release end diff --git a/data/maps/PetalburgCity_Gym/scripts.inc b/data/maps/PetalburgCity_Gym/scripts.inc index a64c314a5..749ed18f2 100644 --- a/data/maps/PetalburgCity_Gym/scripts.inc +++ b/data/maps/PetalburgCity_Gym/scripts.inc @@ -78,7 +78,7 @@ PetalburgCity_Gym_MapScript2_20498B: @ 820498B .2byte 0 PetalburgCity_Gym_EventScript_204995:: @ 8204995 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end PetalburgCity_Gym_MapScript2_20499A: @ 820499A @@ -418,7 +418,7 @@ PetalburgCity_Gym_EventScript_204E3B:: @ 8204E3B setflag FLAG_DEFEATED_PETALBURG_GYM setvar VAR_PETALBURG_GYM_STATE, 7 setflag FLAG_BADGE05_GET - special sub_813B9A0 + special ResetHealLocationFromDewford call PetalburgCity_Gym_EventScript_2721F8 setflag FLAG_HIDE_MAUVILLE_GYM_WATTSON clearflag FLAG_HIDE_MAUVILLE_CITY_WATTSON diff --git a/data/maps/PetalburgCity_WallysHouse/scripts.inc b/data/maps/PetalburgCity_WallysHouse/scripts.inc index b285b220c..be2a6280e 100644 --- a/data/maps/PetalburgCity_WallysHouse/scripts.inc +++ b/data/maps/PetalburgCity_WallysHouse/scripts.inc @@ -8,8 +8,8 @@ PetalburgCity_WallysHouse_MapScript2_204234: @ 8204234 .2byte 0 PetalburgCity_WallysHouse_EventScript_20423E:: @ 820423E - turnobject EVENT_OBJ_ID_PLAYER, 4 - turnobject 1, 3 + turnobject EVENT_OBJ_ID_PLAYER, DIR_EAST + turnobject 1, DIR_WEST end PetalburgCity_WallysHouse_MapScript2_204247: @ 8204247 diff --git a/data/maps/Route104/scripts.inc b/data/maps/Route104/scripts.inc index 1a677001d..fd195b973 100644 --- a/data/maps/Route104/scripts.inc +++ b/data/maps/Route104/scripts.inc @@ -114,7 +114,7 @@ Route104_EventScript_1ECD4B:: @ 81ECD4B waitmovement 0 applymovement 34, Route104_Movement_1ECDCA waitmovement 0 - moveobjectoffscreen 34 + copyobjectxytoperm 34 msgbox Route104_Text_1EDCED, MSGBOX_YESNO compare VAR_RESULT, 1 goto_if_eq Route104_EventScript_1ECDED @@ -203,7 +203,7 @@ Route104_EventScript_1ECE6F:: @ 81ECE6F waitmovement 0 applymovement 34, Route104_Movement_1ECDCA waitmovement 0 - moveobjectoffscreen 34 + copyobjectxytoperm 34 msgbox Route104_Text_1EE009, MSGBOX_YESNO compare VAR_RESULT, 1 goto_if_eq Route104_EventScript_1ECF09 @@ -416,7 +416,7 @@ Route104_EventScript_1ED139:: @ 81ED139 copyvar VAR_BRINEY_LOCATION, VAR_0x8008 resetobjectpriority EVENT_OBJ_ID_PLAYER, MAP_ROUTE104 resetobjectpriority 2, MAP_DEWFORD_TOWN - moveobjectoffscreen 2 + copyobjectxytoperm 2 setvar VAR_BOARD_BRINEY_BOAT_STATE, 0 goto_if_unset FLAG_DELIVERED_STEVEN_LETTER, Route104_EventScript_1ED1B4 goto_if_set FLAG_DELIVERED_STEVEN_LETTER, Route104_EventScript_1ED1BE diff --git a/data/maps/Route104_MrBrineysHouse/scripts.inc b/data/maps/Route104_MrBrineysHouse/scripts.inc index c2877f0d9..b2baff82b 100644 --- a/data/maps/Route104_MrBrineysHouse/scripts.inc +++ b/data/maps/Route104_MrBrineysHouse/scripts.inc @@ -41,11 +41,11 @@ Route104_MrBrineysHouse_EventScript_229D8A:: @ 8229D8A Route104_MrBrineysHouse_EventScript_229DAE:: @ 8229DAE message Route104_MrBrineysHouse_Text_22A268 waitmessage - multichoicedefault 20, 8, 14, 1, 0 + multichoicedefault 20, 8, MULTI_BRINEY_OFF_DEWFORD, 1, 0 switch VAR_RESULT case 0, Route104_MrBrineysHouse_EventScript_229E27 case 1, Route104_MrBrineysHouse_EventScript_229E1D - case 127, Route104_MrBrineysHouse_EventScript_229E1D + case MULTI_B_PRESSED, Route104_MrBrineysHouse_EventScript_229E1D end Route104_MrBrineysHouse_EventScript_229DE1:: @ 8229DE1 diff --git a/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc b/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc index b4d10cf0f..c70318fc9 100644 --- a/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc +++ b/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc @@ -88,7 +88,7 @@ Route104_PrettyPetalFlowerShop_EventScript_22A442:: @ 822A442 goto_if_set FLAG_DAILY_FLOWER_SHOP_RECEIVED_BERRY, Route104_PrettyPetalFlowerShop_EventScript_22A482 msgbox Route104_PrettyPetalFlowerShop_Text_2A7A98, MSGBOX_DEFAULT random 8 - addvar VAR_RESULT, 133 + addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem_std VAR_RESULT compare VAR_RESULT, 0 goto_if_eq Common_EventScript_ShowBagIsFull diff --git a/data/maps/Route109/scripts.inc b/data/maps/Route109/scripts.inc index a036296e3..e4c04f0d2 100644 --- a/data/maps/Route109/scripts.inc +++ b/data/maps/Route109/scripts.inc @@ -58,7 +58,7 @@ Route109_EventScript_1EE7D5:: @ 81EE7D5 copyvar VAR_BRINEY_LOCATION, VAR_0x8008 resetobjectpriority EVENT_OBJ_ID_PLAYER, MAP_ROUTE109 resetobjectpriority 2, MAP_DEWFORD_TOWN - moveobjectoffscreen 2 + copyobjectxytoperm 2 release end @@ -287,11 +287,11 @@ Route109_EventScript_1EE921:: @ 81EE921 Route109_EventScript_1EE93F:: @ 81EE93F message Route109_Text_1EEE17 waitmessage - multichoicedefault 21, 8, 14, 1, 0 + multichoicedefault 21, 8, MULTI_BRINEY_OFF_DEWFORD, 1, 0 switch VAR_RESULT case 0, Route109_EventScript_1EE972 case 1, Route109_EventScript_1EE98B - case 127, Route109_EventScript_1EE98B + case MULTI_B_PRESSED, Route109_EventScript_1EE98B end Route109_EventScript_1EE972:: @ 81EE972 diff --git a/data/maps/Route109_SeashoreHouse/scripts.inc b/data/maps/Route109_SeashoreHouse/scripts.inc index e52ab08f9..d74b6b671 100644 --- a/data/maps/Route109_SeashoreHouse/scripts.inc +++ b/data/maps/Route109_SeashoreHouse/scripts.inc @@ -49,16 +49,15 @@ Route109_SeashoreHouse_EventScript_269460:: @ 8269460 end Route109_SeashoreHouse_EventScript_269484:: @ 8269484 - checkmoney 0x12c, 0 + checkmoney 300, 0 compare VAR_RESULT, 0 goto_if_eq Route109_SeashoreHouse_EventScript_2694C8 checkitemspace ITEM_SODA_POP, 1 compare VAR_RESULT, 0 goto_if_eq Route109_SeashoreHouse_EventScript_2694D5 msgbox Route109_SeashoreHouse_Text_2697C8, MSGBOX_DEFAULT - takemoney 0x12c, 0 + takemoney 300, 0 updatemoneybox 0, 0 - nop giveitem_std ITEM_SODA_POP hidemoneybox nop diff --git a/data/maps/Route110_TrickHouseEnd/scripts.inc b/data/maps/Route110_TrickHouseEnd/scripts.inc index 52a0f19f5..048e64174 100644 --- a/data/maps/Route110_TrickHouseEnd/scripts.inc +++ b/data/maps/Route110_TrickHouseEnd/scripts.inc @@ -23,7 +23,7 @@ Route110_TrickHouseEnd_MapScript2_26ACDE: @ 826ACDE Route110_TrickHouseEnd_EventScript_26ACE8:: @ 826ACE8 addobject 1 showobjectat 1, MAP_ROUTE110_TRICK_HOUSE_END - turnobject 1, 4 + turnobject 1, DIR_EAST end Route110_TrickHouseEnd_MapScript2_26ACF5: @ 826ACF5 @@ -176,17 +176,17 @@ Route110_TrickHouseEnd_EventScript_26AF28:: @ 826AF28 end Route110_TrickHouseEnd_EventScript_26AFA5:: @ 826AFA5 - multichoice 0, 0, 88, 1 + multichoice 0, 0, MULTI_TENT, 1 switch VAR_RESULT case 0, Route110_TrickHouseEnd_EventScript_26AFBF goto Route110_TrickHouseEnd_EventScript_26AFC7 Route110_TrickHouseEnd_EventScript_26AFBF:: @ 826AFBF - givedecoration_std 31 + givedecoration_std DECOR_RED_TENT return Route110_TrickHouseEnd_EventScript_26AFC7:: @ 826AFC7 - givedecoration_std 32 + givedecoration_std DECOR_BLUE_TENT return Route110_TrickHouseEnd_EventScript_26AFCF:: @ 826AFCF @@ -233,7 +233,7 @@ Route110_TrickHouseEnd_EventScript_26B036:: @ 826B036 Route110_TrickHouseEnd_EventScript_26B041:: @ 826B041 lockall - turnobject 1, 3 + turnobject 1, DIR_WEST playse SE_PIN applymovement 1, Common_Movement_ExclamationMark waitmovement 0 @@ -248,7 +248,7 @@ Route110_TrickHouseEnd_EventScript_26B041:: @ 826B041 applymovement EVENT_OBJ_ID_PLAYER, Route110_TrickHouseEnd_Movement_26B089 waitmovement 0 delay 4 - turnobject 1, 4 + turnobject 1, DIR_EAST releaseall end diff --git a/data/maps/Route110_TrickHouseEntrance/scripts.inc b/data/maps/Route110_TrickHouseEntrance/scripts.inc index 9c2fc3aec..0e729d333 100644 --- a/data/maps/Route110_TrickHouseEntrance/scripts.inc +++ b/data/maps/Route110_TrickHouseEntrance/scripts.inc @@ -132,8 +132,8 @@ Route110_TrickHouseEntrance_MapScript2_269BD3: @ 8269BD3 Route110_TrickHouseEntrance_EventScript_269C15:: @ 8269C15 addobject 1 showobjectat 1, MAP_ROUTE110_TRICK_HOUSE_ENTRANCE - turnobject 1, 4 - turnobject EVENT_OBJ_ID_PLAYER, 3 + turnobject 1, DIR_EAST + turnobject EVENT_OBJ_ID_PLAYER, DIR_WEST end Route110_TrickHouseEntrance_EventScript_269C26:: @ 8269C26 @@ -189,13 +189,13 @@ Route110_TrickHouseEntrance_EventScript_269CCC:: @ 8269CCC Route110_TrickHouseEntrance_EventScript_269CD0:: @ 8269CD0 addobject 1 setobjectxy 1, 5, 2 - turnobject 1, 2 + turnobject 1, DIR_NORTH end Route110_TrickHouseEntrance_EventScript_269CDF:: @ 8269CDF addobject 1 setobjectxy 1, 5, 2 - turnobject 1, 1 + turnobject 1, DIR_SOUTH end Route110_TrickHouseEntrance_MapScript2_269CEE: @ 8269CEE @@ -451,17 +451,17 @@ Route110_TrickHouseEntrance_EventScript_26A039:: @ 826A039 end Route110_TrickHouseEntrance_EventScript_26A070:: @ 826A070 - multichoice 0, 0, 88, 1 + multichoice 0, 0, MULTI_TENT, 1 switch VAR_RESULT case 0, Route110_TrickHouseEntrance_EventScript_26A08A goto Route110_TrickHouseEntrance_EventScript_26A092 Route110_TrickHouseEntrance_EventScript_26A08A:: @ 826A08A - givedecoration_std 31 + givedecoration_std DECOR_RED_TENT return Route110_TrickHouseEntrance_EventScript_26A092:: @ 826A092 - givedecoration_std 32 + givedecoration_std DECOR_BLUE_TENT return Route110_TrickHouseEntrance_EventScript_26A09A:: @ 826A09A diff --git a/data/maps/Route110_TrickHousePuzzle5/scripts.inc b/data/maps/Route110_TrickHousePuzzle5/scripts.inc index 9ae8dc759..b678840b6 100644 --- a/data/maps/Route110_TrickHousePuzzle5/scripts.inc +++ b/data/maps/Route110_TrickHousePuzzle5/scripts.inc @@ -327,7 +327,7 @@ Route110_TrickHousePuzzle5_EventScript_26CEF2:: @ 826CEF2 Route110_TrickHousePuzzle5_EventScript_26CF45:: @ 826CF45 msgbox Route110_TrickHousePuzzle5_Text_26D757, MSGBOX_DEFAULT - multichoice 0, 0, 25, 1 + multichoice 0, 0, MULTI_MECHADOLL1_Q1, 1 switch VAR_RESULT case 2, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -335,7 +335,7 @@ Route110_TrickHousePuzzle5_EventScript_26CF45:: @ 826CF45 Route110_TrickHousePuzzle5_EventScript_26CF68:: @ 826CF68 msgbox Route110_TrickHousePuzzle5_Text_26D7AA, MSGBOX_DEFAULT - multichoice 0, 0, 26, 1 + multichoice 0, 0, MULTI_MECHADOLL1_Q2, 1 switch VAR_RESULT case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -343,7 +343,7 @@ Route110_TrickHousePuzzle5_EventScript_26CF68:: @ 826CF68 Route110_TrickHousePuzzle5_EventScript_26CF8B:: @ 826CF8B msgbox Route110_TrickHousePuzzle5_Text_26D7FC, MSGBOX_DEFAULT - multichoice 0, 0, 27, 1 + multichoice 0, 0, MULTI_MECHADOLL1_Q3, 1 switch VAR_RESULT case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -351,7 +351,7 @@ Route110_TrickHousePuzzle5_EventScript_26CF8B:: @ 826CF8B Route110_TrickHousePuzzle5_EventScript_26CFAE:: @ 826CFAE msgbox Route110_TrickHousePuzzle5_Text_26D940, MSGBOX_DEFAULT - multichoice 0, 0, 28, 1 + multichoice 0, 0, MULTI_MECHADOLL2_Q1, 1 switch VAR_RESULT case 1, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -359,7 +359,7 @@ Route110_TrickHousePuzzle5_EventScript_26CFAE:: @ 826CFAE Route110_TrickHousePuzzle5_EventScript_26CFD1:: @ 826CFD1 msgbox Route110_TrickHousePuzzle5_Text_26D98C, MSGBOX_DEFAULT - multichoice 0, 0, 29, 1 + multichoice 0, 0, MULTI_MECHADOLL2_Q2, 1 switch VAR_RESULT case 2, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -367,7 +367,7 @@ Route110_TrickHousePuzzle5_EventScript_26CFD1:: @ 826CFD1 Route110_TrickHousePuzzle5_EventScript_26CFF4:: @ 826CFF4 msgbox Route110_TrickHousePuzzle5_Text_26D9CE, MSGBOX_DEFAULT - multichoice 0, 0, 30, 1 + multichoice 0, 0, MULTI_MECHADOLL2_Q3, 1 switch VAR_RESULT case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -375,7 +375,7 @@ Route110_TrickHousePuzzle5_EventScript_26CFF4:: @ 826CFF4 Route110_TrickHousePuzzle5_EventScript_26D017:: @ 826D017 msgbox Route110_TrickHousePuzzle5_Text_26DA64, MSGBOX_DEFAULT - multichoice 0, 0, 31, 1 + multichoice 0, 0, MULTI_MECHADOLL3_Q1, 1 switch VAR_RESULT case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -383,7 +383,7 @@ Route110_TrickHousePuzzle5_EventScript_26D017:: @ 826D017 Route110_TrickHousePuzzle5_EventScript_26D03A:: @ 826D03A msgbox Route110_TrickHousePuzzle5_Text_26DAAD, MSGBOX_DEFAULT - multichoice 0, 0, 32, 1 + multichoice 0, 0, MULTI_MECHADOLL3_Q2, 1 switch VAR_RESULT case 2, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -391,7 +391,7 @@ Route110_TrickHousePuzzle5_EventScript_26D03A:: @ 826D03A Route110_TrickHousePuzzle5_EventScript_26D05D:: @ 826D05D msgbox Route110_TrickHousePuzzle5_Text_26DAFF, MSGBOX_DEFAULT - multichoice 0, 0, 33, 1 + multichoice 0, 0, MULTI_MECHADOLL3_Q3, 1 switch VAR_RESULT case 1, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -399,7 +399,7 @@ Route110_TrickHousePuzzle5_EventScript_26D05D:: @ 826D05D Route110_TrickHousePuzzle5_EventScript_26D080:: @ 826D080 msgbox Route110_TrickHousePuzzle5_Text_26DB94, MSGBOX_DEFAULT - multichoice 0, 0, 34, 1 + multichoice 0, 0, MULTI_MECHADOLL4_Q1, 1 switch VAR_RESULT case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -407,7 +407,7 @@ Route110_TrickHousePuzzle5_EventScript_26D080:: @ 826D080 Route110_TrickHousePuzzle5_EventScript_26D0A3:: @ 826D0A3 msgbox Route110_TrickHousePuzzle5_Text_26DBD7, MSGBOX_DEFAULT - multichoice 0, 0, 35, 1 + multichoice 0, 0, MULTI_MECHADOLL4_Q2, 1 switch VAR_RESULT case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -415,7 +415,7 @@ Route110_TrickHousePuzzle5_EventScript_26D0A3:: @ 826D0A3 Route110_TrickHousePuzzle5_EventScript_26D0C6:: @ 826D0C6 msgbox Route110_TrickHousePuzzle5_Text_26DC2A, MSGBOX_DEFAULT - multichoice 0, 0, 36, 1 + multichoice 0, 0, MULTI_MECHADOLL4_Q3, 1 switch VAR_RESULT case 1, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -423,7 +423,7 @@ Route110_TrickHousePuzzle5_EventScript_26D0C6:: @ 826D0C6 Route110_TrickHousePuzzle5_EventScript_26D0E9:: @ 826D0E9 msgbox Route110_TrickHousePuzzle5_Text_26DCCB, MSGBOX_DEFAULT - multichoice 0, 0, 37, 1 + multichoice 0, 0, MULTI_MECHADOLL5_Q1, 1 switch VAR_RESULT case 1, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -431,7 +431,7 @@ Route110_TrickHousePuzzle5_EventScript_26D0E9:: @ 826D0E9 Route110_TrickHousePuzzle5_EventScript_26D10C:: @ 826D10C msgbox Route110_TrickHousePuzzle5_Text_26DD1B, MSGBOX_DEFAULT - multichoice 0, 0, 38, 1 + multichoice 0, 0, MULTI_MECHADOLL5_Q2, 1 switch VAR_RESULT case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 @@ -439,7 +439,7 @@ Route110_TrickHousePuzzle5_EventScript_26D10C:: @ 826D10C Route110_TrickHousePuzzle5_EventScript_26D12F:: @ 826D12F msgbox Route110_TrickHousePuzzle5_Text_26DD5F, MSGBOX_DEFAULT - multichoice 0, 0, 39, 1 + multichoice 0, 0, MULTI_MECHADOLL5_Q3, 1 switch VAR_RESULT case 2, Route110_TrickHousePuzzle5_EventScript_26D1A0 goto Route110_TrickHousePuzzle5_EventScript_26D152 diff --git a/data/maps/Route111/scripts.inc b/data/maps/Route111/scripts.inc index c913d7e6e..6e820d426 100644 --- a/data/maps/Route111/scripts.inc +++ b/data/maps/Route111/scripts.inc @@ -128,7 +128,7 @@ Route111_EventScript_1F0E60:: @ 81F0E60 showobjectat EVENT_OBJ_ID_PLAYER, MAP_LITTLEROOT_TOWN removeobject 45 delay 16 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH delay 16 special StartMirageTowerDisintegration waitstate diff --git a/data/maps/Route113_GlassWorkshop/scripts.inc b/data/maps/Route113_GlassWorkshop/scripts.inc index b685389d9..22acd676d 100644 --- a/data/maps/Route113_GlassWorkshop/scripts.inc +++ b/data/maps/Route113_GlassWorkshop/scripts.inc @@ -52,8 +52,8 @@ Route113_GlassWorkshop_EventScript_26ED9D:: @ 826ED9D Route113_GlassWorkshop_EventScript_26EDA7:: @ 826EDA7 setvar VAR_0x8009, 0 - setvar VAR_0x8004, 1 - special sub_813A128 + setvar VAR_0x8004, SCROLL_MULTI_GLASS_WORKSHOP_VENDOR + special ShowScrollableMultichoice waitstate switch VAR_RESULT case 0, Route113_GlassWorkshop_EventScript_26EE1E @@ -64,11 +64,11 @@ Route113_GlassWorkshop_EventScript_26EDA7:: @ 826EDA7 case 5, Route113_GlassWorkshop_EventScript_26EF4A case 6, Route113_GlassWorkshop_EventScript_26EF8B case 7, Route113_GlassWorkshop_EventScript_26EFCC - case 127, Route113_GlassWorkshop_EventScript_26EFCC + case MULTI_B_PRESSED, Route113_GlassWorkshop_EventScript_26EFCC end Route113_GlassWorkshop_EventScript_26EE1E:: @ 826EE1E - setvar VAR_0x8008, 39 + setvar VAR_0x8008, ITEM_BLUE_FLUTE bufferitemname 0, VAR_0x8008 setvar VAR_0x800A, 250 compare VAR_ASH_GATHER_COUNT, 250 @@ -82,7 +82,7 @@ Route113_GlassWorkshop_EventScript_26EE1E:: @ 826EE1E end Route113_GlassWorkshop_EventScript_26EE5A:: @ 826EE5A - setvar VAR_0x8008, 40 + setvar VAR_0x8008, ITEM_YELLOW_FLUTE bufferitemname 0, VAR_0x8008 setvar VAR_0x800A, 500 compare VAR_ASH_GATHER_COUNT, 500 @@ -96,7 +96,7 @@ Route113_GlassWorkshop_EventScript_26EE5A:: @ 826EE5A end Route113_GlassWorkshop_EventScript_26EE96:: @ 826EE96 - setvar VAR_0x8008, 41 + setvar VAR_0x8008, ITEM_RED_FLUTE bufferitemname 0, VAR_0x8008 setvar VAR_0x800A, 500 compare VAR_ASH_GATHER_COUNT, 500 @@ -110,7 +110,7 @@ Route113_GlassWorkshop_EventScript_26EE96:: @ 826EE96 end Route113_GlassWorkshop_EventScript_26EED2:: @ 826EED2 - setvar VAR_0x8008, 43 + setvar VAR_0x8008, ITEM_WHITE_FLUTE bufferitemname 0, VAR_0x8008 setvar VAR_0x800A, 1000 compare VAR_ASH_GATHER_COUNT, 1000 @@ -124,7 +124,7 @@ Route113_GlassWorkshop_EventScript_26EED2:: @ 826EED2 end Route113_GlassWorkshop_EventScript_26EF0E:: @ 826EF0E - setvar VAR_0x8008, 42 + setvar VAR_0x8008, ITEM_BLACK_FLUTE bufferitemname 0, VAR_0x8008 setvar VAR_0x800A, 1000 compare VAR_ASH_GATHER_COUNT, 1000 @@ -139,7 +139,7 @@ Route113_GlassWorkshop_EventScript_26EF0E:: @ 826EF0E Route113_GlassWorkshop_EventScript_26EF4A:: @ 826EF4A setvar VAR_0x8009, 1 - setvar VAR_0x8008, 13 + setvar VAR_0x8008, DECOR_PRETTY_CHAIR bufferdecorationname 0, VAR_0x8008 setvar VAR_0x800A, 6000 compare VAR_ASH_GATHER_COUNT, 6000 @@ -154,7 +154,7 @@ Route113_GlassWorkshop_EventScript_26EF4A:: @ 826EF4A Route113_GlassWorkshop_EventScript_26EF8B:: @ 826EF8B setvar VAR_0x8009, 1 - setvar VAR_0x8008, 6 + setvar VAR_0x8008, DECOR_PRETTY_DESK bufferdecorationname 0, VAR_0x8008 setvar VAR_0x800A, 8000 compare VAR_ASH_GATHER_COUNT, 8000 @@ -174,14 +174,14 @@ Route113_GlassWorkshop_EventScript_26EFCC:: @ 826EFCC Route113_GlassWorkshop_EventScript_26EFD6:: @ 826EFD6 setvar VAR_0x800A, 250 - subvar VAR_0x800A, 16456 + subvar VAR_0x800A, VAR_ASH_GATHER_COUNT buffernumberstring 0, VAR_0x800A msgbox Route113_GlassWorkshop_Text_26F34E, MSGBOX_DEFAULT release end Route113_GlassWorkshop_EventScript_26EFEE:: @ 826EFEE - subvar VAR_0x800A, 16456 + subvar VAR_0x800A, VAR_ASH_GATHER_COUNT buffernumberstring 1, VAR_0x800A message Route113_GlassWorkshop_Text_26F543 waitmessage @@ -247,50 +247,50 @@ Route113_GlassWorkshop_EventScript_26F090:: @ 826F090 Route113_GlassWorkshop_EventScript_26F0E3:: @ 826F0E3 setvar VAR_0x8009, 0 - setvar VAR_0x8008, 39 + setvar VAR_0x8008, ITEM_BLUE_FLUTE bufferitemname 0, VAR_0x8008 goto Route113_GlassWorkshop_EventScript_26F16F end Route113_GlassWorkshop_EventScript_26F0F7:: @ 826F0F7 setvar VAR_0x8009, 0 - setvar VAR_0x8008, 40 + setvar VAR_0x8008, ITEM_YELLOW_FLUTE bufferitemname 0, VAR_0x8008 goto Route113_GlassWorkshop_EventScript_26F16F end Route113_GlassWorkshop_EventScript_26F10B:: @ 826F10B setvar VAR_0x8009, 0 - setvar VAR_0x8008, 41 + setvar VAR_0x8008, ITEM_RED_FLUTE bufferitemname 0, VAR_0x8008 goto Route113_GlassWorkshop_EventScript_26F16F end Route113_GlassWorkshop_EventScript_26F11F:: @ 826F11F setvar VAR_0x8009, 0 - setvar VAR_0x8008, 43 + setvar VAR_0x8008, ITEM_WHITE_FLUTE bufferitemname 0, VAR_0x8008 goto Route113_GlassWorkshop_EventScript_26F16F end Route113_GlassWorkshop_EventScript_26F133:: @ 826F133 setvar VAR_0x8009, 0 - setvar VAR_0x8008, 42 + setvar VAR_0x8008, ITEM_BLACK_FLUTE bufferitemname 0, VAR_0x8008 goto Route113_GlassWorkshop_EventScript_26F16F end Route113_GlassWorkshop_EventScript_26F147:: @ 826F147 setvar VAR_0x8009, 1 - setvar VAR_0x8008, 13 - bufferdecorationname 0, 13 + setvar VAR_0x8008, DECOR_PRETTY_CHAIR + bufferdecorationname 0, DECOR_PRETTY_CHAIR goto Route113_GlassWorkshop_EventScript_26F16F end Route113_GlassWorkshop_EventScript_26F15B:: @ 826F15B setvar VAR_0x8009, 1 - setvar VAR_0x8008, 6 - bufferdecorationname 0, 6 + setvar VAR_0x8008, DECOR_PRETTY_DESK + bufferdecorationname 0, DECOR_PRETTY_DESK goto Route113_GlassWorkshop_EventScript_26F16F end diff --git a/data/maps/Route114/scripts.inc b/data/maps/Route114/scripts.inc index 925f693fa..faa79b861 100644 --- a/data/maps/Route114/scripts.inc +++ b/data/maps/Route114/scripts.inc @@ -32,7 +32,7 @@ Route114_EventScript_1F2582:: @ 81F2582 msgbox Route114_Text_2A6FCB, MSGBOX_DEFAULT random 5 addvar VAR_RESULT, 15 - addvar VAR_RESULT, 133 + addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem_std VAR_RESULT compare VAR_RESULT, 0 goto_if_eq Common_EventScript_ShowBagIsFull diff --git a/data/maps/Route114_LanettesHouse/scripts.inc b/data/maps/Route114_LanettesHouse/scripts.inc index e24f6ce65..85b22724b 100644 --- a/data/maps/Route114_LanettesHouse/scripts.inc +++ b/data/maps/Route114_LanettesHouse/scripts.inc @@ -12,7 +12,7 @@ Route114_LanettesHouse_EventScript_22B2D2:: @ 822B2D2 goto_if_set FLAG_RECEIVED_DOLL_LANETTE, Route114_LanettesHouse_EventScript_22B2FF setflag FLAG_SYS_PC_LANETTE msgbox Route114_LanettesHouse_Text_22B34E, MSGBOX_DEFAULT - givedecoration_std 99 + givedecoration_std DECOR_LOTAD_DOLL compare VAR_RESULT, 0 goto_if_eq Route114_LanettesHouse_EventScript_272067 setflag FLAG_RECEIVED_DOLL_LANETTE diff --git a/data/maps/Route117/map.json b/data/maps/Route117/map.json index b29b58639..12420784c 100644 --- a/data/maps/Route117/map.json +++ b/data/maps/Route117/map.json @@ -61,7 +61,7 @@ "movement_range_y": 0, "trainer_type": "0", "trainer_sight_or_berry_tree_id": "0", - "script": "Route117_EventScript_291C18", + "script": "Route117_EventScript_DaycareMan", "flag": "0" }, { diff --git a/data/maps/Route117_PokemonDayCare/map.json b/data/maps/Route117_PokemonDayCare/map.json index c233701e5..9cb052633 100644 --- a/data/maps/Route117_PokemonDayCare/map.json +++ b/data/maps/Route117_PokemonDayCare/map.json @@ -24,7 +24,7 @@ "movement_range_y": 0, "trainer_type": "0", "trainer_sight_or_berry_tree_id": "0", - "script": "Route117_PokemonDayCare_EventScript_291D11", + "script": "Route117_PokemonDayCare_EventScript_DaycareWoman", "flag": "0" } ], diff --git a/data/maps/Route119_WeatherInstitute_2F/scripts.inc b/data/maps/Route119_WeatherInstitute_2F/scripts.inc index d5a2de5ce..c15673dad 100644 --- a/data/maps/Route119_WeatherInstitute_2F/scripts.inc +++ b/data/maps/Route119_WeatherInstitute_2F/scripts.inc @@ -77,14 +77,14 @@ Route119_WeatherInstitute_2F_EventScript_26FFC8:: @ 826FFC8 fadescreen 0 applymovement 5, Route119_WeatherInstitute_2F_Movement_270187 waitmovement 0 - moveobjectoffscreen 5 + copyobjectxytoperm 5 goto Route119_WeatherInstitute_2F_EventScript_27004D end Route119_WeatherInstitute_2F_EventScript_27004D:: @ 827004D msgbox Route119_WeatherInstitute_2F_Text_270650, MSGBOX_DEFAULT setvar VAR_TEMP_1, SPECIES_CASTFORM - givemon SPECIES_CASTFORM, 25, ITEM_MYSTIC_WATER, 0x0, 0x0, 0 + givemon SPECIES_CASTFORM, 25, ITEM_MYSTIC_WATER compare VAR_RESULT, 0 goto_if_eq Route119_WeatherInstitute_2F_EventScript_270085 compare VAR_RESULT, 1 diff --git a/data/maps/Route120/scripts.inc b/data/maps/Route120/scripts.inc index fdd302fdb..23f9c13e0 100644 --- a/data/maps/Route120/scripts.inc +++ b/data/maps/Route120/scripts.inc @@ -120,27 +120,27 @@ Route120_EventScript_1F5527:: @ 81F5527 end Route120_EventScript_1F55CA:: @ 81F55CA - setvar VAR_0x8004, 143 + setvar VAR_0x8004, ITEM_FIGY_BERRY goto Route120_EventScript_1F5601 end Route120_EventScript_1F55D5:: @ 81F55D5 - setvar VAR_0x8004, 144 + setvar VAR_0x8004, ITEM_WIKI_BERRY goto Route120_EventScript_1F5601 end Route120_EventScript_1F55E0:: @ 81F55E0 - setvar VAR_0x8004, 145 + setvar VAR_0x8004, ITEM_MAGO_BERRY goto Route120_EventScript_1F5601 end Route120_EventScript_1F55EB:: @ 81F55EB - setvar VAR_0x8004, 146 + setvar VAR_0x8004, ITEM_AGUAV_BERRY goto Route120_EventScript_1F5601 end Route120_EventScript_1F55F6:: @ 81F55F6 - setvar VAR_0x8004, 147 + setvar VAR_0x8004, ITEM_IAPAPA_BERRY goto Route120_EventScript_1F5601 end diff --git a/data/maps/Route121_SafariZoneEntrance/scripts.inc b/data/maps/Route121_SafariZoneEntrance/scripts.inc index 69f5ea80d..d0c950cf5 100644 --- a/data/maps/Route121_SafariZoneEntrance/scripts.inc +++ b/data/maps/Route121_SafariZoneEntrance/scripts.inc @@ -61,14 +61,13 @@ Route121_SafariZoneEntrance_EventScript_22BC48:: @ 822BC48 compare VAR_RESULT, 0 goto_if_eq Route121_SafariZoneEntrance_EventScript_22BCEA call Route121_SafariZoneEntrance_EventScript_22BCBF - checkmoney 0x1f4, 0 + checkmoney 500, 0 compare VAR_RESULT, 0 goto_if_eq Route121_SafariZoneEntrance_EventScript_22BCF8 playse SE_REGI msgbox Route121_SafariZoneEntrance_Text_2A501B, MSGBOX_DEFAULT - takemoney 0x1f4, 0 + takemoney 500, 0 updatemoneybox 0, 0 - nop msgbox Route121_SafariZoneEntrance_Text_2A5036, MSGBOX_DEFAULT playfanfare MUS_FANFA4 message Route121_SafariZoneEntrance_Text_2A5052 diff --git a/data/maps/Route123_BerryMastersHouse/scripts.inc b/data/maps/Route123_BerryMastersHouse/scripts.inc index 939cfed80..979509440 100644 --- a/data/maps/Route123_BerryMastersHouse/scripts.inc +++ b/data/maps/Route123_BerryMastersHouse/scripts.inc @@ -14,7 +14,7 @@ Route123_BerryMastersHouse_EventScript_26F845:: @ 826F845 msgbox Route123_BerryMastersHouse_Text_2A7386, MSGBOX_DEFAULT random 10 addvar VAR_RESULT, 20 - addvar VAR_RESULT, 133 + addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem_std VAR_RESULT compare VAR_RESULT, 0 goto_if_eq Common_EventScript_ShowBagIsFull @@ -22,7 +22,7 @@ Route123_BerryMastersHouse_EventScript_26F845:: @ 826F845 msgbox Route123_BerryMastersHouse_Text_2A7428, MSGBOX_DEFAULT random 10 addvar VAR_RESULT, 20 - addvar VAR_RESULT, 133 + addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem_std VAR_RESULT compare VAR_RESULT, 0 goto_if_eq Common_EventScript_ShowBagIsFull @@ -75,7 +75,7 @@ Route123_BerryMastersHouse_EventScript_26F909:: @ 826F909 Route123_BerryMastersHouse_EventScript_26F94C:: @ 826F94C msgbox Route123_BerryMastersHouse_Text_2A75D0, MSGBOX_DEFAULT random 10 - addvar VAR_RESULT, 133 + addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem_std VAR_RESULT compare VAR_RESULT, 0 goto_if_eq Common_EventScript_ShowBagIsFull diff --git a/data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc b/data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc index e1fb3d6f8..0fa59783d 100644 --- a/data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc +++ b/data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc @@ -86,7 +86,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270ADE:: @ 8270ADE end Route124_DivingTreasureHuntersHouse_EventScript_270B8F:: @ 8270B8F - multichoice 0, 0, 58, 0 + multichoice 0, 0, MULTI_SHARDS_R, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270F4D @@ -94,7 +94,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270B8F:: @ 8270B8F end Route124_DivingTreasureHuntersHouse_EventScript_270BB5:: @ 8270BB5 - multichoice 0, 0, 59, 0 + multichoice 0, 0, MULTI_SHARDS_Y, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E93 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270F4D @@ -102,7 +102,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270BB5:: @ 8270BB5 end Route124_DivingTreasureHuntersHouse_EventScript_270BDB:: @ 8270BDB - multichoice 0, 0, 60, 0 + multichoice 0, 0, MULTI_SHARDS_RY, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270E93 @@ -111,7 +111,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270BDB:: @ 8270BDB end Route124_DivingTreasureHuntersHouse_EventScript_270C0C:: @ 8270C0C - multichoice 0, 0, 61, 0 + multichoice 0, 0, MULTI_SHARDS_B, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270EA2 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270F4D @@ -119,7 +119,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270C0C:: @ 8270C0C end Route124_DivingTreasureHuntersHouse_EventScript_270C32:: @ 8270C32 - multichoice 0, 0, 62, 0 + multichoice 0, 0, MULTI_SHARDS_RB, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EA2 @@ -128,7 +128,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270C32:: @ 8270C32 end Route124_DivingTreasureHuntersHouse_EventScript_270C63:: @ 8270C63 - multichoice 0, 0, 63, 0 + multichoice 0, 0, MULTI_SHARDS_YB, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E93 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EA2 @@ -137,7 +137,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270C63:: @ 8270C63 end Route124_DivingTreasureHuntersHouse_EventScript_270C94:: @ 8270C94 - multichoice 0, 0, 64, 0 + multichoice 0, 0, MULTI_SHARDS_RYB, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270E93 @@ -147,7 +147,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270C94:: @ 8270C94 end Route124_DivingTreasureHuntersHouse_EventScript_270CD0:: @ 8270CD0 - multichoice 0, 0, 65, 0 + multichoice 0, 0, MULTI_SHARDS_G, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270EB1 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270F4D @@ -155,7 +155,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270CD0:: @ 8270CD0 end Route124_DivingTreasureHuntersHouse_EventScript_270CF6:: @ 8270CF6 - multichoice 0, 0, 66, 0 + multichoice 0, 0, MULTI_SHARDS_RG, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EB1 @@ -164,7 +164,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270CF6:: @ 8270CF6 end Route124_DivingTreasureHuntersHouse_EventScript_270D27:: @ 8270D27 - multichoice 0, 0, 67, 0 + multichoice 0, 0, MULTI_SHARDS_YG, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E93 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EB1 @@ -173,7 +173,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270D27:: @ 8270D27 end Route124_DivingTreasureHuntersHouse_EventScript_270D58:: @ 8270D58 - multichoice 0, 0, 68, 0 + multichoice 0, 0, MULTI_SHARDS_RYG, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270E93 @@ -183,7 +183,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270D58:: @ 8270D58 end Route124_DivingTreasureHuntersHouse_EventScript_270D94:: @ 8270D94 - multichoice 0, 0, 69, 0 + multichoice 0, 0, MULTI_SHARDS_BG, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270EA2 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EB1 @@ -192,7 +192,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270D94:: @ 8270D94 end Route124_DivingTreasureHuntersHouse_EventScript_270DC5:: @ 8270DC5 - multichoice 0, 0, 70, 0 + multichoice 0, 0, MULTI_SHARDS_RBG, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EA2 @@ -202,7 +202,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270DC5:: @ 8270DC5 end Route124_DivingTreasureHuntersHouse_EventScript_270E01:: @ 8270E01 - multichoice 0, 0, 71, 0 + multichoice 0, 0, MULTI_SHARDS_YBG, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E93 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EA2 @@ -212,7 +212,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270E01:: @ 8270E01 end Route124_DivingTreasureHuntersHouse_EventScript_270E3D:: @ 8270E3D - multichoice 0, 0, 72, 0 + multichoice 0, 0, MULTI_SHARDS_RYBG, 0 switch VAR_RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84 case 1, Route124_DivingTreasureHuntersHouse_EventScript_270E93 @@ -223,23 +223,23 @@ Route124_DivingTreasureHuntersHouse_EventScript_270E3D:: @ 8270E3D end Route124_DivingTreasureHuntersHouse_EventScript_270E84:: @ 8270E84 - setvar VAR_0x8008, 48 - setvar VAR_0x8009, 95 + setvar VAR_0x8008, ITEM_RED_SHARD + setvar VAR_0x8009, ITEM_FIRE_STONE goto Route124_DivingTreasureHuntersHouse_EventScript_270EC0 Route124_DivingTreasureHuntersHouse_EventScript_270E93:: @ 8270E93 - setvar VAR_0x8008, 50 - setvar VAR_0x8009, 96 + setvar VAR_0x8008, ITEM_YELLOW_SHARD + setvar VAR_0x8009, ITEM_THUNDER_STONE goto Route124_DivingTreasureHuntersHouse_EventScript_270EC0 Route124_DivingTreasureHuntersHouse_EventScript_270EA2:: @ 8270EA2 - setvar VAR_0x8008, 49 - setvar VAR_0x8009, 97 + setvar VAR_0x8008, ITEM_BLUE_SHARD + setvar VAR_0x8009, ITEM_WATER_STONE goto Route124_DivingTreasureHuntersHouse_EventScript_270EC0 Route124_DivingTreasureHuntersHouse_EventScript_270EB1:: @ 8270EB1 - setvar VAR_0x8008, 51 - setvar VAR_0x8009, 98 + setvar VAR_0x8008, ITEM_GREEN_SHARD + setvar VAR_0x8009, ITEM_LEAF_STONE goto Route124_DivingTreasureHuntersHouse_EventScript_270EC0 Route124_DivingTreasureHuntersHouse_EventScript_270EC0:: @ 8270EC0 diff --git a/data/maps/RustboroCity/scripts.inc b/data/maps/RustboroCity/scripts.inc index cd5f4c84d..3caeebfc6 100644 --- a/data/maps/RustboroCity/scripts.inc +++ b/data/maps/RustboroCity/scripts.inc @@ -78,7 +78,7 @@ RustboroCity_EventScript_1E07AC:: @ 81E07AC RustboroCity_EventScript_1E07BD:: @ 81E07BD setflag FLAG_ADDED_MATCH_CALL_TO_POKENAV - special sp106_CreateStartMenu + special ScriptMenu_CreateStartMenuForPokenavTutorial waitstate switch VAR_RESULT case 0, RustboroCity_EventScript_1E07AC @@ -88,7 +88,7 @@ RustboroCity_EventScript_1E07BD:: @ 81E07BD case 5, RustboroCity_EventScript_1E07AC case 6, RustboroCity_EventScript_1E07AC case 7, RustboroCity_EventScript_1E07AC - case 127, RustboroCity_EventScript_1E07AC + case MULTI_B_PRESSED, RustboroCity_EventScript_1E07AC special sub_81C72A4 waitstate delay 20 @@ -494,7 +494,7 @@ RustboroCity_EventScript_1E0B2E:: @ 81E0B2E call_if_eq RustboroCity_EventScript_1E0BF3 setflag FLAG_INTERACTED_WITH_DEVON_EMPLOYEE_GOODS_STOLEN setvar VAR_RUSTBORO_CITY_STATE, 3 - moveobjectoffscreen 9 + copyobjectxytoperm 9 msgbox RustboroCity_Text_1E183E, MSGBOX_DEFAULT releaseall end diff --git a/data/maps/RustboroCity_DevonCorp_2F/scripts.inc b/data/maps/RustboroCity_DevonCorp_2F/scripts.inc index e5ac226c5..f920bda55 100644 --- a/data/maps/RustboroCity_DevonCorp_2F/scripts.inc +++ b/data/maps/RustboroCity_DevonCorp_2F/scripts.inc @@ -157,7 +157,7 @@ RustboroCity_DevonCorp_2F_EventScript_211A2C:: @ 8211A2C RustboroCity_DevonCorp_2F_EventScript_211A3E:: @ 8211A3E setvar VAR_TEMP_1, SPECIES_LILEEP - givemon SPECIES_LILEEP, 20, ITEM_NONE, 0x0, 0x0, 0 + givemon SPECIES_LILEEP, 20, ITEM_NONE compare VAR_RESULT, 0 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_211A6E compare VAR_RESULT, 1 @@ -206,7 +206,7 @@ RustboroCity_DevonCorp_2F_EventScript_211AD7:: @ 8211AD7 RustboroCity_DevonCorp_2F_EventScript_211AE1:: @ 8211AE1 setvar VAR_TEMP_1, SPECIES_ANORITH - givemon SPECIES_ANORITH, 20, ITEM_NONE, 0x0, 0x0, 0 + givemon SPECIES_ANORITH, 20, ITEM_NONE compare VAR_RESULT, 0 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_211B11 compare VAR_RESULT, 1 @@ -256,12 +256,12 @@ RustboroCity_DevonCorp_2F_EventScript_211B7A:: @ 8211B7A RustboroCity_DevonCorp_2F_EventScript_211B84:: @ 8211B84 message RustboroCity_DevonCorp_2F_Text_212092 waitmessage - multichoice 17, 6, 93, 0 + multichoice 17, 6, MULTI_FOSSIL, 0 switch VAR_RESULT case 0, RustboroCity_DevonCorp_2F_EventScript_211BC1 case 1, RustboroCity_DevonCorp_2F_EventScript_211BC7 case 2, RustboroCity_DevonCorp_2F_EventScript_211BCD - case 127, RustboroCity_DevonCorp_2F_EventScript_211BCD + case MULTI_B_PRESSED, RustboroCity_DevonCorp_2F_EventScript_211BCD end RustboroCity_DevonCorp_2F_EventScript_211BC1:: @ 8211BC1 diff --git a/data/maps/RustboroCity_DevonCorp_3F/scripts.inc b/data/maps/RustboroCity_DevonCorp_3F/scripts.inc index 6b83e195c..3ce08c9f1 100644 --- a/data/maps/RustboroCity_DevonCorp_3F/scripts.inc +++ b/data/maps/RustboroCity_DevonCorp_3F/scripts.inc @@ -19,7 +19,7 @@ RustboroCity_DevonCorp_3F_MapScript2_212455: @ 8212455 .2byte 0 RustboroCity_DevonCorp_3F_EventScript_21245F:: @ 821245F - turnobject EVENT_OBJ_ID_PLAYER, 4 + turnobject EVENT_OBJ_ID_PLAYER, DIR_EAST end RustboroCity_DevonCorp_3F_MapScript2_212464: @ 8212464 diff --git a/data/maps/RustboroCity_Flat1_2F/scripts.inc b/data/maps/RustboroCity_Flat1_2F/scripts.inc index ec59115ef..e5b6c493a 100644 --- a/data/maps/RustboroCity_Flat1_2F/scripts.inc +++ b/data/maps/RustboroCity_Flat1_2F/scripts.inc @@ -73,7 +73,7 @@ RustboroCity_Flat1_2F_EventScript_215221:: @ 8215221 end RustboroCity_Flat1_2F_EventScript_215238:: @ 8215238 - turnobject 6, 4 + turnobject 6, DIR_EAST return RustboroCity_Flat1_2F_EventScript_21523D:: @ 821523D diff --git a/data/maps/RustboroCity_PokemonSchool/scripts.inc b/data/maps/RustboroCity_PokemonSchool/scripts.inc index ff52ee5ac..4d0abc9c3 100644 --- a/data/maps/RustboroCity_PokemonSchool/scripts.inc +++ b/data/maps/RustboroCity_PokemonSchool/scripts.inc @@ -10,7 +10,7 @@ RustboroCity_PokemonSchool_EventScript_213EA9:: @ 8213EA9 RustboroCity_PokemonSchool_EventScript_213EB8:: @ 8213EB8 message RustboroCity_PokemonSchool_Text_2140F9 waitmessage - multichoicegrid 8, 1, 13, 3, 0 + multichoicegrid 8, 1, MULTI_STATUS_INFO, 3, 0 switch VAR_RESULT case 0, RustboroCity_PokemonSchool_EventScript_213F17 case 1, RustboroCity_PokemonSchool_EventScript_213F25 @@ -18,7 +18,7 @@ RustboroCity_PokemonSchool_EventScript_213EB8:: @ 8213EB8 case 3, RustboroCity_PokemonSchool_EventScript_213F41 case 4, RustboroCity_PokemonSchool_EventScript_213F4F case 5, RustboroCity_PokemonSchool_EventScript_213F5D - case 127, RustboroCity_PokemonSchool_EventScript_213F5D + case MULTI_B_PRESSED, RustboroCity_PokemonSchool_EventScript_213F5D end RustboroCity_PokemonSchool_EventScript_213F17:: @ 8213F17 diff --git a/data/maps/RusturfTunnel/scripts.inc b/data/maps/RusturfTunnel/scripts.inc index 8d2a4be80..8cb20e372 100644 --- a/data/maps/RusturfTunnel/scripts.inc +++ b/data/maps/RusturfTunnel/scripts.inc @@ -285,8 +285,8 @@ RusturfTunnel_EventScript_22D083:: @ 822D083 applymovement 6, RusturfTunnel_Movement_22D0AB applymovement 7, RusturfTunnel_Movement_22D0AB waitmovement 0 - moveobjectoffscreen 6 - moveobjectoffscreen 7 + copyobjectxytoperm 6 + copyobjectxytoperm 7 setvar VAR_RUSTURF_TUNNEL_STATE, 3 releaseall end diff --git a/data/maps/SeafloorCavern_Entrance/scripts.inc b/data/maps/SeafloorCavern_Entrance/scripts.inc index 1bf570549..bc4f04b7f 100644 --- a/data/maps/SeafloorCavern_Entrance/scripts.inc +++ b/data/maps/SeafloorCavern_Entrance/scripts.inc @@ -26,7 +26,7 @@ SeafloorCavern_Entrance_EventScript_234485:: @ 8234485 call_if_eq SeafloorCavern_Entrance_EventScript_234539 delay 30 setvar VAR_HAS_TALKED_TO_SEAFLOOR_CAVERN_ENTRANCE_GRUNT, 1 - moveobjectoffscreen 1 + copyobjectxytoperm 1 msgbox SeafloorCavern_Entrance_Text_234544, MSGBOX_DEFAULT closemessage applymovement 1, Common_Movement_WalkInPlaceUp diff --git a/data/maps/SkyPillar_Top/scripts.inc b/data/maps/SkyPillar_Top/scripts.inc index 0e9b4c3a1..1dae8c867 100644 --- a/data/maps/SkyPillar_Top/scripts.inc +++ b/data/maps/SkyPillar_Top/scripts.inc @@ -40,7 +40,7 @@ SkyPillar_Top_MapScript2_239713: @ 8239713 .2byte 0 SkyPillar_Top_EventScript_23971D:: @ 823971D - turnobject 1, 1 + turnobject 1, DIR_SOUTH end SkyPillar_Top_EventScript_239722:: @ 8239722 @@ -71,7 +71,7 @@ SkyPillar_Top_EventScript_239768:: @ 8239768 end SkyPillar_Top_EventScript_239771:: @ 8239771 - setvar VAR_0x8004, 406 + setvar VAR_0x8004, SPECIES_RAYQUAZA goto SkyPillar_Top_EventScript_239785 end diff --git a/data/maps/SlateportCity/scripts.inc b/data/maps/SlateportCity/scripts.inc index a1ddb122d..d245cdff4 100644 --- a/data/maps/SlateportCity/scripts.inc +++ b/data/maps/SlateportCity/scripts.inc @@ -748,8 +748,8 @@ SlateportCity_EventScript_1DD3C0:: @ 81DD3C0 SlateportCity_EventScript_1DD3CA:: @ 81DD3CA message SlateportCity_Text_1DEE67 waitmessage - setvar VAR_0x8004, 7 - special sub_813A128 + setvar VAR_0x8004, SCROLL_MULTI_BERRY_POWDER_VENDOR + special ShowScrollableMultichoice waitstate switch VAR_RESULT case 0, SlateportCity_EventScript_1DD46E @@ -764,82 +764,82 @@ SlateportCity_EventScript_1DD3CA:: @ 81DD3CA case 9, SlateportCity_EventScript_1DD522 case 10, SlateportCity_EventScript_1DD536 case 11, SlateportCity_EventScript_1DD54A - case 127, SlateportCity_EventScript_1DD54A + case MULTI_B_PRESSED, SlateportCity_EventScript_1DD54A end SlateportCity_EventScript_1DD46E:: @ 81DD46E bufferitemname 0, ITEM_ENERGY_POWDER - setvar VAR_0x8008, 30 + setvar VAR_0x8008, ITEM_ENERGY_POWDER setvar VAR_0x8009, 50 goto SlateportCity_EventScript_1DD557 end SlateportCity_EventScript_1DD482:: @ 81DD482 bufferitemname 0, ITEM_ENERGY_ROOT - setvar VAR_0x8008, 31 + setvar VAR_0x8008, ITEM_ENERGY_ROOT setvar VAR_0x8009, 80 goto SlateportCity_EventScript_1DD557 end SlateportCity_EventScript_1DD496:: @ 81DD496 bufferitemname 0, ITEM_HEAL_POWDER - setvar VAR_0x8008, 32 + setvar VAR_0x8008, ITEM_HEAL_POWDER setvar VAR_0x8009, 50 goto SlateportCity_EventScript_1DD557 end SlateportCity_EventScript_1DD4AA:: @ 81DD4AA bufferitemname 0, ITEM_REVIVAL_HERB - setvar VAR_0x8008, 33 + setvar VAR_0x8008, ITEM_REVIVAL_HERB setvar VAR_0x8009, 300 goto SlateportCity_EventScript_1DD557 end SlateportCity_EventScript_1DD4BE:: @ 81DD4BE bufferitemname 0, ITEM_PROTEIN - setvar VAR_0x8008, 64 + setvar VAR_0x8008, ITEM_PROTEIN setvar VAR_0x8009, 1000 goto SlateportCity_EventScript_1DD557 end SlateportCity_EventScript_1DD4D2:: @ 81DD4D2 bufferitemname 0, ITEM_IRON - setvar VAR_0x8008, 65 + setvar VAR_0x8008, ITEM_IRON setvar VAR_0x8009, 1000 goto SlateportCity_EventScript_1DD557 end SlateportCity_EventScript_1DD4E6:: @ 81DD4E6 bufferitemname 0, ITEM_CARBOS - setvar VAR_0x8008, 66 + setvar VAR_0x8008, ITEM_CARBOS setvar VAR_0x8009, 1000 goto SlateportCity_EventScript_1DD557 end SlateportCity_EventScript_1DD4FA:: @ 81DD4FA bufferitemname 0, ITEM_CALCIUM - setvar VAR_0x8008, 67 + setvar VAR_0x8008, ITEM_CALCIUM setvar VAR_0x8009, 1000 goto SlateportCity_EventScript_1DD557 end SlateportCity_EventScript_1DD50E:: @ 81DD50E bufferitemname 0, ITEM_ZINC - setvar VAR_0x8008, 70 + setvar VAR_0x8008, ITEM_ZINC setvar VAR_0x8009, 1000 goto SlateportCity_EventScript_1DD557 end SlateportCity_EventScript_1DD522:: @ 81DD522 bufferitemname 0, ITEM_HP_UP - setvar VAR_0x8008, 63 + setvar VAR_0x8008, ITEM_HP_UP setvar VAR_0x8009, 1000 goto SlateportCity_EventScript_1DD557 end SlateportCity_EventScript_1DD536:: @ 81DD536 bufferitemname 0, ITEM_PP_UP - setvar VAR_0x8008, 69 + setvar VAR_0x8008, ITEM_PP_UP setvar VAR_0x8009, 3000 goto SlateportCity_EventScript_1DD557 end diff --git a/data/maps/SlateportCity_BattleTentCorridor/scripts.inc b/data/maps/SlateportCity_BattleTentCorridor/scripts.inc index 27f7fa3b9..5ab5b78e9 100644 --- a/data/maps/SlateportCity_BattleTentCorridor/scripts.inc +++ b/data/maps/SlateportCity_BattleTentCorridor/scripts.inc @@ -12,10 +12,10 @@ SlateportCity_BattleTentCorridor_EventScript_208E3B:: @ 8208E3B compare VAR_0x8006, 1 goto_if_ne SlateportCity_BattleTentCorridor_EventScript_208E56 setobjectxy 1, 2, 2 - turnobject 1, 1 + turnobject 1, DIR_SOUTH SlateportCity_BattleTentCorridor_EventScript_208E56:: @ 8208E56 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end SlateportCity_BattleTentCorridor_MapScript2_208E5B: @ 8208E5B @@ -75,7 +75,7 @@ SlateportCity_BattleTentCorridor_EventScript_208F0D:: @ 8208F0D call_if_eq SlateportCity_BattleTentCorridor_EventScript_209014 compare VAR_RESULT, 2 call_if_eq SlateportCity_BattleTentCorridor_EventScript_20901B - multichoice 20, 6, 104, 1 + multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1 switch VAR_RESULT case 0, SlateportCity_BattleTentCorridor_EventScript_208FBB case 1, SlateportCity_BattleTentCorridor_EventScript_208F5B @@ -91,11 +91,11 @@ SlateportCity_BattleTentCorridor_EventScript_208F5B:: @ 8208F5B SlateportCity_BattleTentCorridor_EventScript_208F89:: @ 8208F89 message SlateportCity_BattleTentCorridor_Text_25A37A waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, SlateportCity_BattleTentCorridor_EventScript_208F0D case 0, SlateportCity_BattleTentCorridor_EventScript_209A1B - case 127, SlateportCity_BattleTentCorridor_EventScript_208F0D + case MULTI_B_PRESSED, SlateportCity_BattleTentCorridor_EventScript_208F0D SlateportCity_BattleTentCorridor_EventScript_208FBB:: @ 8208FBB setvar VAR_0x8004, 8 @@ -104,7 +104,7 @@ SlateportCity_BattleTentCorridor_EventScript_208FBB:: @ 8208FBB switch VAR_RESULT case 0, SlateportCity_BattleTentCorridor_EventScript_208EB4 case 1, SlateportCity_BattleTentCorridor_EventScript_208FF1 - case 127, SlateportCity_BattleTentCorridor_EventScript_208EB4 + case MULTI_B_PRESSED, SlateportCity_BattleTentCorridor_EventScript_208EB4 SlateportCity_BattleTentCorridor_EventScript_208FF1:: @ 8208FF1 fadescreen 1 diff --git a/data/maps/SlateportCity_BattleTentLobby/scripts.inc b/data/maps/SlateportCity_BattleTentLobby/scripts.inc index 19416c91b..80545a7f2 100644 --- a/data/maps/SlateportCity_BattleTentLobby/scripts.inc +++ b/data/maps/SlateportCity_BattleTentLobby/scripts.inc @@ -9,7 +9,7 @@ SlateportCity_BattleTentLobby_MapScript2_20873B: @ 820873B SlateportCity_BattleTentLobby_EventScript_208745:: @ 8208745 setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end SlateportCity_BattleTentLobby_MapScript2_20874F: @ 820874F @@ -128,12 +128,12 @@ SlateportCity_BattleTentLobby_EventScript_2088AA:: @ 82088AA SlateportCity_BattleTentLobby_EventScript_2088CA:: @ 82088CA message SlateportCity_BattleTentLobby_Text_2C586A waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, SlateportCity_BattleTentLobby_EventScript_208906 case 1, SlateportCity_BattleTentLobby_EventScript_208A07 case 2, SlateportCity_BattleTentLobby_EventScript_208A2E - case 127, SlateportCity_BattleTentLobby_EventScript_208A2E + case MULTI_B_PRESSED, SlateportCity_BattleTentLobby_EventScript_208A2E SlateportCity_BattleTentLobby_EventScript_208906:: @ 8208906 setvar VAR_FRONTIER_FACILITY, 4 @@ -281,7 +281,7 @@ SlateportCity_BattleTentLobby_EventScript_208A99:: @ 8208A99 SlateportCity_BattleTentLobby_EventScript_208AA8:: @ 8208AA8 message SlateportCity_BattleTentLobby_Text_259743 waitmessage - multichoice 17, 0, 111, 0 + multichoice 17, 0, MULTI_SLATEPORT_TENT_RULES, 0 switch VAR_RESULT case 0, SlateportCity_BattleTentLobby_EventScript_208B06 case 1, SlateportCity_BattleTentLobby_EventScript_208B14 @@ -289,7 +289,7 @@ SlateportCity_BattleTentLobby_EventScript_208AA8:: @ 8208AA8 case 3, SlateportCity_BattleTentLobby_EventScript_208B30 case 4, SlateportCity_BattleTentLobby_EventScript_208B3E case 5, SlateportCity_BattleTentLobby_EventScript_208B4C - case 127, SlateportCity_BattleTentLobby_EventScript_208B4C + case MULTI_B_PRESSED, SlateportCity_BattleTentLobby_EventScript_208B4C end SlateportCity_BattleTentLobby_EventScript_208B06:: @ 8208B06 diff --git a/data/maps/SlateportCity_Harbor/scripts.inc b/data/maps/SlateportCity_Harbor/scripts.inc index 32fa9fa5d..b6888ddd5 100644 --- a/data/maps/SlateportCity_Harbor/scripts.inc +++ b/data/maps/SlateportCity_Harbor/scripts.inc @@ -77,7 +77,7 @@ SlateportCity_Harbor_EventScript_20C9F5:: @ 820C9F5 closemessage setflag FLAG_HIDE_AQUA_HIDEOUT_1F_GRUNT_1_BLOCKING_ENTRANCE setflag FLAG_HIDE_AQUA_HIDEOUT_1F_GRUNT_2_BLOCKING_ENTRANCE - moveobjectoffscreen 4 + copyobjectxytoperm 4 setobjectmovementtype 4, MOVEMENT_TYPE_FACE_RIGHT releaseall end @@ -175,20 +175,20 @@ SlateportCity_Harbor_EventScript_20CB06:: @ 820CB06 SlateportCity_Harbor_EventScript_20CB1A:: @ 820CB1A goto_if_set FLAG_MET_SCOTT_ON_SS_TIDAL, SlateportCity_Harbor_EventScript_20CB50 - multichoicedefault 18, 8, 56, 2, 0 + multichoicedefault 18, 8, MULTI_SSTIDAL_SLATEPORT_NO_BF, 2, 0 switch VAR_RESULT case 0, SlateportCity_Harbor_EventScript_20CB92 case 1, SlateportCity_Harbor_EventScript_20CC2D - case 127, SlateportCity_Harbor_EventScript_20CC2D + case MULTI_B_PRESSED, SlateportCity_Harbor_EventScript_20CC2D end SlateportCity_Harbor_EventScript_20CB50:: @ 820CB50 - multichoicedefault 17, 6, 52, 2, 0 + multichoicedefault 17, 6, MULTI_SSTIDAL_SLATEPORT_WITH_BF, 2, 0 switch VAR_RESULT case 0, SlateportCity_Harbor_EventScript_20CB92 case 1, SlateportCity_Harbor_EventScript_20CBBA case 2, SlateportCity_Harbor_EventScript_20CC2D - case 127, SlateportCity_Harbor_EventScript_20CC2D + case MULTI_B_PRESSED, SlateportCity_Harbor_EventScript_20CC2D end SlateportCity_Harbor_EventScript_20CB88:: @ 820CB88 @@ -237,7 +237,7 @@ SlateportCity_Harbor_EventScript_20CBE9:: @ 820CBE9 delay 30 hideobjectat EVENT_OBJ_ID_PLAYER, MAP_PETALBURG_CITY setvar VAR_0x8004, 5 - call SlateportCity_Harbor_EventScript_2721E2 + call Common_EventScript_FerryDepart return SlateportCity_Harbor_EventScript_20CC2D:: @ 820CC2D @@ -344,12 +344,12 @@ SlateportCity_Harbor_EventScript_20CD38:: @ 820CD38 end SlateportCity_Harbor_EventScript_20CD44:: @ 820CD44 - multichoice 0, 0, 46, 0 + multichoice 0, 0, MULTI_STERN_DEEPSEA, 0 switch VAR_RESULT case 0, SlateportCity_Harbor_EventScript_20CD7B case 1, SlateportCity_Harbor_EventScript_20CDBB case 2, SlateportCity_Harbor_EventScript_20CDFB - case 127, SlateportCity_Harbor_EventScript_20CDFB + case MULTI_B_PRESSED, SlateportCity_Harbor_EventScript_20CDFB end SlateportCity_Harbor_EventScript_20CD7B:: @ 820CD7B diff --git a/data/maps/SlateportCity_House1/scripts.inc b/data/maps/SlateportCity_House1/scripts.inc index 0a5808820..b1d07c5bb 100644 --- a/data/maps/SlateportCity_House1/scripts.inc +++ b/data/maps/SlateportCity_House1/scripts.inc @@ -28,7 +28,7 @@ SlateportCity_House1_EventScript_209AE9:: @ 8209AE9 SlateportCity_House1_EventScript_209AF3:: @ 8209AF3 specialvar VAR_RESULT, ScriptGetPartyMonSpecies - compare VAR_RESULT, 412 + compare VAR_RESULT, SPECIES_EGG goto_if_eq SlateportCity_House1_EventScript_209B46 special TV_CopyNicknameToStringVar1AndEnsureTerminated special TV_CheckMonOTIDEqualsPlayerID diff --git a/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc index 5a4947c8a..0516db1fc 100644 --- a/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc +++ b/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc @@ -34,13 +34,12 @@ SlateportCity_OceanicMuseum_1F_EventScript_20ADC1:: @ 820ADC1 end SlateportCity_OceanicMuseum_1F_EventScript_20ADE8:: @ 820ADE8 - checkmoney 0x32, 0 + checkmoney 50, 0 compare VAR_RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_20AE18 playse SE_REGI - takemoney 0x32, 0 + takemoney 50, 0 updatemoneybox 0, 0 - nop msgbox SlateportCity_OceanicMuseum_1F_Text_20B026, MSGBOX_DEFAULT setvar VAR_SLATEPORT_MUSEUM_1F_STATE, 1 hidemoneybox diff --git a/data/maps/SootopolisCity/scripts.inc b/data/maps/SootopolisCity/scripts.inc index 7d2143346..d481924a2 100644 --- a/data/maps/SootopolisCity/scripts.inc +++ b/data/maps/SootopolisCity/scripts.inc @@ -179,11 +179,11 @@ SootopolisCity_EventScript_1E58E5:: @ 81E58E5 end SootopolisCity_EventScript_1E58FC:: @ 81E58FC - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH return SootopolisCity_EventScript_1E5901:: @ 81E5901 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH setvar VAR_SKY_PILLAR_STATE, 3 return @@ -217,7 +217,7 @@ SootopolisCity_EventScript_1E5946:: @ 81E5946 setweather WEATHER_ALTERNATING doweather setvar VAR_0x8004, 0 - special sub_813B7D8 + special Script_DoRayquazaScene waitstate applymovement 10, Common_Movement_WalkInPlaceLeft applymovement 9, Common_Movement_WalkInPlaceRight @@ -317,7 +317,7 @@ SootopolisCity_EventScript_1E5A82:: @ 81E5A82 setweather WEATHER_ALTERNATING doweather setvar VAR_0x8004, 0 - special sub_813B7D8 + special Script_DoRayquazaScene waitstate applymovement 10, Common_Movement_WalkInPlaceLeft applymovement 9, Common_Movement_WalkInPlaceRight @@ -509,7 +509,7 @@ SootopolisCity_EventScript_1E5C1E:: @ 81E5C1E removeobject 10 addobject 11 setvar VAR_0x8004, 1 - special sub_813B7D8 + special Script_DoRayquazaScene waitstate playse SE_T_KAMI special SpawnCameraObject @@ -562,7 +562,7 @@ SootopolisCity_EventScript_1E5CCE:: @ 81E5CCE removeobject 10 addobject 11 setvar VAR_0x8004, 1 - special sub_813B7D8 + special Script_DoRayquazaScene waitstate special SpawnCameraObject applymovement EVENT_OBJ_ID_CAMERA, SootopolisCity_Movement_1E5E63 @@ -748,7 +748,7 @@ SootopolisCity_EventScript_1E5F1B:: @ 81E5F1B msgbox SootopolisCity_Text_2A7BB0, MSGBOX_DEFAULT random 10 addvar VAR_RESULT, 20 - addvar VAR_RESULT, 133 + addvar VAR_RESULT, FIRST_BERRY_INDEX giveitem_std VAR_RESULT compare VAR_RESULT, 0 goto_if_eq Common_EventScript_ShowBagIsFull @@ -1366,14 +1366,14 @@ SootopolisCity_EventScript_1E646F:: @ 81E646F SootopolisCity_EventScript_1E64B2:: @ 81E64B2 applymovement 18, SootopolisCity_Movement_1E64EC waitmovement 0 - moveobjectoffscreen 18 + copyobjectxytoperm 18 setvar VAR_SOOTOPOLIS_WALLACE_STATE, 1 return SootopolisCity_EventScript_1E64C5:: @ 81E64C5 applymovement 18, SootopolisCity_Movement_1E64EF waitmovement 0 - moveobjectoffscreen 18 + copyobjectxytoperm 18 setvar VAR_SOOTOPOLIS_WALLACE_STATE, 2 return diff --git a/data/maps/SootopolisCity_Gym_1F/scripts.inc b/data/maps/SootopolisCity_Gym_1F/scripts.inc index 99b9fb2ba..8db708e9c 100644 --- a/data/maps/SootopolisCity_Gym_1F/scripts.inc +++ b/data/maps/SootopolisCity_Gym_1F/scripts.inc @@ -222,6 +222,10 @@ SootopolisCity_Gym_1F_Text_225268: @ 8225268 .string "A grand illusion of water sculpted\n" .string "by POKéMON and myself!$" +@ NOTE: This defeat text actually causes a buffer overflow. It's about 50 bytes too long for +@ the gDisplayedStringBattle buffer that it's put into, and it stomps all over the gBattleTextBuffs +@ after, as well as the otherwise unused array after that. One wonders if that's the reason for +@ the existence of that unused array of ints. SootopolisCity_Gym_1F_Text_225432: @ 8225432 .string "Ahahaha, excellent!\n" .string "Very well, you are the winner.\p" diff --git a/data/maps/SootopolisCity_House6/scripts.inc b/data/maps/SootopolisCity_House6/scripts.inc index 0f175478a..bd9c8fe51 100644 --- a/data/maps/SootopolisCity_House6/scripts.inc +++ b/data/maps/SootopolisCity_House6/scripts.inc @@ -9,7 +9,7 @@ SootopolisCity_House6_EventScript_226F5C:: @ 8226F5C compare VAR_RESULT, 0 call_if_eq SootopolisCity_House6_EventScript_226F99 msgbox SootopolisCity_House6_Text_227034, MSGBOX_DEFAULT - givedecoration_std 117 + givedecoration_std DECOR_WAILMER_DOLL compare VAR_RESULT, 0 goto_if_eq SootopolisCity_House6_EventScript_226FAD setflag FLAG_RECEIVED_WAILMER_DOLL @@ -27,7 +27,7 @@ SootopolisCity_House6_EventScript_226FA3:: @ 8226FA3 end SootopolisCity_House6_EventScript_226FAD:: @ 8226FAD - bufferdecorationname 1, 117 + bufferdecorationname 1, DECOR_WAILMER_DOLL msgbox gText_NoRoomLeftForAnother, MSGBOX_DEFAULT msgbox SootopolisCity_House6_Text_22704A, MSGBOX_DEFAULT release diff --git a/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc b/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc index 5f2352645..78938b7d8 100644 --- a/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc +++ b/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc @@ -36,7 +36,7 @@ SootopolisCity_MysteryEventsHouse_1F_EventScript_2279B7:: @ 82279B7 waitmovement 0 applymovement 1, SootopolisCity_MysteryEventsHouse_1F_Movement_227A21 waitmovement 0 - moveobjectoffscreen 1 + copyobjectxytoperm 1 applymovement EVENT_OBJ_ID_PLAYER, Common_Movement_WalkInPlaceUp waitmovement 0 compare VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE, 1 diff --git a/data/maps/SouthernIsland_Exterior/scripts.inc b/data/maps/SouthernIsland_Exterior/scripts.inc index e3ecfa3db..2ee0ae602 100644 --- a/data/maps/SouthernIsland_Exterior/scripts.inc +++ b/data/maps/SouthernIsland_Exterior/scripts.inc @@ -9,10 +9,10 @@ SouthernIsland_Exterior_OnTransition: @ 82429CE SouthernIsland_Exterior_EventScript_2429D2:: @ 82429D2 lock faceplayer - msgbox SouthernIsland_Exterior_Text_2A69F1, MSGBOX_YESNO + msgbox EventTicket_Text_SouthernIslandSailBack, MSGBOX_YESNO compare VAR_RESULT, 0 goto_if_eq SouthernIsland_Exterior_EventScript_242A17 - msgbox SouthernIsland_Exterior_Text_2A6A5D, MSGBOX_DEFAULT + msgbox EventTicket_Text_SailHome, MSGBOX_DEFAULT closemessage applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceDown waitmovement 0 @@ -26,7 +26,7 @@ SouthernIsland_Exterior_EventScript_2429D2:: @ 82429D2 end SouthernIsland_Exterior_EventScript_242A17:: @ 8242A17 - msgbox SouthernIsland_Exterior_Text_2A6A82, MSGBOX_DEFAULT + msgbox EventTicket_Text_AsYouLike, MSGBOX_DEFAULT release end @@ -50,6 +50,6 @@ BattleFrontier_OutsideWest_Movement_242A39: @ 8242A39 step_end SouthernIsland_Exterior_EventScript_242A3C:: @ 8242A3C - msgbox SouthernIsland_Exterior_Text_2A6AD5, MSGBOX_SIGN + msgbox SouthernIsland_Exterior_Text_Sign, MSGBOX_SIGN end diff --git a/data/maps/SouthernIsland_Interior/scripts.inc b/data/maps/SouthernIsland_Interior/scripts.inc index a87b59079..a9b8c5e0c 100644 --- a/data/maps/SouthernIsland_Interior/scripts.inc +++ b/data/maps/SouthernIsland_Interior/scripts.inc @@ -24,12 +24,12 @@ SouthernIsland_Interior_OnTransition: @ 8242A6E SouthernIsland_Interior_EventScript_242A8A:: @ 8242A8A setvar VAR_OBJ_GFX_ID_1, EVENT_OBJ_GFX_LATIOS - setvar VAR_TEMP_4, 408 + setvar VAR_TEMP_4, SPECIES_LATIOS return SouthernIsland_Interior_EventScript_242A95:: @ 8242A95 setvar VAR_OBJ_GFX_ID_1, EVENT_OBJ_GFX_LATIAS - setvar VAR_TEMP_4, 407 + setvar VAR_TEMP_4, SPECIES_LATIAS return SouthernIsland_Interior_EventScript_242AA0:: @ 8242AA0 @@ -108,21 +108,21 @@ SouthernIsland_Interior_EventScript_242B8F:: @ 8242B8F end SouthernIsland_Interior_EventScript_242B9A:: @ 8242B9A - msgbox SouthernIsland_Interior_Text_2A6AA1, MSGBOX_DEFAULT + msgbox SouthernIsland_Interior_Text_Sign, MSGBOX_DEFAULT releaseall end SouthernIsland_Interior_EventScript_242BA4:: @ 8242BA4 - setvar VAR_0x8004, 408 + setvar VAR_0x8004, SPECIES_LATIOS setvar VAR_0x8005, 50 - setvar VAR_0x8006, 191 + setvar VAR_0x8006, ITEM_SOUL_DEW special CreateObedientEnemyMon return SouthernIsland_Interior_EventScript_242BB7:: @ 8242BB7 - setvar VAR_0x8004, 407 + setvar VAR_0x8004, SPECIES_LATIAS setvar VAR_0x8005, 50 - setvar VAR_0x8006, 191 + setvar VAR_0x8006, ITEM_SOUL_DEW special CreateObedientEnemyMon return diff --git a/data/maps/TrainerHill_Elevator/scripts.inc b/data/maps/TrainerHill_Elevator/scripts.inc index ecc48a9e9..bf3d0f9f7 100644 --- a/data/maps/TrainerHill_Elevator/scripts.inc +++ b/data/maps/TrainerHill_Elevator/scripts.inc @@ -39,18 +39,20 @@ TrainerHill_Elevator_EventScript_269375:: @ 8269375 waitstate end +@ Unused TrainerHill_Elevator_EventScript_2693CE:: @ 82693CE goto TrainerHill_Elevator_EventScript_2693D4 end +@ Functionally unused TrainerHill_Elevator_EventScript_2693D4:: @ 82693D4 - special sub_8139C10 + special CloseDeptStoreElevatorWindow releaseall end TrainerHill_Elevator_EventScript_2693D9:: @ 82693D9 waitse - special ShakeScreenInElevator + special MoveElevator waitstate return diff --git a/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc index 5be00aa9d..d09768f2b 100644 --- a/data/maps/TrainerHill_Entrance/scripts.inc +++ b/data/maps/TrainerHill_Entrance/scripts.inc @@ -150,12 +150,12 @@ TrainerHill_Entrance_EventScript_268275:: @ 8268275 TrainerHill_Entrance_EventScript_26827D:: @ 826827D message TrainerHill_Entrance_Text_2685F8 waitmessage - multichoice 15, 6, 17, 0 + multichoice 15, 6, MULTI_YESNOINFO, 0 switch VAR_RESULT case 0, TrainerHill_Entrance_EventScript_2682C8 case 1, TrainerHill_Entrance_EventScript_268314 case 2, TrainerHill_Entrance_EventScript_2682BA - case 127, TrainerHill_Entrance_EventScript_268314 + case MULTI_B_PRESSED, TrainerHill_Entrance_EventScript_268314 end TrainerHill_Entrance_EventScript_2682BA:: @ 82682BA @@ -164,10 +164,10 @@ TrainerHill_Entrance_EventScript_2682BA:: @ 82682BA end TrainerHill_Entrance_EventScript_2682C8:: @ 82682C8 - multichoice 13, 2, 113, 0 + multichoice 13, 2, MULTI_TAG_MATCH_TYPE, 0 switch VAR_RESULT case 4, TrainerHill_Entrance_EventScript_268314 - case 127, TrainerHill_Entrance_EventScript_268314 + case MULTI_B_PRESSED, TrainerHill_Entrance_EventScript_268314 setvar VAR_0x8004, TRAINER_HILL_FUNC_SET_TAG copyvar VAR_0x8005, VAR_RESULT special CallTrainerHillFunction diff --git a/data/maps/UnknownLinkContestRoom_25_29/map.json b/data/maps/UnknownLinkContestRoom_25_29/map.json index 956a68158..3e4387b6a 100644 --- a/data/maps/UnknownLinkContestRoom_25_29/map.json +++ b/data/maps/UnknownLinkContestRoom_25_29/map.json @@ -1,5 +1,5 @@ { - "id": "MAP_UNKNOWN_MAP_25_29", + "id": "MAP_UNKNOWN_LINK_CONTEST_ROOM_25_29", "name": "UnknownLinkContestRoom_25_29", "layout": "LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_29", "music": "MUS_NIBI", diff --git a/data/maps/UnknownLinkContestRoom_25_30/map.json b/data/maps/UnknownLinkContestRoom_25_30/map.json index 526c6de2a..42a719c17 100644 --- a/data/maps/UnknownLinkContestRoom_25_30/map.json +++ b/data/maps/UnknownLinkContestRoom_25_30/map.json @@ -1,5 +1,5 @@ { - "id": "MAP_UNKNOWN_MAP_25_30", + "id": "MAP_UNKNOWN_LINK_CONTEST_ROOM_25_30", "name": "UnknownLinkContestRoom_25_30", "layout": "LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_30", "music": "MUS_NIBI", diff --git a/data/maps/UnknownLinkContestRoom_25_31/map.json b/data/maps/UnknownLinkContestRoom_25_31/map.json index 9548c1125..ad18b00af 100644 --- a/data/maps/UnknownLinkContestRoom_25_31/map.json +++ b/data/maps/UnknownLinkContestRoom_25_31/map.json @@ -1,5 +1,5 @@ { - "id": "MAP_UNKNOWN_MAP_25_31", + "id": "MAP_UNKNOWN_LINK_CONTEST_ROOM_25_31", "name": "UnknownLinkContestRoom_25_31", "layout": "LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_31", "music": "MUS_NIBI", diff --git a/data/maps/UnknownLinkContestRoom_25_32/map.json b/data/maps/UnknownLinkContestRoom_25_32/map.json index 27411d28e..0e1528e59 100644 --- a/data/maps/UnknownLinkContestRoom_25_32/map.json +++ b/data/maps/UnknownLinkContestRoom_25_32/map.json @@ -1,5 +1,5 @@ { - "id": "MAP_UNKNOWN_MAP_25_32", + "id": "MAP_UNKNOWN_LINK_CONTEST_ROOM_25_32", "name": "UnknownLinkContestRoom_25_32", "layout": "LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_32", "music": "MUS_NIBI", diff --git a/data/maps/UnknownLinkContestRoom_25_33/map.json b/data/maps/UnknownLinkContestRoom_25_33/map.json index 1a15ae6d6..8765e9771 100644 --- a/data/maps/UnknownLinkContestRoom_25_33/map.json +++ b/data/maps/UnknownLinkContestRoom_25_33/map.json @@ -1,5 +1,5 @@ { - "id": "MAP_UNKNOWN_MAP_25_33", + "id": "MAP_UNKNOWN_LINK_CONTEST_ROOM_25_33", "name": "UnknownLinkContestRoom_25_33", "layout": "LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_33", "music": "MUS_NIBI", diff --git a/data/maps/UnknownLinkContestRoom_25_34/map.json b/data/maps/UnknownLinkContestRoom_25_34/map.json index 4c90858b9..c7220897b 100644 --- a/data/maps/UnknownLinkContestRoom_25_34/map.json +++ b/data/maps/UnknownLinkContestRoom_25_34/map.json @@ -1,5 +1,5 @@ { - "id": "MAP_UNKNOWN_MAP_25_34", + "id": "MAP_UNKNOWN_LINK_CONTEST_ROOM_25_34", "name": "UnknownLinkContestRoom_25_34", "layout": "LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_34", "music": "MUS_NIBI", diff --git a/data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc b/data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc index b43bc6077..fd8c05546 100644 --- a/data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc +++ b/data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc @@ -98,7 +98,7 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_20243C:: @ 820243C call_if_eq VerdanturfTown_BattleTentBattleRoom_EventScript_202565 compare VAR_RESULT, 2 call_if_eq VerdanturfTown_BattleTentBattleRoom_EventScript_20256C - multichoice 20, 6, 104, 1 + multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1 switch VAR_RESULT case 0, VerdanturfTown_BattleTentBattleRoom_EventScript_2024EA case 1, VerdanturfTown_BattleTentBattleRoom_EventScript_20248A @@ -114,11 +114,11 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_20248A:: @ 820248A VerdanturfTown_BattleTentBattleRoom_EventScript_2024B8:: @ 82024B8 message VerdanturfTown_BattleTentBattleRoom_Text_25005A waitmessage - multichoicedefault 20, 8, 94, 1, 0 + multichoicedefault 20, 8, MULTI_YESNO, 1, 0 switch VAR_RESULT case 1, VerdanturfTown_BattleTentBattleRoom_EventScript_20243C case 0, VerdanturfTown_BattleTentBattleRoom_EventScript_2023AA - case 127, VerdanturfTown_BattleTentBattleRoom_EventScript_20243C + case MULTI_B_PRESSED, VerdanturfTown_BattleTentBattleRoom_EventScript_20243C VerdanturfTown_BattleTentBattleRoom_EventScript_2024EA:: @ 82024EA applymovement 3, Common_Movement_WalkInPlaceRight diff --git a/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc b/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc index daaaaea1b..5bc309663 100644 --- a/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc +++ b/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc @@ -9,7 +9,7 @@ VerdanturfTown_BattleTentLobby_MapScript2_2016DB: @ 82016DB VerdanturfTown_BattleTentLobby_EventScript_2016E5:: @ 82016E5 setvar VAR_TEMP_1, 1 - turnobject EVENT_OBJ_ID_PLAYER, 2 + turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH end VerdanturfTown_BattleTentLobby_MapScript2_2016EF: @ 82016EF @@ -141,12 +141,12 @@ VerdanturfTown_BattleTentLobby_EventScript_201873:: @ 8201873 VerdanturfTown_BattleTentLobby_EventScript_201893:: @ 8201893 message VerdanturfTown_BattleTentLobby_Text_2C5129 waitmessage - multichoice 17, 6, 23, 0 + multichoice 17, 6, MULTI_CHALLENGEINFO, 0 switch VAR_RESULT case 0, VerdanturfTown_BattleTentLobby_EventScript_2018CF case 1, VerdanturfTown_BattleTentLobby_EventScript_2019DB case 2, VerdanturfTown_BattleTentLobby_EventScript_201A37 - case 127, VerdanturfTown_BattleTentLobby_EventScript_201A37 + case MULTI_B_PRESSED, VerdanturfTown_BattleTentLobby_EventScript_201A37 VerdanturfTown_BattleTentLobby_EventScript_2018CF:: @ 82018CF setvar VAR_FRONTIER_FACILITY, 2 @@ -332,8 +332,8 @@ VerdanturfTown_BattleTentLobby_EventScript_201B02:: @ 8201B02 VerdanturfTown_BattleTentLobby_EventScript_201B11:: @ 8201B11 message VerdanturfTown_BattleTentLobby_Text_24EF88 waitmessage - setvar VAR_0x8004, 12 - special sub_813A128 + setvar VAR_0x8004, SCROLL_MULTI_BATTLE_TENT_RULES + special ShowScrollableMultichoice waitstate switch VAR_RESULT case 0, VerdanturfTown_BattleTentLobby_EventScript_201B7E @@ -343,7 +343,7 @@ VerdanturfTown_BattleTentLobby_EventScript_201B11:: @ 8201B11 case 4, VerdanturfTown_BattleTentLobby_EventScript_201BB6 case 5, VerdanturfTown_BattleTentLobby_EventScript_201BC4 case 6, VerdanturfTown_BattleTentLobby_EventScript_201BD2 - case 127, VerdanturfTown_BattleTentLobby_EventScript_201BD2 + case MULTI_B_PRESSED, VerdanturfTown_BattleTentLobby_EventScript_201BD2 end VerdanturfTown_BattleTentLobby_EventScript_201B7E:: @ 8201B7E diff --git a/data/maps/VictoryRoad_1F/scripts.inc b/data/maps/VictoryRoad_1F/scripts.inc index 5214edc44..b6983eac0 100644 --- a/data/maps/VictoryRoad_1F/scripts.inc +++ b/data/maps/VictoryRoad_1F/scripts.inc @@ -44,7 +44,7 @@ VictoryRoad_1F_EventScript_235DE1:: @ 8235DE1 trainerbattle_no_intro TRAINER_WALLY_1, VictoryRoad_1F_Text_235FFC msgbox VictoryRoad_1F_Text_236020, MSGBOX_DEFAULT clearflag FLAG_HIDE_VICTORY_ROAD_ENTRANCE_WALLY - moveobjectoffscreen 4 + copyobjectxytoperm 4 setflag FLAG_DEFEATED_WALLY_VICTORY_ROAD copyvar VAR_VICTORY_ROAD_1F_STATE, VAR_0x8008 releaseall diff --git a/data/multiboot_berry_glitch_fix.s b/data/multiboot_berry_glitch_fix.s index c77fc2c5e..57757090a 100644 --- a/data/multiboot_berry_glitch_fix.s +++ b/data/multiboot_berry_glitch_fix.s @@ -1,5 +1,5 @@ .section .rodata gMultiBootProgram_BerryGlitchFix_Start:: @ 89A6550 - .incbin "data/berry_fix.mb" + .incbin "berry_fix/berry_fix.gba" gMultiBootProgram_BerryGlitchFix_End:: @ 89AA144 diff --git a/data/mystery_event_msg.s b/data/mystery_event_msg.s index dd1f8e681..33af5269c 100644 --- a/data/mystery_event_msg.s +++ b/data/mystery_event_msg.s @@ -2,6 +2,7 @@ #include "constants/items.h" #include "constants/map_scripts.h" #include "constants/moves.h" +#include "constants/region_map_sections.h" #include "constants/songs.h" #include "constants/species.h" #include "constants/vars.h" @@ -19,7 +20,7 @@ MysteryEventScript_StampCard:: @ 8674CB0 specialvar VAR_0x8008, sub_813986C setorcopyvar VAR_RESULT, 0 specialvar VAR_0x8009, sub_813986C - subvar VAR_0x8008, 32777 + subvar VAR_0x8008, VAR_0x8009 buffernumberstring 0, VAR_0x8008 lock faceplayer @@ -66,7 +67,7 @@ SurfPichu_FullParty: @ 8674D73 SurfPichu_GiveEgg: @ 8674D7E giveegg SPECIES_PICHU setmonobedient VAR_EVENT_PICHU_SLOT - setmonmetlocation VAR_EVENT_PICHU_SLOT, 255 + setmonmetlocation VAR_EVENT_PICHU_SLOT, METLOC_FATEFUL_ENCOUNTER compare_var_to_value VAR_EVENT_PICHU_SLOT, 1 vgoto_if 1, SurfPichu_Slot1 compare_var_to_value VAR_EVENT_PICHU_SLOT, 2 diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index e9a14437a..910227a92 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -100,7 +100,7 @@ gScriptCmdTable:: @ 81DB67C .4byte ScrCmd_settrainerflag .4byte ScrCmd_cleartrainerflag .4byte ScrCmd_setobjectxyperm - .4byte ScrCmd_moveobjectoffscreen + .4byte ScrCmd_copyobjectxytoperm .4byte ScrCmd_setobjectmovementtype .4byte ScrCmd_waitmessage .4byte ScrCmd_message diff --git a/data/scripts/apprentice.inc b/data/scripts/apprentice.inc index d6713cde4..b75a3c579 100644 --- a/data/scripts/apprentice.inc +++ b/data/scripts/apprentice.inc @@ -553,7 +553,7 @@ gText_082B7D18:: @ 82B7D18 .string "time with someone like me.$" gText_082B7DD4:: @ 82B7DD4 - .string "Oh! You're {PLAYER}{STRING 5}, aren't you?\p" + .string "Oh! You're {PLAYER}{KUN}, aren't you?\p" .string "I've heard that you're tough at\n" .string "POKéMON!\p" .string "I'm {STR_VAR_1}!\n" @@ -576,19 +576,19 @@ gText_082B7F35:: @ 82B7F35 .string "You know that the BATTLE TOWER has\n" .string "Level 50 and Open Level Rooms?\p" .string "Which do you think would be good\n" - .string "for me, {PLAYER}{STRING 5}?$" + .string "for me, {PLAYER}{KUN}?$" gText_082B7FE8:: @ 82B7FE8 .string "Okay, {STR_VAR_1} is suitable for me?\n" .string "Thank you!\p" .string "Knowing that you made the decision,\n" - .string "{PLAYER}{STRING 5}, I won't be so upset if\l" + .string "{PLAYER}{KUN}, I won't be so upset if\l" .string "I lose.\p" .string "Okay, I'll look to you for advice again.\n" .string "Bye!$" gText_082B8087:: @ 82B8087 - .string "Oh, hi, there! {PLAYER}{STRING 5}!\n" + .string "Oh, hi, there! {PLAYER}{KUN}!\n" .string "I know you because you're famous!\l" .string "Call me {STR_VAR_1}! Glad to meet you!\p" .string "I'm a TRIATHLETE, so I keep myself\n" @@ -599,13 +599,13 @@ gText_082B8087:: @ 82B8087 .string "me to become a decent TRAINER.\p" .string "So, I have a proposition!\p" .string "There must be a reason why we met.\n" - .string "So, {PLAYER}{STRING 5}, how about sharing your\l" + .string "So, {PLAYER}{KUN}, how about sharing your\l" .string "wisdom with me every so often?$" gText_082B822B:: @ 82B822B .string "Oh, but, please?\n" .string "A guy like me needs someone like\l" - .string "you, {PLAYER}{STRING 5}!\p" + .string "you, {PLAYER}{KUN}!\p" .string "Honestly, I need your advice!$" gText_082B8286:: @ 82B8286 @@ -741,15 +741,15 @@ gText_082B8C20:: @ 82B8C20 gText_082B8CAA:: @ 82B8CAA .string "Whoa! Could you be…\n" - .string "Might you be… {PLAYER}{STRING 5}?!\l" + .string "Might you be… {PLAYER}{KUN}?!\l" .string "That strong and famous TRAINER?\l" .string "Well, hello, aren't I just the luckiest!\p" .string "Hello, the name's {STR_VAR_1}!\p" .string "I've been on the lookout for\n" .string "a POKéMON teacher.\p" .string "And with impeccably good timing,\n" - .string "along came you, {PLAYER}{STRING 5}!\p" - .string "So, there you have it, {PLAYER}{STRING 5}!\n" + .string "along came you, {PLAYER}{KUN}!\p" + .string "So, there you have it, {PLAYER}{KUN}!\n" .string "Let me apprentice under you!$" gText_082B8DD3:: @ 82B8DD3 @@ -774,7 +774,7 @@ gText_082B8ED5:: @ 82B8ED5 .string "Adios!$" gText_082B8F45:: @ 82B8F45 - .string "Oh, hey, {PLAYER}{STRING 5}, right?\n" + .string "Oh, hey, {PLAYER}{KUN}, right?\n" .string "The police were looking for you!\p" .string "… … …\n" .string "Of course I'm lying!\p" @@ -822,7 +822,7 @@ gText_082B929C:: @ 82B929C .string "Your turn now, tell me a little about\n" .string "yourself, give it a try!\p" .string "Uh-huh, uh-huh!\n" - .string "{PLAYER}{STRING 5}'s your name,\l" + .string "{PLAYER}{KUN}'s your name,\l" .string "and POKéMON's your game!\p" .string "And you're at a delicate age\n" .string "when all the world's your stage!\p" @@ -901,7 +901,7 @@ gText_082B992D:: @ 82B992D .string "not built to take the abuse…\p" .string "I decided I'll battle POKéMON and\n" .string "toughen myself up.\p" - .string "You're {PLAYER}{STRING 5}, aren't you?\n" + .string "You're {PLAYER}{KUN}, aren't you?\n" .string "The POKéMON LEAGUE CHAMP?\p" .string "Listen, can I get you to give me\n" .string "advice?$" @@ -927,7 +927,7 @@ gText_082B9B76:: @ 82B9B76 gText_082B9BF2:: @ 82B9BF2 .string "Er… Um…\n" - .string "{PLAYER}{STRING 5}…?\p" + .string "{PLAYER}{KUN}…?\p" .string "Please, don't look at me that way.\n" .string "You're making me all self-conscious.\p" .string "I… I'm {STR_VAR_1}.\p" @@ -935,7 +935,7 @@ gText_082B9BF2:: @ 82B9BF2 .string "but I explore ancient ruins and such.\p" .string "I'm even more embarrassed to admit\n" .string "I'm interested in the BATTLE FRONTIER.\p" - .string "{PLAYER}{STRING 5}, you have a reputation as\n" + .string "{PLAYER}{KUN}, you have a reputation as\n" .string "a tough TRAINER…\p" .string "It's hard for me to say this,\n" .string "but I want to ask something.\p" @@ -962,18 +962,18 @@ gText_082B9EAA:: @ 82B9EAA .string "I'll try my hand at that.\p" .string "I hope I can make a valiant challenge\n" .string "without getting all flustered…\p" - .string "Thank you, {PLAYER}{STRING 5}.\n" + .string "Thank you, {PLAYER}{KUN}.\n" .string "If we meet again, I hope you will be\l" .string "as helpful.$" gText_082B9F55:: @ 82B9F55 - .string "Hm? You appear to be {PLAYER}{STRING 5}…\n" + .string "Hm? You appear to be {PLAYER}{KUN}…\n" .string "But are you really real?\p" .string "You may call me {STR_VAR_1}.\p" .string "I have been toying with the idea of\n" .string "apprenticing under a strong TRAINER.\p" .string "So, I must say I'm lucky you came along!\n" - .string "…You really are {PLAYER}{STRING 5}, yes?\p" + .string "…You really are {PLAYER}{KUN}, yes?\p" .string "No, no, if you are real, it's fine.\n" .string "I merely want you to recognize me\l" .string "as your apprentice.$" @@ -1130,7 +1130,7 @@ gText_082BAA81:: @ 82BAA81 .string "my {STR_VAR_2} hold anything?$" gText_082BAB22:: @ 82BAB22 - .string "Oh, {PLAYER}{STRING 5}.\n" + .string "Oh, {PLAYER}{KUN}.\n" .string "There's something I wanted to ask you.\p" .string "You know how you decided which\n" .string "POKéMON I should have for me?\p" @@ -1148,7 +1148,7 @@ gText_082BAC43:: @ 82BAC43 gText_082BAC78:: @ 82BAC78 .string "If you think that's best, I'll do that.\p" .string "Knowing that you made the decision,\n" - .string "{PLAYER}{STRING 5}, I won't be so upset if\l" + .string "{PLAYER}{KUN}, I won't be so upset if\l" .string "I lose.\p" .string "Okay, I'll look to you for advice again.\n" .string "Bye!$" @@ -1157,7 +1157,7 @@ gText_082BAD17:: @ 82BAD17 .string "The item {STR_VAR_1}, huh?\n" .string "Not bad. I'll use it!\p" .string "Knowing that you made the decision,\n" - .string "{PLAYER}{STRING 5}, I won't be so upset if\l" + .string "{PLAYER}{KUN}, I won't be so upset if\l" .string "I lose.\p" .string "Okay, I'll look to you for advice again.\n" .string "Bye!$" @@ -1170,7 +1170,7 @@ gText_082BADB6:: @ 82BADB6 .string "do the best it can empty-handed?$" gText_082BAE36:: @ 82BAE36 - .string "Yo, {PLAYER}{STRING 5}!\p" + .string "Yo, {PLAYER}{KUN}!\p" .string "We're both busy, but we seem to run\n" .string "into each other often anyway!\p" .string "Today I have to do some walking,\n" @@ -1315,7 +1315,7 @@ gText_082BB84A:: @ 82BB84A gText_082BB8CD:: @ 82BB8CD .string "Hola!\n" - .string "My maestro, {PLAYER}{STRING 5}!\p" + .string "My maestro, {PLAYER}{KUN}!\p" .string "I want to hit you up for advice on\n" .string "POKéMON tools.\p" .string "What do you think would be good for\n" @@ -1348,7 +1348,7 @@ gText_082BBA6C:: @ 82BBA6C .string "can win without holding any item?$" gText_082BBB01:: @ 82BBB01 - .string "{PLAYER}{STRING 5}, something unbelievable\n" + .string "{PLAYER}{KUN}, something unbelievable\n" .string "has happened!\p" .string "I woke up this morning, and my POKéMON\n" .string "had 10 NUGGETS!\p" @@ -1465,14 +1465,14 @@ gText_082BC373:: @ 82BC373 .string "Doesn't need to hold anything?$" gText_082BC40E:: @ 82BC40E - .string "Gwah! Ouch! {PLAYER}{STRING 5}, my arm's broken!\n" + .string "Gwah! Ouch! {PLAYER}{KUN}, my arm's broken!\n" .string "Don't touch it, please!\p" .string "I must've broken it while I was trying\n" .string "out different hold items with my posse\l" .string "of POKéMON.\p" .string "So, things being this way,\n" .string "I need you to decide for me.\p" - .string "{PLAYER}{STRING 5}, what do you think would be\n" + .string "{PLAYER}{KUN}, what do you think would be\n" .string "good for my {STR_VAR_1} to hold?$" gText_082BC514:: @ 82BC514 @@ -1504,14 +1504,14 @@ gText_082BC666:: @ 82BC666 gText_082BC714:: @ 82BC714 .string "Er… Um…\n" - .string "{PLAYER}{STRING 5}…\p" + .string "{PLAYER}{KUN}…\p" .string "Please, don't look at me that way.\n" .string "My POKéMON don't have anything.\p" .string "I… I'm really embarrassed about this,\n" .string "but I really need your advice.\p" .string "I can't decide what hold item would\n" .string "make my {STR_VAR_1} strong.\p" - .string "{PLAYER}{STRING 5}, what do you think would\n" + .string "{PLAYER}{KUN}, what do you think would\n" .string "be good?$" gText_082BC808:: @ 82BC808 @@ -1523,7 +1523,7 @@ gText_082BC84D:: @ 82BC84D .string "I'll go without an item.\p" .string "This is nerve-racking, though.\n" .string "Wouldn't it be too cool?\p" - .string "Thank you, {PLAYER}{STRING 5}.\n" + .string "Thank you, {PLAYER}{KUN}.\n" .string "If we meet again, I hope you will be\l" .string "as helpful.$" @@ -1532,7 +1532,7 @@ gText_082BC8EA:: @ 82BC8EA .string "I'll go with that {STR_VAR_1}.\p" .string "This is nerve-racking, though.\n" .string "Wouldn't it be too cool?\p" - .string "Thank you, {PLAYER}{STRING 5}.\n" + .string "Thank you, {PLAYER}{KUN}.\n" .string "If we meet again, I hope you will be\l" .string "as helpful.$" @@ -1545,7 +1545,7 @@ gText_082BC984:: @ 82BC984 .string "my {STR_VAR_2} didn't have an item?$" gText_082BCA4D:: @ 82BCA4D - .string "Hm? You appear to be {PLAYER}{STRING 5}…\n" + .string "Hm? You appear to be {PLAYER}{KUN}…\n" .string "But are you really?\l" .string "Perhaps you're a twin?\p" .string "Oh, no, no, no, don't worry!\n" @@ -1647,7 +1647,7 @@ gText_082BD18A:: @ 82BD18A .string "speak with me… Thank you!$" gText_082BD222:: @ 82BD222 - .string "Oh, {PLAYER}{STRING 5}! It's me!\n" + .string "Oh, {PLAYER}{KUN}! It's me!\n" .string "I'm so glad to see you because I have\l" .string "this little problem.\p" .string "I can't decide how my POKéMON should\n" @@ -1660,13 +1660,13 @@ gText_082BD222:: @ 82BD222 gText_082BD325:: @ 82BD325 .string "My {STR_VAR_1}? That's great!\p" .string "Knowing that you made the decision,\n" - .string "{PLAYER}{STRING 5}, I won't be so upset if\l" + .string "{PLAYER}{KUN}, I won't be so upset if\l" .string "I lose.\p" .string "Okay, I'll look to you for advice again.\n" .string "Bye!$" gText_082BD3B1:: @ 82BD3B1 - .string "Hi, my teacher {PLAYER}{STRING 5}!\n" + .string "Hi, my teacher {PLAYER}{KUN}!\n" .string "I'm busy again today!\p" .string "I have to do some cycling, shopping,\n" .string "and humming.\p" @@ -1740,13 +1740,13 @@ gText_082BD8F5:: @ 82BD8F5 gText_082BD9BE:: @ 82BD9BE .string "Hello, hello!\n" - .string "My mentor, {PLAYER}{STRING 5}!\l" + .string "My mentor, {PLAYER}{KUN}!\l" .string "Hit me with your sage advice today!\p" .string "You see, I pulled together a team of\n" .string "three POKéMON. So far so good.\p" .string "But the team's battling order's not\n" .string "settled yet.\p" - .string "This is where you come in, {PLAYER}{STRING 5}!\n" + .string "This is where you come in, {PLAYER}{KUN}!\n" .string "You decide which POKéMON leads off!\p" .string "Don't be shy now.\n" .string "Let's blurt it out!$" @@ -1759,7 +1759,7 @@ gText_082BDAE1:: @ 82BDAE1 .string "Adios!$" gText_082BDB4E:: @ 82BDB4E - .string "{PLAYER}{STRING 5}, listen!\n" + .string "{PLAYER}{KUN}, listen!\n" .string "It's a crisis!\p" .string "My POKéMON, all three of them, go into\n" .string "battle at once!\p" @@ -1815,7 +1815,7 @@ gText_082BDF4D:: @ 82BDF4D .string "See you again, my smart friend!$" gText_082BDFD8:: @ 82BDFD8 - .string "…Oof…ooch… {PLAYER}{STRING 5}…\n" + .string "…Oof…ooch… {PLAYER}{KUN}…\n" .string "My stomach's hurting all of a sudden…\p" .string "…It's getting better now…\p" .string "I must've worried myself sick racking\n" @@ -1823,7 +1823,7 @@ gText_082BDFD8:: @ 82BDFD8 .string "my posse of POKéMON.\p" .string "So, things being this way,\n" .string "I need you to decide for me.\p" - .string "{PLAYER}{STRING 5}, which of my POKéMON should\n" + .string "{PLAYER}{KUN}, which of my POKéMON should\n" .string "go first? So I'd win, I mean.$" gText_082BE0FD:: @ 82BE0FD @@ -1836,7 +1836,7 @@ gText_082BE0FD:: @ 82BE0FD gText_082BE189:: @ 82BE189 .string "Er… Um…\n" - .string "{PLAYER}{STRING 5}?\p" + .string "{PLAYER}{KUN}?\p" .string "Please, don't look at me that way.\n" .string "You're making me feel all flustered.\p" .string "Um…\n" @@ -1852,12 +1852,12 @@ gText_082BE2A5:: @ 82BE2A5 .string "I'll lead with my {STR_VAR_1}.\p" .string "I hope I can do my best without\n" .string "getting all flustered.\p" - .string "Thank you, {PLAYER}{STRING 5}.\n" + .string "Thank you, {PLAYER}{KUN}.\n" .string "If we meet again, I hope you will be\l" .string "as helpful.$" gText_082BE33E:: @ 82BE33E - .string "Hm? You appear to be {PLAYER}{STRING 5}…\n" + .string "Hm? You appear to be {PLAYER}{KUN}…\n" .string "But are you really?\l" .string "Perhaps you're a clever look-alike?\p" .string "Oh, no, no, no, don't worry!\n" @@ -1949,7 +1949,7 @@ gText_082BE99C:: @ 82BE99C .string "Thank you!$" gText_082BEA1B:: @ 82BEA1B - .string "Oh, {PLAYER}{STRING 5}! I'm so glad to see you!\n" + .string "Oh, {PLAYER}{KUN}! I'm so glad to see you!\n" .string "I was about to go looking for you!\p" .string "Can you decide what kind of POKéMON\n" .string "I should use?\p" @@ -1962,20 +1962,20 @@ gText_082BEA1B:: @ 82BEA1B gText_082BEAE9:: @ 82BEAE9 .string "{STR_VAR_1}? That's great!\p" .string "Knowing that you made the decision,\n" - .string "{PLAYER}{STRING 5}, I won't be so upset if\l" + .string "{PLAYER}{KUN}, I won't be so upset if\l" .string "I lose.\p" .string "Okay, I'll look to you for advice again.\n" .string "Bye!$" gText_082BEB72:: @ 82BEB72 - .string "If it isn't {PLAYER}{STRING 5}! How's it going?\n" + .string "If it isn't {PLAYER}{KUN}! How's it going?\n" .string "I'm busy again as always!\p" .string "I want to do good with POKéMON, too,\n" .string "but I haven't been able to decide\l" .string "which POKéMON I should use.\p" .string "You know how {STR_VAR_1} look strong?\n" .string "But {STR_VAR_2} are tough to ignore.\p" - .string "{PLAYER}{STRING 5}, give me some of your good\n" + .string "{PLAYER}{KUN}, give me some of your good\n" .string "advice! Which one'd be good for me?$" gText_082BEC8E:: @ 82BEC8E @@ -2046,7 +2046,7 @@ gText_082BF11D:: @ 82BF11D gText_082BF1A8:: @ 82BF1A8 .string "Hey, hey!\n" - .string "My mentor, {PLAYER}{STRING 5}!\p" + .string "My mentor, {PLAYER}{KUN}!\p" .string "Hello, I've been looking for you\n" .string "for some more of your sage advice!\p" .string "Which kind of POKéMON would be right\n" @@ -2062,7 +2062,7 @@ gText_082BF268:: @ 82BF268 .string "Adios!$" gText_082BF2D1:: @ 82BF2D1 - .string "{PLAYER}{STRING 5}, listen! Big news!\n" + .string "{PLAYER}{KUN}, listen! Big news!\n" .string "I caught a mirage POKéMON!\p" .string "Of course I'm lying!\n" .string "Wahahaha!\p" @@ -2120,13 +2120,13 @@ gText_082BF6E5:: @ 82BF6E5 .string "See you again, my smart friend!$" gText_082BF773:: @ 82BF773 - .string "Oh, hi, {PLAYER}{STRING 5}…\n" + .string "Oh, hi, {PLAYER}{KUN}…\n" .string "I have this horrible headache…\p" .string "I must've worried too much about\n" .string "the kind of POKéMON I should raise.\p" .string "So, things being this way,\n" .string "I need you to decide for me.\p" - .string "{PLAYER}{STRING 5}, if I had to choose between\n" + .string "{PLAYER}{KUN}, if I had to choose between\n" .string "the POKéMON {STR_VAR_1} and\l" .string "{STR_VAR_2}, which should it be?$" @@ -2138,7 +2138,7 @@ gText_082BF869:: @ 82BF869 gText_082BF8DD:: @ 82BF8DD .string "Er… Um…\n" - .string "{PLAYER}{STRING 5}…?\p" + .string "{PLAYER}{KUN}…?\p" .string "Please, don't look at me that way.\n" .string "I'm getting all flustered…\l" .string "I… I need your advice.\p" @@ -2152,12 +2152,12 @@ gText_082BF9BA:: @ 82BF9BA .string "I'll do my best with one {STR_VAR_1}.\p" .string "I hope I can do my best without\n" .string "getting all flustered.\p" - .string "Thank you, {PLAYER}{STRING 5}.\n" + .string "Thank you, {PLAYER}{KUN}.\n" .string "If we meet again, I hope you will be\l" .string "as helpful.$" gText_082BFA5A:: @ 82BFA5A - .string "Hm? You appear to be {PLAYER}{STRING 5}…\n" + .string "Hm? You appear to be {PLAYER}{KUN}…\n" .string "But are you really real?\p" .string "No, no, if you are real, it's fine.\n" .string "Incidentally, I would like to obtain\l" @@ -2250,7 +2250,7 @@ gText_082C0032:: @ 82C0032 .string "Thank you!$" gText_082C0090:: @ 82C0090 - .string "Oh, {PLAYER}{STRING 5}!\n" + .string "Oh, {PLAYER}{KUN}!\n" .string "I was just hoping to see you, too!\p" .string "I was wondering what move would\n" .string "be suitable for my {STR_VAR_1}.\p" @@ -2263,14 +2263,14 @@ gText_082C0090:: @ 82C0090 gText_082C016E:: @ 82C016E .string "{STR_VAR_1}? That's great!\p" .string "Knowing that you made the decision,\n" - .string "{PLAYER}{STRING 5}, I won't be so upset if\l" + .string "{PLAYER}{KUN}, I won't be so upset if\l" .string "I lose.\p" .string "Okay, I'll look to you for advice again.\n" .string "Bye!$" gText_082C01F7:: @ 82C01F7 .string "How could things be this busy?\n" - .string "Hey, if it isn't {PLAYER}{STRING 5}!\l" + .string "Hey, if it isn't {PLAYER}{KUN}!\l" .string "How's it going?\p" .string "Since I got up this morning, I've done\n" .string "my jogging, swimming, and cooking!\p" @@ -2279,7 +2279,7 @@ gText_082C01F7:: @ 82C01F7 .string "my {STR_VAR_1} should learn!\p" .string "{STR_VAR_2} looks good, huh?\n" .string "But {STR_VAR_3}'s also decent.\p" - .string "{PLAYER}{STRING 5}, give me some of your good\n" + .string "{PLAYER}{KUN}, give me some of your good\n" .string "advice! Which move'd be good for me?$" gText_082C034C:: @ 82C034C @@ -2344,7 +2344,7 @@ gText_082C06D8:: @ 82C06D8 .string "some more another time.$" gText_082C074A:: @ 82C074A - .string "Hola, {PLAYER}{STRING 5}, bueno!\n" + .string "Hola, {PLAYER}{KUN}, bueno!\n" .string "I'm hoping for some more of\l" .string "your sage advice today!\p" .string "What would be the best move for\n" @@ -2362,7 +2362,7 @@ gText_082C0809:: @ 82C0809 .string "Adios!$" gText_082C086E:: @ 82C086E - .string "{PLAYER}{STRING 5}, it's completely wild!\p" + .string "{PLAYER}{KUN}, it's completely wild!\p" .string "My POKéMON!\n" .string "It learned six moves!\p" .string "Of course I'm lying!\n" @@ -2420,13 +2420,13 @@ gText_082C0C7D:: @ 82C0C7D .string "See you again, my smart friend!$" gText_082C0D0B:: @ 82C0D0B - .string "Gahack! Gaah! Oh, {PLAYER}{STRING 5}…\n" + .string "Gahack! Gaah! Oh, {PLAYER}{KUN}…\n" .string "I have this lousy cold, I do…\p" .string "I want to pick a move for my POKéMON,\n" .string "but I'm not up to it…\p" .string "So, things being this way,\n" .string "I need you to decide for me.\p" - .string "{PLAYER}{STRING 5}, if I had to choose between\n" + .string "{PLAYER}{KUN}, if I had to choose between\n" .string "{STR_VAR_2} and {STR_VAR_3} for\l" .string "my {STR_VAR_1}, which would it be?$" @@ -2438,7 +2438,7 @@ gText_082C0DFE:: @ 82C0DFE gText_082C0E71:: @ 82C0E71 .string "Er… Um…\n" - .string "{PLAYER}{STRING 5}…?\p" + .string "{PLAYER}{KUN}…?\p" .string "Please, don't look at me that way.\n" .string "I'm getting all flustered…\l" .string "I… I need your advice.\p" @@ -2454,12 +2454,12 @@ gText_082C0F6D:: @ 82C0F6D .string "I'll try that {STR_VAR_1}.\p" .string "I hope I can teach that move…\n" .string "This is so nerve-racking…\p" - .string "Thank you, {PLAYER}{STRING 5}.\n" + .string "Thank you, {PLAYER}{KUN}.\n" .string "If we meet again, I hope you will be\l" .string "as helpful.$" gText_082C1003:: @ 82C1003 - .string "Hm? You appear to be {PLAYER}{STRING 5}…\n" + .string "Hm? You appear to be {PLAYER}{KUN}…\n" .string "But are you really real?\p" .string "Perhaps you're one of those popular\n" .string "mimics?\p" @@ -2569,7 +2569,7 @@ gText_082C174F:: @ 82C174F .string "somewhere again!$" gText_082C1862:: @ 82C1862 - .string "Oh, {PLAYER}{STRING 5}.\n" + .string "Oh, {PLAYER}{KUN}.\n" .string "There's something I want you to hear.\p" .string "I know that I don't always sound\n" .string "nice or polite…\p" @@ -2595,7 +2595,7 @@ gText_082C19A0:: @ 82C19A0 gText_082C1A76:: @ 82C1A76 .string "Oh, I can't get over how busy I am!\n" - .string "Oh, hey, I was looking for you, {PLAYER}{STRING 5}.\p" + .string "Oh, hey, I was looking for you, {PLAYER}{KUN}.\p" .string "Are you well as usual?\n" .string "Things haven't changed for me at all.\p" .string "I've got running, fighting, and mapping\n" @@ -2605,7 +2605,7 @@ gText_082C1A76:: @ 82C1A76 .string "from a win without saying a word.\p" .string "So, what would be a cool saying to\n" .string "underline my coolness when I'm done\l" - .string "and walking away? {PLAYER}{STRING 5}, help me!$" + .string "and walking away? {PLAYER}{KUN}, help me!$" gText_082C1C16:: @ 82C1C16 .string "{STR_VAR_1}\p" @@ -2615,7 +2615,7 @@ gText_082C1C16:: @ 82C1C16 .string "like you.\p" .string "I'm going to make time somehow so\n" .string "I can get into battling.\p" - .string "Thanks for everything, {PLAYER}{STRING 5}!\n" + .string "Thanks for everything, {PLAYER}{KUN}!\n" .string "We have to battle, you and me, one day!$" gText_082C1CF5:: @ 82C1CF5 @@ -2694,7 +2694,7 @@ gText_082C21FF:: @ 82C21FF gText_082C231C:: @ 82C231C .string "Hola, bueno!\n" - .string "{PLAYER}{STRING 5}!\p" + .string "{PLAYER}{KUN}!\p" .string "You know, I'm getting the itch to roam\n" .string "and battle where I may.\p" .string "But before I do, I want your advice\n" @@ -2714,7 +2714,7 @@ gText_082C2407:: @ 82C2407 .string "Adios!$" gText_082C24B5:: @ 82C24B5 - .string "{PLAYER}{STRING 5}, there's big trouble!\p" + .string "{PLAYER}{KUN}, there's big trouble!\p" .string "When I win a battle, I brag about it\n" .string "for an hour at least!\p" .string "Of course I'm lying!\n" @@ -2793,14 +2793,14 @@ gText_082C2A0B:: @ 82C2A0B .string "Love ya!$" gText_082C2B50:: @ 82C2B50 - .string "{PLAYER}{STRING 5}, I'm finished…\n" + .string "{PLAYER}{KUN}, I'm finished…\n" .string "My nose won't stop dripping…\p" .string "I was trying to think up something\n" .string "cool to say when I win a battle.\p" .string "It inspired me so much, it made me cry,\n" .string "and now my nose won't stop running…\p" .string "So, things being this way,\n" - .string "I need you to decide for me, {PLAYER}{STRING 5}.\p" + .string "I need you to decide for me, {PLAYER}{KUN}.\p" .string "When I win a battle,\n" .string "what should I say?$" @@ -2812,13 +2812,13 @@ gText_082C2C77:: @ 82C2C77 .string "But in spite of my tears and runny\n" .string "nose, I will use that saying!\p" .string "I'm plumb out of things to ask you,\n" - .string "{PLAYER}{STRING 5}.\p" + .string "{PLAYER}{KUN}.\p" .string "From now on, we're rivals!\n" .string "Thanks for everything!$" gText_082C2D67:: @ 82C2D67 .string "Er… Um…\n" - .string "{PLAYER}{STRING 5}…\p" + .string "{PLAYER}{KUN}…\p" .string "Please, don't look at me that way.\n" .string "You're making me all nervous.\p" .string "I… I need your advice again.\n" @@ -2832,13 +2832,13 @@ gText_082C2E41:: @ 82C2E41 .string "Oh… Okay!\n" .string "I'll try to say that!\l" .string "I might be too nervous to say it…\p" - .string "Thank you, {PLAYER}{STRING 5}.\n" + .string "Thank you, {PLAYER}{KUN}.\n" .string "I have to say good-bye now.\p" .string "I'll obey all that you've taught me,\n" - .string "{PLAYER}{STRING 5}, and do the best I can.$" + .string "{PLAYER}{KUN}, and do the best I can.$" gText_082C2EF5:: @ 82C2EF5 - .string "Hm? You appear to be {PLAYER}{STRING 5}…\n" + .string "Hm? You appear to be {PLAYER}{KUN}…\n" .string "But are you really?\l" .string "Perhaps a clever {PLAYER} DOLL?\p" .string "Oh, no, no, no, don't worry!\n" diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index eeecf2d75..8e49c982f 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -99,7 +99,7 @@ MossdeepCity_GameCorner_1F_EventScript_276BAE:: @ 8276BAE OldaleTown_PokemonCenter_2F_EventScript_276BAE:: @ 8276BAE compare VAR_0x8007, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_276BBD - turnobject VAR_0x8007, 3 + turnobject VAR_0x8007, DIR_WEST OldaleTown_PokemonCenter_2F_EventScript_276BBD:: @ 8276BBD end @@ -344,22 +344,22 @@ OldaleTown_PokemonCenter_2F_EventScript_276E22:: @ 8276E22 OldaleTown_PokemonCenter_2F_EventScript_276E30:: @ 8276E30 setvar VAR_0x8004, 0 goto_if_set FLAG_VISITED_MAUVILLE_CITY, OldaleTown_PokemonCenter_2F_EventScript_276E75 - multichoice 0, 0, 74, 0 + multichoice 0, 0, MULTI_CABLE_CLUB_NO_RECORD_MIX, 0 switch VAR_RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_2770B2 case 1, OldaleTown_PokemonCenter_2F_EventScript_276EB7 case 2, OldaleTown_PokemonCenter_2F_EventScript_2772EC - case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC + case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC end OldaleTown_PokemonCenter_2F_EventScript_276E75:: @ 8276E75 - multichoice 0, 0, 76, 0 + multichoice 0, 0, MULTI_CABLE_CLUB_WITH_RECORD_MIX, 0 switch VAR_RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_2770B2 case 1, OldaleTown_PokemonCenter_2F_EventScript_276EB7 case 2, OldaleTown_PokemonCenter_2F_EventScript_2771DB case 3, OldaleTown_PokemonCenter_2F_EventScript_2772EC - case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC + case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC end OldaleTown_PokemonCenter_2F_EventScript_276EB7:: @ 8276EB7 @@ -370,14 +370,14 @@ OldaleTown_PokemonCenter_2F_EventScript_276EB7:: @ 8276EB7 OldaleTown_PokemonCenter_2F_EventScript_276EC2:: @ 8276EC2 message OldaleTown_PokemonCenter_2F_Text_2790BE waitmessage - multichoice 0, 0, 18, 0 + multichoice 0, 0, MULTI_BATTLE_MODE, 0 switch VAR_RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_276F23 case 1, OldaleTown_PokemonCenter_2F_EventScript_276F2E case 2, OldaleTown_PokemonCenter_2F_EventScript_276F55 case 3, OldaleTown_PokemonCenter_2F_EventScript_276F15 case 4, OldaleTown_PokemonCenter_2F_EventScript_2772EC - case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC + case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC end OldaleTown_PokemonCenter_2F_EventScript_276F15:: @ 8276F15 @@ -392,7 +392,7 @@ OldaleTown_PokemonCenter_2F_EventScript_276F23:: @ 8276F23 OldaleTown_PokemonCenter_2F_EventScript_276F2E:: @ 8276F2E special HasEnoughMonsForDoubleBattle - compare VAR_RESULT, 0 + compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS goto_if_ne OldaleTown_PokemonCenter_2F_EventScript_276F47 setvar VAR_0x8004, 2 goto OldaleTown_PokemonCenter_2F_EventScript_276F60 @@ -978,7 +978,7 @@ OldaleTown_PokemonCenter_2F_EventScript_27751B:: @ 827751B faceplayer setvar VAR_FRONTIER_FACILITY, 8 goto_if_unset FLAG_SYS_POKEDEX_GET, OldaleTown_PokemonCenter_2F_EventScript_277335 - specialvar VAR_RESULT, sub_813990C + specialvar VAR_RESULT, IsBadEggInParty compare VAR_RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_27731B copyvar VAR_0x8007, VAR_LAST_TALKED @@ -991,12 +991,12 @@ OldaleTown_PokemonCenter_2F_EventScript_27751B:: @ 827751B end OldaleTown_PokemonCenter_2F_EventScript_27755C:: @ 827755C - multichoice 17, 6, 17, 0 + multichoice 17, 6, MULTI_YESNOINFO, 0 switch VAR_RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_27759F case 1, OldaleTown_PokemonCenter_2F_EventScript_2772EC case 2, OldaleTown_PokemonCenter_2F_EventScript_277593 - case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC + case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC end OldaleTown_PokemonCenter_2F_EventScript_277593:: @ 8277593 @@ -1086,7 +1086,7 @@ OldaleTown_PokemonCenter_2F_EventScript_2776A4:: @ 82776A4 faceplayer setvar VAR_FRONTIER_FACILITY, 9 goto_if_unset FLAG_SYS_POKEDEX_GET, OldaleTown_PokemonCenter_2F_EventScript_277335 - specialvar VAR_RESULT, sub_813990C + specialvar VAR_RESULT, IsBadEggInParty compare VAR_RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_27731B specialvar VAR_RESULT, IsWirelessAdapterConnected @@ -1103,44 +1103,44 @@ OldaleTown_PokemonCenter_2F_EventScript_2776E3:: @ 82776E3 compare VAR_RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_27778B goto_if_set FLAG_VISITED_MAUVILLE_CITY, OldaleTown_PokemonCenter_2F_EventScript_27773E - multichoice 0, 0, 78, 0 + multichoice 0, 0, MULTI_WIRELESS_NO_RECORD, 0 switch VAR_RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_27780D case 1, OldaleTown_PokemonCenter_2F_EventScript_27783B case 2, OldaleTown_PokemonCenter_2F_EventScript_2778F7 case 3, OldaleTown_PokemonCenter_2F_EventScript_2772EC - case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC + case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC end OldaleTown_PokemonCenter_2F_EventScript_27773E:: @ 827773E - multichoice 0, 0, 79, 0 + multichoice 0, 0, MULTI_WIRELESS_ALL_SERVICES, 0 switch VAR_RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_27780D case 1, OldaleTown_PokemonCenter_2F_EventScript_27783B case 2, OldaleTown_PokemonCenter_2F_EventScript_2778D9 case 3, OldaleTown_PokemonCenter_2F_EventScript_2778F7 case 4, OldaleTown_PokemonCenter_2F_EventScript_2772EC - case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC + case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC end OldaleTown_PokemonCenter_2F_EventScript_27778B:: @ 827778B goto_if_set FLAG_VISITED_MAUVILLE_CITY, OldaleTown_PokemonCenter_2F_EventScript_2777CB - multichoice 0, 0, 75, 0 + multichoice 0, 0, MULTI_WIRELESS_NO_RECORD_BERRY, 0 switch VAR_RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_27780D case 1, OldaleTown_PokemonCenter_2F_EventScript_27783B case 2, OldaleTown_PokemonCenter_2F_EventScript_2772EC - case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC + case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC end OldaleTown_PokemonCenter_2F_EventScript_2777CB:: @ 82777CB - multichoice 0, 0, 77, 0 + multichoice 0, 0, MULTI_WIRELESS_NO_BERRY, 0 switch VAR_RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_27780D case 1, OldaleTown_PokemonCenter_2F_EventScript_27783B case 2, OldaleTown_PokemonCenter_2F_EventScript_2778D9 case 3, OldaleTown_PokemonCenter_2F_EventScript_2772EC - case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC + case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC end OldaleTown_PokemonCenter_2F_EventScript_27780D:: @ 827780D @@ -1157,14 +1157,14 @@ OldaleTown_PokemonCenter_2F_EventScript_27780D:: @ 827780D OldaleTown_PokemonCenter_2F_EventScript_27783B:: @ 827783B message OldaleTown_PokemonCenter_2F_Text_2790BE waitmessage - multichoice 0, 0, 18, 0 + multichoice 0, 0, MULTI_BATTLE_MODE, 0 switch VAR_RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_27788E case 1, OldaleTown_PokemonCenter_2F_EventScript_277899 case 2, OldaleTown_PokemonCenter_2F_EventScript_2778C0 case 3, OldaleTown_PokemonCenter_2F_EventScript_2778CB case 4, OldaleTown_PokemonCenter_2F_EventScript_2772EC - case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC + case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC end OldaleTown_PokemonCenter_2F_EventScript_27788E:: @ 827788E @@ -1174,7 +1174,7 @@ OldaleTown_PokemonCenter_2F_EventScript_27788E:: @ 827788E OldaleTown_PokemonCenter_2F_EventScript_277899:: @ 8277899 special HasEnoughMonsForDoubleBattle - compare VAR_RESULT, 0 + compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS goto_if_ne OldaleTown_PokemonCenter_2F_EventScript_2778B2 setvar VAR_0x8004, 1 goto OldaleTown_PokemonCenter_2F_EventScript_277931 @@ -1235,12 +1235,12 @@ OldaleTown_PokemonCenter_2F_EventScript_277931:: @ 8277931 OldaleTown_PokemonCenter_2F_EventScript_277989:: @ 8277989 message OldaleTown_PokemonCenter_2F_Text_2792CD waitmessage - multichoice 16, 6, 81, 0 + multichoice 16, 6, MULTI_LINK_LEADER, 0 switch VAR_RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_2779EE case 1, OldaleTown_PokemonCenter_2F_EventScript_2779C6 case 2, OldaleTown_PokemonCenter_2F_EventScript_2772EC - case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC + case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC end OldaleTown_PokemonCenter_2F_EventScript_2779C6:: @ 82779C6 @@ -1268,12 +1268,12 @@ OldaleTown_PokemonCenter_2F_EventScript_2779EE:: @ 82779EE OldaleTown_PokemonCenter_2F_EventScript_277A16:: @ 8277A16 message OldaleTown_PokemonCenter_2F_Text_279334 waitmessage - multichoice 16, 6, 81, 0 + multichoice 16, 6, MULTI_LINK_LEADER, 0 switch VAR_RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_277A7B case 1, OldaleTown_PokemonCenter_2F_EventScript_277A53 case 2, OldaleTown_PokemonCenter_2F_EventScript_2772EC - case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC + case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC end OldaleTown_PokemonCenter_2F_EventScript_277A53:: @ 8277A53 @@ -1301,12 +1301,12 @@ OldaleTown_PokemonCenter_2F_EventScript_277A7B:: @ 8277A7B OldaleTown_PokemonCenter_2F_EventScript_277AA3:: @ 8277AA3 message OldaleTown_PokemonCenter_2F_Text_2793A3 waitmessage - multichoice 16, 6, 81, 0 + multichoice 16, 6, MULTI_LINK_LEADER, 0 switch VAR_RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_277B08 case 1, OldaleTown_PokemonCenter_2F_EventScript_277AE0 case 2, OldaleTown_PokemonCenter_2F_EventScript_2772EC - case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC + case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC end OldaleTown_PokemonCenter_2F_EventScript_277AE0:: @ 8277AE0 @@ -1445,12 +1445,12 @@ MossdeepCity_GameCorner_1F_EventScript_277C34:: @ 8277C34 faceplayer message MossdeepCity_GameCorner_1F_Text_278A7D waitmessage - multichoice 0, 0, 80, 0 + multichoice 0, 0, MULTI_WIRELESS_MINIGAME, 0 switch VAR_RESULT case 0, MossdeepCity_GameCorner_1F_EventScript_277C73 case 1, MossdeepCity_GameCorner_1F_EventScript_277C7D case 2, MossdeepCity_GameCorner_1F_EventScript_277C87 - case 127, MossdeepCity_GameCorner_1F_EventScript_277C87 + case MULTI_B_PRESSED, MossdeepCity_GameCorner_1F_EventScript_277C87 end MossdeepCity_GameCorner_1F_EventScript_277C73:: @ 8277C73 @@ -1479,12 +1479,12 @@ MossdeepCity_GameCorner_1F_EventScript_277C91:: @ 8277C91 delay 60 message MossdeepCity_GameCorner_1F_Text_278DAD waitmessage - multichoice 0, 0, 80, 0 + multichoice 0, 0, MULTI_WIRELESS_MINIGAME, 0 switch VAR_RESULT case 0, MossdeepCity_GameCorner_1F_EventScript_277CE9 case 1, MossdeepCity_GameCorner_1F_EventScript_277D35 case 2, MossdeepCity_GameCorner_1F_EventScript_2772F9 - case 127, MossdeepCity_GameCorner_1F_EventScript_2772F9 + case MULTI_B_PRESSED, MossdeepCity_GameCorner_1F_EventScript_2772F9 end MossdeepCity_GameCorner_1F_EventScript_277CE9:: @ 8277CE9 @@ -1528,12 +1528,12 @@ MossdeepCity_GameCorner_1F_EventScript_277D35:: @ 8277D35 MossdeepCity_GameCorner_1F_EventScript_277D81:: @ 8277D81 message MossdeepCity_GameCorner_1F_Text_2793A3 waitmessage - multichoice 16, 6, 81, 0 + multichoice 16, 6, MULTI_LINK_LEADER, 0 switch VAR_RESULT case 0, MossdeepCity_GameCorner_1F_EventScript_277DE6 case 1, MossdeepCity_GameCorner_1F_EventScript_277DBE case 2, MossdeepCity_GameCorner_1F_EventScript_2772F9 - case 127, MossdeepCity_GameCorner_1F_EventScript_2772F9 + case MULTI_B_PRESSED, MossdeepCity_GameCorner_1F_EventScript_2772F9 end MossdeepCity_GameCorner_1F_EventScript_277DBE:: @ 8277DBE @@ -1626,15 +1626,15 @@ OldaleTown_PokemonCenter_2F_Text_277EF1: @ 8277EF1 .string "Which of our services do you wish\n" .string "to use?$" -OldaleTown_PokemonCenter_2F_Text_277F1B:: @ 8277F1B +CableClub_Text_TradeUsingLinkCable:: @ 8277F1B .string "Trade POKéMON with another player\n" .string "using a GBA Game Link cable.$" -OldaleTown_PokemonCenter_2F_Text_277F5A:: @ 8277F5A +CableClub_Text_BattleUsingLinkCable:: @ 8277F5A .string "You may battle another TRAINER\n" .string "using a GBA Game Link cable.$" -OldaleTown_PokemonCenter_2F_Text_277F96:: @ 8277F96 +CableClub_Text_RecordCornerUsingLinkCable:: @ 8277F96 .string "You can use the RECORD CORNER with\n" .string "others using a GBA Game Link cable.$" @@ -1804,19 +1804,19 @@ OldaleTown_PokemonCenter_2F_Text_27878B: @ 827878B OldaleTown_PokemonCenter_2F_Text_278792: @ 8278792 .string "Please wait.$" -OldaleTown_PokemonCenter_2F_Text_27879F:: @ 827879F +CableClub_Text_YouMayTradeHere:: @ 827879F .string "You may trade your POKéMON here\n" .string "with another TRAINER.$" -OldaleTown_PokemonCenter_2F_Text_2787D5:: @ 82787D5 +CableClub_Text_YouMayBattleHere:: @ 82787D5 .string "You may battle with your friends\n" .string "here.$" -OldaleTown_PokemonCenter_2F_Text_2787FC:: @ 82787FC +CableClub_Text_CanMakeBerryPowder:: @ 82787FC .string "Two to five TRAINERS can make\n" .string "BERRY POWDER together.$" -OldaleTown_PokemonCenter_2F_Text_278831:: @ 8278831 +CableClub_Text_CanMixRecords:: @ 8278831 .string "The records of two to four players\n" .string "can be mixed together.$" @@ -1824,7 +1824,7 @@ OldaleTown_PokemonCenter_2F_Text_27886B: @ 827886B .string "A guide to the WIRELESS CLUB's\n" .string "various services.$" -OldaleTown_PokemonCenter_2F_Text_27889C:: @ 827889C +CableClub_Text_CancelSelectedItem:: @ 827889C .string "Cancels the selected MENU item.$" OldaleTown_PokemonCenter_2F_Text_2788BC: @ 82788BC diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 6c19cdc0c..03863eb40 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -43,24 +43,24 @@ LilycoveCity_ContestLobby_EventScript_279D4B:: @ 8279D4B LilycoveCity_ContestLobby_EventScript_279D5A:: @ 8279D5A message LilycoveCity_ContestLobby_Text_27AF28 waitmessage - multichoice 0, 0, 2, 0 + multichoice 0, 0, MULTI_ENTERINFO, 0 switch VAR_RESULT case 0, LilycoveCity_ContestLobby_EventScript_279E62 case 1, LilycoveCity_ContestLobby_EventScript_279D97 case 2, LilycoveCity_ContestLobby_EventScript_279E09 - case 127, LilycoveCity_ContestLobby_EventScript_279E09 + case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_279E09 end LilycoveCity_ContestLobby_EventScript_279D97:: @ 8279D97 message LilycoveCity_ContestLobby_Text_27AF5E waitmessage - multichoice 0, 0, 3, 0 + multichoice 0, 0, MULTI_CONTEST_INFO, 0 switch VAR_RESULT case 0, LilycoveCity_ContestLobby_EventScript_279DDF case 1, LilycoveCity_ContestLobby_EventScript_279DED case 2, LilycoveCity_ContestLobby_EventScript_279DFB case 3, LilycoveCity_ContestLobby_EventScript_279D5A - case 127, LilycoveCity_ContestLobby_EventScript_279D5A + case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_279D5A end LilycoveCity_ContestLobby_EventScript_279DDF:: @ 8279DDF @@ -104,14 +104,14 @@ LilycoveCity_ContestLobby_EventScript_279E13:: @ 8279E13 LilycoveCity_ContestLobby_EventScript_279E62:: @ 8279E62 message LilycoveCity_ContestLobby_Text_27B3FF waitmessage - multichoice 0, 0, 82, 0 + multichoice 0, 0, MULTI_CONTEST_RANK, 0 switch VAR_RESULT case 0, LilycoveCity_ContestLobby_EventScript_279EB5 case 1, LilycoveCity_ContestLobby_EventScript_279EC0 case 2, LilycoveCity_ContestLobby_EventScript_279ECB case 3, LilycoveCity_ContestLobby_EventScript_279ED6 case 4, LilycoveCity_ContestLobby_EventScript_279E09 - case 127, LilycoveCity_ContestLobby_EventScript_279E09 + case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_279E09 end LilycoveCity_ContestLobby_EventScript_279EB5:: @ 8279EB5 @@ -137,10 +137,10 @@ LilycoveCity_ContestLobby_EventScript_279ED6:: @ 8279ED6 LilycoveCity_ContestLobby_EventScript_279EE1:: @ 8279EE1 message LilycoveCity_ContestLobby_Text_27B423 waitmessage - multichoice 0, 0, 4, 0 + multichoice 0, 0, MULTI_CONTEST_TYPE, 0 switch VAR_RESULT case 5, LilycoveCity_ContestLobby_EventScript_279E09 - case 127, LilycoveCity_ContestLobby_EventScript_279E09 + case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_279E09 copyvar VAR_CONTEST_CATEGORY, VAR_RESULT goto LilycoveCity_ContestLobby_EventScript_279E13 end @@ -216,19 +216,19 @@ LinkContestRoom1_EventScript_279FF2:: @ 8279FF2 return LinkContestRoom1_EventScript_27A024:: @ 827A024 - setvar VAR_0x8009, 5 + setvar VAR_0x8009, STDSTRING_NORMAL return LinkContestRoom1_EventScript_27A02A:: @ 827A02A - setvar VAR_0x8009, 6 + setvar VAR_0x8009, STDSTRING_SUPER return LinkContestRoom1_EventScript_27A030:: @ 827A030 - setvar VAR_0x8009, 7 + setvar VAR_0x8009, STDSTRING_HYPER return LinkContestRoom1_EventScript_27A036:: @ 827A036 - setvar VAR_0x8009, 8 + setvar VAR_0x8009, STDSTRING_MASTER return LinkContestRoom1_EventScript_27A03C:: @ 827A03C @@ -241,27 +241,27 @@ LinkContestRoom1_EventScript_27A03C:: @ 827A03C return LinkContestRoom1_EventScript_27A079:: @ 827A079 - setvar VAR_0x8008, 0 + setvar VAR_0x8008, CONTEST_CATEGORY_COOL return LinkContestRoom1_EventScript_27A07F:: @ 827A07F - setvar VAR_0x8008, 1 + setvar VAR_0x8008, CONTEST_CATEGORY_BEAUTY return LinkContestRoom1_EventScript_27A085:: @ 827A085 - setvar VAR_0x8008, 2 + setvar VAR_0x8008, CONTEST_CATEGORY_CUTE return LinkContestRoom1_EventScript_27A08B:: @ 827A08B - setvar VAR_0x8008, 3 + setvar VAR_0x8008, CONTEST_CATEGORY_SMART return LinkContestRoom1_EventScript_27A091:: @ 827A091 - setvar VAR_0x8008, 4 + setvar VAR_0x8008, CONTEST_CATEGORY_TOUGH return LinkContestRoom1_EventScript_27A097:: @ 827A097 - buffercontesttypestring 1, 32776 + buffercontesttypestring 1, VAR_0x8008 bufferstdstring 2, VAR_0x8009 call LinkContestRoom1_EventScript_27A0B1 lockall @@ -1012,71 +1012,71 @@ LinkContestRoom1_EventScript_27AA1B:: @ 827AA1B return LinkContestRoom1_EventScript_27AA6F:: @ 827AA6F - turnvobject 0, 1 - turnvobject 2, 1 - turnvobject 4, 4 - turnvobject 6, 1 - turnvobject 8, 1 - turnvobject 10, 1 - turnvobject 12, 1 - turnvobject 14, 1 - turnvobject 16, 1 - turnvobject 18, 1 - turnvobject 20, 4 - turnvobject 22, 4 - turnvobject 25, 4 - turnvobject 27, 3 - turnvobject 28, 4 + turnvobject 0, DIR_SOUTH + turnvobject 2, DIR_SOUTH + turnvobject 4, DIR_EAST + turnvobject 6, DIR_SOUTH + turnvobject 8, DIR_SOUTH + turnvobject 10, DIR_SOUTH + turnvobject 12, DIR_SOUTH + turnvobject 14, DIR_SOUTH + turnvobject 16, DIR_SOUTH + turnvobject 18, DIR_SOUTH + turnvobject 20, DIR_EAST + turnvobject 22, DIR_EAST + turnvobject 25, DIR_EAST + turnvobject 27, DIR_WEST + turnvobject 28, DIR_EAST delay 10 - turnvobject 0, 4 - turnvobject 2, 4 - turnvobject 4, 4 - turnvobject 6, 4 - turnvobject 8, 4 - turnvobject 10, 3 - turnvobject 12, 3 - turnvobject 14, 3 - turnvobject 16, 3 - turnvobject 18, 3 - turnvobject 20, 1 - turnvobject 22, 1 - turnvobject 25, 2 - turnvobject 27, 2 - turnvobject 28, 2 + turnvobject 0, DIR_EAST + turnvobject 2, DIR_EAST + turnvobject 4, DIR_EAST + turnvobject 6, DIR_EAST + turnvobject 8, DIR_EAST + turnvobject 10, DIR_WEST + turnvobject 12, DIR_WEST + turnvobject 14, DIR_WEST + turnvobject 16, DIR_WEST + turnvobject 18, DIR_WEST + turnvobject 20, DIR_SOUTH + turnvobject 22, DIR_SOUTH + turnvobject 25, DIR_NORTH + turnvobject 27, DIR_NORTH + turnvobject 28, DIR_NORTH delay 10 - turnvobject 1, 2 - turnvobject 3, 2 - turnvobject 5, 2 - turnvobject 7, 2 - turnvobject 9, 4 - turnvobject 11, 2 - turnvobject 15, 2 - turnvobject 13, 2 - turnvobject 17, 2 - turnvobject 19, 2 - turnvobject 21, 3 - turnvobject 23, 3 - turnvobject 24, 3 - turnvobject 26, 4 - turnvobject 29, 3 - turnvobject 30, 3 + turnvobject 1, DIR_NORTH + turnvobject 3, DIR_NORTH + turnvobject 5, DIR_NORTH + turnvobject 7, DIR_NORTH + turnvobject 9, DIR_EAST + turnvobject 11, DIR_NORTH + turnvobject 15, DIR_NORTH + turnvobject 13, DIR_NORTH + turnvobject 17, DIR_NORTH + turnvobject 19, DIR_NORTH + turnvobject 21, DIR_WEST + turnvobject 23, DIR_WEST + turnvobject 24, DIR_WEST + turnvobject 26, DIR_EAST + turnvobject 29, DIR_WEST + turnvobject 30, DIR_WEST delay 10 - turnvobject 1, 4 - turnvobject 3, 4 - turnvobject 5, 4 - turnvobject 7, 4 - turnvobject 9, 4 - turnvobject 11, 3 - turnvobject 15, 3 - turnvobject 13, 3 - turnvobject 17, 3 - turnvobject 19, 3 - turnvobject 21, 1 - turnvobject 23, 1 - turnvobject 24, 1 - turnvobject 26, 2 - turnvobject 29, 2 - turnvobject 30, 2 + turnvobject 1, DIR_EAST + turnvobject 3, DIR_EAST + turnvobject 5, DIR_EAST + turnvobject 7, DIR_EAST + turnvobject 9, DIR_EAST + turnvobject 11, DIR_WEST + turnvobject 15, DIR_WEST + turnvobject 13, DIR_WEST + turnvobject 17, DIR_WEST + turnvobject 19, DIR_WEST + turnvobject 21, DIR_SOUTH + turnvobject 23, DIR_SOUTH + turnvobject 24, DIR_SOUTH + turnvobject 26, DIR_NORTH + turnvobject 29, DIR_NORTH + turnvobject 30, DIR_NORTH delay 10 return diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index 057a2fa07..062fd9f5a 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -1,245 +1,245 @@ -Route117_EventScript_291C18:: @ 8291C18 +Route117_EventScript_DaycareMan:: @ 8291C18 lock faceplayer special GetDaycareMonNicknames specialvar VAR_RESULT, GetDaycareState - compare VAR_RESULT, 1 - goto_if_eq Route117_EventScript_291C4D - compare VAR_RESULT, 2 - goto_if_eq Route117_EventScript_291CD1 - compare VAR_RESULT, 3 - goto_if_eq Route117_EventScript_291CE8 - msgbox Route117_Text_291FCF, MSGBOX_DEFAULT + compare VAR_RESULT, DAYCARE_EGG_WAITING + goto_if_eq Route117_EventScript_DaycareEggWaiting + compare VAR_RESULT, DAYCARE_ONE_MON + goto_if_eq Route117_EventScript_CheckOnOneMon + compare VAR_RESULT, DAYCARE_TWO_MONS + goto_if_eq Route117_EventScript_CheckOnTwoMons + msgbox Route117_Text_SeeWifeIfYoudLikeMeToRaiseMon, MSGBOX_DEFAULT release end -Route117_EventScript_291C4D:: @ 8291C4D - msgbox Route117_Text_29205D, MSGBOX_YESNO +Route117_EventScript_DaycareEggWaiting:: @ 8291C4D + msgbox Route117_Text_DoYouWantEgg, MSGBOX_YESNO compare VAR_RESULT, 1 - goto_if_eq Route117_EventScript_291C83 - msgbox Route117_Text_2922C6, MSGBOX_YESNO + goto_if_eq Route117_EventScript_DaycareAcceptEgg + msgbox Route117_Text_IWillKeepDoYouWantIt, MSGBOX_YESNO compare VAR_RESULT, 1 - goto_if_eq Route117_EventScript_291C83 - msgbox Route117_Text_292149, MSGBOX_DEFAULT + goto_if_eq Route117_EventScript_DaycareAcceptEgg + msgbox Route117_Text_IllKeepIt, MSGBOX_DEFAULT clearflag FLAG_PENDING_DAYCARE_EGG special RejectEggFromDayCare release end -Route117_EventScript_291C83:: @ 8291C83 +Route117_EventScript_DaycareAcceptEgg:: @ 8291C83 specialvar VAR_RESULT, CalculatePlayerPartyCount - compare VAR_RESULT, 6 - goto_if_ne Route117_EventScript_291C9D - msgbox Route117_Text_29216A, MSGBOX_DEFAULT + compare VAR_RESULT, PARTY_SIZE + goto_if_ne Route117_EventScript_DaycareReceiveEgg + msgbox Route117_Text_YouHaveNoRoomForIt, MSGBOX_DEFAULT release end -Route117_EventScript_291C9D:: @ 8291C9D - message Route117_Text_2921A4 +Route117_EventScript_DaycareReceiveEgg:: @ 8291C9D + message Route117_Text_ReceivedEgg playfanfare MUS_FANFA1 waitfanfare waitbuttonpress - msgbox Route117_Text_2921CF, MSGBOX_DEFAULT + msgbox Route117_Text_TakeGoodCareOfIt, MSGBOX_DEFAULT special GiveEggFromDaycare clearflag FLAG_PENDING_DAYCARE_EGG release end -Route117_EventScript_291CB7:: @ 8291CB7 - specialvar VAR_RESULT, sub_8071614 +Route117_EventScript_CheckMonReceivedMail:: @ 8291CB7 + specialvar VAR_RESULT, CheckDaycareMonReceivedMail compare VAR_RESULT, 1 - call_if_eq Route117_EventScript_291CC8 + call_if_eq Route117_EventScript_MonReceivedMail return -Route117_EventScript_291CC8:: @ 8291CC8 - msgbox Route117_Text_2921E5, MSGBOX_DEFAULT +Route117_EventScript_MonReceivedMail:: @ 8291CC8 + msgbox Route117_Text_FriendlyWithOtherTrainersMon, MSGBOX_DEFAULT return -Route117_EventScript_291CD1:: @ 8291CD1 +Route117_EventScript_CheckOnOneMon:: @ 8291CD1 special GetDaycareMonNicknames - msgbox Route117_Text_292114, MSGBOX_DEFAULT + msgbox Route117_Text_YourMonIsDoingFine, MSGBOX_DEFAULT setvar VAR_0x8004, 0 - call Route117_EventScript_291CB7 + call Route117_EventScript_CheckMonReceivedMail release end -Route117_EventScript_291CE8:: @ 8291CE8 +Route117_EventScript_CheckOnTwoMons:: @ 8291CE8 special GetDaycareMonNicknames - msgbox Route117_Text_292299, MSGBOX_DEFAULT + msgbox Route117_Text_YourMonsAreDoingFine, MSGBOX_DEFAULT special SetDaycareCompatibilityString special ShowFieldMessageStringVar4 waitmessage waitbuttonpress setvar VAR_0x8004, 0 - call Route117_EventScript_291CB7 + call Route117_EventScript_CheckMonReceivedMail setvar VAR_0x8004, 1 - call Route117_EventScript_291CB7 + call Route117_EventScript_CheckMonReceivedMail release end -Route117_PokemonDayCare_EventScript_291D11:: @ 8291D11 +Route117_PokemonDayCare_EventScript_DaycareWoman:: @ 8291D11 lock faceplayer specialvar VAR_RESULT, GetDaycareState + compare VAR_RESULT, DAYCARE_EGG_WAITING + goto_if_eq Route117_PokemonDayCare_EventScript_EggWaiting + compare VAR_RESULT, DAYCARE_ONE_MON + goto_if_eq Route117_PokemonDayCare_EventScript_OneMonInDaycare + compare VAR_RESULT, DAYCARE_TWO_MONS + goto_if_eq Route117_PokemonDayCare_EventScript_TwoMonsInDaycare + msgbox Route117_PokemonDayCare_Text_WouldYouLikeUsToRaiseAMon, MSGBOX_YESNO compare VAR_RESULT, 1 - goto_if_eq Route117_PokemonDayCare_EventScript_291E0B - compare VAR_RESULT, 2 - goto_if_eq Route117_PokemonDayCare_EventScript_291E2F - compare VAR_RESULT, 3 - goto_if_eq Route117_PokemonDayCare_EventScript_291F5C - msgbox Route117_PokemonDayCare_Text_2922F4, MSGBOX_YESNO - compare VAR_RESULT, 1 - goto_if_eq Route117_PokemonDayCare_EventScript_291D56 + goto_if_eq Route117_PokemonDayCare_EventScript_GiveMonToRaise msgbox Route117_PokemonDayCare_Text_292416, MSGBOX_DEFAULT release end -Route117_PokemonDayCare_EventScript_291D56:: @ 8291D56 +Route117_PokemonDayCare_EventScript_GiveMonToRaise:: @ 8291D56 specialvar VAR_RESULT, CountPartyNonEggMons compare VAR_RESULT, 1 - goto_if_eq Route117_PokemonDayCare_EventScript_291DED - specialvar VAR_RESULT, sub_80722E0 + goto_if_eq Route117_PokemonDayCare_EventScript_OnlyOneMon + specialvar VAR_RESULT, CountPartyAliveNonEggMons compare VAR_RESULT, 2 - goto_if_eq Route117_PokemonDayCare_EventScript_291E01 - msgbox Route117_PokemonDayCare_Text_292349, MSGBOX_DEFAULT + goto_if_eq Route117_PokemonDayCare_EventScript_OnlyTwoAliveMons + msgbox Route117_PokemonDayCare_Text_WhichMonShouldWeRaise, MSGBOX_DEFAULT fadescreen 1 special ChooseSendDaycareMon waitstate compare VAR_0x8004, 255 - goto_if_eq Route117_PokemonDayCare_EventScript_291DCA + goto_if_eq Route117_PokemonDayCare_EventScript_ComeAgain specialvar VAR_RESULT, CountPartyAliveNonEggMons_IgnoreVar0x8004Slot compare VAR_RESULT, 0 - goto_if_eq Route117_PokemonDayCare_EventScript_291DF7 - specialvar VAR_0x8005, GetSelectedMonNickAndSpecies + goto_if_eq Route117_PokemonDayCare_EventScript_OnlyOneAliveMon + specialvar VAR_0x8005, GetSelectedMonNicknameAndSpecies waitse playmoncry VAR_0x8005, 0 - msgbox Route117_PokemonDayCare_Text_292370, MSGBOX_DEFAULT + msgbox Route117_PokemonDayCare_Text_WellRaiseYourMon, MSGBOX_DEFAULT waitmoncry special StoreSelectedPokemonInDaycare - incrementgamestat 47 + incrementgamestat GAME_STAT_USED_DAYCARE specialvar VAR_RESULT, GetDaycareState - compare VAR_RESULT, 2 - goto_if_eq Route117_PokemonDayCare_EventScript_291DD4 + compare VAR_RESULT, DAYCARE_ONE_MON + goto_if_eq Route117_PokemonDayCare_EventScript_CanRaiseOneMore release end -Route117_PokemonDayCare_EventScript_291DCA:: @ 8291DCA - msgbox Route117_PokemonDayCare_Text_292476, MSGBOX_DEFAULT +Route117_PokemonDayCare_EventScript_ComeAgain:: @ 8291DCA + msgbox Route117_PokemonDayCare_Text_ComeAgain, MSGBOX_DEFAULT release end -Route117_PokemonDayCare_EventScript_291DD4:: @ 8291DD4 - msgbox Route117_PokemonDayCare_Text_2923AF, MSGBOX_YESNO +Route117_PokemonDayCare_EventScript_CanRaiseOneMore:: @ 8291DD4 + msgbox Route117_PokemonDayCare_Text_WeCanRaiseOneMore, MSGBOX_YESNO compare VAR_RESULT, 1 - goto_if_eq Route117_PokemonDayCare_EventScript_291D56 - goto Route117_PokemonDayCare_EventScript_291DCA + goto_if_eq Route117_PokemonDayCare_EventScript_GiveMonToRaise + goto Route117_PokemonDayCare_EventScript_ComeAgain end -Route117_PokemonDayCare_EventScript_291DED:: @ 8291DED - msgbox Route117_PokemonDayCare_Text_2925BB, MSGBOX_DEFAULT +Route117_PokemonDayCare_EventScript_OnlyOneMon:: @ 8291DED + msgbox Route117_PokemonDayCare_Text_YouHaveJustOneMon, MSGBOX_DEFAULT release end -Route117_PokemonDayCare_EventScript_291DF7:: @ 8291DF7 - msgbox Route117_PokemonDayCare_Text_292617, MSGBOX_DEFAULT +Route117_PokemonDayCare_EventScript_OnlyOneAliveMon:: @ 8291DF7 + msgbox Route117_PokemonDayCare_Text_WhatWillYouBattleWith, MSGBOX_DEFAULT release end -Route117_PokemonDayCare_EventScript_291E01:: @ 8291E01 - msgbox Route117_PokemonDayCare_Text_29266D, MSGBOX_DEFAULT +Route117_PokemonDayCare_EventScript_OnlyTwoAliveMons:: @ 8291E01 + msgbox Route117_PokemonDayCare_Text_YoullBeLeftWithJustOne, MSGBOX_DEFAULT release end -Route117_PokemonDayCare_EventScript_291E0B:: @ 8291E0B - msgbox Route117_PokemonDayCare_Text_2923F6, MSGBOX_DEFAULT +Route117_PokemonDayCare_EventScript_EggWaiting:: @ 8291E0B + msgbox Route117_PokemonDayCare_Text_HusbandWasLookingForYou, MSGBOX_DEFAULT release end -Route117_PokemonDayCare_EventScript_291E15:: @ 8291E15 - msgbox Route117_PokemonDayCare_Text_2924CC, MSGBOX_DEFAULT +Route117_PokemonDayCare_EventScript_YourMonHasGrownXLevels:: @ 8291E15 + msgbox Route117_PokemonDayCare_Text_YourMonHasGrownXLevels, MSGBOX_DEFAULT return -Route117_PokemonDayCare_EventScript_291E1E:: @ 8291E1E +Route117_PokemonDayCare_EventScript_DisplayLevelsGained:: @ 8291E1E specialvar VAR_RESULT, GetNumLevelsGainedFromDaycare compare VAR_RESULT, 0 - call_if_ne Route117_PokemonDayCare_EventScript_291E15 + call_if_ne Route117_PokemonDayCare_EventScript_YourMonHasGrownXLevels return -Route117_PokemonDayCare_EventScript_291E2F:: @ 8291E2F - msgbox Route117_PokemonDayCare_Text_292488, MSGBOX_DEFAULT +Route117_PokemonDayCare_EventScript_OneMonInDaycare:: @ 8291E2F + msgbox Route117_PokemonDayCare_Text_GoodToSeeYou, MSGBOX_DEFAULT setvar VAR_0x8004, 0 - call Route117_PokemonDayCare_EventScript_291E1E - msgbox Route117_PokemonDayCare_Text_2923AF, MSGBOX_YESNO + call Route117_PokemonDayCare_EventScript_DisplayLevelsGained + msgbox Route117_PokemonDayCare_Text_WeCanRaiseOneMore, MSGBOX_YESNO compare VAR_RESULT, 1 - goto_if_eq Route117_PokemonDayCare_EventScript_291D56 - msgbox Route117_PokemonDayCare_Text_2925F6, MSGBOX_YESNO + goto_if_eq Route117_PokemonDayCare_EventScript_GiveMonToRaise + msgbox Route117_PokemonDayCare_Text_TakeYourMonBack, MSGBOX_YESNO compare VAR_RESULT, 1 - goto_if_eq Route117_PokemonDayCare_EventScript_291E6D - goto Route117_PokemonDayCare_EventScript_291DCA + goto_if_eq Route117_PokemonDayCare_EventScript_TryRetrieveMon + goto Route117_PokemonDayCare_EventScript_ComeAgain end -Route117_PokemonDayCare_EventScript_291E6D:: @ 8291E6D +Route117_PokemonDayCare_EventScript_TryRetrieveMon:: @ 8291E6D specialvar VAR_RESULT, CalculatePlayerPartyCount - compare VAR_RESULT, 6 - goto_if_eq Route117_PokemonDayCare_EventScript_291F3D + compare VAR_RESULT, PARTY_SIZE + goto_if_eq Route117_PokemonDayCare_EventScript_NoRoom specialvar VAR_RESULT, GetDaycareState setvar VAR_0x8004, 0 - compare VAR_RESULT, 2 - goto_if_eq Route117_PokemonDayCare_EventScript_291EAC + compare VAR_RESULT, DAYCARE_ONE_MON + goto_if_eq Route117_PokemonDayCare_EventScript_CostPrompt special ShowDaycareLevelMenu waitstate copyvar VAR_0x8004, VAR_RESULT - compare VAR_RESULT, 2 - goto_if_eq Route117_PokemonDayCare_EventScript_291DCA - goto Route117_PokemonDayCare_EventScript_291EAC + compare VAR_RESULT, DAYCARE_EXITED_LEVEL_MENU + goto_if_eq Route117_PokemonDayCare_EventScript_ComeAgain + goto Route117_PokemonDayCare_EventScript_CostPrompt end -Route117_PokemonDayCare_EventScript_291EAC:: @ 8291EAC +Route117_PokemonDayCare_EventScript_CostPrompt:: @ 8291EAC special GetDaycareCost - msgbox Route117_PokemonDayCare_Text_292549, MSGBOX_YESNO + msgbox Route117_PokemonDayCare_Text_ItWillCostX, MSGBOX_YESNO compare VAR_RESULT, 1 - goto_if_eq Route117_PokemonDayCare_EventScript_291EC8 - goto Route117_PokemonDayCare_EventScript_291DCA + goto_if_eq Route117_PokemonDayCare_EventScript_CheckEnoughMoney + goto Route117_PokemonDayCare_EventScript_ComeAgain end -Route117_PokemonDayCare_EventScript_291EC8:: @ 8291EC8 +Route117_PokemonDayCare_EventScript_CheckEnoughMoney:: @ 8291EC8 specialvar VAR_RESULT, IsEnoughForCostInVar0x8005 compare VAR_RESULT, 1 - goto_if_eq Route117_PokemonDayCare_EventScript_291EE2 - msgbox Route117_PokemonDayCare_Text_292432, MSGBOX_DEFAULT + goto_if_eq Route117_PokemonDayCare_EventScript_RetrieveMon + msgbox Route117_PokemonDayCare_Text_NotEnoughMoney, MSGBOX_DEFAULT release end -Route117_PokemonDayCare_EventScript_291EE2:: @ 8291EE2 - applymovement 1, Route117_PokemonDayCare_Movement_291F47 +Route117_PokemonDayCare_EventScript_RetrieveMon:: @ 8291EE2 + applymovement 1, Route117_PokemonDayCare_Movement_RetrieveDaycareMon waitmovement 0 specialvar VAR_RESULT, TakePokemonFromDaycare special SubtractMoneyFromVar0x8005 playse SE_REGI - msgbox Route117_PokemonDayCare_Text_292575, MSGBOX_DEFAULT + msgbox Route117_PokemonDayCare_Text_HeresYourMon, MSGBOX_DEFAULT waitse playmoncry VAR_RESULT, 0 - msgbox Route117_PokemonDayCare_Text_292593, MSGBOX_DEFAULT + msgbox Route117_PokemonDayCare_Text_TookBackMon, MSGBOX_DEFAULT waitmoncry specialvar VAR_RESULT, GetDaycareState - compare VAR_RESULT, 2 - goto_if_eq Route117_PokemonDayCare_EventScript_291F24 - goto Route117_PokemonDayCare_EventScript_291DCA + compare VAR_RESULT, DAYCARE_ONE_MON + goto_if_eq Route117_PokemonDayCare_EventScript_AskRetrieveOtherMon + goto Route117_PokemonDayCare_EventScript_ComeAgain end -Route117_PokemonDayCare_EventScript_291F24:: @ 8291F24 - msgbox Route117_PokemonDayCare_Text_29244F, MSGBOX_YESNO +Route117_PokemonDayCare_EventScript_AskRetrieveOtherMon:: @ 8291F24 + msgbox Route117_PokemonDayCare_Text_TakeOtherOneBackToo, MSGBOX_YESNO compare VAR_RESULT, 1 - goto_if_eq Route117_PokemonDayCare_EventScript_291E6D - goto Route117_PokemonDayCare_EventScript_291DCA + goto_if_eq Route117_PokemonDayCare_EventScript_TryRetrieveMon + goto Route117_PokemonDayCare_EventScript_ComeAgain end -Route117_PokemonDayCare_EventScript_291F3D:: @ 8291F3D - msgbox Route117_PokemonDayCare_Text_2924EF, MSGBOX_DEFAULT +Route117_PokemonDayCare_EventScript_NoRoom:: @ 8291F3D + msgbox Route117_PokemonDayCare_Text_YourTeamIsFull, MSGBOX_DEFAULT release end -Route117_PokemonDayCare_Movement_291F47: @ 8291F47 +Route117_PokemonDayCare_Movement_RetrieveDaycareMon: @ 8291F47 delay_16 delay_16 face_left @@ -261,50 +261,52 @@ Route117_PokemonDayCare_Movement_291F47: @ 8291F47 walk_slow_down step_end +@ Unused. Possibly a commented script, or a typo end added to the above Movement script Route117_PokemonDayCare_EventScript_291F5B:: @ 8291F5B end -Route117_PokemonDayCare_EventScript_291F5C:: @ 8291F5C - msgbox Route117_PokemonDayCare_Text_292488, MSGBOX_DEFAULT +Route117_PokemonDayCare_EventScript_TwoMonsInDaycare:: @ 8291F5C + msgbox Route117_PokemonDayCare_Text_GoodToSeeYou, MSGBOX_DEFAULT setvar VAR_0x8004, 0 - call Route117_PokemonDayCare_EventScript_291E1E + call Route117_PokemonDayCare_EventScript_DisplayLevelsGained setvar VAR_0x8004, 1 - call Route117_PokemonDayCare_EventScript_291E1E - msgbox Route117_PokemonDayCare_Text_2925F6, MSGBOX_YESNO + call Route117_PokemonDayCare_EventScript_DisplayLevelsGained + msgbox Route117_PokemonDayCare_Text_TakeYourMonBack, MSGBOX_YESNO compare VAR_RESULT, 1 - goto_if_eq Route117_PokemonDayCare_EventScript_291E6D - msgbox Route117_PokemonDayCare_Text_292476, MSGBOX_DEFAULT + goto_if_eq Route117_PokemonDayCare_EventScript_TryRetrieveMon + msgbox Route117_PokemonDayCare_Text_ComeAgain, MSGBOX_DEFAULT release end +@ Unused Route117_PokemonDayCare_EventScript_291F95:: @ 8291F95 special ShowDaycareLevelMenu waitstate compare VAR_RESULT, 2 - goto_if_eq Route117_PokemonDayCare_EventScript_291DCA + goto_if_eq Route117_PokemonDayCare_EventScript_ComeAgain copyvar VAR_0x8004, VAR_RESULT specialvar VAR_RESULT, TakePokemonFromDaycare - msgbox Route117_PokemonDayCare_Text_292575, MSGBOX_DEFAULT - msgbox Route117_PokemonDayCare_Text_292476, MSGBOX_DEFAULT + msgbox Route117_PokemonDayCare_Text_HeresYourMon, MSGBOX_DEFAULT + msgbox Route117_PokemonDayCare_Text_ComeAgain, MSGBOX_DEFAULT release end EventScript_EggHatch:: @ 8291FC0 lockall - msgbox Text_292668, MSGBOX_DEFAULT + msgbox Text_EggHatchHuh, MSGBOX_DEFAULT special EggHatch waitstate releaseall end -Route117_Text_291FCF: @ 8291FCF +Route117_Text_SeeWifeIfYoudLikeMeToRaiseMon: @ 8291FCF .string "I'm the DAY-CARE MAN.\p" .string "I help take care of the precious\n" .string "POKéMON of TRAINERS.\p" .string "If you'd like me to raise your POKéMON,\n" .string "have a word with my wife.$" -Route117_Text_29205D: @ 829205D +Route117_Text_DoYouWantEgg: @ 829205D .string "Ah, it's you!\p" .string "We were raising your POKéMON,\n" .string "and my goodness, were we surprised!\p" @@ -313,124 +315,125 @@ Route117_Text_29205D: @ 829205D .string "but your POKéMON had it.\p" .string "You do want it, yes?$" -Route117_Text_292114: @ 8292114 +Route117_Text_YourMonIsDoingFine: @ 8292114 .string "Ah, it's you! Good to see you.\n" .string "Your {STR_VAR_1}'s doing fine.$" -Route117_Text_292149: @ 8292149 +Route117_Text_IllKeepIt: @ 8292149 .string "Well then, I'll keep it.\n" .string "Thanks!$" -Route117_Text_29216A: @ 829216A +Route117_Text_YouHaveNoRoomForIt: @ 829216A .string "You have no room for it…\n" .string "Come back when you've made room.$" -Route117_Text_2921A4: @ 82921A4 +Route117_Text_ReceivedEgg: @ 82921A4 .string "{PLAYER} received the EGG from\n" .string "the DAY-CARE MAN.$" -Route117_Text_2921CF: @ 82921CF +Route117_Text_TakeGoodCareOfIt: @ 82921CF .string "Take good care of it.$" -Route117_Text_2921E5: @ 82921E5 +Route117_Text_FriendlyWithOtherTrainersMon: @ 82921E5 .string "By the way, about your {STR_VAR_1},\n" .string "it seemed to be friendly with\l" .string "{STR_VAR_2}'s {STR_VAR_3}.\p" .string "I may even have seen it receiving\n" .string "a piece of MAIL.$" -Route117_Text_29225A: @ 829225A +@ Unused +Route117_Text_SeeWifeIfYouWantToPickUpMon: @ 829225A .string "If you want to pick up your POKéMON,\n" .string "have a word with my wife.$" -Route117_Text_292299: @ 8292299 +Route117_Text_YourMonsAreDoingFine: @ 8292299 .string "Ah, it's you! Your {STR_VAR_1} and\n" .string "{STR_VAR_2} are doing fine.$" -Route117_Text_2922C6: @ 82922C6 +Route117_Text_IWillKeepDoYouWantIt: @ 82922C6 .string "I really will keep it.\n" .string "You do want this, yes?$" -Route117_PokemonDayCare_Text_2922F4: @ 82922F4 +Route117_PokemonDayCare_Text_WouldYouLikeUsToRaiseAMon: @ 82922F4 .string "I'm the DAY-CARE LADY.\p" .string "We can raise POKéMON for you.\p" .string "Would you like us to raise one?$" -Route117_PokemonDayCare_Text_292349: @ 8292349 +Route117_PokemonDayCare_Text_WhichMonShouldWeRaise: @ 8292349 .string "Which POKéMON should we raise for\n" .string "you?$" -Route117_PokemonDayCare_Text_292370: @ 8292370 +Route117_PokemonDayCare_Text_WellRaiseYourMon: @ 8292370 .string "Fine, we'll raise your {STR_VAR_1}\n" .string "for a while.\p" .string "Come back for it later.$" -Route117_PokemonDayCare_Text_2923AF: @ 82923AF +Route117_PokemonDayCare_Text_WeCanRaiseOneMore: @ 82923AF .string "We can raise two of your POKéMON.\n" .string "Would you like us to raise one more?$" -Route117_PokemonDayCare_Text_2923F6: @ 82923F6 +Route117_PokemonDayCare_Text_HusbandWasLookingForYou: @ 82923F6 .string "My husband was looking for you.$" Route117_PokemonDayCare_Text_292416: @ 8292416 .string "Oh, fine, then.\n" .string "Come again.$" -Route117_PokemonDayCare_Text_292432: @ 8292432 +Route117_PokemonDayCare_Text_NotEnoughMoney: @ 8292432 .string "You don't have enough money…$" -Route117_PokemonDayCare_Text_29244F: @ 829244F +Route117_PokemonDayCare_Text_TakeOtherOneBackToo: @ 829244F .string "Will you take back the other one,\n" .string "too?$" -Route117_PokemonDayCare_Text_292476: @ 8292476 +Route117_PokemonDayCare_Text_ComeAgain: @ 8292476 .string "Fine.\n" .string "Come again.$" -Route117_PokemonDayCare_Text_292488: @ 8292488 +Route117_PokemonDayCare_Text_GoodToSeeYou: @ 8292488 .string "Ah, it's you! Good to see you.\n" .string "Your POKéMON can only be doing good!$" -Route117_PokemonDayCare_Text_2924CC: @ 82924CC +Route117_PokemonDayCare_Text_YourMonHasGrownXLevels: @ 82924CC .string "By level, your {STR_VAR_1} has\n" .string "grown by {STR_VAR_2}.$" -Route117_PokemonDayCare_Text_2924EF: @ 82924EF +Route117_PokemonDayCare_Text_YourTeamIsFull: @ 82924EF .string "Your POKéMON team is full.\n" .string "Make room, then come see me.$" Route117_PokemonDayCare_Text_292527: @ 8292527 .string "Which POKéMON will you take back?$" -Route117_PokemonDayCare_Text_292549: @ 8292549 +Route117_PokemonDayCare_Text_ItWillCostX: @ 8292549 .string "If you want your {STR_VAR_1} back,\n" .string "it will cost ¥{STR_VAR_2}.$" -Route117_PokemonDayCare_Text_292575: @ 8292575 +Route117_PokemonDayCare_Text_HeresYourMon: @ 8292575 .string "Perfect!\n" .string "Here's your POKéMON.$" -Route117_PokemonDayCare_Text_292593: @ 8292593 +Route117_PokemonDayCare_Text_TookBackMon: @ 8292593 .string "{PLAYER} took back {STR_VAR_1} from\n" .string "the DAY-CARE LADY.$" -Route117_PokemonDayCare_Text_2925BB: @ 82925BB +Route117_PokemonDayCare_Text_YouHaveJustOneMon: @ 82925BB .string "Oh? But you have just one\n" .string "POKéMON.\p" .string "Come back another time.$" -Route117_PokemonDayCare_Text_2925F6: @ 82925F6 +Route117_PokemonDayCare_Text_TakeYourMonBack: @ 82925F6 .string "Will you take your POKéMON back?$" -Route117_PokemonDayCare_Text_292617: @ 8292617 +Route117_PokemonDayCare_Text_WhatWillYouBattleWith: @ 8292617 .string "If you leave me that POKéMON,\n" .string "what will you battle with?\p" .string "Come back another time.$" -Text_292668: @ 8292668 +Text_EggHatchHuh: @ 8292668 .string "Huh?$" -Route117_PokemonDayCare_Text_29266D: @ 829266D +Route117_PokemonDayCare_Text_YoullBeLeftWithJustOne: @ 829266D .string "Huh?\n" .string "Now, now.\p" .string "If you leave that POKéMON with\n" diff --git a/data/scripts/mystery_event_club.inc b/data/scripts/mystery_event_club.inc index cc189a96b..c8cb84107 100644 --- a/data/scripts/mystery_event_club.inc +++ b/data/scripts/mystery_event_club.inc @@ -8,12 +8,12 @@ PetalburgCity_PokemonCenter_1F_EventScript_291539:: @ 8291539 PetalburgCity_PokemonCenter_1F_EventScript_291552:: @ 8291552 msgbox PetalburgCity_PokemonCenter_1F_Text_2916FF, MSGBOX_DEFAULT - multichoice 17, 6, 20, 0 + multichoice 17, 6, MULTI_YESNOINFO_2, 0 switch VAR_RESULT case 0, PetalburgCity_PokemonCenter_1F_EventScript_29159F case 1, PetalburgCity_PokemonCenter_1F_EventScript_2915EB case 2, PetalburgCity_PokemonCenter_1F_EventScript_291591 - case 127, PetalburgCity_PokemonCenter_1F_EventScript_2915EB + case MULTI_B_PRESSED, PetalburgCity_PokemonCenter_1F_EventScript_2915EB end PetalburgCity_PokemonCenter_1F_EventScript_291591:: @ 8291591 @@ -60,12 +60,12 @@ PetalburgCity_PokemonCenter_1F_EventScript_2915F5:: @ 82915F5 PetalburgCity_PokemonCenter_1F_EventScript_291603:: @ 8291603 msgbox PetalburgCity_PokemonCenter_1F_Text_291A4F, MSGBOX_DEFAULT - multichoice 17, 6, 20, 0 + multichoice 17, 6, MULTI_YESNOINFO_2, 0 switch VAR_RESULT case 0, PetalburgCity_PokemonCenter_1F_EventScript_291650 case 1, PetalburgCity_PokemonCenter_1F_EventScript_29167C case 2, PetalburgCity_PokemonCenter_1F_EventScript_291642 - case 127, PetalburgCity_PokemonCenter_1F_EventScript_29167C + case MULTI_B_PRESSED, PetalburgCity_PokemonCenter_1F_EventScript_29167C end PetalburgCity_PokemonCenter_1F_EventScript_291642:: @ 8291642 diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index c4a5ffe86..855c5eac2 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -507,7 +507,7 @@ LittlerootTown_MaysHouse_1F_EventScript_292AF2:: @ 8292AF2 compare VAR_0x8008, 1 call_if_eq LittlerootTown_BrendansHouse_1F_EventScript_292D9D msgbox LittlerootTown_BrendansHouse_1F_Text_1F8351, MSGBOX_DEFAULT - multichoice 22, 8, 108, 1 + multichoice 22, 8, MULTI_TV_LATI, 1 copyvar VAR_0x8004, VAR_RESULT special InitRoamer copyvar VAR_ROAMER_POKEMON, VAR_RESULT diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc index a26ecb4c9..7b3932341 100644 --- a/data/scripts/pokeblocks.inc +++ b/data/scripts/pokeblocks.inc @@ -714,12 +714,12 @@ LilycoveCity_ContestLobby_EventScript_2941ED: @ 82941ED EventScript_PblocLink_DecideLeader: @ 82941F8 message Text_DecideLinkLeader waitmessage - multichoice 16, 6, 81, 0 + multichoice 16, 6, MULTI_LINK_LEADER, 0 switch VAR_RESULT case 0, EventScript_PblocLink_TryJoinGroup case 1, EventScript_PblocLink_TryBecomeLeader case 2, EventScript_PblocLink_CloseLink - case 127, EventScript_PblocLink_CloseLink + case MULTI_B_PRESSED, EventScript_PblocLink_CloseLink end EventScript_PblocLink_TryBecomeLeader: @ 8294235 diff --git a/data/scripts/trainer_battle.inc b/data/scripts/trainer_battle.inc index c205a9d22..21ba0d6d3 100644 --- a/data/scripts/trainer_battle.inc +++ b/data/scripts/trainer_battle.inc @@ -26,7 +26,7 @@ EventScript_TryDoDoubleTrainerBattle:: @ 827138A compare VAR_RESULT, 0 goto_if_ne EventScript_NoDoubleTrainerBattle special HasEnoughMonsForDoubleBattle - compare VAR_RESULT, 0 + compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS goto_if_ne EventScript_NotEnoughMonsForDoubleBattle special SetUpTrainerEncounterMusic special SetUpTrainerMovement @@ -69,7 +69,7 @@ EventScript_TryDoDoubleRematchBattle:: @ 82713F8 compare VAR_RESULT, 0 goto_if_eq EventScript_NoDoubleRematchTrainerBattle special HasEnoughMonsForDoubleBattle - compare VAR_RESULT, 0 + compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS goto_if_ne EventScript_NotEnoughMonsForDoubleRematchBattle special SetUpTrainerEncounterMusic special SetUpTrainerMovement diff --git a/data/specials.inc b/data/specials.inc index 78a949df5..096a3b33d 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -197,7 +197,7 @@ gSpecials:: @ 81DBA64 def_special RejectEggFromDayCare def_special GiveEggFromDaycare def_special SetDaycareCompatibilityString - def_special GetSelectedMonNickAndSpecies + def_special GetSelectedMonNicknameAndSpecies def_special StoreSelectedPokemonInDaycare def_special ChooseSendDaycareMon def_special ShowDaycareLevelMenu @@ -206,7 +206,7 @@ gSpecials:: @ 81DBA64 def_special TakePokemonFromDaycare def_special ScriptHatchMon def_special EggHatch - def_special sub_8071614 + def_special CheckDaycareMonReceivedMail def_special ShowLinkBattleRecords def_special IsEnoughForCostInVar0x8005 def_special SubtractMoneyFromVar0x8005 @@ -227,7 +227,7 @@ gSpecials:: @ 81DBA64 def_special ShowPokedexRatingMessage def_special DoPCTurnOnEffect def_special DoPCTurnOffEffect - def_special SetDepartmentStoreFloorVar + def_special SetDeptStoreFloor def_special DoLotteryCornerComputerEffect def_special EndLotteryCornerComputerEffect def_special sub_81B951C @@ -273,7 +273,7 @@ gSpecials:: @ 81DBA64 def_special ShowBerryBlenderRecordWindow def_special ResetTrickHouseEndRoomFlag def_special SetTrickHouseEndRoomFlag - def_special ScrSpecial_CreatePCMenu + def_special ScriptMenu_CreatePCMultichoice def_special AccessHallOfFamePC def_special Special_ShowDiploma def_special CheckLeadMonCool @@ -284,8 +284,8 @@ gSpecials:: @ 81DBA64 def_special sub_80FB7A4 def_special DoSoftReset def_special GameClear - def_special ShakeScreenInElevator - def_special nullsub_55 + def_special MoveElevator + def_special ShowGlassWorkshopMenu def_special SpawnCameraObject def_special RemoveCameraObject def_special GetPokeblockNameByMonNature @@ -316,7 +316,7 @@ gSpecials:: @ 81DBA64 def_special CopyCurSecretBaseOwnerName_StrVar1 def_special ScriptCheckFreePokemonStorageSpace def_special DoSealedChamberShakingEffect1 - def_special sub_8139B60 + def_special ShowDeptStoreElevatorFloorSelect def_special GetShieldToyTVDecorationInfo def_special IsPokerusInParty def_special SetSootopolisGymCrackedIceMetatiles @@ -339,7 +339,7 @@ gSpecials:: @ 81DBA64 def_special ScriptGetMultiplayerId def_special ScriptGetPartyMonSpecies def_special sub_81B98DC - def_special nullsub_54 + def_special TryInitBattleTowerAwardManEventObject def_special MoveOutOfSecretBaseFromOutside def_special LoadPlayerBag def_special sub_80B05B4 @@ -356,7 +356,7 @@ gSpecials:: @ 81DBA64 def_special sub_80EE2CC def_special sub_80EE72C def_special sub_80EE7C0 - def_special nullsub_55 + def_special ShowGlassWorkshopMenu def_special PutFanClubSpecialOnTheAir def_special sub_80EED10 def_special sub_80EED34 @@ -372,47 +372,47 @@ gSpecials:: @ 81DBA64 def_special SetSecretBaseSecretsTvFlags_LargeDecorationSpot def_special SetSecretBaseSecretsTvFlags_SmallDecorationSpot def_special SetSecretBaseSecretsTvFlags_Poster - def_special sub_818D9C0 - def_special sub_818DAEC - def_special sub_818DBE8 - def_special sub_818DC2C - def_special sub_818DC60 - def_special sub_818DCC8 - def_special sub_818DD14 - def_special sub_818DD54 - def_special sub_818DD78 - def_special sub_818DE44 - def_special sub_818DE5C - def_special sub_818DEA0 - def_special sub_818DEDC - def_special sub_818E038 - def_special sub_818E06C - def_special sub_818E2D8 - def_special sub_811A858 - def_special sub_818E2FC - def_special sub_818E308 - def_special sub_818E358 - def_special sub_818E37C - def_special sub_818E298 - def_special sub_818E39C - def_special sub_818E3BC - def_special sub_818E3E0 - def_special sub_818E430 - def_special sub_818E47C - def_special sub_818E490 + def_special SetLilycoveLadyGfx + def_special Script_GetLilycoveLadyId + def_special GetFavorLadyState + def_special BufferFavorLadyRequest + def_special HasAnotherPlayerGivenFavorLadyItem + def_special BufferFavorLadyItemName + def_special BufferFavorLadyPlayerName + def_special DidFavorLadyLikeItem + def_special Script_FavorLadyOpenBagMenu + def_special Script_DoesFavorLadyLikeItem + def_special IsFavorLadyThresholdMet + def_special FavorLadyGetPrize + def_special SetFavorLadyState_Complete + def_special GetQuizLadyState + def_special GetQuizAuthor + def_special IsQuizLadyWaitingForChallenger + def_special QuizLadyShowQuizQuestion + def_special QuizLadyGetPlayerAnswer + def_special IsQuizAnswerCorrect + def_special BufferQuizPrizeItem + def_special SetQuizLadyState_Complete + def_special BufferQuizAuthorNameAndCheckIfLady + def_special SetQuizLadyState_GivePrize + def_special ClearQuizLadyPlayerAnswer + def_special Script_QuizLadyOpenBagMenu + def_special ClearQuizLadyQuestionAndAnswer + def_special QuizLadySetCustomQuestion + def_special QuizLadyTakePrizeForCustomQuiz def_special sub_813986C - def_special sub_818E4A4 - def_special sub_818E510 - def_special sub_818E538 - def_special sub_818E274 - def_special sub_818E3EC - def_special sub_818E8E0 - def_special sub_818E8B4 - def_special sub_818E914 - def_special sub_818E92C - def_special sub_818E940 - def_special sub_818E960 - def_special sub_818E990 + def_special QuizLadyRecordCustomQuizData + def_special QuizLadySetWaitingForChallenger + def_special BufferQuizCorrectAnswer + def_special BufferQuizPrizeName + def_special QuizLadyPickNewQuestion + def_special ShouldContestLadyShowGoOnAir + def_special HasPlayerGivenContestLadyPokeblock + def_special Script_BufferContestLadyCategoryAndMonName + def_special OpenPokeblockCaseForContestLady + def_special SetContestLadyGivenPokeblock + def_special GetContestLadyMonSpecies + def_special GetContestLadyCategory def_special PutLilycoveContestLadyShowOnTheAir def_special sub_813B880 def_special CallApprenticeFunction @@ -422,7 +422,7 @@ gSpecials:: @ 81DBA64 def_special DoMirageTowerCeilingCrumble def_special SetMirageTowerVisibility def_special StartPlayerDescendMirageTower - def_special sub_81398C0 + def_special BufferTMHMMoveName def_special IsWirelessAdapterConnected def_special BerryBlenderLinkBecomeLeader def_special BerryBlenderLinkJoinGroup @@ -433,7 +433,7 @@ gSpecials:: @ 81DBA64 def_special sub_801DC20 def_special sub_81B8958 def_special sub_8018090 - def_special sub_813990C + def_special IsBadEggInParty def_special ValidateReceivedWonderCard def_special HasAtLeastOneBerry def_special sub_802C920 @@ -441,8 +441,8 @@ gSpecials:: @ 81DBA64 def_special sub_8027A5C def_special sub_8027AAC def_special sub_8139980 - def_special sub_81399F4 - def_special sub_8139D98 + def_special GetDeptStoreDefaultFloorChoice + def_special BufferVarsForIVRater def_special sub_80F905C def_special sub_800B518 def_special sub_80F90DC @@ -450,43 +450,43 @@ gSpecials:: @ 81DBA64 def_special sub_80F9160 def_special ShowRankingHallRecordsWindow def_special ScrollRankingHallRecordsWindow - def_special sub_8139F20 + def_special ShowFrontierManiacMessage def_special sub_80F9134 def_special sub_80F9154 def_special sub_80B3028 - def_special sub_813A128 + def_special ShowScrollableMultichoice def_special sub_813A630 - def_special sub_813A080 + def_special BufferBattleTowerElevatorFloors def_special sub_81C6A94 def_special sub_81C4F24 def_special sub_81B95E0 def_special sub_81B9620 - def_special sub_813A76C - def_special sub_813A7B8 - def_special sub_813A958 - def_special sub_813A8FC - def_special sub_813A988 - def_special sub_813A9D0 - def_special sub_813A9A4 - def_special sub_813AA04 - def_special sub_813AA18 - def_special sub_813AA44 + def_special SetBattleTowerLinkPlayerGfx + def_special ShowNatureGirlMessage + def_special ShowBattlePointsWindow + def_special UpdateBattlePointsWindow + def_special CloseBattlePointsWindow + def_special GiveFrontierBattlePoints + def_special TakeFrontierBattlePoints + def_special GetFrontierBattlePoints + def_special ShowFrontierExchangeCornerItemIconWindow + def_special CloseFrontierExchangeCornerItemIconWindow def_special DisplayBerryPowderVendorMenu def_special RemoveBerryPowderVendorMenu def_special HasEnoughBerryPowder def_special TakeBerryPowder def_special PrintPlayerBerryPowderAmount - def_special sub_813A820 - def_special sub_813A854 - def_special sub_813B7D8 + def_special ShowFrontierGamblerLookingMessage + def_special ShowFrontierGamblerGoMessage + def_special Script_DoRayquazaScene def_special sub_81C72A4 - def_special sp106_CreateStartMenu + def_special ScriptMenu_CreateStartMenuForPokenavTutorial def_special CountPlayerTrainerStars - def_special sub_813AC7C - def_special sub_813ADB8 + def_special BufferBattleFrontierTutorMoveName + def_special CloseBattleFrontierTutorWindow def_special sub_813ADD4 def_special sub_81B892C - def_special sub_813AEB4 + def_special GetBattleFrontierTutorMoveIndex def_special sub_813AF48 def_special DoDeoxysRockInteraction def_special sub_813B1D0 @@ -495,28 +495,28 @@ gSpecials:: @ 81DBA64 def_special StartMirageTowerShake def_special StartMirageTowerFossilFallAndSink def_special ChangeBoxPokemonNickname - def_special get_unknown_box_id - def_special sub_813B21C + def_special GetPCBoxToSendMon + def_special ShouldShowBoxWasFullMessage def_special SetMatchCallRegisteredFlag def_special sub_8175280 def_special CreateUnusualWeatherEvent def_special GetUnusualWeatherMapNameAndType - def_special sub_813B490 + def_special GetMartEmployeeObjectEventId def_special sub_80A08CC def_special Unused_SetWeatherSunny def_special sub_81AFDA0 def_special sub_813B4E0 def_special ShouldDoBrailleRegicePuzzle def_special EnableNationalPokedex - def_special sub_80E2548 - def_special sub_80E2878 + def_special ScriptMenu_CreateLilycoveSSTidalMultichoice + def_special GetLilycoveSSTidalSelection def_special TurnOnTVScreen def_special sub_81D4A90 def_special sub_813B514 def_special sub_813B568 def_special sub_813B534 def_special CallTrainerHillFunction - def_special sub_813B7D8 + def_special Script_DoRayquazaScene @ Listed twice def_special sub_813B80C def_special sub_81D4BEC def_special sub_80224D0 @@ -524,14 +524,14 @@ gSpecials:: @ 81DBA64 def_special DoWaldaNamingScreen def_special TryGetWallpaperWithWaldaPhrase def_special sub_8139ED0 - def_special sub_813B968 + def_special GetBattlePyramidHint def_special sub_80F8B94 def_special ShowTrainerHillRecords def_special sub_80B4808 - def_special sub_813B9A0 + def_special ResetHealLocationFromDewford def_special sub_81B9918 - def_special sub_80722E0 + def_special CountPartyAliveNonEggMons def_special TryPrepareSecondApproachingTrainer def_special RemoveRecordsWindow - def_special sub_8139C10 + def_special CloseDeptStoreElevatorWindow def_special sub_80B3BC4 diff --git a/data/text/eon_ticket.inc b/data/text/event_ticket_1.inc index d436f2df1..da4d525f6 100644 --- a/data/text/eon_ticket.inc +++ b/data/text/event_ticket_1.inc @@ -1,16 +1,16 @@ -LilycoveCity_Harbor_Text_2A6848: @ 82A6848 +EventTicket_Text_ShowOldSeaMap: @ 82A6848 .string "The ferry to SLATEPORT is…\p" .string "I beg your pardon?\n" .string "Can we sail to this place on the map?\p" .string "I know someone who will help you better.\n" .string "Please wait.$" -LilycoveCity_Harbor_Text_2A68D2: @ 82A68D2 +EventTicket_Text_ThatPass: @ 82A68D2 .string "The ferry to SLATEPORT is…\p" .string "Oh?\n" .string "That PASS…$" -LilycoveCity_Harbor_Text_2A68FC: @ 82A68FC +EventTicket_Text_ShowEonTicket: @ 82A68FC .string "Aye, mate, are you the one who brought\n" .string "that mighty odd PASS?\p" .string "I'll tell you, you're trying to reach a\n" @@ -20,29 +20,22 @@ LilycoveCity_Harbor_Text_2A68FC: @ 82A68FC .string "That shivers my timbers!\p" .string "All aboard!$" -SouthernIsland_Exterior_Text_2A69F1: @ 82A69F1 +EventTicket_Text_SouthernIslandSailBack: @ 82A69F1 .string "Aye, mate, there's nothing here to\n" .string "see or do on this forgettable island.\p" .string "What say we sail back to LILYCOVE?$" -BirthIsland_Harbor_Text_2A6A5D: @ 82A6A5D -FarawayIsland_Entrance_Text_2A6A5D: @ 82A6A5D -NavelRock_Harbor_Text_2A6A5D: @ 82A6A5D -SouthernIsland_Exterior_Text_2A6A5D: @ 82A6A5D +EventTicket_Text_SailHome: @ 82A6A5D .string "Aye, right, then!\n" .string "Sail home we will!$" -BirthIsland_Harbor_Text_2A6A82: @ 82A6A82 -FarawayIsland_Entrance_Text_2A6A82: @ 82A6A82 -LilycoveCity_Harbor_Text_2A6A82: @ 82A6A82 -NavelRock_Harbor_Text_2A6A82: @ 82A6A82 -SouthernIsland_Exterior_Text_2A6A82: @ 82A6A82 +EventTicket_Text_AsYouLike: @ 82A6A82 .string "Aye, right, as you like, then.$" -SouthernIsland_Interior_Text_2A6AA1: @ 82A6AA1 +SouthernIsland_Interior_Text_Sign: @ 82A6AA1 .string "“All dreams are but another reality.\n" .string "Never forget…”$" -SouthernIsland_Exterior_Text_2A6AD5: @ 82A6AD5 +SouthernIsland_Exterior_Text_Sign: @ 82A6AD5 .string "“Those whose memories fade seek to\n" .string "carve them in their hearts…”$" diff --git a/data/text/event_ticket_2.inc b/data/text/event_ticket_2.inc new file mode 100644 index 000000000..e081edbd9 --- /dev/null +++ b/data/text/event_ticket_2.inc @@ -0,0 +1,71 @@ +EventTicket_Text_OldSeaMapTooFar: @ 82C68A5 + .string "What's up, youngster?\p" + .string "What, it's you who's supposed to have\n" + .string "a tattered old map?\p" + .string "Let's have a look.\n" + .string "… … … … … …\p" + .string "Boy, this is quite a ways away.\n" + .string "I'm afraid I can't help you…$" + +EventTicket_Text_BrineyHoldOnASecond: @ 82C6951 + .string "BRINEY: Hold on a second!\p" + .string "What's the idea of turning down\n" + .string "someone that I owe so much to?$" + +EventTicket_Text_BrineyLetsSail: @ 82C69AA + .string "{PLAYER}{KUN}, I'm terribly sorry.\p" + .string "You came to me seeking my help,\n" + .string "and we almost turned you away.\p" + .string "Well, let me make things right.\p" + .string "We'll sail right away, of course!\p" + .string "Let's find this island on\n" + .string "this OLD SEA MAP!$" + +EventTicket_Text_OddTicketGetOnBoard: @ 82C6A71 + .string "Is it you who brought that odd\n" + .string "ticket?\p" + .string "Where you're trying to go is an island\n" + .string "that's far, far away.\p" + .string "No one knows what awaits there…\p" + .string "The very thought excites my blood\n" + .string "as a sailing man!\p" + .string "Get on board, youngster!$" + +FarawayIsland_Entrance_Text_SailorReturn: @ 82C6B42 + .string "CAPT. BRINEY can be so maddeningly\n" + .string "fickle…\p" + .string "Do you want to return to LILYCOVE?$" + +BirthIsland_Harbor_Text_SailorReturn: @ 82C6B90 + .string "What an oddly shaped island, eh?\n" + .string "Do you want to return to LILYCOVE?$" + +EventTicket_Text_OddTicketsWhereTo: @ 82C6BD4 + .string "Is it you who brought those\n" + .string "odd tickets?\p" + .string "… … …Hm.\p" + .string "These tickets will get you to islands\n" + .string "that are far, far away.\p" + .string "No one knows what awaits there,\n" + .string "or what may happen there.\p" + .string "The very thought excites my blood\n" + .string "as a sailing man!\p" + .string "Get on board, youngster!\n" + .string "Where shall we sail first?$" + +NavelRock_Harbor_Text_SailorReturn: @ 82C6CE6 + .string "Did… Did you hear that?\n" + .string "That low growling from deep in there.\p" + .string "Are you sure it's safe?\n" + .string "Do you think we should leave?$" + +FarawayIsland_Entrance_Text_Sign: @ 82C6D5A + .string "The writing is fading as if it was\n" + .string "written a long time ago…\p" + .string "“…ber, 6th day\n" + .string "If any human…sets foot here…\l" + .string "again…et it be a kindhearted pers…\l" + .string "…ith that hope, I depar…”$" + +FarawayIsland_Interior_Text_Mew: @ 82C6DFF + .string "Myuu…$" diff --git a/data/text/match_call.inc b/data/text/match_call.inc index b25b72ebf..376f36750 100644 --- a/data/text/match_call.inc +++ b/data/text/match_call.inc @@ -1,5 +1,5 @@ MatchCall_WildBattleText1:: @ 82A971C - .string "Hi! {PLAYER}{STRING 5}, hello!\n" + .string "Hi! {PLAYER}{KUN}, hello!\n" .string "This is {STR_VAR_1}.\p" .string "I saw this {STR_VAR_2} a while back\n" .string "but I couldn't catch it.\p" @@ -7,7 +7,7 @@ MatchCall_WildBattleText1:: @ 82A971C .string "Well, see you again!$" MatchCall_WildBattleText2:: @ 82A9798 - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "It's {STR_VAR_1}.\p" .string "I tried to catch a nice {STR_VAR_2}\n" .string "a little while ago.\p" @@ -25,7 +25,7 @@ MatchCall_WildBattleText3:: @ 82A9813 .string "All right, see you!$" MatchCall_WildBattleText4:: @ 82A98A8 - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here.\p" .string "You know the POKéMON {STR_VAR_2}?\n" .string "I came close to getting one.\p" @@ -36,7 +36,7 @@ MatchCall_WildBattleText4:: @ 82A98A8 .string "Okay, catch you later.$" MatchCall_WildBattleText5:: @ 82A9977 - .string "Hiya, {PLAYER}{STRING 5}!\n" + .string "Hiya, {PLAYER}{KUN}!\n" .string "It's {STR_VAR_1}.\l" .string "Catching any POKéMON lately?\p" .string "A little while ago I came close to\n" @@ -44,7 +44,7 @@ MatchCall_WildBattleText5:: @ 82A9977 .string "Right, take care!$" MatchCall_WildBattleText6:: @ 82A99FD - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here.\l" .string "Caught any POKéMON lately?\p" .string "I nearly nabbed one the other day.\n" @@ -52,7 +52,7 @@ MatchCall_WildBattleText6:: @ 82A99FD .string "You take care.$" MatchCall_WildBattleText7:: @ 82A9A78 - .string "…Uh, {PLAYER}{STRING 5}?\n" + .string "…Uh, {PLAYER}{KUN}?\n" .string "It's me, {STR_VAR_1}.\p" .string "Oh, wait! Wait!\n" .string "I can catch this {STR_VAR_2}…\p" @@ -60,7 +60,7 @@ MatchCall_WildBattleText7:: @ 82A9A78 .string "That wasn't just close!$" MatchCall_WildBattleText8:: @ 82A9AE8 - .string "Oh, {PLAYER}{STRING 5}, how do you do?\n" + .string "Oh, {PLAYER}{KUN}, how do you do?\n" .string "This is {STR_VAR_1} speaking.\p" .string "Have you had success catching\n" .string "POKéMON lately?\p" @@ -70,7 +70,7 @@ MatchCall_WildBattleText8:: @ 82A9AE8 .string "See you again!$" MatchCall_WildBattleText9:: @ 82A9BA7 - .string "Oh, {PLAYER}{STRING 5}, hi there!\n" + .string "Oh, {PLAYER}{KUN}, hi there!\n" .string "This is {STR_VAR_1}!\p" .string "So? Are you getting more POKéMON\n" .string "together?\p" @@ -79,7 +79,7 @@ MatchCall_WildBattleText9:: @ 82A9BA7 .string "See you!$" MatchCall_WildBattleText10:: @ 82A9C36 - .string "Oh, {PLAYER}{STRING 5}, hello…\n" + .string "Oh, {PLAYER}{KUN}, hello…\n" .string "This is {STR_VAR_1}.\p" .string "Listen, I came within a whisker of\n" .string "catching this {STR_VAR_2}…\p" @@ -88,7 +88,7 @@ MatchCall_WildBattleText10:: @ 82A9C36 .string "See you around.$" MatchCall_WildBattleText11:: @ 82A9CC8 - .string "Ah, {PLAYER}{STRING 5}.\n" + .string "Ah, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\l" .string "How are things with you?\p" .string "I tried to catch a wild {STR_VAR_2}\n" @@ -96,7 +96,7 @@ MatchCall_WildBattleText11:: @ 82A9CC8 .string "I feel defeated…$" MatchCall_WildBattleText12:: @ 82A9D44 - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "It's me, {STR_VAR_1}.\l" .string "Are you still catching POKéMON?\p" .string "I've been trying to catch them\n" @@ -104,7 +104,7 @@ MatchCall_WildBattleText12:: @ 82A9D44 .string "The way of POKéMON is deep!$" MatchCall_WildBattleText13:: @ 82A9DD7 - .string "Ah, hello, {PLAYER}{STRING 5}!\n" + .string "Ah, hello, {PLAYER}{KUN}!\n" .string "This is {STR_VAR_1}!\l" .string "Have you been catching POKéMON?\p" .string "I've been trying to catch them\n" @@ -112,7 +112,7 @@ MatchCall_WildBattleText13:: @ 82A9DD7 .string "The way of POKéMON is deep!$" MatchCall_WildBattleText14:: @ 82A9E70 - .string "Oh, hi, {PLAYER}{STRING 5}, how do you do?\n" + .string "Oh, hi, {PLAYER}{KUN}, how do you do?\n" .string "This is {STR_VAR_1}.\p" .string "Just now, I tried to catch a cute\n" .string "{STR_VAR_2}.\p" @@ -131,7 +131,7 @@ MatchCall_WildBattleText15:: @ 82A9EFD .string "See you around!$" MatchCall_NegativeBattleText1:: @ 82A9FAB - .string "Hi! {PLAYER}{STRING 5}, hello!\n" + .string "Hi! {PLAYER}{KUN}, hello!\n" .string "This is {STR_VAR_1}.\p" .string "I tried battling another TRAINER,\n" .string "but I lost.\p" @@ -139,7 +139,7 @@ MatchCall_NegativeBattleText1:: @ 82A9FAB .string "Well, see you again!$" MatchCall_NegativeBattleText2:: @ 82AA028 - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "It's {STR_VAR_1}.\p" .string "I challenged someone else after\n" .string "we battled.\p" @@ -188,7 +188,7 @@ MatchCall_NegativeBattleText7:: @ 82AA2A1 .string "See you.$" MatchCall_NegativeBattleText8:: @ 82AA31B - .string "Oh, {PLAYER}{STRING 5}, how do you do?\n" + .string "Oh, {PLAYER}{KUN}, how do you do?\n" .string "This is {STR_VAR_1} speaking.\p" .string "How are your POKéMON doing?\n" .string "I lost a match the other day.\p" @@ -196,7 +196,7 @@ MatchCall_NegativeBattleText8:: @ 82AA31B .string "See you again!$" MatchCall_NegativeBattleText9:: @ 82AA3A8 - .string "Oh, {PLAYER}{STRING 5}, hi there!\n" + .string "Oh, {PLAYER}{KUN}, hi there!\n" .string "This is {STR_VAR_1}!\p" .string "Listen, listen, you have to hear\n" .string "this!\p" @@ -205,7 +205,7 @@ MatchCall_NegativeBattleText9:: @ 82AA3A8 .string "Oh, it burns me up!$" MatchCall_NegativeBattleText10:: @ 82AA442 - .string "Oh, {PLAYER}{STRING 5}, hello…\n" + .string "Oh, {PLAYER}{KUN}, hello…\n" .string "This is {STR_VAR_1}.\p" .string "A little earlier, I was in a battle.\n" .string "I lost, though.\p" @@ -213,14 +213,14 @@ MatchCall_NegativeBattleText10:: @ 82AA442 .string "See you around.$" MatchCall_NegativeBattleText11:: @ 82AA4C5 - .string "Ah, {PLAYER}{STRING 5}.\n" + .string "Ah, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\l" .string "How are your POKéMON?\p" .string "I just lost yet another battle.\p" .string "Well, see you!$" MatchCall_NegativeBattleText12:: @ 82AA520 - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "It's me, {STR_VAR_1}.\l" .string "Are you still battling hard?\p" .string "As for me, I lost recently, so I've\n" @@ -228,16 +228,16 @@ MatchCall_NegativeBattleText12:: @ 82AA520 .string "Let's meet again.$" MatchCall_NegativeBattleText13:: @ 82AA5AD - .string "Ah, hello, {PLAYER}{STRING 5}!\n" + .string "Ah, hello, {PLAYER}{KUN}!\n" .string "This is {STR_VAR_1}!\p" .string "I hope you've been keeping well.\p" .string "I was in a battle just a little\n" .string "while before this.\p" - .string "{PLAYER}{STRING 5}, try to be active like me.\n" + .string "{PLAYER}{KUN}, try to be active like me.\n" .string "See you again!$" MatchCall_NegativeBattleText14:: @ 82AA64D - .string "Oh, hi, {PLAYER}{STRING 5}.\n" + .string "Oh, hi, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\p" .string "Are you doing good?\p" .string "You should go home every so often,\n" @@ -245,7 +245,7 @@ MatchCall_NegativeBattleText14:: @ 82AA64D .string "Bye-bye!$" MatchCall_PositiveBattleText1:: @ 82AA6AF - .string "Hi! {PLAYER}{STRING 5}, hello!\n" + .string "Hi! {PLAYER}{KUN}, hello!\n" .string "This is {STR_VAR_1}!\p" .string "I battled another TRAINER earlier.\n" .string "I won! I won!\p" @@ -253,7 +253,7 @@ MatchCall_PositiveBattleText1:: @ 82AA6AF .string "for me. This is so great!$" MatchCall_PositiveBattleText2:: @ 82AA730 - .string "Hello, {PLAYER}{STRING 5}!\n" + .string "Hello, {PLAYER}{KUN}!\n" .string "It's {STR_VAR_1}!\p" .string "I had a battle yesterday and\n" .string "I won! It's fantastic!$" @@ -276,7 +276,7 @@ MatchCall_PositiveBattleText4:: @ 82AA81C .string "inspired showing.$" MatchCall_PositiveBattleText5:: @ 82AA88C - .string "Hiya, {PLAYER}{STRING 5}!\n" + .string "Hiya, {PLAYER}{KUN}!\n" .string "It's {STR_VAR_1}.\p" .string "How are things with you?\n" .string "Battling much?\p" @@ -286,7 +286,7 @@ MatchCall_PositiveBattleText5:: @ 82AA88C .string "next time! Right, take care!$" MatchCall_PositiveBattleText6:: @ 82AA934 - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here.\p" .string "How's it going for you?\p" .string "I've been riding a hot streak.\n" @@ -295,7 +295,7 @@ MatchCall_PositiveBattleText6:: @ 82AA934 .string "I'm sure not going to lose!$" MatchCall_PositiveBattleText7:: @ 82AA9D3 - .string "{PLAYER}{STRING 5}?\n" + .string "{PLAYER}{KUN}?\n" .string "{STR_VAR_1} here.\p" .string "My {STR_VAR_2} is a force!\n" .string "It won me another battle just now!\p" @@ -303,7 +303,7 @@ MatchCall_PositiveBattleText7:: @ 82AA9D3 .string "with you.$" MatchCall_PositiveBattleText8:: @ 82AAA40 - .string "Oh, {PLAYER}{STRING 5}, how do you do?\n" + .string "Oh, {PLAYER}{KUN}, how do you do?\n" .string "This is {STR_VAR_1} speaking.\p" .string "I hope you've been well.\n" .string "I wanted to tell you I just won.\p" @@ -312,7 +312,7 @@ MatchCall_PositiveBattleText8:: @ 82AAA40 .string "See you again!$" MatchCall_PositiveBattleText9:: @ 82AAAE4 - .string "Oh, {PLAYER}{STRING 5}, hi there!\n" + .string "Oh, {PLAYER}{KUN}, hi there!\n" .string "This is {STR_VAR_1}!\p" .string "How are your POKéMON holding up?\n" .string "Mine just won a battle!\p" @@ -322,7 +322,7 @@ MatchCall_PositiveBattleText9:: @ 82AAAE4 .string "See you again!$" MatchCall_PositiveBattleText10:: @ 82AAB8C - .string "Oh, {PLAYER}{STRING 5}, hello…\n" + .string "Oh, {PLAYER}{KUN}, hello…\n" .string "This is {STR_VAR_1}.\p" .string "How has life been treating you?\p" .string "My POKéMON appear to be charged\n" @@ -331,7 +331,7 @@ MatchCall_PositiveBattleText10:: @ 82AAB8C .string "See you around.$" MatchCall_PositiveBattleText11:: @ 82AAC25 - .string "Ah, {PLAYER}{STRING 5}.\n" + .string "Ah, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\p" .string "Been in any battles lately?\n" .string "I just won another one today!\p" @@ -339,7 +339,7 @@ MatchCall_PositiveBattleText11:: @ 82AAC25 .string "Well, see you!$" MatchCall_PositiveBattleText12:: @ 82AAC9D - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "It's me, {STR_VAR_1}.\p" .string "I trust you've been well?\n" .string "I'm still bursting with life!\p" @@ -348,7 +348,7 @@ MatchCall_PositiveBattleText12:: @ 82AAC9D .string "youngsters yet!$" MatchCall_PositiveBattleText13:: @ 82AAD41 - .string "Ah, hello, {PLAYER}{STRING 5}!\n" + .string "Ah, hello, {PLAYER}{KUN}!\n" .string "This is {STR_VAR_1}!\p" .string "I hope you've been keeping well.\n" .string "I still have a bounce in my step!\p" @@ -358,12 +358,12 @@ MatchCall_PositiveBattleText13:: @ 82AAD41 .string "See you again!$" MatchCall_PositiveBattleText14:: @ 82AAE00 - .string "Oh, hi, {PLAYER}{STRING 5}.\n" + .string "Oh, hi, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\p" .string "I was in a battle recently, and my\n" .string "{STR_VAR_2} was exceptional!\p" .string "I wish you could have seen it,\n" - .string "{PLAYER}{STRING 5}. Bye-bye!$" + .string "{PLAYER}{KUN}. Bye-bye!$" MatchCall_SameRouteBattleRequestText1:: @ 82AAE7F .string "Hi! {PLAYER}, hello!\n" @@ -392,7 +392,7 @@ MatchCall_SameRouteBattleRequestText3:: @ 82AAF69 .string "I'll be waiting! Catch you soon!$" MatchCall_SameRouteBattleRequestText4:: @ 82AB010 - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here.\p" .string "Whereabouts are you now?\n" .string "Huh? {STR_VAR_2}?\p" @@ -400,7 +400,7 @@ MatchCall_SameRouteBattleRequestText4:: @ 82AB010 .string "I'll wait for you. See you!$" MatchCall_SameRouteBattleRequestText5:: @ 82AB076 - .string "Hiya, {PLAYER}{STRING 5}!\n" + .string "Hiya, {PLAYER}{KUN}!\n" .string "It's {STR_VAR_1}.\l" .string "How are things with you?\p" .string "You're where now?\n" @@ -411,7 +411,7 @@ MatchCall_SameRouteBattleRequestText5:: @ 82AB076 .string "See you soon!$" MatchCall_SameRouteBattleRequestText6:: @ 82AB11A - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here.\l" .string "How are your POKéMON keeping?\p" .string "Oh, is that right? You're around\n" @@ -422,7 +422,7 @@ MatchCall_SameRouteBattleRequestText6:: @ 82AB11A .string "See you!$" MatchCall_SameRouteBattleRequestText7:: @ 82AB1B4 - .string "…Er, {PLAYER}{STRING 5}?\n" + .string "…Er, {PLAYER}{KUN}?\n" .string "{STR_VAR_1} here…\p" .string "Oh, you happen to be around\n" .string "{STR_VAR_2}?\p" @@ -432,7 +432,7 @@ MatchCall_SameRouteBattleRequestText7:: @ 82AB1B4 .string "I'll wait for you.$" MatchCall_SameRouteBattleRequestText8:: @ 82AB23D - .string "Oh, {PLAYER}{STRING 5}, how do you do?\n" + .string "Oh, {PLAYER}{KUN}, how do you do?\n" .string "This is {STR_VAR_1} speaking.\p" .string "I hope you're doing well.\n" .string "Oh, you're near {STR_VAR_2}.\p" @@ -442,7 +442,7 @@ MatchCall_SameRouteBattleRequestText8:: @ 82AB23D .string "See you soon!$" MatchCall_SameRouteBattleRequestText9:: @ 82AB2E9 - .string "Oh, {PLAYER}{STRING 5}, hi there!\n" + .string "Oh, {PLAYER}{KUN}, hi there!\n" .string "This is {STR_VAR_1}!\p" .string "Are you keeping up?\n" .string "Oh, you're near {STR_VAR_2}?\p" @@ -451,7 +451,7 @@ MatchCall_SameRouteBattleRequestText9:: @ 82AB2E9 .string "Don't keep me waiting too long!$" MatchCall_SameRouteBattleRequestText10:: @ 82AB382 - .string "Oh, {PLAYER}{STRING 5}, hello…\n" + .string "Oh, {PLAYER}{KUN}, hello…\n" .string "This is {STR_VAR_1}.\p" .string "How are things with you?\n" .string "Oh, you're near {STR_VAR_2}.\p" @@ -460,7 +460,7 @@ MatchCall_SameRouteBattleRequestText10:: @ 82AB382 .string "Be quick!$" MatchCall_SameRouteBattleRequestText11:: @ 82AB410 - .string "Ah, {PLAYER}{STRING 5}.\n" + .string "Ah, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\p" .string "Ah, so where you are now is\n" .string "{STR_VAR_2}?\p" @@ -470,7 +470,7 @@ MatchCall_SameRouteBattleRequestText11:: @ 82AB410 .string "See you real quick!$" MatchCall_SameRouteBattleRequestText12:: @ 82AB4B0 - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "It's me, {STR_VAR_1}.\l" .string "Where might you be now?\p" .string "{STR_VAR_2}?\n" @@ -481,7 +481,7 @@ MatchCall_SameRouteBattleRequestText12:: @ 82AB4B0 .string "See you!$" MatchCall_SameRouteBattleRequestText13:: @ 82AB538 - .string "Ah, hello, {PLAYER}{STRING 5}!\n" + .string "Ah, hello, {PLAYER}{KUN}!\n" .string "This is {STR_VAR_1}!\p" .string "I hope you've been keeping well.\n" .string "Oh, you're near {STR_VAR_2}?\p" @@ -491,7 +491,7 @@ MatchCall_SameRouteBattleRequestText13:: @ 82AB538 .string "Bye for now.$" MatchCall_SameRouteBattleRequestText14:: @ 82AB5E4 - .string "Oh, hi, {PLAYER}{STRING 5}.\n" + .string "Oh, hi, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\p" .string "You're what? …{STR_VAR_2}?\n" .string "That's very close.\p" @@ -527,7 +527,7 @@ MatchCall_DifferentRouteBattleRequestText3:: @ 82AB73C .string "{STR_VAR_2}.$" MatchCall_DifferentRouteBattleRequestText4:: @ 82AB808 - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here.\l" .string "How are things with you?\p" .string "My POKéMON have grown pretty\n" @@ -538,7 +538,7 @@ MatchCall_DifferentRouteBattleRequestText4:: @ 82AB808 .string "{STR_VAR_2}, okay?$" MatchCall_DifferentRouteBattleRequestText5:: @ 82AB8B7 - .string "Hiya, {PLAYER}{STRING 5}!\n" + .string "Hiya, {PLAYER}{KUN}!\n" .string "It's {STR_VAR_1}.\p" .string "My POKéMON are growing up in\n" .string "decent ways.\p" @@ -548,7 +548,7 @@ MatchCall_DifferentRouteBattleRequestText5:: @ 82AB8B7 .string "{STR_VAR_2}. See you soon!$" MatchCall_DifferentRouteBattleRequestText6:: @ 82AB95D - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here.\l" .string "I hope you're on top of things.\p" .string "I was thinking I'd like another\n" @@ -558,7 +558,7 @@ MatchCall_DifferentRouteBattleRequestText6:: @ 82AB95D .string "See you!$" MatchCall_DifferentRouteBattleRequestText7:: @ 82ABA03 - .string "…Er, {PLAYER}{STRING 5}?\n" + .string "…Er, {PLAYER}{KUN}?\n" .string "{STR_VAR_1} here…\l" .string "So? Are your POKéMON growing?\p" .string "Mine sure got stronger.\n" @@ -568,7 +568,7 @@ MatchCall_DifferentRouteBattleRequestText7:: @ 82ABA03 .string "See you around.$" MatchCall_DifferentRouteBattleRequestText8:: @ 82ABA9F - .string "Oh, {PLAYER}{STRING 5}, how do you do?\n" + .string "Oh, {PLAYER}{KUN}, how do you do?\n" .string "This is {STR_VAR_1} speaking.\p" .string "I hope you're doing well.\n" .string "My POKéMON are very frisky.\p" @@ -578,48 +578,48 @@ MatchCall_DifferentRouteBattleRequestText8:: @ 82ABA9F .string "Until then, good-bye!$" MatchCall_DifferentRouteBattleRequestText9:: @ 82ABB62 - .string "Oh, {PLAYER}{STRING 5}, hi there!\n" + .string "Oh, {PLAYER}{KUN}, hi there!\n" .string "This is {STR_VAR_1}!\l" .string "How are your POKéMON doing?\p" .string "My POKéMON keep getting better.\n" - .string "I'd like to show you, {PLAYER}{STRING 5}.\p" + .string "I'd like to show you, {PLAYER}{KUN}.\p" .string "I'm around {STR_VAR_2} now,\n" .string "so let's battle if you're close by.\p" .string "Hope I see you soon!$" MatchCall_DifferentRouteBattleRequestText10:: @ 82ABC26 - .string "Oh, {PLAYER}{STRING 5}, hello…\n" + .string "Oh, {PLAYER}{KUN}, hello…\n" .string "This is {STR_VAR_1}.\l" .string "So, how are things with you?\p" .string "My POKéMON have grown much\n" .string "stronger than before.\p" .string "I'd love another battle with you,\n" - .string "{PLAYER}{STRING 5}.\p" + .string "{PLAYER}{KUN}.\p" .string "I'll be around {STR_VAR_2}.\n" .string "Come see me if you're close.$" MatchCall_DifferentRouteBattleRequestText11:: @ 82ABCE9 - .string "Ah, {PLAYER}{STRING 5}.\n" + .string "Ah, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\l" .string "Where might you be now?\p" .string "My POKéMON are full of life.\n" .string "They appear to be looking forward\l" - .string "to seeing your POKéMON, {PLAYER}{STRING 5}.\p" + .string "to seeing your POKéMON, {PLAYER}{KUN}.\p" .string "I'm around {STR_VAR_2} now.\n" .string "I hope you'll seek us out.$" MatchCall_DifferentRouteBattleRequestText12:: @ 82ABDA2 - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "It's me, {STR_VAR_1}.\p" .string "I should tell you, my POKéMON have\n" .string "grown to be quite robust lately.\p" .string "I would like to see them in a battle\n" - .string "with you, {PLAYER}{STRING 5}.\p" + .string "with you, {PLAYER}{KUN}.\p" .string "We'll be around {STR_VAR_2}.\n" .string "Come see us anytime!$" MatchCall_DifferentRouteBattleRequestText13:: @ 82ABE5E - .string "Ah, hello, {PLAYER}{STRING 5}!\n" + .string "Ah, hello, {PLAYER}{KUN}!\n" .string "This is {STR_VAR_1}!\l" .string "Are your POKéMON keeping well?\p" .string "My POKéMON have been so healthy,\n" @@ -630,13 +630,13 @@ MatchCall_DifferentRouteBattleRequestText13:: @ 82ABE5E .string "do come see us.$" MatchCall_DifferentRouteBattleRequestText14:: @ 82ABF36 - .string "Oh, hi, {PLAYER}{STRING 5}.\n" + .string "Oh, hi, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\l" .string "Keeping well, I hope.\p" .string "Oh, yes! My POKéMON are\n" .string "much stronger than before.\p" .string "Don't you think we ought to have\n" - .string "a battle, {PLAYER}{STRING 5}?\p" + .string "a battle, {PLAYER}{KUN}?\p" .string "We'll be waiting for you around\n" .string "{STR_VAR_2}.\p" .string "Come see us anytime, okay?$" @@ -884,14 +884,14 @@ MatchCall_PersonalizedText23:: @ 82AD2A8 .string "When there's a strong TRAINER\n" .string "nearby, I can sometimes sense that\l" .string "somehow.\p" - .string "Did you pass close by, {PLAYER}{STRING 5}?\n" + .string "Did you pass close by, {PLAYER}{KUN}?\n" .string "Maybe it was you.\p" .string "I'll be waiting for your visit.\n" .string "Bye!$" MatchCall_PersonalizedText24:: @ 82AD34F .string "Hello, this is {STR_VAR_1}.\n" - .string "You sound well, {PLAYER}{STRING 5}.\p" + .string "You sound well, {PLAYER}{KUN}.\p" .string "I've traveled around the world,\n" .string "but I must say I've taken a great\l" .string "shine to this region.\p" @@ -1007,7 +1007,7 @@ MatchCall_PersonalizedText32:: @ 82ADC92 .string "It's kind of hard to explain, but…\l" .string "How would I say this now…\l" .string "My shorts feel silkier!\p" - .string "And when I battled you, {PLAYER}{STRING 5},\n" + .string "And when I battled you, {PLAYER}{KUN},\n" .string "my shorts felt icky and coarse.\p" .string "… … … … … …\n" .string "You didn't really believe that?\l" @@ -1117,7 +1117,7 @@ MatchCall_PersonalizedText40:: @ 82AE5CD .string "test of human endurance! Bye!$" MatchCall_PersonalizedText41:: @ 82AE698 - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here.\p" .string "How are your POKéMON doing?\p" .string "My DRAGON POKéMON appear to be\n" @@ -1171,7 +1171,7 @@ MatchCall_PersonalizedText46:: @ 82AE998 .string "I'd better go!$" MatchCall_PersonalizedText47:: @ 82AEA8F - .string "Oh, {PLAYER}{STRING 5}, hello!\n" + .string "Oh, {PLAYER}{KUN}, hello!\n" .string "This is {STR_VAR_1}.\l" .string "I'm up in the mountains now.\p" .string "But the ground is too bumpy.\n" @@ -1241,7 +1241,7 @@ MatchCall_PersonalizedText53:: @ 82AEEF4 MatchCall_PersonalizedText54:: @ 82AEFDA .string "Hi, it's {STR_VAR_1}. You know,\n" .string "the TRAINER who's always prepared!\p" - .string "{PLAYER}{STRING 5}, do you have enough items?\n" + .string "{PLAYER}{KUN}, do you have enough items?\n" .string "Are your POKéMON fit for action?\p" .string "Keeping everything perfect around\n" .string "you all the time is the secret to\l" @@ -1326,7 +1326,7 @@ MatchCall_PersonalizedText60:: @ 82AF671 .string "enjoy POKéMON whatever your age.\p" .string "Wouldn't it be good if you had\n" .string "a partnership like ours?\p" - .string "Of course, {PLAYER}{STRING 5}, you already\n" + .string "Of course, {PLAYER}{KUN}, you already\n" .string "enjoy the trust and companionship\l" .string "of your POKéMON now.\p" .string "You have the makings of long and\n" @@ -1344,7 +1344,7 @@ MatchCall_PersonalizedText61:: @ 82AF7D8 .string "was weak to make an impression!\p" .string "She always chews me out whether\n" .string "we win or lose!\p" - .string "{PLAYER}{STRING 5}, can you say something\n" + .string "{PLAYER}{KUN}, can you say something\n" .string "to her next time?\p" .string "Okay, see you!$" @@ -1412,7 +1412,7 @@ MatchCall_BattleFrontierStreakText3:: @ 82AFCFF .string "Catch you soon!$" MatchCall_BattleFrontierStreakText4:: @ 82AFDA7 - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here. What's up?\p" .string "There's a rumor going around that\n" .string "you strung together {STR_VAR_3} straight\l" @@ -1421,7 +1421,7 @@ MatchCall_BattleFrontierStreakText4:: @ 82AFDA7 .string "See you!$" MatchCall_BattleFrontierStreakText5:: @ 82AFE3D - .string "Hiya, {PLAYER}{STRING 5}!\n" + .string "Hiya, {PLAYER}{KUN}!\n" .string "It's {STR_VAR_1}.\p" .string "You were at the {STR_VAR_2}\n" .string "and won {STR_VAR_3} battles in a row?\l" @@ -1430,7 +1430,7 @@ MatchCall_BattleFrontierStreakText5:: @ 82AFE3D .string "See you soon!$" MatchCall_BattleFrontierStreakText6:: @ 82AFECA - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here. How are you?\p" .string "By the way, I heard you pulled off\n" .string "the feat of {STR_VAR_3} straight wins at\l" @@ -1439,7 +1439,7 @@ MatchCall_BattleFrontierStreakText6:: @ 82AFECA .string "raising my team.$" MatchCall_BattleFrontierStreakText7:: @ 82AFF64 - .string "…Er, {PLAYER}{STRING 5}?\n" + .string "…Er, {PLAYER}{KUN}?\n" .string "{STR_VAR_1} here…\p" .string "Oh, yeah, you were over at\n" .string "the {STR_VAR_2}, right?\p" @@ -1448,7 +1448,7 @@ MatchCall_BattleFrontierStreakText7:: @ 82AFF64 .string "I have to go!$" MatchCall_BattleFrontierStreakText8:: @ 82AFFF0 - .string "Oh, {PLAYER}{STRING 5}, how do you do?\n" + .string "Oh, {PLAYER}{KUN}, how do you do?\n" .string "This is {STR_VAR_1} speaking.\l" .string "I hope you're doing well.\p" .string "Oh, but, you are. I've heard that\n" @@ -1458,7 +1458,7 @@ MatchCall_BattleFrontierStreakText8:: @ 82AFFF0 .string "I hope you stay successful.$" MatchCall_BattleFrontierStreakText9:: @ 82B00B5 - .string "Oh, {PLAYER}{STRING 5}, hi there!\n" + .string "Oh, {PLAYER}{KUN}, hi there!\n" .string "This is {STR_VAR_1}!\p" .string "I heard! Your {STR_VAR_3}-win streak at\n" .string "the {STR_VAR_2}!\p" @@ -1466,7 +1466,7 @@ MatchCall_BattleFrontierStreakText9:: @ 82B00B5 .string "I'd better try harder, too!$" MatchCall_BattleFrontierStreakText10:: @ 82B0129 - .string "Oh, {PLAYER}{STRING 5}, hello…\n" + .string "Oh, {PLAYER}{KUN}, hello…\n" .string "This is {STR_VAR_1}.\p" .string "You won {STR_VAR_3} straight battles at\n" .string "the {STR_VAR_2}?\p" @@ -1474,7 +1474,7 @@ MatchCall_BattleFrontierStreakText10:: @ 82B0129 .string "I need to work harder.$" MatchCall_BattleFrontierStreakText11:: @ 82B01A5 - .string "Ah, {PLAYER}{STRING 5}.\n" + .string "Ah, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\p" .string "I hear you're the terror of\n" .string "the {STR_VAR_2}?\p" @@ -1484,7 +1484,7 @@ MatchCall_BattleFrontierStreakText11:: @ 82B01A5 .string "I wonder how many I can win?$" MatchCall_BattleFrontierStreakText12:: @ 82B0232 - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "It's me, {STR_VAR_1}.\l" .string "Are you keeping well?\p" .string "Someone passed on word about you.\n" @@ -1494,7 +1494,7 @@ MatchCall_BattleFrontierStreakText12:: @ 82B0232 .string "See you!$" MatchCall_BattleFrontierStreakText13:: @ 82B02D9 - .string "Ah, hello, {PLAYER}{STRING 5}!\n" + .string "Ah, hello, {PLAYER}{KUN}!\n" .string "This is {STR_VAR_1}!\l" .string "I hope you've been keeping well.\p" .string "They say you won {STR_VAR_3} straight\n" @@ -1503,7 +1503,7 @@ MatchCall_BattleFrontierStreakText13:: @ 82B02D9 .string "Bye now.$" MatchCall_BattleFrontierStreakText14:: @ 82B0366 - .string "Oh, hi, {PLAYER}{STRING 5}.\n" + .string "Oh, hi, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\p" .string "I heard about you!\n" .string "Didn't you just win {STR_VAR_3} battles in\l" @@ -1538,7 +1538,7 @@ MatchCall_BattleFrontierRecordStreakText3:: @ 82B04DE .string "Catch you soon!$" MatchCall_BattleFrontierRecordStreakText4:: @ 82B0586 - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here. What's up?\p" .string "There's a rumor going around that\n" .string "you strung together {STR_VAR_3} straight\l" @@ -1547,7 +1547,7 @@ MatchCall_BattleFrontierRecordStreakText4:: @ 82B0586 .string "See you!$" MatchCall_BattleFrontierRecordStreakText5:: @ 82B061C - .string "Hiya, {PLAYER}{STRING 5}!\n" + .string "Hiya, {PLAYER}{KUN}!\n" .string "It's {STR_VAR_1}.\p" .string "You were at the {STR_VAR_2}\n" .string "and won {STR_VAR_3} battles in a row?\l" @@ -1556,7 +1556,7 @@ MatchCall_BattleFrontierRecordStreakText5:: @ 82B061C .string "See you soon!$" MatchCall_BattleFrontierRecordStreakText6:: @ 82B06A3 - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here. How are you?\p" .string "By the way, I heard you pulled off\n" .string "the feat of {STR_VAR_3} straight wins at\l" @@ -1565,7 +1565,7 @@ MatchCall_BattleFrontierRecordStreakText6:: @ 82B06A3 .string "See you soon!$" MatchCall_BattleFrontierRecordStreakText7:: @ 82B073B - .string "…Er, {PLAYER}{STRING 5}?\n" + .string "…Er, {PLAYER}{KUN}?\n" .string "{STR_VAR_1} here…\p" .string "Oh, yeah, you were over at\n" .string "the {STR_VAR_2}, right?\p" @@ -1574,7 +1574,7 @@ MatchCall_BattleFrontierRecordStreakText7:: @ 82B073B .string "I have to go!$" MatchCall_BattleFrontierRecordStreakText8:: @ 82B07C7 - .string "Oh, {PLAYER}{STRING 5}, how do you do?\n" + .string "Oh, {PLAYER}{KUN}, how do you do?\n" .string "This is {STR_VAR_1} speaking.\l" .string "I hope you're doing well.\p" .string "Oh, but, you are. I've heard that\n" @@ -1584,7 +1584,7 @@ MatchCall_BattleFrontierRecordStreakText8:: @ 82B07C7 .string "I'd better work on my POKéMON, too!$" MatchCall_BattleFrontierRecordStreakText9:: @ 82B0894 - .string "Oh, {PLAYER}{STRING 5}, hi there!\n" + .string "Oh, {PLAYER}{KUN}, hi there!\n" .string "This is {STR_VAR_1}!\p" .string "I heard! Your {STR_VAR_3}-win streak at\n" .string "the {STR_VAR_2}!\p" @@ -1592,7 +1592,7 @@ MatchCall_BattleFrontierRecordStreakText9:: @ 82B0894 .string "I'd better try harder, too!$" MatchCall_BattleFrontierRecordStreakText10:: @ 82B0908 - .string "Oh, {PLAYER}{STRING 5}, hello…\n" + .string "Oh, {PLAYER}{KUN}, hello…\n" .string "This is {STR_VAR_1}.\p" .string "You won {STR_VAR_3} straight battles at\n" .string "the {STR_VAR_2}?\p" @@ -1600,7 +1600,7 @@ MatchCall_BattleFrontierRecordStreakText10:: @ 82B0908 .string "I need to work harder.$" MatchCall_BattleFrontierRecordStreakText11:: @ 82B0984 - .string "Ah, {PLAYER}{STRING 5}.\n" + .string "Ah, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\p" .string "I hear you're the terror of\n" .string "the {STR_VAR_2}?\p" @@ -1610,7 +1610,7 @@ MatchCall_BattleFrontierRecordStreakText11:: @ 82B0984 .string "I wonder how many I can win?$" MatchCall_BattleFrontierRecordStreakText12:: @ 82B0A11 - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "It's me, {STR_VAR_1}.\l" .string "Are you keeping well?\p" .string "Someone passed on word about you.\n" @@ -1620,7 +1620,7 @@ MatchCall_BattleFrontierRecordStreakText12:: @ 82B0A11 .string "See you!$" MatchCall_BattleFrontierRecordStreakText13:: @ 82B0AB8 - .string "Ah, hello, {PLAYER}{STRING 5}!\n" + .string "Ah, hello, {PLAYER}{KUN}!\n" .string "This is {STR_VAR_1}!\l" .string "I hope you've been keeping well.\p" .string "They say you won {STR_VAR_3} straight\n" @@ -1629,7 +1629,7 @@ MatchCall_BattleFrontierRecordStreakText13:: @ 82B0AB8 .string "Bye now.$" MatchCall_BattleFrontierRecordStreakText14:: @ 82B0B45 - .string "Oh, hi, {PLAYER}{STRING 5}.\n" + .string "Oh, hi, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\l" .string "I heard about you!\p" .string "Didn't you just win {STR_VAR_3} battles in\n" @@ -1664,7 +1664,7 @@ MatchCall_BattleDomeText3:: @ 82B0CC7 .string "Catch you soon!$" MatchCall_BattleDomeText4:: @ 82B0D4A - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here.\p" .string "I heard you became the champion\n" .string "at the {STR_VAR_2} {STR_VAR_3} times.\p" @@ -1672,7 +1672,7 @@ MatchCall_BattleDomeText4:: @ 82B0D4A .string "I'll try to keep up!$" MatchCall_BattleDomeText5:: @ 82B0DC8 - .string "Hiya, {PLAYER}{STRING 5}!\n" + .string "Hiya, {PLAYER}{KUN}!\n" .string "It's {STR_VAR_1}.\p" .string "I heard you won {STR_VAR_3} times\n" .string "outright at the {STR_VAR_2}.\p" @@ -1680,7 +1680,7 @@ MatchCall_BattleDomeText5:: @ 82B0DC8 .string "See you soon!$" MatchCall_BattleDomeText6:: @ 82B0E35 - .string "Hey, {PLAYER}{STRING 5}?\n" + .string "Hey, {PLAYER}{KUN}?\n" .string "{STR_VAR_1} here. How are you?\p" .string "By the way, I heard you became\n" .string "the champion {STR_VAR_3} times at\l" @@ -1689,7 +1689,7 @@ MatchCall_BattleDomeText6:: @ 82B0E35 .string "you pull farther ahead.$" MatchCall_BattleDomeText7:: @ 82B0ED1 - .string "{PLAYER}{STRING 5}?\n" + .string "{PLAYER}{KUN}?\n" .string "{STR_VAR_1} here.\p" .string "You were at the {STR_VAR_2}\n" .string "and became the champ {STR_VAR_3} times?\p" @@ -1699,7 +1699,7 @@ MatchCall_BattleDomeText7:: @ 82B0ED1 .string "Okay, bye.$" MatchCall_BattleDomeText8:: @ 82B0F72 - .string "Oh, {PLAYER}{STRING 5}, how do you do?\n" + .string "Oh, {PLAYER}{KUN}, how do you do?\n" .string "This is {STR_VAR_1} speaking.\l" .string "I hope you're doing well.\l" .string "Oh, but, you are.\p" @@ -1709,7 +1709,7 @@ MatchCall_BattleDomeText8:: @ 82B0F72 .string "See you again.$" MatchCall_BattleDomeText9:: @ 82B102A - .string "Oh, {PLAYER}{STRING 5}, hi there!\n" + .string "Oh, {PLAYER}{KUN}, hi there!\n" .string "This is {STR_VAR_1}!\p" .string "I heard! You took the title\n" .string "{STR_VAR_3} times at the {STR_VAR_2}!\p" @@ -1717,7 +1717,7 @@ MatchCall_BattleDomeText9:: @ 82B102A .string "I'd better try harder, too!$" MatchCall_BattleDomeText10:: @ 82B10A7 - .string "Oh, {PLAYER}{STRING 5}, hello.\n" + .string "Oh, {PLAYER}{KUN}, hello.\n" .string "This is {STR_VAR_1}.\p" .string "You won {STR_VAR_3} straight times at\n" .string "the {STR_VAR_2}?\p" @@ -1725,7 +1725,7 @@ MatchCall_BattleDomeText10:: @ 82B10A7 .string "I need to work harder.$" MatchCall_BattleDomeText11:: @ 82B1121 - .string "Ah, {PLAYER}{STRING 5}.\n" + .string "Ah, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\p" .string "I hear you're the terror of\n" .string "the {STR_VAR_2}?\p" @@ -1737,7 +1737,7 @@ MatchCall_BattleDomeText11:: @ 82B1121 .string "Well, see you!$" MatchCall_BattleDomeText12:: @ 82B11D3 - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "It's me, {STR_VAR_1}.\l" .string "Are you keeping well?\p" .string "You've won {STR_VAR_3} events at a place\n" @@ -1746,7 +1746,7 @@ MatchCall_BattleDomeText12:: @ 82B11D3 .string "See you!$" MatchCall_BattleDomeText13:: @ 82B124D - .string "Ah, hello, {PLAYER}{STRING 5}!\n" + .string "Ah, hello, {PLAYER}{KUN}!\n" .string "This is {STR_VAR_1}!\l" .string "I hope you've been keeping well.\p" .string "They say you won {STR_VAR_3} events\n" @@ -1755,7 +1755,7 @@ MatchCall_BattleDomeText13:: @ 82B124D .string "Bye now.$" MatchCall_BattleDomeText14:: @ 82B12D0 - .string "Oh, hi, {PLAYER}{STRING 5}.\n" + .string "Oh, hi, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\l" .string "I heard about you!\p" .string "Didn't you win {STR_VAR_3} titles\n" @@ -1790,7 +1790,7 @@ MatchCall_BattlePikeText3:: @ 82B142B .string "Catch you soon!$" MatchCall_BattlePikeText4:: @ 82B14B4 - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here.\p" .string "I heard you blew through {STR_VAR_3} rooms\n" .string "at the {STR_VAR_2}.\p" @@ -1798,7 +1798,7 @@ MatchCall_BattlePikeText4:: @ 82B14B4 .string "try to keep up!$" MatchCall_BattlePikeText5:: @ 82B1525 - .string "Hiya, {PLAYER}{STRING 5}!\n" + .string "Hiya, {PLAYER}{KUN}!\n" .string "It's {STR_VAR_1}.\p" .string "I heard you got past {STR_VAR_3} rooms\n" .string "at the {STR_VAR_2}.\p" @@ -1806,7 +1806,7 @@ MatchCall_BattlePikeText5:: @ 82B1525 .string "See you soon!$" MatchCall_BattlePikeText6:: @ 82B158E - .string "Hey, {PLAYER}{STRING 5}?\n" + .string "Hey, {PLAYER}{KUN}?\n" .string "{STR_VAR_1} here. How are you?\p" .string "By the way, I heard you got through\n" .string "{STR_VAR_3} rooms at the {STR_VAR_2}.\p" @@ -1814,7 +1814,7 @@ MatchCall_BattlePikeText6:: @ 82B158E .string "you pull further ahead.$" MatchCall_BattlePikeText7:: @ 82B1622 - .string "{PLAYER}{STRING 5}?\n" + .string "{PLAYER}{KUN}?\n" .string "{STR_VAR_1} here.\p" .string "You were at the {STR_VAR_2}\n" .string "and won your way past {STR_VAR_3} rooms?\p" @@ -1823,7 +1823,7 @@ MatchCall_BattlePikeText7:: @ 82B1622 .string "Okay, bye.$" MatchCall_BattlePikeText8:: @ 82B169D - .string "Oh, {PLAYER}{STRING 5}, how do you do?\n" + .string "Oh, {PLAYER}{KUN}, how do you do?\n" .string "This is {STR_VAR_1} speaking.\l" .string "I hope you're doing well.\l" .string "Oh, but, you are.\p" @@ -1834,7 +1834,7 @@ MatchCall_BattlePikeText8:: @ 82B169D .string "See you again.$" MatchCall_BattlePikeText9:: @ 82B1775 - .string "Oh, {PLAYER}{STRING 5}, hi there!\n" + .string "Oh, {PLAYER}{KUN}, hi there!\n" .string "This is {STR_VAR_1}!\p" .string "I heard! You won your way through\n" .string "{STR_VAR_3} rooms at the {STR_VAR_2}!\p" @@ -1842,7 +1842,7 @@ MatchCall_BattlePikeText9:: @ 82B1775 .string "I'd better try harder, too!$" MatchCall_BattlePikeText10:: @ 82B17F8 - .string "Oh, {PLAYER}{STRING 5}, hello.\n" + .string "Oh, {PLAYER}{KUN}, hello.\n" .string "This is {STR_VAR_1}.\p" .string "You won your way past {STR_VAR_3} rooms\n" .string "at the {STR_VAR_2}?\p" @@ -1850,7 +1850,7 @@ MatchCall_BattlePikeText10:: @ 82B17F8 .string "I need to work harder.$" MatchCall_BattlePikeText11:: @ 82B1877 - .string "Ah, {PLAYER}{STRING 5}.\n" + .string "Ah, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\p" .string "I hear you're the terror of\n" .string "the {STR_VAR_2}?\p" @@ -1862,7 +1862,7 @@ MatchCall_BattlePikeText11:: @ 82B1877 .string "Well, see you!$" MatchCall_BattlePikeText12:: @ 82B1946 - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "It's me, {STR_VAR_1}.\l" .string "Are you keeping well?\p" .string "You've won through {STR_VAR_3} rooms at\n" @@ -1871,7 +1871,7 @@ MatchCall_BattlePikeText12:: @ 82B1946 .string "See you!$" MatchCall_BattlePikeText13:: @ 82B19C7 - .string "Ah, hello, {PLAYER}{STRING 5}!\n" + .string "Ah, hello, {PLAYER}{KUN}!\n" .string "This is {STR_VAR_1}!\l" .string "I hope you've been keeping well.\p" .string "They say you won in {STR_VAR_3} rooms\n" @@ -1880,7 +1880,7 @@ MatchCall_BattlePikeText13:: @ 82B19C7 .string "Bye now.$" MatchCall_BattlePikeText14:: @ 82B1A4C - .string "Oh, hi, {PLAYER}{STRING 5}.\n" + .string "Oh, hi, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\l" .string "I heard about you!\p" .string "Didn't you get through {STR_VAR_3} rooms\n" @@ -1915,7 +1915,7 @@ MatchCall_BattlePyramidText3:: @ 82B1BE4 .string "Catch you soon!$" MatchCall_BattlePyramidText4:: @ 82B1C6A - .string "Hey, {PLAYER}{STRING 5}.\n" + .string "Hey, {PLAYER}{KUN}.\n" .string "{STR_VAR_1} here.\p" .string "I heard you scaled {STR_VAR_3} floors\n" .string "in the {STR_VAR_2}.\p" @@ -1923,7 +1923,7 @@ MatchCall_BattlePyramidText4:: @ 82B1C6A .string "to keep up!$" MatchCall_BattlePyramidText5:: @ 82B1CCF - .string "Hiya, {PLAYER}{STRING 5}!\n" + .string "Hiya, {PLAYER}{KUN}!\n" .string "It's {STR_VAR_1}.\p" .string "I heard you climbed {STR_VAR_3} floors\n" .string "in the {STR_VAR_2}.\p" @@ -1931,7 +1931,7 @@ MatchCall_BattlePyramidText5:: @ 82B1CCF .string "See you soon!$" MatchCall_BattlePyramidText6:: @ 82B1D38 - .string "Hey, {PLAYER}{STRING 5}?\n" + .string "Hey, {PLAYER}{KUN}?\n" .string "{STR_VAR_1} here. How are you?\p" .string "By the way, I heard you got through\n" .string "{STR_VAR_3} floors in the {STR_VAR_2}.\p" @@ -1939,7 +1939,7 @@ MatchCall_BattlePyramidText6:: @ 82B1D38 .string "you pull further ahead.$" MatchCall_BattlePyramidText7:: @ 82B1DCD - .string "{PLAYER}{STRING 5}?\n" + .string "{PLAYER}{KUN}?\n" .string "{STR_VAR_1} here.\p" .string "You were at the {STR_VAR_2}\n" .string "and won your way up {STR_VAR_3} floors?\p" @@ -1949,7 +1949,7 @@ MatchCall_BattlePyramidText7:: @ 82B1DCD .string "Okay, bye.$" MatchCall_BattlePyramidText8:: @ 82B1E4B - .string "Oh, {PLAYER}{STRING 5}, how do you do?\n" + .string "Oh, {PLAYER}{KUN}, how do you do?\n" .string "This is {STR_VAR_1} speaking.\l" .string "I hope you're doing well.\l" .string "Oh, but, you are.\p" @@ -1960,7 +1960,7 @@ MatchCall_BattlePyramidText8:: @ 82B1E4B .string "See you again.$" MatchCall_BattlePyramidText9:: @ 82B1F24 - .string "Oh, {PLAYER}{STRING 5}, hi there!\n" + .string "Oh, {PLAYER}{KUN}, hi there!\n" .string "This is {STR_VAR_1}!\p" .string "I heard! You won your way through\n" .string "{STR_VAR_3} floors in the {STR_VAR_2}!\p" @@ -1968,7 +1968,7 @@ MatchCall_BattlePyramidText9:: @ 82B1F24 .string "I'd better try harder, too!$" MatchCall_BattlePyramidText10:: @ 82B1FA8 - .string "Oh, {PLAYER}{STRING 5}, hello.\n" + .string "Oh, {PLAYER}{KUN}, hello.\n" .string "This is {STR_VAR_1}.\p" .string "You climbed {STR_VAR_3} floors inside\n" .string "the {STR_VAR_2}?\p" @@ -1976,7 +1976,7 @@ MatchCall_BattlePyramidText10:: @ 82B1FA8 .string "I need to work harder.$" MatchCall_BattlePyramidText11:: @ 82B2022 - .string "Ah, {PLAYER}{STRING 5}.\n" + .string "Ah, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\p" .string "I hear you're the terror of\n" .string "the {STR_VAR_2}?\p" @@ -1988,7 +1988,7 @@ MatchCall_BattlePyramidText11:: @ 82B2022 .string "Well, see you!$" MatchCall_BattlePyramidText12:: @ 82B20F3 - .string "Hello, {PLAYER}{STRING 5}.\n" + .string "Hello, {PLAYER}{KUN}.\n" .string "It's me, {STR_VAR_1}.\l" .string "Are you keeping well?\p" .string "You've won through {STR_VAR_3} floors in\n" @@ -1997,7 +1997,7 @@ MatchCall_BattlePyramidText12:: @ 82B20F3 .string "See you!$" MatchCall_BattlePyramidText13:: @ 82B2175 - .string "Ah, hello, {PLAYER}{STRING 5}!\n" + .string "Ah, hello, {PLAYER}{KUN}!\n" .string "This is {STR_VAR_1}!\l" .string "I hope you've been keeping well.\p" .string "They say you climbed {STR_VAR_3} floors\n" @@ -2006,7 +2006,7 @@ MatchCall_BattlePyramidText13:: @ 82B2175 .string "Bye now.$" MatchCall_BattlePyramidText14:: @ 82B21FC - .string "Oh, hi, {PLAYER}{STRING 5}.\n" + .string "Oh, hi, {PLAYER}{KUN}.\n" .string "This is {STR_VAR_1}.\l" .string "I heard about you!\p" .string "Didn't you get through {STR_VAR_3} floors\n" @@ -2068,7 +2068,7 @@ gText_Roxanne_Pokenav_2B2607:: @ 82B2607 .string "is a matter of pride.$" gText_Brawly_Pokenav_2B2659:: @ 82B2659 - .string "BRAWLY: Hey, there, {PLAYER}{STRING 5}!\p" + .string "BRAWLY: Hey, there, {PLAYER}{KUN}!\p" .string "I learned a lot from the battle we\n" .string "had together.\p" .string "I intend to do my training over,\n" @@ -2079,7 +2079,7 @@ gText_Brawly_Pokenav_2B2659:: @ 82B2659 .string "I want you to challenge us again.$" gText_Brawly_Pokenav_2B275D:: @ 82B275D - .string "BRAWLY: Hey, {PLAYER}{STRING 5}!\n" + .string "BRAWLY: Hey, {PLAYER}{KUN}!\n" .string "Congratulations!\p" .string "Word about your exploits arrived\n" .string "on tidal winds!\p" @@ -2091,13 +2091,13 @@ gText_Brawly_Pokenav_2B275D:: @ 82B275D .string "I want you to challenge us again.$" gText_Brawly_Pokenav_2B286F:: @ 82B286F - .string "BRAWLY: Hey, {PLAYER}{STRING 5}!\n" + .string "BRAWLY: Hey, {PLAYER}{KUN}!\n" .string "My GYM's ready for action!\p" .string "Come back to DEWFORD anytime\n" .string "for another challenge!$" gText_Brawly_Pokenav_2B28D1:: @ 82B28D1 - .string "BRAWLY: {PLAYER}{STRING 5}, I don't think\n" + .string "BRAWLY: {PLAYER}{KUN}, I don't think\n" .string "I'll ever get bored of battling you!$" gText_Wattson_Pokenav_2B2912:: @ 82B2912 @@ -2225,7 +2225,7 @@ gText_TateLiza_Pokenav_2B31CD:: @ 82B31CD gText_Juan_Pokenav_2B3249:: @ 82B3249 .string "JUAN: Hmm…\n" - .string "{PLAYER}{STRING 5}… Was it?\p" + .string "{PLAYER}{KUN}… Was it?\p" .string "Our battle together--it brought\n" .string "to me memories of when I first\l" .string "encountered WALLACE.\p" @@ -2233,7 +2233,7 @@ gText_Juan_Pokenav_2B3249:: @ 82B3249 .string "yet surpass WALLACE!$" gText_Juan_Pokenav_2B32EC:: @ 82B32EC - .string "JUAN: Fufu… {PLAYER}{STRING 5}…\n" + .string "JUAN: Fufu… {PLAYER}{KUN}…\n" .string "You've finally achieved your goal.\p" .string "My eye for appraising talent wasn't\n" .string "mistaken…\p" @@ -2242,14 +2242,14 @@ gText_Juan_Pokenav_2B32EC:: @ 82B32EC .string "of power and prestige.$" gText_Juan_Pokenav_2B33AA:: @ 82B33AA - .string "JUAN: Hoho… {PLAYER}{STRING 5}…\p" + .string "JUAN: Hoho… {PLAYER}{KUN}…\p" .string "Our SOOTOPOLIS GYM has finally\n" .string "reopened.\p" .string "If you wish to see me, you are\n" .string "welcome to visit anytime.$" gText_Juan_Pokenav_2B341E:: @ 82B341E - .string "JUAN: {PLAYER}{STRING 5}…\p" + .string "JUAN: {PLAYER}{KUN}…\p" .string "Like the finest music, the battles\n" .string "we wage together strike chords\l" .string "of inspiration in my heart…\p" @@ -2293,7 +2293,7 @@ gText_Drake_Pokenav_2B368B:: @ 82B368B .string "Don't you agree, {PLAYER}?$" gText_Wallace_Pokenav_2B3790:: @ 82B3790 - .string "WALLACE: Hello, {PLAYER}{STRING 5}.\n" + .string "WALLACE: Hello, {PLAYER}{KUN}.\n" .string "Have you met STEVEN?\p" .string "He is…\n" .string "Actually incredibly skilled.\p" @@ -2336,14 +2336,14 @@ MossdeepCity_SpaceCenter_2F_Text_2B39C6: @ 82B39C6 .string "… … … … … Click!$" gText_May_Pokenav_2B3AB3:: @ 2B3AB3 - .string "MAY: Hi, {PLAYER}{STRING 5}!\p" + .string "MAY: Hi, {PLAYER}{KUN}!\p" .string "MR. BRINEY retired as a SAILOR,\n" .string "but I still see him out on the sea\l" .string "with his pet PEEKO sometimes.\p" .string "He must love the sea still.$" gText_May_Pokenav_2B3B3F:: @ 2B3B3F - .string "MAY: Hi, {PLAYER}{STRING 5}!\p" + .string "MAY: Hi, {PLAYER}{KUN}!\p" .string "You know how little towns like\n" .string "PETALBURG and DEWFORD have GYMS?\p" .string "For some reason, the big port of\n" @@ -2352,7 +2352,7 @@ gText_May_Pokenav_2B3B3F:: @ 2B3B3F .string "I should apply to be the LEADER.$" gText_May_Pokenav_2B3C13:: @ 2B3C13 - .string "MAY: Hi, {PLAYER}{STRING 5}!\p" + .string "MAY: Hi, {PLAYER}{KUN}!\p" .string "Do you remember a man named\n" .string "the CUTTER in RUSTBORO?\l" .string "He had a house there, remember?\p" @@ -2364,13 +2364,13 @@ gText_May_Pokenav_2B3C13:: @ 2B3C13 .string "The ROCK SMASH GUY!$" gText_May_Pokenav_2B3CF3:: @ 2B3CF3 - .string "MAY: {PLAYER}{STRING 5}?\p" + .string "MAY: {PLAYER}{KUN}?\p" .string "RUSTURF TUNNEL…\n" .string "They named it that because it\l" .string "joins RUSTBORO and VERDANTURF.$" gText_May_Pokenav_2B3D4B:: @ 2B3D4B - .string "MAY: {PLAYER}{STRING 5}, how are you?\p" + .string "MAY: {PLAYER}{KUN}, how are you?\p" .string "I'm out on ROUTE 111 now.\p" .string "I'm going to get a rest at an old\n" .string "lady's house.\p" @@ -2378,7 +2378,7 @@ gText_May_Pokenav_2B3D4B:: @ 2B3D4B .string "the desert.$" gText_May_Pokenav_2B3DD1:: @ 2B3DD1 - .string "MAY: Hi, {PLAYER}{STRING 5}!\p" + .string "MAY: Hi, {PLAYER}{KUN}!\p" .string "Did you know about the MIRAGE\n" .string "TOWER in the desert?\p" .string "They say, like a mirage, it seems\n" @@ -2386,21 +2386,21 @@ gText_May_Pokenav_2B3DD1:: @ 2B3DD1 .string "I wish I could see it.$" gText_May_Pokenav_2B3E69:: @ 2B3E69 - .string "MAY: {PLAYER}{STRING 5}, yahoo!\n" + .string "MAY: {PLAYER}{KUN}, yahoo!\n" .string "I'm on ROUTE 119 now.\p" .string "There's a big river here, and\n" .string "it often rains.\p" .string "I got soaked!$" gText_May_Pokenav_2B3ECD:: @ 2B3ECD - .string "MAY: {PLAYER}{STRING 5}, hi.\p" + .string "MAY: {PLAYER}{KUN}, hi.\p" .string "MT. PYRE is a memorial to POKéMON\n" .string "whose lives have ended.\p" .string "Maybe as a result, it's infested\n" .string "with many GHOST-type POKéMON!$" gText_May_Pokenav_2B3F2B:: @ 2B3F2B - .string "MAY: Hi, {PLAYER}{STRING 5}!\p" + .string "MAY: Hi, {PLAYER}{KUN}!\p" .string "I was thinking of going to the hot\n" .string "spring in LAVARIDGE.\p" .string "But on the way, around JAGGED\n" @@ -2408,14 +2408,14 @@ gText_May_Pokenav_2B3F2B:: @ 2B3F2B .string "characters. The mood was ugly!$" gText_May_Pokenav_2B3FFB:: @ 2B3FFB - .string "MAY: Hi, {PLAYER}{STRING 5}!\n" + .string "MAY: Hi, {PLAYER}{KUN}!\n" .string "Did you see the news?\p" .string "They say CAPT. STERN discovered\n" .string "the SEAFLOOR CAVERN while on his\l" .string "submarine expedition.$" gText_May_Pokenav_2B402B:: @ 2B402B - .string "MAY: Hi, {PLAYER}{STRING 5}!\n" + .string "MAY: Hi, {PLAYER}{KUN}!\n" .string "Don't you think it's neat?\p" .string "Even if you don't have a boat,\n" .string "you can cross the sea using\l" @@ -2425,7 +2425,7 @@ gText_May_Pokenav_2B402B:: @ 2B402B .string "you go to the bottom of the sea.$" gText_May_Pokenav_2B414B:: @ 2B414B - .string "MAY: Hi, {PLAYER}{STRING 5}!\n" + .string "MAY: Hi, {PLAYER}{KUN}!\n" .string "Hope things are okay!\p" .string "Have you been on the sea and\n" .string "found your way to the other side\l" @@ -2436,7 +2436,7 @@ gText_May_Pokenav_2B414B:: @ 2B414B .string "come up to the surface. Easy!$" gText_May_Pokenav_2B4228:: @ 2B4228 - .string "MAY: Hi, {PLAYER}{STRING 5}!\p" + .string "MAY: Hi, {PLAYER}{KUN}!\p" .string "How's it going?\n" .string "Are you filling your POKéDEX?\p" .string "I heard a rumor that there are\n" @@ -2445,7 +2445,7 @@ gText_May_Pokenav_2B4228:: @ 2B4228 .string "I would love to see even one…$" gText_May_Pokenav_2B42E0:: @ 2B42E0 - .string "MAY: {PLAYER}{STRING 5}!\n" + .string "MAY: {PLAYER}{KUN}!\n" .string "I heard the rumors!\p" .string "You beat the SOOTOPOLIS GYM\n" .string "LEADER?\p" @@ -2455,9 +2455,9 @@ gText_May_Pokenav_2B42E0:: @ 2B42E0 gText_May_Pokenav_2B4350:: @ 2B4350 .string "MAY: There isn't a single TRAINER\n" .string "left in HOENN who doesn't know who\l" - .string "you are, {PLAYER}{STRING 5}!\p" + .string "you are, {PLAYER}{KUN}!\p" .string "When I tell people that I'm friends\n" - .string "with you, {PLAYER}{STRING 5}, they're all\l" + .string "with you, {PLAYER}{KUN}, they're all\l" .string "surprised!$" gText_Brendan_Pokenav_2B43EF:: @ 2B43EF @@ -2641,7 +2641,7 @@ gText_Wally_Pokenav_2B5100:: @ 2B5100 .string "Thank you…$" gText_Scott_Pokenav_2B5184:: @ 2B5184 - .string "SCOTT: Howdy, {PLAYER}{STRING 5}!\p" + .string "SCOTT: Howdy, {PLAYER}{KUN}!\p" .string "You know how POKéMON can be found\n" .string "everywhere?\p" .string "Like in the mountains, in the sea,\n" @@ -2660,7 +2660,7 @@ gText_Scott_Pokenav_2B5275:: @ 2B5275 .string "makes me all ticklish!$" gText_Scott_Pokenav_2B5323:: @ 2B5323 - .string "SCOTT: Hi, hi, {PLAYER}{STRING 5}!\p" + .string "SCOTT: Hi, hi, {PLAYER}{KUN}!\p" .string "Have you had the chance to climb\n" .string "MT. PYRE?\p" .string "The place is a memorial to POKéMON\n" @@ -2669,7 +2669,7 @@ gText_Scott_Pokenav_2B5323:: @ 2B5323 .string "should climb to the top of once.$" gText_Scott_Pokenav_2B53DB:: @ 2B53DB - .string "SCOTT: Hi, {PLAYER}{STRING 5}!\p" + .string "SCOTT: Hi, {PLAYER}{KUN}!\p" .string "I've been hearing about these odd\n" .string "gangs being a nuisance.\p" .string "TEAM MAGMA and TEAM AQUA,\n" @@ -2679,7 +2679,7 @@ gText_Scott_Pokenav_2B53DB:: @ 2B53DB .string "…But if they're thugs…$" gText_Scott_Pokenav_2B54A5:: @ 2B54A5 - .string "SCOTT: Oh, hi, {PLAYER}{STRING 5}.\p" + .string "SCOTT: Oh, hi, {PLAYER}{KUN}.\p" .string "Might there be tough TRAINERS\n" .string "at the bottom of the sea?\p" .string "I can't go check for myself.\n" @@ -2687,7 +2687,7 @@ gText_Scott_Pokenav_2B54A5:: @ 2B54A5 .string "And I don't raise POKéMON…$" gText_Scott_Pokenav_2B5541:: @ 2B5541 - .string "SCOTT: Hi, hi, {PLAYER}{STRING 5}!\p" + .string "SCOTT: Hi, hi, {PLAYER}{KUN}!\p" .string "You know that you can challenge\n" .string "the POKéMON LEAGUE when you've\l" .string "collected all the GYM BADGES?\p" @@ -2774,7 +2774,7 @@ gText_Norman_Pokenav_2B5B5E:: @ 82B5B5E .string "How much higher will you soar?$" gText_Steven_Pokenav_2B5B95:: @ 82B5B95 - .string "STEVEN: Hi, {PLAYER}{STRING 5}!\p" + .string "STEVEN: Hi, {PLAYER}{KUN}!\p" .string "Have you been to MAUVILLE\n" .string "already?\p" .string "You should visit the BIKE SHOP\n" @@ -2785,14 +2785,14 @@ gText_Steven_Pokenav_2B5B95:: @ 82B5B95 .string "there.$" gText_Steven_Pokenav_2B5C53:: @ 82B5C53 - .string "STEVEN: Hi, {PLAYER}{STRING 5}!\p" + .string "STEVEN: Hi, {PLAYER}{KUN}!\p" .string "I've met a lot of different\n" .string "TRAINERS so far.\p" .string "But you're one of a kind.\n" .string "You're not like anyone else.$" gText_Steven_Pokenav_2B5CC9:: @ 82B5CC9 - .string "STEVEN: Hi, {PLAYER}{STRING 5}!\p" + .string "STEVEN: Hi, {PLAYER}{KUN}!\p" .string "When you're on an adventure with\n" .string "your POKéMON, what do you think?\p" .string "Do you consider them to be strong\n" @@ -2804,7 +2804,7 @@ gText_Steven_Pokenav_2B5CC9:: @ 82B5CC9 gText_Steven_Pokenav_2B5DB4:: @ 82B5DB4 .string "STEVEN: Hello?\n" - .string "{PLAYER}{STRING 5}?\p" + .string "{PLAYER}{KUN}?\p" .string "I'm involved in a spot of trouble\n" .string "at the SPACE CENTER.\p" .string "I'm sorry, but I can't talk now.\n" @@ -2812,7 +2812,7 @@ gText_Steven_Pokenav_2B5DB4:: @ 82B5DB4 gText_Steven_Pokenav_2B5E26:: @ 82B5E26 .string "STEVEN: Oh!\n" - .string "{PLAYER}{STRING 5}!\p" + .string "{PLAYER}{KUN}!\p" .string "There's no need to talk.\n" .string "It's past time for talking.\p" .string "You have to believe in yourself\n" @@ -2824,7 +2824,7 @@ gText_Steven_Pokenav_2B5EA2:: @ 82B5EA2 .string "the call…$" gText_Steven_Pokenav_2B5ED9:: @ 82B5ED9 - .string "STEVEN: {PLAYER}{STRING 5}… Congratulations\n" + .string "STEVEN: {PLAYER}{KUN}… Congratulations\n" .string "for entering the HALL OF FAME.\p" .string "… … … … … …\n" .string "… … … … … …\p" @@ -2851,7 +2851,7 @@ Route101_Text_2B603A: @ 82B603A .string "POKéMON becomes more fun, eh?$" gText_MrStone_Pokenav_2B60C0:: @ 82B60C0 - .string "MR. STONE: Oh? {PLAYER}{STRING 5}!\p" + .string "MR. STONE: Oh? {PLAYER}{KUN}!\p" .string "Since you called me, the POKéNAV\n" .string "must be working properly!\p" .string "Other people will be registered,\n" @@ -2866,7 +2866,7 @@ gText_MrStone_Pokenav_2B60C0:: @ 82B60C0 .string "See you again!$" gText_MrStone_Pokenav_2B61E6:: @ 82B61E6 - .string "MR. STONE: Oh? {PLAYER}{STRING 5}!\p" + .string "MR. STONE: Oh? {PLAYER}{KUN}!\p" .string "What's wrong? Have you forgotten\n" .string "about that little errand of mine?\p" .string "I need you to deliver my letter\n" @@ -2878,7 +2878,7 @@ gText_MrStone_Pokenav_2B61E6:: @ 82B61E6 .string "I have to go! Bye-bye!$" gText_MrStone_Pokenav_2B6302:: @ 82B6302 - .string "MR. STONE: Oh! {PLAYER}{STRING 5}!\p" + .string "MR. STONE: Oh! {PLAYER}{KUN}!\p" .string "Ah, so you've met STEVEN!\n" .string "I'd better reward you, then!\p" .string "When you visit RUSTBORO again,\n" @@ -2886,7 +2886,7 @@ gText_MrStone_Pokenav_2B6302:: @ 82B6302 .string "I'll be waiting for you!$" gText_MrStone_Pokenav_2B63A0:: @ 82B63A0 - .string "MR. STONE: Oh! {PLAYER}{STRING 5}!\p" + .string "MR. STONE: Oh! {PLAYER}{KUN}!\p" .string "Did you know that DEVON was\n" .string "digging the RUSTURF TUNNEL?\p" .string "But we shut down the operation to\n" @@ -2897,7 +2897,7 @@ gText_MrStone_Pokenav_2B63A0:: @ 82B63A0 .string "own convenience.$" gText_MrStone_Pokenav_2B64A2:: @ 82B64A2 - .string "MR. STONE: Hello, hello, {PLAYER}{STRING 5}!\p" + .string "MR. STONE: Hello, hello, {PLAYER}{KUN}!\p" .string "I heard from someone in PETALBURG\n" .string "that you're NORMAN's child!\p" .string "No wonder you're such a capable\n" @@ -2935,7 +2935,7 @@ gText_MrStone_Pokenav_2B66B1:: @ 82B66B1 .string "BZZZZ…$" gText_MrStone_Pokenav_2B6703:: @ 82B6703 - .string "MR. STONE: {PLAYER}{STRING 5}! It's me!\p" + .string "MR. STONE: {PLAYER}{KUN}! It's me!\p" .string "You were apparently involved in all\n" .string "sorts of things, but I, being busy,\l" .string "haven't a clue exactly what!\p" @@ -2946,7 +2946,7 @@ gText_MrStone_Pokenav_2B6703:: @ 82B6703 gText_MrStone_Pokenav_2B67ED:: @ 82B67ED .string "MR. STONE: … … … … … …\n" - .string "Is this maybe {PLAYER}{STRING 5}?\p" + .string "Is this maybe {PLAYER}{KUN}?\p" .string "Your voice is so full of confidence,\n" .string "I didn't recognize you right off!\p" .string "Hm! You must come visit us at DEVON\n" diff --git a/data/unknown_jp_62609C.bin b/data/unknown_jp_62609C.bin Binary files differdeleted file mode 100644 index 1394e7aa8..000000000 --- a/data/unknown_jp_62609C.bin +++ /dev/null diff --git a/include/battle.h b/include/battle.h index 878a024b4..f8c685fb0 100644 --- a/include/battle.h +++ b/include/battle.h @@ -37,7 +37,6 @@ #define B_ACTION_NONE 0xFF #define MAX_TRAINER_ITEMS 4 -#define MAX_MON_MOVES 4 // array entries for battle communication #define MULTIUSE_STATE 0x0 @@ -180,19 +179,19 @@ struct AI_ThinkingStruct u8 aiState; u8 movesetIndex; u16 moveConsidered; - s8 score[4]; + s8 score[MAX_MON_MOVES]; u32 funcResult; u32 aiFlags; u8 aiAction; u8 aiLogicId; u8 filler12[6]; - u8 simulatedRNG[4]; + u8 simulatedRNG[MAX_MON_MOVES]; }; struct UsedMoves { - u16 moves[MAX_BATTLERS_COUNT]; - u16 unknown[MAX_BATTLERS_COUNT]; + u16 moves[MAX_MON_MOVES]; + u16 unknown[MAX_MON_MOVES]; }; struct BattleHistory diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 9449f1986..365229fda 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -97,16 +97,16 @@ struct HpAndStatus struct MovePpInfo { - u16 moves[4]; - u8 pp[4]; + u16 moves[MAX_MON_MOVES]; + u8 pp[MAX_MON_MOVES]; u8 ppBonuses; }; struct ChooseMoveStruct { - u16 moves[4]; - u8 currentPp[4]; - u8 maxPp[4]; + u16 moves[MAX_MON_MOVES]; + u8 currentPp[MAX_MON_MOVES]; + u8 maxPp[MAX_MON_MOVES]; u16 species; u8 monType1; u8 monType2; diff --git a/include/battle_tower.h b/include/battle_tower.h index 12d6d2e9e..8bc6e6554 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -7,7 +7,7 @@ struct RSBattleTowerRecord /*0x01*/ u8 facilityClass; /*0x02*/ u16 winStreak; /*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1]; - /*0x0C*/ u8 trainerId[4]; + /*0x0C*/ u8 trainerId[TRAINER_ID_LENGTH]; /*0x10*/ u16 greeting[6]; /*0x1C*/ struct BattleTowerPokemon party[3]; /*0xA0*/ u32 checksum; @@ -27,7 +27,7 @@ struct BattleFrontierTrainer struct FacilityMon { u16 species; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; u8 itemTableId; u8 evSpread; u8 nature; diff --git a/include/berry.h b/include/berry.h index 9ff18e198..ebe1e9a38 100644 --- a/include/berry.h +++ b/include/berry.h @@ -1,39 +1,6 @@ #ifndef GUARD_BERRY_H #define GUARD_BERRY_H -#define BERRY_NONE 0 - -enum -{ - BERRY_FIRMNESS_UNKNOWN, - BERRY_FIRMNESS_VERY_SOFT, - BERRY_FIRMNESS_SOFT, - BERRY_FIRMNESS_HARD, - BERRY_FIRMNESS_VERY_HARD, - BERRY_FIRMNESS_SUPER_HARD, -}; - -enum -{ - FLAVOR_SPICY, - FLAVOR_DRY, - FLAVOR_SWEET, - FLAVOR_BITTER, - FLAVOR_SOUR, - FLAVOR_COUNT -}; - -enum -{ - BERRY_STAGE_NO_BERRY, // there is no tree planted and the soil is completely flat. - BERRY_STAGE_PLANTED, - BERRY_STAGE_SPROUTED, - BERRY_STAGE_TALLER, - BERRY_STAGE_FLOWERING, - BERRY_STAGE_BERRIES, - BERRY_STAGE_SPARKLING = 0xFF, -}; - void ClearEnigmaBerries(void); void SetEnigmaBerry(u8 *src); bool32 IsEnigmaBerryValid(void); diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h index 1224c0f31..d287dd2db 100644 --- a/include/constants/battle_frontier.h +++ b/include/constants/battle_frontier.h @@ -1,6 +1,8 @@ #ifndef GUARD_CONSTANTS_BATTLE_FRONTIER_H #define GUARD_CONSTANTS_BATTLE_FRONTIER_H +#define FRONTIER_CHALLENGE(facility, mode) ((facility << 8) + mode) + // Battle Frontier facility ids. #define FRONTIER_FACILITY_TOWER 0 #define FRONTIER_FACILITY_DOME 1 @@ -41,6 +43,36 @@ #define SPECIAL_BATTLE_PIKE_DOUBLE 9 #define SPECIAL_BATTLE_PYRAMID 10 +#define MAX_BATTLE_FRONTIER_POINTS 9999 + +// Frontier Maniac +#define FRONTIER_MANIAC_BATTLE_TOWER_SINGLES 0 +#define FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES 1 +#define FRONTIER_MANIAC_BATTLE_TOWER_MULTIS 2 +#define FRONTIER_MANIAC_BATTLE_TOWER_LINK_MULTIS 3 +#define FRONTIER_MANIAC_BATTLE_DOME 4 +#define FRONTIER_MANIAC_BATTLE_FACTORY 5 +#define FRONTIER_MANIAC_BATTLE_PALACE 6 +#define FRONTIER_MANIAC_BATTLE_ARENA 7 +#define FRONTIER_MANIAC_BATTLE_PIKE 8 +#define FRONTIER_MANIAC_BATTLE_PYRAMID 9 +#define FRONTIER_MANIAC_FACILITY_COUNT 10 + +#define FRONTIER_MANIAC_MESSAGE_COUNT 3 + +// Frontier Gambler +#define FRONTIER_GAMBLER_WAITING 0 +#define FRONTIER_GAMBLER_PLACED_BET 1 +#define FRONTIER_GAMBLER_WON 2 +#define FRONTIER_GAMBLER_LOST 3 + +#define FRONTIER_GAMBLER_BET_5 0 +#define FRONTIER_GAMBLER_BET_10 1 +#define FRONTIER_GAMBLER_BET_15 2 +#define FRONTIER_GAMBLER_BET_CANCEL 3 + +#define FRONTIER_GAMBLER_CHALLENGE_COUNT 12 + // For 'ShowFacilityResultsWindow' function which is a part of the 'CallFrontierUtilFunc' special. #define RESULTS_LINK_CONTEST 7 diff --git a/include/constants/berry.h b/include/constants/berry.h new file mode 100644 index 000000000..d413b9947 --- /dev/null +++ b/include/constants/berry.h @@ -0,0 +1,28 @@ +#ifndef GUARD_CONSTANTS_BERRY_H +#define GUARD_CONSTANTS_BERRY_H + +#define BERRY_NONE 0 + +#define BERRY_FIRMNESS_UNKNOWN 0 +#define BERRY_FIRMNESS_VERY_SOFT 1 +#define BERRY_FIRMNESS_SOFT 2 +#define BERRY_FIRMNESS_HARD 3 +#define BERRY_FIRMNESS_VERY_HARD 4 +#define BERRY_FIRMNESS_SUPER_HARD 5 + +#define FLAVOR_SPICY 0 +#define FLAVOR_DRY 1 +#define FLAVOR_SWEET 2 +#define FLAVOR_BITTER 3 +#define FLAVOR_SOUR 4 +#define FLAVOR_COUNT 5 + +#define BERRY_STAGE_NO_BERRY 0 // there is no tree planted and the soil is completely flat. +#define BERRY_STAGE_PLANTED 1 +#define BERRY_STAGE_SPROUTED 2 +#define BERRY_STAGE_TALLER 3 +#define BERRY_STAGE_FLOWERING 4 +#define BERRY_STAGE_BERRIES 5 +#define BERRY_STAGE_SPARKLING 255 + +#endif // GUARD_CONSTANTS_BERRY_H diff --git a/include/constants/contest.h b/include/constants/contest.h new file mode 100644 index 000000000..d3296222b --- /dev/null +++ b/include/constants/contest.h @@ -0,0 +1,19 @@ +#ifndef GUARD_CONSTANTS_CONTEST_H +#define GUARD_CONSTANTS_CONTEST_H + +#define CONTESTANT_COUNT 4 +#define APPLAUSE_METER_SIZE 5 +#define CONTEST_TURN_COUNT 5 + +#define LINK_CONTEST_FLAG_IS_LINK (1 << 0) +#define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1) +#define LINK_CONTEST_FLAG_HAS_RS_PLAYER (1 << 2) + +#define CONTEST_CATEGORY_COOL 0 +#define CONTEST_CATEGORY_BEAUTY 1 +#define CONTEST_CATEGORY_CUTE 2 +#define CONTEST_CATEGORY_SMART 3 +#define CONTEST_CATEGORY_TOUGH 4 +#define CONTEST_CATEGORIES_COUNT 5 + +#endif // GUARD_CONSTANTS_CONTEST_H diff --git a/include/constants/daycare.h b/include/constants/daycare.h new file mode 100644 index 000000000..103f920f2 --- /dev/null +++ b/include/constants/daycare.h @@ -0,0 +1,27 @@ +#ifndef GUARD_DAYCARE_CONSTANTS_H +#define GUARD_DAYCARE_CONSTANTS_H + +// Parent compatability scores +#define PARENTS_INCOMPATIBLE 0 +#define PARENTS_LOW_COMPATIBILITY 20 +#define PARENTS_MED_COMPATABILITY 50 +#define PARENTS_MAX_COMPATABILITY 70 + +// Daycare state +#define DAYCARE_NO_MONS 0 +#define DAYCARE_EGG_WAITING 1 +#define DAYCARE_ONE_MON 2 +#define DAYCARE_TWO_MONS 3 + +#define INHERITED_IV_COUNT 3 +#define EGG_HATCH_LEVEL 5 +#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 +#define DAYCARE_EXITED_LEVEL_MENU 2 // would be redundant with above if GF had used the same value + +// Array buffers +#define EGG_MOVES_ARRAY_COUNT 10 +#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50 + +#endif //GUARD_DAYCARE_CONSTANTS_H diff --git a/include/constants/field_specials.h b/include/constants/field_specials.h new file mode 100644 index 000000000..5ec38d1d4 --- /dev/null +++ b/include/constants/field_specials.h @@ -0,0 +1,52 @@ +#ifndef GUARD_CONSTANTS_FIELD_SPECIALS_H +#define GUARD_CONSTANTS_FIELD_SPECIALS_H + +// PC Locations +#define PC_LOCATION_OTHER 0 +#define PC_LOCATION_BRENDANS_HOUSE 1 +#define PC_LOCATION_MAYS_HOUSE 2 + +// SS Tidal Locations +#define SS_TIDAL_LOCATION_OTHER 0 +#define SS_TIDAL_LOCATION_SLATEPORT 1 +#define SS_TIDAL_LOCATION_LILYCOVE 2 +#define SS_TIDAL_LOCATION_ROUTE124 3 +#define SS_TIDAL_LOCATION_ROUTE131 4 + +// Scrollable Multichoice Menus +#define SCROLL_MULTI_NONE 0 +#define SCROLL_MULTI_GLASS_WORKSHOP_VENDOR 1 +#define SCROLL_MULTI_POKEMON_FAN_CLUB_RATER 2 +#define SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1 3 +#define SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2 4 +#define SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR 5 +#define SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR 6 +#define SCROLL_MULTI_BERRY_POWDER_VENDOR 7 +#define SCROLL_MULTI_BF_RECEPTIONIST 8 +#define SCROLL_MULTI_BF_MOVE_TUTOR_1 9 +#define SCROLL_MULTI_BF_MOVE_TUTOR_2 10 +#define SCROLL_MULTI_SS_TIDAL_DESTINATION 11 +#define SCROLL_MULTI_BATTLE_TENT_RULES 12 + +#define MAX_SCROLL_MULTI_ON_SCREEN 6 +#define MAX_SCROLL_MULTI_LENGTH 16 + +// Dept Store Floor Numbers +#define DEPT_STORE_FLOORNUM_B4F 0 +#define DEPT_STORE_FLOORNUM_B3F 1 +#define DEPT_STORE_FLOORNUM_B2F 2 +#define DEPT_STORE_FLOORNUM_B1F 3 +#define DEPT_STORE_FLOORNUM_1F 4 +#define DEPT_STORE_FLOORNUM_2F 5 +#define DEPT_STORE_FLOORNUM_3F 6 +#define DEPT_STORE_FLOORNUM_4F 7 +#define DEPT_STORE_FLOORNUM_5F 8 +#define DEPT_STORE_FLOORNUM_6F 9 +#define DEPT_STORE_FLOORNUM_7F 10 +#define DEPT_STORE_FLOORNUM_8F 11 +#define DEPT_STORE_FLOORNUM_9F 12 +#define DEPT_STORE_FLOORNUM_10F 13 +#define DEPT_STORE_FLOORNUM_11F 14 +#define DEPT_STORE_FLOORNUM_ROOFTOP 15 + +#endif // GUARD_CONSTANTS_FIELD_SPECIALS_H diff --git a/include/constants/flags.h b/include/constants/flags.h index 7aa5c3ed3..4679e953c 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -701,7 +701,7 @@ #define FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_BRENDAN 0x2E9 #define FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_BRENDAN 0x2EA #define FLAG_HIDE_SAFARI_ZONE_SOUTH_EAST_EXPANSION 0x2EB -#define FLAG_HIDE_LILYCOVE_HARBOR_EON_TICKET_TAKER 0x2EC +#define FLAG_HIDE_LILYCOVE_HARBOR_EVENT_TICKET_TAKER 0x2EC #define FLAG_HIDE_SLATEPORT_CITY_SCOTT 0x2ED #define FLAG_HIDE_ROUTE_101_ZIGZAGOON 0x2EE #define FLAG_HIDE_VICTORY_ROAD_EXIT_WALLY 0x2EF @@ -1400,7 +1400,7 @@ #define FLAG_ENABLE_SHIP_BIRTH_ISLAND (SYSTEM_FLAGS + 0x75) #define FLAG_ENABLE_SHIP_FARAWAY_ISLAND (SYSTEM_FLAGS + 0x76) -#define FLAG_SYS_STORAGE_UNKNOWN_FLAG (SYSTEM_FLAGS + 0x77) +#define FLAG_SHOWN_BOX_WAS_FULL_MESSAGE (SYSTEM_FLAGS + 0x77) #define FLAG_ARRIVED_ON_FARAWAY_ISLAND (SYSTEM_FLAGS + 0x78) #define FLAG_ARRIVED_AT_MARINE_CAVE_EMERGE_SPOT (SYSTEM_FLAGS + 0x79) diff --git a/include/constants/global.h b/include/constants/global.h index ff28d6a4b..7e0b5cfa4 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -50,6 +50,10 @@ #define PYRAMID_BAG_ITEMS_COUNT 10 #define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode. +#define TRAINER_ID_LENGTH 4 +#define PARTY_SIZE 6 +#define MAX_MON_MOVES 4 + // string lengths #define ITEM_NAME_LENGTH 14 #define POKEMON_NAME_LENGTH 10 @@ -59,6 +63,7 @@ #define MALE 0 #define FEMALE 1 +#define GENDER_COUNT 2 #define OPTIONS_BUTTON_MODE_NORMAL 0 #define OPTIONS_BUTTON_MODE_LR 1 @@ -74,4 +79,14 @@ #define OPTIONS_BATTLE_STYLE_SHIFT 0 #define OPTIONS_BATTLE_STYLE_SET 1 +#define DIR_NONE 0 +#define DIR_SOUTH 1 +#define DIR_NORTH 2 +#define DIR_WEST 3 +#define DIR_EAST 4 +#define DIR_SOUTHWEST 5 +#define DIR_SOUTHEAST 6 +#define DIR_NORTHWEST 7 +#define DIR_NORTHEAST 8 + #endif // GUARD_CONSTANTS_GLOBAL_H diff --git a/include/constants/item.h b/include/constants/item.h new file mode 100644 index 000000000..a5c34418d --- /dev/null +++ b/include/constants/item.h @@ -0,0 +1,20 @@ +#ifndef GUARD_ITEM_CONSTANTS_H +#define GUARD_ITEM_CONSTANTS_H + +// These constants are used in gItems +#define POCKET_NONE 0 +#define POCKET_ITEMS 1 +#define POCKET_POKE_BALLS 2 +#define POCKET_TM_HM 3 +#define POCKET_BERRIES 4 +#define POCKET_KEY_ITEMS 5 + +#define ITEMS_POCKET 0 +#define BALLS_POCKET 1 +#define TMHM_POCKET 2 +#define BERRIES_POCKET 3 +#define KEYITEMS_POCKET 4 +#define POCKETS_COUNT 5 + + +#endif // GUARD_ITEM_CONSTANTS_H diff --git a/include/constants/lilycove_lady.h b/include/constants/lilycove_lady.h new file mode 100644 index 000000000..01f60ccf4 --- /dev/null +++ b/include/constants/lilycove_lady.h @@ -0,0 +1,26 @@ +#ifndef GUARD_LILYCOVE_LADY_CONSTANTS_H +#define GUARD_LILYCOVE_LADY_CONSTANTS_H + +#define LILYCOVE_LADY_QUIZ 0 +#define LILYCOVE_LADY_FAVOR 1 +#define LILYCOVE_LADY_CONTEST 2 +#define LILYCOVE_LADY_COUNT 3 + +#define LILYCOVE_LADY_STATE_READY 0 +#define LILYCOVE_LADY_STATE_COMPLETED 1 +#define LILYCOVE_LADY_STATE_PRIZE 2 + +#define LILYCOVE_LADY_GIFT_THRESHOLD 5 + +#define QUIZ_AUTHOR_PLAYER 0 +#define QUIZ_AUTHOR_OTHER_PLAYER 1 +#define QUIZ_AUTHOR_LADY 2 + +// Would be redundant with the above set if GF hadn't mixed the order +#define QUIZ_AUTHOR_NAME_LADY 0 +#define QUIZ_AUTHOR_NAME_PLAYER 1 +#define QUIZ_AUTHOR_NAME_OTHER_PLAYER 2 + +#define QUIZ_QUESTION_LEN 9 + +#endif diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h index dc2ac2f32..6a3276b44 100755 --- a/include/constants/map_groups.h +++ b/include/constants/map_groups.h @@ -398,67 +398,67 @@ #define MAP_METEOR_FALLS_STEVENS_CAVE (107 | (24 << 8)) // Map Group 25 -#define MAP_SECRET_BASE_RED_CAVE1 (0 | (25 << 8)) -#define MAP_SECRET_BASE_BROWN_CAVE1 (1 | (25 << 8)) -#define MAP_SECRET_BASE_BLUE_CAVE1 (2 | (25 << 8)) -#define MAP_SECRET_BASE_YELLOW_CAVE1 (3 | (25 << 8)) -#define MAP_SECRET_BASE_TREE1 (4 | (25 << 8)) -#define MAP_SECRET_BASE_SHRUB1 (5 | (25 << 8)) -#define MAP_SECRET_BASE_RED_CAVE2 (6 | (25 << 8)) -#define MAP_SECRET_BASE_BROWN_CAVE2 (7 | (25 << 8)) -#define MAP_SECRET_BASE_BLUE_CAVE2 (8 | (25 << 8)) -#define MAP_SECRET_BASE_YELLOW_CAVE2 (9 | (25 << 8)) -#define MAP_SECRET_BASE_TREE2 (10 | (25 << 8)) -#define MAP_SECRET_BASE_SHRUB2 (11 | (25 << 8)) -#define MAP_SECRET_BASE_RED_CAVE3 (12 | (25 << 8)) -#define MAP_SECRET_BASE_BROWN_CAVE3 (13 | (25 << 8)) -#define MAP_SECRET_BASE_BLUE_CAVE3 (14 | (25 << 8)) -#define MAP_SECRET_BASE_YELLOW_CAVE3 (15 | (25 << 8)) -#define MAP_SECRET_BASE_TREE3 (16 | (25 << 8)) -#define MAP_SECRET_BASE_SHRUB3 (17 | (25 << 8)) -#define MAP_SECRET_BASE_RED_CAVE4 (18 | (25 << 8)) -#define MAP_SECRET_BASE_BROWN_CAVE4 (19 | (25 << 8)) -#define MAP_SECRET_BASE_BLUE_CAVE4 (20 | (25 << 8)) -#define MAP_SECRET_BASE_YELLOW_CAVE4 (21 | (25 << 8)) -#define MAP_SECRET_BASE_TREE4 (22 | (25 << 8)) -#define MAP_SECRET_BASE_SHRUB4 (23 | (25 << 8)) -#define MAP_SINGLE_BATTLE_COLOSSEUM (24 | (25 << 8)) -#define MAP_TRADE_CENTER (25 | (25 << 8)) -#define MAP_RECORD_CORNER (26 | (25 << 8)) -#define MAP_DOUBLE_BATTLE_COLOSSEUM (27 | (25 << 8)) -#define MAP_LINK_CONTEST_ROOM1 (28 | (25 << 8)) -#define MAP_UNKNOWN_MAP_25_29 (29 | (25 << 8)) -#define MAP_UNKNOWN_MAP_25_30 (30 | (25 << 8)) -#define MAP_UNKNOWN_MAP_25_31 (31 | (25 << 8)) -#define MAP_UNKNOWN_MAP_25_32 (32 | (25 << 8)) -#define MAP_UNKNOWN_MAP_25_33 (33 | (25 << 8)) -#define MAP_UNKNOWN_MAP_25_34 (34 | (25 << 8)) -#define MAP_LINK_CONTEST_ROOM2 (35 | (25 << 8)) -#define MAP_LINK_CONTEST_ROOM3 (36 | (25 << 8)) -#define MAP_LINK_CONTEST_ROOM4 (37 | (25 << 8)) -#define MAP_LINK_CONTEST_ROOM5 (38 | (25 << 8)) -#define MAP_LINK_CONTEST_ROOM6 (39 | (25 << 8)) -#define MAP_INSIDE_OF_TRUCK (40 | (25 << 8)) -#define MAP_SS_TIDAL_CORRIDOR (41 | (25 << 8)) -#define MAP_SS_TIDAL_LOWER_DECK (42 | (25 << 8)) -#define MAP_SS_TIDAL_ROOMS (43 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE01 (44 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE02 (45 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE03 (46 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE04 (47 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE05 (48 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE06 (49 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE07 (50 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE08 (51 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE09 (52 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE10 (53 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE11 (54 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE12 (55 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE13 (56 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE14 (57 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE15 (58 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE16 (59 | (25 << 8)) -#define MAP_UNION_ROOM (60 | (25 << 8)) +#define MAP_SECRET_BASE_RED_CAVE1 (0 | (25 << 8)) +#define MAP_SECRET_BASE_BROWN_CAVE1 (1 | (25 << 8)) +#define MAP_SECRET_BASE_BLUE_CAVE1 (2 | (25 << 8)) +#define MAP_SECRET_BASE_YELLOW_CAVE1 (3 | (25 << 8)) +#define MAP_SECRET_BASE_TREE1 (4 | (25 << 8)) +#define MAP_SECRET_BASE_SHRUB1 (5 | (25 << 8)) +#define MAP_SECRET_BASE_RED_CAVE2 (6 | (25 << 8)) +#define MAP_SECRET_BASE_BROWN_CAVE2 (7 | (25 << 8)) +#define MAP_SECRET_BASE_BLUE_CAVE2 (8 | (25 << 8)) +#define MAP_SECRET_BASE_YELLOW_CAVE2 (9 | (25 << 8)) +#define MAP_SECRET_BASE_TREE2 (10 | (25 << 8)) +#define MAP_SECRET_BASE_SHRUB2 (11 | (25 << 8)) +#define MAP_SECRET_BASE_RED_CAVE3 (12 | (25 << 8)) +#define MAP_SECRET_BASE_BROWN_CAVE3 (13 | (25 << 8)) +#define MAP_SECRET_BASE_BLUE_CAVE3 (14 | (25 << 8)) +#define MAP_SECRET_BASE_YELLOW_CAVE3 (15 | (25 << 8)) +#define MAP_SECRET_BASE_TREE3 (16 | (25 << 8)) +#define MAP_SECRET_BASE_SHRUB3 (17 | (25 << 8)) +#define MAP_SECRET_BASE_RED_CAVE4 (18 | (25 << 8)) +#define MAP_SECRET_BASE_BROWN_CAVE4 (19 | (25 << 8)) +#define MAP_SECRET_BASE_BLUE_CAVE4 (20 | (25 << 8)) +#define MAP_SECRET_BASE_YELLOW_CAVE4 (21 | (25 << 8)) +#define MAP_SECRET_BASE_TREE4 (22 | (25 << 8)) +#define MAP_SECRET_BASE_SHRUB4 (23 | (25 << 8)) +#define MAP_SINGLE_BATTLE_COLOSSEUM (24 | (25 << 8)) +#define MAP_TRADE_CENTER (25 | (25 << 8)) +#define MAP_RECORD_CORNER (26 | (25 << 8)) +#define MAP_DOUBLE_BATTLE_COLOSSEUM (27 | (25 << 8)) +#define MAP_LINK_CONTEST_ROOM1 (28 | (25 << 8)) +#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_29 (29 | (25 << 8)) +#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_30 (30 | (25 << 8)) +#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_31 (31 | (25 << 8)) +#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_32 (32 | (25 << 8)) +#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_33 (33 | (25 << 8)) +#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_34 (34 | (25 << 8)) +#define MAP_LINK_CONTEST_ROOM2 (35 | (25 << 8)) +#define MAP_LINK_CONTEST_ROOM3 (36 | (25 << 8)) +#define MAP_LINK_CONTEST_ROOM4 (37 | (25 << 8)) +#define MAP_LINK_CONTEST_ROOM5 (38 | (25 << 8)) +#define MAP_LINK_CONTEST_ROOM6 (39 | (25 << 8)) +#define MAP_INSIDE_OF_TRUCK (40 | (25 << 8)) +#define MAP_SS_TIDAL_CORRIDOR (41 | (25 << 8)) +#define MAP_SS_TIDAL_LOWER_DECK (42 | (25 << 8)) +#define MAP_SS_TIDAL_ROOMS (43 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE01 (44 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE02 (45 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE03 (46 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE04 (47 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE05 (48 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE06 (49 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE07 (50 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE08 (51 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE09 (52 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE10 (53 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE11 (54 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE12 (55 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE13 (56 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE14 (57 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE15 (58 | (25 << 8)) +#define MAP_BATTLE_PYRAMID_SQUARE16 (59 | (25 << 8)) +#define MAP_UNION_ROOM (60 | (25 << 8)) // Map Group 26 #define MAP_SAFARI_ZONE_NORTHWEST (0 | (26 << 8)) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 5d0e562bc..52a4f0254 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -2,81 +2,82 @@ #define GUARD_CONSTANTS_POKEMON_H // Pokemon types -#define TYPE_NONE 0xFF -#define TYPE_NORMAL 0x00 -#define TYPE_FIGHTING 0x01 -#define TYPE_FLYING 0x02 -#define TYPE_POISON 0x03 -#define TYPE_GROUND 0x04 -#define TYPE_ROCK 0x05 -#define TYPE_BUG 0x06 -#define TYPE_GHOST 0x07 -#define TYPE_STEEL 0x08 -#define TYPE_MYSTERY 0x09 -#define TYPE_FIRE 0x0a -#define TYPE_WATER 0x0b -#define TYPE_GRASS 0x0c -#define TYPE_ELECTRIC 0x0d -#define TYPE_PSYCHIC 0x0e -#define TYPE_ICE 0x0f -#define TYPE_DRAGON 0x10 -#define TYPE_DARK 0x11 -#define NUMBER_OF_MON_TYPES 0x12 - +#define TYPE_NONE 255 +#define TYPE_NORMAL 0 +#define TYPE_FIGHTING 1 +#define TYPE_FLYING 2 +#define TYPE_POISON 3 +#define TYPE_GROUND 4 +#define TYPE_ROCK 5 +#define TYPE_BUG 6 +#define TYPE_GHOST 7 +#define TYPE_STEEL 8 +#define TYPE_MYSTERY 9 +#define TYPE_FIRE 10 +#define TYPE_WATER 11 +#define TYPE_GRASS 12 +#define TYPE_ELECTRIC 13 +#define TYPE_PSYCHIC 14 +#define TYPE_ICE 15 +#define TYPE_DRAGON 16 +#define TYPE_DARK 17 +#define NUMBER_OF_MON_TYPES 18 // Pokemon egg groups -#define EGG_GROUP_NONE 0 -#define EGG_GROUP_MONSTER 1 -#define EGG_GROUP_WATER_1 2 -#define EGG_GROUP_BUG 3 -#define EGG_GROUP_FLYING 4 -#define EGG_GROUP_FIELD 5 -#define EGG_GROUP_FAIRY 6 -#define EGG_GROUP_GRASS 7 -#define EGG_GROUP_HUMAN_LIKE 8 -#define EGG_GROUP_WATER_3 9 -#define EGG_GROUP_MINERAL 10 -#define EGG_GROUP_AMORPHOUS 11 -#define EGG_GROUP_WATER_2 12 -#define EGG_GROUP_DITTO 13 -#define EGG_GROUP_DRAGON 14 -#define EGG_GROUP_UNDISCOVERED 15 +#define EGG_GROUP_NONE 0 +#define EGG_GROUP_MONSTER 1 +#define EGG_GROUP_WATER_1 2 +#define EGG_GROUP_BUG 3 +#define EGG_GROUP_FLYING 4 +#define EGG_GROUP_FIELD 5 +#define EGG_GROUP_FAIRY 6 +#define EGG_GROUP_GRASS 7 +#define EGG_GROUP_HUMAN_LIKE 8 +#define EGG_GROUP_WATER_3 9 +#define EGG_GROUP_MINERAL 10 +#define EGG_GROUP_AMORPHOUS 11 +#define EGG_GROUP_WATER_2 12 +#define EGG_GROUP_DITTO 13 +#define EGG_GROUP_DRAGON 14 +#define EGG_GROUP_UNDISCOVERED 15 + +#define EGG_GROUPS_PER_MON 2 // Pokemon natures -#define NATURE_HARDY 0 -#define NATURE_LONELY 1 -#define NATURE_BRAVE 2 -#define NATURE_ADAMANT 3 -#define NATURE_NAUGHTY 4 -#define NATURE_BOLD 5 -#define NATURE_DOCILE 6 -#define NATURE_RELAXED 7 -#define NATURE_IMPISH 8 -#define NATURE_LAX 9 -#define NATURE_TIMID 10 -#define NATURE_HASTY 11 -#define NATURE_SERIOUS 12 -#define NATURE_JOLLY 13 -#define NATURE_NAIVE 14 -#define NATURE_MODEST 15 -#define NATURE_MILD 16 -#define NATURE_QUIET 17 -#define NATURE_BASHFUL 18 -#define NATURE_RASH 19 -#define NATURE_CALM 20 -#define NATURE_GENTLE 21 -#define NATURE_SASSY 22 -#define NATURE_CAREFUL 23 -#define NATURE_QUIRKY 24 +#define NATURE_HARDY 0 +#define NATURE_LONELY 1 +#define NATURE_BRAVE 2 +#define NATURE_ADAMANT 3 +#define NATURE_NAUGHTY 4 +#define NATURE_BOLD 5 +#define NATURE_DOCILE 6 +#define NATURE_RELAXED 7 +#define NATURE_IMPISH 8 +#define NATURE_LAX 9 +#define NATURE_TIMID 10 +#define NATURE_HASTY 11 +#define NATURE_SERIOUS 12 +#define NATURE_JOLLY 13 +#define NATURE_NAIVE 14 +#define NATURE_MODEST 15 +#define NATURE_MILD 16 +#define NATURE_QUIET 17 +#define NATURE_BASHFUL 18 +#define NATURE_RASH 19 +#define NATURE_CALM 20 +#define NATURE_GENTLE 21 +#define NATURE_SASSY 22 +#define NATURE_CAREFUL 23 +#define NATURE_QUIRKY 24 // Pokemon Stats -#define STAT_HP 0 -#define STAT_ATK 1 -#define STAT_DEF 2 -#define STAT_SPEED 3 -#define STAT_SPATK 4 -#define STAT_SPDEF 5 -#define STAT_ACC 6 // Only in battles. +#define STAT_HP 0 +#define STAT_ATK 1 +#define STAT_DEF 2 +#define STAT_SPEED 3 +#define STAT_SPATK 4 +#define STAT_SPDEF 5 +#define STAT_ACC 6 // Only in battles. #define STAT_EVASION 7 // Only in battles. #define NUM_STATS 6 @@ -85,4 +86,187 @@ // Shiny odds #define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536 +// Flags for Get(Box)MonData / Set(Box)MonData +#define MON_DATA_PERSONALITY 0 +#define MON_DATA_OT_ID 1 +#define MON_DATA_NICKNAME 2 +#define MON_DATA_LANGUAGE 3 +#define MON_DATA_SANITY_IS_BAD_EGG 4 +#define MON_DATA_SANITY_HAS_SPECIES 5 +#define MON_DATA_SANITY_IS_EGG 6 +#define MON_DATA_OT_NAME 7 +#define MON_DATA_MARKINGS 8 +#define MON_DATA_CHECKSUM 9 +#define MON_DATA_ENCRYPT_SEPARATOR 10 +#define MON_DATA_SPECIES 11 +#define MON_DATA_HELD_ITEM 12 +#define MON_DATA_MOVE1 13 +#define MON_DATA_MOVE2 14 +#define MON_DATA_MOVE3 15 +#define MON_DATA_MOVE4 16 +#define MON_DATA_PP1 17 +#define MON_DATA_PP2 18 +#define MON_DATA_PP3 19 +#define MON_DATA_PP4 20 +#define MON_DATA_PP_BONUSES 21 +#define MON_DATA_COOL 22 +#define MON_DATA_BEAUTY 23 +#define MON_DATA_CUTE 24 +#define MON_DATA_EXP 25 +#define MON_DATA_HP_EV 26 +#define MON_DATA_ATK_EV 27 +#define MON_DATA_DEF_EV 28 +#define MON_DATA_SPEED_EV 29 +#define MON_DATA_SPATK_EV 30 +#define MON_DATA_SPDEF_EV 31 +#define MON_DATA_FRIENDSHIP 32 +#define MON_DATA_SMART 33 +#define MON_DATA_POKERUS 34 +#define MON_DATA_MET_LOCATION 35 +#define MON_DATA_MET_LEVEL 36 +#define MON_DATA_MET_GAME 37 +#define MON_DATA_POKEBALL 38 +#define MON_DATA_HP_IV 39 +#define MON_DATA_ATK_IV 40 +#define MON_DATA_DEF_IV 41 +#define MON_DATA_SPEED_IV 42 +#define MON_DATA_SPATK_IV 43 +#define MON_DATA_SPDEF_IV 44 +#define MON_DATA_IS_EGG 45 +#define MON_DATA_ABILITY_NUM 46 +#define MON_DATA_TOUGH 47 +#define MON_DATA_SHEEN 48 +#define MON_DATA_OT_GENDER 49 +#define MON_DATA_COOL_RIBBON 50 +#define MON_DATA_BEAUTY_RIBBON 51 +#define MON_DATA_CUTE_RIBBON 52 +#define MON_DATA_SMART_RIBBON 53 +#define MON_DATA_TOUGH_RIBBON 54 +#define MON_DATA_STATUS 55 +#define MON_DATA_LEVEL 56 +#define MON_DATA_HP 57 +#define MON_DATA_MAX_HP 58 +#define MON_DATA_ATK 59 +#define MON_DATA_DEF 60 +#define MON_DATA_SPEED 61 +#define MON_DATA_SPATK 62 +#define MON_DATA_SPDEF 63 +#define MON_DATA_MAIL 64 +#define MON_DATA_SPECIES2 65 +#define MON_DATA_IVS 66 +#define MON_DATA_CHAMPION_RIBBON 67 +#define MON_DATA_WINNING_RIBBON 68 +#define MON_DATA_VICTORY_RIBBON 69 +#define MON_DATA_ARTIST_RIBBON 70 +#define MON_DATA_EFFORT_RIBBON 71 +#define MON_DATA_GIFT_RIBBON_1 72 +#define MON_DATA_GIFT_RIBBON_2 73 +#define MON_DATA_GIFT_RIBBON_3 74 +#define MON_DATA_GIFT_RIBBON_4 75 +#define MON_DATA_GIFT_RIBBON_5 76 +#define MON_DATA_GIFT_RIBBON_6 77 +#define MON_DATA_GIFT_RIBBON_7 78 +#define MON_DATA_FATEFUL_ENCOUNTER 79 +#define MON_DATA_OBEDIENCE 80 +#define MON_DATA_KNOWN_MOVES 81 +#define MON_DATA_RIBBON_COUNT 82 +#define MON_DATA_RIBBONS 83 +#define MON_DATA_ATK2 84 +#define MON_DATA_DEF2 85 +#define MON_DATA_SPEED2 86 +#define MON_DATA_SPATK2 87 +#define MON_DATA_SPDEF2 88 + +#define MAX_LEVEL 100 + +#define OT_ID_PLAYER_ID 0 +#define OT_ID_PRESET 1 +#define OT_ID_RANDOM_NO_SHINY 2 + + +#define MON_GIVEN_TO_PARTY 0 +#define MON_GIVEN_TO_PC 1 +#define MON_CANT_GIVE 2 + +#define PLAYER_HAS_TWO_USABLE_MONS 0 +#define PLAYER_HAS_ONE_MON 1 +#define PLAYER_HAS_ONE_USABLE_MON 2 + +#define MON_MALE 0x00 +#define MON_FEMALE 0xFE +#define MON_GENDERLESS 0xFF + +#define FRIENDSHIP_EVENT_GROW_LEVEL 0 +#define FRIENDSHIP_EVENT_VITAMIN 1 // unused +#define FRIENDSHIP_EVENT_BATTLE_ITEM 2 // unused +#define FRIENDSHIP_EVENT_LEAGUE_BATTLE 3 +#define FRIENDSHIP_EVENT_LEARN_TMHM 4 +#define FRIENDSHIP_EVENT_WALKING 5 +#define FRIENDSHIP_EVENT_FAINT_SMALL 6 +#define FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE 7 +#define FRIENDSHIP_EVENT_FAINT_LARGE 8 + +#define STATUS_PRIMARY_NONE 0 +#define STATUS_PRIMARY_POISON 1 +#define STATUS_PRIMARY_PARALYSIS 2 +#define STATUS_PRIMARY_SLEEP 3 +#define STATUS_PRIMARY_FREEZE 4 +#define STATUS_PRIMARY_BURN 5 +#define STATUS_PRIMARY_POKERUS 6 +#define STATUS_PRIMARY_FAINTED 7 + +#define MAX_TOTAL_EVS 510 +#define EV_ITEM_RAISE_LIMIT 100 + +#define UNOWN_FORM_COUNT 28 + +// Battle move flags +#define FLAG_MAKES_CONTACT 0x1 +#define FLAG_PROTECT_AFFECTED 0x2 +#define FLAG_MAGICCOAT_AFFECTED 0x4 +#define FLAG_SNATCH_AFFECTED 0x8 +#define FLAG_MIRROR_MOVE_AFFECTED 0x10 +#define FLAG_KINGSROCK_AFFECTED 0x20 + +// Growth rates +#define GROWTH_MEDIUM_FAST 0 +#define GROWTH_ERRATIC 1 +#define GROWTH_FLUCTUATING 2 +#define GROWTH_MEDIUM_SLOW 3 +#define GROWTH_FAST 4 +#define GROWTH_SLOW 5 + +// Body colors for pokedex search +#define BODY_COLOR_RED 0 +#define BODY_COLOR_BLUE 1 +#define BODY_COLOR_YELLOW 2 +#define BODY_COLOR_GREEN 3 +#define BODY_COLOR_BLACK 4 +#define BODY_COLOR_BROWN 5 +#define BODY_COLOR_PURPLE 6 +#define BODY_COLOR_GRAY 7 +#define BODY_COLOR_WHITE 8 +#define BODY_COLOR_PINK 9 + +#define F_SUMMARY_SCREEN_FLIP_SPRITE 0x80 + +// Evolution type flags +#define EVO_FRIENDSHIP 0x0001 // Pokémon levels up with friendship ≥ 220 +#define EVO_FRIENDSHIP_DAY 0x0002 // Pokémon levels up during the day with friendship ≥ 220 +#define EVO_FRIENDSHIP_NIGHT 0x0003 // Pokémon levels up at night with friendship ≥ 220 +#define EVO_LEVEL 0x0004 // Pokémon reaches the specified level +#define EVO_TRADE 0x0005 // Pokémon is traded +#define EVO_TRADE_ITEM 0x0006 // Pokémon is traded while it's holding the specified item +#define EVO_ITEM 0x0007 // specified item is used on Pokémon +#define EVO_LEVEL_ATK_GT_DEF 0x0008 // Pokémon reaches the specified level with attack > defense +#define EVO_LEVEL_ATK_EQ_DEF 0x0009 // Pokémon reaches the specified level with attack = defense +#define EVO_LEVEL_ATK_LT_DEF 0x000a // Pokémon reaches the specified level with attack < defense +#define EVO_LEVEL_SILCOON 0x000b // Pokémon reaches the specified level with a Silcoon personality value +#define EVO_LEVEL_CASCOON 0x000c // Pokémon reaches the specified level with a Cascoon personality value +#define EVO_LEVEL_NINJASK 0x000d // Pokémon reaches the specified level (special value for Ninjask) +#define EVO_LEVEL_SHEDINJA 0x000e // Pokémon reaches the specified level (special value for Shedinja) +#define EVO_BEAUTY 0x000f // Pokémon levels up with beauty ≥ specified value + +#define EVOS_PER_MON 5 + #endif // GUARD_CONSTANTS_POKEMON_H diff --git a/include/constants/script_menu.h b/include/constants/script_menu.h new file mode 100644 index 000000000..b7ec908c1 --- /dev/null +++ b/include/constants/script_menu.h @@ -0,0 +1,168 @@ +#ifndef GUARD_SCRIPT_MENU_CONSTANTS_H +#define GUARD_SCRIPT_MENU_CONSTANTS_H + +#define MULTICHOICE(name) {name, ARRAY_COUNT(name)} + +#define MAX_MULTICHOICE_WIDTH 28 + +#define MULTI_B_PRESSED 127 + +// Multichoice Ids +#define MULTI_BRINEY_ON_DEWFORD 0 +#define MULTI_PC 1 // Exit only, populated by CreatePCMultichoice +#define MULTI_ENTERINFO 2 +#define MULTI_CONTEST_INFO 3 +#define MULTI_CONTEST_TYPE 4 +#define MULTI_DECOR_NOREGISTRY 5 +#define MULTI_DECOR_REGISTRY 6 +#define MULTI_REGISTER_MENU 7 +#define MULTI_SSTIDAL_LILYCOVE 8 // Exit only, populated by CreateLilycoveSSTidalMultichoice +#define MULTI_UNUSED_9 9 +#define MULTI_UNUSED_10 10 +#define MULTI_FRONTIER_PASS_INFO 11 +#define MULTI_BIKE 12 +#define MULTI_STATUS_INFO 13 +#define MULTI_BRINEY_OFF_DEWFORD 14 +#define MULTI_UNUSED_15 15 +#define MULTI_VIEWED_PAINTINGS 16 +#define MULTI_YESNOINFO 17 +#define MULTI_BATTLE_MODE 18 +#define MULTI_UNUSED_19 19 +#define MULTI_YESNOINFO_2 20 +#define MULTI_UNUSED_21 21 +#define MULTI_UNUSED_22 22 +#define MULTI_CHALLENGEINFO 23 +#define MULTI_LEVEL_MODE 24 +#define MULTI_MECHADOLL1_Q1 25 +#define MULTI_MECHADOLL1_Q2 26 +#define MULTI_MECHADOLL1_Q3 27 +#define MULTI_MECHADOLL2_Q1 28 +#define MULTI_MECHADOLL2_Q2 29 +#define MULTI_MECHADOLL2_Q3 30 +#define MULTI_MECHADOLL3_Q1 31 +#define MULTI_MECHADOLL3_Q2 32 +#define MULTI_MECHADOLL3_Q3 33 +#define MULTI_MECHADOLL4_Q1 34 +#define MULTI_MECHADOLL4_Q2 35 +#define MULTI_MECHADOLL4_Q3 36 +#define MULTI_MECHADOLL5_Q1 37 +#define MULTI_MECHADOLL5_Q2 38 +#define MULTI_MECHADOLL5_Q3 39 +#define MULTI_UNUSED_40 40 +#define MULTI_UNUSED_41 41 +#define MULTI_VENDING_MACHINE 42 +#define MULTI_MACH_BIKE_INFO 43 +#define MULTI_ACRO_BIKE_INFO 44 +#define MULTI_SATISFACTION 45 +#define MULTI_STERN_DEEPSEA 46 +#define MULTI_UNUSED_ASH_VENDOR 47 // Replaced by scrollable multichoice +#define MULTI_GAME_CORNER_DOLLS 48 +#define MULTI_GAME_CORNER_COINS 49 +#define MULTI_HOWS_FISHING 50 +#define MULTI_UNUSED_51 51 +#define MULTI_SSTIDAL_SLATEPORT_WITH_BF 52 +#define MULTI_SSTIDAL_BATTLE_FRONTIER 53 +#define MULTI_RIGHTLEFT 54 +#define MULTI_GAME_CORNER_TMS 55 +#define MULTI_SSTIDAL_SLATEPORT_NO_BF 56 +#define MULTI_FLOORS 57 +#define MULTI_SHARDS_R 58 +#define MULTI_SHARDS_Y 59 +#define MULTI_SHARDS_RY 60 +#define MULTI_SHARDS_B 61 +#define MULTI_SHARDS_RB 62 +#define MULTI_SHARDS_YB 63 +#define MULTI_SHARDS_RYB 64 +#define MULTI_SHARDS_G 65 +#define MULTI_SHARDS_RG 66 +#define MULTI_SHARDS_YG 67 +#define MULTI_SHARDS_RYG 68 +#define MULTI_SHARDS_BG 69 +#define MULTI_SHARDS_RBG 70 +#define MULTI_SHARDS_YBG 71 +#define MULTI_SHARDS_RYBG 72 +#define MULTI_TOURNEY_WITH_RECORD 73 +#define MULTI_CABLE_CLUB_NO_RECORD_MIX 74 +#define MULTI_WIRELESS_NO_RECORD_BERRY 75 +#define MULTI_CABLE_CLUB_WITH_RECORD_MIX 76 +#define MULTI_WIRELESS_NO_BERRY 77 +#define MULTI_WIRELESS_NO_RECORD 78 +#define MULTI_WIRELESS_ALL_SERVICES 79 +#define MULTI_WIRELESS_MINIGAME 80 +#define MULTI_LINK_LEADER 81 +#define MULTI_CONTEST_RANK 82 +#define MULTI_FRONTIER_ITEM_CHOOSE 83 +#define MULTI_LINK_CONTEST_INFO 84 +#define MULTI_LINK_CONTEST_MODE 85 +#define MULTI_FORCED_START_MENU 86 +#define MULTI_FRONTIER_GAMBLER_BET 87 +#define MULTI_TENT 88 +#define MULTI_UNUSED_SSTIDAL_1 89 // These 4 were replaced by CreateLilycoveSSTidalMultichoice +#define MULTI_UNUSED_SSTIDAL_2 90 // +#define MULTI_UNUSED_SSTIDAL_3 91 // +#define MULTI_UNUSED_SSTIDAL_4 92 // +#define MULTI_FOSSIL 93 +#define MULTI_YESNO 94 +#define MULTI_FRONTIER_RULES 95 +#define MULTI_BATTLE_ARENA_RULES 96 +#define MULTI_BATTLE_TOWER_RULES 97 +#define MULTI_BATTLE_DOME_RULES 98 +#define MULTI_BATTLE_FACTORY_RULES 99 +#define MULTI_BATTLE_PALACE_RULES 100 +#define MULTI_BATTLE_PYRAMID_RULES 101 +#define MULTI_BATTLE_PIKE_RULES 102 +#define MULTI_GO_ON_RECORD_REST_RETIRE 103 +#define MULTI_GO_ON_REST_RETIRE 104 +#define MULTI_GO_ON_RECORD_RETIRE 105 +#define MULTI_GO_ON_RETIRE 106 +#define MULTI_TOURNEY_NO_RECORD 107 +#define MULTI_TV_LATI 108 +#define MULTI_BATTLE_TOWER_FEELINGS 109 +#define MULTI_WHERES_RAYQUAZA 110 +#define MULTI_SLATEPORT_TENT_RULES 111 +#define MULTI_FALLARBOR_TENT_RULES 112 +#define MULTI_TAG_MATCH_TYPE 113 + +// Lilycove SS Tidal Multichoice Selections +#define SSTIDAL_SELECTION_SLATEPORT 0 +#define SSTIDAL_SELECTION_BATTLE_FRONTIER 1 +#define SSTIDAL_SELECTION_SOUTHERN_ISLAND 2 +#define SSTIDAL_SELECTION_NAVEL_ROCK 3 +#define SSTIDAL_SELECTION_BIRTH_ISLAND 4 +#define SSTIDAL_SELECTION_FARAWAY_ISLAND 5 +#define SSTIDAL_SELECTION_EXIT 6 +#define SSTIDAL_SELECTION_COUNT 7 + +// Std String Ids +#define STDSTRING_COOL 0 +#define STDSTRING_BEAUTY 1 +#define STDSTRING_CUTE 2 +#define STDSTRING_SMART 3 +#define STDSTRING_TOUGH 4 +#define STDSTRING_NORMAL 5 +#define STDSTRING_SUPER 6 +#define STDSTRING_HYPER 7 +#define STDSTRING_MASTER 8 +#define STDSTRING_COOL2 9 +#define STDSTRING_BEAUTY2 10 +#define STDSTRING_CUTE2 11 +#define STDSTRING_SMART2 12 +#define STDSTRING_TOUGH2 13 +#define STDSTRING_ITEMS 14 +#define STDSTRING_KEYITEMS 15 +#define STDSTRING_POKEBALLS 16 +#define STDSTRING_TMHMS 17 +#define STDSTRING_BERRIES 18 +#define STDSTRING_SINGLE 19 +#define STDSTRING_DOUBLE 20 +#define STDSTRING_MULTI 21 +#define STDSTRING_MULTI_LINK 22 +#define STDSTRING_BATTLE_TOWER 23 +#define STDSTRING_BATTLE_DOME 24 +#define STDSTRING_BATTLE_FACTORY 25 +#define STDSTRING_BATTLE_PALACE 26 +#define STDSTRING_BATTLE_ARENA 27 +#define STDSTRING_BATTLE_PIKE 28 +#define STDSTRING_BATTLE_PYRAMID 29 + +#endif //GUARD_SCRIPT_MENU_CONSTANTS_H diff --git a/include/constants/vars.h b/include/constants/vars.h index 6b213c8cc..72b15654e 100644 --- a/include/constants/vars.h +++ b/include/constants/vars.h @@ -61,14 +61,14 @@ #define VAR_0x402E 0x402E #define VAR_FRONTIER_MANIAC_FACILITY 0x402F -#define VAR_FRONTIER_GAMBLER_FACILITY 0x4030 -#define VAR_FRONTIER_GAMBLER_SET_FACILITY_F 0x4031 +#define VAR_FRONTIER_GAMBLER_CHALLENGE 0x4030 +#define VAR_FRONTIER_GAMBLER_SET_CHALLENGE 0x4031 #define VAR_FRONTIER_GAMBLER_AMOUNT_BET 0x4032 -#define VAR_FRONTIER_GAMBLER_PLACED_BET_F 0x4033 +#define VAR_FRONTIER_GAMBLER_STATE 0x4033 #define VAR_DEOXYS_ROCK_STEP_COUNT 0x4034 #define VAR_DEOXYS_ROCK_LEVEL 0x4035 -#define VAR_STORAGE_UNKNOWN 0x4036 +#define VAR_PC_BOX_TO_SEND_MON 0x4036 #define VAR_UNUSUAL_WEATHER_LOCATION 0x4037 #define VAR_UNUSUAL_WEATHER_STEP_COUNTER 0x4038 #define VAR_SHOULD_END_UNUSUAL_WEATHER 0x4039 diff --git a/include/contest.h b/include/contest.h index a4e209bcb..2b1b95af5 100644 --- a/include/contest.h +++ b/include/contest.h @@ -2,10 +2,7 @@ #define GUARD_CONTEST_H #include "palette.h" - -#define CONTESTANT_COUNT 4 -#define APPLAUSE_METER_SIZE 5 -#define CONTEST_TURN_COUNT 5 +#include "constants/contest.h" enum { @@ -18,20 +15,6 @@ enum CONTEST_DEBUG_MODE_PRINT_UNK_D }; -#define LINK_CONTEST_FLAG_IS_LINK (1 << 0) -#define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1) -#define LINK_CONTEST_FLAG_HAS_RS_PLAYER (1 << 2) - -enum -{ - CONTEST_CATEGORY_COOL, - CONTEST_CATEGORY_BEAUTY, - CONTEST_CATEGORY_CUTE, - CONTEST_CATEGORY_SMART, - CONTEST_CATEGORY_TOUGH, - CONTEST_CATEGORIES_COUNT, -}; - enum { CONTEST_EFFECT_HIGHLY_APPEALING, @@ -244,7 +227,7 @@ struct ContestPokemon u8 aiPool_Cute:1; // 0x10 u8 aiPool_Smart:1; // 0x20 u8 aiPool_Tough:1; // 0x40 - /*0x1E*/ u16 moves[4]; // moves + /*0x1E*/ u16 moves[MAX_MON_MOVES]; // moves /*0x26*/ u8 cool; // cool /*0x27*/ u8 beauty; // beauty /*0x28*/ u8 cute; // cute diff --git a/include/credits.h b/include/credits.h index e7e58415b..f7dfa9997 100644 --- a/include/credits.h +++ b/include/credits.h @@ -7,6 +7,6 @@ extern EWRAM_DATA bool8 gHasHallOfFameRecords; // Exported ROM declarations -void sub_8175620(void); +void CB2_StartCreditsSequence(void); #endif // GUARD_CREDITS_H diff --git a/include/data.h b/include/data.h index f1a4caa6a..49b98663a 100644 --- a/include/data.h +++ b/include/data.h @@ -34,7 +34,7 @@ struct TrainerMonNoItemCustomMoves u16 iv; u8 lvl; u16 species; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; }; struct TrainerMonItemCustomMoves @@ -43,7 +43,7 @@ struct TrainerMonItemCustomMoves u8 lvl; u16 species; u16 heldItem; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; }; union TrainerMonPtr diff --git a/include/daycare.h b/include/daycare.h index ecd875865..7d6f2fb19 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -1,10 +1,10 @@ #ifndef GUARD_DAYCARE_H #define GUARD_DAYCARE_H -#define EGG_HATCH_LEVEL 5 +#include "constants/daycare.h" -u8 *GetMonNick(struct Pokemon *mon, u8 *dest); -u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest); +u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest); +u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest); u8 CountPokemonInDaycare(struct DayCare *daycare); void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDayCareMail *daycareMail); void StoreSelectedPokemonInDaycare(void); @@ -16,7 +16,7 @@ void RejectEggFromDayCare(void); void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation); void GiveEggFromDaycare(void); bool8 ShouldEggHatch(void); -u16 GetSelectedMonNickAndSpecies(void); +u16 GetSelectedMonNicknameAndSpecies(void); void GetDaycareMonNicknames(void); u8 GetDaycareState(void); void SetDaycareCompatibilityString(void); diff --git a/include/egg_hatch.h b/include/egg_hatch.h index 862d33947..64d07c813 100644 --- a/include/egg_hatch.h +++ b/include/egg_hatch.h @@ -2,9 +2,9 @@ #define GUARD_EGG_HATCH_H void ScriptHatchMon(void); -bool8 sub_8071614(void); +bool8 CheckDaycareMonReceivedMail(void); void EggHatch(void); u8 GetEggStepsToSubtract(void); -u16 sub_80722E0(void); +u16 CountPartyAliveNonEggMons(void); #endif // GUARD_EGG_HATCH_H diff --git a/include/ereader_helpers.h b/include/ereader_helpers.h index bcbb68d4f..8dc3b907a 100755 --- a/include/ereader_helpers.h +++ b/include/ereader_helpers.h @@ -1,51 +1,34 @@ #ifndef GUARD_EREADER_HELPERS_H #define GUARD_EREADER_HELPERS_H -struct Unk81D38FC +#include "trainer_hill.h" + +struct EReaderTrainerHillTrainer { u8 unk0; - u8 filler_1[3]; - u8 unk4[0x148]; - u8 unk14C[0x124]; - int checksum; -}; + struct TrainerHillTrainer unk4; + struct TrHillDisplay unk14C; + u32 checksum; +}; // size=0x274 struct EReaderTrainerHillSet { - u8 unk_0; - u8 unk_1; - u8 unk_2; - u8 unk_3; - int checksum; - struct Unk81D38FC unk_8[6]; + u8 count; + u8 id; + u16 dummy; + u32 checksum; + struct EReaderTrainerHillTrainer unk_8[6]; u8 unk_ec0[40]; -}; - -struct Unk81D3998Sub -{ - u8 unk_000[4]; - u8 unk_004[0x148]; - u8 unk_14C[0x148]; - u8 unk_294[0x124]; -}; - -struct Unk81D3998 -{ - u8 unk_000; - u8 unk_001; - u8 unk_002; - int checksum; - struct Unk81D3998Sub unk_008[4]; -}; +}; // size = 0xf00 bool8 EReader_IsReceivedDataValid(struct EReaderTrainerHillSet *buffer); bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet *arg0); bool32 ReadTrainerHillAndValidate(void); -int sub_81D3D70(u8, u32, u32*, u32*); +int EReaderHandleTransfer(u8, u32, u32*, u32*); void sub_81D3F9C(void); void sub_81D3FAC(void); -void sub_81D41A0(void); -void sub_81D41F4(void); +void EReaderHelper_SaveRegsState(void); +void EReaderHelper_RestoreRegsState(void); void sub_81D4238(void); #endif // GUARD_EREADER_HELPERS_H diff --git a/include/field_specials.h b/include/field_specials.h index b1a50c811..952081e93 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -5,8 +5,8 @@ extern bool8 gBikeCyclingChallenge; extern u8 gBikeCollisions; u8 GetLeadMonIndex(void); -u8 sub_813B260(void); -u16 get_unknown_box_id(void); +u8 IsDestinationBoxFull(void); +u16 GetPCBoxToSendMon(void); bool8 InMultiBattleRoom(void); void sub_813BF10(void); void IncrementBirthIslandRockStepCount(void); @@ -19,17 +19,17 @@ bool32 ShouldDoRoxanneCall(void); bool32 ShouldDoRivalRayquazaCall(void); bool32 CountSSTidalStep(u16 delta); u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y); -void sub_813A128(void); -void sub_813A878(u8 a0); +void ShowScrollableMultichoice(void); +void FrontierGamblerSetWonOrLost(bool8 won); u8 sub_813BADC(u8 a0); -bool8 sub_813B9C0(void); -void SetShoalItemFlag(u16 v0); -void UpdateFrontierManiac(u16 a0); -void UpdateFrontierGambler(u16 a0); +bool8 InPokemonCenter(void); +void SetShoalItemFlag(u16 unused); +void UpdateFrontierManiac(u16 daysSince); +void UpdateFrontierGambler(u16 daysSince); void ResetCyclingRoadChallengeData(void); -bool8 warp0_in_pokecenter(void); +bool8 UsedPokemonCenterWarp(void); void ResetFanClub(void); -bool8 sub_813B21C(void); -void set_unknown_box_id(u8 id); +bool8 ShouldShowBoxWasFullMessage(void); +void SetPCBoxToSendMon(u8 boxId); #endif // GUARD_FIELD_SPECIALS_H diff --git a/include/gba/types.h b/include/gba/types.h index 9f2594703..7163f925f 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -68,6 +68,10 @@ struct OamData /*0x06*/ u16 affineParam; }; +#define ST_OAM_HFLIP 0x08 +#define ST_OAM_VFLIP 0x10 +#define ST_OAM_MNUM_FLIP_MASK 0x18 + #define ST_OAM_OBJ_NORMAL 0 #define ST_OAM_OBJ_BLEND 1 #define ST_OAM_OBJ_WINDOW 2 diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index b5a86e311..a17180589 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -267,19 +267,6 @@ enum enum { - DIR_NONE, - DIR_SOUTH, - DIR_NORTH, - DIR_WEST, - DIR_EAST, - DIR_SOUTHWEST, - DIR_SOUTHEAST, - DIR_NORTHWEST, - DIR_NORTHEAST, -}; - -enum -{ COLLISION_LEDGE_JUMP = 6 }; diff --git a/include/global.h b/include/global.h index 14377d8bb..44a4d0164 100644 --- a/include/global.h +++ b/include/global.h @@ -63,8 +63,6 @@ // Converts a Q24.8 fixed-point format number to a regular integer #define Q_24_8_TO_INT(n) ((int)((n) >> 8)) -#define PARTY_SIZE 6 - #define POKEMON_SLOTS_NUMBER 412 #define min(a, b) ((a) < (b) ? (a) : (b)) @@ -212,7 +210,7 @@ struct BerryCrush struct ApprenticeMon { u16 species; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; u16 item; }; @@ -224,7 +222,7 @@ struct Apprentice u8 number; struct ApprenticeMon party[3]; u16 easyChatWords[6]; - u8 playerId[4]; + u8 playerId[TRAINER_ID_LENGTH]; u8 playerName[PLAYER_NAME_LENGTH]; u8 language; u32 checksum; @@ -234,7 +232,7 @@ struct BattleTowerPokemon { u16 species; u16 heldItem; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; u8 level; u8 ppBonuses; u8 hpEV; @@ -257,13 +255,15 @@ struct BattleTowerPokemon u8 friendship; }; +#define NULL_BATTLE_TOWER_POKEMON { .nickname = __("$$$$$$$$$$$") } + struct EmeraldBattleTowerRecord { /*0x00*/ u8 lvlMode; // 0 = level 50, 1 = level 100 /*0x01*/ u8 facilityClass; /*0x02*/ u16 winStreak; /*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1]; - /*0x0C*/ u8 trainerId[4]; + /*0x0C*/ u8 trainerId[TRAINER_ID_LENGTH]; /*0x10*/ u16 greeting[6]; /*0x1C*/ u16 speechWon[6]; /*0x28*/ u16 speechLost[6]; @@ -278,7 +278,7 @@ struct BattleTowerEReaderTrainer /*0x01*/ u8 facilityClass; /*0x02*/ u16 winStreak; /*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1]; - /*0x0C*/ u8 trainerId[4]; + /*0x0C*/ u8 trainerId[TRAINER_ID_LENGTH]; /*0x10*/ u16 greeting[6]; /*0x1C*/ u16 farewellPlayerLost[6]; /*0x28*/ u16 farewellPlayerWon[6]; @@ -288,7 +288,7 @@ struct BattleTowerEReaderTrainer struct FrontierMonData { - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; u8 evs[6]; u8 nature; }; @@ -425,7 +425,7 @@ struct PlayersApprentice struct RankingHall1P { - u8 id[4]; + u8 id[TRAINER_ID_LENGTH]; u16 winStreak; u8 name[PLAYER_NAME_LENGTH + 1]; u8 language; @@ -433,8 +433,8 @@ struct RankingHall1P struct RankingHall2P { - u8 id1[4]; - u8 id2[4]; + u8 id1[TRAINER_ID_LENGTH]; + u8 id2[TRAINER_ID_LENGTH]; u16 winStreak; u8 name1[PLAYER_NAME_LENGTH + 1]; u8 name2[PLAYER_NAME_LENGTH + 1]; @@ -446,7 +446,7 @@ struct SaveBlock2 /*0x00*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x08*/ u8 playerGender; // MALE, FEMALE /*0x09*/ u8 specialSaveWarpFlags; - /*0x0A*/ u8 playerTrainerId[4]; + /*0x0A*/ u8 playerTrainerId[TRAINER_ID_LENGTH]; /*0x0E*/ u16 playTimeHours; /*0x10*/ u8 playTimeMinutes; /*0x11*/ u8 playTimeSeconds; @@ -495,7 +495,7 @@ struct SecretBase /*0x1A9D*/ u8 battledOwnerToday:1; /*0x1A9D*/ u8 registryStatus:2; /*0x1A9E*/ u8 trainerName[PLAYER_NAME_LENGTH]; - /*0x1AA5*/ u8 trainerId[4]; // byte 0 is used for determining trainer class + /*0x1AA5*/ u8 trainerId[TRAINER_ID_LENGTH]; // byte 0 is used for determining trainer class /*0x1AA9*/ u8 language; /*0x1AAA*/ u16 numSecretBasesReceived; /*0x1AAC*/ u8 numTimesEntered; @@ -581,7 +581,7 @@ struct MailStruct { /*0x00*/ u16 words[MAIL_WORDS_COUNT]; /*0x12*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; - /*0x1A*/ u8 trainerId[4]; + /*0x1A*/ u8 trainerId[TRAINER_ID_LENGTH]; /*0x1E*/ u16 species; /*0x20*/ u16 itemId; }; @@ -598,7 +598,7 @@ struct MauvilleManBard /*0x0E*/ u16 temporaryLyrics[6]; /*0x1A*/ u8 playerName[8]; /*0x22*/ u8 filler_2DB6[0x3]; - /*0x25*/ u8 playerTrainerId[4]; + /*0x25*/ u8 playerTrainerId[TRAINER_ID_LENGTH]; /*0x29*/ bool8 hasChangedSong; /*0x2A*/ u8 language; }; /*size = 0x2C*/ @@ -737,50 +737,43 @@ struct RecordMixingDayCareMail bool16 holdsItem[DAYCARE_MON_COUNT]; }; -enum -{ - LILYCOVE_LADY_QUIZ, - LILYCOVE_LADY_FAVOUR, - LILYCOVE_LADY_CONTEST -}; - struct LilycoveLadyQuiz { /*0x000*/ u8 id; - /*0x001*/ u8 phase; - /*0x002*/ u16 unk_002[9]; - /*0x014*/ u16 unk_014; - /*0x016*/ u16 unk_016; + /*0x001*/ u8 state; + /*0x002*/ u16 question[9]; + /*0x014*/ u16 correctAnswer; + /*0x016*/ u16 playerAnswer; /*0x018*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; - /*0x020*/ u16 playerTrainerId[4]; - /*0x028*/ u16 itemId; - /*0x02a*/ u8 unk_02a; - /*0x02b*/ u8 unk_02b; - /*0x02c*/ u8 unk_02c; + /*0x020*/ u16 playerTrainerId[TRAINER_ID_LENGTH]; + /*0x028*/ u16 prize; + /*0x02a*/ bool8 waitingForChallenger; + /*0x02b*/ u8 questionId; + /*0x02c*/ u8 prevQuestionId; /*0x02d*/ u8 language; }; -struct LilycoveLadyFavour +struct LilycoveLadyFavor { /*0x000*/ u8 id; - /*0x001*/ u8 phase; - /*0x002*/ u8 unk_002; - /*0x003*/ u8 unk_003; + /*0x001*/ u8 state; + /*0x002*/ bool8 likedItem; + /*0x003*/ u8 numItemsGiven; /*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; - /*0x00c*/ u8 unk_00c; + /*0x00c*/ u8 favorId; /*0x00e*/ u16 itemId; - /*0x010*/ u16 unk_010; + /*0x010*/ u16 bestItem; /*0x012*/ u8 language; }; struct LilycoveLadyContest { /*0x000*/ u8 id; - /*0x001*/ u8 phase; - /*0x002*/ u8 fave_pkblk; - /*0x003*/ u8 other_pkblk; + /*0x001*/ bool8 givenPokeblock; + /*0x002*/ u8 numGoodPokeblocksGiven; + /*0x003*/ u8 numOtherPokeblocksGiven; /*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; - /*0x00c*/ u8 max_sheen; + /*0x00c*/ u8 maxSheen; /*0x00d*/ u8 category; /*0x00e*/ u8 language; }; @@ -788,7 +781,7 @@ struct LilycoveLadyContest typedef union // 3b58 { struct LilycoveLadyQuiz quiz; - struct LilycoveLadyFavour favour; + struct LilycoveLadyFavor favor; struct LilycoveLadyContest contest; u8 id; u8 pad[0x40]; @@ -951,7 +944,7 @@ struct SaveBlock1 /*0x2B94*/ u8 outbreakPokemonLevel; /*0x2B95*/ u8 outbreakUnk1; /*0x2B96*/ u16 outbreakUnk2; - /*0x2B98*/ u16 outbreakPokemonMoves[4]; + /*0x2B98*/ u16 outbreakPokemonMoves[MAX_MON_MOVES]; /*0x2BA0*/ u8 outbreakUnk4; /*0x2BA1*/ u8 outbreakPokemonProbability; /*0x2BA2*/ u16 outbreakDaysLeft; diff --git a/include/global.tv.h b/include/global.tv.h index aa151a75c..1cef057ae 100644 --- a/include/global.tv.h +++ b/include/global.tv.h @@ -4,8 +4,7 @@ enum { TVSHOW_OFF_AIR, - - TVSHOW_FAN_CLUB_LETTER = 1, + TVSHOW_FAN_CLUB_LETTER, TVSHOW_RECENT_HAPPENINGS, TVSHOW_PKMN_FAN_CLUB_OPINIONS, TVSHOW_UNKN_SHOWTYPE_04, @@ -482,7 +481,7 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u8 var02; /*0x03*/ u8 var03; - /*0x04*/ u16 moves[4]; + /*0x04*/ u16 moves[MAX_MON_MOVES]; /*0x0C*/ u16 species; /*0x0E*/ u16 var0E; /*0x10*/ u8 locationMapNum; diff --git a/include/graphics.h b/include/graphics.h index d1d99cc8f..5f5c579d2 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3093,90 +3093,93 @@ extern const u32 gPokeblock_Gfx[]; extern const u32 gItemIcon_QuestionMark[]; extern const u32 gItemIconPalette_QuestionMark[]; -extern const u32 gUnknown_08DB7AA0[]; -extern const u32 gUnknown_08DB7B34[]; -extern const u32 gUnknown_08DB7B5C[]; -extern const u32 gUnknown_08DB7BEC[]; -extern const u32 gUnknown_08DB7C08[]; -extern const u32 gUnknown_08DB7CE8[]; -extern const u32 gUnknown_08DB7D08[]; -extern const u32 gUnknown_08DB7DCC[]; -extern const u32 gUnknown_08DB7DF4[]; -extern const u32 gUnknown_08DB7EA0[]; -extern const u32 gUnknown_08DB7EC4[]; -extern const u32 gUnknown_08DB7F60[]; -extern const u32 gUnknown_08DB7F7C[]; -extern const u32 gUnknown_08DB8070[]; -extern const u32 gUnknown_08DB808C[]; -extern const u32 gUnknown_08DB8138[]; -extern const u32 gUnknown_08DB8160[]; -extern const u32 gUnknown_08DB8218[]; -extern const u32 gUnknown_08DB823C[]; -extern const u32 gUnknown_08DB8300[]; -extern const u32 gUnknown_08DB8328[]; -extern const u32 gUnknown_08DB8430[]; -extern const u32 gUnknown_08DB8458[]; -extern const u32 gUnknown_08DB8528[]; -extern const u32 gUnknown_08DB854C[]; -extern const u32 gUnknown_08DB862C[]; -extern const u32 gUnknown_08DB8654[]; -extern const u32 gUnknown_08DB86C4[]; -extern const u32 gUnknown_08DB86E0[]; -extern const u32 gUnknown_08DB8750[]; -extern const u32 gUnknown_08DB876C[]; -extern const u32 gUnknown_08DB87DC[]; -extern const u32 gUnknown_08DB87F8[]; -extern const u32 gUnknown_08DB88D8[]; -extern const u32 gUnknown_08DB8900[]; -extern const u32 gUnknown_08DB89E0[]; -extern const u32 gUnknown_08DB8A08[]; -extern const u32 gUnknown_08DB8A68[]; -extern const u32 gUnknown_08DB8A84[]; -extern const u32 gUnknown_08DB8B40[]; -extern const u32 gUnknown_08DB8B68[]; -extern const u32 gUnknown_08DB8C40[]; -extern const u32 gUnknown_08DB8C5C[]; -extern const u32 gUnknown_08DB8CF4[]; -extern const u32 gUnknown_08DB8D18[]; -extern const u32 gUnknown_08DB8DB0[]; -extern const u32 gUnknown_08DB8DD4[]; -extern const u32 gUnknown_08DB8E80[]; -extern const u32 gUnknown_08DB8EA0[]; -extern const u32 gUnknown_08DB8F58[]; -extern const u32 gUnknown_08DB8F7C[]; -extern const u32 gUnknown_08DB9038[]; -extern const u32 gUnknown_08DB9058[]; -extern const u32 gUnknown_08DB9130[]; -extern const u32 gUnknown_08DB9154[]; -extern const u32 gUnknown_08DB9218[]; -extern const u32 gUnknown_08DB9234[]; -extern const u32 gUnknown_08DB92FC[]; -extern const u32 gUnknown_08DB931C[]; -extern const u32 gUnknown_08DB93E8[]; -extern const u32 gUnknown_08DB940C[]; -extern const u32 gUnknown_08DB94CC[]; -extern const u32 gUnknown_08DB94E8[]; -extern const u32 gUnknown_08DB95AC[]; -extern const u32 gUnknown_08DB95D0[]; -extern const u32 gUnknown_08DB96C4[]; -extern const u32 gUnknown_08DB96EC[]; -extern const u32 gUnknown_08DB97F4[]; -extern const u32 gUnknown_08DB981C[]; -extern const u32 gUnknown_08DB9908[]; -extern const u32 gUnknown_08DB9930[]; -extern const u32 gUnknown_08DB9A54[]; -extern const u32 gUnknown_08DB9A7C[]; -extern const u32 gUnknown_08DB9B7C[]; -extern const u32 gUnknown_08DB9BA4[]; -extern const u32 gUnknown_08DB9CB0[]; -extern const u32 gUnknown_08DB9CD8[]; -extern const u32 gUnknown_08DB9DAC[]; -extern const u32 gUnknown_08DB9DD4[]; -extern const u32 gUnknown_08DB9EE4[]; -extern const u32 gUnknown_08DB9F08[]; -extern const u32 gUnknown_08DB9FFC[]; -extern const u32 gUnknown_08DBA020[]; -extern const u32 gUnknown_08DBA12C[]; + +// Decorations +extern const u32 gDecorIcon_HeavyDesk[]; +extern const u32 gDecorIconPalette_HeavyDesk[]; +extern const u32 gDecorIcon_RaggedDesk[]; +extern const u32 gDecorIconPalette_RaggedDesk[]; +extern const u32 gDecorIcon_ComfortDesk[]; +extern const u32 gDecorIconPalette_ComfortDesk[]; +extern const u32 gDecorIcon_PrettyDesk[]; +extern const u32 gDecorIconPalette_PrettyDesk[]; +extern const u32 gDecorIcon_BrickDesk[]; +extern const u32 gDecorIconPalette_BrickDesk[]; +extern const u32 gDecorIcon_CampDesk[]; +extern const u32 gDecorIconPalette_CampDesk[]; +extern const u32 gDecorIcon_HardDesk[]; +extern const u32 gDecorIconPalette_HardDesk[]; +extern const u32 gDecorIcon_RedPlant[]; +extern const u32 gDecorIconPalette_RedPlant[]; +extern const u32 gDecorIcon_TropicalPlant[]; +extern const u32 gDecorIconPalette_TropicalPlant[]; +extern const u32 gDecorIcon_PrettyFlowers[]; +extern const u32 gDecorIconPalette_PrettyFlowers[]; +extern const u32 gDecorIcon_ColorfulPlant[]; +extern const u32 gDecorIconPalette_ColorfulPlant[]; +extern const u32 gDecorIcon_BigPlant[]; +extern const u32 gDecorIconPalette_BigPlant[]; +extern const u32 gDecorIcon_GorgeousPlant[]; +extern const u32 gDecorIconPalette_GorgeousPlant[]; +extern const u32 gDecorIcon_RedBrick[]; +extern const u32 gDecorIconPalette_RedBrick[]; +extern const u32 gDecorIcon_YellowBrick[]; +extern const u32 gDecorIconPalette_YellowBrick[]; +extern const u32 gDecorIcon_BlueBrick[]; +extern const u32 gDecorIconPalette_BlueBrick[]; +extern const u32 gDecorIcon_RedTent[]; +extern const u32 gDecorIconPalette_RedTent[]; +extern const u32 gDecorIcon_BlueTent[]; +extern const u32 gDecorIconPalette_BlueTent[]; +extern const u32 gDecorIcon_SolidBoard[]; +extern const u32 gDecorIconPalette_SolidBoard[]; +extern const u32 gDecorIcon_Slide[]; +extern const u32 gDecorIconPalette_Slide[]; +extern const u32 gDecorIcon_Tire[]; +extern const u32 gDecorIconPalette_Tire[]; +extern const u32 gDecorIcon_Stand[]; +extern const u32 gDecorIconPalette_Stand[]; +extern const u32 gDecorIcon_BreakableDoor[]; +extern const u32 gDecorIconPalette_BreakableDoor[]; +extern const u32 gDecorIcon_SandOrnament[]; +extern const u32 gDecorIconPalette_SandOrnament[]; +extern const u32 gDecorIcon_GlassOrnament[]; +extern const u32 gDecorIconPalette_GlassOrnament[]; +extern const u32 gDecorIcon_SurfMat[]; +extern const u32 gDecorIconPalette_SurfMat[]; +extern const u32 gDecorIcon_ThunderMat[]; +extern const u32 gDecorIconPalette_ThunderMat[]; +extern const u32 gDecorIcon_FireBlastMat[]; +extern const u32 gDecorIconPalette_FireBlastMat[]; +extern const u32 gDecorIcon_PowderSnowMat[]; +extern const u32 gDecorIconPalette_PowderSnowMat[]; +extern const u32 gDecorIcon_AttractMat[]; +extern const u32 gDecorIconPalette_AttractMat[]; +extern const u32 gDecorIcon_FissureMat[]; +extern const u32 gDecorIconPalette_FissureMat[]; +extern const u32 gDecorIcon_SpikesMat[]; +extern const u32 gDecorIconPalette_SpikesMat[]; +extern const u32 gDecorIcon_SnorlaxDoll[]; +extern const u32 gDecorIconPalette_SnorlaxDoll[]; +extern const u32 gDecorIcon_RhydonDoll[]; +extern const u32 gDecorIconPalette_RhydonDoll[]; +extern const u32 gDecorIcon_LaprasDoll[]; +extern const u32 gDecorIconPalette_LaprasDoll[]; +extern const u32 gDecorIcon_VenusaurDoll[]; +extern const u32 gDecorIconPalette_VenusaurDoll[]; +extern const u32 gDecorIcon_CharizardDoll[]; +extern const u32 gDecorIconPalette_CharizardDoll[]; +extern const u32 gDecorIcon_BlastoiseDoll[]; +extern const u32 gDecorIconPalette_BlastoiseDoll[]; +extern const u32 gDecorIcon_WailmerDoll[]; +extern const u32 gDecorIconPalette_WailmerDoll[]; +extern const u32 gDecorIcon_RegirockDoll[]; +extern const u32 gDecorIconPalette_RegirockDoll[]; +extern const u32 gDecorIcon_RegiceDoll[]; +extern const u32 gDecorIconPalette_RegiceDoll[]; +extern const u32 gDecorIcon_RegisteelDoll[]; +extern const u32 gDecorIconPalette_RegisteelDoll[]; + extern const u32 gWallclock_Gfx[]; extern const u16 gWallclockMale_Pal[]; extern const u16 gWallclockFemale_Pal[]; diff --git a/include/item.h b/include/item.h index 881d3a3d4..87ff57bc7 100644 --- a/include/item.h +++ b/include/item.h @@ -1,26 +1,7 @@ #ifndef GUARD_ITEM_H #define GUARD_ITEM_H -// These constants are used in gItems -enum -{ - POCKET_NONE, - POCKET_ITEMS, - POCKET_POKE_BALLS, - POCKET_TM_HM, - POCKET_BERRIES, - POCKET_KEY_ITEMS, -}; - -enum -{ - ITEMS_POCKET, - BALLS_POCKET, - TMHM_POCKET, - BERRIES_POCKET, - KEYITEMS_POCKET, - POCKETS_COUNT -}; +#include "constants/item.h" typedef void (*ItemUseFunc)(u8); diff --git a/include/item_menu.h b/include/item_menu.h index 5580fa4b4..b1275549d 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -69,8 +69,8 @@ extern u16 gSpecialVar_ItemId; // Exported ROM declarations void sub_81AAC14(void); -void sub_81AAC50(void); -void sub_81AAC70(void); +void FavorLadyOpenBagMenu(void); +void QuizLadyOpenBagMenu(void); void sub_81AAC28(void); void sub_81AABB0(void); void SetInitialScrollAndCursorPositions(u8 pocketId); diff --git a/include/lilycove_lady.h b/include/lilycove_lady.h index f26285d68..1ec327be9 100644 --- a/include/lilycove_lady.h +++ b/include/lilycove_lady.h @@ -2,16 +2,16 @@ #define GUARD_LILYCOVE_LADY_H u8 GetLilycoveLadyId(void); -void SetLilycoveLady(void); -void sub_818DA78(void); -void sub_818DEF4(void); -void sub_818E564(void); -void sub_818E570(const LilycoveLady *lilycoveLady); +void InitLilycoveLady(void); +void ResetLilycoveLadyForRecordMix(void); +void FieldCallback_FavorLadyEnableScriptContexts(void); +void FieldCallback_QuizLadyEnableScriptContexts(void); +void QuizLadyClearQuestionForRecordMix(const LilycoveLady *lilycoveLady); bool8 GivePokeblockToContestLady(struct Pokeblock *pokeblock); -void sub_818E7E0(u8 *dest1, u8 *dest2); -void sub_818E81C(u8 *dest); -void sub_818E848(u8 *dest); -void sub_818E868(u8 *dest, u8 category); +void BufferContestLadyMonName(u8 *dest1, u8 *dest2); +void BufferContestLadyPlayerName(u8 *dest); +void BufferContestLadyLanguage(u8 *dest); +void BufferContestName(u8 *dest, u8 category); u8 sub_818E880(void); #endif //GUARD_LILYCOVE_LADY_H diff --git a/include/mon_markings.h b/include/mon_markings.h index 8e4ec58bd..241b31e01 100644 --- a/include/mon_markings.h +++ b/include/mon_markings.h @@ -1,17 +1,19 @@ #ifndef POKEEMERALD_MON_MARKINGS_H #define POKEEMERALD_MON_MARKINGS_H +#define NUM_MON_MARKINGS 4 + struct PokemonMarkMenu { /*0x0000*/ u16 baseTileTag; /*0x0002*/ u16 basePaletteTag; /*0x0004*/ u8 markings; // bit flags /*0x0005*/ s8 cursorPos; - /*0x0006*/ bool8 markingsArray[4]; + /*0x0006*/ bool8 markingsArray[NUM_MON_MARKINGS]; /*0x000A*/ u8 cursorBaseY; /*0x000B*/ bool8 spriteSheetLoadRequired; /*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window - /*0x0014*/ struct Sprite *menuMarkingSprites[4]; + /*0x0014*/ struct Sprite *menuMarkingSprites[NUM_MON_MARKINGS]; /*0x0024*/ struct Sprite *unkSprite; /*0x0028*/ struct Sprite *menuTextSprite; /*0x002C*/ const u8 *frameTiles; diff --git a/include/party_menu.h b/include/party_menu.h index c9843e484..d76e50788 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -26,6 +26,41 @@ enum PARTY_GIVE_ITEM, }; +enum +{ + TUTOR_MOVE_MEGA_PUNCH, + TUTOR_MOVE_SWORDS_DANCE, + TUTOR_MOVE_MEGA_KICK, + TUTOR_MOVE_BODY_SLAM, + TUTOR_MOVE_DOUBLE_EDGE, + TUTOR_MOVE_COUNTER, + TUTOR_MOVE_SEISMIC_TOSS, + TUTOR_MOVE_MIMIC, + TUTOR_MOVE_METRONOME, + TUTOR_MOVE_SOFT_BOILED, + TUTOR_MOVE_DREAM_EATER, + TUTOR_MOVE_THUNDER_WAVE, + TUTOR_MOVE_EXPLOSION, + TUTOR_MOVE_ROCK_SLIDE, + TUTOR_MOVE_SUBSTITUTE, + TUTOR_MOVE_DYNAMIC_PUNCH, + TUTOR_MOVE_ROLLOUT, + TUTOR_MOVE_PSYCH_UP, + TUTOR_MOVE_SNORE, + TUTOR_MOVE_ICY_WIND, + TUTOR_MOVE_ENDURE, + TUTOR_MOVE_MUD_SLAP, + TUTOR_MOVE_ICE_PUNCH, + TUTOR_MOVE_SWAGGER, + TUTOR_MOVE_SLEEP_TALK, + TUTOR_MOVE_SWIFT, + TUTOR_MOVE_DEFENSE_CURL, + TUTOR_MOVE_THUNDER_PUNCH, + TUTOR_MOVE_FIRE_PUNCH, + TUTOR_MOVE_FURY_CUTTER, + TUTOR_MOVE_COUNT +}; + struct Struct203CEC8 { MainCallback exitCallback; diff --git a/include/pokedex.h b/include/pokedex.h index a1b7378bf..532c823ee 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -4,6 +4,7 @@ extern u8 gUnusedPokedexU8; extern void (*gUnknown_030060B4)(void); +#define KANTO_DEX_COUNT 151 #define HOENN_DEX_COUNT 202 #define NATIONAL_DEX_COUNT 386 @@ -43,7 +44,7 @@ s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId); u16 CreateMonSpriteFromNationalDexNumber(u16, s16, s16, u16); bool16 HasAllHoennMons(void); void ResetPokedexScrollPositions(void); -u16 sub_80C0944(void); +bool16 HasAllMons(void); void CB2_Pokedex(void); #endif // GUARD_POKEDEX_H diff --git a/include/pokemon.h b/include/pokemon.h index 07bcff2e3..6a34e3cda 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -4,136 +4,6 @@ #include "constants/pokemon.h" #include "sprite.h" -#define MON_DATA_PERSONALITY 0 -#define MON_DATA_OT_ID 1 -#define MON_DATA_NICKNAME 2 -#define MON_DATA_LANGUAGE 3 -#define MON_DATA_SANITY_IS_BAD_EGG 4 -#define MON_DATA_SANITY_HAS_SPECIES 5 -#define MON_DATA_SANITY_IS_EGG 6 -#define MON_DATA_OT_NAME 7 -#define MON_DATA_MARKINGS 8 -#define MON_DATA_CHECKSUM 9 -#define MON_DATA_ENCRYPT_SEPARATOR 10 -#define MON_DATA_SPECIES 11 -#define MON_DATA_HELD_ITEM 12 -#define MON_DATA_MOVE1 13 -#define MON_DATA_MOVE2 14 -#define MON_DATA_MOVE3 15 -#define MON_DATA_MOVE4 16 -#define MON_DATA_PP1 17 -#define MON_DATA_PP2 18 -#define MON_DATA_PP3 19 -#define MON_DATA_PP4 20 -#define MON_DATA_PP_BONUSES 21 -#define MON_DATA_COOL 22 -#define MON_DATA_BEAUTY 23 -#define MON_DATA_CUTE 24 -#define MON_DATA_EXP 25 -#define MON_DATA_HP_EV 26 -#define MON_DATA_ATK_EV 27 -#define MON_DATA_DEF_EV 28 -#define MON_DATA_SPEED_EV 29 -#define MON_DATA_SPATK_EV 30 -#define MON_DATA_SPDEF_EV 31 -#define MON_DATA_FRIENDSHIP 32 -#define MON_DATA_SMART 33 -#define MON_DATA_POKERUS 34 -#define MON_DATA_MET_LOCATION 35 -#define MON_DATA_MET_LEVEL 36 -#define MON_DATA_MET_GAME 37 -#define MON_DATA_POKEBALL 38 -#define MON_DATA_HP_IV 39 -#define MON_DATA_ATK_IV 40 -#define MON_DATA_DEF_IV 41 -#define MON_DATA_SPEED_IV 42 -#define MON_DATA_SPATK_IV 43 -#define MON_DATA_SPDEF_IV 44 -#define MON_DATA_IS_EGG 45 -#define MON_DATA_ABILITY_NUM 46 -#define MON_DATA_TOUGH 47 -#define MON_DATA_SHEEN 48 -#define MON_DATA_OT_GENDER 49 -#define MON_DATA_COOL_RIBBON 50 -#define MON_DATA_BEAUTY_RIBBON 51 -#define MON_DATA_CUTE_RIBBON 52 -#define MON_DATA_SMART_RIBBON 53 -#define MON_DATA_TOUGH_RIBBON 54 -#define MON_DATA_STATUS 55 -#define MON_DATA_LEVEL 56 -#define MON_DATA_HP 57 -#define MON_DATA_MAX_HP 58 -#define MON_DATA_ATK 59 -#define MON_DATA_DEF 60 -#define MON_DATA_SPEED 61 -#define MON_DATA_SPATK 62 -#define MON_DATA_SPDEF 63 -#define MON_DATA_MAIL 64 -#define MON_DATA_SPECIES2 65 -#define MON_DATA_IVS 66 -#define MON_DATA_CHAMPION_RIBBON 67 -#define MON_DATA_WINNING_RIBBON 68 -#define MON_DATA_VICTORY_RIBBON 69 -#define MON_DATA_ARTIST_RIBBON 70 -#define MON_DATA_EFFORT_RIBBON 71 -#define MON_DATA_GIFT_RIBBON_1 72 -#define MON_DATA_GIFT_RIBBON_2 73 -#define MON_DATA_GIFT_RIBBON_3 74 -#define MON_DATA_GIFT_RIBBON_4 75 -#define MON_DATA_GIFT_RIBBON_5 76 -#define MON_DATA_GIFT_RIBBON_6 77 -#define MON_DATA_GIFT_RIBBON_7 78 -#define MON_DATA_FATEFUL_ENCOUNTER 79 -#define MON_DATA_OBEDIENCE 80 -#define MON_DATA_KNOWN_MOVES 81 -#define MON_DATA_RIBBON_COUNT 82 -#define MON_DATA_RIBBONS 83 -#define MON_DATA_ATK2 84 -#define MON_DATA_DEF2 85 -#define MON_DATA_SPEED2 86 -#define MON_DATA_SPATK2 87 -#define MON_DATA_SPDEF2 88 - -#define MAX_LEVEL 100 - -#define OT_ID_RANDOM_NO_SHINY 2 -#define OT_ID_PRESET 1 -#define OT_ID_PLAYER_ID 0 - -#define MON_GIVEN_TO_PARTY 0x0 -#define MON_GIVEN_TO_PC 0x1 -#define MON_CANT_GIVE 0x2 - -#define PLAYER_HAS_TWO_USABLE_MONS 0x0 -#define PLAYER_HAS_ONE_MON 0x1 -#define PLAYER_HAS_ONE_USABLE_MON 0x2 - -#define MON_MALE 0x00 -#define MON_FEMALE 0xFE -#define MON_GENDERLESS 0xFF - -#define FRIENDSHIP_EVENT_GROW_LEVEL 0x0 -#define FRIENDSHIP_EVENT_VITAMIN 0x1 // unused -#define FRIENDSHIP_EVENT_BATTLE_ITEM 0x2 // unused -#define FRIENDSHIP_EVENT_LEAGUE_BATTLE 0x3 -#define FRIENDSHIP_EVENT_LEARN_TMHM 0x4 -#define FRIENDSHIP_EVENT_WALKING 0x5 -#define FRIENDSHIP_EVENT_FAINT_SMALL 0x6 -#define FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE 0x7 -#define FRIENDSHIP_EVENT_FAINT_LARGE 0x8 - -#define STATUS_PRIMARY_NONE 0x0 -#define STATUS_PRIMARY_POISON 0x1 -#define STATUS_PRIMARY_PARALYSIS 0x2 -#define STATUS_PRIMARY_SLEEP 0x3 -#define STATUS_PRIMARY_FREEZE 0x4 -#define STATUS_PRIMARY_BURN 0x5 -#define STATUS_PRIMARY_POKERUS 0x6 -#define STATUS_PRIMARY_FAINTED 0x7 - -#define MAX_TOTAL_EVS 510 -#define UNOWN_FORM_COUNT 28 - struct PokemonSubstruct0 { u16 species; @@ -145,8 +15,8 @@ struct PokemonSubstruct0 struct PokemonSubstruct1 { - u16 moves[4]; - u8 pp[4]; + u16 moves[MAX_MON_MOVES]; + u8 pp[MAX_MON_MOVES]; }; struct PokemonSubstruct2 @@ -273,7 +143,7 @@ struct BattlePokemon /*0x06*/ u16 speed; /*0x08*/ u16 spAttack; /*0x0A*/ u16 spDefense; - /*0x0C*/ u16 moves[4]; + /*0x0C*/ u16 moves[MAX_MON_MOVES]; /*0x14*/ u32 hpIV:5; /*0x14*/ u32 attackIV:5; /*0x15*/ u32 defenseIV:5; @@ -287,7 +157,7 @@ struct BattlePokemon /*0x21*/ u8 type1; /*0x22*/ u8 type2; /*0x23*/ u8 unknown; - /*0x24*/ u8 pp[4]; + /*0x24*/ u8 pp[MAX_MON_MOVES]; /*0x28*/ u16 hp; /*0x2A*/ u8 level; /*0x2B*/ u8 friendship; @@ -348,13 +218,6 @@ struct BattleMove u8 flags; }; -#define FLAG_MAKES_CONTACT 0x1 -#define FLAG_PROTECT_AFFECTED 0x2 -#define FLAG_MAGICCOAT_AFFECTED 0x4 -#define FLAG_SNATCH_AFFECTED 0x8 -#define FLAG_MIRROR_MOVE_AFFECTED 0x10 -#define FLAG_KINGSROCK_AFFECTED 0x20 - struct SpindaSpot { u8 x, y; @@ -367,46 +230,6 @@ struct __attribute__((packed)) LevelUpMove u16 level:7; }; -enum -{ - GROWTH_MEDIUM_FAST, - GROWTH_ERRATIC, - GROWTH_FLUCTUATING, - GROWTH_MEDIUM_SLOW, - GROWTH_FAST, - GROWTH_SLOW -}; - -enum -{ - BODY_COLOR_RED, - BODY_COLOR_BLUE, - BODY_COLOR_YELLOW, - BODY_COLOR_GREEN, - BODY_COLOR_BLACK, - BODY_COLOR_BROWN, - BODY_COLOR_PURPLE, - BODY_COLOR_GRAY, - BODY_COLOR_WHITE, - BODY_COLOR_PINK -}; - -#define EVO_FRIENDSHIP 0x0001 // Pokémon levels up with friendship ≥ 220 -#define EVO_FRIENDSHIP_DAY 0x0002 // Pokémon levels up during the day with friendship ≥ 220 -#define EVO_FRIENDSHIP_NIGHT 0x0003 // Pokémon levels up at night with friendship ≥ 220 -#define EVO_LEVEL 0x0004 // Pokémon reaches the specified level -#define EVO_TRADE 0x0005 // Pokémon is traded -#define EVO_TRADE_ITEM 0x0006 // Pokémon is traded while it's holding the specified item -#define EVO_ITEM 0x0007 // specified item is used on Pokémon -#define EVO_LEVEL_ATK_GT_DEF 0x0008 // Pokémon reaches the specified level with attack > defense -#define EVO_LEVEL_ATK_EQ_DEF 0x0009 // Pokémon reaches the specified level with attack = defense -#define EVO_LEVEL_ATK_LT_DEF 0x000a // Pokémon reaches the specified level with attack < defense -#define EVO_LEVEL_SILCOON 0x000b // Pokémon reaches the specified level with a Silcoon personality value -#define EVO_LEVEL_CASCOON 0x000c // Pokémon reaches the specified level with a Cascoon personality value -#define EVO_LEVEL_NINJASK 0x000d // Pokémon reaches the specified level (special value for Ninjask) -#define EVO_LEVEL_SHEDINJA 0x000e // Pokémon reaches the specified level (special value for Shedinja) -#define EVO_BEAUTY 0x000f // Pokémon levels up with beauty ≥ specified value - struct Evolution { u16 method; @@ -414,8 +237,6 @@ struct Evolution u16 targetSpecies; }; -#define EVOS_PER_MON 5 - extern u8 gPlayerPartyCount; extern struct Pokemon gPlayerParty[PARTY_SIZE]; extern u8 gEnemyPartyCount; @@ -506,7 +327,7 @@ u8 CalculatePlayerPartyCount(void); u8 CalculateEnemyPartyCount(void); u8 GetMonsStateToDoubles(void); u8 GetMonsStateToDoubles_2(void); -u8 GetAbilityBySpecies(u16 species, bool8 abilityNum); +u8 GetAbilityBySpecies(u16 species, u8 abilityNum); u8 GetMonAbility(struct Pokemon *mon); void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord); u8 GetSecretBaseTrainerPicIndex(void); diff --git a/include/pokenav.h b/include/pokenav.h index db32e3029..b1c3287f1 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -56,6 +56,32 @@ enum POKENAV_MENU_E, }; +enum +{ + MC_HEADER_MR_STONE, + MC_HEADER_PROF_BIRCH, + MC_HEADER_BRENDAN, + MC_HEADER_MAY, + MC_HEADER_WALLY, + MC_HEADER_NORMAN, + MC_HEADER_MOM, + MC_HEADER_STEVEN, + MC_HEADER_SCOTT, + MC_HEADER_ROXANNE, + MC_HEADER_BRAWLY, + MC_HEADER_WATTSON, + MC_HEADER_FLANNERY, + MC_HEADER_WINONA, + MC_HEADER_TATE_LIZA, + MC_HEADER_JUAN, + MC_HEADER_SIDNEY, + MC_HEADER_PHOEBE, + MC_HEADER_GLACIA, + MC_HEADER_DRAKE, + MC_HEADER_WALLACE, + MC_HEADER_COUNT +}; + // pokenav.c void sub_81C7694(u32); u32 sub_81C76AC(void); @@ -109,15 +135,15 @@ bool32 sub_81C81D4(const struct BgTemplate *arg0, struct MatchCallListTemplate * void sub_81C8234(void); // pokenav_match_call_data.c -bool32 sub_81D17E8(u32 idx); +bool32 MatchCall_HasCheckPage(u32 idx); u8 MatchCallMapSecGetByIndex(u32 idx); bool32 sub_81D1BF8(u32 idx); bool32 MatchCallFlagGetByIndex(u32 idx); u32 MatchCall_GetRematchTableIdx(u32 idx); u32 GetTrainerIdxByRematchIdx(u32 rematchIdx); -int sub_81D1BD0(u32 idx); +int MatchCall_GetOverrideFacilityClass(u32 idx); void MatchCall_GetMessage(u32 idx, u8 *dest); -const u8 *sub_81D1B40(u32 idx, u32 offset); +const u8 *MatchCall_GetOverrideFlavorText(u32 idx, u32 offset); void sub_81D1A78(u32 idx, const u8 **desc, const u8 **name); // pokenav_main_menu.c diff --git a/include/script_menu.h b/include/script_menu.h index efb51870b..086ad147f 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -1,20 +1,20 @@ #ifndef GUARD_SCRIPT_MENU_H #define GUARD_SCRIPT_MENU_H -extern const u8 *const gUnknown_0858BAF0[]; +extern const u8 *const gStdStrings[]; -bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 var3, u8 var4); -bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 var3, u8 var4, u8 var5); -bool8 ScriptMenu_YesNo(u8 var1, u8 var2); -bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount); -bool8 ScriptMenu_ShowPokemonPic(u16 var1, u8 var2, u8 var3); +bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress); +bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 defaultChoice); +bool8 ScriptMenu_YesNo(u8 left, u8 top); +bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 columnCount); +bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y); bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void); -int convert_pixel_width_to_tile_width(int); -u8 CreateWindowFromRect(u8, u8, u8, u8); -void ClearToTransparentAndRemoveWindow(u8); -int display_text_and_get_width(const u8*, int); -int sub_80E2D5C(int arg0, int tileWidth); -bool16 ScrSpecial_CreatePCMenu(void); +int ConvertPixelWidthToTileWidth(int width); +u8 CreateWindowFromRect(u8 x, u8 y, u8 width, u8 height); +void ClearToTransparentAndRemoveWindow(u8 windowId); +int DisplayTextAndGetWidth(const u8* str, int width); +int ScriptMenu_AdjustLeftCoordFromWidth(int left, int width); +bool16 ScriptMenu_CreatePCMultichoice(void); void ScriptMenu_DisplayPCStartupPrompt(void); #endif //GUARD_SCRIPT_MENU_H diff --git a/include/script_movement.h b/include/script_movement.h index 4c3fa6002..f9a97cf46 100644 --- a/include/script_movement.h +++ b/include/script_movement.h @@ -1,8 +1,8 @@ #ifndef GUARD_SCRIPT_MOVEMENT_H #define GUARD_SCRIPT_MOVEMENT_H -bool8 ScriptMovement_StartObjectMovementScript(u8, u8, u8, const u8 *); -bool8 ScriptMovement_IsObjectMovementFinished(u8, u8, u8); -void sub_80D338C(void); +bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, const u8 *movementScript); +bool8 ScriptMovement_IsObjectMovementFinished(u8 localId, u8 mapNum, u8 mapGroup); +void ScriptMovement_UnfreezeEventObjects(void); #endif // GUARD_SCRIPT_MOVEMENT_H diff --git a/include/slot_machine.h b/include/slot_machine.h index d441b7411..1b22e165f 100644 --- a/include/slot_machine.h +++ b/include/slot_machine.h @@ -4,6 +4,7 @@ #define NUM_REELS 3 #define REEL_NUM_TAGS 21 #define REEL_TAG_HEIGHT 24 +#define SLOT_MACHINE_COUNT 12 // Lucky Flags #define LUCKY_BIAS_REPLAY (1 << 0) diff --git a/include/strings.h b/include/strings.h index 7e7fcd322..c1414269a 100644 --- a/include/strings.h +++ b/include/strings.h @@ -758,31 +758,29 @@ extern const u8 BattleFrontier_Lounge2_Text_26174D[]; extern const u8 BattleFrontier_Lounge2_Text_2617F9[]; extern const u8 BattleFrontier_Lounge2_Text_2618C4[]; -extern const u8 BattleFrontier_Lounge5_Text_26468D[]; -extern const u8 BattleFrontier_Lounge5_Text_2646E5[]; -extern const u8 BattleFrontier_Lounge5_Text_264741[]; -extern const u8 BattleFrontier_Lounge5_Text_2647A4[]; -extern const u8 BattleFrontier_Lounge5_Text_2647FC[]; -extern const u8 BattleFrontier_Lounge5_Text_264858[]; -extern const u8 BattleFrontier_Lounge5_Text_2648BE[]; -extern const u8 BattleFrontier_Lounge5_Text_264916[]; -extern const u8 BattleFrontier_Lounge5_Text_264972[]; -extern const u8 BattleFrontier_Lounge5_Text_2649D5[]; -extern const u8 BattleFrontier_Lounge5_Text_264A3F[]; -extern const u8 BattleFrontier_Lounge5_Text_264A9B[]; -extern const u8 BattleFrontier_Lounge5_Text_264AF3[]; -extern const u8 BattleFrontier_Lounge5_Text_264B5D[]; -extern const u8 BattleFrontier_Lounge5_Text_2648BE[]; -extern const u8 BattleFrontier_Lounge5_Text_264BC3[]; -extern const u8 BattleFrontier_Lounge5_Text_264C36[]; -extern const u8 BattleFrontier_Lounge5_Text_2648BE[]; -extern const u8 BattleFrontier_Lounge5_Text_264C95[]; -extern const u8 BattleFrontier_Lounge5_Text_264D01[]; -extern const u8 BattleFrontier_Lounge5_Text_264D6B[]; -extern const u8 BattleFrontier_Lounge5_Text_264DD7[]; -extern const u8 BattleFrontier_Lounge5_Text_264E33[]; -extern const u8 BattleFrontier_Lounge5_Text_264E8F[]; -extern const u8 BattleFrontier_Lounge5_Text_2648BE[]; +// Battle Frontier Nature Girl +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlHardy[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlLonely[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlBrave[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlAdamant[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlNaughty[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlBold[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlRelaxed[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlImpish[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlLax[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlTimid[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlHasty[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlSerious[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlJolly[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlModest[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlMild[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlBashful[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlRash[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlCalm[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlGentle[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlSassy[]; +extern const u8 BattleFrontier_Lounge5_Text_NatureGirlCareful[]; extern const u8 BattleFrontier_Lounge3_Text_262261[]; extern const u8 BattleFrontier_Lounge3_Text_26230D[]; @@ -1024,81 +1022,76 @@ extern const u8 gText_PokenavRibbons_RibbonListButtons[]; extern const u8 gText_PokenavRibbons_RibbonCheckButtons[]; extern const u8 gText_Number2[]; -extern const u8 gUnknown_085EAD37[]; -extern const u8 gUnknown_085EAD41[]; -extern const u8 gUnknown_085EAD67[]; -extern const u8 gUnknown_085EAD6D[]; -extern const u8 gUnknown_085EAD72[]; -extern const u8 gUnknown_085EAD84[]; -extern const u8 gUnknown_085EAD96[]; -extern const u8 gUnknown_085EADA4[]; -extern const u8 gUnknown_085EADB5[]; -extern const u8 gUnknown_085EADC4[]; -extern const u8 gUnknown_085EADD5[]; -extern const u8 gUnknown_085EADE7[]; -extern const u8 gUnknown_085EADF9[]; -extern const u8 gUnknown_085EAE04[]; -extern const u8 gUnknown_085EAE12[]; -extern const u8 gUnknown_085EAE1B[]; -extern const u8 gUnknown_085EAE27[]; -extern const u8 gUnknown_085EAE2C[]; -extern const u8 gUnknown_085EAE31[]; -extern const u8 gUnknown_085EAE35[]; -extern const u8 gUnknown_085EAE39[]; -extern const u8 gUnknown_085EAE3D[]; -extern const u8 gUnknown_085EAE41[]; -extern const u8 gUnknown_085EAD5F[]; -extern const u8 gUnknown_085EAE53[]; -extern const u8 gUnknown_085EAE5A[]; +extern const u8 gText_Petalburg[]; +extern const u8 gText_Slateport[]; +extern const u8 gText_Enter2[]; +extern const u8 gText_Info2[]; +extern const u8 gText_WhatsAContest[]; +extern const u8 gText_TypesOfContests[]; +extern const u8 gText_Ranks[]; +extern const u8 gText_Decoration2[]; +extern const u8 gText_PackUp[]; +extern const u8 gText_Registry[]; +extern const u8 gText_Information[]; +extern const u8 gText_Mach[]; +extern const u8 gText_Acro[]; +extern const u8 gText_Psn[]; +extern const u8 gText_Par[]; +extern const u8 gText_Slp[]; +extern const u8 gText_Brn[]; +extern const u8 gText_Frz[]; +extern const u8 gText_Dewford[]; +extern const u8 gText_SawIt[]; +extern const u8 gText_NotYet[]; extern const u8 gText_Yes[]; extern const u8 gText_No[]; -extern const u8 gUnknown_085EAEA2[]; -extern const u8 gUnknown_085EAEAC[]; -extern const u8 gUnknown_0827ECBC[]; -extern const u8 gUnknown_0827ECC3[]; -extern const u8 gUnknown_0827ECCD[]; -extern const u8 gUnknown_0827ECD5[]; -extern const u8 gUnknown_0827ECDD[]; -extern const u8 gUnknown_0827ECE3[]; -extern const u8 gUnknown_0827ECEB[]; -extern const u8 gUnknown_0827ECF2[]; -extern const u8 gUnknown_0827ECF8[]; -extern const u8 gUnknown_0827ED00[]; -extern const u8 gUnknown_0827ED06[]; -extern const u8 gUnknown_0827ED10[]; -extern const u8 gUnknown_0827ED18[]; -extern const u8 gUnknown_0827ED22[]; -extern const u8 gUnknown_0827ED2C[]; -extern const u8 gUnknown_0827ED36[]; -extern const u8 gUnknown_0827ED40[]; -extern const u8 gUnknown_0827ED46[]; -extern const u8 gUnknown_0827ED4F[]; -extern const u8 gUnknown_0827ED59[]; -extern const u8 gUnknown_0827ED65[]; -extern const u8 gUnknown_0827ED70[]; -extern const u8 gUnknown_0827ED74[]; -extern const u8 gUnknown_0827ED78[]; -extern const u8 gUnknown_0827ED80[]; -extern const u8 gUnknown_0827ED95[]; -extern const u8 gUnknown_0827EDAA[]; -extern const u8 gUnknown_0827EDB5[]; -extern const u8 gUnknown_0827EDBA[]; -extern const u8 gUnknown_0827EDC1[]; -extern const u8 gUnknown_0827EDC9[]; -extern const u8 gUnknown_0827EDD5[]; -extern const u8 gUnknown_0827EDE4[]; -extern const u8 gUnknown_0827EDF0[]; -extern const u8 gUnknown_0827EDF5[]; -extern const u8 gUnknown_0827EDF7[]; -extern const u8 gUnknown_0827EDF9[]; -extern const u8 gUnknown_0827EDFB[]; -extern const u8 gUnknown_0827EDFD[]; -extern const u8 gUnknown_0827EDFF[]; -extern const u8 gUnknown_0827EE01[]; -extern const u8 gUnknown_0827EE03[]; -extern const u8 gUnknown_0827EE05[]; -extern const u8 gUnknown_0827EE07[]; -extern const u8 gUnknown_0827EE09[]; +extern const u8 gText_Challenge[]; +extern const u8 gText_Info3[]; +extern const u8 gTrickHouse_Mechadoll_Oddish[]; +extern const u8 gTrickHouse_Mechadoll_Poochyena[]; +extern const u8 gTrickHouse_Mechadoll_Taillow[]; +extern const u8 gTrickHouse_Mechadoll_Azurill[]; +extern const u8 gTrickHouse_Mechadoll_Lotad[]; +extern const u8 gTrickHouse_Mechadoll_Wingull[]; +extern const u8 gTrickHouse_Mechadoll_Dustox[]; +extern const u8 gTrickHouse_Mechadoll_Zubat[]; +extern const u8 gTrickHouse_Mechadoll_Nincada[]; +extern const u8 gTrickHouse_Mechadoll_Ralts[]; +extern const u8 gTrickHouse_Mechadoll_Zigzagoon[]; +extern const u8 gTrickHouse_Mechadoll_Slakoth[]; +extern const u8 gTrickHouse_Mechadoll_Poochyena2[]; +extern const u8 gTrickHouse_Mechadoll_Shroomish[]; +extern const u8 gTrickHouse_Mechadoll_Zigzagoon2[]; +extern const u8 gTrickHouse_Mechadoll_Poochyena3[]; +extern const u8 gTrickHouse_Mechadoll_Zubat2[]; +extern const u8 gTrickHouse_Mechadoll_Carvanha[]; +extern const u8 gTrickHouse_Mechadoll_BurnHeal[]; +extern const u8 gTrickHouse_Mechadoll_HarborMail[]; +extern const u8 gTrickHouse_Mechadoll_SamePrice[]; +extern const u8 gTrickHouse_Mechadoll_60Yen[]; +extern const u8 gTrickHouse_Mechadoll_55Yen[]; +extern const u8 gTrickHouse_Mechadoll_Nothing[]; +extern const u8 gTrickHouse_Mechadoll_CostMore[]; +extern const u8 gTrickHouse_Mechadoll_CostLess[]; +extern const u8 gTrickHouse_Mechadoll_SamePrice2[]; +extern const u8 gTrickHouse_Mechadoll_Male[]; +extern const u8 gTrickHouse_Mechadoll_Female[]; +extern const u8 gTrickHouse_Mechadoll_Neither[]; +extern const u8 gTrickHouse_Mechadoll_ElderlyMen[]; +extern const u8 gTrickHouse_Mechadoll_ElderlyLadies[]; +extern const u8 gTrickHouse_Mechadoll_SameNumber[]; +extern const u8 gTrickHouse_Mechadoll_None[]; +extern const u8 gTrickHouse_Mechadoll_One[]; +extern const u8 gTrickHouse_Mechadoll_Two[]; +extern const u8 gTrickHouse_Mechadoll_Two2[]; +extern const u8 gTrickHouse_Mechadoll_Three[]; +extern const u8 gTrickHouse_Mechadoll_Four[]; +extern const u8 gTrickHouse_Mechadoll_Six[]; +extern const u8 gTrickHouse_Mechadoll_Seven[]; +extern const u8 gTrickHouse_Mechadoll_Eight[]; +extern const u8 gTrickHouse_Mechadoll_Six2[]; +extern const u8 gTrickHouse_Mechadoll_Seven2[]; +extern const u8 gTrickHouse_Mechadoll_Eight2[]; // Pokedex strings extern const u8 gUnknown_085E87A5[]; @@ -1149,65 +1142,64 @@ extern const u8 gText_DexEmptyString[]; extern const u8 gText_DexSearchDontSpecify[]; extern const u8 gText_DexSearchTypeNone[]; -extern const u8 gUnknown_085EAEC3[]; -extern const u8 gUnknown_085EAED6[]; -extern const u8 gUnknown_085EAEE6[]; -extern const u8 gUnknown_085EAEF6[]; -extern const u8 gUnknown_085EAF02[]; -extern const u8 gUnknown_085EAF0E[]; -extern const u8 gUnknown_085EAF1B[]; -extern const u8 gUnknown_085EAF24[]; -extern const u8 gUnknown_085EAF2F[]; -extern const u8 gUnknown_085EAF34[]; -extern const u8 gUnknown_085EAF3E[]; -extern const u8 gUnknown_085EAF4B[]; -extern const u8 gUnknown_085EAF58[]; -extern const u8 gUnknown_085EAF65[]; -extern const u8 gUnknown_085EAF70[]; -extern const u8 gUnknown_085EAF7D[]; -extern const u8 gUnknown_085EAF87[]; -extern const u8 gUnknown_085EAF93[]; -extern const u8 gUnknown_085EAF9F[]; -extern const u8 gUnknown_085EAFAB[]; -extern const u8 gUnknown_085EAFB6[]; -extern const u8 gUnknown_085EAFCF[]; -extern const u8 gUnknown_085EAFE8[]; -extern const u8 gUnknown_085EB089[]; -extern const u8 gUnknown_085EB09C[]; -extern const u8 gUnknown_085EB0AF[]; -extern const u8 gUnknown_085EB0C2[]; -extern const u8 gUnknown_085EB0D5[]; -extern const u8 gUnknown_085EB002[]; -extern const u8 gUnknown_085EB017[]; -extern const u8 gUnknown_085EB02A[]; -extern const u8 gUnknown_085EB034[]; +extern const u8 gText_FreshWaterAndPrice[]; +extern const u8 gText_SodaPopAndPrice[]; +extern const u8 gText_LemonadeAndPrice[]; +extern const u8 gText_HowToRide[]; +extern const u8 gText_HowToTurn[]; +extern const u8 gText_SandySlopes[]; +extern const u8 gText_Wheelies[]; +extern const u8 gText_BunnyHops[]; +extern const u8 gText_Jump[]; +extern const u8 gText_Satisfied[]; +extern const u8 gText_Dissatisfied[]; +extern const u8 gText_DeepSeaTooth[]; +extern const u8 gText_DeepSeaScale[]; +extern const u8 gText_BlueFlute2[]; +extern const u8 gText_YellowFlute2[]; +extern const u8 gText_RedFlute2[]; +extern const u8 gText_WhiteFlute2[]; +extern const u8 gText_BlackFlute2[]; +extern const u8 gText_GlassChair[]; +extern const u8 gText_GlassDesk[]; +extern const u8 gText_TreeckoDollAndPrice[]; +extern const u8 gText_TorchicDollAndPrice[]; +extern const u8 gText_MudkipDollAndPrice[]; +extern const u8 gText_TM32AndPrice[]; +extern const u8 gText_TM29AndPrice[]; +extern const u8 gText_TM35AndPrice[]; +extern const u8 gText_TM24AndPrice[]; +extern const u8 gText_TM13AndPrice[]; +extern const u8 gText_50CoinsAndPrice[]; +extern const u8 gText_500CoinsAndPrice[]; +extern const u8 gText_Excellent2[]; +extern const u8 gText_NotSoGood[]; extern const u8 gText_LilycoveCity[]; -extern const u8 gUnknown_085EB07E[]; -extern const u8 gUnknown_085EB084[]; -extern const u8 gUnknown_085EB040[]; -extern const u8 gUnknown_085EB04A[]; -extern const u8 gUnknown_085EB057[]; -extern const u8 gUnknown_085EB062[]; +extern const u8 gText_Right[]; +extern const u8 gText_Left[]; +extern const u8 gText_RedShard[]; +extern const u8 gText_YellowShard[]; +extern const u8 gText_BlueShard[]; +extern const u8 gText_GreenShard[]; extern const u8 gText_Opponent[]; extern const u8 gText_Tourney_Tree[]; extern const u8 gText_ReadyToStart[]; -extern const u8 gUnknown_085EB5BC[]; -extern const u8 gUnknown_085EB5C3[]; -extern const u8 gUnknown_085EB5C8[]; -extern const u8 gUnknown_085EB29A[]; -extern const u8 gUnknown_085EB2A3[]; -extern const u8 gUnknown_085EB372[]; -extern const u8 gUnknown_085EB37F[]; -extern const u8 gUnknown_085EB389[]; -extern const u8 gUnknown_085EAE6E[]; -extern const u8 gUnknown_085EAE7C[]; -extern const u8 gUnknown_085EAE8A[]; -extern const u8 gUnknown_085EAD6D[]; -extern const u8 gUnknown_085EB397[]; -extern const u8 gUnknown_085EB3A4[]; -extern const u8 gUnknown_085EB3B1[]; -extern const u8 gUnknown_085EB3D4[]; -extern const u8 gUnknown_085EB3C6[]; +extern const u8 gText_Record2[]; +extern const u8 gText_Rest[]; +extern const u8 gText_Retire[]; +extern const u8 gText_RedTent[]; +extern const u8 gText_BlueTent[]; +extern const u8 gText_TradeCenter[]; +extern const u8 gText_Colosseum[]; +extern const u8 gText_RecordCorner[]; +extern const u8 gText_SingleBattle[]; +extern const u8 gText_DoubleBattle[]; +extern const u8 gText_MultiBattle[]; +extern const u8 gText_BerryCrush3[]; +extern const u8 gText_PokemonJump[]; +extern const u8 gText_DodrioBerryPicking[]; +extern const u8 gText_JoinGroup[]; +extern const u8 gText_BecomeLeader[]; extern const u8 gText_NormalRank[]; extern const u8 gText_SuperRank[]; extern const u8 gText_HyperRank[]; @@ -1219,56 +1211,56 @@ extern const u8 gText_AboutE_Mode[]; extern const u8 gText_AboutG_Mode[]; extern const u8 gText_E_Mode[]; extern const u8 gText_G_Mode[]; -extern const u8 gUnknown_085EB278[]; -extern const u8 gUnknown_085EB28A[]; -extern const u8 gUnknown_085EB290[]; -extern const u8 gUnknown_085EB295[]; -extern const u8 gUnknown_085EB2E4[]; -extern const u8 gUnknown_085EB2F0[]; -extern const u8 gUnknown_085EB2FC[]; -extern const u8 gUnknown_085EB3DF[]; -extern const u8 gUnknown_085EB3EA[]; -extern const u8 gUnknown_085EB3F1[]; -extern const u8 gUnknown_085EB3FC[]; -extern const u8 gUnknown_085EB40A[]; -extern const u8 gUnknown_085EB415[]; -extern const u8 gUnknown_085EB41D[]; -extern const u8 gUnknown_085EB424[]; -extern const u8 gUnknown_085EB45C[]; -extern const u8 gUnknown_085EB469[]; -extern const u8 gUnknown_085EB475[]; -extern const u8 gUnknown_085EB482[]; -extern const u8 gUnknown_085EB42F[]; -extern const u8 gUnknown_085EB43A[]; -extern const u8 gUnknown_085EB444[]; -extern const u8 gUnknown_085EB451[]; -extern const u8 gUnknown_085EB48E[]; -extern const u8 gUnknown_085EB496[]; -extern const u8 gUnknown_085EB4A3[]; -extern const u8 gUnknown_085EB4AD[]; -extern const u8 gUnknown_085EB4B9[]; -extern const u8 gUnknown_085EB4C7[]; -extern const u8 gUnknown_085EB4D4[]; -extern const u8 gUnknown_085EB4E0[]; -extern const u8 gUnknown_085EB532[]; -extern const u8 gUnknown_085EB543[]; -extern const u8 gUnknown_085EB555[]; -extern const u8 gUnknown_085EB563[]; -extern const u8 gUnknown_085EB56E[]; -extern const u8 gUnknown_085EB57E[]; -extern const u8 gUnknown_085EB589[]; -extern const u8 gUnknown_085EB5B6[]; -extern const u8 gUnknown_085EE14B[]; -extern const u8 gUnknown_085EE14F[]; -extern const u8 gUnknown_085EB2FF[]; -extern const u8 gUnknown_085EB310[]; -extern const u8 gUnknown_085EB317[]; -extern const u8 gUnknown_085EB31F[]; +extern const u8 gText_Blank[]; +extern const u8 gText_5BP[]; +extern const u8 gText_10BP[]; +extern const u8 gText_15BP[]; +extern const u8 gText_ClawFossil[]; +extern const u8 gText_RootFossil[]; +extern const u8 gText_No4[]; +extern const u8 gText_TwoStyles[]; +extern const u8 gText_Lv50_3[]; +extern const u8 gText_OpenLevel2[]; +extern const u8 gText_MonTypeAndNo[]; +extern const u8 gText_HoldItems[]; +extern const u8 gText_Symbols2[]; +extern const u8 gText_Record3[]; +extern const u8 gText_BattlePts[]; +extern const u8 gText_BattleRules[]; +extern const u8 gText_JudgeMind[]; +extern const u8 gText_JudgeSkill[]; +extern const u8 gText_JudgeBody[]; +extern const u8 gText_TowerInfo[]; +extern const u8 gText_BattleMon[]; +extern const u8 gText_BattleSalon[]; +extern const u8 gText_MultiLink2[]; +extern const u8 gText_Matchup[]; +extern const u8 gText_TourneyTree[]; +extern const u8 gText_DoubleKO[]; +extern const u8 gText_BasicRules[]; +extern const u8 gText_SwapPartners[]; +extern const u8 gText_SwapNumber[]; +extern const u8 gText_SwapNotes[]; +extern const u8 gText_OpenLevel3[]; +extern const u8 gText_PyramidPokemon[]; +extern const u8 gText_PyramidTrainers[]; +extern const u8 gText_PyramidMaze[]; +extern const u8 gText_BattleBag2[]; +extern const u8 gText_PokenavAndBag[]; +extern const u8 gText_HeldItems[]; +extern const u8 gText_PokemonOrder[]; +extern const u8 gText_GoOn[]; +extern const u8 gText_Red[]; +extern const u8 gText_Blue[]; +extern const u8 gText_IllBattleNow[]; +extern const u8 gText_IWon[]; +extern const u8 gText_ILost[]; +extern const u8 gText_IWontTell[]; extern const u8 gText_CaveOfOrigin[]; extern const u8 gText_MtPyre[]; extern const u8 gText_SkyPillar[]; extern const u8 gText_DontRemember[]; -extern const u8 gUnknown_085EB597[]; +extern const u8 gText_BattlePokemon[]; extern const u8 gText_NormalTagMatch[]; extern const u8 gText_VarietyTagMatch[]; extern const u8 gText_UniqueTagMatch[]; @@ -1281,29 +1273,15 @@ extern const u8 gText_TrainerHill2F[]; extern const u8 gText_TrainerHill3F[]; extern const u8 gText_TrainerHill4F[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_277F1B[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_277F5A[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_277F96[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_27889C[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_27879F[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_2787D5[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_278831[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_27889C[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_27879F[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_2787D5[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_2787FC[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_27889C[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_27879F[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_2787D5[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_278831[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_2787FC[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_27889C[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_277F1B[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_277F5A[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_27889C[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_27879F[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_2787D5[]; -extern const u8 OldaleTown_PokemonCenter_2F_Text_27889C[]; +// Cable Club multichoice text +extern const u8 CableClub_Text_TradeUsingLinkCable[]; +extern const u8 CableClub_Text_BattleUsingLinkCable[]; +extern const u8 CableClub_Text_RecordCornerUsingLinkCable[]; +extern const u8 CableClub_Text_CancelSelectedItem[]; +extern const u8 CableClub_Text_YouMayTradeHere[]; +extern const u8 CableClub_Text_YouMayBattleHere[]; +extern const u8 CableClub_Text_CanMixRecords[]; +extern const u8 CableClub_Text_CanMakeBerryPowder[]; // Frontier records. extern const u8 gText_WinStreak[]; @@ -2744,6 +2722,31 @@ extern const u8 gText_JumpsInARow[]; extern const u8 gText_BestScore2[]; extern const u8 gText_ExcellentsInARow[]; +// Lilycove Lady +extern const u8 gText_ContestLady_Handsome[]; +extern const u8 gText_ContestLady_Vinny[]; +extern const u8 gText_ContestLady_Moreme[]; +extern const u8 gText_ContestLady_Ironhard[]; +extern const u8 gText_ContestLady_Muscle[]; +extern const u8 gText_ContestLady_Coolness[]; +extern const u8 gText_ContestLady_Beauty[]; +extern const u8 gText_ContestLady_Cuteness[]; +extern const u8 gText_ContestLady_Smartness[]; +extern const u8 gText_ContestLady_Toughness[]; +extern const u8 gText_QuizLady_Lady[]; +extern const u8 gText_FavorLady_Slippery[]; +extern const u8 gText_FavorLady_Roundish[]; +extern const u8 gText_FavorLady_Whamish[]; +extern const u8 gText_FavorLady_Shiny[]; +extern const u8 gText_FavorLady_Sticky[]; +extern const u8 gText_FavorLady_Pointy[]; + +extern const u8 gText_CoolnessContest[]; +extern const u8 gText_BeautyContest[]; +extern const u8 gText_CutenessContest[]; +extern const u8 gText_SmartnessContest[]; +extern const u8 gText_ToughnessContest[]; + // Pokenav Match Call extern const u8 gText_CallCantBeMadeHere[]; extern const u8 gText_NumberRegistered[]; diff --git a/include/task.h b/include/task.h index 4852571b4..d0ca34f7f 100644 --- a/include/task.h +++ b/include/task.h @@ -5,6 +5,7 @@ #define TAIL_SENTINEL 0xFF #define NUM_TASKS 16 +#define NUM_TASK_DATA 16 typedef void (*TaskFunc)(u8 taskId); @@ -15,7 +16,7 @@ struct Task u8 prev; u8 next; u8 priority; - s16 data[16]; + s16 data[NUM_TASK_DATA]; }; extern struct Task gTasks[]; diff --git a/include/text.h b/include/text.h index d3ff663bb..e37773475 100644 --- a/include/text.h +++ b/include/text.h @@ -114,6 +114,21 @@ // 0x7 #define TEXT_COLOR_BLUE 0x8 +#define PLACEHOLDER_ID_UNKNOWN 0x0 +#define PLACEHOLDER_ID_PLAYER 0x1 +#define PLACEHOLDER_ID_STRING_VAR_1 0x2 +#define PLACEHOLDER_ID_STRING_VAR_2 0x3 +#define PLACEHOLDER_ID_STRING_VAR_3 0x4 +#define PLACEHOLDER_ID_KUN 0x5 +#define PLACEHOLDER_ID_RIVAL 0x6 +#define PLACEHOLDER_ID_VERSION 0x7 +#define PLACEHOLDER_ID_AQUA 0x8 +#define PLACEHOLDER_ID_MAGMA 0x9 +#define PLACEHOLDER_ID_ARCHIE 0xA +#define PLACEHOLDER_ID_MAXIE 0xB +#define PLACEHOLDER_ID_KYOGRE 0xC +#define PLACEHOLDER_ID_GROUDON 0xD + // battle placeholders are located in battle_message.h #define NUM_TEXT_PRINTERS 32 diff --git a/include/trainer_hill.h b/include/trainer_hill.h index e605ac654..31480287a 100644 --- a/include/trainer_hill.h +++ b/include/trainer_hill.h @@ -1,6 +1,52 @@ #ifndef GUARD_TRAINER_HILL_H #define GUARD_TRAINER_HILL_H +#define HILL_TRAINER_NAME_LENGTH 11 + +struct TrainerHillTrainer +{ + u8 name[HILL_TRAINER_NAME_LENGTH]; + u8 facilityClass; + u32 unused; + u16 speechBefore[6]; + u16 speechWin[6]; + u16 speechLose[6]; + u16 speechAfter[6]; + struct BattleTowerPokemon mons[PARTY_SIZE]; +}; + +struct TrHillRoomTrainers +{ + u8 name[2][HILL_TRAINER_NAME_LENGTH]; + u8 facilityClass[2]; +}; + +struct TrHillDisplay +{ + u8 data[0x100]; + u16 unk3A0[16]; + u8 coords[2]; // x first 4 bits, y last 4 bits + u8 direction; // array of 4 bits for each trainer + u8 range; // array of 4 bits for each trainer +}; + +struct TrHillFloor +{ + u8 unk0; + u8 unk1; + struct TrainerHillTrainer trainers[2]; + struct TrHillDisplay display; +}; + +struct TrHillTag +{ + u8 unkField_0; + u8 unused1; + u8 numFloors; + u32 checksum; + struct TrHillFloor floors[0]; +}; + extern u32 *gTrainerHillVBlankCounter; void CallTrainerHillFunction(void); diff --git a/ld_script.txt b/ld_script.txt index 8d451338c..4247fca4d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -47,7 +47,7 @@ SECTIONS { .text : ALIGN(4) { - asm/crt0.o(.text); + src/crt0.o(.text); src/main.o(.text); src/alloc.o(.text); src/dma3_manager.o(.text); @@ -348,8 +348,8 @@ SECTIONS { lib_text : ALIGN(4) { - asm/libgcnmultiboot.o(.text); - asm/m4a_1.o(.text); + src/libgcnmultiboot.o(.text); + src/m4a_1.o(.text); src/m4a.o(.text); src/agb_flash.o(.text); src/agb_flash_1m.o(.text); @@ -360,7 +360,8 @@ SECTIONS { asm/librfu_intr.o(.text); src/librfu_rfu.o(.text); asm/librfu.o(.text); - asm/libagbsyscall.o(.text); + src/libisagbprn.o(.text); + src/libagbsyscall.o(.text); *libgcc.a:_call_via_rX.o(.text); *libgcc.a:_divdi3.o(.text); *libgcc.a:_divsi3.o(.text); @@ -380,38 +381,39 @@ SECTIONS { *libc.a:memset.o(.text); *libc.a:strcmp.o(.text); *libc.a:strcpy.o(.text); - *libc.a:vfprintf.o(.text); + *libc.a:impure.o(.text); *libc.a:vsprintf.o(.text); + *libc.a:vfprintf.o(.text); + *libc.a:wsetup.o(.text); + *libc.a:dtoa.o(.text); + *libc.a:fflush.o(.text); + *libc.a:findfp.o(.text); + *libc.a:freer.o(.text); + *libc.a:mtrim.o(.text); *libc.a:fvwrite.o(.text); + *libc.a:fwalk.o(.text); *libc.a:locale.o(.text); - *libc.a:findfp.o(.text); - *libc.a:fflush.o(.text); - *libc.a:wsetup.o(.text); + *libc.a:makebuf.o(.text); + *libc.a:mallocr.o(.text); *libc.a:mbtowc_r.o(.text); - *libc.a:s_isinf.o(.text); - *libc.a:s_isnan.o(.text); *libc.a:memchr.o(.text); - *libc.a:strlen.o(.text); - *libc.a:dtoa.o(.text); *libc.a:memmove.o(.text); - *libc.a:stdio.o(.text); + *libc.a:mlock.o(.text); *libc.a:mprec.o(.text); - *libc.a:mallocr.o(.text); - *libc.a:fwalk.o(.text); - *libc.a:freer.o(.text); - *libc.a:makebuf.o(.text); - *libc.a:readr.o(.text); + *libc.a:s_isinf.o(.text); + *libc.a:s_isnan.o(.text); + *libc.a:sbrkr.o(.text); + *libc.a:stdio.o(.text); + *libc.a:strlen.o(.text); + *libc.a:syscalls.o(.text); *libc.a:writer.o(.text); - *libc.a:lseekr.o(.text); - *libc.a:closer.o(.text); *libc.a:callocr.o(.text); - *libc.a:sbrkr.o(.text); - *libc.a:mlock.o(.text); + *libc.a:closer.o(.text); + *libc.a:errno.o(.text); *libc.a:fstatr.o(.text); *libc.a:libcfunc.o(.text); - *libc.a:syscalls.o(.text); - *libc.a:errno.o(.text); - src/libisagbprn.o(.text); + *libc.a:lseekr.o(.text); + *libc.a:readr.o(.text); } =0 .rodata : @@ -661,10 +663,8 @@ SECTIONS { src/pokenav_match_call_data.o(.rodata); src/menu_specialized.o(.rodata); src/ereader_helpers.o(.rodata); - data/ereader_helpers.o(.rodata); src/faraway_island.o(.rodata); src/ereader_screen.o(.rodata); - data/ereader_screen.o(.rodata); src/trainer_hill.o(.rodata); src/rayquaza_scene.o(.rodata); src/walda_phrase.o(.rodata); diff --git a/ld_script_modern.txt b/ld_script_modern.txt index 98ef16b17..5157e81dc 100644 --- a/ld_script_modern.txt +++ b/ld_script_modern.txt @@ -25,7 +25,6 @@ SECTIONS { { /* .bss starts at 0x3000000 */ src/*.o(.bss); - asm/m4a_1.o(.bss); /* .bss.code starts at 0x3001AA8 */ src/m4a.o(.bss.code); @@ -42,7 +41,7 @@ SECTIONS { .text : ALIGN(4) { - asm/crt0.o(.text); + src/crt0.o(.text); src/*.o(.text); asm/*.o(.text); } =0 @@ -56,8 +55,8 @@ SECTIONS { lib_text : ALIGN(4) { - asm/libgcnmultiboot.o(.text); - asm/m4a_1.o(.text); + src/libgcnmultiboot.o(.text); + src/m4a_1.o(.text); src/m4a.o(.text); src/agb_flash.o(.text); src/agb_flash_1m.o(.text); @@ -68,7 +67,7 @@ SECTIONS { asm/librfu_intr.o(.text); src/librfu_rfu.o(.text); asm/librfu.o(.text); - asm/libagbsyscall.o(.text); + src/libagbsyscall.o(.text); *libgcc.a:*.o(.text*); *libc.a:*.o(.text*); src/libisagbprn.o(.text); diff --git a/src/apprentice.c b/src/apprentice.c index 4ad295e1a..113b22f6e 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -1100,7 +1100,7 @@ void ResetAllApprenticeData(void) gSaveBlock2Ptr->apprentices[i].lvlMode = 0; gSaveBlock2Ptr->apprentices[i].number = 0; gSaveBlock2Ptr->apprentices[i].field_1 = 0; - for (j = 0; j < 4; j++) + for (j = 0; j < TRAINER_ID_LENGTH; j++) gSaveBlock2Ptr->apprentices[i].playerId[j] = 0; gSaveBlock2Ptr->apprentices[i].language = gGameLanguage; gSaveBlock2Ptr->apprentices[i].checksum = 0; @@ -1410,7 +1410,7 @@ static void GetLatestLearnedMoves(u16 species, u16 *moves) static u16 sub_81A0284(u8 arg0, u8 speciesTableId, u8 arg2) { - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; u8 i, count; if (PLAYER_APPRENTICE.field_B1_1 < 3) @@ -1559,8 +1559,8 @@ static void CreateMenuWithAnswers(u8 arg0) pixelWidth = width; } - width = convert_pixel_width_to_tile_width(pixelWidth); - left = sub_80E2D5C(left, width); + width = ConvertPixelWidthToTileWidth(pixelWidth); + left = ScriptMenu_AdjustLeftCoordFromWidth(left, width); windowId = CreateAndShowWindow(left, top, width, count * 2); SetStandardWindowBorderStyle(windowId, 0); @@ -2063,7 +2063,7 @@ static void sub_81A1370(void) r10 = 0xFFFF; r9 = -1; - for (i = 1; i < 4; i++) + for (i = 1; i < TRAINER_ID_LENGTH; i++) { if (GetTrainerId(gSaveBlock2Ptr->apprentices[i].playerId) == GetTrainerId(gSaveBlock2Ptr->playerTrainerId) && gSaveBlock2Ptr->apprentices[i].number < r10) @@ -2092,7 +2092,7 @@ static void sub_81A1438(void) gSaveBlock2Ptr->apprentices[0].number++; sub_81A0390(gSaveBlock2Ptr->apprentices[0].field_1); - for (i = 0; i < 4; i++) + for (i = 0; i < TRAINER_ID_LENGTH; i++) gSaveBlock2Ptr->apprentices[0].playerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; StringCopy(gSaveBlock2Ptr->apprentices[0].playerName, gSaveBlock2Ptr->playerName); diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 6e438878b..c9a6a6606 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -298,7 +298,7 @@ void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves) ) ) { - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_TRAINER_ITEMS; i++) { if (gTrainers[gTrainerBattleOpponent_A].items[i] != 0) { @@ -397,8 +397,8 @@ u8 BattleAI_ChooseMoveOrAction(void) static u8 ChooseMoveOrAction_Singles(void) { - u8 currentMoveArray[4]; - u8 consideredMoveArray[4]; + u8 currentMoveArray[MAX_MON_MOVES]; + u8 consideredMoveArray[MAX_MON_MOVES]; u8 numOfBestMoves; s32 i; @@ -452,11 +452,11 @@ static u8 ChooseMoveOrAction_Doubles(void) s32 i; s32 j; s32 scriptsToRun; - s16 bestMovePointsForTarget[4]; - s8 mostViableTargetsArray[4]; - u8 actionOrMoveIndex[4]; - u8 mostViableMovesScores[4]; - u8 mostViableMovesIndices[4]; + s16 bestMovePointsForTarget[MAX_BATTLERS_COUNT]; + s8 mostViableTargetsArray[MAX_BATTLERS_COUNT]; + u8 actionOrMoveIndex[MAX_BATTLERS_COUNT]; + u8 mostViableMovesScores[MAX_MON_MOVES]; + u8 mostViableMovesIndices[MAX_MON_MOVES]; s32 mostViableTargetsNo; s32 mostViableMovesNo; s16 mostMovePoints; @@ -543,7 +543,7 @@ static u8 ChooseMoveOrAction_Doubles(void) mostViableTargetsArray[0] = 0; mostViableTargetsNo = 1; - for (i = 1; i < MAX_MON_MOVES; i++) + for (i = 1; i < MAX_BATTLERS_COUNT; i++) { if (mostMovePoints == bestMovePointsForTarget[i]) { @@ -1167,7 +1167,7 @@ static void Cmd_get_considered_move_power(void) static void Cmd_get_how_powerful_move_is(void) { s32 i, checkedMove; - s32 moveDmgs[4]; + s32 moveDmgs[MAX_MON_MOVES]; for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++) { diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index cd31293f8..6ef359150 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -820,7 +820,7 @@ static bool8 ShouldUseItem(void) } } - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_TRAINER_ITEMS; i++) { u16 item; const u8 *itemEffects; diff --git a/src/battle_anim.c b/src/battle_anim.c index 3cac9f33e..ab1e5ed6a 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -1841,7 +1841,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo UpdateOamPriorityInAllHealthboxes(0); for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - if (GetBattlerSide(i) != 0) + if (GetBattlerSide(i) != B_SIDE_PLAYER) gAnimBattlerSpecies[i] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); else gAnimBattlerSpecies[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index b3a67a509..db9057cb4 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -2547,7 +2547,7 @@ static void AnimPetalDanceSmallFlowerStep(struct Sprite* sprite) { sprite->pos2.x += Sin(sprite->data[5], 8); if ((u16)(sprite->data[5] - 59) < 5 || (u16)(sprite->data[5] - 187) < 5) - sprite->oam.matrixNum ^= 0x8; // horizontal flip + sprite->oam.matrixNum ^= ST_OAM_HFLIP; sprite->data[5] += 5; sprite->data[5] &= 0xFF; @@ -3560,7 +3560,7 @@ void sub_8100640(struct Sprite* sprite) else battler = gBattleAnimTarget; - if (GetBattlerSide(battler) != 0) + if (GetBattlerSide(battler) != B_SIDE_PLAYER) { sprite->data[4] = 0; sprite->data[2] = gBattleAnimArgs[3]; @@ -3731,7 +3731,7 @@ static void sub_81009DC(struct Sprite* sprite) void sub_81009F8(struct Sprite* sprite) { - if (GetBattlerSide(gBattleAnimAttacker) != 0) + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; @@ -3828,7 +3828,7 @@ void sub_8100B88(struct Sprite* sprite) sprite->pos1.x = a; sprite->pos1.y = b; - if (GetBattlerSide(gBattleAnimTarget) == 0) + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) sprite->pos1.y += 8; sprite->callback = AnimSliceStep; @@ -4380,19 +4380,19 @@ void sub_8101898(struct Sprite* sprite) { sprite->pos1.x -= 0x18; sprite->pos1.y += 0x18; - sprite->oam.matrixNum = 16; + sprite->oam.matrixNum = ST_OAM_VFLIP; } else if ((s16)sprite->oam.affineParam == 3) { sprite->pos1.x += 0x18; sprite->pos1.y -= 0x18; - sprite->oam.matrixNum = 8; + sprite->oam.matrixNum = ST_OAM_HFLIP; } else { sprite->pos1.x += 0x18; sprite->pos1.y += 0x18; - sprite->oam.matrixNum = 24; + sprite->oam.matrixNum = ST_OAM_HFLIP | ST_OAM_VFLIP; } sprite->oam.tileNum = (sprite->oam.tileNum + 16); @@ -5105,7 +5105,7 @@ void sub_8102844(struct Sprite* sprite) sprite->data[7] = sprite->pos1.y; if (IsContest()) { - sprite->oam.matrixNum = 8; + sprite->oam.matrixNum = ST_OAM_HFLIP; sprite->pos1.x += 40; sprite->pos1.y += 20; sprite->data[2] = sprite->pos1.x << 7; @@ -5130,7 +5130,7 @@ void sub_8102844(struct Sprite* sprite) sprite->data[3] = -0x1400 / sprite->data[1]; sprite->data[4] = sprite->pos1.y << 7; sprite->data[5] = 0xA00 / sprite->data[1]; - sprite->oam.matrixNum = 24; + sprite->oam.matrixNum = (ST_OAM_HFLIP | ST_OAM_VFLIP); } sprite->callback = sub_810296C; @@ -5387,7 +5387,7 @@ void sub_8102FB8(struct Sprite* sprite) s16 a; if (gBattleAnimArgs[0] == 1) { - sprite->oam.matrixNum = 8; + sprite->oam.matrixNum = ST_OAM_HFLIP; a = 16; } else diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 65cc55604..1add76bf3 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -1479,7 +1479,7 @@ void AnimSonicBoomProjectile(struct Sprite *sprite) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } - else if (GetBattlerSide(gBattleAnimAttacker) != 0) + else if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; gBattleAnimArgs[1] = -gBattleAnimArgs[1]; @@ -1609,10 +1609,10 @@ static void sub_8103C0C(u8 taskId) switch (gTasks[taskId].data[4]) { case 1: - sprite->oam.matrixNum |= 24; + sprite->oam.matrixNum |= (ST_OAM_HFLIP | ST_OAM_VFLIP); break; case 2: - sprite->oam.matrixNum = 8; + sprite->oam.matrixNum = ST_OAM_HFLIP; break; } @@ -1646,7 +1646,7 @@ void sub_8103CF0(u8 taskId) } else { - if ((gBattlerPositions[gBattleAnimTarget] & 1) == 0) + if ((gBattlerPositions[gBattleAnimTarget] & BIT_SIDE) == B_SIDE_PLAYER) { gTasks[taskId].data[4] = 1; gBattleAnimArgs[0] = -gBattleAnimArgs[0]; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 5d79a9e6b..79b728e61 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -1618,7 +1618,7 @@ void sub_815AAA4(struct Sprite *sprite) if (gBattleAnimArgs[2] == 0) { - sprite->oam.matrixNum = 8; + sprite->oam.matrixNum = ST_OAM_HFLIP; sprite->pos2.x = -12; sprite->data[1] = 2; } @@ -4167,7 +4167,7 @@ void AnimSmellingSaltsHand(struct Sprite *sprite) sprite->pos1.y = GetBattlerSpriteCoord(battler, 3); if (gBattleAnimArgs[1] == 0) { - sprite->oam.matrixNum |= 0x8; + sprite->oam.matrixNum |= ST_OAM_HFLIP; sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) - 8; } else @@ -4317,7 +4317,7 @@ void AnimHelpingHandClap(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { - sprite->oam.matrixNum |= 0x8; // horizontal flip + sprite->oam.matrixNum |= ST_OAM_HFLIP; sprite->pos1.x = 100; sprite->data[7] = 1; } @@ -4545,7 +4545,7 @@ void AnimForesightMagnifyingGlass(struct Sprite *sprite) } if (GetBattlerSide(sprite->data[7]) == B_SIDE_OPPONENT) - sprite->oam.matrixNum = 8; // horizontal flip + sprite->oam.matrixNum = ST_OAM_HFLIP; sprite->oam.priority = GetBattlerSpriteBGPriority(sprite->data[7]); sprite->oam.objMode = ST_OAM_OBJ_BLEND; diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index b73bfc36f..1be5def47 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -664,7 +664,7 @@ u32 sub_8057FBC(void) // unused static void HandleMoveSwitching(void) { - u8 perMovePPBonuses[4]; + u8 perMovePPBonuses[MAX_MON_MOVES]; struct ChooseMoveStruct moveStruct; u8 totalPPBonuses; diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 4b5bb7a8a..17db0b868 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -64,7 +64,7 @@ void SetUpBattleVarsAndBirchZigzagoon(void) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) { ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], SPECIES_ZIGZAGOON, 2, 32, 0, 0, 0, 0); + CreateMon(&gEnemyParty[0], SPECIES_ZIGZAGOON, 2, 32, 0, 0, OT_ID_PLAYER_ID, 0); i = 0; SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &i); } @@ -234,16 +234,16 @@ static void InitSinglePlayerBtlControllers(void) gBattleMainFunc = BeginBattleIntro; gBattlerControllerFuncs[0] = SetControllerToRecordedPlayer; - gBattlerPositions[0] = 0; + gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; gBattlerControllerFuncs[1] = SetControllerToOpponent; - gBattlerPositions[1] = 1; + gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; gBattlerControllerFuncs[2] = SetControllerToRecordedPlayer; - gBattlerPositions[2] = 2; + gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT; gBattlerControllerFuncs[3] = SetControllerToOpponent; - gBattlerPositions[3] = 3; + gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT; gBattlersCount = MAX_BATTLERS_COUNT; @@ -524,12 +524,12 @@ static void InitLinkBtlControllers(void) { case 0: case 3: - gBattlerPositions[gLinkPlayers[i].id] = 0; + gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT; gBattlerPartyIndexes[gLinkPlayers[i].id] = 0; break; case 1: case 2: - gBattlerPositions[gLinkPlayers[i].id] = 2; + gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT; gBattlerPartyIndexes[gLinkPlayers[i].id] = 3; break; } @@ -544,12 +544,12 @@ static void InitLinkBtlControllers(void) { case 0: case 3: - gBattlerPositions[gLinkPlayers[i].id] = 0; + gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT; gBattlerPartyIndexes[gLinkPlayers[i].id] = 0; break; case 1: case 2: - gBattlerPositions[gLinkPlayers[i].id] = 2; + gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT; gBattlerPartyIndexes[gLinkPlayers[i].id] = 3; break; } @@ -561,12 +561,12 @@ static void InitLinkBtlControllers(void) { case 0: case 3: - gBattlerPositions[gLinkPlayers[i].id] = 1; + gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_LEFT; gBattlerPartyIndexes[gLinkPlayers[i].id] = 0; break; case 1: case 2: - gBattlerPositions[gLinkPlayers[i].id] = 3; + gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_RIGHT; gBattlerPartyIndexes[gLinkPlayers[i].id] = 3; break; } diff --git a/src/battle_factory.c b/src/battle_factory.c index 6c249bccc..bc47b1fda 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -415,7 +415,7 @@ static void SetPlayerAndOpponentParties(void) monLevel, ivs, TRUE, gSaveBlock2Ptr->frontier.rentalMons[i].personality, - 0, 0); + OT_ID_PLAYER_ID, 0); count = 0; bits = gFacilityTrainerMons[monSetId].evSpread; @@ -456,7 +456,7 @@ static void SetPlayerAndOpponentParties(void) monLevel, ivs, TRUE, gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality, - 0, 0); + OT_ID_PLAYER_ID, 0); count = 0; bits = gFacilityTrainerMons[monSetId].evSpread; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index cdd7e8158..de403aec7 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -779,7 +779,7 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId) break; case 4: InitBattlerHealthboxCoords(*battlerId); - if (gBattlerPositions[*battlerId] <= 1) + if (gBattlerPositions[*battlerId] <= B_POSITION_OPPONENT_LEFT) DummyBattleInterfaceFunc(gHealthboxSpriteIds[*battlerId], FALSE); else DummyBattleInterfaceFunc(gHealthboxSpriteIds[*battlerId], TRUE); diff --git a/src/battle_interface.c b/src/battle_interface.c index 922437597..8fabfed68 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1536,7 +1536,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, if (isOpponent) { gSprites[summaryBarSpriteId].pos1.x -= 96; - gSprites[summaryBarSpriteId].oam.matrixNum = 8; + gSprites[summaryBarSpriteId].oam.matrixNum = ST_OAM_HFLIP; } else { diff --git a/src/battle_main.c b/src/battle_main.c index 498837e10..e623865f7 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1790,9 +1790,9 @@ static void CB2_HandleStartMultiBattle(void) gBattleCommunication[SPRITES_INIT_STATE2] = 0; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - for (id = 0; id < 4 && (gLinkPlayers[id].version & 0xFF) == 3; id++); + for (id = 0; id < MAX_LINK_PLAYERS && (gLinkPlayers[id].version & 0xFF) == VERSION_EMERALD; id++); - if (id == 4) + if (id == MAX_LINK_PLAYERS) gBattleCommunication[MULTIUSE_STATE] = 8; else gBattleCommunication[MULTIUSE_STATE] = 10; @@ -2004,7 +2004,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir personalityValue += nameHash << 8; fixedIV = partyData[i].iv * 31 / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, 2, 0); + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); for (j = 0; j < MAX_MON_MOVES; j++) { @@ -2022,7 +2022,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir personalityValue += nameHash << 8; fixedIV = partyData[i].iv * 31 / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, 2, 0); + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); break; @@ -2036,7 +2036,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir personalityValue += nameHash << 8; fixedIV = partyData[i].iv * 31 / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, 2, 0); + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); @@ -4025,7 +4025,7 @@ void BattleTurnPassed(void) if (gBattleOutcome != 0) { - gCurrentActionFuncId = 12; + gCurrentActionFuncId = B_ACTION_FINISHED; gBattleMainFunc = RunTurnActionsFunctions; return; } @@ -4244,7 +4244,7 @@ static void HandleTurnActionSelectionState(void) moveInfo.monType1 = gBattleMons[gActiveBattler].type1; moveInfo.monType2 = gBattleMons[gActiveBattler].type2; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { moveInfo.moves[i] = gBattleMons[gActiveBattler].moves[i]; moveInfo.currentPp[i] = gBattleMons[gActiveBattler].pp[i]; @@ -4979,7 +4979,7 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) static void RunTurnActionsFunctions(void) { if (gBattleOutcome != 0) - gCurrentActionFuncId = 12; + gCurrentActionFuncId = B_ACTION_FINISHED; *(&gBattleStruct->savedTurnActionNumber) = gCurrentTurnActionNumber; sTurnActionsFuncsTable[gCurrentActionFuncId](); @@ -5139,7 +5139,7 @@ static void HandleEndTurn_MonFled(void) static void HandleEndTurn_FinishBattle(void) { - if (gCurrentActionFuncId == 0xB || gCurrentActionFuncId == 0xC) + if (gCurrentActionFuncId == B_ACTION_TRY_FINISH || gCurrentActionFuncId == B_ACTION_FINISHED) { if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 @@ -5284,7 +5284,7 @@ static void ReturnFromBattleToOverworld(void) void RunBattleScriptCommands_PopCallbacksStack(void) { - if (gCurrentActionFuncId == 0xB || gCurrentActionFuncId == 0xC) + if (gCurrentActionFuncId == B_ACTION_TRY_FINISH || gCurrentActionFuncId == B_ACTION_FINISHED) { if (gBattleResources->battleCallbackStack->size != 0) gBattleResources->battleCallbackStack->size--; @@ -5592,7 +5592,7 @@ static void HandleAction_UseItem(void) else { PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK) - PREPARE_STRING_BUFFER(gBattleTextBuff2, 0xD2) + PREPARE_STRING_BUFFER(gBattleTextBuff2, CHAR_X) while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1)) { diff --git a/src/battle_pike.c b/src/battle_pike.c index 8846e2d1a..4e2be23e4 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -49,7 +49,7 @@ struct PikeWildMon { u16 species; u8 levelDelta; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; }; // IWRAM bss diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index cc722da8d..4d35f4244 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -77,7 +77,7 @@ struct PyramidWildMon u16 species; u8 lvl; u8 abilityNum; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; }; struct PyramidFloorTemplate diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 49b30ee6f..85ca4e167 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1681,29 +1681,22 @@ static void Cmd_adjustnormaldamage(void) RecordItemEffectBattle(gBattlerTarget, holdEffect); gSpecialStatuses[gBattlerTarget].focusBanded = 1; } - if (gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE) - goto END; - if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBattlerTarget].endured - && !gSpecialStatuses[gBattlerTarget].focusBanded) - goto END; - - if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage) - goto END; - - gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; - - if (gProtectStructs[gBattlerTarget].endured) + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE) + && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded) + && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage) { - gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED; - } - else if (gSpecialStatuses[gBattlerTarget].focusBanded) - { - gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; - gLastUsedItem = gBattleMons[gBattlerTarget].item; + gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; + if (gProtectStructs[gBattlerTarget].endured) + { + gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED; + } + else if (gSpecialStatuses[gBattlerTarget].focusBanded) + { + gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; + gLastUsedItem = gBattleMons[gBattlerTarget].item; + } } - - END: - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr++; } static void Cmd_adjustnormaldamage2(void) // The same as adjustnormaldamage except it doesn't check for false swipe move effect. @@ -1730,27 +1723,22 @@ static void Cmd_adjustnormaldamage2(void) // The same as adjustnormaldamage exce RecordItemEffectBattle(gBattlerTarget, holdEffect); gSpecialStatuses[gBattlerTarget].focusBanded = 1; } - if (gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE) - goto END; - if (!gProtectStructs[gBattlerTarget].endured && !gSpecialStatuses[gBattlerTarget].focusBanded) - goto END; - if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage) - goto END; - - gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; - - if (gProtectStructs[gBattlerTarget].endured) - { - gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED; - } - else if (gSpecialStatuses[gBattlerTarget].focusBanded) + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE) + && (gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded) + && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage) { - gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; - gLastUsedItem = gBattleMons[gBattlerTarget].item; + gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; + if (gProtectStructs[gBattlerTarget].endured) + { + gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED; + } + else if (gSpecialStatuses[gBattlerTarget].focusBanded) + { + gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; + gLastUsedItem = gBattleMons[gBattlerTarget].item; + } } - - END: - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr++; } static void Cmd_attackanimation(void) @@ -4564,27 +4552,26 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_CHOICE_MOVE: // update choice band move - if (!(gHitMarker & HITMARKER_OBEYS) || holdEffectAtk != HOLD_EFFECT_CHOICE_BAND - || gChosenMove == MOVE_STRUGGLE || (*choicedMoveAtk != 0 && *choicedMoveAtk != 0xFFFF)) - goto LOOP; - if (gChosenMove == MOVE_BATON_PASS && !(gMoveResultFlags & MOVE_RESULT_FAILED)) + if (gHitMarker & HITMARKER_OBEYS + && holdEffectAtk == HOLD_EFFECT_CHOICE_BAND + && gChosenMove != MOVE_STRUGGLE + && (*choicedMoveAtk == 0 || *choicedMoveAtk == 0xFFFF)) { - gBattleScripting.moveendState++; - break; - } - *choicedMoveAtk = gChosenMove; - LOOP: - { - for (i = 0; i < MAX_MON_MOVES; i++) + if (gChosenMove == MOVE_BATON_PASS && !(gMoveResultFlags & MOVE_RESULT_FAILED)) { - if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk) - break; + ++gBattleScripting.moveendState; + break; } - if (i == MAX_MON_MOVES) - *choicedMoveAtk = 0; - - gBattleScripting.moveendState++; + *choicedMoveAtk = gChosenMove; + } + for (i = 0; i < MAX_MON_MOVES; ++i) + { + if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk) + break; } + if (i == MAX_MON_MOVES) + *choicedMoveAtk = 0; + ++gBattleScripting.moveendState; break; case MOVEEND_CHANGED_ITEMS: // changed held items for (i = 0; i < gBattlersCount; i++) @@ -6152,29 +6139,22 @@ static void Cmd_adjustsetdamage(void) // The same as adjustnormaldamage, except RecordItemEffectBattle(gBattlerTarget, holdEffect); gSpecialStatuses[gBattlerTarget].focusBanded = 1; } - if (gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE) - goto END; - if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBattlerTarget].endured - && !gSpecialStatuses[gBattlerTarget].focusBanded) - goto END; - - if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage) - goto END; - - gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; - - if (gProtectStructs[gBattlerTarget].endured) - { - gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED; - } - else if (gSpecialStatuses[gBattlerTarget].focusBanded) + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE) + && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded) + && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage) { - gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; - gLastUsedItem = gBattleMons[gBattlerTarget].item; + gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; + if (gProtectStructs[gBattlerTarget].endured) + { + gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED; + } + else if (gSpecialStatuses[gBattlerTarget].focusBanded) + { + gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON; + gLastUsedItem = gBattleMons[gBattlerTarget].item; + } } - - END: - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr++; } static void Cmd_removeitem(void) @@ -10184,7 +10164,7 @@ static void Cmd_handleballthrow(void) gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); - if (CalculatePlayerPartyCount() == 6) + if (CalculatePlayerPartyCount() == PARTY_SIZE) gBattleCommunication[MULTISTRING_CHOOSER] = 0; else gBattleCommunication[MULTISTRING_CHOOSER] = 1; @@ -10196,7 +10176,7 @@ static void Cmd_handleballthrow(void) odds = Sqrt(Sqrt(16711680 / odds)); odds = 1048560 / odds; - for (shakes = 0; shakes < 4 && Random() < odds; shakes++); + for (shakes = 0; shakes < BALL_3_SHAKES_SUCCESS && Random() < odds; shakes++); if (gLastUsedItem == ITEM_MASTER_BALL) shakes = BALL_3_SHAKES_SUCCESS; // why calculate the shakes before that check? @@ -10209,7 +10189,7 @@ static void Cmd_handleballthrow(void) gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); - if (CalculatePlayerPartyCount() == 6) + if (CalculatePlayerPartyCount() == PARTY_SIZE) gBattleCommunication[MULTISTRING_CHOOSER] = 0; else gBattleCommunication[MULTISTRING_CHOOSER] = 1; @@ -10227,17 +10207,17 @@ static void Cmd_givecaughtmon(void) { if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]]) != MON_GIVEN_TO_PARTY) { - if (!sub_813B21C()) + if (!ShouldShowBoxWasFullMessage()) { gBattleCommunication[MULTISTRING_CHOOSER] = 0; - StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN))); + StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gStringVar2); } else { - StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN))); + StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); // box the mon was sent to GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gStringVar2); - StringCopy(gStringVar3, GetBoxNamePtr(get_unknown_box_id())); + StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon())); //box the mon was going to be sent to gBattleCommunication[MULTISTRING_CHOOSER] = 2; } diff --git a/src/battle_setup.c b/src/battle_setup.c index 288fdb3e9..c2d7cb6c6 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -231,86 +231,93 @@ static const struct TrainerBattleParameter sTrainerBContinueScriptBattleParams[] {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, }; +#define REMATCH(trainer1, trainer2, trainer3, trainer4, trainer5, map) \ +{ \ + .trainerIds = {trainer1, trainer2, trainer3, trainer4, trainer5}, \ + .mapGroup = MAP_GROUP(map), \ + .mapNum = MAP_NUM(map), \ +} + const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES] = { - [REMATCH_ROSE] = {{TRAINER_ROSE_1, TRAINER_ROSE_2, TRAINER_ROSE_3, TRAINER_ROSE_4, TRAINER_ROSE_5}, 0x0, 0x21}, - [REMATCH_ANDRES] = {{TRAINER_ANDRES_1, TRAINER_ANDRES_2, TRAINER_ANDRES_3, TRAINER_ANDRES_4, TRAINER_ANDRES_5}, 0x0, 0x14}, - [REMATCH_DUSTY] = {{TRAINER_DUSTY_1, TRAINER_DUSTY_2, TRAINER_DUSTY_3, TRAINER_DUSTY_4, TRAINER_DUSTY_5}, 0x0, 0x1a}, - [REMATCH_LOLA] = {{TRAINER_LOLA_1, TRAINER_LOLA_2, TRAINER_LOLA_3, TRAINER_LOLA_4, TRAINER_LOLA_5}, 0x0, 0x18}, - [REMATCH_RICKY] = {{TRAINER_RICKY_1, TRAINER_RICKY_2, TRAINER_RICKY_3, TRAINER_RICKY_4, TRAINER_RICKY_5}, 0x0, 0x18}, - [REMATCH_LILA_AND_ROY] = {{TRAINER_LILA_AND_ROY_1, TRAINER_LILA_AND_ROY_2, TRAINER_LILA_AND_ROY_3, TRAINER_LILA_AND_ROY_4, TRAINER_LILA_AND_ROY_5}, 0x0, 0x27}, - [REMATCH_CRISTIN] = {{TRAINER_CRISTIN_1, TRAINER_CRISTIN_2, TRAINER_CRISTIN_3, TRAINER_CRISTIN_4, TRAINER_CRISTIN_5}, 0x0, 0x24}, - [REMATCH_BROOKE] = {{TRAINER_BROOKE_1, TRAINER_BROOKE_2, TRAINER_BROOKE_3, TRAINER_BROOKE_4, TRAINER_BROOKE_5}, 0x0, 0x1a}, - [REMATCH_WILTON] = {{TRAINER_WILTON_1, TRAINER_WILTON_2, TRAINER_WILTON_3, TRAINER_WILTON_4, TRAINER_WILTON_5}, 0x0, 0x1a}, - [REMATCH_VALERIE] = {{TRAINER_VALERIE_1, TRAINER_VALERIE_2, TRAINER_VALERIE_3, TRAINER_VALERIE_4, TRAINER_VALERIE_5}, 0x18, 0x14}, - [REMATCH_CINDY] = {{TRAINER_CINDY_1, TRAINER_CINDY_3, TRAINER_CINDY_4, TRAINER_CINDY_5, TRAINER_CINDY_6}, 0x0, 0x13}, - [REMATCH_THALIA] = {{TRAINER_THALIA_1, TRAINER_THALIA_2, TRAINER_THALIA_3, TRAINER_THALIA_4, TRAINER_THALIA_5}, 0x18, 0x38}, - [REMATCH_JESSICA] = {{TRAINER_JESSICA_1, TRAINER_JESSICA_2, TRAINER_JESSICA_3, TRAINER_JESSICA_4, TRAINER_JESSICA_5}, 0x0, 0x24}, - [REMATCH_WINSTON] = {{TRAINER_WINSTON_1, TRAINER_WINSTON_2, TRAINER_WINSTON_3, TRAINER_WINSTON_4, TRAINER_WINSTON_5}, 0x0, 0x13}, - [REMATCH_STEVE] = {{TRAINER_STEVE_1, TRAINER_STEVE_2, TRAINER_STEVE_3, TRAINER_STEVE_4, TRAINER_STEVE_5}, 0x0, 0x1d}, - [REMATCH_TONY] = {{TRAINER_TONY_1, TRAINER_TONY_2, TRAINER_TONY_3, TRAINER_TONY_4, TRAINER_TONY_5}, 0x0, 0x16}, - [REMATCH_NOB] = {{TRAINER_NOB_1, TRAINER_NOB_2, TRAINER_NOB_3, TRAINER_NOB_4, TRAINER_NOB_5}, 0x0, 0x1e}, - [REMATCH_KOJI] = {{TRAINER_KOJI_1, TRAINER_KOJI_2, TRAINER_KOJI_3, TRAINER_KOJI_4, TRAINER_KOJI_5}, 0x0, 0x2a}, - [REMATCH_FERNANDO] = {{TRAINER_FERNANDO_1, TRAINER_FERNANDO_2, TRAINER_FERNANDO_3, TRAINER_FERNANDO_4, TRAINER_FERNANDO_5}, 0x0, 0x26}, - [REMATCH_DALTON] = {{TRAINER_DALTON_1, TRAINER_DALTON_2, TRAINER_DALTON_3, TRAINER_DALTON_4, TRAINER_DALTON_5}, 0x0, 0x21}, - [REMATCH_BERNIE] = {{TRAINER_BERNIE_1, TRAINER_BERNIE_2, TRAINER_BERNIE_3, TRAINER_BERNIE_4, TRAINER_BERNIE_5}, 0x0, 0x1d}, - [REMATCH_ETHAN] = {{TRAINER_ETHAN_1, TRAINER_ETHAN_2, TRAINER_ETHAN_3, TRAINER_ETHAN_4, TRAINER_ETHAN_5}, 0x18, 0xd}, - [REMATCH_JOHN_AND_JAY] = {{TRAINER_JOHN_AND_JAY_1, TRAINER_JOHN_AND_JAY_2, TRAINER_JOHN_AND_JAY_3, TRAINER_JOHN_AND_JAY_4, TRAINER_JOHN_AND_JAY_5}, 0x18, 0x1}, - [REMATCH_JEFFREY] = {{TRAINER_JEFFREY_1, TRAINER_JEFFREY_2, TRAINER_JEFFREY_3, TRAINER_JEFFREY_4, TRAINER_JEFFREY_5}, 0x0, 0x23}, - [REMATCH_CAMERON] = {{TRAINER_CAMERON_1, TRAINER_CAMERON_2, TRAINER_CAMERON_3, TRAINER_CAMERON_4, TRAINER_CAMERON_5}, 0x0, 0x26}, - [REMATCH_JACKI] = {{TRAINER_JACKI_1, TRAINER_JACKI_2, TRAINER_JACKI_3, TRAINER_JACKI_4, TRAINER_JACKI_5}, 0x0, 0x26}, - [REMATCH_WALTER] = {{TRAINER_WALTER_1, TRAINER_WALTER_2, TRAINER_WALTER_3, TRAINER_WALTER_4, TRAINER_WALTER_5}, 0x0, 0x24}, - [REMATCH_KAREN] = {{TRAINER_KAREN_1, TRAINER_KAREN_2, TRAINER_KAREN_3, TRAINER_KAREN_4, TRAINER_KAREN_5}, 0x0, 0x1f}, - [REMATCH_JERRY] = {{TRAINER_JERRY_1, TRAINER_JERRY_2, TRAINER_JERRY_3, TRAINER_JERRY_4, TRAINER_JERRY_5}, 0x0, 0x1f}, - [REMATCH_ANNA_AND_MEG] = {{TRAINER_ANNA_AND_MEG_1, TRAINER_ANNA_AND_MEG_2, TRAINER_ANNA_AND_MEG_3, TRAINER_ANNA_AND_MEG_4, TRAINER_ANNA_AND_MEG_5}, 0x0, 0x20}, - [REMATCH_ISABEL] = {{TRAINER_ISABEL_1, TRAINER_ISABEL_2, TRAINER_ISABEL_3, TRAINER_ISABEL_4, TRAINER_ISABEL_5}, 0x0, 0x19}, - [REMATCH_MIGUEL] = {{TRAINER_MIGUEL_1, TRAINER_MIGUEL_2, TRAINER_MIGUEL_3, TRAINER_MIGUEL_4, TRAINER_MIGUEL_5}, 0x0, 0x12}, - [REMATCH_TIMOTHY] = {{TRAINER_TIMOTHY_1, TRAINER_TIMOTHY_2, TRAINER_TIMOTHY_3, TRAINER_TIMOTHY_4, TRAINER_TIMOTHY_5}, 0x0, 0x1e}, - [REMATCH_SHELBY] = {{TRAINER_SHELBY_1, TRAINER_SHELBY_2, TRAINER_SHELBY_3, TRAINER_SHELBY_4, TRAINER_SHELBY_5}, 0x18, 0xc}, - [REMATCH_CALVIN] = {{TRAINER_CALVIN_1, TRAINER_CALVIN_2, TRAINER_CALVIN_3, TRAINER_CALVIN_4, TRAINER_CALVIN_5}, 0x0, 0x11}, - [REMATCH_ELLIOT] = {{TRAINER_ELLIOT_1, TRAINER_ELLIOT_2, TRAINER_ELLIOT_3, TRAINER_ELLIOT_4, TRAINER_ELLIOT_5}, 0x0, 0x15}, - [REMATCH_ISAIAH] = {{TRAINER_ISAIAH_1, TRAINER_ISAIAH_2, TRAINER_ISAIAH_3, TRAINER_ISAIAH_4, TRAINER_ISAIAH_5}, 0x0, 0x2b}, - [REMATCH_MARIA] = {{TRAINER_MARIA_1, TRAINER_MARIA_2, TRAINER_MARIA_3, TRAINER_MARIA_4, TRAINER_MARIA_5}, 0x0, 0x20}, - [REMATCH_ABIGAIL] = {{TRAINER_ABIGAIL_1, TRAINER_ABIGAIL_2, TRAINER_ABIGAIL_3, TRAINER_ABIGAIL_4, TRAINER_ABIGAIL_5}, 0x0, 0x19}, - [REMATCH_DYLAN] = {{TRAINER_DYLAN_1, TRAINER_DYLAN_2, TRAINER_DYLAN_3, TRAINER_DYLAN_4, TRAINER_DYLAN_5}, 0x0, 0x20}, - [REMATCH_KATELYN] = {{TRAINER_KATELYN_1, TRAINER_KATELYN_2, TRAINER_KATELYN_3, TRAINER_KATELYN_4, TRAINER_KATELYN_5}, 0x0, 0x2b}, - [REMATCH_BENJAMIN] = {{TRAINER_BENJAMIN_1, TRAINER_BENJAMIN_2, TRAINER_BENJAMIN_3, TRAINER_BENJAMIN_4, TRAINER_BENJAMIN_5}, 0x0, 0x19}, - [REMATCH_PABLO] = {{TRAINER_PABLO_1, TRAINER_PABLO_2, TRAINER_PABLO_3, TRAINER_PABLO_4, TRAINER_PABLO_5}, 0x0, 0x29}, - [REMATCH_NICOLAS] = {{TRAINER_NICOLAS_1, TRAINER_NICOLAS_2, TRAINER_NICOLAS_3, TRAINER_NICOLAS_4, TRAINER_NICOLAS_5}, 0x18, 0x1}, - [REMATCH_ROBERT] = {{TRAINER_ROBERT_1, TRAINER_ROBERT_2, TRAINER_ROBERT_3, TRAINER_ROBERT_4, TRAINER_ROBERT_5}, 0x0, 0x23}, - [REMATCH_LAO] = {{TRAINER_LAO_1, TRAINER_LAO_2, TRAINER_LAO_3, TRAINER_LAO_4, TRAINER_LAO_5}, 0x0, 0x1c}, - [REMATCH_CYNDY] = {{TRAINER_CYNDY_1, TRAINER_CYNDY_2, TRAINER_CYNDY_3, TRAINER_CYNDY_4, TRAINER_CYNDY_5}, 0x0, 0x1e}, - [REMATCH_MADELINE] = {{TRAINER_MADELINE_1, TRAINER_MADELINE_2, TRAINER_MADELINE_3, TRAINER_MADELINE_4, TRAINER_MADELINE_5}, 0x0, 0x1c}, - [REMATCH_JENNY] = {{TRAINER_JENNY_1, TRAINER_JENNY_2, TRAINER_JENNY_3, TRAINER_JENNY_4, TRAINER_JENNY_5}, 0x0, 0x27}, - [REMATCH_DIANA] = {{TRAINER_DIANA_1, TRAINER_DIANA_2, TRAINER_DIANA_3, TRAINER_DIANA_4, TRAINER_DIANA_5}, 0x18, 0xd}, - [REMATCH_AMY_AND_LIV] = {{TRAINER_AMY_AND_LIV_1, TRAINER_AMY_AND_LIV_2, TRAINER_AMY_AND_LIV_4, TRAINER_AMY_AND_LIV_5, TRAINER_AMY_AND_LIV_6}, 0x0, 0x12}, - [REMATCH_ERNEST] = {{TRAINER_ERNEST_1, TRAINER_ERNEST_2, TRAINER_ERNEST_3, TRAINER_ERNEST_4, TRAINER_ERNEST_5}, 0x0, 0x28}, - [REMATCH_CORY] = {{TRAINER_CORY_1, TRAINER_CORY_2, TRAINER_CORY_3, TRAINER_CORY_4, TRAINER_CORY_5}, 0x0, 0x17}, - [REMATCH_EDWIN] = {{TRAINER_EDWIN_1, TRAINER_EDWIN_2, TRAINER_EDWIN_3, TRAINER_EDWIN_4, TRAINER_EDWIN_5}, 0x0, 0x19}, - [REMATCH_LYDIA] = {{TRAINER_LYDIA_1, TRAINER_LYDIA_2, TRAINER_LYDIA_3, TRAINER_LYDIA_4, TRAINER_LYDIA_5}, 0x0, 0x20}, - [REMATCH_ISAAC] = {{TRAINER_ISAAC_1, TRAINER_ISAAC_2, TRAINER_ISAAC_3, TRAINER_ISAAC_4, TRAINER_ISAAC_5}, 0x0, 0x20}, - [REMATCH_GABRIELLE] = {{TRAINER_GABRIELLE_1, TRAINER_GABRIELLE_2, TRAINER_GABRIELLE_3, TRAINER_GABRIELLE_4, TRAINER_GABRIELLE_5}, 0x18, 0x11}, - [REMATCH_CATHERINE] = {{TRAINER_CATHERINE_1, TRAINER_CATHERINE_2, TRAINER_CATHERINE_3, TRAINER_CATHERINE_4, TRAINER_CATHERINE_5}, 0x0, 0x22}, - [REMATCH_JACKSON] = {{TRAINER_JACKSON_1, TRAINER_JACKSON_2, TRAINER_JACKSON_3, TRAINER_JACKSON_4, TRAINER_JACKSON_5}, 0x0, 0x22}, - [REMATCH_HALEY] = {{TRAINER_HALEY_1, TRAINER_HALEY_2, TRAINER_HALEY_3, TRAINER_HALEY_4, TRAINER_HALEY_5}, 0x0, 0x13}, - [REMATCH_JAMES] = {{TRAINER_JAMES_1, TRAINER_JAMES_2, TRAINER_JAMES_3, TRAINER_JAMES_4, TRAINER_JAMES_5}, 0x18, 0xb}, - [REMATCH_TRENT] = {{TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5}, 0x0, 0x1b}, - [REMATCH_SAWYER] = {{TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5}, 0x18, 0xc}, - [REMATCH_KIRA_AND_DAN] = {{TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5}, 0x18, 0x3e}, - [REMATCH_WALLY_3] = {{TRAINER_WALLY_3, TRAINER_WALLY_4, TRAINER_WALLY_5, TRAINER_WALLY_6, TRAINER_WALLY_6}, 0x18, 0x2b}, - [REMATCH_ROXANNE] = {{TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5}, 0x0, 0x3}, - [REMATCH_BRAWLY] = {{TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5}, 0x0, 0xb}, - [REMATCH_WATTSON] = {{TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5}, 0x0, 0x2}, - [REMATCH_FLANNERY] = {{TRAINER_FLANNERY_1, TRAINER_FLANNERY_2, TRAINER_FLANNERY_3, TRAINER_FLANNERY_4, TRAINER_FLANNERY_5}, 0x0, 0xc}, - [REMATCH_NORMAN] = {{TRAINER_NORMAN_1, TRAINER_NORMAN_2, TRAINER_NORMAN_3, TRAINER_NORMAN_4, TRAINER_NORMAN_5}, 0x0, 0x0}, - [REMATCH_WINONA] = {{TRAINER_WINONA_1, TRAINER_WINONA_2, TRAINER_WINONA_3, TRAINER_WINONA_4, TRAINER_WINONA_5}, 0x0, 0x4}, - [REMATCH_TATE_AND_LIZA] = {{TRAINER_TATE_AND_LIZA_1, TRAINER_TATE_AND_LIZA_2, TRAINER_TATE_AND_LIZA_3, TRAINER_TATE_AND_LIZA_4, TRAINER_TATE_AND_LIZA_5}, 0x0, 0x6}, - [REMATCH_JUAN] = {{TRAINER_JUAN_1, TRAINER_JUAN_2, TRAINER_JUAN_3, TRAINER_JUAN_4, TRAINER_JUAN_5}, 0x0, 0x7}, - [REMATCH_SIDNEY] = {{TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY}, 0x0, 0x8}, - [REMATCH_PHOEBE] = {{TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE}, 0x0, 0x8}, - [REMATCH_GLACIA] = {{TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA}, 0x0, 0x8}, - [REMATCH_DRAKE] = {{TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE}, 0x0, 0x8}, - [REMATCH_WALLACE] = {{TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE}, 0x0, 0x8}, + [REMATCH_ROSE] = REMATCH(TRAINER_ROSE_1, TRAINER_ROSE_2, TRAINER_ROSE_3, TRAINER_ROSE_4, TRAINER_ROSE_5, ROUTE118), + [REMATCH_ANDRES] = REMATCH(TRAINER_ANDRES_1, TRAINER_ANDRES_2, TRAINER_ANDRES_3, TRAINER_ANDRES_4, TRAINER_ANDRES_5, ROUTE105), + [REMATCH_DUSTY] = REMATCH(TRAINER_DUSTY_1, TRAINER_DUSTY_2, TRAINER_DUSTY_3, TRAINER_DUSTY_4, TRAINER_DUSTY_5, ROUTE111), + [REMATCH_LOLA] = REMATCH(TRAINER_LOLA_1, TRAINER_LOLA_2, TRAINER_LOLA_3, TRAINER_LOLA_4, TRAINER_LOLA_5, ROUTE109), + [REMATCH_RICKY] = REMATCH(TRAINER_RICKY_1, TRAINER_RICKY_2, TRAINER_RICKY_3, TRAINER_RICKY_4, TRAINER_RICKY_5, ROUTE109), + [REMATCH_LILA_AND_ROY] = REMATCH(TRAINER_LILA_AND_ROY_1, TRAINER_LILA_AND_ROY_2, TRAINER_LILA_AND_ROY_3, TRAINER_LILA_AND_ROY_4, TRAINER_LILA_AND_ROY_5, ROUTE124), + [REMATCH_CRISTIN] = REMATCH(TRAINER_CRISTIN_1, TRAINER_CRISTIN_2, TRAINER_CRISTIN_3, TRAINER_CRISTIN_4, TRAINER_CRISTIN_5, ROUTE121), + [REMATCH_BROOKE] = REMATCH(TRAINER_BROOKE_1, TRAINER_BROOKE_2, TRAINER_BROOKE_3, TRAINER_BROOKE_4, TRAINER_BROOKE_5, ROUTE111), + [REMATCH_WILTON] = REMATCH(TRAINER_WILTON_1, TRAINER_WILTON_2, TRAINER_WILTON_3, TRAINER_WILTON_4, TRAINER_WILTON_5, ROUTE111), + [REMATCH_VALERIE] = REMATCH(TRAINER_VALERIE_1, TRAINER_VALERIE_2, TRAINER_VALERIE_3, TRAINER_VALERIE_4, TRAINER_VALERIE_5, MT_PYRE_6F), + [REMATCH_CINDY] = REMATCH(TRAINER_CINDY_1, TRAINER_CINDY_3, TRAINER_CINDY_4, TRAINER_CINDY_5, TRAINER_CINDY_6, ROUTE104), + [REMATCH_THALIA] = REMATCH(TRAINER_THALIA_1, TRAINER_THALIA_2, TRAINER_THALIA_3, TRAINER_THALIA_4, TRAINER_THALIA_5, ABANDONED_SHIP_ROOMS_1F), + [REMATCH_JESSICA] = REMATCH(TRAINER_JESSICA_1, TRAINER_JESSICA_2, TRAINER_JESSICA_3, TRAINER_JESSICA_4, TRAINER_JESSICA_5, ROUTE121), + [REMATCH_WINSTON] = REMATCH(TRAINER_WINSTON_1, TRAINER_WINSTON_2, TRAINER_WINSTON_3, TRAINER_WINSTON_4, TRAINER_WINSTON_5, ROUTE104), + [REMATCH_STEVE] = REMATCH(TRAINER_STEVE_1, TRAINER_STEVE_2, TRAINER_STEVE_3, TRAINER_STEVE_4, TRAINER_STEVE_5, ROUTE114), + [REMATCH_TONY] = REMATCH(TRAINER_TONY_1, TRAINER_TONY_2, TRAINER_TONY_3, TRAINER_TONY_4, TRAINER_TONY_5, ROUTE107), + [REMATCH_NOB] = REMATCH(TRAINER_NOB_1, TRAINER_NOB_2, TRAINER_NOB_3, TRAINER_NOB_4, TRAINER_NOB_5, ROUTE115), + [REMATCH_KOJI] = REMATCH(TRAINER_KOJI_1, TRAINER_KOJI_2, TRAINER_KOJI_3, TRAINER_KOJI_4, TRAINER_KOJI_5, ROUTE127), + [REMATCH_FERNANDO] = REMATCH(TRAINER_FERNANDO_1, TRAINER_FERNANDO_2, TRAINER_FERNANDO_3, TRAINER_FERNANDO_4, TRAINER_FERNANDO_5, ROUTE123), + [REMATCH_DALTON] = REMATCH(TRAINER_DALTON_1, TRAINER_DALTON_2, TRAINER_DALTON_3, TRAINER_DALTON_4, TRAINER_DALTON_5, ROUTE118), + [REMATCH_BERNIE] = REMATCH(TRAINER_BERNIE_1, TRAINER_BERNIE_2, TRAINER_BERNIE_3, TRAINER_BERNIE_4, TRAINER_BERNIE_5, ROUTE114), + [REMATCH_ETHAN] = REMATCH(TRAINER_ETHAN_1, TRAINER_ETHAN_2, TRAINER_ETHAN_3, TRAINER_ETHAN_4, TRAINER_ETHAN_5, JAGGED_PASS), + [REMATCH_JOHN_AND_JAY] = REMATCH(TRAINER_JOHN_AND_JAY_1, TRAINER_JOHN_AND_JAY_2, TRAINER_JOHN_AND_JAY_3, TRAINER_JOHN_AND_JAY_4, TRAINER_JOHN_AND_JAY_5, METEOR_FALLS_1F_2R), + [REMATCH_JEFFREY] = REMATCH(TRAINER_JEFFREY_1, TRAINER_JEFFREY_2, TRAINER_JEFFREY_3, TRAINER_JEFFREY_4, TRAINER_JEFFREY_5, ROUTE120), + [REMATCH_CAMERON] = REMATCH(TRAINER_CAMERON_1, TRAINER_CAMERON_2, TRAINER_CAMERON_3, TRAINER_CAMERON_4, TRAINER_CAMERON_5, ROUTE123), + [REMATCH_JACKI] = REMATCH(TRAINER_JACKI_1, TRAINER_JACKI_2, TRAINER_JACKI_3, TRAINER_JACKI_4, TRAINER_JACKI_5, ROUTE123), + [REMATCH_WALTER] = REMATCH(TRAINER_WALTER_1, TRAINER_WALTER_2, TRAINER_WALTER_3, TRAINER_WALTER_4, TRAINER_WALTER_5, ROUTE121), + [REMATCH_KAREN] = REMATCH(TRAINER_KAREN_1, TRAINER_KAREN_2, TRAINER_KAREN_3, TRAINER_KAREN_4, TRAINER_KAREN_5, ROUTE116), + [REMATCH_JERRY] = REMATCH(TRAINER_JERRY_1, TRAINER_JERRY_2, TRAINER_JERRY_3, TRAINER_JERRY_4, TRAINER_JERRY_5, ROUTE116), + [REMATCH_ANNA_AND_MEG] = REMATCH(TRAINER_ANNA_AND_MEG_1, TRAINER_ANNA_AND_MEG_2, TRAINER_ANNA_AND_MEG_3, TRAINER_ANNA_AND_MEG_4, TRAINER_ANNA_AND_MEG_5, ROUTE117), + [REMATCH_ISABEL] = REMATCH(TRAINER_ISABEL_1, TRAINER_ISABEL_2, TRAINER_ISABEL_3, TRAINER_ISABEL_4, TRAINER_ISABEL_5, ROUTE110), + [REMATCH_MIGUEL] = REMATCH(TRAINER_MIGUEL_1, TRAINER_MIGUEL_2, TRAINER_MIGUEL_3, TRAINER_MIGUEL_4, TRAINER_MIGUEL_5, ROUTE103), + [REMATCH_TIMOTHY] = REMATCH(TRAINER_TIMOTHY_1, TRAINER_TIMOTHY_2, TRAINER_TIMOTHY_3, TRAINER_TIMOTHY_4, TRAINER_TIMOTHY_5, ROUTE115), + [REMATCH_SHELBY] = REMATCH(TRAINER_SHELBY_1, TRAINER_SHELBY_2, TRAINER_SHELBY_3, TRAINER_SHELBY_4, TRAINER_SHELBY_5, MT_CHIMNEY), + [REMATCH_CALVIN] = REMATCH(TRAINER_CALVIN_1, TRAINER_CALVIN_2, TRAINER_CALVIN_3, TRAINER_CALVIN_4, TRAINER_CALVIN_5, ROUTE102), + [REMATCH_ELLIOT] = REMATCH(TRAINER_ELLIOT_1, TRAINER_ELLIOT_2, TRAINER_ELLIOT_3, TRAINER_ELLIOT_4, TRAINER_ELLIOT_5, ROUTE106), + [REMATCH_ISAIAH] = REMATCH(TRAINER_ISAIAH_1, TRAINER_ISAIAH_2, TRAINER_ISAIAH_3, TRAINER_ISAIAH_4, TRAINER_ISAIAH_5, ROUTE128), + [REMATCH_MARIA] = REMATCH(TRAINER_MARIA_1, TRAINER_MARIA_2, TRAINER_MARIA_3, TRAINER_MARIA_4, TRAINER_MARIA_5, ROUTE117), + [REMATCH_ABIGAIL] = REMATCH(TRAINER_ABIGAIL_1, TRAINER_ABIGAIL_2, TRAINER_ABIGAIL_3, TRAINER_ABIGAIL_4, TRAINER_ABIGAIL_5, ROUTE110), + [REMATCH_DYLAN] = REMATCH(TRAINER_DYLAN_1, TRAINER_DYLAN_2, TRAINER_DYLAN_3, TRAINER_DYLAN_4, TRAINER_DYLAN_5, ROUTE117), + [REMATCH_KATELYN] = REMATCH(TRAINER_KATELYN_1, TRAINER_KATELYN_2, TRAINER_KATELYN_3, TRAINER_KATELYN_4, TRAINER_KATELYN_5, ROUTE128), + [REMATCH_BENJAMIN] = REMATCH(TRAINER_BENJAMIN_1, TRAINER_BENJAMIN_2, TRAINER_BENJAMIN_3, TRAINER_BENJAMIN_4, TRAINER_BENJAMIN_5, ROUTE110), + [REMATCH_PABLO] = REMATCH(TRAINER_PABLO_1, TRAINER_PABLO_2, TRAINER_PABLO_3, TRAINER_PABLO_4, TRAINER_PABLO_5, ROUTE126), + [REMATCH_NICOLAS] = REMATCH(TRAINER_NICOLAS_1, TRAINER_NICOLAS_2, TRAINER_NICOLAS_3, TRAINER_NICOLAS_4, TRAINER_NICOLAS_5, METEOR_FALLS_1F_2R), + [REMATCH_ROBERT] = REMATCH(TRAINER_ROBERT_1, TRAINER_ROBERT_2, TRAINER_ROBERT_3, TRAINER_ROBERT_4, TRAINER_ROBERT_5, ROUTE120), + [REMATCH_LAO] = REMATCH(TRAINER_LAO_1, TRAINER_LAO_2, TRAINER_LAO_3, TRAINER_LAO_4, TRAINER_LAO_5, ROUTE113), + [REMATCH_CYNDY] = REMATCH(TRAINER_CYNDY_1, TRAINER_CYNDY_2, TRAINER_CYNDY_3, TRAINER_CYNDY_4, TRAINER_CYNDY_5, ROUTE115), + [REMATCH_MADELINE] = REMATCH(TRAINER_MADELINE_1, TRAINER_MADELINE_2, TRAINER_MADELINE_3, TRAINER_MADELINE_4, TRAINER_MADELINE_5, ROUTE113), + [REMATCH_JENNY] = REMATCH(TRAINER_JENNY_1, TRAINER_JENNY_2, TRAINER_JENNY_3, TRAINER_JENNY_4, TRAINER_JENNY_5, ROUTE124), + [REMATCH_DIANA] = REMATCH(TRAINER_DIANA_1, TRAINER_DIANA_2, TRAINER_DIANA_3, TRAINER_DIANA_4, TRAINER_DIANA_5, JAGGED_PASS), + [REMATCH_AMY_AND_LIV] = REMATCH(TRAINER_AMY_AND_LIV_1, TRAINER_AMY_AND_LIV_2, TRAINER_AMY_AND_LIV_4, TRAINER_AMY_AND_LIV_5, TRAINER_AMY_AND_LIV_6, ROUTE103), + [REMATCH_ERNEST] = REMATCH(TRAINER_ERNEST_1, TRAINER_ERNEST_2, TRAINER_ERNEST_3, TRAINER_ERNEST_4, TRAINER_ERNEST_5, ROUTE125), + [REMATCH_CORY] = REMATCH(TRAINER_CORY_1, TRAINER_CORY_2, TRAINER_CORY_3, TRAINER_CORY_4, TRAINER_CORY_5, ROUTE108), + [REMATCH_EDWIN] = REMATCH(TRAINER_EDWIN_1, TRAINER_EDWIN_2, TRAINER_EDWIN_3, TRAINER_EDWIN_4, TRAINER_EDWIN_5, ROUTE110), + [REMATCH_LYDIA] = REMATCH(TRAINER_LYDIA_1, TRAINER_LYDIA_2, TRAINER_LYDIA_3, TRAINER_LYDIA_4, TRAINER_LYDIA_5, ROUTE117), + [REMATCH_ISAAC] = REMATCH(TRAINER_ISAAC_1, TRAINER_ISAAC_2, TRAINER_ISAAC_3, TRAINER_ISAAC_4, TRAINER_ISAAC_5, ROUTE117), + [REMATCH_GABRIELLE] = REMATCH(TRAINER_GABRIELLE_1, TRAINER_GABRIELLE_2, TRAINER_GABRIELLE_3, TRAINER_GABRIELLE_4, TRAINER_GABRIELLE_5, MT_PYRE_3F), + [REMATCH_CATHERINE] = REMATCH(TRAINER_CATHERINE_1, TRAINER_CATHERINE_2, TRAINER_CATHERINE_3, TRAINER_CATHERINE_4, TRAINER_CATHERINE_5, ROUTE119), + [REMATCH_JACKSON] = REMATCH(TRAINER_JACKSON_1, TRAINER_JACKSON_2, TRAINER_JACKSON_3, TRAINER_JACKSON_4, TRAINER_JACKSON_5, ROUTE119), + [REMATCH_HALEY] = REMATCH(TRAINER_HALEY_1, TRAINER_HALEY_2, TRAINER_HALEY_3, TRAINER_HALEY_4, TRAINER_HALEY_5, ROUTE104), + [REMATCH_JAMES] = REMATCH(TRAINER_JAMES_1, TRAINER_JAMES_2, TRAINER_JAMES_3, TRAINER_JAMES_4, TRAINER_JAMES_5, PETALBURG_WOODS), + [REMATCH_TRENT] = REMATCH(TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5, ROUTE112), + [REMATCH_SAWYER] = REMATCH(TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5, MT_CHIMNEY), + [REMATCH_KIRA_AND_DAN] = REMATCH(TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5, ABANDONED_SHIP_ROOMS2_1F), + [REMATCH_WALLY_3] = REMATCH(TRAINER_WALLY_3, TRAINER_WALLY_4, TRAINER_WALLY_5, TRAINER_WALLY_6, TRAINER_WALLY_6, VICTORY_ROAD_1F), + [REMATCH_ROXANNE] = REMATCH(TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5, RUSTBORO_CITY), + [REMATCH_BRAWLY] = REMATCH(TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5, DEWFORD_TOWN), + [REMATCH_WATTSON] = REMATCH(TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5, MAUVILLE_CITY), + [REMATCH_FLANNERY] = REMATCH(TRAINER_FLANNERY_1, TRAINER_FLANNERY_2, TRAINER_FLANNERY_3, TRAINER_FLANNERY_4, TRAINER_FLANNERY_5, LAVARIDGE_TOWN), + [REMATCH_NORMAN] = REMATCH(TRAINER_NORMAN_1, TRAINER_NORMAN_2, TRAINER_NORMAN_3, TRAINER_NORMAN_4, TRAINER_NORMAN_5, PETALBURG_CITY), + [REMATCH_WINONA] = REMATCH(TRAINER_WINONA_1, TRAINER_WINONA_2, TRAINER_WINONA_3, TRAINER_WINONA_4, TRAINER_WINONA_5, FORTREE_CITY), + [REMATCH_TATE_AND_LIZA] = REMATCH(TRAINER_TATE_AND_LIZA_1, TRAINER_TATE_AND_LIZA_2, TRAINER_TATE_AND_LIZA_3, TRAINER_TATE_AND_LIZA_4, TRAINER_TATE_AND_LIZA_5, MOSSDEEP_CITY), + [REMATCH_JUAN] = REMATCH(TRAINER_JUAN_1, TRAINER_JUAN_2, TRAINER_JUAN_3, TRAINER_JUAN_4, TRAINER_JUAN_5, SOOTOPOLIS_CITY), + [REMATCH_SIDNEY] = REMATCH(TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, EVER_GRANDE_CITY), + [REMATCH_PHOEBE] = REMATCH(TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, EVER_GRANDE_CITY), + [REMATCH_GLACIA] = REMATCH(TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, EVER_GRANDE_CITY), + [REMATCH_DRAKE] = REMATCH(TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, EVER_GRANDE_CITY), + [REMATCH_WALLACE] = REMATCH(TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, EVER_GRANDE_CITY), }; static const u16 sBadgeFlags[8] = diff --git a/src/battle_tower.c b/src/battle_tower.c index 6f8e3e25f..c55180965 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1019,7 +1019,7 @@ struct u8 level; u8 nature; u8 evs[6]; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; } const sStevenMons[3] = { { @@ -1561,7 +1561,7 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm) for (i = 0; i < 5; i++) { k = 0; - for (j = 0; j < 4; j++) + for (j = 0; j < TRAINER_ID_LENGTH; j++) { if (gSaveBlock2Ptr->frontier.towerRecords[i].trainerId[j] != newRecord->trainerId[j]) break; @@ -3190,7 +3190,7 @@ static void FillPartnerParty(u16 trainerId) sStevenMons[i].level, sStevenMons[i].fixedIV, TRUE, i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures. - TRUE, STEVEN_OTID); + OT_ID_PRESET, STEVEN_OTID); for (j = 0; j < 6; j++) SetMonData(&gPlayerParty[3 + i], MON_DATA_HP_EV + j, &sStevenMons[i].evs[j]); for (j = 0; j < MAX_MON_MOVES; j++) @@ -3308,7 +3308,7 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) dst->name[i] = src->name[i]; - for (i = 0; i < 4; i++) + for (i = 0; i < TRAINER_ID_LENGTH; i++) dst->trainerId[i] = src->trainerId[i]; for (i = 0; i < 6; i++) dst->greeting[i] = src->greeting[i]; @@ -3357,7 +3357,7 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) dst->name[i] = src->name[i]; - for (i = 0; i < 4; i++) + for (i = 0; i < TRAINER_ID_LENGTH; i++) dst->trainerId[i] = src->trainerId[i]; for (i = 0; i < 6; i++) dst->greeting[i] = src->greeting[i]; diff --git a/src/battle_transition.c b/src/battle_transition.c index 3e86fcf51..fb7fd0c2f 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1961,9 +1961,10 @@ static bool8 Phase2_Ripple_Func2(struct Task *task) for (i = 0; i < 160; i++, r4 += r8) { - // todo: fix the asm s16 var = r4 >> 8; - asm(""); + + var++; + var--; gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(var, r3); } diff --git a/src/battle_util.c b/src/battle_util.c index 6ef51bfd2..2d9693766 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1,30 +1,30 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" -#include "constants/battle_script_commands.h" -#include "constants/abilities.h" -#include "constants/moves.h" -#include "constants/hold_effects.h" -#include "constants/battle_anim.h" #include "pokemon.h" -#include "constants/species.h" #include "item.h" -#include "constants/items.h" #include "util.h" -#include "constants/battle_move_effects.h" #include "battle_scripts.h" #include "random.h" #include "text.h" #include "string_util.h" #include "battle_message.h" -#include "constants/battle_string_ids.h" -#include "constants/weather.h" #include "battle_ai_script_commands.h" #include "battle_controllers.h" #include "event_data.h" #include "link.h" -#include "berry.h" #include "field_weather.h" +#include "constants/abilities.h" +#include "constants/battle_anim.h" +#include "constants/battle_move_effects.h" +#include "constants/battle_script_commands.h" +#include "constants/battle_string_ids.h" +#include "constants/berry.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/species.h" +#include "constants/weather.h" // rom const data static const u16 sSoundMovesTable[] = diff --git a/src/berry.c b/src/berry.c index 49acb7d10..bbaa2b03b 100644 --- a/src/berry.c +++ b/src/berry.c @@ -11,6 +11,7 @@ #include "random.h" #include "string_util.h" #include "text.h" +#include "constants/berry.h" #include "constants/event_object_movement_constants.h" #include "constants/items.h" diff --git a/src/berry_blender.c b/src/berry_blender.c index 03764b2f8..911c3e545 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -36,6 +36,7 @@ #include "new_game.h" #include "save.h" #include "link.h" +#include "constants/berry.h" #include "constants/rgb.h" #define BLENDER_SCORE_BEST 0 diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index c3eac783d..10a45dc65 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -4,7 +4,6 @@ #include "decompress.h" #include "event_object_movement.h" #include "item_menu.h" -#include "constants/items.h" #include "item.h" #include "item_use.h" #include "main.h" @@ -15,7 +14,6 @@ #include "menu_helpers.h" #include "palette.h" #include "overworld.h" -#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "string_util.h" @@ -28,7 +26,10 @@ #include "item_menu_icons.h" #include "decompress.h" #include "international_string_util.h" +#include "constants/berry.h" +#include "constants/items.h" #include "constants/rgb.h" +#include "constants/songs.h" // There are 4 windows used in berry tag screen. enum @@ -1174,78 +1174,29 @@ u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32 return (y * 0x20) + x; } -#ifdef NONMATCHING // This one has some weird switch statement cases that refuse to cooperate void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2) { u16 var; + + if (palette1 == 16) + goto CASE_16; switch (palette1) { case 0 ... 16: - if (palette1 != 16) - var = ((*src + tileOffset) & 0xFFF) + ((palette1 + palette2) << 12); - else - var = ((*dest & 0xFC00) + (palette2 << 12)) | ((*src + tileOffset) & 0x3FF); + var = ((*src + tileOffset) & 0xFFF) + ((palette1 + palette2) << 12); + break; + CASE_16: + var = *dest; + var &= 0xFC00; + var += palette2 << 12; + var |= (*src + tileOffset) & 0x3FF; break; default: var = *src + tileOffset + (palette2 << 12); break; } - *dest = var; } -#else -NAKED -void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2) -{ - asm("push {r4-r6,lr}\n\ - add r4, r0, #0\n\ - add r6, r1, #0\n\ - ldr r5, [sp, #0x10]\n\ - cmp r2, #0x10\n\ - beq _08002B14\n\ - cmp r2, #0x10\n\ - bgt _08002B34\n\ - cmp r2, #0\n\ - blt _08002B34\n\ - ldrh r0, [r4]\n\ - add r0, r3\n\ - ldr r3, =0x00000fff\n\ - add r1, r3, #0\n\ - and r0, r1\n\ - add r1, r2, r5\n\ - lsl r1, #12\n\ - b _08002B3A\n\ - .pool\n\ -_08002B14:\n\ - ldrh r1, [r6]\n\ - mov r0, #0xFC\n\ - lsl r0, #8\n\ - and r1, r0\n\ - lsl r2, r5, #12\n\ - add r2, r1, r2\n\ - ldrh r0, [r4]\n\ - add r0, r3\n\ - ldr r3, =0x000003ff\n\ - add r1, r3, #0\n\ - and r0, r1\n\ - orr r0, r2\n\ - b _08002B3C\n\ - .pool\n\ -_08002B34:\n\ - ldrh r0, [r4]\n\ - add r0, r3\n\ - lsl r1, r5, #12\n\ -_08002B3A:\n\ - add r0, r1\n\ -_08002B3C:\n\ - lsl r0, #16\n\ - lsr r1, r0, #16\n\ - strh r1, [r6]\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n"); -} -#endif // NONMATCHING u32 GetBgType(u8 bg) { diff --git a/src/clock.c b/src/clock.c index 1e7c5f83e..125d403bb 100644 --- a/src/clock.c +++ b/src/clock.c @@ -25,7 +25,7 @@ static void InitTimeBasedEvents(void) void DoTimeBasedEvents(void) { - if (FlagGet(FLAG_SYS_CLOCK_SET) && !sub_813B9C0()) + if (FlagGet(FLAG_SYS_CLOCK_SET) && !InPokemonCenter()) { RtcCalcLocalTime(); UpdatePerDay(&gLocalTime); diff --git a/src/contest.c b/src/contest.c index 662a27060..79c1616c2 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1217,10 +1217,10 @@ static bool8 SetupContestGraphics(u8 *stateVar) CreateApplauseMeterSprite(); sub_80DC5E8(); sub_80DC7EC(); - gBattlerPositions[0] = 0; - gBattlerPositions[1] = 1; - gBattlerPositions[2] = 3; - gBattlerPositions[3] = 2; + gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; + gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; + gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT; + gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT; gBattleTypeFlags = 0; gBattlerAttacker = 2; gBattlerTarget = 3; diff --git a/src/contest_painting.c b/src/contest_painting.c index 66127cbbc..1b95e1ed9 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -292,7 +292,7 @@ static void PrintContestPaintingCaption(u8 contestType, u8 arg1) category = gUnknown_030061C0->contestCategory; if (contestType < 8) { - sub_818E868(gStringVar1, category); + BufferContestName(gStringVar1, category); StringAppend(gStringVar1, gText_Space); StringAppend(gStringVar1, gContestRankTextPointers[gUnknown_030061C0->contestRank]); StringCopy(gStringVar2, gUnknown_030061C0->trainerName); diff --git a/src/credits.c b/src/credits.c index 1e96514b1..44fa2002c 100644 --- a/src/credits.c +++ b/src/credits.c @@ -143,7 +143,7 @@ struct Unk201C000 struct CreditsEntry { u8 var_0; - u8 var_1; + bool8 isTitle; const u8 *text; }; @@ -165,7 +165,7 @@ static const u32 gCreditsCopyrightEnd_Gfx[] = INCBIN_U32("graphics/credits/the_e static void sub_81772B8(struct Sprite *sprite); -static const u8 gUnknown_085E5BAC[] = +static const u8 sTheEnd_LetterTMap[] = { 0, 1, 0, 0xFF, 1, 0xFF, @@ -174,7 +174,7 @@ static const u8 gUnknown_085E5BAC[] = 0xFF, 1, 0xFF, }; -static const u8 gUnknown_085E5BBB[] = +static const u8 sTheEnd_LetterHMap[] = { 1, 0xFF, 1, 1, 0xFF, 1, @@ -183,7 +183,7 @@ static const u8 gUnknown_085E5BBB[] = 1, 0xFF, 1, }; -static const u8 gUnknown_085E5BCA[] = +static const u8 sTheEnd_LetterEMap[] = { 1, 0, 0, 1, 0xFF, 0xFF, @@ -192,7 +192,7 @@ static const u8 gUnknown_085E5BCA[] = 1, 0x80, 0x80, }; -static const u8 gUnknown_085E5BD9[] = +static const u8 sTheEnd_LetterNMap[] = { 1, 3, 1, 1, 4, 1, @@ -201,7 +201,7 @@ static const u8 gUnknown_085E5BD9[] = 1, 0xC3, 1, }; -static const u8 gUnknown_085E5BE8[] = +static const u8 sTheEnd_LetterDMap[] = { 1, 6, 7, 1, 8, 9, @@ -369,165 +369,165 @@ static const u8 gCreditsText_MotoyasuTojima[] = _("Motoyasu Tojima"); static const u8 gCreditsText_NicolaPrattBarlow[] = _("Nicola Pratt-Barlow"); static const u8 gCreditsText_ShellieDow[] = _("Shellie Dow"); static const u8 gCreditsText_ErikJohnson[] = _("Erik Johnson"); -static const struct CreditsEntry gCreditsEntry_EmptyString[] = {0, 0, gCreditsText_EmptyString}; -static const struct CreditsEntry gCreditsEntry_PkmnEmeraldVersion[] = {7, 1, gCreditsText_PkmnEmeraldVersion}; -static const struct CreditsEntry gCreditsEntry_Credits[] = {11, 1, gCreditsText_Credits}; -static const struct CreditsEntry gCreditsEntry_ExecutiveDirector[] = {8, 1, gCreditsText_ExecutiveDirector}; -static const struct CreditsEntry gCreditsEntry_Director[] = {12, 1, gCreditsText_Director}; -static const struct CreditsEntry gCreditsEntry_ArtDirector[] = {10, 1, gCreditsText_ArtDirector}; -static const struct CreditsEntry gCreditsEntry_BattleDirector[] = {10, 1, gCreditsText_BattleDirector}; -static const struct CreditsEntry gCreditsEntry_MainProgrammer[] = {10, 1, gCreditsText_MainProgrammer}; -static const struct CreditsEntry gCreditsEntry_BattleSystemPgrms[] = {8, 1, gCreditsText_BattleSystemPgrms}; -static const struct CreditsEntry gCreditsEntry_FieldSystemPgrms[] = {7, 1, gCreditsText_FieldSystemPgrms}; -static const struct CreditsEntry gCreditsEntry_Programmers[] = {12, 1, gCreditsText_Programmers}; -static const struct CreditsEntry gCreditsEntry_MainGraphicDesigner[] = {7, 1, gCreditsText_MainGraphicDesigner}; -static const struct CreditsEntry gCreditsEntry_GraphicDesigners[] = {9, 1, gCreditsText_GraphicDesigners}; -static const struct CreditsEntry gCreditsEntry_PkmnDesigners[] = {10, 1, gCreditsText_PkmnDesigners}; -static const struct CreditsEntry gCreditsEntry_MusicComposition[] = {13, 1, gCreditsText_MusicComposition}; -static const struct CreditsEntry gCreditsEntry_SoundEffectsAndPkmnVoices[] = {4, 1, gCreditsText_SoundEffectsAndPkmnVoices}; -static const struct CreditsEntry gCreditsEntry_GameDesigners[] = {11, 1, gCreditsText_GameDesigners}; -static const struct CreditsEntry gCreditsEntry_ScenarioPlot[] = {11, 1, gCreditsText_ScenarioPlot}; -static const struct CreditsEntry gCreditsEntry_Scenario[] = {13, 1, gCreditsText_Scenario}; -static const struct CreditsEntry gCreditsEntry_ScriptDesigners[] = {10, 1, gCreditsText_ScriptDesigners}; -static const struct CreditsEntry gCreditsEntry_MapDesigners[] = {11, 1, gCreditsText_MapDesigners}; -static const struct CreditsEntry gCreditsEntry_MapDataDesigners[] = {9, 1, gCreditsText_MapDataDesigners}; -static const struct CreditsEntry gCreditsEntry_ParametricDesigners[] = {9, 1, gCreditsText_ParametricDesigners}; -static const struct CreditsEntry gCreditsEntry_PokedexText[] = {11, 1, gCreditsText_PokedexText}; -static const struct CreditsEntry gCreditsEntry_EnvAndToolPgrms[] = {6, 1, gCreditsText_EnvAndToolPgrms}; -static const struct CreditsEntry gCreditsEntry_NCLProductTesting[] = {11, 1, gCreditsText_NCLProductTesting}; -static const struct CreditsEntry gCreditsEntry_SpecialThanks[] = {10, 1, gCreditsText_SpecialThanks}; -static const struct CreditsEntry gCreditsEntry_Coordinators[] = {11, 1, gCreditsText_Coordinators}; -static const struct CreditsEntry gCreditsEntry_Producers[] = {11, 1, gCreditsText_Producers}; -static const struct CreditsEntry gCreditsEntry_ExecProducers[] = {7, 1, gCreditsText_ExecProducers}; -static const struct CreditsEntry gCreditsEntry_InfoSupervisors[] = {10, 1, gCreditsText_InfoSupervisors}; -static const struct CreditsEntry gCreditsEntry_TaskManagers[] = {8, 1, gCreditsText_TaskManagers}; -static const struct CreditsEntry gCreditsEntry_BrailleCodeCheck[] = {10, 1, gCreditsText_BrailleCodeCheck}; -static const struct CreditsEntry gCreditsEntry_WorldDirector[] = {10, 1, gCreditsText_WorldDirector}; -static const struct CreditsEntry gCreditsEntry_BattleFrontierData[] = {8, 1, gCreditsText_BattleFrontierData}; -static const struct CreditsEntry gCreditsEntry_SupportProgrammers[] = {10, 1, gCreditsText_SupportProgrammers}; -static const struct CreditsEntry gCreditsEntry_Artwork[] = {12, 1, gCreditsText_Artwork}; -static const struct CreditsEntry gCreditsEntry_LeadProgrammer[] = {10, 1, gCreditsText_LeadProgrammer}; -static const struct CreditsEntry gCreditsEntry_LeadGraphicArtist[] = {9, 1, gCreditsText_LeadGraphicArtist}; -static const struct CreditsEntry gCreditsEntry_SatoshiTajiri[] = {11, 0, gCreditsText_SatoshiTajiri}; -static const struct CreditsEntry gCreditsEntry_JunichiMasuda[] = {11, 0, gCreditsText_JunichiMasuda}; -static const struct CreditsEntry gCreditsEntry_KenSugimori[] = {11, 0, gCreditsText_KenSugimori}; -static const struct CreditsEntry gCreditsEntry_ShigekiMorimoto[] = {11, 0, gCreditsText_ShigekiMorimoto}; -static const struct CreditsEntry gCreditsEntry_TetsuyaWatanabe[] = {11, 0, gCreditsText_TetsuyaWatanabe}; -static const struct CreditsEntry gCreditsEntry_HisashiSogabe[] = {11, 0, gCreditsText_HisashiSogabe}; -static const struct CreditsEntry gCreditsEntry_SosukeTamada[] = {11, 0, gCreditsText_SosukeTamada}; -static const struct CreditsEntry gCreditsEntry_AkitoMori[] = {11, 0, gCreditsText_AkitoMori}; -static const struct CreditsEntry gCreditsEntry_KeitaKagaya[] = {11, 0, gCreditsText_KeitaKagaya}; -static const struct CreditsEntry gCreditsEntry_YoshinoriMatsuda[] = {11, 0, gCreditsText_YoshinoriMatsuda}; -static const struct CreditsEntry gCreditsEntry_HiroyukiNakamura[] = {11, 0, gCreditsText_HiroyukiNakamura}; -static const struct CreditsEntry gCreditsEntry_MasaoTaya[] = {11, 0, gCreditsText_MasaoTaya}; -static const struct CreditsEntry gCreditsEntry_SatoshiNohara[] = {11, 0, gCreditsText_SatoshiNohara}; -static const struct CreditsEntry gCreditsEntry_TomomichiOhta[] = {11, 0, gCreditsText_TomomichiOhta}; -static const struct CreditsEntry gCreditsEntry_MiyukiIwasawa[] = {11, 0, gCreditsText_MiyukiIwasawa}; -static const struct CreditsEntry gCreditsEntry_TakenoriOhta[] = {11, 0, gCreditsText_TakenoriOhta}; -static const struct CreditsEntry gCreditsEntry_HironobuYoshida[] = {11, 0, gCreditsText_HironobuYoshida}; -static const struct CreditsEntry gCreditsEntry_MotofumiFujiwara[] = {11, 0, gCreditsText_MotofumiFujiwara}; -static const struct CreditsEntry gCreditsEntry_SatoshiOhta[] = {11, 0, gCreditsText_SatoshiOhta}; -static const struct CreditsEntry gCreditsEntry_AsukaIwashita[] = {11, 0, gCreditsText_AsukaIwashita}; -static const struct CreditsEntry gCreditsEntry_AimiTomita[] = {11, 0, gCreditsText_AimiTomita}; -static const struct CreditsEntry gCreditsEntry_TakaoUnno[] = {11, 0, gCreditsText_TakaoUnno}; -static const struct CreditsEntry gCreditsEntry_KanakoEo[] = {11, 0, gCreditsText_KanakoEo}; -static const struct CreditsEntry gCreditsEntry_JunOkutani[] = {11, 0, gCreditsText_JunOkutani}; -static const struct CreditsEntry gCreditsEntry_AtsukoNishida[] = {11, 0, gCreditsText_AtsukoNishida}; -static const struct CreditsEntry gCreditsEntry_MuneoSaito[] = {11, 0, gCreditsText_MuneoSaito}; -static const struct CreditsEntry gCreditsEntry_RenaYoshikawa[] = {11, 0, gCreditsText_RenaYoshikawa}; -static const struct CreditsEntry gCreditsEntry_GoIchinose[] = {11, 0, gCreditsText_GoIchinose}; -static const struct CreditsEntry gCreditsEntry_MorikazuAoki[] = {11, 0, gCreditsText_MorikazuAoki}; -static const struct CreditsEntry gCreditsEntry_KojiNishino[] = {11, 0, gCreditsText_KojiNishino}; -static const struct CreditsEntry gCreditsEntry_KenjiMatsushima[] = {11, 0, gCreditsText_KenjiMatsushima}; -static const struct CreditsEntry gCreditsEntry_TetsujiOhta[] = {11, 0, gCreditsText_TetsujiOhta}; -static const struct CreditsEntry gCreditsEntry_HitomiSato[] = {11, 0, gCreditsText_HitomiSato}; -static const struct CreditsEntry gCreditsEntry_TakeshiKawachimaru[] = {11, 0, gCreditsText_TakeshiKawachimaru}; -static const struct CreditsEntry gCreditsEntry_TeruyukiShimoyamada[] = {11, 0, gCreditsText_TeruyukiShimoyamada}; -static const struct CreditsEntry gCreditsEntry_ShigeruOhmori[] = {11, 0, gCreditsText_ShigeruOhmori}; -static const struct CreditsEntry gCreditsEntry_TadashiTakahashi[] = {11, 0, gCreditsText_TadashiTakahashi}; -static const struct CreditsEntry gCreditsEntry_ToshinobuMatsumiya[] = {11, 0, gCreditsText_ToshinobuMatsumiya}; -static const struct CreditsEntry gCreditsEntry_AkihitoTomisawa[] = {11, 0, gCreditsText_AkihitoTomisawa}; -static const struct CreditsEntry gCreditsEntry_HirokiEnomoto[] = {11, 0, gCreditsText_HirokiEnomoto}; -static const struct CreditsEntry gCreditsEntry_KazuyukiTerada[] = {11, 0, gCreditsText_KazuyukiTerada}; -static const struct CreditsEntry gCreditsEntry_YuriSakurai[] = {11, 0, gCreditsText_YuriSakurai}; -static const struct CreditsEntry gCreditsEntry_HiromiSagawa[] = {11, 0, gCreditsText_HiromiSagawa}; -static const struct CreditsEntry gCreditsEntry_KenjiTominaga[] = {11, 0, gCreditsText_KenjiTominaga}; -static const struct CreditsEntry gCreditsEntry_YoshioTajiri[] = {11, 0, gCreditsText_YoshioTajiri}; -static const struct CreditsEntry gCreditsEntry_TeikoSasaki[] = {11, 0, gCreditsText_TeikoSasaki}; -static const struct CreditsEntry gCreditsEntry_SachikoHamano[] = {11, 0, gCreditsText_SachikoHamano}; -static const struct CreditsEntry gCreditsEntry_ChieMatsumiya[] = {11, 0, gCreditsText_ChieMatsumiya}; -static const struct CreditsEntry gCreditsEntry_AkikoShinozaki[] = {11, 0, gCreditsText_AkikoShinozaki}; -static const struct CreditsEntry gCreditsEntry_AstukoFujii[] = {11, 0, gCreditsText_AstukoFujii}; -static const struct CreditsEntry gCreditsEntry_NozomuSaito[] = {11, 0, gCreditsText_NozomuSaito}; -static const struct CreditsEntry gCreditsEntry_KenkichiToyama[] = {11, 0, gCreditsText_KenkichiToyama}; -static const struct CreditsEntry gCreditsEntry_SuguruNakatsui[] = {11, 0, gCreditsText_SuguruNakatsui}; -static const struct CreditsEntry gCreditsEntry_YumiFunasaka[] = {11, 0, gCreditsText_YumiFunasaka}; -static const struct CreditsEntry gCreditsEntry_NaokoYanase[] = {11, 0, gCreditsText_NaokoYanase}; -static const struct CreditsEntry gCreditsEntry_NCLSuperMarioClub[] = {11, 0, gCreditsText_NCLSuperMarioClub}; -static const struct CreditsEntry gCreditsEntry_AtsushiTada[] = {11, 0, gCreditsText_AtsushiTada}; -static const struct CreditsEntry gCreditsEntry_TakahiroOhnishi[] = {11, 0, gCreditsText_TakahiroOhnishi}; -static const struct CreditsEntry gCreditsEntry_NorihideOkamura[] = {11, 0, gCreditsText_NorihideOkamura}; -static const struct CreditsEntry gCreditsEntry_HiroNakamura[] = {11, 0, gCreditsText_HiroNakamura}; -static const struct CreditsEntry gCreditsEntry_HiroyukiUesugi[] = {11, 0, gCreditsText_HiroyukiUesugi}; -static const struct CreditsEntry gCreditsEntry_TerukiMurakawa[] = {11, 0, gCreditsText_TerukiMurakawa}; -static const struct CreditsEntry gCreditsEntry_AkiraKinashi[] = {11, 0, gCreditsText_AkiraKinashi}; -static const struct CreditsEntry gCreditsEntry_MichikoTakizawa[] = {11, 0, gCreditsText_MichikoTakizawa}; -static const struct CreditsEntry gCreditsEntry_MakikoTakada[] = {11, 0, gCreditsText_MakikoTakada}; -static const struct CreditsEntry gCreditsEntry_TakanaoKondo[] = {11, 0, gCreditsText_TakanaoKondo}; -static const struct CreditsEntry gCreditsEntry_AiMashima[] = {11, 0, gCreditsText_AiMashima}; -static const struct CreditsEntry gCreditsEntry_GakujiNomoto[] = {11, 0, gCreditsText_GakujiNomoto}; -static const struct CreditsEntry gCreditsEntry_TakehiroIzushi[] = {11, 0, gCreditsText_TakehiroIzushi}; -static const struct CreditsEntry gCreditsEntry_HitoshiYamagami[] = {11, 0, gCreditsText_HitoshiYamagami}; -static const struct CreditsEntry gCreditsEntry_KyokoWatanabe[] = {11, 0, gCreditsText_KyokoWatanabe}; -static const struct CreditsEntry gCreditsEntry_TakaoNakano[] = {11, 0, gCreditsText_TakaoNakano}; -static const struct CreditsEntry gCreditsEntry_HiroyukiJinnai[] = {11, 0, gCreditsText_HiroyukiJinnai}; -static const struct CreditsEntry gCreditsEntry_HiroakiTsuru[] = {11, 0, gCreditsText_HiroakiTsuru}; -static const struct CreditsEntry gCreditsEntry_TsunekazIshihara[] = {11, 0, gCreditsText_TsunekazIshihara}; -static const struct CreditsEntry gCreditsEntry_SatoruIwata[] = {11, 0, gCreditsText_SatoruIwata}; -static const struct CreditsEntry gCreditsEntry_KazuyaSuyama[] = {11, 0, gCreditsText_KazuyaSuyama}; -static const struct CreditsEntry gCreditsEntry_SatoshiMitsuhara[] = {11, 0, gCreditsText_SatoshiMitsuhara}; -static const struct CreditsEntry gCreditsEntry_JapanBrailleLibrary[] = {9, 0, gCreditsText_JapanBrailleLibrary}; -static const struct CreditsEntry gCreditsEntry_TomotakaKomura[] = {11, 0, gCreditsText_TomotakaKomura}; -static const struct CreditsEntry gCreditsEntry_MikikoOhhashi[] = {11, 0, gCreditsText_MikikoOhhashi}; -static const struct CreditsEntry gCreditsEntry_DaisukeHoshino[] = {11, 0, gCreditsText_DaisukeHoshino}; -static const struct CreditsEntry gCreditsEntry_KenjiroIto[] = {11, 0, gCreditsText_KenjiroIto}; -static const struct CreditsEntry gCreditsEntry_RuiKawaguchi[] = {11, 0, gCreditsText_RuiKawaguchi}; -static const struct CreditsEntry gCreditsEntry_ShunsukeKohori[] = {11, 0, gCreditsText_ShunsukeKohori}; -static const struct CreditsEntry gCreditsEntry_SachikoNakamichi[] = {11, 0, gCreditsText_SachikoNakamichi}; -static const struct CreditsEntry gCreditsEntry_FujikoNomura[] = {11, 0, gCreditsText_FujikoNomura}; -static const struct CreditsEntry gCreditsEntry_KazukiYoshihara[] = {11, 0, gCreditsText_KazukiYoshihara}; -static const struct CreditsEntry gCreditsEntry_RetsujiNomoto[] = {11, 0, gCreditsText_RetsujiNomoto}; -static const struct CreditsEntry gCreditsEntry_AzusaTajima[] = {11, 0, gCreditsText_AzusaTajima}; -static const struct CreditsEntry gCreditsEntry_ShusakuEgami[] = {11, 0, gCreditsText_ShusakuEgami}; -static const struct CreditsEntry gCreditsEntry_PackageAndManual[] = {0, 1, gCreditsText_PackageAndManual}; -static const struct CreditsEntry gCreditsEntry_EnglishVersion[] = {0, 1, gCreditsText_EnglishVersion}; -static const struct CreditsEntry gCreditsEntry_Translator[] = {0, 1, gCreditsText_Translator}; -static const struct CreditsEntry gCreditsEntry_TextEditor[] = {0, 1, gCreditsText_TextEditor}; -static const struct CreditsEntry gCreditsEntry_NCLCoordinator[] = {0, 1, gCreditsText_NCLCoordinator}; -static const struct CreditsEntry gCreditsEntry_GraphicDesigner[] = {0, 1, gCreditsText_GraphicDesigner}; -static const struct CreditsEntry gCreditsEntry_NOAProductTesting[] = {0, 1, gCreditsText_NOAProductTesting}; -static const struct CreditsEntry gCreditsEntry_HideyukiNakajima[] = {0, 0, gCreditsText_HideyukiNakajima}; -static const struct CreditsEntry gCreditsEntry_HidenoriSaeki[] = {0, 0, gCreditsText_HidenoriSaeki}; -static const struct CreditsEntry gCreditsEntry_YokoWatanabe[] = {0, 0, gCreditsText_YokoWatanabe}; -static const struct CreditsEntry gCreditsEntry_SakaeKimura[] = {0, 0, gCreditsText_SakaeKimura}; -static const struct CreditsEntry gCreditsEntry_ChiakiShinkai[] = {0, 0, gCreditsText_ChiakiShinkai}; -static const struct CreditsEntry gCreditsEntry_SethMcMahill[] = {0, 0, gCreditsText_SethMcMahill}; -static const struct CreditsEntry gCreditsEntry_NobOgasawara[] = {0, 0, gCreditsText_NobOgasawara}; -static const struct CreditsEntry gCreditsEntry_TeresaLillygren[] = {0, 0, gCreditsText_TeresaLillygren}; -static const struct CreditsEntry gCreditsEntry_KimikoNakamichi[] = {0, 0, gCreditsText_KimikoNakamichi}; -static const struct CreditsEntry gCreditsEntry_SouichiYamamoto[] = {0, 0, gCreditsText_SouichiYamamoto}; -static const struct CreditsEntry gCreditsEntry_YuichiroIto[] = {0, 0, gCreditsText_YuichiroIto}; -static const struct CreditsEntry gCreditsEntry_ThomasHertzog[] = {0, 0, gCreditsText_ThomasHertzog}; -static const struct CreditsEntry gCreditsEntry_MikaKurosawa[] = {0, 0, gCreditsText_MikaKurosawa}; -static const struct CreditsEntry gCreditsEntry_NationalFederationBlind[] = {0, 0, gCreditsText_NationalFederationBlind}; -static const struct CreditsEntry gCreditsEntry_PatriciaAMaurer[] = {0, 0, gCreditsText_PatriciaAMaurer}; -static const struct CreditsEntry gCreditsEntry_EuropeanBlindUnion[] = {0, 0, gCreditsText_EuropeanBlindUnion}; -static const struct CreditsEntry gCreditsEntry_AustralianBrailleAuthority[] = {0, 0, gCreditsText_AustralianBrailleAuthority}; -static const struct CreditsEntry gCreditsEntry_RoyalNewZealandFederationBlind[] = {0, 0, gCreditsText_RoyalNewZealandFederationBlind}; -static const struct CreditsEntry gCreditsEntry_MotoyasuTojima[] = {0, 0, gCreditsText_MotoyasuTojima}; -static const struct CreditsEntry gCreditsEntry_NicolaPrattBarlow[] = {0, 0, gCreditsText_NicolaPrattBarlow}; -static const struct CreditsEntry gCreditsEntry_ShellieDow[] = {0, 0, gCreditsText_ShellieDow}; -static const struct CreditsEntry gCreditsEntry_ErikJohnson[] = {0, 0, gCreditsText_ErikJohnson}; +static const struct CreditsEntry gCreditsEntry_EmptyString[] = {0, FALSE, gCreditsText_EmptyString}; +static const struct CreditsEntry gCreditsEntry_PkmnEmeraldVersion[] = {7, TRUE, gCreditsText_PkmnEmeraldVersion}; +static const struct CreditsEntry gCreditsEntry_Credits[] = {11, TRUE, gCreditsText_Credits}; +static const struct CreditsEntry gCreditsEntry_ExecutiveDirector[] = {8, TRUE, gCreditsText_ExecutiveDirector}; +static const struct CreditsEntry gCreditsEntry_Director[] = {12, TRUE, gCreditsText_Director}; +static const struct CreditsEntry gCreditsEntry_ArtDirector[] = {10, TRUE, gCreditsText_ArtDirector}; +static const struct CreditsEntry gCreditsEntry_BattleDirector[] = {10, TRUE, gCreditsText_BattleDirector}; +static const struct CreditsEntry gCreditsEntry_MainProgrammer[] = {10, TRUE, gCreditsText_MainProgrammer}; +static const struct CreditsEntry gCreditsEntry_BattleSystemPgrms[] = {8, TRUE, gCreditsText_BattleSystemPgrms}; +static const struct CreditsEntry gCreditsEntry_FieldSystemPgrms[] = {7, TRUE, gCreditsText_FieldSystemPgrms}; +static const struct CreditsEntry gCreditsEntry_Programmers[] = {12, TRUE, gCreditsText_Programmers}; +static const struct CreditsEntry gCreditsEntry_MainGraphicDesigner[] = {7, TRUE, gCreditsText_MainGraphicDesigner}; +static const struct CreditsEntry gCreditsEntry_GraphicDesigners[] = {9, TRUE, gCreditsText_GraphicDesigners}; +static const struct CreditsEntry gCreditsEntry_PkmnDesigners[] = {10, TRUE, gCreditsText_PkmnDesigners}; +static const struct CreditsEntry gCreditsEntry_MusicComposition[] = {13, TRUE, gCreditsText_MusicComposition}; +static const struct CreditsEntry gCreditsEntry_SoundEffectsAndPkmnVoices[] = {4, TRUE, gCreditsText_SoundEffectsAndPkmnVoices}; +static const struct CreditsEntry gCreditsEntry_GameDesigners[] = {11, TRUE, gCreditsText_GameDesigners}; +static const struct CreditsEntry gCreditsEntry_ScenarioPlot[] = {11, TRUE, gCreditsText_ScenarioPlot}; +static const struct CreditsEntry gCreditsEntry_Scenario[] = {13, TRUE, gCreditsText_Scenario}; +static const struct CreditsEntry gCreditsEntry_ScriptDesigners[] = {10, TRUE, gCreditsText_ScriptDesigners}; +static const struct CreditsEntry gCreditsEntry_MapDesigners[] = {11, TRUE, gCreditsText_MapDesigners}; +static const struct CreditsEntry gCreditsEntry_MapDataDesigners[] = {9, TRUE, gCreditsText_MapDataDesigners}; +static const struct CreditsEntry gCreditsEntry_ParametricDesigners[] = {9, TRUE, gCreditsText_ParametricDesigners}; +static const struct CreditsEntry gCreditsEntry_PokedexText[] = {11, TRUE, gCreditsText_PokedexText}; +static const struct CreditsEntry gCreditsEntry_EnvAndToolPgrms[] = {6, TRUE, gCreditsText_EnvAndToolPgrms}; +static const struct CreditsEntry gCreditsEntry_NCLProductTesting[] = {11, TRUE, gCreditsText_NCLProductTesting}; +static const struct CreditsEntry gCreditsEntry_SpecialThanks[] = {10, TRUE, gCreditsText_SpecialThanks}; +static const struct CreditsEntry gCreditsEntry_Coordinators[] = {11, TRUE, gCreditsText_Coordinators}; +static const struct CreditsEntry gCreditsEntry_Producers[] = {11, TRUE, gCreditsText_Producers}; +static const struct CreditsEntry gCreditsEntry_ExecProducers[] = {7, TRUE, gCreditsText_ExecProducers}; +static const struct CreditsEntry gCreditsEntry_InfoSupervisors[] = {10, TRUE, gCreditsText_InfoSupervisors}; +static const struct CreditsEntry gCreditsEntry_TaskManagers[] = {8, TRUE, gCreditsText_TaskManagers}; +static const struct CreditsEntry gCreditsEntry_BrailleCodeCheck[] = {10, TRUE, gCreditsText_BrailleCodeCheck}; +static const struct CreditsEntry gCreditsEntry_WorldDirector[] = {10, TRUE, gCreditsText_WorldDirector}; +static const struct CreditsEntry gCreditsEntry_BattleFrontierData[] = {8, TRUE, gCreditsText_BattleFrontierData}; +static const struct CreditsEntry gCreditsEntry_SupportProgrammers[] = {10, TRUE, gCreditsText_SupportProgrammers}; +static const struct CreditsEntry gCreditsEntry_Artwork[] = {12, TRUE, gCreditsText_Artwork}; +static const struct CreditsEntry gCreditsEntry_LeadProgrammer[] = {10, TRUE, gCreditsText_LeadProgrammer}; +static const struct CreditsEntry gCreditsEntry_LeadGraphicArtist[] = {9, TRUE, gCreditsText_LeadGraphicArtist}; +static const struct CreditsEntry gCreditsEntry_SatoshiTajiri[] = {11, FALSE, gCreditsText_SatoshiTajiri}; +static const struct CreditsEntry gCreditsEntry_JunichiMasuda[] = {11, FALSE, gCreditsText_JunichiMasuda}; +static const struct CreditsEntry gCreditsEntry_KenSugimori[] = {11, FALSE, gCreditsText_KenSugimori}; +static const struct CreditsEntry gCreditsEntry_ShigekiMorimoto[] = {11, FALSE, gCreditsText_ShigekiMorimoto}; +static const struct CreditsEntry gCreditsEntry_TetsuyaWatanabe[] = {11, FALSE, gCreditsText_TetsuyaWatanabe}; +static const struct CreditsEntry gCreditsEntry_HisashiSogabe[] = {11, FALSE, gCreditsText_HisashiSogabe}; +static const struct CreditsEntry gCreditsEntry_SosukeTamada[] = {11, FALSE, gCreditsText_SosukeTamada}; +static const struct CreditsEntry gCreditsEntry_AkitoMori[] = {11, FALSE, gCreditsText_AkitoMori}; +static const struct CreditsEntry gCreditsEntry_KeitaKagaya[] = {11, FALSE, gCreditsText_KeitaKagaya}; +static const struct CreditsEntry gCreditsEntry_YoshinoriMatsuda[] = {11, FALSE, gCreditsText_YoshinoriMatsuda}; +static const struct CreditsEntry gCreditsEntry_HiroyukiNakamura[] = {11, FALSE, gCreditsText_HiroyukiNakamura}; +static const struct CreditsEntry gCreditsEntry_MasaoTaya[] = {11, FALSE, gCreditsText_MasaoTaya}; +static const struct CreditsEntry gCreditsEntry_SatoshiNohara[] = {11, FALSE, gCreditsText_SatoshiNohara}; +static const struct CreditsEntry gCreditsEntry_TomomichiOhta[] = {11, FALSE, gCreditsText_TomomichiOhta}; +static const struct CreditsEntry gCreditsEntry_MiyukiIwasawa[] = {11, FALSE, gCreditsText_MiyukiIwasawa}; +static const struct CreditsEntry gCreditsEntry_TakenoriOhta[] = {11, FALSE, gCreditsText_TakenoriOhta}; +static const struct CreditsEntry gCreditsEntry_HironobuYoshida[] = {11, FALSE, gCreditsText_HironobuYoshida}; +static const struct CreditsEntry gCreditsEntry_MotofumiFujiwara[] = {11, FALSE, gCreditsText_MotofumiFujiwara}; +static const struct CreditsEntry gCreditsEntry_SatoshiOhta[] = {11, FALSE, gCreditsText_SatoshiOhta}; +static const struct CreditsEntry gCreditsEntry_AsukaIwashita[] = {11, FALSE, gCreditsText_AsukaIwashita}; +static const struct CreditsEntry gCreditsEntry_AimiTomita[] = {11, FALSE, gCreditsText_AimiTomita}; +static const struct CreditsEntry gCreditsEntry_TakaoUnno[] = {11, FALSE, gCreditsText_TakaoUnno}; +static const struct CreditsEntry gCreditsEntry_KanakoEo[] = {11, FALSE, gCreditsText_KanakoEo}; +static const struct CreditsEntry gCreditsEntry_JunOkutani[] = {11, FALSE, gCreditsText_JunOkutani}; +static const struct CreditsEntry gCreditsEntry_AtsukoNishida[] = {11, FALSE, gCreditsText_AtsukoNishida}; +static const struct CreditsEntry gCreditsEntry_MuneoSaito[] = {11, FALSE, gCreditsText_MuneoSaito}; +static const struct CreditsEntry gCreditsEntry_RenaYoshikawa[] = {11, FALSE, gCreditsText_RenaYoshikawa}; +static const struct CreditsEntry gCreditsEntry_GoIchinose[] = {11, FALSE, gCreditsText_GoIchinose}; +static const struct CreditsEntry gCreditsEntry_MorikazuAoki[] = {11, FALSE, gCreditsText_MorikazuAoki}; +static const struct CreditsEntry gCreditsEntry_KojiNishino[] = {11, FALSE, gCreditsText_KojiNishino}; +static const struct CreditsEntry gCreditsEntry_KenjiMatsushima[] = {11, FALSE, gCreditsText_KenjiMatsushima}; +static const struct CreditsEntry gCreditsEntry_TetsujiOhta[] = {11, FALSE, gCreditsText_TetsujiOhta}; +static const struct CreditsEntry gCreditsEntry_HitomiSato[] = {11, FALSE, gCreditsText_HitomiSato}; +static const struct CreditsEntry gCreditsEntry_TakeshiKawachimaru[] = {11, FALSE, gCreditsText_TakeshiKawachimaru}; +static const struct CreditsEntry gCreditsEntry_TeruyukiShimoyamada[] = {11, FALSE, gCreditsText_TeruyukiShimoyamada}; +static const struct CreditsEntry gCreditsEntry_ShigeruOhmori[] = {11, FALSE, gCreditsText_ShigeruOhmori}; +static const struct CreditsEntry gCreditsEntry_TadashiTakahashi[] = {11, FALSE, gCreditsText_TadashiTakahashi}; +static const struct CreditsEntry gCreditsEntry_ToshinobuMatsumiya[] = {11, FALSE, gCreditsText_ToshinobuMatsumiya}; +static const struct CreditsEntry gCreditsEntry_AkihitoTomisawa[] = {11, FALSE, gCreditsText_AkihitoTomisawa}; +static const struct CreditsEntry gCreditsEntry_HirokiEnomoto[] = {11, FALSE, gCreditsText_HirokiEnomoto}; +static const struct CreditsEntry gCreditsEntry_KazuyukiTerada[] = {11, FALSE, gCreditsText_KazuyukiTerada}; +static const struct CreditsEntry gCreditsEntry_YuriSakurai[] = {11, FALSE, gCreditsText_YuriSakurai}; +static const struct CreditsEntry gCreditsEntry_HiromiSagawa[] = {11, FALSE, gCreditsText_HiromiSagawa}; +static const struct CreditsEntry gCreditsEntry_KenjiTominaga[] = {11, FALSE, gCreditsText_KenjiTominaga}; +static const struct CreditsEntry gCreditsEntry_YoshioTajiri[] = {11, FALSE, gCreditsText_YoshioTajiri}; +static const struct CreditsEntry gCreditsEntry_TeikoSasaki[] = {11, FALSE, gCreditsText_TeikoSasaki}; +static const struct CreditsEntry gCreditsEntry_SachikoHamano[] = {11, FALSE, gCreditsText_SachikoHamano}; +static const struct CreditsEntry gCreditsEntry_ChieMatsumiya[] = {11, FALSE, gCreditsText_ChieMatsumiya}; +static const struct CreditsEntry gCreditsEntry_AkikoShinozaki[] = {11, FALSE, gCreditsText_AkikoShinozaki}; +static const struct CreditsEntry gCreditsEntry_AstukoFujii[] = {11, FALSE, gCreditsText_AstukoFujii}; +static const struct CreditsEntry gCreditsEntry_NozomuSaito[] = {11, FALSE, gCreditsText_NozomuSaito}; +static const struct CreditsEntry gCreditsEntry_KenkichiToyama[] = {11, FALSE, gCreditsText_KenkichiToyama}; +static const struct CreditsEntry gCreditsEntry_SuguruNakatsui[] = {11, FALSE, gCreditsText_SuguruNakatsui}; +static const struct CreditsEntry gCreditsEntry_YumiFunasaka[] = {11, FALSE, gCreditsText_YumiFunasaka}; +static const struct CreditsEntry gCreditsEntry_NaokoYanase[] = {11, FALSE, gCreditsText_NaokoYanase}; +static const struct CreditsEntry gCreditsEntry_NCLSuperMarioClub[] = {11, FALSE, gCreditsText_NCLSuperMarioClub}; +static const struct CreditsEntry gCreditsEntry_AtsushiTada[] = {11, FALSE, gCreditsText_AtsushiTada}; +static const struct CreditsEntry gCreditsEntry_TakahiroOhnishi[] = {11, FALSE, gCreditsText_TakahiroOhnishi}; +static const struct CreditsEntry gCreditsEntry_NorihideOkamura[] = {11, FALSE, gCreditsText_NorihideOkamura}; +static const struct CreditsEntry gCreditsEntry_HiroNakamura[] = {11, FALSE, gCreditsText_HiroNakamura}; +static const struct CreditsEntry gCreditsEntry_HiroyukiUesugi[] = {11, FALSE, gCreditsText_HiroyukiUesugi}; +static const struct CreditsEntry gCreditsEntry_TerukiMurakawa[] = {11, FALSE, gCreditsText_TerukiMurakawa}; +static const struct CreditsEntry gCreditsEntry_AkiraKinashi[] = {11, FALSE, gCreditsText_AkiraKinashi}; +static const struct CreditsEntry gCreditsEntry_MichikoTakizawa[] = {11, FALSE, gCreditsText_MichikoTakizawa}; +static const struct CreditsEntry gCreditsEntry_MakikoTakada[] = {11, FALSE, gCreditsText_MakikoTakada}; +static const struct CreditsEntry gCreditsEntry_TakanaoKondo[] = {11, FALSE, gCreditsText_TakanaoKondo}; +static const struct CreditsEntry gCreditsEntry_AiMashima[] = {11, FALSE, gCreditsText_AiMashima}; +static const struct CreditsEntry gCreditsEntry_GakujiNomoto[] = {11, FALSE, gCreditsText_GakujiNomoto}; +static const struct CreditsEntry gCreditsEntry_TakehiroIzushi[] = {11, FALSE, gCreditsText_TakehiroIzushi}; +static const struct CreditsEntry gCreditsEntry_HitoshiYamagami[] = {11, FALSE, gCreditsText_HitoshiYamagami}; +static const struct CreditsEntry gCreditsEntry_KyokoWatanabe[] = {11, FALSE, gCreditsText_KyokoWatanabe}; +static const struct CreditsEntry gCreditsEntry_TakaoNakano[] = {11, FALSE, gCreditsText_TakaoNakano}; +static const struct CreditsEntry gCreditsEntry_HiroyukiJinnai[] = {11, FALSE, gCreditsText_HiroyukiJinnai}; +static const struct CreditsEntry gCreditsEntry_HiroakiTsuru[] = {11, FALSE, gCreditsText_HiroakiTsuru}; +static const struct CreditsEntry gCreditsEntry_TsunekazIshihara[] = {11, FALSE, gCreditsText_TsunekazIshihara}; +static const struct CreditsEntry gCreditsEntry_SatoruIwata[] = {11, FALSE, gCreditsText_SatoruIwata}; +static const struct CreditsEntry gCreditsEntry_KazuyaSuyama[] = {11, FALSE, gCreditsText_KazuyaSuyama}; +static const struct CreditsEntry gCreditsEntry_SatoshiMitsuhara[] = {11, FALSE, gCreditsText_SatoshiMitsuhara}; +static const struct CreditsEntry gCreditsEntry_JapanBrailleLibrary[] = {9, FALSE, gCreditsText_JapanBrailleLibrary}; +static const struct CreditsEntry gCreditsEntry_TomotakaKomura[] = {11, FALSE, gCreditsText_TomotakaKomura}; +static const struct CreditsEntry gCreditsEntry_MikikoOhhashi[] = {11, FALSE, gCreditsText_MikikoOhhashi}; +static const struct CreditsEntry gCreditsEntry_DaisukeHoshino[] = {11, FALSE, gCreditsText_DaisukeHoshino}; +static const struct CreditsEntry gCreditsEntry_KenjiroIto[] = {11, FALSE, gCreditsText_KenjiroIto}; +static const struct CreditsEntry gCreditsEntry_RuiKawaguchi[] = {11, FALSE, gCreditsText_RuiKawaguchi}; +static const struct CreditsEntry gCreditsEntry_ShunsukeKohori[] = {11, FALSE, gCreditsText_ShunsukeKohori}; +static const struct CreditsEntry gCreditsEntry_SachikoNakamichi[] = {11, FALSE, gCreditsText_SachikoNakamichi}; +static const struct CreditsEntry gCreditsEntry_FujikoNomura[] = {11, FALSE, gCreditsText_FujikoNomura}; +static const struct CreditsEntry gCreditsEntry_KazukiYoshihara[] = {11, FALSE, gCreditsText_KazukiYoshihara}; +static const struct CreditsEntry gCreditsEntry_RetsujiNomoto[] = {11, FALSE, gCreditsText_RetsujiNomoto}; +static const struct CreditsEntry gCreditsEntry_AzusaTajima[] = {11, FALSE, gCreditsText_AzusaTajima}; +static const struct CreditsEntry gCreditsEntry_ShusakuEgami[] = {11, FALSE, gCreditsText_ShusakuEgami}; +static const struct CreditsEntry gCreditsEntry_PackageAndManual[] = {0, TRUE, gCreditsText_PackageAndManual}; +static const struct CreditsEntry gCreditsEntry_EnglishVersion[] = {0, TRUE, gCreditsText_EnglishVersion}; +static const struct CreditsEntry gCreditsEntry_Translator[] = {0, TRUE, gCreditsText_Translator}; +static const struct CreditsEntry gCreditsEntry_TextEditor[] = {0, TRUE, gCreditsText_TextEditor}; +static const struct CreditsEntry gCreditsEntry_NCLCoordinator[] = {0, TRUE, gCreditsText_NCLCoordinator}; +static const struct CreditsEntry gCreditsEntry_GraphicDesigner[] = {0, TRUE, gCreditsText_GraphicDesigner}; +static const struct CreditsEntry gCreditsEntry_NOAProductTesting[] = {0, TRUE, gCreditsText_NOAProductTesting}; +static const struct CreditsEntry gCreditsEntry_HideyukiNakajima[] = {0, FALSE, gCreditsText_HideyukiNakajima}; +static const struct CreditsEntry gCreditsEntry_HidenoriSaeki[] = {0, FALSE, gCreditsText_HidenoriSaeki}; +static const struct CreditsEntry gCreditsEntry_YokoWatanabe[] = {0, FALSE, gCreditsText_YokoWatanabe}; +static const struct CreditsEntry gCreditsEntry_SakaeKimura[] = {0, FALSE, gCreditsText_SakaeKimura}; +static const struct CreditsEntry gCreditsEntry_ChiakiShinkai[] = {0, FALSE, gCreditsText_ChiakiShinkai}; +static const struct CreditsEntry gCreditsEntry_SethMcMahill[] = {0, FALSE, gCreditsText_SethMcMahill}; +static const struct CreditsEntry gCreditsEntry_NobOgasawara[] = {0, FALSE, gCreditsText_NobOgasawara}; +static const struct CreditsEntry gCreditsEntry_TeresaLillygren[] = {0, FALSE, gCreditsText_TeresaLillygren}; +static const struct CreditsEntry gCreditsEntry_KimikoNakamichi[] = {0, FALSE, gCreditsText_KimikoNakamichi}; +static const struct CreditsEntry gCreditsEntry_SouichiYamamoto[] = {0, FALSE, gCreditsText_SouichiYamamoto}; +static const struct CreditsEntry gCreditsEntry_YuichiroIto[] = {0, FALSE, gCreditsText_YuichiroIto}; +static const struct CreditsEntry gCreditsEntry_ThomasHertzog[] = {0, FALSE, gCreditsText_ThomasHertzog}; +static const struct CreditsEntry gCreditsEntry_MikaKurosawa[] = {0, FALSE, gCreditsText_MikaKurosawa}; +static const struct CreditsEntry gCreditsEntry_NationalFederationBlind[] = {0, FALSE, gCreditsText_NationalFederationBlind}; +static const struct CreditsEntry gCreditsEntry_PatriciaAMaurer[] = {0, FALSE, gCreditsText_PatriciaAMaurer}; +static const struct CreditsEntry gCreditsEntry_EuropeanBlindUnion[] = {0, FALSE, gCreditsText_EuropeanBlindUnion}; +static const struct CreditsEntry gCreditsEntry_AustralianBrailleAuthority[] = {0, FALSE, gCreditsText_AustralianBrailleAuthority}; +static const struct CreditsEntry gCreditsEntry_RoyalNewZealandFederationBlind[] = {0, FALSE, gCreditsText_RoyalNewZealandFederationBlind}; +static const struct CreditsEntry gCreditsEntry_MotoyasuTojima[] = {0, FALSE, gCreditsText_MotoyasuTojima}; +static const struct CreditsEntry gCreditsEntry_NicolaPrattBarlow[] = {0, FALSE, gCreditsText_NicolaPrattBarlow}; +static const struct CreditsEntry gCreditsEntry_ShellieDow[] = {0, FALSE, gCreditsText_ShellieDow}; +static const struct CreditsEntry gCreditsEntry_ErikJohnson[] = {0, FALSE, gCreditsText_ErikJohnson}; #define _ gCreditsEntry_EmptyString static const struct CreditsEntry *const gCreditsEntryPointerTable[][5] = @@ -934,7 +934,7 @@ static const struct CreditsEntry *const gCreditsEntryPointerTable[][5] = }; #undef _ -static const struct BgTemplate gUnknown_085E6F68[] = +static const struct BgTemplate sBackgroundTemplates[] = { { .bg = 0, @@ -946,7 +946,7 @@ static const struct BgTemplate gUnknown_085E6F68[] = .baseTile = 0 }, }; -static const struct WindowTemplate gUnknown_085E6F6C[] = +static const struct WindowTemplate sWindowTemplates[] = { { .bg = 0, @@ -1102,51 +1102,51 @@ static const struct SpriteTemplate gUnknown_085E7068 = .callback = sub_81772B8, }; -static void sub_8175744(u8 taskIdA); -static void sub_8175774(u8 taskIdA); +static void Task_WaitPaletteFade(u8 taskIdA); +static void Task_ProgressCreditTasks(u8 taskIdA); static void sub_8175808(u8 taskIdA); static void c2_080C9BFC(u8 taskIdA); -static void sub_81758E4(u8 taskIdA); +static void Task_CreditsLoadGrassScene(u8 taskIdA); static void sub_81758A4(u8 taskIdA); -static void sub_8175A9C(u8 taskIdA); -static void sub_8175AE4(u8 taskIdA); -static void sub_8175B1C(u8 taskIdA); -static void sub_8175B90(u8 taskIdA); -static void sub_8175BD8(u8 taskIdA); -static void sub_8175C34(u8 taskIdA); -static void sub_8175CC8(u8 taskIdA); -static void sub_8175CE4(void); +static void Task_CreditsTheEnd1(u8 taskIdA); +static void Task_CreditsTheEnd2(u8 taskIdA); +static void Task_CreditsTheEnd3(u8 taskIdA); +static void Task_CreditsTheEnd4(u8 taskIdA); +static void Task_CreditsTheEnd5(u8 taskIdA); +static void Task_CreditsTheEnd6(u8 taskIdA); +static void Task_CreditsSoftReset(u8 taskIdA); +static void ResetGpuAndVram(void); static void sub_8175DA0(u8 taskIdB); -static u8 sub_817603C(u8 page, u8 taskIdA); +static u8 CheckChangeScene(u8 page, u8 taskIdA); static void sub_81760FC(u8 taskIdA); static void sub_817651C(u8 taskIdA); static void sub_817624C(u8 taskIdA); static bool8 sub_8176AB0(u8 data, u8 taskIdA); -static void sub_8176CA0(u8 taskIdA); -static void sub_8176D1C(u16, u16, u16); +static void ResetCreditsTasks(u8 taskIdA); +static void LoadTheEndScreen(u16, u16, u16); static void sub_8176E40(u16 arg0, u16 palette); static void sub_8176EE8(struct Sprite *sprite); static void sub_8176F90(struct Sprite *sprite); static u8 sub_8177224(u16 species, s16 x, s16 y, u16 position); static void sub_8177388(void); -static void sub_81754C8(void) +static void CreditsVBlankCallback(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -static void sub_81754DC(void) +static void CB2_RunCreditsSequence(void) { RunTasks(); AnimateSprites(); if ((gMain.heldKeys & B_BUTTON) && gHasHallOfFameRecords != 0 - && gTasks[gUnknown_0203BCE2].func == sub_8175774) + && gTasks[gUnknown_0203BCE2].func == Task_ProgressCreditTasks) { - sub_81754C8(); + CreditsVBlankCallback(); RunTasks(); AnimateSprites(); gUnknown_0203BCE5 = 1; @@ -1158,10 +1158,10 @@ static void sub_81754DC(void) static void sub_8175548(void) { ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_085E6F68, 1); + InitBgsFromTemplates(0, sBackgroundTemplates, 1); SetBgTilemapBuffer(0, AllocZeroed(0x800)); LoadPalette(gUnknown_085E56F0, 0x80, 0x40); - InitWindows(gUnknown_085E6F6C); + InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); PutWindowTilemap(0); CopyWindowToVram(0, 3); @@ -1177,14 +1177,14 @@ static void sub_81755A4(void) Free(ptr); } -static void sub_81755BC(const u8 *string, u8 y, u8 a2) +static void PrintCreditsText(const u8 *string, u8 y, bool8 isTitle) { u8 x; u8 color[3]; color[0] = 0; - if (a2 == 1) + if (isTitle == TRUE) { color[1] = 3; color[2] = 4; @@ -1199,20 +1199,20 @@ static void sub_81755BC(const u8 *string, u8 y, u8 a2) AddTextPrinterParameterized4(0, 1, x, y, 1, 0, color, -1, string); } -void sub_8175620(void) +void CB2_StartCreditsSequence(void) { u8 taskIdA; s16 taskIdC; u8 taskIdB; - sub_8175CE4(); + ResetGpuAndVram(); SetVBlankCallback(NULL); InitHeap(gHeap, HEAP_SIZE); ResetPaletteFade(); ResetTasks(); sub_8175548(); - taskIdA = CreateTask(sub_8175744, 0); + taskIdA = CreateTask(Task_WaitPaletteFade, 0); gTasks[taskIdA].data[TDA_4] = 0; gTasks[taskIdA].data[TDA_7] = 0; @@ -1237,9 +1237,9 @@ void sub_8175620(void) BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); EnableInterrupts(INTR_FLAG_VBLANK); - SetVBlankCallback(sub_81754C8); + SetVBlankCallback(CreditsVBlankCallback); m4aSongNumStart(MUS_THANKFOR); - SetMainCallback2(sub_81754DC); + SetMainCallback2(CB2_RunCreditsSequence); gUnknown_0203BCE5 = 0; gUnknown_0203BCE8 = AllocZeroed(sizeof(struct Unk201C000)); @@ -1252,13 +1252,13 @@ void sub_8175620(void) gUnknown_0203BCE2 = taskIdA; } -static void sub_8175744(u8 taskIdA) +static void Task_WaitPaletteFade(u8 taskIdA) { if (!gPaletteFade.active) - gTasks[taskIdA].func = sub_8175774; + gTasks[taskIdA].func = Task_ProgressCreditTasks; } -static void sub_8175774(u8 taskIdA) +static void Task_ProgressCreditTasks(u8 taskIdA) { u16 data1; @@ -1270,7 +1270,7 @@ static void sub_8175774(u8 taskIdA) gTasks[taskIdC].data[TDC_0] = 30; gTasks[taskIdA].data[TDA_12] = 0x100; - gTasks[taskIdA].func = sub_8175A9C; + gTasks[taskIdA].func = Task_CreditsTheEnd1; return; } @@ -1298,7 +1298,7 @@ static void sub_8175808(u8 taskIdA) if (!gPaletteFade.active) { SetGpuReg(REG_OFFSET_DISPCNT, 0); - sub_8176CA0(taskIdA); + ResetCreditsTasks(taskIdA); gTasks[taskIdA].func = c2_080C9BFC; } } @@ -1313,8 +1313,8 @@ static void c2_080C9BFC(u8 taskIdA) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); EnableInterrupts(INTR_FLAG_VBLANK); - SetVBlankCallback(sub_81754C8); - gTasks[taskIdA].func = sub_8175744; + SetVBlankCallback(CreditsVBlankCallback); + gTasks[taskIdA].func = Task_WaitPaletteFade; } } @@ -1323,12 +1323,12 @@ static void sub_81758A4(u8 taskIdA) if (!gPaletteFade.active) { SetGpuReg(REG_OFFSET_DISPCNT, 0); - sub_8176CA0(taskIdA); - gTasks[taskIdA].func = sub_81758E4; + ResetCreditsTasks(taskIdA); + gTasks[taskIdA].func = Task_CreditsLoadGrassScene; } } -static void sub_81758E4(u8 taskIdA) +static void Task_CreditsLoadGrassScene(u8 taskIdA) { switch (gMain.state) { @@ -1387,12 +1387,12 @@ static void sub_81758E4(u8 taskIdA) gMain.state = 0; gUnknown_0203BD28 = 0; - gTasks[taskIdA].func = sub_8175744; + gTasks[taskIdA].func = Task_WaitPaletteFade; break; } } -static void sub_8175A9C(u8 taskIdA) +static void Task_CreditsTheEnd1(u8 taskIdA) { if (gTasks[taskIdA].data[TDA_12]) { @@ -1401,23 +1401,23 @@ static void sub_8175A9C(u8 taskIdA) } BeginNormalPaletteFade(0xFFFFFFFF, 12, 0, 16, RGB_BLACK); - gTasks[taskIdA].func = sub_8175AE4; + gTasks[taskIdA].func = Task_CreditsTheEnd2; } -static void sub_8175AE4(u8 taskIdA) +static void Task_CreditsTheEnd2(u8 taskIdA) { if (!gPaletteFade.active) { - sub_8176CA0(taskIdA); - gTasks[taskIdA].func = sub_8175B1C; + ResetCreditsTasks(taskIdA); + gTasks[taskIdA].func = Task_CreditsTheEnd3; } } -static void sub_8175B1C(u8 taskIdA) +static void Task_CreditsTheEnd3(u8 taskIdA) { - sub_8175CE4(); + ResetGpuAndVram(); ResetPaletteFade(); - sub_8176D1C(0, 0x3800, 0); + LoadTheEndScreen(0, 0x3800, 0); ResetSpriteData(); FreeAllSpritePalettes(); BeginNormalPaletteFade(0xFFFFFFFF, 8, 16, 0, RGB_BLACK); @@ -1432,11 +1432,11 @@ static void sub_8175B1C(u8 taskIdA) | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON); - gTasks[taskIdA].data[TDA_0] = 0xEB; - gTasks[taskIdA].func = sub_8175B90; + gTasks[taskIdA].data[TDA_0] = 235; //set this to 215 to actually show "THE END" in time to the last song beat + gTasks[taskIdA].func = Task_CreditsTheEnd4; } -static void sub_8175B90(u8 taskIdA) +static void Task_CreditsTheEnd4(u8 taskIdA) { if (gTasks[taskIdA].data[TDA_0]) { @@ -1445,10 +1445,10 @@ static void sub_8175B90(u8 taskIdA) } BeginNormalPaletteFade(0xFFFFFFFF, 6, 0, 16, RGB_BLACK); - gTasks[taskIdA].func = sub_8175BD8; + gTasks[taskIdA].func = Task_CreditsTheEnd5; } -static void sub_8175BD8(u8 taskIdA) +static void Task_CreditsTheEnd5(u8 taskIdA) { if (!gPaletteFade.active) { @@ -1456,11 +1456,11 @@ static void sub_8175BD8(u8 taskIdA) BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0, RGB_BLACK); gTasks[taskIdA].data[TDA_0] = 7200; - gTasks[taskIdA].func = sub_8175C34; + gTasks[taskIdA].func = Task_CreditsTheEnd6; } } -static void sub_8175C34(u8 taskIdA) +static void Task_CreditsTheEnd6(u8 taskIdA) { if (!gPaletteFade.active) { @@ -1468,7 +1468,7 @@ static void sub_8175C34(u8 taskIdA) { FadeOutBGM(4); BeginNormalPaletteFade(0xFFFFFFFF, 8, 0, 16, RGB_WHITEALPHA); - gTasks[taskIdA].func = sub_8175CC8; + gTasks[taskIdA].func = Task_CreditsSoftReset; return; } @@ -1482,13 +1482,13 @@ static void sub_8175C34(u8 taskIdA) } } -static void sub_8175CC8(u8 taskIdA) +static void Task_CreditsSoftReset(u8 taskIdA) { if (!gPaletteFade.active) SoftReset(0xFF); } -static void sub_8175CE4(void) +static void ResetGpuAndVram(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); @@ -1539,12 +1539,15 @@ static void sub_8175DA0(u8 taskIdB) gTasks[taskIdB].data[TDB_0] += 1; return; case 2: - if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].func == sub_8175774) + if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].func == Task_ProgressCreditTasks) { if (gTasks[taskIdB].data[TDB_CURRENT_PAGE] < PAGE_COUNT) { for (i = 0; i < 5; i++) - sub_81755BC(gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text, 5 + i * 16, gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->var_1); + PrintCreditsText( + gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text, + 5 + i * 16, + gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->isTitle); CopyWindowToVram(0, 2); @@ -1578,7 +1581,7 @@ static void sub_8175DA0(u8 taskIdB) return; } - if (sub_817603C((u8)gTasks[taskIdB].data[TDB_CURRENT_PAGE], (u8)gTasks[taskIdB].data[TDB_TASK_A_ID])) + if (CheckChangeScene((u8)gTasks[taskIdB].data[TDB_CURRENT_PAGE], (u8)gTasks[taskIdB].data[TDB_TASK_A_ID])) { gTasks[taskIdB].data[TDB_0] += 1; return; @@ -1606,7 +1609,7 @@ static void sub_8175DA0(u8 taskIdB) } } -static u8 sub_817603C(u8 page, u8 taskIdA) +static u8 CheckChangeScene(u8 page, u8 taskIdA) { // Starts with bike + ocean + morning @@ -1685,7 +1688,7 @@ static void sub_81760FC(u8 taskIdD) gTasks[taskIdD].data[TDD_STATE]++; break; case 2: - if (gUnknown_0203BCE8->unk8E == 71 || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != sub_8175774) + if (gUnknown_0203BCE8->unk8E == 71 || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != Task_ProgressCreditTasks) break; r2 = sub_8177224(gUnknown_0203BCE8->unk0[gUnknown_0203BCE8->unk92], gUnknown_085E6F7C[gUnknown_0203BCE8->unk90][0], gUnknown_085E6F7C[gUnknown_0203BCE8->unk90][1], gUnknown_0203BCE8->unk90); if (gUnknown_0203BCE8->unk92 < gUnknown_0203BCE8->unk94 - 1) @@ -2006,7 +2009,7 @@ static bool8 sub_8176AB0(u8 data, u8 taskIdA) return FALSE; } -static void sub_8176CA0(u8 taskIdA) +static void ResetCreditsTasks(u8 taskIdA) { if (gTasks[taskIdA].data[TDA_0] != 0) { @@ -2035,7 +2038,7 @@ static void sub_8176CA0(u8 taskIdA) gUnknown_0203BD28 = 1; } -static void sub_8176D1C(u16 arg0, u16 arg1, u16 arg2) +static void LoadTheEndScreen(u16 arg0, u16 arg1, u16 arg2) { u16 baseTile; u16 i; @@ -2084,12 +2087,12 @@ static void sub_8176E40(u16 arg0, u16 palette) for (pos = 0; pos < 32 * 32; pos++) ((u16 *) (VRAM + arg0))[pos] = baseTile + 1; - sub_8176DBC(gUnknown_085E5BAC, 3, 7, arg0, palette); - sub_8176DBC(gUnknown_085E5BBB, 7, 7, arg0, palette); - sub_8176DBC(gUnknown_085E5BCA, 11, 7, arg0, palette); - sub_8176DBC(gUnknown_085E5BCA, 16, 7, arg0, palette); - sub_8176DBC(gUnknown_085E5BD9, 20, 7, arg0, palette); - sub_8176DBC(gUnknown_085E5BE8, 24, 7, arg0, palette); + sub_8176DBC(sTheEnd_LetterTMap, 3, 7, arg0, palette); + sub_8176DBC(sTheEnd_LetterHMap, 7, 7, arg0, palette); + sub_8176DBC(sTheEnd_LetterEMap, 11, 7, arg0, palette); + sub_8176DBC(sTheEnd_LetterEMap, 16, 7, arg0, palette); + sub_8176DBC(sTheEnd_LetterNMap, 20, 7, arg0, palette); + sub_8176DBC(sTheEnd_LetterDMap, 24, 7, arg0, palette); } static void sub_8176EE8(struct Sprite *sprite) diff --git a/asm/crt0.s b/src/crt0.s index 9ed678968..9ed678968 100644 --- a/asm/crt0.s +++ b/src/crt0.s diff --git a/src/data/battle_frontier/battle_frontier_exchange_corner.h b/src/data/battle_frontier/battle_frontier_exchange_corner.h new file mode 100644 index 000000000..bcb3cdd62 --- /dev/null +++ b/src/data/battle_frontier/battle_frontier_exchange_corner.h @@ -0,0 +1,99 @@ +static const u16 sFrontierExchangeCorner_Decor1[] = +{ + DECOR_KISS_POSTER, + DECOR_KISS_CUSHION, + DECOR_SMOOCHUM_DOLL, + DECOR_TOGEPI_DOLL, + DECOR_MEOWTH_DOLL, + DECOR_CLEFAIRY_DOLL, + DECOR_DITTO_DOLL, + DECOR_CYNDAQUIL_DOLL, + DECOR_CHIKORITA_DOLL, + DECOR_TOTODILE_DOLL, + 0xFFFF +}; + +static const u16 sFrontierExchangeCorner_Decor2[] = +{ + DECOR_LAPRAS_DOLL, + DECOR_SNORLAX_DOLL, + DECOR_VENUSAUR_DOLL, + DECOR_CHARIZARD_DOLL, + DECOR_BLASTOISE_DOLL, + 0xFFFF +}; + +static const u16 sFrontierExchangeCorner_Vitamins[] = +{ + ITEM_PROTEIN, + ITEM_CALCIUM, + ITEM_IRON, + ITEM_ZINC, + ITEM_CARBOS, + ITEM_HP_UP, + 0xFFFF +}; + +static const u16 sFrontierExchangeCorner_HoldItems[] = +{ + ITEM_LEFTOVERS, + ITEM_WHITE_HERB, + ITEM_QUICK_CLAW, + ITEM_MENTAL_HERB, + ITEM_BRIGHT_POWDER, + ITEM_CHOICE_BAND, + ITEM_KINGS_ROCK, + ITEM_FOCUS_BAND, + ITEM_SCOPE_LENS, + 0xFFFF +}; + +static const u8 *const sFrontierExchangeCorner_Decor1Descriptions[] = +{ + BattleFrontier_BattlePointExchangeServiceCorner_Text_2601AA, + BattleFrontier_BattlePointExchangeServiceCorner_Text_2601D0, + BattleFrontier_BattlePointExchangeServiceCorner_Text_260201, + BattleFrontier_BattlePointExchangeServiceCorner_Text_26022F, + BattleFrontier_BattlePointExchangeServiceCorner_Text_26025B, + BattleFrontier_BattlePointExchangeServiceCorner_Text_260287, + BattleFrontier_BattlePointExchangeServiceCorner_Text_2602B5, + BattleFrontier_BattlePointExchangeServiceCorner_Text_2602E0, + BattleFrontier_BattlePointExchangeServiceCorner_Text_26030F, + BattleFrontier_BattlePointExchangeServiceCorner_Text_26033E, + gText_Exit, +}; + +static const u8 *const sFrontierExchangeCorner_Decor2Descriptions[] = +{ + BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C, + BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C, + BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C, + BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C, + BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C, + gText_Exit +}; + +static const u8 *const sFrontierExchangeCorner_VitaminsDescriptions[] = +{ + BattleFrontier_BattlePointExchangeServiceCorner_Text_260397, + BattleFrontier_BattlePointExchangeServiceCorner_Text_2603BE, + BattleFrontier_BattlePointExchangeServiceCorner_Text_2603E6, + BattleFrontier_BattlePointExchangeServiceCorner_Text_26040E, + BattleFrontier_BattlePointExchangeServiceCorner_Text_260436, + BattleFrontier_BattlePointExchangeServiceCorner_Text_26045C, + gText_Exit +}; + +static const u8 *const sFrontierExchangeCorner_HoldItemsDescriptions[] = +{ + BattleFrontier_BattlePointExchangeServiceCorner_Text_26047A, + BattleFrontier_BattlePointExchangeServiceCorner_Text_2604AC, + BattleFrontier_BattlePointExchangeServiceCorner_Text_2604D8, + BattleFrontier_BattlePointExchangeServiceCorner_Text_26050F, + BattleFrontier_BattlePointExchangeServiceCorner_Text_260542, + BattleFrontier_BattlePointExchangeServiceCorner_Text_260575, + BattleFrontier_BattlePointExchangeServiceCorner_Text_2605A8, + BattleFrontier_BattlePointExchangeServiceCorner_Text_2605E2, + BattleFrontier_BattlePointExchangeServiceCorner_Text_260613, + gText_Exit +}; diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h index 64d216e4b..54d49422a 100644 --- a/src/data/battle_frontier/trainer_hill.h +++ b/src/data/battle_frontier/trainer_hill.h @@ -1,4857 +1,5261 @@ #define TRAINER_HILL_OTID 0x10000000 +static const struct TrHillTag gUnknown_0862609C = { + .unkField_0 = 4, + .unused1 = 1, + .numFloors = 2, + .checksum = 0x0 +}; + +static const struct TrHillFloor gUnknown_0862609C_floors[] = { + [0] = { + .unk0 = 0, + .unk1 = 0, + .trainers = { + [0] = { + .name = __("シゲノブ$$$$ "), + .facilityClass = FACILITY_CLASS_YOUNGSTER, + .unused = 0x1, + .speechBefore = { EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_EXCL, EC_WORD_THEY_WERE, EC_WORD_OPPONENT, EC_WORD_CAN }, + .speechWin = { EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_WEAK, EC_WORD_OF, EC_WORD_WERE, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS }, + .speechLose = { EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_STRONG, EC_WORD_HEY_QUES, EC_WORD_EXCL, EC_WORD_EXCL }, + .speechAfter = { EC_WORD_FABULOUS, EC_WORD_CAN_T, EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_EXCITING }, + .mons = { + [0] = { + .species = SPECIES_ZIGZAGOON, + .heldItem = ITEM_SITRUS_BERRY, + .moves = { MOVE_HEADBUTT, MOVE_PIN_MISSILE, MOVE_GROWL, MOVE_TAIL_WHIP }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 110, + .attackEV = 100, + .defenseEV = 100, + .speedEV = 100, + .spAttackEV = 0, + .spDefenseEV = 100, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x80, + .nickname = __("ジグザグマ$$$$$$"), + .friendship = 255 + }, + [1] = { + .species = SPECIES_SHROOMISH, + .heldItem = ITEM_PECHA_BERRY, + .moves = { MOVE_MEGA_DRAIN, MOVE_LEECH_SEED, MOVE_POISON_POWDER, MOVE_GROWTH }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 120, + .attackEV = 0, + .defenseEV = 120, + .speedEV = 0, + .spAttackEV = 150, + .spDefenseEV = 120, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x0, + .nickname = __("キノココ$$$$$$$"), + .friendship = 255 + }, + [2] = { + .species = SPECIES_SANDSHREW, + .heldItem = ITEM_QUICK_CLAW, + .moves = { MOVE_SCRATCH, MOVE_POISON_STING, MOVE_SAND_ATTACK, MOVE_SWIFT }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 110, + .attackEV = 100, + .defenseEV = 100, + .speedEV = 0, + .spAttackEV = 0, + .spDefenseEV = 200, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x80, + .nickname = __("サンド$$$$$$$$"), + .friendship = 255 + }, + [3] = NULL_BATTLE_TOWER_POKEMON, + [4] = NULL_BATTLE_TOWER_POKEMON, + [5] = NULL_BATTLE_TOWER_POKEMON + } + }, + [1] = { + .name = __("アカリ$$$$$ "), + .facilityClass = FACILITY_CLASS_PARASOL_LADY, + .unused = 0x1, + .speechBefore = { EC_WORD_SHE, EC_WORD_EVERY, EC_WORD_TYPE, EC_WORD_ADORE, EC_WORD_FOR, EC_WORD_EXCL }, + .speechWin = { EC_WORD_SURPRISE, EC_WORD_THESE, EC_WORD_WONDER, EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, EC_WORD_EXCL }, + .speechLose = { EC_WORD_OH_QUES, EC_MOVE(EARTHQUAKE), EC_WORD_EXISTS, EC_WORD_OF, EC_WORD_WITHOUT, EC_WORD_EXCL }, + .speechAfter = { EC_WORD_YOU_RE, EC_WORD_PROBABLY, EC_WORD_END, EC_WORD_UNTIL, EC_WORD_GOING, EC_WORD_ANYWHERE }, + .mons = { + [0] = NULL_BATTLE_TOWER_POKEMON, + [1] = NULL_BATTLE_TOWER_POKEMON, + [2] = NULL_BATTLE_TOWER_POKEMON, + [3] = { + .species = SPECIES_WINGULL, + .heldItem = ITEM_CHERI_BERRY, + .moves = { MOVE_WATER_GUN, MOVE_WING_ATTACK, MOVE_GROWL, MOVE_SUPERSONIC }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 110, + .attackEV = 100, + .defenseEV = 100, + .speedEV = 0, + .spAttackEV = 100, + .spDefenseEV = 100, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x0, + .nickname = __("キャモメ$$$$$$$"), + .friendship = 255 + }, + [4] = { + .species = SPECIES_NUMEL, + .heldItem = ITEM_FOCUS_BAND, + .moves = { MOVE_EMBER, MOVE_DIG, MOVE_TACKLE, MOVE_FOCUS_ENERGY }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 110, + .attackEV = 100, + .defenseEV = 100, + .speedEV = 0, + .spAttackEV = 100, + .spDefenseEV = 100, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x96, + .nickname = __("ドンメル$$$$$$$"), + .friendship = 255 + }, + [5] = { + .species = SPECIES_SURSKIT, + .heldItem = ITEM_PERSIM_BERRY, + .moves = { MOVE_BUBBLE_BEAM, MOVE_MUD_SHOT, MOVE_QUICK_ATTACK, MOVE_AGILITY }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 100, + .attackEV = 100, + .defenseEV = 100, + .speedEV = 0, + .spAttackEV = 100, + .spDefenseEV = 100, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x0, + .nickname = __("アメタマ$$$$$$$"), + .friendship = 255 + }, + } + }, + }, + .display = { + .data = { 0x31, 0x35, 0x35, 0x3b, 0x26, 0x26, 0x1b, 0x1c, 0x1d, 0x25, 0x39, 0x3a, 0x3b, 0x3b, 0x3b, 0x8, 0x31, 0x2b, 0x2b, 0x3b, 0x34, 0x34, 0x2b, 0x2b, 0x34, 0x33, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x8, 0x31, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x34, 0x34, 0x3b, 0x33, 0x3f, 0x3f, 0x3f, 0x3b, 0x3b, 0x8, 0x31, 0x2b, 0x2b, 0x35, 0x35, 0x35, 0x35, 0x35, 0x3b, 0x33, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, 0x8, 0x31, 0x2b, 0x34, 0x34, 0x34, 0x2b, 0x34, 0x34, 0x3b, 0x2c, 0x3f, 0x3f, 0x3f, 0x3b, 0x3b, 0x8, 0x31, 0x2b, 0x3b, 0x35, 0x3b, 0x2b, 0x3b, 0x35, 0x3b, 0x35, 0x3b, 0x3f, 0x3f, 0x3f, 0x3b, 0x8, 0x31, 0x2b, 0x3b, 0x2b, 0x3b, 0x2b, 0x3b, 0x2b, 0x3b, 0x2b, 0x3b, 0x3f, 0x3f, 0x3f, 0x3b, 0x8, 0x31, 0x34, 0x3b, 0x2b, 0x3b, 0x34, 0x3b, 0x2b, 0x35, 0x2b, 0x3b, 0x3b, 0x3f, 0x3b, 0x3b, 0x8, 0x31, 0x3b, 0x3b, 0x34, 0x3b, 0x3b, 0x3b, 0x34, 0x34, 0x34, 0x3f, 0x3b, 0x3b, 0x3b, 0x3f, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8 }, + .unk3A0 = { 0x381, 0x6fc1, 0x6341, 0x6041, 0x7f41, 0x4401, 0x5541, 0x5541, 0x11c1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }, + .coords = { 0x28, 0x78 }, + .direction = 0x1, + .range = 0x23 + } + }, + [1] = { + .unk0 = 0, + .unk1 = 0, + .trainers = { + [0] = { + .name = __("シゲゾウ$$$$ "), + .facilityClass = FACILITY_CLASS_NINJA_BOY, + .unused = 0x1, + .speechBefore = { EC_WORD_WIN, EC_WORD_UNTIL, EC_WORD_DAUGHTER, EC_MOVE(CONSTRICT), EC_WORD_OF, EC_WORD_WERE }, + .speechWin = { EC_MOVE(CONSTRICT), EC_WORD_UNTIL, EC_WORD_LESS, EC_WORD_NONE, EC_WORD_HEY_QUES, EC_WORD_EXCL }, + .speechLose = { EC_WORD_YET, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_URGH, EC_WORD_ALMOST, EC_WORD_POWER, EC_WORD_NONE }, + .speechAfter = { EC_WORD_HUH_QUES, EC_WORD_TOMORROW, EC_WORD_SMELL, EC_WORD_ABSOLUTELY, EC_WORD_THOSE, EC_WORD_EXCL_EXCL }, + .mons = { + [0] = { + .species = SPECIES_ELECTRIKE, + .heldItem = ITEM_CHERI_BERRY, + .moves = { MOVE_SPARK, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, MOVE_ROAR }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 120, + .attackEV = 120, + .defenseEV = 0, + .speedEV = 120, + .spAttackEV = 150, + .spDefenseEV = 0, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 1, + .personality = 0x0, + .nickname = __("ラクライ$$$$$$$"), + .friendship = 255 + }, + [1] = { + .species = SPECIES_CORPHISH, + .heldItem = ITEM_QUICK_CLAW, + .moves = { MOVE_KNOCK_OFF, MOVE_CRABHAMMER, MOVE_TAUNT, MOVE_PROTECT }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 100, + .attackEV = 110, + .defenseEV = 100, + .speedEV = 0, + .spAttackEV = 100, + .spDefenseEV = 100, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 1, + .personality = 0x96, + .nickname = __("ヘイガニ$$$$$$$"), + .friendship = 255 + }, + [2] = { + .species = SPECIES_BALTOY, + .heldItem = ITEM_PERSIM_BERRY, + .moves = { MOVE_PSYBEAM, MOVE_ROCK_TOMB, MOVE_MUD_SLAP, MOVE_HARDEN }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 100, + .attackEV = 100, + .defenseEV = 100, + .speedEV = 0, + .spAttackEV = 110, + .spDefenseEV = 100, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x96, + .nickname = __("ヤジロン$$$$$$$"), + .friendship = 255 + }, + [3] = NULL_BATTLE_TOWER_POKEMON, + [4] = NULL_BATTLE_TOWER_POKEMON, + [5] = NULL_BATTLE_TOWER_POKEMON, + } + }, + [1] = { + .name = __("ナミコ$$$$$ "), + .facilityClass = FACILITY_CLASS_BEAUTY, + .unused = 0x1, + .speechBefore = { EC_WORD_SISTER, EC_WORD_ALTHOUGH, EC_WORD_KIND, EC_WORD_MATCH, EC_WORD_PLEASE, EC_WORD_WITHOUT }, + .speechWin = { EC_WORD_KIND, EC_WORD_ELLIPSIS, EC_WORD_INSTEAD, EC_WORD_DEEP, EC_WORD_WEAK, EC_WORD_QUES }, + .speechLose = { EC_WORD_AWFUL, EC_WORD_GWAH, EC_WORD_HOPELESS, EC_WORD_CAN_T_WIN, EC_WORD_IS, EC_WORD_NONE }, + .speechAfter = { EC_WORD_AWW, 0xFFFF, 0xFFFF, EC_WORD_ALMOST, EC_WORD_GOOD, EC_WORD_ANYWHERE }, + .mons = { + [0] = NULL_BATTLE_TOWER_POKEMON, + [1] = NULL_BATTLE_TOWER_POKEMON, + [2] = NULL_BATTLE_TOWER_POKEMON, + [3] = { + .species = SPECIES_SPHEAL, + .heldItem = ITEM_FOCUS_BAND, + .moves = { MOVE_ICE_BALL, MOVE_BODY_SLAM, MOVE_WATER_GUN, MOVE_ENCORE }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 100, + .attackEV = 100, + .defenseEV = 100, + .speedEV = 0, + .spAttackEV = 110, + .spDefenseEV = 100, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x80, + .nickname = __("タマザラシ$$$$$$"), + .friendship = 255 + }, + [4] = { + .species = SPECIES_SPOINK, + .heldItem = ITEM_PERSIM_BERRY, + .moves = { MOVE_PSYWAVE, MOVE_FUTURE_SIGHT, MOVE_CONFUSE_RAY, MOVE_MAGIC_COAT }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 100, + .attackEV = 0, + .defenseEV = 100, + .speedEV = 100, + .spAttackEV = 110, + .spDefenseEV = 100, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 1, + .personality = 0xf, + .nickname = __("バネブー$$$$$$$"), + .friendship = 255 + }, + [5] = { + .species = SPECIES_POOCHYENA, + .heldItem = ITEM_PECHA_BERRY, + .moves = { MOVE_BITE, MOVE_POISON_FANG, MOVE_SWAGGER, MOVE_SCARY_FACE }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 70, + .attackEV = 80, + .defenseEV = 80, + .speedEV = 80, + .spAttackEV = 80, + .spDefenseEV = 80, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x96, + .nickname = __("ポチエナ$$$$$$$"), + .friendship = 255 + }, + } + }, + }, + .display = { + .data = { 0x31, 0x3b, 0x35, 0x3b, 0x39, 0x26, 0x1b, 0x1c, 0x1d, 0x25, 0x39, 0x3a, 0x3b, 0x35, 0x3b, 0x8, 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x2b, 0x3b, 0x8, 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3e, 0x3e, 0x3b, 0x2b, 0x3b, 0x8, 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x2b, 0x3b, 0x8, 0x3f, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3b, 0x3e, 0x3e, 0x2b, 0x3b, 0x8, 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2c, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x2b, 0x3b, 0x8, 0x31, 0x3f, 0x2b, 0x3b, 0x3b, 0x2c, 0x2c, 0x3b, 0x2c, 0x2c, 0x3e, 0x3e, 0x3b, 0x2b, 0x3b, 0x8, 0x31, 0x3b, 0x2b, 0x35, 0x35, 0x35, 0x35, 0x3b, 0x35, 0x35, 0x35, 0x35, 0x35, 0x2b, 0x3b, 0x8, 0x3f, 0x3b, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x3b, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x3b, 0x8, 0x31, 0x3b, 0x3f, 0x3f, 0x3b, 0x35, 0x35, 0x3b, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x8, 0x31, 0x3f, 0x3f, 0x3f, 0x3b, 0x2b, 0x2b, 0x35, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x8, 0x31, 0x3f, 0x3f, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x8, 0x31, 0x3b, 0x3b, 0x3b, 0x3f, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8 }, + .unk3A0 = { 0x381, 0x27c5, 0x27c5, 0x27c5, 0x27c5, 0x27c5, 0x26c5, 0x2005, 0x3efd, 0x1, 0x6ff, 0x7ff, 0x7ff, 0xffff, 0xffff, 0xffff }, + .coords = { 0x67, 0xa7 }, + .direction = 0x1, + .range = 0x33 + } + }, +}; + static const struct TrHillTag sDataTagNormal = { .unkField_0 = 8, .unused1 = 2, - .unkField_2 = 4, - .unused3 = 0, - .unused4 = 5, - .unused5 = 30, - .unused6 = 5, - .floors = + .numFloors = 4, + .checksum = 0x00051E05 +}; + +static const struct TrHillFloor sDataTagNormal_floors[] = +{ + [0] = { - [0] = + .unk0 = 0x11, + .unk1 = 0x12, + .trainers = { - .unk0 = 0x11, - .unk1 = 0x12, - .trainers = + [0] = { - [0] = + .name = _("ALAINA"), + .facilityClass = FACILITY_CLASS_HEX_MANIAC, + .unused = 0, + .speechBefore = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_CHOOSE, EC_WORD_NOT, EC_WORD_TO, EC_WORD_BELIEVE}, + .speechWin = {EC_WORD_A, EC_WORD_SUPER, EC_WORD_NATURAL, EC_WORD_POWER, EC_WORD_HAS, EC_WORD_COME}, + .speechLose = {EC_WORD_THIS, EC_WORD_MUST_BE, EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_EXCL, 0xFFFF}, + .speechAfter = {EC_WORD_I, EC_WORD_WILL, EC_WORD_DISAPPEAR, EC_WORD_IN, EC_WORD_THE, EC_WORD_DARK}, + .mons = { - .name = _("ALAINA"), - .facilityClass = FACILITY_CLASS_HEX_MANIAC, - .unused = 0, - .speechBefore = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_CHOOSE, EC_WORD_NOT, EC_WORD_TO, EC_WORD_BELIEVE}, - .speechWin = {EC_WORD_A, EC_WORD_SUPER, EC_WORD_NATURAL, EC_WORD_POWER, EC_WORD_HAS, EC_WORD_COME}, - .speechLose = {EC_WORD_THIS, EC_WORD_MUST_BE, EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_EXCL, 0xFFFF}, - .speechAfter = {EC_WORD_I, EC_WORD_WILL, EC_WORD_DISAPPEAR, EC_WORD_IN, EC_WORD_THE, EC_WORD_DARK}, - .mons = + [0] = { - [0] = - { - .species = SPECIES_MISDREAVUS, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, - .attackEV = 155, - .speedEV = 255, - .spAttackEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 24, - .attackIV = 24, - .defenseIV = 24, - .speedIV = 24, - .spAttackIV = 24, - .spDefenseIV = 24, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("MISDREAVUS"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_SOLROCK, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_PSYCHIC, MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, - .level = 0, - .ppBonuses = 0, - .hpEV = 200, - .defenseEV = 100, - .spAttackEV = 110, - .spDefenseEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 24, - .attackIV = 24, - .defenseIV = 24, - .speedIV = 24, - .spAttackIV = 24, - .spDefenseIV = 24, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("SOLROCK"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_CLAYDOL, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ICE_BEAM}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .defenseEV = 135, - .spDefenseEV = 120, - .otId = TRAINER_HILL_OTID, - .hpIV = 24, - .attackIV = 24, - .defenseIV = 24, - .speedIV = 24, - .spAttackIV = 24, - .spDefenseIV = 24, - .abilityNum = 0, - .personality = 0xC, - .nickname = _("CLAYDOL"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_WEEZING, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .attackEV = 200, - .spDefenseEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 24, - .attackIV = 24, - .defenseIV = 24, - .speedIV = 24, - .spAttackIV = 24, - .spDefenseIV = 24, - .abilityNum = 0, - .personality = 0x80, - .nickname = _("WEEZING"), - .friendship = 0, - }, - [4] = - { - .species = SPECIES_LUNATONE, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, - .level = 0, - .ppBonuses = 0, - .hpEV = 200, - .defenseEV = 100, - .spAttackEV = 110, - .spDefenseEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 24, - .attackIV = 24, - .defenseIV = 24, - .speedIV = 24, - .spAttackIV = 24, - .spDefenseIV = 24, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("LUNATONE"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_FLYGON, - .heldItem = ITEM_CHOICE_BAND, - .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_FLAMETHROWER}, - .level = 0, - .ppBonuses = 0, - .attackEV = 155, - .speedEV = 255, - .spAttackEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 24, - .attackIV = 24, - .defenseIV = 24, - .speedIV = 24, - .spAttackIV = 24, - .spDefenseIV = 24, - .abilityNum = 0, - .personality = 0x83, - .nickname = _("FLYGON"), - .friendship = 255, - }, + .species = SPECIES_MISDREAVUS, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .attackEV = 155, + .speedEV = 255, + .spAttackEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("MISDREAVUS"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_SOLROCK, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_PSYCHIC, MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 200, + .defenseEV = 100, + .spAttackEV = 110, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("SOLROCK"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_CLAYDOL, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ICE_BEAM}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .defenseEV = 135, + .spDefenseEV = 120, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .abilityNum = 0, + .personality = 0xC, + .nickname = _("CLAYDOL"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_WEEZING, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .attackEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .abilityNum = 0, + .personality = 0x80, + .nickname = _("WEEZING"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_LUNATONE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 200, + .defenseEV = 100, + .spAttackEV = 110, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("LUNATONE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_FLYGON, + .heldItem = ITEM_CHOICE_BAND, + .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_FLAMETHROWER}, + .level = 0, + .ppBonuses = 0, + .attackEV = 155, + .speedEV = 255, + .spAttackEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .abilityNum = 0, + .personality = 0x83, + .nickname = _("FLYGON"), + .friendship = 255, }, }, - [1] = + }, + [1] = + { + .name = _("ALFONSO"), + .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_NEVER, EC_WORD_TAKE, EC_WORD_A, EC_WORD_TRAIN, 0xFFFF}, + .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(SUPERSONIC), EC_WORD_ON, EC_WORD_MY, EC_WORD_BIKE}, + .speechLose = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_EXCL, EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_IT}, + .speechAfter = {EC_WORD_A, EC_WORD_BIKE, EC_WORD_OVER, EC_WORD_ANY, EC_WORD_TRAIN, EC_WORD_EXCL}, + .mons = { - .name = _("ALFONSO"), - .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, - .unused = 0, - .speechBefore = {EC_WORD_I, EC_WORD_NEVER, EC_WORD_TAKE, EC_WORD_A, EC_WORD_TRAIN, 0xFFFF}, - .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(SUPERSONIC), EC_WORD_ON, EC_WORD_MY, EC_WORD_BIKE}, - .speechLose = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_EXCL, EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_IT}, - .speechAfter = {EC_WORD_A, EC_WORD_BIKE, EC_WORD_OVER, EC_WORD_ANY, EC_WORD_TRAIN, EC_WORD_EXCL}, - .mons = + [0] = { - [0] = - { - .species = SPECIES_SEALEO, - .heldItem = ITEM_NEVER_MELT_ICE, - .moves = {MOVE_BLIZZARD, MOVE_ICE_BALL, MOVE_ENCORE, MOVE_HAIL}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("SEALEO"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_AMPHAROS, - .heldItem = ITEM_MAGNET, - .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_COTTON_SPORE, MOVE_LIGHT_SCREEN}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("AMPHAROS"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_MACHOKE, - .heldItem = ITEM_BLACK_BELT, - .moves = {MOVE_DYNAMIC_PUNCH, MOVE_MUD_SLAP, MOVE_COUNTER, MOVE_SCARY_FACE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .attackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x4E, - .nickname = _("MACHOKE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_FLAREON, - .heldItem = ITEM_CHARCOAL, - .moves = {MOVE_FIRE_BLAST, MOVE_BITE, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x28, - .nickname = _("FLAREON"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_MAGNETON, - .heldItem = ITEM_MAGNET, - .moves = {MOVE_ZAP_CANNON, MOVE_THUNDER_WAVE, MOVE_SCREECH, MOVE_METAL_SOUND}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("MAGNETON"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_PINSIR, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_GUILLOTINE, MOVE_BRICK_BREAK, MOVE_SWAGGER, MOVE_FAINT_ATTACK}, - .level = 0, - .ppBonuses = 0, - .hpEV = 200, - .defenseEV = 155, - .spDefenseEV = 155, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x85, - .nickname = _("PINSIR"), - .friendship = 255, - }, + .species = SPECIES_SEALEO, + .heldItem = ITEM_NEVER_MELT_ICE, + .moves = {MOVE_BLIZZARD, MOVE_ICE_BALL, MOVE_ENCORE, MOVE_HAIL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("SEALEO"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_AMPHAROS, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_COTTON_SPORE, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("AMPHAROS"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_MACHOKE, + .heldItem = ITEM_BLACK_BELT, + .moves = {MOVE_DYNAMIC_PUNCH, MOVE_MUD_SLAP, MOVE_COUNTER, MOVE_SCARY_FACE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x4E, + .nickname = _("MACHOKE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_FLAREON, + .heldItem = ITEM_CHARCOAL, + .moves = {MOVE_FIRE_BLAST, MOVE_BITE, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x28, + .nickname = _("FLAREON"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_MAGNETON, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_ZAP_CANNON, MOVE_THUNDER_WAVE, MOVE_SCREECH, MOVE_METAL_SOUND}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("MAGNETON"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_PINSIR, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_GUILLOTINE, MOVE_BRICK_BREAK, MOVE_SWAGGER, MOVE_FAINT_ATTACK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 200, + .defenseEV = 155, + .spDefenseEV = 155, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x85, + .nickname = _("PINSIR"), + .friendship = 255, }, }, }, + }, + .display = { .data = {0x31, 0x3B, 0x35, 0x35, 0x26, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x26, 0x3A, 0x3B, 0x35, 0x3B, 0x8, 0x31, 0x3B, 0x2C, 0x2C, 0x2C, 0x2B, 0x24, 0x24, 0x24, 0x24, 0x2C, 0x3B, 0x3B, 0x2C, 0x3B, 0x8, 0x2D, 0x3B, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x35, 0x3B, 0x35, 0x35, 0x3B, 0x8, 0x33, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x2C, 0x2B, 0x3B, 0x8, 0x33, 0x35, 0x3B, 0x3B, 0x3B, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x8, 0x34, 0x2C, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x2B, 0x32, 0x30, 0x2C, 0x3B, 0x8, 0x31, 0x35, 0x3B, 0x3B, 0x35, 0x3B, 0x2C, 0x3B, 0x3B, 0x35, 0x2C, 0x3B, 0x3B, 0x35, 0x35, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x35, 0x3B, 0x2B, 0x32, 0x21, 0x30, 0x2C, 0x2C, 0x8, 0x31, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x2C, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2B, 0x3B, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x8, 0x31, 0x35, 0x35, 0x35, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x2B, 0x3B, 0x35, 0x35, 0x8, 0x31, 0x2B, 0x2C, 0x2C, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x8, 0x31, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x3B, 0x3B, 0x2C, 0x32, 0x30, 0x2C, 0x32, 0x30, 0x3B, 0x35, 0x8, 0x31, 0x3B, 0x3B, 0x3B, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, .unk3A0 = {0x381, 0x3FE5, 0x401, 0xBDED, 0x8425, 0xDFBD, 0x221, 0x7E7F, 0x941, 0x7F7D, 0x911, 0x7FF7, 0x4101, 0x79F9, 0x803, 0xFFFF}, .coords = {27, 45}, .direction = 0x21, .range = 0x21, - }, - [1] = + } + }, + [1] = + { + .unk0 = 0x13, + .unk1 = 0x14, + .trainers = { - .unk0 = 0x13, - .unk1 = 0x14, - .trainers = + [0] = { - [0] = + .name = _("THEODORE"), + .facilityClass = FACILITY_CLASS_BLACK_BELT, + .unused = 0, + .speechBefore = {EC_WORD_MY, EC_WORD_POWER, EC_WORD_WILL, EC_MOVE2(STOMP), EC_WORD_YOU, EC_WORD_EXCL}, + .speechWin = {EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL_EXCL}, + .speechLose = {EC_WORD_I, EC_WORD_WENT, EC_WORD_AT, EC_WORD_IT, EC_WORD_TOO, EC_WORD_HARD}, + .speechAfter = {EC_WORD_YES_SIR_EXCL, EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_NICE, EC_WORD_AND, EC_WORD_GUTSY}, + .mons = { - .name = _("THEODORE"), - .facilityClass = FACILITY_CLASS_BLACK_BELT, - .unused = 0, - .speechBefore = {EC_WORD_MY, EC_WORD_POWER, EC_WORD_WILL, EC_MOVE2(STOMP), EC_WORD_YOU, EC_WORD_EXCL}, - .speechWin = {EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL_EXCL}, - .speechLose = {EC_WORD_I, EC_WORD_WENT, EC_WORD_AT, EC_WORD_IT, EC_WORD_TOO, EC_WORD_HARD}, - .speechAfter = {EC_WORD_YES_SIR_EXCL, EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_NICE, EC_WORD_AND, EC_WORD_GUTSY}, - .mons = + [0] = { - [0] = - { - .species = SPECIES_MEDITITE, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 20, - .defenseIV = 20, - .speedIV = 20, - .spAttackIV = 20, - .spDefenseIV = 20, - .abilityNum = 0, - .personality = 0x80, - .nickname = _("MEDITITE"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_HERACROSS, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 20, - .defenseIV = 20, - .speedIV = 20, - .spAttackIV = 20, - .spDefenseIV = 20, - .abilityNum = 1, - .personality = 0x80, - .nickname = _("HERACROSS"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_HITMONTOP, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 20, - .defenseIV = 20, - .speedIV = 20, - .spAttackIV = 20, - .spDefenseIV = 20, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("HITMONTOP"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_MACHOP, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 20, - .defenseIV = 20, - .speedIV = 20, - .spAttackIV = 20, - .spDefenseIV = 20, - .abilityNum = 0, - .personality = 0x4E, - .nickname = _("MACHOP"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_PINSIR, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 20, - .defenseIV = 20, - .speedIV = 20, - .spAttackIV = 20, - .spDefenseIV = 20, - .abilityNum = 0, - .personality = 0x80, - .nickname = _("PINSIR"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_HITMONCHAN, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 20, - .defenseIV = 20, - .speedIV = 20, - .spAttackIV = 20, - .spDefenseIV = 20, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("HITMONCHAN"), - .friendship = 255, - }, + .species = SPECIES_MEDITITE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .abilityNum = 0, + .personality = 0x80, + .nickname = _("MEDITITE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_HERACROSS, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .abilityNum = 1, + .personality = 0x80, + .nickname = _("HERACROSS"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_HITMONTOP, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("HITMONTOP"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_MACHOP, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .abilityNum = 0, + .personality = 0x4E, + .nickname = _("MACHOP"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_PINSIR, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .abilityNum = 0, + .personality = 0x80, + .nickname = _("PINSIR"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_HITMONCHAN, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("HITMONCHAN"), + .friendship = 255, }, }, - [1] = + }, + [1] = + { + .name = _("JAYDEN"), + .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .unused = 0, + .speechBefore = {EC_WORD_SOME, EC_WORD_THINGS, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_DO, EC_WORD_ALONE}, + .speechWin = {EC_WORD_YOU, EC_WORD_WIN, EC_WORD_AS, EC_WORD_A, EC_WORD_GROUP, 0xFFFF}, + .speechLose = {EC_WORD_WE, EC_WORD_COULDN_T, EC_WORD_WIN, EC_WORD_TOGETHER, EC_WORD_QUES, 0xFFFF}, + .speechAfter = {EC_WORD_MAYBE, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_BOY, EC_WORD_FRIEND}, + .mons = { - .name = _("JAYDEN"), - .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, - .unused = 0, - .speechBefore = {EC_WORD_SOME, EC_WORD_THINGS, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_DO, EC_WORD_ALONE}, - .speechWin = {EC_WORD_YOU, EC_WORD_WIN, EC_WORD_AS, EC_WORD_A, EC_WORD_GROUP, 0xFFFF}, - .speechLose = {EC_WORD_WE, EC_WORD_COULDN_T, EC_WORD_WIN, EC_WORD_TOGETHER, EC_WORD_QUES, 0xFFFF}, - .speechAfter = {EC_WORD_MAYBE, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_BOY, EC_WORD_FRIEND}, - .mons = + [0] = { - [0] = - { - .species = SPECIES_VULPIX, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_TAIL_WHIP, MOVE_OVERHEAT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("VULPIX"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_MINUN, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_THUNDER_WAVE, MOVE_CHARM, MOVE_ENCORE, MOVE_SPARK}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x8C, - .nickname = _("MINUN"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_ROSELIA, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_TOXIC, MOVE_LEECH_SEED, MOVE_SWEET_SCENT, MOVE_GIGA_DRAIN}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0xF, - .nickname = _("ROSELIA"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_MR_MIME, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_SAFEGUARD, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x82, - .nickname = _("MR. MIME"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_PLUSLE, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_RAIN_DANCE, MOVE_LIGHT_SCREEN, MOVE_HELPING_HAND, MOVE_THUNDER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x5, - .nickname = _("PLUSLE"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_TOGEPI, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOLLOW_ME, MOVE_METRONOME}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0x37, - .nickname = _("TOGEPI"), - .friendship = 255, - }, + .species = SPECIES_VULPIX, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_TAIL_WHIP, MOVE_OVERHEAT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("VULPIX"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MINUN, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_THUNDER_WAVE, MOVE_CHARM, MOVE_ENCORE, MOVE_SPARK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x8C, + .nickname = _("MINUN"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_ROSELIA, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_TOXIC, MOVE_LEECH_SEED, MOVE_SWEET_SCENT, MOVE_GIGA_DRAIN}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0xF, + .nickname = _("ROSELIA"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_MR_MIME, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_SAFEGUARD, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x82, + .nickname = _("MR. MIME"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_PLUSLE, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_RAIN_DANCE, MOVE_LIGHT_SCREEN, MOVE_HELPING_HAND, MOVE_THUNDER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x5, + .nickname = _("PLUSLE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_TOGEPI, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOLLOW_ME, MOVE_METRONOME}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0x37, + .nickname = _("TOGEPI"), + .friendship = 255, }, }, }, + }, + .display = { .data = {0xD1, 0xD5, 0xD5, 0xD5, 0xD9, 0xD9, 0x1B, 0x1C, 0x1D, 0xC5, 0xC6, 0xCE, 0xD5, 0xDB, 0xD5, 0x8, 0xD1, 0xCB, 0xC4, 0xC4, 0xDB, 0xDB, 0xC4, 0xC4, 0xC4, 0xCC, 0xCC, 0xCC, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xDB, 0x17, 0x17, 0x17, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xD5, 0x17, 0x17, 0x17, 0xD5, 0xD5, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0x17, 0x17, 0x1F, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xC4, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDB, 0xC4, 0xC4, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xC4, 0xC4, 0xDB, 0xC4, 0xC4, 0xC4, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0xDB, 0xD5, 0xD5, 0xD5, 0xCB, 0x8, 0xD1, 0xC4, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x8, 0xD1, 0xDB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x8, 0xD1, 0xDB, 0xDB, 0xC4, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xC4, 0xC4, 0xC4, 0xC4, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, .unk3A0 = {0x381, 0x73FB, 0x400B, 0x400B, 0x51EB, 0x538B, 0x51BB, 0x518B, 0x51EB, 0x518B, 0x51BB, 0x5003, 0x501F, 0x101F, 0x101F, 0xFFFF}, .coords = {180, 233}, .direction = 0x3, .range = 0x35, - }, - [2] = + } + }, + [2] = + { + .unk0 = 0x15, + .unk1 = 0x16, + .trainers = { - .unk0 = 0x15, - .unk1 = 0x16, - .trainers = + [0] = { - [0] = + .name = _("SALVADORE"), + .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, + .unused = 0, + .speechBefore = {EC_WORD_LET_S, EC_MOVE2(WRAP), EC_WORD_THINGS, EC_WORD_UP, EC_WORD_HERE, EC_WORD_HEY_QUES}, + .speechWin = {EC_WORD_WOULD, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_QUES}, + .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_SORRY, EC_WORD_FRIEND}, + .speechAfter = {EC_WORD_HAVEN_T, EC_WORD_YOU, EC_WORD_DONE, EC_WORD_ENOUGH, EC_WORD_QUES, 0xFFFF}, + .mons = { - .name = _("SALVADORE"), - .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, - .unused = 0, - .speechBefore = {EC_WORD_LET_S, EC_MOVE2(WRAP), EC_WORD_THINGS, EC_WORD_UP, EC_WORD_HERE, EC_WORD_HEY_QUES}, - .speechWin = {EC_WORD_WOULD, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_QUES}, - .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_SORRY, EC_WORD_FRIEND}, - .speechAfter = {EC_WORD_HAVEN_T, EC_WORD_YOU, EC_WORD_DONE, EC_WORD_ENOUGH, EC_WORD_QUES, 0xFFFF}, - .mons = + [0] = { - [0] = - { - .species = SPECIES_VAPOREON, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_HAZE, MOVE_HELPING_HAND, MOVE_TICKLE, MOVE_WATER_PULSE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x37, - .nickname = _("VAPOREON"), - .friendship = 0, - }, - [1] = - { - .species = SPECIES_DODRIO, - .heldItem = ITEM_KINGS_ROCK, - .moves = {MOVE_HAZE, MOVE_TRI_ATTACK, MOVE_TAUNT, MOVE_TORMENT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0x8A, - .nickname = _("DODRIO"), - .friendship = 0, - }, - [2] = - { - .species = SPECIES_OMASTAR, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_HAZE, MOVE_HYDRO_PUMP, MOVE_TICKLE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x14, - .nickname = _("OMASTAR"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_LICKITUNG, - .heldItem = ITEM_CHESTO_BERRY, - .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x8, - .nickname = _("LICKITUNG"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_SLOWBRO, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_BELLY_DRUM, MOVE_MUD_SLAP, MOVE_SWAGGER, MOVE_AMNESIA}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0x94, - .nickname = _("SLOWBRO"), - .friendship = 0, - }, - [5] = - { - .species = SPECIES_LINOONE, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x8, - .nickname = _("LINOONE"), - .friendship = 255, - }, + .species = SPECIES_VAPOREON, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_HAZE, MOVE_HELPING_HAND, MOVE_TICKLE, MOVE_WATER_PULSE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x37, + .nickname = _("VAPOREON"), + .friendship = 0, + }, + [1] = + { + .species = SPECIES_DODRIO, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_HAZE, MOVE_TRI_ATTACK, MOVE_TAUNT, MOVE_TORMENT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0x8A, + .nickname = _("DODRIO"), + .friendship = 0, + }, + [2] = + { + .species = SPECIES_OMASTAR, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_HAZE, MOVE_HYDRO_PUMP, MOVE_TICKLE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x14, + .nickname = _("OMASTAR"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_LICKITUNG, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x8, + .nickname = _("LICKITUNG"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_SLOWBRO, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_BELLY_DRUM, MOVE_MUD_SLAP, MOVE_SWAGGER, MOVE_AMNESIA}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0x94, + .nickname = _("SLOWBRO"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_LINOONE, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x8, + .nickname = _("LINOONE"), + .friendship = 255, }, }, - [1] = + }, + [1] = + { + .name = _("VERONICA"), + .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .unused = 0, + .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_STRONG, EC_WORD_BEAUTY, EC_WORD_AROUND, EC_WORD_HERE}, + .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL, 0xFFFF}, + .speechLose = {EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_TODAY, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL}, + .speechAfter = {EC_WORD_WHY, EC_WORD_YES, EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_THANK_YOU, EC_WORD_EXCL}, + .mons = { - .name = _("VERONICA"), - .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, - .unused = 0, - .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_STRONG, EC_WORD_BEAUTY, EC_WORD_AROUND, EC_WORD_HERE}, - .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL, 0xFFFF}, - .speechLose = {EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_TODAY, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL}, - .speechAfter = {EC_WORD_WHY, EC_WORD_YES, EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_THANK_YOU, EC_WORD_EXCL}, - .mons = + [0] = { - [0] = - { - .species = SPECIES_SKITTY, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_PSYCH_UP, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_IRON_TAIL}, - .level = 0, - .ppBonuses = 0, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0xCB, - .nickname = _("SKITTY"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_MEDICHAM, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_PSYCH_UP, MOVE_HI_JUMP_KICK, MOVE_MEGA_KICK, MOVE_ROCK_SLIDE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xD, - .nickname = _("MEDICHAM"), - .friendship = 0, - }, - [2] = - { - .species = SPECIES_STANTLER, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_PSYCH_UP, MOVE_RETURN, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .speedEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("STANTLER"), - .friendship = 0, - }, - [3] = - { - .species = SPECIES_NIDOQUEEN, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_SUPERPOWER, MOVE_BITE, MOVE_CHARM, MOVE_FLATTER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 20, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("NIDOQUEEN"), - .friendship = 0, - }, - [4] = - { - .species = SPECIES_NINETALES, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_OVERHEAT, MOVE_QUICK_ATTACK, MOVE_SPITE, MOVE_TAIL_WHIP}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xD7, - .nickname = _("NINETALES"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_CHARIZARD, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_OVERHEAT, MOVE_BEAT_UP, MOVE_SCARY_FACE, MOVE_GROWL}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x28, - .nickname = _("CHARIZARD"), - .friendship = 255, - }, + .species = SPECIES_SKITTY, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_PSYCH_UP, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_IRON_TAIL}, + .level = 0, + .ppBonuses = 0, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0xCB, + .nickname = _("SKITTY"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MEDICHAM, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_PSYCH_UP, MOVE_HI_JUMP_KICK, MOVE_MEGA_KICK, MOVE_ROCK_SLIDE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xD, + .nickname = _("MEDICHAM"), + .friendship = 0, + }, + [2] = + { + .species = SPECIES_STANTLER, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_PSYCH_UP, MOVE_RETURN, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .speedEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("STANTLER"), + .friendship = 0, + }, + [3] = + { + .species = SPECIES_NIDOQUEEN, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_SUPERPOWER, MOVE_BITE, MOVE_CHARM, MOVE_FLATTER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 20, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("NIDOQUEEN"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_NINETALES, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_OVERHEAT, MOVE_QUICK_ATTACK, MOVE_SPITE, MOVE_TAIL_WHIP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xD7, + .nickname = _("NINETALES"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_CHARIZARD, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_OVERHEAT, MOVE_BEAT_UP, MOVE_SCARY_FACE, MOVE_GROWL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x28, + .nickname = _("CHARIZARD"), + .friendship = 255, }, }, }, + }, + .display = { .data = {0x31, 0x35, 0x35, 0x35, 0x26, 0x26, 0x13, 0x14, 0x15, 0x38, 0x26, 0x2E, 0x35, 0x35, 0x3B, 0x8, 0x69, 0x63, 0x64, 0x64, 0x64, 0x64, 0x71, 0x71, 0x71, 0x72, 0x64, 0x64, 0x64, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x43, 0x41, 0x40, 0x41, 0x42, 0x41, 0x41, 0x4A, 0x42, 0x41, 0x41, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x43, 0x4B, 0x43, 0x43, 0x41, 0x42, 0x42, 0x40, 0x41, 0x40, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x40, 0x42, 0x42, 0x41, 0x41, 0x42, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x42, 0x41, 0x43, 0x4B, 0x41, 0x41, 0x41, 0x40, 0x43, 0x41, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x40, 0x43, 0x41, 0x42, 0x42, 0x41, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x8, 0x69, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x64, 0x73, 0x8, 0x69, 0x43, 0x43, 0x41, 0x42, 0x42, 0x41, 0x43, 0x41, 0x41, 0x40, 0x42, 0x41, 0x42, 0x73, 0x8, 0x69, 0x42, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x42, 0x73, 0x8}, .unk3A0 = {0x381, 0x7C3D, 0x4005, 0x4005, 0x4005, 0x4045, 0x4005, 0x4805, 0x4005, 0x4045, 0x4005, 0x4205, 0x4005, 0x4045, 0x1, 0x1}, .coords = {37, 41}, .direction = 0x23, .range = 0x33, - }, - [3] = + } + }, + [3] = + { + .unk0 = 0x17, + .unk1 = 0x18, + .trainers = { - .unk0 = 0x17, - .unk1 = 0x18, - .trainers = + [0] = { - [0] = + .name = _("KEENAN"), + .facilityClass = FACILITY_CLASS_PSYCHIC_M, + .unused = 0, + .speechBefore = {EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_HURRIED, 0xFFFF, 0xFFFF}, + .speechWin = {EC_WORD_TOO, EC_WORD_BAD, 0xFFFF, EC_WORD_TIME, EC_WORD_IS, EC_WORD_UP}, + .speechLose = {EC_WORD_DOES, EC_WORD_THE, EC_WORD_TIME, EC_WORD_WORRY, EC_WORD_YOU, EC_WORD_QUES}, + .speechAfter = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_HAVE, EC_WORD_TIME, EC_WORD_TO, EC_WORD_CHAT}, + .mons = { - .name = _("KEENAN"), - .facilityClass = FACILITY_CLASS_PSYCHIC_M, - .unused = 0, - .speechBefore = {EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_HURRIED, 0xFFFF, 0xFFFF}, - .speechWin = {EC_WORD_TOO, EC_WORD_BAD, 0xFFFF, EC_WORD_TIME, EC_WORD_IS, EC_WORD_UP}, - .speechLose = {EC_WORD_DOES, EC_WORD_THE, EC_WORD_TIME, EC_WORD_WORRY, EC_WORD_YOU, EC_WORD_QUES}, - .speechAfter = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_HAVE, EC_WORD_TIME, EC_WORD_TO, EC_WORD_CHAT}, - .mons = + [0] = { - [0] = - { - .species = SPECIES_ALAKAZAM, - .heldItem = ITEM_PETAYA_BERRY, - .moves = {MOVE_SKILL_SWAP, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_REFLECT}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x41, - .nickname = _("ALAKAZAM"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_BLISSEY, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_SKILL_SWAP, MOVE_EGG_BOMB, MOVE_THUNDERBOLT, MOVE_SING}, - .level = 0, - .ppBonuses = 0, - .defenseEV = 255, - .spAttackEV = 155, - .spDefenseEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 1, - .personality = 0xF, - .nickname = _("BLISSEY"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_GRUMPIG, - .heldItem = ITEM_TWISTED_SPOON, - .moves = {MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_REST}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .defenseEV = 200, - .spAttackEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x8C, - .nickname = _("GRUMPIG"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_GARDEVOIR, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_SKILL_SWAP, MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_PROTECT}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 1, - .personality = 0xF, - .nickname = _("GARDEVOIR"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_VENOMOTH, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_SKILL_SWAP, MOVE_SIGNAL_BEAM, MOVE_SLEEP_POWDER, MOVE_TOXIC}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x80, - .nickname = _("VENOMOTH"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_ESPEON, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_SKILL_SWAP, MOVE_PSYBEAM, MOVE_SWIFT, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("ESPEON"), - .friendship = 255, - }, + .species = SPECIES_ALAKAZAM, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_SKILL_SWAP, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_REFLECT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x41, + .nickname = _("ALAKAZAM"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_BLISSEY, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_SKILL_SWAP, MOVE_EGG_BOMB, MOVE_THUNDERBOLT, MOVE_SING}, + .level = 0, + .ppBonuses = 0, + .defenseEV = 255, + .spAttackEV = 155, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 1, + .personality = 0xF, + .nickname = _("BLISSEY"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_GRUMPIG, + .heldItem = ITEM_TWISTED_SPOON, + .moves = {MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_REST}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spAttackEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x8C, + .nickname = _("GRUMPIG"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_GARDEVOIR, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_SKILL_SWAP, MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 1, + .personality = 0xF, + .nickname = _("GARDEVOIR"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_VENOMOTH, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SKILL_SWAP, MOVE_SIGNAL_BEAM, MOVE_SLEEP_POWDER, MOVE_TOXIC}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x80, + .nickname = _("VENOMOTH"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ESPEON, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_SKILL_SWAP, MOVE_PSYBEAM, MOVE_SWIFT, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("ESPEON"), + .friendship = 255, }, }, - [1] = + }, + [1] = + { + .name = _("KRISTINA"), + .facilityClass = FACILITY_CLASS_AROMA_LADY, + .unused = 0, + .speechBefore = {EC_WORD_IT_S, EC_WORD_HOT, EC_WORD_ELLIPSIS, EC_WORD_WHAT, EC_WORD_A, EC_WORD_STENCH}, + .speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_AN, EC_WORD_OFFENSIVE, EC_WORD_STENCH}, + .speechLose = {EC_WORD_I, EC_MOVE2(COVET), EC_WORD_ANY, EC_WORD_STRONG, EC_WORD_STENCH, 0xFFFF}, + .speechAfter = {EC_WORD_MY, EC_WORD_SENSE, EC_WORD_OF, EC_WORD_SMELL, EC_WORD_ISN_T, EC_WORD_NORMAL}, + .mons = { - .name = _("KRISTINA"), - .facilityClass = FACILITY_CLASS_AROMA_LADY, - .unused = 0, - .speechBefore = {EC_WORD_IT_S, EC_WORD_HOT, EC_WORD_ELLIPSIS, EC_WORD_WHAT, EC_WORD_A, EC_WORD_STENCH}, - .speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_AN, EC_WORD_OFFENSIVE, EC_WORD_STENCH}, - .speechLose = {EC_WORD_I, EC_MOVE2(COVET), EC_WORD_ANY, EC_WORD_STRONG, EC_WORD_STENCH, 0xFFFF}, - .speechAfter = {EC_WORD_MY, EC_WORD_SENSE, EC_WORD_OF, EC_WORD_SMELL, EC_WORD_ISN_T, EC_WORD_NORMAL}, - .mons = + [0] = { - [0] = - { - .species = SPECIES_WEEZING, - .heldItem = ITEM_POISON_BARB, - .moves = {MOVE_TOXIC, MOVE_SLUDGE_BOMB, MOVE_SMOKESCREEN, MOVE_HAZE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .attackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("WEEZING"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_GLOOM, - .heldItem = ITEM_MIRACLE_SEED, - .moves = {MOVE_PETAL_DANCE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x8C, - .nickname = _("GLOOM"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_MUK, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_SCREECH, MOVE_DISABLE, MOVE_SLUDGE_BOMB, MOVE_ACID_ARMOR}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .attackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("MUK"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_TROPIUS, - .heldItem = ITEM_WHITE_HERB, - .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_SWEET_SCENT, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, - .attackEV = 120, - .speedEV = 255, - .spAttackEV = 135, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x83, - .nickname = _("TROPIUS"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_BELLOSSOM, - .heldItem = ITEM_MENTAL_HERB, - .moves = {MOVE_SWEET_SCENT, MOVE_PETAL_DANCE, MOVE_STUN_SPORE, MOVE_SLUDGE_BOMB}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x6, - .nickname = _("BELLOSSOM"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_MEGANIUM, - .heldItem = ITEM_MIRACLE_SEED, - .moves = {MOVE_RAZOR_LEAF, MOVE_BODY_SLAM, MOVE_LEECH_SEED, MOVE_SYNTHESIS}, - .level = 0, - .ppBonuses = 0, - .attackEV = 200, - .speedEV = 110, - .spAttackEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x1F, - .nickname = _("MEGANIUM"), - .friendship = 255, - }, + .species = SPECIES_WEEZING, + .heldItem = ITEM_POISON_BARB, + .moves = {MOVE_TOXIC, MOVE_SLUDGE_BOMB, MOVE_SMOKESCREEN, MOVE_HAZE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("WEEZING"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_GLOOM, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_PETAL_DANCE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x8C, + .nickname = _("GLOOM"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_MUK, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SCREECH, MOVE_DISABLE, MOVE_SLUDGE_BOMB, MOVE_ACID_ARMOR}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("MUK"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_TROPIUS, + .heldItem = ITEM_WHITE_HERB, + .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_SWEET_SCENT, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .attackEV = 120, + .speedEV = 255, + .spAttackEV = 135, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x83, + .nickname = _("TROPIUS"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_BELLOSSOM, + .heldItem = ITEM_MENTAL_HERB, + .moves = {MOVE_SWEET_SCENT, MOVE_PETAL_DANCE, MOVE_STUN_SPORE, MOVE_SLUDGE_BOMB}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x6, + .nickname = _("BELLOSSOM"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_MEGANIUM, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_RAZOR_LEAF, MOVE_BODY_SLAM, MOVE_LEECH_SEED, MOVE_SYNTHESIS}, + .level = 0, + .ppBonuses = 0, + .attackEV = 200, + .speedEV = 110, + .spAttackEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x1F, + .nickname = _("MEGANIUM"), + .friendship = 255, }, }, }, + }, + .display = { .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x1F, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x24, 0x24, 0x24, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x35, 0x35, 0x3B, 0x35, 0x35, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x8, 0x33, 0x17, 0x1F, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x34, 0x17, 0x2C, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x1F, 0x17, 0x17, 0x17, 0x17, 0x1F, 0x17, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x35, 0x1F, 0x17, 0x17, 0x1F, 0x17, 0x8, 0x34, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x3B, 0x3B, 0x2B, 0x17, 0x8, 0x17, 0x17, 0x17, 0x1F, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x2C, 0x17, 0x8, 0x1F, 0x17, 0x17, 0x2C, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x1F, 0x3B, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x2B, 0x3B, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x35, 0x35, 0x35, 0x2B, 0x17, 0x3B, 0x2C, 0x3B, 0x17, 0x8, 0x34, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, .unk3A0 = {0x381, 0x7C1, 0x8441, 0x8477, 0x8441, 0xA441, 0x401, 0x1, 0x8401, 0x8465, 0x445, 0x1441, 0x8449, 0x8449, 0x87C1, 0xFFFF}, .coords = {71, 167}, .direction = 0x1, .range = 0x33, - }, + } }, }; + static const struct TrHillTag sDataTagVariety = { .unkField_0 = 8, .unused1 = 1, - .unkField_2 = 4, - .unused3 = 0, - .unused4 = 21, - .unused5 = 76, - .unused6 = 5, - .floors = - { - [0] = + .numFloors = 4, + .checksum = 0x00054C15 +}; + +static const struct TrHillFloor sDataTagVariety_floors[] = { + [0] = { .unk0 = 0x29, .unk1 = 0x2A, .trainers = - { - [0] = { - .name = _("TERRANCE"), - .facilityClass = FACILITY_CLASS_GENTLEMAN, - .unused = 0, - .speechBefore = {EC_WORD_GOOD, EC_WORD_CHILDREN, EC_WORD_WILL, EC_WORD_GET, EC_WORD_A, EC_MOVE2(PRESENT)}, - .speechWin = {EC_WORD_THANK_YOU, EC_WORD_MY, EC_WORD_VICTORY, EC_WORD_IS, EC_WORD_YOUR, EC_MOVE2(PRESENT)}, - .speechLose = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_MOVE2(PRESENT), EC_WORD_TO, EC_WORD_YOU, 0xFFFF}, - .speechAfter = {EC_WORD_WELL_THEN, EC_WORD_CONGRATS, EC_WORD_MY, EC_WORD_FRIEND, 0xFFFF, 0xFFFF}, - .mons = - { - [0] = - { - .species = SPECIES_DELIBIRD, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_PRESENT, MOVE_SPLASH, MOVE_HAIL, MOVE_PROTECT}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0x8A, - .nickname = _("DELIBIRD"), - .friendship = 255, + [0] = + { + .name = _("TERRANCE"), + .facilityClass = FACILITY_CLASS_GENTLEMAN, + .unused = 0, + .speechBefore = {EC_WORD_GOOD, EC_WORD_CHILDREN, EC_WORD_WILL, EC_WORD_GET, EC_WORD_A, EC_MOVE2(PRESENT)}, + .speechWin = {EC_WORD_THANK_YOU, EC_WORD_MY, EC_WORD_VICTORY, EC_WORD_IS, EC_WORD_YOUR, EC_MOVE2(PRESENT)}, + .speechLose = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_MOVE2(PRESENT), EC_WORD_TO, EC_WORD_YOU, 0xFFFF}, + .speechAfter = {EC_WORD_WELL_THEN, EC_WORD_CONGRATS, EC_WORD_MY, EC_WORD_FRIEND, 0xFFFF, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_DELIBIRD, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_SPLASH, MOVE_HAIL, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0x8A, + .nickname = _("DELIBIRD"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_CLEFAIRY, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_COSMIC_POWER, MOVE_LIGHT_SCREEN, MOVE_MOONLIGHT}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xD, + .nickname = _("CLEFAIRY"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_PIKACHU, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_AGILITY}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xD, + .nickname = _("PIKACHU"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_MARILL, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_ENDURE}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0x8A, + .nickname = _("MARILL"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_JIGGLYPUFF, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_SING, MOVE_DISABLE, MOVE_REST}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xD, + .nickname = _("JIGGLYPUFF"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_TOGETIC, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_CHARM, MOVE_SWEET_KISS, MOVE_WISH}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0x26, + .nickname = _("TOGETIC"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("ELIZABETH"), + .facilityClass = FACILITY_CLASS_LADY, + .unused = 0, + .speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_WORD_SENSE, EC_WORD_ME, EC_MOVE(FOCUS_ENERGY), EC_WORD_QUES}, + .speechWin = {EC_WORD_THAT_S, EC_WORD_ABOUT, EC_WORD_RIGHT, EC_WORD_I, EC_WORD_WOULD, EC_WORD_THINK}, + .speechLose = {EC_WORD_THINGS, EC_WORD_DON_T, EC_WORD_ALWAYS, EC_WORD_WORK, EC_WORD_OUT, 0xFFFF}, + .speechAfter = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_LONESOME, EC_WORD_AND, EC_WORD_SAD, EC_WORD_NOW}, + .mons = + { + [0] = + { + .species = SPECIES_WIGGLYTUFF, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_SING, MOVE_DREAM_EATER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0xC1, + .nickname = _("WIGGLYTUFF"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_SABLEYE, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_ASTONISH, MOVE_FAINT_ATTACK, MOVE_DETECT, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x87, + .nickname = _("SABLEYE"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_GRUMPIG, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_PSYBEAM, MOVE_MAGIC_COAT, MOVE_BOUNCE, MOVE_FUTURE_SIGHT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0xA, + .nickname = _("GRUMPIG"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_CORSOLA, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_BUBBLE_BEAM, MOVE_ROCK_BLAST, MOVE_REFLECT, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x12, + .nickname = _("CORSOLA"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_CLAMPERL, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_WHIRLPOOL, MOVE_IRON_DEFENSE, MOVE_ENDURE, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0xA, + .nickname = _("CLAMPERL"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_STARMIE, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_DIVE, MOVE_ICY_WIND, MOVE_SWIFT, MOVE_SKILL_SWAP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0xA, + .nickname = _("STARMIE"), + .friendship = 255, + }, + }, }, - [1] = - { - .species = SPECIES_CLEFAIRY, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_PRESENT, MOVE_COSMIC_POWER, MOVE_LIGHT_SCREEN, MOVE_MOONLIGHT}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xD, - .nickname = _("CLEFAIRY"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_PIKACHU, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_PRESENT, MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_AGILITY}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xD, - .nickname = _("PIKACHU"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_MARILL, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_PRESENT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_ENDURE}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0x8A, - .nickname = _("MARILL"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_JIGGLYPUFF, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_PRESENT, MOVE_SING, MOVE_DISABLE, MOVE_REST}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xD, - .nickname = _("JIGGLYPUFF"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_TOGETIC, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_PRESENT, MOVE_CHARM, MOVE_SWEET_KISS, MOVE_WISH}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0x26, - .nickname = _("TOGETIC"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("ELIZABETH"), - .facilityClass = FACILITY_CLASS_LADY, - .unused = 0, - .speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_WORD_SENSE, EC_WORD_ME, EC_MOVE(FOCUS_ENERGY), EC_WORD_QUES}, - .speechWin = {EC_WORD_THAT_S, EC_WORD_ABOUT, EC_WORD_RIGHT, EC_WORD_I, EC_WORD_WOULD, EC_WORD_THINK}, - .speechLose = {EC_WORD_THINGS, EC_WORD_DON_T, EC_WORD_ALWAYS, EC_WORD_WORK, EC_WORD_OUT, 0xFFFF}, - .speechAfter = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_LONESOME, EC_WORD_AND, EC_WORD_SAD, EC_WORD_NOW}, - .mons = - { - [0] = - { - .species = SPECIES_WIGGLYTUFF, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_SING, MOVE_DREAM_EATER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0xC1, - .nickname = _("WIGGLYTUFF"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_SABLEYE, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_ASTONISH, MOVE_FAINT_ATTACK, MOVE_DETECT, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x87, - .nickname = _("SABLEYE"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_GRUMPIG, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_PSYBEAM, MOVE_MAGIC_COAT, MOVE_BOUNCE, MOVE_FUTURE_SIGHT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0xA, - .nickname = _("GRUMPIG"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_CORSOLA, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_BUBBLE_BEAM, MOVE_ROCK_BLAST, MOVE_REFLECT, MOVE_LIGHT_SCREEN}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x12, - .nickname = _("CORSOLA"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_CLAMPERL, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_WHIRLPOOL, MOVE_IRON_DEFENSE, MOVE_ENDURE, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0xA, - .nickname = _("CLAMPERL"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_STARMIE, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_DIVE, MOVE_ICY_WIND, MOVE_SWIFT, MOVE_SKILL_SWAP}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0xA, - .nickname = _("STARMIE"), - .friendship = 255, - }, - }, }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x40, 0x41, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x42, 0x42, 0x42, 0xFB, 0x41, 0x8, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x43, 0x43, 0xFB, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0xFB, 0x43, 0x41, 0x42, 0x40, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x40, 0x43, 0x43, 0x43, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x42, 0x41, 0xFE, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x42, 0x41, 0x43, 0x43, 0x43, 0x41, 0x40, 0x42, 0x42, 0x42, 0x42, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0xFB, 0x40, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x8, 0x40, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x8}, - .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}, - .coords = {133, 137}, - .direction = 0x23, - .range = 0x33, + .display = { + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x40, 0x41, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x42, 0x42, 0x42, 0xFB, 0x41, 0x8, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x43, 0x43, 0xFB, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0xFB, 0x43, 0x41, 0x42, 0x40, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x40, 0x43, 0x43, 0x43, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x42, 0x41, 0xFE, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x42, 0x41, 0x43, 0x43, 0x43, 0x41, 0x40, 0x42, 0x42, 0x42, 0x42, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0xFB, 0x40, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x8, 0x40, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x8}, + .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}, + .coords = {133, 137}, + .direction = 0x23, + .range = 0x33, + } }, - [1] = + [1] = { .unk0 = 0x2B, .unk1 = 0x2C, .trainers = - { - [0] = { - .name = _("ANNABELL"), - .facilityClass = FACILITY_CLASS_PARASOL_LADY, - .unused = 0, - .speechBefore = {EC_WORD_HI, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_UPBEAT, EC_WORD_QUES}, - .speechWin = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_WELL, EC_WORD_QUES, 0xFFFF}, - .speechLose = {EC_WORD_I, EC_WORD_CAN, EC_WORD_SEE, EC_WORD_YOU_RE, EC_WORD_FEELING, EC_WORD_GREAT}, - .speechAfter = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_LOOK, EC_WORD_READY, EC_WORD_TO, EC_WORD_HUSTLE}, - .mons = - { - [0] = - { - .species = SPECIES_JIGGLYPUFF, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_SING, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 85, - .attackEV = 85, - .defenseEV = 85, - .speedEV = 85, - .spAttackEV = 85, - .spDefenseEV = 85, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("JIGGLYPUFF"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_JYNX, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_PERISH_SONG, MOVE_FAKE_TEARS, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 85, - .attackEV = 85, - .defenseEV = 85, - .speedEV = 85, - .spAttackEV = 85, - .spDefenseEV = 85, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("JYNX"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_EXPLOUD, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_HOWL, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 85, - .attackEV = 85, - .defenseEV = 85, - .speedEV = 85, - .spAttackEV = 85, - .spDefenseEV = 85, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x96, - .nickname = _("EXPLOUD"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_ABSOL, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_SWORDS_DANCE, MOVE_SLASH, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 85, - .attackEV = 85, - .defenseEV = 85, - .speedEV = 85, - .spAttackEV = 85, - .spDefenseEV = 85, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x96, - .nickname = _("ABSOL"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_PIDGEOTTO, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_FEATHER_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 85, - .attackEV = 85, - .defenseEV = 85, - .speedEV = 85, - .spAttackEV = 85, - .spDefenseEV = 85, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x96, - .nickname = _("PIDGEOTTO"), - .friendship = 255, + [0] = + { + .name = _("ANNABELL"), + .facilityClass = FACILITY_CLASS_PARASOL_LADY, + .unused = 0, + .speechBefore = {EC_WORD_HI, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_UPBEAT, EC_WORD_QUES}, + .speechWin = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_WELL, EC_WORD_QUES, 0xFFFF}, + .speechLose = {EC_WORD_I, EC_WORD_CAN, EC_WORD_SEE, EC_WORD_YOU_RE, EC_WORD_FEELING, EC_WORD_GREAT}, + .speechAfter = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_LOOK, EC_WORD_READY, EC_WORD_TO, EC_WORD_HUSTLE}, + .mons = + { + [0] = + { + .species = SPECIES_JIGGLYPUFF, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SING, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("JIGGLYPUFF"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_JYNX, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_PERISH_SONG, MOVE_FAKE_TEARS, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("JYNX"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_EXPLOUD, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_HOWL, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x96, + .nickname = _("EXPLOUD"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_ABSOL, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SWORDS_DANCE, MOVE_SLASH, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x96, + .nickname = _("ABSOL"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_PIDGEOTTO, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_FEATHER_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x96, + .nickname = _("PIDGEOTTO"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ALTARIA, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("ALTARIA"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("COLEMAN"), + .facilityClass = FACILITY_CLASS_COLLECTOR, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_SEEK, EC_WORD_SOMEONE, EC_WORD_AS, EC_WORD_MY, EC_WORD_IDOL}, + .speechWin = {EC_WORD_DID, EC_WORD_MY, EC_WORD_IDOL, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES}, + .speechLose = {EC_WORD_YOU_RE, EC_WORD_LIKE, EC_WORD_A, EC_MOVE(HEAL_BELL), EC_WORD_TO_ME, EC_WORD_EXCL}, + .speechAfter = {EC_WORD_I_VE, EC_WORD_DECIDED, EC_WORD_I_CHOOSE_YOU, EC_WORD_AS, EC_WORD_MY, EC_WORD_IDOL}, + .mons = + { + [0] = + { + .species = SPECIES_CHIMECHO, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0xD, + .nickname = _("CHIMECHO"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_WHISMUR, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0xD, + .nickname = _("WHISMUR"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_YANMA, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x8A, + .nickname = _("YANMA"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_ILLUMISE, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0xA, + .nickname = _("ILLUMISE"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_SPHEAL, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0xA, + .nickname = _("SPHEAL"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_VIGOROTH, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x87, + .nickname = _("VIGOROTH"), + .friendship = 255, + }, + }, }, - [5] = - { - .species = SPECIES_ALTARIA, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 85, - .attackEV = 85, - .defenseEV = 85, - .speedEV = 85, - .spAttackEV = 85, - .spDefenseEV = 85, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("ALTARIA"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("COLEMAN"), - .facilityClass = FACILITY_CLASS_COLLECTOR, - .unused = 0, - .speechBefore = {EC_WORD_I, EC_WORD_SEEK, EC_WORD_SOMEONE, EC_WORD_AS, EC_WORD_MY, EC_WORD_IDOL}, - .speechWin = {EC_WORD_DID, EC_WORD_MY, EC_WORD_IDOL, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES}, - .speechLose = {EC_WORD_YOU_RE, EC_WORD_LIKE, EC_WORD_A, EC_MOVE(HEAL_BELL), EC_WORD_TO_ME, EC_WORD_EXCL}, - .speechAfter = {EC_WORD_I_VE, EC_WORD_DECIDED, EC_WORD_I_CHOOSE_YOU, EC_WORD_AS, EC_WORD_MY, EC_WORD_IDOL}, - .mons = - { - [0] = - { - .species = SPECIES_CHIMECHO, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0xD, - .nickname = _("CHIMECHO"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_WHISMUR, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0xD, - .nickname = _("WHISMUR"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_YANMA, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x8A, - .nickname = _("YANMA"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_ILLUMISE, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0xA, - .nickname = _("ILLUMISE"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_SPHEAL, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0xA, - .nickname = _("SPHEAL"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_VIGOROTH, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x87, - .nickname = _("VIGOROTH"), - .friendship = 255, - }, - }, }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9C, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x8, 0x9C, 0x9B, 0x96, 0x40, 0xDB, 0xDB, 0x40, 0x96, 0x40, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x8, 0x91, 0x96, 0x40, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9C, 0x8, 0x91, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x9B, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x8, 0x91, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x8, 0x91, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9C, 0x8, 0x9C, 0x9B, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9C, 0x96, 0x8, 0xD6, 0x96, 0x9C, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x9C, 0xD6, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0xD6, 0x9C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, - .coords = {131, 139}, - .direction = 0x23, - .range = 0x77, + .display = { + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9C, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x8, 0x9C, 0x9B, 0x96, 0x40, 0xDB, 0xDB, 0x40, 0x96, 0x40, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x8, 0x91, 0x96, 0x40, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9C, 0x8, 0x91, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x9B, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x8, 0x91, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x8, 0x91, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9C, 0x8, 0x9C, 0x9B, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9C, 0x96, 0x8, 0xD6, 0x96, 0x9C, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x9C, 0xD6, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0xD6, 0x9C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, + .coords = {131, 139}, + .direction = 0x23, + .range = 0x77, + } }, - [2] = + [2] = { .unk0 = 0x2D, .unk1 = 0x2E, .trainers = - { - [0] = { - .name = _("ENRIQUE"), - .facilityClass = FACILITY_CLASS_RICH_BOY, - .unused = 0, - .speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_FOR, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_TIME}, - .speechWin = {EC_WORD_HEY, EC_WORD_HEY, EC_WORD_EXCL, EC_WORD_WHAT_S_UP_QUES, 0xFFFF, 0xFFFF}, - .speechLose = {EC_WORD_AWW, EC_WORD_COULDN_T, EC_WORD_YOU, EC_WORD_LET_ME_WIN, EC_WORD_QUES, 0xFFFF}, - .speechAfter = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_SKILL, EC_WORD_QUES}, - .mons = - { - [0] = - { - .species = SPECIES_WOOPER, - .heldItem = ITEM_FIGY_BERRY, - .moves = {MOVE_RAIN_DANCE, MOVE_YAWN, MOVE_SURF, MOVE_HAZE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 6, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x8C, - .nickname = _("WOOPER"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_POLIWAG, - .heldItem = ITEM_WIKI_BERRY, - .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_MIST, MOVE_HYPNOSIS}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 6, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0x3, - .nickname = _("POLIWAG"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_PSYDUCK, - .heldItem = ITEM_AGUAV_BERRY, - .moves = {MOVE_HYPNOSIS, MOVE_SURF, MOVE_DISABLE, MOVE_SEISMIC_TOSS}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("PSYDUCK"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_RHYDON, - .heldItem = ITEM_SOFT_SAND, - .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .speedEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x96, - .nickname = _("RHYDON"), - .friendship = 0, - }, - [4] = - { - .species = SPECIES_RHYHORN, - .heldItem = ITEM_SOFT_SAND, - .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("RHYHORN"), - .friendship = 0, - }, - [5] = - { - .species = SPECIES_CUBONE, - .heldItem = ITEM_SOFT_SAND, - .moves = {MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0x80, - .nickname = _("CUBONE"), - .friendship = 0, - }, - }, - }, - [1] = - { - .name = _("COLLEEN"), - .facilityClass = FACILITY_CLASS_LADY, - .unused = 0, - .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_ROCK, EC_WORD_OUT}, - .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_ROCK, EC_WORD_THING, EC_WORD_EXCL}, - .speechLose = {EC_WORD_GO_AHEAD, EC_WORD_AND, EC_WORD_CRUSH, EC_WORD_MY, EC_WORD_DREAM, EC_WORD_ELLIPSIS}, - .speechAfter = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_WILD, EC_WORD_SOMETIME}, - .mons = - { - [0] = - { - .species = SPECIES_MAGNEMITE, - .heldItem = ITEM_MAGNET, - .moves = {MOVE_THUNDER, MOVE_ZAP_CANNON, MOVE_SPARK, MOVE_THUNDER_SHOCK}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x8C, - .nickname = _("MAGNEMITE"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_ELECTABUZZ, - .heldItem = ITEM_MAGNET, - .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_SHOCK_WAVE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x41, - .nickname = _("ELECTABUZZ"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_FLAAFFY, - .heldItem = ITEM_MAGNET, - .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_SHOCK_WAVE, MOVE_THUNDER_SHOCK}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .spAttackEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("FLAAFFY"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_BALTOY, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("BALTOY"), - .friendship = 0, - }, - [4] = - { - .species = SPECIES_PINECO, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .speedEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("PINECO"), - .friendship = 0, - }, - [5] = - { - .species = SPECIES_VOLTORB, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x80, - .nickname = _("VOLTORB"), - .friendship = 0, + [0] = + { + .name = _("ENRIQUE"), + .facilityClass = FACILITY_CLASS_RICH_BOY, + .unused = 0, + .speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_FOR, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_TIME}, + .speechWin = {EC_WORD_HEY, EC_WORD_HEY, EC_WORD_EXCL, EC_WORD_WHAT_S_UP_QUES, 0xFFFF, 0xFFFF}, + .speechLose = {EC_WORD_AWW, EC_WORD_COULDN_T, EC_WORD_YOU, EC_WORD_LET_ME_WIN, EC_WORD_QUES, 0xFFFF}, + .speechAfter = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_SKILL, EC_WORD_QUES}, + .mons = + { + [0] = + { + .species = SPECIES_WOOPER, + .heldItem = ITEM_FIGY_BERRY, + .moves = {MOVE_RAIN_DANCE, MOVE_YAWN, MOVE_SURF, MOVE_HAZE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 6, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x8C, + .nickname = _("WOOPER"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_POLIWAG, + .heldItem = ITEM_WIKI_BERRY, + .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_MIST, MOVE_HYPNOSIS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 6, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0x3, + .nickname = _("POLIWAG"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_PSYDUCK, + .heldItem = ITEM_AGUAV_BERRY, + .moves = {MOVE_HYPNOSIS, MOVE_SURF, MOVE_DISABLE, MOVE_SEISMIC_TOSS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("PSYDUCK"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_RHYDON, + .heldItem = ITEM_SOFT_SAND, + .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .speedEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x96, + .nickname = _("RHYDON"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_RHYHORN, + .heldItem = ITEM_SOFT_SAND, + .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("RHYHORN"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_CUBONE, + .heldItem = ITEM_SOFT_SAND, + .moves = {MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0x80, + .nickname = _("CUBONE"), + .friendship = 0, + }, + }, + }, + [1] = + { + .name = _("COLLEEN"), + .facilityClass = FACILITY_CLASS_LADY, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_ROCK, EC_WORD_OUT}, + .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_ROCK, EC_WORD_THING, EC_WORD_EXCL}, + .speechLose = {EC_WORD_GO_AHEAD, EC_WORD_AND, EC_WORD_CRUSH, EC_WORD_MY, EC_WORD_DREAM, EC_WORD_ELLIPSIS}, + .speechAfter = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_WILD, EC_WORD_SOMETIME}, + .mons = + { + [0] = + { + .species = SPECIES_MAGNEMITE, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_THUNDER, MOVE_ZAP_CANNON, MOVE_SPARK, MOVE_THUNDER_SHOCK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x8C, + .nickname = _("MAGNEMITE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_ELECTABUZZ, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_SHOCK_WAVE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x41, + .nickname = _("ELECTABUZZ"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_FLAAFFY, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_SHOCK_WAVE, MOVE_THUNDER_SHOCK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .spAttackEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("FLAAFFY"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_BALTOY, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("BALTOY"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_PINECO, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .speedEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("PINECO"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_VOLTORB, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x80, + .nickname = _("VOLTORB"), + .friendship = 0, + }, + }, }, - }, }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x1C, 0x1D, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x84, 0x84, 0x84, 0x9A, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x17, 0xBB, 0xBB, 0x8}, - .unk3A0 = {0x381, 0x381, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1}, - .coords = {25, 30}, - .direction = 0x23, - .range = 0x44, + .display = { + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x1C, 0x1D, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x84, 0x84, 0x84, 0x9A, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x17, 0xBB, 0xBB, 0x8}, + .unk3A0 = {0x381, 0x381, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1}, + .coords = {25, 30}, + .direction = 0x23, + .range = 0x44, + } }, - [3] = + [3] = { .unk0 = 0x2F, .unk1 = 0x30, .trainers = - { - [0] = - { - .name = _("KIMBERLY"), - .facilityClass = FACILITY_CLASS_POKEFAN_F, - .unused = 0, - .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_WORKING, EC_WORD_AT, EC_WORD_MY, EC_WORD_OWN_TEMPO}, - .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_QUES}, - .speechLose = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_MEAN, EC_WORD_KID, EC_WORD_IT, EC_WORD_SEEMS}, - .speechAfter = {EC_WORD_MY, EC_WORD_OWN_TEMPO, EC_WORD_IS, EC_WORD_RIGHT, EC_WORD_FOR, EC_WORD_ME}, - .mons = - { - [0] = - { - .species = SPECIES_UNOWN, - .heldItem = ITEM_MIRACLE_SEED, - .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 30, - .attackIV = 31, - .defenseIV = 30, - .speedIV = 31, - .spAttackIV = 30, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x202, - .nickname = _("UNOWN"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_UNOWN, - .heldItem = ITEM_MYSTIC_WATER, - .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 30, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 30, - .spAttackIV = 30, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x10001, - .nickname = _("UNOWN"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_UNOWN, - .heldItem = ITEM_BLACK_BELT, - .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 30, - .attackIV = 30, - .defenseIV = 30, - .speedIV = 30, - .spAttackIV = 30, - .spDefenseIV = 30, - .abilityNum = 0, - .personality = 0x102, - .nickname = _("UNOWN"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_SPINDA, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .defenseEV = 200, - .spDefenseEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x88FE980F, - .nickname = _("SPINDA"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_PLUSLE, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("PLUSLE"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_VOLBEAT, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_HELPING_HAND, MOVE_SIGNAL_BEAM, MOVE_SOLAR_BEAM, MOVE_MOONLIGHT}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0xF, - .nickname = _("VOLBEAT"), - .friendship = 255, - }, - }, - }, - [1] = { - .name = _("FRANCISCO"), - .facilityClass = FACILITY_CLASS_POKEFAN_M, - .unused = 0, - .speechBefore = {EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_TOO, 0xFFFF}, - .speechWin = {EC_WORD_SO, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_LOSE, 0xFFFF}, - .speechLose = {EC_WORD_NO, EC_WORD_WONDER, EC_WORD_I, EC_WORD_COULDN_T, EC_WORD_BEAT, EC_WORD_YOU}, - .speechAfter = {EC_WORD_YES, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_THANK_YOU, 0xFFFF, 0xFFFF}, - .mons = - { - [0] = - { - .species = SPECIES_SPINDA, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .defenseEV = 200, - .spDefenseEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xE2880098, - .nickname = _("SPINDA"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_MINUN, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x8C, - .nickname = _("MINUN"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_ILLUMISE, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_HELPING_HAND, MOVE_WISH, MOVE_THUNDERBOLT, MOVE_MOONLIGHT}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("ILLUMISE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_UNOWN, - .heldItem = ITEM_CHARCOAL, - .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 30, - .attackIV = 31, - .defenseIV = 30, - .speedIV = 30, - .spAttackIV = 30, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x302, - .nickname = _("UNOWN"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_UNOWN, - .heldItem = ITEM_SOFT_SAND, - .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .attackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 30, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 30, - .spDefenseIV = 30, - .abilityNum = 0, - .personality = 0x203, - .nickname = _("UNOWN"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_UNOWN, - .heldItem = ITEM_TWISTED_SPOON, - .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 30, - .speedIV = 30, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x301, - .nickname = _("UNOWN"), - .friendship = 255, + [0] = + { + .name = _("KIMBERLY"), + .facilityClass = FACILITY_CLASS_POKEFAN_F, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_WORKING, EC_WORD_AT, EC_WORD_MY, EC_WORD_OWN_TEMPO}, + .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_QUES}, + .speechLose = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_MEAN, EC_WORD_KID, EC_WORD_IT, EC_WORD_SEEMS}, + .speechAfter = {EC_WORD_MY, EC_WORD_OWN_TEMPO, EC_WORD_IS, EC_WORD_RIGHT, EC_WORD_FOR, EC_WORD_ME}, + .mons = + { + [0] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 30, + .attackIV = 31, + .defenseIV = 30, + .speedIV = 31, + .spAttackIV = 30, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x202, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_MYSTIC_WATER, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 30, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 30, + .spAttackIV = 30, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x10001, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_BLACK_BELT, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 30, + .attackIV = 30, + .defenseIV = 30, + .speedIV = 30, + .spAttackIV = 30, + .spDefenseIV = 30, + .abilityNum = 0, + .personality = 0x102, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_SPINDA, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x88FE980F, + .nickname = _("SPINDA"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_PLUSLE, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("PLUSLE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_VOLBEAT, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_HELPING_HAND, MOVE_SIGNAL_BEAM, MOVE_SOLAR_BEAM, MOVE_MOONLIGHT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0xF, + .nickname = _("VOLBEAT"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("FRANCISCO"), + .facilityClass = FACILITY_CLASS_POKEFAN_M, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_TOO, 0xFFFF}, + .speechWin = {EC_WORD_SO, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_LOSE, 0xFFFF}, + .speechLose = {EC_WORD_NO, EC_WORD_WONDER, EC_WORD_I, EC_WORD_COULDN_T, EC_WORD_BEAT, EC_WORD_YOU}, + .speechAfter = {EC_WORD_YES, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_THANK_YOU, 0xFFFF, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_SPINDA, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xE2880098, + .nickname = _("SPINDA"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MINUN, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x8C, + .nickname = _("MINUN"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_ILLUMISE, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_HELPING_HAND, MOVE_WISH, MOVE_THUNDERBOLT, MOVE_MOONLIGHT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("ILLUMISE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_CHARCOAL, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 30, + .attackIV = 31, + .defenseIV = 30, + .speedIV = 30, + .spAttackIV = 30, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x302, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_SOFT_SAND, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 30, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 30, + .spDefenseIV = 30, + .abilityNum = 0, + .personality = 0x203, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_TWISTED_SPOON, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 30, + .speedIV = 30, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x301, + .nickname = _("UNOWN"), + .friendship = 255, + }, + }, }, - }, }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x5E, 0x41, 0x71, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x65, 0x40, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x42, 0x73, 0x41, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x43, 0x73, 0x43, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x43, 0x6D, 0x41, 0x73, 0x43, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x40, 0x73, 0x8, 0x6C, 0x73, 0x40, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x1, 0x2201, 0x1, 0x8881, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0xFFFF}, - .coords = {42, 46}, - .direction = 0x23, - .range = 0x33, + .display = { + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x5E, 0x41, 0x71, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x65, 0x40, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x42, 0x73, 0x41, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x43, 0x73, 0x43, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x43, 0x6D, 0x41, 0x73, 0x43, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x40, 0x73, 0x8, 0x6C, 0x73, 0x40, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x1, 0x2201, 0x1, 0x8881, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0xFFFF}, + .coords = {42, 46}, + .direction = 0x23, + .range = 0x33, + } }, - }, }; + static const struct TrHillTag sDataTagUnique = { .unkField_0 = 8, .unused1 = 3, - .unkField_2 = 4, - .unused3 = 0, - .unused4 = 243, - .unused5 = 82, - .unused6 = 6, - .floors = - { - [0] = + .numFloors = 4, + .checksum = 0x000652F3 +}; + +static const struct TrHillFloor sDataTagUnique_floors[] = { + [0] = { .unk0 = 0x31, .unk1 = 0x32, .trainers = - { - [0] = - { - .name = _("MEREDITH"), - .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, - .unused = 0, - .speechBefore = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I, EC_WORD_ELLIPSIS, 0xFFFF}, - .speechWin = {EC_WORD_OH, EC_WORD_EXCL, 0xFFFF, EC_WORD_UM, EC_WORD_ELLIPSIS, EC_WORD_YAY}, - .speechLose = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_WAAAH, EC_WORD_ELLIPSIS, 0xFFFF}, - .speechAfter = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_SAD, EC_WORD_ELLIPSIS}, - .mons = - { - [0] = - { - .species = SPECIES_SUNFLORA, - .heldItem = ITEM_PERSIM_BERRY, - .moves = {MOVE_PETAL_DANCE, MOVE_GRASS_WHISTLE, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .defenseEV = 155, - .spDefenseEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("SUNFLORA"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_TANGELA, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_AMNESIA, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spDefenseEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x91, - .nickname = _("TANGELA"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_VENUSAUR, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, - .hpEV = 100, - .attackEV = 110, - .defenseEV = 100, - .spAttackEV = 100, - .spDefenseEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x1F, - .nickname = _("VENUSAUR"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_LANTURN, - .heldItem = ITEM_PERSIM_BERRY, - .moves = {MOVE_SPARK, MOVE_WATER_PULSE, MOVE_CONFUSE_RAY, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("LANTURN"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_MANECTRIC, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_THUNDERBOLT, MOVE_HEADBUTT, MOVE_BITE, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0xF, - .nickname = _("MANECTRIC"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_RAIKOU, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_THUNDER, MOVE_CRUNCH, MOVE_ROAR, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("RAIKOU"), - .friendship = 255, - }, - }, - }, - [1] = { - .name = _("BERNARD"), - .facilityClass = FACILITY_CLASS_KINDLER, - .unused = 0, - .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE, EC_WORD_THIS, EC_WORD_HOT, EC_WORD_BATTLE}, - .speechWin = {EC_WORD_DID, EC_WORD_I, EC_WORD_COOL, EC_WORD_YOU, EC_WORD_DOWN, EC_WORD_QUES}, - .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_TERRIBLE, EC_WORD_PERSON}, - .speechAfter = {EC_WORD_YOUR, EC_WORD_HEART, EC_WORD_MUST_BE, EC_WORD_ICE, EC_WORD_COLD, EC_WORD_ELLIPSIS}, - .mons = - { - [0] = - { - .species = SPECIES_RELICANTH, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_MUD_SPORT, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 155, - .defenseEV = 100, - .spDefenseEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x2F, - .nickname = _("RELICANTH"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_GOLDUCK, - .heldItem = ITEM_LAX_INCENSE, - .moves = {MOVE_SURF, MOVE_PSYBEAM, MOVE_BRICK_BREAK, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("GOLDUCK"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_BLASTOISE, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_HYDRO_PUMP, MOVE_BITE, MOVE_MIRROR_COAT, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x28, - .nickname = _("BLASTOISE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_MAGCARGO, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_HEAT_WAVE, MOVE_ROCK_SLIDE, MOVE_PROTECT, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spDefenseEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0x93, - .nickname = _("MAGCARGO"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_RAPIDASH, - .heldItem = ITEM_KINGS_ROCK, - .moves = {MOVE_FIRE_BLAST, MOVE_BOUNCE, MOVE_QUICK_ATTACK, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0xF, - .nickname = _("RAPIDASH"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_MOLTRES, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_SKY_ATTACK, MOVE_AERIAL_ACE, MOVE_ROAR, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("MOLTRES"), - .friendship = 255, + [0] = + { + .name = _("MEREDITH"), + .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, + .unused = 0, + .speechBefore = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I, EC_WORD_ELLIPSIS, 0xFFFF}, + .speechWin = {EC_WORD_OH, EC_WORD_EXCL, 0xFFFF, EC_WORD_UM, EC_WORD_ELLIPSIS, EC_WORD_YAY}, + .speechLose = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_WAAAH, EC_WORD_ELLIPSIS, 0xFFFF}, + .speechAfter = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_SAD, EC_WORD_ELLIPSIS}, + .mons = + { + [0] = + { + .species = SPECIES_SUNFLORA, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_PETAL_DANCE, MOVE_GRASS_WHISTLE, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .defenseEV = 155, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("SUNFLORA"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_TANGELA, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_AMNESIA, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spDefenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x91, + .nickname = _("TANGELA"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_VENUSAUR, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 100, + .attackEV = 110, + .defenseEV = 100, + .spAttackEV = 100, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x1F, + .nickname = _("VENUSAUR"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_LANTURN, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_SPARK, MOVE_WATER_PULSE, MOVE_CONFUSE_RAY, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("LANTURN"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_MANECTRIC, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_THUNDERBOLT, MOVE_HEADBUTT, MOVE_BITE, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0xF, + .nickname = _("MANECTRIC"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_RAIKOU, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_THUNDER, MOVE_CRUNCH, MOVE_ROAR, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("RAIKOU"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("BERNARD"), + .facilityClass = FACILITY_CLASS_KINDLER, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE, EC_WORD_THIS, EC_WORD_HOT, EC_WORD_BATTLE}, + .speechWin = {EC_WORD_DID, EC_WORD_I, EC_WORD_COOL, EC_WORD_YOU, EC_WORD_DOWN, EC_WORD_QUES}, + .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_TERRIBLE, EC_WORD_PERSON}, + .speechAfter = {EC_WORD_YOUR, EC_WORD_HEART, EC_WORD_MUST_BE, EC_WORD_ICE, EC_WORD_COLD, EC_WORD_ELLIPSIS}, + .mons = + { + [0] = + { + .species = SPECIES_RELICANTH, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_MUD_SPORT, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 155, + .defenseEV = 100, + .spDefenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x2F, + .nickname = _("RELICANTH"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_GOLDUCK, + .heldItem = ITEM_LAX_INCENSE, + .moves = {MOVE_SURF, MOVE_PSYBEAM, MOVE_BRICK_BREAK, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("GOLDUCK"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_BLASTOISE, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_HYDRO_PUMP, MOVE_BITE, MOVE_MIRROR_COAT, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x28, + .nickname = _("BLASTOISE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_MAGCARGO, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_HEAT_WAVE, MOVE_ROCK_SLIDE, MOVE_PROTECT, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spDefenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0x93, + .nickname = _("MAGCARGO"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_RAPIDASH, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_FIRE_BLAST, MOVE_BOUNCE, MOVE_QUICK_ATTACK, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0xF, + .nickname = _("RAPIDASH"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_MOLTRES, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SKY_ATTACK, MOVE_AERIAL_ACE, MOVE_ROAR, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("MOLTRES"), + .friendship = 255, + }, + }, }, - }, }, - }, - .data = {0xF1, 0xF5, 0xFB, 0xF5, 0xE6, 0xE6, 0x1B, 0x14, 0x15, 0xF8, 0xF9, 0xFA, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xF9, 0xE6, 0xEE, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0x9B, 0x9B, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0x9B, 0xDB, 0xDB, 0x9B, 0xEC, 0xFB, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xF5, 0x95, 0x95, 0xF5, 0xF5, 0xF5, 0xEB, 0xEC, 0xEB, 0xFB, 0xEB, 0x8, 0xED, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF4, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x5E01, 0x50FF, 0x5083, 0x503B, 0x5FEB, 0xC02B, 0x5FEB, 0x5009, 0x57FD, 0x1005, 0x7FF5, 0x15, 0x7FF5, 0x1, 0xFFFF}, - .coords = {52, 55}, - .direction = 0x23, - .range = 0x22, + .display = { + .data = {0xF1, 0xF5, 0xFB, 0xF5, 0xE6, 0xE6, 0x1B, 0x14, 0x15, 0xF8, 0xF9, 0xFA, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xF9, 0xE6, 0xEE, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0x9B, 0x9B, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0x9B, 0xDB, 0xDB, 0x9B, 0xEC, 0xFB, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xF5, 0x95, 0x95, 0xF5, 0xF5, 0xF5, 0xEB, 0xEC, 0xEB, 0xFB, 0xEB, 0x8, 0xED, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF4, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x5E01, 0x50FF, 0x5083, 0x503B, 0x5FEB, 0xC02B, 0x5FEB, 0x5009, 0x57FD, 0x1005, 0x7FF5, 0x15, 0x7FF5, 0x1, 0xFFFF}, + .coords = {52, 55}, + .direction = 0x23, + .range = 0x22, + } }, - [1] = + [1] = { .unk0 = 0x33, .unk1 = 0x34, .trainers = - { - [0] = - { - .name = _("ABRAHAM"), - .facilityClass = FACILITY_CLASS_RUIN_MANIAC, - .unused = 0, - .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_POKEMON, EC_WORD_THE, EC_WORD_BEST}, - .speechWin = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_GREAT, EC_WORD_POKEMON, EC_WORD_IT, EC_WORD_IS}, - .speechLose = {EC_WORD_I, EC_WORD_CONFUSED, EC_WORD_A, EC_WORD_MOVE, EC_WORD_WITH, EC_WORD_ANOTHER}, - .speechAfter = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_MOVE(SKETCH), EC_WORD_OF, EC_WORD_YOU}, - .mons = - { - [0] = - { - .species = SPECIES_SMEARGLE, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_IMPRISON}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x8A, - .nickname = _("SMEARGLE"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_SMEARGLE, - .heldItem = ITEM_CHESTO_BERRY, - .moves = {MOVE_REST, MOVE_THUNDER_WAVE, MOVE_FLAMETHROWER, MOVE_IMPRISON}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x87, - .nickname = _("SMEARGLE"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_SMEARGLE, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_EXPLOSION}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xD, - .nickname = _("SMEARGLE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_SMEARGLE, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_IMPRISON}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xA, - .nickname = _("SMEARGLE"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_SMEARGLE, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_IMPRISON}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xA, - .nickname = _("SMEARGLE"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_SMEARGLE, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x8A, - .nickname = _("SMEARGLE"), - .friendship = 255, - }, - }, - }, - [1] = { - .name = _("LUC"), - .facilityClass = FACILITY_CLASS_TUBER_M, - .unused = 0, - .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_WORD_COOL, EC_WORD_RARE, EC_WORD_MOVE}, - .speechWin = {EC_WORD_MY, EC_WORD_RARE, EC_WORD_MOVE, EC_WORD_IS, EC_WORD_COOL, EC_WORD_ISN_T_IT_QUES}, - .speechLose = {EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_MOVE, EC_WORD_QUES}, - .speechAfter = {EC_WORD_I_AM, EC_WORD_SMART, EC_WORD_BUT, EC_WORD_ALSO, EC_WORD_WEAK, EC_WORD_ELLIPSIS}, - .mons = - { - [0] = - { - .species = SPECIES_STARYU, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_CAMOUFLAGE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 1, - .personality = 0xA, - .nickname = _("STARYU"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_MEOWTH, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_PAY_DAY, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0xD, - .nickname = _("MEOWTH"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_BLAZIKEN, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_BLAZE_KICK, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x28, - .nickname = _("BLAZIKEN"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_CUBONE, - .heldItem = ITEM_THICK_CLUB, - .moves = {MOVE_BONEMERANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .spDefenseEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 1, - .personality = 0x16, - .nickname = _("CUBONE"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_BEEDRILL, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_TWINEEDLE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 0, - .personality = 0x8A, - .nickname = _("BEEDRILL"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_RATICATE, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_SUPER_FANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .abilityNum = 1, - .personality = 0xD, - .nickname = _("RATICATE"), - .friendship = 255, + [0] = + { + .name = _("ABRAHAM"), + .facilityClass = FACILITY_CLASS_RUIN_MANIAC, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_POKEMON, EC_WORD_THE, EC_WORD_BEST}, + .speechWin = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_GREAT, EC_WORD_POKEMON, EC_WORD_IT, EC_WORD_IS}, + .speechLose = {EC_WORD_I, EC_WORD_CONFUSED, EC_WORD_A, EC_WORD_MOVE, EC_WORD_WITH, EC_WORD_ANOTHER}, + .speechAfter = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_MOVE(SKETCH), EC_WORD_OF, EC_WORD_YOU}, + .mons = + { + [0] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x8A, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_REST, MOVE_THUNDER_WAVE, MOVE_FLAMETHROWER, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x87, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_EXPLOSION}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xD, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xA, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xA, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x8A, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("LUC"), + .facilityClass = FACILITY_CLASS_TUBER_M, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_WORD_COOL, EC_WORD_RARE, EC_WORD_MOVE}, + .speechWin = {EC_WORD_MY, EC_WORD_RARE, EC_WORD_MOVE, EC_WORD_IS, EC_WORD_COOL, EC_WORD_ISN_T_IT_QUES}, + .speechLose = {EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_MOVE, EC_WORD_QUES}, + .speechAfter = {EC_WORD_I_AM, EC_WORD_SMART, EC_WORD_BUT, EC_WORD_ALSO, EC_WORD_WEAK, EC_WORD_ELLIPSIS}, + .mons = + { + [0] = + { + .species = SPECIES_STARYU, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_CAMOUFLAGE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 1, + .personality = 0xA, + .nickname = _("STARYU"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MEOWTH, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_PAY_DAY, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0xD, + .nickname = _("MEOWTH"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_BLAZIKEN, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_BLAZE_KICK, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x28, + .nickname = _("BLAZIKEN"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_CUBONE, + .heldItem = ITEM_THICK_CLUB, + .moves = {MOVE_BONEMERANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 1, + .personality = 0x16, + .nickname = _("CUBONE"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_BEEDRILL, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_TWINEEDLE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x8A, + .nickname = _("BEEDRILL"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_RATICATE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_SUPER_FANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 1, + .personality = 0xD, + .nickname = _("RATICATE"), + .friendship = 255, + }, + }, }, - }, }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x2D, 0x3B, 0x3B, 0x3B, 0x35, 0x2C, 0x23, 0x24, 0x23, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x94, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x8, 0x8D, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8C, 0x8, 0x94, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x9B, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x9B, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x95, 0x97, 0x95, 0x97, 0x8C, 0x9B, 0x8C, 0x97, 0x95, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x87, 0x95, 0x87, 0x8C, 0x8, 0x8D, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8, 0x94, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x95, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x95, 0x8F, 0x8B, 0x8F, 0x8C, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x8C, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8B, 0x97, 0x9B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8C, 0x9B, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x7C1, 0x8AA1, 0x209, 0x5557, 0xA281, 0x81, 0x5D6D, 0x2283, 0x89, 0xDD55, 0x20A1, 0xA81, 0x7D5D, 0x9, 0xFFFF}, - .coords = {105, 109}, - .direction = 0x23, - .range = 0x33, + .display = { + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x2D, 0x3B, 0x3B, 0x3B, 0x35, 0x2C, 0x23, 0x24, 0x23, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x94, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x8, 0x8D, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8C, 0x8, 0x94, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x9B, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x9B, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x95, 0x97, 0x95, 0x97, 0x8C, 0x9B, 0x8C, 0x97, 0x95, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x87, 0x95, 0x87, 0x8C, 0x8, 0x8D, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8, 0x94, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x95, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x95, 0x8F, 0x8B, 0x8F, 0x8C, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x8C, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8B, 0x97, 0x9B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8C, 0x9B, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x7C1, 0x8AA1, 0x209, 0x5557, 0xA281, 0x81, 0x5D6D, 0x2283, 0x89, 0xDD55, 0x20A1, 0xA81, 0x7D5D, 0x9, 0xFFFF}, + .coords = {105, 109}, + .direction = 0x23, + .range = 0x33, + } }, - [2] = + [2] = { .unk0 = 0x35, .unk1 = 0x36, .trainers = - { - [0] = - { - .name = _("BREYDEN"), - .facilityClass = FACILITY_CLASS_YOUNGSTER, - .unused = 0, - .speechBefore = {EC_WORD_I, EC_WORD_CARE, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_A_LOT}, - .speechWin = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_CAN, EC_WORD_DO, EC_WORD_IT, EC_WORD_ALL}, - .speechLose = {EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_LIKE, EC_WORD_WE, EC_WORD_ALWAYS, EC_WORD_WIN}, - .speechAfter = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THE, EC_WORD_BEGINNING, EC_WORD_POKEMON, EC_WORD_BEST}, - .mons = - { - [0] = - { - .species = SPECIES_CHARMELEON, - .heldItem = ITEM_CHARCOAL, - .moves = {MOVE_FIRE_SPIN, MOVE_DRAGON_RAGE, MOVE_FLAMETHROWER, MOVE_SLASH}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 25, - .attackIV = 25, - .defenseIV = 25, - .speedIV = 25, - .spAttackIV = 25, - .spDefenseIV = 25, - .abilityNum = 0, - .personality = 0x32, - .nickname = _("CHARMELEON"), - .friendship = 100, - }, - [1] = - { - .species = SPECIES_WARTORTLE, - .heldItem = ITEM_MYSTIC_WATER, - .moves = {MOVE_HYDRO_PUMP, MOVE_SKULL_BASH, MOVE_RAIN_DANCE, MOVE_PROTECT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 25, - .attackIV = 25, - .defenseIV = 25, - .speedIV = 25, - .spAttackIV = 25, - .spDefenseIV = 25, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("WARTORTLE"), - .friendship = 100, - }, - [2] = - { - .species = SPECIES_IVYSAUR, - .heldItem = ITEM_MIRACLE_SEED, - .moves = {MOVE_SOLAR_BEAM, MOVE_SYNTHESIS, MOVE_GROWTH, MOVE_SWEET_SCENT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 6, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 25, - .attackIV = 25, - .defenseIV = 25, - .speedIV = 25, - .spAttackIV = 25, - .spDefenseIV = 25, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("IVYSAUR"), - .friendship = 100, - }, - [3] = - { - .species = SPECIES_BAYLEEF, - .heldItem = ITEM_MIRACLE_SEED, - .moves = {MOVE_SOLAR_BEAM, MOVE_SAFEGUARD, MOVE_LIGHT_SCREEN, MOVE_BODY_SLAM}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .attackEV = 130, - .spAttackEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 25, - .attackIV = 25, - .defenseIV = 25, - .speedIV = 25, - .spAttackIV = 25, - .spDefenseIV = 25, - .abilityNum = 0, - .personality = 0x32, - .nickname = _("BAYLEEF"), - .friendship = 100, - }, - [4] = - { - .species = SPECIES_CROCONAW, - .heldItem = ITEM_MYSTIC_WATER, - .moves = {MOVE_SCARY_FACE, MOVE_SLASH, MOVE_HYDRO_PUMP, MOVE_SCREECH}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .speedEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 25, - .attackIV = 25, - .defenseIV = 25, - .speedIV = 25, - .spAttackIV = 25, - .spDefenseIV = 25, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("CROCONAW"), - .friendship = 100, - }, - [5] = - { - .species = SPECIES_QUILAVA, - .heldItem = ITEM_CHARCOAL, - .moves = {MOVE_QUICK_ATTACK, MOVE_FLAMETHROWER, MOVE_FLAME_WHEEL, MOVE_SWIFT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x28, - .nickname = _("QUILAVA"), - .friendship = 100, - }, - }, - }, - [1] = { - .name = _("ANIYA"), - .facilityClass = FACILITY_CLASS_TUBER_F, - .unused = 0, - .speechBefore = {EC_WORD_SOMEONE, EC_WORD_GOT, EC_WORD_ME, EC_WORD_A_LITTLE, EC_WORD_POKEMON, EC_WORD_EGG}, - .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_NEW, EC_WORD_AT, EC_WORD_THIS, EC_WORD_EXCL}, - .speechLose = {EC_WORD_OH, EC_WORD_BUT, EC_WORD_ELLIPSIS, EC_WORD_WHY, EC_WORD_WHY, EC_WORD_QUES_EXCL}, - .speechAfter = {EC_WORD_YOU_RE, EC_WORD_BUSY, EC_WORD_QUES, EC_WORD_DON_T, EC_WORD_GIVE_UP, EC_WORD_EXCL}, - .mons = - { - [0] = - { - .species = SPECIES_SMOOCHUM, - .heldItem = ITEM_PETAYA_BERRY, - .moves = {MOVE_ICE_BEAM, MOVE_PSYCHIC, MOVE_SWEET_KISS, MOVE_FAKE_TEARS}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x32, - .nickname = _("SMOOCHUM"), - .friendship = 50, - }, - [1] = - { - .species = SPECIES_AZURILL, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_SURF, MOVE_SING, MOVE_RAIN_DANCE, MOVE_BLIZZARD}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0xC8, - .nickname = _("AZURILL"), - .friendship = 50, - }, - [2] = - { - .species = SPECIES_ELEKID, - .heldItem = ITEM_KINGS_ROCK, - .moves = {MOVE_FIRE_PUNCH, MOVE_THUNDER, MOVE_ICE_PUNCH, MOVE_THUNDER_WAVE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("ELEKID"), - .friendship = 50, + [0] = + { + .name = _("BREYDEN"), + .facilityClass = FACILITY_CLASS_YOUNGSTER, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_CARE, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_A_LOT}, + .speechWin = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_CAN, EC_WORD_DO, EC_WORD_IT, EC_WORD_ALL}, + .speechLose = {EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_LIKE, EC_WORD_WE, EC_WORD_ALWAYS, EC_WORD_WIN}, + .speechAfter = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THE, EC_WORD_BEGINNING, EC_WORD_POKEMON, EC_WORD_BEST}, + .mons = + { + [0] = + { + .species = SPECIES_CHARMELEON, + .heldItem = ITEM_CHARCOAL, + .moves = {MOVE_FIRE_SPIN, MOVE_DRAGON_RAGE, MOVE_FLAMETHROWER, MOVE_SLASH}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .abilityNum = 0, + .personality = 0x32, + .nickname = _("CHARMELEON"), + .friendship = 100, + }, + [1] = + { + .species = SPECIES_WARTORTLE, + .heldItem = ITEM_MYSTIC_WATER, + .moves = {MOVE_HYDRO_PUMP, MOVE_SKULL_BASH, MOVE_RAIN_DANCE, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("WARTORTLE"), + .friendship = 100, + }, + [2] = + { + .species = SPECIES_IVYSAUR, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_SOLAR_BEAM, MOVE_SYNTHESIS, MOVE_GROWTH, MOVE_SWEET_SCENT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 6, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("IVYSAUR"), + .friendship = 100, + }, + [3] = + { + .species = SPECIES_BAYLEEF, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_SOLAR_BEAM, MOVE_SAFEGUARD, MOVE_LIGHT_SCREEN, MOVE_BODY_SLAM}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .attackEV = 130, + .spAttackEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .abilityNum = 0, + .personality = 0x32, + .nickname = _("BAYLEEF"), + .friendship = 100, + }, + [4] = + { + .species = SPECIES_CROCONAW, + .heldItem = ITEM_MYSTIC_WATER, + .moves = {MOVE_SCARY_FACE, MOVE_SLASH, MOVE_HYDRO_PUMP, MOVE_SCREECH}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .speedEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("CROCONAW"), + .friendship = 100, + }, + [5] = + { + .species = SPECIES_QUILAVA, + .heldItem = ITEM_CHARCOAL, + .moves = {MOVE_QUICK_ATTACK, MOVE_FLAMETHROWER, MOVE_FLAME_WHEEL, MOVE_SWIFT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x28, + .nickname = _("QUILAVA"), + .friendship = 100, + }, + }, + }, + [1] = + { + .name = _("ANIYA"), + .facilityClass = FACILITY_CLASS_TUBER_F, + .unused = 0, + .speechBefore = {EC_WORD_SOMEONE, EC_WORD_GOT, EC_WORD_ME, EC_WORD_A_LITTLE, EC_WORD_POKEMON, EC_WORD_EGG}, + .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_NEW, EC_WORD_AT, EC_WORD_THIS, EC_WORD_EXCL}, + .speechLose = {EC_WORD_OH, EC_WORD_BUT, EC_WORD_ELLIPSIS, EC_WORD_WHY, EC_WORD_WHY, EC_WORD_QUES_EXCL}, + .speechAfter = {EC_WORD_YOU_RE, EC_WORD_BUSY, EC_WORD_QUES, EC_WORD_DON_T, EC_WORD_GIVE_UP, EC_WORD_EXCL}, + .mons = + { + [0] = + { + .species = SPECIES_SMOOCHUM, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_ICE_BEAM, MOVE_PSYCHIC, MOVE_SWEET_KISS, MOVE_FAKE_TEARS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x32, + .nickname = _("SMOOCHUM"), + .friendship = 50, + }, + [1] = + { + .species = SPECIES_AZURILL, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_SURF, MOVE_SING, MOVE_RAIN_DANCE, MOVE_BLIZZARD}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0xC8, + .nickname = _("AZURILL"), + .friendship = 50, + }, + [2] = + { + .species = SPECIES_ELEKID, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_FIRE_PUNCH, MOVE_THUNDER, MOVE_ICE_PUNCH, MOVE_THUNDER_WAVE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("ELEKID"), + .friendship = 50, + }, + [3] = + { + .species = SPECIES_CLEFFA, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_MEGA_KICK, MOVE_SWEET_KISS, MOVE_SING, MOVE_METRONOME}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("CLEFFA"), + .friendship = 50, + }, + [4] = + { + .species = SPECIES_WYNAUT, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x84, + .nickname = _("WYNAUT"), + .friendship = 50, + }, + [5] = + { + .species = SPECIES_MAGBY, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_FIRE_BLAST, MOVE_CONFUSE_RAY, MOVE_THUNDER_PUNCH, MOVE_BARRIER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("MAGBY"), + .friendship = 50, + }, + }, }, - [3] = - { - .species = SPECIES_CLEFFA, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_MEGA_KICK, MOVE_SWEET_KISS, MOVE_SING, MOVE_METRONOME}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("CLEFFA"), - .friendship = 50, - }, - [4] = - { - .species = SPECIES_WYNAUT, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x84, - .nickname = _("WYNAUT"), - .friendship = 50, - }, - [5] = - { - .species = SPECIES_MAGBY, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_FIRE_BLAST, MOVE_CONFUSE_RAY, MOVE_THUNDER_PUNCH, MOVE_BARRIER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("MAGBY"), - .friendship = 50, - }, - }, }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x8, 0x69, 0x46, 0x7A, 0x73, 0x73, 0x73, 0x79, 0x73, 0x73, 0x73, 0x7D, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x73, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x7B, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x7A, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7A, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x73, 0x73, 0x73, 0x7D, 0x7C, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0xF1, 0x46, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7A, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7C, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xFB, 0x8, 0x7C, 0xFB, 0x7B, 0xFB, 0x7A, 0xFB, 0x79, 0xFB, 0xB3, 0xFB, 0x7D, 0xFB, 0x7E, 0xFB, 0x7D, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x7FFB, 0x4003, 0x5FFF, 0x4003, 0x7FFB, 0x4003, 0x7EFF, 0x4443, 0x4443, 0x4443, 0x7EFF, 0x4001, 0x7FFD, 0x1, 0xFFFF}, - .coords = {150, 152}, - .direction = 0x23, - .range = 0x11, + .display = { + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x8, 0x69, 0x46, 0x7A, 0x73, 0x73, 0x73, 0x79, 0x73, 0x73, 0x73, 0x7D, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x73, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x7B, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x7A, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7A, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x73, 0x73, 0x73, 0x7D, 0x7C, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0xF1, 0x46, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7A, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7C, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xFB, 0x8, 0x7C, 0xFB, 0x7B, 0xFB, 0x7A, 0xFB, 0x79, 0xFB, 0xB3, 0xFB, 0x7D, 0xFB, 0x7E, 0xFB, 0x7D, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x7FFB, 0x4003, 0x5FFF, 0x4003, 0x7FFB, 0x4003, 0x7EFF, 0x4443, 0x4443, 0x4443, 0x7EFF, 0x4001, 0x7FFD, 0x1, 0xFFFF}, + .coords = {150, 152}, + .direction = 0x23, + .range = 0x11, + } }, - [3] = + [3] = { .unk0 = 0x38, .unk1 = 0x37, .trainers = - { - [0] = { - .name = _("DANE"), - .facilityClass = FACILITY_CLASS_BIRD_KEEPER, - .unused = 0, - .speechBefore = {EC_WORD_I, EC_WORD_GOT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ON, EC_WORD_VACATION}, - .speechWin = {EC_WORD_IT_S, EC_WORD_GREAT, EC_WORD_TO, EC_WORD_TRAVEL, EC_WORD_AND, EC_WORD_BATTLE}, - .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, EC_WORD_MY, EC_WORD_RARE, EC_WORD_POKEMON, EC_WORD_EXCL}, - .speechAfter = {EC_WORD_OFF, EC_WORD_ON, EC_WORD_ANOTHER, EC_WORD_VACATION, EC_WORD_I, EC_WORD_GO}, - .mons = - { - [0] = - { - .species = SPECIES_SUDOWOODO, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_ROCK_SLIDE, MOVE_BLOCK, MOVE_TOXIC, MOVE_EXPLOSION}, - .level = 0, - .ppBonuses = 0, - .hpEV = 100, - .attackEV = 255, - .spDefenseEV = 155, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x80, - .nickname = _("SUDOWOODO"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_SLOWKING, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_BLIZZARD, MOVE_DISABLE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .defenseEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0x8C, - .nickname = _("SLOWKING"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_ENTEI, - .heldItem = ITEM_PETAYA_BERRY, - .moves = {MOVE_FLAMETHROWER, MOVE_CALM_MIND, MOVE_FIRE_SPIN, MOVE_ROAR}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("ENTEI"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_HITMONCHAN, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_MEGA_PUNCH, MOVE_DETECT, MOVE_COUNTER, MOVE_SKY_UPPERCUT}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("HITMONCHAN"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_MANTINE, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .defenseEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0x6, - .nickname = _("MANTINE"), - .friendship = 255, + [0] = + { + .name = _("DANE"), + .facilityClass = FACILITY_CLASS_BIRD_KEEPER, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_GOT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ON, EC_WORD_VACATION}, + .speechWin = {EC_WORD_IT_S, EC_WORD_GREAT, EC_WORD_TO, EC_WORD_TRAVEL, EC_WORD_AND, EC_WORD_BATTLE}, + .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, EC_WORD_MY, EC_WORD_RARE, EC_WORD_POKEMON, EC_WORD_EXCL}, + .speechAfter = {EC_WORD_OFF, EC_WORD_ON, EC_WORD_ANOTHER, EC_WORD_VACATION, EC_WORD_I, EC_WORD_GO}, + .mons = + { + [0] = + { + .species = SPECIES_SUDOWOODO, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_ROCK_SLIDE, MOVE_BLOCK, MOVE_TOXIC, MOVE_EXPLOSION}, + .level = 0, + .ppBonuses = 0, + .hpEV = 100, + .attackEV = 255, + .spDefenseEV = 155, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x80, + .nickname = _("SUDOWOODO"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_SLOWKING, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_BLIZZARD, MOVE_DISABLE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .defenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0x8C, + .nickname = _("SLOWKING"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_ENTEI, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_FLAMETHROWER, MOVE_CALM_MIND, MOVE_FIRE_SPIN, MOVE_ROAR}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("ENTEI"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_HITMONCHAN, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_MEGA_PUNCH, MOVE_DETECT, MOVE_COUNTER, MOVE_SKY_UPPERCUT}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("HITMONCHAN"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_MANTINE, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .defenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0x6, + .nickname = _("MANTINE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ZAPDOS, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_AGILITY}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x18, + .nickname = _("ZAPDOS"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("STEPHANIE"), + .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, + .unused = 0, + .speechBefore = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_WIN, EC_WORD_EXCL}, + .speechWin = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_UNDERSTAND, EC_WORD_HOW, EC_WORD_NOW, EC_WORD_QUES}, + .speechLose = {EC_WORD_YES, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_DO, EC_WORD_IT}, + .speechAfter = {EC_WORD_YOU, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_GOOD, EC_WORD_FOR, EC_WORD_YOU}, + .mons = + { + [0] = + { + .species = SPECIES_HITMONLEE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_MEGA_KICK, MOVE_MIND_READER, MOVE_FOCUS_ENERGY, MOVE_HI_JUMP_KICK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("HITMONLEE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_PORYGON2, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_LOCK_ON, MOVE_BLIZZARD, MOVE_CONVERSION_2, MOVE_PSYCHIC}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("PORYGON2"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_SUICUNE, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_SURF, MOVE_CALM_MIND, MOVE_MIRROR_COAT, MOVE_MIST}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("SUICUNE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_HOUNDOOM, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_ROAR, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 1, + .personality = 0xF, + .nickname = _("HOUNDOOM"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_STANTLER, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_CONFUSE_RAY, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_TAKE_DOWN}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("STANTLER"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ARTICUNO, + .heldItem = ITEM_NEVER_MELT_ICE, + .moves = {MOVE_BLIZZARD, MOVE_SHEER_COLD, MOVE_MIST, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("ARTICUNO"), + .friendship = 255, + }, + }, }, - [5] = - { - .species = SPECIES_ZAPDOS, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_AGILITY}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x18, - .nickname = _("ZAPDOS"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("STEPHANIE"), - .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, - .unused = 0, - .speechBefore = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_WIN, EC_WORD_EXCL}, - .speechWin = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_UNDERSTAND, EC_WORD_HOW, EC_WORD_NOW, EC_WORD_QUES}, - .speechLose = {EC_WORD_YES, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_DO, EC_WORD_IT}, - .speechAfter = {EC_WORD_YOU, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_GOOD, EC_WORD_FOR, EC_WORD_YOU}, - .mons = - { - [0] = - { - .species = SPECIES_HITMONLEE, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_MEGA_KICK, MOVE_MIND_READER, MOVE_FOCUS_ENERGY, MOVE_HI_JUMP_KICK}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .attackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("HITMONLEE"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_PORYGON2, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_LOCK_ON, MOVE_BLIZZARD, MOVE_CONVERSION_2, MOVE_PSYCHIC}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("PORYGON2"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_SUICUNE, - .heldItem = ITEM_PETAYA_BERRY, - .moves = {MOVE_SURF, MOVE_CALM_MIND, MOVE_MIRROR_COAT, MOVE_MIST}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("SUICUNE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_HOUNDOOM, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_ROAR, MOVE_WILL_O_WISP}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 1, - .personality = 0xF, - .nickname = _("HOUNDOOM"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_STANTLER, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_CONFUSE_RAY, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_TAKE_DOWN}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("STANTLER"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_ARTICUNO, - .heldItem = ITEM_NEVER_MELT_ICE, - .moves = {MOVE_BLIZZARD, MOVE_SHEER_COLD, MOVE_MIST, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("ARTICUNO"), - .friendship = 255, - }, - }, }, - }, - .data = {0xF1, 0xFB, 0xFB, 0xFB, 0xF9, 0xF9, 0x1B, 0x1C, 0x1D, 0xE5, 0xE6, 0xEE, 0xF5, 0xFB, 0xFB, 0x8, 0xED, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF4, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xF5, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x3F9, 0xF041, 0x41, 0x7F5F, 0x4401, 0x4541, 0x5579, 0x5541, 0x555F, 0x5541, 0x5541, 0x557D, 0x1101, 0x1101, 0xFFFF}, - .coords = {40, 91}, - .direction = 0x21, - .range = 0x33, + .display = { + .data = {0xF1, 0xFB, 0xFB, 0xFB, 0xF9, 0xF9, 0x1B, 0x1C, 0x1D, 0xE5, 0xE6, 0xEE, 0xF5, 0xFB, 0xFB, 0x8, 0xED, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF4, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xF5, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x3F9, 0xF041, 0x41, 0x7F5F, 0x4401, 0x4541, 0x5579, 0x5541, 0x555F, 0x5541, 0x5541, 0x557D, 0x1101, 0x1101, 0xFFFF}, + .coords = {40, 91}, + .direction = 0x21, + .range = 0x33, + } }, - }, }; + static const struct TrHillTag sDataTagExpert = { .unkField_0 = 8, .unused1 = 1, - .unkField_2 = 4, - .unused3 = 0, - .unused4 = 63, - .unused5 = 31, - .unused6 = 6, - .floors = - { - [0] = + .numFloors = 4, + .checksum = 0x00061F3F +}; + +static const struct TrHillFloor sDataTagExpert_floors[] = { + [0] = { .unk0 = 0x39, .unk1 = 0x3A, .trainers = - { - [0] = - { - .name = _("ALFRED"), - .facilityClass = FACILITY_CLASS_COOLTRAINER_M, - .unused = 0, - .speechBefore = {EC_WORD_WE, EC_WORD_CAN, EC_WORD_TAKE, EC_WORD_ON, EC_WORD_ANY, EC_WORD_TYPE}, - .speechWin = {EC_WORD_WE, EC_WORD_DID, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_OKAY, EC_WORD_EXCL}, - .speechLose = {EC_WORD_OUR, EC_WORD_STRATEGY, EC_WORD_ISN_T, EC_WORD_ANY, EC_WORD_GOOD, EC_WORD_ELLIPSIS}, - .speechAfter = {EC_WORD_WE, EC_WORD_NEED, EC_WORD_TO, EC_WORD_TRAIN, EC_WORD_A_LOT, EC_WORD_MORE}, - .mons = - { - [0] = - { - .species = SPECIES_SNORLAX, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_EARTHQUAKE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .defenseEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x35, - .nickname = _("SNORLAX"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_MILTANK, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_MILK_DRINK}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("MILTANK"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_URSARING, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x7F, - .nickname = _("URSARING"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_SLAKING, - .heldItem = ITEM_CHESTO_BERRY, - .moves = {MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_REST}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .spDefenseEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x80, - .nickname = _("SLAKING"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_KANGASKHAN, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_FAKE_OUT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("KANGASKHAN"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_ZANGOOSE, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_ROAR}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x80, - .nickname = _("ZANGOOSE"), - .friendship = 255, - }, - }, - }, - [1] = { - .name = _("EDIE"), - .facilityClass = FACILITY_CLASS_PSYCHIC_F, - .unused = 0, - .speechBefore = {EC_WORD_WE, EC_WORD_WILL_BE_HERE, EC_WORD_FOR, EC_WORD_ANY, EC_WORD_TRAINER, EC_WORD_CHALLENGE}, - .speechWin = {EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_WORKS, EC_WORD_TO, EC_WORD_PERFECTION, EC_WORD_EXCL}, - .speechLose = {EC_WORD_NO, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_WORD_THAT, EC_WORD_WON_T, EC_WORD_DO}, - .speechAfter = {EC_WORD_THERE, EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_SCHOOL}, - .mons = - { - [0] = - { - .species = SPECIES_SLOWKING, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_SKILL_SWAP}, - .level = 0, - .ppBonuses = 0, - .hpEV = 200, - .defenseEV = 110, - .spAttackEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 1, - .personality = 0xF, - .nickname = _("SLOWKING"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_ESPEON, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_CALM_MIND, MOVE_REFLECT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x28, - .nickname = _("ESPEON"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_STARMIE, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 1, - .personality = 0xF, - .nickname = _("STARMIE"), - .friendship = 255, + [0] = + { + .name = _("ALFRED"), + .facilityClass = FACILITY_CLASS_COOLTRAINER_M, + .unused = 0, + .speechBefore = {EC_WORD_WE, EC_WORD_CAN, EC_WORD_TAKE, EC_WORD_ON, EC_WORD_ANY, EC_WORD_TYPE}, + .speechWin = {EC_WORD_WE, EC_WORD_DID, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_OKAY, EC_WORD_EXCL}, + .speechLose = {EC_WORD_OUR, EC_WORD_STRATEGY, EC_WORD_ISN_T, EC_WORD_ANY, EC_WORD_GOOD, EC_WORD_ELLIPSIS}, + .speechAfter = {EC_WORD_WE, EC_WORD_NEED, EC_WORD_TO, EC_WORD_TRAIN, EC_WORD_A_LOT, EC_WORD_MORE}, + .mons = + { + [0] = + { + .species = SPECIES_SNORLAX, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_EARTHQUAKE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .defenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x35, + .nickname = _("SNORLAX"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MILTANK, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_MILK_DRINK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("MILTANK"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_URSARING, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x7F, + .nickname = _("URSARING"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_SLAKING, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_REST}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x80, + .nickname = _("SLAKING"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_KANGASKHAN, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_FAKE_OUT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("KANGASKHAN"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ZANGOOSE, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_ROAR}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x80, + .nickname = _("ZANGOOSE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("EDIE"), + .facilityClass = FACILITY_CLASS_PSYCHIC_F, + .unused = 0, + .speechBefore = {EC_WORD_WE, EC_WORD_WILL_BE_HERE, EC_WORD_FOR, EC_WORD_ANY, EC_WORD_TRAINER, EC_WORD_CHALLENGE}, + .speechWin = {EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_WORKS, EC_WORD_TO, EC_WORD_PERFECTION, EC_WORD_EXCL}, + .speechLose = {EC_WORD_NO, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_WORD_THAT, EC_WORD_WON_T, EC_WORD_DO}, + .speechAfter = {EC_WORD_THERE, EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_SCHOOL}, + .mons = + { + [0] = + { + .species = SPECIES_SLOWKING, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_SKILL_SWAP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 200, + .defenseEV = 110, + .spAttackEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 1, + .personality = 0xF, + .nickname = _("SLOWKING"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_ESPEON, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_CALM_MIND, MOVE_REFLECT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x28, + .nickname = _("ESPEON"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_STARMIE, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 1, + .personality = 0xF, + .nickname = _("STARMIE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("GENGAR"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_GARDEVOIR, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_MAGICAL_LEAF, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("GARDEVOIR"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ALAKAZAM, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_RECOVER, MOVE_THUNDER_WAVE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("ALAKAZAM"), + .friendship = 255, + }, + }, }, - [3] = - { - .species = SPECIES_GENGAR, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("GENGAR"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_GARDEVOIR, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_MAGICAL_LEAF, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("GARDEVOIR"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_ALAKAZAM, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_PSYCHIC, MOVE_RECOVER, MOVE_THUNDER_WAVE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("ALAKAZAM"), - .friendship = 255, - }, - }, }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x3B, 0x8, 0x69, 0x73, 0x8, 0x4D, 0x4D, 0x4D, 0x4D, 0xD1, 0x4D, 0x4D, 0x4D, 0x4D, 0x8, 0x69, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x55, 0x55, 0x55, 0x55, 0xD1, 0x55, 0x55, 0x55, 0x55, 0x8, 0x31, 0x41, 0x8, 0x69, 0x41, 0x8, 0xC5, 0xD9, 0xD9, 0xD9, 0x9A, 0xD9, 0xD9, 0xD9, 0xC6, 0x8, 0x41, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xCD, 0x9B, 0x73, 0x73, 0x44, 0x73, 0x73, 0x9B, 0xD5, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x41, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xDB, 0xDB, 0xDB, 0x8, 0x41, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x8, 0xC7, 0xC7, 0xDB, 0xDB, 0xDB, 0xC7, 0xC7, 0x8, 0x8, 0x31, 0x41, 0x8, 0x69, 0x3B, 0x4D, 0x4D, 0x67, 0x67, 0xDB, 0xDB, 0xDB, 0x67, 0x67, 0x4D, 0x4D, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x55, 0x55, 0xD7, 0xD7, 0xD1, 0xDB, 0xDB, 0xD7, 0xD7, 0x55, 0x55, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x73, 0x8, 0x69, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x201, 0x3EF9, 0x3EF9, 0x3EF9, 0x2009, 0x3019, 0x2009, 0x3019, 0x2009, 0x3019, 0x3019, 0x3C79, 0x1, 0x1, 0xFFFF}, - .coords = {116, 122}, - .direction = 0x23, - .range = 0x55, + .display = { + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x3B, 0x8, 0x69, 0x73, 0x8, 0x4D, 0x4D, 0x4D, 0x4D, 0xD1, 0x4D, 0x4D, 0x4D, 0x4D, 0x8, 0x69, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x55, 0x55, 0x55, 0x55, 0xD1, 0x55, 0x55, 0x55, 0x55, 0x8, 0x31, 0x41, 0x8, 0x69, 0x41, 0x8, 0xC5, 0xD9, 0xD9, 0xD9, 0x9A, 0xD9, 0xD9, 0xD9, 0xC6, 0x8, 0x41, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xCD, 0x9B, 0x73, 0x73, 0x44, 0x73, 0x73, 0x9B, 0xD5, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x41, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xDB, 0xDB, 0xDB, 0x8, 0x41, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x8, 0xC7, 0xC7, 0xDB, 0xDB, 0xDB, 0xC7, 0xC7, 0x8, 0x8, 0x31, 0x41, 0x8, 0x69, 0x3B, 0x4D, 0x4D, 0x67, 0x67, 0xDB, 0xDB, 0xDB, 0x67, 0x67, 0x4D, 0x4D, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x55, 0x55, 0xD7, 0xD7, 0xD1, 0xDB, 0xDB, 0xD7, 0xD7, 0x55, 0x55, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x73, 0x8, 0x69, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x201, 0x3EF9, 0x3EF9, 0x3EF9, 0x2009, 0x3019, 0x2009, 0x3019, 0x2009, 0x3019, 0x3019, 0x3C79, 0x1, 0x1, 0xFFFF}, + .coords = {116, 122}, + .direction = 0x23, + .range = 0x55, + } }, - [1] = + [1] = { .unk0 = 0x3B, .unk1 = 0x3C, .trainers = - { - [0] = { - .name = _("RODERICK"), - .facilityClass = FACILITY_CLASS_COOLTRAINER_M, - .unused = 0, - .speechBefore = {EC_WORD_I, EC_WORD_CAN, EC_WORD_WIN, EC_WORD_WITHOUT, EC_WORD_A, EC_MOVE2(HELPING_HAND)}, - .speechWin = {EC_WORD_IT_S, EC_WORD_ONLY, EC_WORD_NATURAL, EC_WORD_THAT, EC_WORD_I, EC_WORD_WIN}, - .speechLose = {EC_WORD_LOSING, EC_WORD_HAS, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_SMALL, EC_WORD_ELLIPSIS}, - .speechAfter = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_A, EC_WORD_GOOD, EC_WORD_TEACHER, EC_WORD_QUES}, - .mons = - { - [0] = - { - .species = SPECIES_SWELLOW, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_AERIAL_ACE, MOVE_AGILITY, MOVE_FACADE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("SWELLOW"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_MACHAMP, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_LOW_KICK, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("MACHAMP"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_URSARING, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_PROTECT, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("URSARING"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_KINGLER, - .heldItem = ITEM_PERSIM_BERRY, - .moves = {MOVE_RETURN, MOVE_PROTECT, MOVE_CRABHAMMER, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x80, - .nickname = _("KINGLER"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_TYRANITAR, - .heldItem = ITEM_PERSIM_BERRY, - .moves = {MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .defenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x80, - .nickname = _("TYRANITAR"), - .friendship = 255, + [0] = + { + .name = _("RODERICK"), + .facilityClass = FACILITY_CLASS_COOLTRAINER_M, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_CAN, EC_WORD_WIN, EC_WORD_WITHOUT, EC_WORD_A, EC_MOVE2(HELPING_HAND)}, + .speechWin = {EC_WORD_IT_S, EC_WORD_ONLY, EC_WORD_NATURAL, EC_WORD_THAT, EC_WORD_I, EC_WORD_WIN}, + .speechLose = {EC_WORD_LOSING, EC_WORD_HAS, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_SMALL, EC_WORD_ELLIPSIS}, + .speechAfter = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_A, EC_WORD_GOOD, EC_WORD_TEACHER, EC_WORD_QUES}, + .mons = + { + [0] = + { + .species = SPECIES_SWELLOW, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_AERIAL_ACE, MOVE_AGILITY, MOVE_FACADE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("SWELLOW"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MACHAMP, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_LOW_KICK, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("MACHAMP"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_URSARING, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_PROTECT, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("URSARING"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_KINGLER, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_RETURN, MOVE_PROTECT, MOVE_CRABHAMMER, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x80, + .nickname = _("KINGLER"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_TYRANITAR, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .defenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x80, + .nickname = _("TYRANITAR"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_DRAGONITE, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_BODY_SLAM, MOVE_THUNDER_WAVE, MOVE_EARTHQUAKE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x80, + .nickname = _("DRAGONITE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("ALICIA"), + .facilityClass = FACILITY_CLASS_COOLTRAINER_F, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_NEED, EC_WORD_A, EC_MOVE2(HELPING_HAND), EC_WORD_EXCL}, + .speechWin = {EC_WORD_SORRY, EC_WORD_EXCL, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_FOR, EC_WORD_YOU}, + .speechLose = {EC_WORD_WHAT, EC_WORD_AN, EC_WORD_UNBELIEVABLE, EC_MOVE2(STRUGGLE), EC_WORD_THAT_WAS, EC_WORD_EXCL}, + .speechAfter = {EC_WORD_I, EC_WORD_CAN, EC_WORD_BE, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_TEACHER}, + .mons = + { + [0] = + { + .species = SPECIES_JOLTEON, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0xA, + .nickname = _("JOLTEON"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_ALAKAZAM, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_ATTRACT, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0xA, + .nickname = _("ALAKAZAM"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_STARMIE, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 1, + .personality = 0xA, + .nickname = _("STARMIE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_DUSCLOPS, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_PURSUIT, MOVE_PROTECT, MOVE_ATTRACT, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x82, + .nickname = _("DUSCLOPS"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_NINETALES, + .heldItem = ITEM_WHITE_HERB, + .moves = {MOVE_OVERHEAT, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0xD2, + .nickname = _("NINETALES"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_BANETTE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_SHADOW_BALL, MOVE_FAINT_ATTACK, MOVE_ATTRACT, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x85, + .nickname = _("BANETTE"), + .friendship = 255, + }, + }, }, - [5] = - { - .species = SPECIES_DRAGONITE, - .heldItem = ITEM_PERSIM_BERRY, - .moves = {MOVE_BODY_SLAM, MOVE_THUNDER_WAVE, MOVE_EARTHQUAKE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x80, - .nickname = _("DRAGONITE"), - .friendship = 255, - }, - }, }, - [1] = - { - .name = _("ALICIA"), - .facilityClass = FACILITY_CLASS_COOLTRAINER_F, - .unused = 0, - .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_NEED, EC_WORD_A, EC_MOVE2(HELPING_HAND), EC_WORD_EXCL}, - .speechWin = {EC_WORD_SORRY, EC_WORD_EXCL, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_FOR, EC_WORD_YOU}, - .speechLose = {EC_WORD_WHAT, EC_WORD_AN, EC_WORD_UNBELIEVABLE, EC_MOVE2(STRUGGLE), EC_WORD_THAT_WAS, EC_WORD_EXCL}, - .speechAfter = {EC_WORD_I, EC_WORD_CAN, EC_WORD_BE, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_TEACHER}, - .mons = - { - [0] = - { - .species = SPECIES_JOLTEON, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0xA, - .nickname = _("JOLTEON"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_ALAKAZAM, - .heldItem = ITEM_KINGS_ROCK, - .moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_ATTRACT, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0xA, - .nickname = _("ALAKAZAM"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_STARMIE, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 1, - .personality = 0xA, - .nickname = _("STARMIE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_DUSCLOPS, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_PURSUIT, MOVE_PROTECT, MOVE_ATTRACT, MOVE_WILL_O_WISP}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x82, - .nickname = _("DUSCLOPS"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_NINETALES, - .heldItem = ITEM_WHITE_HERB, - .moves = {MOVE_OVERHEAT, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0xD2, - .nickname = _("NINETALES"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_BANETTE, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_SHADOW_BALL, MOVE_FAINT_ATTACK, MOVE_ATTRACT, MOVE_WILL_O_WISP}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x85, - .nickname = _("BANETTE"), - .friendship = 255, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x8, 0x91, 0x46, 0x7D, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0xB3, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xB3, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, - .coords = {167, 231}, - .direction = 0x1, - .range = 0x33, + .display = { + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x8, 0x91, 0x46, 0x7D, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0xB3, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xB3, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, + .coords = {167, 231}, + .direction = 0x1, + .range = 0x33, + } }, - [2] = + [2] = { .unk0 = 0x3D, .unk1 = 0x3E, .trainers = - { - [0] = { - .name = _("TERRENCE"), - .facilityClass = FACILITY_CLASS_EXPERT_M, - .unused = 0, - .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_THIS, EC_WORD_MATCH, EC_WORD_IS, EC_WORD_FOR, EC_WORD_YOU}, - .speechWin = {EC_WORD_OH_DEAR, EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES}, - .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, 0xFFFF, 0xFFFF}, - .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDMOTHER, EC_WORD_STRONG, EC_WORD_QUES, 0xFFFF}, - .mons = - { - [0] = - { - .species = SPECIES_WOBBUFFET, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_MIRROR_COAT, MOVE_COUNTER, MOVE_SAFEGUARD, MOVE_ENCORE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x94, - .nickname = _("WOBBUFFET"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_EXPLOUD, - .heldItem = ITEM_CHESTO_BERRY, - .moves = {MOVE_HYPER_VOICE, MOVE_COUNTER, MOVE_REST, MOVE_ROCK_SLIDE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x85, - .nickname = _("EXPLOUD"), - .friendship = 0, - }, - [2] = - { - .species = SPECIES_CROBAT, - .heldItem = ITEM_KINGS_ROCK, - .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE, MOVE_TOXIC}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("CROBAT"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_DUGTRIO, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_DOUBLE_TEAM, MOVE_PROTECT, MOVE_RETURN, MOVE_SLUDGE_BOMB}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 1, - .personality = 0xD, - .nickname = _("DUGTRIO"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_ELECTRODE, - .heldItem = ITEM_PETAYA_BERRY, - .moves = {MOVE_TORMENT, MOVE_MIRROR_COAT, MOVE_THUNDERBOLT, MOVE_LIGHT_SCREEN}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x5, - .nickname = _("ELECTRODE"), - .friendship = 0, - }, - [5] = - { - .species = SPECIES_GENGAR, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x14, - .nickname = _("GENGAR"), - .friendship = 255, + [0] = + { + .name = _("TERRENCE"), + .facilityClass = FACILITY_CLASS_EXPERT_M, + .unused = 0, + .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_THIS, EC_WORD_MATCH, EC_WORD_IS, EC_WORD_FOR, EC_WORD_YOU}, + .speechWin = {EC_WORD_OH_DEAR, EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES}, + .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, 0xFFFF, 0xFFFF}, + .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDMOTHER, EC_WORD_STRONG, EC_WORD_QUES, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_WOBBUFFET, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_MIRROR_COAT, MOVE_COUNTER, MOVE_SAFEGUARD, MOVE_ENCORE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x94, + .nickname = _("WOBBUFFET"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_EXPLOUD, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_HYPER_VOICE, MOVE_COUNTER, MOVE_REST, MOVE_ROCK_SLIDE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x85, + .nickname = _("EXPLOUD"), + .friendship = 0, + }, + [2] = + { + .species = SPECIES_CROBAT, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE, MOVE_TOXIC}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("CROBAT"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_DUGTRIO, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_DOUBLE_TEAM, MOVE_PROTECT, MOVE_RETURN, MOVE_SLUDGE_BOMB}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 1, + .personality = 0xD, + .nickname = _("DUGTRIO"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_ELECTRODE, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_TORMENT, MOVE_MIRROR_COAT, MOVE_THUNDERBOLT, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x5, + .nickname = _("ELECTRODE"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x14, + .nickname = _("GENGAR"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("CARLOTTA"), + .facilityClass = FACILITY_CLASS_EXPERT_F, + .unused = 0, + .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_I, EC_WORD_WILL, EC_WORD_WIN, EC_WORD_FOR, EC_WORD_YOU}, + .speechWin = {EC_WORD_OH_DEAR, EC_WORD_WE, EC_WORD_HAVE, EC_WORD_A, EC_WORD_PARTY, EC_WORD_LATER}, + .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_TO, EC_WORD_DISAPPOINT, EC_WORD_YOU}, + .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDFATHER, EC_WORD_COOL, EC_WORD_QUES, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_LAPRAS, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_PERISH_SONG, MOVE_SING}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x82, + .nickname = _("LAPRAS"), + .friendship = 0, + }, + [1] = + { + .species = SPECIES_ABSOL, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_PERISH_SONG, MOVE_DOUBLE_EDGE, MOVE_PROTECT, MOVE_TORMENT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x8A, + .nickname = _("ABSOL"), + .friendship = 0, + }, + [2] = + { + .species = SPECIES_ALTARIA, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_PERISH_SONG, MOVE_PROTECT, MOVE_DRAGON_CLAW, MOVE_FIRE_BLAST}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .spAttackEV = 6, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x0, + .nickname = _("ALTARIA"), + .friendship = 0, + }, + [3] = + { + .species = SPECIES_DEWGONG, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_ICE_BEAM, MOVE_SIGNAL_BEAM, MOVE_REST, MOVE_PERISH_SONG}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x14, + .nickname = _("DEWGONG"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_POLITOED, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_HYDRO_PUMP, MOVE_BLIZZARD, MOVE_MIND_READER, MOVE_PERISH_SONG}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .spAttackEV = 6, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 1, + .personality = 0x14, + .nickname = _("POLITOED"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_MAROWAK, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_PERISH_SONG, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 6, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 1, + .personality = 0x17, + .nickname = _("MAROWAK"), + .friendship = 0, + }, + }, }, - }, }, - [1] = - { - .name = _("CARLOTTA"), - .facilityClass = FACILITY_CLASS_EXPERT_F, - .unused = 0, - .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_I, EC_WORD_WILL, EC_WORD_WIN, EC_WORD_FOR, EC_WORD_YOU}, - .speechWin = {EC_WORD_OH_DEAR, EC_WORD_WE, EC_WORD_HAVE, EC_WORD_A, EC_WORD_PARTY, EC_WORD_LATER}, - .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_TO, EC_WORD_DISAPPOINT, EC_WORD_YOU}, - .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDFATHER, EC_WORD_COOL, EC_WORD_QUES, 0xFFFF}, - .mons = - { - [0] = - { - .species = SPECIES_LAPRAS, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_PERISH_SONG, MOVE_SING}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x82, - .nickname = _("LAPRAS"), - .friendship = 0, - }, - [1] = - { - .species = SPECIES_ABSOL, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_PERISH_SONG, MOVE_DOUBLE_EDGE, MOVE_PROTECT, MOVE_TORMENT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x8A, - .nickname = _("ABSOL"), - .friendship = 0, - }, - [2] = - { - .species = SPECIES_ALTARIA, - .heldItem = ITEM_KINGS_ROCK, - .moves = {MOVE_PERISH_SONG, MOVE_PROTECT, MOVE_DRAGON_CLAW, MOVE_FIRE_BLAST}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .spAttackEV = 6, - .spDefenseEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x0, - .nickname = _("ALTARIA"), - .friendship = 0, - }, - [3] = - { - .species = SPECIES_DEWGONG, - .heldItem = ITEM_CHESTO_BERRY, - .moves = {MOVE_ICE_BEAM, MOVE_SIGNAL_BEAM, MOVE_REST, MOVE_PERISH_SONG}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x14, - .nickname = _("DEWGONG"), - .friendship = 0, - }, - [4] = - { - .species = SPECIES_POLITOED, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_HYDRO_PUMP, MOVE_BLIZZARD, MOVE_MIND_READER, MOVE_PERISH_SONG}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .spAttackEV = 6, - .spDefenseEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 1, - .personality = 0x14, - .nickname = _("POLITOED"), - .friendship = 0, - }, - [5] = - { - .species = SPECIES_MAROWAK, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_PERISH_SONG, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_PROTECT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 6, - .spDefenseEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 1, - .personality = 0x17, - .nickname = _("MAROWAK"), - .friendship = 0, - }, - }, - }, - }, - .data = {0xD1, 0xDB, 0xDB, 0xDB, 0xD9, 0xD9, 0x1B, 0x14, 0x15, 0x98, 0x99, 0x9A, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xD5, 0xD5, 0xC3, 0xF9, 0x86, 0x8E, 0x95, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCC, 0xFB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCC, 0xCC, 0xCC, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xD5, 0xD5, 0xD5, 0xD5, 0xFB, 0xEC, 0xFB, 0xEC, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xF5, 0xF5, 0xFB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xCC, 0xCC, 0xCB, 0xFB, 0x8C, 0x8C, 0x8C, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCC, 0xFB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8}, - .unk3A0 = {0x381, 0x201, 0xEE1, 0x1EF1, 0x3EF9, 0x3EF9, 0x7E7D, 0x783D, 0x2BD, 0x783D, 0x7E7D, 0x3E79, 0x3EF9, 0x1EF1, 0xEE1, 0x201}, - .coords = {103, 167}, - .direction = 0x1, - .range = 0x33, + .display = { + .data = {0xD1, 0xDB, 0xDB, 0xDB, 0xD9, 0xD9, 0x1B, 0x14, 0x15, 0x98, 0x99, 0x9A, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xD5, 0xD5, 0xC3, 0xF9, 0x86, 0x8E, 0x95, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCC, 0xFB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCC, 0xCC, 0xCC, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xD5, 0xD5, 0xD5, 0xD5, 0xFB, 0xEC, 0xFB, 0xEC, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xF5, 0xF5, 0xFB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xCC, 0xCC, 0xCB, 0xFB, 0x8C, 0x8C, 0x8C, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCC, 0xFB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8}, + .unk3A0 = {0x381, 0x201, 0xEE1, 0x1EF1, 0x3EF9, 0x3EF9, 0x7E7D, 0x783D, 0x2BD, 0x783D, 0x7E7D, 0x3E79, 0x3EF9, 0x1EF1, 0xEE1, 0x201}, + .coords = {103, 167}, + .direction = 0x1, + .range = 0x33, + } }, - [3] = + [3] = { .unk0 = 0x3F, .unk1 = 0x40, .trainers = - { - [0] = { - .name = _("NORA"), - .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, - .unused = 0, - .speechBefore = {EC_WORD_WAAAH, EC_WORD_THIS, EC_WORD_IS, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_EXCL}, - .speechWin = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_I, EC_WORD_WON}, - .speechLose = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SAD, EC_WORD_I, EC_WORD_LOST}, - .speechAfter = {EC_WORD_WAAAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_GO, EC_WORD_AWAY, EC_WORD_EXCL}, - .mons = - { - [0] = - { - .species = SPECIES_FORRETRESS, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_SPIKES}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .attackEV = 200, - .spDefenseEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("FORRETRESS"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_ELECTRODE, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_LIGHT_SCREEN}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 1, - .personality = 0xC, - .nickname = _("ELECTRODE"), - .friendship = 255, + [0] = + { + .name = _("NORA"), + .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, + .unused = 0, + .speechBefore = {EC_WORD_WAAAH, EC_WORD_THIS, EC_WORD_IS, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_EXCL}, + .speechWin = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_I, EC_WORD_WON}, + .speechLose = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SAD, EC_WORD_I, EC_WORD_LOST}, + .speechAfter = {EC_WORD_WAAAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_GO, EC_WORD_AWAY, EC_WORD_EXCL}, + .mons = + { + [0] = + { + .species = SPECIES_FORRETRESS, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_SPIKES}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .attackEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("FORRETRESS"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_ELECTRODE, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 1, + .personality = 0xC, + .nickname = _("ELECTRODE"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_EXEGGUTOR, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_EXPLOSION, MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_SOLAR_BEAM}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x7F, + .nickname = _("EXEGGUTOR"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_DUSCLOPS, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x93, + .nickname = _("DUSCLOPS"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_NINETALES, + .heldItem = ITEM_WHITE_HERB, + .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_OVERHEAT, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0xF, + .nickname = _("NINETALES"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_BANETTE, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_THUNDERBOLT, MOVE_THUNDER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x96, + .nickname = _("BANETTE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("GAV"), + .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, + .unused = 0, + .speechBefore = {EC_WORD_WAHAHAHA, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_STOP, EC_WORD_ME, EC_WORD_EXCL}, + .speechWin = {EC_WORD_WOWEE, EC_WORD_EXCL, 0xFFFF, EC_WORD_I_AM, EC_WORD_AWESOME, EC_WORD_COOL}, + .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_COOL, EC_WORD_AT, EC_WORD_ALL, EC_WORD_EXCL}, + .speechAfter = {EC_WORD_HEHEHE, EC_WORD_THAT_WAS, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_BATTLE, EC_WORD_EXCL}, + .mons = + { + [0] = + { + .species = SPECIES_SALAMENCE, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_ROCK_SLIDE, MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x95, + .nickname = _("SALAMENCE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x8C, + .nickname = _("GENGAR"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_GYARADOS, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_BITE, MOVE_EARTHQUAKE}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("GYARADOS"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_EXPLOSION, MOVE_MEAN_LOOK, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x3, + .nickname = _("GENGAR"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_DUSCLOPS, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x14, + .nickname = _("DUSCLOPS"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_MISDREAVUS, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_PERISH_SONG, MOVE_SHADOW_BALL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 180, + .defenseEV = 180, + .spDefenseEV = 150, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .abilityNum = 0, + .personality = 0x85, + .nickname = _("MISDREAVUS"), + .friendship = 255, + }, + }, }, - [2] = - { - .species = SPECIES_EXEGGUTOR, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_EXPLOSION, MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_SOLAR_BEAM}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x7F, - .nickname = _("EXEGGUTOR"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_DUSCLOPS, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .defenseEV = 200, - .spDefenseEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x93, - .nickname = _("DUSCLOPS"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_NINETALES, - .heldItem = ITEM_WHITE_HERB, - .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_OVERHEAT, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0xF, - .nickname = _("NINETALES"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_BANETTE, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_THUNDERBOLT, MOVE_THUNDER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x96, - .nickname = _("BANETTE"), - .friendship = 255, - }, - }, }, - [1] = - { - .name = _("GAV"), - .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, - .unused = 0, - .speechBefore = {EC_WORD_WAHAHAHA, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_STOP, EC_WORD_ME, EC_WORD_EXCL}, - .speechWin = {EC_WORD_WOWEE, EC_WORD_EXCL, 0xFFFF, EC_WORD_I_AM, EC_WORD_AWESOME, EC_WORD_COOL}, - .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_COOL, EC_WORD_AT, EC_WORD_ALL, EC_WORD_EXCL}, - .speechAfter = {EC_WORD_HEHEHE, EC_WORD_THAT_WAS, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_BATTLE, EC_WORD_EXCL}, - .mons = - { - [0] = - { - .species = SPECIES_SALAMENCE, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_ROCK_SLIDE, MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x95, - .nickname = _("SALAMENCE"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_GENGAR, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x8C, - .nickname = _("GENGAR"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_GYARADOS, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_BITE, MOVE_EARTHQUAKE}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("GYARADOS"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_GENGAR, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_EXPLOSION, MOVE_MEAN_LOOK, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x3, - .nickname = _("GENGAR"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_DUSCLOPS, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .defenseEV = 200, - .spDefenseEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x14, - .nickname = _("DUSCLOPS"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_MISDREAVUS, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_PERISH_SONG, MOVE_SHADOW_BALL}, - .level = 0, - .ppBonuses = 0, - .hpEV = 180, - .defenseEV = 180, - .spDefenseEV = 150, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .abilityNum = 0, - .personality = 0x85, - .nickname = _("MISDREAVUS"), - .friendship = 255, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x9B, 0xD6, 0xD6, 0x96, 0xD6, 0xD6, 0xDB, 0x9B, 0x9B, 0x9B, 0x96, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8}, - .unk3A0 = {0x381, 0x101, 0x101, 0x6C1, 0x821, 0x16D1, 0x2829, 0x2009, 0x1, 0x2009, 0x2829, 0x16D1, 0x821, 0x6C1, 0x101, 0x101}, - .coords = {103, 167}, - .direction = 0x1, - .range = 0x33, + .display = { + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x9B, 0xD6, 0xD6, 0x96, 0xD6, 0xD6, 0xDB, 0x9B, 0x9B, 0x9B, 0x96, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8}, + .unk3A0 = {0x381, 0x101, 0x101, 0x6C1, 0x821, 0x16D1, 0x2829, 0x2009, 0x1, 0x2009, 0x2829, 0x16D1, 0x821, 0x6C1, 0x101, 0x101}, + .coords = {103, 167}, + .direction = 0x1, + .range = 0x33, + } }, - }, }; diff --git a/src/data/decoration/icon.h b/src/data/decoration/icon.h index 58d9cea7b..b29dab20f 100644 --- a/src/data/decoration/icon.h +++ b/src/data/decoration/icon.h @@ -1,123 +1,124 @@ -const u32 *const gUnknown_085A6BE8[][2] = { - {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, - {NULL, NULL}, - {NULL, NULL}, - {gUnknown_08DB7AA0, gUnknown_08DB7B34}, - {gUnknown_08DB7B5C, gUnknown_08DB7BEC}, - {gUnknown_08DB7C08, gUnknown_08DB7CE8}, - {gUnknown_08DB7D08, gUnknown_08DB7DCC}, - {gUnknown_08DB7DF4, gUnknown_08DB7EA0}, - {gUnknown_08DB7EC4, gUnknown_08DB7F60}, - {gUnknown_08DB7F7C, gUnknown_08DB8070}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {gUnknown_08DB808C, gUnknown_08DB8138}, - {gUnknown_08DB8160, gUnknown_08DB8218}, - {gUnknown_08DB823C, gUnknown_08DB8300}, - {gUnknown_08DB8328, gUnknown_08DB8430}, - {gUnknown_08DB8458, gUnknown_08DB8528}, - {gUnknown_08DB854C, gUnknown_08DB862C}, - {gUnknown_08DB8654, gUnknown_08DB86C4}, - {gUnknown_08DB86E0, gUnknown_08DB8750}, - {gUnknown_08DB876C, gUnknown_08DB87DC}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {gUnknown_08DB87F8, gUnknown_08DB88D8}, - {gUnknown_08DB8900, gUnknown_08DB89E0}, - {gUnknown_08DB8A08, gUnknown_08DB8A68}, - {gUnknown_08DB8A84, gUnknown_08DB8B40}, - {NULL, NULL}, - {NULL, NULL}, - {gUnknown_08DB8B68, gUnknown_08DB8C40}, - {gUnknown_08DB8C5C, gUnknown_08DB8CF4}, - {NULL, NULL}, - {gUnknown_08DB8D18, gUnknown_08DB8DB0}, - {gUnknown_08DB8DD4, gUnknown_08DB8E80}, - {NULL, NULL}, - {NULL, NULL}, - {gUnknown_08DB8EA0, gUnknown_08DB8F58}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {gUnknown_08DB8F7C, gUnknown_08DB9038}, - {gUnknown_08DB9058, gUnknown_08DB9130}, - {gUnknown_08DB9154, gUnknown_08DB9218}, - {gUnknown_08DB9234, gUnknown_08DB92FC}, - {gUnknown_08DB931C, gUnknown_08DB93E8}, - {gUnknown_08DB940C, gUnknown_08DB94CC}, - {gUnknown_08DB94E8, gUnknown_08DB95AC}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {NULL, NULL}, - {gUnknown_08DB95D0, gUnknown_08DB96C4}, - {gUnknown_08DB96EC, gUnknown_08DB97F4}, - {gUnknown_08DB981C, gUnknown_08DB9908}, - {gUnknown_08DB9930, gUnknown_08DB9A54}, - {gUnknown_08DB9A7C, gUnknown_08DB9B7C}, - {gUnknown_08DB9BA4, gUnknown_08DB9CB0}, - {gUnknown_08DB9CD8, gUnknown_08DB9DAC}, - {gUnknown_08DB9F08, gUnknown_08DB9FFC}, - {gUnknown_08DB9DD4, gUnknown_08DB9EE4}, - {gUnknown_08DBA020, gUnknown_08DBA12C} +const u32 *const gDecorIconTable[][2] = +{ + [DECOR_NONE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, + [DECOR_SMALL_DESK] = {NULL, NULL}, + [DECOR_POKEMON_DESK] = {NULL, NULL}, + [DECOR_HEAVY_DESK] = {gDecorIcon_HeavyDesk, gDecorIconPalette_HeavyDesk}, + [DECOR_RAGGED_DESK] = {gDecorIcon_RaggedDesk, gDecorIconPalette_RaggedDesk}, + [DECOR_COMFORT_DESK] = {gDecorIcon_ComfortDesk, gDecorIconPalette_ComfortDesk}, + [DECOR_PRETTY_DESK] = {gDecorIcon_PrettyDesk, gDecorIconPalette_PrettyDesk}, + [DECOR_BRICK_DESK] = {gDecorIcon_BrickDesk, gDecorIconPalette_BrickDesk}, + [DECOR_CAMP_DESK] = {gDecorIcon_CampDesk, gDecorIconPalette_CampDesk}, + [DECOR_HARD_DESK] = {gDecorIcon_HardDesk, gDecorIconPalette_HardDesk}, + [DECOR_SMALL_CHAIR] = {NULL, NULL}, + [DECOR_POKEMON_CHAIR] = {NULL, NULL}, + [DECOR_HEAVY_CHAIR] = {NULL, NULL}, + [DECOR_PRETTY_CHAIR] = {NULL, NULL}, + [DECOR_COMFORT_CHAIR] = {NULL, NULL}, + [DECOR_RAGGED_CHAIR] = {NULL, NULL}, + [DECOR_BRICK_CHAIR] = {NULL, NULL}, + [DECOR_CAMP_CHAIR] = {NULL, NULL}, + [DECOR_HARD_CHAIR] = {NULL, NULL}, + [DECOR_RED_PLANT] = {gDecorIcon_RedPlant, gDecorIconPalette_RedPlant}, + [DECOR_TROPICAL_PLANT] = {gDecorIcon_TropicalPlant, gDecorIconPalette_TropicalPlant}, + [DECOR_PRETTY_FLOWERS] = {gDecorIcon_PrettyFlowers, gDecorIconPalette_PrettyFlowers}, + [DECOR_COLORFUL_PLANT] = {gDecorIcon_ColorfulPlant, gDecorIconPalette_ColorfulPlant}, + [DECOR_BIG_PLANT] = {gDecorIcon_BigPlant, gDecorIconPalette_BigPlant}, + [DECOR_GORGEOUS_PLANT] = {gDecorIcon_GorgeousPlant, gDecorIconPalette_GorgeousPlant}, + [DECOR_RED_BRICK] = {gDecorIcon_RedBrick, gDecorIconPalette_RedBrick}, + [DECOR_YELLOW_BRICK] = {gDecorIcon_YellowBrick, gDecorIconPalette_YellowBrick}, + [DECOR_BLUE_BRICK] = {gDecorIcon_BlueBrick, gDecorIconPalette_BlueBrick}, + [DECOR_RED_BALLOON] = {NULL, NULL}, + [DECOR_BLUE_BALLOON] = {NULL, NULL}, + [DECOR_YELLOW_BALLOON] = {NULL, NULL}, + [DECOR_RED_TENT] = {gDecorIcon_RedTent, gDecorIconPalette_RedTent}, + [DECOR_BLUE_TENT] = {gDecorIcon_BlueTent, gDecorIconPalette_BlueTent}, + [DECOR_SOLID_BOARD] = {gDecorIcon_SolidBoard, gDecorIconPalette_SolidBoard}, + [DECOR_SLIDE] = {gDecorIcon_Slide, gDecorIconPalette_Slide}, + [DECOR_FENCE_LENGTH] = {NULL, NULL}, + [DECOR_FENCE_WIDTH] = {NULL, NULL}, + [DECOR_TIRE] = {gDecorIcon_Tire, gDecorIconPalette_Tire}, + [DECOR_STAND] = {gDecorIcon_Stand, gDecorIconPalette_Stand}, + [DECOR_MUD_BALL] = {NULL, NULL}, + [DECOR_BREAKABLE_DOOR] = {gDecorIcon_BreakableDoor, gDecorIconPalette_BreakableDoor}, + [DECOR_SAND_ORNAMENT] = {gDecorIcon_SandOrnament, gDecorIconPalette_SandOrnament}, + [DECOR_SILVER_SHIELD] = {NULL, NULL}, + [DECOR_GOLD_SHIELD] = {NULL, NULL}, + [DECOR_GLASS_ORNAMENT] = {gDecorIcon_GlassOrnament, gDecorIconPalette_GlassOrnament}, + [DECOR_TV] = {NULL, NULL}, + [DECOR_ROUND_TV] = {NULL, NULL}, + [DECOR_CUTE_TV] = {NULL, NULL}, + [DECOR_GLITTER_MAT] = {NULL, NULL}, + [DECOR_JUMP_MAT] = {NULL, NULL}, + [DECOR_SPIN_MAT] = {NULL, NULL}, + [DECOR_C_LOW_NOTE_MAT] = {NULL, NULL}, + [DECOR_D_NOTE_MAT] = {NULL, NULL}, + [DECOR_E_NOTE_MAT] = {NULL, NULL}, + [DECOR_F_NOTE_MAT] = {NULL, NULL}, + [DECOR_G_NOTE_MAT] = {NULL, NULL}, + [DECOR_A_NOTE_MAT] = {NULL, NULL}, + [DECOR_B_NOTE_MAT] = {NULL, NULL}, + [DECOR_C_HIGH_NOTE_MAT] = {NULL, NULL}, + [DECOR_SURF_MAT] = {gDecorIcon_SurfMat, gDecorIconPalette_SurfMat}, + [DECOR_THUNDER_MAT] = {gDecorIcon_ThunderMat, gDecorIconPalette_ThunderMat}, + [DECOR_FIRE_BLAST_MAT] = {gDecorIcon_FireBlastMat, gDecorIconPalette_FireBlastMat}, + [DECOR_POWDER_SNOW_MAT] = {gDecorIcon_PowderSnowMat, gDecorIconPalette_PowderSnowMat}, + [DECOR_ATTRACT_MAT] = {gDecorIcon_AttractMat, gDecorIconPalette_AttractMat}, + [DECOR_FISSURE_MAT] = {gDecorIcon_FissureMat, gDecorIconPalette_FissureMat}, + [DECOR_SPIKES_MAT] = {gDecorIcon_SpikesMat, gDecorIconPalette_SpikesMat}, + [DECOR_BALL_POSTER] = {NULL, NULL}, + [DECOR_GREEN_POSTER] = {NULL, NULL}, + [DECOR_RED_POSTER] = {NULL, NULL}, + [DECOR_BLUE_POSTER] = {NULL, NULL}, + [DECOR_CUTE_POSTER] = {NULL, NULL}, + [DECOR_PIKA_POSTER] = {NULL, NULL}, + [DECOR_LONG_POSTER] = {NULL, NULL}, + [DECOR_SEA_POSTER] = {NULL, NULL}, + [DECOR_SKY_POSTER] = {NULL, NULL}, + [DECOR_KISS_POSTER] = {NULL, NULL}, + [DECOR_PICHU_DOLL] = {NULL, NULL}, + [DECOR_PIKACHU_DOLL] = {NULL, NULL}, + [DECOR_MARILL_DOLL] = {NULL, NULL}, + [DECOR_TOGEPI_DOLL] = {NULL, NULL}, + [DECOR_CYNDAQUIL_DOLL] = {NULL, NULL}, + [DECOR_CHIKORITA_DOLL] = {NULL, NULL}, + [DECOR_TOTODILE_DOLL] = {NULL, NULL}, + [DECOR_JIGGLYPUFF_DOLL] = {NULL, NULL}, + [DECOR_MEOWTH_DOLL] = {NULL, NULL}, + [DECOR_CLEFAIRY_DOLL] = {NULL, NULL}, + [DECOR_DITTO_DOLL] = {NULL, NULL}, + [DECOR_SMOOCHUM_DOLL] = {NULL, NULL}, + [DECOR_TREECKO_DOLL] = {NULL, NULL}, + [DECOR_TORCHIC_DOLL] = {NULL, NULL}, + [DECOR_MUDKIP_DOLL] = {NULL, NULL}, + [DECOR_DUSKULL_DOLL] = {NULL, NULL}, + [DECOR_WYNAUT_DOLL] = {NULL, NULL}, + [DECOR_BALTOY_DOLL] = {NULL, NULL}, + [DECOR_KECLEON_DOLL] = {NULL, NULL}, + [DECOR_AZURILL_DOLL] = {NULL, NULL}, + [DECOR_SKITTY_DOLL] = {NULL, NULL}, + [DECOR_SWABLU_DOLL] = {NULL, NULL}, + [DECOR_GULPIN_DOLL] = {NULL, NULL}, + [DECOR_LOTAD_DOLL] = {NULL, NULL}, + [DECOR_SEEDOT_DOLL] = {NULL, NULL}, + [DECOR_PIKA_CUSHION] = {NULL, NULL}, + [DECOR_ROUND_CUSHION] = {NULL, NULL}, + [DECOR_KISS_CUSHION] = {NULL, NULL}, + [DECOR_ZIGZAG_CUSHION] = {NULL, NULL}, + [DECOR_SPIN_CUSHION] = {NULL, NULL}, + [DECOR_DIAMOND_CUSHION] = {NULL, NULL}, + [DECOR_BALL_CUSHION] = {NULL, NULL}, + [DECOR_GRASS_CUSHION] = {NULL, NULL}, + [DECOR_FIRE_CUSHION] = {NULL, NULL}, + [DECOR_WATER_CUSHION] = {NULL, NULL}, + [DECOR_SNORLAX_DOLL] = {gDecorIcon_SnorlaxDoll, gDecorIconPalette_SnorlaxDoll}, + [DECOR_RHYDON_DOLL] = {gDecorIcon_RhydonDoll, gDecorIconPalette_RhydonDoll}, + [DECOR_LAPRAS_DOLL] = {gDecorIcon_LaprasDoll, gDecorIconPalette_LaprasDoll}, + [DECOR_VENUSAUR_DOLL] = {gDecorIcon_VenusaurDoll, gDecorIconPalette_VenusaurDoll}, + [DECOR_CHARIZARD_DOLL] = {gDecorIcon_CharizardDoll, gDecorIconPalette_CharizardDoll}, + [DECOR_BLASTOISE_DOLL] = {gDecorIcon_BlastoiseDoll, gDecorIconPalette_BlastoiseDoll}, + [DECOR_WAILMER_DOLL] = {gDecorIcon_WailmerDoll, gDecorIconPalette_WailmerDoll}, + [DECOR_REGIROCK_DOLL] = {gDecorIcon_RegirockDoll, gDecorIconPalette_RegirockDoll}, + [DECOR_REGICE_DOLL] = {gDecorIcon_RegiceDoll, gDecorIconPalette_RegiceDoll}, + [DECOR_REGISTEEL_DOLL] = {gDecorIcon_RegisteelDoll, gDecorIconPalette_RegisteelDoll} }; diff --git a/src/data/field_event_obj/event_object_graphics_info_pointers.h b/src/data/field_event_obj/event_object_graphics_info_pointers.h index 2f504737a..0b8aa79b2 100755 --- a/src/data/field_event_obj/event_object_graphics_info_pointers.h +++ b/src/data/field_event_obj/event_object_graphics_info_pointers.h @@ -247,245 +247,245 @@ const struct EventObjectGraphicsInfo gEventObjectGraphicsInfo_UnusedMauvilleOldM const struct EventObjectGraphicsInfo *const gEventObjectGraphicsInfoPointers[] = { - &gEventObjectGraphicsInfo_BrendanNormal, - &gEventObjectGraphicsInfo_BrendanMachBike, - &gEventObjectGraphicsInfo_BrendanSurfing, - &gEventObjectGraphicsInfo_BrendanFieldMove, - &gEventObjectGraphicsInfo_QuintyPlump, - &gEventObjectGraphicsInfo_NinjaBoy, - &gEventObjectGraphicsInfo_Twin, - &gEventObjectGraphicsInfo_Boy1, - &gEventObjectGraphicsInfo_Girl1, - &gEventObjectGraphicsInfo_Boy2, - &gEventObjectGraphicsInfo_Girl2, - &gEventObjectGraphicsInfo_LittleBoy, - &gEventObjectGraphicsInfo_LittleGirl, - &gEventObjectGraphicsInfo_Boy3, - &gEventObjectGraphicsInfo_Girl3, - &gEventObjectGraphicsInfo_RichBoy, - &gEventObjectGraphicsInfo_Woman1, - &gEventObjectGraphicsInfo_FatMan, - &gEventObjectGraphicsInfo_PokefanF, - &gEventObjectGraphicsInfo_Man1, - &gEventObjectGraphicsInfo_Woman2, - &gEventObjectGraphicsInfo_ExpertM, - &gEventObjectGraphicsInfo_ExpertF, - &gEventObjectGraphicsInfo_Man2, - &gEventObjectGraphicsInfo_Woman3, - &gEventObjectGraphicsInfo_PokefanM, - &gEventObjectGraphicsInfo_Woman4, - &gEventObjectGraphicsInfo_Cook, - &gEventObjectGraphicsInfo_LinkReceptionist, - &gEventObjectGraphicsInfo_OldMan, - &gEventObjectGraphicsInfo_OldWoman, - &gEventObjectGraphicsInfo_Camper, - &gEventObjectGraphicsInfo_Picnicker, - &gEventObjectGraphicsInfo_Man3, - &gEventObjectGraphicsInfo_Woman5, - &gEventObjectGraphicsInfo_Youngster, - &gEventObjectGraphicsInfo_BugCatcher, - &gEventObjectGraphicsInfo_PsychicM, - &gEventObjectGraphicsInfo_SchoolKidM, - &gEventObjectGraphicsInfo_Maniac, - &gEventObjectGraphicsInfo_HexManiac, - &gEventObjectGraphicsInfo_Rayquaza1, - &gEventObjectGraphicsInfo_SwimmerM, - &gEventObjectGraphicsInfo_SwimmerF, - &gEventObjectGraphicsInfo_BlackBelt, - &gEventObjectGraphicsInfo_Beauty, - &gEventObjectGraphicsInfo_Scientist1, - &gEventObjectGraphicsInfo_Lass, - &gEventObjectGraphicsInfo_Gentleman, - &gEventObjectGraphicsInfo_Sailor, - &gEventObjectGraphicsInfo_Fisherman, - &gEventObjectGraphicsInfo_RunningTriathleteM, - &gEventObjectGraphicsInfo_RunningTriathleteF, - &gEventObjectGraphicsInfo_TuberF, - &gEventObjectGraphicsInfo_TuberM, - &gEventObjectGraphicsInfo_Hiker, - &gEventObjectGraphicsInfo_CyclingTriathleteM, - &gEventObjectGraphicsInfo_CyclingTriathleteF, - &gEventObjectGraphicsInfo_Nurse, - &gEventObjectGraphicsInfo_ItemBall, - &gEventObjectGraphicsInfo_BerryTree, - &gEventObjectGraphicsInfo_BerryTreeEarlyStages, - &gEventObjectGraphicsInfo_BerryTreeLateStages, - &gEventObjectGraphicsInfo_BrendanAcroBike, - &gEventObjectGraphicsInfo_ProfBirch, - &gEventObjectGraphicsInfo_Man4, - &gEventObjectGraphicsInfo_Man5, - &gEventObjectGraphicsInfo_ReporterM, - &gEventObjectGraphicsInfo_ReporterF, - &gEventObjectGraphicsInfo_Bard, - &gEventObjectGraphicsInfo_Anabel, - &gEventObjectGraphicsInfo_Tucker, - &gEventObjectGraphicsInfo_Greta, - &gEventObjectGraphicsInfo_Spenser, - &gEventObjectGraphicsInfo_Noland, - &gEventObjectGraphicsInfo_Lucy, - &gEventObjectGraphicsInfo_UnusedNatuDoll, - &gEventObjectGraphicsInfo_UnusedMagnemiteDoll, - &gEventObjectGraphicsInfo_UnusedSquirtleDoll, - &gEventObjectGraphicsInfo_UnusedWooperDoll, - &gEventObjectGraphicsInfo_UnusedPikachuDoll, - &gEventObjectGraphicsInfo_UnusedPorygon2Doll, - &gEventObjectGraphicsInfo_CuttableTree, - &gEventObjectGraphicsInfo_MartEmployee, - &gEventObjectGraphicsInfo_RooftopSaleWoman, - &gEventObjectGraphicsInfo_Teala, - &gEventObjectGraphicsInfo_BreakableRock, - &gEventObjectGraphicsInfo_PushableBoulder, - &gEventObjectGraphicsInfo_MrBrineysBoat, - &gEventObjectGraphicsInfo_MayNormal, - &gEventObjectGraphicsInfo_MayMachBike, - &gEventObjectGraphicsInfo_MayAcroBike, - &gEventObjectGraphicsInfo_MaySurfing, - &gEventObjectGraphicsInfo_MayFieldMove, - &gEventObjectGraphicsInfo_Truck, - &gEventObjectGraphicsInfo_VigorothCarryingBox, - &gEventObjectGraphicsInfo_VigorothFacingAway, - &gEventObjectGraphicsInfo_BirchsBag, - &gEventObjectGraphicsInfo_EnemyZigzagoon, - &gEventObjectGraphicsInfo_Artist, - &gEventObjectGraphicsInfo_RivalBrendanNormal, - &gEventObjectGraphicsInfo_RivalBrendanMachBike, - &gEventObjectGraphicsInfo_RivalBrendanAcroBike, - &gEventObjectGraphicsInfo_RivalBrendanSurfing, - &gEventObjectGraphicsInfo_RivalBrendanFieldMove, - &gEventObjectGraphicsInfo_RivalMayNormal, - &gEventObjectGraphicsInfo_RivalMayMachBike, - &gEventObjectGraphicsInfo_RivalMayAcroBike, - &gEventObjectGraphicsInfo_RivalMaySurfing, - &gEventObjectGraphicsInfo_RivalMayFieldMove, - &gEventObjectGraphicsInfo_Cameraman, - &gEventObjectGraphicsInfo_BrendanUnderwater, - &gEventObjectGraphicsInfo_MayUnderwater, - &gEventObjectGraphicsInfo_MovingBox, - &gEventObjectGraphicsInfo_CableCar, - &gEventObjectGraphicsInfo_Scientist2, - &gEventObjectGraphicsInfo_DevonEmployee, - &gEventObjectGraphicsInfo_AquaMemberM, - &gEventObjectGraphicsInfo_AquaMemberF, - &gEventObjectGraphicsInfo_MagmaMemberM, - &gEventObjectGraphicsInfo_MagmaMemberF, - &gEventObjectGraphicsInfo_Sidney, - &gEventObjectGraphicsInfo_Phoebe, - &gEventObjectGraphicsInfo_Glacia, - &gEventObjectGraphicsInfo_Drake, - &gEventObjectGraphicsInfo_Roxanne, - &gEventObjectGraphicsInfo_Brawly, - &gEventObjectGraphicsInfo_Wattson, - &gEventObjectGraphicsInfo_Flannery, - &gEventObjectGraphicsInfo_Norman, - &gEventObjectGraphicsInfo_Winona, - &gEventObjectGraphicsInfo_Liza, - &gEventObjectGraphicsInfo_Tate, - &gEventObjectGraphicsInfo_Wallace, - &gEventObjectGraphicsInfo_Steven, - &gEventObjectGraphicsInfo_Wally, - &gEventObjectGraphicsInfo_RubySapphireLittleBoy, - &gEventObjectGraphicsInfo_BrendanFishing, - &gEventObjectGraphicsInfo_MayFishing, - &gEventObjectGraphicsInfo_HotSpringsOldWoman, - &gEventObjectGraphicsInfo_SSTidal, - &gEventObjectGraphicsInfo_SubmarineShadow, - &gEventObjectGraphicsInfo_PichuDoll, - &gEventObjectGraphicsInfo_PikachuDoll, - &gEventObjectGraphicsInfo_MarillDoll, - &gEventObjectGraphicsInfo_TogepiDoll, - &gEventObjectGraphicsInfo_CyndaquilDoll, - &gEventObjectGraphicsInfo_ChikoritaDoll, - &gEventObjectGraphicsInfo_TotodileDoll, - &gEventObjectGraphicsInfo_JigglypuffDoll, - &gEventObjectGraphicsInfo_MeowthDoll, - &gEventObjectGraphicsInfo_ClefairyDoll, - &gEventObjectGraphicsInfo_DittoDoll, - &gEventObjectGraphicsInfo_SmoochumDoll, - &gEventObjectGraphicsInfo_TreeckoDoll, - &gEventObjectGraphicsInfo_TorchicDoll, - &gEventObjectGraphicsInfo_MudkipDoll, - &gEventObjectGraphicsInfo_DuskullDoll, - &gEventObjectGraphicsInfo_WynautDoll, - &gEventObjectGraphicsInfo_BaltoyDoll, - &gEventObjectGraphicsInfo_KecleonDoll, - &gEventObjectGraphicsInfo_AzurillDoll, - &gEventObjectGraphicsInfo_SkittyDoll, - &gEventObjectGraphicsInfo_SwabluDoll, - &gEventObjectGraphicsInfo_GulpinDoll, - &gEventObjectGraphicsInfo_LotadDoll, - &gEventObjectGraphicsInfo_SeedotDoll, - &gEventObjectGraphicsInfo_PikaCushion, - &gEventObjectGraphicsInfo_RoundCushion, - &gEventObjectGraphicsInfo_KissCushion, - &gEventObjectGraphicsInfo_ZigzagCushion, - &gEventObjectGraphicsInfo_SpinCushion, - &gEventObjectGraphicsInfo_DiamondCushion, - &gEventObjectGraphicsInfo_BallCushion, - &gEventObjectGraphicsInfo_GrassCushion, - &gEventObjectGraphicsInfo_FireCushion, - &gEventObjectGraphicsInfo_WaterCushion, - &gEventObjectGraphicsInfo_BigSnorlaxDoll, - &gEventObjectGraphicsInfo_BigRhydonDoll, - &gEventObjectGraphicsInfo_BigLaprasDoll, - &gEventObjectGraphicsInfo_BigVenusaurDoll, - &gEventObjectGraphicsInfo_BigCharizardDoll, - &gEventObjectGraphicsInfo_BigBlastoiseDoll, - &gEventObjectGraphicsInfo_BigWailmerDoll, - &gEventObjectGraphicsInfo_BigRegirockDoll, - &gEventObjectGraphicsInfo_BigRegiceDoll, - &gEventObjectGraphicsInfo_BigRegisteelDoll, - &gEventObjectGraphicsInfo_Latias, - &gEventObjectGraphicsInfo_Latios, - &gEventObjectGraphicsInfo_GameboyKid, - &gEventObjectGraphicsInfo_ContestJudge, - &gEventObjectGraphicsInfo_BrendanWatering, - &gEventObjectGraphicsInfo_MayWatering, - &gEventObjectGraphicsInfo_BrendanDecorating, - &gEventObjectGraphicsInfo_MayDecorating, - &gEventObjectGraphicsInfo_Archie, - &gEventObjectGraphicsInfo_Maxie, - &gEventObjectGraphicsInfo_Kyogre1, - &gEventObjectGraphicsInfo_Groudon1, - &gEventObjectGraphicsInfo_Fossil, - &gEventObjectGraphicsInfo_Regirock, - &gEventObjectGraphicsInfo_Regice, - &gEventObjectGraphicsInfo_Registeel, - &gEventObjectGraphicsInfo_Skitty, - &gEventObjectGraphicsInfo_Kecleon1, - &gEventObjectGraphicsInfo_Kyogre2, - &gEventObjectGraphicsInfo_Groudon2, - &gEventObjectGraphicsInfo_Rayquaza2, - &gEventObjectGraphicsInfo_Zigzagoon, - &gEventObjectGraphicsInfo_Pikachu, - &gEventObjectGraphicsInfo_Azumarill, - &gEventObjectGraphicsInfo_Wingull, - &gEventObjectGraphicsInfo_Kecleon2, - &gEventObjectGraphicsInfo_TuberMSwimming, - &gEventObjectGraphicsInfo_Azurill, - &gEventObjectGraphicsInfo_Mom, - &gEventObjectGraphicsInfo_LinkBrendan, - &gEventObjectGraphicsInfo_LinkMay, - &gEventObjectGraphicsInfo_Juan, - &gEventObjectGraphicsInfo_Scott, - &gEventObjectGraphicsInfo_Poochyena, - &gEventObjectGraphicsInfo_Kyogre3, - &gEventObjectGraphicsInfo_Groudon3, - &gEventObjectGraphicsInfo_MysteryEventDeliveryman, - &gEventObjectGraphicsInfo_Statue, - &gEventObjectGraphicsInfo_Kirlia, - &gEventObjectGraphicsInfo_Dusclops, - &gEventObjectGraphicsInfo_UnionRoomAttendant, - &gEventObjectGraphicsInfo_Sudowoodo, - &gEventObjectGraphicsInfo_Mew, - &gEventObjectGraphicsInfo_Red, - &gEventObjectGraphicsInfo_Leaf, - &gEventObjectGraphicsInfo_Deoxys, - &gEventObjectGraphicsInfo_BirthIslandStone, - &gEventObjectGraphicsInfo_Brandon, - &gEventObjectGraphicsInfo_RubySapphireBrendan, - &gEventObjectGraphicsInfo_RubySapphireMay, - &gEventObjectGraphicsInfo_Lugia, - &gEventObjectGraphicsInfo_HoOh, + [EVENT_OBJ_GFX_BRENDAN_NORMAL] = &gEventObjectGraphicsInfo_BrendanNormal, + [EVENT_OBJ_GFX_BRENDAN_MACH_BIKE] = &gEventObjectGraphicsInfo_BrendanMachBike, + [EVENT_OBJ_GFX_BRENDAN_SURFING] = &gEventObjectGraphicsInfo_BrendanSurfing, + [EVENT_OBJ_GFX_BRENDAN_FIELD_MOVE] = &gEventObjectGraphicsInfo_BrendanFieldMove, + [EVENT_OBJ_GFX_QUINTY_PLUMP] = &gEventObjectGraphicsInfo_QuintyPlump, + [EVENT_OBJ_GFX_NINJA_BOY] = &gEventObjectGraphicsInfo_NinjaBoy, + [EVENT_OBJ_GFX_TWIN] = &gEventObjectGraphicsInfo_Twin, + [EVENT_OBJ_GFX_BOY_1] = &gEventObjectGraphicsInfo_Boy1, + [EVENT_OBJ_GFX_GIRL_1] = &gEventObjectGraphicsInfo_Girl1, + [EVENT_OBJ_GFX_BOY_2] = &gEventObjectGraphicsInfo_Boy2, + [EVENT_OBJ_GFX_GIRL_2] = &gEventObjectGraphicsInfo_Girl2, + [EVENT_OBJ_GFX_LITTLE_BOY] = &gEventObjectGraphicsInfo_LittleBoy, + [EVENT_OBJ_GFX_LITTLE_GIRL] = &gEventObjectGraphicsInfo_LittleGirl, + [EVENT_OBJ_GFX_BOY_3] = &gEventObjectGraphicsInfo_Boy3, + [EVENT_OBJ_GFX_GIRL_3] = &gEventObjectGraphicsInfo_Girl3, + [EVENT_OBJ_GFX_RICH_BOY] = &gEventObjectGraphicsInfo_RichBoy, + [EVENT_OBJ_GFX_WOMAN_1] = &gEventObjectGraphicsInfo_Woman1, + [EVENT_OBJ_GFX_FAT_MAN] = &gEventObjectGraphicsInfo_FatMan, + [EVENT_OBJ_GFX_POKEFAN_F] = &gEventObjectGraphicsInfo_PokefanF, + [EVENT_OBJ_GFX_MAN_1] = &gEventObjectGraphicsInfo_Man1, + [EVENT_OBJ_GFX_WOMAN_2] = &gEventObjectGraphicsInfo_Woman2, + [EVENT_OBJ_GFX_EXPERT_M] = &gEventObjectGraphicsInfo_ExpertM, + [EVENT_OBJ_GFX_EXPERT_F] = &gEventObjectGraphicsInfo_ExpertF, + [EVENT_OBJ_GFX_MAN_2] = &gEventObjectGraphicsInfo_Man2, + [EVENT_OBJ_GFX_WOMAN_3] = &gEventObjectGraphicsInfo_Woman3, + [EVENT_OBJ_GFX_POKEFAN_M] = &gEventObjectGraphicsInfo_PokefanM, + [EVENT_OBJ_GFX_WOMAN_4] = &gEventObjectGraphicsInfo_Woman4, + [EVENT_OBJ_GFX_COOK] = &gEventObjectGraphicsInfo_Cook, + [EVENT_OBJ_GFX_LINK_RECEPTIONIST] = &gEventObjectGraphicsInfo_LinkReceptionist, + [EVENT_OBJ_GFX_OLD_MAN] = &gEventObjectGraphicsInfo_OldMan, + [EVENT_OBJ_GFX_OLD_WOMAN] = &gEventObjectGraphicsInfo_OldWoman, + [EVENT_OBJ_GFX_CAMPER] = &gEventObjectGraphicsInfo_Camper, + [EVENT_OBJ_GFX_PICNICKER] = &gEventObjectGraphicsInfo_Picnicker, + [EVENT_OBJ_GFX_MAN_3] = &gEventObjectGraphicsInfo_Man3, + [EVENT_OBJ_GFX_WOMAN_5] = &gEventObjectGraphicsInfo_Woman5, + [EVENT_OBJ_GFX_YOUNGSTER] = &gEventObjectGraphicsInfo_Youngster, + [EVENT_OBJ_GFX_BUG_CATCHER] = &gEventObjectGraphicsInfo_BugCatcher, + [EVENT_OBJ_GFX_PSYCHIC_M] = &gEventObjectGraphicsInfo_PsychicM, + [EVENT_OBJ_GFX_SCHOOL_KID_M] = &gEventObjectGraphicsInfo_SchoolKidM, + [EVENT_OBJ_GFX_MANIAC] = &gEventObjectGraphicsInfo_Maniac, + [EVENT_OBJ_GFX_HEX_MANIAC] = &gEventObjectGraphicsInfo_HexManiac, + [EVENT_OBJ_GFX_RAYQUAZA_1] = &gEventObjectGraphicsInfo_Rayquaza1, + [EVENT_OBJ_GFX_SWIMMER_M] = &gEventObjectGraphicsInfo_SwimmerM, + [EVENT_OBJ_GFX_SWIMMER_F] = &gEventObjectGraphicsInfo_SwimmerF, + [EVENT_OBJ_GFX_BLACK_BELT] = &gEventObjectGraphicsInfo_BlackBelt, + [EVENT_OBJ_GFX_BEAUTY] = &gEventObjectGraphicsInfo_Beauty, + [EVENT_OBJ_GFX_SCIENTIST_1] = &gEventObjectGraphicsInfo_Scientist1, + [EVENT_OBJ_GFX_LASS] = &gEventObjectGraphicsInfo_Lass, + [EVENT_OBJ_GFX_GENTLEMAN] = &gEventObjectGraphicsInfo_Gentleman, + [EVENT_OBJ_GFX_SAILOR] = &gEventObjectGraphicsInfo_Sailor, + [EVENT_OBJ_GFX_FISHERMAN] = &gEventObjectGraphicsInfo_Fisherman, + [EVENT_OBJ_GFX_RUNNING_TRIATHLETE_M] = &gEventObjectGraphicsInfo_RunningTriathleteM, + [EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F] = &gEventObjectGraphicsInfo_RunningTriathleteF, + [EVENT_OBJ_GFX_TUBER_F] = &gEventObjectGraphicsInfo_TuberF, + [EVENT_OBJ_GFX_TUBER_M] = &gEventObjectGraphicsInfo_TuberM, + [EVENT_OBJ_GFX_HIKER] = &gEventObjectGraphicsInfo_Hiker, + [EVENT_OBJ_GFX_CYCLING_TRIATHLETE_M] = &gEventObjectGraphicsInfo_CyclingTriathleteM, + [EVENT_OBJ_GFX_CYCLING_TRIATHLETE_F] = &gEventObjectGraphicsInfo_CyclingTriathleteF, + [EVENT_OBJ_GFX_NURSE] = &gEventObjectGraphicsInfo_Nurse, + [EVENT_OBJ_GFX_ITEM_BALL] = &gEventObjectGraphicsInfo_ItemBall, + [EVENT_OBJ_GFX_BERRY_TREE] = &gEventObjectGraphicsInfo_BerryTree, + [EVENT_OBJ_GFX_BERRY_TREE_EARLY_STAGES] = &gEventObjectGraphicsInfo_BerryTreeEarlyStages, + [EVENT_OBJ_GFX_BERRY_TREE_LATE_STAGES] = &gEventObjectGraphicsInfo_BerryTreeLateStages, + [EVENT_OBJ_GFX_BRENDAN_ACRO_BIKE] = &gEventObjectGraphicsInfo_BrendanAcroBike, + [EVENT_OBJ_GFX_PROF_BIRCH] = &gEventObjectGraphicsInfo_ProfBirch, + [EVENT_OBJ_GFX_MAN_4] = &gEventObjectGraphicsInfo_Man4, + [EVENT_OBJ_GFX_MAN_5] = &gEventObjectGraphicsInfo_Man5, + [EVENT_OBJ_GFX_REPORTER_M] = &gEventObjectGraphicsInfo_ReporterM, + [EVENT_OBJ_GFX_REPORTER_F] = &gEventObjectGraphicsInfo_ReporterF, + [EVENT_OBJ_GFX_BARD] = &gEventObjectGraphicsInfo_Bard, + [EVENT_OBJ_GFX_ANABEL] = &gEventObjectGraphicsInfo_Anabel, + [EVENT_OBJ_GFX_TUCKER] = &gEventObjectGraphicsInfo_Tucker, + [EVENT_OBJ_GFX_GRETA] = &gEventObjectGraphicsInfo_Greta, + [EVENT_OBJ_GFX_SPENSER] = &gEventObjectGraphicsInfo_Spenser, + [EVENT_OBJ_GFX_NOLAND] = &gEventObjectGraphicsInfo_Noland, + [EVENT_OBJ_GFX_LUCY] = &gEventObjectGraphicsInfo_Lucy, + [EVENT_OBJ_GFX_UNUSED_NATU_DOLL] = &gEventObjectGraphicsInfo_UnusedNatuDoll, + [EVENT_OBJ_GFX_UNUSED_MAGNEMITE_DOLL] = &gEventObjectGraphicsInfo_UnusedMagnemiteDoll, + [EVENT_OBJ_GFX_UNUSED_SQUIRTLE_DOLL] = &gEventObjectGraphicsInfo_UnusedSquirtleDoll, + [EVENT_OBJ_GFX_UNUSED_WOOPER_DOLL] = &gEventObjectGraphicsInfo_UnusedWooperDoll, + [EVENT_OBJ_GFX_UNUSED_PIKACHU_DOLL] = &gEventObjectGraphicsInfo_UnusedPikachuDoll, + [EVENT_OBJ_GFX_UNUSED_PORYGON2_DOLL] = &gEventObjectGraphicsInfo_UnusedPorygon2Doll, + [EVENT_OBJ_GFX_CUTTABLE_TREE] = &gEventObjectGraphicsInfo_CuttableTree, + [EVENT_OBJ_GFX_MART_EMPLOYEE] = &gEventObjectGraphicsInfo_MartEmployee, + [EVENT_OBJ_GFX_ROOFTOP_SALE_WOMAN] = &gEventObjectGraphicsInfo_RooftopSaleWoman, + [EVENT_OBJ_GFX_TEALA] = &gEventObjectGraphicsInfo_Teala, + [EVENT_OBJ_GFX_BREAKABLE_ROCK] = &gEventObjectGraphicsInfo_BreakableRock, + [EVENT_OBJ_GFX_PUSHABLE_BOULDER] = &gEventObjectGraphicsInfo_PushableBoulder, + [EVENT_OBJ_GFX_MR_BRINEYS_BOAT] = &gEventObjectGraphicsInfo_MrBrineysBoat, + [EVENT_OBJ_GFX_MAY_NORMAL] = &gEventObjectGraphicsInfo_MayNormal, + [EVENT_OBJ_GFX_MAY_MACH_BIKE] = &gEventObjectGraphicsInfo_MayMachBike, + [EVENT_OBJ_GFX_MAY_ACRO_BIKE] = &gEventObjectGraphicsInfo_MayAcroBike, + [EVENT_OBJ_GFX_MAY_SURFING] = &gEventObjectGraphicsInfo_MaySurfing, + [EVENT_OBJ_GFX_MAY_FIELD_MOVE] = &gEventObjectGraphicsInfo_MayFieldMove, + [EVENT_OBJ_GFX_TRUCK] = &gEventObjectGraphicsInfo_Truck, + [EVENT_OBJ_GFX_VIGOROTH_CARRYING_BOX] = &gEventObjectGraphicsInfo_VigorothCarryingBox, + [EVENT_OBJ_GFX_VIGOROTH_FACING_AWAY] = &gEventObjectGraphicsInfo_VigorothFacingAway, + [EVENT_OBJ_GFX_BIRCHS_BAG] = &gEventObjectGraphicsInfo_BirchsBag, + [EVENT_OBJ_GFX_ZIGZAGOON_1] = &gEventObjectGraphicsInfo_EnemyZigzagoon, + [EVENT_OBJ_GFX_ARTIST] = &gEventObjectGraphicsInfo_Artist, + [EVENT_OBJ_GFX_RIVAL_BRENDAN_NORMAL] = &gEventObjectGraphicsInfo_RivalBrendanNormal, + [EVENT_OBJ_GFX_RIVAL_BRENDAN_MACH_BIKE] = &gEventObjectGraphicsInfo_RivalBrendanMachBike, + [EVENT_OBJ_GFX_RIVAL_BRENDAN_ACRO_BIKE] = &gEventObjectGraphicsInfo_RivalBrendanAcroBike, + [EVENT_OBJ_GFX_RIVAL_BRENDAN_SURFING] = &gEventObjectGraphicsInfo_RivalBrendanSurfing, + [EVENT_OBJ_GFX_RIVAL_BRENDAN_FIELD_MOVE] = &gEventObjectGraphicsInfo_RivalBrendanFieldMove, + [EVENT_OBJ_GFX_RIVAL_MAY_NORMAL] = &gEventObjectGraphicsInfo_RivalMayNormal, + [EVENT_OBJ_GFX_RIVAL_MAY_MACH_BIKE] = &gEventObjectGraphicsInfo_RivalMayMachBike, + [EVENT_OBJ_GFX_RIVAL_MAY_ACRO_BIKE] = &gEventObjectGraphicsInfo_RivalMayAcroBike, + [EVENT_OBJ_GFX_RIVAL_MAY_SURFING] = &gEventObjectGraphicsInfo_RivalMaySurfing, + [EVENT_OBJ_GFX_RIVAL_MAY_FIELD_MOVE] = &gEventObjectGraphicsInfo_RivalMayFieldMove, + [EVENT_OBJ_GFX_CAMERAMAN] = &gEventObjectGraphicsInfo_Cameraman, + [EVENT_OBJ_GFX_BRENDAN_UNDERWATER] = &gEventObjectGraphicsInfo_BrendanUnderwater, + [EVENT_OBJ_GFX_MAY_UNDERWATER] = &gEventObjectGraphicsInfo_MayUnderwater, + [EVENT_OBJ_GFX_MOVING_BOX] = &gEventObjectGraphicsInfo_MovingBox, + [EVENT_OBJ_GFX_CABLE_CAR] = &gEventObjectGraphicsInfo_CableCar, + [EVENT_OBJ_GFX_SCIENTIST_2] = &gEventObjectGraphicsInfo_Scientist2, + [EVENT_OBJ_GFX_DEVON_EMPLOYEE] = &gEventObjectGraphicsInfo_DevonEmployee, + [EVENT_OBJ_GFX_AQUA_MEMBER_M] = &gEventObjectGraphicsInfo_AquaMemberM, + [EVENT_OBJ_GFX_AQUA_MEMBER_F] = &gEventObjectGraphicsInfo_AquaMemberF, + [EVENT_OBJ_GFX_MAGMA_MEMBER_M] = &gEventObjectGraphicsInfo_MagmaMemberM, + [EVENT_OBJ_GFX_MAGMA_MEMBER_F] = &gEventObjectGraphicsInfo_MagmaMemberF, + [EVENT_OBJ_GFX_SIDNEY] = &gEventObjectGraphicsInfo_Sidney, + [EVENT_OBJ_GFX_PHOEBE] = &gEventObjectGraphicsInfo_Phoebe, + [EVENT_OBJ_GFX_GLACIA] = &gEventObjectGraphicsInfo_Glacia, + [EVENT_OBJ_GFX_DRAKE] = &gEventObjectGraphicsInfo_Drake, + [EVENT_OBJ_GFX_ROXANNE] = &gEventObjectGraphicsInfo_Roxanne, + [EVENT_OBJ_GFX_BRAWLY] = &gEventObjectGraphicsInfo_Brawly, + [EVENT_OBJ_GFX_WATTSON] = &gEventObjectGraphicsInfo_Wattson, + [EVENT_OBJ_GFX_FLANNERY] = &gEventObjectGraphicsInfo_Flannery, + [EVENT_OBJ_GFX_NORMAN] = &gEventObjectGraphicsInfo_Norman, + [EVENT_OBJ_GFX_WINONA] = &gEventObjectGraphicsInfo_Winona, + [EVENT_OBJ_GFX_LIZA] = &gEventObjectGraphicsInfo_Liza, + [EVENT_OBJ_GFX_TATE] = &gEventObjectGraphicsInfo_Tate, + [EVENT_OBJ_GFX_WALLACE] = &gEventObjectGraphicsInfo_Wallace, + [EVENT_OBJ_GFX_STEVEN] = &gEventObjectGraphicsInfo_Steven, + [EVENT_OBJ_GFX_WALLY] = &gEventObjectGraphicsInfo_Wally, + [EVENT_OBJ_GFX_LITTLE_BOY_3] = &gEventObjectGraphicsInfo_RubySapphireLittleBoy, + [EVENT_OBJ_GFX_BRENDAN_FISHING] = &gEventObjectGraphicsInfo_BrendanFishing, + [EVENT_OBJ_GFX_MAY_FISHING] = &gEventObjectGraphicsInfo_MayFishing, + [EVENT_OBJ_GFX_HOT_SPRINGS_OLD_WOMAN] = &gEventObjectGraphicsInfo_HotSpringsOldWoman, + [EVENT_OBJ_GFX_SS_TIDAL] = &gEventObjectGraphicsInfo_SSTidal, + [EVENT_OBJ_GFX_SUBMARINE_SHADOW] = &gEventObjectGraphicsInfo_SubmarineShadow, + [EVENT_OBJ_GFX_PICHU_DOLL] = &gEventObjectGraphicsInfo_PichuDoll, + [EVENT_OBJ_GFX_PIKACHU_DOLL] = &gEventObjectGraphicsInfo_PikachuDoll, + [EVENT_OBJ_GFX_MARILL_DOLL] = &gEventObjectGraphicsInfo_MarillDoll, + [EVENT_OBJ_GFX_TOGEPI_DOLL] = &gEventObjectGraphicsInfo_TogepiDoll, + [EVENT_OBJ_GFX_CYNDAQUIL_DOLL] = &gEventObjectGraphicsInfo_CyndaquilDoll, + [EVENT_OBJ_GFX_CHIKORITA_DOLL] = &gEventObjectGraphicsInfo_ChikoritaDoll, + [EVENT_OBJ_GFX_TOTODILE_DOLL] = &gEventObjectGraphicsInfo_TotodileDoll, + [EVENT_OBJ_GFX_JIGGLYPUFF_DOLL] = &gEventObjectGraphicsInfo_JigglypuffDoll, + [EVENT_OBJ_GFX_MEOWTH_DOLL] = &gEventObjectGraphicsInfo_MeowthDoll, + [EVENT_OBJ_GFX_CLEFAIRY_DOLL] = &gEventObjectGraphicsInfo_ClefairyDoll, + [EVENT_OBJ_GFX_DITTO_DOLL] = &gEventObjectGraphicsInfo_DittoDoll, + [EVENT_OBJ_GFX_SMOOCHUM_DOLL] = &gEventObjectGraphicsInfo_SmoochumDoll, + [EVENT_OBJ_GFX_TREECKO_DOLL] = &gEventObjectGraphicsInfo_TreeckoDoll, + [EVENT_OBJ_GFX_TORCHIC_DOLL] = &gEventObjectGraphicsInfo_TorchicDoll, + [EVENT_OBJ_GFX_MUDKIP_DOLL] = &gEventObjectGraphicsInfo_MudkipDoll, + [EVENT_OBJ_GFX_DUSKULL_DOLL] = &gEventObjectGraphicsInfo_DuskullDoll, + [EVENT_OBJ_GFX_WYNAUT_DOLL] = &gEventObjectGraphicsInfo_WynautDoll, + [EVENT_OBJ_GFX_BALTOY_DOLL] = &gEventObjectGraphicsInfo_BaltoyDoll, + [EVENT_OBJ_GFX_KECLEON_DOLL] = &gEventObjectGraphicsInfo_KecleonDoll, + [EVENT_OBJ_GFX_AZURILL_DOLL] = &gEventObjectGraphicsInfo_AzurillDoll, + [EVENT_OBJ_GFX_SKITTY_DOLL] = &gEventObjectGraphicsInfo_SkittyDoll, + [EVENT_OBJ_GFX_SWABLU_DOLL] = &gEventObjectGraphicsInfo_SwabluDoll, + [EVENT_OBJ_GFX_GULPIN_DOLL] = &gEventObjectGraphicsInfo_GulpinDoll, + [EVENT_OBJ_GFX_LOTAD_DOLL] = &gEventObjectGraphicsInfo_LotadDoll, + [EVENT_OBJ_GFX_SEEDOT_DOLL] = &gEventObjectGraphicsInfo_SeedotDoll, + [EVENT_OBJ_GFX_PIKA_CUSHION] = &gEventObjectGraphicsInfo_PikaCushion, + [EVENT_OBJ_GFX_ROUND_CUSHION] = &gEventObjectGraphicsInfo_RoundCushion, + [EVENT_OBJ_GFX_KISS_CUSHION] = &gEventObjectGraphicsInfo_KissCushion, + [EVENT_OBJ_GFX_ZIGZAG_CUSHION] = &gEventObjectGraphicsInfo_ZigzagCushion, + [EVENT_OBJ_GFX_SPIN_CUSHION] = &gEventObjectGraphicsInfo_SpinCushion, + [EVENT_OBJ_GFX_DIAMOND_CUSHION] = &gEventObjectGraphicsInfo_DiamondCushion, + [EVENT_OBJ_GFX_BALL_CUSHION] = &gEventObjectGraphicsInfo_BallCushion, + [EVENT_OBJ_GFX_GRASS_CUSHION] = &gEventObjectGraphicsInfo_GrassCushion, + [EVENT_OBJ_GFX_FIRE_CUSHION] = &gEventObjectGraphicsInfo_FireCushion, + [EVENT_OBJ_GFX_WATER_CUSHION] = &gEventObjectGraphicsInfo_WaterCushion, + [EVENT_OBJ_GFX_BIG_SNORLAX_DOLL] = &gEventObjectGraphicsInfo_BigSnorlaxDoll, + [EVENT_OBJ_GFX_BIG_RHYDON_DOLL] = &gEventObjectGraphicsInfo_BigRhydonDoll, + [EVENT_OBJ_GFX_BIG_LAPRAS_DOLL] = &gEventObjectGraphicsInfo_BigLaprasDoll, + [EVENT_OBJ_GFX_BIG_VENUSAUR_DOLL] = &gEventObjectGraphicsInfo_BigVenusaurDoll, + [EVENT_OBJ_GFX_BIG_CHARIZARD_DOLL] = &gEventObjectGraphicsInfo_BigCharizardDoll, + [EVENT_OBJ_GFX_BIG_BLASTOISE_DOLL] = &gEventObjectGraphicsInfo_BigBlastoiseDoll, + [EVENT_OBJ_GFX_BIG_WAILMER_DOLL] = &gEventObjectGraphicsInfo_BigWailmerDoll, + [EVENT_OBJ_GFX_BIG_REGIROCK_DOLL] = &gEventObjectGraphicsInfo_BigRegirockDoll, + [EVENT_OBJ_GFX_BIG_REGICE_DOLL] = &gEventObjectGraphicsInfo_BigRegiceDoll, + [EVENT_OBJ_GFX_BIG_REGISTEEL_DOLL] = &gEventObjectGraphicsInfo_BigRegisteelDoll, + [EVENT_OBJ_GFX_LATIAS] = &gEventObjectGraphicsInfo_Latias, + [EVENT_OBJ_GFX_LATIOS] = &gEventObjectGraphicsInfo_Latios, + [EVENT_OBJ_GFX_GAMEBOY_KID] = &gEventObjectGraphicsInfo_GameboyKid, + [EVENT_OBJ_GFX_CONTEST_JUDGE] = &gEventObjectGraphicsInfo_ContestJudge, + [EVENT_OBJ_GFX_BRENDAN_WATERING] = &gEventObjectGraphicsInfo_BrendanWatering, + [EVENT_OBJ_GFX_MAY_WATERING] = &gEventObjectGraphicsInfo_MayWatering, + [EVENT_OBJ_GFX_BRENDAN_DECORATING] = &gEventObjectGraphicsInfo_BrendanDecorating, + [EVENT_OBJ_GFX_MAY_DECORATING] = &gEventObjectGraphicsInfo_MayDecorating, + [EVENT_OBJ_GFX_ARCHIE] = &gEventObjectGraphicsInfo_Archie, + [EVENT_OBJ_GFX_MAXIE] = &gEventObjectGraphicsInfo_Maxie, + [EVENT_OBJ_GFX_KYOGRE_1] = &gEventObjectGraphicsInfo_Kyogre1, + [EVENT_OBJ_GFX_GROUDON_1] = &gEventObjectGraphicsInfo_Groudon1, + [EVENT_OBJ_GFX_FOSSIL] = &gEventObjectGraphicsInfo_Fossil, + [EVENT_OBJ_GFX_REGIROCK] = &gEventObjectGraphicsInfo_Regirock, + [EVENT_OBJ_GFX_REGICE] = &gEventObjectGraphicsInfo_Regice, + [EVENT_OBJ_GFX_REGISTEEL] = &gEventObjectGraphicsInfo_Registeel, + [EVENT_OBJ_GFX_SKITTY] = &gEventObjectGraphicsInfo_Skitty, + [EVENT_OBJ_GFX_KECLEON_1] = &gEventObjectGraphicsInfo_Kecleon1, + [EVENT_OBJ_GFX_KYOGRE_2] = &gEventObjectGraphicsInfo_Kyogre2, + [EVENT_OBJ_GFX_GROUDON_2] = &gEventObjectGraphicsInfo_Groudon2, + [EVENT_OBJ_GFX_RAYQUAZA_2] = &gEventObjectGraphicsInfo_Rayquaza2, + [EVENT_OBJ_GFX_ZIGZAGOON_2] = &gEventObjectGraphicsInfo_Zigzagoon, + [EVENT_OBJ_GFX_PIKACHU] = &gEventObjectGraphicsInfo_Pikachu, + [EVENT_OBJ_GFX_AZUMARILL] = &gEventObjectGraphicsInfo_Azumarill, + [EVENT_OBJ_GFX_WINGULL] = &gEventObjectGraphicsInfo_Wingull, + [EVENT_OBJ_GFX_KECLEON_2] = &gEventObjectGraphicsInfo_Kecleon2, + [EVENT_OBJ_GFX_TUBER_M_SWIMMING] = &gEventObjectGraphicsInfo_TuberMSwimming, + [EVENT_OBJ_GFX_AZURILL] = &gEventObjectGraphicsInfo_Azurill, + [EVENT_OBJ_GFX_MOM] = &gEventObjectGraphicsInfo_Mom, + [EVENT_OBJ_GFX_LINK_BRENDAN] = &gEventObjectGraphicsInfo_LinkBrendan, + [EVENT_OBJ_GFX_LINK_MAY] = &gEventObjectGraphicsInfo_LinkMay, + [EVENT_OBJ_GFX_JUAN] = &gEventObjectGraphicsInfo_Juan, + [EVENT_OBJ_GFX_SCOTT] = &gEventObjectGraphicsInfo_Scott, + [EVENT_OBJ_GFX_POOCHYENA] = &gEventObjectGraphicsInfo_Poochyena, + [EVENT_OBJ_GFX_KYOGRE_3] = &gEventObjectGraphicsInfo_Kyogre3, + [EVENT_OBJ_GFX_GROUDON_3] = &gEventObjectGraphicsInfo_Groudon3, + [EVENT_OBJ_GFX_MYSTERY_GIFT_MAN] = &gEventObjectGraphicsInfo_MysteryEventDeliveryman, + [EVENT_OBJ_GFX_TRICK_HOUSE_STATUE] = &gEventObjectGraphicsInfo_Statue, + [EVENT_OBJ_GFX_KIRLIA] = &gEventObjectGraphicsInfo_Kirlia, + [EVENT_OBJ_GFX_DUSCLOPS] = &gEventObjectGraphicsInfo_Dusclops, + [EVENT_OBJ_GFX_UNION_ROOM_NURSE] = &gEventObjectGraphicsInfo_UnionRoomAttendant, + [EVENT_OBJ_GFX_SUDOWOODO] = &gEventObjectGraphicsInfo_Sudowoodo, + [EVENT_OBJ_GFX_MEW] = &gEventObjectGraphicsInfo_Mew, + [EVENT_OBJ_GFX_RED] = &gEventObjectGraphicsInfo_Red, + [EVENT_OBJ_GFX_LEAF] = &gEventObjectGraphicsInfo_Leaf, + [EVENT_OBJ_GFX_DEOXYS] = &gEventObjectGraphicsInfo_Deoxys, + [EVENT_OBJ_GFX_DEOXYS_TRIANGLE] = &gEventObjectGraphicsInfo_BirthIslandStone, + [EVENT_OBJ_GFX_BRANDON] = &gEventObjectGraphicsInfo_Brandon, + [EVENT_OBJ_GFX_LINK_RS_BRENDAN] = &gEventObjectGraphicsInfo_RubySapphireBrendan, + [EVENT_OBJ_GFX_LINK_RS_MAY] = &gEventObjectGraphicsInfo_RubySapphireMay, + [EVENT_OBJ_GFX_LUGIA] = &gEventObjectGraphicsInfo_Lugia, + [EVENT_OBJ_GFX_HOOH] = &gEventObjectGraphicsInfo_HoOh, }; const struct EventObjectGraphicsInfo *const gMauvilleOldManGraphicsInfoPointers[] = { diff --git a/src/data/graphics/decorations.h b/src/data/graphics/decorations.h index 62d86d48e..d8b865fcf 100644 --- a/src/data/graphics/decorations.h +++ b/src/data/graphics/decorations.h @@ -1,125 +1,125 @@ -const u32 gUnknown_08DB7AA0[] = INCBIN_U32("graphics/decorations/decor_heavy_desk.4bpp.lz"); -const u32 gUnknown_08DB7B34[] = INCBIN_U32("graphics/decorations/decor_heavy_desk.gbapal.lz"); +const u32 gDecorIcon_HeavyDesk[] = INCBIN_U32("graphics/decorations/decor_heavy_desk.4bpp.lz"); +const u32 gDecorIconPalette_HeavyDesk[] = INCBIN_U32("graphics/decorations/decor_heavy_desk.gbapal.lz"); -const u32 gUnknown_08DB7B5C[] = INCBIN_U32("graphics/decorations/decor_ragged_desk.4bpp.lz"); -const u32 gUnknown_08DB7BEC[] = INCBIN_U32("graphics/decorations/decor_ragged_desk.gbapal.lz"); +const u32 gDecorIcon_RaggedDesk[] = INCBIN_U32("graphics/decorations/decor_ragged_desk.4bpp.lz"); +const u32 gDecorIconPalette_RaggedDesk[] = INCBIN_U32("graphics/decorations/decor_ragged_desk.gbapal.lz"); -const u32 gUnknown_08DB7C08[] = INCBIN_U32("graphics/decorations/decor_comfort_desk.4bpp.lz"); -const u32 gUnknown_08DB7CE8[] = INCBIN_U32("graphics/decorations/decor_comfort_desk.gbapal.lz"); +const u32 gDecorIcon_ComfortDesk[] = INCBIN_U32("graphics/decorations/decor_comfort_desk.4bpp.lz"); +const u32 gDecorIconPalette_ComfortDesk[] = INCBIN_U32("graphics/decorations/decor_comfort_desk.gbapal.lz"); -const u32 gUnknown_08DB7D08[] = INCBIN_U32("graphics/decorations/decor_pretty_desk.4bpp.lz"); -const u32 gUnknown_08DB7DCC[] = INCBIN_U32("graphics/decorations/decor_pretty_desk.gbapal.lz"); +const u32 gDecorIcon_PrettyDesk[] = INCBIN_U32("graphics/decorations/decor_pretty_desk.4bpp.lz"); +const u32 gDecorIconPalette_PrettyDesk[] = INCBIN_U32("graphics/decorations/decor_pretty_desk.gbapal.lz"); -const u32 gUnknown_08DB7DF4[] = INCBIN_U32("graphics/decorations/decor_brick_desk.4bpp.lz"); -const u32 gUnknown_08DB7EA0[] = INCBIN_U32("graphics/decorations/decor_brick_desk.gbapal.lz"); +const u32 gDecorIcon_BrickDesk[] = INCBIN_U32("graphics/decorations/decor_brick_desk.4bpp.lz"); +const u32 gDecorIconPalette_BrickDesk[] = INCBIN_U32("graphics/decorations/decor_brick_desk.gbapal.lz"); -const u32 gUnknown_08DB7EC4[] = INCBIN_U32("graphics/decorations/decor_camp_desk.4bpp.lz"); -const u32 gUnknown_08DB7F60[] = INCBIN_U32("graphics/decorations/decor_camp_desk.gbapal.lz"); +const u32 gDecorIcon_CampDesk[] = INCBIN_U32("graphics/decorations/decor_camp_desk.4bpp.lz"); +const u32 gDecorIconPalette_CampDesk[] = INCBIN_U32("graphics/decorations/decor_camp_desk.gbapal.lz"); -const u32 gUnknown_08DB7F7C[] = INCBIN_U32("graphics/decorations/decor_hard_desk.4bpp.lz"); -const u32 gUnknown_08DB8070[] = INCBIN_U32("graphics/decorations/decor_hard_desk.gbapal.lz"); +const u32 gDecorIcon_HardDesk[] = INCBIN_U32("graphics/decorations/decor_hard_desk.4bpp.lz"); +const u32 gDecorIconPalette_HardDesk[] = INCBIN_U32("graphics/decorations/decor_hard_desk.gbapal.lz"); -const u32 gUnknown_08DB808C[] = INCBIN_U32("graphics/decorations/decor_red_plant.4bpp.lz"); -const u32 gUnknown_08DB8138[] = INCBIN_U32("graphics/decorations/decor_red_plant.gbapal.lz"); +const u32 gDecorIcon_RedPlant[] = INCBIN_U32("graphics/decorations/decor_red_plant.4bpp.lz"); +const u32 gDecorIconPalette_RedPlant[] = INCBIN_U32("graphics/decorations/decor_red_plant.gbapal.lz"); -const u32 gUnknown_08DB8160[] = INCBIN_U32("graphics/decorations/decor_tropical_plant.4bpp.lz"); -const u32 gUnknown_08DB8218[] = INCBIN_U32("graphics/decorations/decor_tropical_plant.gbapal.lz"); +const u32 gDecorIcon_TropicalPlant[] = INCBIN_U32("graphics/decorations/decor_tropical_plant.4bpp.lz"); +const u32 gDecorIconPalette_TropicalPlant[] = INCBIN_U32("graphics/decorations/decor_tropical_plant.gbapal.lz"); -const u32 gUnknown_08DB823C[] = INCBIN_U32("graphics/decorations/decor_pretty_flowers.4bpp.lz"); -const u32 gUnknown_08DB8300[] = INCBIN_U32("graphics/decorations/decor_pretty_flowers.gbapal.lz"); +const u32 gDecorIcon_PrettyFlowers[] = INCBIN_U32("graphics/decorations/decor_pretty_flowers.4bpp.lz"); +const u32 gDecorIconPalette_PrettyFlowers[] = INCBIN_U32("graphics/decorations/decor_pretty_flowers.gbapal.lz"); -const u32 gUnknown_08DB8328[] = INCBIN_U32("graphics/decorations/decor_colorful_plant.4bpp.lz"); -const u32 gUnknown_08DB8430[] = INCBIN_U32("graphics/decorations/decor_colorful_plant.gbapal.lz"); +const u32 gDecorIcon_ColorfulPlant[] = INCBIN_U32("graphics/decorations/decor_colorful_plant.4bpp.lz"); +const u32 gDecorIconPalette_ColorfulPlant[] = INCBIN_U32("graphics/decorations/decor_colorful_plant.gbapal.lz"); -const u32 gUnknown_08DB8458[] = INCBIN_U32("graphics/decorations/decor_big_plant.4bpp.lz"); -const u32 gUnknown_08DB8528[] = INCBIN_U32("graphics/decorations/decor_big_plant.gbapal.lz"); +const u32 gDecorIcon_BigPlant[] = INCBIN_U32("graphics/decorations/decor_big_plant.4bpp.lz"); +const u32 gDecorIconPalette_BigPlant[] = INCBIN_U32("graphics/decorations/decor_big_plant.gbapal.lz"); -const u32 gUnknown_08DB854C[] = INCBIN_U32("graphics/decorations/decor_gorgeous_plant.4bpp.lz"); -const u32 gUnknown_08DB862C[] = INCBIN_U32("graphics/decorations/decor_gorgeous_plant.gbapal.lz"); +const u32 gDecorIcon_GorgeousPlant[] = INCBIN_U32("graphics/decorations/decor_gorgeous_plant.4bpp.lz"); +const u32 gDecorIconPalette_GorgeousPlant[] = INCBIN_U32("graphics/decorations/decor_gorgeous_plant.gbapal.lz"); -const u32 gUnknown_08DB8654[] = INCBIN_U32("graphics/decorations/decor_red_brick.4bpp.lz"); -const u32 gUnknown_08DB86C4[] = INCBIN_U32("graphics/decorations/decor_red_brick.gbapal.lz"); +const u32 gDecorIcon_RedBrick[] = INCBIN_U32("graphics/decorations/decor_red_brick.4bpp.lz"); +const u32 gDecorIconPalette_RedBrick[] = INCBIN_U32("graphics/decorations/decor_red_brick.gbapal.lz"); -const u32 gUnknown_08DB86E0[] = INCBIN_U32("graphics/decorations/decor_yellow_brick.4bpp.lz"); -const u32 gUnknown_08DB8750[] = INCBIN_U32("graphics/decorations/decor_yellow_brick.gbapal.lz"); +const u32 gDecorIcon_YellowBrick[] = INCBIN_U32("graphics/decorations/decor_yellow_brick.4bpp.lz"); +const u32 gDecorIconPalette_YellowBrick[] = INCBIN_U32("graphics/decorations/decor_yellow_brick.gbapal.lz"); -const u32 gUnknown_08DB876C[] = INCBIN_U32("graphics/decorations/decor_blue_brick.4bpp.lz"); -const u32 gUnknown_08DB87DC[] = INCBIN_U32("graphics/decorations/decor_blue_brick.gbapal.lz"); +const u32 gDecorIcon_BlueBrick[] = INCBIN_U32("graphics/decorations/decor_blue_brick.4bpp.lz"); +const u32 gDecorIconPalette_BlueBrick[] = INCBIN_U32("graphics/decorations/decor_blue_brick.gbapal.lz"); -const u32 gUnknown_08DB87F8[] = INCBIN_U32("graphics/decorations/decor_red_tent.4bpp.lz"); -const u32 gUnknown_08DB88D8[] = INCBIN_U32("graphics/decorations/decor_red_tent.gbapal.lz"); +const u32 gDecorIcon_RedTent[] = INCBIN_U32("graphics/decorations/decor_red_tent.4bpp.lz"); +const u32 gDecorIconPalette_RedTent[] = INCBIN_U32("graphics/decorations/decor_red_tent.gbapal.lz"); -const u32 gUnknown_08DB8900[] = INCBIN_U32("graphics/decorations/decor_blue_tent.4bpp.lz"); -const u32 gUnknown_08DB89E0[] = INCBIN_U32("graphics/decorations/decor_blue_tent.gbapal.lz"); +const u32 gDecorIcon_BlueTent[] = INCBIN_U32("graphics/decorations/decor_blue_tent.4bpp.lz"); +const u32 gDecorIconPalette_BlueTent[] = INCBIN_U32("graphics/decorations/decor_blue_tent.gbapal.lz"); -const u32 gUnknown_08DB8A08[] = INCBIN_U32("graphics/decorations/decor_solid_board.4bpp.lz"); -const u32 gUnknown_08DB8A68[] = INCBIN_U32("graphics/decorations/decor_solid_board.gbapal.lz"); +const u32 gDecorIcon_SolidBoard[] = INCBIN_U32("graphics/decorations/decor_solid_board.4bpp.lz"); +const u32 gDecorIconPalette_SolidBoard[] = INCBIN_U32("graphics/decorations/decor_solid_board.gbapal.lz"); -const u32 gUnknown_08DB8A84[] = INCBIN_U32("graphics/decorations/decor_slide.4bpp.lz"); -const u32 gUnknown_08DB8B40[] = INCBIN_U32("graphics/decorations/decor_slide.gbapal.lz"); +const u32 gDecorIcon_Slide[] = INCBIN_U32("graphics/decorations/decor_slide.4bpp.lz"); +const u32 gDecorIconPalette_Slide[] = INCBIN_U32("graphics/decorations/decor_slide.gbapal.lz"); -const u32 gUnknown_08DB8B68[] = INCBIN_U32("graphics/decorations/decor_tire.4bpp.lz"); -const u32 gUnknown_08DB8C40[] = INCBIN_U32("graphics/decorations/decor_tire.gbapal.lz"); +const u32 gDecorIcon_Tire[] = INCBIN_U32("graphics/decorations/decor_tire.4bpp.lz"); +const u32 gDecorIconPalette_Tire[] = INCBIN_U32("graphics/decorations/decor_tire.gbapal.lz"); -const u32 gUnknown_08DB8C5C[] = INCBIN_U32("graphics/decorations/decor_stand.4bpp.lz"); -const u32 gUnknown_08DB8CF4[] = INCBIN_U32("graphics/decorations/decor_stand.gbapal.lz"); +const u32 gDecorIcon_Stand[] = INCBIN_U32("graphics/decorations/decor_stand.4bpp.lz"); +const u32 gDecorIconPalette_Stand[] = INCBIN_U32("graphics/decorations/decor_stand.gbapal.lz"); -const u32 gUnknown_08DB8D18[] = INCBIN_U32("graphics/decorations/decor_breakable_door.4bpp.lz"); -const u32 gUnknown_08DB8DB0[] = INCBIN_U32("graphics/decorations/decor_breakable_door.gbapal.lz"); +const u32 gDecorIcon_BreakableDoor[] = INCBIN_U32("graphics/decorations/decor_breakable_door.4bpp.lz"); +const u32 gDecorIconPalette_BreakableDoor[] = INCBIN_U32("graphics/decorations/decor_breakable_door.gbapal.lz"); -const u32 gUnknown_08DB8DD4[] = INCBIN_U32("graphics/decorations/decor_sand_ornament.4bpp.lz"); -const u32 gUnknown_08DB8E80[] = INCBIN_U32("graphics/decorations/decor_sand_ornament.gbapal.lz"); +const u32 gDecorIcon_SandOrnament[] = INCBIN_U32("graphics/decorations/decor_sand_ornament.4bpp.lz"); +const u32 gDecorIconPalette_SandOrnament[] = INCBIN_U32("graphics/decorations/decor_sand_ornament.gbapal.lz"); -const u32 gUnknown_08DB8EA0[] = INCBIN_U32("graphics/decorations/decor_glass_ornament.4bpp.lz"); -const u32 gUnknown_08DB8F58[] = INCBIN_U32("graphics/decorations/decor_glass_ornament.gbapal.lz"); +const u32 gDecorIcon_GlassOrnament[] = INCBIN_U32("graphics/decorations/decor_glass_ornament.4bpp.lz"); +const u32 gDecorIconPalette_GlassOrnament[] = INCBIN_U32("graphics/decorations/decor_glass_ornament.gbapal.lz"); -const u32 gUnknown_08DB8F7C[] = INCBIN_U32("graphics/decorations/decor_surf_mat.4bpp.lz"); -const u32 gUnknown_08DB9038[] = INCBIN_U32("graphics/decorations/decor_surf_mat.gbapal.lz"); +const u32 gDecorIcon_SurfMat[] = INCBIN_U32("graphics/decorations/decor_surf_mat.4bpp.lz"); +const u32 gDecorIconPalette_SurfMat[] = INCBIN_U32("graphics/decorations/decor_surf_mat.gbapal.lz"); -const u32 gUnknown_08DB9058[] = INCBIN_U32("graphics/decorations/decor_thunder_mat.4bpp.lz"); -const u32 gUnknown_08DB9130[] = INCBIN_U32("graphics/decorations/decor_thunder_mat.gbapal.lz"); +const u32 gDecorIcon_ThunderMat[] = INCBIN_U32("graphics/decorations/decor_thunder_mat.4bpp.lz"); +const u32 gDecorIconPalette_ThunderMat[] = INCBIN_U32("graphics/decorations/decor_thunder_mat.gbapal.lz"); -const u32 gUnknown_08DB9154[] = INCBIN_U32("graphics/decorations/decor_fire_blast_mat.4bpp.lz"); -const u32 gUnknown_08DB9218[] = INCBIN_U32("graphics/decorations/decor_fire_blast_mat.gbapal.lz"); +const u32 gDecorIcon_FireBlastMat[] = INCBIN_U32("graphics/decorations/decor_fire_blast_mat.4bpp.lz"); +const u32 gDecorIconPalette_FireBlastMat[] = INCBIN_U32("graphics/decorations/decor_fire_blast_mat.gbapal.lz"); -const u32 gUnknown_08DB9234[] = INCBIN_U32("graphics/decorations/decor_powder_snow_mat.4bpp.lz"); -const u32 gUnknown_08DB92FC[] = INCBIN_U32("graphics/decorations/decor_powder_snow_mat.gbapal.lz"); +const u32 gDecorIcon_PowderSnowMat[] = INCBIN_U32("graphics/decorations/decor_powder_snow_mat.4bpp.lz"); +const u32 gDecorIconPalette_PowderSnowMat[] = INCBIN_U32("graphics/decorations/decor_powder_snow_mat.gbapal.lz"); -const u32 gUnknown_08DB931C[] = INCBIN_U32("graphics/decorations/decor_attract_mat.4bpp.lz"); -const u32 gUnknown_08DB93E8[] = INCBIN_U32("graphics/decorations/decor_attract_mat.gbapal.lz"); +const u32 gDecorIcon_AttractMat[] = INCBIN_U32("graphics/decorations/decor_attract_mat.4bpp.lz"); +const u32 gDecorIconPalette_AttractMat[] = INCBIN_U32("graphics/decorations/decor_attract_mat.gbapal.lz"); -const u32 gUnknown_08DB940C[] = INCBIN_U32("graphics/decorations/decor_fissure_mat.4bpp.lz"); -const u32 gUnknown_08DB94CC[] = INCBIN_U32("graphics/decorations/decor_fissure_mat.gbapal.lz"); +const u32 gDecorIcon_FissureMat[] = INCBIN_U32("graphics/decorations/decor_fissure_mat.4bpp.lz"); +const u32 gDecorIconPalette_FissureMat[] = INCBIN_U32("graphics/decorations/decor_fissure_mat.gbapal.lz"); -const u32 gUnknown_08DB94E8[] = INCBIN_U32("graphics/decorations/decor_spikes_mat.4bpp.lz"); -const u32 gUnknown_08DB95AC[] = INCBIN_U32("graphics/decorations/decor_spikes_mat.gbapal.lz"); +const u32 gDecorIcon_SpikesMat[] = INCBIN_U32("graphics/decorations/decor_spikes_mat.4bpp.lz"); +const u32 gDecorIconPalette_SpikesMat[] = INCBIN_U32("graphics/decorations/decor_spikes_mat.gbapal.lz"); -const u32 gUnknown_08DB95D0[] = INCBIN_U32("graphics/decorations/decor_snorlax_doll.4bpp.lz"); -const u32 gUnknown_08DB96C4[] = INCBIN_U32("graphics/decorations/decor_snorlax_doll.gbapal.lz"); +const u32 gDecorIcon_SnorlaxDoll[] = INCBIN_U32("graphics/decorations/decor_snorlax_doll.4bpp.lz"); +const u32 gDecorIconPalette_SnorlaxDoll[] = INCBIN_U32("graphics/decorations/decor_snorlax_doll.gbapal.lz"); -const u32 gUnknown_08DB96EC[] = INCBIN_U32("graphics/decorations/decor_rhydon_doll.4bpp.lz"); -const u32 gUnknown_08DB97F4[] = INCBIN_U32("graphics/decorations/decor_rhydon_doll.gbapal.lz"); +const u32 gDecorIcon_RhydonDoll[] = INCBIN_U32("graphics/decorations/decor_rhydon_doll.4bpp.lz"); +const u32 gDecorIconPalette_RhydonDoll[] = INCBIN_U32("graphics/decorations/decor_rhydon_doll.gbapal.lz"); -const u32 gUnknown_08DB981C[] = INCBIN_U32("graphics/decorations/decor_lapras_doll.4bpp.lz"); -const u32 gUnknown_08DB9908[] = INCBIN_U32("graphics/decorations/decor_lapras_doll.gbapal.lz"); +const u32 gDecorIcon_LaprasDoll[] = INCBIN_U32("graphics/decorations/decor_lapras_doll.4bpp.lz"); +const u32 gDecorIconPalette_LaprasDoll[] = INCBIN_U32("graphics/decorations/decor_lapras_doll.gbapal.lz"); -const u32 gUnknown_08DB9930[] = INCBIN_U32("graphics/decorations/decor_venusaur_doll.4bpp.lz"); -const u32 gUnknown_08DB9A54[] = INCBIN_U32("graphics/decorations/decor_venusaur_doll.gbapal.lz"); +const u32 gDecorIcon_VenusaurDoll[] = INCBIN_U32("graphics/decorations/decor_venusaur_doll.4bpp.lz"); +const u32 gDecorIconPalette_VenusaurDoll[] = INCBIN_U32("graphics/decorations/decor_venusaur_doll.gbapal.lz"); -const u32 gUnknown_08DB9A7C[] = INCBIN_U32("graphics/decorations/decor_charizard_doll.4bpp.lz"); -const u32 gUnknown_08DB9B7C[] = INCBIN_U32("graphics/decorations/decor_charizard_doll.gbapal.lz"); +const u32 gDecorIcon_CharizardDoll[] = INCBIN_U32("graphics/decorations/decor_charizard_doll.4bpp.lz"); +const u32 gDecorIconPalette_CharizardDoll[] = INCBIN_U32("graphics/decorations/decor_charizard_doll.gbapal.lz"); -const u32 gUnknown_08DB9BA4[] = INCBIN_U32("graphics/decorations/decor_blastoise_doll.4bpp.lz"); -const u32 gUnknown_08DB9CB0[] = INCBIN_U32("graphics/decorations/decor_blastoise_doll.gbapal.lz"); +const u32 gDecorIcon_BlastoiseDoll[] = INCBIN_U32("graphics/decorations/decor_blastoise_doll.4bpp.lz"); +const u32 gDecorIconPalette_BlastoiseDoll[] = INCBIN_U32("graphics/decorations/decor_blastoise_doll.gbapal.lz"); -const u32 gUnknown_08DB9CD8[] = INCBIN_U32("graphics/decorations/decor_wailmer_doll.4bpp.lz"); -const u32 gUnknown_08DB9DAC[] = INCBIN_U32("graphics/decorations/decor_wailmer_doll.gbapal.lz"); +const u32 gDecorIcon_WailmerDoll[] = INCBIN_U32("graphics/decorations/decor_wailmer_doll.4bpp.lz"); +const u32 gDecorIconPalette_WailmerDoll[] = INCBIN_U32("graphics/decorations/decor_wailmer_doll.gbapal.lz"); -const u32 gUnknown_08DB9DD4[] = INCBIN_U32("graphics/decorations/decor_regice_doll.4bpp.lz"); -const u32 gUnknown_08DB9EE4[] = INCBIN_U32("graphics/decorations/decor_regice_doll.gbapal.lz"); +const u32 gDecorIcon_RegiceDoll[] = INCBIN_U32("graphics/decorations/decor_regice_doll.4bpp.lz"); +const u32 gDecorIconPalette_RegiceDoll[] = INCBIN_U32("graphics/decorations/decor_regice_doll.gbapal.lz"); -const u32 gUnknown_08DB9F08[] = INCBIN_U32("graphics/decorations/decor_regirock_doll.4bpp.lz"); -const u32 gUnknown_08DB9FFC[] = INCBIN_U32("graphics/decorations/decor_regirock_doll.gbapal.lz"); +const u32 gDecorIcon_RegirockDoll[] = INCBIN_U32("graphics/decorations/decor_regirock_doll.4bpp.lz"); +const u32 gDecorIconPalette_RegirockDoll[] = INCBIN_U32("graphics/decorations/decor_regirock_doll.gbapal.lz"); -const u32 gUnknown_08DBA020[] = INCBIN_U32("graphics/decorations/decor_registeel_doll.4bpp.lz"); -const u32 gUnknown_08DBA12C[] = INCBIN_U32("graphics/decorations/decor_registeel_doll.gbapal.lz"); +const u32 gDecorIcon_RegisteelDoll[] = INCBIN_U32("graphics/decorations/decor_registeel_doll.4bpp.lz"); +const u32 gDecorIconPalette_RegisteelDoll[] = INCBIN_U32("graphics/decorations/decor_registeel_doll.gbapal.lz"); diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h new file mode 100644 index 000000000..f60e527a5 --- /dev/null +++ b/src/data/lilycove_lady.h @@ -0,0 +1,470 @@ +#include "constants/easy_chat.h" +#include "constants/event_objects.h" +#include "constants/items.h" +#include "constants/species.h" +#include "constants/moves.h" + +static const u16 sContestLadyMonGfxId[] = +{ + EVENT_OBJ_GFX_ZIGZAGOON_1, + EVENT_OBJ_GFX_SKITTY, + EVENT_OBJ_GFX_POOCHYENA, + EVENT_OBJ_GFX_KECLEON_1, + EVENT_OBJ_GFX_PIKACHU +}; + +static const u16 sLilycoveLadyGfxId[] = +{ + EVENT_OBJ_GFX_WOMAN_4, + EVENT_OBJ_GFX_WOMAN_2, + EVENT_OBJ_GFX_GIRL_2 +}; + +// Quiz Lady data +static const u16 sQuizLadyQuestion1[] = +{ + EC_WORD_WHICH, + EC_WORD_STORES, + EC_WORD_INFORMATION, + EC_WORD_ON, + EC_WORD_POKEMON, + EC_WORD_QUES, + EC_WORD_CAMERA, + EC_WORD_POKEDEX, + EC_WORD_POKENAV +}; + +static const u16 sQuizLadyQuestion2[] = +{ + EC_WORD_WHICH, + EC_WORD_ISN_T, + EC_WORD_A, + EC_WORD_GAME, + EC_WORD_VERSION, + EC_WORD_QUES, + EC_WORD_RUBY, + EC_WORD_SAPPHIRE, + EC_WORD_DARK +}; + +static const u16 sQuizLadyQuestion3[] = +{ + EC_WORD_HOW, + EC_WORD_DO, + EC_WORD_POKEMON, + EC_WORD_EVOLVE, + EC_WORD_QUES, + 0xFFFF, + EC_WORD_LEVEL, + EC_WORD_INSOMNIA, + EC_WORD_CUTE_CHARM +}; + +static const u16 sQuizLadyQuestion4[] = +{ + EC_WORD_WHICH, + EC_WORD_IS, + EC_WORD_THE, + EC_WORD_PRETTY, + EC_WORD_ITEM, + EC_WORD_QUES, + EC_WORD_COLD, + EC_WORD_FLOWERS, + EC_WORD_MACHINE +}; + +static const u16 sQuizLadyQuestion5[] = +{ + EC_WORD_WHICH, + EC_WORD_ITEM, + EC_WORD_DO, + EC_WORD_YOU, + EC_WORD_BREAK, + EC_WORD_QUES, + EC_WORD_EGG, + EC_WORD_MAIL, + EC_WORD_PHONE +}; + +static const u16 sQuizLadyQuestion6[] = +{ + EC_WORD_WHICH, + EC_WORD_WILL, + EC_WORD_STOP, + EC_MOVE2(CONFUSION), + EC_WORD_QUES, + 0xFFFF, + EC_WORD_ILLUMINATE, + EC_WORD_OWN_TEMPO, + EC_WORD_SWIFT_SWIM +}; + +static const u16 sQuizLadyQuestion7[] = +{ + EC_WORD_WHICH, + EC_WORD_OF, + EC_WORD_THESE, + EC_WORD_IS, + EC_WORD_MUSIC, + EC_WORD_QUES, + EC_WORD_FLYING, + EC_WORD_STEEL, + EC_WORD_ROCK +}; + +static const u16 sQuizLadyQuestion8[] = +{ + EC_WORD_WHICH, + EC_WORD_WILL, + EC_MOVE2(BLOCK), + EC_WORD_ESCAPE, + EC_WORD_QUES, + 0xFFFF, + EC_WORD_RUN_AWAY, + EC_WORD_SHADOW_TAG, + EC_WORD_WONDER_GUARD +}; + +static const u16 sQuizLadyQuestion9[] = +{ + EC_WORD_WHICH, + EC_WORD_WILL, + EC_WORD_STOP, + EC_WORD_POISON, + EC_WORD_QUES, + 0xFFFF, + EC_WORD_GUTS, + EC_WORD_IMMUNITY, + EC_WORD_SHED_SKIN +}; + +static const u16 sQuizLadyQuestion10[] = +{ + EC_WORD_WHICH, + EC_WORD_GOES, + EC_WORD_WITH, + EC_WORD_CENTER, + EC_WORD_QUES, + 0xFFFF, + EC_WORD_POKEDEX, + EC_WORD_POKEMON, + EC_WORD_POKENAV +}; + +static const u16 sQuizLadyQuestion11[] = +{ + EC_WORD_WHICH, + EC_WORD_STORES, + EC_WORD_YOUR, + EC_WORD_POKEMON, + EC_WORD_QUES, + 0xFFFF, + EC_WORD_PC, + EC_WORD_DEPT_STORE, + EC_WORD_TELEVISION +}; + +static const u16 sQuizLadyQuestion12[] = +{ + EC_WORD_WHICH, + EC_WORD_MACHINE, + EC_WORD_GIVES, + EC_WORD_YOU, + EC_WORD_INFORMATION, + EC_WORD_QUES, + EC_WORD_BIKE, + EC_WORD_LOCOMOTIVE, + EC_WORD_TELEVISION +}; + +static const u16 sQuizLadyQuestion13[] = +{ + EC_WORD_A, + EC_WORD_POKEMON, + EC_WORD_WAS, + EC_WORD_ONCE, + EC_WORD_THIS, + EC_WORD_QUES, + EC_WORD_PHONE, + EC_WORD_PLUSH_DOLL, + EC_WORD_LETTER +}; + +static const u16 sQuizLadyQuestion14[] = +{ + EC_WORD_STEEL, + EC_WORD_IS, + EC_WORD_STRONG, + EC_WORD_VERSUS, + EC_WORD_WHICH, + EC_WORD_QUES, + EC_WORD_ICE, + EC_WORD_GROUND, + 0xFFFF +}; + +static const u16 sQuizLadyQuestion15[] = +{ + EC_WORD_DARK, + EC_WORD_IS, + EC_WORD_WEAK, + EC_WORD_VERSUS, + EC_WORD_WHICH, + EC_WORD_QUES, + EC_WORD_PSYCHIC, + EC_WORD_FIGHTING, + 0xFFFF +}; + +static const u16 sQuizLadyQuestion16[] = +{ + EC_WORD_GHOST, + EC_WORD_IS, + EC_WORD_WEAK, + EC_WORD_VERSUS, + EC_WORD_WHICH, + EC_WORD_QUES, + EC_WORD_NORMAL, + EC_WORD_DARK, + 0xFFFF +}; + +static const u16 *const sQuizLadyQuizQuestions[] = +{ + sQuizLadyQuestion1, + sQuizLadyQuestion2, + sQuizLadyQuestion3, + sQuizLadyQuestion4, + sQuizLadyQuestion5, + sQuizLadyQuestion6, + sQuizLadyQuestion7, + sQuizLadyQuestion8, + sQuizLadyQuestion9, + sQuizLadyQuestion10, + sQuizLadyQuestion11, + sQuizLadyQuestion12, + sQuizLadyQuestion13, + sQuizLadyQuestion14, + sQuizLadyQuestion15, + sQuizLadyQuestion16 +}; + +static const u16 sQuizLadyQuizAnswers[] = +{ + EC_WORD_POKEDEX, + EC_WORD_DARK, + EC_WORD_LEVEL, + EC_WORD_FLOWERS, + EC_WORD_EGG, + EC_WORD_OWN_TEMPO, + EC_WORD_ROCK, + EC_WORD_SHADOW_TAG, + EC_WORD_IMMUNITY, + EC_WORD_POKEMON, + EC_WORD_PC, + EC_WORD_TELEVISION, + EC_WORD_PLUSH_DOLL, + EC_WORD_ICE, + EC_WORD_FIGHTING, + EC_WORD_DARK +}; + +static const u16 sQuizLadyPrizes[] = +{ + ITEM_GLITTER_MAIL, + ITEM_BEAD_MAIL, + ITEM_TROPIC_MAIL, + ITEM_MAX_ETHER, + ITEM_MAX_ETHER, + ITEM_MAX_ETHER, + ITEM_WATMEL_BERRY, + ITEM_BELUE_BERRY, + ITEM_DURIN_BERRY, + ITEM_LUXURY_BALL, + ITEM_TM15_HYPER_BEAM, + ITEM_BIG_PEARL, + ITEM_STAR_PIECE, + ITEM_RARE_CANDY, + ITEM_RARE_CANDY, + ITEM_PREMIER_BALL +}; + +// Favor Lady data +static const u8 *const sFavorLadyRequests[] = +{ + gText_FavorLady_Slippery, + gText_FavorLady_Roundish, + gText_FavorLady_Whamish, + gText_FavorLady_Shiny, + gText_FavorLady_Sticky, + gText_FavorLady_Pointy +}; + +static const u16 sFavorLadyAcceptedItems_Slippery[] = +{ + ITEM_REPEL, + ITEM_SUPER_REPEL, + ITEM_MAX_REPEL, + ITEM_ANTIDOTE, + ITEM_PARALYZE_HEAL, + ITEM_BURN_HEAL, + ITEM_BELUE_BERRY, + ITEM_AWAKENING, + ITEM_ICE_HEAL, + ITEM_REVIVE, + ITEM_MAX_REVIVE, + ITEM_ENERGY_POWDER, + ITEM_NONE +}; + +static const u16 sFavorLadyAcceptedItems_Roundish[] = +{ + ITEM_FLUFFY_TAIL, + ITEM_PEARL, + ITEM_BIG_PEARL, + ITEM_HARD_STONE, + ITEM_SMOKE_BALL, + ITEM_SHOAL_SHELL, + ITEM_TINY_MUSHROOM, + ITEM_BIG_MUSHROOM, + ITEM_PECHA_BERRY, + ITEM_ASPEAR_BERRY, + ITEM_ORAN_BERRY, + ITEM_GREPA_BERRY, + ITEM_MAGOST_BERRY, + ITEM_WATMEL_BERRY, + ITEM_POKE_BALL, + ITEM_ULTRA_BALL, + ITEM_NONE +}; + +static const u16 sFavorLadyAcceptedItems_Whamish[] = +{ + ITEM_REVIVAL_HERB, + ITEM_POTION, + ITEM_FRESH_WATER, + ITEM_SODA_POP, + ITEM_LEMONADE, + ITEM_HARD_STONE, + ITEM_LIGHT_BALL, + ITEM_LAVA_COOKIE, + ITEM_CHESTO_BERRY, + ITEM_NANAB_BERRY, + ITEM_WEPEAR_BERRY, + ITEM_KELPSY_BERRY, + ITEM_NOMEL_BERRY, + ITEM_DURIN_BERRY, + ITEM_NONE +}; + +static const u16 sFavorLadyAcceptedItems_Shiny[] = +{ + ITEM_HEAL_POWDER, + ITEM_X_SPEED, + ITEM_X_ATTACK, + ITEM_X_DEFEND, + ITEM_BLUE_FLUTE, + ITEM_YELLOW_FLUTE, + ITEM_RED_FLUTE, + ITEM_BLACK_FLUTE, + ITEM_WHITE_FLUTE, + ITEM_NUGGET, + ITEM_SUN_STONE, + ITEM_STARDUST, + ITEM_STAR_PIECE, + ITEM_PEARL, + ITEM_BIG_PEARL, + ITEM_TWISTED_SPOON, + ITEM_SILVER_POWDER, + ITEM_BRIGHT_POWDER, + ITEM_LUXURY_BALL, + ITEM_PREMIER_BALL, + ITEM_NONE +}; + +static const u16 sFavorLadyAcceptedItems_Sticky[] = +{ + ITEM_ENERGY_ROOT, + ITEM_FULL_RESTORE, + ITEM_MAX_POTION, + ITEM_DIRE_HIT, + ITEM_X_ACCURACY, + ITEM_GUARD_SPEC, + ITEM_WATMEL_BERRY, + ITEM_LEFTOVERS, + ITEM_TINY_MUSHROOM, + ITEM_HEART_SCALE, + ITEM_NONE +}; + +static const u16 sFavorLadyAcceptedItems_Pointy[] = +{ + ITEM_QUICK_CLAW, + ITEM_POISON_BARB, + ITEM_SHARP_BEAK, + ITEM_DRAGON_FANG, + ITEM_TAMATO_BERRY, + ITEM_DURIN_BERRY, + ITEM_PETAYA_BERRY, + ITEM_SALAC_BERRY, + ITEM_STARDUST, + ITEM_STAR_PIECE, + ITEM_NONE +}; + +static const u16 *const sFavorLadyAcceptedItemLists[] = +{ + sFavorLadyAcceptedItems_Slippery, + sFavorLadyAcceptedItems_Roundish, + sFavorLadyAcceptedItems_Whamish, + sFavorLadyAcceptedItems_Shiny, + sFavorLadyAcceptedItems_Sticky, + sFavorLadyAcceptedItems_Pointy +}; + +static const u16 sFavorLadyPrizes[] = +{ + ITEM_LUXURY_BALL, + ITEM_NUGGET, + ITEM_PROTEIN, + ITEM_HEART_SCALE, + ITEM_RARE_CANDY, + ITEM_PP_MAX +}; + + +static const u8 *const sContestLadyMonNames[] = +{ + gText_ContestLady_Handsome, + gText_ContestLady_Vinny, + gText_ContestLady_Moreme, + gText_ContestLady_Ironhard, + gText_ContestLady_Muscle +}; + +static const u8 *const sContestLadyCategoryNames[] = +{ + gText_ContestLady_Coolness, + gText_ContestLady_Beauty, + gText_ContestLady_Cuteness, + gText_ContestLady_Smartness, + gText_ContestLady_Toughness +}; + +static const u8 *const sContestNames[] = +{ + gText_CoolnessContest, + gText_BeautyContest, + gText_CutenessContest, + gText_SmartnessContest, + gText_ToughnessContest +}; + +static const u16 sContestLadyMonSpecies[] = +{ + SPECIES_ZIGZAGOON, + SPECIES_SKITTY, + SPECIES_POOCHYENA, + SPECIES_KECLEON, + SPECIES_PIKACHU +}; diff --git a/src/data/pokemon/tutor_learnsets.h b/src/data/pokemon/tutor_learnsets.h index 27fb40621..2c8c3b362 100644 --- a/src/data/pokemon/tutor_learnsets.h +++ b/src/data/pokemon/tutor_learnsets.h @@ -1,35 +1,4 @@ -#define TUTOR_MOVE_MEGA_PUNCH 0 -#define TUTOR_MOVE_SWORDS_DANCE 1 -#define TUTOR_MOVE_MEGA_KICK 2 -#define TUTOR_MOVE_BODY_SLAM 3 -#define TUTOR_MOVE_DOUBLE_EDGE 4 -#define TUTOR_MOVE_COUNTER 5 -#define TUTOR_MOVE_SEISMIC_TOSS 6 -#define TUTOR_MOVE_MIMIC 7 -#define TUTOR_MOVE_METRONOME 8 -#define TUTOR_MOVE_SOFT_BOILED 9 -#define TUTOR_MOVE_DREAM_EATER 10 -#define TUTOR_MOVE_THUNDER_WAVE 11 -#define TUTOR_MOVE_EXPLOSION 12 -#define TUTOR_MOVE_ROCK_SLIDE 13 -#define TUTOR_MOVE_SUBSTITUTE 14 -#define TUTOR_MOVE_DYNAMIC_PUNCH 15 -#define TUTOR_MOVE_ROLLOUT 16 -#define TUTOR_MOVE_PSYCH_UP 17 -#define TUTOR_MOVE_SNORE 18 -#define TUTOR_MOVE_ICY_WIND 19 -#define TUTOR_MOVE_ENDURE 20 -#define TUTOR_MOVE_MUD_SLAP 21 -#define TUTOR_MOVE_ICE_PUNCH 22 -#define TUTOR_MOVE_SWAGGER 23 -#define TUTOR_MOVE_SLEEP_TALK 24 -#define TUTOR_MOVE_SWIFT 25 -#define TUTOR_MOVE_DEFENSE_CURL 26 -#define TUTOR_MOVE_THUNDER_PUNCH 27 -#define TUTOR_MOVE_FIRE_PUNCH 28 -#define TUTOR_MOVE_FURY_CUTTER 29 - -const u16 gTutorMoves[] = +const u16 gTutorMoves[TUTOR_MOVE_COUNT] = { [TUTOR_MOVE_MEGA_PUNCH] = MOVE_MEGA_PUNCH, [TUTOR_MOVE_SWORDS_DANCE] = MOVE_SWORDS_DANCE, @@ -63,5721 +32,5720 @@ const u16 gTutorMoves[] = [TUTOR_MOVE_FURY_CUTTER] = MOVE_FURY_CUTTER, }; -#define TUTOR_LEARNSET(moves) ((u32)(moves)) -#define TUTOR(move) ((u64)1 << (TUTOR_##move)) +#define TUTOR(move) (1u << (TUTOR_##move)) static const u32 sTutorLearnsets[] = { - [SPECIES_NONE] = TUTOR_LEARNSET(0), - - [SPECIES_BULBASAUR] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_IVYSAUR] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_VENUSAUR] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_CHARMANDER] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_CHARMELEON] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_CHARIZARD] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SQUIRTLE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_WARTORTLE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_BLASTOISE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_CATERPIE] = TUTOR_LEARNSET(0), - - [SPECIES_METAPOD] = TUTOR_LEARNSET(0), - - [SPECIES_BUTTERFREE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_WEEDLE] = TUTOR_LEARNSET(0), - - [SPECIES_KAKUNA] = TUTOR_LEARNSET(0), - - [SPECIES_BEEDRILL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_PIDGEY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PIDGEOTTO] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PIDGEOT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_RATTATA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_RATICATE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_SPEAROW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_FEAROW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_EKANS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_ARBOK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_PIKACHU] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_RAICHU] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SANDSHREW] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SANDSLASH] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_NIDORAN_F] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_NIDORINA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_NIDOQUEEN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_NIDORAN_M] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_NIDORINO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_NIDOKING] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_CLEFAIRY] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_CLEFABLE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_VULPIX] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_NINETALES] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_JIGGLYPUFF] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_WIGGLYTUFF] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_ZUBAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GOLBAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ODDISH] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_GLOOM] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_VILEPLUME] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_PARAS] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_PARASECT] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_VENONAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_VENOMOTH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_DIGLETT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_DUGTRIO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_MEOWTH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_PERSIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_PSYDUCK] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GOLDUCK] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_MANKEY] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_PRIMEAPE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_GROWLITHE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ARCANINE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_POLIWAG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_POLIWHIRL] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_POLIWRATH] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_ABRA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_KADABRA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_ALAKAZAM] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_MACHOP] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_MACHOKE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_MACHAMP] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_BELLSPROUT] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_WEEPINBELL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_VICTREEBEL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_TENTACOOL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_TENTACRUEL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_GEODUDE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_GRAVELER] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_GOLEM] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_PONYTA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_RAPIDASH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SLOWPOKE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SLOWBRO] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_MAGNEMITE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MAGNETON] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_FARFETCHD] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_DODUO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_DODRIO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SEEL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_DEWGONG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_GRIMER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_MUK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_SHELLDER] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CLOYSTER] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GASTLY] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_HAUNTER] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_GENGAR] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_ONIX] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_DROWZEE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_HYPNO] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_KRABBY] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_KINGLER] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_VOLTORB] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ELECTRODE] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_EXEGGCUTE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_EXEGGUTOR] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_CUBONE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_MAROWAK] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_HITMONLEE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_HITMONCHAN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_LICKITUNG] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_KOFFING] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_WEEZING] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_RHYHORN] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_RHYDON] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_CHANSEY] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_TANGELA] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_KANGASKHAN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_HORSEA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SEADRA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GOLDEEN] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SEAKING] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_STARYU] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_STARMIE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MR_MIME] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_SCYTHER] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_JYNX] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_ELECTABUZZ] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_MAGMAR] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_PINSIR] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_TAUROS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_MAGIKARP] = TUTOR_LEARNSET(0), - - [SPECIES_GYARADOS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_LAPRAS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_DITTO] = TUTOR_LEARNSET(0), - - [SPECIES_EEVEE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_VAPOREON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_JOLTEON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_FLAREON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PORYGON] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_OMANYTE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_OMASTAR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_KABUTO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_KABUTOPS] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_AERODACTYL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SNORLAX] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_ARTICUNO] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ZAPDOS] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MOLTRES] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_DRATINI] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_DRAGONAIR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_DRAGONITE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_MEWTWO] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_MEW] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_CHIKORITA] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_BAYLEEF] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_MEGANIUM] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_CYNDAQUIL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_QUILAVA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_TYPHLOSION] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_TOTODILE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_CROCONAW] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_FERALIGATR] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SENTRET] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_FURRET] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_HOOTHOOT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_NOCTOWL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_LEDYBA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_LEDIAN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_SPINARAK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_ARIADOS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_CROBAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CHINCHOU] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_LANTURN] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_PICHU] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_CLEFFA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_IGGLYBUFF] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_TOGEPI] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_TOGETIC] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_NATU] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_XATU] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MAREEP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_FLAAFFY] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_AMPHAROS] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_BELLOSSOM] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_MARILL] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_AZUMARILL] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_SUDOWOODO] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_POLITOED] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_HOPPIP] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_SKIPLOOM] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_JUMPLUFF] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_AIPOM] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SUNKERN] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_SUNFLORA] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_YANMA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_WOOPER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_QUAGSIRE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_ESPEON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_UMBREON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MURKROW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SLOWKING] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_MISDREAVUS] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_UNOWN] = TUTOR_LEARNSET(0), - - [SPECIES_WOBBUFFET] = TUTOR_LEARNSET(0), - - [SPECIES_GIRAFARIG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PINECO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_FORRETRESS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_DUNSPARCE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_GLIGAR] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_STEELIX] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_SNUBBULL] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_GRANBULL] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_QWILFISH] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_SCIZOR] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SHUCKLE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_HERACROSS] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SNEASEL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_TEDDIURSA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_URSARING] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SLUGMA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_MAGCARGO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_SWINUB] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_PILOSWINE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_CORSOLA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_REMORAID] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_OCTILLERY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_DELIBIRD] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MANTINE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SKARMORY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_HOUNDOUR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_HOUNDOOM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_KINGDRA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PHANPY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_DONPHAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_PORYGON2] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_STANTLER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SMEARGLE] = TUTOR_LEARNSET(0), - - [SPECIES_TYROGUE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_HITMONTOP] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SMOOCHUM] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_ELEKID] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_MAGBY] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_MILTANK] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_BLISSEY] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SOFT_BOILED) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_RAIKOU] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ENTEI] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SUICUNE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_LARVITAR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_PUPITAR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_TYRANITAR] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_LUGIA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_HO_OH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CELEBI] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_TREECKO] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_GROVYLE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SCEPTILE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_TORCHIC] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_COMBUSKEN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_BLAZIKEN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_MUDKIP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_MARSHTOMP] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_SWAMPERT] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_POOCHYENA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_MIGHTYENA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_ZIGZAGOON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_LINOONE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_WURMPLE] = TUTOR_LEARNSET(0), - - [SPECIES_SILCOON] = TUTOR_LEARNSET(0), - - [SPECIES_BEAUTIFLY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CASCOON] = TUTOR_LEARNSET(0), - - [SPECIES_DUSTOX] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_LOTAD] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_LOMBRE] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_LUDICOLO] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_SEEDOT] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_NUZLEAF] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SHIFTRY] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_NINCADA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_NINJASK] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SHEDINJA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_TAILLOW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SWELLOW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SHROOMISH] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_BRELOOM] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SPINDA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_WINGULL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_PELIPPER] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_SURSKIT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MASQUERAIN] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_WAILMER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_WAILORD] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_SKITTY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_DELCATTY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_KECLEON] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_BALTOY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_CLAYDOL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_NOSEPASS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_TORKOAL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_SABLEYE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_BARBOACH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_WHISCASH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_LUVDISC] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CORPHISH] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_CRAWDAUNT] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_FEEBAS] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MILOTIC] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_CARVANHA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SHARPEDO] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_TRAPINCH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_VIBRAVA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_FLYGON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_MAKUHITA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_HARIYAMA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_ELECTRIKE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_MANECTRIC] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_NUMEL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_CAMERUPT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_SPHEAL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_SEALEO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_WALREIN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_CACNEA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_CACTURNE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SNORUNT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_GLALIE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_LUNATONE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_SOLROCK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_AZURILL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_SPOINK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GRUMPIG] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_PLUSLE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MINUN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MAWILE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_MEDITITE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_MEDICHAM] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_SWABLU] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ALTARIA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_WYNAUT] = TUTOR_LEARNSET(0), - - [SPECIES_DUSKULL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_DUSCLOPS] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_ROSELIA] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SLAKOTH] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_VIGOROTH] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SLAKING] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_GULPIN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_SWALOT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_TROPIUS] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_WHISMUR] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_LOUDRED] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_EXPLOUD] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_CLAMPERL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_HUNTAIL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_GOREBYSS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT)), - - [SPECIES_ABSOL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SHUPPET] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_BANETTE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_SEVIPER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_ZANGOOSE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_RELICANTH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_ARON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_LAIRON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_AGGRON] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_CASTFORM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_VOLBEAT] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_ILLUMISE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_LILEEP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_CRADILY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK)), - - [SPECIES_ANORITH] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_ARMALDO] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_RALTS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_KIRLIA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_GARDEVOIR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_BAGON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SHELGON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_SALAMENCE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_BELDUM] = TUTOR_LEARNSET(0), - - [SPECIES_METANG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_METAGROSS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_REGIROCK] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_REGICE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_REGISTEEL] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_EXPLOSION) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH)), - - [SPECIES_KYOGRE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL)), - - [SPECIES_GROUDON] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_SWORDS_DANCE) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_RAYQUAZA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_LATIAS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_LATIOS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_FURY_CUTTER)), - - [SPECIES_JIRACHI] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_METRONOME) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_DEFENSE_CURL) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_DEOXYS] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH) - | TUTOR(MOVE_MEGA_KICK) - | TUTOR(MOVE_BODY_SLAM) - | TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_COUNTER) - | TUTOR(MOVE_SEISMIC_TOSS) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_THUNDER_WAVE) - | TUTOR(MOVE_ROCK_SLIDE) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_DYNAMIC_PUNCH) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_MUD_SLAP) - | TUTOR(MOVE_ICE_PUNCH) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_SWIFT) - | TUTOR(MOVE_THUNDER_PUNCH) - | TUTOR(MOVE_FIRE_PUNCH)), - - [SPECIES_CHIMECHO] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE) - | TUTOR(MOVE_MIMIC) - | TUTOR(MOVE_DREAM_EATER) - | TUTOR(MOVE_SUBSTITUTE) - | TUTOR(MOVE_ROLLOUT) - | TUTOR(MOVE_PSYCH_UP) - | TUTOR(MOVE_SNORE) - | TUTOR(MOVE_ICY_WIND) - | TUTOR(MOVE_ENDURE) - | TUTOR(MOVE_SWAGGER) - | TUTOR(MOVE_SLEEP_TALK) - | TUTOR(MOVE_DEFENSE_CURL)), + [SPECIES_NONE] = (0), + + [SPECIES_BULBASAUR] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_IVYSAUR] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_VENUSAUR] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_CHARMANDER] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_CHARMELEON] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_CHARIZARD] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SQUIRTLE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_WARTORTLE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_BLASTOISE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_CATERPIE] = (0), + + [SPECIES_METAPOD] = (0), + + [SPECIES_BUTTERFREE] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_WEEDLE] = (0), + + [SPECIES_KAKUNA] = (0), + + [SPECIES_BEEDRILL] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_PIDGEY] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_PIDGEOTTO] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_PIDGEOT] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_RATTATA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_RATICATE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_SPEAROW] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_FEAROW] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_EKANS] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_ARBOK] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_PIKACHU] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH)), + + [SPECIES_RAICHU] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH)), + + [SPECIES_SANDSHREW] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SANDSLASH] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_NIDORAN_F] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_NIDORINA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_NIDOQUEEN] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_NIDORAN_M] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_NIDORINO] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_NIDOKING] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_CLEFAIRY] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SOFT_BOILED) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_CLEFABLE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SOFT_BOILED) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_VULPIX] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_NINETALES] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_JIGGLYPUFF] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_WIGGLYTUFF] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_ZUBAT] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_GOLBAT] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_ODDISH] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_GLOOM] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_VILEPLUME] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_PARAS] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_PARASECT] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_VENONAT] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_VENOMOTH] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_DIGLETT] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_DUGTRIO] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_MEOWTH] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_PERSIAN] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_PSYDUCK] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_GOLDUCK] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_MANKEY] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_PRIMEAPE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_GROWLITHE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_ARCANINE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_POLIWAG] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_POLIWHIRL] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_POLIWRATH] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_ABRA] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_KADABRA] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_ALAKAZAM] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_MACHOP] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_MACHOKE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_MACHAMP] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_BELLSPROUT] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_WEEPINBELL] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_VICTREEBEL] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_TENTACOOL] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_TENTACRUEL] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_GEODUDE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_GRAVELER] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_GOLEM] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_PONYTA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_RAPIDASH] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SLOWPOKE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SLOWBRO] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_MAGNEMITE] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_MAGNETON] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_FARFETCHD] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_DODUO] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_DODRIO] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SEEL] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_DEWGONG] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_GRIMER] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_MUK] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_SHELLDER] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_CLOYSTER] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_GASTLY] = (TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_HAUNTER] = (TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_GENGAR] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_ONIX] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_DROWZEE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_HYPNO] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_KRABBY] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_KINGLER] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_VOLTORB] = (TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_ELECTRODE] = (TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_EXEGGCUTE] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_EXEGGUTOR] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_CUBONE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_MAROWAK] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_HITMONLEE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_HITMONCHAN] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_LICKITUNG] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_KOFFING] = (TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_WEEZING] = (TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_RHYHORN] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_RHYDON] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_CHANSEY] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SOFT_BOILED) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_TANGELA] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_KANGASKHAN] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_HORSEA] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SEADRA] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_GOLDEEN] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SEAKING] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_STARYU] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_STARMIE] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_MR_MIME] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_SCYTHER] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_JYNX] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_ELECTABUZZ] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_MAGMAR] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_PINSIR] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_TAUROS] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_MAGIKARP] = (0), + + [SPECIES_GYARADOS] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_LAPRAS] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_DITTO] = (0), + + [SPECIES_EEVEE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_VAPOREON] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_JOLTEON] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_FLAREON] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_PORYGON] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_OMANYTE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_OMASTAR] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_KABUTO] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_KABUTOPS] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_AERODACTYL] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SNORLAX] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_ARTICUNO] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_ZAPDOS] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_MOLTRES] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_DRATINI] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_DRAGONAIR] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_DRAGONITE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_MEWTWO] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_MEW] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SOFT_BOILED) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_CHIKORITA] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_BAYLEEF] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_MEGANIUM] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_CYNDAQUIL] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_QUILAVA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_TYPHLOSION] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_TOTODILE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_CROCONAW] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_FERALIGATR] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SENTRET] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_FURRET] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_HOOTHOOT] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_NOCTOWL] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_LEDYBA] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH)), + + [SPECIES_LEDIAN] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH)), + + [SPECIES_SPINARAK] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_ARIADOS] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_CROBAT] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_CHINCHOU] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_LANTURN] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_PICHU] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_CLEFFA] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SOFT_BOILED) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_IGGLYBUFF] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_TOGEPI] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SOFT_BOILED) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_TOGETIC] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SOFT_BOILED) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_NATU] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_XATU] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_MAREEP] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_FLAAFFY] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_AMPHAROS] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_BELLOSSOM] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_MARILL] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_AZUMARILL] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_SUDOWOODO] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_POLITOED] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_HOPPIP] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_SKIPLOOM] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_JUMPLUFF] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_AIPOM] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SUNKERN] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_SUNFLORA] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_YANMA] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_WOOPER] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_QUAGSIRE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_ESPEON] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_UMBREON] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_MURKROW] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SLOWKING] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_MISDREAVUS] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_UNOWN] = (0), + + [SPECIES_WOBBUFFET] = (0), + + [SPECIES_GIRAFARIG] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_PINECO] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_FORRETRESS] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_DUNSPARCE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_GLIGAR] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_STEELIX] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_SNUBBULL] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_GRANBULL] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_QWILFISH] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_SCIZOR] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SHUCKLE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_HERACROSS] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SNEASEL] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_TEDDIURSA] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_URSARING] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SLUGMA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_MAGCARGO] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_SWINUB] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_PILOSWINE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_CORSOLA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_REMORAID] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_OCTILLERY] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_DELIBIRD] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_MANTINE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SKARMORY] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_HOUNDOUR] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_HOUNDOOM] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_KINGDRA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_PHANPY] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_DONPHAN] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_PORYGON2] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_STANTLER] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SMEARGLE] = (0), + + [SPECIES_TYROGUE] = (TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_HITMONTOP] = (TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SMOOCHUM] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_ELEKID] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_MAGBY] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_MILTANK] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_BLISSEY] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SOFT_BOILED) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_RAIKOU] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_ENTEI] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SUICUNE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_LARVITAR] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_PUPITAR] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_TYRANITAR] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_LUGIA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_HO_OH] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_CELEBI] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_TREECKO] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_GROVYLE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SCEPTILE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_TORCHIC] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_COMBUSKEN] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_BLAZIKEN] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_MUDKIP] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_MARSHTOMP] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_SWAMPERT] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_POOCHYENA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_MIGHTYENA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_ZIGZAGOON] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_LINOONE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_WURMPLE] = (0), + + [SPECIES_SILCOON] = (0), + + [SPECIES_BEAUTIFLY] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_CASCOON] = (0), + + [SPECIES_DUSTOX] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_LOTAD] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_LOMBRE] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_LUDICOLO] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_SEEDOT] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_NUZLEAF] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SHIFTRY] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_NINCADA] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_NINJASK] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SHEDINJA] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_TAILLOW] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SWELLOW] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SHROOMISH] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_BRELOOM] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SPINDA] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_WINGULL] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_PELIPPER] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_SURSKIT] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_MASQUERAIN] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_WAILMER] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_WAILORD] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_SKITTY] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_DELCATTY] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_KECLEON] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_BALTOY] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_CLAYDOL] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_NOSEPASS] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_TORKOAL] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_SABLEYE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_BARBOACH] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_WHISCASH] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_LUVDISC] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_CORPHISH] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_CRAWDAUNT] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_FEEBAS] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_MILOTIC] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_CARVANHA] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SHARPEDO] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_TRAPINCH] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_VIBRAVA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_FLYGON] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_MAKUHITA] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_HARIYAMA] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_ELECTRIKE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_MANECTRIC] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_NUMEL] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_CAMERUPT] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_SPHEAL] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_SEALEO] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_WALREIN] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_CACNEA] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_CACTURNE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SNORUNT] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_GLALIE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_LUNATONE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_SOLROCK] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_AZURILL] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_SPOINK] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_GRUMPIG] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_PLUSLE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH)), + + [SPECIES_MINUN] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH)), + + [SPECIES_MAWILE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH)), + + [SPECIES_MEDITITE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_MEDICHAM] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_SWABLU] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_ALTARIA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_WYNAUT] = (0), + + [SPECIES_DUSKULL] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_DUSCLOPS] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_ROSELIA] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SLAKOTH] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_VIGOROTH] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SLAKING] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_GULPIN] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_SWALOT] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_TROPIUS] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_WHISMUR] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_LOUDRED] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_EXPLOUD] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_CLAMPERL] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_HUNTAIL] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_GOREBYSS] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT)), + + [SPECIES_ABSOL] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SHUPPET] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_BANETTE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_SEVIPER] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_ZANGOOSE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_RELICANTH] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_ARON] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_LAIRON] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_AGGRON] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_CASTFORM] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_VOLBEAT] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH)), + + [SPECIES_ILLUMISE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH)), + + [SPECIES_LILEEP] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_CRADILY] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK)), + + [SPECIES_ANORITH] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_ARMALDO] = (TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_RALTS] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_KIRLIA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_GARDEVOIR] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_BAGON] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SHELGON] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_SALAMENCE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_BELDUM] = (0), + + [SPECIES_METANG] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_METAGROSS] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_REGIROCK] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_REGICE] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH)), + + [SPECIES_REGISTEEL] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_EXPLOSION) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH)), + + [SPECIES_KYOGRE] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL)), + + [SPECIES_GROUDON] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_SWORDS_DANCE) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_RAYQUAZA] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_LATIAS] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_LATIOS] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_FURY_CUTTER)), + + [SPECIES_JIRACHI] = (TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_METRONOME) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_DEFENSE_CURL) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_DEOXYS] = (TUTOR(MOVE_MEGA_PUNCH) + | TUTOR(MOVE_MEGA_KICK) + | TUTOR(MOVE_BODY_SLAM) + | TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_COUNTER) + | TUTOR(MOVE_SEISMIC_TOSS) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_THUNDER_WAVE) + | TUTOR(MOVE_ROCK_SLIDE) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_DYNAMIC_PUNCH) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_MUD_SLAP) + | TUTOR(MOVE_ICE_PUNCH) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_SWIFT) + | TUTOR(MOVE_THUNDER_PUNCH) + | TUTOR(MOVE_FIRE_PUNCH)), + + [SPECIES_CHIMECHO] = (TUTOR(MOVE_DOUBLE_EDGE) + | TUTOR(MOVE_MIMIC) + | TUTOR(MOVE_DREAM_EATER) + | TUTOR(MOVE_SUBSTITUTE) + | TUTOR(MOVE_ROLLOUT) + | TUTOR(MOVE_PSYCH_UP) + | TUTOR(MOVE_SNORE) + | TUTOR(MOVE_ICY_WIND) + | TUTOR(MOVE_ENDURE) + | TUTOR(MOVE_SWAGGER) + | TUTOR(MOVE_SLEEP_TALK) + | TUTOR(MOVE_DEFENSE_CURL)), }; diff --git a/src/data/script_menu.h b/src/data/script_menu.h new file mode 100644 index 000000000..b64146a5d --- /dev/null +++ b/src/data/script_menu.h @@ -0,0 +1,1006 @@ +// multichoice lists +static const struct MenuAction MultichoiceList_BrineyOnDewford[] = +{ + {gText_Petalburg}, + {gText_Slateport}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_EnterInfo[] = +{ + {gText_Enter2}, + {gText_Info2}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ContestInfo[] = +{ + {gText_WhatsAContest}, + {gText_TypesOfContests}, + {gText_Ranks}, + {gText_Cancel2}, +}; + +static const struct MenuAction MultichoiceList_ContestType[] = +{ + {gText_CoolnessContest}, + {gText_BeautyContest}, + {gText_CutenessContest}, + {gText_SmartnessContest}, + {gText_ToughnessContest}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_DecorRegistry[] = +{ + {gText_Decoration2}, + {gText_PackUp}, + {gText_Registry}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_DecorNoRegistry[] = +{ + {gText_Decoration2}, + {gText_PackUp}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_RegisterMenu[] = +{ + {gMenuText_Register}, + {gText_Registry}, + {gText_Information}, + {gText_Cancel2}, +}; + +static const struct MenuAction MultichoiceList_Bike[] = +{ + {gText_Mach}, + {gText_Acro}, +}; + +static const struct MenuAction MultichoiceList_StatusInfo[] = +{ + {gText_Psn}, + {gText_Par}, + {gText_Slp}, + {gText_Brn}, + {gText_Frz}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_BrineyOffDewford[] = +{ + {gText_Dewford}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ViewedPaintings[] = +{ + {gText_SawIt}, + {gText_NotYet}, +}; + +static const struct MenuAction MultichoiceList_YesNoInfo2[] = +{ + {gText_Yes}, + {gText_No}, + {gText_Info2}, +}; + +static const struct MenuAction MultichoiceList_ChallengeInfo[] = +{ + {gText_Challenge}, + {gText_Info3}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_LevelMode[] = +{ + {gText_Lv50}, + {gText_OpenLevel}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll1_Q1[] = +{ + {gTrickHouse_Mechadoll_Oddish}, + {gTrickHouse_Mechadoll_Poochyena}, + {gTrickHouse_Mechadoll_Taillow}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll1_Q2[] = +{ + {gTrickHouse_Mechadoll_Azurill}, + {gTrickHouse_Mechadoll_Lotad}, + {gTrickHouse_Mechadoll_Wingull}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll1_Q3[] = +{ + {gTrickHouse_Mechadoll_Dustox}, + {gTrickHouse_Mechadoll_Zubat}, + {gTrickHouse_Mechadoll_Nincada}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll2_Q1[] = +{ + {gTrickHouse_Mechadoll_Ralts}, + {gTrickHouse_Mechadoll_Zigzagoon}, + {gTrickHouse_Mechadoll_Slakoth}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll2_Q2[] = +{ + {gTrickHouse_Mechadoll_Poochyena2}, + {gTrickHouse_Mechadoll_Shroomish}, + {gTrickHouse_Mechadoll_Zigzagoon2}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll2_Q3[] = +{ + {gTrickHouse_Mechadoll_Poochyena3}, + {gTrickHouse_Mechadoll_Zubat2}, + {gTrickHouse_Mechadoll_Carvanha}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll3_Q1[] = +{ + {gTrickHouse_Mechadoll_BurnHeal}, + {gTrickHouse_Mechadoll_HarborMail}, + {gTrickHouse_Mechadoll_SamePrice}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll3_Q2[] = +{ + {gTrickHouse_Mechadoll_60Yen}, + {gTrickHouse_Mechadoll_55Yen}, + {gTrickHouse_Mechadoll_Nothing}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll3_Q3[] = +{ + {gTrickHouse_Mechadoll_CostMore}, + {gTrickHouse_Mechadoll_CostLess}, + {gTrickHouse_Mechadoll_SamePrice2}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll4_Q1[] = +{ + {gTrickHouse_Mechadoll_Male}, + {gTrickHouse_Mechadoll_Female}, + {gTrickHouse_Mechadoll_Neither}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll4_Q2[] = +{ + {gTrickHouse_Mechadoll_ElderlyMen}, + {gTrickHouse_Mechadoll_ElderlyLadies}, + {gTrickHouse_Mechadoll_SameNumber}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll4_Q3[] = +{ + {gTrickHouse_Mechadoll_None}, + {gTrickHouse_Mechadoll_One}, + {gTrickHouse_Mechadoll_Two}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll5_Q1[] = +{ + {gTrickHouse_Mechadoll_Two2}, + {gTrickHouse_Mechadoll_Three}, + {gTrickHouse_Mechadoll_Four}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll5_Q2[] = +{ + {gTrickHouse_Mechadoll_Six}, + {gTrickHouse_Mechadoll_Seven}, + {gTrickHouse_Mechadoll_Eight}, +}; + +static const struct MenuAction MultichoiceList_Mechadoll5_Q3[] = +{ + {gTrickHouse_Mechadoll_Six2}, + {gTrickHouse_Mechadoll_Seven2}, + {gTrickHouse_Mechadoll_Eight2}, +}; + +static const struct MenuAction MultichoiceList_VendingMachine[] = +{ + {gText_FreshWaterAndPrice}, + {gText_SodaPopAndPrice}, + {gText_LemonadeAndPrice}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_MachBikeInfo[] = +{ + {gText_HowToRide}, + {gText_HowToTurn}, + {gText_SandySlopes}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_AcroBikeInfo[] = +{ + {gText_Wheelies}, + {gText_BunnyHops}, + {gText_Jump}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_Satisfaction[] = +{ + {gText_Satisfied}, + {gText_Dissatisfied}, +}; + +static const struct MenuAction MultichoiceList_SternDeepSea[] = +{ + {gText_DeepSeaTooth}, + {gText_DeepSeaScale}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_UnusedAshVendor[] = +{ + {gText_BlueFlute2}, + {gText_YellowFlute2}, + {gText_RedFlute2}, + {gText_WhiteFlute2}, + {gText_BlackFlute2}, + {gText_GlassChair}, + {gText_GlassDesk}, + {gText_Cancel2}, +}; + +static const struct MenuAction MultichoiceList_GameCornerDolls[] = +{ + {gText_TreeckoDollAndPrice}, + {gText_TorchicDollAndPrice}, + {gText_MudkipDollAndPrice}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_GameCornerTMs[] = +{ + {gText_TM32AndPrice}, + {gText_TM29AndPrice}, + {gText_TM35AndPrice}, + {gText_TM24AndPrice}, + {gText_TM13AndPrice}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_GameCornerCoins[] = +{ + {gText_50CoinsAndPrice}, + {gText_500CoinsAndPrice}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_HowsFishing[] = +{ + {gText_Excellent2}, + {gText_NotSoGood}, +}; + +static const struct MenuAction MultichoiceList_SSTidalSlateportWithBF[] = +{ + {gText_LilycoveCity}, + {gText_BattleFrontier}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_SSTidalBattleFrontier[] = +{ + {gText_SlateportCity}, + {gText_LilycoveCity}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_RightLeft[] = +{ + {gText_Right}, + {gText_Left}, +}; + +static const struct MenuAction MultichoiceList_SSTidalSlateportNoBF[] = +{ + {gText_LilycoveCity}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_Floors[] = +{ + {gText_5F}, + {gText_4F}, + {gText_3F}, + {gText_2F}, + {gText_1F}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsR[] = +{ + {gText_RedShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsY[] = +{ + {gText_YellowShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsRY[] = +{ + {gText_RedShard}, + {gText_YellowShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsB[] = +{ + {gText_BlueShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsRB[] = +{ + {gText_RedShard}, + {gText_BlueShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsYB[] = +{ + {gText_YellowShard}, + {gText_BlueShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsRYB[] = +{ + {gText_RedShard}, + {gText_YellowShard}, + {gText_BlueShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsG[] = +{ + {gText_GreenShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsRG[] = +{ + {gText_RedShard}, + {gText_GreenShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsYG[] = +{ + {gText_YellowShard}, + {gText_GreenShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsRYG[] = +{ + {gText_RedShard}, + {gText_YellowShard}, + {gText_GreenShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsBG[] = +{ + {gText_BlueShard}, + {gText_GreenShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsRBG[] = +{ + {gText_RedShard}, + {gText_BlueShard}, + {gText_GreenShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsYBG[] = +{ + {gText_YellowShard}, + {gText_BlueShard}, + {gText_GreenShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ShardsRYBG[] = +{ + {gText_RedShard}, + {gText_YellowShard}, + {gText_BlueShard}, + {gText_GreenShard}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_TourneyWithRecord[] = +{ + {gText_Opponent}, + {gText_Tourney_Tree}, + {gText_ReadyToStart}, + {gText_Record2}, + {gText_Rest}, + {gText_Retire}, +}; + +static const struct MenuAction MultichoiceList_TourneyNoRecord[] = +{ + {gText_Opponent}, + {gText_Tourney_Tree}, + {gText_ReadyToStart}, + {gText_Rest}, + {gText_Retire}, +}; + +static const struct MenuAction MultichoiceList_Tent[] = +{ + {gText_RedTent}, + {gText_BlueTent}, +}; + +static const struct MenuAction MultichoiceList_LinkServicesNoBerry[] = +{ + {gText_TradeCenter}, + {gText_Colosseum}, + {gText_RecordCorner}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_YesNoInfo[] = +{ + {gText_Yes}, + {gText_No}, + {gText_Info2}, +}; + +static const struct MenuAction MultichoiceList_BattleMode[] = +{ + {gText_SingleBattle}, + {gText_DoubleBattle}, + {gText_MultiBattle}, + {gText_Info2}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_LinkServicesNoRecord[] = +{ + {gText_TradeCenter}, + {gText_Colosseum}, + {gText_BerryCrush3}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_LinkServicesAll[] = +{ + {gText_TradeCenter}, + {gText_Colosseum}, + {gText_RecordCorner}, + {gText_BerryCrush3}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_LinkServicesNoRecordBerry[] = +{ + {gText_TradeCenter}, + {gText_Colosseum}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_WirelessMinigame[] = +{ + {gText_PokemonJump}, + {gText_DodrioBerryPicking}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_LinkLeader[] = +{ + {gText_JoinGroup}, + {gText_BecomeLeader}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ContestRank[] = +{ + {gText_NormalRank}, + {gText_SuperRank}, + {gText_HyperRank}, + {gText_MasterRank}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_FrontierItemChoose[] = +{ + {gText_BattleBag}, + {gText_HeldItem}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_LinkContestInfo[] = +{ + {gText_LinkContest}, + {gText_AboutE_Mode}, + {gText_AboutG_Mode}, + {gText_Cancel2}, +}; + +static const struct MenuAction MultichoiceList_LinkContestMode[] = +{ + {gText_E_Mode}, + {gText_G_Mode}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_ForcedStartMenu[] = +{ + {gText_MenuOptionPokedex}, + {gText_MenuOptionPokemon}, + {gText_MenuOptionBag}, + {gText_MenuOptionPokenav}, + {gText_Blank}, // blank because it's filled by the player's name + {gText_MenuOptionSave}, + {gText_MenuOptionOption}, + {gText_MenuOptionExit}, +}; + +static const struct MenuAction MultichoiceList_FrontierGamblerBet[] = +{ + {gText_5BP}, + {gText_10BP}, + {gText_15BP}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_UnusedSSTidal1[] = +{ + {gText_SouthernIsland}, + {gText_BirthIsland}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_UnusedSSTidal2[] = +{ + {gText_SouthernIsland}, + {gText_FarawayIsland}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_UnusedSSTidal3[] = +{ + {gText_BirthIsland}, + {gText_FarawayIsland}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_UnusedSSTidal4[] = +{ + {gText_SouthernIsland}, + {gText_BirthIsland}, + {gText_FarawayIsland}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_Fossil[] = +{ + {gText_ClawFossil}, + {gText_RootFossil}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_YesNo[] = +{ + {gText_Yes}, + {gText_No4}, +}; + +static const struct MenuAction MultichoiceList_FrontierRules[] = +{ + {gText_TwoStyles}, + {gText_Lv50_3}, + {gText_OpenLevel2}, + {gText_MonTypeAndNo}, + {gText_HoldItems}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_FrontierPassInfo[] = +{ + {gText_Symbols2}, + {gText_Record3}, + {gText_BattlePts}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_BattleArenaRules[] = +{ + {gText_BattleRules}, + {gText_JudgeMind}, + {gText_JudgeSkill}, + {gText_JudgeBody}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_BattleTowerRules[] = +{ + {gText_TowerInfo}, + {gText_BattleMon}, + {gText_BattleSalon}, + {gText_MultiLink2}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_BattleDomeRules[] = +{ + {gText_Matchup}, + {gText_TourneyTree}, + {gText_DoubleKO}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_BattleFactoryRules[] = +{ + {gText_BasicRules}, + {gText_SwapPartners}, + {gText_SwapNumber}, + {gText_SwapNotes}, + {gText_OpenLevel3}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_BattlePalaceRules[] = +{ + {gText_BattleBasics}, + {gText_PokemonNature}, + {gText_PokemonMoves}, + {gText_Underpowered}, + {gText_WhenInDanger}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_BattlePyramidRules[] = +{ + {gText_PyramidPokemon}, + {gText_PyramidTrainers}, + {gText_PyramidMaze}, + {gText_BattleBag2}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_BattlePikeRules[] = +{ + {gText_PokenavAndBag}, + {gText_HeldItems}, + {gText_PokemonOrder}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_GoOnRecordRestRetire[] = +{ + {gText_GoOn}, + {gText_Record2}, + {gText_Rest}, + {gText_Retire}, +}; + +static const struct MenuAction MultichoiceList_GoOnRestRetire[] = +{ + {gText_GoOn}, + {gText_Rest}, + {gText_Retire}, +}; + +static const struct MenuAction MultichoiceList_GoOnRecordRetire[] = +{ + {gText_GoOn}, + {gText_Record2}, + {gText_Retire}, +}; + +static const struct MenuAction MultichoiceList_GoOnRetire[] = +{ + {gText_GoOn}, + {gText_Retire}, +}; + +static const struct MenuAction MultichoiceList_TVLati[] = +{ + {gText_Red}, + {gText_Blue}, +}; + +static const struct MenuAction MultichoiceList_BattleTowerFeelings[] = +{ + {gText_IllBattleNow}, + {gText_IWon}, + {gText_ILost}, + {gText_IWontTell}, +}; + +static const struct MenuAction MultichoiceList_WheresRayquaza[] = +{ + {gText_CaveOfOrigin}, + {gText_MtPyre}, + {gText_SkyPillar}, + {gText_DontRemember}, +}; + +static const struct MenuAction MultichoiceList_SlateportTentRules[] = +{ + {gText_BasicRules}, + {gText_SwapPartners}, + {gText_SwapNumber}, + {gText_SwapNotes}, + {gText_BattlePokemon}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_FallarborTentRules[] = +{ + {gText_BattleTrainers}, + {gText_BattleRules}, + {gText_JudgeMind}, + {gText_JudgeSkill}, + {gText_JudgeBody}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_TagMatchType[] = +{ + {gText_NormalTagMatch}, + {gText_VarietyTagMatch}, + {gText_UniqueTagMatch}, + {gText_ExpertTagMatch}, + {gText_Exit}, +}; + +static const struct MenuAction MultichoiceList_Exit[] = +{ + {gText_Exit}, +}; + +struct MultichoiceListStruct +{ + const struct MenuAction *list; + u8 count; +}; + +static const struct MultichoiceListStruct sMultichoiceLists[] = +{ + [MULTI_BRINEY_ON_DEWFORD] = MULTICHOICE(MultichoiceList_BrineyOnDewford), + [MULTI_PC] = MULTICHOICE(MultichoiceList_Exit), + [MULTI_ENTERINFO] = MULTICHOICE(MultichoiceList_EnterInfo), + [MULTI_CONTEST_INFO] = MULTICHOICE(MultichoiceList_ContestInfo), + [MULTI_CONTEST_TYPE] = MULTICHOICE(MultichoiceList_ContestType), + [MULTI_DECOR_NOREGISTRY] = MULTICHOICE(MultichoiceList_DecorNoRegistry), + [MULTI_DECOR_REGISTRY] = MULTICHOICE(MultichoiceList_DecorRegistry), + [MULTI_REGISTER_MENU] = MULTICHOICE(MultichoiceList_RegisterMenu), + [MULTI_SSTIDAL_LILYCOVE] = MULTICHOICE(MultichoiceList_Exit), + [MULTI_UNUSED_9] = MULTICHOICE(MultichoiceList_Exit), + [MULTI_UNUSED_10] = MULTICHOICE(MultichoiceList_Exit), + [MULTI_FRONTIER_PASS_INFO] = MULTICHOICE(MultichoiceList_FrontierPassInfo), + [MULTI_BIKE] = MULTICHOICE(MultichoiceList_Bike), + [MULTI_STATUS_INFO] = MULTICHOICE(MultichoiceList_StatusInfo), + [MULTI_BRINEY_OFF_DEWFORD] = MULTICHOICE(MultichoiceList_BrineyOffDewford), + [MULTI_UNUSED_15] = MULTICHOICE(MultichoiceList_Exit), + [MULTI_VIEWED_PAINTINGS] = MULTICHOICE(MultichoiceList_ViewedPaintings), + [MULTI_YESNOINFO] = MULTICHOICE(MultichoiceList_YesNoInfo), + [MULTI_BATTLE_MODE] = MULTICHOICE(MultichoiceList_BattleMode), + [MULTI_UNUSED_19] = MULTICHOICE(MultichoiceList_Exit), + [MULTI_YESNOINFO_2] = MULTICHOICE(MultichoiceList_YesNoInfo2), + [MULTI_UNUSED_21] = MULTICHOICE(MultichoiceList_Exit), + [MULTI_UNUSED_22] = MULTICHOICE(MultichoiceList_Exit), + [MULTI_CHALLENGEINFO] = MULTICHOICE(MultichoiceList_ChallengeInfo), + [MULTI_LEVEL_MODE] = MULTICHOICE(MultichoiceList_LevelMode), + [MULTI_MECHADOLL1_Q1] = MULTICHOICE(MultichoiceList_Mechadoll1_Q1), + [MULTI_MECHADOLL1_Q2] = MULTICHOICE(MultichoiceList_Mechadoll1_Q2), + [MULTI_MECHADOLL1_Q3] = MULTICHOICE(MultichoiceList_Mechadoll1_Q3), + [MULTI_MECHADOLL2_Q1] = MULTICHOICE(MultichoiceList_Mechadoll2_Q1), + [MULTI_MECHADOLL2_Q2] = MULTICHOICE(MultichoiceList_Mechadoll2_Q2), + [MULTI_MECHADOLL2_Q3] = MULTICHOICE(MultichoiceList_Mechadoll2_Q3), + [MULTI_MECHADOLL3_Q1] = MULTICHOICE(MultichoiceList_Mechadoll3_Q1), + [MULTI_MECHADOLL3_Q2] = MULTICHOICE(MultichoiceList_Mechadoll3_Q2), + [MULTI_MECHADOLL3_Q3] = MULTICHOICE(MultichoiceList_Mechadoll3_Q3), + [MULTI_MECHADOLL4_Q1] = MULTICHOICE(MultichoiceList_Mechadoll4_Q1), + [MULTI_MECHADOLL4_Q2] = MULTICHOICE(MultichoiceList_Mechadoll4_Q2), + [MULTI_MECHADOLL4_Q3] = MULTICHOICE(MultichoiceList_Mechadoll4_Q3), + [MULTI_MECHADOLL5_Q1] = MULTICHOICE(MultichoiceList_Mechadoll5_Q1), + [MULTI_MECHADOLL5_Q2] = MULTICHOICE(MultichoiceList_Mechadoll5_Q2), + [MULTI_MECHADOLL5_Q3] = MULTICHOICE(MultichoiceList_Mechadoll5_Q3), + [MULTI_UNUSED_40] = MULTICHOICE(MultichoiceList_Exit), + [MULTI_UNUSED_41] = MULTICHOICE(MultichoiceList_Exit), + [MULTI_VENDING_MACHINE] = MULTICHOICE(MultichoiceList_VendingMachine), + [MULTI_MACH_BIKE_INFO] = MULTICHOICE(MultichoiceList_MachBikeInfo), + [MULTI_ACRO_BIKE_INFO] = MULTICHOICE(MultichoiceList_AcroBikeInfo), + [MULTI_SATISFACTION] = MULTICHOICE(MultichoiceList_Satisfaction), + [MULTI_STERN_DEEPSEA] = MULTICHOICE(MultichoiceList_SternDeepSea), + [MULTI_UNUSED_ASH_VENDOR] = MULTICHOICE(MultichoiceList_UnusedAshVendor), + [MULTI_GAME_CORNER_DOLLS] = MULTICHOICE(MultichoiceList_GameCornerDolls), + [MULTI_GAME_CORNER_COINS] = MULTICHOICE(MultichoiceList_GameCornerCoins), + [MULTI_HOWS_FISHING] = MULTICHOICE(MultichoiceList_HowsFishing), + [MULTI_UNUSED_51] = MULTICHOICE(MultichoiceList_Exit), + [MULTI_SSTIDAL_SLATEPORT_WITH_BF] = MULTICHOICE(MultichoiceList_SSTidalSlateportWithBF), + [MULTI_SSTIDAL_BATTLE_FRONTIER] = MULTICHOICE(MultichoiceList_SSTidalBattleFrontier), + [MULTI_RIGHTLEFT] = MULTICHOICE(MultichoiceList_RightLeft), + [MULTI_GAME_CORNER_TMS] = MULTICHOICE(MultichoiceList_GameCornerTMs), + [MULTI_SSTIDAL_SLATEPORT_NO_BF] = MULTICHOICE(MultichoiceList_SSTidalSlateportNoBF), + [MULTI_FLOORS] = MULTICHOICE(MultichoiceList_Floors), + [MULTI_SHARDS_R] = MULTICHOICE(MultichoiceList_ShardsR), + [MULTI_SHARDS_Y] = MULTICHOICE(MultichoiceList_ShardsY), + [MULTI_SHARDS_RY] = MULTICHOICE(MultichoiceList_ShardsRY), + [MULTI_SHARDS_B] = MULTICHOICE(MultichoiceList_ShardsB), + [MULTI_SHARDS_RB] = MULTICHOICE(MultichoiceList_ShardsRB), + [MULTI_SHARDS_YB] = MULTICHOICE(MultichoiceList_ShardsYB), + [MULTI_SHARDS_RYB] = MULTICHOICE(MultichoiceList_ShardsRYB), + [MULTI_SHARDS_G] = MULTICHOICE(MultichoiceList_ShardsG), + [MULTI_SHARDS_RG] = MULTICHOICE(MultichoiceList_ShardsRG), + [MULTI_SHARDS_YG] = MULTICHOICE(MultichoiceList_ShardsYG), + [MULTI_SHARDS_RYG] = MULTICHOICE(MultichoiceList_ShardsRYG), + [MULTI_SHARDS_BG] = MULTICHOICE(MultichoiceList_ShardsBG), + [MULTI_SHARDS_RBG] = MULTICHOICE(MultichoiceList_ShardsRBG), + [MULTI_SHARDS_YBG] = MULTICHOICE(MultichoiceList_ShardsYBG), + [MULTI_SHARDS_RYBG] = MULTICHOICE(MultichoiceList_ShardsRYBG), + [MULTI_TOURNEY_WITH_RECORD] = MULTICHOICE(MultichoiceList_TourneyWithRecord), + [MULTI_CABLE_CLUB_NO_RECORD_MIX] = MULTICHOICE(MultichoiceList_LinkServicesNoRecordBerry), + [MULTI_WIRELESS_NO_RECORD_BERRY] = MULTICHOICE(MultichoiceList_LinkServicesNoRecordBerry), + [MULTI_CABLE_CLUB_WITH_RECORD_MIX] = MULTICHOICE(MultichoiceList_LinkServicesNoBerry), + [MULTI_WIRELESS_NO_BERRY] = MULTICHOICE(MultichoiceList_LinkServicesNoBerry), + [MULTI_WIRELESS_NO_RECORD] = MULTICHOICE(MultichoiceList_LinkServicesNoRecord), + [MULTI_WIRELESS_ALL_SERVICES] = MULTICHOICE(MultichoiceList_LinkServicesAll), + [MULTI_WIRELESS_MINIGAME] = MULTICHOICE(MultichoiceList_WirelessMinigame), + [MULTI_LINK_LEADER] = MULTICHOICE(MultichoiceList_LinkLeader), + [MULTI_CONTEST_RANK] = MULTICHOICE(MultichoiceList_ContestRank), + [MULTI_FRONTIER_ITEM_CHOOSE] = MULTICHOICE(MultichoiceList_FrontierItemChoose), + [MULTI_LINK_CONTEST_INFO] = MULTICHOICE(MultichoiceList_LinkContestInfo), + [MULTI_LINK_CONTEST_MODE] = MULTICHOICE(MultichoiceList_LinkContestMode), + [MULTI_FORCED_START_MENU] = MULTICHOICE(MultichoiceList_ForcedStartMenu), + [MULTI_FRONTIER_GAMBLER_BET] = MULTICHOICE(MultichoiceList_FrontierGamblerBet), + [MULTI_TENT] = MULTICHOICE(MultichoiceList_Tent), + [MULTI_UNUSED_SSTIDAL_1] = MULTICHOICE(MultichoiceList_UnusedSSTidal1), + [MULTI_UNUSED_SSTIDAL_2] = MULTICHOICE(MultichoiceList_UnusedSSTidal2), + [MULTI_UNUSED_SSTIDAL_3] = MULTICHOICE(MultichoiceList_UnusedSSTidal3), + [MULTI_UNUSED_SSTIDAL_4] = MULTICHOICE(MultichoiceList_UnusedSSTidal4), + [MULTI_FOSSIL] = MULTICHOICE(MultichoiceList_Fossil), + [MULTI_YESNO] = MULTICHOICE(MultichoiceList_YesNo), + [MULTI_FRONTIER_RULES] = MULTICHOICE(MultichoiceList_FrontierRules), + [MULTI_BATTLE_ARENA_RULES] = MULTICHOICE(MultichoiceList_BattleArenaRules), + [MULTI_BATTLE_TOWER_RULES] = MULTICHOICE(MultichoiceList_BattleTowerRules), + [MULTI_BATTLE_DOME_RULES] = MULTICHOICE(MultichoiceList_BattleDomeRules), + [MULTI_BATTLE_FACTORY_RULES] = MULTICHOICE(MultichoiceList_BattleFactoryRules), + [MULTI_BATTLE_PALACE_RULES] = MULTICHOICE(MultichoiceList_BattlePalaceRules), + [MULTI_BATTLE_PYRAMID_RULES] = MULTICHOICE(MultichoiceList_BattlePyramidRules), + [MULTI_BATTLE_PIKE_RULES] = MULTICHOICE(MultichoiceList_BattlePikeRules), + [MULTI_GO_ON_RECORD_REST_RETIRE] = MULTICHOICE(MultichoiceList_GoOnRecordRestRetire), + [MULTI_GO_ON_REST_RETIRE] = MULTICHOICE(MultichoiceList_GoOnRestRetire), + [MULTI_GO_ON_RECORD_RETIRE] = MULTICHOICE(MultichoiceList_GoOnRecordRetire), + [MULTI_GO_ON_RETIRE] = MULTICHOICE(MultichoiceList_GoOnRetire), + [MULTI_TOURNEY_NO_RECORD] = MULTICHOICE(MultichoiceList_TourneyNoRecord), + [MULTI_TV_LATI] = MULTICHOICE(MultichoiceList_TVLati), + [MULTI_BATTLE_TOWER_FEELINGS] = MULTICHOICE(MultichoiceList_BattleTowerFeelings), + [MULTI_WHERES_RAYQUAZA] = MULTICHOICE(MultichoiceList_WheresRayquaza), + [MULTI_SLATEPORT_TENT_RULES] = MULTICHOICE(MultichoiceList_SlateportTentRules), + [MULTI_FALLARBOR_TENT_RULES] = MULTICHOICE(MultichoiceList_FallarborTentRules), + [MULTI_TAG_MATCH_TYPE] = MULTICHOICE(MultichoiceList_TagMatchType), +}; + +const u8 *const gStdStrings[] = +{ + [STDSTRING_COOL] = gText_Cool, + [STDSTRING_BEAUTY] = gText_Beauty, + [STDSTRING_CUTE] = gText_Cute, + [STDSTRING_SMART] = gText_Smart, + [STDSTRING_TOUGH] = gText_Tough, + [STDSTRING_NORMAL] = gText_Normal, + [STDSTRING_SUPER] = gText_Super, + [STDSTRING_HYPER] = gText_Hyper, + [STDSTRING_MASTER] = gText_Master, + [STDSTRING_COOL2] = gText_Cool2, + [STDSTRING_BEAUTY2] = gText_Beauty2, + [STDSTRING_CUTE2] = gText_Cute2, + [STDSTRING_SMART2] = gText_Smart2, + [STDSTRING_TOUGH2] = gText_Tough2, + [STDSTRING_ITEMS] = gText_Items, + [STDSTRING_KEYITEMS] = gText_Key_Items, + [STDSTRING_POKEBALLS] = gText_Poke_Balls, + [STDSTRING_TMHMS] = gText_TMs_Hms, + [STDSTRING_BERRIES] = gText_Berries2, + [STDSTRING_SINGLE] = gText_Single2, + [STDSTRING_DOUBLE] = gText_Double2, + [STDSTRING_MULTI] = gText_Multi, + [STDSTRING_MULTI_LINK] = gText_MultiLink, + [STDSTRING_BATTLE_TOWER] = gText_BattleTower2, + [STDSTRING_BATTLE_DOME] = gText_BattleDome, + [STDSTRING_BATTLE_FACTORY] = gText_BattleFactory, + [STDSTRING_BATTLE_PALACE] = gText_BattlePalace, + [STDSTRING_BATTLE_ARENA] = gText_BattleArena, + [STDSTRING_BATTLE_PIKE] = gText_BattlePike, + [STDSTRING_BATTLE_PYRAMID] = gText_BattlePyramid, +}; + +static const u8 sLinkServicesMultichoiceIds[] = +{ + MULTI_CABLE_CLUB_NO_RECORD_MIX, + MULTI_WIRELESS_NO_RECORD_BERRY, + MULTI_CABLE_CLUB_WITH_RECORD_MIX, + MULTI_WIRELESS_NO_BERRY, + MULTI_WIRELESS_NO_RECORD, + MULTI_WIRELESS_ALL_SERVICES +}; + +static const u8 *const sPCNameStrings[] = +{ + gText_SomeonesPC, + gText_LanettesPC, + gText_PlayersPC, + gText_LogOff, +}; + +static const u8 *const sLilycoveSSTidalDestinations[SSTIDAL_SELECTION_COUNT] = +{ + [SSTIDAL_SELECTION_SLATEPORT] = gText_SlateportCity, + [SSTIDAL_SELECTION_BATTLE_FRONTIER] = gText_BattleFrontier, + [SSTIDAL_SELECTION_SOUTHERN_ISLAND] = gText_SouthernIsland, + [SSTIDAL_SELECTION_NAVEL_ROCK] = gText_NavelRock, + [SSTIDAL_SELECTION_BIRTH_ISLAND] = gText_BirthIsland, + [SSTIDAL_SELECTION_FARAWAY_ISLAND] = gText_FarawayIsland, + [SSTIDAL_SELECTION_EXIT] = gText_Exit, +}; + +static const u8 *const sCableClubOptions_WithRecordMix[] = +{ + CableClub_Text_TradeUsingLinkCable, + CableClub_Text_BattleUsingLinkCable, + CableClub_Text_RecordCornerUsingLinkCable, + CableClub_Text_CancelSelectedItem, +}; +static const u8 *const sWirelessOptionsNoBerryCrush[] = +{ + CableClub_Text_YouMayTradeHere, + CableClub_Text_YouMayBattleHere, + CableClub_Text_CanMixRecords, + CableClub_Text_CancelSelectedItem, +}; +static const u8 *const sWirelessOptions_NoRecordMix[] = +{ + CableClub_Text_YouMayTradeHere, + CableClub_Text_YouMayBattleHere, + CableClub_Text_CanMakeBerryPowder, + CableClub_Text_CancelSelectedItem, +}; +static const u8 *const sWirelessOptions_AllServices[] = +{ + CableClub_Text_YouMayTradeHere, + CableClub_Text_YouMayBattleHere, + CableClub_Text_CanMixRecords, + CableClub_Text_CanMakeBerryPowder, + CableClub_Text_CancelSelectedItem, +}; +static const u8 *const sCableClubOptions_NoRecordMix[] = +{ + CableClub_Text_TradeUsingLinkCable, + CableClub_Text_BattleUsingLinkCable, + CableClub_Text_CancelSelectedItem, +}; +static const u8 *const sWirelessOptions_NoRecordMixBerryCrush[] = +{ + CableClub_Text_YouMayTradeHere, + CableClub_Text_YouMayBattleHere, + CableClub_Text_CancelSelectedItem, +}; diff --git a/src/data/wild_encounters.json b/src/data/wild_encounters.json index 6dd24bfed..ea555bd32 100755 --- a/src/data/wild_encounters.json +++ b/src/data/wild_encounters.json @@ -3,6 +3,32 @@ { "label": "gWildMonHeaders", "for_maps": true, + "fields": [ + { + "type": "land_mons", + "encounter_rates": [ + 20, 20, 10, 10, 10, 10, 5, 5, 4, 4, 1, 1 + ] + }, + { + "type": "water_mons", + "encounter_rates": [ + 60, 30, 5, 4, 1 + ] + }, + { + "type": "rock_smash_mons", + "encounter_rates": [ + 60, 30, 5, 4, 1 + ] + }, + { + "type": "fishing_mons", + "encounter_rates": [ + 70, 30, 60, 20, 20, 40, 40, 15, 4, 1 + ] + } + ], "encounters": [ { "map": "MAP_ROUTE101", diff --git a/src/data/wild_encounters.json.txt b/src/data/wild_encounters.json.txt index 8f88cc587..85755ddec 100755 --- a/src/data/wild_encounters.json.txt +++ b/src/data/wild_encounters.json.txt @@ -1,5 +1,16 @@ {{ doNotModifyHeader }} + ## for wild_encounter_group in wild_encounter_groups +{% if wild_encounter_group.for_maps %} +## for wild_encounter_field in wild_encounter_group.fields +## for encounter_rate in wild_encounter_field.encounter_rates +{% if trackVar(encounter_rate, 100) %} +#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ loop.index }} {{ encounter_rate }} {% else %}#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ loop.index }} ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ subtract(loop.index, 1) }} + {{ encounter_rate }}{% endif %} {{ setVarInt(wild_encounter_field.type, loop.index) }} +## endfor +#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_TOTAL (ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ getVar(wild_encounter_field.type) }}) +## endfor +{% endif %} + ## for encounter in wild_encounter_group.encounters {% if existsIn(encounter, "land_mons") %} const struct WildPokemon {{ encounter.base_label }}_LandMons[] = diff --git a/src/daycare.c b/src/daycare.c index 885ac31a1..e5445ee21 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -3,14 +3,11 @@ #include "battle.h" #include "daycare.h" #include "string_util.h" -#include "constants/species.h" -#include "constants/items.h" #include "mail.h" #include "pokemon_storage_system.h" #include "event_data.h" #include "random.h" #include "main.h" -#include "constants/moves.h" #include "egg_hatch.h" #include "text.h" #include "menu.h" @@ -22,9 +19,10 @@ #include "party_menu.h" #include "list_menu.h" #include "overworld.h" - -#define EGG_MOVES_ARRAY_COUNT 10 -#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50 +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/region_map_sections.h" +#include "constants/species.h" // this file's functions static void ClearDaycareMonMail(struct DayCareMail *mail); @@ -34,10 +32,10 @@ static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y); // RAM buffers used to assist with BuildEggMoveset() EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0}; -EWRAM_DATA static u16 sHatchedEggFatherMoves[4] = {0}; -EWRAM_DATA static u16 sHatchedEggFinalMoves[4] = {0}; +EWRAM_DATA static u16 sHatchedEggFatherMoves[MAX_MON_MOVES] = {0}; +EWRAM_DATA static u16 sHatchedEggFinalMoves[MAX_MON_MOVES] = {0}; EWRAM_DATA static u16 sHatchedEggEggMoves[EGG_MOVES_ARRAY_COUNT] = {0}; -EWRAM_DATA static u16 sHatchedEggMotherMoves[4] = {0}; +EWRAM_DATA static u16 sHatchedEggMotherMoves[MAX_MON_MOVES] = {0}; #include "data/pokemon/egg_moves.h" @@ -52,11 +50,13 @@ static const struct WindowTemplate sDaycareLevelMenuWindowTemplate = .baseBlock = 8 }; +// Indices here are assigned by Task_HandleDaycareLevelMenuInput to VAR_RESULT, +// which is copied to VAR_0x8004 and used as an index for GetDaycareCost static const struct ListMenuItem sLevelMenuItems[] = { {gExpandedPlaceholder_Empty, 0}, {gExpandedPlaceholder_Empty, 1}, - {gText_Exit, 5} + {gText_Exit, DAYCARE_LEVEL_MENU_EXIT} }; static const struct ListMenuTemplate sDaycareListMenuLevelTemplate = @@ -91,7 +91,7 @@ static const u8 *const sCompatibilityMessages[] = static const u8 sJapaneseEggNickname[] = _("タマゴ"); // "tamago" ("egg" in Japanese) -u8 *GetMonNick(struct Pokemon *mon, u8 *dest) +u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest) { u8 nickname[POKEMON_NAME_LENGTH * 2]; @@ -99,7 +99,7 @@ u8 *GetMonNick(struct Pokemon *mon, u8 *dest) return StringCopy10(dest, nickname); } -u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest) +u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest) { u8 nickname[POKEMON_NAME_LENGTH * 2]; @@ -169,7 +169,7 @@ static void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycar u8 mailId; StringCopy(daycareMon->mail.OT_name, gSaveBlock2Ptr->playerName); - GetMonNick(mon, daycareMon->mail.monName); + GetMonNickname2(mon, daycareMon->mail.monName); StripExtCtrlCodes(daycareMon->mail.monName); daycareMon->mail.gameLanguage = LANGUAGE_ENGLISH; daycareMon->mail.monLanguage = GetMonData(mon, MON_DATA_LANGUAGE); @@ -202,8 +202,8 @@ void StoreSelectedPokemonInDaycare(void) static void ShiftDaycareSlots(struct DayCare *daycare) { // This condition is only satisfied when the player takes out the first pokemon from the daycare. - if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0 - && GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) == 0) + if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != SPECIES_NONE + && GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) == SPECIES_NONE) { daycare->mons[0].mon = daycare->mons[1].mon; ZeroBoxMonData(&daycare->mons[1].mon); @@ -254,7 +254,7 @@ static u16 TakeSelectedPokemonFromDaycare(struct DaycareMon *daycareMon) u32 experience; struct Pokemon pokemon; - GetBoxMonNick(&daycareMon->mon, gStringVar1); + GetBoxMonNickname(&daycareMon->mon, gStringVar1); species = GetBoxMonData(&daycareMon->mon, MON_DATA_SPECIES); BoxMonToMon(&daycareMon->mon, &pokemon); @@ -314,7 +314,7 @@ static u8 GetNumLevelsGainedForDaycareMon(struct DaycareMon *daycareMon) { u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycareMon); ConvertIntToDecimalStringN(gStringVar2, numLevelsGained, STR_CONV_MODE_LEFT_ALIGN, 2); - GetBoxMonNick(&daycareMon->mon, gStringVar1); + GetBoxMonNickname(&daycareMon->mon, gStringVar1); return numLevelsGained; } @@ -323,7 +323,7 @@ static u32 GetDaycareCostForSelectedMon(struct DaycareMon *daycareMon) u32 cost; u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycareMon); - GetBoxMonNick(&daycareMon->mon, gStringVar1); + GetBoxMonNickname(&daycareMon->mon, gStringVar1); cost = 100 + 100 * numLevelsGained; ConvertIntToDecimalStringN(gStringVar2, cost, STR_CONV_MODE_LEFT_ALIGN, 5); return cost; @@ -419,18 +419,18 @@ static u16 GetEggSpecies(u16 species) return species; } -static s32 GetSlotToInheritNature(struct DayCare *daycare) +static s32 GetParentToInheritNature(struct DayCare *daycare) { u32 species[DAYCARE_MON_COUNT]; s32 i; s32 dittoCount; - s32 slot = -1; + s32 parent = -1; // search for female gender for (i = 0; i < DAYCARE_MON_COUNT; i++) { if (GetBoxMonGender(&daycare->mons[i].mon) == MON_FEMALE) - slot = i; + parent = i; } // search for ditto @@ -438,50 +438,52 @@ static s32 GetSlotToInheritNature(struct DayCare *daycare) { species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES); if (species[i] == SPECIES_DITTO) - dittoCount++, slot = i; + dittoCount++, parent = i; } // coin flip on ...two Dittos - if (dittoCount == 2) + if (dittoCount == DAYCARE_MON_COUNT) { if (Random() >= USHRT_MAX / 2) - slot = 0; + parent = 0; else - slot = 1; + parent = 1; } - // nature inheritance only if holds everstone - if (GetBoxMonData(&daycare->mons[slot].mon, MON_DATA_HELD_ITEM) != ITEM_EVERSTONE + // Don't inherit nature if not holding Everstone + if (GetBoxMonData(&daycare->mons[parent].mon, MON_DATA_HELD_ITEM) != ITEM_EVERSTONE || Random() >= USHRT_MAX / 2) { return -1; } - return slot; + return parent; } static void _TriggerPendingDaycareEgg(struct DayCare *daycare) { - s32 natureSlot; + s32 parent; s32 natureTries = 0; SeedRng2(gMain.vblankCounter2); - natureSlot = GetSlotToInheritNature(daycare); + parent = GetParentToInheritNature(daycare); - if (natureSlot < 0) + // don't inherit nature + if (parent < 0) { - daycare->offspringPersonality = (Random2() << 0x10) | ((Random() % 0xfffe) + 1); + daycare->offspringPersonality = (Random2() << 16) | ((Random() % 0xfffe) + 1); } + // inherit nature else { - u8 wantedNature = GetNatureFromPersonality(GetBoxMonData(&daycare->mons[natureSlot].mon, MON_DATA_PERSONALITY, NULL)); + u8 wantedNature = GetNatureFromPersonality(GetBoxMonData(&daycare->mons[parent].mon, MON_DATA_PERSONALITY, NULL)); u32 personality; do { - personality = (Random2() << 0x10) | (Random()); + personality = (Random2() << 16) | (Random()); if (wantedNature == GetNatureFromPersonality(personality) && personality != 0) - break; // we found a personality with the same nature + break; // found a personality with the same nature natureTries++; } while (natureTries <= 2400); @@ -492,9 +494,10 @@ static void _TriggerPendingDaycareEgg(struct DayCare *daycare) FlagSet(FLAG_PENDING_DAYCARE_EGG); } +// Functionally unused static void _TriggerPendingDaycareMaleEgg(struct DayCare *daycare) { - daycare->offspringPersonality = (Random()) | (0x8000); + daycare->offspringPersonality = (Random()) | (EGG_GENDER_MALE); FlagSet(FLAG_PENDING_DAYCARE_EGG); } @@ -503,6 +506,7 @@ void TriggerPendingDaycareEgg(void) _TriggerPendingDaycareEgg(&gSaveBlock1Ptr->daycare); } +// Unused static void TriggerPendingDaycareMaleEgg(void) { _TriggerPendingDaycareMaleEgg(&gSaveBlock1Ptr->daycare); @@ -532,9 +536,9 @@ static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv) static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) { u8 i; - u8 selectedIvs[3]; + u8 selectedIvs[INHERITED_IV_COUNT]; u8 availableIVs[NUM_STATS]; - u8 whichParent[ARRAY_COUNT(selectedIvs)]; + u8 whichParents[INHERITED_IV_COUNT]; u8 iv; // Initialize a list of IV indices. @@ -544,48 +548,46 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) } // Select the 3 IVs that will be inherited. - for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) + for (i = 0; i < INHERITED_IV_COUNT; i++) { - // Randomly pick an IV from the available list. + // Randomly pick an IV from the available list and stop from being chosen again. selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)]; - - // Remove the selected IV index from the available IV indices. RemoveIVIndexFromList(availableIVs, i); } // Determine which parent each of the selected IVs should inherit from. - for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) + for (i = 0; i < INHERITED_IV_COUNT; i++) { - whichParent[i] = Random() % 2; + whichParents[i] = Random() % DAYCARE_MON_COUNT; } // Set each of inherited IVs on the egg mon. - for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) + for (i = 0; i < INHERITED_IV_COUNT; i++) { switch (selectedIvs[i]) { case 0: - iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_HP_IV); + iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_HP_IV); SetMonData(egg, MON_DATA_HP_IV, &iv); break; case 1: - iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_ATK_IV); + iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_ATK_IV); SetMonData(egg, MON_DATA_ATK_IV, &iv); break; case 2: - iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_DEF_IV); + iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_DEF_IV); SetMonData(egg, MON_DATA_DEF_IV, &iv); break; case 3: - iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_SPEED_IV); + iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_SPEED_IV); SetMonData(egg, MON_DATA_SPEED_IV, &iv); break; case 4: - iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_SPATK_IV); + iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_SPATK_IV); SetMonData(egg, MON_DATA_SPATK_IV, &iv); break; case 5: - iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_SPDEF_IV); + iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_SPDEF_IV); SetMonData(egg, MON_DATA_SPDEF_IV, &iv); break; } @@ -638,14 +640,14 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru numSharedParentMoves = 0; for (i = 0; i < MAX_MON_MOVES; i++) { - sHatchedEggMotherMoves[i] = 0; - sHatchedEggFatherMoves[i] = 0; - sHatchedEggFinalMoves[i] = 0; + sHatchedEggMotherMoves[i] = MOVE_NONE; + sHatchedEggFatherMoves[i] = MOVE_NONE; + sHatchedEggFinalMoves[i] = MOVE_NONE; } for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++) - sHatchedEggEggMoves[i] = 0; + sHatchedEggEggMoves[i] = MOVE_NONE; for (i = 0; i < EGG_LVL_UP_MOVES_ARRAY_COUNT; i++) - sHatchedEggLevelUpMoves[i] = 0; + sHatchedEggLevelUpMoves[i] = MOVE_NONE; numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), sHatchedEggLevelUpMoves); for (i = 0; i < MAX_MON_MOVES; i++) @@ -761,13 +763,10 @@ static void GiveVoltTackleIfLightBall(struct Pokemon *mon, struct DayCare *dayca static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parentSlots) { u16 i; - u16 species[2]; + u16 species[DAYCARE_MON_COUNT]; u16 eggSpecies; - // Determine which of the daycare mons is the mother and father of the egg. - // The 0th index of the parentSlots array is considered the mother slot, and the - // 1st index is the father slot. - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES); if (species[i] == SPECIES_DITTO) @@ -783,11 +782,11 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent } eggSpecies = GetEggSpecies(species[parentSlots[0]]); - if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & 0x8000) + if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & EGG_GENDER_MALE) { eggSpecies = SPECIES_NIDORAN_M; } - if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & 0x8000) + if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & EGG_GENDER_MALE) { eggSpecies = SPECIES_VOLBEAT; } @@ -795,19 +794,19 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent // Make Ditto the "mother" slot if the other daycare mon is male. if (species[parentSlots[1]] == SPECIES_DITTO && GetBoxMonGender(&daycare->mons[parentSlots[0]].mon) != MON_FEMALE) { - u8 temp = parentSlots[1]; + u8 ditto = parentSlots[1]; parentSlots[1] = parentSlots[0]; - parentSlots[0] = temp; + parentSlots[0] = ditto; } return eggSpecies; } -static void _GiveEggFromDaycare(struct DayCare *daycare) // give_egg +static void _GiveEggFromDaycare(struct DayCare *daycare) { struct Pokemon egg; u16 species; - u8 parentSlots[2]; // 0th index is "mother" daycare slot, 1st is "father" + u8 parentSlots[DAYCARE_MON_COUNT]; bool8 isEgg; species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots); @@ -835,7 +834,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation) u8 metLocation; u8 isEgg; - CreateMon(mon, species, EGG_HATCH_LEVEL, 0x20, FALSE, 0, FALSE, 0); + CreateMon(mon, species, EGG_HATCH_LEVEL, 32, FALSE, 0, OT_ID_PLAYER_ID, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; @@ -846,7 +845,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation) SetMonData(mon, MON_DATA_LANGUAGE, &language); if (setHotSpringsLocation) { - metLocation = 253; // hot springs; see PokemonSummaryScreen_PrintEggTrainerMemo + metLocation = METLOC_SPECIAL_EGG; SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation); } @@ -862,7 +861,7 @@ static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare * u8 language; personality = daycare->offspringPersonality; - CreateMon(mon, species, EGG_HATCH_LEVEL, 0x20, TRUE, personality, FALSE, 0); + CreateMon(mon, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; @@ -878,7 +877,7 @@ void GiveEggFromDaycare(void) _GiveEggFromDaycare(&gSaveBlock1Ptr->daycare); } -static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare) +static bool8 TryProduceOrHatchEgg(struct DayCare *daycare) { u32 i, validEggs = 0; @@ -888,15 +887,16 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare) daycare->mons[i].steps++, validEggs++; } - // try to trigger poke sex - if (daycare->offspringPersonality == 0 && validEggs == 2 && (daycare->mons[1].steps & 0xFF) == 0xFF) + // Check if an egg should be produced + if (daycare->offspringPersonality == 0 && validEggs == DAYCARE_MON_COUNT && (daycare->mons[1].steps & 0xFF) == 0xFF) { - u8 loveScore = GetDaycareCompatibilityScore(daycare); - if (loveScore > (Random() * 100u) / USHRT_MAX) + u8 compatability = GetDaycareCompatibilityScore(daycare); + if (compatability > (Random() * 100u) / USHRT_MAX) TriggerPendingDaycareEgg(); } - if (++daycare->stepCounter == 255) // hatch an egg + // Hatch Egg + if (++daycare->stepCounter == 255) { u32 steps; u8 toSub = GetEggStepsToSubtract(); @@ -909,7 +909,7 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare) continue; steps = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP); - if (steps != 0) // subtract needed steps + if (steps != 0) { if (steps >= toSub) steps -= toSub; @@ -918,7 +918,7 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare) SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &steps); } - else // hatch the egg + else { gSpecialVar_0x8004 = i; return TRUE; @@ -926,12 +926,12 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare) } } - return FALSE; // no hatching + return FALSE; } bool8 ShouldEggHatch(void) { - return _DoEggActions_CheckHatch(&gSaveBlock1Ptr->daycare); + return TryProduceOrHatchEgg(&gSaveBlock1Ptr->daycare); } static bool8 IsEggPending(struct DayCare *daycare) @@ -947,20 +947,20 @@ static void _GetDaycareMonNicknames(struct DayCare *daycare) u8 text[12]; if (GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) != 0) { - GetBoxMonNick(&daycare->mons[0].mon, gStringVar1); + GetBoxMonNickname(&daycare->mons[0].mon, gStringVar1); GetBoxMonData(&daycare->mons[0].mon, MON_DATA_OT_NAME, text); StringCopy(gStringVar3, text); } if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0) { - GetBoxMonNick(&daycare->mons[1].mon, gStringVar2); + GetBoxMonNickname(&daycare->mons[1].mon, gStringVar2); } } -u16 GetSelectedMonNickAndSpecies(void) +u16 GetSelectedMonNicknameAndSpecies(void) { - GetBoxMonNick(&gPlayerParty[GetCursorSelectionMonId()].box, gStringVar1); + GetBoxMonNickname(&gPlayerParty[GetCursorSelectionMonId()].box, gStringVar1); return GetBoxMonData(&gPlayerParty[GetCursorSelectionMonId()].box, MON_DATA_SPECIES); } @@ -971,26 +971,19 @@ void GetDaycareMonNicknames(void) u8 GetDaycareState(void) { - // The daycare can be in 4 possible states: - // 0: default state--no deposited mons, no egg - // 1: there is an egg waiting for the player to pick it up - // 2: there is a single pokemon in the daycare - // 3: there are two pokemon in the daycare, no egg - u8 numMons; if (IsEggPending(&gSaveBlock1Ptr->daycare)) { - // There is an Egg waiting for the player. - return 1; + return DAYCARE_EGG_WAITING; } numMons = CountPokemonInDaycare(&gSaveBlock1Ptr->daycare); if (numMons != 0) { - return numMons + 1; + return numMons + 1; // DAYCARE_ONE_MON or DAYCARE_TWO_MONS } - return 0; + return DAYCARE_NO_MONS; } static u8 GetDaycarePokemonCount(void) @@ -1002,15 +995,15 @@ static u8 GetDaycarePokemonCount(void) return 0; } +// Determine if the two given egg group lists contain any of the +// same egg groups. static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2) { - // Determine if the two given egg group lists contain any of the - // same egg groups. s32 i, j; - for (i = 0; i < 2; i++) + for (i = 0; i < EGG_GROUPS_PER_MON; i++) { - for (j = 0; j < 2; j++) + for (j = 0; j < EGG_GROUPS_PER_MON; j++) { if (eggGroups1[i] == eggGroups2[j]) return TRUE; @@ -1023,12 +1016,12 @@ static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2) static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) { u32 i; - u16 eggGroups[2][2]; - u16 species[2]; - u32 trainerIds[2]; - u32 genders[2]; + u16 eggGroups[DAYCARE_MON_COUNT][EGG_GROUPS_PER_MON]; + u16 species[DAYCARE_MON_COUNT]; + u32 trainerIds[DAYCARE_MON_COUNT]; + u32 genders[DAYCARE_MON_COUNT]; - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { u32 personality; @@ -1042,41 +1035,42 @@ static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) // check unbreedable egg group if (eggGroups[0][0] == EGG_GROUP_UNDISCOVERED || eggGroups[1][0] == EGG_GROUP_UNDISCOVERED) - return 0; + return PARENTS_INCOMPATIBLE; // two Ditto can't breed if (eggGroups[0][0] == EGG_GROUP_DITTO && eggGroups[1][0] == EGG_GROUP_DITTO) - return 0; + return PARENTS_INCOMPATIBLE; - // now that we checked, one ditto can breed with any other mon + // one parent is Ditto if (eggGroups[0][0] == EGG_GROUP_DITTO || eggGroups[1][0] == EGG_GROUP_DITTO) { - if (trainerIds[0] == trainerIds[1]) // same trainer - return 20; + if (trainerIds[0] == trainerIds[1]) + return PARENTS_LOW_COMPATIBILITY; - return 50; // different trainers, more chance of poke sex + return PARENTS_MED_COMPATABILITY; } + // neither parent is Ditto else { - if (genders[0] == genders[1]) // no homo - return 0; + if (genders[0] == genders[1]) + return PARENTS_INCOMPATIBLE; if (genders[0] == MON_GENDERLESS || genders[1] == MON_GENDERLESS) - return 0; - if (!EggGroupsOverlap(eggGroups[0], eggGroups[1])) // not compatible with each other - return 0; + return PARENTS_INCOMPATIBLE; + if (!EggGroupsOverlap(eggGroups[0], eggGroups[1])) + return PARENTS_INCOMPATIBLE; - if (species[0] == species[1]) // same species + if (species[0] == species[1]) { - if (trainerIds[0] == trainerIds[1]) // same species and trainer - return 50; + if (trainerIds[0] == trainerIds[1]) + return PARENTS_MED_COMPATABILITY; // same species, same trainer - return 70; // different trainers, same species + return PARENTS_MAX_COMPATABILITY; // same species, different trainers } else { - if (trainerIds[0] != trainerIds[1]) // different trainers, different species - return 50; + if (trainerIds[0] != trainerIds[1]) + return PARENTS_MED_COMPATABILITY; // different species, different trainers - return 20; // different species, same trainer + return PARENTS_LOW_COMPATIBILITY; // different species, same trainer } } } @@ -1093,13 +1087,13 @@ void SetDaycareCompatibilityString(void) relationshipScore = GetDaycareCompatibilityScoreFromSave(); whichString = 0; - if (relationshipScore == 0) + if (relationshipScore == PARENTS_INCOMPATIBLE) whichString = 3; - if (relationshipScore == 20) + if (relationshipScore == PARENTS_LOW_COMPATIBILITY) whichString = 2; - if (relationshipScore == 50) + if (relationshipScore == PARENTS_MED_COMPATABILITY) whichString = 1; - if (relationshipScore == 70) + if (relationshipScore == PARENTS_MAX_COMPATABILITY) whichString = 0; StringCopy(gStringVar4, sCompatibilityMessages[whichString]); @@ -1108,20 +1102,20 @@ void SetDaycareCompatibilityString(void) bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio) { u8 i; - u8 symbolsCount[2]; // male, female - symbolsCount[0] = symbolsCount[1] = 0; + u8 symbolsCount[GENDER_COUNT]; + symbolsCount[MALE] = symbolsCount[FEMALE] = 0; for (i = 0; name[i] != EOS; i++) { if (name[i] == CHAR_MALE) - symbolsCount[0]++; + symbolsCount[MALE]++; if (name[i] == CHAR_FEMALE) - symbolsCount[1]++; + symbolsCount[FEMALE]++; } - if (genderRatio == MON_MALE && symbolsCount[0] != 0 && symbolsCount[1] == 0) + if (genderRatio == MON_MALE && symbolsCount[MALE] != 0 && symbolsCount[FEMALE] == 0) return TRUE; - if (genderRatio == MON_FEMALE && symbolsCount[1] != 0 && symbolsCount[0] == 0) + if (genderRatio == MON_FEMALE && symbolsCount[FEMALE] != 0 && symbolsCount[MALE] == 0) return TRUE; return FALSE; @@ -1150,13 +1144,13 @@ static u8 *AppendMonGenderSymbol(u8 *name, struct BoxPokemon *boxMon) static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest) { - u8 monNames[2][20]; + u8 monNames[DAYCARE_MON_COUNT][20]; u8 i; *dest = EOS; - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { - GetBoxMonNick(&daycare->mons[i].mon, monNames[i]); + GetBoxMonNickname(&daycare->mons[i].mon, monNames[i]); AppendMonGenderSymbol(monNames[i], &daycare->mons[i].mon); } @@ -1174,7 +1168,7 @@ static void GetDaycareLevelMenuLevelText(struct DayCare *daycare, u8 *dest) u8 text[20]; *dest = EOS; - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { StringAppend(dest, gText_Lv); level = GetLevelAfterDaycareSteps(&daycare->mons[i].mon, daycare->mons[i].steps); @@ -1206,13 +1200,13 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y) AddTextPrinter(&printer, 0xFF, NULL); } -static void DaycarePrintMonNick(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y) +static void DaycarePrintMonNickname(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y) { - u8 nick[POKEMON_NAME_LENGTH * 2]; + u8 nickname[POKEMON_NAME_LENGTH * 2]; - GetBoxMonNick(&daycare->mons[daycareSlotId].mon, nick); - AppendMonGenderSymbol(nick, &daycare->mons[daycareSlotId].mon); - DaycareAddTextPrinter(windowId, nick, 8, y); + GetBoxMonNickname(&daycare->mons[daycareSlotId].mon, nickname); + AppendMonGenderSymbol(nickname, &daycare->mons[daycareSlotId].mon); + DaycareAddTextPrinter(windowId, nickname, 8, y); } static void DaycarePrintMonLvl(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y) @@ -1234,7 +1228,7 @@ static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y) { if (daycareSlotId < (unsigned) DAYCARE_MON_COUNT) { - DaycarePrintMonNick(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y); + DaycarePrintMonNickname(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y); DaycarePrintMonLvl(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y); } } @@ -1254,8 +1248,8 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) case 1: gSpecialVar_Result = input; break; - case 5: - gSpecialVar_Result = 2; + case DAYCARE_LEVEL_MENU_EXIT: + gSpecialVar_Result = DAYCARE_EXITED_LEVEL_MENU; break; } DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL); @@ -1266,7 +1260,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) } else if (gMain.newKeys & B_BUTTON) { - gSpecialVar_Result = 2; + gSpecialVar_Result = DAYCARE_EXITED_LEVEL_MENU; DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL); ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); RemoveWindow(gTasks[taskId].tWindowId); diff --git a/src/decoration.c b/src/decoration.c index 974859c88..4efeb19b1 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -2043,7 +2043,7 @@ const u32 *GetDecorationIconPicOrPalette(u16 decor, u8 mode) if (decor > NUM_DECORATIONS) decor = DECOR_NONE; - return gUnknown_085A6BE8[decor][mode]; + return gDecorIconTable[decor][mode]; } u8 AddDecorationIconObjectFromEventObject(u16 tilesTag, u16 paletteTag, u8 decor) @@ -2095,7 +2095,7 @@ u8 AddDecorationIconObject(u8 decor, s16 x, s16 y, u8 priority, u16 tilesTag, u1 gSprites[spriteId].pos2.x = x + 4; gSprites[spriteId].pos2.y = y + 4; } - else if (gUnknown_085A6BE8[decor][0] == NULL) + else if (gDecorIconTable[decor][0] == NULL) { spriteId = AddDecorationIconObjectFromEventObject(tilesTag, paletteTag, decor); if (spriteId == MAX_SPRITES) diff --git a/src/diploma.c b/src/diploma.c index 92c7df703..8e0901fa8 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -127,7 +127,7 @@ static void Task_DiplomaFadeOut(u8 taskId) static void DisplayDiplomaText(void) { - if (sub_80C0944()) + if (HasAllMons()) { SetGpuReg(REG_OFFSET_BG1HOFS, DISPCNT_BG0_ON); StringCopy(gStringVar1, gText_DexNational); diff --git a/src/easy_chat.c b/src/easy_chat.c index 93456631a..ba54de783 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -30,6 +30,7 @@ #include "constants/easy_chat.h" #include "constants/event_objects.h" #include "constants/flags.h" +#include "constants/lilycove_lady.h" #include "constants/songs.h" #include "constants/species.h" #include "constants/rgb.h" @@ -240,6 +241,7 @@ struct Unk8597530 MainCallback callback; }; +// Lilycove Quiz Lady static const struct Unk8597530 sUnknown_08597530[] = { { .word = 26, @@ -1305,15 +1307,15 @@ void ShowEasyChatScreen(void) displayedPersonType = EASY_CHAT_PERSON_BOY; break; case EASY_CHAT_TYPE_QUIZ_ANSWER: - words = &gSaveBlock1Ptr->lilycoveLady.quiz.unk_016; + words = &gSaveBlock1Ptr->lilycoveLady.quiz.playerAnswer; break; case EASY_CHAT_TYPE_QUIZ_QUESTION: return; case EASY_CHAT_TYPE_QUIZ_SET_QUESTION: - words = gSaveBlock1Ptr->lilycoveLady.quiz.unk_002; + words = gSaveBlock1Ptr->lilycoveLady.quiz.question; break; case EASY_CHAT_TYPE_QUIZ_SET_ANSWER: - words = &gSaveBlock1Ptr->lilycoveLady.quiz.unk_014; + words = &gSaveBlock1Ptr->lilycoveLady.quiz.correctAnswer; break; case EASY_CHAT_TYPE_APPRENTICE: words = gSaveBlock2Ptr->apprentices[0].easyChatWords; @@ -1329,7 +1331,7 @@ void ShowEasyChatScreen(void) DoEasyChatScreen(gSpecialVar_0x8004, words, CB2_ReturnToFieldContinueScript, displayedPersonType); } -static void sub_811A7E4(void) +static void CB2_QuizLadyQuestion(void) { LilycoveLady *lilycoveLady; @@ -1343,7 +1345,7 @@ static void sub_811A7E4(void) if (!gPaletteFade.active) { lilycoveLady = &gSaveBlock1Ptr->lilycoveLady; - lilycoveLady->quiz.unk_016 = -1; + lilycoveLady->quiz.playerAnswer = -1; CleanupOverworldWindowsAndTilemaps(); DoQuizQuestionEasyChatScreen(); } @@ -1352,9 +1354,9 @@ static void sub_811A7E4(void) gMain.state ++; } -void sub_811A858(void) +void QuizLadyShowQuizQuestion(void) { - SetMainCallback2(sub_811A7E4); + SetMainCallback2(CB2_QuizLadyQuestion); } static int sub_811A868(u16 word) @@ -1387,7 +1389,7 @@ static void DoQuizAnswerEasyChatScreen(void) { DoEasyChatScreen( EASY_CHAT_TYPE_QUIZ_ANSWER, - &gSaveBlock1Ptr->lilycoveLady.quiz.unk_016, + &gSaveBlock1Ptr->lilycoveLady.quiz.playerAnswer, CB2_ReturnToFieldContinueScript, EASY_CHAT_PERSON_DISPLAY_NONE); } @@ -1395,7 +1397,7 @@ static void DoQuizAnswerEasyChatScreen(void) static void DoQuizQuestionEasyChatScreen(void) { DoEasyChatScreen(EASY_CHAT_TYPE_QUIZ_QUESTION, - gSaveBlock1Ptr->lilycoveLady.quiz.unk_002, + gSaveBlock1Ptr->lilycoveLady.quiz.question, CB2_ReturnToFieldContinueScript, EASY_CHAT_PERSON_DISPLAY_NONE); } @@ -1403,7 +1405,7 @@ static void DoQuizQuestionEasyChatScreen(void) static void DoQuizSetAnswerEasyChatScreen(void) { DoEasyChatScreen(EASY_CHAT_TYPE_QUIZ_SET_ANSWER, - &gSaveBlock1Ptr->lilycoveLady.quiz.unk_014, + &gSaveBlock1Ptr->lilycoveLady.quiz.correctAnswer, CB2_ReturnToFieldContinueScript, EASY_CHAT_PERSON_DISPLAY_NONE); } @@ -1411,7 +1413,7 @@ static void DoQuizSetAnswerEasyChatScreen(void) static void DoQuizSetQuestionEasyChatScreen(void) { DoEasyChatScreen(EASY_CHAT_TYPE_QUIZ_SET_QUESTION, - gSaveBlock1Ptr->lilycoveLady.quiz.unk_002, + gSaveBlock1Ptr->lilycoveLady.quiz.question, CB2_ReturnToFieldContinueScript, EASY_CHAT_PERSON_DISPLAY_NONE); } @@ -2660,9 +2662,9 @@ static int sub_811BD64(void) return sub_811BCF4(); saveBlock1 = gSaveBlock1Ptr; - for (i = 0; i < 9; i++) + for (i = 0; i < QUIZ_QUESTION_LEN; i++) { - if (saveBlock1->lilycoveLady.quiz.unk_002[i] != 0xFFFF) + if (saveBlock1->lilycoveLady.quiz.question[i] != 0xFFFF) return 0; } @@ -2676,7 +2678,7 @@ static int sub_811BDB0(void) return sub_811BCF4(); quiz = &gSaveBlock1Ptr->lilycoveLady.quiz; - return quiz->unk_014 == 0xFFFF ? 1 : 0; + return quiz->correctAnswer == 0xFFFF ? 1 : 0; } static void sub_811BDF0(u8 *arg0) diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 835141ef2..1eaf4e4a1 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -56,7 +56,7 @@ struct EggHatchData extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle extern const u8 gText_HatchedFromEgg[]; -extern const u8 gText_NickHatchPrompt[]; +extern const u8 gText_NicknameHatchPrompt[]; static void Task_EggHatch(u8 taskID); static void CB2_EggHatch_0(void); @@ -298,13 +298,13 @@ static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) u16 species; u32 personality, pokerus; u8 i, friendship, language, gameMet, markings, obedience; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; u32 ivs[NUM_STATS]; species = GetMonData(egg, MON_DATA_SPECIES); - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i); } @@ -322,9 +322,9 @@ static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) pokerus = GetMonData(egg, MON_DATA_POKERUS); obedience = GetMonData(egg, MON_DATA_OBEDIENCE); - CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, 0, 0); + CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0); - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { SetMonData(temp, MON_DATA_MOVE1 + i, &moves[i]); } @@ -368,7 +368,7 @@ static void AddHatchedMonToParty(u8 id) GetSetPokedexFlag(pokeNum, FLAG_SET_SEEN); GetSetPokedexFlag(pokeNum, FLAG_SET_CAUGHT); - GetMonNick(mon, gStringVar1); + GetMonNickname2(mon, gStringVar1); ball = ITEM_POKE_BALL; SetMonData(mon, MON_DATA_POKEBALL, &ball); @@ -388,17 +388,17 @@ void ScriptHatchMon(void) AddHatchedMonToParty(gSpecialVar_0x8004); } -static bool8 sub_807158C(struct DayCare *daycare, u8 daycareId) +static bool8 _CheckDaycareMonReceivedMail(struct DayCare *daycare, u8 daycareId) { - u8 nick[0x20]; + u8 nickname[32]; struct DaycareMon *daycareMon = &daycare->mons[daycareId]; - GetBoxMonNick(&daycareMon->mon, nick); - if (daycareMon->mail.message.itemId != 0 - && (StringCompareWithoutExtCtrlCodes(nick, daycareMon->mail.monName) != 0 + GetBoxMonNickname(&daycareMon->mon, nickname); + if (daycareMon->mail.message.itemId != ITEM_NONE + && (StringCompareWithoutExtCtrlCodes(nickname, daycareMon->mail.monName) != 0 || StringCompareWithoutExtCtrlCodes(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0)) { - StringCopy(gStringVar1, nick); + StringCopy(gStringVar1, nickname); TVShowConvertInternationalString(gStringVar2, daycareMon->mail.OT_name, daycareMon->mail.gameLanguage); TVShowConvertInternationalString(gStringVar3, daycareMon->mail.monName, daycareMon->mail.monLanguage); return TRUE; @@ -406,9 +406,9 @@ static bool8 sub_807158C(struct DayCare *daycare, u8 daycareId) return FALSE; } -bool8 sub_8071614(void) +bool8 CheckDaycareMonReceivedMail(void) { - return sub_807158C(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004); + return _CheckDaycareMonReceivedMail(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004); } static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc) @@ -634,7 +634,7 @@ static void CB2_EggHatch_1(void) } break; case 5: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); + GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg); EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF); PlayFanfare(MUS_FANFA5); @@ -651,8 +651,8 @@ static void CB2_EggHatch_1(void) sEggHatchData->CB2_state++; break; case 8: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); - StringExpandPlaceholders(gStringVar4, gText_NickHatchPrompt); + GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_NicknameHatchPrompt); EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 2, 1); sEggHatchData->CB2_state++; break; @@ -668,7 +668,7 @@ static void CB2_EggHatch_1(void) switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3); + GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3); species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]); personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0); @@ -880,9 +880,9 @@ u8 GetEggStepsToSubtract(void) return 1; } -u16 sub_80722E0(void) +u16 CountPartyAliveNonEggMons(void) { u16 aliveNonEggMonsCount = CountStorageNonEggMons(); - aliveNonEggMonsCount += CountPartyAliveNonEggMonsExcept(6); + aliveNonEggMonsCount += CountPartyAliveNonEggMonsExcept(PARTY_SIZE); return aliveNonEggMonsCount; } diff --git a/src/electric.c b/src/electric.c index 5e7729842..4b93119dc 100644 --- a/src/electric.c +++ b/src/electric.c @@ -667,9 +667,9 @@ static void sub_810A75C(struct Sprite *sprite) sprite->oam.tileNum += gBattleAnimArgs[3] * 4; if (gBattleAnimArgs[3] == 1) - sprite->oam.matrixNum = 8; + sprite->oam.matrixNum = ST_OAM_HFLIP; else if (gBattleAnimArgs[3] == 2) - sprite->oam.matrixNum = 16; + sprite->oam.matrixNum = ST_OAM_VFLIP; sprite->data[0] = gBattleAnimArgs[2]; sprite->callback = WaitAnimForDuration; diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index 11aaaafe7..f184dea82 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -9,6 +9,12 @@ #include "sprite.h" #include "task.h" #include "util.h" +#include "trainer_hill.h" +#include "constants/easy_chat.h" +#include "constants/trainers.h" +#include "constants/species.h" +#include "constants/moves.h" +#include "constants/items.h" struct Unknown030012C8 { @@ -38,14 +44,359 @@ static u16 gUnknown_030012F0; static u16 gUnknown_030012F2; static u16 gUnknown_030012F4; -extern const u8 gUnknown_08625B6C[][0x148]; +static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { + [0] = { + .name = __("マキエ$$$$$ "), + .facilityClass = FACILITY_CLASS_HEX_MANIAC, + .unused = 0x1, + .speechBefore = { EC_WORD_PREPOSTEROUS, EC_WORD_CASE, EC_WORD_THERE, EC_WORD_TO_HER, EC_WORD_CHALLENGE, EC_WORD_JOKING }, + .speechWin = { EC_WORD_HERS, EC_WORD_TRUMP_CARD, EC_MOVE2(SECRET_POWER), EC_WORD_USING, EC_WORD_WON, EC_WORD_EXCL_EXCL }, + .speechLose = { EC_WORD_TO_HER, EC_WORD_WIN, EC_WORD_JOKING, EC_WORD_HIGHS, EC_WORD_SCARY, EC_WORD_ELLIPSIS_EXCL }, + .speechAfter = { EC_WORD_IGNORANT, EC_WORD_SO, EC_WORD_TODAY, EC_WORD_NIGHTTIME, EC_WORD_YOU_RE, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS }, + .mons = { + [0] = NULL_BATTLE_TOWER_POKEMON, + [1] = NULL_BATTLE_TOWER_POKEMON, + [2] = NULL_BATTLE_TOWER_POKEMON, + [3] = { + .species = SPECIES_SWALOT, + .heldItem = ITEM_SHELL_BELL, + .moves = { MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_PAIN_SPLIT, MOVE_YAWN }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 55, + .attackEV = 255, + .defenseEV = 100, + .speedEV = 0, + .spAttackEV = 0, + .spDefenseEV = 100, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 1, + .personality = 0x80, + .nickname = __("マルノーム$$$$$$"), + .friendship = 255 + }, + [4] = { + .species = SPECIES_DUSTOX, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = { MOVE_SILVER_WIND, MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_GIGA_DRAIN }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 0, + .attackEV = 255, + .defenseEV = 0, + .speedEV = 0, + .spAttackEV = 255, + .spDefenseEV = 0, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x6, + .nickname = __("ドクケイル$$$$$$"), + .friendship = 255 + }, + [5] = { + .species = SPECIES_RELICANTH, + .heldItem = ITEM_QUICK_CLAW, + .moves = { MOVE_ANCIENT_POWER, MOVE_SURF, MOVE_EARTHQUAKE, MOVE_AMNESIA }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 100, + .attackEV = 0, + .defenseEV = 0, + .speedEV = 0, + .spAttackEV = 155, + .spDefenseEV = 255, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x2f, + .nickname = __("ジーランス$$$$$$"), + .friendship = 255 + }, + } + }, + [1] = { + .name = __("ハルヒト$$$$ "), + .facilityClass = FACILITY_CLASS_CAMPER, + .unused = 0x1, + .speechBefore = { EC_MOVE2(BOUNCE), EC_WORD_AS_MUCH_AS, 0xFFFF, EC_WORD_THEY_RE, EC_WORD_STRONG, EC_WORD_EXCL }, + .speechWin = { EC_MOVE(FLY), EC_WORD_AS_MUCH_AS, 0xFFFF, EC_WORD_THEY_RE, EC_WORD_HAPPY, EC_WORD_EXCL }, + .speechLose = { EC_MOVE2(MINIMIZE), EC_WORD_AS_MUCH_AS, 0xFFFF, EC_WORD_THEY_RE, EC_WORD_SAD, EC_WORD_EXCL }, + .speechAfter = { EC_MOVE(BITE), EC_WORD_AS_MUCH_AS, 0xFFFF, EC_WORD_THEY_RE, EC_WORD_ANGRY, EC_WORD_EXCL }, + .mons = { + [0] = NULL_BATTLE_TOWER_POKEMON, + [1] = NULL_BATTLE_TOWER_POKEMON, + [2] = NULL_BATTLE_TOWER_POKEMON, + [3] = { + .species = SPECIES_CACTURNE, + .heldItem = ITEM_QUICK_CLAW, + .moves = { MOVE_GIGA_DRAIN, MOVE_FAINT_ATTACK, MOVE_THUNDER_PUNCH, MOVE_GROWTH }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 55, + .attackEV = 0, + .defenseEV = 100, + .speedEV = 0, + .spAttackEV = 255, + .spDefenseEV = 100, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x8c, + .nickname = __("ノクタス$$$$$$$"), + .friendship = 255 + }, + [4] = { + .species = SPECIES_SWELLOW, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = { MOVE_FACADE, MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK, MOVE_DOUBLE_TEAM }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 255, + .attackEV = 255, + .defenseEV = 0, + .speedEV = 0, + .spAttackEV = 0, + .spDefenseEV = 0, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x80, + .nickname = __("オオスバメ$$$$$$"), + .friendship = 255 + }, + [5] = { + .species = SPECIES_WHISCASH, + .heldItem = ITEM_CHESTO_BERRY, + .moves = { MOVE_SURF, MOVE_EARTHQUAKE, MOVE_AMNESIA, MOVE_REST }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 0, + .attackEV = 255, + .defenseEV = 0, + .speedEV = 0, + .spAttackEV = 255, + .spDefenseEV = 0, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x0, + .nickname = __("ナマズン$$$$$$$"), + .friendship = 255 + }, + } + }, + [2] = { + .name = __("メイコ$$$$$ "), + .facilityClass = FACILITY_CLASS_SCHOOL_KID_F, + .unused = 0x1, + .speechBefore = { EC_WORD_SHINE, EC_WORD_POKEMON, EC_WORD_RELEASE, EC_WORD_WAS, EC_MOVE2(FRUSTRATION), EC_WORD_WITHOUT }, + .speechWin = { EC_WORD_SHINE, EC_WORD_POKEMON, EC_WORD_TO_HER, EC_MOVE2(PRESENT), EC_WORD_KNOWS, EC_WORD_WITHOUT }, + .speechLose = { EC_WORD_THAT, EC_WORD_ABOVE, EC_WORD_LOST, EC_WORD_STORES, EC_WORD_JOKING, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS }, + .speechAfter = { EC_WORD_ENTERTAINING, EC_WORD_NONE, EC_WORD_HEY_QUES, EC_WORD_ALMOST, EC_WORD_EXCL, 0xFFFF }, + .mons = { + [0] = NULL_BATTLE_TOWER_POKEMON, + [1] = NULL_BATTLE_TOWER_POKEMON, + [2] = NULL_BATTLE_TOWER_POKEMON, + [3] = { + .species = SPECIES_DELCATTY, + .heldItem = ITEM_LUM_BERRY, + .moves = { MOVE_SING, MOVE_BODY_SLAM, MOVE_SHADOW_BALL, MOVE_IRON_TAIL }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 0, + .attackEV = 255, + .defenseEV = 0, + .speedEV = 255, + .spAttackEV = 0, + .spDefenseEV = 0, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x3, + .nickname = __("エネコロロ$$$$$$"), + .friendship = 255 + }, + [4] = { + .species = SPECIES_ROSELIA, + .heldItem = ITEM_LEFTOVERS, + .moves = { MOVE_GIGA_DRAIN, MOVE_GRASS_WHISTLE, MOVE_TOXIC, MOVE_LEECH_SEED }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 255, + .attackEV = 0, + .defenseEV = 0, + .speedEV = 0, + .spAttackEV = 255, + .spDefenseEV = 0, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 1, + .personality = 0x6, + .nickname = __("ロゼリア$$$$$$$"), + .friendship = 255 + }, + [5] = { + .species = SPECIES_BEAUTIFLY, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = { MOVE_SILVER_WIND, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_PSYCHIC }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 100, + .attackEV = 200, + .defenseEV = 0, + .speedEV = 0, + .spAttackEV = 200, + .spDefenseEV = 0, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x6, + .nickname = __("アゲハント$$$$$$"), + .friendship = 255 + }, + } + }, + [3] = { + .name = __("ピエール$$$$ "), + .facilityClass = FACILITY_CLASS_GENTLEMAN, + .unused = 0x1, + .speechBefore = { EC_WORD_SHE_WAS, EC_WORD_NO_1, EC_WORD_STRONG, EC_WORD_UNCLE, EC_WORD_THERE, EC_WORD_EXCL }, + .speechWin = { EC_WORD_HAHAHA, EC_WORD_TEACHER, EC_WORD_BECOMES, EC_WORD_GIVE, EC_WORD_IS_IT_QUES, 0xFFFF }, + .speechLose = { EC_WORD_OUTSIDE, EC_WORD_UNCLE, EC_WORD_SURPRISE, EC_WORD_THESE, EC_WORD_HEY_QUES, EC_WORD_ELLIPSIS_EXCL }, + .speechAfter = { EC_WORD_HE_S, EC_WORD_NO_1, EC_WORD_STRONG, EC_WORD_CHILDREN, EC_WORD_CAN_T, EC_WORD_EXCL_EXCL }, + .mons = { + [0] = NULL_BATTLE_TOWER_POKEMON, + [1] = NULL_BATTLE_TOWER_POKEMON, + [2] = NULL_BATTLE_TOWER_POKEMON, + [3] = { + .species = SPECIES_MAWILE, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = { MOVE_CRUNCH, MOVE_FLAMETHROWER, MOVE_THUNDER_PUNCH, MOVE_COMET_PUNCH }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 0, + .attackEV = 0, + .defenseEV = 100, + .speedEV = 0, + .spAttackEV = 255, + .spDefenseEV = 155, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 1, + .personality = 0x0, + .nickname = __("クチート$$$$$$$"), + .friendship = 255 + }, + [4] = { + .species = SPECIES_SHARPEDO, + .heldItem = ITEM_SCOPE_LENS, + .moves = { MOVE_SURF, MOVE_CRUNCH, MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 255, + .attackEV = 0, + .defenseEV = 0, + .speedEV = 0, + .spAttackEV = 255, + .spDefenseEV = 0, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x96, + .nickname = __("サメハダー$$$$$$"), + .friendship = 255 + }, + [5] = { + .species = SPECIES_BANETTE, + .heldItem = ITEM_LUM_BERRY, + .moves = { MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT, MOVE_WILL_O_WISP }, + .level = 0, + .ppBonuses = 0x0, + .hpEV = 255, + .attackEV = 0, + .defenseEV = 0, + .speedEV = 0, + .spAttackEV = 255, + .spDefenseEV = 0, + .otId = 0x10000000, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .abilityNum = 0, + .personality = 0x96, + .nickname = __("ジュペッタ$$$$$$"), + .friendship = 255 + }, + } + }, +}; static u8 sub_81D38D4(void) { return (gSaveBlock1Ptr->trainerHill.unused + 1) % 256; } -static bool32 Struct_Unk81D38FC_ValidateChecksum(struct Unk81D38FC *arg0) +static bool32 Struct_EReaderTrainerHillTrainer_ValidateChecksum(struct EReaderTrainerHillTrainer *arg0) { int checksum = CalcByteArraySum((u8 *)arg0, 0x270); if (checksum != arg0->checksum) @@ -58,17 +409,17 @@ bool8 EReader_IsReceivedDataValid(struct EReaderTrainerHillSet *buffer) { u32 i; u32 checksum; - int var0 = buffer->unk_0; + int var0 = buffer->count; if (var0 < 1 || var0 > 8) return FALSE; for (i = 0; i < var0; i++) { - if (!Struct_Unk81D38FC_ValidateChecksum(&buffer->unk_8[i])) + if (!Struct_EReaderTrainerHillTrainer_ValidateChecksum(&buffer->unk_8[i])) return FALSE; } - checksum = CalcByteArraySum((u8 *)buffer->unk_8, var0 * sizeof(struct Unk81D38FC)); + checksum = CalcByteArraySum((u8 *)buffer->unk_8, var0 * sizeof(struct EReaderTrainerHillTrainer)); if (checksum != buffer->checksum) return FALSE; @@ -78,7 +429,7 @@ bool8 EReader_IsReceivedDataValid(struct EReaderTrainerHillSet *buffer) static bool32 TrainerHill_VerifyChecksum(struct EReaderTrainerHillSet *buffer) { u32 checksum; - int var0 = buffer->unk_0; + int var0 = buffer->count; if (var0 < 1 || var0 > 8) return FALSE; @@ -89,38 +440,39 @@ static bool32 TrainerHill_VerifyChecksum(struct EReaderTrainerHillSet *buffer) return TRUE; } -static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *arg0, struct Unk81D3998 *buffer2) +static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *ttdata, struct TrHillTag *buffer2) { int i; + AGB_ASSERT_EX(ttdata->dummy == 0, "cereader_tool.c", 450); + AGB_ASSERT_EX(ttdata->id == 0, "cereader_tool.c", 452); + memset(buffer2, 0, 0x1000); - buffer2->unk_000 = arg0->unk_0; - buffer2->unk_001 = sub_81D38D4(); - buffer2->unk_002 = (arg0->unk_0 + 1) / 2; + buffer2->unkField_0 = ttdata->count; + buffer2->unused1 = sub_81D38D4(); + buffer2->numFloors = (ttdata->count + 1) / 2; - for (i = 0; i < arg0->unk_0; i++) + for (i = 0; i < ttdata->count; i++) { if (!(i & 1)) { - buffer2->unk_008[i / 2].unk_000[0] = arg0->unk_8[i].unk0; - memcpy(buffer2->unk_008[i / 2].unk_294, arg0->unk_8[i].unk14C, 0x124); - memcpy(buffer2->unk_008[i / 2].unk_004, arg0->unk_8[i].unk4, 0x148); + buffer2->floors[i / 2].unk0 = ttdata->unk_8[i].unk0; + buffer2->floors[i / 2].display = ttdata->unk_8[i].unk14C; + buffer2->floors[i / 2].trainers[0] = ttdata->unk_8[i].unk4; } else { - buffer2->unk_008[i / 2].unk_000[1] = arg0->unk_8[i].unk0; - memcpy(buffer2->unk_008[i / 2].unk_14C, arg0->unk_8[i].unk4, 0x148); + buffer2->floors[i / 2].unk1 = ttdata->unk_8[i].unk0; + buffer2->floors[i / 2].trainers[1] = ttdata->unk_8[i].unk4; } } if (i & 1) { - u8 * dest = buffer2->unk_008[i / 2].unk_14C; - const u8 (* src)[0x148] = gUnknown_08625B6C; - memcpy(dest, src[i / 2], 0x148); + buffer2->floors[i / 2].trainers[1] = sTrainerHillTrainerTemplates_JP[i / 2]; } - buffer2->checksum = CalcByteArraySum((u8 *)buffer2->unk_008, sizeof(struct Unk81D3998) - offsetof(struct Unk81D3998, unk_008)); + buffer2->checksum = CalcByteArraySum((u8 *)buffer2->floors, 4 * sizeof(struct TrHillFloor)); if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)buffer2) != 1) return FALSE; @@ -129,7 +481,7 @@ static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *arg0, struct U bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet *arg0) { - struct Unk81D3998 *var0 = AllocZeroed(0x1000); + void *var0 = AllocZeroed(0x1000); bool32 result = TryWriteTrainerHill_r(arg0, var0); Free(var0); return result; @@ -163,20 +515,20 @@ bool32 ReadTrainerHillAndValidate(void) return result; } -static int unref_sub_81D3B54(int arg0, u32 *arg1) +int EReader_Send(int arg0, u32 *arg1) { int result; u16 var0; int var1; - sub_81D41A0(); + EReaderHelper_SaveRegsState(); while (1) { sub_81D4170(); if (gUnknown_030012E2 & 2) gShouldAdvanceLinkState = 2; - var1 = sub_81D3D70(1, arg0, arg1, NULL); + var1 = EReaderHandleTransfer(1, arg0, arg1, NULL); gUnknown_030012E4 = var1; if ((gUnknown_030012E4 & 0x13) == 0x10) { @@ -202,24 +554,24 @@ static int unref_sub_81D3B54(int arg0, u32 *arg1) } CpuFill32(0, &gUnknown_030012C8, sizeof(struct Unknown030012C8)); - sub_81D41F4(); + EReaderHelper_RestoreRegsState(); return result; } -static int unref_sub_81D3BE8(u32 *arg0) +int EReader_Recv(u32 *arg0) { int result; u16 var0; int var1; - sub_81D41A0(); + EReaderHelper_SaveRegsState(); while (1) { sub_81D4170(); if (gUnknown_030012E2 & 2) gShouldAdvanceLinkState = 2; - var1 = sub_81D3D70(0, 0, NULL, arg0); + var1 = EReaderHandleTransfer(0, 0, NULL, arg0); gUnknown_030012E4 = var1; if ((gUnknown_030012E4 & 0x13) == 0x10) { @@ -245,7 +597,7 @@ static int unref_sub_81D3BE8(u32 *arg0) } CpuFill32(0, &gUnknown_030012C8, sizeof(struct Unknown030012C8)); - sub_81D41F4(); + EReaderHelper_RestoreRegsState(); return result; } @@ -285,7 +637,7 @@ static void sub_81D3D34(void) gUnknown_030012E8 = 0; } -int sub_81D3D70(u8 arg0, u32 arg1, u32 *arg2, u32 *arg3) +int EReaderHandleTransfer(u8 arg0, u32 arg1, u32 *arg2, u32 *arg3) { switch (gUnknown_030012C8.unk0[1]) { @@ -519,7 +871,7 @@ static void sub_81D4170(void) gUnknown_030012E0 = keysMask; } -void sub_81D41A0(void) +void EReaderHelper_SaveRegsState(void) { gUnknown_030012EC = REG_IME; gUnknown_030012EE = REG_IE; @@ -528,7 +880,7 @@ void sub_81D41A0(void) gUnknown_030012F4 = REG_RCNT; } -void sub_81D41F4(void) +void EReaderHelper_RestoreRegsState(void) { REG_IME = gUnknown_030012EC; REG_IE = gUnknown_030012EE; diff --git a/src/ereader_screen.c b/src/ereader_screen.c index 98f0d9b8c..13e964224 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -49,7 +49,7 @@ static void sub_81D4D50(struct Unk03006370 *arg0, int arg1, u32 *arg2) REG_IME = 0; gIntrTable[1] = sub_81D3FAC; gIntrTable[2] = sub_81D3F9C; - sub_81D41A0(); + EReaderHelper_SaveRegsState(); sub_81D4238(); REG_IE |= INTR_FLAG_VCOUNT; REG_IME = backupIME; @@ -63,7 +63,7 @@ static void sub_81D4DB8(struct Unk03006370 *arg0) volatile u16 backupIME = REG_IME; REG_IME = 0; sub_81D4238(); - sub_81D41F4(); + EReaderHelper_RestoreRegsState(); RestoreSerialTimer3IntrHandlers(); REG_IME = backupIME; } @@ -71,7 +71,7 @@ static void sub_81D4DB8(struct Unk03006370 *arg0) static u8 sub_81D4DE8(struct Unk03006370 *arg0) { u8 var0 = 0; - arg0->unk0 = sub_81D3D70(1, arg0->unk4, arg0->unk8, NULL); + arg0->unk0 = EReaderHandleTransfer(1, arg0->unk4, arg0->unk8, NULL); if ((arg0->unk0 & 0x13) == 0x10) var0 = 1; diff --git a/src/event_obj_lock.c b/src/event_obj_lock.c index 566b4931d..22a29fd5d 100644 --- a/src/event_obj_lock.c +++ b/src/event_obj_lock.c @@ -92,7 +92,7 @@ void ScriptUnfreezeEventObjects(void) { u8 playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0); EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]); - sub_80D338C(); + ScriptMovement_UnfreezeEventObjects(); UnfreezeEventObjects(); } @@ -104,7 +104,7 @@ void sub_8098524(void) EventObjectClearHeldMovementIfFinished(&gEventObjects[gSelectedEventObject]); playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0); EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]); - sub_80D338C(); + ScriptMovement_UnfreezeEventObjects(); UnfreezeEventObjects(); } diff --git a/src/field_specials.c b/src/field_specials.c index efe77bd70..f20e38c8b 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -35,6 +35,7 @@ #include "rtc.h" #include "script.h" #include "script_menu.h" +#include "slot_machine.h" #include "sound.h" #include "starter_choose.h" #include "string_util.h" @@ -44,11 +45,17 @@ #include "tv.h" #include "wallclock.h" #include "window.h" +#include "constants/battle_frontier.h" +#include "constants/decorations.h" #include "constants/event_objects.h" +#include "constants/event_object_movement_constants.h" #include "constants/field_effects.h" +#include "constants/field_specials.h" #include "constants/items.h" +#include "constants/heal_locations.h" #include "constants/map_types.h" #include "constants/maps.h" +#include "constants/script_menu.h" #include "constants/songs.h" #include "constants/species.h" #include "constants/moves.h" @@ -60,29 +67,28 @@ EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE; EWRAM_DATA u8 gBikeCollisions = 0; -static EWRAM_DATA u32 gBikeCyclingTimer = 0; -static EWRAM_DATA u8 gUnknown_0203AB5C = 0; +static EWRAM_DATA u32 sBikeCyclingTimer = 0; +static EWRAM_DATA u8 sUnknown_0203AB5C = 0; static EWRAM_DATA u8 sPetalburgGymSlidingDoorFrameCounter = 0; -static EWRAM_DATA u8 gUnknown_0203AB5E = 0; -static EWRAM_DATA u16 gUnknown_0203AB60 = 0; -static EWRAM_DATA u16 gUnknown_0203AB62 = 0; -static EWRAM_DATA struct ListMenuItem *gUnknown_0203AB64 = NULL; -static EWRAM_DATA u16 gUnknown_0203AB68 = 0; -static EWRAM_DATA u16 gUnknown_0203AB6A = 0; -static EWRAM_DATA u8 gUnknown_0203AB6C = 0; -static EWRAM_DATA u8 gUnknown_0203AB6D = 0; -static EWRAM_DATA u8 gUnknown_0203AB6E = 0; -static EWRAM_DATA u8 gUnknown_0203AB6F = 0; -static EWRAM_DATA u32 gUnknown_0203AB70 = 0; - -struct ListMenuTemplate gUnknown_030061D0; +static EWRAM_DATA u8 sTutorMoveAndElevatorWindowId = 0; +static EWRAM_DATA u16 sLilycoveDeptStore_NeverRead = 0; +static EWRAM_DATA u16 sLilycoveDeptStore_DefaultFloorChoice = 0; +static EWRAM_DATA struct ListMenuItem *sScrollableMultichoice_ListMenuItem = NULL; +static EWRAM_DATA u16 sScrollableMultichoice_ScrollOffset = 0; +static EWRAM_DATA u16 sFrontierExchangeCorner_NeverRead = 0; +static EWRAM_DATA u8 sScrollableMultichoice_ItemSpriteId = 0; +static EWRAM_DATA u8 sBattlePointsWindowId = 0; +static EWRAM_DATA u8 sFrontierExchangeCorner_ItemIconWindowId = 0; +static EWRAM_DATA u8 sPCBoxToSendMon = 0; +static EWRAM_DATA u32 sUnknown_0203AB70 = 0; + +struct ListMenuTemplate gScrollableMultichoice_ListMenuTemplate; extern const u16 gEventObjectPalette8[]; extern const u16 gEventObjectPalette17[]; extern const u16 gEventObjectPalette33[]; extern const u16 gEventObjectPalette34[]; - void UpdateMovedLilycoveFanClubMembers(void); void sub_813BF60(void); u16 GetNumMovedLilycoveFanClubMembers(void); @@ -99,23 +105,23 @@ static void Task_LotteryCornerComputerEffect(u8); static void LotteryCornerComputerEffect(struct Task *); static void sub_81395BC(u8 taskId); static void sub_8139620(u8 taskId); -static void sub_8139AF4(u8 taskId); -static void sub_8139C2C(u16 a1, u8 a2); -static void MoveElevatorWindowLights(u8 taskId); -static void sub_813A2DC(u8 taskId); -static void sub_813AA60(u16 a0, u16 a1); -static void sub_813ACE8(u8 a0, u16 a1); -static void sub_813A42C(void); -static void sub_813A4EC(u8 taskId); -static void sub_813A694(u8 taskId); -static void sub_813A46C(s32 itemIndex, bool8 onInit, struct ListMenu *list); -static void sub_813AC44(u16 a0, u16 a1); -static void sub_813AD34(u8 a0, u16 a1); -static void sub_813A570(u8 taskId); -static void sub_813A738(u8 taskId); +static void Task_MoveElevator(u8 taskId); +static void MoveElevatorWindowLights(u16 floorDelta, bool8 descending); +static void Task_MoveElevatorWindowLights(u8 taskId); +static void Task_ShowScrollableMultichoice(u8 taskId); +static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection); +static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection); +static void InitScrollableMultichoice(void); +static void ScrollableMultichoice_ProcessInput(u8 taskId); +static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId); +static void ScrollableMultichoice_MoveCursor(s32 itemIndex, bool8 onInit, struct ListMenu *list); +static void HideFrontierExchangeCornerItemIcon(u16 menu, u16 unused); +static void ShowBattleFrontierTutorMoveDescription(u8 menu, u16 selection); +static void CloseScrollableMultichoice(u8 taskId); +static void ScrollableMultichoice_RemoveScrollArrows(u8 taskId); static void sub_813A600(u8 taskId); static void sub_813A664(u8 taskId); -static void sub_813ABD4(u16 a0); +static void ShowFrontierExchangeCornerItemIcon(u16 item); static void Task_DeoxysRockInteraction(u8 taskId); static void ChangeDeoxysRockLevel(u8 a0); static void WaitForDeoxysRockMovement(u8 taskId); @@ -144,14 +150,14 @@ void ResetCyclingRoadChallengeData(void) { gBikeCyclingChallenge = FALSE; gBikeCollisions = 0; - gBikeCyclingTimer = 0; + sBikeCyclingTimer = 0; } void Special_BeginCyclingRoadChallenge(void) { gBikeCyclingChallenge = TRUE; gBikeCollisions = 0; - gBikeCyclingTimer = gMain.vblankCounter1; + sBikeCyclingTimer = gMain.vblankCounter1; } u16 GetPlayerAvatarBike(void) @@ -237,7 +243,7 @@ static void DetermineCyclingRoadResults(u32 numFrames, u8 numBikeCollisions) } void FinishCyclingRoadChallenge(void) { - const u32 numFrames = gMain.vblankCounter1 - gBikeCyclingTimer; + const u32 numFrames = gMain.vblankCounter1 - sBikeCyclingTimer; DetermineCyclingRoadResults(numFrames, gBikeCollisions); RecordCyclingRoadResults(numFrames, gBikeCollisions); @@ -310,16 +316,16 @@ u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y) { case 1: case 8: - return 1; + return SS_TIDAL_LOCATION_SLATEPORT; case 3: case 9: - return 4; + return SS_TIDAL_LOCATION_ROUTE131; case 4: case 5: - return 2; + return SS_TIDAL_LOCATION_LILYCOVE; case 6: case 10: - return 3; + return SS_TIDAL_LOCATION_ROUTE124; case 2: if (*varCruiseStepCount < 60) { @@ -356,7 +362,7 @@ u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y) } *mapGroup = MAP_GROUP(ROUTE132); *y = 20; - return 0; + return SS_TIDAL_LOCATION_OTHER; } bool32 ShouldDoWallyCall(void) @@ -419,10 +425,10 @@ bool32 ShouldDoScottCall(void) { switch (gMapHeader.mapType) { - case 1: - case 2: - case 3: - case 6: + case MAP_TYPE_TOWN: + case MAP_TYPE_CITY: + case MAP_TYPE_ROUTE: + case MAP_TYPE_OCEAN_ROUTE: if (++(*GetVarPointer(VAR_SCOTT_CALL_STEP_COUNTER)) < 10) { return FALSE; @@ -446,10 +452,10 @@ bool32 ShouldDoRoxanneCall(void) { switch (gMapHeader.mapType) { - case 1: - case 2: - case 3: - case 6: + case MAP_TYPE_TOWN: + case MAP_TYPE_CITY: + case MAP_TYPE_ROUTE: + case MAP_TYPE_OCEAN_ROUTE: if (++(*GetVarPointer(VAR_ROXANNE_CALL_STEP_COUNTER)) < 250) { return FALSE; @@ -473,10 +479,10 @@ bool32 ShouldDoRivalRayquazaCall(void) { switch (gMapHeader.mapType) { - case 1: - case 2: - case 3: - case 6: + case MAP_TYPE_TOWN: + case MAP_TYPE_CITY: + case MAP_TYPE_ROUTE: + case MAP_TYPE_OCEAN_ROUTE: if (++(*GetVarPointer(VAR_RIVAL_RAYQUAZA_CALL_STEP_COUNTER)) < 250) { return FALSE; @@ -516,8 +522,13 @@ void SpawnLinkPartnerEventObject(void) u8 j = 0; s16 x = 0; s16 y = 0; - u8 gUnknown_085B2B5C[] = {7, 9, 8, 10}; - s8 gUnknown_085B2B60[][2] = { + u8 movementTypes[] = { + MOVEMENT_TYPE_FACE_UP, + MOVEMENT_TYPE_FACE_LEFT, + MOVEMENT_TYPE_FACE_DOWN, + MOVEMENT_TYPE_FACE_RIGHT + }; + s8 coordOffsets[][2] = { { 0, 1}, { 1, 0}, { 0, -1}, @@ -577,10 +588,10 @@ void SpawnLinkPartnerEventObject(void) linkSpriteId = EVENT_OBJ_GFX_RIVAL_MAY_NORMAL; break; } - SpawnSpecialEventObjectParameterized(linkSpriteId, gUnknown_085B2B5C[j], 0xf0 - i, gUnknown_085B2B60[j][0] + x + 7, gUnknown_085B2B60[j][1] + y + 7, 0); - LoadLinkPartnerEventObjectSpritePalette(linkSpriteId, 0xf0 - i, i); + SpawnSpecialEventObjectParameterized(linkSpriteId, movementTypes[j], 240 - i, coordOffsets[j][0] + x + 7, coordOffsets[j][1] + y + 7, 0); + LoadLinkPartnerEventObjectSpritePalette(linkSpriteId, 240 - i, i); j++; - if (j == 4) + if (j == MAX_LINK_PLAYERS) { j = 0; } @@ -624,7 +635,8 @@ static void LoadLinkPartnerEventObjectSpritePalette(u8 graphicsId, u8 localEvent } } -static const struct UCoords8 sMauvilleGymSwitchCoords[] = { +static const struct UCoords8 sMauvilleGymSwitchCoords[] = +{ { 7, 22}, {11, 19}, {10, 16}, @@ -814,7 +826,7 @@ static const u16 sPetalburgGymSlidingDoorMetatiles[] = { void PetalburgGymSpecial1(void) { - gUnknown_0203AB5C = 0; + sUnknown_0203AB5C = 0; sPetalburgGymSlidingDoorFrameCounter = 0; PlaySE(SE_KI_GASYAN); CreateTask(Task_PetalburgGym, 8); @@ -822,10 +834,10 @@ void PetalburgGymSpecial1(void) static void Task_PetalburgGym(u8 taskId) { - if (gUnknown_085B2B78[sPetalburgGymSlidingDoorFrameCounter] == gUnknown_0203AB5C) + if (gUnknown_085B2B78[sPetalburgGymSlidingDoorFrameCounter] == sUnknown_0203AB5C) { PetalburgGymFunc(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[sPetalburgGymSlidingDoorFrameCounter]); - gUnknown_0203AB5C = 0; + sUnknown_0203AB5C = 0; if ((++sPetalburgGymSlidingDoorFrameCounter) == ARRAY_COUNT(sPetalburgGymSlidingDoorMetatiles)) { DestroyTask(taskId); @@ -834,7 +846,7 @@ static void Task_PetalburgGym(u8 taskId) } else { - gUnknown_0203AB5C++; + sUnknown_0203AB5C++; } } @@ -1077,36 +1089,35 @@ static void PCTurnOnEffect_0(struct Task *task) task->data[3]++; } -// enum pc location, -static void PCTurnOnEffect_1(s16 flag, s8 dx, s8 dy) +static void PCTurnOnEffect_1(s16 isPcTurnedOn, s8 dx, s8 dy) { u16 tileId = 0; - if (flag != 0) + if (isPcTurnedOn) { - if (gSpecialVar_0x8004 == 0) + if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) { tileId = METATILE_ID(Building, PC_Off); } - else if (gSpecialVar_0x8004 == 1) + else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) { tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_Off); } - else if (gSpecialVar_0x8004 == 2) + else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) { tileId = METATILE_ID(BrendansMaysHouse, MayPC_Off); } } else { - if (gSpecialVar_0x8004 == 0) + if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) { tileId = METATILE_ID(Building, PC_On); } - else if (gSpecialVar_0x8004 == 1) + else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) { tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_On); } - else if (gSpecialVar_0x8004 == 2) + else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) { tileId = METATILE_ID(BrendansMaysHouse, MayPC_On); } @@ -1294,7 +1305,7 @@ void IsGrassTypeInParty(void) void SpawnCameraObject(void) { - u8 obj = SpawnSpecialEventObjectParameterized(EVENT_OBJ_GFX_BOY_1, 8, EVENT_OBJ_ID_CAMERA, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3); + u8 obj = SpawnSpecialEventObjectParameterized(EVENT_OBJ_GFX_BOY_1, MOVEMENT_TYPE_FACE_DOWN, EVENT_OBJ_ID_CAMERA, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3); gEventObjects[obj].invisible = TRUE; CameraObjectSetFollowedObjectId(gEventObjects[obj].spriteId); } @@ -1327,16 +1338,16 @@ void BufferEReaderTrainerName(void) u16 GetSlotMachineId(void) { - static const u8 gUnknown_085B2B88[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6}; - static const u8 gUnknown_085B2B94[] = {0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5}; - static const u8 gUnknown_085B2BA0[] = {3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5}; + static const u8 sSlotMachineRandomSeeds[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6}; + static const u8 sSlotMachineIds[] = {0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5}; + static const u8 sSlotMachineServiceDayIds[] = {3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5}; - u32 v0 = gSaveBlock1Ptr->easyChatPairs[0].unk0_0 + gSaveBlock1Ptr->easyChatPairs[0].unk2 + gUnknown_085B2B88[gSpecialVar_0x8004]; - if (GetPriceReduction(2)) + u32 rnd = gSaveBlock1Ptr->easyChatPairs[0].unk0_0 + gSaveBlock1Ptr->easyChatPairs[0].unk2 + sSlotMachineRandomSeeds[gSpecialVar_0x8004]; + if (GetPriceReduction(POKENEWS_GAME_CORNER)) { - return gUnknown_085B2BA0[v0 % 12]; + return sSlotMachineServiceDayIds[rnd % SLOT_MACHINE_COUNT]; } - return gUnknown_085B2B94[v0 % 12]; + return sSlotMachineIds[rnd % SLOT_MACHINE_COUNT]; } bool8 FoundAbandonedShipRoom1Key(void) @@ -1434,7 +1445,7 @@ u8 TryUpdateRusturfTunnelState(void) return FALSE; } -void SetShoalItemFlag(u16 v0) +void SetShoalItemFlag(u16 unused) { FlagSet(FLAG_SYS_SHOAL_ITEM); } @@ -1442,7 +1453,7 @@ void SetShoalItemFlag(u16 v0) void PutZigzagoonInPlayerParty(void) { u16 monData; - CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 0x20, FALSE, 0, FALSE, 0); + CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 32, FALSE, 0, OT_ID_PLAYER_ID, 0); monData = TRUE; SetMonData(&gPlayerParty[0], MON_DATA_ABILITY_NUM, &monData); monData = MOVE_TACKLE; @@ -1529,7 +1540,7 @@ void SetRoute119Weather(void) { if (IsMapTypeOutdoors(GetLastUsedWarpMapType()) != TRUE) { - SetSav1Weather(20); + SetSav1Weather(WEATHER_ROUTE119_CYCLE); } } @@ -1537,7 +1548,7 @@ void SetRoute123Weather(void) { if (IsMapTypeOutdoors(GetLastUsedWarpMapType()) != TRUE) { - SetSav1Weather(21); + SetSav1Weather(WEATHER_ROUTE123_CYCLE); } } @@ -1560,9 +1571,10 @@ u16 ScriptGetPartyMonSpecies(void) return GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES2, NULL); } -void nullsub_54(void) +// Removed for Emerald +void TryInitBattleTowerAwardManEventObject(void) { - + //TryInitLocalEventObject(6); } u16 GetDaysUntilPacifidlogTMAvailable(void) @@ -1653,7 +1665,7 @@ u16 sub_813986C(void) } } -bool8 sub_81398C0(void) +bool8 BufferTMHMMoveName(void) { if (gSpecialVar_0x8004 >= ITEM_TM01 && gSpecialVar_0x8004 <= ITEM_HM08) { @@ -1664,14 +1676,14 @@ bool8 sub_81398C0(void) return FALSE; } -bool8 sub_813990C(void) +bool8 IsBadEggInParty(void) { u8 partyCount = CalculatePlayerPartyCount(); u8 i; for (i = 0; i < partyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_BAD_EGG) == 1) + if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_BAD_EGG) == TRUE) return TRUE; } @@ -1693,7 +1705,8 @@ void sub_8139980(void) SetCameraPanning(8, 0); } -const struct WindowTemplate gUnknown_085B2BAC = { +const struct WindowTemplate gElevatorFloor_WindowTemplate = +{ .bg = 0, .tilemapLeft = 21, .tilemapTop = 1, @@ -1703,23 +1716,24 @@ const struct WindowTemplate gUnknown_085B2BAC = { .baseBlock = 8, }; -const u8 *const gElevatorFloorsTable[] = { - gText_B4F, - gText_B3F, - gText_B2F, - gText_B1F, - gText_1F, - gText_2F, - gText_3F, - gText_4F, - gText_5F, - gText_6F, - gText_7F, - gText_8F, - gText_9F, - gText_10F, - gText_11F, - gText_Rooftop +const u8 *const gDeptStoreFloorNames[] = +{ + [DEPT_STORE_FLOORNUM_B4F] = gText_B4F, + [DEPT_STORE_FLOORNUM_B3F] = gText_B3F, + [DEPT_STORE_FLOORNUM_B2F] = gText_B2F, + [DEPT_STORE_FLOORNUM_B1F] = gText_B1F, + [DEPT_STORE_FLOORNUM_1F] = gText_1F, + [DEPT_STORE_FLOORNUM_2F] = gText_2F, + [DEPT_STORE_FLOORNUM_3F] = gText_3F, + [DEPT_STORE_FLOORNUM_4F] = gText_4F, + [DEPT_STORE_FLOORNUM_5F] = gText_5F, + [DEPT_STORE_FLOORNUM_6F] = gText_6F, + [DEPT_STORE_FLOORNUM_7F] = gText_7F, + [DEPT_STORE_FLOORNUM_8F] = gText_8F, + [DEPT_STORE_FLOORNUM_9F] = gText_9F, + [DEPT_STORE_FLOORNUM_10F] = gText_10F, + [DEPT_STORE_FLOORNUM_11F] = gText_11F, + [DEPT_STORE_FLOORNUM_ROOFTOP] = gText_Rooftop }; static const u16 sElevatorWindowTiles_Ascending[][3] = @@ -1760,104 +1774,105 @@ static const u16 sElevatorWindowTiles_Descending[][3] = }, }; -void SetDepartmentStoreFloorVar(void) +void SetDeptStoreFloor(void) { u8 deptStoreFloor; switch (gSaveBlock1Ptr->dynamicWarp.mapNum) { case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F): - deptStoreFloor = 4; + deptStoreFloor = DEPT_STORE_FLOORNUM_1F; break; case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_2F): - deptStoreFloor = 5; + deptStoreFloor = DEPT_STORE_FLOORNUM_2F; break; case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_3F): - deptStoreFloor = 6; + deptStoreFloor = DEPT_STORE_FLOORNUM_3F; break; case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_4F): - deptStoreFloor = 7; + deptStoreFloor = DEPT_STORE_FLOORNUM_4F; break; case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F): - deptStoreFloor = 8; + deptStoreFloor = DEPT_STORE_FLOORNUM_5F; break; case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP): - deptStoreFloor = 15; + deptStoreFloor = DEPT_STORE_FLOORNUM_ROOFTOP; break; default: - deptStoreFloor = 4; + deptStoreFloor = DEPT_STORE_FLOORNUM_1F; break; } VarSet(VAR_DEPT_STORE_FLOOR, deptStoreFloor); } -u16 sub_81399F4(void) +u16 GetDeptStoreDefaultFloorChoice(void) { - gUnknown_0203AB60 = 0; - gUnknown_0203AB62 = 0; + sLilycoveDeptStore_NeverRead = 0; + sLilycoveDeptStore_DefaultFloorChoice = 0; if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_1F)) { switch (gSaveBlock1Ptr->dynamicWarp.mapNum) { case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F): - gUnknown_0203AB60 = 0; - gUnknown_0203AB62 = 0; + sLilycoveDeptStore_NeverRead = 0; + sLilycoveDeptStore_DefaultFloorChoice = 0; break; case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_4F): - gUnknown_0203AB60 = 0; - gUnknown_0203AB62 = 1; + sLilycoveDeptStore_NeverRead = 0; + sLilycoveDeptStore_DefaultFloorChoice = 1; break; case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_3F): - gUnknown_0203AB60 = 0; - gUnknown_0203AB62 = 2; + sLilycoveDeptStore_NeverRead = 0; + sLilycoveDeptStore_DefaultFloorChoice = 2; break; case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_2F): - gUnknown_0203AB60 = 0; - gUnknown_0203AB62 = 3; + sLilycoveDeptStore_NeverRead = 0; + sLilycoveDeptStore_DefaultFloorChoice = 3; break; case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F): - gUnknown_0203AB60 = 0; - gUnknown_0203AB62 = 4; + sLilycoveDeptStore_NeverRead = 0; + sLilycoveDeptStore_DefaultFloorChoice = 4; break; } } - return gUnknown_0203AB62; + return sLilycoveDeptStore_DefaultFloorChoice; } -void ShakeScreenInElevator(void) +void MoveElevator(void) { - static const u8 gUnknown_085B2C18[] = { 0x08, 0x10, 0x18, 0x20, 0x26, 0x2e, 0x34, 0x38, 0x39 }; + static const u8 sElevatorTripLength[] = { 8, 16, 24, 32, 38, 46, 52, 56, 57 }; - s16 *data = gTasks[CreateTask(sub_8139AF4, 9)].data; + s16 *data = gTasks[CreateTask(Task_MoveElevator, 9)].data; u16 floorDelta; data[1] = 0; data[2] = 0; data[4] = 1; + // descending if (gSpecialVar_0x8005 > gSpecialVar_0x8006) { floorDelta = gSpecialVar_0x8005 - gSpecialVar_0x8006; - data[6] = 1; + data[6] = TRUE; } else { floorDelta = gSpecialVar_0x8006 - gSpecialVar_0x8005; - data[6] = 0; + data[6] = FALSE; } if (floorDelta > 8) floorDelta = 8; - data[5] = gUnknown_085B2C18[floorDelta]; + data[5] = sElevatorTripLength[floorDelta]; SetCameraPanningCallback(NULL); - sub_8139C2C(floorDelta, data[6]); + MoveElevatorWindowLights(floorDelta, data[6]); PlaySE(SE_ELEBETA); } -static void sub_8139AF4(u8 taskId) +static void Task_MoveElevator(u8 taskId) { s16 *data = gTasks[taskId].data; data[1]++; @@ -1867,6 +1882,8 @@ static void sub_8139AF4(u8 taskId) data[2]++; data[4] = -data[4]; SetCameraPanning(0, data[4]); + + // arrived at floor if (data[2] == data[5]) { PlaySE(SE_PINPON); @@ -1877,44 +1894,44 @@ static void sub_8139AF4(u8 taskId) } } -void sub_8139B60(void) +void ShowDeptStoreElevatorFloorSelect(void) { int xPos; - gUnknown_0203AB5E = AddWindow(&gUnknown_085B2BAC); - SetStandardWindowBorderStyle(gUnknown_0203AB5E, 0); + sTutorMoveAndElevatorWindowId = AddWindow(&gElevatorFloor_WindowTemplate); + SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, 0); xPos = GetStringCenterAlignXOffset(1, gText_ElevatorNowOn, 64); - AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gText_ElevatorNowOn, xPos, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, gText_ElevatorNowOn, xPos, 1, TEXT_SPEED_FF, NULL); - xPos = GetStringCenterAlignXOffset(1, gElevatorFloorsTable[gSpecialVar_0x8005], 64); - AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gElevatorFloorsTable[gSpecialVar_0x8005], xPos, 17, TEXT_SPEED_FF, NULL); + xPos = GetStringCenterAlignXOffset(1, gDeptStoreFloorNames[gSpecialVar_0x8005], 64); + AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, gDeptStoreFloorNames[gSpecialVar_0x8005], xPos, 17, TEXT_SPEED_FF, NULL); - PutWindowTilemap(gUnknown_0203AB5E); - CopyWindowToVram(gUnknown_0203AB5E, 3); + PutWindowTilemap(sTutorMoveAndElevatorWindowId); + CopyWindowToVram(sTutorMoveAndElevatorWindowId, 3); } -void sub_8139C10(void) +void CloseDeptStoreElevatorWindow(void) { - ClearStdWindowAndFrameToTransparent(gUnknown_0203AB5E, TRUE); - RemoveWindow(gUnknown_0203AB5E); + ClearStdWindowAndFrameToTransparent(sTutorMoveAndElevatorWindowId, TRUE); + RemoveWindow(sTutorMoveAndElevatorWindowId); } -static void sub_8139C2C(u16 a1, bool8 descending) +static void MoveElevatorWindowLights(u16 floorDelta, bool8 descending) { - static const u8 gUnknown_085B2C21[] = { 0x03, 0x06, 0x09, 0x0c, 0x0f, 0x12, 0x15, 0x18, 0x1b }; + static const u8 sElevatorLightCycles[] = { 3, 6, 9, 12, 15, 18, 21, 24, 27 }; - if (FuncIsActiveTask(MoveElevatorWindowLights) != TRUE) + if (FuncIsActiveTask(Task_MoveElevatorWindowLights) != TRUE) { - u8 taskId = CreateTask(MoveElevatorWindowLights, 8); + 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] = gUnknown_085B2C21[a1]; + gTasks[taskId].data[3] = sElevatorLightCycles[floorDelta]; } } -static void MoveElevatorWindowLights(u8 taskId) +static void Task_MoveElevatorWindowLights(u8 taskId) { u8 x, y; s16 *data = gTasks[taskId].data; @@ -1922,6 +1939,8 @@ static void MoveElevatorWindowLights(u8 taskId) if (data[1] == 6) { data[0]++; + + // ascending if (data[2] == FALSE) { for (y = 0; y < 3; y++) @@ -1932,6 +1951,7 @@ static void MoveElevatorWindowLights(u8 taskId) } } } + // descending else { for (y = 0; y < 3; y++) @@ -1952,7 +1972,7 @@ static void MoveElevatorWindowLights(u8 taskId) data[1]++; } -void sub_8139D98(void) +void BufferVarsForIVRater(void) { u8 i; u32 ivStorage[NUM_STATS]; @@ -1993,16 +2013,37 @@ void sub_8139D98(void) } } -bool8 warp0_in_pokecenter(void) -{ - static const u16 gUnknown_085B2C2A[] = { 0x0202, 0x0301, 0x0405, 0x0504, 0x0604, 0x0700, 0x0804, 0x090b, 0x0a05, 0x0b05, 0x0c02, 0x0d06, 0x0e03, 0x0f02, 0x100c, 0x100a, 0x1a35, 0x193c, 0xFFFF }; +bool8 UsedPokemonCenterWarp(void) +{ + static const u16 sPokemonCenters[] = + { + MAP_OLDALE_TOWN_POKEMON_CENTER_1F, + MAP_DEWFORD_TOWN_POKEMON_CENTER_1F, + MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F, + MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F, + MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F, + MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F, + MAP_PETALBURG_CITY_POKEMON_CENTER_1F, + MAP_SLATEPORT_CITY_POKEMON_CENTER_1F, + MAP_MAUVILLE_CITY_POKEMON_CENTER_1F, + MAP_RUSTBORO_CITY_POKEMON_CENTER_1F, + MAP_FORTREE_CITY_POKEMON_CENTER_1F, + MAP_LILYCOVE_CITY_POKEMON_CENTER_1F, + MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F, + MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F, + MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F, + MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F, + MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F, + MAP_UNION_ROOM, + 0xFFFF + }; int i; u16 map = (gLastUsedWarp.mapGroup << 8) + gLastUsedWarp.mapNum; - for (i = 0; gUnknown_085B2C2A[i] != 0xFFFF; i++) + for (i = 0; sPokemonCenters[i] != 0xFFFF; i++) { - if (gUnknown_085B2C2A[i] == map) + if (sPokemonCenters[i] == map) return TRUE; } @@ -2018,130 +2059,191 @@ bool32 sub_8139ED0(void) return TRUE; } -void UpdateFrontierManiac(u16 a0) +void UpdateFrontierManiac(u16 daysSince) { u16 *var = GetVarPointer(VAR_FRONTIER_MANIAC_FACILITY); - *var += a0; - *var %= 10; -} - -void sub_8139F20(void) -{ - static const u8 *const gUnknown_085B2C50[][3] = { - { BattleFrontier_Lounge2_Text_260971, BattleFrontier_Lounge2_Text_260A1E, BattleFrontier_Lounge2_Text_260AE7 }, - { BattleFrontier_Lounge2_Text_2619AC, BattleFrontier_Lounge2_Text_261A91, BattleFrontier_Lounge2_Text_261B0C }, - { BattleFrontier_Lounge2_Text_261B95, BattleFrontier_Lounge2_Text_261B95, BattleFrontier_Lounge2_Text_261B95 }, - { BattleFrontier_Lounge2_Text_261C1A, BattleFrontier_Lounge2_Text_261C1A, BattleFrontier_Lounge2_Text_261C1A }, - { BattleFrontier_Lounge2_Text_260BC4, BattleFrontier_Lounge2_Text_260C6D, BattleFrontier_Lounge2_Text_260D3A }, - { BattleFrontier_Lounge2_Text_260E1E, BattleFrontier_Lounge2_Text_260EC7, BattleFrontier_Lounge2_Text_260F74 }, - { BattleFrontier_Lounge2_Text_2614E6, BattleFrontier_Lounge2_Text_261591, BattleFrontier_Lounge2_Text_26166F }, - { BattleFrontier_Lounge2_Text_261282, BattleFrontier_Lounge2_Text_261329, BattleFrontier_Lounge2_Text_261403 }, - { BattleFrontier_Lounge2_Text_261026, BattleFrontier_Lounge2_Text_2610CC, BattleFrontier_Lounge2_Text_261194 }, - { BattleFrontier_Lounge2_Text_26174D, BattleFrontier_Lounge2_Text_2617F9, BattleFrontier_Lounge2_Text_2618C4 }, + *var += daysSince; + *var %= FRONTIER_MANIAC_FACILITY_COUNT; +} + +void ShowFrontierManiacMessage(void) +{ + static const u8 *const sFrontierManiacMessages[][FRONTIER_MANIAC_MESSAGE_COUNT] = + { + [FRONTIER_MANIAC_BATTLE_TOWER_SINGLES] = + { + BattleFrontier_Lounge2_Text_260971, + BattleFrontier_Lounge2_Text_260A1E, + BattleFrontier_Lounge2_Text_260AE7 + }, + [FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES] = + { + BattleFrontier_Lounge2_Text_2619AC, + BattleFrontier_Lounge2_Text_261A91, + BattleFrontier_Lounge2_Text_261B0C + }, + [FRONTIER_MANIAC_BATTLE_TOWER_MULTIS] = + { + BattleFrontier_Lounge2_Text_261B95, + BattleFrontier_Lounge2_Text_261B95, + BattleFrontier_Lounge2_Text_261B95 + }, + [FRONTIER_MANIAC_BATTLE_TOWER_LINK_MULTIS] = + { + BattleFrontier_Lounge2_Text_261C1A, + BattleFrontier_Lounge2_Text_261C1A, + BattleFrontier_Lounge2_Text_261C1A + }, + [FRONTIER_MANIAC_BATTLE_DOME] = + { + BattleFrontier_Lounge2_Text_260BC4, + BattleFrontier_Lounge2_Text_260C6D, + BattleFrontier_Lounge2_Text_260D3A + }, + [FRONTIER_MANIAC_BATTLE_FACTORY] = + { + BattleFrontier_Lounge2_Text_260E1E, + BattleFrontier_Lounge2_Text_260EC7, + BattleFrontier_Lounge2_Text_260F74 + }, + [FRONTIER_MANIAC_BATTLE_PALACE] = + { + BattleFrontier_Lounge2_Text_2614E6, + BattleFrontier_Lounge2_Text_261591, + BattleFrontier_Lounge2_Text_26166F + }, + [FRONTIER_MANIAC_BATTLE_ARENA] = + { + BattleFrontier_Lounge2_Text_261282, + BattleFrontier_Lounge2_Text_261329, + BattleFrontier_Lounge2_Text_261403 + }, + [FRONTIER_MANIAC_BATTLE_PIKE] = + { + BattleFrontier_Lounge2_Text_261026, + BattleFrontier_Lounge2_Text_2610CC, + BattleFrontier_Lounge2_Text_261194 + }, + [FRONTIER_MANIAC_BATTLE_PYRAMID] = + { + BattleFrontier_Lounge2_Text_26174D, + BattleFrontier_Lounge2_Text_2617F9, + BattleFrontier_Lounge2_Text_2618C4 + }, }; - static const u8 gUnknown_085B2CC8[][2] = { - { 0x15, 0x38 }, - { 0x15, 0x23 }, - { 0xff, 0xff }, - { 0xff, 0xff }, - { 0x02, 0x04 }, - { 0x07, 0x15 }, - { 0x07, 0x15 }, - { 0x0e, 0x1c }, - { 0x0d, 0x70 }, - { 0x07, 0x38 } + static const u8 sFrontierManiacStreakThresholds[][FRONTIER_MANIAC_MESSAGE_COUNT - 1] = + { + [FRONTIER_MANIAC_BATTLE_TOWER_SINGLES] = { 21, 56 }, + [FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES] = { 21, 35 }, + [FRONTIER_MANIAC_BATTLE_TOWER_MULTIS] = { 255, 255 }, + [FRONTIER_MANIAC_BATTLE_TOWER_LINK_MULTIS] = { 255, 255 }, + [FRONTIER_MANIAC_BATTLE_DOME] = { 2, 4 }, + [FRONTIER_MANIAC_BATTLE_FACTORY] = { 7, 21 }, + [FRONTIER_MANIAC_BATTLE_PALACE] = { 7, 21 }, + [FRONTIER_MANIAC_BATTLE_ARENA] = { 14, 28 }, + [FRONTIER_MANIAC_BATTLE_PIKE] = { 13, 112 }, //BUG: 112 (0x70) is probably a mistake; the Pike Queen is battled twice well before that + [FRONTIER_MANIAC_BATTLE_PYRAMID] = { 7, 56 } }; u8 i; - u16 unk = 0; - u16 var = VarGet(VAR_FRONTIER_MANIAC_FACILITY); - switch (var) + u16 winStreak = 0; + u16 facility = VarGet(VAR_FRONTIER_MANIAC_FACILITY); + + switch (facility) { - case 0: - case 1: - case 2: - case 3: - if (gSaveBlock2Ptr->frontier.towerWinStreaks[var][0] >= gSaveBlock2Ptr->frontier.towerWinStreaks[var][1]) + case FRONTIER_MANIAC_BATTLE_TOWER_SINGLES: + case FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES: + case FRONTIER_MANIAC_BATTLE_TOWER_MULTIS: + case FRONTIER_MANIAC_BATTLE_TOWER_LINK_MULTIS: + if (gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_OPEN]) { - unk = gSaveBlock2Ptr->frontier.towerWinStreaks[var][0]; + winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_50]; } else { - unk = gSaveBlock2Ptr->frontier.towerWinStreaks[var][1]; + winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_OPEN]; } break; - case 4: - if (gSaveBlock2Ptr->frontier.domeWinStreaks[0][0] >= gSaveBlock2Ptr->frontier.domeWinStreaks[0][1]) + case FRONTIER_MANIAC_BATTLE_DOME: + if (gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]) { - unk = gSaveBlock2Ptr->frontier.domeWinStreaks[0][0]; + winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]; } else { - unk = gSaveBlock2Ptr->frontier.domeWinStreaks[0][1]; + winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]; } break; - case 5: - if (gSaveBlock2Ptr->frontier.factoryWinStreaks[0][0] >= gSaveBlock2Ptr->frontier.factoryWinStreaks[0][1]) + case FRONTIER_MANIAC_BATTLE_FACTORY: + if (gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]) { - unk = gSaveBlock2Ptr->frontier.factoryWinStreaks[0][0]; + winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]; } else { - unk = gSaveBlock2Ptr->frontier.factoryWinStreaks[0][1]; + winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]; } break; - case 6: - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[0][0] >= gSaveBlock2Ptr->frontier.palaceWinStreaks[0][1]) + case FRONTIER_MANIAC_BATTLE_PALACE: + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]) { - unk = gSaveBlock2Ptr->frontier.palaceWinStreaks[0][0]; + winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]; } else { - unk = gSaveBlock2Ptr->frontier.palaceWinStreaks[0][1]; + winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN]; } break; - case 7: - if (gSaveBlock2Ptr->frontier.arenaWinStreaks[0] >= gSaveBlock2Ptr->frontier.arenaWinStreaks[1]) + case FRONTIER_MANIAC_BATTLE_ARENA: + if (gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_OPEN]) { - unk = gSaveBlock2Ptr->frontier.arenaWinStreaks[0]; + winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_50]; } else { - unk = gSaveBlock2Ptr->frontier.arenaWinStreaks[1]; + winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_OPEN]; } break; - case 8: - if (gSaveBlock2Ptr->frontier.pikeWinStreaks[0] >= gSaveBlock2Ptr->frontier.pikeWinStreaks[1]) + case FRONTIER_MANIAC_BATTLE_PIKE: + if (gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_OPEN]) { - unk = gSaveBlock2Ptr->frontier.pikeWinStreaks[0]; + winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_50]; } else { - unk = gSaveBlock2Ptr->frontier.pikeWinStreaks[1]; + winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_OPEN]; } break; - case 9: - if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[0] >= gSaveBlock2Ptr->frontier.pyramidWinStreaks[1]) + case FRONTIER_MANIAC_BATTLE_PYRAMID: + if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50] + >= gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN]) { - unk = gSaveBlock2Ptr->frontier.pyramidWinStreaks[0]; + winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50]; } else { - unk = gSaveBlock2Ptr->frontier.pyramidWinStreaks[1]; + winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN]; } break; } - for (i = 0; i < 2 && gUnknown_085B2CC8[var][i] < unk; i++); + for (i = 0; i < FRONTIER_MANIAC_MESSAGE_COUNT - 1 && sFrontierManiacStreakThresholds[facility][i] < winStreak; i++); - ShowFieldMessage(gUnknown_085B2C50[var][i]); + ShowFieldMessage(sFrontierManiacMessages[facility][i]); } -void sub_813A080(void) +// gSpecialVar_0x8005 and 0x8006 here are used by MoveElevator +void BufferBattleTowerElevatorFloors(void) { - static const u16 gUnknown_085B2CDC[] = { - 0x0007, 0x000e, 0x0015, 0x001c, 0x0023, 0x0031, 0x003f, 0x004d, 0x005b, 0x0000 + static const u16 sBattleTowerStreakThresholds[] = { + 7, 14, 21, 28, 35, 49, 63, 77, 91, 0 }; u8 i; @@ -2155,9 +2257,9 @@ void sub_813A080(void) return; } - for (i = 0; i < 9; i++) + for (i = 0; i < ARRAY_COUNT(sBattleTowerStreakThresholds) - 1; i++) { - if (gUnknown_085B2CDC[i] > gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]) + if (sBattleTowerStreakThresholds[i] > gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]) { gSpecialVar_0x8005 = 4; gSpecialVar_0x8006 = i + 5; @@ -2169,161 +2271,166 @@ void sub_813A080(void) gSpecialVar_0x8006 = 12; } -void sub_813A128(void) -{ - u8 taskId = CreateTask(sub_813A2DC, 8); +// Scrollable Multichoice task data defines +#define tMaxItemsOnScreen data[0] +#define tNumItems data[1] +#define tLeft data[2] +#define tTop data[3] +#define tWidth data[4] +#define tHeight data[5] +#define tKeepOpenAfterSelect data[6] +#define tScrollOffset data[7] +#define tSelectedRow data[8] +#define tScrollMultiId data[11] +#define tScrollArrowId data[12] +#define tWindowId data[13] +#define tListTaskId data[14] +#define tTaskId data[15] +// data[9] and [10] unused + +void ShowScrollableMultichoice(void) +{ + u8 taskId = CreateTask(Task_ShowScrollableMultichoice, 8); struct Task *task = &gTasks[taskId]; - task->data[11] = gSpecialVar_0x8004; + task->tScrollMultiId = gSpecialVar_0x8004; switch (gSpecialVar_0x8004) { - case 0: - task->data[0] = 1; - task->data[1] = 1; - task->data[2] = 1; - task->data[3] = 1; - task->data[4] = 1; - task->data[5] = 1; - task->data[6] = 0; - task->data[15] = taskId; + case SCROLL_MULTI_NONE: + task->tMaxItemsOnScreen = 1; + task->tNumItems = 1; + task->tLeft = 1; + task->tTop = 1; + task->tWidth = 1; + task->tHeight = 1; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; break; - case 1: - task->data[0] = 5; - task->data[1] = 8; - task->data[2] = 1; - task->data[3] = 1; - task->data[4] = 9; - task->data[5] = 10; - task->data[6] = 0; - task->data[15] = taskId; + case SCROLL_MULTI_GLASS_WORKSHOP_VENDOR: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN - 1; + task->tNumItems = 8; + task->tLeft = 1; + task->tTop = 1; + task->tWidth = 9; + task->tHeight = 10; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; break; - case 2: - task->data[0] = 6; - task->data[1] = 12; - task->data[2] = 1; - task->data[3] = 1; - task->data[4] = 7; - task->data[5] = 12; - task->data[6] = 0; - task->data[15] = taskId; + case SCROLL_MULTI_POKEMON_FAN_CLUB_RATER: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 12; + task->tLeft = 1; + task->tTop = 1; + task->tWidth = 7; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; break; - case 3: - task->data[0] = 6; - task->data[1] = 11; - task->data[2] = 14; - task->data[3] = 1; - task->data[4] = 15; - task->data[5] = 12; - task->data[6] = 0; - task->data[15] = taskId; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 11; + task->tLeft = 14; + task->tTop = 1; + task->tWidth = 15; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; break; - case 4: - task->data[0] = 6; - task->data[1] = 6; - task->data[2] = 14; - task->data[3] = 1; - task->data[4] = 15; - task->data[5] = 12; - task->data[6] = 0; - task->data[15] = taskId; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 6; + task->tLeft = 14; + task->tTop = 1; + task->tWidth = 15; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; break; - case 5: - task->data[0] = 6; - task->data[1] = 7; - task->data[2] = 14; - task->data[3] = 1; - task->data[4] = 15; - task->data[5] = 12; - task->data[6] = 0; - task->data[15] = taskId; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 7; + task->tLeft = 14; + task->tTop = 1; + task->tWidth = 15; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; break; - case 6: - task->data[0] = 6; - task->data[1] = 10; - task->data[2] = 14; - task->data[3] = 1; - task->data[4] = 15; - task->data[5] = 12; - task->data[6] = 0; - task->data[15] = taskId; + case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 10; + task->tLeft = 14; + task->tTop = 1; + task->tWidth = 15; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; break; - case 7: - task->data[0] = 6; - task->data[1] = 12; - task->data[2] = 15; - task->data[3] = 1; - task->data[4] = 14; - task->data[5] = 12; - task->data[6] = 0; - task->data[15] = taskId; + case SCROLL_MULTI_BERRY_POWDER_VENDOR: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 12; + task->tLeft = 15; + task->tTop = 1; + task->tWidth = 14; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; break; - case 8: - task->data[0] = 6; - task->data[1] = 10; - task->data[2] = 17; - task->data[3] = 1; - task->data[4] = 11; - task->data[5] = 12; - task->data[6] = 0; - task->data[15] = taskId; + case SCROLL_MULTI_BF_RECEPTIONIST: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 10; + task->tLeft = 17; + task->tTop = 1; + task->tWidth = 11; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; break; - case 9: - case 10: - task->data[0] = 6; - task->data[1] = 11; - task->data[2] = 15; - task->data[3] = 1; - task->data[4] = 14; - task->data[5] = 12; - task->data[6] = 0; - task->data[15] = taskId; + case SCROLL_MULTI_BF_MOVE_TUTOR_1: + case SCROLL_MULTI_BF_MOVE_TUTOR_2: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 11; + task->tLeft = 15; + task->tTop = 1; + task->tWidth = 14; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; break; - case 11: - task->data[0] = 6; - task->data[1] = 7; - task->data[2] = 19; - task->data[3] = 1; - task->data[4] = 10; - task->data[5] = 12; - task->data[6] = 0; - task->data[15] = taskId; + case SCROLL_MULTI_SS_TIDAL_DESTINATION: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 7; + task->tLeft = 19; + task->tTop = 1; + task->tWidth = 10; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; break; - case 12: - task->data[0] = 6; - task->data[1] = 7; - task->data[2] = 17; - task->data[3] = 1; - task->data[4] = 12; - task->data[5] = 12; - task->data[6] = 0; - task->data[15] = taskId; + case SCROLL_MULTI_BATTLE_TENT_RULES: + task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN; + task->tNumItems = 7; + task->tLeft = 17; + task->tTop = 1; + task->tWidth = 12; + task->tHeight = 12; + task->tKeepOpenAfterSelect = FALSE; + task->tTaskId = taskId; break; default: - gSpecialVar_Result = 0x7F; + gSpecialVar_Result = MULTI_B_PRESSED; DestroyTask(taskId); break; } } -static const u8 *const gUnknown_085B2CF0[][16] = { +static const u8 *const sScrollableMultichoiceOptions[][MAX_SCROLL_MULTI_LENGTH] = +{ + [SCROLL_MULTI_NONE] = { - gText_Exit, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL + gText_Exit }, + [SCROLL_MULTI_GLASS_WORKSHOP_VENDOR] = { gText_BlueFlute, gText_YellowFlute, @@ -2332,16 +2439,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = { gText_BlackFlute, gText_PrettyChair, gText_PrettyDesk, - gText_Exit, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL + gText_Exit }, + [SCROLL_MULTI_POKEMON_FAN_CLUB_RATER] = { gText_0Pts, gText_10Pts, @@ -2354,12 +2454,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = { gText_80Pts, gText_90Pts, gText_100Pts, - gText_QuestionMark, - NULL, - NULL, - NULL, - NULL + gText_QuestionMark }, + [SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1] = { gText_KissPoster16BP, gText_KissCushion32BP, @@ -2371,31 +2468,18 @@ static const u8 *const gUnknown_085B2CF0[][16] = { gText_CyndaquilDoll80BP, gText_ChikoritaDoll80BP, gText_TotodileDoll80BP, - gText_Exit, - NULL, - NULL, - NULL, - NULL, - NULL + gText_Exit }, + [SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2] = { gText_LaprasDoll128BP, gText_SnorlaxDoll128BP, gText_VenusaurDoll256BP, gText_CharizardDoll256BP, gText_BlastoiseDoll256BP, - gText_Exit, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL + gText_Exit }, + [SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR] = { gText_Protein1BP, gText_Calcium1BP, @@ -2403,17 +2487,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = { gText_Zinc1BP, gText_Carbos1BP, gText_HpUp1BP, - gText_Exit, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL + gText_Exit }, + [SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR] = { gText_Leftovers48BP, gText_WhiteHerb48BP, @@ -2424,14 +2500,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = { gText_KingsRock64BP, gText_FocusBand64BP, gText_ScopeLens64BP, - gText_Exit, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL + gText_Exit }, + [SCROLL_MULTI_BERRY_POWDER_VENDOR] = { gText_EnergyPowder50, gText_EnergyRoot80, @@ -2444,12 +2515,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = { gText_Zinc1000, gText_HPUp1000, gText_PPUp3000, - gText_Exit, - NULL, - NULL, - NULL, - NULL + gText_Exit }, + [SCROLL_MULTI_BF_RECEPTIONIST] = { gText_BattleTower2, gText_BattleDome, @@ -2460,14 +2528,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = { gText_BattlePyramid, gText_RankingHall, gText_ExchangeService, - gText_Exit, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL + gText_Exit }, + [SCROLL_MULTI_BF_MOVE_TUTOR_1] = { gText_Softboiled16BP, gText_SeismicToss24BP, @@ -2479,13 +2542,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = { gText_Counter48BP, gText_ThunderWave48BP, gText_SwordsDance48BP, - gText_Exit, - NULL, - NULL, - NULL, - NULL, - NULL + gText_Exit }, + [SCROLL_MULTI_BF_MOVE_TUTOR_2] = { gText_DefenseCurl16BP, gText_Snore24BP, @@ -2497,13 +2556,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = { gText_IcePunch48BP, gText_ThunderPunch48BP, gText_FirePunch48BP, - gText_Exit, - NULL, - NULL, - NULL, - NULL, - NULL + gText_Exit }, + [SCROLL_MULTI_SS_TIDAL_DESTINATION] = { gText_SlateportCity, gText_BattleFrontier, @@ -2511,17 +2566,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = { gText_NavelRock, gText_BirthIsland, gText_FarawayIsland, - gText_Exit, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL + gText_Exit }, + [SCROLL_MULTI_BATTLE_TENT_RULES] = { gText_BattleTrainers, gText_BattleBasics, @@ -2529,142 +2576,134 @@ static const u8 *const gUnknown_085B2CF0[][16] = { gText_PokemonMoves, gText_Underpowered, gText_WhenInDanger, - gText_Exit, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL + gText_Exit } }; -static void sub_813A2DC(u8 taskId) +static void Task_ShowScrollableMultichoice(u8 taskId) { - u32 unk1; + u32 width; u8 i, windowId; struct WindowTemplate template; struct Task *task = &gTasks[taskId]; ScriptContext2_Enable(); - gUnknown_0203AB68 = 0; - gUnknown_0203AB6C = 0x40; - sub_813AA60(task->data[11], 0); - sub_813ACE8(task->data[11], 0); - gUnknown_0203AB64 = AllocZeroed(task->data[1] * 8); - gUnknown_0203AB6A = 0; - sub_813A42C(); + sScrollableMultichoice_ScrollOffset = 0; + sScrollableMultichoice_ItemSpriteId = MAX_SPRITES; + FillFrontierExchangeCornerWindowAndItemIcon(task->tScrollMultiId, 0); + ShowBattleFrontierTutorWindow(task->tScrollMultiId, 0); + sScrollableMultichoice_ListMenuItem = AllocZeroed(task->tNumItems * 8); + sFrontierExchangeCorner_NeverRead = 0; + InitScrollableMultichoice(); - for (unk1 = 0, i = 0; i < task->data[1]; i++) + for (width = 0, i = 0; i < task->tNumItems; i++) { - const u8 *text = gUnknown_085B2CF0[gSpecialVar_0x8004][i]; - gUnknown_0203AB64[i].name = text; - gUnknown_0203AB64[i].id = i; - unk1 = display_text_and_get_width(text, unk1); + const u8 *text = sScrollableMultichoiceOptions[gSpecialVar_0x8004][i]; + sScrollableMultichoice_ListMenuItem[i].name = text; + sScrollableMultichoice_ListMenuItem[i].id = i; + width = DisplayTextAndGetWidth(text, width); } - task->data[4] = convert_pixel_width_to_tile_width(unk1); + task->tWidth = ConvertPixelWidthToTileWidth(width); - if (task->data[2] + task->data[4] > 0x1D) + if (task->tLeft + task->tWidth > MAX_MULTICHOICE_WIDTH + 1) { - int unk2 = 0x1D - task->data[4]; - if (unk2 < 0) + int adjustedLeft = MAX_MULTICHOICE_WIDTH + 1 - task->tWidth; + if (adjustedLeft < 0) { - task->data[2] = 0; + task->tLeft = 0; } else { - task->data[2] = unk2; + task->tLeft = adjustedLeft; } } - template = CreateWindowTemplate(0, task->data[2], task->data[3], task->data[4], task->data[5], 0xF, 0x64); + template = CreateWindowTemplate(0, task->tLeft, task->tTop, task->tWidth, task->tHeight, 0xF, 0x64); windowId = AddWindow(&template); - task->data[13] = windowId; + task->tWindowId = windowId; SetStandardWindowBorderStyle(windowId, 0); - gUnknown_030061D0.totalItems = task->data[1]; - gUnknown_030061D0.maxShowed = task->data[0]; - gUnknown_030061D0.windowId = task->data[13]; + gScrollableMultichoice_ListMenuTemplate.totalItems = task->tNumItems; + gScrollableMultichoice_ListMenuTemplate.maxShowed = task->tMaxItemsOnScreen; + gScrollableMultichoice_ListMenuTemplate.windowId = task->tWindowId; - sub_813A694(taskId); - task->data[14] = ListMenuInit(&gUnknown_030061D0, task->data[7], task->data[8]); + ScrollableMultichoice_UpdateScrollArrows(taskId); + task->tListTaskId = ListMenuInit(&gScrollableMultichoice_ListMenuTemplate, task->tScrollOffset, task->tSelectedRow); schedule_bg_copy_tilemap_to_vram(0); - gTasks[taskId].func = sub_813A4EC; + gTasks[taskId].func = ScrollableMultichoice_ProcessInput; } -static void sub_813A42C(void) +static void InitScrollableMultichoice(void) { - gUnknown_030061D0.items = gUnknown_0203AB64; - gUnknown_030061D0.moveCursorFunc = sub_813A46C; - gUnknown_030061D0.itemPrintFunc = NULL; - gUnknown_030061D0.totalItems = 1; - gUnknown_030061D0.maxShowed = 1; - gUnknown_030061D0.windowId = 0; - gUnknown_030061D0.header_X = 0; - gUnknown_030061D0.item_X = 8; - gUnknown_030061D0.cursor_X = 0; - gUnknown_030061D0.upText_Y = 1; - gUnknown_030061D0.cursorPal = 2; - gUnknown_030061D0.fillValue = 1; - gUnknown_030061D0.cursorShadowPal = 3; - gUnknown_030061D0.lettersSpacing = 0; - gUnknown_030061D0.itemVerticalPadding = 0; - gUnknown_030061D0.scrollMultiple = 0; - gUnknown_030061D0.fontId = 1; - gUnknown_030061D0.cursorKind = 0; + gScrollableMultichoice_ListMenuTemplate.items = sScrollableMultichoice_ListMenuItem; + gScrollableMultichoice_ListMenuTemplate.moveCursorFunc = ScrollableMultichoice_MoveCursor; + gScrollableMultichoice_ListMenuTemplate.itemPrintFunc = NULL; + gScrollableMultichoice_ListMenuTemplate.totalItems = 1; + gScrollableMultichoice_ListMenuTemplate.maxShowed = 1; + gScrollableMultichoice_ListMenuTemplate.windowId = 0; + gScrollableMultichoice_ListMenuTemplate.header_X = 0; + gScrollableMultichoice_ListMenuTemplate.item_X = 8; + gScrollableMultichoice_ListMenuTemplate.cursor_X = 0; + gScrollableMultichoice_ListMenuTemplate.upText_Y = 1; + gScrollableMultichoice_ListMenuTemplate.cursorPal = 2; + gScrollableMultichoice_ListMenuTemplate.fillValue = 1; + gScrollableMultichoice_ListMenuTemplate.cursorShadowPal = 3; + gScrollableMultichoice_ListMenuTemplate.lettersSpacing = 0; + gScrollableMultichoice_ListMenuTemplate.itemVerticalPadding = 0; + gScrollableMultichoice_ListMenuTemplate.scrollMultiple = 0; + gScrollableMultichoice_ListMenuTemplate.fontId = 1; + gScrollableMultichoice_ListMenuTemplate.cursorKind = 0; } -static void sub_813A46C(s32 itemIndex, bool8 onInit, struct ListMenu *list) +static void ScrollableMultichoice_MoveCursor(s32 itemIndex, bool8 onInit, struct ListMenu *list) { u8 taskId; PlaySE(SE_SELECT); - taskId = FindTaskIdByFunc(sub_813A4EC); + taskId = FindTaskIdByFunc(ScrollableMultichoice_ProcessInput); if (taskId != 0xFF) { - u16 misc; + u16 selection; struct Task *task = &gTasks[taskId]; - ListMenuGetScrollAndRow(task->data[14], &misc, NULL); - gUnknown_0203AB68 = misc; - ListMenuGetCurrentItemArrayId(task->data[14], &misc); - sub_813AC44(task->data[11], gUnknown_0203AB6A); - sub_813AA60(task->data[11], misc); - sub_813AD34(task->data[11], misc); - gUnknown_0203AB6A = misc; + ListMenuGetScrollAndRow(task->tListTaskId, &selection, NULL); + sScrollableMultichoice_ScrollOffset = selection; + ListMenuGetCurrentItemArrayId(task->tListTaskId, &selection); + HideFrontierExchangeCornerItemIcon(task->tScrollMultiId, sFrontierExchangeCorner_NeverRead); + FillFrontierExchangeCornerWindowAndItemIcon(task->tScrollMultiId, selection); + ShowBattleFrontierTutorMoveDescription(task->tScrollMultiId, selection); + sFrontierExchangeCorner_NeverRead = selection; } } -static void sub_813A4EC(u8 taskId) +static void ScrollableMultichoice_ProcessInput(u8 taskId) { struct Task *task = &gTasks[taskId]; - s32 input = ListMenu_ProcessInput(task->data[14]); + s32 input = ListMenu_ProcessInput(task->tListTaskId); switch (input) { case LIST_NOTHING_CHOSEN: break; case LIST_CANCEL: - gSpecialVar_Result = 0x7F; + gSpecialVar_Result = MULTI_B_PRESSED; PlaySE(SE_SELECT); - sub_813A570(taskId); + CloseScrollableMultichoice(taskId); break; default: gSpecialVar_Result = input; PlaySE(SE_SELECT); - if (!task->data[6]) + if (!task->tKeepOpenAfterSelect) { - sub_813A570(taskId); + CloseScrollableMultichoice(taskId); } - else if (input == task->data[1] - 1) + // if selected option was the last one (Exit) + else if (input == task->tNumItems - 1) { - sub_813A570(taskId); + CloseScrollableMultichoice(taskId); } else { - sub_813A738(taskId); + ScrollableMultichoice_RemoveScrollArrows(taskId); task->func = sub_813A600; EnableBothScriptContexts(); } @@ -2672,37 +2711,39 @@ static void sub_813A4EC(u8 taskId) } } -static void sub_813A570(u8 taskId) +static void CloseScrollableMultichoice(u8 taskId) { - u16 array; + u16 selection; struct Task *task = &gTasks[taskId]; - ListMenuGetCurrentItemArrayId(task->data[14], &array); - sub_813AC44(task->data[11], array); - sub_813A738(taskId); - DestroyListMenuTask(task->data[14], NULL, NULL); - Free(gUnknown_0203AB64); - ClearStdWindowAndFrameToTransparent(task->data[13], 1); - FillWindowPixelBuffer(task->data[13], PIXEL_FILL(0)); - CopyWindowToVram(task->data[13], 2); - RemoveWindow(task->data[13]); + ListMenuGetCurrentItemArrayId(task->tListTaskId, &selection); + HideFrontierExchangeCornerItemIcon(task->tScrollMultiId, selection); + ScrollableMultichoice_RemoveScrollArrows(taskId); + DestroyListMenuTask(task->tListTaskId, NULL, NULL); + Free(sScrollableMultichoice_ListMenuItem); + ClearStdWindowAndFrameToTransparent(task->tWindowId, 1); + FillWindowPixelBuffer(task->tWindowId, PIXEL_FILL(0)); + CopyWindowToVram(task->tWindowId, 2); + RemoveWindow(task->tWindowId); DestroyTask(taskId); EnableBothScriptContexts(); } +// Functionally unused; tKeepOpenAfterSelect is only != 0 in unused functions static void sub_813A600(u8 taskId) { - switch (gTasks[taskId].data[6]) + switch (gTasks[taskId].tKeepOpenAfterSelect) { case 1: default: break; case 2: - gTasks[taskId].data[6] = 1; + gTasks[taskId].tKeepOpenAfterSelect = 1; gTasks[taskId].func = sub_813A664; break; } } +// Never called void sub_813A630(void) { u8 taskId = FindTaskIdByFunc(sub_813A600); @@ -2712,20 +2753,20 @@ void sub_813A630(void) } else { - gTasks[taskId].data[6]++; + gTasks[taskId].tKeepOpenAfterSelect++; } } static void sub_813A664(u8 taskId) { ScriptContext2_Enable(); - sub_813A694(taskId); - gTasks[taskId].func = sub_813A4EC; + ScrollableMultichoice_UpdateScrollArrows(taskId); + gTasks[taskId].func = ScrollableMultichoice_ProcessInput; } -static void sub_813A694(u8 taskId) +static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId) { - static const struct ScrollArrowsTemplate gUnknown_085B3030 = { + static const struct ScrollArrowsTemplate sScrollableMultichoice_ScrollArrowsTemplate = { .firstArrowType = SCROLL_ARROW_UP, .firstX = 0, .firstY = 0, @@ -2740,34 +2781,51 @@ static void sub_813A694(u8 taskId) }; struct Task *task = &gTasks[taskId]; - struct ScrollArrowsTemplate template = gUnknown_085B3030; - if (task->data[0] != task->data[1]) + struct ScrollArrowsTemplate template = sScrollableMultichoice_ScrollArrowsTemplate; + if (task->tMaxItemsOnScreen != task->data[1]) { - template.firstX = (task->data[4] / 2) * 8 + 12 + (task->data[2] - 1) * 8; + template.firstX = (task->tWidth / 2) * 8 + 12 + (task->tLeft - 1) * 8; template.firstY = 8; - template.secondX = (task->data[4] / 2) * 8 + 12 + (task->data[2] - 1) * 8; - template.secondY = task->data[5] * 8 + 10; + 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->data[0]; - task->data[12] = AddScrollIndicatorArrowPair(&template, &gUnknown_0203AB68); + template.fullyDownThreshold = task->data[1] - task->tMaxItemsOnScreen; + task->tScrollArrowId = AddScrollIndicatorArrowPair(&template, &sScrollableMultichoice_ScrollOffset); } } -static void sub_813A738(u8 taskId) +static void ScrollableMultichoice_RemoveScrollArrows(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (task->data[0] != task->data[1]) + if (task->tMaxItemsOnScreen != task->data[1]) { - RemoveScrollIndicatorArrowPair(task->data[12]); + RemoveScrollIndicatorArrowPair(task->tScrollArrowId); } } -void nullsub_55(void) +// Removed for Emerald (replaced by ShowScrollableMultichoice) +void ShowGlassWorkshopMenu(void) { - + /* + u8 i; + ScriptContext2_Enable(); + Menu_DrawStdWindowFrame(0, 0, 10, 11); + InitMenu(0, 1, 1, 5, 0, 9); + gUnknown_0203925C = 0; + ClearVerticalScrollIndicatorPalettes(); + LoadScrollIndicatorPalette(); + sub_810F2B4(); + for (i = 0; i < 5; i++) + { + Menu_PrintText(gUnknown_083F83C0[i], 1, 2 * i + 1); + } + gUnknown_0203925B = 0; + gUnknown_0203925A = ARRAY_COUNT(gUnknown_083F83C0); + CreateTask(sub_810F118, 8); + */ } -void sub_813A76C(void) +void SetBattleTowerLinkPlayerGfx(void) { u8 i; for (i = 0; i < 2; i++) @@ -2783,34 +2841,34 @@ void sub_813A76C(void) } } -void sub_813A7B8(void) -{ - static const u8 *const gUnknown_085B3040[] = { - BattleFrontier_Lounge5_Text_26468D, - BattleFrontier_Lounge5_Text_2646E5, - BattleFrontier_Lounge5_Text_264741, - BattleFrontier_Lounge5_Text_2647A4, - BattleFrontier_Lounge5_Text_2647FC, - BattleFrontier_Lounge5_Text_264858, - BattleFrontier_Lounge5_Text_2648BE, - BattleFrontier_Lounge5_Text_264916, - BattleFrontier_Lounge5_Text_264972, - BattleFrontier_Lounge5_Text_2649D5, - BattleFrontier_Lounge5_Text_264A3F, - BattleFrontier_Lounge5_Text_264A9B, - BattleFrontier_Lounge5_Text_264AF3, - BattleFrontier_Lounge5_Text_264B5D, - BattleFrontier_Lounge5_Text_2648BE, - BattleFrontier_Lounge5_Text_264BC3, - BattleFrontier_Lounge5_Text_264C36, - BattleFrontier_Lounge5_Text_2648BE, - BattleFrontier_Lounge5_Text_264C95, - BattleFrontier_Lounge5_Text_264D01, - BattleFrontier_Lounge5_Text_264D6B, - BattleFrontier_Lounge5_Text_264DD7, - BattleFrontier_Lounge5_Text_264E33, - BattleFrontier_Lounge5_Text_264E8F, - BattleFrontier_Lounge5_Text_2648BE, +void ShowNatureGirlMessage(void) +{ + static const u8 *const sNatureGirlMessages[] = { + [NATURE_HARDY] = BattleFrontier_Lounge5_Text_NatureGirlHardy, + [NATURE_LONELY] = BattleFrontier_Lounge5_Text_NatureGirlLonely, + [NATURE_BRAVE] = BattleFrontier_Lounge5_Text_NatureGirlBrave, + [NATURE_ADAMANT] = BattleFrontier_Lounge5_Text_NatureGirlAdamant, + [NATURE_NAUGHTY] = BattleFrontier_Lounge5_Text_NatureGirlNaughty, + [NATURE_BOLD] = BattleFrontier_Lounge5_Text_NatureGirlBold, + [NATURE_DOCILE] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky, + [NATURE_RELAXED] = BattleFrontier_Lounge5_Text_NatureGirlRelaxed, + [NATURE_IMPISH] = BattleFrontier_Lounge5_Text_NatureGirlImpish, + [NATURE_LAX] = BattleFrontier_Lounge5_Text_NatureGirlLax, + [NATURE_TIMID] = BattleFrontier_Lounge5_Text_NatureGirlTimid, + [NATURE_HASTY] = BattleFrontier_Lounge5_Text_NatureGirlHasty, + [NATURE_SERIOUS] = BattleFrontier_Lounge5_Text_NatureGirlSerious, + [NATURE_JOLLY] = BattleFrontier_Lounge5_Text_NatureGirlJolly, + [NATURE_NAIVE] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky, + [NATURE_MODEST] = BattleFrontier_Lounge5_Text_NatureGirlModest, + [NATURE_MILD] = BattleFrontier_Lounge5_Text_NatureGirlMild, + [NATURE_QUIET] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky, + [NATURE_BASHFUL] = BattleFrontier_Lounge5_Text_NatureGirlBashful, + [NATURE_RASH] = BattleFrontier_Lounge5_Text_NatureGirlRash, + [NATURE_CALM] = BattleFrontier_Lounge5_Text_NatureGirlCalm, + [NATURE_GENTLE] = BattleFrontier_Lounge5_Text_NatureGirlGentle, + [NATURE_SASSY] = BattleFrontier_Lounge5_Text_NatureGirlSassy, + [NATURE_CAREFUL] = BattleFrontier_Lounge5_Text_NatureGirlCareful, + [NATURE_QUIRKY] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky, }; u8 nature; @@ -2821,19 +2879,20 @@ void sub_813A7B8(void) } nature = GetNature(&gPlayerParty[gSpecialVar_0x8004]); - ShowFieldMessage(gUnknown_085B3040[nature]); + ShowFieldMessage(sNatureGirlMessages[nature]); } -void UpdateFrontierGambler(u16 a0) +void UpdateFrontierGambler(u16 daysSince) { - u16 *var = GetVarPointer(VAR_FRONTIER_GAMBLER_FACILITY); - *var += a0; - *var %= 12; + u16 *var = GetVarPointer(VAR_FRONTIER_GAMBLER_CHALLENGE); + *var += daysSince; + *var %= FRONTIER_GAMBLER_CHALLENGE_COUNT; } -void sub_813A820(void) +void ShowFrontierGamblerLookingMessage(void) { - static const u8 *const gUnknown_085B30A4[] = { + static const u8 *const sFrontierGamblerLookingMessages[] = + { BattleFrontier_Lounge3_Text_262261, BattleFrontier_Lounge3_Text_26230D, BattleFrontier_Lounge3_Text_2623B9, @@ -2848,14 +2907,15 @@ void sub_813A820(void) BattleFrontier_Lounge3_Text_2629BC, }; - u16 var = VarGet(VAR_FRONTIER_GAMBLER_FACILITY); - ShowFieldMessage(gUnknown_085B30A4[var]); - VarSet(VAR_FRONTIER_GAMBLER_SET_FACILITY_F, var); + u16 challenge = VarGet(VAR_FRONTIER_GAMBLER_CHALLENGE); + ShowFieldMessage(sFrontierGamblerLookingMessages[challenge]); + VarSet(VAR_FRONTIER_GAMBLER_SET_CHALLENGE, challenge); } -void sub_813A854(void) +void ShowFrontierGamblerGoMessage(void) { - static const u8 *const gUnknown_085B30D4[] = { + static const u8 *const sFrontierGamblerGoMessages[] = + { BattleFrontier_Lounge3_Text_262C04, BattleFrontier_Lounge3_Text_262C90, BattleFrontier_Lounge3_Text_262D1C, @@ -2870,45 +2930,59 @@ void sub_813A854(void) BattleFrontier_Lounge3_Text_263211, }; - ShowFieldMessage(gUnknown_085B30D4[VarGet(VAR_FRONTIER_GAMBLER_SET_FACILITY_F)]); + ShowFieldMessage(sFrontierGamblerGoMessages[VarGet(VAR_FRONTIER_GAMBLER_SET_CHALLENGE)]); } -void sub_813A878(u8 a0) +void FrontierGamblerSetWonOrLost(bool8 won) { - static const u16 gUnknown_085B3104[] = {0x0000, 0x0001, 0x0002, 0x0100, 0x0101, 0x0400, 0x0401, 0x0200, 0x0201, 0x0300, 0x0500, 0x0600}; + static const u16 sFrontierChallenges[] = + { + FRONTIER_CHALLENGE(FRONTIER_FACILITY_TOWER, FRONTIER_MODE_SINGLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_TOWER, FRONTIER_MODE_DOUBLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_TOWER, FRONTIER_MODE_MULTIS), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_DOME, FRONTIER_MODE_SINGLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_DOME, FRONTIER_MODE_DOUBLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_FACTORY, FRONTIER_MODE_SINGLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_FACTORY, FRONTIER_MODE_DOUBLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_PALACE, FRONTIER_MODE_SINGLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_PALACE, FRONTIER_MODE_DOUBLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_ARENA, FRONTIER_MODE_SINGLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_PIKE, FRONTIER_MODE_SINGLES), + FRONTIER_CHALLENGE(FRONTIER_FACILITY_PYRAMID, FRONTIER_MODE_SINGLES) + }; u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - u16 var2 = VarGet(VAR_FRONTIER_GAMBLER_SET_FACILITY_F); + u16 challenge = VarGet(VAR_FRONTIER_GAMBLER_SET_CHALLENGE); u16 frontierFacilityId = VarGet(VAR_FRONTIER_FACILITY); - if (VarGet(VAR_FRONTIER_GAMBLER_PLACED_BET_F) == 1) + if (VarGet(VAR_FRONTIER_GAMBLER_STATE) == FRONTIER_GAMBLER_PLACED_BET) { - if (gUnknown_085B3104[var2] == (frontierFacilityId << 8) + battleMode) + if (sFrontierChallenges[challenge] == FRONTIER_CHALLENGE(frontierFacilityId, battleMode)) { - if (a0 != 0) + if (won) { - VarSet(VAR_FRONTIER_GAMBLER_PLACED_BET_F, 2); + VarSet(VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_WON); } else { - VarSet(VAR_FRONTIER_GAMBLER_PLACED_BET_F, 3); + VarSet(VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_LOST); } } } } -void sub_813A8FC(void) +void UpdateBattlePointsWindow(void) { u8 string[32]; u32 x; StringCopy(ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->frontier.battlePoints, STR_CONV_MODE_RIGHT_ALIGN, 4), gText_BP); x = GetStringRightAlignXOffset(1, string, 48); - AddTextPrinterParameterized(gUnknown_0203AB6D, 1, string, x, 1, 0, NULL); + AddTextPrinterParameterized(sBattlePointsWindowId, 1, string, x, 1, 0, NULL); } -void sub_813A958(void) +void ShowBattlePointsWindow(void) { - static const struct WindowTemplate gUnknown_085B311C = { + static const struct WindowTemplate sBattlePoints_WindowTemplate = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 1, @@ -2918,19 +2992,19 @@ void sub_813A958(void) .baseBlock = 8, }; - gUnknown_0203AB6D = AddWindow(&gUnknown_085B311C); - SetStandardWindowBorderStyle(gUnknown_0203AB6D, 0); - sub_813A8FC(); - CopyWindowToVram(gUnknown_0203AB6D, 2); + sBattlePointsWindowId = AddWindow(&sBattlePoints_WindowTemplate); + SetStandardWindowBorderStyle(sBattlePointsWindowId, 0); + UpdateBattlePointsWindow(); + CopyWindowToVram(sBattlePointsWindowId, 2); } -void sub_813A988(void) +void CloseBattlePointsWindow(void) { - ClearStdWindowAndFrameToTransparent(gUnknown_0203AB6D, TRUE); - RemoveWindow(gUnknown_0203AB6D); + ClearStdWindowAndFrameToTransparent(sBattlePointsWindowId, TRUE); + RemoveWindow(sBattlePointsWindowId); } -void sub_813A9A4(void) +void TakeFrontierBattlePoints(void) { if (gSaveBlock2Ptr->frontier.battlePoints < gSpecialVar_0x8004) { @@ -2942,11 +3016,11 @@ void sub_813A9A4(void) } } -void sub_813A9D0(void) +void GiveFrontierBattlePoints(void) { - if (gSaveBlock2Ptr->frontier.battlePoints + gSpecialVar_0x8004 > 9999) + if (gSaveBlock2Ptr->frontier.battlePoints + gSpecialVar_0x8004 > MAX_BATTLE_FRONTIER_POINTS) { - gSaveBlock2Ptr->frontier.battlePoints = 9999; + gSaveBlock2Ptr->frontier.battlePoints = MAX_BATTLE_FRONTIER_POINTS; } else { @@ -2954,14 +3028,14 @@ void sub_813A9D0(void) } } -u16 sub_813AA04(void) +u16 GetFrontierBattlePoints(void) { return gSaveBlock2Ptr->frontier.battlePoints; } -void sub_813AA18(void) +void ShowFrontierExchangeCornerItemIconWindow(void) { - static const struct WindowTemplate gUnknown_085B3124 = { + static const struct WindowTemplate sFrontierExchangeCorner_ItemIconWindowTemplate = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 9, @@ -2971,159 +3045,139 @@ void sub_813AA18(void) .baseBlock = 20, }; - gUnknown_0203AB6E = AddWindow(&gUnknown_085B3124); - SetStandardWindowBorderStyle(gUnknown_0203AB6E, 0); - CopyWindowToVram(gUnknown_0203AB6E, 2); + sFrontierExchangeCorner_ItemIconWindowId = AddWindow(&sFrontierExchangeCorner_ItemIconWindowTemplate); + SetStandardWindowBorderStyle(sFrontierExchangeCorner_ItemIconWindowId, 0); + CopyWindowToVram(sFrontierExchangeCorner_ItemIconWindowId, 2); } -void sub_813AA44(void) +void CloseFrontierExchangeCornerItemIconWindow(void) { - ClearStdWindowAndFrameToTransparent(gUnknown_0203AB6E, TRUE); - RemoveWindow(gUnknown_0203AB6E); + ClearStdWindowAndFrameToTransparent(sFrontierExchangeCorner_ItemIconWindowId, TRUE); + RemoveWindow(sFrontierExchangeCorner_ItemIconWindowId); } -static void sub_813AA60(u16 a0, u16 a1) +static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection) { - static const u16 gUnknown_085B312C[] = { 0x004b, 0x0067, 0x0057, 0x004f, 0x0054, 0x0055, 0x0056, 0x0050, 0x0051, 0x0052, 0xFFFF }; - static const u16 gUnknown_085B3142[] = { 0x0071, 0x006f, 0x0072, 0x0073, 0x0074, 0xFFFF }; - static const u16 gUnknown_085B314E[] = { 0x0040, 0x0043, 0x0041, 0x0046, 0x0042, 0x003f, 0xFFFF }; - static const u16 gUnknown_085B315C[] = { 0x00c8, 0x00b4, 0x00b7, 0x00b9, 0x00b3, 0x00ba, 0x00bb, 0x00c4, 0x00c6, 0xFFFF }; - - static const u8 *const gUnknown_085B3170[] = { - BattleFrontier_BattlePointExchangeServiceCorner_Text_2601AA, - BattleFrontier_BattlePointExchangeServiceCorner_Text_2601D0, - BattleFrontier_BattlePointExchangeServiceCorner_Text_260201, - BattleFrontier_BattlePointExchangeServiceCorner_Text_26022F, - BattleFrontier_BattlePointExchangeServiceCorner_Text_26025B, - BattleFrontier_BattlePointExchangeServiceCorner_Text_260287, - BattleFrontier_BattlePointExchangeServiceCorner_Text_2602B5, - BattleFrontier_BattlePointExchangeServiceCorner_Text_2602E0, - BattleFrontier_BattlePointExchangeServiceCorner_Text_26030F, - BattleFrontier_BattlePointExchangeServiceCorner_Text_26033E, - gText_Exit, - }; - - static const u8 *const gUnknown_085B319C[] = { - BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C, - BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C, - BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C, - BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C, - BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C, - gText_Exit - }; + #include "data/battle_frontier/battle_frontier_exchange_corner.h" - static const u8 *const gUnknown_085B31B4[] = { - BattleFrontier_BattlePointExchangeServiceCorner_Text_260397, - BattleFrontier_BattlePointExchangeServiceCorner_Text_2603BE, - BattleFrontier_BattlePointExchangeServiceCorner_Text_2603E6, - BattleFrontier_BattlePointExchangeServiceCorner_Text_26040E, - BattleFrontier_BattlePointExchangeServiceCorner_Text_260436, - BattleFrontier_BattlePointExchangeServiceCorner_Text_26045C, - gText_Exit - }; - - static const u8 *const gUnknown_085B31D0[] = { - BattleFrontier_BattlePointExchangeServiceCorner_Text_26047A, - BattleFrontier_BattlePointExchangeServiceCorner_Text_2604AC, - BattleFrontier_BattlePointExchangeServiceCorner_Text_2604D8, - BattleFrontier_BattlePointExchangeServiceCorner_Text_26050F, - BattleFrontier_BattlePointExchangeServiceCorner_Text_260542, - BattleFrontier_BattlePointExchangeServiceCorner_Text_260575, - BattleFrontier_BattlePointExchangeServiceCorner_Text_2605A8, - BattleFrontier_BattlePointExchangeServiceCorner_Text_2605E2, - BattleFrontier_BattlePointExchangeServiceCorner_Text_260613, - gText_Exit - }; - - if (a0 > 2 && a0 < 7) + if (menu >= SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1 && menu <= SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR) { FillWindowPixelRect(0, PIXEL_FILL(1), 0, 0, 216, 32); - switch (a0) + switch (menu) { - case 3: - AddTextPrinterParameterized2(0, 1, gUnknown_085B3170[a1], 0, NULL, 2, 1, 3); - if (gUnknown_085B312C[a1] == 0xFFFF) + case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1: + AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_Decor1Descriptions[selection], 0, NULL, 2, 1, 3); + if (sFrontierExchangeCorner_Decor1[selection] == 0xFFFF) { - sub_813ABD4(gUnknown_085B312C[a1]); + ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Decor1[selection]); } else { FreeSpriteTilesByTag(5500); FreeSpritePaletteByTag(5500); - gUnknown_0203AB6C = AddDecorationIconObject(gUnknown_085B312C[a1], 33, 88, 0, 5500, 5500); + sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor1[selection], 33, 88, 0, 5500, 5500); } break; - case 4: - AddTextPrinterParameterized2(0, 1, gUnknown_085B319C[a1], 0, NULL, 2, 1, 3); - if (gUnknown_085B3142[a1] == 0xFFFF) + case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2: + AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_Decor2Descriptions[selection], 0, NULL, 2, 1, 3); + if (sFrontierExchangeCorner_Decor2[selection] == 0xFFFF) { - sub_813ABD4(gUnknown_085B3142[a1]); + ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Decor2[selection]); } else { FreeSpriteTilesByTag(5500); FreeSpritePaletteByTag(5500); - gUnknown_0203AB6C = AddDecorationIconObject(gUnknown_085B3142[a1], 33, 88, 0, 5500, 5500); + sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor2[selection], 33, 88, 0, 5500, 5500); } break; - case 5: - AddTextPrinterParameterized2(0, 1, gUnknown_085B31B4[a1], 0, NULL, 2, 1, 3); - sub_813ABD4(gUnknown_085B314E[a1]); + case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR: + AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_VitaminsDescriptions[selection], 0, NULL, 2, 1, 3); + ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Vitamins[selection]); break; - case 6: - AddTextPrinterParameterized2(0, 1, gUnknown_085B31D0[a1], 0, NULL, 2, 1, 3); - sub_813ABD4(gUnknown_085B315C[a1]); + case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR: + AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_HoldItemsDescriptions[selection], 0, NULL, 2, 1, 3); + ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_HoldItems[selection]); break; } } } -static void sub_813ABD4(u16 a0) +static void ShowFrontierExchangeCornerItemIcon(u16 item) { FreeSpriteTilesByTag(5500); FreeSpritePaletteByTag(5500); - gUnknown_0203AB6C = AddItemIconSprite(5500, 5500, a0); + sScrollableMultichoice_ItemSpriteId = AddItemIconSprite(5500, 5500, item); - if (gUnknown_0203AB6C != MAX_SPRITES) + if (sScrollableMultichoice_ItemSpriteId != MAX_SPRITES) { - gSprites[gUnknown_0203AB6C].oam.priority = 0; - gSprites[gUnknown_0203AB6C].pos1.x = 36; - gSprites[gUnknown_0203AB6C].pos1.y = 92; + gSprites[sScrollableMultichoice_ItemSpriteId].oam.priority = 0; + gSprites[sScrollableMultichoice_ItemSpriteId].pos1.x = 36; + gSprites[sScrollableMultichoice_ItemSpriteId].pos1.y = 92; } } -static void sub_813AC44(u16 a0, u16 unused) +static void HideFrontierExchangeCornerItemIcon(u16 menu, u16 unused) { - if (gUnknown_0203AB6C != MAX_SPRITES) + if (sScrollableMultichoice_ItemSpriteId != MAX_SPRITES) { - switch (a0) + switch (menu) { - case 3 ... 6: - DestroySpriteAndFreeResources(&gSprites[gUnknown_0203AB6C]); + case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1: + case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2: + case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR: + case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR: + DestroySpriteAndFreeResources(&gSprites[sScrollableMultichoice_ItemSpriteId]); break; } - gUnknown_0203AB6C = MAX_SPRITES; - } -} + sScrollableMultichoice_ItemSpriteId = MAX_SPRITES; + } +} + +static const u16 sBattleFrontier_TutorMoves1[] = +{ + MOVE_SOFT_BOILED, + MOVE_SEISMIC_TOSS, + MOVE_DREAM_EATER, + MOVE_MEGA_PUNCH, + MOVE_MEGA_KICK, + MOVE_BODY_SLAM, + MOVE_ROCK_SLIDE, + MOVE_COUNTER, + MOVE_THUNDER_WAVE, + MOVE_SWORDS_DANCE +}; -static const u16 gUnknown_085B31F8[] = { 0x0087, 0x0045, 0x008a, 0x0005, 0x0019, 0x0022, 0x009d, 0x0044, 0x0056, 0x000e }; -static const u16 gUnknown_085B320C[] = { 0x006f, 0x00ad, 0x00bd, 0x0081, 0x00c4, 0x00cb, 0x00f4, 0x0008, 0x0009, 0x0007 }; +static const u16 sBattleFrontier_TutorMoves2[] = +{ + MOVE_DEFENSE_CURL, + MOVE_SNORE, + MOVE_MUD_SLAP, + MOVE_SWIFT, + MOVE_ICY_WIND, + MOVE_ENDURE, + MOVE_PSYCH_UP, + MOVE_ICE_PUNCH, + MOVE_THUNDER_PUNCH, + MOVE_FIRE_PUNCH +}; -void sub_813AC7C(void) +void BufferBattleFrontierTutorMoveName(void) { if (gSpecialVar_0x8005 != 0) { - StringCopy(gStringVar1, gMoveNames[gUnknown_085B320C[gSpecialVar_0x8004]]); + StringCopy(gStringVar1, gMoveNames[sBattleFrontier_TutorMoves2[gSpecialVar_0x8004]]); } else { - StringCopy(gStringVar1, gMoveNames[gUnknown_085B31F8[gSpecialVar_0x8004]]); + StringCopy(gStringVar1, gMoveNames[sBattleFrontier_TutorMoves1[gSpecialVar_0x8004]]); } } -static void sub_813ACE8(u8 a0, u16 a1) +static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection) { - static const struct WindowTemplate gUnknown_085B3220 = { + static const struct WindowTemplate sBattleFrontierTutor_WindowTemplate = + { .bg = 0, .tilemapLeft = 1, .tilemapTop = 7, @@ -3133,20 +3187,21 @@ static void sub_813ACE8(u8 a0, u16 a1) .baseBlock = 28, }; - if (a0 == 9 || a0 == 10) + if (menu == SCROLL_MULTI_BF_MOVE_TUTOR_1 || menu == SCROLL_MULTI_BF_MOVE_TUTOR_2) { if (gSpecialVar_0x8006 == 0) { - gUnknown_0203AB5E = AddWindow(&gUnknown_085B3220); - SetStandardWindowBorderStyle(gUnknown_0203AB5E, 0); + sTutorMoveAndElevatorWindowId = AddWindow(&sBattleFrontierTutor_WindowTemplate); + SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, 0); } - sub_813AD34(a0, a1); + ShowBattleFrontierTutorMoveDescription(menu, selection); } } -static void sub_813AD34(u8 a0, u16 a1) +static void ShowBattleFrontierTutorMoveDescription(u8 menu, u16 selection) { - static const u8 *const gUnknown_085B3228[] = { + static const u8 *const sBattleFrontier_TutorMoveDescriptions1[] = + { BattleFrontier_Lounge7_Text_265E30, BattleFrontier_Lounge7_Text_265E5B, BattleFrontier_Lounge7_Text_265E8A, @@ -3160,7 +3215,8 @@ static void sub_813AD34(u8 a0, u16 a1) gText_Exit, }; - static const u8 *const gUnknown_085B3254[] = { + static const u8 *const sBattleFrontier_TutorMoveDescriptions2[] = + { BattleFrontier_Lounge7_Text_26600A, BattleFrontier_Lounge7_Text_26603E, BattleFrontier_Lounge7_Text_266070, @@ -3174,26 +3230,27 @@ static void sub_813AD34(u8 a0, u16 a1) gText_Exit, }; - if (a0 == 9 || a0 == 10) + if (menu == SCROLL_MULTI_BF_MOVE_TUTOR_1 || menu == SCROLL_MULTI_BF_MOVE_TUTOR_2) { - FillWindowPixelRect(gUnknown_0203AB5E, PIXEL_FILL(1), 0, 0, 96, 48); - if (a0 == 10) + FillWindowPixelRect(sTutorMoveAndElevatorWindowId, PIXEL_FILL(1), 0, 0, 96, 48); + if (menu == SCROLL_MULTI_BF_MOVE_TUTOR_2) { - AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gUnknown_085B3254[a1], 0, 1, 0, NULL); + AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, sBattleFrontier_TutorMoveDescriptions2[selection], 0, 1, 0, NULL); } else { - AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gUnknown_085B3228[a1], 0, 1, 0, NULL); + AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, sBattleFrontier_TutorMoveDescriptions1[selection], 0, 1, 0, NULL); } } } -void sub_813ADB8(void) +void CloseBattleFrontierTutorWindow(void) { - ClearStdWindowAndFrameToTransparent(gUnknown_0203AB5E, TRUE); - RemoveWindow(gUnknown_0203AB5E); + ClearStdWindowAndFrameToTransparent(sTutorMoveAndElevatorWindowId, TRUE); + RemoveWindow(sTutorMoveAndElevatorWindowId); } +// Never called void sub_813ADD4(void) { u16 scrollOffset, selectedRow; @@ -3202,75 +3259,92 @@ void sub_813ADD4(void) if (taskId != 0xFF) { struct Task *task = &gTasks[taskId]; - ListMenuGetScrollAndRow(task->data[14], &scrollOffset, &selectedRow); - SetStandardWindowBorderStyle(task->data[13], 0); + ListMenuGetScrollAndRow(task->tListTaskId, &scrollOffset, &selectedRow); + SetStandardWindowBorderStyle(task->tWindowId, 0); - for (i = 0; i < 6; i++) + for (i = 0; i < MAX_SCROLL_MULTI_ON_SCREEN; i++) { - AddTextPrinterParameterized5(task->data[13], 1, gUnknown_085B2CF0[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SPEED_FF, NULL, 0, 0); + AddTextPrinterParameterized5(task->tWindowId, 1, sScrollableMultichoiceOptions[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SPEED_FF, NULL, 0, 0); } - AddTextPrinterParameterized(task->data[13], 1, gText_SelectorArrow, 0, selectedRow * 16, TEXT_SPEED_FF, NULL); - PutWindowTilemap(task->data[13]); - CopyWindowToVram(task->data[13], 3); + AddTextPrinterParameterized(task->tWindowId, 1, gText_SelectorArrow, 0, selectedRow * 16, TEXT_SPEED_FF, NULL); + PutWindowTilemap(task->tWindowId); + CopyWindowToVram(task->tWindowId, 3); } } -void sub_813AEB4(void) +void GetBattleFrontierTutorMoveIndex(void) { u8 i; - u16 temp1 = 0; - u16 temp2 = 0; + u16 moveTutor = 0; + u16 moveIndex = 0; gSpecialVar_0x8005 = 0; - temp1 = VarGet(VAR_TEMP_E); - temp2 = VarGet(VAR_TEMP_D); + moveTutor = VarGet(VAR_TEMP_E); + moveIndex = VarGet(VAR_TEMP_D); - if (temp1 != 0) + if (moveTutor != 0) { i = 0; do { - if (gTutorMoves[i] == gUnknown_085B320C[temp2]) + if (gTutorMoves[i] == sBattleFrontier_TutorMoves2[moveIndex]) { gSpecialVar_0x8005 = i; break; } i++; - } while (i < 30); + } while (i < TUTOR_MOVE_COUNT); } else { i = 0; do { - if (gTutorMoves[i] == gUnknown_085B31F8[temp2]) + if (gTutorMoves[i] == sBattleFrontier_TutorMoves1[moveIndex]) { gSpecialVar_0x8005 = i; break; } i++; - } while (i < 30); + } while (i < TUTOR_MOVE_COUNT); } } +// Never called void sub_813AF48(void) { u8 taskId = FindTaskIdByFunc(sub_813A600); if (taskId != 0xFF) { struct Task *task = &gTasks[taskId]; - DestroyListMenuTask(task->data[14], NULL, NULL); - Free(gUnknown_0203AB64); - ClearStdWindowAndFrameToTransparent(task->data[13], TRUE); - FillWindowPixelBuffer(task->data[13], PIXEL_FILL(0)); - ClearWindowTilemap(task->data[13]); - CopyWindowToVram(task->data[13], 2); - RemoveWindow(task->data[13]); + DestroyListMenuTask(task->tListTaskId, NULL, NULL); + Free(sScrollableMultichoice_ListMenuItem); + ClearStdWindowAndFrameToTransparent(task->tWindowId, TRUE); + FillWindowPixelBuffer(task->tWindowId, PIXEL_FILL(0)); + ClearWindowTilemap(task->tWindowId); + CopyWindowToVram(task->tWindowId, 2); + RemoveWindow(task->tWindowId); DestroyTask(taskId); } } +// Undefine Scrollable Multichoice task data macros +#undef tMaxItemsOnScreen +#undef tNumItems +#undef tLeft +#undef tTop +#undef tWidth +#undef tHeight +#undef tKeepOpenAfterSelect +#undef tScrollOffset +#undef tSelectedRow +#undef tScrollMultiId +#undef tScrollArrowId +#undef tWindowId +#undef tListTaskId +#undef tTaskId + void DoDeoxysRockInteraction(void) { CreateTask(Task_DeoxysRockInteraction, 8); @@ -3405,47 +3479,47 @@ void sub_813B1D0(void) BlendPalettes(0x04000000, 16, 0); } -void set_unknown_box_id(u8 id) +void SetPCBoxToSendMon(u8 boxId) { - gUnknown_0203AB6F = id; + sPCBoxToSendMon = boxId; } -u16 get_unknown_box_id(void) +u16 GetPCBoxToSendMon(void) { - return gUnknown_0203AB6F; + return sPCBoxToSendMon; } -bool8 sub_813B21C(void) +bool8 ShouldShowBoxWasFullMessage(void) { - if (FlagGet(FLAG_SYS_STORAGE_UNKNOWN_FLAG) == FALSE) + if (!FlagGet(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE)) { - if (StorageGetCurrentBox() != VarGet(VAR_STORAGE_UNKNOWN)) + if (StorageGetCurrentBox() != VarGet(VAR_PC_BOX_TO_SEND_MON)) { - FlagSet(FLAG_SYS_STORAGE_UNKNOWN_FLAG); + FlagSet(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE); return TRUE; } } return FALSE; } -bool8 sub_813B260(void) +bool8 IsDestinationBoxFull(void) { int box; int i; - set_unknown_box_id(VarGet(VAR_STORAGE_UNKNOWN)); + SetPCBoxToSendMon(VarGet(VAR_PC_BOX_TO_SEND_MON)); box = StorageGetCurrentBox(); do { for (i = 0; i < IN_BOX_COUNT; i++) { - if (GetBoxMonData(GetBoxedMonPtr(box, i), MON_DATA_SPECIES, 0) == 0) + if (GetBoxMonData(GetBoxedMonPtr(box, i), MON_DATA_SPECIES, 0) == SPECIES_NONE) { - if (get_unknown_box_id() != box) + if (GetPCBoxToSendMon() != box) { - FlagClear(FLAG_SYS_STORAGE_UNKNOWN_FLAG); + FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE); } - VarSet(VAR_STORAGE_UNKNOWN, box); - return sub_813B21C(); + VarSet(VAR_PC_BOX_TO_SEND_MON, box); + return ShouldShowBoxWasFullMessage(); } } @@ -3606,35 +3680,37 @@ void Unused_SetWeatherSunny(void) SetCurrentAndNextWeather(WEATHER_SUNNY); } -bool32 sub_813B490(void) -{ - static const u8 gUnknown_085B3420[][3] = { - { 0x02, 0x04, 0x01 }, - { 0x04, 0x04, 0x01 }, - { 0x05, 0x00, 0x01 }, - { 0x06, 0x03, 0x01 }, - { 0x08, 0x06, 0x01 }, - { 0x09, 0x0d, 0x01 }, - { 0x0a, 0x07, 0x01 }, - { 0x0b, 0x07, 0x01 }, - { 0x0c, 0x04, 0x01 }, - { 0x0e, 0x05, 0x01 }, - { 0x0f, 0x04, 0x01 }, - { 0x1a, 0x37, 0x01 } +// Always returns 1 +u32 GetMartEmployeeObjectEventId(void) +{ + static const u8 sPokeMarts[][3] = + { + { MAP_GROUP(OLDALE_TOWN_MART), MAP_NUM(OLDALE_TOWN_MART), 1 }, + { MAP_GROUP(LAVARIDGE_TOWN_MART), MAP_NUM(LAVARIDGE_TOWN_MART), 1 }, + { MAP_GROUP(FALLARBOR_TOWN_MART), MAP_NUM(FALLARBOR_TOWN_MART), 1 }, + { MAP_GROUP(VERDANTURF_TOWN_MART), MAP_NUM(VERDANTURF_TOWN_MART), 1 }, + { MAP_GROUP(PETALBURG_CITY_MART), MAP_NUM(PETALBURG_CITY_MART), 1 }, + { MAP_GROUP(SLATEPORT_CITY_MART), MAP_NUM(SLATEPORT_CITY_MART), 1 }, + { MAP_GROUP(MAUVILLE_CITY_MART), MAP_NUM(MAUVILLE_CITY_MART), 1 }, + { MAP_GROUP(RUSTBORO_CITY_MART), MAP_NUM(RUSTBORO_CITY_MART), 1 }, + { MAP_GROUP(FORTREE_CITY_MART), MAP_NUM(FORTREE_CITY_MART), 1 }, + { MAP_GROUP(MOSSDEEP_CITY_MART), MAP_NUM(MOSSDEEP_CITY_MART), 1 }, + { MAP_GROUP(SOOTOPOLIS_CITY_MART), MAP_NUM(SOOTOPOLIS_CITY_MART), 1 }, + { MAP_GROUP(BATTLE_FRONTIER_MART), MAP_NUM(BATTLE_FRONTIER_MART), 1 } }; u8 i; - for (i = 0; i < 12; i++) + for (i = 0; i < ARRAY_COUNT(sPokeMarts); i++) { - if (gSaveBlock1Ptr->location.mapGroup == gUnknown_085B3420[i][0]) + if (gSaveBlock1Ptr->location.mapGroup == sPokeMarts[i][0]) { - if (gSaveBlock1Ptr->location.mapNum == gUnknown_085B3420[i][1]) + if (gSaveBlock1Ptr->location.mapNum == sPokeMarts[i][1]) { - return gUnknown_085B3420[i][2]; + return sPokeMarts[i][2]; } } } - return TRUE; + return 1; } bool32 sub_813B4E0(void) @@ -3648,6 +3724,7 @@ bool32 sub_813B4E0(void) return FALSE; } +// Always returns FALSE bool32 sub_813B514(void) { if (!VarGet(VAR_ALWAYS_ZERO_0x403F)) @@ -3659,7 +3736,7 @@ bool32 sub_813B514(void) void sub_813B534(void) { - gUnknown_0203AB70 = gBattleTypeFlags; + sUnknown_0203AB70 = gBattleTypeFlags; gBattleTypeFlags = 0; if (!gReceivedRemoteLinkPlayers) { @@ -3793,14 +3870,14 @@ static void sub_813B57C(u8 taskId) { sub_800AC34(); } - gBattleTypeFlags = gUnknown_0203AB70; + gBattleTypeFlags = sUnknown_0203AB70; EnableBothScriptContexts(); DestroyTask(taskId); break; } } -void sub_813B7D8(void) +void Script_DoRayquazaScene(void) { if (gSpecialVar_0x8004 == 0) { @@ -3870,23 +3947,25 @@ static void _fwalk(u8 taskId) } } -void sub_813B968(void) +void GetBattlePyramidHint(void) { gSpecialVar_Result = gSpecialVar_0x8004 / 7; gSpecialVar_Result -= (gSpecialVar_Result / 20) * 20; } -void sub_813B9A0(void) +// Used to avoid a potential softlock if the player respawns on Dewford with no way off +void ResetHealLocationFromDewford(void) { if (gSaveBlock1Ptr->lastHealLocation.mapGroup == MAP_GROUP(DEWFORD_TOWN) && gSaveBlock1Ptr->lastHealLocation.mapNum == MAP_NUM(DEWFORD_TOWN)) { - SetLastHealLocationWarp(3); + SetLastHealLocationWarp(HEAL_LOCATION_PETALBURG_CITY); } } -bool8 sub_813B9C0(void) +bool8 InPokemonCenter(void) { - static const u16 gUnknown_085B3444[] = { + static const u16 sPokemonCenters[] = + { MAP_OLDALE_TOWN_POKEMON_CENTER_1F, MAP_DEWFORD_TOWN_POKEMON_CENTER_1F, MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F, @@ -3914,9 +3993,9 @@ bool8 sub_813B9C0(void) int i; u16 map = (gSaveBlock1Ptr->location.mapGroup << 8) + gSaveBlock1Ptr->location.mapNum; - for (i = 0; gUnknown_085B3444[i] != 0xFFFF; i++) + for (i = 0; sPokemonCenters[i] != 0xFFFF; i++) { - if (gUnknown_085B3444[i] == map) + if (sPokemonCenters[i] == map) { return TRUE; } diff --git a/src/fight.c b/src/fight.c index c924effae..5230c2f39 100644 --- a/src/fight.c +++ b/src/fight.c @@ -912,9 +912,9 @@ void sub_810D874(struct Sprite *sprite) } if (IsContest()) - sprite->oam.matrixNum |= 0x8; + sprite->oam.matrixNum |= ST_OAM_HFLIP; else if (GetBattlerSide(battler) == B_SIDE_PLAYER) - sprite->oam.matrixNum |= 0x18; + sprite->oam.matrixNum |= (ST_OAM_HFLIP | ST_OAM_VFLIP); sprite->data[0] = 16; sprite->data[1] = sprite->pos1.x; diff --git a/src/fire.c b/src/fire.c index 2998d46ca..fdbfb234e 100644 --- a/src/fire.c +++ b/src/fire.c @@ -949,7 +949,7 @@ static u16 sub_8109930(u8 spriteId) { u16 var1 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y + gSprites[spriteId].centerToCornerVecY; - if (GetBattlerSide(gBattleAnimAttacker) == 0) + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) { var1 = ((var1 << 16) + 0x4A0000) >> 16; } @@ -1059,7 +1059,7 @@ static void sub_8109AFC(struct Sprite *sprite) StartSpriteAnim(sprite, gBattleAnimArgs[2]); sprite->data[7] = gBattleAnimArgs[2]; - if (GetBattlerSide(gBattleAnimAttacker) != 0) + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { sprite->data[4] = 4; } @@ -1073,7 +1073,7 @@ static void sub_8109AFC(struct Sprite *sprite) break; case 1: sprite->data[1] += 192; - if (GetBattlerSide(gBattleAnimAttacker) != 0) + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { sprite->pos2.y = -(sprite->data[1] >> 8); } diff --git a/src/flying.c b/src/flying.c index a157582e9..3d04a543c 100644 --- a/src/flying.c +++ b/src/flying.c @@ -1800,7 +1800,7 @@ void sub_810EEF8(struct Sprite *sprite) sprite->data[2] = gBattleAnimArgs[0]; if (sprite->data[2]) - sprite->oam.matrixNum = 8; + sprite->oam.matrixNum = ST_OAM_HFLIP; if (gBattleAnimArgs[1] == 0) { diff --git a/src/frontier_util.c b/src/frontier_util.c index 4dd8159cb..88e466e8c 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -794,15 +794,15 @@ static void sub_81A17A0(void) case 0: break; case 1: - sub_813A878(0); + FrontierGamblerSetWonOrLost(FALSE); VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); break; case 4: - sub_813A878(0); + FrontierGamblerSetWonOrLost(FALSE); VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); break; case 3: - sub_813A878(1); + FrontierGamblerSetWonOrLost(TRUE); VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); break; case 2: @@ -2503,7 +2503,7 @@ void CreateFrontierBrainPokemon(void) monLevel, sFrontierBrainsMons[facility][symbol][i].fixedIV, TRUE, j, - TRUE, FRONTIER_BRAIN_OTID); + OT_ID_PRESET, FRONTIER_BRAIN_OTID); SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM, &sFrontierBrainsMons[facility][symbol][i].heldItem); for (j = 0; j < NUM_STATS; j++) SetMonData(&gEnemyParty[monPartyId], MON_DATA_HP_EV + j, &sFrontierBrainsMons[facility][symbol][i].evs[j]); diff --git a/src/ghost.c b/src/ghost.c index dd29fb7ca..41621ff54 100644 --- a/src/ghost.c +++ b/src/ghost.c @@ -1039,7 +1039,7 @@ static void sub_81129F0(struct Sprite *sprite) { xDelta = 24; xDelta2 = -2; - sprite->oam.matrixNum = 8; + sprite->oam.matrixNum = ST_OAM_HFLIP; } else { diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index fdf2020ff..ac37b2ece 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -755,7 +755,7 @@ static void Task_Hof_HandleExit(u8 taskId) static void SetCallback2AfterHallOfFameDisplay(void) { - SetMainCallback2(sub_8175620); + SetMainCallback2(CB2_StartCreditsSequence); } #undef tDontSaveData diff --git a/src/hof_pc.c b/src/hof_pc.c index 01015ee81..327749179 100644 --- a/src/hof_pc.c +++ b/src/hof_pc.c @@ -27,7 +27,7 @@ static void ReshowPCMenuAfterHallOfFamePC(void) { ScriptContext2_Enable(); Overworld_PlaySpecialMapMusic(); - ScrSpecial_CreatePCMenu(); + ScriptMenu_CreatePCMultichoice(); ScriptMenu_DisplayPCStartupPrompt(); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); CreateTask(Task_WaitForPaletteFade, 10); @@ -735,7 +735,7 @@ void AnimSwirlingSnowball_Step2(struct Sprite *sprite) void AnimSwirlingSnowball_Step3(struct Sprite *sprite) { s16 tempVar; - tempVar = GetBattlerSide(gBattleAnimAttacker) != 0 ? 20 : -20; + tempVar = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 20 : -20; if (sprite->data[5] <= 31) { @@ -1190,12 +1190,12 @@ void InitPoisonGasCloudAnim(struct Sprite *sprite) if (GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) < GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2)) sprite->data[7] = 0x8000; - if (!(gBattlerPositions[gBattleAnimTarget] & 1)) + if ((gBattlerPositions[gBattleAnimTarget] & BIT_SIDE) == B_SIDE_PLAYER) { gBattleAnimArgs[1] = -gBattleAnimArgs[1]; gBattleAnimArgs[3] = -gBattleAnimArgs[3]; - if ((sprite->data[7] & 0x8000) && !(gBattlerPositions[gBattleAnimAttacker] & 1)) + if ((sprite->data[7] & 0x8000) && (gBattlerPositions[gBattleAnimAttacker] & BIT_SIDE) == B_SIDE_PLAYER) sprite->subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1; sprite->data[6] = 1; diff --git a/src/international_string_util.c b/src/international_string_util.c index 9dc795dd0..ec5057359 100644 --- a/src/international_string_util.c +++ b/src/international_string_util.c @@ -45,7 +45,7 @@ int GetMaxWidthInMenuTable(const struct MenuAction *str, int arg1) var = stringWidth; } - return convert_pixel_width_to_tile_width(var); + return ConvertPixelWidthToTileWidth(var); } int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2) @@ -59,7 +59,7 @@ int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2) var = stringWidth; } - return convert_pixel_width_to_tile_width(var); + return ConvertPixelWidthToTileWidth(var); } int Intl_GetListMenuWidth(const struct ListMenuTemplate *listMenu) diff --git a/src/item_menu.c b/src/item_menu.c index 5b47a567b..12f03b328 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -118,9 +118,9 @@ void sub_81AD9C0(u8); void sub_81ADB14(u8); void sub_81ADA7C(u8); void sub_81ADC0C(u8); -void bag_menu_leave_maybe_3(void); -void bag_menu_leave_maybe_2(void); void bag_menu_leave_maybe(void); +void CB2_FavorLadyExitBagMenu(void); +void CB2_QuizLadyExitBagMenu(void); void sub_81ABA6C(void); static void SetPocketListPositions(void); void sub_81ABAE0(void); @@ -493,20 +493,20 @@ void sub_81AAC14(void) void sub_81AAC28(void) { - GoToBagMenu(RETURN_LOCATION_FIELD_6, POCKETS_COUNT, bag_menu_leave_maybe_3); + GoToBagMenu(RETURN_LOCATION_FIELD_6, POCKETS_COUNT, bag_menu_leave_maybe); gSpecialVar_0x8005 = 0; gSpecialVar_Result = 0; } -void sub_81AAC50(void) +void FavorLadyOpenBagMenu(void) { - GoToBagMenu(RETURN_LOCATION_FIELD_4, POCKETS_COUNT, bag_menu_leave_maybe_2); + GoToBagMenu(RETURN_LOCATION_FIELD_4, POCKETS_COUNT, CB2_FavorLadyExitBagMenu); gSpecialVar_Result = 0; } -void sub_81AAC70(void) +void QuizLadyOpenBagMenu(void) { - GoToBagMenu(RETURN_LOCATION_FIELD_5, POCKETS_COUNT, bag_menu_leave_maybe); + GoToBagMenu(RETURN_LOCATION_FIELD_5, POCKETS_COUNT, CB2_QuizLadyExitBagMenu); gSpecialVar_Result = 0; } @@ -2202,7 +2202,7 @@ void unknown_ItemMenu_Show(u8 taskId) unknown_ItemMenu_Confirm(taskId); } -void bag_menu_leave_maybe_3(void) +void bag_menu_leave_maybe(void) { gFieldCallback = Apprentice_EnableBothScriptContexts; SetMainCallback2(CB2_ReturnToField); @@ -2216,9 +2216,9 @@ void unknown_ItemMenu_Give2(u8 taskId) unknown_ItemMenu_Confirm(taskId); } -void bag_menu_leave_maybe_2(void) +void CB2_FavorLadyExitBagMenu(void) { - gFieldCallback = sub_818DEF4; + gFieldCallback = FieldCallback_FavorLadyEnableScriptContexts; SetMainCallback2(CB2_ReturnToField); } @@ -2229,9 +2229,9 @@ void unknown_ItemMenu_Confirm2(u8 taskId) unknown_ItemMenu_Confirm(taskId); } -void bag_menu_leave_maybe(void) +void CB2_QuizLadyExitBagMenu(void) { - gFieldCallback = sub_818E564; + gFieldCallback = FieldCallback_QuizLadyEnableScriptContexts; SetMainCallback2(CB2_ReturnToField); } diff --git a/asm/libagbsyscall.s b/src/libagbsyscall.s index d5639f689..d5639f689 100644 --- a/asm/libagbsyscall.s +++ b/src/libagbsyscall.s diff --git a/asm/libgcnmultiboot.s b/src/libgcnmultiboot.s index 0e418e51f..0e418e51f 100644 --- a/asm/libgcnmultiboot.s +++ b/src/libgcnmultiboot.s diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c index dc38d8848..011d9fdfd 100644 --- a/src/lilycove_lady.c +++ b/src/lilycove_lady.c @@ -1,7 +1,3 @@ -// -// Created by Scott Norton on 9/19/17. -// - #include "global.h" #include "main.h" #include "overworld.h" @@ -18,215 +14,25 @@ #include "text.h" #include "easy_chat.h" #include "lilycove_lady.h" - -static void SetLilycoveQuizLady(void); -static void SetLilycoveFavourLady(void); -static void SetLilycoveContestLady(void); -static void sub_818E004(void); -static void sub_818DBC4(void); -static void sub_818E674(void); -static u8 sub_818E13C(void); -static bool8 sub_818E1F4(void); -static u8 sub_818E258(const u8 *); - -extern const u8 gText_Lady2[]; - -static const u16 sUnknown_0860B074[] = { - 0x62, 0xcb, 0xdc, 0xcc, 0xd1 -}; -static const u16 sUnknown_0860B07E[] = { - 0x1a, 0x14, 0x0a -}; - -static const u16 Unknown_0860B084[] = { - 0x101b, 0x1623, 0x1812, 0x102c, 0x020e, 0x0c03, 0x1a0b, 0x0210, 0x020d -}; - -static const u16 Unknown_0860B096[] = { - 0x101b, 0x1013, 0x1020, 0x1a0f, 0x020c, 0x0c03, 0x0211, 0x0203, 0x0400 -}; - -static const u16 Unknown_0860B0A8[] = { - 0x0e0f, 0x1018, 0x020e, 0x0204, 0x0c03, 0xffff, 0x0212, 0x0451, 0x0463 -}; - -static const u16 Unknown_0860B0BA[] = { - 0x101b, 0x100b, 0x0e0d, 0x141a, 0x181d, 0x0c03, 0x141e, 0x1a26, 0x1823 -}; - -static const u16 Unknown_0860B0CC[] = { - 0x101b, 0x181d, 0x1018, 0x0a02, 0x2014, 0x0c03, 0x0208, 0x1824, 0x181c -}; - -static const u16 Unknown_0860B0DE[] = { - 0x101b, 0x1000, 0x1c19, 0x265d, 0x0c03, 0xffff, 0x0447, 0x045d, 0x042c -}; - -static const u16 Unknown_0860B0F0[] = { - 0x101b, 0x1034, 0x1e11, 0x100b, 0x1a08, 0x0c03, 0x044b, 0x0446, 0x040a -}; - -static const u16 Unknown_0860B102[] = { - 0x101b, 0x1000, 0x274f, 0x0626, 0x0c03, 0xffff, 0x0442, 0x0411, 0x0450 -}; - -static const u16 Unknown_0860B114[] = { - 0x101b, 0x1000, 0x1c19, 0x043c, 0x0c03, 0xffff, 0x0421, 0x0464, 0x0435 -}; - -static const u16 Unknown_0860B126[] = { - 0x101b, 0x1203, 0x1030, 0x0207, 0x0c03, 0xffff, 0x0210, 0x020e, 0x020d -}; - -static const u16 Unknown_0860B138[] = { - 0x101b, 0x1623, 0x0a05, 0x020e, 0x0c03, 0xffff, 0x1a25, 0x181a, 0x181b -}; - -static const u16 Unknown_0860B14A[] = { - 0x101b, 0x1823, 0x1603, 0x0a02, 0x1812, 0x0c03, 0x1a15, 0x1a23, 0x181b -}; - -static const u16 Unknown_0860B15C[] = { - 0x1020, 0x020e, 0x1010, 0x1043, 0x1e0f, 0x0c03, 0x181c, 0x1a24, 0x1816 -}; - -static const u16 Unknown_0860B16E[] = { - 0x0446, 0x100b, 0x0620, 0x061c, 0x101b, 0x0c03, 0x0420, 0x0426, 0xffff -}; - -static const u16 Unknown_0860B180[] = { - 0x0400, 0x100b, 0x0639, 0x061c, 0x101b, 0x0c03, 0x040e, 0x0410, 0xffff -}; - -static const u16 Unknown_0860B192[] = { - 0x041f, 0x100b, 0x0639, 0x061c, 0x101b, 0x0c03, 0x0445, 0x0400, 0xffff -}; - -static const u16 *const gUnknown_0860B1A4[] = { - Unknown_0860B084, - Unknown_0860B096, - Unknown_0860B0A8, - Unknown_0860B0BA, - Unknown_0860B0CC, - Unknown_0860B0DE, - Unknown_0860B0F0, - Unknown_0860B102, - Unknown_0860B114, - Unknown_0860B126, - Unknown_0860B138, - Unknown_0860B14A, - Unknown_0860B15C, - Unknown_0860B16E, - Unknown_0860B180, - Unknown_0860B192 -}; - -static const u16 sUnknown_0860B1E4[] = { - 0x0210, 0x0400, 0x0212, 0x1a26, 0x0208, 0x045d, 0x040a, 0x0411, 0x0464, 0x020e, 0x1a25, 0x181b, 0x1a24, 0x0420, 0x0410, 0x0400 -}; - -static const u16 sUnknown_0860B204[] = { - 0x007b, 0x007f, 0x0081, 0x0023, 0x0023, 0x0023, 0x00a5, 0x00a7, 0x00a6, 0x000b, 0x012f, 0x006b, 0x006d, 0x0044, 0x0044, 0x000c -}; - -extern const u8 gUnknown_085EEB83[]; -extern const u8 gUnknown_085EEB8C[]; -extern const u8 gUnknown_085EEB95[]; -extern const u8 gUnknown_085EEB9E[]; -extern const u8 gUnknown_085EEBA4[]; -extern const u8 gUnknown_085EEBAB[]; - -static const u8 *const gUnknown_0860B224[] = { - gUnknown_085EEB83, - gUnknown_085EEB8C, - gUnknown_085EEB95, - gUnknown_085EEB9E, - gUnknown_085EEBA4, - gUnknown_085EEBAB -}; - -static const u16 Unknown_0860B23C[] = { - 0x0056, 0x0053, 0x0054, 0x000e, 0x0012, 0x000f, 0x00a7, 0x0011, 0x0010, 0x0018, 0x0019, 0x001e, 0x0000 -}; - -static const u16 Unknown_0860B256[] = { - 0x0051, 0x006a, 0x006b, 0x00cc, 0x00c2, 0x002f, 0x0067, 0x0068, 0x0087, 0x0089, 0x008b, 0x009d, 0x00a0, 0x00a5, 0x0004, 0x0002, 0x0000 -}; - -static const u16 Unknown_0860B278[] = { - 0x0021, 0x000d, 0x001a, 0x001b, 0x001c, 0x00cc, 0x00ca, 0x0026, 0x0086, 0x0096, 0x0097, 0x009a, 0x00a2, 0x00a6, 0x0000 -}; - -static const u16 Unknown_0860B296[] = { - 0x0020, 0x004d, 0x004b, 0x004c, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x006e, 0x005d, 0x006c, 0x006d, 0x006a, 0x006b, 0x00d6, 0x00bc, 0x00b3, 0x000b, 0x000c, 0x0000 -}; - -static const u16 Unknown_0860B2C0[] = { - 0x001f, 0x0013, 0x0014, 0x004a, 0x004e, 0x0049, 0x00a5, 0x00c8, 0x0067, 0x006f, 0x0000 -}; - -static const u16 Unknown_0860B2D6[] = { - 0x00b7, 0x00d3, 0x00d2, 0x00d8, 0x009e, 0x00a6, 0x00ab, 0x00aa, 0x006c, 0x006d, 0x0000 -}; - -static const u16 *const gUnknown_0860B2EC[] = { - Unknown_0860B23C, - Unknown_0860B256, - Unknown_0860B278, - Unknown_0860B296, - Unknown_0860B2C0, - Unknown_0860B2D6 -}; - -static const u16 sUnknown_0860B304[] = { - 0x0b, 0x6e, 0x40, 0x6f, 0x44, 0x47 -}; - -extern const u8 gUnknown_085EEB2B[]; -extern const u8 gUnknown_085EEB34[]; -extern const u8 gUnknown_085EEB3A[]; -extern const u8 gUnknown_085EEB41[]; -extern const u8 gUnknown_085EEB4A[]; -extern const u8 gUnknown_085EEB51[]; -extern const u8 gUnknown_085EEB5A[]; -extern const u8 gUnknown_085EEB61[]; -extern const u8 gUnknown_085EEB6A[]; -extern const u8 gUnknown_085EEB74[]; -extern const u8 gUnknown_085EADA4[]; -extern const u8 gUnknown_085EADB5[]; -extern const u8 gUnknown_085EADC4[]; -extern const u8 gUnknown_085EADD5[]; -extern const u8 gUnknown_085EADE7[]; - -static const u8 *const gUnknown_0860B310[] = { - gUnknown_085EEB2B, - gUnknown_085EEB34, - gUnknown_085EEB3A, - gUnknown_085EEB41, - gUnknown_085EEB4A -}; -static const u8 *const gUnknown_0860B324[] = { - gUnknown_085EEB51, - gUnknown_085EEB5A, - gUnknown_085EEB61, - gUnknown_085EEB6A, - gUnknown_085EEB74 -}; -static const u8 *const gUnknown_0860B338[] = { - gUnknown_085EADA4, - gUnknown_085EADB5, - gUnknown_085EADC4, - gUnknown_085EADD5, - gUnknown_085EADE7 -}; - -static const u16 sUnknown_0860B34C[] = { - 0x0120, 0x013b, 0x011e, 0x013d, 0x0019 -}; - -static EWRAM_DATA struct LilycoveLadyFavour *gUnknown_0203CD64 = NULL; -static EWRAM_DATA struct LilycoveLadyQuiz *gUnknown_0203CD68 = NULL; -static EWRAM_DATA struct LilycoveLadyContest *gUnknown_0203CD6C = NULL; +#include "contest.h" +#include "strings.h" +#include "constants/lilycove_lady.h" + +#include "data/lilycove_lady.h" + +static void InitLilycoveQuizLady(void); +static void InitLilycoveFavorLady(void); +static void InitLilycoveContestLady(void); +static void ResetQuizLadyForRecordMix(void); +static void ResetFavorLadyForRecordMix(void); +static void ResetContestLadyForRecordMix(void); +static u8 BufferQuizAuthorName(void); +static bool8 IsQuizTrainerIdNotPlayer(void); +static u8 GetPlayerNameLength(const u8 *); + +static EWRAM_DATA struct LilycoveLadyFavor *sFavorLadyPtr = NULL; +static EWRAM_DATA struct LilycoveLadyQuiz *sQuizLadyPtr = NULL; +static EWRAM_DATA struct LilycoveLadyContest *sContestLadyPtr = NULL; extern EWRAM_DATA u16 gSpecialVar_ItemId; @@ -235,15 +41,15 @@ u8 GetLilycoveLadyId(void) return gSaveBlock1Ptr->lilycoveLady.id; } -void sub_818D9C0(void) +void SetLilycoveLadyGfx(void) { LilycoveLady *lilycoveLady; - VarSet(VAR_OBJ_GFX_ID_0, sUnknown_0860B07E[GetLilycoveLadyId()]); + VarSet(VAR_OBJ_GFX_ID_0, sLilycoveLadyGfxId[GetLilycoveLadyId()]); if (GetLilycoveLadyId() == LILYCOVE_LADY_CONTEST) { lilycoveLady = &gSaveBlock1Ptr->lilycoveLady; - VarSet(VAR_OBJ_GFX_ID_1, sUnknown_0860B074[lilycoveLady->contest.category]); + VarSet(VAR_OBJ_GFX_ID_1, sContestLadyMonGfxId[lilycoveLady->contest.category]); gSpecialVar_Result = TRUE; } else @@ -252,718 +58,722 @@ void sub_818D9C0(void) } } -void SetLilycoveLady(void) +void InitLilycoveLady(void) { - u16 id; - - id = ((gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0]); + u16 id = ((gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0]); id %= 6; id >>= 1; switch (id) { case LILYCOVE_LADY_QUIZ: - SetLilycoveQuizLady(); + InitLilycoveQuizLady(); break; - case LILYCOVE_LADY_FAVOUR: - SetLilycoveFavourLady(); + case LILYCOVE_LADY_FAVOR: + InitLilycoveFavorLady(); break; case LILYCOVE_LADY_CONTEST: - SetLilycoveContestLady(); + InitLilycoveContestLady(); break; } } -void sub_818DA78(void) +void ResetLilycoveLadyForRecordMix(void) { switch (GetLilycoveLadyId()) { case LILYCOVE_LADY_QUIZ: - sub_818E004(); + ResetQuizLadyForRecordMix(); break; - case LILYCOVE_LADY_FAVOUR: - sub_818DBC4(); + case LILYCOVE_LADY_FAVOR: + ResetFavorLadyForRecordMix(); break; case LILYCOVE_LADY_CONTEST: - sub_818E674(); + ResetContestLadyForRecordMix(); break; } } -void SetLilycoveLadyRandomly(void) +// Unused +void InitLilycoveLadyRandomly(void) { - u8 id; + u8 lady = Random() % LILYCOVE_LADY_COUNT; - id = Random() % 3; - switch (id) + switch (lady) { case LILYCOVE_LADY_QUIZ: - SetLilycoveQuizLady(); + InitLilycoveQuizLady(); break; - case LILYCOVE_LADY_FAVOUR: - SetLilycoveFavourLady(); + case LILYCOVE_LADY_FAVOR: + InitLilycoveFavorLady(); break; case LILYCOVE_LADY_CONTEST: - SetLilycoveContestLady(); + InitLilycoveContestLady(); break; } } -void sub_818DAEC(void) +void Script_GetLilycoveLadyId(void) { gSpecialVar_Result = GetLilycoveLadyId(); } -static u8 sub_818DB04(const u16 *data) +static u8 GetNumAcceptedItems(const u16 *itemsArray) { - u8 len; + u8 items; - for (len = 0; *data != 0; len ++, data ++); - return len; + for (items = 0; *itemsArray != ITEM_NONE; items ++, itemsArray ++); + return items; } -static void sub_818DB20(void) +static void FavorLadyPickFavorAndBestItem(void) { - u8 size; - u8 idx; + u8 numItems; + u8 bestItem; - gUnknown_0203CD64->unk_00c = Random() % 6; - size = sub_818DB04(gUnknown_0860B2EC[gUnknown_0203CD64->unk_00c]); - idx = Random() % size; - gUnknown_0203CD64->unk_010 = gUnknown_0860B2EC[gUnknown_0203CD64->unk_00c][idx]; + sFavorLadyPtr->favorId = Random() % ARRAY_COUNT(sFavorLadyRequests); + numItems = GetNumAcceptedItems(sFavorLadyAcceptedItemLists[sFavorLadyPtr->favorId]); + bestItem = Random() % numItems; + sFavorLadyPtr->bestItem = sFavorLadyAcceptedItemLists[sFavorLadyPtr->favorId][bestItem]; } -static void SetLilycoveFavourLady(void) +static void InitLilycoveFavorLady(void) { - gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour; - gUnknown_0203CD64->id = LILYCOVE_LADY_FAVOUR; - gUnknown_0203CD64->phase = 0; - gUnknown_0203CD64->playerName[0] = EOS; - gUnknown_0203CD64->unk_002 = 0; - gUnknown_0203CD64->unk_003= 0; - gUnknown_0203CD64->itemId = ITEM_NONE; - gUnknown_0203CD64->language = gGameLanguage; - sub_818DB20(); + sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; + sFavorLadyPtr->id = LILYCOVE_LADY_FAVOR; + sFavorLadyPtr->state = LILYCOVE_LADY_STATE_READY; + sFavorLadyPtr->playerName[0] = EOS; + sFavorLadyPtr->likedItem = FALSE; + sFavorLadyPtr->numItemsGiven = 0; + sFavorLadyPtr->itemId = ITEM_NONE; + sFavorLadyPtr->language = gGameLanguage; + FavorLadyPickFavorAndBestItem(); } -static void sub_818DBC4(void) +static void ResetFavorLadyForRecordMix(void) { - gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour; - gUnknown_0203CD64->id = LILYCOVE_LADY_FAVOUR; - gUnknown_0203CD64->phase = 0; + sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; + sFavorLadyPtr->id = LILYCOVE_LADY_FAVOR; + sFavorLadyPtr->state = LILYCOVE_LADY_STATE_READY; } -u8 sub_818DBE8(void) +u8 GetFavorLadyState(void) { - gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour; - if (gUnknown_0203CD64->phase == 2) + sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; + if (sFavorLadyPtr->state == LILYCOVE_LADY_STATE_PRIZE) { - return 2; + return LILYCOVE_LADY_STATE_PRIZE; } - else if (gUnknown_0203CD64->phase == 1) + else if (sFavorLadyPtr->state == LILYCOVE_LADY_STATE_COMPLETED) { - return 1; + return LILYCOVE_LADY_STATE_COMPLETED; } else { - return 0; + return LILYCOVE_LADY_STATE_READY; } } -static const u8 *sub_818DC1C(u8 idx) +static const u8 *GetFavorLadyRequest(u8 idx) { - return gUnknown_0860B224[idx]; + return sFavorLadyRequests[idx]; } -void sub_818DC2C(void) +void BufferFavorLadyRequest(void) { - gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour; - StringCopy(gStringVar1, sub_818DC1C(gUnknown_0203CD64->unk_00c)); + sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; + StringCopy(gStringVar1, GetFavorLadyRequest(sFavorLadyPtr->favorId)); } -bool8 sub_818DC60(void) +bool8 HasAnotherPlayerGivenFavorLadyItem(void) { - gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour; - if (gUnknown_0203CD64->playerName[0] != EOS) + sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; + if (sFavorLadyPtr->playerName[0] != EOS) { - StringCopy7(gStringVar3, gUnknown_0203CD64->playerName); - ConvertInternationalString(gStringVar3, gUnknown_0203CD64->language); + StringCopy7(gStringVar3, sFavorLadyPtr->playerName); + ConvertInternationalString(gStringVar3, sFavorLadyPtr->language); return TRUE; } return FALSE; } -static void sub_818DCAC(u8 *dest, u16 itemId) +static void BufferItemName(u8 *dest, u16 itemId) { StringCopy(dest, ItemId_GetName(itemId)); } -void sub_818DCC8(void) +void BufferFavorLadyItemName(void) { - gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour; - sub_818DCAC(gStringVar2, gUnknown_0203CD64->itemId); + sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; + BufferItemName(gStringVar2, sFavorLadyPtr->itemId); } -static void sub_818DCF4(const u8 *src, u8 *dest) +static void SetFavorLadyPlayerName(const u8 *src, u8 *dest) { memset(dest, 0xFF, 8); StringCopy7(dest, src); } -void sub_818DD14(void) +void BufferFavorLadyPlayerName(void) { - gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour; - sub_818DCF4(gUnknown_0203CD64->playerName, gStringVar3); - ConvertInternationalString(gStringVar3, gUnknown_0203CD64->language); + sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; + SetFavorLadyPlayerName(sFavorLadyPtr->playerName, gStringVar3); + ConvertInternationalString(gStringVar3, sFavorLadyPtr->language); } -bool8 sub_818DD54(void) +// Only used to determine if a record-mixed player had given her an item she liked +bool8 DidFavorLadyLikeItem(void) { - gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour; - return gUnknown_0203CD64->unk_002 ? TRUE : FALSE; + sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; + return sFavorLadyPtr->likedItem ? TRUE : FALSE; } -void sub_818DD78(void) +void Script_FavorLadyOpenBagMenu(void) { - sub_81AAC50(); + FavorLadyOpenBagMenu(); } -static bool8 sub_818DD84(u16 itemId) +static bool8 DoesFavorLadyLikeItem(u16 itemId) { - u8 len; + u8 numItems; u8 i; - bool8 response; - - gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour; - len = sub_818DB04(gUnknown_0860B2EC[gUnknown_0203CD64->unk_00c]); - gUnknown_0203CD64->phase = 1; - sub_818DCAC(gStringVar2, itemId); - gUnknown_0203CD64->itemId = itemId; - sub_818DCF4(gSaveBlock2Ptr->playerName, gUnknown_0203CD64->playerName); - gUnknown_0203CD64->language = gGameLanguage; - response = FALSE; - for (i = 0; i < len; i ++) - { - if (gUnknown_0860B2EC[gUnknown_0203CD64->unk_00c][i] == itemId) + bool8 likedItem; + + sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; + numItems = GetNumAcceptedItems(sFavorLadyAcceptedItemLists[sFavorLadyPtr->favorId]); + sFavorLadyPtr->state = LILYCOVE_LADY_STATE_COMPLETED; + BufferItemName(gStringVar2, itemId); + sFavorLadyPtr->itemId = itemId; + SetFavorLadyPlayerName(gSaveBlock2Ptr->playerName, sFavorLadyPtr->playerName); + sFavorLadyPtr->language = gGameLanguage; + likedItem = FALSE; + for (i = 0; i < numItems; i ++) + { + if (sFavorLadyAcceptedItemLists[sFavorLadyPtr->favorId][i] == itemId) { - response = TRUE; - gUnknown_0203CD64->unk_003 ++; - gUnknown_0203CD64->unk_002 = 1; - if (gUnknown_0203CD64->unk_010 == itemId) + likedItem = TRUE; + sFavorLadyPtr->numItemsGiven++; + sFavorLadyPtr->likedItem = TRUE; + if (sFavorLadyPtr->bestItem == itemId) { - gUnknown_0203CD64->unk_003 = 5; + sFavorLadyPtr->numItemsGiven = LILYCOVE_LADY_GIFT_THRESHOLD; } break; } - gUnknown_0203CD64->unk_002 = 0; + sFavorLadyPtr->likedItem = FALSE; } - return response; + return likedItem; } -bool8 sub_818DE44(void) +bool8 Script_DoesFavorLadyLikeItem(void) { - return sub_818DD84(gSpecialVar_ItemId); + return DoesFavorLadyLikeItem(gSpecialVar_ItemId); } -bool8 sub_818DE5C(void) +bool8 IsFavorLadyThresholdMet(void) { - u8 checkval; + u8 numItemsGiven; - gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour; - checkval = gUnknown_0203CD64->unk_003; - return checkval < 5 ? FALSE : TRUE; + sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; + numItemsGiven = sFavorLadyPtr->numItemsGiven; + return numItemsGiven < LILYCOVE_LADY_GIFT_THRESHOLD ? FALSE : TRUE; } -static void sub_818DE88(u16 itemId) +static void FavorLadyBufferPrizeName(u16 prize) { - sub_818DCAC(gStringVar2, itemId); + BufferItemName(gStringVar2, prize); } -u16 sub_818DEA0(void) +u16 FavorLadyGetPrize(void) { - u16 itemId; + u16 prize; - gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour; - itemId = sUnknown_0860B304[gUnknown_0203CD64->unk_00c]; - sub_818DE88(itemId); - gUnknown_0203CD64->phase = 2; - return itemId; + sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor; + prize = sFavorLadyPrizes[sFavorLadyPtr->favorId]; + FavorLadyBufferPrizeName(prize); + sFavorLadyPtr->state = LILYCOVE_LADY_STATE_PRIZE; + return prize; } -void sub_818DEDC(void) +void SetFavorLadyState_Complete(void) { - SetLilycoveFavourLady(); - gUnknown_0203CD64->phase = 1; + InitLilycoveFavorLady(); + sFavorLadyPtr->state = LILYCOVE_LADY_STATE_COMPLETED; } -void sub_818DEF4(void) +void FieldCallback_FavorLadyEnableScriptContexts(void) { EnableBothScriptContexts(); } -static void sub_818DF00(void) +static void QuizLadyPickQuestion(void) { - u8 v0; + u8 questionId; u8 i; - v0 = Random() % 16; - for (i = 0; i < 9; i ++) + questionId = Random() % ARRAY_COUNT(sQuizLadyQuizQuestions); + for (i = 0; i < QUIZ_QUESTION_LEN; i ++) { - gUnknown_0203CD68->unk_002[i] = gUnknown_0860B1A4[v0][i]; + sQuizLadyPtr->question[i] = sQuizLadyQuizQuestions[questionId][i]; } - gUnknown_0203CD68->unk_014 = sUnknown_0860B1E4[v0]; - gUnknown_0203CD68->itemId = sUnknown_0860B204[v0]; - gUnknown_0203CD68->unk_02b = v0; - gUnknown_0203CD68->playerName[0] = EOS; + sQuizLadyPtr->correctAnswer = sQuizLadyQuizAnswers[questionId]; + sQuizLadyPtr->prize = sQuizLadyPrizes[questionId]; + sQuizLadyPtr->questionId = questionId; + sQuizLadyPtr->playerName[0] = EOS; } -static void SetLilycoveQuizLady(void) +static void InitLilycoveQuizLady(void) { u8 i; - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - gUnknown_0203CD68->id = LILYCOVE_LADY_QUIZ; - gUnknown_0203CD68->phase = 0; - for (i = 0; i < 9; i ++) + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + sQuizLadyPtr->id = LILYCOVE_LADY_QUIZ; + sQuizLadyPtr->state = LILYCOVE_LADY_STATE_READY; + for (i = 0; i < QUIZ_QUESTION_LEN; i ++) { - gUnknown_0203CD68->unk_002[i] = -1; + sQuizLadyPtr->question[i] = -1; } - gUnknown_0203CD68->unk_014 = -1; - gUnknown_0203CD68->unk_016 = -1; - for (i = 0; i < 4; i ++) + sQuizLadyPtr->correctAnswer = -1; + sQuizLadyPtr->playerAnswer = -1; + for (i = 0; i < TRAINER_ID_LENGTH; i ++) { - gUnknown_0203CD68->playerTrainerId[i] = 0; + sQuizLadyPtr->playerTrainerId[i] = 0; } - gUnknown_0203CD68->itemId = ITEM_NONE; - gUnknown_0203CD68->unk_02a = 0; - gUnknown_0203CD68->unk_02c = 0x10; - gUnknown_0203CD68->language = gGameLanguage; - sub_818DF00(); + sQuizLadyPtr->prize = ITEM_NONE; + sQuizLadyPtr->waitingForChallenger = FALSE; + sQuizLadyPtr->prevQuestionId = ARRAY_COUNT(sQuizLadyQuizQuestions); + sQuizLadyPtr->language = gGameLanguage; + QuizLadyPickQuestion(); } -static void sub_818E004(void) +static void ResetQuizLadyForRecordMix(void) { - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - gUnknown_0203CD68->id = LILYCOVE_LADY_QUIZ; - gUnknown_0203CD68->phase = 0; - gUnknown_0203CD68->unk_02a = 0; - gUnknown_0203CD68->unk_016 = -1; + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + sQuizLadyPtr->id = LILYCOVE_LADY_QUIZ; + sQuizLadyPtr->state = LILYCOVE_LADY_STATE_READY; + sQuizLadyPtr->waitingForChallenger = FALSE; + sQuizLadyPtr->playerAnswer = -1; } -u8 sub_818E038(void) +u8 GetQuizLadyState(void) { - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - if (gUnknown_0203CD68->phase == 2) + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + if (sQuizLadyPtr->state == LILYCOVE_LADY_STATE_PRIZE) { - return 2; + return LILYCOVE_LADY_STATE_PRIZE; } - else if (gUnknown_0203CD68->phase == 1) + else if (sQuizLadyPtr->state == LILYCOVE_LADY_STATE_COMPLETED) { - return 1; + return LILYCOVE_LADY_STATE_COMPLETED; } else { - return 0; + return LILYCOVE_LADY_STATE_READY; } } -u8 sub_818E06C(void) +u8 GetQuizAuthor(void) { int i; int j; - u8 rv; + u8 authorNameId; struct LilycoveLadyQuiz *quiz; quiz = &gSaveBlock1Ptr->lilycoveLady.quiz; - if (sub_811F8D8(quiz->unk_014) == 0) - { - i = quiz->unk_02b; + if (sub_811F8D8(quiz->correctAnswer) == 0) + { + i = quiz->questionId; do { - if (++ i >= 16) + if (++ i >= (int)(ARRAY_COUNT(sQuizLadyQuizQuestions))) { i = 0; } - } while (sub_811F8D8(sUnknown_0860B1E4[i]) == 0); - for (j = 0; j < 9; j ++) + } while (sub_811F8D8(sQuizLadyQuizAnswers[i]) == 0); + for (j = 0; j < QUIZ_QUESTION_LEN; j ++) { - quiz->unk_002[j] = gUnknown_0860B1A4[i][j]; + quiz->question[j] = sQuizLadyQuizQuestions[i][j]; } - quiz->unk_014 = sUnknown_0860B1E4[i]; - quiz->itemId = sUnknown_0860B204[i]; - quiz->unk_02b = i; + quiz->correctAnswer = sQuizLadyQuizAnswers[i]; + quiz->prize = sQuizLadyPrizes[i]; + quiz->questionId = i; quiz->playerName[0] = EOS; } - rv = sub_818E13C(); - if (rv == 0) + authorNameId = BufferQuizAuthorName(); + if (authorNameId == QUIZ_AUTHOR_NAME_LADY) { - return 2; + return QUIZ_AUTHOR_LADY; } - else if (rv == 2 || sub_818E1F4()) + else if (authorNameId == QUIZ_AUTHOR_NAME_OTHER_PLAYER || IsQuizTrainerIdNotPlayer()) { - return 1; + return QUIZ_AUTHOR_OTHER_PLAYER; } else { - return 0; + return QUIZ_AUTHOR_PLAYER; } } -static u8 sub_818E13C(void) +static u8 BufferQuizAuthorName(void) { - u8 retval; - u8 len; + u8 authorNameId; + u8 nameLen; u8 i; - retval = 1; - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - if (gUnknown_0203CD68->playerName[0] == EOS) + authorNameId = QUIZ_AUTHOR_NAME_PLAYER; + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + if (sQuizLadyPtr->playerName[0] == EOS) { - StringCopy7(gStringVar1, gText_Lady2); - retval = 0; + StringCopy7(gStringVar1, gText_QuizLady_Lady); + authorNameId = QUIZ_AUTHOR_NAME_LADY; } else { - StringCopy7(gStringVar1, gUnknown_0203CD68->playerName); - ConvertInternationalString(gStringVar1, gUnknown_0203CD68->language); - len = sub_818E258(gUnknown_0203CD68->playerName); - if (len == sub_818E258(gSaveBlock2Ptr->playerName)) + StringCopy7(gStringVar1, sQuizLadyPtr->playerName); + ConvertInternationalString(gStringVar1, sQuizLadyPtr->language); + nameLen = GetPlayerNameLength(sQuizLadyPtr->playerName); + if (nameLen == GetPlayerNameLength(gSaveBlock2Ptr->playerName)) { - u8 *name = gUnknown_0203CD68->playerName; - for (i = 0; i < len; i ++) + u8 *name = sQuizLadyPtr->playerName; + for (i = 0; i < nameLen; i ++) { - name = gUnknown_0203CD68->playerName; + name = sQuizLadyPtr->playerName; if (name[i] != gSaveBlock2Ptr->playerName[i]) { - retval = 2; + authorNameId = QUIZ_AUTHOR_NAME_OTHER_PLAYER; break; } } } } - return retval; + return authorNameId; } -static u8 sub_818E1F4(void) +static bool8 IsQuizTrainerIdNotPlayer(void) { - bool8 response; + bool8 notPlayer; u8 i; - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - response = FALSE; - for (i = 0; i < 4; i ++) + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + notPlayer = FALSE; + for (i = 0; i < TRAINER_ID_LENGTH; i ++) { - if (gUnknown_0203CD68->playerTrainerId[i] != gSaveBlock2Ptr->playerTrainerId[i]) + if (sQuizLadyPtr->playerTrainerId[i] != gSaveBlock2Ptr->playerTrainerId[i]) { - response = TRUE; + notPlayer = TRUE; break; } } - return response; + return notPlayer; } -static u8 sub_818E258(const u8 *str) +static u8 GetPlayerNameLength(const u8 *playerName) { u8 len; const u8 *ptr; - for (len = 0, ptr = str; *ptr != EOS; len ++, ptr ++); + for (len = 0, ptr = playerName; *ptr != EOS; len ++, ptr ++); return len; } -void sub_818E274(void) +void BufferQuizPrizeName(void) { - StringCopy(gStringVar1, ItemId_GetName(gUnknown_0203CD68->itemId)); + StringCopy(gStringVar1, ItemId_GetName(sQuizLadyPtr->prize)); } -bool8 sub_818E298(void) +bool8 BufferQuizAuthorNameAndCheckIfLady(void) { - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - if (!sub_818E13C()) + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + if (BufferQuizAuthorName() == QUIZ_AUTHOR_NAME_LADY) { - gUnknown_0203CD68->language = gGameLanguage; + sQuizLadyPtr->language = gGameLanguage; return TRUE; } return FALSE; } -u8 sub_818E2D8(void) +bool8 IsQuizLadyWaitingForChallenger(void) { - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - return gUnknown_0203CD68->unk_02a; + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + return sQuizLadyPtr->waitingForChallenger; } -void sub_818E2FC(void) +void QuizLadyGetPlayerAnswer(void) { ShowEasyChatScreen(); } -bool8 sub_818E308(void) +bool8 IsQuizAnswerCorrect(void) { - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - CopyEasyChatWord(gStringVar1, gUnknown_0203CD68->unk_014); - CopyEasyChatWord(gStringVar2, gUnknown_0203CD68->unk_016); + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + CopyEasyChatWord(gStringVar1, sQuizLadyPtr->correctAnswer); + CopyEasyChatWord(gStringVar2, sQuizLadyPtr->playerAnswer); return StringCompare(gStringVar1, gStringVar2) ? FALSE : TRUE; } -void sub_818E358(void) +void BufferQuizPrizeItem(void) { - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - gSpecialVar_0x8005 = gUnknown_0203CD68->itemId; + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + gSpecialVar_0x8005 = sQuizLadyPtr->prize; } -void sub_818E37C(void) +void SetQuizLadyState_Complete(void) { - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - gUnknown_0203CD68->phase = 1; + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + sQuizLadyPtr->state = LILYCOVE_LADY_STATE_COMPLETED; } -void sub_818E39C(void) +void SetQuizLadyState_GivePrize(void) { - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - gUnknown_0203CD68->phase = 2; + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + sQuizLadyPtr->state = LILYCOVE_LADY_STATE_PRIZE; } -void sub_818E3BC(void) +void ClearQuizLadyPlayerAnswer(void) { - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - gUnknown_0203CD68->unk_016 = -1; + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + sQuizLadyPtr->playerAnswer = -1; } -void sub_818E3E0(void) +void Script_QuizLadyOpenBagMenu(void) { - sub_81AAC70(); + QuizLadyOpenBagMenu(); } -void sub_818E3EC(void) +void QuizLadyPickNewQuestion(void) { - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - if (sub_818E298()) + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + if (BufferQuizAuthorNameAndCheckIfLady()) { - gUnknown_0203CD68->unk_02c = gUnknown_0203CD68->unk_02b; + sQuizLadyPtr->prevQuestionId = sQuizLadyPtr->questionId; } else { - gUnknown_0203CD68->unk_02c = 0x10; + sQuizLadyPtr->prevQuestionId = ARRAY_COUNT(sQuizLadyQuizQuestions); } - sub_818DF00(); + QuizLadyPickQuestion(); } -void sub_818E430(void) +void ClearQuizLadyQuestionAndAnswer(void) { u8 i; - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - for (i = 0; i < 9; i ++) + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + for (i = 0; i < QUIZ_QUESTION_LEN; i ++) { - gUnknown_0203CD68->unk_002[i] = -1; + sQuizLadyPtr->question[i] = -1; } - gUnknown_0203CD68->unk_014 = -1; + sQuizLadyPtr->correctAnswer = -1; } -void sub_818E47C(void) +void QuizLadySetCustomQuestion(void) { gSpecialVar_0x8004 = EASY_CHAT_TYPE_QUIZ_SET_QUESTION; ShowEasyChatScreen(); } -void sub_818E490(void) +void QuizLadyTakePrizeForCustomQuiz(void) { RemoveBagItem(gSpecialVar_ItemId, 1); } -void sub_818E4A4(void) +void QuizLadyRecordCustomQuizData(void) { u8 i; - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - gUnknown_0203CD68->itemId = gSpecialVar_ItemId; - for (i = 0; i < 4; i ++) + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + sQuizLadyPtr->prize = gSpecialVar_ItemId; + for (i = 0; i < TRAINER_ID_LENGTH; i ++) { - gUnknown_0203CD68->playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; + sQuizLadyPtr->playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; } - StringCopy7(gUnknown_0203CD68->playerName, gSaveBlock2Ptr->playerName); - gUnknown_0203CD68->language = gGameLanguage; + StringCopy7(sQuizLadyPtr->playerName, gSaveBlock2Ptr->playerName); + sQuizLadyPtr->language = gGameLanguage; } -void sub_818E510(void) +void QuizLadySetWaitingForChallenger(void) { - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - gUnknown_0203CD68->unk_02a = 1; + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + sQuizLadyPtr->waitingForChallenger = TRUE; } -void sub_818E538(void) +void BufferQuizCorrectAnswer(void) { - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - CopyEasyChatWord(gStringVar3, gUnknown_0203CD68->unk_014); + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + CopyEasyChatWord(gStringVar3, sQuizLadyPtr->correctAnswer); } -void sub_818E564(void) + +void FieldCallback_QuizLadyEnableScriptContexts(void) { EnableBothScriptContexts(); } -void sub_818E570(const LilycoveLady *lilycoveLady) +void QuizLadyClearQuestionForRecordMix(const LilycoveLady *lilycoveLady) { u8 i; - gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz; - if (lilycoveLady->quiz.unk_02c < 16 && gUnknown_0203CD68->id == LILYCOVE_LADY_QUIZ) + sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; + if (lilycoveLady->quiz.prevQuestionId < ARRAY_COUNT(sQuizLadyQuizQuestions) + && sQuizLadyPtr->id == LILYCOVE_LADY_QUIZ) { for (i = 0; i < 4; i ++) { - if (lilycoveLady->quiz.unk_02c != gUnknown_0203CD68->unk_02b) + if (lilycoveLady->quiz.prevQuestionId != sQuizLadyPtr->questionId) { break; } - gUnknown_0203CD68->unk_02b = Random() % 16; + sQuizLadyPtr->questionId = Random() % ARRAY_COUNT(sQuizLadyQuizQuestions); } - if (lilycoveLady->quiz.unk_02c == gUnknown_0203CD68->unk_02b) + if (lilycoveLady->quiz.prevQuestionId == sQuizLadyPtr->questionId) { - gUnknown_0203CD68->unk_02b = (gUnknown_0203CD68->unk_02b + 1) % 16; + sQuizLadyPtr->questionId = (sQuizLadyPtr->questionId + 1) % (int)(ARRAY_COUNT(sQuizLadyQuizQuestions)); } - gUnknown_0203CD68->unk_02c = lilycoveLady->quiz.unk_02c; + sQuizLadyPtr->prevQuestionId = lilycoveLady->quiz.prevQuestionId; } } -static void sub_818E604(void) +static void ResetContestLadyContestData(void) { - gUnknown_0203CD6C->playerName[0] = EOS; - gUnknown_0203CD6C->fave_pkblk = 0; - gUnknown_0203CD6C->other_pkblk = 0; - gUnknown_0203CD6C->max_sheen = 0; - gUnknown_0203CD6C->category = Random() % 5; + sContestLadyPtr->playerName[0] = EOS; + sContestLadyPtr->numGoodPokeblocksGiven = 0; + sContestLadyPtr->numOtherPokeblocksGiven = 0; + sContestLadyPtr->maxSheen = 0; + sContestLadyPtr->category = Random() % CONTEST_CATEGORIES_COUNT; } -static void SetLilycoveContestLady(void) +static void InitLilycoveContestLady(void) { - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - gUnknown_0203CD6C->id = LILYCOVE_LADY_CONTEST; - gUnknown_0203CD6C->phase = 0; - sub_818E604(); - gUnknown_0203CD6C->language = gGameLanguage; + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + sContestLadyPtr->id = LILYCOVE_LADY_CONTEST; + sContestLadyPtr->givenPokeblock = FALSE; + ResetContestLadyContestData(); + sContestLadyPtr->language = gGameLanguage; } -static void sub_818E674(void) +static void ResetContestLadyForRecordMix(void) { - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - gUnknown_0203CD6C->id = LILYCOVE_LADY_CONTEST; - gUnknown_0203CD6C->phase = 0; - if (gUnknown_0203CD6C->fave_pkblk == 5 || gUnknown_0203CD6C->other_pkblk == 5) + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + sContestLadyPtr->id = LILYCOVE_LADY_CONTEST; + sContestLadyPtr->givenPokeblock = FALSE; + if (sContestLadyPtr->numGoodPokeblocksGiven == LILYCOVE_LADY_GIFT_THRESHOLD + || sContestLadyPtr->numOtherPokeblocksGiven == LILYCOVE_LADY_GIFT_THRESHOLD) { - sub_818E604(); + ResetContestLadyContestData(); } } -static void sub_818E6B0(u8 sheen) +static void ContestLadySavePlayerNameIfHighSheen(u8 sheen) { - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - if (gUnknown_0203CD6C->max_sheen <= sheen) + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + if (sContestLadyPtr->maxSheen <= sheen) { - gUnknown_0203CD6C->max_sheen = sheen; - memset(gUnknown_0203CD6C->playerName, EOS, sizeof(gUnknown_0203CD6C->playerName)); - memcpy(gUnknown_0203CD6C->playerName, gSaveBlock2Ptr->playerName, sizeof(gUnknown_0203CD6C->playerName)); - gUnknown_0203CD6C->language = gGameLanguage; + sContestLadyPtr->maxSheen = sheen; + memset(sContestLadyPtr->playerName, EOS, sizeof(sContestLadyPtr->playerName)); + memcpy(sContestLadyPtr->playerName, gSaveBlock2Ptr->playerName, sizeof(sContestLadyPtr->playerName)); + sContestLadyPtr->language = gGameLanguage; } } bool8 GivePokeblockToContestLady(struct Pokeblock *pokeblock) { - u8 sheen; - bool8 response; + u8 sheen = 0; + bool8 correctFlavor = FALSE; - sheen = 0; - response = FALSE; - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - switch (gUnknown_0203CD6C->category) + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + switch (sContestLadyPtr->category) { - case 0: + case CONTEST_CATEGORY_COOL: if (pokeblock->spicy != 0) { sheen = pokeblock->spicy; - response = TRUE; + correctFlavor = TRUE; } break; - case 1: + case CONTEST_CATEGORY_BEAUTY: if (pokeblock->dry != 0) { sheen = pokeblock->dry; - response = TRUE; + correctFlavor = TRUE; } break; - case 2: + case CONTEST_CATEGORY_CUTE: if (pokeblock->sweet != 0) { sheen = pokeblock->sweet; - response = TRUE; + correctFlavor = TRUE; } break; - case 3: + case CONTEST_CATEGORY_SMART: if (pokeblock->bitter != 0) { sheen = pokeblock->bitter; - response = TRUE; + correctFlavor = TRUE; } break; - case 4: + case CONTEST_CATEGORY_TOUGH: if (pokeblock->sour != 0) { sheen = pokeblock->sour; - response = TRUE; + correctFlavor = TRUE; } break; } - if (response == TRUE) + if (correctFlavor == TRUE) { - sub_818E6B0(sheen); - gUnknown_0203CD6C->fave_pkblk ++; + ContestLadySavePlayerNameIfHighSheen(sheen); + sContestLadyPtr->numGoodPokeblocksGiven++; } else { - gUnknown_0203CD6C->other_pkblk ++; + sContestLadyPtr->numOtherPokeblocksGiven++; } - return response; + return correctFlavor; } -static void sub_818E794(u8 *dest1, u8 *dest2) +static void BufferContestLadyCategoryAndMonName(u8 *dest1, u8 *dest2) { - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - StringCopy(dest1, gUnknown_0860B324[gUnknown_0203CD6C->category]); - StringCopy10(dest2, gUnknown_0860B310[gUnknown_0203CD6C->category]); + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + StringCopy(dest1, sContestLadyCategoryNames[sContestLadyPtr->category]); + StringCopy10(dest2, sContestLadyMonNames[sContestLadyPtr->category]); } -void sub_818E7E0(u8 *dest1, u8 *dest2) +void BufferContestLadyMonName(u8 *dest1, u8 *dest2) { - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - *dest1 = gUnknown_0203CD6C->category; - StringCopy(dest2, gUnknown_0860B310[gUnknown_0203CD6C->category]); + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + *dest1 = sContestLadyPtr->category; + StringCopy(dest2, sContestLadyMonNames[sContestLadyPtr->category]); } -void sub_818E81C(u8 *dest) +void BufferContestLadyPlayerName(u8 *dest) { - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - StringCopy(dest, gUnknown_0203CD6C->playerName); + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + StringCopy(dest, sContestLadyPtr->playerName); } -void sub_818E848(u8 *dest) +void BufferContestLadyLanguage(u8 *dest) { - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - *dest = gUnknown_0203CD6C->language; + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + *dest = sContestLadyPtr->language; } -void sub_818E868(u8 *dest, u8 category) +void BufferContestName(u8 *dest, u8 category) { - StringCopy(dest, gUnknown_0860B338[category]); + StringCopy(dest, sContestNames[category]); } +// used in tv.c to determine sTVShowState for Contest Lady show +// if return val is 1, sTVShowState is 1 +// if return val is 2, sTVShowState is 3 +// if return val is 0, sTVShowState is 2 u8 sub_818E880(void) { - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - if (gUnknown_0203CD6C->fave_pkblk >= 5) + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + if (sContestLadyPtr->numGoodPokeblocksGiven >= LILYCOVE_LADY_GIFT_THRESHOLD) { return 1; } - else if (gUnknown_0203CD6C->fave_pkblk == 0) + else if (sContestLadyPtr->numGoodPokeblocksGiven == 0) { return 2; } @@ -973,53 +783,54 @@ u8 sub_818E880(void) } } -bool8 sub_818E8B4(void) + +bool8 HasPlayerGivenContestLadyPokeblock(void) { - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - if (gUnknown_0203CD6C->phase == 1) + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + if (sContestLadyPtr->givenPokeblock == TRUE) { return TRUE; } return FALSE; } -bool8 sub_818E8E0(void) +bool8 ShouldContestLadyShowGoOnAir(void) { - bool8 response; + bool8 putOnAir = FALSE; - response = FALSE; - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - if (gUnknown_0203CD6C->fave_pkblk >= 5 || gUnknown_0203CD6C->other_pkblk >= 5) + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + if (sContestLadyPtr->numGoodPokeblocksGiven >= LILYCOVE_LADY_GIFT_THRESHOLD + || sContestLadyPtr->numOtherPokeblocksGiven >= LILYCOVE_LADY_GIFT_THRESHOLD) { - response = TRUE; + putOnAir = TRUE; } - return response; + return putOnAir; } -void sub_818E914(void) +void Script_BufferContestLadyCategoryAndMonName(void) { - sub_818E794(gStringVar2, gStringVar1); + BufferContestLadyCategoryAndMonName(gStringVar2, gStringVar1); } -void sub_818E92C(void) +void OpenPokeblockCaseForContestLady(void) { OpenPokeblockCase(3, CB2_ReturnToField); } -void sub_818E940(void) +void SetContestLadyGivenPokeblock(void) { - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - gUnknown_0203CD6C->phase = 1; + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + sContestLadyPtr->givenPokeblock = TRUE; } -void sub_818E960(void) +void GetContestLadyMonSpecies(void) { - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - gSpecialVar_0x8005 = sUnknown_0860B34C[gUnknown_0203CD6C->category]; + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + gSpecialVar_0x8005 = sContestLadyMonSpecies[sContestLadyPtr->category]; } -u8 sub_818E990(void) +u8 GetContestLadyCategory(void) { - gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest; - return gUnknown_0203CD6C->category; + sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest; + return sContestLadyPtr->category; } diff --git a/asm/m4a_1.s b/src/m4a_1.s index cab4ed174..cab4ed174 100644 --- a/asm/m4a_1.s +++ b/src/m4a_1.s diff --git a/src/match_call.c b/src/match_call.c index b02af9977..4b0134d2c 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -1290,7 +1290,7 @@ static bool32 sub_81963F0(u8 taskId) sub_81973A4(); playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0); EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]); - sub_80D338C(); + ScriptMovement_UnfreezeEventObjects(); UnfreezeEventObjects(); ScriptContext2_Disable(); } diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 64f04f3bc..a4d70c062 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -1155,7 +1155,7 @@ static void PrintStoryList(void) if (curWidth > width) width = curWidth; } - sStorytellerWindowId = CreateWindowFromRect(0, 0, convert_pixel_width_to_tile_width(width), GetFreeStorySlot() * 2 + 2); + sStorytellerWindowId = CreateWindowFromRect(0, 0, ConvertPixelWidthToTileWidth(width), GetFreeStorySlot() * 2 + 2); SetStandardWindowBorderStyle(sStorytellerWindowId, 0); for (i = 0; i < 4; i++) { diff --git a/src/mon_markings.c b/src/mon_markings.c index f8b128045..f4d6b3818 100644 --- a/src/mon_markings.c +++ b/src/mon_markings.c @@ -350,7 +350,7 @@ void sub_811FAA4(u8 markings, s16 x, s16 y) u16 i; sMenu->cursorPos = 0; sMenu->markings = markings; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_MON_MARKINGS; i++) sMenu->markingsArray[i] = (sMenu->markings >> i) & 1; sub_811FC80(x, y, sMenu->baseTileTag, sMenu->basePaletteTag); } @@ -371,7 +371,7 @@ void sub_811FAF8(void) DestroySprite(sMenu->menuWindowSprites[i]); sMenu->menuWindowSprites[i] = NULL; } - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_MON_MARKINGS; i++) { if (!sMenu->menuMarkingSprites[i]) return; @@ -422,7 +422,7 @@ bool8 sub_811FBA4(void) { case 4: sMenu->markings = 0; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_MON_MARKINGS; i++) sMenu->markings |= sMenu->markingsArray[i] << i; return FALSE; case 5: @@ -498,7 +498,7 @@ static void sub_811FC80(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag) sprTemplate.callback = sub_811FF40; sprTemplate.oam = &gUnknown_0859EE84; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_MON_MARKINGS; i++) { spriteId = CreateSprite(&sprTemplate, x + 32, y + 16 + 16 * i, 0); if (spriteId != MAX_SPRITES) diff --git a/src/mossdeep_gym.c b/src/mossdeep_gym.c index d8adbe0c6..880780638 100644 --- a/src/mossdeep_gym.c +++ b/src/mossdeep_gym.c @@ -55,7 +55,7 @@ void FinishMossdeepGymTiles(void) id = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0); EventObjectClearHeldMovementIfFinished(&gEventObjects[id]); - sub_80D338C(); + ScriptMovement_UnfreezeEventObjects(); } u16 MossdeepGym_MoveEvents(u8 arg0) diff --git a/src/move_relearner.c b/src/move_relearner.c index 0b0b4a5aa..867c6c995 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -154,7 +154,7 @@ static EWRAM_DATA struct { u8 state; u8 heartSpriteIds[16]; /*0x001*/ - u16 movesToLearn[4]; /*0x012*/ + u16 movesToLearn[MAX_MON_MOVES]; /*0x012*/ u8 filler1A[0x44 - 0x1A]; /*0x01A*/ u8 partyMon; /*0x044*/ u8 moveSlot; /*0x045*/ diff --git a/src/naming_screen.c b/src/naming_screen.c index 7da7d99b0..472489a26 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -541,16 +541,16 @@ static void DisplaySentToPCMessage(void) { u8 stringToDisplay = 0; - if (!sub_813B260()) + if (!IsDestinationBoxFull()) { - StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN))); + StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); StringCopy(gStringVar2, gNamingScreenData->destBuffer); } else { - StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN))); + StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); StringCopy(gStringVar2, gNamingScreenData->destBuffer); - StringCopy(gStringVar3, GetBoxNamePtr(get_unknown_box_id())); + StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon())); stringToDisplay = 2; } diff --git a/src/new_game.c b/src/new_game.c index ee67da9be..1021ea96c 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -81,7 +81,7 @@ u32 GetTrainerId(u8 *trainerId) void CopyTrainerId(u8 *dst, u8 *src) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < TRAINER_ID_LENGTH; i++) dst[i] = src[i]; } @@ -198,7 +198,7 @@ void NewGameInitData(void) ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags); ResetMiniGamesResults(); copy_strings_to_sav1(); - SetLilycoveLady(); + InitLilycoveLady(); ResetAllApprenticeData(); ClearRankingHallRecords(); InitMatchCallCounters(); diff --git a/src/option_menu.c b/src/option_menu.c index 3ffb2738f..e0473b5c3 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -48,6 +48,13 @@ enum WIN_OPTIONS }; +#define YPOS_TEXTSPEED (MENUITEM_TEXTSPEED * 16) +#define YPOS_BATTLESCENE (MENUITEM_BATTLESCENE * 16) +#define YPOS_BATTLESTYLE (MENUITEM_BATTLESTYLE * 16) +#define YPOS_SOUND (MENUITEM_SOUND * 16) +#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); @@ -80,13 +87,13 @@ static const u8 sEqualSignGfx[] = INCBIN_U8("graphics/misc/option_menu_equals_si static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = { - gText_TextSpeed, - gText_BattleScene, - gText_BattleStyle, - gText_Sound, - gText_ButtonMode, - gText_Frame, - gText_OptionMenuCancel, + [MENUITEM_TEXTSPEED] = gText_TextSpeed, + [MENUITEM_BATTLESCENE] = gText_BattleScene, + [MENUITEM_BATTLESTYLE] = gText_BattleStyle, + [MENUITEM_SOUND] = gText_Sound, + [MENUITEM_BUTTONMODE] = gText_ButtonMode, + [MENUITEM_FRAMETYPE] = gText_Frame, + [MENUITEM_CANCEL] = gText_OptionMenuCancel, }; static const struct WindowTemplate sOptionMenuWinTemplates[] = @@ -280,12 +287,12 @@ static void Task_OptionMenuProcessInput(u8 taskId) if (gTasks[taskId].data[TD_MENUSELECTION] > 0) gTasks[taskId].data[TD_MENUSELECTION]--; else - gTasks[taskId].data[TD_MENUSELECTION] = 6; + gTasks[taskId].data[TD_MENUSELECTION] = MENUITEM_CANCEL; HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); } else if (gMain.newKeys & DPAD_DOWN) { - if (gTasks[taskId].data[TD_MENUSELECTION] <= 5) + if (gTasks[taskId].data[TD_MENUSELECTION] < MENUITEM_CANCEL) gTasks[taskId].data[TD_MENUSELECTION]++; else gTasks[taskId].data[TD_MENUSELECTION] = 0; @@ -431,7 +438,7 @@ static void TextSpeed_DrawChoices(u8 selection) styles[2] = 0; styles[selection] = 1; - DrawOptionMenuChoice(gText_TextSpeedSlow, 104, 0, styles[0]); + DrawOptionMenuChoice(gText_TextSpeedSlow, 104, YPOS_TEXTSPEED, styles[0]); widthSlow = GetStringWidth(1, gText_TextSpeedSlow, 0); widthMid = GetStringWidth(1, gText_TextSpeedMid, 0); @@ -439,9 +446,9 @@ static void TextSpeed_DrawChoices(u8 selection) widthMid -= 94; xMid = (widthSlow - widthMid - widthFast) / 2 + 104; - DrawOptionMenuChoice(gText_TextSpeedMid, xMid, 0, styles[1]); + DrawOptionMenuChoice(gText_TextSpeedMid, xMid, YPOS_TEXTSPEED, styles[1]); - DrawOptionMenuChoice(gText_TextSpeedFast, GetStringRightAlignXOffset(1, gText_TextSpeedFast, 198), 0, styles[2]); + DrawOptionMenuChoice(gText_TextSpeedFast, GetStringRightAlignXOffset(1, gText_TextSpeedFast, 198), YPOS_TEXTSPEED, styles[2]); } static u8 BattleScene_ProcessInput(u8 selection) @@ -463,8 +470,8 @@ static void BattleScene_DrawChoices(u8 selection) styles[1] = 0; styles[selection] = 1; - DrawOptionMenuChoice(gText_BattleSceneOn, 104, 16, styles[0]); - DrawOptionMenuChoice(gText_BattleSceneOff, GetStringRightAlignXOffset(1, gText_BattleSceneOff, 198), 16, styles[1]); + DrawOptionMenuChoice(gText_BattleSceneOn, 104, YPOS_BATTLESCENE, styles[0]); + DrawOptionMenuChoice(gText_BattleSceneOff, GetStringRightAlignXOffset(1, gText_BattleSceneOff, 198), YPOS_BATTLESCENE, styles[1]); } static u8 BattleStyle_ProcessInput(u8 selection) @@ -486,8 +493,8 @@ static void BattleStyle_DrawChoices(u8 selection) styles[1] = 0; styles[selection] = 1; - DrawOptionMenuChoice(gText_BattleStyleShift, 104, 32, styles[0]); - DrawOptionMenuChoice(gText_BattleStyleSet, GetStringRightAlignXOffset(1, gText_BattleStyleSet, 198), 32, styles[1]); + DrawOptionMenuChoice(gText_BattleStyleShift, 104, YPOS_BATTLESTYLE, styles[0]); + DrawOptionMenuChoice(gText_BattleStyleSet, GetStringRightAlignXOffset(1, gText_BattleStyleSet, 198), YPOS_BATTLESTYLE, styles[1]); } static u8 Sound_ProcessInput(u8 selection) @@ -510,8 +517,8 @@ static void Sound_DrawChoices(u8 selection) styles[1] = 0; styles[selection] = 1; - DrawOptionMenuChoice(gText_SoundMono, 104, 48, styles[0]); - DrawOptionMenuChoice(gText_SoundStereo, GetStringRightAlignXOffset(1, gText_SoundStereo, 198), 48, styles[1]); + DrawOptionMenuChoice(gText_SoundMono, 104, YPOS_SOUND, styles[0]); + DrawOptionMenuChoice(gText_SoundStereo, GetStringRightAlignXOffset(1, gText_SoundStereo, 198), YPOS_SOUND, styles[1]); } static u8 FrameType_ProcessInput(u8 selection) @@ -568,8 +575,8 @@ static void FrameType_DrawChoices(u8 selection) text[i] = EOS; - DrawOptionMenuChoice(gText_FrameType, 104, 80, 0); - DrawOptionMenuChoice(text, 128, 80, 1); + DrawOptionMenuChoice(gText_FrameType, 104, YPOS_FRAMETYPE, 0); + DrawOptionMenuChoice(text, 128, YPOS_FRAMETYPE, 1); } static u8 ButtonMode_ProcessInput(u8 selection) @@ -605,7 +612,7 @@ static void ButtonMode_DrawChoices(u8 selection) styles[2] = 0; styles[selection] = 1; - DrawOptionMenuChoice(gText_ButtonTypeNormal, 104, 64, styles[0]); + DrawOptionMenuChoice(gText_ButtonTypeNormal, 104, YPOS_BUTTONMODE, styles[0]); widthNormal = GetStringWidth(1, gText_ButtonTypeNormal, 0); widthLR = GetStringWidth(1, gText_ButtonTypeLR, 0); @@ -613,9 +620,9 @@ static void ButtonMode_DrawChoices(u8 selection) widthLR -= 94; xLR = (widthNormal - widthLR - widthLA) / 2 + 104; - DrawOptionMenuChoice(gText_ButtonTypeLR, xLR, 64, styles[1]); + DrawOptionMenuChoice(gText_ButtonTypeLR, xLR, YPOS_BUTTONMODE, styles[1]); - DrawOptionMenuChoice(gText_ButtonTypeLEqualsA, GetStringRightAlignXOffset(1, gText_ButtonTypeLEqualsA, 198), 64, styles[2]); + DrawOptionMenuChoice(gText_ButtonTypeLEqualsA, GetStringRightAlignXOffset(1, gText_ButtonTypeLEqualsA, 198), YPOS_BUTTONMODE, styles[2]); } static void DrawTextOption(void) diff --git a/src/overworld.c b/src/overworld.c index cefbd8159..0cac8390a 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1759,7 +1759,7 @@ void CB2_ContinueSavedGame(void) static void FieldClearVBlankHBlankCallbacks(void) { - if (warp0_in_pokecenter() == TRUE) + if (UsedPokemonCenterWarp() == TRUE) CloseLink(); if (gWirelessCommType != 0) @@ -2435,7 +2435,7 @@ static void UpdateAllLinkPlayers(u16 *keys, s32 selfId) struct TradeRoomPlayer trainer; s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { u8 key = keys[i]; u16 setFacing = FACING_NONE; @@ -3026,7 +3026,7 @@ static s32 sub_80878E4(u8 linkPlayerId) static u8 GetLinkPlayerIdAt(s16 x, s16 y) { u8 i; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { if (gLinkPlayerEventObjects[i].active && (gLinkPlayerEventObjects[i].movementMode == 0 || gLinkPlayerEventObjects[i].movementMode == 2)) diff --git a/src/party_menu.c b/src/party_menu.c index dd0a4dabd..f4b749bde 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3650,7 +3650,7 @@ static u8 sub_81B31B0(u8 a) for (i = 0; i < gUnknown_0203CEC4->listSize; i++) { - u8 unk = (gUnknown_0203CEC4->actions[i] > 18) ? 4 : 3; + u8 unk = (gUnknown_0203CEC4->actions[i] >= MENU_FIELD_MOVES) ? 4 : 3; AddTextPrinterParameterized4(gUnknown_0203CEC4->windowId[0], 1, cursorDimension, (i * 16) + 1, fontAttribute, 0, sFontColorTable[unk], 0, sCursorOptions[gUnknown_0203CEC4->actions[i]].text); } diff --git a/src/pokeblock.c b/src/pokeblock.c index 0d8469132..30e630d9a 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -3,7 +3,6 @@ #include "battle.h" #include "battle_controllers.h" #include "battle_message.h" -#include "berry.h" #include "bg.h" #include "decompress.h" #include "event_data.h" @@ -30,6 +29,7 @@ #include "task.h" #include "text.h" #include "text_window.h" +#include "constants/berry.h" #include "constants/items.h" #include "constants/songs.h" #include "constants/rgb.h" diff --git a/src/pokedex.c b/src/pokedex.c index 0e532ed92..c1787ef6a 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4249,12 +4249,12 @@ u16 GetPokedexHeightWeight(u16 dexNum, u8 data) { switch (data) { - case 0: // height - return gPokedexEntries[dexNum].height; - case 1: // weight - return gPokedexEntries[dexNum].weight; - default: - return 1; + case 0: // height + return gPokedexEntries[dexNum].height; + case 1: // weight + return gPokedexEntries[dexNum].weight; + default: + return 1; } } @@ -4360,23 +4360,23 @@ u16 GetHoennPokedexCount(u8 caseID) return count; } -u16 sub_80C089C(u8 caseID) +u16 GetKantoPokedexCount(u8 caseID) { u16 count = 0; u16 i; - for (i = 0; i < 151; i++) + for (i = 0; i < KANTO_DEX_COUNT; i++) { switch (caseID) { - case FLAG_GET_SEEN: - if (GetSetPokedexFlag(i + 1, FLAG_GET_SEEN)) - count++; - break; - case FLAG_GET_CAUGHT: - if (GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT)) - count++; - break; + case FLAG_GET_SEEN: + if (GetSetPokedexFlag(i + 1, FLAG_GET_SEEN)) + count++; + break; + case FLAG_GET_CAUGHT: + if (GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT)) + count++; + break; } } return count; @@ -4386,7 +4386,7 @@ bool16 HasAllHoennMons(void) { u16 i; - for (i = 0; i < 200; i++) + for (i = 0; i < HOENN_DEX_COUNT - 2; i++) { if (!GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT)) return FALSE; @@ -4394,11 +4394,11 @@ bool16 HasAllHoennMons(void) return TRUE; } -bool8 sub_80C0918(void) +bool8 HasAllKantoMons(void) { u16 i; - for (i = 0; i < 150; i++) + for (i = 0; i < KANTO_DEX_COUNT - 1; i++) { if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT)) return FALSE; @@ -4406,26 +4406,26 @@ bool8 sub_80C0918(void) return TRUE; } -u16 sub_80C0944(void) +bool16 HasAllMons(void) { u16 i; - for (i = 0; i < 150; i++) + for (i = 0; i < NATIONAL_DEX_MEWTWO; i++) { if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT)) - return 0; + return FALSE; } - for (i = 151; i < 248; i++) + for (i = NATIONAL_DEX_MEW; i < NATIONAL_DEX_TYRANITAR; i++) { if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT)) - return 0; + return FALSE; } - for (i = 251; i < 384; i++) + for (i = NATIONAL_DEX_CELEBI; i < NATIONAL_DEX_RAYQUAZA; i++) { if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT)) - return 0; + return FALSE; } - return 1; + return TRUE; } void sub_80C09B0(u16 a) diff --git a/src/pokemon.c b/src/pokemon.c index cb7be1715..8812e5bc4 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2341,7 +2341,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI u16 evAmount; u8 evsBits; - CreateMon(mon, species, level, fixedIV, 0, 0, 0, 0); + CreateMon(mon, species, level, fixedIV, 0, 0, OT_ID_PLAYER_ID, 0); evsBits = evSpread; @@ -2373,7 +2373,7 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) u8 language; u8 value; - CreateMon(mon, src->species, src->level, 0, 1, src->personality, 1, src->otId); + CreateMon(mon, src->species, src->level, 0, 1, src->personality, OT_ID_PRESET, src->otId); for (i = 0; i < MAX_MON_MOVES; i++) SetMonMoveSlot(mon, src->moves[i], i); @@ -2435,7 +2435,7 @@ void CreateBattleTowerMon2(struct Pokemon *mon, struct BattleTowerPokemon *src, else level = src->level; - CreateMon(mon, src->species, level, 0, 1, src->personality, 1, src->otId); + CreateMon(mon, src->species, level, 0, 1, src->personality, OT_ID_PRESET, src->otId); for (i = 0; i < MAX_MON_MOVES; i++) SetMonMoveSlot(mon, src->moves[i], i); @@ -2497,7 +2497,7 @@ void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 m 0x1F, TRUE, personality, - TRUE, + OT_ID_PRESET, otId); SetMonData(mon, MON_DATA_HELD_ITEM, &src->party[monId].item); @@ -2527,7 +2527,7 @@ void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, i = Random32(); } while (nature != GetNatureFromPersonality(i)); - CreateMon(mon, species, level, fixedIV, TRUE, i, TRUE, otId); + CreateMon(mon, species, level, fixedIV, TRUE, i, OT_ID_PRESET, otId); evsBits = evSpread; for (i = 0; i < NUM_STATS; i++) { @@ -2989,11 +2989,11 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove) void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move) { s32 i; - u16 moves[4]; - u8 pp[4]; + u16 moves[MAX_MON_MOVES]; + u8 pp[MAX_MON_MOVES]; u8 ppBonuses; - for (i = 0; i < 3; i++) + for (i = 0; i < MAX_MON_MOVES - 1; i++) { moves[i] = GetMonData(mon, MON_DATA_MOVE2 + i, NULL); pp[i] = GetMonData(mon, MON_DATA_PP2 + i, NULL); @@ -3016,11 +3016,11 @@ void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move) void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) { s32 i; - u16 moves[4]; - u8 pp[4]; + u16 moves[MAX_MON_MOVES]; + u8 pp[MAX_MON_MOVES]; u8 ppBonuses; - for (i = 0; i < 3; i++) + for (i = 0; i < MAX_MON_MOVES - 1; i++) { moves[i] = GetBoxMonData(boxMon, MON_DATA_MOVE2 + i, NULL); pp[i] = GetBoxMonData(boxMon, MON_DATA_PP2 + i, NULL); @@ -3197,13 +3197,13 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if ((sideStatus & SIDE_STATUS_REFLECT) && gCritMultiplier == 1) { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(2) == 2) + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) damage = 2 * (damage / 3); else damage /= 2; } - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(2) == 2) + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) damage /= 2; // moves always do at least 1 damage. @@ -3244,13 +3244,13 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if ((sideStatus & SIDE_STATUS_LIGHTSCREEN) && gCritMultiplier == 1) { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(2) == 2) + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) damage = 2 * (damage / 3); else damage /= 2; } - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(2) == 2) + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2) damage /= 2; // are effects of weather negated with cloud nine or air lock @@ -3304,21 +3304,21 @@ u8 CountAliveMonsInBattle(u8 caseId) switch (caseId) { case BATTLE_ALIVE_EXCEPT_ACTIVE: - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { if (i != gActiveBattler && !(gAbsentBattlerFlags & gBitTable[i])) retVal++; } break; case BATTLE_ALIVE_ATK_SIDE: - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { if (GetBattlerSide(i) == GetBattlerSide(gBattlerAttacker) && !(gAbsentBattlerFlags & gBitTable[i])) retVal++; } break; case BATTLE_ALIVE_DEF_SIDE: - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { if (GetBattlerSide(i) == GetBattlerSide(gBattlerTarget) && !(gAbsentBattlerFlags & gBitTable[i])) retVal++; @@ -4329,7 +4329,7 @@ u8 SendMonToPC(struct Pokemon* mon) { s32 boxNo, boxPos; - set_unknown_box_id(VarGet(VAR_STORAGE_UNKNOWN)); + SetPCBoxToSendMon(VarGet(VAR_PC_BOX_TO_SEND_MON)); boxNo = StorageGetCurrentBox(); @@ -4344,9 +4344,9 @@ u8 SendMonToPC(struct Pokemon* mon) CopyMon(checkingMon, &mon->box, sizeof(mon->box)); gSpecialVar_MonBoxId = boxNo; gSpecialVar_MonBoxPos = boxPos; - if (get_unknown_box_id() != boxNo) - FlagClear(FLAG_SYS_STORAGE_UNKNOWN_FLAG); - VarSet(VAR_STORAGE_UNKNOWN, boxNo); + if (GetPCBoxToSendMon() != boxNo) + FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE); + VarSet(VAR_PC_BOX_TO_SEND_MON, boxNo); return MON_GIVEN_TO_PC; } } @@ -4424,7 +4424,7 @@ u8 GetMonsStateToDoubles_2(void) return (aliveCount > 1) ? PLAYER_HAS_TWO_USABLE_MONS : PLAYER_HAS_ONE_USABLE_MON; } -u8 GetAbilityBySpecies(u16 species, bool8 abilityNum) +u8 GetAbilityBySpecies(u16 species, u8 abilityNum) { if (abilityNum) gLastUsedAbility = gBaseStats[species].abilities[1]; @@ -4458,7 +4458,7 @@ void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord) 15, 1, gBattleResources->secretBase->party.personality[i], - 2, + OT_ID_RANDOM_NO_SHINY, 0); SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleResources->secretBase->party.heldItems[i]); @@ -4817,11 +4817,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov { if (evCount >= MAX_TOTAL_EVS) return TRUE; - if (dataSigned >= 100) + if (dataSigned >= EV_ITEM_RAISE_LIMIT) break; - if (dataSigned + r2 > 100) - r5 = 100 - (dataSigned + r2) + r2; + if (dataSigned + r2 > EV_ITEM_RAISE_LIMIT) + r5 = EV_ITEM_RAISE_LIMIT - (dataSigned + r2) + r2; else r5 = r2; @@ -5021,11 +5021,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov { if (evCount >= MAX_TOTAL_EVS) return TRUE; - if (dataSigned >= 100) + if (dataSigned >= EV_ITEM_RAISE_LIMIT) break; - if (dataSigned + r2 > 100) - r5 = 100 - (dataSigned + r2) + r2; + if (dataSigned + r2 > EV_ITEM_RAISE_LIMIT) + r5 = EV_ITEM_RAISE_LIMIT - (dataSigned + r2) + r2; else r5 = r2; @@ -6096,7 +6096,7 @@ u32 CanSpeciesLearnTMHM(u16 species, u8 tm) u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves) { - u16 learnedMoves[4]; + u16 learnedMoves[MAX_MON_MOVES]; u8 numMoves = 0; u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); u8 level = GetMonData(mon, MON_DATA_LEVEL, 0); @@ -6146,7 +6146,7 @@ u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves) u8 GetNumberOfRelearnableMoves(struct Pokemon *mon) { - u16 learnedMoves[4]; + u16 learnedMoves[MAX_MON_MOVES]; u16 moves[20]; u8 numMoves = 0; u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); @@ -6683,7 +6683,7 @@ u8 sub_806EF08(u8 arg0) var = (arg0 != 0) ? 2 : 0; break; } - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { if (gLinkPlayers[i].id == (s16)(var)) break; @@ -6706,7 +6706,7 @@ u8 sub_806EF84(u8 arg0, u8 arg1) var = (arg0 != 0) ? 2 : 0; break; } - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { if (gLinkPlayers[i].id == (s16)(var)) break; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 59ec8f4f1..fa9e61504 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -453,7 +453,7 @@ EWRAM_DATA static bool8 sInPartyMenu = 0; EWRAM_DATA static u8 sCurrentBoxOption = 0; EWRAM_DATA static u8 gUnknown_02039D0E = 0; EWRAM_DATA static u8 sWhichToReshow = 0; -EWRAM_DATA static u8 gUnknown_02039D10 = 0; +EWRAM_DATA static u8 sLastUsedBox = 0; EWRAM_DATA static u16 gUnknown_02039D12 = 0; EWRAM_DATA static struct Pokemon gUnknown_02039D14 = {0}; EWRAM_DATA static s8 sBoxCursorArea = 0; @@ -464,9 +464,6 @@ EWRAM_DATA static u8 sMovingMonOrigBoxPos = 0; EWRAM_DATA static bool8 sCanOnlyMove = 0; // This file's functions. -#if !defined(NONMATCHING) && MODERN -#define static -#endif static void CreatePCMenu(u8 whichMenu, s16 *windowIdPtr); static void Cb2_EnterPSS(u8 boxOption); static u8 GetCurrentBoxOption(void); @@ -2170,7 +2167,7 @@ static void Cb2_EnterPSS(u8 boxOption) gUnknown_02039D12 = 0; sPSSData->state = 0; sPSSData->taskId = CreateTask(Cb_InitPSS, 3); - gUnknown_02039D10 = StorageGetCurrentBox(); + sLastUsedBox = StorageGetCurrentBox(); SetMainCallback2(Cb2_PSS); } } @@ -4369,10 +4366,10 @@ static bool8 DoShowPartyMenu(void) static void sub_80CABE0(void) { - if (gUnknown_02039D10 != StorageGetCurrentBox()) + if (sLastUsedBox != StorageGetCurrentBox()) { - FlagClear(FLAG_SYS_STORAGE_UNKNOWN_FLAG); - VarSet(VAR_STORAGE_UNKNOWN, StorageGetCurrentBox()); + FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE); + VarSet(VAR_PC_BOX_TO_SEND_MON, StorageGetCurrentBox()); } } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 79aac4b5e..8697c557f 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -121,8 +121,8 @@ static EWRAM_DATA struct PokemonSummaryScreenData u8 metGame; // 0xB u32 pid; // 0xC u32 exp; // 0x10 - u16 moves[4]; // 0x14 - u8 pp[4]; // 0x1C + u16 moves[MAX_MON_MOVES]; // 0x14 + u8 pp[MAX_MON_MOVES]; // 0x1C u16 currentHP; // 0x20 u16 maxHP; // 0x22 u16 atk; // 0x24 @@ -224,10 +224,10 @@ static void DrawExperienceProgressBar(struct Pokemon* mon); static void DrawContestMoveHearts(u16 move); static void LimitEggSummaryPageDisplay(void); static void ResetWindows(void); -static void sub_81C25E8(void); -static void sub_81C2628(void); -static void sub_81C2794(void); -static void sub_81C27DC(struct Pokemon *mon, u16 a); +static void PrintMonInfo(void); +static void PrintNotEggInfo(void); +static void PrintEggInfo(void); +static void PrintGenderSymbol(struct Pokemon *mon, u16 a); static void PrintPageNamesAndStatsPageToWindows(void); static void CreatePageWindowTilemaps(u8 a); static void ClearPageWindowTilemaps(u8 a); @@ -1173,7 +1173,7 @@ static bool8 SummaryScreen_LoadGraphics(void) gMain.state++; break; case 11: - sub_81C25E8(); + PrintMonInfo(); gMain.state++; break; case 12: @@ -1449,7 +1449,7 @@ static void sub_81C0348(void) DrawPokerusCuredSymbol(&sMonSummaryScreen->currentMon); } -static void sub_81C0434(void) +static void FreeSummaryScreen(void) { FreeAllWindowBuffers(); Free(sMonSummaryScreen); @@ -1474,7 +1474,7 @@ static void CloseSummaryScreen(u8 taskId) m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); if (gMonSpritesGfxPtr == 0) sub_806F47C(0); - sub_81C0434(); + FreeSummaryScreen(); DestroyTask(taskId); } } @@ -1625,7 +1625,7 @@ static void sub_81C0704(u8 taskId) SetTypeIcons(); break; case 10: - sub_81C25E8(); + PrintMonInfo(); break; case 11: PrintPageSpecificText(sMonSummaryScreen->currPageIndex); @@ -2571,7 +2571,7 @@ static void DrawPokerusCuredSymbol(struct Pokemon *mon) // This checks if the mo schedule_bg_copy_tilemap_to_vram(3); } -static void sub_81C228C(bool8 isMonShiny) +static void SetDexNumberColor(bool8 isMonShiny) { if (!isMonShiny) sub_8199C30(3, 1, 4, 8, 8, 0); @@ -2695,19 +2695,19 @@ static void SummaryScreen_PrintTextOnWindow(u8 windowId, const u8 *string, u8 x, AddTextPrinterParameterized4(windowId, 1, x, y, 0, lineSpacing, sTextColors_861CD2C[colorId], 0, string); } -static void sub_81C25E8(void) +static void PrintMonInfo(void) { FillWindowPixelBuffer(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, PIXEL_FILL(0)); FillWindowPixelBuffer(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME, PIXEL_FILL(0)); FillWindowPixelBuffer(PSS_LABEL_WINDOW_PORTRAIT_SPECIES, PIXEL_FILL(0)); if (!sMonSummaryScreen->summary.isEgg) - sub_81C2628(); + PrintNotEggInfo(); else - sub_81C2794(); + PrintEggInfo(); schedule_bg_copy_tilemap_to_vram(0); } -static void sub_81C2628(void) +static void PrintNotEggInfo(void) { u8 strArray[16]; struct Pokemon *mon = &sMonSummaryScreen->currentMon; @@ -2721,12 +2721,12 @@ static void sub_81C2628(void) if (!IsMonShiny(mon)) { SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 1); - sub_81C228C(FALSE); + SetDexNumberColor(FALSE); } else { SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 7); - sub_81C228C(TRUE); + SetDexNumberColor(TRUE); } PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER); } @@ -2734,9 +2734,9 @@ static void sub_81C2628(void) { ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER); if (!IsMonShiny(mon)) - sub_81C228C(FALSE); + SetDexNumberColor(FALSE); else - sub_81C228C(TRUE); + SetDexNumberColor(TRUE); } StringCopy(gStringVar1, &gText_LevelSymbol[0]); ConvertIntToDecimalStringN(gStringVar2, summary->level, 0, 3); @@ -2747,12 +2747,12 @@ static void sub_81C2628(void) strArray[0] = CHAR_SLASH; StringCopy(&strArray[1], &gSpeciesNames[summary->species2][0]); SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_SPECIES, &strArray[0], 0, 1, 0, 1); - sub_81C27DC(mon, summary->species2); + PrintGenderSymbol(mon, summary->species2); PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME); PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES); } -static void sub_81C2794(void) +static void PrintEggInfo(void) { GetMonNickname(&sMonSummaryScreen->currentMon, gStringVar1); SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME, gStringVar1, 0, 1, 0, 1); @@ -2761,7 +2761,7 @@ static void sub_81C2794(void) ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES); } -static void sub_81C27DC(struct Pokemon *mon, u16 species) +static void PrintGenderSymbol(struct Pokemon *mon, u16 species) { if (species != SPECIES_NIDORAN_M && species != SPECIES_NIDORAN_F) { diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c index d2d89babf..5379ee88e 100644 --- a/src/pokenav_match_call_data.c +++ b/src/pokenav_match_call_data.c @@ -6,7 +6,9 @@ #include "battle.h" #include "gym_leader_rematch.h" #include "match_call.h" +#include "pokenav.h" #include "constants/region_map_sections.h" +#include "constants/trainers.h" // Static type declarations @@ -94,11 +96,11 @@ typedef union { const struct MatchCallStruct5 *type5; } match_call_t; -struct UnkStruct_08625388 { +struct MatchCallOverride { u16 idx; - u16 v2; - u32 v4; - const u8 *v8[4]; + u16 facilityClass; + u32 flag; + const u8 *flavorTexts[4]; }; // Static RAM declarations @@ -123,11 +125,11 @@ static bool32 MatchCall_IsRematchable_Type2(match_call_t); static bool32 MatchCall_IsRematchable_Type3(match_call_t); static bool32 MatchCall_IsRematchable_Type4(match_call_t); -static bool32 sub_81D1840(match_call_t); -static bool32 sub_81D1844(match_call_t); -static bool32 sub_81D1848(match_call_t); -static bool32 sub_81D184C(match_call_t); -static bool32 sub_81D1850(match_call_t); +static bool32 MatchCall_HasCheckPage_Type0(match_call_t); +static bool32 MatchCall_HasCheckPage_Type1(match_call_t); +static bool32 MatchCall_HasCheckPage_Type2(match_call_t); +static bool32 MatchCall_HasCheckPage_Type3(match_call_t); +static bool32 MatchCall_HasCheckPage_Type4(match_call_t); static u32 MatchCall_GetRematchTableIdx_Type0(match_call_t); static u32 MatchCall_GetRematchTableIdx_Type1(match_call_t); @@ -423,10 +425,10 @@ static const match_call_text_data_t sMayTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -static const struct MatchCallStruct4 sBrendanMatchCallHeader = +static const struct MatchCallStruct4 sMayMatchCallHeader = { .type = 4, - .gender = MALE, + .gender = MALE, //Gender of player .flag = FLAG_ENABLE_RIVAL_MATCH_CALL, .desc = gMayBrendanMatchCallDesc, .name = gExpandedPlaceholder_May, @@ -452,10 +454,10 @@ static const match_call_text_data_t sBrendanTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -static const struct MatchCallStruct4 sMayMatchCallHeader = +static const struct MatchCallStruct4 sBrendanMatchCallHeader = { .type = 4, - .gender = FEMALE, + .gender = FEMALE, //Gender of player .flag = FLAG_ENABLE_RIVAL_MATCH_CALL, .desc = gMayBrendanMatchCallDesc, .name = gExpandedPlaceholder_Brendan, @@ -727,27 +729,27 @@ static const struct MatchCallStruct5 sWallaceMatchCallHeader = }; static const match_call_t sMatchCallHeaders[] = { - {.type0 = &sMrStoneMatchCallHeader}, - {.type3 = &sProfBirchMatchCallHeader}, - {.type4 = &sMayMatchCallHeader}, - {.type4 = &sBrendanMatchCallHeader}, - {.type2 = &sWallyMatchCallHeader}, - {.type5 = &sNormanMatchCallHeader}, - {.type0 = &sMomMatchCallHeader}, - {.type0 = &sStevenMatchCallHeader}, - {.type0 = &sScottMatchCallHeader}, - {.type5 = &sRoxanneMatchCallHeader}, - {.type5 = &sBrawlyMatchCallHeader}, - {.type5 = &sWattsonMatchCallHeader}, - {.type5 = &sFlanneryMatchCallHeader}, - {.type5 = &sWinonaMatchCallHeader}, - {.type5 = &sTateLizaMatchCallHeader}, - {.type5 = &sJuanMatchCallHeader}, - {.type5 = &sSidneyMatchCallHeader}, - {.type5 = &sPhoebeMatchCallHeader}, - {.type5 = &sGlaciaMatchCallHeader}, - {.type5 = &sDrakeMatchCallHeader}, - {.type5 = &sWallaceMatchCallHeader} + [MC_HEADER_MR_STONE] = {.type0 = &sMrStoneMatchCallHeader}, + [MC_HEADER_PROF_BIRCH] = {.type3 = &sProfBirchMatchCallHeader}, + [MC_HEADER_BRENDAN] = {.type4 = &sBrendanMatchCallHeader}, + [MC_HEADER_MAY] = {.type4 = &sMayMatchCallHeader}, + [MC_HEADER_WALLY] = {.type2 = &sWallyMatchCallHeader}, + [MC_HEADER_NORMAN] = {.type5 = &sNormanMatchCallHeader}, + [MC_HEADER_MOM] = {.type0 = &sMomMatchCallHeader}, + [MC_HEADER_STEVEN] = {.type0 = &sStevenMatchCallHeader}, + [MC_HEADER_SCOTT] = {.type0 = &sScottMatchCallHeader}, + [MC_HEADER_ROXANNE] = {.type5 = &sRoxanneMatchCallHeader}, + [MC_HEADER_BRAWLY] = {.type5 = &sBrawlyMatchCallHeader}, + [MC_HEADER_WATTSON] = {.type5 = &sWattsonMatchCallHeader}, + [MC_HEADER_FLANNERY] = {.type5 = &sFlanneryMatchCallHeader}, + [MC_HEADER_WINONA] = {.type5 = &sWinonaMatchCallHeader}, + [MC_HEADER_TATE_LIZA] = {.type5 = &sTateLizaMatchCallHeader}, + [MC_HEADER_JUAN] = {.type5 = &sJuanMatchCallHeader}, + [MC_HEADER_SIDNEY] = {.type5 = &sSidneyMatchCallHeader}, + [MC_HEADER_PHOEBE] = {.type5 = &sPhoebeMatchCallHeader}, + [MC_HEADER_GLACIA] = {.type5 = &sGlaciaMatchCallHeader}, + [MC_HEADER_DRAKE] = {.type5 = &sDrakeMatchCallHeader}, + [MC_HEADER_WALLACE] = {.type5 = &sWallaceMatchCallHeader} }; static bool32 (*const sMatchCallGetFlagFuncs[])(match_call_t) = { @@ -774,12 +776,12 @@ static bool32 (*const sMatchCall_IsRematchableFunctions[])(match_call_t) = { MatchCall_IsRematchable_Type3 }; -static bool32 (*const gUnknown_08625338[])(match_call_t) = { - sub_81D1840, - sub_81D1844, - sub_81D1848, - sub_81D184C, - sub_81D1850 +static bool32 (*const sMatchCall_HasCheckPageFunctions[])(match_call_t) = { + MatchCall_HasCheckPage_Type0, + MatchCall_HasCheckPage_Type1, + MatchCall_HasCheckPage_Type2, + MatchCall_HasCheckPage_Type4, + MatchCall_HasCheckPage_Type3 }; static u32 (*const sMatchCall_GetRematchTableIdxFunctions[])(match_call_t) = { @@ -806,11 +808,11 @@ static void (*const sMatchCall_GetNameAndDescFunctions[])(match_call_t, const u8 MatchCall_GetNameAndDesc_Type3 }; -static const struct UnkStruct_08625388 sMatchCallCheckPageOverrides[] = { - { 7, 0x4B, 0xffff, { gMatchCallStevenStrategyText, gMatchCall_StevenTrainersPokemonText, gMatchCall_StevenSelfIntroductionText_Line1_BeforeMeteorFallsBattle, gMatchCall_StevenSelfIntroductionText_Line2_BeforeMeteorFallsBattle } }, // STEVEN - { 7, 0x4B, FLAG_DEFEATED_MOSSDEEP_GYM, { gMatchCallStevenStrategyText, gMatchCall_StevenTrainersPokemonText, gMatchCall_StevenSelfIntroductionText_Line1_AfterMeteorFallsBattle, gMatchCall_StevenSelfIntroductionText_Line2_AfterMeteorFallsBattle } }, // STEVEN - { 2, 0x3c, 0xffff, { gMatchCall_BrendanStrategyText, gMatchCall_BrendanTrainersPokemonText, gMatchCall_BrendanSelfIntroductionText_Line1, gMatchCall_BrendanSelfIntroductionText_Line2 } }, // Brendan - { 3, 0x3f, 0xffff, { gMatchCall_MayStrategyText, gMatchCall_MayTrainersPokemonText, gMatchCall_MaySelfIntroductionText_Line1, gMatchCall_MaySelfIntroductionText_Line2 } } // May +static const struct MatchCallOverride sMatchCallCheckPageOverrides[] = { + { MC_HEADER_STEVEN, FACILITY_CLASS_STEVEN, 0xFFFF, { gMatchCallStevenStrategyText, gMatchCall_StevenTrainersPokemonText, gMatchCall_StevenSelfIntroductionText_Line1_BeforeMeteorFallsBattle, gMatchCall_StevenSelfIntroductionText_Line2_BeforeMeteorFallsBattle } }, // STEVEN + { MC_HEADER_STEVEN, FACILITY_CLASS_STEVEN, FLAG_DEFEATED_MOSSDEEP_GYM, { gMatchCallStevenStrategyText, gMatchCall_StevenTrainersPokemonText, gMatchCall_StevenSelfIntroductionText_Line1_AfterMeteorFallsBattle, gMatchCall_StevenSelfIntroductionText_Line2_AfterMeteorFallsBattle } }, // STEVEN + { MC_HEADER_BRENDAN, FACILITY_CLASS_BRENDAN, 0xFFFF, { gMatchCall_BrendanStrategyText, gMatchCall_BrendanTrainersPokemonText, gMatchCall_BrendanSelfIntroductionText_Line1, gMatchCall_BrendanSelfIntroductionText_Line2 } }, // Brendan + { MC_HEADER_MAY, FACILITY_CLASS_MAY, 0xFFFF, { gMatchCall_MayStrategyText, gMatchCall_MayTrainersPokemonText, gMatchCall_MaySelfIntroductionText_Line1, gMatchCall_MaySelfIntroductionText_Line2 } } // May }; // .text @@ -981,7 +983,7 @@ static bool32 MatchCall_IsRematchable_Type3(match_call_t matchCall) return FALSE; } -bool32 sub_81D17E8(u32 idx) +bool32 MatchCall_HasCheckPage(u32 idx) { match_call_t matchCall; u32 i; @@ -990,7 +992,7 @@ bool32 sub_81D17E8(u32 idx) return FALSE; matchCall = sMatchCallHeaders[idx]; i = MatchCallGetFunctionIndex(matchCall); - if (gUnknown_08625338[i](matchCall)) + if (sMatchCall_HasCheckPageFunctions[i](matchCall)) return TRUE; for (i = 0; i < ARRAY_COUNT(sMatchCallCheckPageOverrides); i++) { @@ -1000,27 +1002,27 @@ bool32 sub_81D17E8(u32 idx) return FALSE; } -static bool32 sub_81D1840(match_call_t matchCall) +static bool32 MatchCall_HasCheckPage_Type0(match_call_t matchCall) { return FALSE; } -static bool32 sub_81D1844(match_call_t matchCall) +static bool32 MatchCall_HasCheckPage_Type1(match_call_t matchCall) { return TRUE; } -static bool32 sub_81D1848(match_call_t matchCall) +static bool32 MatchCall_HasCheckPage_Type2(match_call_t matchCall) { return TRUE; } -static bool32 sub_81D184C(match_call_t matchCall) +static bool32 MatchCall_HasCheckPage_Type4(match_call_t matchCall) { return FALSE; } -static bool32 sub_81D1850(match_call_t matchCall) +static bool32 MatchCall_HasCheckPage_Type3(match_call_t matchCall) { return FALSE; } @@ -1210,7 +1212,7 @@ static void MatchCall_GetNameAndDescByRematchIdx(u32 idx, const u8 **desc, const *name = trainer->trainerName; } -const u8 *sub_81D1B40(u32 idx, u32 offset) +const u8 *MatchCall_GetOverrideFlavorText(u32 idx, u32 offset) { u32 i; @@ -1224,24 +1226,24 @@ const u8 *sub_81D1B40(u32 idx, u32 offset) break; if (sMatchCallCheckPageOverrides[i + 1].idx != idx) break; - if (!FlagGet(sMatchCallCheckPageOverrides[i + 1].v4)) + if (!FlagGet(sMatchCallCheckPageOverrides[i + 1].flag)) break; i++; } - return sMatchCallCheckPageOverrides[i].v8[offset]; + return sMatchCallCheckPageOverrides[i].flavorTexts[offset]; } } return NULL; } -int sub_81D1BD0(u32 idx) +int MatchCall_GetOverrideFacilityClass(u32 idx) { u32 i; for (i = 0; i < ARRAY_COUNT(sMatchCallCheckPageOverrides); i++) { if (sMatchCallCheckPageOverrides[i].idx == idx) - return sMatchCallCheckPageOverrides[i].v2; + return sMatchCallCheckPageOverrides[i].facilityClass; } return -1; } diff --git a/src/pokenav_unk_3.c b/src/pokenav_unk_3.c index ffb1e0a4a..c66434192 100755 --- a/src/pokenav_unk_3.c +++ b/src/pokenav_unk_3.c @@ -84,7 +84,7 @@ static u32 sub_81CAB44(struct Pokenav3Struct *state) state->callback = sub_81CAC04; state->unk0 = 0; selectedMatchCall = GetSelectedMatchCall(); - if (!state->unk1C[selectedMatchCall].boxId || sub_81D17E8(state->unk1C[selectedMatchCall].unk6)) + if (!state->unk1C[selectedMatchCall].boxId || MatchCall_HasCheckPage(state->unk1C[selectedMatchCall].unk6)) { state->unk4 = gUnknown_0862250A; state->unk2 = 2; @@ -212,7 +212,7 @@ static u32 sub_81CAD20(s32 taskState) state->unkA++; } - if (++state->unk8 >= 21) // TODO: This is the size of sMatchCallHeaders + if (++state->unk8 >= MC_HEADER_COUNT) { state->unkC = state->unk8; state->unk8 = 0; @@ -331,7 +331,7 @@ int sub_81CAF04(int index) return gTrainers[index].trainerPic; } - index = sub_81D1BD0(var0); + index = MatchCall_GetOverrideFacilityClass(var0); return gFacilityClassToPicIndex[index]; } @@ -358,7 +358,7 @@ const u8 *sub_81CAFD8(int index, int textType) { var0 = MatchCall_GetRematchTableIdx(state->unk1C[index].unk6); if (var0 == REMATCH_TABLE_ENTRIES) - return sub_81D1B40(state->unk1C[index].unk6, textType); + return MatchCall_GetOverrideFlavorText(state->unk1C[index].unk6, textType); } else { @@ -426,7 +426,7 @@ int sub_81CB0E4(int index) { if (!state->unk1C[index].boxId) return count; - if (sub_81D17E8(state->unk1C[index].unk6)) + if (MatchCall_HasCheckPage(state->unk1C[index].unk6)) return count; count++; @@ -443,7 +443,7 @@ int sub_81CB128(int index) { if (!state->unk1C[index].boxId) return count; - if (sub_81D17E8(state->unk1C[index].unk6)) + if (MatchCall_HasCheckPage(state->unk1C[index].unk6)) return count; count--; @@ -462,7 +462,7 @@ bool32 unref_sub_81CB16C(void) return TRUE; } - for (i = 0; i < 21; i++) // TODO: This is the size of sMatchCallHeaders + for (i = 0; i < MC_HEADER_COUNT; i++) { if (MatchCallFlagGetByIndex(i)) { diff --git a/src/record_mixing.c b/src/record_mixing.c index 6cb145c80..32e0404b9 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -701,10 +701,10 @@ static void ReceiveLilycoveLadyData(LilycoveLady *lilycoveLady, size_t recordSiz } memcpy(sLilycoveLadySave, (void *)lilycoveLady + recordSize * mixIndices[which], sizeof(LilycoveLady)); - sub_818DA78(); + ResetLilycoveLadyForRecordMix(); if (dest != NULL) { - sub_818E570(dest); + QuizLadyClearQuestionForRecordMix(dest); free(dest); } } diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 9e03d57f6..432c5dbe6 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -37,8 +37,8 @@ struct PlayerInfo struct MovePp { - u16 moves[4]; - u8 pp[4]; + u16 moves[MAX_MON_MOVES]; + u8 pp[MAX_MON_MOVES]; }; struct RecordedBattleSave @@ -91,7 +91,7 @@ EWRAM_DATA static u32 sBattleFlags = 0; EWRAM_DATA static u32 sAI_Scripts = 0; EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0}; EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0}; -EWRAM_DATA static u16 sPlayerMonMoves[2][4] = {0}; +EWRAM_DATA static u16 sPlayerMonMoves[2][MAX_MON_MOVES] = {0}; EWRAM_DATA static struct PlayerInfo sPlayers[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA static u8 sUnknown_0203CCD0 = 0; EWRAM_DATA static u8 sRecordMixFriendName[PLAYER_NAME_LENGTH + 1] = {0}; @@ -766,11 +766,11 @@ void sub_818603C(u8 arg0) { if (sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == ACTION_MOVE_CHANGE) { - u8 ppBonuses[4]; - u8 array1[4]; - u8 array2[4]; + u8 ppBonuses[MAX_MON_MOVES]; + u8 array1[MAX_MON_MOVES]; + u8 array2[MAX_MON_MOVES]; struct MovePp movePp; - u8 array3[8]; + u8 array3[(MAX_MON_MOVES * 2)]; u8 var; RecordedBattle_GetBattlerAction(battlerId); diff --git a/src/region_map.c b/src/region_map.c index a98964e5c..ea2cbfa6a 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -24,6 +24,7 @@ #include "region_map.h" #include "constants/region_map_sections.h" #include "heal_location.h" +#include "constants/field_specials.h" #include "constants/heal_locations.h" #include "constants/map_types.h" #include "constants/rgb.h" @@ -1144,20 +1145,20 @@ static void RegionMap_InitializeStateBasedOnSSTidalLocation(void) x = 0; switch (GetSSTidalLocation(&mapGroup, &mapNum, &xOnMap, &yOnMap)) { - case 1: + case SS_TIDAL_LOCATION_SLATEPORT: gRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY; break; - case 2: + case SS_TIDAL_LOCATION_LILYCOVE: gRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY; break; - case 3: + case SS_TIDAL_LOCATION_ROUTE124: gRegionMap->mapSecId = MAPSEC_ROUTE_124; break; - case 4: + case SS_TIDAL_LOCATION_ROUTE131: gRegionMap->mapSecId = MAPSEC_ROUTE_131; break; default: - case 0: + case SS_TIDAL_LOCATION_OTHER: mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum); gRegionMap->mapSecId = mapHeader->regionMapSectionId; diff --git a/src/roamer.c b/src/roamer.c index be45642e0..8a67234e3 100644 --- a/src/roamer.c +++ b/src/roamer.c @@ -67,7 +67,7 @@ static void CreateInitialRoamerMon(bool16 createLatios) else (&gSaveBlock1Ptr->roamer)->species = SPECIES_LATIOS; - CreateMon(&gEnemyParty[0], (&gSaveBlock1Ptr->roamer)->species, 40, 0x20, 0, 0, 0, 0); + CreateMon(&gEnemyParty[0], (&gSaveBlock1Ptr->roamer)->species, 40, 0x20, 0, 0, OT_ID_PLAYER_ID, 0); (&gSaveBlock1Ptr->roamer)->level = 40; (&gSaveBlock1Ptr->roamer)->status = 0; (&gSaveBlock1Ptr->roamer)->active = TRUE; diff --git a/src/rock.c b/src/rock.c index f05816362..6f6e20955 100644 --- a/src/rock.c +++ b/src/rock.c @@ -508,7 +508,7 @@ void AnimDirtParticleAcrossScreen(struct Sprite *sprite) sprite->pos1.x = 304; gBattleAnimArgs[1] = -gBattleAnimArgs[1]; sprite->data[5] = 1; - sprite->oam.matrixNum = 8; + sprite->oam.matrixNum = ST_OAM_HFLIP; } else { diff --git a/src/scrcmd.c b/src/scrcmd.c index 57cd3edbe..4c8895ab8 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -62,7 +62,7 @@ static EWRAM_DATA u16 sMovingNpcMapBank = 0; static EWRAM_DATA u16 sMovingNpcMapId = 0; static EWRAM_DATA u16 sFieldEffectScriptId = 0; -static u8 gUnknown_03000F30; +static u8 gBrailleWindowId; extern const SpecialFunc gSpecials[]; extern const u8 *gStdScripts[]; @@ -466,6 +466,9 @@ bool8 ScrCmd_addvar(struct ScriptContext *ctx) { u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); *ptr += ScriptReadHalfword(ctx); + // Note: addvar doesn't support adding from a variable in vanilla. If you were to + // add a VarGet() to the above, make sure you change the `addvar VAR_0x8006, 65535` + // in the contest scripts to `subvar VAR_0x8006, 1`, else contests will break. return FALSE; } @@ -1102,7 +1105,7 @@ bool8 ScrCmd_setobjectxyperm(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_moveobjectoffscreen(struct ScriptContext *ctx) +bool8 ScrCmd_copyobjectxytoperm(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); @@ -1244,7 +1247,7 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx) HideFieldMessageBox(); playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0); EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]); - sub_80D338C(); + ScriptMovement_UnfreezeEventObjects(); UnfreezeEventObjects(); return FALSE; } @@ -1258,7 +1261,7 @@ bool8 ScrCmd_release(struct ScriptContext *ctx) EventObjectClearHeldMovementIfFinished(&gEventObjects[gSelectedEventObject]); playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0); EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]); - sub_80D338C(); + ScriptMovement_UnfreezeEventObjects(); UnfreezeEventObjects(); return FALSE; } @@ -1515,13 +1518,13 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx) yText = (yText - yWindow - 1) * 8; winTemplate = CreateWindowTemplate(0, xWindow, yWindow + 1, width, height, 0xF, 0x1); - gUnknown_03000F30 = AddWindow(&winTemplate); - LoadUserWindowBorderGfx(gUnknown_03000F30, 0x214, 0xE0); - DrawStdWindowFrame(gUnknown_03000F30, 0); - PutWindowTilemap(gUnknown_03000F30); - FillWindowPixelBuffer(gUnknown_03000F30, PIXEL_FILL(1)); - AddTextPrinterParameterized(gUnknown_03000F30, 6, gStringVar4, xText, yText, 0xFF, 0x0); - CopyWindowToVram(gUnknown_03000F30, 3); + gBrailleWindowId = AddWindow(&winTemplate); + LoadUserWindowBorderGfx(gBrailleWindowId, 0x214, 0xE0); + DrawStdWindowFrame(gBrailleWindowId, 0); + PutWindowTilemap(gBrailleWindowId); + FillWindowPixelBuffer(gBrailleWindowId, PIXEL_FILL(1)); + AddTextPrinterParameterized(gBrailleWindowId, 6, gStringVar4, xText, yText, 0xFF, 0x0); + CopyWindowToVram(gBrailleWindowId, 3); return FALSE; } @@ -1621,7 +1624,7 @@ bool8 ScrCmd_bufferstdstring(struct ScriptContext *ctx) u8 stringVarIndex = ScriptReadByte(ctx); u16 index = VarGet(ScriptReadHalfword(ctx)); - StringCopy(sScriptStringVars[stringVarIndex], gUnknown_0858BAF0[index]); + StringCopy(sScriptStringVars[stringVarIndex], gStdStrings[index]); return FALSE; } @@ -1630,7 +1633,7 @@ bool8 ScrCmd_buffercontesttype(struct ScriptContext *ctx) u8 stringVarIndex = ScriptReadByte(ctx); u16 index = VarGet(ScriptReadHalfword(ctx)); - sub_818E868(sScriptStringVars[stringVarIndex], index); + BufferContestName(sScriptStringVars[stringVarIndex], index); return FALSE; } @@ -2254,8 +2257,8 @@ bool8 ScrCmd_setmonmetlocation(struct ScriptContext *ctx) void sub_809BDB4(void) { - ClearStdWindowAndFrame(gUnknown_03000F30, 1); - RemoveWindow(gUnknown_03000F30); + ClearStdWindowAndFrame(gBrailleWindowId, 1); + RemoveWindow(gBrailleWindowId); } bool8 ScrCmd_buffertrainerclassname(struct ScriptContext *ctx) diff --git a/src/script_menu.c b/src/script_menu.c index b17d3df38..7afe30080 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -13,1026 +13,30 @@ #include "strings.h" #include "task.h" #include "text.h" +#include "constants/field_specials.h" #include "constants/items.h" +#include "constants/script_menu.h" #include "constants/songs.h" -// multichoice lists -const struct MenuAction MultichoiceList_000[] = -{ - {gUnknown_085EAD37, NULL}, - {gUnknown_085EAD41, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_002[] = -{ - {gUnknown_085EAD67, NULL}, - {gUnknown_085EAD6D, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_003[] = -{ - {gUnknown_085EAD72, NULL}, - {gUnknown_085EAD84, NULL}, - {gUnknown_085EAD96, NULL}, - {gText_Cancel2, NULL}, -}; - -const struct MenuAction MultichoiceList_004[] = -{ - {gUnknown_085EADA4, NULL}, - {gUnknown_085EADB5, NULL}, - {gUnknown_085EADC4, NULL}, - {gUnknown_085EADD5, NULL}, - {gUnknown_085EADE7, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_006[] = -{ - {gUnknown_085EADF9, NULL}, - {gUnknown_085EAE04, NULL}, - {gUnknown_085EAE12, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_005[] = -{ - {gUnknown_085EADF9, NULL}, - {gUnknown_085EAE04, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_007[] = -{ - {gMenuText_Register, NULL}, - {gUnknown_085EAE12, NULL}, - {gUnknown_085EAE1B, NULL}, - {gText_Cancel2, NULL}, -}; - -const struct MenuAction MultichoiceList_012[] = -{ - {gUnknown_085EAE27, NULL}, - {gUnknown_085EAE2C, NULL}, -}; - -const struct MenuAction MultichoiceList_013[] = -{ - {gUnknown_085EAE31, NULL}, - {gUnknown_085EAE35, NULL}, - {gUnknown_085EAE39, NULL}, - {gUnknown_085EAE3D, NULL}, - {gUnknown_085EAE41, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_014[] = -{ - {gUnknown_085EAD5F, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_016[] = -{ - {gUnknown_085EAE53, NULL}, - {gUnknown_085EAE5A, NULL}, -}; - -const struct MenuAction MultichoiceList_020[] = -{ - {gText_Yes, NULL}, - {gText_No, NULL}, - {gUnknown_085EAD6D, NULL}, -}; - -const struct MenuAction MultichoiceList_023[] = -{ - {gUnknown_085EAEA2, NULL}, - {gUnknown_085EAEAC, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_024[] = -{ - {gText_Lv50, NULL}, - {gText_OpenLevel, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_025[] = -{ - {gUnknown_0827ECBC, NULL}, - {gUnknown_0827ECC3, NULL}, - {gUnknown_0827ECCD, NULL}, -}; - -const struct MenuAction MultichoiceList_026[] = -{ - {gUnknown_0827ECD5, NULL}, - {gUnknown_0827ECDD, NULL}, - {gUnknown_0827ECE3, NULL}, -}; - -const struct MenuAction MultichoiceList_027[] = -{ - {gUnknown_0827ECEB, NULL}, - {gUnknown_0827ECF2, NULL}, - {gUnknown_0827ECF8, NULL}, -}; - -const struct MenuAction MultichoiceList_028[] = -{ - {gUnknown_0827ED00, NULL}, - {gUnknown_0827ED06, NULL}, - {gUnknown_0827ED10, NULL}, -}; - -const struct MenuAction MultichoiceList_029[] = -{ - {gUnknown_0827ED18, NULL}, - {gUnknown_0827ED22, NULL}, - {gUnknown_0827ED2C, NULL}, -}; - -const struct MenuAction MultichoiceList_030[] = -{ - {gUnknown_0827ED36, NULL}, - {gUnknown_0827ED40, NULL}, - {gUnknown_0827ED46, NULL}, -}; - -const struct MenuAction MultichoiceList_031[] = -{ - {gUnknown_0827ED4F, NULL}, - {gUnknown_0827ED59, NULL}, - {gUnknown_0827ED65, NULL}, -}; +#include "data/script_menu.h" -const struct MenuAction MultichoiceList_032[] = -{ - {gUnknown_0827ED70, NULL}, - {gUnknown_0827ED74, NULL}, - {gUnknown_0827ED78, NULL}, -}; - -const struct MenuAction MultichoiceList_033[] = -{ - {gUnknown_0827ED80, NULL}, - {gUnknown_0827ED95, NULL}, - {gUnknown_0827EDAA, NULL}, -}; +static EWRAM_DATA u8 sProcessInputDelay = 0; -const struct MenuAction MultichoiceList_034[] = -{ - {gUnknown_0827EDB5, NULL}, - {gUnknown_0827EDBA, NULL}, - {gUnknown_0827EDC1, NULL}, -}; +static u8 sLilycoveSSTidalSelections[SSTIDAL_SELECTION_COUNT]; -const struct MenuAction MultichoiceList_035[] = -{ - {gUnknown_0827EDC9, NULL}, - {gUnknown_0827EDD5, NULL}, - {gUnknown_0827EDE4, NULL}, -}; - -const struct MenuAction MultichoiceList_036[] = -{ - {gUnknown_0827EDF0, NULL}, - {gUnknown_0827EDF5, NULL}, - {gUnknown_0827EDF7, NULL}, -}; - -const struct MenuAction MultichoiceList_037[] = -{ - {gUnknown_0827EDF9, NULL}, - {gUnknown_0827EDFB, NULL}, - {gUnknown_0827EDFD, NULL}, -}; - -const struct MenuAction MultichoiceList_038[] = -{ - {gUnknown_0827EDFF, NULL}, - {gUnknown_0827EE01, NULL}, - {gUnknown_0827EE03, NULL}, -}; - -const struct MenuAction MultichoiceList_039[] = -{ - {gUnknown_0827EE05, NULL}, - {gUnknown_0827EE07, NULL}, - {gUnknown_0827EE09, NULL}, -}; - -const struct MenuAction MultichoiceList_042[] = -{ - {gUnknown_085EAEC3, NULL}, - {gUnknown_085EAED6, NULL}, - {gUnknown_085EAEE6, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_043[] = -{ - {gUnknown_085EAEF6, NULL}, - {gUnknown_085EAF02, NULL}, - {gUnknown_085EAF0E, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_044[] = -{ - {gUnknown_085EAF1B, NULL}, - {gUnknown_085EAF24, NULL}, - {gUnknown_085EAF2F, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_045[] = -{ - {gUnknown_085EAF34, NULL}, - {gUnknown_085EAF3E, NULL}, -}; - -const struct MenuAction MultichoiceList_046[] = -{ - {gUnknown_085EAF4B, NULL}, - {gUnknown_085EAF58, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_047[] = -{ - {gUnknown_085EAF65, NULL}, - {gUnknown_085EAF70, NULL}, - {gUnknown_085EAF7D, NULL}, - {gUnknown_085EAF87, NULL}, - {gUnknown_085EAF93, NULL}, - {gUnknown_085EAF9F, NULL}, - {gUnknown_085EAFAB, NULL}, - {gText_Cancel2, NULL}, -}; - -const struct MenuAction MultichoiceList_048[] = -{ - {gUnknown_085EAFB6, NULL}, - {gUnknown_085EAFCF, NULL}, - {gUnknown_085EAFE8, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_055[] = -{ - {gUnknown_085EB089, NULL}, - {gUnknown_085EB09C, NULL}, - {gUnknown_085EB0AF, NULL}, - {gUnknown_085EB0C2, NULL}, - {gUnknown_085EB0D5, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_049[] = -{ - {gUnknown_085EB002, NULL}, - {gUnknown_085EB017, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_050[] = -{ - {gUnknown_085EB02A, NULL}, - {gUnknown_085EB034, NULL}, -}; - -const struct MenuAction MultichoiceList_052[] = -{ - {gText_LilycoveCity, NULL}, - {gText_BattleFrontier, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_053[] = -{ - {gText_SlateportCity, NULL}, - {gText_LilycoveCity, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_054[] = -{ - {gUnknown_085EB07E, NULL}, - {gUnknown_085EB084, NULL}, -}; - -const struct MenuAction MultichoiceList_056[] = -{ - {gText_LilycoveCity, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_057[] = -{ - {gText_5F, NULL}, - {gText_4F, NULL}, - {gText_3F, NULL}, - {gText_2F, NULL}, - {gText_1F, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_058[] = -{ - {gUnknown_085EB040, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_059[] = -{ - {gUnknown_085EB04A, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_060[] = -{ - {gUnknown_085EB040, NULL}, - {gUnknown_085EB04A, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_061[] = -{ - {gUnknown_085EB057, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_062[] = -{ - {gUnknown_085EB040, NULL}, - {gUnknown_085EB057, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_063[] = -{ - {gUnknown_085EB04A, NULL}, - {gUnknown_085EB057, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_064[] = -{ - {gUnknown_085EB040, NULL}, - {gUnknown_085EB04A, NULL}, - {gUnknown_085EB057, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_065[] = -{ - {gUnknown_085EB062, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_066[] = -{ - {gUnknown_085EB040, NULL}, - {gUnknown_085EB062, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_067[] = -{ - {gUnknown_085EB04A, NULL}, - {gUnknown_085EB062, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_068[] = -{ - {gUnknown_085EB040, NULL}, - {gUnknown_085EB04A, NULL}, - {gUnknown_085EB062, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_069[] = -{ - {gUnknown_085EB057, NULL}, - {gUnknown_085EB062, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_070[] = -{ - {gUnknown_085EB040, NULL}, - {gUnknown_085EB057, NULL}, - {gUnknown_085EB062, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_071[] = -{ - {gUnknown_085EB04A, NULL}, - {gUnknown_085EB057, NULL}, - {gUnknown_085EB062, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_072[] = -{ - {gUnknown_085EB040, NULL}, - {gUnknown_085EB04A, NULL}, - {gUnknown_085EB057, NULL}, - {gUnknown_085EB062, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_073[] = -{ - {gText_Opponent, NULL}, - {gText_Tourney_Tree, NULL}, - {gText_ReadyToStart, NULL}, - {gUnknown_085EB5BC, NULL}, - {gUnknown_085EB5C3, NULL}, - {gUnknown_085EB5C8, NULL}, -}; - -const struct MenuAction MultichoiceList_107[] = -{ - {gText_Opponent, NULL}, - {gText_Tourney_Tree, NULL}, - {gText_ReadyToStart, NULL}, - {gUnknown_085EB5C3, NULL}, - {gUnknown_085EB5C8, NULL}, -}; - -const struct MenuAction MultichoiceList_088[] = -{ - {gUnknown_085EB29A, NULL}, - {gUnknown_085EB2A3, NULL}, -}; - -const struct MenuAction MultichoiceList_076[] = -{ - {gUnknown_085EB372, NULL}, - {gUnknown_085EB37F, NULL}, - {gUnknown_085EB389, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_017[] = -{ - {gText_Yes, NULL}, - {gText_No, NULL}, - {gUnknown_085EAD6D, NULL}, -}; - -const struct MenuAction MultichoiceList_018[] = -{ - {gUnknown_085EAE6E, NULL}, - {gUnknown_085EAE7C, NULL}, - {gUnknown_085EAE8A, NULL}, - {gUnknown_085EAD6D, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_078[] = -{ - {gUnknown_085EB372, NULL}, - {gUnknown_085EB37F, NULL}, - {gUnknown_085EB397, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_079[] = -{ - {gUnknown_085EB372, NULL}, - {gUnknown_085EB37F, NULL}, - {gUnknown_085EB389, NULL}, - {gUnknown_085EB397, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_074[] = -{ - {gUnknown_085EB372, NULL}, - {gUnknown_085EB37F, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_080[] = -{ - {gUnknown_085EB3A4, NULL}, - {gUnknown_085EB3B1, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_081[] = -{ - {gUnknown_085EB3D4, NULL}, - {gUnknown_085EB3C6, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_082[] = -{ - {gText_NormalRank, NULL}, - {gText_SuperRank, NULL}, - {gText_HyperRank, NULL}, - {gText_MasterRank, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_083[] = -{ - {gText_BattleBag, NULL}, - {gText_HeldItem, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_084[] = -{ - {gText_LinkContest, NULL}, - {gText_AboutE_Mode, NULL}, - {gText_AboutG_Mode, NULL}, - {gText_Cancel2, NULL}, -}; - -const struct MenuAction MultichoiceList_085[] = -{ - {gText_E_Mode, NULL}, - {gText_G_Mode, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_086[] = -{ - {gText_MenuOptionPokedex, NULL}, - {gText_MenuOptionPokemon, NULL}, - {gText_MenuOptionBag, NULL}, - {gText_MenuOptionPokenav, NULL}, - {gUnknown_085EB278, NULL}, - {gText_MenuOptionSave, NULL}, - {gText_MenuOptionOption, NULL}, - {gText_MenuOptionExit, NULL}, -}; - -const struct MenuAction MultichoiceList_087[] = -{ - {gUnknown_085EB28A, NULL}, - {gUnknown_085EB290, NULL}, - {gUnknown_085EB295, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_089[] = -{ - {gText_SouthernIsland, NULL}, - {gText_BirthIsland, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_090[] = -{ - {gText_SouthernIsland, NULL}, - {gText_FarawayIsland, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_091[] = -{ - {gText_BirthIsland, NULL}, - {gText_FarawayIsland, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_092[] = -{ - {gText_SouthernIsland, NULL}, - {gText_BirthIsland, NULL}, - {gText_FarawayIsland, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_093[] = -{ - {gUnknown_085EB2E4, NULL}, - {gUnknown_085EB2F0, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_094[] = -{ - {gText_Yes, NULL}, - {gUnknown_085EB2FC, NULL}, -}; - -const struct MenuAction MultichoiceList_095[] = -{ - {gUnknown_085EB3DF, NULL}, - {gUnknown_085EB3EA, NULL}, - {gUnknown_085EB3F1, NULL}, - {gUnknown_085EB3FC, NULL}, - {gUnknown_085EB40A, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_011[] = -{ - {gUnknown_085EB415, NULL}, - {gUnknown_085EB41D, NULL}, - {gUnknown_085EB424, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_096[] = -{ - {gUnknown_085EB45C, NULL}, - {gUnknown_085EB469, NULL}, - {gUnknown_085EB475, NULL}, - {gUnknown_085EB482, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_097[] = -{ - {gUnknown_085EB42F, NULL}, - {gUnknown_085EB43A, NULL}, - {gUnknown_085EB444, NULL}, - {gUnknown_085EB451, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_098[] = -{ - {gUnknown_085EB48E, NULL}, - {gUnknown_085EB496, NULL}, - {gUnknown_085EB4A3, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_099[] = -{ - {gUnknown_085EB4AD, NULL}, - {gUnknown_085EB4B9, NULL}, - {gUnknown_085EB4C7, NULL}, - {gUnknown_085EB4D4, NULL}, - {gUnknown_085EB4E0, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_100[] = -{ - {gText_BattleBasics, NULL}, - {gText_PokemonNature, NULL}, - {gText_PokemonMoves, NULL}, - {gText_Underpowered, NULL}, - {gText_WhenInDanger, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_101[] = -{ - {gUnknown_085EB532, NULL}, - {gUnknown_085EB543, NULL}, - {gUnknown_085EB555, NULL}, - {gUnknown_085EB563, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_102[] = -{ - {gUnknown_085EB56E, NULL}, - {gUnknown_085EB57E, NULL}, - {gUnknown_085EB589, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_103[] = -{ - {gUnknown_085EB5B6, NULL}, - {gUnknown_085EB5BC, NULL}, - {gUnknown_085EB5C3, NULL}, - {gUnknown_085EB5C8, NULL}, -}; - -const struct MenuAction MultichoiceList_104[] = -{ - {gUnknown_085EB5B6, NULL}, - {gUnknown_085EB5C3, NULL}, - {gUnknown_085EB5C8, NULL}, -}; - -const struct MenuAction MultichoiceList_105[] = -{ - {gUnknown_085EB5B6, NULL}, - {gUnknown_085EB5BC, NULL}, - {gUnknown_085EB5C8, NULL}, -}; - -const struct MenuAction MultichoiceList_106[] = -{ - {gUnknown_085EB5B6, NULL}, - {gUnknown_085EB5C8, NULL}, -}; - -const struct MenuAction MultichoiceList_108[] = -{ - {gUnknown_085EE14B, NULL}, - {gUnknown_085EE14F, NULL}, -}; - -const struct MenuAction MultichoiceList_109[] = -{ - {gUnknown_085EB2FF, NULL}, - {gUnknown_085EB310, NULL}, - {gUnknown_085EB317, NULL}, - {gUnknown_085EB31F, NULL}, -}; - -const struct MenuAction MultichoiceList_110[] = -{ - {gText_CaveOfOrigin, NULL}, - {gText_MtPyre, NULL}, - {gText_SkyPillar, NULL}, - {gText_DontRemember, NULL}, -}; - -const struct MenuAction MultichoiceList_111[] = -{ - {gUnknown_085EB4AD, NULL}, - {gUnknown_085EB4B9, NULL}, - {gUnknown_085EB4C7, NULL}, - {gUnknown_085EB4D4, NULL}, - {gUnknown_085EB597, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_112[] = -{ - {gText_BattleTrainers, NULL}, - {gUnknown_085EB45C, NULL}, - {gUnknown_085EB469, NULL}, - {gUnknown_085EB475, NULL}, - {gUnknown_085EB482, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_113[] = -{ - {gText_NormalTagMatch, NULL}, - {gText_VarietyTagMatch, NULL}, - {gText_UniqueTagMatch, NULL}, - {gText_ExpertTagMatch, NULL}, - {gText_Exit, NULL}, -}; - -const struct MenuAction MultichoiceList_001[] = -{ - {gText_Exit, NULL}, -}; - -struct MultichoiceListStruct -{ - const struct MenuAction *list; - u8 count; -}; - -const struct MultichoiceListStruct gMultichoiceLists[] = -{ - {MultichoiceList_000, ARRAY_COUNT(MultichoiceList_000)}, - {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)}, - {MultichoiceList_002, ARRAY_COUNT(MultichoiceList_002)}, - {MultichoiceList_003, ARRAY_COUNT(MultichoiceList_003)}, - {MultichoiceList_004, ARRAY_COUNT(MultichoiceList_004)}, - {MultichoiceList_005, ARRAY_COUNT(MultichoiceList_005)}, - {MultichoiceList_006, ARRAY_COUNT(MultichoiceList_006)}, - {MultichoiceList_007, ARRAY_COUNT(MultichoiceList_007)}, - {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)}, - {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)}, - {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)}, - {MultichoiceList_011, ARRAY_COUNT(MultichoiceList_011)}, - {MultichoiceList_012, ARRAY_COUNT(MultichoiceList_012)}, - {MultichoiceList_013, ARRAY_COUNT(MultichoiceList_013)}, - {MultichoiceList_014, ARRAY_COUNT(MultichoiceList_014)}, - {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)}, - {MultichoiceList_016, ARRAY_COUNT(MultichoiceList_016)}, - {MultichoiceList_017, ARRAY_COUNT(MultichoiceList_017)}, - {MultichoiceList_018, ARRAY_COUNT(MultichoiceList_018)}, - {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)}, - {MultichoiceList_020, ARRAY_COUNT(MultichoiceList_020)}, - {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)}, - {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)}, - {MultichoiceList_023, ARRAY_COUNT(MultichoiceList_023)}, - {MultichoiceList_024, ARRAY_COUNT(MultichoiceList_024)}, - {MultichoiceList_025, ARRAY_COUNT(MultichoiceList_025)}, - {MultichoiceList_026, ARRAY_COUNT(MultichoiceList_026)}, - {MultichoiceList_027, ARRAY_COUNT(MultichoiceList_027)}, - {MultichoiceList_028, ARRAY_COUNT(MultichoiceList_028)}, - {MultichoiceList_029, ARRAY_COUNT(MultichoiceList_029)}, - {MultichoiceList_030, ARRAY_COUNT(MultichoiceList_030)}, - {MultichoiceList_031, ARRAY_COUNT(MultichoiceList_031)}, - {MultichoiceList_032, ARRAY_COUNT(MultichoiceList_032)}, - {MultichoiceList_033, ARRAY_COUNT(MultichoiceList_033)}, - {MultichoiceList_034, ARRAY_COUNT(MultichoiceList_034)}, - {MultichoiceList_035, ARRAY_COUNT(MultichoiceList_035)}, - {MultichoiceList_036, ARRAY_COUNT(MultichoiceList_036)}, - {MultichoiceList_037, ARRAY_COUNT(MultichoiceList_037)}, - {MultichoiceList_038, ARRAY_COUNT(MultichoiceList_038)}, - {MultichoiceList_039, ARRAY_COUNT(MultichoiceList_039)}, - {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)}, - {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)}, - {MultichoiceList_042, ARRAY_COUNT(MultichoiceList_042)}, - {MultichoiceList_043, ARRAY_COUNT(MultichoiceList_043)}, - {MultichoiceList_044, ARRAY_COUNT(MultichoiceList_044)}, - {MultichoiceList_045, ARRAY_COUNT(MultichoiceList_045)}, - {MultichoiceList_046, ARRAY_COUNT(MultichoiceList_046)}, - {MultichoiceList_047, ARRAY_COUNT(MultichoiceList_047)}, - {MultichoiceList_048, ARRAY_COUNT(MultichoiceList_048)}, - {MultichoiceList_049, ARRAY_COUNT(MultichoiceList_049)}, - {MultichoiceList_050, ARRAY_COUNT(MultichoiceList_050)}, - {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)}, - {MultichoiceList_052, ARRAY_COUNT(MultichoiceList_052)}, - {MultichoiceList_053, ARRAY_COUNT(MultichoiceList_053)}, - {MultichoiceList_054, ARRAY_COUNT(MultichoiceList_054)}, - {MultichoiceList_055, ARRAY_COUNT(MultichoiceList_055)}, - {MultichoiceList_056, ARRAY_COUNT(MultichoiceList_056)}, - {MultichoiceList_057, ARRAY_COUNT(MultichoiceList_057)}, - {MultichoiceList_058, ARRAY_COUNT(MultichoiceList_058)}, - {MultichoiceList_059, ARRAY_COUNT(MultichoiceList_059)}, - {MultichoiceList_060, ARRAY_COUNT(MultichoiceList_060)}, - {MultichoiceList_061, ARRAY_COUNT(MultichoiceList_061)}, - {MultichoiceList_062, ARRAY_COUNT(MultichoiceList_062)}, - {MultichoiceList_063, ARRAY_COUNT(MultichoiceList_063)}, - {MultichoiceList_064, ARRAY_COUNT(MultichoiceList_064)}, - {MultichoiceList_065, ARRAY_COUNT(MultichoiceList_065)}, - {MultichoiceList_066, ARRAY_COUNT(MultichoiceList_066)}, - {MultichoiceList_067, ARRAY_COUNT(MultichoiceList_067)}, - {MultichoiceList_068, ARRAY_COUNT(MultichoiceList_068)}, - {MultichoiceList_069, ARRAY_COUNT(MultichoiceList_069)}, - {MultichoiceList_070, ARRAY_COUNT(MultichoiceList_070)}, - {MultichoiceList_071, ARRAY_COUNT(MultichoiceList_071)}, - {MultichoiceList_072, ARRAY_COUNT(MultichoiceList_072)}, - {MultichoiceList_073, ARRAY_COUNT(MultichoiceList_073)}, - {MultichoiceList_074, ARRAY_COUNT(MultichoiceList_074)}, - {MultichoiceList_074, ARRAY_COUNT(MultichoiceList_074)}, - {MultichoiceList_076, ARRAY_COUNT(MultichoiceList_076)}, - {MultichoiceList_076, ARRAY_COUNT(MultichoiceList_076)}, - {MultichoiceList_078, ARRAY_COUNT(MultichoiceList_078)}, - {MultichoiceList_079, ARRAY_COUNT(MultichoiceList_079)}, - {MultichoiceList_080, ARRAY_COUNT(MultichoiceList_080)}, - {MultichoiceList_081, ARRAY_COUNT(MultichoiceList_081)}, - {MultichoiceList_082, ARRAY_COUNT(MultichoiceList_082)}, - {MultichoiceList_083, ARRAY_COUNT(MultichoiceList_083)}, - {MultichoiceList_084, ARRAY_COUNT(MultichoiceList_084)}, - {MultichoiceList_085, ARRAY_COUNT(MultichoiceList_085)}, - {MultichoiceList_086, ARRAY_COUNT(MultichoiceList_086)}, - {MultichoiceList_087, ARRAY_COUNT(MultichoiceList_087)}, - {MultichoiceList_088, ARRAY_COUNT(MultichoiceList_088)}, - {MultichoiceList_089, ARRAY_COUNT(MultichoiceList_089)}, - {MultichoiceList_090, ARRAY_COUNT(MultichoiceList_090)}, - {MultichoiceList_091, ARRAY_COUNT(MultichoiceList_091)}, - {MultichoiceList_092, ARRAY_COUNT(MultichoiceList_092)}, - {MultichoiceList_093, ARRAY_COUNT(MultichoiceList_093)}, - {MultichoiceList_094, ARRAY_COUNT(MultichoiceList_094)}, - {MultichoiceList_095, ARRAY_COUNT(MultichoiceList_095)}, - {MultichoiceList_096, ARRAY_COUNT(MultichoiceList_096)}, - {MultichoiceList_097, ARRAY_COUNT(MultichoiceList_097)}, - {MultichoiceList_098, ARRAY_COUNT(MultichoiceList_098)}, - {MultichoiceList_099, ARRAY_COUNT(MultichoiceList_099)}, - {MultichoiceList_100, ARRAY_COUNT(MultichoiceList_100)}, - {MultichoiceList_101, ARRAY_COUNT(MultichoiceList_101)}, - {MultichoiceList_102, ARRAY_COUNT(MultichoiceList_102)}, - {MultichoiceList_103, ARRAY_COUNT(MultichoiceList_103)}, - {MultichoiceList_104, ARRAY_COUNT(MultichoiceList_104)}, - {MultichoiceList_105, ARRAY_COUNT(MultichoiceList_105)}, - {MultichoiceList_106, ARRAY_COUNT(MultichoiceList_106)}, - {MultichoiceList_107, ARRAY_COUNT(MultichoiceList_107)}, - {MultichoiceList_108, ARRAY_COUNT(MultichoiceList_108)}, - {MultichoiceList_109, ARRAY_COUNT(MultichoiceList_109)}, - {MultichoiceList_110, ARRAY_COUNT(MultichoiceList_110)}, - {MultichoiceList_111, ARRAY_COUNT(MultichoiceList_111)}, - {MultichoiceList_112, ARRAY_COUNT(MultichoiceList_112)}, - {MultichoiceList_113, ARRAY_COUNT(MultichoiceList_113)}, -}; - -const u8 *const gUnknown_0858BAF0[] = -{ - gText_Cool, - gText_Beauty, - gText_Cute, - gText_Smart, - gText_Tough, - gText_Normal, - gText_Super, - gText_Hyper, - gText_Master, - gText_Cool2, - gText_Beauty2, - gText_Cute2, - gText_Smart2, - gText_Tough2, - gText_Items, - gText_Key_Items, - gText_Poke_Balls, - gText_TMs_Hms, - gText_Berries2, - gText_Single2, - gText_Double2, - gText_Multi, - gText_MultiLink, - gText_BattleTower2, - gText_BattleDome, - gText_BattleFactory, - gText_BattlePalace, - gText_BattleArena, - gText_BattlePike, - gText_BattlePyramid, -}; - -const u8 gUnknown_0858BB68[] = { 74, 75, 76, 77, 78, 79 }; - -const u8 *const sPCNameStrings[] = -{ - gText_SomeonesPC, - gText_LanettesPC, - gText_PlayersPC, - gText_LogOff, -}; - -const u8 *const gUnknown_0858BB80[] = -{ - gText_SlateportCity, - gText_BattleFrontier, - gText_SouthernIsland, - gText_NavelRock, - gText_BirthIsland, - gText_FarawayIsland, - gText_Exit, -}; - -const u8 *const gUnknown_0858BB9C[] = -{ - OldaleTown_PokemonCenter_2F_Text_277F1B, - OldaleTown_PokemonCenter_2F_Text_277F5A, - OldaleTown_PokemonCenter_2F_Text_277F96, - OldaleTown_PokemonCenter_2F_Text_27889C, -}; -const u8 *const gUnknown_0858BBAC[] = -{ - OldaleTown_PokemonCenter_2F_Text_27879F, - OldaleTown_PokemonCenter_2F_Text_2787D5, - OldaleTown_PokemonCenter_2F_Text_278831, - OldaleTown_PokemonCenter_2F_Text_27889C, -}; -const u8 *const gUnknown_0858BBBC[] = -{ - OldaleTown_PokemonCenter_2F_Text_27879F, - OldaleTown_PokemonCenter_2F_Text_2787D5, - OldaleTown_PokemonCenter_2F_Text_2787FC, - OldaleTown_PokemonCenter_2F_Text_27889C, -}; -const u8 *const gUnknown_0858BBCC[] = -{ - OldaleTown_PokemonCenter_2F_Text_27879F, - OldaleTown_PokemonCenter_2F_Text_2787D5, - OldaleTown_PokemonCenter_2F_Text_278831, - OldaleTown_PokemonCenter_2F_Text_2787FC, - OldaleTown_PokemonCenter_2F_Text_27889C, -}; -const u8 *const gUnknown_0858BBE0[] = -{ - OldaleTown_PokemonCenter_2F_Text_277F1B, - OldaleTown_PokemonCenter_2F_Text_277F5A, - OldaleTown_PokemonCenter_2F_Text_27889C, -}; -const u8 *const gUnknown_0858BBEC[] = -{ - OldaleTown_PokemonCenter_2F_Text_27879F, - OldaleTown_PokemonCenter_2F_Text_2787D5, - OldaleTown_PokemonCenter_2F_Text_27889C, -}; - -EWRAM_DATA u8 gUnknown_02039F90 = 0; - -static u8 gUnknown_03001124[7]; -static u32 filler_0300112c; - -static void Task_HandleMultichoiceInput(u8); -static void Task_HandleYesNoInput(u8); -static void Task_HandleMultichoiceGridInput(u8); -static void DrawMultichoiceMenu(u8, u8, u8, bool8, u8); -static void sub_80E1FBC(u8, u8, u8, u8); -static void sub_80E2A94(u8); -static void CreatePCMenu(void); -static void sub_80E2578(void); +static void Task_HandleMultichoiceInput(u8 taskId); +static void Task_HandleYesNoInput(u8 taskId); +static void Task_HandleMultichoiceGridInput(u8 taskId); +static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 cursorPos); +static void InitMultichoiceCheckWrap(bool8 ignoreBPress, u8 count, u8 windowId, u8 multichoiceId); +static void DrawLinkServicesMultichoiceMenu(u8 multichoiceId); +static void CreatePCMultichoice(void); +static void CreateLilycoveSSTidalMultichoice(void); static bool8 IsPicboxClosed(void); -static void CreateStartMenu(void); -static void sub_80E2CC4(u8, u8, u8, u8); +static void CreateStartMenuForPokenavTutorial(void); +static void InitMultichoiceNoWrap(bool8 ignoreBPress, u8 unusedCount, u8 windowId, u8 multichoiceId); -bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress) +bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress) { if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE) { @@ -1060,7 +64,8 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, bool8 } } -static u16 sub_80E1EB8(const u8 *str) +// Unused +static u16 GetLengthWithExpandedPlayerName(const u8 *str) { u16 length = 0; @@ -1069,7 +74,7 @@ static u16 sub_80E1EB8(const u8 *str) if (*str == PLACEHOLDER_BEGIN) { str++; - if (*str == 1) + if (*str == PLACEHOLDER_ID_PLAYER) { length += StringLength(gSaveBlock2Ptr->playerName); str++; @@ -1085,28 +90,28 @@ static u16 sub_80E1EB8(const u8 *str) return length; } -static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 cursorPos) +static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 cursorPos) { int i; u8 windowId; - u8 count = gMultichoiceLists[multichoiceId].count; - const struct MenuAction *actions = gMultichoiceLists[multichoiceId].list; + u8 count = sMultichoiceLists[multichoiceId].count; + const struct MenuAction *actions = sMultichoiceLists[multichoiceId].list; int width = 0; u8 newWidth; for (i = 0; i < count; i++) { - width = display_text_and_get_width(actions[i].text, width); + width = DisplayTextAndGetWidth(actions[i].text, width); } - newWidth = convert_pixel_width_to_tile_width(width); - left = sub_80E2D5C(left, newWidth); + newWidth = ConvertPixelWidthToTileWidth(width); + left = ScriptMenu_AdjustLeftCoordFromWidth(left, newWidth); windowId = CreateWindowFromRect(left, top, newWidth, count * 2); SetStandardWindowBorderStyle(windowId, 0); PrintMenuTable(windowId, count, actions); InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, cursorPos); schedule_bg_copy_tilemap_to_vram(0); - sub_80E1FBC(ignoreBPress, count, windowId, multichoiceId); + InitMultichoiceCheckWrap(ignoreBPress, count, windowId, multichoiceId); } #define tLeft data[0] @@ -1118,17 +123,17 @@ static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPre #define tWindowId data[6] #define tMultichoiceId data[7] -static void sub_80E1FBC(u8 ignoreBPress, u8 count, u8 windowId, u8 multichoiceId) +static void InitMultichoiceCheckWrap(bool8 ignoreBPress, u8 count, u8 windowId, u8 multichoiceId) { u8 i; u8 taskId; - gUnknown_02039F90 = 2; + sProcessInputDelay = 2; - for (i = 0; i < 6; i++) + for (i = 0; i < ARRAY_COUNT(sLinkServicesMultichoiceIds); i++) { - if (gUnknown_0858BB68[i] == multichoiceId) + if (sLinkServicesMultichoiceIds[i] == multichoiceId) { - gUnknown_02039F90 = 12; + sProcessInputDelay = 12; } } @@ -1144,7 +149,7 @@ static void sub_80E1FBC(u8 ignoreBPress, u8 count, u8 windowId, u8 multichoiceId gTasks[taskId].tWindowId = windowId; gTasks[taskId].tMultichoiceId = multichoiceId; - sub_80E2A94(multichoiceId); + DrawLinkServicesMultichoiceMenu(multichoiceId); } static void Task_HandleMultichoiceInput(u8 taskId) @@ -1154,9 +159,9 @@ static void Task_HandleMultichoiceInput(u8 taskId) if (!gPaletteFade.active) { - if (gUnknown_02039F90) + if (sProcessInputDelay) { - gUnknown_02039F90--; + sProcessInputDelay--; } else { @@ -1167,7 +172,7 @@ static void Task_HandleMultichoiceInput(u8 taskId) if (gMain.newKeys & (DPAD_UP | DPAD_DOWN)) { - sub_80E2A94(tMultichoiceId); + DrawLinkServicesMultichoiceMenu(tMultichoiceId); } if (selection != MENU_NOTHING_CHOSEN) @@ -1177,7 +182,7 @@ static void Task_HandleMultichoiceInput(u8 taskId) if (tIgnoreBPress) return; PlaySE(SE_SELECT); - gSpecialVar_Result = 127; + gSpecialVar_Result = MULTI_B_PRESSED; } else { @@ -1208,7 +213,7 @@ bool8 ScriptMenu_YesNo(u8 left, u8 top) } } -// unused +// Unused bool8 IsScriptActive(void) { if (gSpecialVar_Result == 0xFF) @@ -1243,7 +248,7 @@ static void Task_HandleYesNoInput(u8 taskId) EnableBothScriptContexts(); } -bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 columnCount) +bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 columnCount) { if (FuncIsActiveTask(Task_HandleMultichoiceGridInput) == TRUE) { @@ -1258,22 +263,22 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPr gSpecialVar_Result = 0xFF; width = 0; - for (i = 0; i < gMultichoiceLists[multichoiceId].count; i++) + for (i = 0; i < sMultichoiceLists[multichoiceId].count; i++) { - width = display_text_and_get_width(gMultichoiceLists[multichoiceId].list[i].text, width); + width = DisplayTextAndGetWidth(sMultichoiceLists[multichoiceId].list[i].text, width); } - newWidth = convert_pixel_width_to_tile_width(width); + newWidth = ConvertPixelWidthToTileWidth(width); - left = sub_80E2D5C(left, columnCount * newWidth); - rowCount = gMultichoiceLists[multichoiceId].count / columnCount; + left = ScriptMenu_AdjustLeftCoordFromWidth(left, columnCount * newWidth); + rowCount = sMultichoiceLists[multichoiceId].count / columnCount; taskId = CreateTask(Task_HandleMultichoiceGridInput, 80); gTasks[taskId].tIgnoreBPress = ignoreBPress; gTasks[taskId].tWindowId = CreateWindowFromRect(left, top, columnCount * newWidth, rowCount * 2); SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, 0); - PrintMenuGridTable(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, gMultichoiceLists[multichoiceId].list); + PrintMenuGridTable(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, sMultichoiceLists[multichoiceId].list); sub_8199944(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, 0); CopyWindowToVram(gTasks[taskId].tWindowId, 3); return TRUE; @@ -1293,7 +298,7 @@ static void Task_HandleMultichoiceGridInput(u8 taskId) if (tIgnoreBPress) return; PlaySE(SE_SELECT); - gSpecialVar_Result = 0x7F; + gSpecialVar_Result = MULTI_B_PRESSED; break; default: gSpecialVar_Result = selection; @@ -1307,7 +312,7 @@ static void Task_HandleMultichoiceGridInput(u8 taskId) #undef tWindowId -bool16 ScrSpecial_CreatePCMenu(void) +bool16 ScriptMenu_CreatePCMultichoice(void) { if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE) { @@ -1316,12 +321,12 @@ bool16 ScrSpecial_CreatePCMenu(void) else { gSpecialVar_Result = 0xFF; - CreatePCMenu(); + CreatePCMultichoice(); return TRUE; } } -static void CreatePCMenu(void) +static void CreatePCMultichoice(void) { u8 y = 8; u32 pixelWidth = 0; @@ -1332,17 +337,18 @@ static void CreatePCMenu(void) for (i = 0; i < ARRAY_COUNT(sPCNameStrings); i++) { - pixelWidth = display_text_and_get_width(sPCNameStrings[i], pixelWidth); + pixelWidth = DisplayTextAndGetWidth(sPCNameStrings[i], pixelWidth); } if (FlagGet(FLAG_SYS_GAME_CLEAR)) { - pixelWidth = display_text_and_get_width(gText_HallOfFame, pixelWidth); + pixelWidth = DisplayTextAndGetWidth(gText_HallOfFame, pixelWidth); } - width = convert_pixel_width_to_tile_width(pixelWidth); + width = ConvertPixelWidthToTileWidth(pixelWidth); - if (FlagGet(FLAG_SYS_GAME_CLEAR)) // player has cleared game? + // Include Hall of Fame option if player is champion + if (FlagGet(FLAG_SYS_GAME_CLEAR)) { numChoices = 4; windowId = CreateWindowFromRect(0, 0, width, 8); @@ -1358,7 +364,8 @@ static void CreatePCMenu(void) AddTextPrinterParameterized(windowId, 1, gText_LogOff, y, 33, TEXT_SPEED_FF, NULL); } - if (FlagGet(FLAG_SYS_PC_LANETTE)) // player met lanette? + // Change PC name if player has met Lanette + if (FlagGet(FLAG_SYS_PC_LANETTE)) AddTextPrinterParameterized(windowId, 1, gText_LanettesPC, y, 1, TEXT_SPEED_FF, NULL); else AddTextPrinterParameterized(windowId, 1, gText_SomeonesPC, y, 1, TEXT_SPEED_FF, NULL); @@ -1367,7 +374,7 @@ static void CreatePCMenu(void) PrintPlayerNameOnWindow(windowId, gStringVar4, y, 17); InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, numChoices, 0); CopyWindowToVram(windowId, 3); - sub_80E1FBC(FALSE, numChoices, windowId, 1); + InitMultichoiceCheckWrap(FALSE, numChoices, windowId, MULTI_PC); } void ScriptMenu_DisplayPCStartupPrompt(void) @@ -1376,7 +383,7 @@ void ScriptMenu_DisplayPCStartupPrompt(void) AddTextPrinterParameterized2(0, 1, gText_WhichPCShouldBeAccessed, 0, NULL, 2, 1, 3); } -bool8 sub_80E2548(void) +bool8 ScriptMenu_CreateLilycoveSSTidalMultichoice(void) { if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE) { @@ -1385,14 +392,16 @@ bool8 sub_80E2548(void) else { gSpecialVar_Result = 0xFF; - sub_80E2578(); + CreateLilycoveSSTidalMultichoice(); return TRUE; } } -static void sub_80E2578(void) +// gSpecialVar_0x8004 is 1 if the Sailor was shown multiple event tickets at the same time +// otherwise gSpecialVar_0x8004 is 0 +static void CreateLilycoveSSTidalMultichoice(void) { - u8 temp = 0; + u8 selectionCount = 0; u8 count; u32 pixelWidth; u8 width; @@ -1400,21 +409,22 @@ static void sub_80E2578(void) u8 i; u32 j; - for (i = 0; i < ARRAY_COUNT(gUnknown_03001124); i++) + for (i = 0; i < SSTIDAL_SELECTION_COUNT; i++) { - gUnknown_03001124[i] = 0xFF; + sLilycoveSSTidalSelections[i] = 0xFF; } GetFontAttribute(1, FONTATTR_MAX_LETTER_WIDTH); if (gSpecialVar_0x8004 == 0) { - gUnknown_03001124[temp] = 0; - temp++; + sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_SLATEPORT; + selectionCount++; + if (FlagGet(FLAG_MET_SCOTT_ON_SS_TIDAL) == TRUE) { - gUnknown_03001124[temp] = 1; - temp++; + sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_BATTLE_FRONTIER; + selectionCount++; } } @@ -1422,14 +432,14 @@ static void sub_80E2578(void) { if (gSpecialVar_0x8004 == 0) { - gUnknown_03001124[temp] = 2; - temp++; + sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_SOUTHERN_ISLAND; + selectionCount++; } if (gSpecialVar_0x8004 == 1 && FlagGet(FLAG_HAS_EON_TICKET) == FALSE) { - gUnknown_03001124[temp] = 2; - temp++; + sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_SOUTHERN_ISLAND; + selectionCount++; FlagSet(FLAG_HAS_EON_TICKET); } } @@ -1438,14 +448,14 @@ static void sub_80E2578(void) { if (gSpecialVar_0x8004 == 0) { - gUnknown_03001124[temp] = 3; - temp++; + sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_NAVEL_ROCK; + selectionCount++; } if (gSpecialVar_0x8004 == 1 && FlagGet(FLAG_HAS_MYSTIC_TICKET) == FALSE) { - gUnknown_03001124[temp] = 3; - temp++; + sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_NAVEL_ROCK; + selectionCount++; FlagSet(FLAG_HAS_MYSTIC_TICKET); } } @@ -1454,14 +464,14 @@ static void sub_80E2578(void) { if (gSpecialVar_0x8004 == 0) { - gUnknown_03001124[temp] = 4; - temp++; + sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_BIRTH_ISLAND; + selectionCount++; } if (gSpecialVar_0x8004 == 1 && FlagGet(FLAG_HAS_AURORA_TICKET) == FALSE) { - gUnknown_03001124[temp] = 4; - temp++; + sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_BIRTH_ISLAND; + selectionCount++; FlagSet(FLAG_HAS_AURORA_TICKET); } } @@ -1470,69 +480,69 @@ static void sub_80E2578(void) { if (gSpecialVar_0x8004 == 0) { - gUnknown_03001124[temp] = 5; - temp++; + sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_FARAWAY_ISLAND; + selectionCount++; } if (gSpecialVar_0x8004 == 1 && FlagGet(FLAG_HAS_OLD_SEA_MAP) == FALSE) { - gUnknown_03001124[temp] = 5; - temp++; + sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_FARAWAY_ISLAND; + selectionCount++; FlagSet(FLAG_HAS_OLD_SEA_MAP); } } - gUnknown_03001124[temp] = 6; - temp++; + sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_EXIT; + selectionCount++; if (gSpecialVar_0x8004 == 0 && FlagGet(FLAG_MET_SCOTT_ON_SS_TIDAL) == TRUE) { - count = temp; + count = selectionCount; } - count = temp; - if (count == 7) + count = selectionCount; + if (count == SSTIDAL_SELECTION_COUNT) { - gSpecialVar_0x8004 = 11; - sub_813A128(); + gSpecialVar_0x8004 = SCROLL_MULTI_SS_TIDAL_DESTINATION; + ShowScrollableMultichoice(); } else { pixelWidth = 0; - for (j = 0; j < ARRAY_COUNT(gUnknown_0858BB80); j++) + for (j = 0; j < SSTIDAL_SELECTION_COUNT; j++) { - u8 test = gUnknown_03001124[j]; - if (test != 0xFF) + u8 selection = sLilycoveSSTidalSelections[j]; + if (selection != 0xFF) { - pixelWidth = display_text_and_get_width(gUnknown_0858BB80[test], pixelWidth); + pixelWidth = DisplayTextAndGetWidth(sLilycoveSSTidalDestinations[selection], pixelWidth); } } - width = convert_pixel_width_to_tile_width(pixelWidth); - windowId = CreateWindowFromRect(28 - width, (6 - count) * 2, width, count * 2); + width = ConvertPixelWidthToTileWidth(pixelWidth); + windowId = CreateWindowFromRect(MAX_MULTICHOICE_WIDTH - width, (6 - count) * 2, width, count * 2); SetStandardWindowBorderStyle(windowId, 0); - for (temp = 0, i = 0; i < ARRAY_COUNT(gUnknown_0858BB80); i++) + for (selectionCount = 0, i = 0; i < SSTIDAL_SELECTION_COUNT; i++) { - if (gUnknown_03001124[i] != 0xFF) + if (sLilycoveSSTidalSelections[i] != 0xFF) { - AddTextPrinterParameterized(windowId, 1, gUnknown_0858BB80[gUnknown_03001124[i]], 8, temp * 16 + 1, TEXT_SPEED_FF, NULL); - temp++; + AddTextPrinterParameterized(windowId, 1, sLilycoveSSTidalDestinations[sLilycoveSSTidalSelections[i]], 8, selectionCount * 16 + 1, TEXT_SPEED_FF, NULL); + selectionCount++; } } InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, count - 1); CopyWindowToVram(windowId, 3); - sub_80E1FBC(FALSE, count, windowId, 8); + InitMultichoiceCheckWrap(FALSE, count, windowId, MULTI_SSTIDAL_LILYCOVE); } } -void sub_80E2878(void) +void GetLilycoveSSTidalSelection(void) { - if (gSpecialVar_Result != 0x7F) + if (gSpecialVar_Result != MULTI_B_PRESSED) { - gSpecialVar_Result = gUnknown_03001124[gSpecialVar_Result]; + gSpecialVar_Result = sLilycoveSSTidalSelections[gSpecialVar_Result]; } } @@ -1629,50 +639,52 @@ void ClearToTransparentAndRemoveWindow(u8 windowId) RemoveWindow(windowId); } -static void sub_80E2A94(u8 multichoiceId) +static void DrawLinkServicesMultichoiceMenu(u8 multichoiceId) { switch (multichoiceId) { - case 77: + case MULTI_WIRELESS_NO_BERRY: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gUnknown_0858BBAC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, sWirelessOptionsNoBerryCrush[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); break; - case 76: + case MULTI_CABLE_CLUB_WITH_RECORD_MIX: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gUnknown_0858BB9C[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, sCableClubOptions_WithRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); break; - case 78: + case MULTI_WIRELESS_NO_RECORD: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gUnknown_0858BBBC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, sWirelessOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); break; - case 79: + case MULTI_WIRELESS_ALL_SERVICES: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gUnknown_0858BBCC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, sWirelessOptions_AllServices[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); break; - case 75: + case MULTI_WIRELESS_NO_RECORD_BERRY: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gUnknown_0858BBEC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, sWirelessOptions_NoRecordMixBerryCrush[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); break; - case 74: + case MULTI_CABLE_CLUB_NO_RECORD_MIX: FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gUnknown_0858BBE0[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, sCableClubOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); break; } } -bool16 sp106_CreateStartMenu(void) +bool16 ScriptMenu_CreateStartMenuForPokenavTutorial(void) { if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE) { return FALSE; } - - gSpecialVar_Result = 0xFF; - CreateStartMenu(); - return TRUE; + else + { + gSpecialVar_Result = 0xFF; + CreateStartMenuForPokenavTutorial(); + return TRUE; + } } -static void CreateStartMenu(void) +static void CreateStartMenuForPokenavTutorial(void) { u8 windowId = CreateWindowFromRect(21, 0, 7, 18); SetStandardWindowBorderStyle(windowId, 0); @@ -1684,17 +696,17 @@ static void CreateStartMenu(void) AddTextPrinterParameterized(windowId, 1, gText_MenuOptionSave, 8, 89, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(windowId, 1, gText_MenuOptionOption, 8, 105, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(windowId, 1, gText_MenuOptionExit, 8, 121, TEXT_SPEED_FF, NULL); - sub_81983AC(windowId, 1, 0, 9, 16, 8, 0); - sub_80E2CC4(0, 8, windowId, 86); + sub_81983AC(windowId, 1, 0, 9, 16, ARRAY_COUNT(MultichoiceList_ForcedStartMenu), 0); + InitMultichoiceNoWrap(FALSE, ARRAY_COUNT(MultichoiceList_ForcedStartMenu), windowId, MULTI_FORCED_START_MENU); CopyWindowToVram(windowId, 3); } #define tWindowId data[6] -static void sub_80E2CC4(bool8 ignoreBPress, u8 unused, u8 windowId, u8 multichoiceId) +static void InitMultichoiceNoWrap(bool8 ignoreBPress, u8 unusedCount, u8 windowId, u8 multichoiceId) { u8 taskId; - gUnknown_02039F90 = 2; + sProcessInputDelay = 2; taskId = CreateTask(Task_HandleMultichoiceInput, 80); gTasks[taskId].tIgnoreBPress = ignoreBPress; gTasks[taskId].tDoWrap = 0; @@ -1711,47 +723,43 @@ static void sub_80E2CC4(bool8 ignoreBPress, u8 unused, u8 windowId, u8 multichoi #undef tWindowId #undef tMultichoiceId -static int display_text_and_get_width_internal(const u8 *str) +static int DisplayTextAndGetWidthInternal(const u8 *str) { u8 temp[64]; StringExpandPlaceholders(temp, str); return GetStringWidth(1, temp, 0); } -int display_text_and_get_width(const u8 *str, int prevMaxWidth) +int DisplayTextAndGetWidth(const u8 *str, int prevWidth) { - int len = display_text_and_get_width_internal(str); - if (len < prevMaxWidth) + int width = DisplayTextAndGetWidthInternal(str); + if (width < prevWidth) { - len = prevMaxWidth; + width = prevWidth; } - return len; + return width; } -int convert_pixel_width_to_tile_width(int width) +int ConvertPixelWidthToTileWidth(int width) { - return (((width + 9) / 8) + 1) > 28 ? 28 : (((width + 9) / 8) + 1); + return (((width + 9) / 8) + 1) > MAX_MULTICHOICE_WIDTH ? MAX_MULTICHOICE_WIDTH : (((width + 9) / 8) + 1); } -int sub_80E2D5C(int a0, int a1) +int ScriptMenu_AdjustLeftCoordFromWidth(int left, int width) { - int ret = a0; + int adjustedLeft = left; - if (a0 + a1 > 28) + if (left + width > MAX_MULTICHOICE_WIDTH) { - if (28 - a1 < 0) + if (MAX_MULTICHOICE_WIDTH - width < 0) { - ret = 0; + adjustedLeft = 0; } else { - ret = 28 - a1; + adjustedLeft = MAX_MULTICHOICE_WIDTH - width; } } - else - { - ret = a0; - } - return ret; + return adjustedLeft; } diff --git a/src/script_movement.c b/src/script_movement.c index 9fee9e060..03d6b10e8 100644 --- a/src/script_movement.c +++ b/src/script_movement.c @@ -3,20 +3,22 @@ #include "event_object_movement.h" #include "task.h" #include "util.h" +#include "constants/event_objects.h" +#include "constants/event_object_movement_constants.h" // static functions -static void sub_80D33AC(u8); -static u8 sub_80D33F4(void); -static bool8 sub_80D3408(u8, u8, const u8 *); -static u8 sub_80D3474(u8, u8); -static bool8 sub_80D3584(u8, u8); -static void sub_80D35DC(u8, u8, u8, const u8 *); -static void UnfreezeObjects(u8); -static void sub_80D3660(u8); -static void sub_80A2490(u8, u8, u8, const u8 *); +static void ScriptMovement_StartMoveObjects(u8 priority); +static u8 GetMoveObjectsTaskId(void); +static bool8 ScriptMovement_TryAddNewMovement(u8 taskId, u8 eventObjId, const u8 *movementScript); +static u8 GetMovementScriptIdFromEventObjectId(u8 taskId, u8 eventObjId); +static bool8 IsMovementScriptFinished(u8 taskId, u8 moveScrId); +static void ScriptMovement_AddNewMovement(u8 taskId, u8 moveScrId, u8 eventObjId, const u8 *movementScript); +static void ScriptMovement_UnfreezeActiveObjects(u8 taskId); +static void ScriptMovement_MoveObjects(u8 taskId); +static void ScriptMovement_TakeStep(u8 taskId, u8 moveScrId, u8 eventObjId, const u8 *movementScript); // EWRAM_DATA -static EWRAM_DATA const u8 *gUnknown_02039D90[16] = {0}; +static EWRAM_DATA const u8 *gMovementScripts[EVENT_OBJECTS_COUNT] = {0}; // text bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, const u8 *movementScript) @@ -25,207 +27,207 @@ bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGrou if (TryGetEventObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &eventObjId)) return TRUE; - if (!FuncIsActiveTask(sub_80D3660)) - sub_80D33AC(50); - return sub_80D3408(sub_80D33F4(), eventObjId, movementScript); + if (!FuncIsActiveTask(ScriptMovement_MoveObjects)) + ScriptMovement_StartMoveObjects(50); + return ScriptMovement_TryAddNewMovement(GetMoveObjectsTaskId(), eventObjId, movementScript); } -bool8 ScriptMovement_IsObjectMovementFinished(u8 localId, u8 mapNum, u8 mapBank) +bool8 ScriptMovement_IsObjectMovementFinished(u8 localId, u8 mapNum, u8 mapGroup) { u8 eventObjId; - u8 r4; - u8 r1; + u8 taskId; + u8 moveScrId; - if (TryGetEventObjectIdByLocalIdAndMap(localId, mapNum, mapBank, &eventObjId)) + if (TryGetEventObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &eventObjId)) return TRUE; - r4 = sub_80D33F4(); - r1 = sub_80D3474(r4, eventObjId); - if (r1 == 16) + taskId = GetMoveObjectsTaskId(); + moveScrId = GetMovementScriptIdFromEventObjectId(taskId, eventObjId); + if (moveScrId == EVENT_OBJECTS_COUNT) return TRUE; - return sub_80D3584(r4, r1); + return IsMovementScriptFinished(taskId, moveScrId); } -void sub_80D338C(void) +void ScriptMovement_UnfreezeEventObjects(void) { u8 taskId; - taskId = sub_80D33F4(); + taskId = GetMoveObjectsTaskId(); if (taskId != 0xFF) { - UnfreezeObjects(taskId); + ScriptMovement_UnfreezeActiveObjects(taskId); DestroyTask(taskId); } } - -static void sub_80D33AC(u8 priority) +static void ScriptMovement_StartMoveObjects(u8 priority) { u8 taskId; u8 i; - taskId = CreateTask(sub_80D3660, priority); - for (i = 1; i < 16; i++) + taskId = CreateTask(ScriptMovement_MoveObjects, priority); + + for (i = 1; i < NUM_TASK_DATA; i++) gTasks[taskId].data[i] = 0xFFFF; } -static u8 sub_80D33F4(void) +static u8 GetMoveObjectsTaskId(void) { - return FindTaskIdByFunc(sub_80D3660); + return FindTaskIdByFunc(ScriptMovement_MoveObjects); } -static bool8 sub_80D3408(u8 taskId, u8 eventObjId, const u8 *movementScript) +static bool8 ScriptMovement_TryAddNewMovement(u8 taskId, u8 eventObjId, const u8 *movementScript) { - u8 r4; + u8 moveScrId; - r4 = sub_80D3474(taskId, eventObjId); - if (r4 != 16) + moveScrId = GetMovementScriptIdFromEventObjectId(taskId, eventObjId); + if (moveScrId != EVENT_OBJECTS_COUNT) { - if (sub_80D3584(taskId, r4) == 0) + if (IsMovementScriptFinished(taskId, moveScrId) == 0) { return TRUE; } else { - sub_80D35DC(taskId, r4, eventObjId, movementScript); + ScriptMovement_AddNewMovement(taskId, moveScrId, eventObjId, movementScript); return FALSE; } } - r4 = sub_80D3474(taskId, 0xFF); - if (r4 == 16) + moveScrId = GetMovementScriptIdFromEventObjectId(taskId, EVENT_OBJ_ID_PLAYER); + if (moveScrId == EVENT_OBJECTS_COUNT) { return TRUE; } else { - sub_80D35DC(taskId, r4, eventObjId, movementScript); + ScriptMovement_AddNewMovement(taskId, moveScrId, eventObjId, movementScript); return FALSE; } } -static u8 sub_80D3474(u8 taskId, u8 b) +static u8 GetMovementScriptIdFromEventObjectId(u8 taskId, u8 eventObjId) { - u8 *ptr; + u8 *moveScriptId; u8 i; - ptr = (u8 *)&gTasks[taskId].data[1]; - for (i = 0; i < 16; i++, ptr++) + moveScriptId = (u8 *)&gTasks[taskId].data[1]; + for (i = 0; i < EVENT_OBJECTS_COUNT; i++, moveScriptId++) { - if (*ptr == b) + if (*moveScriptId == eventObjId) return i; } - return 16; + return EVENT_OBJECTS_COUNT; } -static void sub_80D34B0(u8 taskId, u8 b, u8 **c) +static void LoadEventObjectIdPtrFromMovementScript(u8 taskId, u8 moveScrId, u8 **pEventObjId) { u8 i; - *c = (u8 *)&gTasks[taskId].data[1]; - for (i = 0; i < b; i++, (*c)++) + *pEventObjId = (u8 *)&gTasks[taskId].data[1]; + for (i = 0; i < moveScrId; i++, (*pEventObjId)++) ; } -static void sub_80D34E4(u8 taskId, u8 b, u8 c) +static void SetEventObjectIdAtMovementScript(u8 taskId, u8 moveScrId, u8 eventObjId) { u8 *ptr; - sub_80D34B0(taskId, b, &ptr); - *ptr = c; //what is this supposed to do? + LoadEventObjectIdPtrFromMovementScript(taskId, moveScrId, &ptr); + *ptr = eventObjId; } -static void sub_80D3508(u8 taskId, u8 b, u8 *c) +static void LoadEventObjectIdFromMovementScript(u8 taskId, u8 moveScrId, u8 *eventObjId) { u8 *ptr; - sub_80D34B0(taskId, b, &ptr); - *c = *ptr; + LoadEventObjectIdPtrFromMovementScript(taskId, moveScrId, &ptr); + *eventObjId = *ptr; } -static void sub_80D352C(u8 a, u8 b) +static void ClearMovementScriptFinished(u8 taskId, u8 moveScrId) { - u16 var = ~gBitTable[b]; + u16 mask = ~gBitTable[moveScrId]; - gTasks[a].data[0] &= var; + gTasks[taskId].data[0] &= mask; } -static void sub_80D355C(u8 taskId, u8 b) +static void SetMovementScriptFinished(u8 taskId, u8 moveScrId) { - gTasks[taskId].data[0] |= gBitTable[b]; + gTasks[taskId].data[0] |= gBitTable[moveScrId]; } -static bool8 sub_80D3584(u8 taskId, u8 b) +static bool8 IsMovementScriptFinished(u8 taskId, u8 moveScrId) { - u16 var = (u16)gTasks[taskId].data[0] & gBitTable[b]; + u16 moveScriptFinished = (u16)gTasks[taskId].data[0] & gBitTable[moveScrId]; - if (var != 0) + if (moveScriptFinished != 0) return TRUE; else return FALSE; } -static void npc_obj_offscreen_culling_and_flag_update(u8 a, const u8 *movementScript) +static void SetMovementScript(u8 moveScrId, const u8 *movementScript) { - gUnknown_02039D90[a] = movementScript; + gMovementScripts[moveScrId] = movementScript; } -static const u8 *sub_80D35CC(u8 a) +static const u8 *GetMovementScript(u8 moveScrId) { - return gUnknown_02039D90[a]; + return gMovementScripts[moveScrId]; } -static void sub_80D35DC(u8 taskId, u8 b, u8 eventObjId, const u8 *movementScript) +static void ScriptMovement_AddNewMovement(u8 taskId, u8 moveScrId, u8 eventObjId, const u8 *movementScript) { - sub_80D352C(taskId, b); - npc_obj_offscreen_culling_and_flag_update(b, movementScript); - sub_80D34E4(taskId, b, eventObjId); + ClearMovementScriptFinished(taskId, moveScrId); + SetMovementScript(moveScrId, movementScript); + SetEventObjectIdAtMovementScript(taskId, moveScrId, eventObjId); } -static void UnfreezeObjects(u8 taskId) +static void ScriptMovement_UnfreezeActiveObjects(u8 taskId) { u8 *pEventObjId; u8 i; pEventObjId = (u8 *)&gTasks[taskId].data[1]; - for (i = 0; i < 16; i++, pEventObjId++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++, pEventObjId++) { if (*pEventObjId != 0xFF) UnfreezeEventObject(&gEventObjects[*pEventObjId]); } } -static void sub_80D3660(u8 taskId) +static void ScriptMovement_MoveObjects(u8 taskId) { u8 i; - u8 var; + u8 eventObjId; - for (i = 0; i < 16; i++) + for (i = 0; i < EVENT_OBJECTS_COUNT; i++) { - sub_80D3508(taskId, i, &var); - if (var != 0xFF) - sub_80A2490(taskId, i, var, sub_80D35CC(i)); + LoadEventObjectIdFromMovementScript(taskId, i, &eventObjId); + if (eventObjId != 0xFF) + ScriptMovement_TakeStep(taskId, i, eventObjId, GetMovementScript(i)); } } -static void sub_80A2490(u8 taskId, u8 b, u8 eventObjId, const u8 *d) +static void ScriptMovement_TakeStep(u8 taskId, u8 moveScrId, u8 eventObjId, const u8 *movementScript) { - u8 var; + u8 nextMoveActionId; if (EventObjectIsHeldMovementActive(&gEventObjects[eventObjId]) && !EventObjectClearHeldMovementIfFinished(&gEventObjects[eventObjId])) return; - var = *d; - if (var == 0xFE) + nextMoveActionId = *movementScript; + if (nextMoveActionId == MOVEMENT_ACTION_STEP_END) { - sub_80D355C(taskId, b); + SetMovementScriptFinished(taskId, moveScrId); FreezeEventObject(&gEventObjects[eventObjId]); } else { - if (!EventObjectSetHeldMovement(&gEventObjects[eventObjId], var)) + if (!EventObjectSetHeldMovement(&gEventObjects[eventObjId], nextMoveActionId)) { - d++; - npc_obj_offscreen_culling_and_flag_update(b, d); + movementScript++; + SetMovementScript(moveScrId, movementScript); } } } diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c index 2c7a9c775..a80fe49ff 100755 --- a/src/script_pokemon_util_80F87D8.c +++ b/src/script_pokemon_util_80F87D8.c @@ -551,7 +551,7 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u u8 heldItem[2]; struct Pokemon mon; - CreateMon(&mon, species, level, 32, 0, 0, 0, 0); + CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); heldItem[0] = item; heldItem[1] = item >> 8; SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem); @@ -585,14 +585,14 @@ void HasEnoughMonsForDoubleBattle(void) { switch (GetMonsStateToDoubles()) { - case 0: - gSpecialVar_Result = 0; + case PLAYER_HAS_TWO_USABLE_MONS: + gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS; break; - case 1: - gSpecialVar_Result = 1; + case PLAYER_HAS_ONE_MON: + gSpecialVar_Result = PLAYER_HAS_ONE_MON; break; - case 2: - gSpecialVar_Result = 2; + case PLAYER_HAS_ONE_USABLE_MON: + gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON; break; } } @@ -624,7 +624,7 @@ void CreateScriptedWildMon(u16 species, u8 level, u16 item) u8 heldItem[2]; ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, 0, 0); + CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, OT_ID_PLAYER_ID, 0); if (item) { heldItem[0] = item; diff --git a/src/secret_base.c b/src/secret_base.c index 12cb8cd61..861a987e2 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -349,7 +349,7 @@ void SetPlayerSecretBase(void) u16 i; gSaveBlock1Ptr->secretBases[0].secretBaseId = sCurSecretBaseId; - for (i = 0; i < 4; i++) + for (i = 0; i < TRAINER_ID_LENGTH; i++) gSaveBlock1Ptr->secretBases[0].trainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; VarSet(VAR_CURRENT_SECRET_BASE, 0); @@ -1291,7 +1291,7 @@ static void SetSecretBaseDataAndLanguage(u8 secretBaseId, struct SecretBase *sec static bool8 SecretBasesHaveSameTrainerId(struct SecretBase *secretBase1, struct SecretBase *secretBase2) { u8 i; - for (i = 0; i < 4; i++) + for (i = 0; i < TRAINER_ID_LENGTH; i++) { if (secretBase1->trainerId[i] != secretBase2->trainerId[i]) return FALSE; @@ -1445,7 +1445,7 @@ bool8 SecretBaseBelongsToPlayer(struct SecretBase *secretBase) return FALSE; // Check if the player's trainer Id matches the secret base's id. - for (i = 0; i < 4; i++) + for (i = 0; i < TRAINER_ID_LENGTH; i++) { if (secretBase->trainerId[i] != gSaveBlock2Ptr->playerTrainerId[i]) return FALSE; diff --git a/src/string_util.c b/src/string_util.c index 39d235ab8..bce299057 100644 --- a/src/string_util.c +++ b/src/string_util.c @@ -505,20 +505,20 @@ const u8 *GetExpandedPlaceholder(u32 id) static const ExpandPlaceholderFunc funcs[] = { - ExpandPlaceholder_UnknownStringVar, - ExpandPlaceholder_PlayerName, - ExpandPlaceholder_StringVar1, - ExpandPlaceholder_StringVar2, - ExpandPlaceholder_StringVar3, - ExpandPlaceholder_KunChan, - ExpandPlaceholder_RivalName, - ExpandPlaceholder_Version, - ExpandPlaceholder_Aqua, - ExpandPlaceholder_Magma, - ExpandPlaceholder_Archie, - ExpandPlaceholder_Maxie, - ExpandPlaceholder_Kyogre, - ExpandPlaceholder_Groudon, + [PLACEHOLDER_ID_UNKNOWN] = ExpandPlaceholder_UnknownStringVar, + [PLACEHOLDER_ID_PLAYER] = ExpandPlaceholder_PlayerName, + [PLACEHOLDER_ID_STRING_VAR_1] = ExpandPlaceholder_StringVar1, + [PLACEHOLDER_ID_STRING_VAR_2] = ExpandPlaceholder_StringVar2, + [PLACEHOLDER_ID_STRING_VAR_3] = ExpandPlaceholder_StringVar3, + [PLACEHOLDER_ID_KUN] = ExpandPlaceholder_KunChan, + [PLACEHOLDER_ID_RIVAL] = ExpandPlaceholder_RivalName, + [PLACEHOLDER_ID_VERSION] = ExpandPlaceholder_Version, + [PLACEHOLDER_ID_AQUA] = ExpandPlaceholder_Aqua, + [PLACEHOLDER_ID_MAGMA] = ExpandPlaceholder_Magma, + [PLACEHOLDER_ID_ARCHIE] = ExpandPlaceholder_Archie, + [PLACEHOLDER_ID_MAXIE] = ExpandPlaceholder_Maxie, + [PLACEHOLDER_ID_KYOGRE] = ExpandPlaceholder_Kyogre, + [PLACEHOLDER_ID_GROUDON] = ExpandPlaceholder_Groudon, }; if (id >= ARRAY_COUNT(funcs)) diff --git a/src/strings.c b/src/strings.c index 8463cfacb..ed702958e 100644 --- a/src/strings.c +++ b/src/strings.c @@ -599,89 +599,89 @@ const u8 gText_Brawly[] = _("BRAWLY"); const u8 gText_Winona[] = _("WINONA"); const u8 gText_Phoebe[] = _("PHOEBE"); const u8 gText_Glacia[] = _("GLACIA"); -const u8 gUnknown_085EAD37[] = _("PETALBURG"); -const u8 gUnknown_085EAD41[] = _("SLATEPORT"); -const u8 gUnknown_085EAD4B[] = _("LITTLEROOT"); -const u8 gUnknown_085EAD56[] = _("LILYCOVE"); -const u8 gUnknown_085EAD5F[] = _("DEWFORD"); -const u8 gUnknown_085EAD67[] = _("ENTER"); -const u8 gUnknown_085EAD6D[] = _("INFO"); -const u8 gUnknown_085EAD72[] = _("What's a CONTEST?"); -const u8 gUnknown_085EAD84[] = _("Types of CONTESTS"); -const u8 gUnknown_085EAD96[] = _("Ranks"); -const u8 gUnknown_085EAD9C[] = _("Judging"); -const u8 gUnknown_085EADA4[] = _("COOLNESS CONTEST"); -const u8 gUnknown_085EADB5[] = _("BEAUTY CONTEST"); -const u8 gUnknown_085EADC4[] = _("CUTENESS CONTEST"); -const u8 gUnknown_085EADD5[] = _("SMARTNESS CONTEST"); -const u8 gUnknown_085EADE7[] = _("TOUGHNESS CONTEST"); -const u8 gUnknown_085EADF9[] = _("DECORATION"); -const u8 gUnknown_085EAE04[] = _("PACK UP"); -const u8 gUnknown_085EAE0C[] = _("COUNT"); -const u8 gUnknown_085EAE12[] = _("REGISTRY"); -const u8 gUnknown_085EAE1B[] = _("INFORMATION"); -const u8 gUnknown_085EAE27[] = _("MACH"); -const u8 gUnknown_085EAE2C[] = _("ACRO"); -const u8 gUnknown_085EAE31[] = _("PSN"); -const u8 gUnknown_085EAE35[] = _("PAR"); -const u8 gUnknown_085EAE39[] = _("SLP"); -const u8 gUnknown_085EAE3D[] = _("BRN"); -const u8 gUnknown_085EAE41[] = _("FRZ"); +const u8 gText_Petalburg[] = _("PETALBURG"); +const u8 gText_Slateport[] = _("SLATEPORT"); +const u8 gText_Littleroot[] = _("LITTLEROOT"); // Unused. Given the context, Briney may at one point have been able to sail the player here +const u8 gText_Lilycove[] = _("LILYCOVE"); // Unused. Given the context, Briney may at one point have been able to sail the player here +const u8 gText_Dewford[] = _("DEWFORD"); +const u8 gText_Enter2[] = _("ENTER"); +const u8 gText_Info2[] = _("INFO"); +const u8 gText_WhatsAContest[] = _("What's a CONTEST?"); +const u8 gText_TypesOfContests[] = _("Types of CONTESTS"); +const u8 gText_Ranks[] = _("Ranks"); +const u8 gText_Judging[] = _("Judging"); //unused +const u8 gText_CoolnessContest[] = _("COOLNESS CONTEST"); +const u8 gText_BeautyContest[] = _("BEAUTY CONTEST"); +const u8 gText_CutenessContest[] = _("CUTENESS CONTEST"); +const u8 gText_SmartnessContest[] = _("SMARTNESS CONTEST"); +const u8 gText_ToughnessContest[] = _("TOUGHNESS CONTEST"); +const u8 gText_Decoration2[] = _("DECORATION"); +const u8 gText_PackUp[] = _("PACK UP"); +const u8 gText_Count[] = _("COUNT"); //unused +const u8 gText_Registry[] = _("REGISTRY"); +const u8 gText_Information[] = _("INFORMATION"); +const u8 gText_Mach[] = _("MACH"); +const u8 gText_Acro[] = _("ACRO"); +const u8 gText_Psn[] = _("PSN"); +const u8 gText_Par[] = _("PAR"); +const u8 gText_Slp[] = _("SLP"); +const u8 gText_Brn[] = _("BRN"); +const u8 gText_Frz[] = _("FRZ"); const u8 gUnknown_085EAE45[] = _("TOXIC"); const u8 gUnknown_085EAE4B[] = _("OK"); const u8 gUnknown_085EAE4E[] = _("QUIT"); -const u8 gUnknown_085EAE53[] = _("Saw it"); -const u8 gUnknown_085EAE5A[] = _("Not yet"); +const u8 gText_SawIt[] = _("Saw it"); +const u8 gText_NotYet[] = _("Not yet"); const u8 gText_Yes[] = _("YES"); const u8 gText_No[] = _("NO"); const u8 gUnknown_085EAE69[] = _("INFO"); -const u8 gUnknown_085EAE6E[] = _("SINGLE BATTLE"); -const u8 gUnknown_085EAE7C[] = _("DOUBLE BATTLE"); -const u8 gUnknown_085EAE8A[] = _("MULTI BATTLE"); +const u8 gText_SingleBattle[] = _("SINGLE BATTLE"); +const u8 gText_DoubleBattle[] = _("DOUBLE BATTLE"); +const u8 gText_MultiBattle[] = _("MULTI BATTLE"); const u8 gUnknown_085EAE97[] = _("MR. BRINEY"); -const u8 gUnknown_085EAEA2[] = _("CHALLENGE"); -const u8 gUnknown_085EAEAC[] = _("INFO"); +const u8 gText_Challenge[] = _("CHALLENGE"); +const u8 gText_Info3[] = _("INFO"); const u8 gText_Lv50[] = _("LV. 50"); const u8 gText_OpenLevel[] = _("OPEN LEVEL"); -const u8 gUnknown_085EAEC3[] = _("FRESH WATER{CLEAR_TO 0x48}¥200"); -const u8 gUnknown_085EAED6[] = _("SODA POP{CLEAR_TO 0x48}¥300"); -const u8 gUnknown_085EAEE6[] = _("LEMONADE{CLEAR_TO 0x48}¥350"); -const u8 gUnknown_085EAEF6[] = _("HOW TO RIDE"); -const u8 gUnknown_085EAF02[] = _("HOW TO TURN"); -const u8 gUnknown_085EAF0E[] = _("SANDY SLOPES"); -const u8 gUnknown_085EAF1B[] = _("WHEELIES"); -const u8 gUnknown_085EAF24[] = _("BUNNY-HOPS"); -const u8 gUnknown_085EAF2F[] = _("JUMP"); -const u8 gUnknown_085EAF34[] = _("Satisfied"); -const u8 gUnknown_085EAF3E[] = _("Dissatisfied"); -const u8 gUnknown_085EAF4B[] = _("DEEPSEATOOTH"); -const u8 gUnknown_085EAF58[] = _("DEEPSEASCALE"); -const u8 gUnknown_085EAF65[] = _("BLUE FLUTE"); -const u8 gUnknown_085EAF70[] = _("YELLOW FLUTE"); -const u8 gUnknown_085EAF7D[] = _("RED FLUTE"); -const u8 gUnknown_085EAF87[] = _("WHITE FLUTE"); -const u8 gUnknown_085EAF93[] = _("BLACK FLUTE"); -const u8 gUnknown_085EAF9F[] = _("GLASS CHAIR"); -const u8 gUnknown_085EAFAB[] = _("GLASS DESK"); -const u8 gUnknown_085EAFB6[] = _("TREECKO DOLL 1,000 COINS"); -const u8 gUnknown_085EAFCF[] = _("TORCHIC DOLL 1,000 COINS"); -const u8 gUnknown_085EAFE8[] = _("MUDKIP DOLL 1,000 COINS"); -const u8 gUnknown_085EB002[] = _(" 50 COINS ¥1,000"); -const u8 gUnknown_085EB017[] = _("500 COINS ¥10,000"); -const u8 gUnknown_085EB02A[] = _("Excellent"); -const u8 gUnknown_085EB034[] = _("Not so good"); -const u8 gUnknown_085EB040[] = _("RED SHARD"); -const u8 gUnknown_085EB04A[] = _("YELLOW SHARD"); -const u8 gUnknown_085EB057[] = _("BLUE SHARD"); -const u8 gUnknown_085EB062[] = _("GREEN SHARD"); +const u8 gText_FreshWaterAndPrice[] = _("FRESH WATER{CLEAR_TO 0x48}¥200"); +const u8 gText_SodaPopAndPrice[] = _("SODA POP{CLEAR_TO 0x48}¥300"); +const u8 gText_LemonadeAndPrice[] = _("LEMONADE{CLEAR_TO 0x48}¥350"); +const u8 gText_HowToRide[] = _("HOW TO RIDE"); +const u8 gText_HowToTurn[] = _("HOW TO TURN"); +const u8 gText_SandySlopes[] = _("SANDY SLOPES"); +const u8 gText_Wheelies[] = _("WHEELIES"); +const u8 gText_BunnyHops[] = _("BUNNY-HOPS"); +const u8 gText_Jump[] = _("JUMP"); +const u8 gText_Satisfied[] = _("Satisfied"); +const u8 gText_Dissatisfied[] = _("Dissatisfied"); +const u8 gText_DeepSeaTooth[] = _("DEEPSEATOOTH"); +const u8 gText_DeepSeaScale[] = _("DEEPSEASCALE"); +const u8 gText_BlueFlute2[] = _("BLUE FLUTE"); +const u8 gText_YellowFlute2[] = _("YELLOW FLUTE"); +const u8 gText_RedFlute2[] = _("RED FLUTE"); +const u8 gText_WhiteFlute2[] = _("WHITE FLUTE"); +const u8 gText_BlackFlute2[] = _("BLACK FLUTE"); +const u8 gText_GlassChair[] = _("GLASS CHAIR"); +const u8 gText_GlassDesk[] = _("GLASS DESK"); +const u8 gText_TreeckoDollAndPrice[] = _("TREECKO DOLL 1,000 COINS"); +const u8 gText_TorchicDollAndPrice[] = _("TORCHIC DOLL 1,000 COINS"); +const u8 gText_MudkipDollAndPrice[] = _("MUDKIP DOLL 1,000 COINS"); +const u8 gText_50CoinsAndPrice[] = _(" 50 COINS ¥1,000"); +const u8 gText_500CoinsAndPrice[] = _("500 COINS ¥10,000"); +const u8 gText_Excellent2[] = _("Excellent"); +const u8 gText_NotSoGood[] = _("Not so good"); +const u8 gText_RedShard[] = _("RED SHARD"); +const u8 gText_YellowShard[] = _("YELLOW SHARD"); +const u8 gText_BlueShard[] = _("BLUE SHARD"); +const u8 gText_GreenShard[] = _("GREEN SHARD"); const u8 gText_BattleFrontier[] = _("BATTLE FRONTIER"); -const u8 gUnknown_085EB07E[] = _("Right"); -const u8 gUnknown_085EB084[] = _("Left"); -const u8 gUnknown_085EB089[] = _("TM32{CLEAR_TO 0x48}1,500 COINS"); -const u8 gUnknown_085EB09C[] = _("TM29{CLEAR_TO 0x48}3,500 COINS"); -const u8 gUnknown_085EB0AF[] = _("TM35{CLEAR_TO 0x48}4,000 COINS"); -const u8 gUnknown_085EB0C2[] = _("TM24{CLEAR_TO 0x48}4,000 COINS"); -const u8 gUnknown_085EB0D5[] = _("TM13{CLEAR_TO 0x48}4,000 COINS"); +const u8 gText_Right[] = _("Right"); +const u8 gText_Left[] = _("Left"); +const u8 gText_TM32AndPrice[] = _("TM32{CLEAR_TO 0x48}1,500 COINS"); +const u8 gText_TM29AndPrice[] = _("TM29{CLEAR_TO 0x48}3,500 COINS"); +const u8 gText_TM35AndPrice[] = _("TM35{CLEAR_TO 0x48}4,000 COINS"); +const u8 gText_TM24AndPrice[] = _("TM24{CLEAR_TO 0x48}4,000 COINS"); +const u8 gText_TM13AndPrice[] = _("TM13{CLEAR_TO 0x48}4,000 COINS"); const u8 gText_Cool[] = _("COOL"); const u8 gText_Beauty[] = _("BEAUTY"); const u8 gText_Cute[] = _("CUTE"); @@ -728,82 +728,81 @@ const u8 gText_MenuOptionPokedex[] = _("POKéDEX"); const u8 gText_MenuOptionPokemon[] = _("POKéMON"); const u8 gText_MenuOptionBag[] = _("BAG"); const u8 gText_MenuOptionPokenav[] = _("POKéNAV"); -const u8 gUnknown_085EB278[] = _(""); +const u8 gText_Blank[] = _(""); const u8 gText_MenuOptionSave[] = _("SAVE"); const u8 gText_MenuOptionOption[] = _("OPTION"); const u8 gText_MenuOptionExit[] = _("EXIT"); -const u8 gUnknown_085EB28A[] = __(" "); -const u8 gUnknown_085EB28C[] = _("5BP"); -const u8 gUnknown_085EB290[] = _("10BP"); -const u8 gUnknown_085EB295[] = _("15BP"); -const u8 gUnknown_085EB29A[] = _("RED TENT"); -const u8 gUnknown_085EB2A3[] = _("BLUE TENT"); +const u8 gText_5BP[] = _(" 5BP"); +const u8 gText_10BP[] = _("10BP"); +const u8 gText_15BP[] = _("15BP"); +const u8 gText_RedTent[] = _("RED TENT"); +const u8 gText_BlueTent[] = _("BLUE TENT"); const u8 gText_SouthernIsland[] = _("SOUTHERN ISLAND"); const u8 gText_BirthIsland[] = _("BIRTH ISLAND"); const u8 gText_FarawayIsland[] = _("FARAWAY ISLAND"); const u8 gText_NavelRock[] = _("NAVEL ROCK"); -const u8 gUnknown_085EB2E4[] = _("CLAW FOSSIL"); -const u8 gUnknown_085EB2F0[] = _("ROOT FOSSIL"); -const u8 gUnknown_085EB2FC[] = _("NO"); -const u8 gUnknown_085EB2FF[] = _("I'll battle now!"); -const u8 gUnknown_085EB310[] = _("I won!"); -const u8 gUnknown_085EB317[] = _("I lost!"); -const u8 gUnknown_085EB31F[] = _("I won't tell."); +const u8 gText_ClawFossil[] = _("CLAW FOSSIL"); +const u8 gText_RootFossil[] = _("ROOT FOSSIL"); +const u8 gText_No4[] = _("NO"); +const u8 gText_IllBattleNow[] = _("I'll battle now!"); +const u8 gText_IWon[] = _("I won!"); +const u8 gText_ILost[] = _("I lost!"); +const u8 gText_IWontTell[] = _("I won't tell."); const u8 gText_NormalTagMatch[] = _("NORMAL TAG MATCH"); const u8 gText_VarietyTagMatch[] = _("VARIETY TAG MATCH"); const u8 gText_UniqueTagMatch[] = _("UNIQUE TAG MATCH"); const u8 gText_ExpertTagMatch[] = _("EXPERT TAG MATCH"); -const u8 gUnknown_085EB372[] = _("TRADE CENTER"); -const u8 gUnknown_085EB37F[] = _("COLOSSEUM"); -const u8 gUnknown_085EB389[] = _("RECORD CORNER"); -const u8 gUnknown_085EB397[] = _("BERRY CRUSH"); +const u8 gText_TradeCenter[] = _("TRADE CENTER"); +const u8 gText_Colosseum[] = _("COLOSSEUM"); +const u8 gText_RecordCorner[] = _("RECORD CORNER"); +const u8 gText_BerryCrush3[] = _("BERRY CRUSH"); const u8 gUnknown_085EB3A3[] = _(""); -const u8 gUnknown_085EB3A4[] = _("POKéMON JUMP"); -const u8 gUnknown_085EB3B1[] = _("DODRIO BERRY-PICKING"); -const u8 gUnknown_085EB3C6[] = _("BECOME LEADER"); -const u8 gUnknown_085EB3D4[] = _("JOIN GROUP"); -const u8 gUnknown_085EB3DF[] = _("TWO STYLES"); -const u8 gUnknown_085EB3EA[] = _("LV. 50"); -const u8 gUnknown_085EB3F1[] = _("OPEN LEVEL"); -const u8 gUnknown_085EB3FC[] = _("{PKMN} TYPE & NO."); -const u8 gUnknown_085EB40A[] = _("HOLD ITEMS"); -const u8 gUnknown_085EB415[] = _("SYMBOLS"); -const u8 gUnknown_085EB41D[] = _("RECORD"); -const u8 gUnknown_085EB424[] = _("BATTLE PTS"); -const u8 gUnknown_085EB42F[] = _("TOWER INFO"); -const u8 gUnknown_085EB43A[] = _("BATTLE {PKMN}"); -const u8 gUnknown_085EB444[] = _("BATTLE SALON"); -const u8 gUnknown_085EB451[] = _("MULTI-LINK"); -const u8 gUnknown_085EB45C[] = _("BATTLE RULES"); -const u8 gUnknown_085EB469[] = _("JUDGE: MIND"); -const u8 gUnknown_085EB475[] = _("JUDGE: SKILL"); -const u8 gUnknown_085EB482[] = _("JUDGE: BODY"); -const u8 gUnknown_085EB48E[] = _("MATCHUP"); -const u8 gUnknown_085EB496[] = _("TOURNEY TREE"); -const u8 gUnknown_085EB4A3[] = _("DOUBLE KO"); -const u8 gUnknown_085EB4AD[] = _("BASIC RULES"); -const u8 gUnknown_085EB4B9[] = _("SWAP: PARTNER"); -const u8 gUnknown_085EB4C7[] = _("SWAP: NUMBER"); -const u8 gUnknown_085EB4D4[] = _("SWAP: NOTES"); -const u8 gUnknown_085EB4E0[] = _("OPEN LEVEL"); +const u8 gText_PokemonJump[] = _("POKéMON JUMP"); +const u8 gText_DodrioBerryPicking[] = _("DODRIO BERRY-PICKING"); +const u8 gText_BecomeLeader[] = _("BECOME LEADER"); +const u8 gText_JoinGroup[] = _("JOIN GROUP"); +const u8 gText_TwoStyles[] = _("TWO STYLES"); +const u8 gText_Lv50_3[] = _("LV. 50"); +const u8 gText_OpenLevel2[] = _("OPEN LEVEL"); +const u8 gText_MonTypeAndNo[] = _("{PKMN} TYPE & NO."); +const u8 gText_HoldItems[] = _("HOLD ITEMS"); +const u8 gText_Symbols2[] = _("SYMBOLS"); +const u8 gText_Record3[] = _("RECORD"); +const u8 gText_BattlePts[] = _("BATTLE PTS"); +const u8 gText_TowerInfo[] = _("TOWER INFO"); +const u8 gText_BattleMon[] = _("BATTLE {PKMN}"); +const u8 gText_BattleSalon[] = _("BATTLE SALON"); +const u8 gText_MultiLink2[] = _("MULTI-LINK"); +const u8 gText_BattleRules[] = _("BATTLE RULES"); +const u8 gText_JudgeMind[] = _("JUDGE: MIND"); +const u8 gText_JudgeSkill[] = _("JUDGE: SKILL"); +const u8 gText_JudgeBody[] = _("JUDGE: BODY"); +const u8 gText_Matchup[] = _("MATCHUP"); +const u8 gText_TourneyTree[] = _("TOURNEY TREE"); +const u8 gText_DoubleKO[] = _("DOUBLE KO"); +const u8 gText_BasicRules[] = _("BASIC RULES"); +const u8 gText_SwapPartners[] = _("SWAP: PARTNER"); +const u8 gText_SwapNumber[] = _("SWAP: NUMBER"); +const u8 gText_SwapNotes[] = _("SWAP: NOTES"); +const u8 gText_OpenLevel3[] = _("OPEN LEVEL"); const u8 gText_BattleBasics[] = _("BATTLE BASICS"); const u8 gText_PokemonNature[] = _("POKéMON NATURE"); const u8 gText_PokemonMoves[] = _("POKéMON MOVES"); const u8 gText_Underpowered[] = _("UNDERPOWERED"); const u8 gText_WhenInDanger[] = _("WHEN IN DANGER"); -const u8 gUnknown_085EB532[] = _("PYRAMID: POKéMON"); -const u8 gUnknown_085EB543[] = _("PYRAMID: TRAINERS"); -const u8 gUnknown_085EB555[] = _("PYRAMID: MAZE"); -const u8 gUnknown_085EB563[] = _("BATTLE BAG"); -const u8 gUnknown_085EB56E[] = _("POKéNAV AND BAG"); -const u8 gUnknown_085EB57E[] = _("HELD ITEMS"); -const u8 gUnknown_085EB589[] = _("POKéMON ORDER"); -const u8 gUnknown_085EB597[] = _("BATTLE POKéMON"); +const u8 gText_PyramidPokemon[] = _("PYRAMID: POKéMON"); +const u8 gText_PyramidTrainers[] = _("PYRAMID: TRAINERS"); +const u8 gText_PyramidMaze[] = _("PYRAMID: MAZE"); +const u8 gText_BattleBag2[] = _("BATTLE BAG"); +const u8 gText_PokenavAndBag[] = _("POKéNAV AND BAG"); +const u8 gText_HeldItems[] = _("HELD ITEMS"); +const u8 gText_PokemonOrder[] = _("POKéMON ORDER"); +const u8 gText_BattlePokemon[] = _("BATTLE POKéMON"); const u8 gText_BattleTrainers[] = _("BATTLE TRAINERS"); -const u8 gUnknown_085EB5B6[] = _("GO ON"); -const u8 gUnknown_085EB5BC[] = _("RECORD"); -const u8 gUnknown_085EB5C3[] = _("REST"); -const u8 gUnknown_085EB5C8[] = _("RETIRE"); +const u8 gText_GoOn[] = _("GO ON"); +const u8 gText_Record2[] = _("RECORD"); +const u8 gText_Rest[] = _("REST"); +const u8 gText_Retire[] = _("RETIRE"); const u8 gText_99TimesPlus[] = _("99 times +"); const u8 gText_1MinutePlus[] = _("1 minute +"); const u8 gText_SpaceSeconds[] = _(" seconds"); @@ -1292,7 +1291,7 @@ const u8 gMatchCall_MayTrainersPokemonText[] = _("I'll use any POKéMON!"); const u8 gMatchCall_MaySelfIntroductionText_Line1[] = _("My POKéMON and I help"); const u8 gMatchCall_MaySelfIntroductionText_Line2[] = _("my father's research."); const u8 gText_HatchedFromEgg[] = _("{STR_VAR_1} hatched from the EGG!"); -const u8 gText_NickHatchPrompt[] = _("Would you like to nickname the newly\nhatched {STR_VAR_1}?"); +const u8 gText_NicknameHatchPrompt[] = _("Would you like to nickname the newly\nhatched {STR_VAR_1}?"); ALIGNED(4) const u8 gText_ReadyToBerryCrush[] = _("Are you ready to BERRY-CRUSH?\nPlease pick a BERRY for use.\p"); ALIGNED(4) const u8 gText_WaitForAllChooseBerry[] = _("Please wait while each member\nchooses a BERRY."); ALIGNED(4) const u8 gText_EndedWithXUnitsPowder[] = _("{PAUSE_MUSIC}{PLAY_BGM MUS_FANFA1}You ended up with {STR_VAR_1} units of\nsilky-smooth BERRY POWDER.{RESUME_MUSIC}\pYour total amount of BERRY POWDER\nis {STR_VAR_2}.\p"); @@ -1419,8 +1418,8 @@ const u8 gUnknown_085EE0FA[] = _("つうしん しゅうりょう!"); const u8 gUnknown_085EE107[] = _("あらたな トレーナーが\nホウエンに やってきた!"); const u8 gUnknown_085EE120[] = _("しばらく おまちください"); const u8 gUnknown_085EE12D[] = _("かきこみ エラー です\nデータが ほぞん できませんでした"); -const u8 gUnknown_085EE14B[] = _("RED"); -const u8 gUnknown_085EE14F[] = _("BLUE"); +const u8 gText_Red[] = _("RED"); +const u8 gText_Blue[] = _("BLUE"); const u8 gUnknown_085EE154[] = _("---"); const u8 gText_SingleBattleRoomResults[] = _("{PLAYER}'s Single Battle Room Results"); const u8 gText_DoubleBattleRoomResults[] = _("{PLAYER}'s Double Battle Room Results"); @@ -1591,23 +1590,23 @@ const u8 gText_PkmnsNickname[] = _("{STR_VAR_1}'s nickname?"); const u8 gText_TellHimTheWords[] = _("Tell him the words."); const u8 gText_MoveOkBack[] = _("{DPAD_NONE}MOVE {A_BUTTON}OK {B_BUTTON}BACK"); const u8 gText_CallCantBeMadeHere[] = _("A call can't be made from here."); -const u8 gUnknown_085EEB2B[] = _("HANDSOME"); -const u8 gUnknown_085EEB34[] = _("VINNY"); -const u8 gUnknown_085EEB3A[] = _("MOREME"); -const u8 gUnknown_085EEB41[] = _("IRONHARD"); -const u8 gUnknown_085EEB4A[] = _("MUSCLE"); -const u8 gUnknown_085EEB51[] = _("coolness"); -const u8 gUnknown_085EEB5A[] = _("beauty"); -const u8 gUnknown_085EEB61[] = _("cuteness"); -const u8 gUnknown_085EEB6A[] = _("smartness"); -const u8 gUnknown_085EEB74[] = _("toughness"); -const u8 gText_Lady2[] = _("Lady"); -const u8 gUnknown_085EEB83[] = _("slippery"); -const u8 gUnknown_085EEB8C[] = _("roundish"); -const u8 gUnknown_085EEB95[] = _("wham-ish"); -const u8 gUnknown_085EEB9E[] = _("shiny"); -const u8 gUnknown_085EEBA4[] = _("sticky"); -const u8 gUnknown_085EEBAB[] = _("pointy"); +const u8 gText_ContestLady_Handsome[] = _("HANDSOME"); +const u8 gText_ContestLady_Vinny[] = _("VINNY"); +const u8 gText_ContestLady_Moreme[] = _("MOREME"); +const u8 gText_ContestLady_Ironhard[] = _("IRONHARD"); +const u8 gText_ContestLady_Muscle[] = _("MUSCLE"); +const u8 gText_ContestLady_Coolness[] = _("coolness"); +const u8 gText_ContestLady_Beauty[] = _("beauty"); +const u8 gText_ContestLady_Cuteness[] = _("cuteness"); +const u8 gText_ContestLady_Smartness[] = _("smartness"); +const u8 gText_ContestLady_Toughness[] = _("toughness"); +const u8 gText_QuizLady_Lady[] = _("Lady"); +const u8 gText_FavorLady_Slippery[] = _("slippery"); +const u8 gText_FavorLady_Roundish[] = _("roundish"); +const u8 gText_FavorLady_Whamish[] = _("wham-ish"); +const u8 gText_FavorLady_Shiny[] = _("shiny"); +const u8 gText_FavorLady_Sticky[] = _("sticky"); +const u8 gText_FavorLady_Pointy[] = _("pointy"); const u8 gText_RentalPkmn2[] = _("RENTAL POKéMON"); const u8 gText_SelectFirstPkmn[] = _("Select the first POKéMON."); const u8 gText_SelectSecondPkmn[] = _("Select the second POKéMON."); diff --git a/src/trade.c b/src/trade.c index 94accc43c..c29fe54c3 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1551,7 +1551,7 @@ static void sub_80773D0(void) for (i = 0; i < PARTY_SIZE; i++) { - CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 0x20, FALSE, 0, 0, 0); + CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0); } sub_807A19C(0); @@ -3032,7 +3032,7 @@ static u8 sub_8079A3C(u8 *str, u8 whichParty, u8 monIdx) static void sub_8079AA4(u8 *a0, u8 a1, u8 a2) { - u16 arr[4]; + u16 moves[MAX_MON_MOVES]; u16 i; if (!gUnknown_0203229C->unk_51[a1][a2]) @@ -3041,11 +3041,11 @@ static void sub_8079AA4(u8 *a0, u8 a1, u8 a2) { if (!a1) { - arr[i] = GetMonData(&gPlayerParty[a2], i + MON_DATA_MOVE1, NULL); + moves[i] = GetMonData(&gPlayerParty[a2], i + MON_DATA_MOVE1, NULL); } else { - arr[i] = GetMonData(&gEnemyParty[a2], i + MON_DATA_MOVE1, NULL); + moves[i] = GetMonData(&gEnemyParty[a2], i + MON_DATA_MOVE1, NULL); } } @@ -3053,9 +3053,9 @@ static void sub_8079AA4(u8 *a0, u8 a1, u8 a2) for (i = 0; i < MAX_MON_MOVES; i++) { - if (arr[i] != MOVE_NONE) + if (moves[i] != MOVE_NONE) { - StringAppend(a0, gMoveNames[arr[i]]); + StringAppend(a0, gMoveNames[moves[i]]); } StringAppend(a0, gText_NewLine3); @@ -5832,7 +5832,7 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) u8 isMail; struct Pokemon *pokemon = &gEnemyParty[0]; - CreateMon(pokemon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId); + CreateMon(pokemon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, OT_ID_PRESET, inGameTrade->otId); SetMonData(pokemon, MON_DATA_HP_IV, &inGameTrade->ivs[0]); SetMonData(pokemon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]); diff --git a/src/trader.c b/src/trader.c index dcf1fa076..a3794a539 100644 --- a/src/trader.c +++ b/src/trader.c @@ -71,7 +71,7 @@ void CreateAvailableDecorationsMenu(u8 taskId) if (curWidth > windowWidth) windowWidth = curWidth; } - windowTemplate.width = convert_pixel_width_to_tile_width(windowWidth); + windowTemplate.width = ConvertPixelWidthToTileWidth(windowWidth); data[3] = AddWindow(&windowTemplate); DrawStdFrameWithCustomTileAndPalette(data[3], FALSE, 0x214, 14); for (i = 0; i < 4; i++) diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 77c8fcb53..2a7e003d9 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -38,58 +38,16 @@ #define HILL_TAG_UNIQUE 2 #define HILL_TAG_EXPERT 3 -#define HILL_TRAINER_NAME_LENGTH 11 #define HILL_MAX_TIME 215999 // 60 * 60 * 60 - 1 -struct TrHillRoomTrainers -{ - u8 name[2][HILL_TRAINER_NAME_LENGTH]; - u8 facilityClass[2]; -}; - -struct TrainerHillTrainer -{ - u8 name[HILL_TRAINER_NAME_LENGTH]; - u8 facilityClass; - u32 unused; - u16 speechBefore[6]; - u16 speechWin[6]; - u16 speechLose[6]; - u16 speechAfter[6]; - struct BattleTowerPokemon mons[PARTY_SIZE]; -}; - -struct TrHillFloor -{ - u8 unk0; - u8 unk1; - struct TrainerHillTrainer trainers[2]; - u8 data[0x100]; - u16 unk3A0[16]; - u8 coords[2]; // x first 4 bits, y last 4 bits - u8 direction; // array of 4 bits for each trainer - u8 range; // array of 4 bits for each trainer -}; - -struct TrHillTag -{ - u8 unkField_0; - u8 unused1; - u8 unkField_2; - u8 unused3; - u8 unused4; - u8 unused5; - u8 unused6; - struct TrHillFloor floors[4]; -}; - +// EWRAM struct TrHillStruct2 { u8 floorId; struct TrHillTag tag; + struct TrHillFloor floors[4]; }; -// EWRAM static EWRAM_DATA struct TrHillStruct2 *sHillData = NULL; static EWRAM_DATA struct TrHillRoomTrainers *sRoomTrainers = NULL; EWRAM_DATA u32 *gTrainerHillVBlankCounter = NULL; @@ -350,7 +308,7 @@ u8 GetTrainerHillTrainerFrontSpriteId(u16 trainerId) SetUpDataStruct(); id = trainerId - 1; - facilityClass = sHillData->tag.floors[sHillData->floorId].trainers[id].facilityClass; + facilityClass = sHillData->floors[sHillData->floorId].trainers[id].facilityClass; FreeDataStruct(); return gFacilityClassToPicIndex[facilityClass]; @@ -367,9 +325,9 @@ void InitTrainerHillBattleStruct(void) { for (j = 0; j < HILL_TRAINER_NAME_LENGTH; j++) { - sRoomTrainers->name[i][j] = sHillData->tag.floors[sHillData->floorId].trainers[i].name[j]; + sRoomTrainers->name[i][j] = sHillData->floors[sHillData->floorId].trainers[i].name[j]; } - sRoomTrainers->facilityClass[i] = sHillData->tag.floors[sHillData->floorId].trainers[i].facilityClass; + sRoomTrainers->facilityClass[i] = sHillData->floors[sHillData->floorId].trainers[i].facilityClass; } SetTrainerHillVBlankCounter(&gSaveBlock1Ptr->trainerHill.timer); FreeDataStruct(); @@ -387,7 +345,7 @@ static void SetUpDataStruct(void) { sHillData = AllocZeroed(sizeof(*sHillData)); sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F; - CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag)); + CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor)); nullsub_2(); } } @@ -409,16 +367,16 @@ void CopyTrainerHillTrainerText(u8 which, u16 trainerId) switch (which) { case 2: - FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechBefore); + FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechBefore); break; case 3: - FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechWin); + FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechWin); break; case 4: - FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechLose); + FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechLose); break; case 5: - FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechAfter); + FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechAfter); break; } @@ -460,7 +418,7 @@ static void sub_81D5924(void) { u16 itemId = sub_81D6640(); - if (sHillData->tag.unkField_2 != 4 || gSaveBlock1Ptr->trainerHill.field_3D6E_0a) + if (sHillData->tag.numFloors != 4 || gSaveBlock1Ptr->trainerHill.field_3D6E_0a) { gSpecialVar_Result = 2; } @@ -556,9 +514,9 @@ static void sub_81D5B2C(void) static void sub_81D5BBC(void) { SetUpDataStruct(); - if (sHillData->tag.unkField_2 != 4) + if (sHillData->tag.numFloors != 4) { - ConvertIntToDecimalStringN(gStringVar1, sHillData->tag.unkField_2, STR_CONV_MODE_LEFT_ALIGN, 1); + ConvertIntToDecimalStringN(gStringVar1, sHillData->tag.numFloors, STR_CONV_MODE_LEFT_ALIGN, 1); gSpecialVar_Result = 0; } else @@ -673,12 +631,12 @@ void sub_81D5DF8(void) eventTemplates[i] = gUnknown_0862A670; eventTemplates[i].localId = i + 1; - eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->tag.floors[floorId].trainers[i].facilityClass); - eventTemplates[i].x = sHillData->tag.floors[floorId].coords[i] & 0xF; - eventTemplates[i].y = ((sHillData->tag.floors[floorId].coords[i] >> 4) & 0xF) + 5; + eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->floors[floorId].trainers[i].facilityClass); + eventTemplates[i].x = sHillData->floors[floorId].display.coords[i] & 0xF; + eventTemplates[i].y = ((sHillData->floors[floorId].display.coords[i] >> 4) & 0xF) + 5; bits = i << 2; - eventTemplates[i].movementType = ((sHillData->tag.floors[floorId].direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP; - eventTemplates[i].trainerRange_berryTreeId = (sHillData->tag.floors[floorId].range >> bits) & 0xF; + eventTemplates[i].movementType = ((sHillData->floors[floorId].display.direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP; + eventTemplates[i].trainerRange_berryTreeId = (sHillData->floors[floorId].display.range >> bits) & 0xF; eventTemplates[i].script = EventScript_2C83F0; gSaveBlock2Ptr->frontier.trainerIds[i] = i + 1; } @@ -699,8 +657,8 @@ static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3) { u32 var0, var1, var2, var3; - var0 = (sHillData->tag.floors[floorId].unk3A0[arg2] >> (15 - bit)) & 1; - var1 = sHillData->tag.floors[floorId].data[arg2 * arg3 + bit]; + var0 = (sHillData->floors[floorId].unk3A0[arg2] >> (15 - bit)) & 1; + var1 = sHillData->floors[floorId].data[arg2 * arg3 + bit]; var3 = 0x200; var2 = 0x3000; @@ -943,7 +901,7 @@ static void sub_81D62CC(u16 trainerId, u8 firstMonId) u8 id = gUnknown_0862A698[trId][arrId]; struct Pokemon *mon = &gEnemyParty[i]; - CreateBattleTowerMon(mon, &sHillData->tag.floors[floorId].trainers[trId].mons[id]); + CreateBattleTowerMon(mon, &sHillData->floors[floorId].trainers[trId].mons[id]); sub_81D642C(mon, level); } @@ -978,7 +936,7 @@ u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId) SetUpDataStruct(); trId = trainerId - 1; - facilityClass = sHillData->tag.floors[sHillData->floorId].trainers[trId].facilityClass; + facilityClass = sHillData->floors[sHillData->floorId].trainers[trId].facilityClass; FreeDataStruct(); for (i = 0; i < ARRAY_COUNT(gUnknown_0862A3B4); i++) @@ -1005,7 +963,7 @@ u8 sub_81D6490(void) u8 ret; SetUpDataStruct(); - ret = sHillData->tag.unkField_2; + ret = sHillData->tag.numFloors; FreeDataStruct(); return ret; @@ -1070,8 +1028,8 @@ static u8 sub_81D65E8(u8 arg0) var = 0; for (i = 0; i < 4; i++) { - var ^= sHillData->tag.floors[i].unk0 & 0x1F; - var ^= sHillData->tag.floors[i].unk1 & 0x1F; + var ^= sHillData->floors[i].unk0 & 0x1F; + var ^= sHillData->floors[i].unk1 & 0x1F; } if (arg0) @@ -1091,8 +1049,8 @@ static u16 sub_81D6640(void) for (i = 0; i < 4; i++) { - var += sHillData->tag.floors[i].unk0; - var += sHillData->tag.floors[i].unk1; + var += sHillData->floors[i].unk0; + var += sHillData->floors[i].unk1; } var2 = var / 256; @@ -38,8 +38,10 @@ #include "secret_base.h" #include "tv.h" #include "data.h" +#include "constants/contest.h" #include "constants/layouts.h" #include "constants/metatile_behaviors.h" +#include "constants/script_menu.h" // Static type declarations @@ -182,7 +184,7 @@ static void DoTVShowPokemonContestLiveUpdates2(void); static const struct { u16 species; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; u8 level; u8 location; } sPokeOutbreakSpeciesList[] = { @@ -1657,12 +1659,12 @@ void PutLilycoveContestLadyShowOnTheAir(void) if (gSpecialVar_Result != TRUE) { show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot]; - sub_818E848(&show->contestLiveUpdates2.language); + BufferContestLadyLanguage(&show->contestLiveUpdates2.language); show->contestLiveUpdates2.pokemonNameLanguage = LANGUAGE_ENGLISH; show->contestLiveUpdates2.kind = TVSHOW_CONTEST_LIVE_UPDATES_2; show->contestLiveUpdates2.active = TRUE; - sub_818E81C(show->contestLiveUpdates2.playerName); - sub_818E7E0(&show->contestLiveUpdates2.contestCategory, show->contestLiveUpdates2.nickname); + BufferContestLadyPlayerName(show->contestLiveUpdates2.playerName); + BufferContestLadyMonName(&show->contestLiveUpdates2.contestCategory, show->contestLiveUpdates2.nickname); show->contestLiveUpdates2.pokeblockState = sub_818E880(); tv_store_id_2x(show); } @@ -2329,7 +2331,7 @@ void sub_80EE35C(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u1 show->battleSeminar.foeSpecies = foeSpecies; show->battleSeminar.species = species; show->battleSeminar.move = movePtr[moveIdx]; - for (i = 0, j = 0; i < 4; i ++) + for (i = 0, j = 0; i < MAX_MON_MOVES; i ++) { if (i != moveIdx && movePtr[i]) { @@ -2786,11 +2788,11 @@ bool8 GetPriceReduction(u8 newsKind) { u8 i; - if (newsKind == 0) + if (newsKind == POKENEWS_NONE) { return FALSE; } - for (i = 0; i < 16; i ++) + for (i = 0; i < POKE_NEWS_COUNT; i ++) { if (gSaveBlock1Ptr->pokeNews[i].kind == newsKind) { @@ -2870,17 +2872,17 @@ void CopyContestRankToStringVar(u8 varIdx, u8 rank) { switch (rank) { - case 0: // NORMAL - StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[5]); + case CONTEST_RANK_NORMAL: + StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_NORMAL]); break; - case 1: // SUPER - StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[6]); + case CONTEST_RANK_SUPER: + StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_SUPER]); break; - case 2: // HYPER - StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[7]); + case CONTEST_RANK_HYPER: + StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_HYPER]); break; - case 3: // MASTER - StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[8]); + case CONTEST_RANK_MASTER: + StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_MASTER]); break; } } @@ -2889,20 +2891,20 @@ void CopyContestCategoryToStringVar(u8 varIdx, u8 category) { switch (category) { - case 0: // COOL - StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[0]); + case CONTEST_CATEGORY_COOL: + StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_COOL]); break; - case 1: // BEAUTY - StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[1]); + case CONTEST_CATEGORY_BEAUTY: + StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_BEAUTY]); break; - case 2: // CUTE - StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[2]); + case CONTEST_CATEGORY_CUTE: + StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_CUTE]); break; - case 3: // SMART - StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[3]); + case CONTEST_CATEGORY_SMART: + StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_SMART]); break; - case 4: // TOUGH - StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[4]); + case CONTEST_CATEGORY_TOUGH: + StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_TOUGH]); break; } } @@ -5600,7 +5602,7 @@ static void DoTVShowPokemonContestLiveUpdates(void) switch (state) { case 0: - sub_818E868(gStringVar1, show->contestLiveUpdates.category); + BufferContestName(gStringVar1, show->contestLiveUpdates.category); StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]); TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language); if (show->contestLiveUpdates.round1Rank == show->contestLiveUpdates.round2Rank) @@ -7720,7 +7722,7 @@ static void DoTVShowPokemonContestLiveUpdates2(void) switch (state) { case 0: - sub_818E868(gStringVar1, show->contestLiveUpdates2.contestCategory); + BufferContestName(gStringVar1, show->contestLiveUpdates2.contestCategory); if (show->contestLiveUpdates2.pokeblockState == 1) { sTVShowState = 1; diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 84275526e..332bbfb99 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -143,47 +143,47 @@ static void FeebasSeedRng(u16 seed) static u8 ChooseWildMonIndex_Land(void) { - u8 rand = Random() % 100; + u8 rand = Random() % ENCOUNTER_CHANCE_LAND_MONS_TOTAL; - if (rand < 20) // 20% chance + if (rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_0) return 0; - else if (rand >= 20 && rand < 40) // 20% chance + else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_0 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_1) return 1; - else if (rand >= 40 && rand < 50) // 10% chance + else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_1 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_2) return 2; - else if (rand >= 50 && rand < 60) // 10% chance + else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_2 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_3) return 3; - else if (rand >= 60 && rand < 70) // 10% chance + else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_3 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_4) return 4; - else if (rand >= 70 && rand < 80) // 10% chance + else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_4 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_5) return 5; - else if (rand >= 80 && rand < 85) // 5% chance + else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_5 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_6) return 6; - else if (rand >= 85 && rand < 90) // 5% chance + else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_6 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_7) return 7; - else if (rand >= 90 && rand < 94) // 4% chance + else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_7 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_8) return 8; - else if (rand >= 94 && rand < 98) // 4% chance + else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_8 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_9) return 9; - else if (rand == 98) // 1% chance + else if (rand == ENCOUNTER_CHANCE_LAND_MONS_SLOT_9) return 10; - else // 1% chance + else return 11; } static u8 ChooseWildMonIndex_WaterRock(void) { - u8 rand = Random() % 100; + u8 rand = Random() % ENCOUNTER_CHANCE_WATER_MONS_TOTAL; - if (rand < 60) // 60% chance + if (rand < ENCOUNTER_CHANCE_WATER_MONS_SLOT_0) return 0; - else if (rand >= 60 && rand < 90) // 30% chance + else if (rand >= ENCOUNTER_CHANCE_WATER_MONS_SLOT_0 && rand < ENCOUNTER_CHANCE_WATER_MONS_SLOT_1) return 1; - else if (rand >= 90 && rand < 95) // 5% chance + else if (rand >= ENCOUNTER_CHANCE_WATER_MONS_SLOT_1 && rand < ENCOUNTER_CHANCE_WATER_MONS_SLOT_2) return 2; - else if (rand >= 95 && rand < 99) // 4% chance + else if (rand >= ENCOUNTER_CHANCE_WATER_MONS_SLOT_2 && rand < ENCOUNTER_CHANCE_WATER_MONS_SLOT_3) return 3; - else // 1% chance + else return 4; } @@ -197,34 +197,34 @@ enum static u8 ChooseWildMonIndex_Fishing(u8 rod) { u8 wildMonIndex = 0; - u8 rand = Random() % 100; + u8 rand = Random() % ENCOUNTER_CHANCE_FISHING_MONS_TOTAL; switch (rod) { case OLD_ROD: - if (rand < 70) // 70% chance + if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_0) wildMonIndex = 0; - else // 30% chance + else wildMonIndex = 1; break; case GOOD_ROD: - if (rand < 60) // 60% chance + if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_2) wildMonIndex = 2; - if (rand >= 60 && rand < 80) // 20% chance + if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_2 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_3) wildMonIndex = 3; - if (rand >= 80 && rand < 100) // 20% chance + if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_3 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_4) wildMonIndex = 4; break; case SUPER_ROD: - if (rand < 40) // 40% chance + if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_5) wildMonIndex = 5; - if (rand >= 40 && rand < 80) // 40% chance + if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_5 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_6) wildMonIndex = 6; - if (rand >= 80 && rand < 95) // 15% chance + if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_6 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_7) wildMonIndex = 7; - if (rand >= 95 && rand < 99) // 4% chance + if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_7 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_8) wildMonIndex = 8; - if (rand == 99) // 1% chance + if (rand == ENCOUNTER_CHANCE_FISHING_MONS_SLOT_8) wildMonIndex = 9; break; } diff --git a/sym_bss.txt b/sym_bss.txt index 4c974c3f6..29b30f2db 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -51,7 +51,7 @@ .include "src/pokenav_unk_10.o" .include "src/ereader_helpers.o" .include "src/faraway_island.o" - .include "asm/m4a_1.o" + .include "src/m4a_1.o" .include "src/agb_flash.o" .include "src/siirtc.o" .include "*libgcc.a:dp-bit.o" diff --git a/tools/gbafix/gbafix.c b/tools/gbafix/gbafix.c index 9088cdc5f..598e43aa0 100644 --- a/tools/gbafix/gbafix.c +++ b/tools/gbafix/gbafix.c @@ -206,7 +206,7 @@ int main(int argc, char *argv[]) // parse command line for (arg=1; arg<argc; arg++) { - if ((ARGV[0] == '-')) + if (ARGV[0] == '-') { switch (ARGV[1]) { diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index d9c219587..f0638414d 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -1,16 +1,19 @@ -CC ?= gcc +CC = gcc -CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK +CFLAGS = -Wall -Wextra -Werror -Wno-sign-compare -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK LIBS = -lpng -lz -SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c +SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c .PHONY: all clean all: gbagfx @: +gbagfx-debug: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h + $(CC) $(CFLAGS) -DDEBUG $(SRCS) -o $@ $(LDFLAGS) $(LIBS) + gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) diff --git a/tools/gbagfx/huff.c b/tools/gbagfx/huff.c new file mode 100644 index 000000000..143ed79be --- /dev/null +++ b/tools/gbagfx/huff.c @@ -0,0 +1,398 @@ +#include <stdbool.h> +#include <string.h> +#include <assert.h> +#include <stdio.h> +#include <stdint.h> +#include "global.h" +#include "huff.h" + +static int cmp_tree(const void * a0, const void * b0) { + return ((struct HuffData *)a0)->value - ((struct HuffData *)b0)->value; +} + +typedef int (*cmpfun)(const void *, const void *); + +int msort_r(void * data, size_t count, size_t size, cmpfun cmp, void * buffer) { + /* + * Out-of-place mergesort (stable sort) + * Returns 1 on success, 0 on failure + */ + void * leftPtr; + void * rightPtr; + void * leftEnd; + void * rightEnd; + int i; + + switch (count) { + case 0: + // Should never be here + return 0; + + case 1: + // Nothing to do here + break; + + case 2: + // Swap the two entries if the right one compares higher. + if (cmp(data, data + size) > 0) { + memcpy(buffer, data, size); + memcpy(data, data + size, size); + memcpy(data + size, buffer, size); + } + break; + default: + // Merge sort out-of-place. + leftPtr = data; + leftEnd = rightPtr = data + count / 2 * size; + rightEnd = data + count * size; + + // Sort the left half + if (!msort_r(leftPtr, count / 2, size, cmp, buffer)) + return 0; + + // Sort the right half + if (!msort_r(rightPtr, count / 2 + (count & 1), size, cmp, buffer)) + return 0; + + // Merge the sorted halves out of place + i = 0; + do { + if (cmp(leftPtr, rightPtr) <= 0) { + memcpy(buffer + i * size, leftPtr, size); + leftPtr += size; + } else { + memcpy(buffer + i * size, rightPtr, size); + rightPtr += size; + } + + } while (++i < count && leftPtr < leftEnd && rightPtr < rightEnd); + + // Copy the remainder + if (i < count) { + if (leftPtr < leftEnd) { + memcpy(buffer + i * size, leftPtr, leftEnd - leftPtr); + } + else { + memcpy(buffer + i * size, rightPtr, rightEnd - rightPtr); + } + } + + // Copy the merged data back + memcpy(data, buffer, count * size); + break; + } + + return 1; +} + +int msort(void * data, size_t count, size_t size, cmpfun cmp) { + void * buffer = malloc(count * size); + if (buffer == NULL) return 0; + int result = msort_r(data, count, size, cmp, buffer); + free(buffer); + return result; +} + +static void write_tree(unsigned char * dest, HuffNode_t * tree, int nitems, struct BitEncoding * encoding) { + /* + * The example used to guide this function encodes the tree in a + * breadth-first manner. We attempt to emulate that here. + */ + + int i, j, k; + + // There are (2 * nitems - 1) nodes in the binary tree. Allocate that. + HuffNode_t * traversal = calloc(2 * nitems - 1, sizeof(HuffNode_t)); + if (traversal == NULL) + FATAL_ERROR("Fatal error while compressing Huff file.\n"); + + // The first node is the root of the tree. + traversal[0] = *tree; + i = 1; + + // Copy the tree into a breadth-first ordering using brute force. + for (int depth = 1; i < 2 * nitems - 1; depth++) { + // Consider every possible path up to the current depth. + for (j = 0; i < 2 * nitems - 1 && j < 1 << depth; j++) { + // The index of the path is used to encode the path itself. + // Start from the most significant relevant bit and work our way down. + // Keep track of the current and previous nodes. + HuffNode_t * currNode = traversal; + HuffNode_t * parent = NULL; + for (k = 0; k < depth; k++) { + if (currNode->header.isLeaf) + break; + parent = currNode; + if ((j >> (depth - k - 1)) & 1) + currNode = currNode->branch.right; + else + currNode = currNode->branch.left; + } + // Check that the length of the current path equals the current depth. + if (k == depth) { + // Make sure we can encode the current branch. + // Bail here if we cannot. + // This is only applicable for 8-bit encodings. + if (traversal + i - parent > 128) + FATAL_ERROR("Fatal error while compressing Huff file: unable to encode binary tree.\n"); + // Copy the current node, and update its parent. + traversal[i] = *currNode; + if (parent != NULL) { + if ((j & 1) == 1) + parent->branch.right = traversal + i; + else + parent->branch.left = traversal + i; + } + // Encode the path through the tree in the lookup table + if (traversal[i].header.isLeaf) { + encoding[traversal[i].leaf.key].nbits = depth; + encoding[traversal[i].leaf.key].bitstring = j; + } + i++; + } + } + } + + // Encode the size of the tree. + // This is used by the decompressor to skip the tree. + dest[4] = nitems - 1; + + // Encode each node in the tree. + for (i = 0; i < 2 * nitems - 1; i++) { + HuffNode_t * currNode = traversal + i; + if (currNode->header.isLeaf) { + dest[5 + i] = traversal[i].leaf.key; + } else { + dest[5 + i] = (((currNode->branch.right - traversal - i) / 2) - 1); + if (currNode->branch.left->header.isLeaf) + dest[5 + i] |= 0x80; + if (currNode->branch.right->header.isLeaf) + dest[5 + i] |= 0x40; + } + } + + free(traversal); +} + +static inline void write_32_le(unsigned char * dest, int * destPos, uint32_t * buff, int * buffPos) { + dest[*destPos] = *buff; + dest[*destPos + 1] = *buff >> 8; + dest[*destPos + 2] = *buff >> 16; + dest[*destPos + 3] = *buff >> 24; + *destPos += 4; + *buff = 0; + *buffPos = 0; +} + +static inline void read_32_le(unsigned char * src, int * srcPos, uint32_t * buff) { + uint32_t tmp = src[*srcPos]; + tmp |= src[*srcPos + 1] << 8; + tmp |= src[*srcPos + 2] << 16; + tmp |= src[*srcPos + 3] << 24; + *srcPos += 4; + *buff = tmp; +} + +static void write_bits(unsigned char * dest, int * destPos, struct BitEncoding * encoding, int value, uint32_t * buff, int * buffBits) { + int nbits = encoding[value].nbits; + uint32_t bitstring = encoding[value].bitstring; + + if (*buffBits + nbits >= 32) { + int diff = *buffBits + nbits - 32; + *buff <<= nbits - diff; + *buff |= bitstring >> diff; + bitstring &= ~(1 << diff); + nbits = diff; + write_32_le(dest, destPos, buff, buffBits); + } + if (nbits != 0) { + *buff <<= nbits; + *buff |= bitstring; + *buffBits += nbits; + } +} + +/* +======================================= +MAIN COMPRESSION/DECOMPRESSION ROUTINES +======================================= + */ + +unsigned char * HuffCompress(unsigned char * src, int srcSize, int * compressedSize_p, int bitDepth) { + if (srcSize <= 0) + goto fail; + + int worstCaseDestSize = 4 + (2 << bitDepth) + srcSize * 3; + + unsigned char *dest = malloc(worstCaseDestSize); + if (dest == NULL) + goto fail; + + int nitems = 1 << bitDepth; + + HuffNode_t * freqs = calloc(nitems, sizeof(HuffNode_t)); + if (freqs == NULL) + goto fail; + + struct BitEncoding * encoding = calloc(nitems, sizeof(struct BitEncoding)); + if (encoding == NULL) + goto fail; + + // Set up the frequencies table. This will inform the tree. + for (int i = 0; i < nitems; i++) { + freqs[i].header.isLeaf = 1; + freqs[i].header.value = 0; + freqs[i].leaf.key = i; + } + + // Count each nybble or byte. + for (int i = 0; i < srcSize; i++) { + if (bitDepth == 8) { + freqs[src[i]].header.value++; + } else { + freqs[src[i] >> 4].header.value++; + freqs[src[i] & 0xF].header.value++; + } + } + +#ifdef DEBUG + for (int i = 0; i < nitems; i++) { + fprintf(stderr, "%d: %d\n", i, freqs[i].header.value); + } +#endif // DEBUG + + // Sort the frequency table. + if (!msort(freqs, nitems, sizeof(HuffNode_t), cmp_tree)) + goto fail; + + // Prune zero-frequency values. + for (int i = 0; i < nitems; i++) { + if (freqs[i].header.value != 0) { + if (i > 0) { + for (int j = i; j < nitems; j++) { + freqs[j - i] = freqs[j]; + } + nitems -= i; + } + break; + } + // This should never happen: + if (i == nitems - 1) + goto fail; + } + + HuffNode_t * tree = calloc(nitems * 2 - 1, sizeof(HuffNode_t)); + if (tree == NULL) + goto fail; + + // Iteratively collapse the two least frequent nodes. + HuffNode_t * endptr = freqs + nitems - 2; + + for (int i = 0; i < nitems - 1; i++) { + HuffNode_t * left = freqs; + HuffNode_t * right = freqs + 1; + tree[i * 2] = *right; + tree[i * 2 + 1] = *left; + for (int j = 0; j < nitems - i - 2; j++) + freqs[j] = freqs[j + 2]; + endptr->header.isLeaf = 0; + endptr->header.value = tree[i * 2].header.value + tree[i * 2 + 1].header.value; + endptr->branch.left = tree + i * 2; + endptr->branch.right = tree + i * 2 + 1; + endptr--; + if (i < nitems - 2 && !msort(freqs, nitems - i - 1, sizeof(HuffNode_t), cmp_tree)) + goto fail; + } + + // Write the tree breadth-first, and create the path lookup table. + write_tree(dest, freqs, nitems, encoding); + + free(tree); + free(freqs); + + // Encode the data itself. + int destPos = 4 + nitems * 2; + uint32_t destBuf = 0; + uint32_t srcBuf = 0; + int destBitPos = 0; + + for (int srcPos = 0; srcPos < srcSize;) { + read_32_le(src, &srcPos, &srcBuf); + for (int i = 0; i < 32 / bitDepth; i++) { + write_bits(dest, &destPos, encoding, srcBuf & (0xFF >> (8 - bitDepth)), &destBuf, &destBitPos); + srcBuf >>= bitDepth; + } + } + + if (destBitPos != 0) { + write_32_le(dest, &destPos, &destBuf, &destBitPos); + } + + free(encoding); + + // Write the header. + dest[0] = bitDepth | 0x20; + dest[1] = srcSize; + dest[2] = srcSize >> 8; + dest[3] = srcSize >> 16; + *compressedSize_p = (destPos + 3) & ~3; + return dest; + +fail: + FATAL_ERROR("Fatal error while compressing Huff file.\n"); +} + +unsigned char * HuffDecompress(unsigned char * src, int srcSize, int * uncompressedSize_p) { + if (srcSize < 4) + goto fail; + + int bitDepth = *src & 15; + if (bitDepth != 4 && bitDepth != 8) + goto fail; + + int destSize = (src[3] << 16) | (src[2] << 8) | src[1]; + + unsigned char *dest = malloc(destSize); + + if (dest == NULL) + goto fail; + + int treePos = 5; + int treeSize = (src[4] + 1) * 2; + int srcPos = 4 + treeSize; + int destPos = 0; + int curValPos = 0; + uint32_t destTmp = 0; + uint32_t window; + + for (;;) + { + if (srcPos >= srcSize) + goto fail; + read_32_le(src, &srcPos, &window); + for (int i = 0; i < 32; i++) { + int curBit = (window >> 31) & 1; + unsigned char treeView = src[treePos]; + bool isLeaf = ((treeView << curBit) & 0x80) != 0; + treePos &= ~1; // align + treePos += ((treeView & 0x3F) + 1) * 2 + curBit; + if (isLeaf) { + destTmp >>= bitDepth; + destTmp |= (src[treePos] << (32 - bitDepth)); + curValPos++; + if (curValPos == 32 / bitDepth) { + write_32_le(dest, &destPos, &destTmp, &curValPos); + if (destPos == destSize) { + *uncompressedSize_p = destSize; + return dest; + } + } + treePos = 5; + } + window <<= 1; + } + } + +fail: + FATAL_ERROR("Fatal error while decompressing Huff file.\n"); +} diff --git a/tools/gbagfx/huff.h b/tools/gbagfx/huff.h new file mode 100644 index 000000000..6002fe954 --- /dev/null +++ b/tools/gbagfx/huff.h @@ -0,0 +1,38 @@ +#ifndef HUFF_H +#define HUFF_H + +union HuffNode; + +struct HuffData { + unsigned value:31; + unsigned isLeaf:1; +}; + +struct HuffLeaf { + struct HuffData header; + unsigned char key; +}; + +struct HuffBranch { + struct HuffData header; + union HuffNode * left; + union HuffNode * right; +}; + +union HuffNode { + struct HuffData header; + struct HuffLeaf leaf; + struct HuffBranch branch; +}; + +typedef union HuffNode HuffNode_t; + +struct BitEncoding { + unsigned long long nbits:6; + unsigned long long bitstring:58; +}; + +unsigned char * HuffCompress(unsigned char * buffer, int srcSize, int * compressedSize_p, int bitDepth); +unsigned char * HuffDecompress(unsigned char * buffer, int srcSize, int * uncompressedSize_p); + +#endif //HUFF_H diff --git a/tools/gbagfx/lz.c b/tools/gbagfx/lz.c index c2ba3e327..97434ce50 100644 --- a/tools/gbagfx/lz.c +++ b/tools/gbagfx/lz.c @@ -69,10 +69,8 @@ fail: FATAL_ERROR("Fatal error while decompressing LZ file.\n"); } -unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize) +unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize, const int minDistance) { - const int minDistance = 2; // for compatibility with LZ77UnCompVram() - if (srcSize <= 0) goto fail; diff --git a/tools/gbagfx/lz.h b/tools/gbagfx/lz.h index 164d62279..90f56b643 100644 --- a/tools/gbagfx/lz.h +++ b/tools/gbagfx/lz.h @@ -4,6 +4,6 @@ #define LZ_H unsigned char *LZDecompress(unsigned char *src, int srcSize, int *uncompressedSize); -unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize); +unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize, const int minDistance); #endif // LZ_H diff --git a/tools/gbagfx/main.c b/tools/gbagfx/main.c index 86b0afa53..aa0681fb6 100644 --- a/tools/gbagfx/main.c +++ b/tools/gbagfx/main.c @@ -12,6 +12,7 @@ #include "lz.h" #include "rl.h" #include "font.h" +#include "huff.h" struct CommandHandler { @@ -319,6 +320,7 @@ void HandlePngToFullwidthJapaneseFontCommand(char *inputPath, char *outputPath, void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char **argv) { int overflowSize = 0; + int minDistance = 2; // default, for compatibility with LZ77UnCompVram() for (int i = 3; i < argc; i++) { @@ -337,6 +339,19 @@ void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char * if (overflowSize < 1) FATAL_ERROR("Overflow size must be positive.\n"); } + else if (strcmp(option, "-search") == 0) + { + if (i + 1 >= argc) + FATAL_ERROR("No size following \"-overflow\".\n"); + + i++; + + if (!ParseNumber(argv[i], NULL, 10, &minDistance)) + FATAL_ERROR("Failed to parse LZ min search distance.\n"); + + if (minDistance < 1) + FATAL_ERROR("LZ min search distance must be positive.\n"); + } else { FATAL_ERROR("Unrecognized option \"%s\".\n", option); @@ -353,7 +368,7 @@ void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char * unsigned char *buffer = ReadWholeFileZeroPadded(inputPath, &fileSize, overflowSize); int compressedSize; - unsigned char *compressedData = LZCompress(buffer, fileSize + overflowSize, &compressedSize); + unsigned char *compressedData = LZCompress(buffer, fileSize + overflowSize, &compressedSize, minDistance); compressedData[1] = (unsigned char)fileSize; compressedData[2] = (unsigned char)(fileSize >> 8); @@ -411,6 +426,61 @@ void HandleRLDecompressCommand(char *inputPath, char *outputPath, int argc UNUSE free(uncompressedData); } +void HandleHuffCompressCommand(char *inputPath, char *outputPath, int argc, char **argv) +{ + int fileSize; + int bitDepth = 4; + + for (int i = 3; i < argc; i++) + { + char *option = argv[i]; + + if (strcmp(option, "-depth") == 0) + { + if (i + 1 >= argc) + FATAL_ERROR("No size following \"-depth\".\n"); + + i++; + + if (!ParseNumber(argv[i], NULL, 10, &bitDepth)) + FATAL_ERROR("Failed to parse bit depth.\n"); + + if (bitDepth != 4 && bitDepth != 8) + FATAL_ERROR("GBA only supports bit depth of 4 or 8.\n"); + } + else + { + FATAL_ERROR("Unrecognized option \"%s\".\n", option); + } + } + + unsigned char *buffer = ReadWholeFile(inputPath, &fileSize); + + int compressedSize; + unsigned char *compressedData = HuffCompress(buffer, fileSize, &compressedSize, bitDepth); + + free(buffer); + + WriteWholeFile(outputPath, compressedData, compressedSize); + + free(compressedData); +} + +void HandleHuffDecompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) +{ + int fileSize; + unsigned char *buffer = ReadWholeFile(inputPath, &fileSize); + + int uncompressedSize; + unsigned char *uncompressedData = HuffDecompress(buffer, fileSize, &uncompressedSize); + + free(buffer); + + WriteWholeFile(outputPath, uncompressedData, uncompressedSize); + + free(uncompressedData); +} + int main(int argc, char **argv) { if (argc < 3) @@ -433,7 +503,9 @@ int main(int argc, char **argv) { "png", "hwjpnfont", HandlePngToHalfwidthJapaneseFontCommand }, { "fwjpnfont", "png", HandleFullwidthJapaneseFontToPngCommand }, { "png", "fwjpnfont", HandlePngToFullwidthJapaneseFontCommand }, + { NULL, "huff", HandleHuffCompressCommand }, { NULL, "lz", HandleLZCompressCommand }, + { "huff", NULL, HandleHuffDecompressCommand }, { "lz", NULL, HandleLZDecompressCommand }, { NULL, "rl", HandleRLCompressCommand }, { "rl", NULL, HandleRLDecompressCommand }, diff --git a/tools/jsonproc/jsonproc.cpp b/tools/jsonproc/jsonproc.cpp index efe48f39f..15eae9dcb 100755 --- a/tools/jsonproc/jsonproc.cpp +++ b/tools/jsonproc/jsonproc.cpp @@ -5,7 +5,7 @@ #include <map> #include <string> -using std::string; +using std::string; using std::to_string; #include <inja.hpp> using namespace inja; @@ -36,7 +36,14 @@ int main(int argc, char *argv[]) // Add custom command callbacks. env.add_callback("doNotModifyHeader", 0, [jsonfilepath, templateFilepath](Arguments& args) { - return "//\n// DO NOT MODIFY THIS FILE! IT IS AUTO-GENERATED FROM " + jsonfilepath +" and Inja template " + templateFilepath + "\n//\n"; + return "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from " + jsonfilepath +" and Inja template " + templateFilepath + "\n//\n"; + }); + + env.add_callback("subtract", 2, [](Arguments& args) { + int minuend = args.at(0)->get<int>(); + int subtrahend = args.at(1)->get<int>(); + + return minuend - subtrahend; }); env.add_callback("setVar", 2, [=](Arguments& args) { @@ -46,11 +53,33 @@ int main(int argc, char *argv[]) return ""; }); + env.add_callback("setVarInt", 2, [=](Arguments& args) { + string key = args.at(0)->get<string>(); + string value = to_string(args.at(1)->get<int>()); + set_custom_var(key, value); + return ""; + }); + env.add_callback("getVar", 1, [=](Arguments& args) { string key = args.at(0)->get<string>(); return get_custom_var(key); }); + env.add_callback("trackVar", 2, [](Arguments& args) { + static int counter = 0; + + int addValue = args.at(0)->get<int>(); + int checkValue = args.at(1)->get<int>(); + + bool over = false; + + counter = (counter + addValue) % (checkValue + 1); + + if (counter <= addValue) over = true; + + return over; + }); + env.add_callback("concat", 2, [](Arguments& args) { string first = args.at(0)->get<string>(); string second = args.at(1)->get<string>(); @@ -67,7 +96,6 @@ int main(int argc, char *argv[]) return rawValue.erase(0, prefix.length()); }); - // Add custom command callbacks. env.add_callback("removeSuffix", 2, [](Arguments& args) { string rawValue = args.at(0)->get<string>(); string suffix = args.at(1)->get<string>(); diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp index 383010aa3..98805c952 100644 --- a/tools/preproc/asm_file.cpp +++ b/tools/preproc/asm_file.cpp @@ -475,9 +475,11 @@ void AsmFile::ExpectEmptyRestOfLine() m_lineStart = m_pos; m_lineNum++; } - else if (m_buffer[m_pos] == '\r') + else if (m_buffer[m_pos] == '\r' && m_buffer[m_pos + 1] == '\n') { - RaiseError("only Unix-style LF newlines are supported"); + m_pos += 2; + m_lineStart = m_pos; + m_lineNum++; } else { diff --git a/tools/ramscrgen/elf.cpp b/tools/ramscrgen/elf.cpp index 7599fe0bb..7e78704b8 100644 --- a/tools/ramscrgen/elf.cpp +++ b/tools/ramscrgen/elf.cpp @@ -10,6 +10,8 @@ #define SHN_COMMON 0xFFF2 static std::string s_elfPath; +static std::string s_archiveFilePath; +static std::string s_archiveObjectPath; static FILE *s_file; @@ -22,6 +24,7 @@ static std::uint32_t s_symtabOffset; static std::uint32_t s_strtabOffset; static std::uint32_t s_symbolCount; +static std::uint32_t s_elfFileOffset; struct Symbol { @@ -31,7 +34,7 @@ struct Symbol static void Seek(long offset) { - if (std::fseek(s_file, offset, SEEK_SET) != 0) + if (std::fseek(s_file, s_elfFileOffset + offset, SEEK_SET) != 0) FATAL_ERROR("error: failed to seek to %ld in \"%s\"", offset, s_elfPath.c_str()); } @@ -98,6 +101,18 @@ static void VerifyElfIdent() FATAL_ERROR("error: \"%s\" not little-endian ELF\n", s_elfPath.c_str()); } +static void VerifyAr() +{ + char expectedMagic[8] = {'!', '<', 'a', 'r', 'c', 'h', '>', '\n'}; + char magic[8]; + + if (std::fread(magic, 8, 1, s_file) != 1) + FATAL_ERROR("error: failed to read AR magic from \"%s\"\n", s_archiveFilePath.c_str()); + + if (std::memcmp(magic, expectedMagic, 8) != 0) + FATAL_ERROR("error: AR magic did not match in \"%s\"\n", s_archiveFilePath.c_str()); +} + static void ReadElfHeader() { Seek(0x20); @@ -108,6 +123,40 @@ static void ReadElfHeader() s_shstrtabIndex = ReadInt16(); } +static void FindArObj() +{ + char file_ident[17] = {0}; + char filesize_s[11] = {0}; + char expectedEndMagic[2] = { 0x60, 0x0a }; + char end_magic[2]; + std::size_t filesize; + + Seek(8); + while (!std::feof(s_file)) { + if (std::fread(file_ident, 16, 1, s_file) != 1) + FATAL_ERROR("error: failed to read file ident in \"%s\"\n", s_archiveFilePath.c_str()); + Skip(32); + if (std::fread(filesize_s, 10, 1, s_file) != 1) + FATAL_ERROR("error: failed to read filesize in \"%s\"\n", s_archiveFilePath.c_str()); + if (std::fread(end_magic, 2, 1, s_file) != 1) + FATAL_ERROR("error: failed to read end sentinel in \"%s\"\n", s_archiveFilePath.c_str()); + if (std::memcmp(end_magic, expectedEndMagic, 2) != 0) + FATAL_ERROR("error: corrupted archive header in \"%s\" at \"%s\"\n", s_archiveFilePath.c_str(), file_ident); + + char * ptr = std::strchr(file_ident, '/'); + if (ptr != nullptr) + *ptr = 0; + filesize = std::strtoul(filesize_s, nullptr, 10); + if (std::strncmp(s_archiveObjectPath.c_str(), file_ident, 16) == 0) { + s_elfFileOffset = std::ftell(s_file); + return; + } + Skip(filesize); + } + + FATAL_ERROR("error: could not find object \"%s\" in archive \"%s\"\n", s_archiveObjectPath.c_str(), s_archiveFilePath.c_str()); +} + static std::string GetSectionName(std::uint32_t shstrtabOffset, int index) { Seek(s_sectionHeaderOffset + s_sectionHeaderEntrySize * index); @@ -153,21 +202,14 @@ static void FindTableOffsets() FATAL_ERROR("error: couldn't find .strtab section in \"%s\"\n", s_elfPath.c_str()); } -std::map<std::string, std::uint32_t> GetCommonSymbols(std::string path) +static std::map<std::string, std::uint32_t> GetCommonSymbols_Shared() { - s_elfPath = path; - - std::map<std::string, std::uint32_t> commonSymbols; - - s_file = std::fopen(s_elfPath.c_str(), "rb"); - - if (s_file == NULL) - FATAL_ERROR("error: failed to open \"%s\" for reading\n", path.c_str()); - VerifyElfIdent(); ReadElfHeader(); FindTableOffsets(); - + + std::map<std::string, std::uint32_t> commonSymbols; + std::vector<Symbol> commonSymbolVec; Seek(s_symtabOffset); @@ -193,3 +235,38 @@ std::map<std::string, std::uint32_t> GetCommonSymbols(std::string path) return commonSymbols; } + +std::map<std::string, std::uint32_t> GetCommonSymbolsFromLib(std::string sourcePath, std::string libpath) +{ + std::size_t colonPos = libpath.find(':'); + if (colonPos == std::string::npos) + FATAL_ERROR("error: missing colon separator in libfile \"%s\"\n", s_elfPath.c_str()); + + s_archiveObjectPath = libpath.substr(colonPos + 1); + s_archiveFilePath = sourcePath + "/" + libpath.substr(1, colonPos - 1); + s_elfPath = sourcePath + "/" + libpath.substr(1); + + s_file = std::fopen(s_archiveFilePath.c_str(), "rb"); + + if (s_file == NULL) + FATAL_ERROR("error: failed to open \"%s\" for reading\n", s_archiveFilePath.c_str()); + + VerifyAr(); + FindArObj(); + return GetCommonSymbols_Shared(); +} + +std::map<std::string, std::uint32_t> GetCommonSymbols(std::string sourcePath, std::string path) +{ + s_elfFileOffset = 0; + if (path[0] == '*') + return GetCommonSymbolsFromLib(sourcePath, path); + + s_elfPath = sourcePath + "/" + path; + s_file = std::fopen(s_elfPath.c_str(), "rb"); + + if (s_file == NULL) + FATAL_ERROR("error: failed to open \"%s\" for reading\n", path.c_str()); + + return GetCommonSymbols_Shared(); +} diff --git a/tools/ramscrgen/elf.h b/tools/ramscrgen/elf.h index 0bfdd696f..3704860c0 100644 --- a/tools/ramscrgen/elf.h +++ b/tools/ramscrgen/elf.h @@ -25,6 +25,6 @@ #include <map> #include <string> -std::map<std::string, std::uint32_t> GetCommonSymbols(std::string path); +std::map<std::string, std::uint32_t> GetCommonSymbols(std::string sourcePath, std::string path); #endif // ELF_H diff --git a/tools/ramscrgen/main.cpp b/tools/ramscrgen/main.cpp index 6c4f4bbd7..5e5894f47 100644 --- a/tools/ramscrgen/main.cpp +++ b/tools/ramscrgen/main.cpp @@ -27,9 +27,15 @@ void HandleCommonInclude(std::string filename, std::string sourcePath, std::string symOrderPath, std::string lang) { - auto commonSymbols = GetCommonSymbols(sourcePath + "/" + filename); + auto commonSymbols = GetCommonSymbols(sourcePath, filename); + std::size_t dotIndex; - std::size_t dotIndex = filename.find_last_of('.'); + if (filename[0] == '*') { + dotIndex = filename.find_last_of(':'); + filename = filename.substr(dotIndex + 1); + } + + dotIndex = filename.find_last_of('.'); if (dotIndex == std::string::npos) FATAL_ERROR("error: \"%s\" doesn't have a file extension\n", filename.c_str()); @@ -73,7 +79,7 @@ void HandleCommonInclude(std::string filename, std::string sourcePath, std::stri } } -void ConvertSymFile(std::string filename, std::string sectionName, std::string lang, bool common, std::string sourcePath, std::string commonSymPath) +void ConvertSymFile(std::string filename, std::string sectionName, std::string lang, bool common, std::string sourcePath, std::string commonSymPath, std::string libSourcePath) { SymFile symFile(filename); @@ -91,7 +97,7 @@ void ConvertSymFile(std::string filename, std::string sectionName, std::string l symFile.ExpectEmptyRestOfLine(); printf(". = ALIGN(4);\n"); if (common) - HandleCommonInclude(incFilename, sourcePath, commonSymPath, lang); + HandleCommonInclude(incFilename, incFilename[0] == '*' ? libSourcePath : sourcePath, commonSymPath, lang); else printf("%s(%s);\n", incFilename.c_str(), sectionName.c_str()); break; @@ -148,6 +154,7 @@ int main(int argc, char **argv) std::string lang = std::string(argv[3]); std::string sourcePath; std::string commonSymPath; + std::string libSourcePath; if (argc > 4) { @@ -166,8 +173,15 @@ int main(int argc, char **argv) sourcePath = paths.substr(0, commaPos); commonSymPath = paths.substr(commaPos + 1); + commaPos = commonSymPath.find(','); + if (commaPos == std::string::npos) { + libSourcePath = "tools/agbcc/lib"; + } else { + libSourcePath = commonSymPath.substr(commaPos + 1); + commonSymPath = commonSymPath.substr(0, commaPos); + } } - ConvertSymFile(symFileName, sectionName, lang, common, sourcePath, commonSymPath); + ConvertSymFile(symFileName, sectionName, lang, common, sourcePath, commonSymPath, libSourcePath); return 0; } diff --git a/tools/scaninc/scaninc.cpp b/tools/scaninc/scaninc.cpp index b95cbd033..a3e40c5d9 100644 --- a/tools/scaninc/scaninc.cpp +++ b/tools/scaninc/scaninc.cpp @@ -97,19 +97,26 @@ int main(int argc, char **argv) } for (auto include : file.GetIncludes()) { + bool exists = false; + std::string path(""); for (auto includeDir : includeDirs) { - std::string path(includeDir + include); + path = includeDir + include; if (CanOpenFile(path)) { - bool inserted = dependencies.insert(path).second; - if (inserted) - { - filesToProcess.push(path); - } + exists = true; break; } } + if (!exists && file.FileType() == SourceFileType::Asm) + { + path = include; + } + bool inserted = dependencies.insert(path).second; + if (inserted && exists) + { + filesToProcess.push(path); + } } includeDirs.pop_back(); } diff --git a/tools/scaninc/source_file.cpp b/tools/scaninc/source_file.cpp index f23ff6db6..df31282f8 100644 --- a/tools/scaninc/source_file.cpp +++ b/tools/scaninc/source_file.cpp @@ -89,6 +89,11 @@ SourceFile::SourceFile(std::string path) } } +SourceFileType SourceFile::FileType() +{ + return m_file_type; +} + SourceFile::~SourceFile() { if (m_file_type == SourceFileType::Cpp || m_file_type == SourceFileType::Header) diff --git a/tools/scaninc/source_file.h b/tools/scaninc/source_file.h index f7b6412bd..854b3f116 100644 --- a/tools/scaninc/source_file.h +++ b/tools/scaninc/source_file.h @@ -50,6 +50,7 @@ public: const std::set<std::string>& GetIncbins(); const std::set<std::string>& GetIncludes(); std::string& GetSrcDir(); + SourceFileType FileType(); private: union InnerUnion { |