diff options
363 files changed, 31630 insertions, 33463 deletions
diff --git a/.gitattributes b/.gitattributes index b095aa2cd..4e8417c0c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,5 @@ *.pal text eol=crlf - +*.sh text eol=lf *.s text eol=lf *.txt text eol=lf Makefile text eol=lf diff --git a/.travis.yml b/.travis.yml index ff4ab4bc9..1ff0ad2c7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,8 @@ matrix: - g++-7 env: _="Build" script: - - ./build_tools.sh g++-7 + - make -j2 tools CXX=g++-7 - make -j2 compare + - make -j2 modern after_success: - .travis/calcrom/webhook.sh pokeemerald diff --git a/.travis/calcrom/calcrom.pl b/.travis/calcrom/calcrom.pl index 9c4867929..c5972ae10 100755 --- a/.travis/calcrom/calcrom.pl +++ b/.travis/calcrom/calcrom.pl @@ -9,6 +9,8 @@ open(my $file, $ARGV[0]) my $src = 0; my $asm = 0; +my $srcdata = 0; +my $data = 0; while (my $line = <$file>) { if ($line =~ /^ \.(\w+)\s+0x[0-9a-f]+\s+(0x[0-9a-f]+) (\w+)\/.+\.o/) @@ -28,9 +30,22 @@ while (my $line = <$file>) $asm += $size; } } + elsif ($section =~ /rodata/) + { + if ($dir eq 'src') + { + $srcdata += $size; + } + elsif ($dir eq 'data') + { + $data += $size; + } + } } } +(my $elffname = $ARGV[0]) =~ s/\.map/.elf/; + # Note that the grep filters out all branch labels. It also requires a minimum # line length of 5, to filter out a ton of generated symbols (like AcCn). No # settings to nm seem to remove these symbols. Finally, nm prints out a separate @@ -40,7 +55,7 @@ while (my $line = <$file>) # # You'd expect this to take a while, because of uniq. It runs in under a second, # though. Uniq is pretty fast! -my $base_cmd = "nm pokeemerald.elf | awk '{print \$3}' | grep '^[^_].\\{4\\}' | uniq"; +my $base_cmd = "nm $elffname | awk '{print \$3}' | grep '^[^_].\\{4\\}' | uniq"; # This looks for Unknown_, Unknown_, or sub_, followed by just numbers. Note that # it matches even if stuff precedes the unknown, like sUnknown/gUnknown. @@ -118,3 +133,11 @@ print "$total_syms total symbols\n"; print "$documented symbols documented ($docPct%)\n"; print "$partial_documented symbols partially documented ($partialPct%)\n"; print "$undocumented symbols undocumented ($undocPct%)\n"; + +print "\n"; +my $dataTotal = $srcdata + $data; +my $srcDataPct = sprintf("%.4f", 100 * $srcdata / $dataTotal); +my $dataPct = sprintf("%.4f", 100 * $data / $dataTotal); +print "$dataTotal total bytes of data\n"; +print "$srcdata bytes of data in src ($srcDataPct%)\n"; +print "$data bytes of data in data ($dataPct%)\n"; diff --git a/INSTALL.md b/INSTALL.md index fcdd8b655..6f5a2435d 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,103 +1,90 @@ -Follow the OS-specific instructions below. +# Prerequisites -# Linux +| Linux | macOS | Windows 10 (build 18917+) | Windows 10 (1709+) | Windows Vista, 7, 8, 8.1, and 10 (1507, 1511, 1607, and 1703) +| ----- | ----- | ------------------------- | ------------------ | --------------------------------------------------------- +| none | [Xcode Command Line Tools package][xcode] | [Windows Subsystem for Linux 2][wsl2] | [Windows Subsystem for Linux][wsl] | MSYS2 (see below) -Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM). +[xcode]: https://developer.apple.com/library/archive/technotes/tn2339/_index.html#//apple_ref/doc/uid/DTS40014588-CH1-DOWNLOADING_COMMAND_LINE_TOOLS_IS_NOT_AVAILABLE_IN_XCODE_FOR_MACOS_10_9__HOW_CAN_I_INSTALL_THEM_ON_MY_MACHINE_ +[wsl2]: https://docs.microsoft.com/windows/wsl/wsl2-install +[wsl]: https://docs.microsoft.com/windows/wsl/install-win10 -Make sure that there is an environment variable called DEVKITARM with the path of the directory before the "bin" directory containing "arm-none-eabi-as", "arm-none-eabi-cpp", "arm-none-eabi-ld" and "arm-none-eabi-objcopy". +The [prerelease version of the Linux subsystem](https://docs.microsoft.com/windows/wsl/install-legacy) available in the 1607 and 1703 releases of Windows 10 is obsolete so consider uninstalling it. -Then get the compiler from https://github.com/pret/agbcc and run the following commands. +Make sure that the `build-essential`, `git`, and `libpng-dev` packages are installed. The `build-essential` package includes the `make`, `gcc-core`, and `g++` packages so they do not have to be obtained separately. MSYS2 does not include `libpng-dev` so it must be built from source. -``` -./build.sh -./install.sh PATH_OF_POKEEMERALD_DIRECTORY -``` +Install the **devkitARM** toolchain of [devkitPro](https://devkitpro.org/wiki/Getting_Started) and add its environment variables. For Windows versions without the Linux subsystem, the devkitPro [graphical installer](https://github.com/devkitPro/installer/releases) includes a preconfigured MSYS2 environment, thus the steps below are not required. -Then in the pokeemerald directory, build the tools. + export DEVKITPRO=/opt/devkitpro + echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc + export DEVKITARM=$DEVKITPRO/devkitARM + echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc -``` -./build_tools.sh -``` -Finally, build the rom. +# Installation -``` -make -``` +To set up the repository: -# Windows + git clone https://github.com/pret/pokeemerald + git clone https://github.com/pret/agbcc -Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM). + cd ./agbcc + ./build.sh + ./install.sh ../pokeemerald -Then get the compiled tools from https://github.com/pret/pokeruby-tools. Copy the `tools/` folder over the `tools/` folder in your pokeemerald directory. + cd ../pokeemerald -You can then build pokeemerald using `make` in the MSYS environment provided with devkitARM. +To build **pokeemerald.gba** and confirm it matches the official ROM image: -# Mac + make compare -Installing pokeemerald on a Mac requires macOS >= 10.12 (Sierra or higher). +## Notes -Download a [devkitPRO pacman](https://github.com/devkitPro/pacman/releases/tag/v1.0.0) +* If the base tools are not found on macOS in new Terminal sessions after the first successful build, run `echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile` once to prevent the issue from occurring again. Verify that the `devkitarm-rules` package is installed as well; if not, install it by running `sudo dkp-pacman -S devkitarm-rules`. -Run the following commands in Terminal: +* If the repository was previously set up using Cygwin, delete the `.exe` files in the subfolders of the `tools` folder except for `agbcc` and try building again. [Learn the differences between MSYS2 and Cygwin.](https://github.com/msys2/msys2/wiki/How-does-MSYS2-differ-from-Cygwin) +# Guidance -``` -xcode-select --install +To build **pokeemerald.gba** with your changes: -sudo dkp-pacman -S devkitARM + make -export DEVKITPRO=/opt/devkitpro -echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc -export DEVKITARM=$DEVKITPRO/devkitARM -echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc -echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile +## Parallel builds -git clone https://github.com/pret/pokeemerald -git clone https://github.com/pret/agbcc +See [the GNU docs](https://www.gnu.org/software/make/manual/html_node/Parallel.html) and [this Stack Exchange thread](https://unix.stackexchange.com/questions/208568) for more information. -cd agbcc/ -./build.sh -./install.sh ../pokeemerald +To speed up building, run: -cd ../pokeemerald -./build_tools.sh -``` + make -j$(nproc) -And build the ROM with `make`. +`nproc` is not available on macOS. The alternative is `sysctl -n hw.ncpu` ([relevant Stack Overflow thread](https://stackoverflow.com/questions/1715580)). -If the step `./build.sh` in the above list of commands fails with the error `Makefile:1: /opt/devkitpro/devkitARM/base_tools: No such file or directory`, then try installing the pacman package `devkitarm-rules` by executing the command +## Building without dependency scanning -``` -sudo dkp-pacman -S devkitarm-rules -``` +If only `.c` or `.s` files were changed, turn off the dependency scanning temporarily. Changes to any other files will be ignored and the build will either fail or not reflect those changes. -Executing `./build.sh` again should now succeed. + make NODEP=1 -# Faster builds +## Building with devkitARM's C compiler -After the first build, subsequent builds are faster. You can further speed up the build: +This project supports the `arm-none-eabi-gcc` compiler included with devkitARM r52. To build this target, simply run: -## Parallel build + make modern -This significantly speeds up the build on modern machines. +## Building with other toolchains -By default `make` only runs a single thread. You can tell `make` to run on multiple threads with `make -j`. See the manfile for usage (`man make`). +To build using a toolchain other than devkitARM, override the `TOOLCHAIN` environment variable with the path to your toolchain, which must contain the subdirectory `bin`. -The optimal value for `-j` is the number of logical cores on your machine. You can run `nproc` to see the exact number. + make TOOLCHAIN="/path/to/toolchain/here" -``` -$ nproc -8 -``` +The following is an example: -If you have 8 cores, run: `make -j8` + make TOOLCHAIN="/usr/local/arm-none-eabi" -`-j` on its own will spawn a new thread for each job. A clean build will have thousands of jobs, which will be slower than not using -j at all. +To compile the `modern` target with this toolchain, the subdirectories `lib`, `include`, and `arm-none-eabi` must also be present. -## Disable the dependency scanning +## Building with debug info -If you've only changed `.c` or `.s` files, you can turn off the dependency scanning temporarily. Changes to any other files will be ignored, and the build will either fail or not reflect those changes. - -`make NODEP=1` +To build **pokeemerald.elf** with enhanced debug info, use the `DINFO` variable. + make DINFO=1 @@ -1,4 +1,27 @@ -include $(DEVKITARM)/base_tools +TOOLCHAIN := $(DEVKITARM) +COMPARE ?= 0 + +ifeq ($(CC),) +HOSTCC := gcc +else +HOSTCC := $(CC) +endif + +ifeq ($(CXX),) +HOSTCXX := g++ +else +HOSTCXX := $(CXX) +endif + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +else +export PATH := $(TOOLCHAIN)/bin:$(PATH) +PREFIX := arm-none-eabi- +OBJCOPY := $(PREFIX)objcopy +export CC := $(PREFIX)gcc +export AS := $(PREFIX)as +endif export CPP := $(PREFIX)cpp export LD := $(PREFIX)ld @@ -12,12 +35,10 @@ TITLE := POKEMON EMER GAME_CODE := BPEE MAKER_CODE := 01 REVISION := 0 +MODERN ?= 0 SHELL := /bin/bash -o pipefail -ROM := pokeemerald.gba -OBJ_DIR := build/emerald - ELF = $(ROM:.gba=.elf) MAP = $(ROM:.gba=.map) @@ -34,16 +55,32 @@ DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR) SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR) MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR) -ASFLAGS := -mcpu=arm7tdmi +ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) + +GCC_VER = $(shell $(CC) -dumpversion) +ifeq ($(MODERN),0) CC1 := tools/agbcc/bin/agbcc$(EXE) override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm +ROM := pokeemerald.gba +OBJ_DIR := build/emerald +LIBPATH := -L ../../tools/agbcc/lib +else +CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet +override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -fno-aggressive-loop-optimizations -Wno-pointer-to-int-cast +ROM := pokeemerald_modern.gba +OBJ_DIR := build/modern +LIBPATH := -L $(TOOLCHAIN)/lib/gcc/arm-none-eabi/$(GCC_VER)/thumb -L $(TOOLCHAIN)/arm-none-eabi/lib/thumb +endif -CPPFLAGS := -I tools/agbcc/include -I tools/agbcc -iquote include -Wno-trigraphs +CPPFLAGS := -iquote include -Wno-trigraphs -DMODERN=$(MODERN) +ifeq ($(MODERN),0) +CPPFLAGS += -I tools/agbcc/include -I tools/agbcc +endif LDFLAGS = -Map ../../$(MAP) -LIB := -L ../../tools/agbcc/lib -lgcc -lc +LIB := $(LIBPATH) -lgcc -lc SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c GFX := tools/gbagfx/gbagfx$(EXE) @@ -56,6 +93,12 @@ FIX := tools/gbafix/gbafix$(EXE) MAPJSON := tools/mapjson/mapjson$(EXE) JSONPROC := tools/jsonproc/jsonproc$(EXE) +TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*)) +TOOLBASE = $(TOOLDIRS:tools/%=%) +TOOLS = $(foreach tool,$(TOOLBASE),tools/$(tool)/$(tool)$(EXE)) + +MAKEFLAGS += --no-print-directory + # Clear the default suffixes .SUFFIXES: # Don't delete intermediate files @@ -66,11 +109,24 @@ JSONPROC := tools/jsonproc/jsonproc$(EXE) # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: rom clean compare tidy +.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)))) + +# Build tools when building the rom +# Disable dependency scanning for clean/tidy/tools +ifeq (,$(filter-out all compare,$(MAKECMDGOALS))) +$(call infoshell, $(MAKE) tools) +else +NODEP := 1 +endif C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) 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)) @@ -83,7 +139,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))) @@ -92,24 +148,46 @@ AUTO_GEN_TARGETS := $(shell mkdir -p $(SUBDIRS)) -rom: $(ROM) +all: rom -# For contributors to make sure a change didn't affect the contents of the ROM. -compare: $(ROM) +tools: $(TOOLDIRS) + +$(TOOLDIRS): + @$(MAKE) -C $@ CC=$(HOSTCC) CXX=$(HOSTCXX) + +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: ; @$(MAKE) COMPARE=1 -clean: tidy +clean: mostlyclean clean-tools + +clean-tools: + @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) + +mostlyclean: tidy rm -f sound/direct_sound_samples/*.bin - rm -f $(SONG_OBJS) $(MID_OBJS) $(MID_SUBDIR)/*.s + rm -f $(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 {} + rm -f $(DATA_ASM_SUBDIR)/layouts/layouts.inc $(DATA_ASM_SUBDIR)/layouts/layouts_table.inc rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc 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) - rm -r build/* + rm -r $(OBJ_DIR) +ifeq ($(MODERN),0) + @$(MAKE) tidy MODERN=1 +endif + +ifneq ($(MODERN),0) +$(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member +endif include graphics_file_rules.mk include map_data_rules.mk @@ -133,6 +211,7 @@ sound/direct_sound_samples/cry_%.bin: sound/direct_sound_samples/cry_%.aif ; $(A sound/%.bin: sound/%.aif ; $(AIF) $< $@ +ifeq ($(MODERN),0) $(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/libc.o: CFLAGS := -O2 @@ -145,11 +224,12 @@ $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding +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 $(SCANINC) -I include -I tools/agbcc/include $(C_SUBDIR)/$*.c) endif ifeq ($(DINFO),1) @@ -163,6 +243,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 $(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) @@ -192,12 +281,28 @@ $(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt) $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt $(RAMSCRGEN) ewram_data $< ENGLISH > $@ -$(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 "s#tools/#../../tools/#g" ../../ld_script.txt > ld_script.ld +ifeq ($(MODERN),0) +LD_SCRIPT := ld_script.txt +LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld +else +LD_SCRIPT := ld_script_modern.txt +LD_SCRIPT_DEPS := +endif + +$(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) + cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) + $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent $(ROM): $(ELF) $(OBJCOPY) -O binary $< $@ - $(FIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent + $(FIX) $@ -p --silent + +modern: ; @$(MAKE) MODERN=1 + +berry_fix/berry_fix.gba: berry_fix + +berry_fix: + @$(MAKE) -C berry_fix COMPARE=$(COMPARE) @@ -2,37 +2,35 @@ [![Build Status][travis-badge]][travis] -This is a disassembly of Pokémon Emerald. +[travis]: https://travis-ci.org/pret/pokeemerald +[travis-badge]: https://travis-ci.org/pret/pokeemerald.svg?branch=master -It builds the following rom: +This is a decompilation of Pokémon Emerald. -* pokeemerald.gba `sha1: f3ae088181bf583e55daf962a92bb46f4f1d07b7` +It builds the following ROM: + +* [**pokeemerald.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=1961) `sha1: f3ae088181bf583e55daf962a92bb46f4f1d07b7` To set up the repository, see [INSTALL.md](INSTALL.md). ## See also -* Disassembly of [**Pokémon Red/Blue**][pokered] -* Disassembly of [**Pokémon Yellow**][pokeyellow] -* Disassembly of [**Pokémon Gold**][pokegold] -* Disassembly of [**Pokémon Crystal**][pokecrystal] -* Disassembly of [**Pokémon Pinball**][pokepinball] -* Disassembly of [**Pokémon TCG**][poketcg] -* Disassembly of [**Pokémon Ruby**][pokeruby] -* Disassembly of [**Pokémon Fire Red**][pokefirered] -* Discord: [**pret**][Discord] -* irc: **irc.freenode.net** [**#pret**][irc] - -[pokered]: https://github.com/pret/pokered -[pokeyellow]: https://github.com/pret/pokeyellow -[pokegold]: https://github.com/pret/pokegold -[pokecrystal]: https://github.com/pret/pokecrystal -[pokepinball]: https://github.com/pret/pokepinball -[poketcg]: https://github.com/pret/poketcg -[pokeruby]: https://github.com/pret/pokeruby -[pokefirered]: https://github.com/pret/pokefirered -[Discord]: https://discord.gg/6EuWgX9 -[irc]: https://kiwiirc.com/client/irc.freenode.net/?#pret -[travis]: https://travis-ci.org/pret/pokeemerald -[travis-badge]: https://travis-ci.org/pret/pokeemerald.svg?branch=master +Other disassembly and/or decompilation projects: +* [**Pokémon Red and Blue**](https://github.com/pret/pokered) +* [**Pokémon Gold and Silver (Space World '97 demo)**](https://github.com/pret/pokegold-spaceworld) +* [**Pokémon Yellow**](https://github.com/pret/pokeyellow) +* [**Pokémon Trading Card Game**](https://github.com/pret/poketcg) +* [**Pokémon Pinball**](https://github.com/pret/pokepinball) +* [**Pokémon Stadium**](https://github.com/pret/pokestadium) +* [**Pokémon Gold and Silver**](https://github.com/pret/pokegold) +* [**Pokémon Crystal**](https://github.com/pret/pokecrystal) +* [**Pokémon Ruby and Sapphire**](https://github.com/pret/pokeruby) +* [**Pokémon Pinball: Ruby & Sapphire**](https://github.com/pret/pokepinballrs) +* [**Pokémon FireRed and LeafGreen**](https://github.com/pret/pokefirered) +* [**Pokémon Mystery Dungeon: Red Rescue Team**](https://github.com/pret/pmd-red) + + +## Contacts + +You can find us on [Discord](https://discord.gg/6EuWgX9) and [IRC](https://kiwiirc.com/client/irc.freenode.net/?#pret). diff --git a/asm/berry_crush.s b/asm/berry_crush.s index 00bff2b56..8d44c7269 100755 --- a/asm/berry_crush.s +++ b/asm/berry_crush.s @@ -5,439 +5,6 @@ .text - thumb_func_start sub_80216E0 -sub_80216E0: @ 80216E0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - adds r6, r0, 0 - str r1, [sp] - movs r0, 0 - str r0, [sp, 0x4] - movs r1, 0x4E - adds r1, r6 - mov r10, r1 - mov r9, r0 - ldrb r2, [r6, 0x9] - cmp r0, r2 - bcs _080217AE - ldr r7, =gUnknown_082F41CC -_08021704: - mov r3, r10 - ldrh r0, [r3, 0xA] - mov r4, r9 - lsls r1, r4, 1 - add r1, r9 - asrs r0, r1 - lsls r0, 16 - movs r1, 0xE0 - lsls r1, 11 - ands r1, r0 - lsrs r1, 16 - mov r8, r1 - cmp r1, 0 - beq _0802179E - ldr r0, [sp, 0x4] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08021748 - lsls r4, 2 - ldr r5, [sp] - adds r5, 0x24 - adds r0, r5, r4 - ldr r0, [r0] - movs r1, 0x1 - bl StartSpriteAnim - b _0802175A - .pool -_08021748: - mov r0, r9 - lsls r4, r0, 2 - ldr r5, [sp] - adds r5, 0x24 - adds r0, r5, r4 - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim -_0802175A: - adds r3, r5, r4 - ldr r2, [r3] - adds r2, 0x3E - ldrb r0, [r2] - movs r4, 0x5 - negs r4, r4 - adds r1, r4, 0 - ands r0, r1 - strb r0, [r2] - ldr r2, [r3] - adds r2, 0x2C - ldrb r0, [r2] - subs r4, 0x3C - adds r1, r4, 0 - ands r0, r1 - strb r0, [r2] - ldr r2, [r3] - movs r0, 0x3 - mov r1, r8 - ands r1, r0 - mov r8, r1 - subs r1, 0x1 - lsls r1, 1 - adds r0, r1, r7 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - strh r0, [r2, 0x24] - ldr r2, [r3] - ldr r3, =gUnknown_082F41CC+1 - adds r1, r3 - movs r0, 0 - ldrsb r0, [r1, r0] - strh r0, [r2, 0x26] -_0802179E: - mov r0, r9 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldrb r4, [r6, 0x9] - cmp r9, r4 - bcc _08021704 -_080217AE: - ldr r0, [sp, 0x4] - cmp r0, 0 - bne _080217C0 - adds r2, r6, 0 - adds r2, 0x25 - ldrb r1, [r2] - b _0802189C - .pool -_080217C0: - ldrh r0, [r6, 0x28] - movs r1, 0x3 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - mov r1, r8 - str r1, [sp, 0x8] - movs r2, 0 - mov r9, r2 - mov r3, r10 - ldrh r1, [r3, 0xC] - lsls r0, r1, 1 - adds r0, 0x3 - adds r6, 0x25 - str r6, [sp, 0xC] - adds r3, r1, 0 - cmp r9, r0 - bge _08021890 -_080217E8: - mov r4, r9 - lsls r1, r4, 2 - ldr r0, [sp] - adds r0, 0x4C - adds r7, r0, r1 - ldr r2, [r7] - adds r0, r2, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0802187E - ldr r0, =sub_8022B28 - str r0, [r2, 0x1C] - lsls r1, r4, 1 - ldr r3, =gUnknown_082F41CC+6 - adds r0, r1, r3 - movs r4, 0 - ldrsb r4, [r0, r4] - adds r0, r4, 0 - adds r0, 0x78 - strh r0, [r2, 0x20] - ldr r2, [r7] - ldr r0, =gUnknown_082F41CC+7 - adds r1, r0 - movs r6, 0 - ldrsb r6, [r1, r6] - mov r1, r8 - lsls r0, r1, 2 - subs r0, 0x88 - subs r0, r6, r0 - strh r0, [r2, 0x22] - ldr r5, [r7] - ldr r2, [sp, 0x8] - lsls r1, r2, 2 - adds r0, r4, 0 - bl __divsi3 - adds r4, r0 - strh r4, [r5, 0x24] - ldr r0, [r7] - strh r6, [r0, 0x26] - mov r3, r10 - ldrb r1, [r3, 0x4] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08021860 - ldr r0, [r7] - movs r1, 0x1 - bl StartSpriteAnim - b _08021868 - .pool -_08021860: - ldr r0, [r7] - movs r1, 0 - bl StartSpriteAnim -_08021868: - mov r0, r8 - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - mov r4, r10 - ldrh r3, [r4, 0xC] - cmp r0, 0x3 - bls _0802187E - movs r0, 0 - mov r8, r0 -_0802187E: - mov r0, r9 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r0, r3, 1 - adds r0, 0x3 - cmp r9, r0 - blt _080217E8 -_08021890: - ldr r2, [sp, 0xC] - ldrb r1, [r2] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080218A6 -_0802189C: - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - b _080218C4 -_080218A6: - ldr r3, [sp, 0x4] - cmp r3, 0x1 - bne _080218B4 - movs r0, 0x4E - bl PlaySE - b _080218BA -_080218B4: - movs r0, 0x4D - bl PlaySE -_080218BA: - ldr r4, [sp, 0xC] - ldrb r0, [r4] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r4] -_080218C4: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80216E0 - - thumb_func_start sub_80218D4 -sub_80218D4: @ 80218D4 - push {r4-r7,lr} - adds r5, r0, 0 - adds r6, r1, 0 - movs r2, 0 - ldrb r0, [r5, 0x9] - cmp r2, r0 - bcs _08021906 - adds r4, r6, 0 - adds r4, 0x24 - movs r7, 0x4 - adds r3, r0, 0 -_080218EA: - lsls r0, r2, 2 - adds r0, r4, r0 - ldr r0, [r0] - adds r0, 0x3E - ldrb r1, [r0] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _08021920 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r3 - bcc _080218EA -_08021906: - movs r2, 0 - adds r3, r6, 0 - adds r3, 0x4C - movs r4, 0x4 -_0802190E: - lsls r0, r2, 2 - adds r0, r3, r0 - ldr r0, [r0] - adds r0, 0x3E - ldrb r1, [r0] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - bne _08021924 -_08021920: - movs r0, 0 - b _0802193C -_08021924: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xA - bls _0802190E - movs r1, 0x2C - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _0802193A - movs r0, 0 - strh r0, [r5, 0x2C] -_0802193A: - movs r0, 0x1 -_0802193C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80218D4 - - thumb_func_start sub_8021944 -sub_8021944: @ 8021944 - push {r4-r7,lr} - adds r6, r0, 0 - lsls r4, r1, 16 - lsrs r4, 16 - movs r7, 0 - movs r5, 0xE1 - lsls r5, 4 - adds r0, r4, 0 - adds r1, r5, 0 - bl __udivsi3 - strh r0, [r6, 0x4] - adds r0, r4, 0 - adds r1, r5, 0 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3C - bl __udivsi3 - strh r0, [r6, 0x6] - adds r0, r4, 0 - movs r1, 0x3C - bl __umodsi3 - lsls r0, 24 - asrs r0, 16 - movs r1, 0x4 - bl sub_8151534 - adds r2, r7, 0 - lsls r0, 16 - asrs r3, r0, 16 - movs r0, 0x7 - mov r12, r0 - ldr r5, =gUnknown_082F334C - movs r4, 0x1 -_08021990: - mov r0, r12 - subs r1, r0, r2 - adds r0, r3, 0 - asrs r0, r1 - ands r0, r4 - cmp r0, 0 - beq _080219A6 - lsls r0, r2, 2 - adds r0, r5 - ldr r0, [r0] - adds r7, r0 -_080219A6: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _08021990 - ldr r1, =0x000f4240 - adds r0, r7, 0 - bl __udivsi3 - strh r0, [r6, 0x8] - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8021944 - - thumb_func_start sub_80219C8 -sub_80219C8: @ 80219C8 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - mov r8, r3 - lsls r6, 24 - lsrs r6, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - movs r2, 0x1 - negs r2, r2 - movs r0, 0x2 - mov r1, r8 - bl GetStringWidth - lsls r4, 2 - lsrs r0, 1 - subs r4, r0 - lsls r4, 24 - lsrs r4, 24 - lsls r0, r5, 1 - adds r0, r5 - ldr r1, =gUnknown_082F32D8 - adds r0, r1 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - mov r0, r8 - str r0, [sp, 0x8] - adds r0, r6, 0 - movs r1, 0x2 - adds r2, r4, 0 - movs r3, 0 - bl AddTextPrinterParameterized3 - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80219C8 - thumb_func_start sub_8021A28 sub_8021A28: @ 8021A28 push {r4-r7,lr} diff --git a/asm/dodrio_berry_picking.s b/asm/dodrio_berry_picking.s deleted file mode 100755 index 8203696be..000000000 --- a/asm/dodrio_berry_picking.s +++ /dev/null @@ -1,7859 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8026988 -sub_8026988: @ 8026988 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0x44 - adds r0, 0x48 - ldrb r0, [r0] - mov r8, r0 - ldrb r6, [r1] - cmp r6, r8 - bcs _08026A7A - ldr r0, =gUnknown_082F449C - mov r9, r0 -_080269A8: - ldr r0, =gUnknown_02022C98 - ldr r3, [r0] - adds r0, r3, 0 - adds r0, 0x28 - ldrb r1, [r0] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - ldr r2, =0x000031a0 - adds r0, r2 - adds r7, r3, r0 - movs r0, 0xB - adds r2, r1, 0 - muls r2, r0 - adds r2, r6, r2 - adds r3, 0x24 - ldrb r1, [r3] - subs r1, 0x1 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 3 - subs r0, r1 - adds r2, r0 - add r2, r9 - ldrb r4, [r2] - adds r0, r7, 0 - adds r0, 0x1F - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _080269FC - adds r0, r6, 0 - movs r1, 0 - bl sub_8028BF8 - b _08026A04 - .pool -_080269FC: - adds r0, r6, 0 - movs r1, 0x1 - bl sub_8028BF8 -_08026A04: - adds r0, r7, 0 - adds r0, 0x1F - adds r5, r0, r4 - ldrb r0, [r5] - cmp r0, 0x9 - bls _08026A30 - adds r0, r7, 0 - adds r0, 0x14 - adds r0, r4 - ldrb r1, [r0] - adds r1, 0x3 - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl sub_8028CA4 - ldrb r1, [r5] - lsls r1, 25 - movs r0, 0xFF - lsls r0, 24 - adds r1, r0 - b _08026A52 -_08026A30: - adds r0, r7, 0 - adds r0, 0x14 - adds r3, r0, r4 - ldrb r0, [r3] - cmp r0, 0x3 - bne _08026A5C - movs r0, 0x7 - strb r0, [r5] - adds r0, r6, 0 - movs r1, 0x6 - bl sub_8028CA4 - ldrb r1, [r5] - lsls r1, 25 - movs r2, 0xFF - lsls r2, 24 - adds r1, r2 -_08026A52: - lsrs r1, 24 - adds r0, r6, 0 - bl sub_8028C7C - b _08026A70 -_08026A5C: - ldrb r1, [r3] - adds r0, r6, 0 - bl sub_8028CA4 - ldrb r1, [r5] - lsls r1, 25 - lsrs r1, 24 - adds r0, r6, 0 - bl sub_8028C7C -_08026A70: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, r8 - bcc _080269A8 -_08026A7A: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8026988 - - thumb_func_start sub_8026A88 -sub_8026A88: @ 8026A88 - push {r4-r6,lr} - ldr r1, =gUnknown_02022C98 - ldr r0, [r1] - adds r0, 0x24 - ldrb r5, [r0] - movs r4, 0 - cmp r4, r5 - bcs _08026ABA - adds r6, r1, 0 -_08026A9A: - lsls r0, r4, 4 - subs r0, r4 - lsls r0, 2 - ldr r1, [r6] - adds r0, r1 - ldr r1, =0x000031cc - adds r0, r1 - ldrb r1, [r0] - adds r0, r4, 0 - bl sub_80286B4 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _08026A9A -_08026ABA: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8026A88 - - thumb_func_start sub_8026AC8 -sub_8026AC8: @ 8026AC8 - push {r4,r5,lr} - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r0, 0x24 - ldrb r5, [r0] - movs r4, 0 - cmp r4, r5 - bcs _08026AEA -_08026AD8: - adds r0, r4, 0 - movs r1, 0x4 - bl sub_80286B4 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _08026AD8 -_08026AEA: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8026AC8 - - thumb_func_start sub_8026AF4 -sub_8026AF4: @ 8026AF4 - push {lr} - bl sub_8026988 - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x9 - bls _08026B10 - bl sub_8026AC8 - b _08026B14 - .pool -_08026B10: - bl sub_8026A88 -_08026B14: - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r0, 0x40 - ldrb r0, [r0] - bl sub_80288D4 - pop {r0} - bx r0 - .pool - thumb_func_end sub_8026AF4 - - thumb_func_start sub_8026B28 -sub_8026B28: @ 8026B28 - push {lr} - bl sub_8026988 - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x9 - bls _08026B44 - bl sub_8026AC8 - b _08026B48 - .pool -_08026B44: - bl sub_8026A88 -_08026B48: - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r0, 0x40 - ldrb r0, [r0] - bl sub_80288D4 - pop {r0} - bx r0 - .pool - thumb_func_end sub_8026B28 - - thumb_func_start sub_8026B5C -sub_8026B5C: @ 8026B5C - push {lr} - adds r3, r1, 0 - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x1 - cmp r0, 0x4 - bhi _08026BB4 - lsls r0, 2 - ldr r1, =_08026B78 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_08026B78: - .4byte _08026B8C - .4byte _08026B94 - .4byte _08026B9C - .4byte _08026BA4 - .4byte _08026BAC -_08026B8C: - movs r0, 0x4 - strb r0, [r3] - movs r0, 0x7 - b _08026BB2 -_08026B94: - movs r0, 0x3 - strb r0, [r3] - movs r0, 0x8 - b _08026BB2 -_08026B9C: - movs r0, 0x2 - strb r0, [r3] - movs r0, 0x9 - b _08026BB2 -_08026BA4: - movs r0, 0x1 - strb r0, [r3] - movs r0, 0xA - b _08026BB2 -_08026BAC: - movs r0, 0 - strb r0, [r3] - movs r0, 0xB -_08026BB2: - strb r0, [r2] -_08026BB4: - pop {r0} - bx r0 - thumb_func_end sub_8026B5C - - thumb_func_start sub_8026BB8 -sub_8026BB8: @ 8026BB8 - push {r4-r6,lr} - ldr r1, =gUnknown_02022C98 - ldr r0, [r1] - adds r0, 0x24 - ldrb r5, [r0] - movs r4, 0x1 - cmp r4, r5 - bcs _08026C1E - adds r6, r1, 0 -_08026BCA: - ldr r0, [r6] - movs r1, 0xAC - lsls r1, 1 - adds r0, r1 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _08026BEC - adds r0, r4, 0 - bl sub_8027DFC - ldr r1, [r6] - movs r2, 0xAC - lsls r2, 1 - adds r1, r2 - adds r1, r4 - strb r0, [r1] -_08026BEC: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _08026BCA - cmp r4, r5 - bcs _08026C1E - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - movs r2, 0xAC - lsls r2, 1 - adds r1, r0, r2 -_08026C04: - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _08026C14 - movs r0, 0 - b _08026C20 - .pool -_08026C14: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _08026C04 -_08026C1E: - movs r0, 0x1 -_08026C20: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8026BB8 - - thumb_func_start sub_8026C28 -sub_8026C28: @ 8026C28 - push {r4,lr} - movs r1, 0 - ldr r4, =gUnknown_02022C98 - movs r3, 0xAC - lsls r3, 1 - movs r2, 0 -_08026C34: - ldr r0, [r4] - adds r0, r3 - adds r0, r1 - strb r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x4 - bls _08026C34 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8026C28 - - thumb_func_start sub_8026C50 -sub_8026C50: @ 8026C50 - push {r4,lr} - ldr r3, =gUnknown_02022C98 - ldr r1, [r3] - adds r2, r1, 0 - adds r2, 0x40 - ldrb r0, [r2] - cmp r0, 0x9 - bls _08026C88 - movs r4, 0x90 - lsls r4, 1 - adds r0, r1, r4 - ldr r0, [r0] - cmp r0, 0 - bne _08026C88 - movs r0, 0xA - strb r0, [r2] - ldr r0, [r3] - movs r1, 0x96 - lsls r1, 1 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - beq _08026C88 - movs r0, 0x1 - b _08026C8A - .pool -_08026C88: - movs r0, 0 -_08026C8A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8026C50 - - thumb_func_start sub_8026C90 -sub_8026C90: @ 8026C90 - push {r4-r6,lr} - ldr r4, =gUnknown_02022C98 - ldr r1, [r4] - adds r2, r1, 0 - adds r2, 0x40 - ldrb r0, [r2] - cmp r0, 0x9 - bls _08026D14 - adds r0, r1, 0 - adds r0, 0x44 - ldrb r3, [r0] - adds r0, 0x4 - ldrb r5, [r0] - movs r0, 0xA - strb r0, [r2] - ldr r4, [r4] - mov r12, r4 - movs r0, 0x96 - lsls r0, 1 - add r0, r12 - ldr r0, [r0] - cmp r0, 0 - beq _08026D14 - adds r4, r3, 0 - cmp r4, r5 - bcs _08026D04 - mov r0, r12 - adds r0, 0x28 - ldrb r3, [r0] - lsls r1, r3, 4 - subs r1, r3 - lsls r1, 2 - ldr r6, =gUnknown_082F449C - subs r0, 0x4 - ldrb r2, [r0] - subs r2, 0x1 - add r1, r12 - movs r0, 0xB - muls r3, r0 - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 3 - subs r2, r0, r2 - ldr r0, =0x000031bf - adds r1, r0 -_08026CEA: - adds r0, r4, r3 - adds r0, r2 - adds r0, r6 - ldrb r0, [r0] - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, 0xA - bne _08026D14 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _08026CEA -_08026D04: - movs r0, 0x1 - b _08026D16 - .pool -_08026D14: - movs r0, 0 -_08026D16: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8026C90 - - thumb_func_start sub_8026D1C -sub_8026D1C: @ 8026D1C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r0, =gUnknown_082F7A9C - mov r8, r0 - ldr r0, =gUnknown_02022C98 - ldr r6, [r0] - adds r0, r6, 0 - adds r0, 0x90 - adds r0, r5 - mov r9, r0 - ldrb r7, [r0] - adds r0, r7, 0 - movs r1, 0x7 - bl __umodsi3 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - add r4, r8 - adds r0, r7, 0 - movs r1, 0x7 - bl __udivsi3 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - muls r0, r1 - ldrb r4, [r4] - adds r0, r4 - lsls r0, 24 - lsls r5, 1 - adds r6, 0x86 - adds r6, r5 - ldrh r1, [r6] - lsrs r0, 24 - cmp r1, r0 - bcc _08026D76 - adds r0, r7, 0x1 - mov r1, r9 - strb r0, [r1] -_08026D76: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8026D1C - - thumb_func_start sub_8026D8C -sub_8026D8C: @ 8026D8C - lsls r0, 24 - lsrs r0, 24 - ldr r3, =gUnknown_082F449C+0x1AC - ldr r1, =gUnknown_02022C98 - ldr r1, [r1] - adds r1, 0x24 - ldrb r1, [r1] - subs r1, 0x1 - movs r2, 0xB - muls r1, r2 - adds r0, r1 - adds r0, r3 - ldrb r0, [r0] - bx lr - .pool - thumb_func_end sub_8026D8C - - thumb_func_start sub_8026DB0 -sub_8026DB0: @ 8026DB0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r4, =gUnknown_02022C98 - ldr r1, [r4] - adds r1, 0x24 - ldrb r2, [r1] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, =gUnknown_082F449C+0x15E - lsls r1, r0, 1 - adds r1, r0 - lsls r0, r2, 4 - subs r0, r2 - adds r1, r0 - adds r0, r1, r3 - ldrb r0, [r0] - mov r12, r0 - adds r0, r3, 0x1 - adds r0, r1, r0 - ldrb r7, [r0] - adds r3, 0x2 - adds r1, r3 - ldrb r1, [r1] - mov r8, r1 - movs r3, 0 - ldr r1, =gUnknown_082F449C+0x1E3 - lsls r0, r2, 2 - adds r2, r0, r2 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08026E18 - adds r6, r1, 0 -_08026DFE: - adds r0, r3, r2 - adds r0, r6 - ldrb r0, [r0] - cmp r5, r0 - beq _08026E3C - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r3, r2 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _08026DFE -_08026E18: - ldr r0, [r4] - adds r0, 0x90 - mov r1, r12 - adds r2, r0, r1 - adds r1, r0, r7 - ldrb r0, [r2] - ldrb r3, [r1] - cmp r0, r3 - bls _08026E46 - adds r1, r0, 0 - b _08026E48 - .pool -_08026E3C: - ldr r0, [r4] - adds r0, 0x90 - adds r0, r7 - ldrb r0, [r0] - b _08026E5A -_08026E46: - ldrb r1, [r1] -_08026E48: - ldr r0, [r4] - adds r0, 0x90 - mov r2, r8 - adds r4, r0, r2 - ldrb r0, [r4] - cmp r0, r1 - bls _08026E58 - adds r1, r0, 0 -_08026E58: - adds r0, r1, 0 -_08026E5A: - adds r1, r5, 0 - bl sub_8026E70 - lsls r0, 24 - lsrs r0, 24 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8026DB0 - - thumb_func_start sub_8026E70 -sub_8026E70: @ 8026E70 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r2, =gUnknown_02022C98 - ldr r2, [r2] - adds r2, 0xE8 - adds r2, r1 - ldrb r4, [r2] - movs r1, 0x7 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x6 - bhi _08026EDE - lsls r0, 2 - ldr r1, =_08026EA4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_08026EA4: - .4byte _08026EDE - .4byte _08026ED6 - .4byte _08026EE2 - .4byte _08026EC0 - .4byte _08026EC6 - .4byte _08026ECC - .4byte _08026ED2 -_08026EC0: - cmp r4, 0 - beq _08026ED6 - b _08026EDE -_08026EC6: - cmp r4, 0 - beq _08026EE2 - b _08026EDE -_08026ECC: - cmp r4, 0x2 - beq _08026ED6 - b _08026EE2 -_08026ED2: - cmp r4, 0 - bne _08026EDA -_08026ED6: - movs r0, 0x1 - b _08026EE4 -_08026EDA: - cmp r4, 0x1 - beq _08026EE2 -_08026EDE: - movs r0, 0 - b _08026EE4 -_08026EE2: - movs r0, 0x2 -_08026EE4: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8026E70 - - thumb_func_start sub_8026EEC -sub_8026EEC: @ 8026EEC - push {r4-r6,lr} - movs r6, 0 - movs r5, 0 - adds r4, r0, 0 - b _08026EFE -_08026EF6: - ldrh r0, [r4, 0x6] - adds r6, r0 - adds r4, 0xC - adds r5, 0x1 -_08026EFE: - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r0, 24 - cmp r5, r0 - blt _08026EF6 - cmp r6, 0xA - bgt _08026F12 - movs r0, 0 - b _08026F14 -_08026F12: - movs r0, 0x1 -_08026F14: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8026EEC - - thumb_func_start sub_8026F1C -sub_8026F1C: @ 8026F1C - push {r4-r6,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - lsls r2, 24 - lsrs r2, 24 - ldr r6, =gUnknown_02022C98 - ldr r1, [r6] - adds r0, r1, 0 - adds r0, 0x24 - ldrb r5, [r0] - cmp r3, 0 - bge _08026F3A - b _0802722C -_08026F3A: - cmp r3, 0x2 - ble _08026F48 - cmp r3, 0x3 - beq _08026F78 - b _0802722C - .pool -_08026F48: - ldr r3, =0x000031b4 - adds r0, r1, r3 - adds r0, r4 - ldrb r4, [r0] - lsls r4, 1 - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r4, r0 - adds r0, r1, 0 - adds r0, 0x4A - adds r0, r4 - ldrh r0, [r0] - ldr r1, =0x00004e20 - bl sub_8027A28 - ldr r1, [r6] - adds r1, 0x4A - adds r1, r4 - b _0802722A - .pool -_08026F78: - adds r0, r1, 0 - adds r0, 0x4A - bl sub_8026EEC - cmp r0, 0 - beq _08026F86 - b _0802722C -_08026F86: - cmp r5, 0x3 - bne _08026F8C - b _08027154 -_08026F8C: - cmp r5, 0x3 - bgt _08026F98 - cmp r5, 0x2 - bne _08026F96 - b _080271E8 -_08026F96: - b _0802722C -_08026F98: - cmp r5, 0x4 - bne _08026F9E - b _08027090 -_08026F9E: - cmp r5, 0x5 - beq _08026FA4 - b _0802722C -_08026FA4: - cmp r4, 0x9 - bls _08026FAA - b _0802722C -_08026FAA: - lsls r0, r4, 2 - ldr r1, =_08026FB8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_08026FB8: - .4byte _08026FE0 - .4byte _08026FF8 - .4byte _08027004 - .4byte _0802701C - .4byte _08027028 - .4byte _08027040 - .4byte _0802704C - .4byte _08027060 - .4byte _0802706C - .4byte _08027084 -_08026FE0: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x68 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - adds r1, 0x74 - b _08027226 - .pool -_08026FF8: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r1, 0x74 - b _08027226 - .pool -_08027004: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x74 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - adds r1, 0x80 - b _08027226 - .pool -_0802701C: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r1, 0x80 - b _08027226 - .pool -_08027028: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x80 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - adds r1, 0x50 - b _08027226 - .pool -_08027040: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r1, 0x50 - b _08027226 - .pool -_0802704C: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x50 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - b _08027224 - .pool -_08027060: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - b _08027224 - .pool -_0802706C: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x5C - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - adds r1, 0x68 - b _08027226 - .pool -_08027084: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r1, 0x68 - b _08027226 - .pool -_08027090: - subs r0, r4, 0x1 - cmp r0, 0x7 - bls _08027098 - b _0802722C -_08027098: - lsls r0, 2 - ldr r1, =_080270A8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_080270A8: - .4byte _080270C8 - .4byte _080270E0 - .4byte _080270EC - .4byte _08027104 - .4byte _08027110 - .4byte _08027124 - .4byte _08027130 - .4byte _08027148 -_080270C8: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x68 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - adds r1, 0x74 - b _08027226 - .pool -_080270E0: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r1, 0x74 - b _08027226 - .pool -_080270EC: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x74 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - adds r1, 0x50 - b _08027226 - .pool -_08027104: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r1, 0x50 - b _08027226 - .pool -_08027110: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x50 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - b _08027224 - .pool -_08027124: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - b _08027224 - .pool -_08027130: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x5C - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - adds r1, 0x68 - b _08027226 - .pool -_08027148: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r1, 0x68 - b _08027226 - .pool -_08027154: - subs r0, r4, 0x2 - cmp r0, 0x5 - bhi _0802722C - lsls r0, 2 - ldr r1, =_08027168 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_08027168: - .4byte _08027180 - .4byte _08027198 - .4byte _080271A4 - .4byte _080271BC - .4byte _080271C8 - .4byte _080271DC -_08027180: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x5C - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - adds r1, 0x68 - b _08027226 - .pool -_08027198: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r1, 0x68 - b _08027226 - .pool -_080271A4: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x68 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - adds r1, 0x50 - b _08027226 - .pool -_080271BC: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r1, 0x50 - b _08027226 - .pool -_080271C8: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0x50 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - b _08027224 - .pool -_080271DC: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - b _08027224 - .pool -_080271E8: - cmp r4, 0x4 - beq _0802720E - cmp r4, 0x4 - bgt _080271F6 - cmp r4, 0x3 - beq _08027200 - b _0802722C -_080271F6: - cmp r4, 0x5 - beq _08027214 - cmp r4, 0x6 - beq _08027222 - b _0802722C -_08027200: - ldr r1, [r6] - adds r2, r1, 0 - adds r2, 0x50 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - b _08027224 -_0802720E: - ldr r1, [r6] - adds r1, 0x50 - b _08027226 -_08027214: - ldr r1, [r6] - adds r2, r1, 0 - adds r2, 0x50 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - b _08027224 -_08027222: - ldr r1, [r6] -_08027224: - adds r1, 0x5C -_08027226: - ldrh r0, [r1] - adds r0, 0x1 -_0802722A: - strh r0, [r1] -_0802722C: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8026F1C - - thumb_func_start sub_8027234 -sub_8027234: @ 8027234 - push {r4,r5,lr} - adds r1, r0, 0 - ldr r4, =gUnknown_02022C98 - ldr r3, [r4] - adds r0, r3, 0 - adds r0, 0x24 - ldrb r0, [r0] - cmp r0, 0x5 - bne _0802729E - cmp r1, 0x1 - bne _08027280 - movs r5, 0x89 - lsls r5, 1 - adds r1, r3, r5 - ldrh r0, [r1] - adds r2, r0, 0x1 - strh r2, [r1] - movs r0, 0x8A - lsls r0, 1 - adds r1, r3, r0 - lsls r0, r2, 16 - lsrs r0, 16 - ldrh r3, [r1] - cmp r0, r3 - bls _08027268 - strh r2, [r1] -_08027268: - ldr r0, [r4] - adds r2, r0, r5 - ldrh r0, [r2] - ldr r1, =0x0000270f - cmp r0, r1 - bls _0802729E - strh r1, [r2] - b _0802729E - .pool -_08027280: - movs r2, 0x89 - lsls r2, 1 - adds r0, r3, r2 - movs r5, 0x8A - lsls r5, 1 - adds r1, r3, r5 - ldrh r0, [r0] - ldrh r3, [r1] - cmp r0, r3 - bls _08027296 - strh r0, [r1] -_08027296: - ldr r0, [r4] - adds r0, r2 - movs r1, 0 - strh r1, [r0] -_0802729E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8027234 - - thumb_func_start sub_80272A4 -sub_80272A4: @ 80272A4 - push {r4,r5,lr} - movs r3, 0 - ldr r2, =gUnknown_02022C98 - ldr r0, [r2] - adds r0, 0x24 - ldrb r0, [r0] - cmp r3, r0 - bcs _080272DC - adds r5, r2, 0 - movs r4, 0x8A - lsls r4, 1 -_080272BA: - ldr r2, [r5] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - adds r1, r2, 0 - adds r1, 0x54 - adds r1, r0 - adds r0, r2, r4 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - adds r2, 0x24 - ldrb r2, [r2] - cmp r3, r2 - bcc _080272BA -_080272DC: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80272A4 - - thumb_func_start sub_80272E8 -sub_80272E8: @ 80272E8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r5, 0 - ldr r7, =gUnknown_02022C98 - movs r4, 0 - ldr r0, =0x000031bf - mov r10, r0 -_080272FC: - movs r2, 0 - lsls r6, r5, 4 - lsls r1, r5, 1 - mov r8, r1 - lsls r0, r5, 3 - mov r12, r0 - adds r1, r5, 0x1 - mov r9, r1 - subs r0, r6, r5 - lsls r3, r0, 2 -_08027310: - ldr r0, [r7] - adds r1, r2, r3 - add r0, r10 - adds r0, r1 - strb r4, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xA - bls _08027310 - ldr r0, [r7] - subs r1, r6, r5 - lsls r1, 2 - adds r0, r1 - ldr r2, =0x000031cc - adds r0, r2 - strb r4, [r0] - ldr r0, [r7] - adds r0, r1 - ldr r1, =0x000031d0 - adds r0, r1 - strb r4, [r0] - ldr r0, [r7] - adds r0, 0x90 - adds r0, r5 - strb r4, [r0] - ldr r1, [r7] - adds r0, r1, 0 - adds r0, 0x86 - add r0, r8 - strh r4, [r0] - add r1, r12 - ldr r2, =0x00003308 - adds r1, r2 - strb r4, [r1] - ldr r2, [r7] - ldr r1, =0x0000330c - adds r0, r2, r1 - add r0, r12 - str r4, [r0] - mov r0, r8 - adds r1, r0, r5 - lsls r1, 2 - adds r0, r2, 0 - adds r0, 0x4A - adds r0, r1 - strh r4, [r0] - adds r0, r2, 0 - adds r0, 0x4C - adds r0, r1 - strh r4, [r0] - adds r0, r2, 0 - adds r0, 0x4E - adds r0, r1 - strh r4, [r0] - adds r0, r2, 0 - adds r0, 0x50 - adds r0, r1 - strh r4, [r0] - adds r0, r2, 0 - adds r0, 0x52 - adds r0, r1 - strh r4, [r0] - adds r0, r2, 0 - adds r0, 0x54 - adds r0, r1 - strh r4, [r0] - mov r1, r9 - lsls r0, r1, 24 - lsrs r5, r0, 24 - cmp r5, 0x4 - bls _080272FC - ldr r2, =gUnknown_02022C98 - ldr r0, [r2] - movs r1, 0xAA - lsls r1, 1 - adds r0, r1 - movs r2, 0 - strb r2, [r0] - ldr r1, =gUnknown_02022C98 - ldr r0, [r1] - movs r1, 0x89 - lsls r1, 1 - adds r3, r0, r1 - movs r1, 0 - strh r2, [r3] - adds r0, 0x40 - strb r1, [r0] - bl sub_8026A88 - bl sub_8026988 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80272E8 - - thumb_func_start sub_80273F0 -sub_80273F0: @ 80273F0 - push {r4,r5,lr} - movs r4, 0 - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r0, 0x24 - ldrb r0, [r0] - cmp r0, 0x4 - beq _0802740C - cmp r0, 0x5 - beq _08027410 - b _08027412 - .pool -_0802740C: - movs r4, 0x1 - b _08027412 -_08027410: - movs r4, 0x2 -_08027412: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xA - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - movs r3, 0 - lsls r1, r4, 2 - ldr r5, =gUnknown_02022C98 - ldr r2, =gUnknown_082F7AA4 - adds r1, r4 - lsls r1, 1 - adds r0, r1 - adds r0, r2 - ldrb r2, [r0] -_08027436: - ldr r1, [r5] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - adds r1, 0x52 - adds r1, r0 - strh r2, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x4 - bls _08027436 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80273F0 - - thumb_func_start sub_802745C -sub_802745C: @ 802745C - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, =gUnknown_02022C98 - ldr r2, [r1] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r0, r2, 0 - adds r0, 0x4A - adds r0, r1 - ldrh r3, [r0] - adds r0, r2, 0 - adds r0, 0x4C - adds r0, r1 - ldrh r0, [r0] - adds r2, 0x4E - adds r2, r1 - adds r3, r0 - ldrh r2, [r2] - adds r0, r3, r2 - ldr r1, =0x0000270f - cmp r0, r1 - bls _0802748E - adds r0, r1, 0 -_0802748E: - pop {r1} - bx r1 - .pool - thumb_func_end sub_802745C - - thumb_func_start sub_802749C -sub_802749C: @ 802749C - push {r4-r6,lr} - ldr r5, =gUnknown_02022C98 - ldr r0, [r5] - adds r0, 0x28 - ldrb r0, [r0] - bl sub_802745C - ldr r1, =0x0000270f - bl sub_8027A38 - adds r4, r0, 0 - ldr r0, [r5] - adds r0, 0x28 - ldrb r0, [r0] - bl sub_80276C0 - ldr r1, =0x000f4236 - bl sub_8027A38 - adds r2, r0, 0 - ldr r3, =gSaveBlock2Ptr - ldr r0, [r3] - movs r6, 0x83 - lsls r6, 2 - adds r1, r0, r6 - ldr r0, [r1] - cmp r0, r2 - bcs _080274D6 - str r2, [r1] -_080274D6: - ldr r0, [r3] - movs r2, 0x84 - lsls r2, 2 - adds r1, r0, r2 - ldrh r0, [r1] - cmp r0, r4 - bcs _080274E6 - strh r4, [r1] -_080274E6: - ldr r0, [r3] - ldr r6, =0x00000212 - adds r2, r0, r6 - ldr r0, [r5] - movs r1, 0x8A - lsls r1, 1 - adds r0, r1 - ldrh r1, [r0] - ldrh r0, [r2] - cmp r0, r1 - bcs _080274FE - strh r1, [r2] -_080274FE: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802749C - - thumb_func_start sub_8027518 -sub_8027518: @ 8027518 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r1, =gUnknown_02022C98 - ldr r0, [r1] - adds r0, 0x9B - ldrb r6, [r0] - movs r3, 0x3 - adds r5, r1, 0 - adds r4, r5, 0 -_0802752C: - ldr r0, [r4] - adds r0, 0x98 - adds r2, r0, r3 - subs r1, r3, 0x1 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - lsls r1, 24 - lsrs r3, r1, 24 - cmp r3, 0 - bne _0802752C - ldr r0, [r5] - adds r0, 0x98 - strb r7, [r0] - adds r0, r6, 0 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end sub_8027518 - - thumb_func_start sub_8027554 -sub_8027554: @ 8027554 - push {r4,lr} - ldr r4, =gUnknown_02022C98 - ldr r3, [r4] - adds r0, r3, 0 - adds r0, 0x28 - ldrb r1, [r0] - adds r0, 0x88 - adds r2, r0, r1 - ldrb r0, [r2] - cmp r0, 0 - bne _080275FC - ldr r0, =gMain - ldrh r2, [r0, 0x2E] - movs r0, 0x40 - ands r0, r2 - cmp r0, 0 - beq _08027594 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r0, r3, r0 - ldr r1, =0x000031cc - adds r0, r1 - movs r1, 0x2 - b _080275CA - .pool -_08027594: - movs r0, 0x20 - ands r0, r2 - cmp r0, 0 - beq _080275B0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r0, r3, r0 - ldr r1, =0x000031cc - adds r0, r1 - movs r1, 0x3 - b _080275CA - .pool -_080275B0: - movs r0, 0x10 - ands r0, r2 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _080275E8 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r0, r3, r0 - ldr r1, =0x000031cc - adds r0, r1 - movs r1, 0x1 -_080275CA: - strb r1, [r0] - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x28 - adds r0, 0xB0 - ldrb r1, [r1] - adds r0, r1 - movs r1, 0x6 - strb r1, [r0] - movs r0, 0xD4 - bl PlaySE - b _08027600 - .pool -_080275E8: - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r0, r3, r0 - ldr r1, =0x000031cc - adds r0, r1 - strb r2, [r0] - b _08027600 - .pool -_080275FC: - subs r0, 0x1 - strb r0, [r2] -_08027600: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8027554 - - thumb_func_start sub_8027608 -sub_8027608: @ 8027608 - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x28 - ldrb r2, [r0] - lsls r0, r2, 4 - subs r0, r2 - lsls r0, 2 - adds r1, r0 - ldr r0, =0x000031cc - adds r1, r0 - movs r0, 0 - strb r0, [r1] - bx lr - .pool - thumb_func_end sub_8027608 - - thumb_func_start sub_802762C -sub_802762C: @ 802762C - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x28 - ldrb r2, [r0] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r1, 0x52 - adds r1, r0 - ldrh r0, [r1] - adds r0, 0x85 - lsls r0, 16 - lsrs r0, 16 - bx lr - .pool - thumb_func_end sub_802762C - - thumb_func_start sub_8027650 -sub_8027650: @ 8027650 - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r0, 0x24 - ldrb r0, [r0] - bx lr - .pool - thumb_func_end sub_8027650 - - thumb_func_start sub_8027660 -sub_8027660: @ 8027660 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _0802768C - ldr r0, =gUnknown_02022C98 - lsls r1, r2, 4 - subs r1, r2 - lsls r1, 2 - ldr r2, =0x000031a0 - adds r1, r2 - ldr r0, [r0] - b _08027694 - .pool -_0802768C: - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - ldr r1, =gLinkPlayers + 8 -_08027694: - adds r0, r1 - pop {r1} - bx r1 - .pool - thumb_func_end sub_8027660 - - thumb_func_start sub_80276A0 -sub_80276A0: @ 80276A0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - ldr r2, =gUnknown_02022C98 - ldr r3, [r2] - lsrs r1, 23 - lsls r2, r0, 1 - adds r2, r0 - lsls r2, 2 - adds r1, r2 - adds r3, 0x4A - adds r3, r1 - ldrh r0, [r3] - bx lr - .pool - thumb_func_end sub_80276A0 - - thumb_func_start sub_80276C0 -sub_80276C0: @ 80276C0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - movs r5, 0 - movs r3, 0 - ldr r0, =gUnknown_02022C98 - mov r9, r0 - ldr r2, =gUnknown_082F7B24 - mov r10, r2 - ldr r2, [r0] - lsls r1, r4, 1 - adds r0, r1, r4 - lsls r0, 2 - str r0, [sp] - adds r6, r2, 0 - adds r6, 0x4A - mov r12, r1 - mov r8, r10 -_080276EE: - lsls r1, r3, 1 - ldr r7, [sp] - adds r0, r1, r7 - adds r0, r6, r0 - ldrh r2, [r0] - add r1, r8 - movs r7, 0 - ldrsh r0, [r1, r7] - muls r0, r2 - adds r5, r0 - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x2 - bls _080276EE - mov r0, r9 - ldr r1, [r0] - mov r2, r12 - adds r0, r2, r4 - lsls r0, 2 - adds r1, 0x50 - adds r1, r0 - ldrh r1, [r1] - mov r3, r10 - movs r7, 0x6 - ldrsh r0, [r3, r7] - muls r0, r1 - cmp r5, r0 - bls _08027734 - subs r0, r5, r0 - b _08027736 - .pool -_08027734: - movs r0, 0 -_08027736: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80276C0 - - thumb_func_start sub_8027748 -sub_8027748: @ 8027748 - push {r4-r6,lr} - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r0, 0x24 - ldrb r6, [r0] - movs r0, 0 - bl sub_80276C0 - adds r5, r0, 0 - movs r4, 0x1 - cmp r4, r6 - bcs _08027776 -_08027760: - adds r0, r4, 0 - bl sub_80276C0 - cmp r0, r5 - bls _0802776C - adds r5, r0, 0 -_0802776C: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r6 - bcc _08027760 -_08027776: - ldr r1, =0x000f4236 - adds r0, r5, 0 - bl sub_8027A38 - pop {r4-r6} - pop {r1} - bx r1 - .pool - thumb_func_end sub_8027748 - - thumb_func_start sub_802778C -sub_802778C: @ 802778C - push {r4,r5,lr} - lsls r0, 24 - ldr r1, =gUnknown_02022C98 - ldr r2, [r1] - adds r1, r2, 0 - adds r1, 0x24 - ldrb r5, [r1] - lsrs r4, r0, 23 - adds r2, 0x4A - adds r0, r2, r4 - ldrh r3, [r0] - movs r1, 0 - cmp r1, r5 - bcs _080277C4 -_080277A8: - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r4, r0 - adds r0, r2, r0 - ldrh r0, [r0] - cmp r0, r3 - bls _080277BA - adds r3, r0, 0 -_080277BA: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r5 - bcc _080277A8 -_080277C4: - adds r0, r3, 0 - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end sub_802778C - - thumb_func_start sub_80277D0 -sub_80277D0: @ 80277D0 - push {r4-r7,lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r7, r0, 24 - movs r6, 0x1 - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r0, 0x24 - ldrb r5, [r0] - movs r4, 0 - cmp r4, r5 - bcs _080277FE -_080277E8: - adds r0, r4, 0 - bl sub_80276C0 - lsls r1, r4, 2 - add r1, sp - str r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _080277E8 -_080277FE: - lsls r7, 2 - mov r12, r7 - cmp r6, 0 - beq _08027838 - subs r7, r5, 0x1 -_08027808: - movs r6, 0 - movs r4, 0 - cmp r6, r7 - bge _08027834 - adds r5, r7, 0 -_08027812: - lsls r0, r4, 2 - mov r2, sp - adds r1, r2, r0 - adds r4, 0x1 - lsls r0, r4, 2 - adds r3, r2, r0 - ldr r0, [r1] - ldr r2, [r3] - cmp r0, r2 - bcs _0802782C - str r2, [r1] - str r0, [r3] - movs r6, 0x1 -_0802782C: - lsls r0, r4, 24 - lsrs r4, r0, 24 - cmp r4, r5 - blt _08027812 -_08027834: - cmp r6, 0 - bne _08027808 -_08027838: - mov r0, sp - add r0, r12 - ldr r0, [r0] - add sp, 0x14 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end sub_80277D0 - - thumb_func_start sub_802784C -sub_802784C: @ 802784C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r0, 0 - mov r10, r0 - mov r8, r0 - mov r9, r0 - ldr r6, =gUnknown_02022C98 - ldr r0, [r6] - adds r0, 0x24 - ldrb r5, [r0] - bl sub_8027748 - bl sub_8027748 - cmp r0, 0 - bne _080278A0 - movs r4, 0 - cmp r9, r5 - bcs _080278A0 - adds r2, r6, 0 - ldr r1, =0x00003308 - mov r12, r1 - movs r7, 0 - movs r6, 0x4 - ldr r3, =0x0000330c -_08027884: - ldr r0, [r2] - lsls r1, r4, 3 - adds r0, r1 - add r0, r12 - strb r6, [r0] - ldr r0, [r2] - adds r0, r3 - adds r0, r1 - str r7, [r0] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _08027884 -_080278A0: - movs r4, 0 - cmp r4, r5 - bcs _080278CA -_080278A6: - adds r0, r4, 0 - bl sub_80276C0 - ldr r1, =0x000f4236 - bl sub_8027A38 - ldr r1, =gUnknown_02022C98 - ldr r1, [r1] - lsls r2, r4, 3 - ldr r3, =0x0000330c - adds r1, r3 - adds r1, r2 - str r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _080278A6 -_080278CA: - mov r0, r10 - bl sub_80277D0 - adds r6, r0, 0 - mov r3, r8 - movs r4, 0 - cmp r4, r5 - bcs _08027916 - ldr r7, =gUnknown_02022C98 - mov r10, r7 -_080278DE: - mov r0, r10 - ldr r2, [r0] - lsls r1, r4, 3 - ldr r7, =0x0000330c - adds r0, r2, r7 - adds r0, r1 - ldr r0, [r0] - cmp r6, r0 - bne _0802790C - adds r0, r2, r1 - ldr r1, =0x00003308 - adds r0, r1 - strb r3, [r0] - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - mov r0, r9 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 -_0802790C: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _080278DE -_08027916: - mov r10, r8 - cmp r9, r5 - bcc _080278CA - movs r0, 0 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end sub_802784C - - thumb_func_start sub_802793C -sub_802793C: @ 802793C - lsls r1, 24 - ldr r2, =gUnknown_02022C98 - ldr r2, [r2] - lsrs r1, 21 - ldr r3, =0x00003308 - adds r2, r3 - adds r2, r1 - ldr r1, [r2] - ldr r2, [r2, 0x4] - str r1, [r0] - str r2, [r0, 0x4] - bx lr - .pool - thumb_func_end sub_802793C - - thumb_func_start sub_802795C -sub_802795C: @ 802795C - push {r4-r7,lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r6, r0, 24 - movs r7, 0 - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r0, 0x24 - ldrb r5, [r0] - mov r0, sp - movs r1, 0 - movs r2, 0x14 - bl memset - movs r4, 0 - cmp r7, r5 - bcs _08027994 -_0802797E: - adds r0, r4, 0 - bl sub_80276C0 - lsls r1, r4, 2 - add r1, sp - str r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _0802797E -_08027994: - lsls r0, r6, 2 - add r0, sp - ldr r1, [r0] - movs r4, 0 -_0802799C: - cmp r4, r6 - beq _080279B0 - lsls r0, r4, 2 - add r0, sp - ldr r0, [r0] - cmp r1, r0 - bcs _080279B0 - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 -_080279B0: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x4 - bls _0802799C - adds r0, r7, 0 - add sp, 0x14 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end sub_802795C - - thumb_func_start sub_80279C8 -sub_80279C8: @ 80279C8 - push {r4-r6,lr} - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r0, 0x28 - ldrb r4, [r0] - bl sub_802762C - lsls r0, 16 - lsrs r5, r0, 16 - adds r6, r5, 0 - adds r0, r4, 0 - bl sub_80276C0 - adds r4, r0, 0 - bl sub_8027748 - cmp r4, r0 - beq _080279F4 - movs r0, 0x3 - b _08027A22 - .pool -_080279F4: - adds r0, r5, 0 - movs r1, 0x1 - bl CheckBagHasSpace - lsls r0, 24 - cmp r0, 0 - bne _08027A06 - movs r0, 0x2 - b _08027A22 -_08027A06: - adds r0, r6, 0 - movs r1, 0x1 - bl AddBagItem - adds r0, r6, 0 - movs r1, 0x1 - bl CheckBagHasSpace - lsls r0, 24 - cmp r0, 0 - beq _08027A20 - movs r0, 0 - b _08027A22 -_08027A20: - movs r0, 0x1 -_08027A22: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80279C8 - - thumb_func_start sub_8027A28 -sub_8027A28: @ 8027A28 - push {lr} - adds r2, r0, 0 - adds r0, r1, 0 - cmp r2, r0 - bcs _08027A34 - adds r0, r2, 0x1 -_08027A34: - pop {r1} - bx r1 - thumb_func_end sub_8027A28 - - thumb_func_start sub_8027A38 -sub_8027A38: @ 8027A38 - push {lr} - adds r2, r0, 0 - adds r0, r1, 0 - cmp r2, r0 - bcs _08027A44 - adds r0, r2, 0 -_08027A44: - pop {r1} - bx r1 - thumb_func_end sub_8027A38 - - thumb_func_start sub_8027A48 -sub_8027A48: @ 8027A48 - lsls r0, 24 - lsrs r0, 24 - ldr r1, =gUnknown_02022C98 - ldr r1, [r1] - adds r1, 0x34 - adds r1, r0 - ldrb r0, [r1] - bx lr - .pool - thumb_func_end sub_8027A48 - - thumb_func_start sub_8027A5C -sub_8027A5C: @ 8027A5C - push {r4-r6,lr} - movs r5, 0 - ldr r6, =gSpecialVar_Result -_08027A62: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x5 - bl GetMonData - cmp r0, 0 - beq _08027A94 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - cmp r0, 0x55 - bne _08027A94 - movs r0, 0x1 - strh r0, [r6] - b _08027AA0 - .pool -_08027A94: - adds r5, 0x1 - cmp r5, 0x5 - ble _08027A62 - ldr r1, =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] -_08027AA0: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8027A5C - - thumb_func_start sub_8027AAC -sub_8027AAC: @ 8027AAC - push {r4,lr} - ldr r4, =sub_8027ACC - adds r0, r4, 0 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - bl _call_via_r4 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8027AAC - - thumb_func_start sub_8027ACC -sub_8027ACC: @ 8027ACC - push {r4-r7,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r7, r0, r1 - movs r1, 0 - ldrsh r0, [r7, r1] - cmp r0, 0x1 - beq _08027B94 - cmp r0, 0x1 - bgt _08027AF4 - cmp r0, 0 - beq _08027AFE - b _08027BE2 - .pool -_08027AF4: - cmp r0, 0x2 - beq _08027BA0 - cmp r0, 0x3 - beq _08027BC8 - b _08027BE2 -_08027AFE: - ldr r0, =gUnknown_082F7B2C - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp] - str r1, [sp, 0x4] - ldr r1, =gText_BerryPickingRecords - movs r0, 0x1 - movs r2, 0 - bl GetStringWidth - adds r4, r0, 0 - movs r6, 0 - ldr r5, =gUnknown_082F7B34 -_08027B18: - ldr r1, [r5] - movs r0, 0x1 - movs r2, 0 - bl GetStringWidth - adds r0, 0x32 - cmp r0, r4 - ble _08027B2A - adds r4, r0, 0 -_08027B2A: - adds r5, 0x4 - adds r6, 0x1 - cmp r6, 0x2 - bls _08027B18 - adds r0, r4, 0x7 - cmp r0, 0 - bge _08027B3A - adds r0, 0x7 -_08027B3A: - asrs r4, r0, 3 - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _08027B46 - adds r4, 0x1 -_08027B46: - movs r1, 0x1E - subs r1, r4 - lsrs r0, r1, 31 - adds r1, r0 - asrs r1, 1 - lsls r1, 24 - lsrs r1, 16 - ldr r2, =0xffff00ff - ldr r0, [sp] - ands r0, r2 - orrs r0, r1 - lsls r2, r4, 24 - ldr r1, =0x00ffffff - ands r0, r1 - orrs r0, r2 - str r0, [sp] - mov r0, sp - bl AddWindow - strh r0, [r7, 0x2] - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - bl sub_8027BEC - ldrb r0, [r7, 0x2] - movs r1, 0x3 - b _08027BB6 - .pool -_08027B94: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08027BE2 - b _08027BBA -_08027BA0: - ldr r0, =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _08027BE2 - ldrb r0, [r7, 0x2] - bl rbox_fill_rectangle - ldrb r0, [r7, 0x2] - movs r1, 0x1 -_08027BB6: - bl CopyWindowToVram -_08027BBA: - ldrh r0, [r7] - adds r0, 0x1 - strh r0, [r7] - b _08027BE2 - .pool -_08027BC8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08027BE2 - ldrb r0, [r7, 0x2] - bl RemoveWindow - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts -_08027BE2: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8027ACC - - thumb_func_start sub_8027BEC -sub_8027BEC: @ 8027BEC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - str r1, [sp, 0x18] - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, =gSaveBlock2Ptr - ldr r1, [r0] - movs r2, 0x84 - lsls r2, 2 - adds r0, r1, r2 - ldrh r0, [r0] - str r0, [sp, 0xC] - subs r2, 0x4 - adds r0, r1, r2 - ldr r0, [r0] - str r0, [sp, 0x10] - ldr r0, =0x00000212 - adds r1, r0 - ldrh r0, [r1] - str r0, [sp, 0x14] - ldr r4, =0x0000021d - adds r0, r7, 0 - adds r1, r4, 0 - movs r2, 0xD0 - bl LoadUserWindowBorderGfx_ - adds r0, r7, 0 - adds r1, r4, 0 - movs r2, 0xD - bl DrawTextBorderOuter - adds r0, r7, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r4, =gText_BerryPickingRecords - ldr r0, [sp, 0x18] - lsls r2, r0, 3 - movs r0, 0x1 - adds r1, r4, 0 - bl GetStringCenterAlignXOffset - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0x1 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x1 - adds r2, r4, 0 - bl AddTextPrinterParameterized - movs r6, 0 - ldr r2, =gStringVar1 - mov r8, r2 - movs r0, 0xFF - mov r10, r0 - mov r9, r6 - mov r2, sp - adds r2, 0xC - str r2, [sp, 0x1C] -_08027C76: - lsls r4, r6, 2 - ldr r0, [sp, 0x1C] - ldm r0!, {r1} - str r0, [sp, 0x1C] - ldr r0, =gUnknown_082F7B40 - adds r0, r6, r0 - ldrb r3, [r0] - mov r0, r8 - movs r2, 0 - bl ConvertIntToDecimalStringN - movs r0, 0x1 - mov r1, r8 - movs r2, 0x1 - negs r2, r2 - bl GetStringWidth - adds r5, r0, 0 - ldr r0, =gUnknown_082F7B34 - adds r4, r0 - ldr r2, [r4] - ldr r0, =gUnknown_082F7B44 - lsls r4, r6, 1 - adds r0, r4, r0 - ldrb r0, [r0] - str r0, [sp] - mov r0, r10 - str r0, [sp, 0x4] - mov r0, r9 - str r0, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r2, [sp, 0x18] - lsls r3, r2, 3 - subs r3, r5 - lsls r3, 24 - lsrs r3, 24 - ldr r0, =gUnknown_082F7B4A - adds r4, r0 - ldrb r0, [r4] - str r0, [sp] - mov r0, r10 - str r0, [sp, 0x4] - mov r2, r9 - str r2, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x1 - mov r2, r8 - bl AddTextPrinterParameterized - adds r6, 0x1 - cmp r6, 0x2 - ble _08027C76 - adds r0, r7, 0 - bl PutWindowTilemap - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8027BEC - - thumb_func_start sub_8027D20 -sub_8027D20: @ 8027D20 - push {lr} - bl GetLinkPlayerCount - ldr r1, =gUnknown_02022C98 - ldr r1, [r1] - adds r1, 0x24 - strb r0, [r1] - pop {r0} - bx r0 - .pool - thumb_func_end sub_8027D20 - - thumb_func_start sub_8027D38 -sub_8027D38: @ 8027D38 - push {r4-r7,lr} - ldr r0, =gUnknown_02022C98 - ldr r0, [r0] - adds r0, 0x24 - ldrb r4, [r0] - cmp r4, 0x4 - bhi _08027D66 - ldr r5, =gUnknown_082F7B90 -_08027D48: - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - ldr r1, =gLinkPlayers + 8 - adds r0, r1 - lsls r1, r4, 2 - adds r1, r5 - ldr r1, [r1] - bl StringCopy - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x4 - bls _08027D48 -_08027D66: - ldr r0, =gUnknown_02022C98 - ldr r1, [r0] - adds r1, 0x24 - movs r2, 0x5 - strb r2, [r1] - movs r1, 0 - mov r12, r0 -_08027D74: - movs r4, 0 - mov r2, r12 - ldr r0, [r2] - adds r0, 0x24 - adds r5, r1, 0x1 - ldrb r0, [r0] - cmp r4, r0 - bcs _08027DB2 - ldr r7, =gUnknown_02022C98 - lsls r3, r1, 1 - ldr r6, =gUnknown_082F7B50 -_08027D8A: - ldr r2, [r7] - lsls r0, r4, 1 - adds r0, r4 - lsls r0, 2 - adds r0, r3, r0 - adds r1, r2, 0 - adds r1, 0x4A - adds r1, r0 - lsls r0, r4, 3 - adds r0, r3, r0 - adds r0, r6 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - adds r2, 0x24 - ldrb r2, [r2] - cmp r4, r2 - bcc _08027D8A -_08027DB2: - lsls r0, r5, 24 - lsrs r1, r0, 24 - cmp r1, 0x3 - bls _08027D74 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8027D38 - - thumb_func_start sub_8027DD0 -sub_8027DD0: @ 8027DD0 - push {lr} - sub sp, 0x8 - ldr r3, =0xffffff00 - ldr r1, [sp] - ands r1, r3 - movs r2, 0x1 - orrs r1, r2 - str r1, [sp] - lsls r0, 24 - lsrs r0, 24 - ldr r1, [sp, 0x4] - ands r1, r3 - orrs r1, r0 - str r1, [sp, 0x4] - mov r0, sp - bl sub_800FE50 - add sp, 0x8 - pop {r0} - bx r0 - .pool - thumb_func_end sub_8027DD0 - - thumb_func_start sub_8027DFC -sub_8027DFC: @ 8027DFC - push {lr} - adds r2, r0, 0 - ldr r3, =gRecvCmds - ldrh r0, [r3] - movs r1, 0xFF - lsls r1, 8 - ands r1, r0 - movs r0, 0xBC - lsls r0, 6 - cmp r1, r0 - bne _08027E1E - lsls r0, r2, 4 - adds r1, r3, 0x2 - adds r1, r0, r1 - ldrb r0, [r1] - cmp r0, 0x1 - beq _08027E28 -_08027E1E: - movs r0, 0 - b _08027E2A - .pool -_08027E28: - ldrb r0, [r1, 0x4] -_08027E2A: - pop {r1} - bx r1 - thumb_func_end sub_8027DFC - - thumb_func_start sub_8027E30 -sub_8027E30: @ 8027E30 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - ldr r4, [sp, 0x48] - lsls r4, 24 - str r4, [sp, 0x1C] - movs r4, 0x14 - adds r4, r0 - mov r9, r4 - mov r5, sp - movs r4, 0x2 - strb r4, [r5] - mov r10, sp - mov r5, r9 - ldrb r4, [r5, 0xB] - movs r7, 0xF - adds r5, r7, 0 - ands r5, r4 - mov r6, r10 - ldrb r6, [r6, 0x1] - mov r8, r6 - movs r4, 0x10 - negs r4, r4 - mov r6, r8 - ands r4, r6 - orrs r4, r5 - mov r5, r10 - strb r4, [r5, 0x1] - mov r8, sp - mov r6, r9 - ldrb r5, [r6, 0xC] - lsls r5, 4 - ands r4, r7 - orrs r4, r5 - mov r5, r8 - strb r4, [r5, 0x1] - ldrb r5, [r6, 0xD] - movs r6, 0xF - ands r5, r6 - mov r4, r10 - ldrb r4, [r4, 0x2] - mov r8, r4 - movs r4, 0x10 - negs r4, r4 - mov r6, r8 - ands r4, r6 - orrs r4, r5 - mov r5, r10 - strb r4, [r5, 0x2] - mov r8, sp - mov r6, r9 - ldrb r5, [r6, 0xE] - lsls r5, 4 - ands r4, r7 - orrs r4, r5 - mov r5, r8 - strb r4, [r5, 0x2] - ldrb r5, [r6, 0xF] - movs r6, 0xF - ands r5, r6 - mov r4, r10 - ldrb r4, [r4, 0x3] - mov r8, r4 - movs r4, 0x10 - negs r4, r4 - mov r6, r8 - ands r4, r6 - orrs r4, r5 - mov r5, r10 - strb r4, [r5, 0x3] - mov r8, sp - mov r6, r9 - ldrb r5, [r6, 0x10] - lsls r5, 4 - ands r4, r7 - orrs r4, r5 - mov r5, r8 - strb r4, [r5, 0x3] - ldrb r5, [r6, 0x11] - movs r6, 0xF - ands r5, r6 - mov r4, r10 - ldrb r4, [r4, 0x4] - mov r8, r4 - movs r4, 0x10 - negs r4, r4 - mov r6, r8 - ands r4, r6 - orrs r4, r5 - mov r5, r10 - strb r4, [r5, 0x4] - mov r8, sp - mov r6, r9 - ldrb r5, [r6, 0x12] - lsls r5, 4 - ands r4, r7 - orrs r4, r5 - mov r5, r8 - strb r4, [r5, 0x4] - ldrb r4, [r6, 0x13] - movs r6, 0xF - ands r4, r6 - mov r6, r8 - ldrb r5, [r6, 0x5] - movs r6, 0x10 - negs r6, r6 - ands r6, r5 - orrs r6, r4 - str r6, [sp, 0xC] - mov r4, r8 - strb r6, [r4, 0x5] - mov r5, sp - mov r6, r9 - ldrb r4, [r6, 0x14] - lsls r4, 4 - ldr r6, [sp, 0xC] - ands r6, r7 - orrs r6, r4 - strb r6, [r5, 0x5] - mov r7, sp - movs r4, 0x3 - mov r8, r4 - ldrb r0, [r0, 0x14] - mov r5, r8 - ands r0, r5 - ldrb r5, [r7, 0x6] - movs r6, 0x4 - negs r6, r6 - mov r10, r6 - mov r4, r10 - ands r4, r5 - orrs r4, r0 - strb r4, [r7, 0x6] - mov r5, r9 - ldrb r0, [r5, 0x1] - mov r6, r8 - ands r0, r6 - lsls r0, 2 - movs r5, 0xD - negs r5, r5 - ands r5, r4 - orrs r5, r0 - strb r5, [r7, 0x6] - mov r0, r9 - ldrb r4, [r0, 0x2] - ands r4, r6 - lsls r4, 4 - movs r0, 0x31 - negs r0, r0 - ands r0, r5 - orrs r0, r4 - strb r0, [r7, 0x6] - mov r5, sp - mov r6, r9 - ldrb r4, [r6, 0x3] - lsls r4, 6 - movs r6, 0x3F - ands r0, r6 - orrs r0, r4 - strb r0, [r5, 0x6] - mov r4, r9 - ldrb r0, [r4, 0x4] - mov r5, r8 - ands r0, r5 - ldrb r5, [r7, 0x7] - mov r4, r10 - ands r4, r5 - orrs r4, r0 - strb r4, [r7, 0x7] - mov r6, r9 - ldrb r0, [r6, 0x5] - mov r5, r8 - ands r0, r5 - lsls r0, 2 - movs r5, 0xD - negs r5, r5 - ands r5, r4 - orrs r5, r0 - strb r5, [r7, 0x7] - ldrb r4, [r6, 0x6] - mov r6, r8 - ands r4, r6 - lsls r4, 4 - movs r0, 0x31 - negs r0, r0 - ands r0, r5 - orrs r0, r4 - strb r0, [r7, 0x7] - mov r5, sp - mov r6, r9 - ldrb r4, [r6, 0x7] - lsls r4, 6 - movs r6, 0x3F - ands r0, r6 - orrs r0, r4 - strb r0, [r5, 0x7] - mov r8, sp - mov r0, r9 - ldrb r4, [r0, 0x8] - movs r7, 0x3 - adds r0, r7, 0 - ands r0, r4 - mov r4, r8 - ldrb r5, [r4, 0x8] - mov r4, r10 - ands r4, r5 - orrs r4, r0 - mov r5, r8 - strb r4, [r5, 0x8] - mov r6, r9 - ldrb r5, [r6, 0x9] - adds r0, r7, 0 - ands r0, r5 - lsls r0, 2 - movs r5, 0xD - negs r5, r5 - ands r5, r4 - orrs r5, r0 - mov r0, r8 - strb r5, [r0, 0x8] - ldrb r0, [r1] - adds r4, r7, 0 - ands r4, r0 - lsls r4, 4 - movs r0, 0x31 - negs r0, r0 - ands r0, r5 - orrs r0, r4 - mov r4, r8 - strb r0, [r4, 0x8] - mov r5, sp - ldrb r4, [r2] - lsls r4, 6 - movs r6, 0x3F - ands r0, r6 - orrs r0, r4 - strb r0, [r5, 0x8] - ldrb r4, [r3] - adds r0, r7, 0 - ands r0, r4 - ldrb r4, [r5, 0x9] - mov r6, r10 - ands r6, r4 - orrs r6, r0 - mov r10, r6 - strb r6, [r5, 0x9] - ldr r0, [sp, 0x40] - ldrb r4, [r0] - adds r0, r7, 0 - ands r0, r4 - lsls r0, 2 - movs r4, 0xD - negs r4, r4 - ands r6, r4 - orrs r6, r0 - str r6, [sp, 0x10] - strb r6, [r5, 0x9] - mov r4, sp - ldr r5, [sp, 0x44] - ldrb r0, [r5] - adds r6, r7, 0 - ands r6, r0 - lsls r0, r6, 4 - subs r7, 0x34 - ldr r5, [sp, 0x10] - ands r7, r5 - orrs r7, r0 - strb r7, [r4, 0x9] - mov r5, sp - ldrb r0, [r1, 0x4] - movs r6, 0x1 - mov r12, r6 - mov r4, r12 - ands r4, r0 - lsls r4, 6 - movs r0, 0x41 - negs r0, r0 - mov r10, r0 - ands r0, r7 - orrs r0, r4 - strb r0, [r5, 0x9] - ldrb r4, [r2, 0x4] - lsls r4, 7 - movs r5, 0x7F - ands r0, r5 - orrs r0, r4 - mov r4, r8 - strb r0, [r4, 0x9] - ldrb r4, [r3, 0x4] - mov r0, r12 - ands r0, r4 - mov r5, r8 - ldrb r4, [r5, 0xA] - movs r7, 0x2 - negs r7, r7 - adds r5, r7, 0 - ands r5, r4 - orrs r5, r0 - mov r6, r8 - strb r5, [r6, 0xA] - mov r9, sp - ldr r4, [sp, 0x40] - ldrb r0, [r4, 0x4] - mov r4, r12 - ands r4, r0 - lsls r4, 1 - movs r6, 0x3 - negs r6, r6 - mov r8, r6 - mov r0, r8 - ands r0, r5 - orrs r0, r4 - mov r4, r9 - strb r0, [r4, 0xA] - ldr r6, [sp, 0x44] - ldrb r5, [r6, 0x4] - mov r4, r12 - ands r4, r5 - lsls r4, 2 - movs r5, 0x5 - negs r5, r5 - ands r0, r5 - orrs r0, r4 - mov r4, r9 - strb r0, [r4, 0xA] - mov r4, sp - ldrb r1, [r1, 0x8] - mov r0, r12 - ands r0, r1 - lsls r0, 2 - ldrb r1, [r4, 0xB] - ands r5, r1 - orrs r5, r0 - strb r5, [r4, 0xB] - ldrb r1, [r2, 0x8] - mov r0, r12 - ands r0, r1 - lsls r0, 3 - movs r1, 0x9 - negs r1, r1 - ands r1, r5 - orrs r1, r0 - strb r1, [r4, 0xB] - ldrb r2, [r3, 0x8] - mov r0, r12 - ands r0, r2 - lsls r0, 4 - movs r2, 0x11 - negs r2, r2 - ands r2, r1 - orrs r2, r0 - strb r2, [r4, 0xB] - mov r3, sp - ldr r5, [sp, 0x40] - ldrb r0, [r5, 0x8] - mov r1, r12 - ands r1, r0 - lsls r1, 5 - movs r0, 0x21 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0xB] - mov r2, sp - ldrb r1, [r6, 0x8] - mov r6, r12 - ands r6, r1 - lsls r1, r6, 6 - mov r3, r10 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0xB] - ldr r4, [sp, 0x1C] - lsrs r3, r4, 21 - ldrb r1, [r2, 0xA] - movs r0, 0x7 - ands r0, r1 - orrs r0, r3 - strb r0, [r2, 0xA] - mov r1, sp - ldr r5, [sp, 0x4C] - movs r6, 0x1 - ands r5, r6 - lsls r2, r5, 1 - ldrb r0, [r1, 0xB] - mov r3, r8 - ands r3, r0 - orrs r3, r2 - mov r8, r3 - strb r3, [r1, 0xB] - mov r0, sp - ldr r4, [sp, 0x50] - ands r4, r6 - mov r5, r8 - ands r5, r7 - orrs r5, r4 - strb r5, [r0, 0xB] - bl sub_800FE50 - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8027E30 - - thumb_func_start sub_8028164 -sub_8028164: @ 8028164 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r7, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - ldr r0, [sp, 0x1C] - mov r12, r0 - ldr r1, [sp, 0x20] - mov r8, r1 - ldr r0, [sp, 0x24] - mov r9, r0 - adds r2, r7, 0 - adds r2, 0x14 - ldr r4, =gRecvCmds - ldrh r0, [r4] - movs r1, 0xFF - lsls r1, 8 - ands r1, r0 - movs r0, 0xBC - lsls r0, 6 - cmp r1, r0 - bne _0802819C - adds r3, r4, 0x2 - ldrb r0, [r4, 0x2] - cmp r0, 0x2 - beq _080281A4 -_0802819C: - movs r0, 0 - b _080282DE - .pool -_080281A4: - ldrb r0, [r3, 0x1] - lsls r0, 28 - lsrs r0, 28 - strb r0, [r2, 0xB] - ldrb r0, [r3, 0x1] - lsrs r0, 4 - strb r0, [r2, 0xC] - ldrb r0, [r3, 0x2] - lsls r0, 28 - lsrs r0, 28 - strb r0, [r2, 0xD] - ldrb r0, [r3, 0x2] - lsrs r0, 4 - strb r0, [r2, 0xE] - ldrb r0, [r3, 0x3] - lsls r0, 28 - lsrs r0, 28 - strb r0, [r2, 0xF] - ldrb r0, [r3, 0x3] - lsrs r0, 4 - strb r0, [r2, 0x10] - ldrb r0, [r3, 0x4] - lsls r0, 28 - lsrs r0, 28 - strb r0, [r2, 0x11] - ldrb r0, [r3, 0x4] - lsrs r0, 4 - strb r0, [r2, 0x12] - ldrb r0, [r3, 0x5] - lsls r0, 28 - lsrs r0, 28 - strb r0, [r2, 0x13] - ldrb r0, [r3, 0x5] - lsrs r0, 4 - strb r0, [r2, 0x14] - ldrb r0, [r3, 0x1] - lsls r0, 28 - lsrs r0, 28 - strb r0, [r2, 0x15] - ldrb r0, [r3, 0x6] - lsls r0, 30 - lsrs r0, 30 - strb r0, [r7, 0x14] - ldrb r0, [r3, 0x6] - lsls r0, 28 - lsrs r0, 30 - strb r0, [r2, 0x1] - ldrb r0, [r3, 0x6] - lsls r0, 26 - lsrs r0, 30 - strb r0, [r2, 0x2] - ldrb r0, [r3, 0x6] - lsrs r0, 6 - strb r0, [r2, 0x3] - ldrb r0, [r3, 0x7] - lsls r0, 30 - lsrs r0, 30 - strb r0, [r2, 0x4] - ldrb r0, [r3, 0x7] - lsls r0, 28 - lsrs r0, 30 - strb r0, [r2, 0x5] - ldrb r0, [r3, 0x7] - lsls r0, 26 - lsrs r0, 30 - strb r0, [r2, 0x6] - ldrb r0, [r3, 0x7] - lsrs r0, 6 - strb r0, [r2, 0x7] - ldrb r0, [r3, 0x8] - lsls r0, 30 - lsrs r0, 30 - strb r0, [r2, 0x8] - ldrb r0, [r3, 0x8] - lsls r0, 28 - lsrs r0, 30 - strb r0, [r2, 0x9] - ldrb r0, [r3, 0x6] - lsls r0, 30 - lsrs r0, 30 - strb r0, [r2, 0xA] - ldrb r0, [r3, 0x8] - lsls r0, 26 - lsrs r0, 30 - strb r0, [r5] - ldrb r0, [r3, 0x9] - lsls r0, 25 - lsrs r0, 31 - strb r0, [r5, 0x4] - ldrb r0, [r3, 0xB] - lsls r0, 29 - lsrs r0, 31 - strb r0, [r5, 0x8] - ldrb r0, [r3, 0x8] - lsrs r0, 6 - strb r0, [r6] - ldrb r0, [r3, 0x9] - lsrs r0, 7 - strb r0, [r6, 0x4] - ldrb r0, [r3, 0xB] - lsls r0, 28 - lsrs r0, 31 - strb r0, [r6, 0x8] - ldrb r0, [r3, 0x9] - lsls r0, 30 - lsrs r0, 30 - mov r1, r12 - strb r0, [r1] - ldrb r0, [r3, 0xA] - lsls r0, 31 - lsrs r0, 31 - strb r0, [r1, 0x4] - ldrb r0, [r3, 0xB] - lsls r0, 27 - lsrs r0, 31 - strb r0, [r1, 0x8] - ldrb r0, [r3, 0x9] - lsls r0, 28 - lsrs r0, 30 - mov r1, r8 - strb r0, [r1] - ldrb r0, [r3, 0xA] - lsls r0, 30 - lsrs r0, 31 - strb r0, [r1, 0x4] - ldrb r0, [r3, 0xB] - lsls r0, 26 - lsrs r0, 31 - strb r0, [r1, 0x8] - ldrb r0, [r3, 0x9] - lsls r0, 26 - lsrs r0, 30 - mov r1, r9 - strb r0, [r1] - ldrb r0, [r3, 0xA] - lsls r0, 29 - lsrs r0, 31 - strb r0, [r1, 0x4] - ldrb r0, [r3, 0xB] - lsls r0, 25 - lsrs r0, 31 - strb r0, [r1, 0x8] - ldrb r0, [r3, 0xA] - lsrs r0, 3 - ldr r1, [sp, 0x28] - strb r0, [r1] - ldrb r0, [r3, 0xB] - lsls r0, 30 - lsrs r0, 31 - ldr r1, [sp, 0x2C] - str r0, [r1] - ldrb r0, [r3, 0xB] - lsls r0, 31 - lsrs r0, 31 - ldr r1, [sp, 0x30] - str r0, [r1] - movs r0, 0x1 -_080282DE: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8028164 - - thumb_func_start sub_80282EC -sub_80282EC: @ 80282EC - push {lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - ldr r3, =0xffffff00 - ldr r1, [sp] - ands r1, r3 - movs r2, 0x3 - orrs r1, r2 - str r1, [sp] - ldr r1, [sp, 0x4] - ands r1, r3 - orrs r1, r0 - str r1, [sp, 0x4] - mov r0, sp - bl sub_800FE50 - add sp, 0x8 - pop {r0} - bx r0 - .pool - thumb_func_end sub_80282EC - - thumb_func_start sub_8028318 -sub_8028318: @ 8028318 - push {r4,lr} - adds r2, r0, 0 - adds r4, r1, 0 - ldr r3, =gRecvCmds - ldrh r0, [r3] - movs r1, 0xFF - lsls r1, 8 - ands r1, r0 - movs r0, 0xBC - lsls r0, 6 - cmp r1, r0 - bne _0802833C - lsls r0, r2, 4 - adds r1, r3, 0x2 - adds r1, r0, r1 - ldrb r0, [r1] - cmp r0, 0x3 - beq _08028344 -_0802833C: - movs r0, 0 - b _0802834A - .pool -_08028344: - ldrb r0, [r1, 0x4] - strb r0, [r4] - movs r0, 0x1 -_0802834A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8028318 - - thumb_func_start sub_8028350 -sub_8028350: @ 8028350 - push {lr} - sub sp, 0x8 - ldr r2, =0xffffff00 - ldr r1, [sp] - ands r1, r2 - movs r2, 0x4 - orrs r1, r2 - str r1, [sp] - str r0, [sp, 0x4] - mov r0, sp - bl sub_800FE50 - add sp, 0x8 - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028350 - - thumb_func_start sub_8028374 -sub_8028374: @ 8028374 - push {lr} - adds r2, r0, 0 - ldr r3, =gRecvCmds - ldrh r0, [r3] - movs r1, 0xFF - lsls r1, 8 - ands r1, r0 - movs r0, 0xBC - lsls r0, 6 - cmp r1, r0 - bne _08028396 - lsls r0, r2, 4 - adds r1, r3, 0x2 - adds r1, r0, r1 - ldrb r0, [r1] - cmp r0, 0x4 - beq _080283A0 -_08028396: - movs r0, 0 - b _080283A2 - .pool -_080283A0: - ldr r0, [r1, 0x4] -_080283A2: - pop {r1} - bx r1 - thumb_func_end sub_8028374 - - thumb_func_start sub_80283A8 -sub_80283A8: @ 80283A8 - push {r4,r5,lr} - sub sp, 0x18 - movs r5, 0xC0 - lsls r5, 6 - adds r0, r5, 0 - bl AllocZeroed - adds r4, r0, 0 - ldr r0, =gUnknown_082FB2D8 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x8] - str r1, [sp, 0xC] - ldr r0, =gUnknown_082FB2E0 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x10] - str r1, [sp, 0x14] - ldr r0, =gDodrioBerryPkmnGfx - adds r1, r4, 0 - bl LZ77UnCompWram - cmp r4, 0 - beq _080283E8 - str r4, [sp] - str r5, [sp, 0x4] - mov r0, sp - bl LoadSpriteSheet - adds r0, r4, 0 - bl Free -_080283E8: - add r0, sp, 0x8 - bl LoadSpritePalette - add r0, sp, 0x10 - bl LoadSpritePalette - add sp, 0x18 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80283A8 - - thumb_func_start sub_8028408 -sub_8028408: @ 8028408 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x30 - adds r6, r1, 0 - mov r8, r2 - adds r5, r3, 0 - lsls r6, 24 - lsrs r6, 24 - mov r1, r8 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r5, 24 - lsrs r5, 24 - add r1, sp, 0x18 - movs r3, 0 - strh r3, [r1] - ldrb r2, [r0] - mov r0, sp - adds r0, 0x1A - strh r2, [r0] - ldr r0, =gUnknown_082FB1E0 - str r0, [sp, 0x1C] - ldr r0, =gUnknown_082FB228 - str r0, [sp, 0x20] - str r3, [sp, 0x24] - ldr r0, =gDummySpriteAffineAnimTable - str r0, [sp, 0x28] - ldr r0, =sub_80284A8 - str r0, [sp, 0x2C] - mov r0, sp - movs r2, 0x18 - bl memcpy - movs r0, 0x4 - bl AllocZeroed - ldr r1, =gUnknown_02022C9C - mov r2, r8 - lsls r4, r2, 2 - adds r4, r1 - str r0, [r4] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_8028F14 - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - mov r0, sp - movs r2, 0x88 - movs r3, 0x3 - bl CreateSprite - ldr r1, [r4] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1] - movs r0, 0x1 - mov r1, r8 - bl sub_8028654 - add sp, 0x30 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028408 - - thumb_func_start sub_80284A8 -sub_80284A8: @ 80284A8 - push {lr} - movs r2, 0x2E - ldrsh r1, [r0, r2] - cmp r1, 0x1 - beq _080284BC - cmp r1, 0x1 - ble _080284C6 - cmp r1, 0x2 - beq _080284C2 - b _080284C6 -_080284BC: - bl sub_802853C - b _080284C6 -_080284C2: - bl sub_80285AC -_080284C6: - pop {r0} - bx r0 - thumb_func_end sub_80284A8 - - thumb_func_start sub_80284CC -sub_80284CC: @ 80284CC - push {lr} - bl GetMultiplayerId - ldr r1, =gUnknown_02022C9C - lsls r0, 24 - lsrs r0, 22 - adds r0, r1 - ldr r0, [r0] - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - movs r2, 0 - movs r1, 0x1 - strh r1, [r0, 0x2E] - strh r2, [r0, 0x30] - strh r2, [r0, 0x32] - strh r2, [r0, 0x34] - strh r2, [r0, 0x36] - pop {r0} - bx r0 - .pool - thumb_func_end sub_80284CC - - thumb_func_start sub_8028504 -sub_8028504: @ 8028504 - push {lr} - bl GetMultiplayerId - ldr r1, =gUnknown_02022C9C - lsls r0, 24 - lsrs r0, 22 - adds r0, r1 - ldr r0, [r0] - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - movs r2, 0 - movs r1, 0x2 - strh r1, [r0, 0x2E] - strh r2, [r0, 0x30] - strh r2, [r0, 0x32] - strh r2, [r0, 0x34] - strh r2, [r0, 0x36] - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028504 - - thumb_func_start sub_802853C -sub_802853C: @ 802853C - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r2, r0, 16 - lsrs r0, 31 - adds r0, r2, r0 - asrs r1, r0, 1 - adds r0, r1, 0 - cmp r1, 0 - bge _08028558 - adds r0, r1, 0x3 -_08028558: - asrs r0, 2 - lsls r0, 2 - subs r0, r1, r0 - lsls r0, 24 - lsrs r0, 24 - cmp r2, 0x2 - ble _080285A2 - cmp r0, 0x2 - bgt _0802856E - cmp r0, 0x1 - bge _08028572 -_0802856E: - movs r0, 0x1 - b _08028574 -_08028572: - movs r0, 0xFF -_08028574: - lsls r0, 24 - asrs r0, 24 - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x27 - ble _080285A2 - movs r0, 0 - strh r0, [r4, 0x2E] - bl sub_8027650 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0 - bl sub_8028F14 - strh r0, [r4, 0x20] -_080285A2: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_802853C - - thumb_func_start sub_80285AC -sub_80285AC: @ 80285AC - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x30] - adds r0, 0x1 - strh r0, [r5, 0x30] - lsls r0, 16 - asrs r0, 16 - movs r1, 0xD - bl __divsi3 - lsls r0, 16 - asrs r1, r0, 16 - adds r0, r1, 0 - cmp r1, 0 - bge _080285CC - adds r0, r1, 0x3 -_080285CC: - asrs r0, 2 - lsls r0, 2 - subs r0, r1, r0 - lsls r0, 24 - lsrs r4, r0, 24 - movs r1, 0x30 - ldrsh r0, [r5, r1] - movs r1, 0xD - bl __modsi3 - lsls r0, 16 - cmp r0, 0 - bne _080285F0 - cmp r4, 0 - beq _080285F0 - movs r0, 0xD4 - bl PlaySE -_080285F0: - movs r1, 0x30 - ldrsh r0, [r5, r1] - cmp r0, 0x67 - ble _080285FE - movs r0, 0 - strh r0, [r5, 0x2E] - movs r4, 0 -_080285FE: - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - bl sub_80286B4 - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80285AC - - thumb_func_start sub_8028614 -sub_8028614: @ 8028614 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - cmp r4, r5 - bcs _08028646 - ldr r6, =gUnknown_02022C9C -_08028622: - lsls r0, r4, 2 - adds r0, r6 - ldr r0, [r0] - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - cmp r0, 0 - beq _0802863C - bl DestroySpriteAndFreeResources -_0802863C: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _08028622 -_08028646: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028614 - - thumb_func_start sub_8028654 -sub_8028654: @ 8028654 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - ldr r3, =gSprites - ldr r2, =gUnknown_02022C9C - lsrs r1, 22 - adds r1, r2 - ldr r1, [r1] - ldrh r1, [r1] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - adds r2, 0x3E - movs r1, 0x1 - ands r0, r1 - lsls r0, 2 - ldrb r3, [r2] - movs r1, 0x5 - negs r1, r1 - ands r1, r3 - orrs r1, r0 - strb r1, [r2] - bx lr - .pool - thumb_func_end sub_8028654 - - thumb_func_start sub_802868C -sub_802868C: @ 802868C - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - movs r4, 0 - cmp r4, r5 - bcs _080286AE -_0802869C: - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_8028654 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _0802869C -_080286AE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_802868C - - thumb_func_start sub_80286B4 -sub_80286B4: @ 80286B4 - push {lr} - lsls r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r2, =gUnknown_02022C9C - lsrs r0, 22 - adds r0, r2 - ldr r0, [r0] - ldrh r2, [r0] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - ldr r2, =gSprites - adds r0, r2 - bl StartSpriteAnim - pop {r0} - bx r0 - .pool - thumb_func_end sub_80286B4 - - thumb_func_start nullsub_15 -nullsub_15: @ 80286E0 - bx lr - thumb_func_end nullsub_15 - - thumb_func_start sub_80286E4 -sub_80286E4: @ 80286E4 - push {r4-r7,lr} - movs r4, 0 - ldr r0, =gSprites - mov r12, r0 - movs r6, 0 - ldr r5, =gUnknown_02022CF4 -_080286F0: - ldr r3, [r5] - lsls r1, r4, 1 - adds r0, r3, 0 - adds r0, 0x2A - adds r0, r1 - ldrh r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r12 - lsls r0, r4, 4 - adds r0, 0x30 - strh r0, [r1, 0x20] - lsls r2, r4, 3 - movs r7, 0x8 - negs r7, r7 - adds r0, r7, 0 - subs r0, r2 - strh r0, [r1, 0x22] - adds r3, 0xC - adds r3, r4 - strb r6, [r3] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x9 - bls _080286F0 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80286E4 - - thumb_func_start sub_8028734 -sub_8028734: @ 8028734 - push {r4-r6,lr} - sub sp, 0x28 - movs r4, 0xC0 - lsls r4, 1 - adds r0, r4, 0 - bl AllocZeroed - adds r6, r0, 0 - ldr r0, =gUnknown_082FB2E8 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x20] - str r1, [sp, 0x24] - ldr r0, =gDodrioBerryStatusGfx - adds r1, r6, 0 - bl LZ77UnCompWram - cmp r6, 0 - beq _080287C4 - str r6, [sp, 0x18] - add r5, sp, 0x18 - movs r0, 0x80 - lsls r0, 9 - orrs r0, r4 - str r0, [r5, 0x4] - mov r1, sp - ldr r0, =gUnknown_082FB2F0 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r4, =gUnknown_02022CF4 - movs r0, 0x40 - bl AllocZeroed - str r0, [r4] - adds r0, r5, 0 - bl LoadSpriteSheet - add r0, sp, 0x20 - bl LoadSpritePalette - movs r4, 0 -_0802878A: - lsls r1, r4, 20 - movs r0, 0xC0 - lsls r0, 14 - adds r1, r0 - asrs r1, 16 - lsls r0, r4, 3 - movs r3, 0x8 - negs r3, r3 - adds r2, r3, 0 - subs r2, r0 - lsls r2, 16 - asrs r2, 16 - mov r0, sp - movs r3, 0 - bl CreateSprite - ldr r1, =gUnknown_02022CF4 - ldr r1, [r1] - lsls r2, r4, 1 - adds r1, 0x2A - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x9 - bls _0802878A -_080287C4: - adds r0, r6, 0 - bl Free - add sp, 0x28 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028734 - - thumb_func_start sub_80287E4 -sub_80287E4: @ 80287E4 - push {r4,r5,lr} - movs r4, 0 -_080287E8: - ldr r5, =gUnknown_02022CF4 - ldr r0, [r5] - lsls r1, r4, 1 - adds r0, 0x2A - adds r0, r1 - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - cmp r0, 0 - beq _08028806 - bl DestroySpriteAndFreeResources -_08028806: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x9 - bls _080287E8 - ldr r0, [r5] - bl Free - movs r0, 0 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80287E4 - - thumb_func_start sub_8028828 -sub_8028828: @ 8028828 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - movs r3, 0 - movs r6, 0 - ldr r0, =gUnknown_02022CF4 - mov r9, r0 -_0802883A: - mov r7, r9 - ldr r2, [r7] - lsls r5, r6, 1 - adds r0, r2, 0 - adds r0, 0x2A - adds r0, r5 - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r4, r0, r1 - adds r0, r2, 0 - adds r0, 0x16 - adds r0, r5 - movs r1, 0x2 - strh r1, [r0] - adds r0, r2, 0 - adds r0, 0xC - adds r2, r0, r6 - ldrb r1, [r2] - cmp r1, 0 - beq _08028870 - movs r7, 0x22 - ldrsh r0, [r4, r7] - cmp r0, 0x8 - beq _080288A6 -_08028870: - movs r3, 0x1 - movs r7, 0x22 - ldrsh r0, [r4, r7] - cmp r0, 0x8 - bne _08028896 - cmp r1, 0 - bne _080288A6 - strb r3, [r2] - mov r1, r9 - ldr r0, [r1] - adds r0, 0x16 - adds r0, r5 - ldr r1, =0x0000fff0 - strh r1, [r0] - movs r0, 0x24 - str r3, [sp] - bl PlaySE - ldr r3, [sp] -_08028896: - mov r7, r9 - ldr r0, [r7] - adds r0, 0x16 - adds r0, r5 - ldrh r0, [r0] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] -_080288A6: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x9 - bls _0802883A - cmp r3, 0 - bne _080288C4 - movs r0, 0x1 - b _080288C6 - .pool -_080288C4: - movs r0, 0 -_080288C6: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8028828 - - thumb_func_start sub_80288D4 -sub_80288D4: @ 80288D4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0xA - bls _08028910 - movs r4, 0 -_080288E0: - ldr r0, =gUnknown_02022CF4 - ldr r0, [r0] - lsls r1, r4, 1 - adds r0, 0x2A - adds r0, r1 - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - movs r1, 0x1 - bl StartSpriteAnim - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x9 - bls _080288E0 - b _080289DA - .pool -_08028910: - movs r4, 0 - movs r0, 0xA - subs r0, r5 - cmp r4, r0 - bge _080289D6 - ldr r6, =gSprites -_0802891C: - cmp r5, 0x6 - bls _08028984 - ldr r0, =gUnknown_02022CF4 - ldr r2, [r0] - ldr r1, =0x0000fffa - adds r0, r1, 0 - ldrh r1, [r2, 0x3E] - adds r0, r1 - adds r0, r5 - movs r1, 0 - strh r0, [r2, 0x3E] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1E - bls _0802894C - strh r1, [r2, 0x3E] - b _0802899E - .pool -_0802894C: - cmp r0, 0xA - bls _0802896A - lsls r1, r4, 1 - adds r0, r2, 0 - adds r0, 0x2A - adds r0, r1 - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - movs r1, 0x2 - bl StartSpriteAnim - b _0802899E -_0802896A: - lsls r1, r4, 1 - adds r0, r2, 0 - adds r0, 0x2A - adds r0, r1 - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - movs r1, 0 - bl StartSpriteAnim - b _0802899E -_08028984: - ldr r0, =gUnknown_02022CF4 - ldr r0, [r0] - lsls r1, r4, 1 - adds r0, 0x2A - adds r0, r1 - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - movs r1, 0 - bl StartSpriteAnim -_0802899E: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0xA - subs r0, r5 - cmp r4, r0 - blt _0802891C - b _080289D6 - .pool -_080289B4: - ldr r0, =gUnknown_02022CF4 - ldr r0, [r0] - lsls r1, r4, 1 - adds r0, 0x2A - adds r0, r1 - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - movs r1, 0x1 - bl StartSpriteAnim - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_080289D6: - cmp r4, 0x9 - bls _080289B4 -_080289DA: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80288D4 - - thumb_func_start sub_80289E8 -sub_80289E8: @ 80289E8 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - movs r3, 0 - ldr r7, =gSprites - movs r1, 0x1 - ands r0, r1 - lsls r4, r0, 2 - movs r6, 0x5 - negs r6, r6 - ldr r5, =gUnknown_02022CF4 -_080289FE: - ldr r0, [r5] - lsls r1, r3, 1 - adds r0, 0x2A - adds r0, r1 - ldrh r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r7 - adds r1, 0x3E - ldrb r2, [r1] - adds r0, r6, 0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x9 - bls _080289FE - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80289E8 - - thumb_func_start sub_8028A34 -sub_8028A34: @ 8028A34 - push {r4,r5,lr} - sub sp, 0x10 - movs r5, 0x90 - lsls r5, 3 - adds r0, r5, 0 - bl AllocZeroed - adds r4, r0, 0 - ldr r0, =gUnknown_082FB314 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x8] - str r1, [sp, 0xC] - ldr r0, =gDodrioBerrySpritesGfx - adds r1, r4, 0 - bl LZ77UnCompWram - cmp r4, 0 - beq _08028A6A - str r4, [sp] - movs r0, 0x80 - lsls r0, 10 - orrs r0, r5 - str r0, [sp, 0x4] - mov r0, sp - bl LoadSpriteSheet -_08028A6A: - add r0, sp, 0x8 - bl LoadSpritePalette - adds r0, r4, 0 - bl Free - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028A34 - - thumb_func_start sub_8028A88 -sub_8028A88: @ 8028A88 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x30 - mov r1, sp - ldr r0, =gUnknown_082FB324 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - add r2, sp, 0x18 - adds r1, r2, 0 - ldr r0, =gUnknown_082FB33C - ldm r0!, {r3-r5} - stm r1!, {r3-r5} - ldm r0!, {r3-r5} - stm r1!, {r3-r5} - movs r5, 0 - mov r9, r2 -_08028AB0: - movs r0, 0x4 - bl AllocZeroed - ldr r1, =gUnknown_02022CB8 - lsls r4, r5, 2 - adds r4, r1 - str r0, [r4] - lsls r0, r5, 3 - lsls r1, r5, 4 - adds r1, r0 - mov r0, sp - movs r2, 0x8 - movs r3, 0x1 - bl CreateSprite - ldr r1, [r4] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1] - adds r0, r5, 0 - movs r1, 0x1 - bl sub_8028BF8 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0xA - bls _08028AB0 - movs r5, 0 - ldr r7, =gUnknown_02022CE4 - ldr r4, =gUnknown_082FB31C - mov r8, r4 -_08028AF0: - movs r0, 0x4 - bl AllocZeroed - lsls r1, r5, 2 - adds r4, r1, r7 - str r0, [r4] - adds r6, r1, 0 - cmp r5, 0x3 - bne _08028B2C - mov r0, r8 - movs r2, 0x6 - ldrsh r1, [r0, r2] - mov r0, r9 - movs r2, 0x31 - movs r3, 0 - bl CreateSprite - ldr r1, [r7, 0xC] - b _08028B40 - .pool -_08028B2C: - lsls r0, r5, 1 - add r0, r8 - movs r3, 0 - ldrsh r1, [r0, r3] - mov r0, r9 - movs r2, 0x34 - movs r3, 0 - bl CreateSprite - ldr r1, [r4] -_08028B40: - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1] - adds r0, r6, r7 - ldr r0, [r0] - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - adds r1, r5, 0 - bl StartSpriteAnim - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _08028AF0 - movs r0, 0x1 - bl sub_8028C30 - add sp, 0x30 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028A88 - - thumb_func_start sub_8028B80 -sub_8028B80: @ 8028B80 - push {r4-r6,lr} - movs r5, 0 - ldr r6, =gUnknown_02022CB8 -_08028B86: - lsls r0, r5, 2 - adds r4, r0, r6 - ldr r0, [r4] - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - cmp r0, 0 - beq _08028BA0 - bl DestroySprite -_08028BA0: - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0xA - bls _08028B86 - movs r5, 0 - ldr r6, =gUnknown_02022CE4 -_08028BB8: - lsls r0, r5, 2 - adds r4, r0, r6 - ldr r0, [r4] - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - cmp r0, 0 - beq _08028BD2 - bl DestroySprite -_08028BD2: - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _08028BB8 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028B80 - - thumb_func_start sub_8028BF8 -sub_8028BF8: @ 8028BF8 - lsls r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r3, =gSprites - ldr r2, =gUnknown_02022CB8 - lsrs r0, 22 - adds r0, r2 - ldr r0, [r0] - ldrh r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - adds r2, 0x3E - movs r0, 0x1 - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - bx lr - .pool - thumb_func_end sub_8028BF8 - - thumb_func_start sub_8028C30 -sub_8028C30: @ 8028C30 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - movs r3, 0 - ldr r7, =gSprites - ldr r6, =gUnknown_02022CE4 - movs r1, 0x1 - ands r0, r1 - lsls r4, r0, 2 - movs r5, 0x5 - negs r5, r5 -_08028C46: - lsls r0, r3, 2 - adds r0, r6 - ldr r0, [r0] - ldrh r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r7 - adds r1, 0x3E - ldrb r2, [r1] - adds r0, r5, 0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _08028C46 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028C30 - - thumb_func_start sub_8028C7C -sub_8028C7C: @ 8028C7C - lsls r0, 24 - lsls r1, 24 - ldr r3, =gSprites - ldr r2, =gUnknown_02022CB8 - lsrs r0, 22 - adds r0, r2 - ldr r0, [r0] - ldrh r2, [r0] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r3 - lsrs r1, 21 - strh r1, [r0, 0x22] - bx lr - .pool - thumb_func_end sub_8028C7C - - thumb_func_start sub_8028CA4 -sub_8028CA4: @ 8028CA4 - push {lr} - lsls r0, 16 - lsls r1, 24 - lsrs r1, 24 - ldr r2, =gUnknown_02022CB8 - lsrs r0, 14 - adds r0, r2 - ldr r0, [r0] - ldrh r2, [r0] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - ldr r2, =gSprites - adds r0, r2 - bl StartSpriteAnim - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028CA4 - - thumb_func_start sub_8028CD0 -sub_8028CD0: @ 8028CD0 - lsls r0, 24 - lsrs r0, 24 - ldr r1, =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r1 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, 0x32 - strh r1, [r2, 0x20] - movs r0, 0x32 - strh r0, [r2, 0x22] - bx lr - .pool - thumb_func_end sub_8028CD0 - - thumb_func_start sub_8028CF4 -sub_8028CF4: @ 8028CF4 - push {r4-r7,lr} - adds r4, r0, 0 - adds r0, 0x42 - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0x1 - beq _08028D36 - movs r3, 0 - ldr r7, =gUnknown_082FB354 - ldr r6, =gUnknown_02022CB0 - movs r5, 0 -_08028D0A: - lsls r0, r3, 2 - adds r2, r0, r6 - ldr r1, [r2] - ldrh r0, [r1, 0x2] - adds r0, 0x1 - strh r0, [r1, 0x2] - adds r1, r3, r7 - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r1] - cmp r0, r1 - bls _08028D2C - ldrh r0, [r4, 0x20] - subs r0, 0x1 - strh r0, [r4, 0x20] - ldr r0, [r2] - strh r5, [r0, 0x2] -_08028D2C: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x1 - bls _08028D0A -_08028D36: - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028CF4 - - thumb_func_start sub_8028D44 -sub_8028D44: @ 8028D44 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x28 - movs r4, 0x80 - lsls r4, 3 - adds r0, r4, 0 - bl AllocZeroed - adds r6, r0, 0 - ldr r0, =gUnknown_082FB360 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x20] - str r1, [sp, 0x24] - ldr r0, =gDodrioBerryPlatformGfx - adds r1, r6, 0 - bl LZ77UnCompWram - cmp r6, 0 - beq _08028DD2 - str r6, [sp, 0x18] - add r0, sp, 0x18 - movs r1, 0xA0 - lsls r1, 11 - orrs r1, r4 - str r1, [r0, 0x4] - mov r2, sp - ldr r1, =gUnknown_082FB368 - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - bl LoadSpriteSheet - add r0, sp, 0x20 - bl LoadSpritePalette - movs r5, 0 - ldr r7, =gUnknown_082FB356 - adds r0, r7, 0x2 - mov r9, r0 - ldr r1, =gUnknown_02022CB0 - mov r8, r1 -_08028D9E: - movs r0, 0x4 - bl AllocZeroed - lsls r2, r5, 2 - mov r3, r8 - adds r4, r2, r3 - str r0, [r4] - adds r0, r2, r7 - movs r3, 0 - ldrsh r1, [r0, r3] - add r2, r9 - movs r0, 0 - ldrsh r2, [r2, r0] - mov r0, sp - movs r3, 0x4 - bl CreateSprite - ldr r1, [r4] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1 - bls _08028D9E -_08028DD2: - adds r0, r6, 0 - bl Free - add sp, 0x28 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028D44 - - thumb_func_start sub_8028DFC -sub_8028DFC: @ 8028DFC - push {r4-r7,lr} - movs r3, 0 - ldr r0, =gUnknown_02022CB0 - mov r12, r0 - ldr r4, =gUnknown_082FB356 - adds r7, r4, 0x2 - ldr r6, =gSprites - movs r5, 0x1 -_08028E0C: - lsls r2, r3, 2 - mov r1, r12 - adds r0, r2, r1 - ldr r0, [r0] - ldrh r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - adds r0, r1, 0 - adds r0, 0x42 - strh r5, [r0] - adds r0, r2, r4 - ldrh r0, [r0] - strh r0, [r1, 0x20] - adds r2, r7 - ldrh r0, [r2] - strh r0, [r1, 0x22] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x1 - bls _08028E0C - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028DFC - - thumb_func_start sub_8028E4C -sub_8028E4C: @ 8028E4C - push {r4,r5,lr} - movs r2, 0 - ldr r5, =gUnknown_02022CB0 - ldr r4, =gSprites - movs r3, 0 -_08028E56: - lsls r0, r2, 2 - adds r0, r5 - ldr r0, [r0] - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x42 - strh r3, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x1 - bls _08028E56 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028E4C - - thumb_func_start sub_8028E84 -sub_8028E84: @ 8028E84 - push {r4-r6,lr} - movs r5, 0 - ldr r6, =gUnknown_02022CB0 -_08028E8A: - lsls r0, r5, 2 - adds r4, r0, r6 - ldr r0, [r4] - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - cmp r0, 0 - beq _08028EA4 - bl DestroySprite -_08028EA4: - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1 - bls _08028E8A - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028E84 - - thumb_func_start sub_8028EC8 -sub_8028EC8: @ 8028EC8 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - movs r3, 0 - ldr r7, =gSprites - ldr r6, =gUnknown_02022CB0 - movs r1, 0x1 - ands r0, r1 - lsls r4, r0, 2 - movs r5, 0x5 - negs r5, r5 -_08028EDE: - lsls r0, r3, 2 - adds r0, r6 - ldr r0, [r0] - ldrh r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r7 - adds r1, 0x3E - ldrb r2, [r1] - adds r0, r5, 0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x1 - bls _08028EDE - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8028EC8 - - thumb_func_start sub_8028F14 -sub_8028F14: @ 8028F14 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r1, 24 - movs r3, 0 - subs r0, r1, 0x1 - cmp r0, 0x4 - bhi _08028FC6 - lsls r0, 2 - ldr r1, =_08028F34 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_08028F34: - .4byte _08028FB4 - .4byte _08028F48 - .4byte _08028F52 - .4byte _08028F66 - .4byte _08028F8E -_08028F48: - cmp r2, 0 - beq _08028F7E - cmp r2, 0x1 - bne _08028FC6 - b _08028F82 -_08028F52: - cmp r2, 0x1 - beq _08028FB8 - cmp r2, 0x1 - bgt _08028F60 - cmp r2, 0 - beq _08028FB4 - b _08028FC6 -_08028F60: - cmp r2, 0x2 - bne _08028FC6 - b _08028FC4 -_08028F66: - cmp r2, 0x1 - beq _08028F82 - cmp r2, 0x1 - bgt _08028F74 - cmp r2, 0 - beq _08028F7E - b _08028FC6 -_08028F74: - cmp r2, 0x2 - beq _08028F86 - cmp r2, 0x3 - beq _08028F8A - b _08028FC6 -_08028F7E: - movs r3, 0xC - b _08028FC6 -_08028F82: - movs r3, 0x12 - b _08028FC6 -_08028F86: - movs r3, 0x18 - b _08028FC6 -_08028F8A: - movs r3, 0x6 - b _08028FC6 -_08028F8E: - cmp r2, 0x4 - bhi _08028FC6 - lsls r0, r2, 2 - ldr r1, =_08028FA0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_08028FA0: - .4byte _08028FB4 - .4byte _08028FB8 - .4byte _08028FBC - .4byte _08028FC0 - .4byte _08028FC4 -_08028FB4: - movs r3, 0xF - b _08028FC6 -_08028FB8: - movs r3, 0x15 - b _08028FC6 -_08028FBC: - movs r3, 0x1B - b _08028FC6 -_08028FC0: - movs r3, 0x3 - b _08028FC6 -_08028FC4: - movs r3, 0x9 -_08028FC6: - lsls r0, r3, 3 - pop {r1} - bx r1 - thumb_func_end sub_8028F14 - - thumb_func_start sub_8028FCC -sub_8028FCC: @ 8028FCC - push {r4,lr} - movs r4, 0 -_08028FD0: - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8028BF8 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8028C7C - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xA - bls _08028FD0 - movs r0, 0 - bl sub_80289E8 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8028FCC - - thumb_func_start sub_8028FF8 -sub_8028FF8: @ 8028FF8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl GetWindowFrameTilesPal - ldr r1, [r0] - movs r2, 0x90 - lsls r2, 1 - movs r0, 0 - movs r3, 0x1 - bl LoadBgTiles - adds r0, r4, 0 - bl GetWindowFrameTilesPal - ldr r0, [r0, 0x4] - movs r1, 0xA0 - movs r2, 0x20 - bl LoadPalette - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8028FF8 - - thumb_func_start sub_802902C -sub_802902C: @ 802902C - push {lr} - movs r0, 0 - movs r1, 0xA - movs r2, 0xB0 - bl LoadUserWindowBorderGfx_ - pop {r0} - bx r0 - thumb_func_end sub_802902C - - thumb_func_start sub_802903C -sub_802903C: @ 802903C - ldr r3, =gUnknown_02022CF8 - ldr r0, [r3] - movs r2, 0xC0 - lsls r2, 6 - adds r1, r0, r2 - movs r2, 0 - str r2, [r1] - ldr r1, =0x00003014 - adds r0, r1 - strb r2, [r0] - ldr r0, [r3] - adds r1, 0x4 - adds r0, r1 - strb r2, [r0] - ldr r0, [r3] - adds r1, 0x8 - adds r0, r1 - strb r2, [r0] - ldr r0, [r3] - adds r1, 0x4 - adds r0, r1 - strb r2, [r0] - bx lr - .pool - thumb_func_end sub_802903C - - thumb_func_start sub_8029074 -sub_8029074: @ 8029074 - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - movs r6, 0xA - ldrb r2, [r4, 0x1] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldrb r3, [r4, 0x2] - subs r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - movs r5, 0x1 - str r5, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x1 - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x1] - ldrb r3, [r4, 0x2] - subs r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - ldrb r0, [r4, 0x3] - str r0, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x3] - ldrb r0, [r4, 0x1] - adds r2, r0 - lsls r2, 24 - lsrs r2, 24 - ldrb r3, [r4, 0x2] - subs r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - str r5, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x3 - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x1] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldrb r3, [r4, 0x2] - str r5, [sp] - ldrb r0, [r4, 0x4] - str r0, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x4 - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x3] - ldrb r0, [r4, 0x1] - adds r2, r0 - lsls r2, 24 - lsrs r2, 24 - ldrb r3, [r4, 0x2] - str r5, [sp] - ldrb r0, [r4, 0x4] - str r0, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x6 - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x1] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldrb r3, [r4, 0x4] - ldrb r0, [r4, 0x2] - adds r3, r0 - lsls r3, 24 - lsrs r3, 24 - str r5, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x7 - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x1] - ldrb r3, [r4, 0x4] - ldrb r0, [r4, 0x2] - adds r3, r0 - lsls r3, 24 - lsrs r3, 24 - ldrb r0, [r4, 0x3] - str r0, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x8 - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x3] - ldrb r0, [r4, 0x1] - adds r2, r0 - lsls r2, 24 - lsrs r2, 24 - ldrb r3, [r4, 0x4] - ldrb r4, [r4, 0x2] - adds r3, r4 - lsls r3, 24 - lsrs r3, 24 - str r5, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x9 - bl FillBgTilemapBufferRect - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8029074 - - thumb_func_start sub_8029174 -sub_8029174: @ 8029174 - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - movs r6, 0xB - ldrb r2, [r4, 0x1] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldrb r3, [r4, 0x2] - subs r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - movs r5, 0x1 - str r5, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0xA - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x1] - ldrb r3, [r4, 0x2] - subs r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - ldrb r0, [r4, 0x3] - str r0, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0xB - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x3] - ldrb r0, [r4, 0x1] - adds r2, r0 - lsls r2, 24 - lsrs r2, 24 - ldrb r3, [r4, 0x2] - subs r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - str r5, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0xC - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x1] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldrb r3, [r4, 0x2] - str r5, [sp] - ldrb r0, [r4, 0x4] - str r0, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0xD - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x3] - ldrb r0, [r4, 0x1] - adds r2, r0 - lsls r2, 24 - lsrs r2, 24 - ldrb r3, [r4, 0x2] - str r5, [sp] - ldrb r0, [r4, 0x4] - str r0, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0xF - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x1] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldrb r3, [r4, 0x4] - ldrb r0, [r4, 0x2] - adds r3, r0 - lsls r3, 24 - lsrs r3, 24 - str r5, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x10 - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x1] - ldrb r3, [r4, 0x4] - ldrb r0, [r4, 0x2] - adds r3, r0 - lsls r3, 24 - lsrs r3, 24 - ldrb r0, [r4, 0x3] - str r0, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x11 - bl FillBgTilemapBufferRect - ldrb r2, [r4, 0x3] - ldrb r0, [r4, 0x1] - adds r2, r0 - lsls r2, 24 - lsrs r2, 24 - ldrb r3, [r4, 0x4] - ldrb r4, [r4, 0x2] - adds r3, r4 - lsls r3, 24 - lsrs r3, 24 - str r5, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x12 - bl FillBgTilemapBufferRect - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8029174 - - thumb_func_start sub_8029274 -sub_8029274: @ 8029274 - push {r4,lr} - ldr r4, =gUnknown_02022CF8 - str r0, [r4] - movs r2, 0xC0 - lsls r2, 6 - adds r1, r0, r2 - movs r2, 0 - str r2, [r1] - ldr r3, =0x00003014 - adds r1, r0, r3 - strb r2, [r1] - ldr r1, =0x00003018 - adds r0, r1 - strb r2, [r0] - ldr r0, [r4] - adds r3, 0xC - adds r0, r3 - strb r2, [r0] - ldr r0, [r4] - adds r1, 0xC - adds r0, r1 - strb r2, [r0] - ldr r0, =sub_8029314 - movs r1, 0x3 - bl CreateTask - ldr r1, [r4] - ldr r2, =0x00003004 - adds r1, r2 - strb r0, [r1] - ldr r0, =sub_8029338 - bl sub_802A72C - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8029274 - - thumb_func_start sub_80292D4 -sub_80292D4: @ 80292D4 - push {lr} - bl FreeAllWindowBuffers - pop {r0} - bx r0 - thumb_func_end sub_80292D4 - - thumb_func_start sub_80292E0 -sub_80292E0: @ 80292E0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r4, 0 - ldr r5, =gUnknown_082FB40C - adds r7, r5, 0x4 -_080292EC: - lsls r1, r4, 3 - adds r0, r1, r5 - ldrb r0, [r0] - cmp r0, r6 - bne _080292FE - adds r0, r1, r7 - ldr r0, [r0] - bl sub_802A72C -_080292FE: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x9 - bls _080292EC - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80292E0 - - thumb_func_start sub_8029314 -sub_8029314: @ 8029314 - push {lr} - ldr r0, =gUnknown_02022CF8 - ldr r0, [r0] - movs r1, 0xC0 - lsls r1, 6 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - bne _0802932E - bl sub_802A75C - bl _call_via_r0 -_0802932E: - pop {r0} - bx r0 - .pool - thumb_func_end sub_8029314 - - thumb_func_start sub_8029338 -sub_8029338: @ 8029338 - push {lr} - ldr r0, =gUnknown_02022CF8 - ldr r1, [r0] - ldr r2, =0x00003014 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x4 - bhi _08029430 - lsls r0, 2 - ldr r1, =_08029360 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_08029360: - .4byte _08029374 - .4byte _0802937A - .4byte _08029394 - .4byte _080293D8 - .4byte _08029404 -_08029374: - bl sub_802A7A8 - b _08029414 -_0802937A: - bl sub_802A8E8 - cmp r0, 0x1 - bne _0802943A - ldr r0, =gUnknown_02022CF8 - ldr r1, [r0] - ldr r2, =0x00003014 - adds r1, r2 - b _0802941C - .pool -_08029394: - ldr r1, =gDodrioBerryBgTilemap1 - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - ldr r1, =gDodrioBerryBgTilemap2Left - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - ldr r1, =gDodrioBerryBgTilemap2Right - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x3 - bl CopyBgTilemapBufferToVram - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - b _08029414 - .pool -_080293D8: - movs r0, 0 - bl ShowBg - movs r0, 0x3 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - ldr r0, =gUnknown_02022CF8 - ldr r1, [r0] - ldr r2, =0x00003014 - adds r1, r2 - b _0802941C - .pool -_08029404: - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x14] - lsrs r0, 3 - bl sub_8028FF8 - bl sub_802902C -_08029414: - ldr r0, =gUnknown_02022CF8 - ldr r1, [r0] - ldr r0, =0x00003014 - adds r1, r0 -_0802941C: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0802943A - .pool -_08029430: - movs r2, 0xC0 - lsls r2, 6 - adds r1, r2 - movs r0, 0x1 - str r0, [r1] -_0802943A: - pop {r0} - bx r0 - thumb_func_end sub_8029338 - - thumb_func_start sub_8029440 -sub_8029440: @ 8029440 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r2, =0x00003014 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0 - beq _08029488 - cmp r0, 0x1 - bne _08029460 - b _080295EC -_08029460: - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xB4 - bhi _0802946E - b _0802968E -_0802946E: - bl sub_8027650 - lsls r0, 24 - lsrs r7, r0, 24 - movs r6, 0 - cmp r6, r7 - bcc _0802947E - b _08029666 -_0802947E: - b _08029640 - .pool -_08029488: - bl sub_8027650 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r1, =gUnknown_082FB3C8 - subs r0, r7, 0x1 - lsls r0, 2 - adds r0, r1 - ldr r5, [r0] - ldr r2, =0xffffff00 - ldr r0, [sp, 0xC] - ands r0, r2 - ldr r1, =0x00ffffff - ands r0, r1 - movs r1, 0xE0 - lsls r1, 19 - orrs r0, r1 - str r0, [sp, 0xC] - ldr r0, [sp, 0x10] - ands r0, r2 - movs r1, 0x2 - orrs r0, r1 - ldr r1, =0xffff00ff - ands r0, r1 - movs r1, 0xD0 - lsls r1, 4 - orrs r0, r1 - ldr r1, =0x0000ffff - ands r0, r1 - movs r1, 0x98 - lsls r1, 13 - orrs r0, r1 - str r0, [sp, 0x10] - movs r6, 0 - cmp r6, r7 - bcs _080295B8 - mov r3, sp - adds r3, 0xC - str r3, [sp, 0x18] - mov r10, r4 - ldr r0, =0x00003008 - mov r9, r0 -_080294DC: - movs r1, 0 - mov r8, r1 - adds r0, r6, 0 - bl sub_8027A48 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - bl sub_8027660 - adds r1, r0, 0 - movs r0, 0x1 - movs r2, 0x1 - negs r2, r2 - bl GetStringWidth - movs r1, 0x38 - subs r1, r0 - lsrs r1, 1 - str r1, [sp, 0x14] - ldrb r0, [r5] - lsls r0, 8 - ldr r2, =0xffff00ff - ldr r1, [sp, 0xC] - ands r1, r2 - orrs r1, r0 - str r1, [sp, 0xC] - ldrb r2, [r5, 0x1] - lsls r2, 16 - ldr r0, =0xff00ffff - ands r0, r1 - orrs r0, r2 - str r0, [sp, 0xC] - add r0, sp, 0xC - bl AddWindow - mov r2, r10 - ldr r1, [r2] - add r1, r9 - adds r1, r6 - strb r0, [r1] - ldr r0, [r2] - add r0, r9 - adds r0, r6 - ldrb r0, [r0] - bl ClearWindowTilemap - mov r3, r10 - ldr r0, [r3] - add r0, r9 - adds r0, r6 - ldrb r0, [r0] - movs r1, 0x11 - bl FillWindowPixelBuffer - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bne _0802955A - movs r0, 0x2 - mov r8, r0 -_0802955A: - adds r0, r4, 0 - bl sub_8027660 - adds r4, r0, 0 - mov r1, r10 - ldr r0, [r1] - add r0, r9 - adds r0, r6 - ldrb r0, [r0] - ldr r3, [sp, 0x14] - lsls r2, r3, 24 - lsrs r2, 24 - mov r3, r8 - lsls r1, r3, 1 - add r1, r8 - ldr r3, =gUnknown_082FB380 - adds r1, r3 - str r1, [sp] - movs r1, 0x1 - negs r1, r1 - str r1, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0x1 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - mov r2, r10 - ldr r0, [r2] - add r0, r9 - adds r0, r6 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - ldr r3, [sp, 0x18] - ldrh r0, [r3, 0x6] - adds r0, 0xE - strh r0, [r3, 0x6] - add r0, sp, 0xC - bl sub_8029174 - adds r5, 0x4 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, r7 - bcc _080294DC -_080295B8: - ldr r0, =gUnknown_02022CF8 - ldr r1, [r0] - ldr r0, =0x00003014 - adds r1, r0 - b _0802962A - .pool -_080295EC: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802968E - bl sub_8027650 - lsls r0, 24 - lsrs r7, r0, 24 - movs r6, 0 - cmp r6, r7 - bcs _0802961C -_08029604: - ldr r0, [r4] - ldr r1, =0x00003008 - adds r0, r1 - adds r0, r6 - ldrb r0, [r0] - bl PutWindowTilemap - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, r7 - bcc _08029604 -_0802961C: - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r0, =gUnknown_02022CF8 - ldr r1, [r0] - ldr r2, =0x00003014 - adds r1, r2 -_0802962A: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0802968E - .pool -_08029640: - ldr r5, =gUnknown_02022CF8 - ldr r0, [r5] - ldr r4, =0x00003008 - adds r0, r4 - adds r0, r6 - ldrb r0, [r0] - bl ClearWindowTilemap - ldr r0, [r5] - adds r0, r4 - adds r0, r6 - ldrb r0, [r0] - bl RemoveWindow - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, r7 - bcc _08029640 -_08029666: - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r0, =gUnknown_02022CF8 - ldr r0, [r0] - movs r3, 0xC0 - lsls r3, 6 - adds r0, r3 - movs r1, 0x1 - str r1, [r0] -_0802968E: - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8029440 - - thumb_func_start sub_80296A8 -sub_80296A8: @ 80296A8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x6C - lsls r0, 24 - movs r1, 0 - mov r8, r1 - movs r6, 0 - lsrs r7, r0, 24 - add r4, sp, 0x2C - ldr r1, =gUnknown_082FB45C - adds r0, r4, 0 - movs r2, 0x5 - bl memcpy - movs r5, 0 - cmp r5, r7 - bcs _080296F8 - add r4, sp, 0x34 -_080296D2: - mov r0, sp - adds r0, r5 - adds r0, 0x2C - strb r5, [r0] - add r0, sp, 0x5C - adds r1, r5, 0 - bl sub_802793C - lsls r2, r5, 3 - adds r2, r4, r2 - ldr r0, [sp, 0x5C] - ldr r1, [sp, 0x60] - str r0, [r2] - str r1, [r2, 0x4] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, r7 - bcc _080296D2 -_080296F8: - bl sub_8027748 - cmp r0, 0 - beq _0802972E -_08029700: - movs r5, 0 - cmp r5, r7 - bcs _08029728 - add r2, sp, 0x34 - add r1, sp, 0x2C -_0802970A: - lsls r0, r5, 3 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, r8 - bne _0802971E - adds r0, r1, r6 - strb r5, [r0] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_0802971E: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, r7 - bcc _0802970A -_08029728: - mov r8, r6 - cmp r6, r7 - bcc _08029700 -_0802972E: - movs r5, 0 - ldr r4, =gText_SpacePoints - cmp r5, r7 - bcs _08029754 - add r1, sp, 0x34 - add r6, sp, 0x38 - subs r3, r7, 0x1 -_0802973C: - lsls r2, r5, 3 - adds r0, r6, r2 - ldr r0, [r0] - cmp r0, 0 - bne _0802974A - adds r0, r1, r2 - strb r3, [r0] -_0802974A: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, r7 - bcc _0802973C -_08029754: - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0 - bl GetStringWidth - movs r1, 0xD8 - subs r1, r0 - str r1, [sp, 0x64] - movs r5, 0 - cmp r5, r7 - bcs _08029860 - mov r2, sp - adds r2, 0x34 - str r2, [sp, 0x68] - ldr r3, =0x00003009 - mov r10, r3 -_08029774: - movs r0, 0 - mov r8, r0 - mov r0, sp - adds r0, r5 - adds r0, 0x2C - ldrb r0, [r0] - adds r4, r0, 0 - lsls r1, r4, 3 - add r0, sp, 0x38 - adds r0, r1 - ldr r0, [r0] - mov r9, r0 - ldr r2, =gUnknown_02022CF8 - ldr r0, [r2] - add r0, r10 - ldrb r0, [r0] - ldr r2, =gUnknown_082FB3DC - ldr r3, [sp, 0x68] - adds r1, r3, r1 - ldrb r1, [r1] - lsls r1, 2 - adds r1, r2 - ldr r2, [r1] - ldr r3, =gUnknown_082FB402 - lsls r1, r5, 1 - adds r1, r3 - ldrb r6, [r1] - str r6, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - mov r3, r8 - str r3, [sp, 0x8] - movs r1, 0x1 - movs r3, 0x8 - bl AddTextPrinterParameterized - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bne _080297CC - movs r0, 0x2 - mov r8, r0 -_080297CC: - adds r0, r4, 0 - bl sub_8027660 - adds r3, r0, 0 - ldr r1, =gUnknown_02022CF8 - ldr r0, [r1] - add r0, r10 - ldrb r0, [r0] - mov r2, r8 - lsls r1, r2, 1 - add r1, r8 - ldr r2, =gUnknown_082FB380 - adds r1, r2 - str r1, [sp] - movs r1, 0x1 - negs r1, r1 - str r1, [sp, 0x4] - str r3, [sp, 0x8] - movs r1, 0x1 - movs r2, 0x1C - adds r3, r6, 0 - bl AddTextPrinterParameterized3 - add r0, sp, 0xC - mov r1, r9 - movs r2, 0 - movs r3, 0x7 - bl ConvertIntToDecimalStringN - movs r0, 0x1 - add r1, sp, 0xC - movs r2, 0x1 - negs r2, r2 - bl GetStringWidth - adds r3, r0, 0 - ldr r2, =gUnknown_02022CF8 - ldr r0, [r2] - add r0, r10 - ldrb r0, [r0] - ldr r1, [sp, 0x64] - subs r3, r1, r3 - lsls r3, 24 - lsrs r3, 24 - str r6, [sp] - movs r2, 0xFF - str r2, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - add r2, sp, 0xC - bl AddTextPrinterParameterized - ldr r2, =gUnknown_02022CF8 - ldr r0, [r2] - add r0, r10 - ldrb r0, [r0] - ldr r1, [sp, 0x64] - lsls r3, r1, 24 - str r6, [sp] - movs r2, 0xFF - str r2, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - ldr r2, =gText_SpacePoints - lsrs r3, 24 - bl AddTextPrinterParameterized - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, r7 - bcc _08029774 -_08029860: - add sp, 0x6C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80296A8 - - thumb_func_start sub_802988C -sub_802988C: @ 802988C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - bl sub_8027650 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0xC] - ldr r6, =gUnknown_02022CF8 - ldr r1, [r6] - ldr r2, =0x00003014 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0xB - bls _080298B2 - b _08029FA8 -_080298B2: - lsls r0, 2 - ldr r1, =_080298C8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_080298C8: - .4byte _080298F8 - .4byte _08029914 - .4byte _0802996C - .4byte _08029B6C - .4byte _08029BB8 - .4byte _08029BFC - .4byte _08029C60 - .4byte _08029C9C - .4byte _08029CE0 - .4byte _08029DA0 - .4byte _08029F08 - .4byte _08029F5C -_080298F8: - bl sub_802784C - ldr r0, =gUnknown_02022CF8 - ldr r1, [r0] - ldr r0, =0x0000301c - adds r2, r1, r0 - movs r0, 0 - strh r0, [r2] - b _08029F8A - .pool -_08029914: - ldr r6, =gUnknown_082F7BBC - adds r0, r6, 0 - bl AddWindow - ldr r4, =gUnknown_02022CF8 - ldr r1, [r4] - ldr r2, =0x00003008 - mov r8, r2 - add r1, r8 - strb r0, [r1] - movs r0, 0x8 - adds r0, r6 - mov r9, r0 - bl AddWindow - ldr r1, [r4] - ldr r5, =0x00003009 - adds r1, r5 - strb r0, [r1] - ldr r0, [r4] - add r0, r8 - ldrb r0, [r0] - bl ClearWindowTilemap - ldr r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl ClearWindowTilemap - adds r0, r6, 0 - bl sub_8029174 - mov r0, r9 - bl sub_8029174 - b _08029F88 - .pool -_0802996C: - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r5, =0x00003008 - adds r0, r5 - ldrb r0, [r0] - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, [r4] - ldr r1, =0x00003009 - mov r9, r1 - add r0, r9 - ldrb r0, [r0] - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r2, =gText_BerryPickingResults - mov r8, r2 - movs r2, 0x1 - negs r2, r2 - movs r0, 0x1 - mov r1, r8 - bl GetStringWidth - adds r1, r0, 0 - movs r0, 0xE0 - subs r0, r1 - lsrs r3, r0, 1 - ldr r0, [r4] - adds r0, r5 - ldrb r0, [r0] - lsls r3, 24 - lsrs r3, 24 - movs r1, 0x1 - str r1, [sp] - movs r6, 0xFF - str r6, [sp, 0x4] - movs r5, 0 - str r5, [sp, 0x8] - mov r2, r8 - bl AddTextPrinterParameterized - ldr r0, [r4] - add r0, r9 - ldrb r0, [r0] - ldr r2, =gText_10P30P50P50P - movs r1, 0x11 - str r1, [sp] - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r1, 0x1 - movs r3, 0x44 - bl AddTextPrinterParameterized - mov r9, r5 - ldr r0, [sp, 0xC] - cmp r9, r0 - bcc _080299E2 - b _08029B2A -_080299E2: - movs r4, 0 - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 - cmp r9, r0 - bne _080299F2 - movs r4, 0x2 -_080299F2: - mov r0, r9 - bl sub_8027660 - adds r6, r0, 0 - ldr r0, =gUnknown_02022CF8 - ldr r0, [r0] - ldr r1, =0x00003009 - adds r0, r1 - ldrb r0, [r0] - mov r2, r9 - lsls r5, r2, 1 - ldr r2, =gUnknown_082FB3F8 - adds r1, r5, r2 - ldrb r3, [r1] - lsls r1, r4, 1 - adds r1, r4 - ldr r2, =gUnknown_082FB380 - adds r1, r2 - str r1, [sp] - movs r4, 0x1 - negs r4, r4 - str r4, [sp, 0x4] - str r6, [sp, 0x8] - movs r1, 0x1 - movs r2, 0 - bl AddTextPrinterParameterized3 - movs r7, 0 - mov r8, r5 - mov r0, r9 - adds r0, 0x1 - str r0, [sp, 0x10] - ldr r1, =gStringVar4 - mov r10, r1 -_08029A36: - mov r0, r9 - adds r1, r7, 0 - bl sub_80276A0 - lsls r0, 16 - lsrs r0, 16 - ldr r1, =0x0000270f - bl sub_8027A38 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r7, 0 - bl sub_802778C - ldr r1, =0x0000270f - bl sub_8027A38 - lsls r0, 16 - lsrs r6, r0, 16 - mov r0, r10 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x4 - bl ConvertIntToDecimalStringN - movs r0, 0x1 - mov r1, r10 - movs r2, 0x1 - negs r2, r2 - bl GetStringWidth - adds r5, r0, 0 - cmp r6, r4 - bne _08029AE0 - cmp r6, 0 - beq _08029AE0 - ldr r0, =gUnknown_02022CF8 - ldr r0, [r0] - ldr r2, =0x00003009 - adds r0, r2 - ldrb r0, [r0] - lsls r1, r7, 1 - ldr r2, =gUnknown_082FB3F0 - adds r1, r2 - ldrb r2, [r1] - subs r2, r5 - lsls r2, 24 - lsrs r2, 24 - ldr r1, =gUnknown_082FB3F8 - add r1, r8 - ldrb r3, [r1] - ldr r1, =gUnknown_082FB383 - str r1, [sp] - movs r1, 0x1 - negs r1, r1 - str r1, [sp, 0x4] - mov r1, r10 - str r1, [sp, 0x8] - movs r1, 0x1 - bl AddTextPrinterParameterized3 - b _08029B10 - .pool -_08029AE0: - ldr r0, =gUnknown_02022CF8 - ldr r0, [r0] - ldr r2, =0x00003009 - adds r0, r2 - ldrb r0, [r0] - lsls r1, r7, 1 - ldr r2, =gUnknown_082FB3F0 - adds r1, r2 - ldrb r3, [r1] - subs r3, r5 - lsls r3, 24 - lsrs r3, 24 - ldr r1, =gUnknown_082FB3F8 - add r1, r8 - ldrb r1, [r1] - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - ldr r2, =gStringVar4 - bl AddTextPrinterParameterized -_08029B10: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x3 - bls _08029A36 - ldr r1, [sp, 0x10] - lsls r0, r1, 24 - lsrs r0, 24 - mov r9, r0 - ldr r2, [sp, 0xC] - cmp r9, r2 - bcs _08029B2A - b _080299E2 -_08029B2A: - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r1, =0x00003008 - adds r0, r1 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - ldr r0, [r4] - ldr r2, =0x00003009 - adds r0, r2 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - ldr r1, [r4] - ldr r0, =0x00003014 - adds r1, r0 - b _08029F8E - .pool -_08029B6C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08029B90 - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r1, =0x00003008 - adds r0, r1 - ldrb r0, [r0] - bl PutWindowTilemap - ldr r0, [r4] - ldr r2, =0x00003009 - adds r0, r2 - ldrb r0, [r0] - bl PutWindowTilemap -_08029B90: - movs r0, 0 - bl CopyBgTilemapBufferToVram - movs r0, 0 - bl sub_8028C30 - ldr r0, =gUnknown_02022CF8 - ldr r1, [r0] - ldr r0, =0x00003014 - adds r1, r0 - b _08029F8E - .pool -_08029BB8: - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r1, =0x0000301c - adds r2, r0, r1 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1D - bhi _08029BD0 - b _08029FF8 -_08029BD0: - ldr r0, =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08029BDE - b _08029FF8 -_08029BDE: - movs r0, 0 - strh r0, [r2] - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - bl sub_8028C30 - b _08029F88 - .pool -_08029BFC: - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r5, =0x00003008 - adds r0, r5 - ldrb r0, [r0] - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, [r4] - ldr r1, =0x00003009 - adds r0, r1 - ldrb r0, [r0] - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r6, =gText_AnnouncingRankings - movs r2, 0x1 - negs r2, r2 - movs r0, 0x1 - adds r1, r6, 0 - bl GetStringWidth - adds r1, r0, 0 - movs r0, 0xE0 - subs r0, r1 - lsrs r3, r0, 1 - ldr r0, [r4] - adds r0, r5 - ldrb r0, [r0] - lsls r3, 24 - lsrs r3, 24 - movs r1, 0x1 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - adds r2, r6, 0 - bl AddTextPrinterParameterized - b _08029F88 - .pool -_08029C60: - ldr r0, [sp, 0xC] - bl sub_80296A8 - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r1, =0x00003008 - adds r0, r1 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - ldr r0, [r4] - ldr r2, =0x00003009 - adds r0, r2 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - ldr r1, [r4] - ldr r0, =0x00003014 - adds r1, r0 - b _08029F8E - .pool -_08029C9C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08029CC0 - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r1, =0x00003008 - adds r0, r1 - ldrb r0, [r0] - bl PutWindowTilemap - ldr r0, [r4] - ldr r2, =0x00003009 - adds r0, r2 - ldrb r0, [r0] - bl PutWindowTilemap -_08029CC0: - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r0, =gUnknown_02022CF8 - ldr r1, [r0] - ldr r0, =0x00003014 - adds r1, r0 - b _08029F8E - .pool -_08029CE0: - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r1, =0x0000301c - adds r2, r0, r1 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1D - bhi _08029CF8 - b _08029FF8 -_08029CF8: - ldr r0, =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08029D06 - b _08029FF8 -_08029D06: - movs r0, 0 - strh r0, [r2] - movs r0, 0x5 - bl PlaySE - bl sub_8027748 - ldr r1, =0x00000bb7 - cmp r0, r1 - bhi _08029D3C - ldr r0, [r4] - ldr r2, =0x00003014 - adds r0, r2 - movs r1, 0x7F - strb r1, [r0] - b _08029D4C - .pool -_08029D3C: - bl StopMapMusic - ldr r1, [r4] - ldr r0, =0x00003014 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08029D4C: - movs r0, 0x1E - str r0, [sp] - movs r0, 0xF - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x5 - bl FillBgTilemapBufferRect_Palette0 - ldr r5, =gUnknown_02022CF8 - ldr r0, [r5] - ldr r4, =0x00003009 - adds r0, r4 - ldrb r0, [r0] - bl RemoveWindow - ldr r6, =gUnknown_082F7BCC - adds r0, r6, 0 - bl AddWindow - ldr r1, [r5] - adds r1, r4 - strb r0, [r1] - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - bl ClearWindowTilemap - adds r0, r6, 0 - bl sub_8029174 - b _08029FF8 - .pool -_08029DA0: - ldr r0, =0x0000016f - bl PlayNewMapMusic - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r6, =0x00003008 - adds r0, r6 - ldrb r0, [r0] - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, [r4] - ldr r1, =0x00003009 - mov r10, r1 - add r0, r10 - ldrb r0, [r0] - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r5, =gText_AnnouncingPrizes - movs r2, 0x1 - negs r2, r2 - movs r0, 0x1 - adds r1, r5, 0 - bl GetStringWidth - adds r1, r0, 0 - movs r0, 0xE0 - subs r0, r1 - lsrs r3, r0, 1 - ldr r0, [r4] - adds r0, r6 - ldrb r0, [r0] - lsls r3, 24 - lsrs r3, 24 - movs r2, 0x1 - mov r9, r2 - str r2, [sp] - movs r1, 0xFF - mov r8, r1 - str r1, [sp, 0x4] - movs r6, 0 - str r6, [sp, 0x8] - movs r1, 0x1 - adds r2, r5, 0 - bl AddTextPrinterParameterized - bl DynamicPlaceholderTextUtil_Reset - bl sub_802762C - lsls r0, 16 - lsrs r0, 16 - ldr r5, =gStringVar1 - adds r1, r5, 0 - bl CopyItemName - movs r0, 0 - adds r1, r5, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - ldr r7, =gStringVar4 - ldr r1, =gText_FirstPlacePrize - adds r0, r7, 0 - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - ldr r0, [r4] - add r0, r10 - ldrb r0, [r0] - mov r2, r9 - str r2, [sp] - mov r1, r8 - str r1, [sp, 0x4] - str r6, [sp, 0x8] - movs r1, 0x1 - adds r2, r7, 0 - movs r3, 0 - bl AddTextPrinterParameterized - bl sub_80279C8 - lsls r0, 24 - lsrs r4, r0, 24 - adds r6, r4, 0 - cmp r4, 0 - beq _08029EC8 - cmp r4, 0x3 - beq _08029EC8 - bl DynamicPlaceholderTextUtil_Reset - bl sub_802762C - lsls r0, 16 - lsrs r0, 16 - adds r1, r5, 0 - bl CopyItemName - movs r0, 0 - adds r1, r5, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - cmp r4, 0x2 - bne _08029E9C - ldr r1, =gText_CantHoldAnyMore - adds r0, r7, 0 - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - b _08029EA8 - .pool -_08029E9C: - cmp r6, 0x1 - bne _08029EA8 - ldr r1, =gText_FilledStorageSpace - adds r0, r7, 0 - bl DynamicPlaceholderTextUtil_ExpandPlaceholders -_08029EA8: - ldr r0, =gUnknown_02022CF8 - ldr r0, [r0] - ldr r2, =0x00003009 - adds r0, r2 - ldrb r0, [r0] - ldr r2, =gStringVar4 - movs r1, 0x29 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized -_08029EC8: - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r1, =0x00003008 - adds r0, r1 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - ldr r0, [r4] - ldr r2, =0x00003009 - adds r0, r2 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - ldr r1, [r4] - ldr r0, =0x00003014 - adds r1, r0 - b _08029F8E - .pool -_08029F08: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08029F2C - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r1, =0x00003008 - adds r0, r1 - ldrb r0, [r0] - bl PutWindowTilemap - ldr r0, [r4] - ldr r2, =0x00003009 - adds r0, r2 - ldrb r0, [r0] - bl PutWindowTilemap -_08029F2C: - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r0, =0x0000020b - movs r1, 0x14 - movs r2, 0xA - bl FadeOutAndFadeInNewMapMusic - ldr r0, =gUnknown_02022CF8 - ldr r1, [r0] - ldr r0, =0x00003014 - adds r1, r0 - b _08029F8E - .pool -_08029F5C: - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r1, =0x0000301c - adds r2, r0, r1 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1D - bls _08029FF8 - ldr r0, =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08029FF8 - movs r0, 0 - strh r0, [r2] - movs r0, 0x5 - bl PlaySE -_08029F88: - ldr r1, [r4] -_08029F8A: - ldr r2, =0x00003014 - adds r1, r2 -_08029F8E: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08029FF8 - .pool -_08029FA8: - ldr r5, =0x00003008 - adds r0, r1, r5 - ldrb r0, [r0] - bl ClearWindowTilemap - ldr r0, [r6] - ldr r4, =0x00003009 - adds r0, r4 - ldrb r0, [r0] - bl ClearWindowTilemap - ldr r0, [r6] - adds r0, r5 - ldrb r0, [r0] - bl RemoveWindow - ldr r0, [r6] - adds r0, r4 - ldrb r0, [r0] - bl RemoveWindow - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r0, [r6] - movs r1, 0xC0 - lsls r1, 6 - adds r0, r1 - movs r1, 0x1 - str r1, [r0] -_08029FF8: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802988C - - thumb_func_start sub_802A010 -sub_802A010: @ 802A010 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - ldr r1, =gUnknown_02022CF8 - ldr r2, [r1] - ldr r3, =0x00003014 - adds r0, r2, r3 - ldrb r6, [r0] - adds r7, r1, 0 - cmp r6, 0x1 - beq _0802A0CC - cmp r6, 0x1 - bgt _0802A040 - cmp r6, 0 - beq _0802A04E - b _0802A2FC - .pool -_0802A040: - cmp r6, 0x2 - bne _0802A046 - b _0802A194 -_0802A046: - cmp r6, 0x3 - bne _0802A04C - b _0802A1D0 -_0802A04C: - b _0802A2FC -_0802A04E: - ldr r0, =gUnknown_082F7BD4 - mov r9, r0 - bl AddWindow - ldr r1, [r7] - ldr r4, =0x00003008 - adds r1, r4 - strb r0, [r1] - movs r1, 0x8 - add r1, r9 - mov r8, r1 - mov r0, r8 - bl AddWindow - ldr r1, [r7] - ldr r2, =0x00003009 - adds r1, r2 - strb r0, [r1] - ldr r0, [r7] - adds r0, r4 - ldrb r0, [r0] - bl ClearWindowTilemap - ldr r0, [r7] - ldr r3, =0x00003009 - adds r0, r3 - ldrb r0, [r0] - bl ClearWindowTilemap - mov r0, r9 - bl sub_8029174 - mov r0, r8 - bl sub_8029074 - ldr r1, [r7] - ldr r0, =0x00003014 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, [r7] - ldr r1, =0x00003020 - adds r0, r1 - strb r6, [r0] - ldr r0, [r7] - ldr r2, =0x00003024 - adds r0, r2 - strb r6, [r0] - b _0802A35E - .pool -_0802A0CC: - ldr r3, =0x00003008 - mov r8, r3 - adds r0, r2, r3 - ldrb r0, [r0] - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, [r7] - ldr r1, =0x00003009 - mov r10, r1 - add r0, r10 - ldrb r0, [r0] - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, [r7] - add r0, r8 - ldrb r0, [r0] - ldr r2, =gText_WantToPlayAgain - movs r1, 0x5 - str r1, [sp] - movs r3, 0xFF - mov r9, r3 - str r3, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r0, [r7] - add r0, r10 - ldrb r0, [r0] - ldr r2, =gText_Yes - str r6, [sp] - mov r3, r9 - str r3, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0x8 - bl AddTextPrinterParameterized - ldr r0, [r7] - add r0, r10 - ldrb r0, [r0] - ldr r2, =gText_No - movs r1, 0x11 - str r1, [sp] - mov r3, r9 - str r3, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0x8 - bl AddTextPrinterParameterized - ldr r0, [r7] - add r0, r10 - ldrb r0, [r0] - ldr r2, =gText_SelectorArrow2 - str r6, [sp] - mov r3, r9 - str r3, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r0, [r7] - add r0, r8 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - ldr r0, [r7] - add r0, r10 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - ldr r1, [r7] - ldr r2, =0x00003014 - adds r1, r2 - b _0802A2EA - .pool -_0802A194: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802A1B6 - ldr r0, [r7] - ldr r3, =0x00003008 - adds r0, r3 - ldrb r0, [r0] - bl PutWindowTilemap - ldr r0, [r7] - ldr r1, =0x00003009 - adds r0, r1 - ldrb r0, [r0] - bl PutWindowTilemap -_0802A1B6: - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r1, [r7] - ldr r2, =0x00003014 - adds r1, r2 - b _0802A2EA - .pool -_0802A1D0: - ldr r3, =0x00003020 - adds r0, r2, r3 - ldrb r5, [r0] - cmp r5, 0 - bne _0802A1DC - movs r5, 0x1 -_0802A1DC: - ldr r0, =0x00003009 - mov r8, r0 - adds r0, r2, r0 - ldrb r0, [r0] - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, [r7] - add r0, r8 - ldrb r0, [r0] - ldr r2, =gText_Yes - movs r1, 0x1 - str r1, [sp] - movs r3, 0xFF - mov r10, r3 - str r3, [sp, 0x4] - movs r1, 0 - mov r9, r1 - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0x8 - bl AddTextPrinterParameterized - ldr r0, [r7] - add r0, r8 - ldrb r0, [r0] - ldr r2, =gText_No - movs r1, 0x11 - str r1, [sp] - mov r3, r10 - str r3, [sp, 0x4] - mov r1, r9 - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0x8 - bl AddTextPrinterParameterized - ldr r0, [r7] - add r0, r8 - ldrb r0, [r0] - ldr r2, =gText_SelectorArrow2 - subs r1, r5, 0x1 - lsls r1, 4 - adds r1, 0x1 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp] - mov r3, r10 - str r3, [sp, 0x4] - mov r1, r9 - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r0, [r7] - add r0, r8 - ldrb r0, [r0] - movs r1, 0x3 - bl CopyWindowToVram - ldr r0, =gMain - ldrh r1, [r0, 0x2E] - movs r5, 0x1 - movs r2, 0x1 - ands r2, r1 - cmp r2, 0 - beq _0802A294 - movs r0, 0x5 - bl PlaySE - ldr r0, [r7] - ldr r3, =0x00003020 - adds r1, r0, r3 - ldrb r0, [r1] - cmp r0, 0 - bne _0802A2E4 - strb r5, [r1] - b _0802A2E4 - .pool -_0802A294: - movs r0, 0xC0 - ands r0, r1 - cmp r0, 0 - beq _0802A2CC - movs r0, 0x5 - bl PlaySE - ldr r0, [r7] - ldr r2, =0x00003020 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0x1 - beq _0802A2C2 - cmp r0, 0x1 - bgt _0802A2BC - cmp r0, 0 - beq _0802A2C2 - b _0802A35E - .pool -_0802A2BC: - cmp r0, 0x2 - beq _0802A2C8 - b _0802A35E -_0802A2C2: - movs r0, 0x2 - strb r0, [r1] - b _0802A35E -_0802A2C8: - strb r5, [r1] - b _0802A35E -_0802A2CC: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0802A35E - movs r0, 0x5 - bl PlaySE - ldr r0, [r7] - ldr r3, =0x00003020 - adds r0, r3 - movs r1, 0x2 - strb r1, [r0] -_0802A2E4: - ldr r1, [r7] - ldr r0, =0x00003014 - adds r1, r0 -_0802A2EA: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0802A35E - .pool -_0802A2FC: - ldr r0, [r7] - ldr r2, =0x00003020 - adds r1, r0, r2 - ldrb r1, [r1] - ldr r3, =0x00003024 - adds r0, r3 - strb r1, [r0] - ldr r0, [r7] - ldr r6, =0x00003008 - adds r0, r6 - ldrb r0, [r0] - bl ClearWindowTilemap - ldr r0, [r7] - ldr r1, =0x00003009 - adds r0, r1 - ldrb r0, [r0] - bl ClearWindowTilemap - ldr r0, [r7] - adds r0, r6 - ldrb r0, [r0] - bl RemoveWindow - ldr r0, [r7] - ldr r2, =0x00003009 - adds r0, r2 - ldrb r0, [r0] - bl RemoveWindow - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r0, [r7] - movs r3, 0xC0 - lsls r3, 6 - adds r0, r3 - movs r1, 0x1 - str r1, [r0] -_0802A35E: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802A010 - - thumb_func_start sub_802A380 -sub_802A380: @ 802A380 - push {r4-r6,lr} - sub sp, 0x10 - ldr r5, =gUnknown_02022CF8 - ldr r0, [r5] - ldr r6, =0x00003014 - adds r0, r6 - ldrb r4, [r0] - cmp r4, 0x1 - beq _0802A3D8 - cmp r4, 0x1 - bgt _0802A3A4 - cmp r4, 0 - beq _0802A3AE - b _0802A420 - .pool -_0802A3A4: - cmp r4, 0x2 - beq _0802A3EC - cmp r4, 0x3 - beq _0802A404 - b _0802A420 -_0802A3AE: - movs r0, 0 - movs r1, 0 - bl DrawDialogueFrame - ldr r2, =gText_SavingDontTurnOffPower - str r4, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized2 - b _0802A410 - .pool -_0802A3D8: - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldr r1, [r5] - ldr r0, =0x00003014 - adds r1, r0 - b _0802A414 - .pool -_0802A3EC: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802A448 - ldr r0, =sub_8153688 - movs r1, 0 - bl CreateTask - b _0802A410 - .pool -_0802A404: - ldr r0, =sub_8153688 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _0802A448 -_0802A410: - ldr r1, [r5] - adds r1, r6 -_0802A414: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0802A448 - .pool -_0802A420: - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r0, =gUnknown_02022CF8 - ldr r0, [r0] - movs r1, 0xC0 - lsls r1, 6 - adds r0, r1 - movs r1, 0x1 - str r1, [r0] -_0802A448: - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802A380 - - thumb_func_start sub_802A454 -sub_802A454: @ 802A454 - push {r4-r6,lr} - sub sp, 0xC - ldr r1, =gUnknown_02022CF8 - ldr r2, [r1] - ldr r6, =0x00003014 - adds r0, r2, r6 - ldrb r0, [r0] - adds r5, r1, 0 - cmp r0, 0x1 - beq _0802A4AC - cmp r0, 0x1 - bgt _0802A47C - cmp r0, 0 - beq _0802A482 - b _0802A520 - .pool -_0802A47C: - cmp r0, 0x2 - beq _0802A4F4 - b _0802A520 -_0802A482: - ldr r4, =gUnknown_082F7BEC - adds r0, r4, 0 - bl AddWindow - ldr r1, [r5] - ldr r2, =0x00003008 - adds r1, r2 - strb r0, [r1] - ldr r0, [r5] - adds r0, r2 - ldrb r0, [r0] - bl ClearWindowTilemap - adds r0, r4, 0 - bl sub_8029174 - b _0802A510 - .pool -_0802A4AC: - ldr r4, =0x00003008 - adds r0, r2, r4 - ldrb r0, [r0] - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - ldr r2, =gText_CommunicationStandby3 - movs r1, 0x5 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - ldr r1, [r5] - ldr r0, =0x00003014 - adds r1, r0 - b _0802A514 - .pool -_0802A4F4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802A50A - ldr r0, [r5] - ldr r1, =0x00003008 - adds r0, r1 - ldrb r0, [r0] - bl PutWindowTilemap -_0802A50A: - movs r0, 0 - bl CopyBgTilemapBufferToVram -_0802A510: - ldr r1, [r5] - adds r1, r6 -_0802A514: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0802A52C - .pool -_0802A520: - ldr r0, [r5] - movs r1, 0xC0 - lsls r1, 6 - adds r0, r1 - movs r1, 0x1 - str r1, [r0] -_0802A52C: - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_802A454 - - thumb_func_start sub_802A534 -sub_802A534: @ 802A534 - push {r4,r5,lr} - sub sp, 0x8 - ldr r5, =gUnknown_02022CF8 - ldr r0, [r5] - ldr r4, =0x00003008 - adds r0, r4 - ldrb r0, [r0] - bl ClearWindowTilemap - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - bl RemoveWindow - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r0, [r5] - movs r1, 0xC0 - lsls r1, 6 - adds r0, r1 - movs r1, 0x1 - str r1, [r0] - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802A534 - - thumb_func_start sub_802A588 -sub_802A588: @ 802A588 - push {r4-r7,lr} - sub sp, 0xC - ldr r0, =gUnknown_02022CF8 - ldr r1, [r0] - ldr r7, =0x00003014 - adds r2, r1, r7 - ldrb r5, [r2] - adds r6, r0, 0 - cmp r5, 0x1 - beq _0802A610 - cmp r5, 0x1 - bgt _0802A5B0 - cmp r5, 0 - beq _0802A5BA - b _0802A6A4 - .pool -_0802A5B0: - cmp r5, 0x2 - beq _0802A658 - cmp r5, 0x3 - beq _0802A684 - b _0802A6A4 -_0802A5BA: - ldr r4, =gUnknown_082F7BE4 - adds r0, r4, 0 - bl AddWindow - ldr r1, [r6] - ldr r2, =0x00003008 - adds r1, r2 - strb r0, [r1] - ldr r0, [r6] - adds r0, r2 - ldrb r0, [r0] - bl ClearWindowTilemap - adds r0, r4, 0 - bl sub_8029174 - ldr r1, [r6] - adds r1, r7 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, [r6] - ldr r2, =0x0000301c - adds r1, r0, r2 - movs r2, 0 - strh r5, [r1] - ldr r1, =0x00003020 - adds r0, r1 - strb r2, [r0] - ldr r0, [r6] - adds r1, 0x4 - adds r0, r1 - strb r2, [r0] - b _0802A6EA - .pool -_0802A610: - ldr r4, =0x00003008 - adds r0, r1, r4 - ldrb r0, [r0] - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, [r6] - adds r0, r4 - ldrb r0, [r0] - ldr r2, =gText_SomeoneDroppedOut - movs r1, 0x5 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r0, [r6] - adds r0, r4 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - ldr r1, [r6] - ldr r2, =0x00003014 - adds r1, r2 - b _0802A678 - .pool -_0802A658: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802A66E - ldr r0, [r6] - ldr r1, =0x00003008 - adds r0, r1 - ldrb r0, [r0] - bl PutWindowTilemap -_0802A66E: - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r1, [r6] - adds r1, r7 -_0802A678: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0802A6EA - .pool -_0802A684: - ldr r0, =0x0000301c - adds r1, r0 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x77 - bls _0802A6EA - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - b _0802A6EA - .pool -_0802A6A4: - ldr r0, [r6] - ldr r1, =0x00003024 - adds r0, r1 - movs r1, 0x5 - strb r1, [r0] - ldr r0, [r6] - ldr r4, =0x00003008 - adds r0, r4 - ldrb r0, [r0] - bl ClearWindowTilemap - ldr r0, [r6] - adds r0, r4 - ldrb r0, [r0] - bl RemoveWindow - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r0, [r6] - movs r2, 0xC0 - lsls r2, 6 - adds r0, r2 - movs r1, 0x1 - str r1, [r0] -_0802A6EA: - add sp, 0xC - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802A588 - - thumb_func_start unused_0 -unused_0: @ 802A6FC - push {r4,lr} - ldr r4, =gUnknown_02022CF8 - ldr r0, [r4] - ldr r1, =0x00003004 - adds r0, r1 - ldrb r0, [r0] - bl DestroyTask - ldr r0, [r4] - movs r1, 0xC0 - lsls r1, 6 - adds r0, r1 - movs r1, 0x1 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end unused_0 - - thumb_func_start nullsub_16 -nullsub_16: @ 802A728 - bx lr - thumb_func_end nullsub_16 - - thumb_func_start sub_802A72C -sub_802A72C: @ 802A72C - push {r4,lr} - ldr r2, =gUnknown_02022CF8 - ldr r1, [r2] - ldr r3, =0x00003014 - adds r1, r3 - movs r3, 0 - strb r3, [r1] - ldr r1, [r2] - movs r4, 0xC0 - lsls r4, 6 - adds r2, r1, r4 - str r3, [r2] - ldr r2, =0x00003028 - adds r1, r2 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802A72C - - thumb_func_start sub_802A75C -sub_802A75C: @ 802A75C - ldr r0, =gUnknown_02022CF8 - ldr r0, [r0] - ldr r1, =0x00003028 - adds r0, r1 - ldr r0, [r0] - bx lr - .pool - thumb_func_end sub_802A75C - - thumb_func_start sub_802A770 -sub_802A770: @ 802A770 - push {lr} - ldr r0, =gUnknown_02022CF8 - ldr r0, [r0] - movs r1, 0xC0 - lsls r1, 6 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0x1 - beq _0802A78C - movs r0, 0x1 - b _0802A78E - .pool -_0802A78C: - movs r0, 0 -_0802A78E: - pop {r1} - bx r1 - thumb_func_end sub_802A770 - - thumb_func_start sub_802A794 -sub_802A794: @ 802A794 - ldr r0, =gUnknown_02022CF8 - ldr r0, [r0] - ldr r1, =0x00003024 - adds r0, r1 - ldrb r0, [r0] - bx lr - .pool - thumb_func_end sub_802A794 - - thumb_func_start sub_802A7A8 -sub_802A7A8: @ 802A7A8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r3, 0xC0 - lsls r3, 19 - movs r4, 0xC0 - lsls r4, 9 - add r0, sp, 0x4 - mov r8, r0 - mov r2, sp - movs r6, 0 - ldr r1, =0x040000d4 - movs r5, 0x80 - lsls r5, 5 - ldr r7, =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_0802A7CE: - strh r6, [r2] - mov r0, sp - str r0, [r1] - str r3, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r5 - subs r4, r5 - cmp r4, r5 - bhi _0802A7CE - strh r6, [r2] - mov r2, sp - str r2, [r1] - str r3, [r1, 0x4] - lsrs r0, r4, 1 - mov r2, r12 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r0, 0xE0 - lsls r0, 19 - movs r3, 0x80 - lsls r3, 3 - movs r4, 0 - str r4, [sp, 0x4] - ldr r2, =0x040000d4 - mov r1, r8 - str r1, [r2] - str r0, [r2, 0x4] - lsrs r0, r3, 2 - movs r1, 0x85 - lsls r1, 24 - orrs r0, r1 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r1, 0xA0 - lsls r1, 19 - mov r0, sp - strh r4, [r0] - str r0, [r2] - str r1, [r2, 0x4] - lsrs r3, 1 - movs r0, 0x81 - lsls r0, 24 - orrs r3, r0 - str r3, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, =gUnknown_082F7BA4 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - bl InitStandardTextBoxWindows - bl sub_8197200 - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - ldr r4, =gUnknown_02022CF8 - ldr r1, [r4] - movs r0, 0x3 - bl SetBgTilemapBuffer - ldr r1, [r4] - movs r2, 0x80 - lsls r2, 5 - adds r1, r2 - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, [r4] - movs r0, 0x80 - lsls r0, 6 - adds r1, r0 - movs r0, 0x2 - bl SetBgTilemapBuffer - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802A7A8 - - thumb_func_start sub_802A8E8 -sub_802A8E8: @ 802A8E8 - push {lr} - sub sp, 0x4 - ldr r0, =gUnknown_02022CF8 - ldr r0, [r0] - ldr r2, =0x00003018 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0x5 - bhi _0802A982 - lsls r0, 2 - ldr r1, =_0802A910 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_0802A910: - .4byte _0802A928 - .4byte _0802A938 - .4byte _0802A93E - .4byte _0802A94C - .4byte _0802A964 - .4byte _0802A972 -_0802A928: - ldr r0, =gDodrioBerryBgPal1 - movs r1, 0 - movs r2, 0x40 - bl LoadPalette - b _0802A98A - .pool -_0802A938: - bl reset_temp_tile_data_buffers - b _0802A98A -_0802A93E: - ldr r1, =gDodrioBerryBgGfx1 - movs r0, 0 - str r0, [sp] - movs r0, 0x3 - b _0802A954 - .pool -_0802A94C: - ldr r1, =gDodrioBerryBgGfx2 - movs r0, 0 - str r0, [sp] - movs r0, 0x1 -_0802A954: - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - b _0802A98A - .pool -_0802A964: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0802A98A - b _0802A998 -_0802A972: - movs r0, 0x3 - bl stdpal_get - movs r1, 0xD0 - movs r2, 0x20 - bl LoadPalette - b _0802A98A -_0802A982: - movs r0, 0 - strb r0, [r1] - movs r0, 0x1 - b _0802A99A -_0802A98A: - ldr r0, =gUnknown_02022CF8 - ldr r1, [r0] - ldr r0, =0x00003018 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_0802A998: - movs r0, 0 -_0802A99A: - add sp, 0x4 - pop {r1} - bx r1 - .pool - thumb_func_end sub_802A8E8 - - .align 2, 0 @ don't pad with nop diff --git a/asm/macros/event.inc b/asm/macros/event.inc index e00bdb600..bf1b8ce76 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 @@ -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/asm/pokemon_jump.s b/asm/pokemon_jump.s deleted file mode 100755 index 4327bb920..000000000 --- a/asm/pokemon_jump.s +++ /dev/null @@ -1,4304 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_802CE9C -sub_802CE9C: @ 802CE9C - push {r4-r7,lr} - adds r7, r0, 0 - movs r5, 0 - movs r4, 0 - ldr r6, =gUnknown_082FBE58 -_0802CEA6: - ldr r1, =gUnknown_082FBEB8 - lsls r0, r4, 2 - adds r0, r1 - ldr r0, [r0] - ldr r2, =gUnknown_082FBEA8 - lsls r1, r5, 1 - adds r1, r2 - movs r2, 0 - ldrsh r1, [r1, r2] - movs r3, 0 - ldrsh r2, [r6, r3] - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - lsls r0, r5, 2 - ldr r3, =0x000081d0 - adds r2, r7, r3 - adds r2, r0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - str r0, [r2] - adds r5, 0x1 - adds r6, 0x14 - adds r4, 0x1 - cmp r4, 0x3 - ble _0802CEA6 - movs r4, 0x3 - movs r6, 0x3C -_0802CEE8: - ldr r1, =gUnknown_082FBEB8 - lsls r0, r4, 2 - adds r0, r1 - ldr r0, [r0] - ldr r2, =gUnknown_082FBEA8 - lsls r1, r5, 1 - adds r1, r2 - movs r2, 0 - ldrsh r1, [r1, r2] - ldr r2, =gUnknown_082FBE58 - adds r2, r6, r2 - movs r3, 0 - ldrsh r2, [r2, r3] - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - lsls r0, r5, 2 - ldr r3, =0x000081d0 - adds r2, r7, r3 - adds r2, r0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - str r0, [r2] - adds r0, 0x3F - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] - adds r5, 0x1 - subs r6, 0x14 - subs r4, 0x1 - cmp r4, 0 - bge _0802CEE8 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802CE9C - - thumb_func_start sub_802CF50 -sub_802CF50: @ 802CF50 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - str r0, [sp, 0x8] - cmp r1, 0x5 - ble _0802CF70 - movs r0, 0xA - subs r1, r0, r1 - movs r0, 0x3 - str r0, [sp] - ldr r2, [sp, 0x8] - ldrb r0, [r2, 0xF] - b _0802CF78 -_0802CF70: - movs r3, 0x2 - str r3, [sp] - ldr r7, [sp, 0x8] - ldrb r0, [r7, 0xE] -_0802CF78: - movs r6, 0 - lsls r2, r1, 1 - str r2, [sp, 0x4] - lsls r0, 4 - mov r9, r0 - lsls r1, 24 - mov r8, r1 - ldr r0, =gUnknown_082FBE58 - adds r4, r2, r0 - ldr r3, [sp] - lsls r3, 2 - mov r10, r3 - movs r5, 0x3 -_0802CF92: - lsls r0, r6, 2 - ldr r7, [sp, 0x8] - ldr r1, =0x000081d0 - adds r2, r7, r1 - adds r2, r0 - ldr r1, [r2] - ldrh r0, [r4] - strh r0, [r1, 0x22] - ldr r3, [r2] - ldrb r0, [r3, 0x5] - movs r7, 0xD - negs r7, r7 - adds r1, r7, 0 - ands r0, r1 - mov r1, r10 - orrs r0, r1 - strb r0, [r3, 0x5] - ldr r3, [r2] - ldrb r1, [r3, 0x5] - movs r0, 0xF - ands r0, r1 - mov r7, r9 - orrs r0, r7 - strb r0, [r3, 0x5] - ldr r0, [r2] - mov r2, r8 - lsrs r1, r2, 24 - bl StartSpriteAnim - adds r6, 0x1 - adds r4, 0x14 - subs r5, 0x1 - cmp r5, 0 - bge _0802CF92 - movs r5, 0x3 - ldr r0, =gUnknown_082FBE58 - ldr r3, [sp, 0x4] - adds r0, r3, r0 - adds r4, r0, 0 - adds r4, 0x3C - ldr r7, [sp] - lsls r7, 2 - mov r10, r7 -_0802CFE8: - lsls r0, r6, 2 - ldr r1, [sp, 0x8] - ldr r3, =0x000081d0 - adds r2, r1, r3 - adds r2, r0 - ldr r1, [r2] - ldrh r0, [r4] - strh r0, [r1, 0x22] - ldr r3, [r2] - ldrb r0, [r3, 0x5] - movs r7, 0xD - negs r7, r7 - adds r1, r7, 0 - ands r0, r1 - mov r1, r10 - orrs r0, r1 - strb r0, [r3, 0x5] - ldr r3, [r2] - ldrb r1, [r3, 0x5] - movs r0, 0xF - ands r0, r1 - mov r7, r9 - orrs r0, r7 - strb r0, [r3, 0x5] - ldr r0, [r2] - mov r2, r8 - lsrs r1, r2, 24 - bl StartSpriteAnim - adds r6, 0x1 - subs r4, 0x14 - subs r5, 0x1 - cmp r5, 0 - bge _0802CFE8 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802CF50 - - thumb_func_start sub_802D044 -sub_802D044: @ 802D044 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0 - str r0, [sp] - movs r0, 0x9 - movs r1, 0x7 - movs r2, 0x78 - movs r3, 0x50 - bl sub_802EB24 - adds r0, r4, 0 - bl sub_802CD3C - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_802D044 - - thumb_func_start sub_802D068 -sub_802D068: @ 802D068 - push {lr} - bl sub_802EB84 - pop {r1} - bx r1 - thumb_func_end sub_802D068 - - thumb_func_start sub_802D074 -sub_802D074: @ 802D074 - push {r4,lr} - ldr r4, =gUnknown_02022D00 - str r0, [r4] - bl sub_802D0BC - ldr r0, =sub_802D12C - movs r1, 0x3 - bl CreateTask - ldr r1, [r4] - strb r0, [r1, 0x6] - ldr r2, [r4] - ldrb r0, [r2, 0x6] - movs r1, 0x2 - bl SetWordTaskArg - ldr r0, =sub_802D150 - bl sub_802D108 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802D074 - - thumb_func_start sub_802D0AC -sub_802D0AC: @ 802D0AC - push {lr} - bl FreeAllWindowBuffers - bl sub_8034CC8 - pop {r0} - bx r0 - thumb_func_end sub_802D0AC - - thumb_func_start sub_802D0BC -sub_802D0BC: @ 802D0BC - movs r1, 0 - strh r1, [r0, 0x4] - str r1, [r0] - movs r1, 0xFF - strh r1, [r0, 0x12] - bx lr - thumb_func_end sub_802D0BC - - thumb_func_start sub_802D0C8 -sub_802D0C8: @ 802D0C8 - push {r4-r6,lr} - adds r6, r0, 0 - movs r5, 0 - ldr r4, =gUnknown_082FE18C -_0802D0D0: - ldr r0, [r4] - cmp r0, r6 - bne _0802D0DC - ldr r0, [r4, 0x4] - bl sub_802D108 -_0802D0DC: - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x9 - bls _0802D0D0 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802D0C8 - - thumb_func_start sub_802D0F0 -sub_802D0F0: @ 802D0F0 - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - ldr r1, [r0] - movs r0, 0x1 - eors r1, r0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - bx lr - .pool - thumb_func_end sub_802D0F0 - - thumb_func_start sub_802D108 -sub_802D108: @ 802D108 - push {r4,lr} - adds r2, r0, 0 - ldr r4, =gUnknown_02022D00 - ldr r0, [r4] - ldrb r0, [r0, 0x6] - movs r1, 0 - bl SetWordTaskArg - ldr r1, [r4] - movs r0, 0 - strh r0, [r1, 0x4] - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802D108 - - thumb_func_start sub_802D12C -sub_802D12C: @ 802D12C - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0 - bne _0802D148 - adds r0, r1, 0 - movs r1, 0 - bl GetWordTaskArg - bl _call_via_r0 -_0802D148: - pop {r0} - bx r0 - .pool - thumb_func_end sub_802D12C - - thumb_func_start sub_802D150 -sub_802D150: @ 802D150 - push {r4-r6,lr} - sub sp, 0x8 - ldr r6, =gUnknown_02022D00 - ldr r1, [r6] - ldrh r5, [r1, 0x4] - cmp r5, 0x1 - bne _0802D160 - b _0802D298 -_0802D160: - cmp r5, 0x1 - bgt _0802D170 - cmp r5, 0 - beq _0802D178 - b _0802D2DA - .pool -_0802D170: - cmp r5, 0x2 - bne _0802D176 - b _0802D2D6 -_0802D176: - b _0802D2DA -_0802D178: - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, =gUnknown_082FE164 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - ldr r0, =gUnknown_082FE174 - bl InitWindows - bl reset_temp_tile_data_buffers - ldr r0, [r6] - bl sub_802C974 - bl sub_802DD08 - ldr r0, =gPkmnJumpBgPal - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - ldr r1, =gPkmnJumpBgGfx - str r5, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r1, =gPkmnJumpBgTilemap - movs r4, 0x1 - str r4, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r0, =gPkmnJumpVenusaurPal - movs r1, 0x30 - movs r2, 0x20 - bl LoadPalette - ldr r1, =gPkmnJumpVenusaurGfx - str r5, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r1, =gPkmnJumpVenusaurTilemap - str r4, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r0, =gPkmnJumpResultsPal - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette - ldr r1, =gPkmnJumpResultsGfx - str r5, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r1, =gPkmnJumpResultsTilemap - str r4, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r0, =gPkmnJumpPal3 - movs r1, 0x20 - movs r2, 0x20 - bl LoadPalette - ldr r1, [r6] - movs r0, 0xD3 - lsls r0, 1 - adds r1, r0 - movs r0, 0 - bl SetBgTilemapBuffer - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - bl sub_802DB8C - movs r0, 0 - bl sub_802DD64 - movs r0, 0 - movs r1, 0x1 - movs r2, 0xE0 - bl sub_8098C6C - movs r0, 0 - bl CopyBgTilemapBufferToVram - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - bl ResetBgPositions - b _0802D2CC - .pool -_0802D298: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _0802D2DA - bl sub_802DBF8 - ldr r0, [r6] - bl sub_802CE9C - ldr r0, [r6] - movs r1, 0x6 - bl sub_802CF50 - movs r0, 0x3 - bl ShowBg - movs r0, 0 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x1 - bl HideBg -_0802D2CC: - ldr r1, [r6] - ldrh r0, [r1, 0x4] - adds r0, 0x1 - strh r0, [r1, 0x4] - b _0802D2DA -_0802D2D6: - movs r0, 0x1 - str r0, [r1] -_0802D2DA: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_802D150 - - thumb_func_start sub_802D2E4 -sub_802D2E4: @ 802D2E4 - push {r4,lr} - ldr r4, =gUnknown_02022D00 - ldr r0, [r4] - ldrh r0, [r0, 0x4] - cmp r0, 0x1 - beq _0802D310 - cmp r0, 0x1 - bgt _0802D300 - cmp r0, 0 - beq _0802D30A - b _0802D34A - .pool -_0802D300: - cmp r0, 0x2 - beq _0802D322 - cmp r0, 0x3 - beq _0802D33A - b _0802D34A -_0802D30A: - bl sub_802DE1C - b _0802D330 -_0802D310: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D34A - movs r0, 0 - bl sub_802DF70 - b _0802D330 -_0802D322: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D34A - bl sub_802DFD4 -_0802D330: - ldr r1, [r4] - ldrh r0, [r1, 0x4] - adds r0, 0x1 - strh r0, [r1, 0x4] - b _0802D34A -_0802D33A: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D34A - ldr r1, [r4] - movs r0, 0x1 - str r0, [r1] -_0802D34A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_802D2E4 - - thumb_func_start sub_802D350 -sub_802D350: @ 802D350 - push {r4,lr} - ldr r4, =gUnknown_02022D00 - ldr r0, [r4] - ldrh r0, [r0, 0x4] - cmp r0, 0x1 - beq _0802D37C - cmp r0, 0x1 - bgt _0802D36C - cmp r0, 0 - beq _0802D376 - b _0802D3B6 - .pool -_0802D36C: - cmp r0, 0x2 - beq _0802D38E - cmp r0, 0x3 - beq _0802D3A6 - b _0802D3B6 -_0802D376: - bl sub_802DE1C - b _0802D39C -_0802D37C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D3B6 - movs r0, 0x1 - bl sub_802DF70 - b _0802D39C -_0802D38E: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D3B6 - bl sub_802DFD4 -_0802D39C: - ldr r1, [r4] - ldrh r0, [r1, 0x4] - adds r0, 0x1 - strh r0, [r1, 0x4] - b _0802D3B6 -_0802D3A6: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D3B6 - ldr r1, [r4] - movs r0, 0x1 - str r0, [r1] -_0802D3B6: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_802D350 - - thumb_func_start sub_802D3BC -sub_802D3BC: @ 802D3BC - push {r4,r5,lr} - bl sub_802C8AC - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - ldrh r0, [r0, 0x4] - cmp r0, 0 - beq _0802D3DC - cmp r0, 0x1 - beq _0802D410 - b _0802D43E - .pool -_0802D3DC: - movs r4, 0 - cmp r4, r5 - bge _0802D3F8 -_0802D3E2: - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - lsls r1, r4, 1 - adds r0, 0x1C - adds r0, r1 - ldrb r0, [r0] - bl ClearWindowTilemap - adds r4, 0x1 - cmp r4, r5 - blt _0802D3E2 -_0802D3F8: - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r0, =gUnknown_02022D00 - ldr r1, [r0] - ldrh r0, [r1, 0x4] - adds r0, 0x1 - strh r0, [r1, 0x4] - b _0802D43E - .pool -_0802D410: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D43E - movs r4, 0 - cmp r4, r5 - bge _0802D436 -_0802D420: - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - lsls r1, r4, 1 - adds r0, 0x1C - adds r0, r1 - ldrb r0, [r0] - bl RemoveWindow - adds r4, 0x1 - cmp r4, r5 - blt _0802D420 -_0802D436: - ldr r0, =gUnknown_02022D00 - ldr r1, [r0] - movs r0, 0x1 - str r0, [r1] -_0802D43E: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802D3BC - - thumb_func_start sub_802D448 -sub_802D448: @ 802D448 - push {r4,r5,lr} - sub sp, 0xC - ldr r5, =gUnknown_02022D00 - ldr r0, [r5] - ldrh r4, [r0, 0x4] - cmp r4, 0x1 - beq _0802D4A4 - cmp r4, 0x1 - bgt _0802D464 - cmp r4, 0 - beq _0802D46A - b _0802D4EC - .pool -_0802D464: - cmp r4, 0x2 - beq _0802D4DC - b _0802D4EC -_0802D46A: - movs r0, 0x1 - movs r1, 0x8 - movs r2, 0x14 - movs r3, 0x2 - bl sub_802DA9C - ldr r1, [r5] - strh r0, [r1, 0x12] - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gText_WantToPlayAgain2 - movs r1, 0x1 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r0, [r5] - ldrb r0, [r0, 0x12] - movs r1, 0x2 - bl CopyWindowToVram - b _0802D4D2 - .pool -_0802D4A4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D4EC - ldr r0, [r5] - ldrb r0, [r0, 0x12] - bl PutWindowTilemap - ldr r0, [r5] - ldrb r0, [r0, 0x12] - movs r1, 0x1 - movs r2, 0xE - bl DrawTextBorderOuter - movs r0, 0x17 - movs r1, 0x7 - movs r2, 0 - bl sub_802DB18 - movs r0, 0 - bl CopyBgTilemapBufferToVram -_0802D4D2: - ldr r1, [r5] - ldrh r0, [r1, 0x4] - adds r0, 0x1 - strh r0, [r1, 0x4] - b _0802D4EC -_0802D4DC: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D4EC - ldr r1, [r5] - movs r0, 0x1 - str r0, [r1] -_0802D4EC: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_802D448 - - thumb_func_start sub_802D4F4 -sub_802D4F4: @ 802D4F4 - push {r4,r5,lr} - sub sp, 0xC - ldr r5, =gUnknown_02022D00 - ldr r0, [r5] - ldrh r4, [r0, 0x4] - cmp r4, 0x1 - beq _0802D550 - cmp r4, 0x1 - bgt _0802D510 - cmp r4, 0 - beq _0802D516 - b _0802D58E - .pool -_0802D510: - cmp r4, 0x2 - beq _0802D57E - b _0802D58E -_0802D516: - movs r0, 0x2 - movs r1, 0x7 - movs r2, 0x1A - movs r3, 0x4 - bl sub_802DA9C - ldr r1, [r5] - strh r0, [r1, 0x12] - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gText_SavingDontTurnOffPower - movs r1, 0x1 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r0, [r5] - ldrb r0, [r0, 0x12] - movs r1, 0x2 - bl CopyWindowToVram - b _0802D574 - .pool -_0802D550: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D58E - ldr r0, [r5] - ldrb r0, [r0, 0x12] - bl PutWindowTilemap - ldr r0, [r5] - ldrb r0, [r0, 0x12] - movs r1, 0x1 - movs r2, 0xE - bl DrawTextBorderOuter - movs r0, 0 - bl CopyBgTilemapBufferToVram -_0802D574: - ldr r1, [r5] - ldrh r0, [r1, 0x4] - adds r0, 0x1 - strh r0, [r1, 0x4] - b _0802D58E -_0802D57E: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D58E - ldr r1, [r5] - movs r0, 0x1 - str r0, [r1] -_0802D58E: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_802D4F4 - - thumb_func_start sub_802D598 -sub_802D598: @ 802D598 - push {r4,r5,lr} - ldr r5, =gUnknown_02022D00 - ldr r0, [r5] - ldrh r4, [r0, 0x4] - cmp r4, 0 - beq _0802D5B0 - cmp r4, 0x1 - beq _0802D5C8 - b _0802D5DE - .pool -_0802D5B0: - bl sub_802DA14 - bl sub_8198C78 - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r1, [r5] - ldrh r0, [r1, 0x4] - adds r0, 0x1 - strh r0, [r1, 0x4] - b _0802D5DE -_0802D5C8: - bl sub_802DA44 - cmp r0, 0 - bne _0802D5DE - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D5DE - ldr r0, [r5] - str r4, [r0] -_0802D5DE: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_802D598 - - thumb_func_start sub_802D5E4 -sub_802D5E4: @ 802D5E4 - push {r4,r5,lr} - sub sp, 0xC - ldr r5, =gUnknown_02022D00 - ldr r0, [r5] - ldrh r4, [r0, 0x4] - cmp r4, 0x1 - beq _0802D640 - cmp r4, 0x1 - bgt _0802D600 - cmp r4, 0 - beq _0802D606 - b _0802D67E - .pool -_0802D600: - cmp r4, 0x2 - beq _0802D66E - b _0802D67E -_0802D606: - movs r0, 0x2 - movs r1, 0x8 - movs r2, 0x16 - movs r3, 0x4 - bl sub_802DA9C - ldr r1, [r5] - strh r0, [r1, 0x12] - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gText_SomeoneDroppedOut2 - movs r1, 0x1 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r0, [r5] - ldrb r0, [r0, 0x12] - movs r1, 0x2 - bl CopyWindowToVram - b _0802D664 - .pool -_0802D640: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D67E - ldr r0, [r5] - ldrb r0, [r0, 0x12] - bl PutWindowTilemap - ldr r0, [r5] - ldrb r0, [r0, 0x12] - movs r1, 0x1 - movs r2, 0xE - bl DrawTextBorderOuter - movs r0, 0 - bl CopyBgTilemapBufferToVram -_0802D664: - ldr r1, [r5] - ldrh r0, [r1, 0x4] - adds r0, 0x1 - strh r0, [r1, 0x4] - b _0802D67E -_0802D66E: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D67E - ldr r1, [r5] - movs r0, 0x1 - str r0, [r1] -_0802D67E: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_802D5E4 - - thumb_func_start sub_802D688 -sub_802D688: @ 802D688 - push {r4,r5,lr} - sub sp, 0xC - ldr r5, =gUnknown_02022D00 - ldr r0, [r5] - ldrh r4, [r0, 0x4] - cmp r4, 0x1 - beq _0802D6E4 - cmp r4, 0x1 - bgt _0802D6A4 - cmp r4, 0 - beq _0802D6AA - b _0802D722 - .pool -_0802D6A4: - cmp r4, 0x2 - beq _0802D712 - b _0802D722 -_0802D6AA: - movs r0, 0x7 - movs r1, 0xA - movs r2, 0x10 - movs r3, 0x2 - bl sub_802DA9C - ldr r1, [r5] - strh r0, [r1, 0x12] - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gText_CommunicationStandby4 - movs r1, 0x1 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r0, [r5] - ldrb r0, [r0, 0x12] - movs r1, 0x2 - bl CopyWindowToVram - b _0802D708 - .pool -_0802D6E4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D722 - ldr r0, [r5] - ldrb r0, [r0, 0x12] - bl PutWindowTilemap - ldr r0, [r5] - ldrb r0, [r0, 0x12] - movs r1, 0x1 - movs r2, 0xE - bl DrawTextBorderOuter - movs r0, 0 - bl CopyBgTilemapBufferToVram -_0802D708: - ldr r1, [r5] - ldrh r0, [r1, 0x4] - adds r0, 0x1 - strh r0, [r1, 0x4] - b _0802D722 -_0802D712: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802D722 - ldr r1, [r5] - movs r0, 0x1 - str r0, [r1] -_0802D722: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_802D688 - - thumb_func_start sub_802D72C -sub_802D72C: @ 802D72C - push {r4,r5,lr} - ldr r5, =gUnknown_02022D00 - ldr r0, [r5] - ldrh r4, [r0, 0x4] - cmp r4, 0 - beq _0802D744 - cmp r4, 0x1 - beq _0802D752 - b _0802D75E - .pool -_0802D744: - bl sub_802D044 - ldr r1, [r5] - ldrh r0, [r1, 0x4] - adds r0, 0x1 - strh r0, [r1, 0x4] - b _0802D75E -_0802D752: - bl sub_802D068 - cmp r0, 0 - bne _0802D75E - ldr r0, [r5] - str r4, [r0] -_0802D75E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_802D72C - - thumb_func_start sub_802D764 -sub_802D764: @ 802D764 - push {lr} - ldr r1, =gUnknown_02022D00 - ldr r0, [r1] - movs r2, 0 - strb r2, [r0, 0xA] - ldr r0, [r1] - strb r2, [r0, 0xB] - ldr r2, [r1] - movs r0, 0x6 - strb r0, [r2, 0xC] - ldr r0, [r1] - ldrb r0, [r0, 0xC] - bl sub_802DC9C - pop {r0} - bx r0 - .pool - thumb_func_end sub_802D764 - - thumb_func_start sub_802D788 -sub_802D788: @ 802D788 - push {r4,lr} - ldr r0, =gUnknown_02022D00 - ldr r2, [r0] - ldrb r3, [r2, 0xA] - adds r4, r0, 0 - cmp r3, 0 - beq _0802D7A0 - cmp r3, 0x1 - beq _0802D7DA - b _0802D7DE - .pool -_0802D7A0: - ldrb r0, [r2, 0xB] - adds r0, 0x1 - strb r0, [r2, 0xB] - ldr r1, [r4] - ldrb r0, [r1, 0xB] - cmp r0, 0xA - bls _0802D7CA - strb r3, [r1, 0xB] - ldr r0, [r4] - ldrb r1, [r0, 0xC] - adds r1, 0x1 - strb r1, [r0, 0xC] - ldr r1, [r4] - ldrb r0, [r1, 0xC] - cmp r0, 0x9 - bls _0802D7CA - strb r3, [r1, 0xC] - ldr r1, [r4] - ldrb r0, [r1, 0xA] - adds r0, 0x1 - strb r0, [r1, 0xA] -_0802D7CA: - ldr r0, [r4] - ldrb r0, [r0, 0xC] - bl sub_802DC9C - ldr r0, [r4] - ldrb r0, [r0, 0xC] - cmp r0, 0x7 - bne _0802D7DE -_0802D7DA: - movs r0, 0 - b _0802D7E0 -_0802D7DE: - movs r0, 0x1 -_0802D7E0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_802D788 - - thumb_func_start sub_802D7E8 -sub_802D7E8: @ 802D7E8 - push {r4,r5,lr} - sub sp, 0xC - adds r4, r1, 0 - lsls r0, 16 - lsrs r0, 16 - lsls r4, 16 - lsrs r4, 16 - ldr r5, =gUnknown_02022D00 - ldr r1, [r5] - adds r1, 0x26 - adds r2, r4, 0 - bl CopyItemNameHandlePlural - ldr r0, [r5] - adds r0, 0x66 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x1 - bl ConvertIntToDecimalStringN - bl DynamicPlaceholderTextUtil_Reset - ldr r1, [r5] - adds r1, 0x26 - movs r0, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - ldr r1, [r5] - adds r1, 0x66 - movs r0, 0x1 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - ldr r0, [r5] - adds r0, 0xA6 - ldr r1, =gText_AwesomeWonF701F700 - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - movs r0, 0x4 - movs r1, 0x8 - movs r2, 0x16 - movs r3, 0x4 - bl sub_802DA9C - ldr r2, [r5] - movs r4, 0 - movs r3, 0 - strh r0, [r2, 0x12] - lsls r0, 24 - lsrs r0, 24 - adds r2, 0xA6 - movs r1, 0x1 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - str r3, [sp, 0x8] - movs r1, 0x1 - bl AddTextPrinterParameterized - ldr r0, [r5] - ldrb r0, [r0, 0x12] - movs r1, 0x2 - bl CopyWindowToVram - ldr r1, [r5] - ldr r0, =0x0000016f - strh r0, [r1, 0x14] - strb r4, [r1, 0xD] - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802D7E8 - - thumb_func_start sub_802D884 -sub_802D884: @ 802D884 - push {r4-r6,lr} - sub sp, 0xC - lsls r0, 16 - lsrs r0, 16 - ldr r4, =gUnknown_02022D00 - ldr r1, [r4] - adds r1, 0x26 - bl CopyItemName - bl DynamicPlaceholderTextUtil_Reset - ldr r1, [r4] - adds r1, 0x26 - movs r0, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - ldr r0, [r4] - adds r0, 0xA6 - ldr r1, =gText_FilledStorageSpace2 - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - movs r0, 0x4 - movs r1, 0x8 - movs r2, 0x16 - movs r3, 0x4 - bl sub_802DA9C - ldr r2, [r4] - movs r6, 0 - movs r5, 0 - strh r0, [r2, 0x12] - lsls r0, 24 - lsrs r0, 24 - adds r2, 0xA6 - movs r1, 0x1 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - str r5, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r0, [r4] - ldrb r0, [r0, 0x12] - movs r1, 0x2 - bl CopyWindowToVram - ldr r0, [r4] - strh r5, [r0, 0x14] - strb r6, [r0, 0xD] - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802D884 - - thumb_func_start sub_802D8FC -sub_802D8FC: @ 802D8FC - push {r4-r6,lr} - sub sp, 0xC - lsls r0, 16 - lsrs r0, 16 - ldr r4, =gUnknown_02022D00 - ldr r1, [r4] - adds r1, 0x26 - bl CopyItemName - bl DynamicPlaceholderTextUtil_Reset - ldr r1, [r4] - adds r1, 0x26 - movs r0, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - ldr r0, [r4] - adds r0, 0xA6 - ldr r1, =gText_CantHoldMore - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - movs r0, 0x4 - movs r1, 0x9 - movs r2, 0x16 - movs r3, 0x2 - bl sub_802DA9C - ldr r2, [r4] - movs r6, 0 - movs r5, 0 - strh r0, [r2, 0x12] - lsls r0, 24 - lsrs r0, 24 - adds r2, 0xA6 - movs r1, 0x1 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - str r5, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r0, [r4] - ldrb r0, [r0, 0x12] - movs r1, 0x2 - bl CopyWindowToVram - ldr r0, [r4] - strh r5, [r0, 0x14] - strb r6, [r0, 0xD] - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802D8FC - - thumb_func_start sub_802D974 -sub_802D974: @ 802D974 - push {r4,lr} - ldr r4, =gUnknown_02022D00 - ldr r0, [r4] - ldrb r0, [r0, 0xD] - cmp r0, 0x1 - beq _0802D9C8 - cmp r0, 0x1 - bgt _0802D990 - cmp r0, 0 - beq _0802D99A - b _0802DA0C - .pool -_0802D990: - cmp r0, 0x2 - beq _0802D9EE - cmp r0, 0x3 - beq _0802DA02 - b _0802DA0C -_0802D99A: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802DA0C - ldr r0, [r4] - ldrb r0, [r0, 0x12] - bl PutWindowTilemap - ldr r0, [r4] - ldrb r0, [r0, 0x12] - movs r1, 0x1 - movs r2, 0xE - bl DrawTextBorderOuter - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r1, [r4] - ldrb r0, [r1, 0xD] - adds r0, 0x1 - strb r0, [r1, 0xD] - b _0802DA0C -_0802D9C8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802DA0C - ldr r1, [r4] - ldrh r0, [r1, 0x14] - cmp r0, 0 - bne _0802D9E0 - ldrb r0, [r1, 0xD] - adds r0, 0x2 - b _0802DA00 -_0802D9E0: - ldrh r0, [r1, 0x14] - bl PlayFanfare - ldr r1, [r4] - ldrb r0, [r1, 0xD] - adds r0, 0x1 - strb r0, [r1, 0xD] -_0802D9EE: - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _0802DA0C - ldr r0, =gUnknown_02022D00 - ldr r1, [r0] - ldrb r0, [r1, 0xD] - adds r0, 0x1 -_0802DA00: - strb r0, [r1, 0xD] -_0802DA02: - movs r0, 0 - b _0802DA0E - .pool -_0802DA0C: - movs r0, 0x1 -_0802DA0E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_802D974 - - thumb_func_start sub_802DA14 -sub_802DA14: @ 802DA14 - push {r4,lr} - ldr r4, =gUnknown_02022D00 - ldr r0, [r4] - ldrh r0, [r0, 0x12] - cmp r0, 0xFF - beq _0802DA38 - lsls r0, 24 - lsrs r0, 24 - bl rbox_fill_rectangle - ldr r0, [r4] - ldrb r0, [r0, 0x12] - movs r1, 0x1 - bl CopyWindowToVram - ldr r1, [r4] - movs r0, 0 - strb r0, [r1, 0xD] -_0802DA38: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DA14 - - thumb_func_start sub_802DA44 -sub_802DA44: @ 802DA44 - push {r4,lr} - ldr r4, =gUnknown_02022D00 - ldr r1, [r4] - ldrh r0, [r1, 0x12] - cmp r0, 0xFF - bne _0802DA58 -_0802DA50: - movs r0, 0 - b _0802DA84 - .pool -_0802DA58: - ldrb r0, [r1, 0xD] - cmp r0, 0 - bne _0802DA7E - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802DA82 - ldr r0, [r4] - ldrb r0, [r0, 0x12] - bl RemoveWindow - ldr r1, [r4] - movs r0, 0xFF - strh r0, [r1, 0x12] - ldrb r0, [r1, 0xD] - adds r0, 0x1 - strb r0, [r1, 0xD] - b _0802DA50 -_0802DA7E: - cmp r0, 0x1 - beq _0802DA50 -_0802DA82: - movs r0, 0x1 -_0802DA84: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_802DA44 - - thumb_func_start sub_802DA8C -sub_802DA8C: @ 802DA8C - push {lr} - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_802DA8C - - thumb_func_start sub_802DA9C -sub_802DA9C: @ 802DA9C - push {r4-r6,lr} - sub sp, 0x8 - ldr r6, =0xffffff00 - ldr r4, [sp] - ands r4, r6 - lsls r0, 24 - lsrs r0, 16 - ldr r5, =0xffff00ff - ands r4, r5 - orrs r4, r0 - lsls r1, 24 - lsrs r1, 8 - ldr r0, =0xff00ffff - ands r4, r0 - orrs r4, r1 - lsls r2, 24 - ldr r0, =0x00ffffff - ands r4, r0 - orrs r4, r2 - str r4, [sp] - lsls r3, 24 - lsrs r3, 24 - ldr r0, [sp, 0x4] - ands r0, r6 - orrs r0, r3 - ands r0, r5 - movs r1, 0xF0 - lsls r1, 4 - orrs r0, r1 - ldr r1, =0x0000ffff - ands r0, r1 - movs r1, 0x86 - lsls r1, 15 - orrs r0, r1 - str r0, [sp, 0x4] - mov r0, sp - bl AddWindow - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r0, r4, 24 - lsrs r0, 24 - movs r1, 0x11 - bl FillWindowPixelBuffer - adds r0, r4, 0 - add sp, 0x8 - pop {r4-r6} - pop {r1} - bx r1 - .pool - thumb_func_end sub_802DA9C - - thumb_func_start sub_802DB18 -sub_802DB18: @ 802DB18 - push {r4,r5,lr} - sub sp, 0x8 - adds r3, r2, 0 - lsls r3, 24 - lsrs r3, 24 - ldr r5, =0xffffff00 - ldr r2, [sp] - ands r2, r5 - lsls r0, 24 - lsrs r0, 16 - ldr r4, =0xffff00ff - ands r2, r4 - orrs r2, r0 - lsls r1, 24 - lsrs r1, 8 - ldr r0, =0xff00ffff - ands r2, r0 - orrs r2, r1 - ldr r0, =0x00ffffff - ands r2, r0 - movs r0, 0xC0 - lsls r0, 19 - orrs r2, r0 - str r2, [sp] - ldr r0, [sp, 0x4] - ands r0, r5 - movs r1, 0x4 - orrs r0, r1 - ands r0, r4 - movs r1, 0x80 - lsls r1, 2 - orrs r0, r1 - ldr r1, =0x0000ffff - ands r0, r1 - movs r1, 0xAC - lsls r1, 14 - orrs r0, r1 - str r0, [sp, 0x4] - mov r0, sp - movs r1, 0x1 - movs r2, 0xD - bl CreateYesNoMenu - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DB18 - - thumb_func_start sub_802DB8C -sub_802DB8C: @ 802DB8C - push {r4,lr} - sub sp, 0x10 - ldr r1, =gUnknown_082FE1DC - add r0, sp, 0xC - movs r2, 0x3 - bl memcpy - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0x1 - movs r1, 0 - bl FillWindowPixelBuffer - add r0, sp, 0xC - str r0, [sp] - movs r4, 0 - str r4, [sp, 0x4] - ldr r0, =gText_SpacePoints2 - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - add r0, sp, 0xC - str r0, [sp] - str r4, [sp, 0x4] - ldr r0, =gText_SpaceTimes3 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DB8C - - thumb_func_start sub_802DBF8 -sub_802DBF8: @ 802DBF8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - bl sub_802C8AC - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - ldr r1, =gUnknown_082FE260 - subs r0, 0x2 - lsls r0, 2 - adds r0, r1 - ldr r5, [r0] - movs r6, 0 - cmp r6, r10 - bge _0802DC62 - ldr r0, =gMonFrontPicCoords - mov r9, r0 - ldr r1, =gUnknown_02022D00 - mov r8, r1 -_0802DC26: - lsls r4, r6, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_802C8C8 - adds r1, r0, 0 - ldrh r0, [r1] - lsls r0, 2 - add r0, r9 - ldrb r3, [r0, 0x1] - mov r2, r8 - ldr r0, [r2] - movs r7, 0 - ldrsh r2, [r5, r7] - adds r3, 0x70 - str r4, [sp] - bl sub_802C9D4 - mov r1, r8 - ldr r0, [r1] - movs r2, 0 - ldrsh r1, [r5, r2] - movs r2, 0x70 - adds r3, r4, 0 - bl sub_802CE48 - adds r5, 0x2 - adds r6, 0x1 - cmp r6, r10 - blt _0802DC26 -_0802DC62: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DBF8 - - thumb_func_start sub_802DC80 -sub_802DC80: @ 802DC80 - ldr r2, =gUnknown_02022D00 - ldr r2, [r2] - lsls r0, 2 - ldr r3, =0x000081a8 - adds r2, r3 - adds r2, r0 - ldr r0, [r2] - strh r1, [r0, 0x26] - bx lr - .pool - thumb_func_end sub_802DC80 - - thumb_func_start sub_802DC9C -sub_802DC9C: @ 802DC9C - push {r4,lr} - adds r4, r0, 0 - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - adds r1, r4, 0 - bl sub_802CF50 - ldr r0, =gUnknown_082FE1DF - adds r4, r0 - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 13 - movs r0, 0x2 - movs r2, 0 - bl ChangeBgY - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DC9C - - thumb_func_start sub_802DCCC -sub_802DCCC: @ 802DCCC - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r5, 0 - movs r6, 0 -_0802DCD6: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _0802DCEA - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - adds r1, r5, 0 - bl sub_802CB14 - adds r6, 0x1 -_0802DCEA: - lsrs r4, 1 - adds r5, 0x1 - cmp r5, 0x4 - ble _0802DCD6 - subs r0, r6, 0x2 - lsls r0, 24 - lsrs r0, 24 - bl sub_802E00C - adds r0, r6, 0 - pop {r4-r6} - pop {r1} - bx r1 - .pool - thumb_func_end sub_802DCCC - - thumb_func_start sub_802DD08 -sub_802DD08: @ 802DD08 - push {r4,lr} - sub sp, 0x10 - mov r1, sp - movs r0, 0x40 - strb r0, [r1] - movs r0, 0x5 - strb r0, [r1, 0x1] - movs r0, 0x8 - strb r0, [r1, 0x2] - movs r0, 0x6C - strh r0, [r1, 0x4] - movs r4, 0x6 - strh r4, [r1, 0x6] - ldr r0, =gUnknown_082FE1EC - str r0, [sp, 0x8] - ldr r0, =gUnknown_082FE1F4 - str r0, [sp, 0xC] - movs r0, 0x2 - bl sub_8034C54 - movs r0, 0 - movs r1, 0 - mov r2, sp - bl sub_8034D14 - mov r1, sp - movs r0, 0x4 - strb r0, [r1, 0x1] - movs r0, 0x1E - strh r0, [r1, 0x4] - mov r0, sp - strh r4, [r0, 0x6] - movs r0, 0x1 - movs r1, 0 - mov r2, sp - bl sub_8034D14 - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DD08 - - thumb_func_start sub_802DD64 -sub_802DD64: @ 802DD64 - push {lr} - adds r1, r0, 0 - movs r0, 0 - bl sub_8035044 - pop {r0} - bx r0 - thumb_func_end sub_802DD64 - - thumb_func_start sub_802DD74 -sub_802DD74: @ 802DD74 - push {lr} - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x1 - bl sub_8035044 - pop {r0} - bx r0 - thumb_func_end sub_802DD74 - - thumb_func_start sub_802DD88 -sub_802DD88: @ 802DD88 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - bl sub_802CBF0 - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DD88 - - thumb_func_start sub_802DDA0 -sub_802DDA0: @ 802DDA0 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - bl sub_802CC88 - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DDA0 - - thumb_func_start sub_802DDB8 -sub_802DDB8: @ 802DDB8 - push {lr} - adds r1, r0, 0 - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - bl sub_802CC18 - pop {r1} - bx r1 - .pool - thumb_func_end sub_802DDB8 - - thumb_func_start sub_802DDCC -sub_802DDCC: @ 802DDCC - push {lr} - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - bl sub_802CCB0 - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DDCC - - thumb_func_start sub_802DDE0 -sub_802DDE0: @ 802DDE0 - push {lr} - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - bl sub_802CD3C - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DDE0 - - thumb_func_start sub_802DDF4 -sub_802DDF4: @ 802DDF4 - push {lr} - adds r1, r0, 0 - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - bl sub_802CD70 - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DDF4 - - thumb_func_start sub_802DE08 -sub_802DE08: @ 802DE08 - push {lr} - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - bl sub_802CD98 - pop {r1} - bx r1 - .pool - thumb_func_end sub_802DE08 - - thumb_func_start sub_802DE1C -sub_802DE1C: @ 802DE1C - push {r4-r7,lr} - sub sp, 0x8 - bl sub_802C8AC - lsls r0, 16 - lsrs r7, r0, 16 - ldr r1, =gUnknown_082FE234 - subs r0, r7, 0x2 - lsls r0, 2 - adds r0, r1 - ldr r4, [r0] - ldr r2, =0xffffff00 - ldr r0, [sp] - ands r0, r2 - ldr r1, =0x00ffffff - ands r0, r1 - movs r1, 0x80 - lsls r1, 20 - orrs r0, r1 - str r0, [sp] - ldr r0, [sp, 0x4] - ands r0, r2 - movs r1, 0x2 - orrs r0, r1 - ldr r1, =0xffff00ff - ands r0, r1 - movs r1, 0x80 - lsls r1, 2 - orrs r0, r1 - ldr r1, =0x0000ffff - ands r0, r1 - movs r1, 0xAC - lsls r1, 14 - orrs r0, r1 - str r0, [sp, 0x4] - movs r5, 0 - cmp r5, r7 - bge _0802DEAC - mov r6, sp -_0802DE6A: - ldrb r0, [r4] - lsls r0, 8 - ldr r2, =0xffff00ff - ldr r1, [sp] - ands r1, r2 - orrs r1, r0 - str r1, [sp] - ldrb r2, [r4, 0x2] - lsls r2, 16 - ldr r0, =0xff00ffff - ands r0, r1 - orrs r0, r2 - str r0, [sp] - mov r0, sp - bl AddWindow - ldr r1, =gUnknown_02022D00 - ldr r1, [r1] - lsls r2, r5, 1 - adds r1, 0x1C - adds r1, r2 - strh r0, [r1] - lsls r0, 24 - lsrs r0, 24 - bl ClearWindowTilemap - ldrh r0, [r6, 0x6] - adds r0, 0x10 - strh r0, [r6, 0x6] - adds r4, 0x4 - adds r5, 0x1 - cmp r5, r7 - blt _0802DE6A -_0802DEAC: - movs r0, 0 - bl CopyBgTilemapBufferToVram - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DE1C - - thumb_func_start sub_802DED8 -sub_802DED8: @ 802DED8 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x10 - adds r5, r0, 0 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - add r0, sp, 0xC - strb r1, [r0] - strb r2, [r0, 0x1] - strb r3, [r0, 0x2] - ldr r6, =gUnknown_02022D00 - ldr r0, [r6] - lsls r1, r5, 1 - mov r8, r1 - adds r0, 0x1C - add r0, r8 - ldrb r0, [r0] - movs r1, 0 - bl FillWindowPixelBuffer - lsls r5, 24 - lsrs r5, 24 - adds r0, r5, 0 - bl sub_802C8E8 - adds r1, r0, 0 - movs r2, 0x1 - negs r2, r2 - mov r9, r2 - movs r0, 0x1 - bl GetStringWidth - movs r4, 0x40 - subs r4, r0 - lsrs r4, 1 - adds r0, r5, 0 - bl sub_802C8E8 - adds r1, r0, 0 - ldr r0, [r6] - adds r0, 0x1C - add r0, r8 - ldrb r0, [r0] - lsls r4, 24 - lsrs r4, 24 - add r2, sp, 0xC - str r2, [sp] - mov r2, r9 - str r2, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x1 - adds r2, r4, 0 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - ldr r0, [r6] - adds r0, 0x1C - add r0, r8 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DED8 - - thumb_func_start sub_802DF70 -sub_802DF70: @ 802DF70 - push {r4-r6,lr} - adds r4, r0, 0 - bl sub_802C8AC - lsls r0, 16 - lsrs r5, r0, 16 - cmp r4, 0 - bne _0802DF9A - movs r4, 0 - cmp r4, r5 - bge _0802DFCC -_0802DF86: - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x2 - movs r3, 0x3 - bl sub_802DED8 - adds r4, 0x1 - cmp r4, r5 - blt _0802DF86 - b _0802DFCC -_0802DF9A: - bl sub_802C8BC - lsls r0, 16 - lsrs r6, r0, 16 - movs r4, 0 - cmp r4, r5 - bge _0802DFCC -_0802DFA8: - cmp r6, r4 - beq _0802DFBA - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x2 - movs r3, 0x3 - bl sub_802DED8 - b _0802DFC6 -_0802DFBA: - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x4 - movs r3, 0x5 - bl sub_802DED8 -_0802DFC6: - adds r4, 0x1 - cmp r4, r5 - blt _0802DFA8 -_0802DFCC: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_802DF70 - - thumb_func_start sub_802DFD4 -sub_802DFD4: @ 802DFD4 - push {r4,r5,lr} - bl sub_802C8AC - lsls r0, 16 - lsrs r5, r0, 16 - movs r4, 0 - cmp r4, r5 - bge _0802DFFA -_0802DFE4: - ldr r0, =gUnknown_02022D00 - ldr r0, [r0] - lsls r1, r4, 1 - adds r0, 0x1C - adds r0, r1 - ldrb r0, [r0] - bl PutWindowTilemap - adds r4, 0x1 - cmp r4, r5 - blt _0802DFE4 -_0802DFFA: - movs r0, 0 - bl CopyBgTilemapBufferToVram - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802DFD4 - - thumb_func_start sub_802E00C -sub_802E00C: @ 802E00C - push {r4,lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r4, r1, 24 - ldr r0, =gUnknown_02022D00 - ldr r2, [r0] - movs r0, 0 - str r0, [r2, 0x18] - lsrs r1, 25 - lsls r1, 16 - movs r0, 0x1 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - ands r4, r0 - lsls r4, 8 - subs r4, 0x28 - lsls r4, 8 - adds r1, r4, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - bl ShowBg - ldr r0, =sub_802E090 - movs r1, 0x4 - bl CreateTask - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802E00C - - thumb_func_start sub_802E058 -sub_802E058: @ 802E058 - push {r4,lr} - ldr r4, =gUnknown_02022D00 - ldr r0, [r4] - ldr r0, [r0, 0x18] - cmp r0, 0x1F - bls _0802E06C - movs r0, 0 - b _0802E08A - .pool -_0802E06C: - movs r0, 0x1 - movs r1, 0x80 - movs r2, 0x1 - bl ChangeBgY - ldr r1, [r4] - ldr r0, [r1, 0x18] - adds r0, 0x1 - str r0, [r1, 0x18] - cmp r0, 0x1F - bls _0802E088 - movs r0, 0x1 - bl HideBg -_0802E088: - movs r0, 0x1 -_0802E08A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_802E058 - - thumb_func_start sub_802E090 -sub_802E090: @ 802E090 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_802E058 - cmp r0, 0 - bne _0802E0A4 - adds r0, r4, 0 - bl DestroyTask -_0802E0A4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_802E090 - - thumb_func_start sub_802E0AC -sub_802E0AC: @ 802E0AC - push {lr} - sub sp, 0xC - mov r2, sp - movs r1, 0x1 - strb r1, [r2] - ldrh r1, [r0] - strh r1, [r2, 0x2] - ldr r1, [r0, 0x4] - str r1, [sp, 0x8] - ldr r0, [r0, 0x8] - str r0, [sp, 0x4] - mov r0, sp - bl sub_800FE50 - add sp, 0xC - pop {r0} - bx r0 - thumb_func_end sub_802E0AC - - thumb_func_start sub_802E0D0 -sub_802E0D0: @ 802E0D0 - push {r4,lr} - sub sp, 0xC - adds r4, r1, 0 - ldr r3, =gRecvCmds - lsls r2, r0, 4 - adds r0, r2, r3 - ldrh r1, [r0] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - movs r1, 0xBC - lsls r1, 6 - cmp r0, r1 - bne _0802E100 - adds r1, r3, 0x2 - adds r1, r2, r1 - mov r0, sp - movs r2, 0xC - bl memcpy - mov r0, sp - ldrb r0, [r0] - cmp r0, 0x1 - beq _0802E108 -_0802E100: - movs r0, 0 - b _0802E118 - .pool -_0802E108: - mov r0, sp - ldrh r0, [r0, 0x2] - strh r0, [r4] - ldr r0, [sp, 0x8] - str r0, [r4, 0x4] - ldr r0, [sp, 0x4] - str r0, [r4, 0x8] - movs r0, 0x1 -_0802E118: - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_802E0D0 - - thumb_func_start sub_802E120 -sub_802E120: @ 802E120 - push {lr} - sub sp, 0xC - mov r2, sp - movs r1, 0x2 - strb r1, [r2] - str r0, [sp, 0x4] - mov r0, sp - bl sub_800FE50 - add sp, 0xC - pop {r0} - bx r0 - thumb_func_end sub_802E120 - - thumb_func_start sub_802E138 -sub_802E138: @ 802E138 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - mov r3, sp - movs r2, 0x3 - strb r2, [r3] - ldr r3, [r1, 0x8] - lsls r3, 15 - ldr r2, [sp, 0x8] - ldr r4, =0x00007fff - mov r8, r4 - ands r2, r4 - orrs r2, r3 - str r2, [sp, 0x8] - mov r6, sp - ldrb r2, [r1, 0x1] - movs r5, 0x1F - adds r3, r5, 0 - ands r3, r2 - ldrb r4, [r6, 0x3] - movs r2, 0x20 - negs r2, r2 - ands r2, r4 - orrs r2, r3 - strb r2, [r6, 0x3] - mov r3, sp - ldrb r2, [r1] - strb r2, [r3, 0x1] - ldrh r2, [r1, 0x2] - strh r2, [r3, 0x6] - mov r4, sp - ldrh r2, [r1, 0x4] - mov r1, r8 - ands r2, r1 - ldrh r3, [r4, 0x8] - ldr r1, =0xffff8000 - ands r1, r3 - orrs r1, r2 - strh r1, [r4, 0x8] - mov r2, sp - ldrh r1, [r0, 0x10] - strb r1, [r2, 0x2] - mov r3, sp - ldr r1, [r0, 0x14] - lsls r1, 5 - ldrb r2, [r3, 0x3] - ands r5, r2 - orrs r5, r1 - strb r5, [r3, 0x3] - mov r1, sp - ldrh r0, [r0, 0xE] - strh r0, [r1, 0x4] - mov r0, sp - bl sub_800FE50 - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802E138 - - thumb_func_start sub_802E1BC -sub_802E1BC: @ 802E1BC - push {r4,r5,lr} - sub sp, 0xC - adds r5, r0, 0 - adds r4, r1, 0 - ldr r2, =gRecvCmds - ldrh r0, [r2] - movs r1, 0xFF - lsls r1, 8 - ands r1, r0 - movs r0, 0xBC - lsls r0, 6 - cmp r1, r0 - bne _0802E228 - adds r1, r2, 0x2 - mov r0, sp - movs r2, 0xC - bl memcpy - mov r0, sp - ldrb r0, [r0] - cmp r0, 0x3 - bne _0802E228 - ldr r0, [sp, 0x8] - lsrs r0, 15 - str r0, [r4, 0x8] - mov r0, sp - ldrb r1, [r0, 0x3] - lsls r0, r1, 27 - lsrs r0, 27 - strb r0, [r4, 0x1] - mov r0, sp - ldrb r0, [r0, 0x1] - strb r0, [r4] - mov r0, sp - ldrh r0, [r0, 0x6] - strh r0, [r4, 0x2] - mov r0, sp - ldrh r0, [r0, 0x8] - lsls r0, 17 - lsrs r0, 17 - strh r0, [r4, 0x4] - mov r0, sp - ldrb r0, [r0, 0x2] - strh r0, [r5, 0x10] - lsls r1, 24 - lsrs r1, 29 - str r1, [r5, 0x14] - mov r0, sp - ldrh r0, [r0, 0x4] - strh r0, [r5, 0xE] - movs r0, 0x1 - b _0802E22A - .pool -_0802E228: - movs r0, 0 -_0802E22A: - add sp, 0xC - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_802E1BC - - thumb_func_start sub_802E234 -sub_802E234: @ 802E234 - push {r4,lr} - sub sp, 0xC - mov r4, sp - movs r3, 0x4 - strb r3, [r4] - ldrh r3, [r0, 0x10] - strb r3, [r4, 0x1] - ldr r3, [r0, 0x14] - strb r3, [r4, 0x2] - ldr r3, [r0, 0x18] - strb r3, [r4, 0x3] - mov r3, sp - ldrh r0, [r0, 0xE] - strh r0, [r3, 0x4] - mov r0, sp - strb r1, [r0, 0x6] - strh r2, [r0, 0x8] - bl sub_800FE50 - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_802E234 - - thumb_func_start sub_802E264 -sub_802E264: @ 802E264 - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - adds r5, r2, 0 - adds r6, r3, 0 - ldr r3, =gRecvCmds - lsls r2, r1, 4 - adds r0, r2, r3 - ldrh r1, [r0] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - movs r1, 0xBC - lsls r1, 6 - cmp r0, r1 - bne _0802E2C4 - adds r1, r3, 0x2 - adds r1, r2, r1 - mov r0, sp - movs r2, 0xC - bl memcpy - mov r0, sp - ldrb r0, [r0] - cmp r0, 0x4 - bne _0802E2C4 - mov r0, sp - ldrb r0, [r0, 0x1] - strh r0, [r4, 0x10] - mov r0, sp - ldrb r0, [r0, 0x2] - str r0, [r4, 0x14] - mov r0, sp - ldrb r0, [r0, 0x3] - str r0, [r4, 0x18] - mov r0, sp - ldrh r0, [r0, 0x4] - strh r0, [r4, 0xE] - mov r0, sp - ldrb r0, [r0, 0x6] - strb r0, [r5] - mov r0, sp - ldrh r0, [r0, 0x8] - strh r0, [r6] - movs r0, 0x1 - b _0802E2C6 - .pool -_0802E2C4: - movs r0, 0 -_0802E2C6: - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_802E264 - - thumb_func_start sub_802E2D0 -sub_802E2D0: @ 802E2D0 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - ldr r3, =gRecvCmds - lsls r2, r1, 4 - adds r0, r2, r3 - ldrh r1, [r0] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - movs r1, 0xBC - lsls r1, 6 - cmp r0, r1 - bne _0802E320 - adds r1, r3, 0x2 - adds r1, r2, r1 - mov r0, sp - movs r2, 0xC - bl memcpy - mov r0, sp - ldrb r0, [r0] - cmp r0, 0x4 - bne _0802E320 - mov r0, sp - ldrb r0, [r0, 0x1] - strh r0, [r4, 0x10] - mov r0, sp - ldrb r0, [r0, 0x2] - str r0, [r4, 0x14] - mov r0, sp - ldrb r0, [r0, 0x3] - str r0, [r4, 0x18] - mov r0, sp - ldrh r0, [r0, 0x4] - strh r0, [r4, 0xE] - movs r0, 0x1 - b _0802E322 - .pool -_0802E320: - movs r0, 0 -_0802E322: - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_802E2D0 - - thumb_func_start sub_802E32C -sub_802E32C: @ 802E32C - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - movs r1, 0xFE - lsls r1, 1 - adds r0, r1 - bx lr - .pool - thumb_func_end sub_802E32C - - thumb_func_start ResetPokeJumpResults -ResetPokeJumpResults: @ 802E33C - push {lr} - bl sub_802E32C - movs r1, 0 - strh r1, [r0] - str r1, [r0, 0xC] - strh r1, [r0, 0x4] - strh r1, [r0, 0x6] - str r1, [r0, 0x8] - strh r1, [r0, 0x2] - pop {r0} - bx r0 - thumb_func_end ResetPokeJumpResults - - thumb_func_start sub_802E354 -sub_802E354: @ 802E354 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r5, r1, 16 - lsls r2, 16 - lsrs r6, r2, 16 - bl sub_802E32C - adds r1, r0, 0 - movs r2, 0 - ldr r0, [r1, 0xC] - cmp r0, r4 - bcs _0802E378 - ldr r0, =0x00018696 - cmp r4, r0 - bhi _0802E378 - str r4, [r1, 0xC] - movs r2, 0x1 -_0802E378: - ldrh r0, [r1] - cmp r0, r5 - bcs _0802E388 - ldr r0, =0x0000270f - cmp r5, r0 - bhi _0802E388 - strh r5, [r1] - movs r2, 0x1 -_0802E388: - ldrh r0, [r1, 0x4] - cmp r0, r6 - bcs _0802E398 - ldr r0, =0x0000270f - cmp r6, r0 - bhi _0802E398 - strh r6, [r1, 0x4] - movs r2, 0x1 -_0802E398: - adds r0, r2, 0 - pop {r4-r6} - pop {r1} - bx r1 - .pool - thumb_func_end sub_802E354 - - thumb_func_start sub_802E3A8 -sub_802E3A8: @ 802E3A8 - push {lr} - bl sub_802E32C - adds r2, r0, 0 - ldrh r1, [r2, 0x6] - ldr r0, =0x0000270e - cmp r1, r0 - bhi _0802E3BC - adds r0, r1, 0x1 - strh r0, [r2, 0x6] -_0802E3BC: - pop {r0} - bx r0 - .pool - thumb_func_end sub_802E3A8 - - thumb_func_start sub_802E3C4 -sub_802E3C4: @ 802E3C4 - push {r4,lr} - ldr r4, =sub_802E3E4 - adds r0, r4, 0 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - bl _call_via_r4 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802E3C4 - - thumb_func_start sub_802E3E4 -sub_802E3E4: @ 802E3E4 - push {r4-r7,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r7, r0, r1 - movs r1, 0 - ldrsh r0, [r7, r1] - cmp r0, 0x1 - beq _0802E4A8 - cmp r0, 0x1 - bgt _0802E40C - cmp r0, 0 - beq _0802E416 - b _0802E4F6 - .pool -_0802E40C: - cmp r0, 0x2 - beq _0802E4B4 - cmp r0, 0x3 - beq _0802E4DC - b _0802E4F6 -_0802E416: - ldr r0, =gUnknown_082FE270 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp] - str r1, [sp, 0x4] - ldr r1, =gText_PkmnJumpRecords - movs r0, 0x1 - movs r2, 0 - bl GetStringWidth - adds r4, r0, 0 - movs r6, 0 - ldr r5, =gUnknown_082FE278 -_0802E430: - ldr r1, [r5] - movs r0, 0x1 - movs r2, 0 - bl GetStringWidth - adds r0, 0x26 - cmp r0, r4 - ble _0802E442 - adds r4, r0, 0 -_0802E442: - adds r5, 0x4 - adds r6, 0x1 - cmp r6, 0x2 - bls _0802E430 - adds r0, r4, 0x7 - cmp r0, 0 - bge _0802E452 - adds r0, 0x7 -_0802E452: - asrs r4, r0, 3 - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _0802E45E - adds r4, 0x1 -_0802E45E: - movs r1, 0x1E - subs r1, r4 - lsrs r0, r1, 31 - adds r1, r0 - asrs r1, 1 - lsls r1, 24 - lsrs r1, 16 - ldr r2, =0xffff00ff - ldr r0, [sp] - ands r0, r2 - orrs r0, r1 - lsls r2, r4, 24 - ldr r1, =0x00ffffff - ands r0, r1 - orrs r0, r2 - str r0, [sp] - mov r0, sp - bl AddWindow - strh r0, [r7, 0x2] - ldrh r0, [r7, 0x2] - adds r1, r4, 0 - bl sub_802E500 - ldrb r0, [r7, 0x2] - movs r1, 0x3 - b _0802E4CA - .pool -_0802E4A8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802E4F6 - b _0802E4CE -_0802E4B4: - ldr r0, =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0802E4F6 - ldrb r0, [r7, 0x2] - bl rbox_fill_rectangle - ldrb r0, [r7, 0x2] - movs r1, 0x1 -_0802E4CA: - bl CopyWindowToVram -_0802E4CE: - ldrh r0, [r7] - adds r0, 0x1 - strh r0, [r7] - b _0802E4F6 - .pool -_0802E4DC: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0802E4F6 - ldrb r0, [r7, 0x2] - bl RemoveWindow - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts -_0802E4F6: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_802E3E4 - - thumb_func_start sub_802E500 -sub_802E500: @ 802E500 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - str r1, [sp, 0x1C] - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x18] - bl sub_802E32C - ldrh r1, [r0] - str r1, [sp, 0xC] - ldr r1, [r0, 0xC] - str r1, [sp, 0x10] - ldrh r0, [r0, 0x4] - str r0, [sp, 0x14] - ldr r0, [sp, 0x18] - lsls r4, r0, 24 - lsrs r4, 24 - ldr r5, =0x0000021d - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0xD0 - bl LoadUserWindowBorderGfx_ - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0xD - bl DrawTextBorderOuter - adds r0, r4, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r5, =gText_PkmnJumpRecords - ldr r1, [sp, 0x1C] - lsls r2, r1, 3 - movs r0, 0x1 - adds r1, r5, 0 - bl GetStringCenterAlignXOffset - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0x1 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0x1 - adds r2, r5, 0 - bl AddTextPrinterParameterized - movs r6, 0 - adds r7, r4, 0 - movs r0, 0xFF - mov r10, r0 - mov r9, r6 - mov r1, sp - adds r1, 0xC - str r1, [sp, 0x20] - movs r0, 0xC8 - lsls r0, 21 - mov r8, r0 - ldr r5, =gStringVar1 -_0802E58A: - ldr r1, =gUnknown_082FE278 - lsls r0, r6, 2 - adds r0, r1 - ldr r2, [r0] - mov r1, r8 - lsrs r4, r1, 24 - str r4, [sp] - mov r0, r10 - str r0, [sp, 0x4] - mov r1, r9 - str r1, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - ldr r0, [sp, 0x20] - ldm r0!, {r1} - str r0, [sp, 0x20] - adds r0, r5, 0 - movs r2, 0 - movs r3, 0x5 - bl ConvertIntToDecimalStringN - adds r0, r5, 0 - bl sub_802E620 - movs r0, 0x1 - adds r1, r5, 0 - movs r2, 0 - bl GetStringWidth - ldr r1, [sp, 0x1C] - lsls r3, r1, 3 - subs r3, r0 - lsls r3, 24 - lsrs r3, 24 - str r4, [sp] - mov r0, r10 - str r0, [sp, 0x4] - mov r1, r9 - str r1, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x1 - adds r2, r5, 0 - bl AddTextPrinterParameterized - movs r0, 0x80 - lsls r0, 21 - add r8, r0 - adds r6, 0x1 - ldr r1, [sp, 0x18] - lsls r0, r1, 24 - cmp r6, 0x2 - bls _0802E58A - lsrs r0, 24 - bl PutWindowTilemap - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802E500 - - thumb_func_start sub_802E620 -sub_802E620: @ 802E620 - push {lr} - adds r1, r0, 0 - b _0802E628 -_0802E626: - adds r1, 0x1 -_0802E628: - ldrb r0, [r1] - cmp r0, 0xFF - beq _0802E636 - cmp r0, 0 - bne _0802E626 - movs r0, 0xFF - strb r0, [r1] -_0802E636: - pop {r0} - bx r0 - thumb_func_end sub_802E620 - - thumb_func_start sub_802E63C -sub_802E63C: @ 802E63C - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r0, =sub_802E6D0 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, =gTasks - adds r0, r1 - movs r1, 0x1 - strh r1, [r0, 0x8] - strh r5, [r0, 0xA] - ldr r0, =gUnknown_082FE748 - lsls r5, 4 - adds r5, r0 - ldr r1, [r5] - adds r0, r4, 0 - bl _call_via_r1 - adds r0, r4, 0 - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end sub_802E63C - - thumb_func_start sub_802E688 -sub_802E688: @ 802E688 - push {lr} - ldr r0, =sub_802E6D0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _0802E6B4 - ldr r0, =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - movs r0, 0x2 - strh r0, [r1, 0x8] - movs r0, 0x1 - b _0802E6B6 - .pool -_0802E6B4: - movs r0, 0 -_0802E6B6: - pop {r1} - bx r1 - thumb_func_end sub_802E688 - - thumb_func_start sub_802E6BC -sub_802E6BC: @ 802E6BC - push {lr} - ldr r0, =sub_802E6D0 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .pool - thumb_func_end sub_802E6BC - - thumb_func_start sub_802E6D0 -sub_802E6D0: @ 802E6D0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x3 - beq _0802E71C - cmp r0, 0x3 - bgt _0802E6F8 - cmp r0, 0x2 - beq _0802E6FE - b _0802E752 - .pool -_0802E6F8: - cmp r0, 0x4 - beq _0802E738 - b _0802E752 -_0802E6FE: - ldr r1, =gUnknown_082FE748 - movs r2, 0x2 - ldrsh r0, [r4, r2] - lsls r0, 4 - adds r1, 0x8 - adds r0, r1 - ldr r1, [r0] - adds r0, r5, 0 - bl _call_via_r1 - movs r0, 0x3 - strh r0, [r4] - b _0802E752 - .pool -_0802E71C: - ldr r0, =gUnknown_082FE748 - movs r2, 0x2 - ldrsh r1, [r4, r2] - lsls r1, 4 - adds r0, 0xC - adds r1, r0 - ldr r1, [r1] - adds r0, r5, 0 - bl _call_via_r1 - b _0802E752 - .pool -_0802E738: - ldr r0, =gUnknown_082FE748 - movs r2, 0x2 - ldrsh r1, [r4, r2] - lsls r1, 4 - adds r0, 0x4 - adds r1, r0 - ldr r1, [r1] - adds r0, r5, 0 - bl _call_via_r1 - adds r0, r5, 0 - bl DestroyTask -_0802E752: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802E6D0 - - thumb_func_start sub_802E75C -sub_802E75C: @ 802E75C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r1, 0x6 - ldrsh r0, [r4, r1] - lsls r0, 3 - ldr r1, =gUnknown_082FE6C8 - adds r0, r1 - bl LoadCompressedSpriteSheet - movs r2, 0x8 - ldrsh r0, [r4, r2] - lsls r0, 3 - ldr r1, =gUnknown_082FE6D8 - adds r0, r1 - bl LoadSpritePalette - movs r5, 0 - movs r3, 0x10 - ldrsh r0, [r4, r3] - cmp r5, r0 - bge _0802E7C4 -_0802E790: - movs r0, 0x4 - ldrsh r1, [r4, r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r1, =gUnknown_082FE730 - adds r0, r1 - movs r2, 0x12 - ldrsh r1, [r4, r2] - movs r3, 0x14 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0xE] - bl CreateSprite - lsls r1, r5, 1 - adds r1, r4 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x1A] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r5, r0 - blt _0802E790 -_0802E7C4: - movs r5, 0 - movs r2, 0x10 - ldrsh r0, [r4, r2] - cmp r5, r0 - bge _0802E820 - movs r7, 0x3 - movs r3, 0xD - negs r3, r3 - mov r12, r3 - ldr r6, =gSprites -_0802E7D8: - lsls r0, r5, 1 - adds r0, r4 - movs r1, 0x1A - ldrsh r0, [r0, r1] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r6 - ldrb r1, [r4, 0xC] - ands r1, r7 - lsls r1, 2 - ldrb r3, [r2, 0x5] - mov r0, r12 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3] - ldrh r0, [r4, 0xA] - strh r0, [r2, 0x30] - mov r3, r8 - strh r3, [r2, 0x34] - strh r5, [r2, 0x36] - ldrh r0, [r4, 0x1A] - strh r0, [r2, 0x38] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r5, r0 - blt _0802E7D8 -_0802E820: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802E75C - - thumb_func_start sub_802E83C -sub_802E83C: @ 802E83C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r1, =gTasks + 0x8 - adds r4, r1 - movs r5, 0 - strh r5, [r4, 0x4] - strh r5, [r4, 0x6] - strh r5, [r4, 0x8] - movs r1, 0x3C - strh r1, [r4, 0xA] - strh r5, [r4, 0xC] - strh r5, [r4, 0xE] - movs r1, 0x3 - strh r1, [r4, 0x10] - movs r1, 0x78 - strh r1, [r4, 0x12] - movs r1, 0x58 - strh r1, [r4, 0x14] - adds r1, r4, 0 - bl sub_802E75C - movs r0, 0x1C - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r5, =gSprites - adds r0, r5 - movs r1, 0x4 - bl StartSpriteAnim - movs r0, 0x1C - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, =0x0000ffe0 - strh r1, [r0, 0x24] - movs r0, 0x1E - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x5 - bl StartSpriteAnim - movs r0, 0x1E - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x20 - strh r1, [r0, 0x24] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802E83C - - thumb_func_start sub_802E8C8 -sub_802E8C8: @ 802E8C8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - movs r5, 0 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r4, r1, r0 - b _0802E8FC - .pool -_0802E8E0: - lsls r0, r5, 1 - adds r0, r4 - movs r2, 0x1A - ldrsh r1, [r0, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_0802E8FC: - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r5, r0 - blt _0802E8E0 - ldr r1, =gUnknown_082FE6C8 - movs r2, 0x6 - ldrsh r0, [r4, r2] - lsls r0, 3 - adds r0, r1 - ldrh r0, [r0, 0x6] - bl FreeSpriteTilesByTag - ldr r1, =gUnknown_082FE6D8 - movs r2, 0x8 - ldrsh r0, [r4, r2] - lsls r0, 3 - adds r0, r1 - ldrh r0, [r0, 0x4] - bl FreeSpritePaletteByTag - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802E8C8 - - thumb_func_start sub_802E938 -sub_802E938: @ 802E938 - push {r4-r6,lr} - adds r6, r0, 0 - movs r0, 0x34 - ldrsh r1, [r6, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r5, r0, r1 - movs r1, 0x16 - ldrsh r0, [r5, r1] - movs r2, 0xA - ldrsh r1, [r5, r2] - bl __modsi3 - cmp r0, 0 - bne _0802EA4A - ldrh r2, [r5, 0x16] - movs r3, 0x16 - ldrsh r1, [r5, r3] - movs r3, 0x14 - ldrsh r0, [r5, r3] - cmp r1, r0 - beq _0802EA4A - strh r2, [r5, 0x14] - movs r1, 0x32 - ldrsh r0, [r6, r1] - cmp r0, 0x4 - bhi _0802EA44 - lsls r0, 2 - ldr r1, =_0802E984 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_0802E984: - .4byte _0802E998 - .4byte _0802E9A6 - .4byte _0802E9A6 - .4byte _0802E9BA - .4byte _0802EA04 -_0802E998: - adds r2, r6, 0 - adds r2, 0x3E - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_0802E9A6: - movs r0, 0x38 - bl PlaySE - ldrh r1, [r6, 0x32] - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl StartSpriteAnim - b _0802EA44 -_0802E9BA: - movs r0, 0x15 - bl PlaySE - ldrh r1, [r6, 0x32] - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl StartSpriteAnim - ldr r4, =gSprites - movs r2, 0x1C - ldrsh r0, [r5, r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x5 - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - strb r0, [r1] - movs r3, 0x1E - ldrsh r1, [r5, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - ands r2, r1 - strb r2, [r0] - b _0802EA44 - .pool -_0802EA04: - adds r1, r6, 0 - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - ldr r3, =gSprites - movs r0, 0x1C - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r2 - strb r1, [r0] - movs r0, 0x1E - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r2 - strb r1, [r0] - movs r0, 0x4 - strh r0, [r5] - b _0802EA4A - .pool -_0802EA44: - ldrh r0, [r6, 0x32] - adds r0, 0x1 - strh r0, [r6, 0x32] -_0802EA4A: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_802E938 - - thumb_func_start sub_802EA50 -sub_802EA50: @ 802EA50 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r5, =gTasks + 0x8 - adds r6, r4, r5 - movs r0, 0x38 - bl PlaySE - ldr r2, =gSprites - movs r0, 0x1A - ldrsh r1, [r6, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r2, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, =sub_802E938 - str r1, [r0] - movs r0, 0x1A - ldrsh r1, [r6, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - subs r5, 0x8 - adds r4, r5 - movs r0, 0x3 - strh r0, [r4, 0x8] - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802EA50 - - thumb_func_start sub_802EAB0 -sub_802EAB0: @ 802EAB0 - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r4, r1, r0 - ldr r0, =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - beq _0802EB14 - ldr r1, =gRecvCmds - ldrh r0, [r1, 0x2] - ldr r5, =0x00007fff - cmp r0, r5 - bne _0802EAD8 - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x16] -_0802EAD8: - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - bne _0802EB1A - ldrh r0, [r4, 0x18] - adds r0, 0x1 - strh r0, [r4, 0x18] - mov r0, sp - movs r1, 0 - movs r2, 0xC - bl memset - mov r0, sp - strh r5, [r0] - mov r1, sp - ldrh r0, [r4, 0x18] - strh r0, [r1, 0x2] - mov r0, sp - bl sub_800FE50 - b _0802EB1A - .pool -_0802EB14: - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] -_0802EB1A: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_802EAB0 - - thumb_func_start sub_802EB24 -sub_802EB24: @ 802EB24 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - ldr r0, [sp, 0x18] - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - lsls r3, 16 - lsrs r3, 16 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, =sub_802EB98 - movs r1, 0x50 - str r3, [sp] - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xC] - strh r5, [r1, 0xE] - strh r6, [r1, 0x10] - ldr r3, [sp] - strh r3, [r1, 0x12] - mov r0, r8 - strh r0, [r1, 0x14] - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802EB24 - - thumb_func_start sub_802EB84 -sub_802EB84: @ 802EB84 - push {lr} - ldr r0, =sub_802EB98 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .pool - thumb_func_end sub_802EB84 - - thumb_func_start sub_802EB98 -sub_802EB98: @ 802EB98 - push {r4-r6,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r5, r0, r1 - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _0802EC08 - cmp r0, 0x1 - bgt _0802EBC0 - cmp r0, 0 - beq _0802EBC6 - b _0802EC8A - .pool -_0802EBC0: - cmp r0, 0x2 - beq _0802EC4C - b _0802EC8A -_0802EBC6: - ldrh r0, [r5, 0x4] - ldrh r1, [r5, 0x6] - bl sub_802EF50 - ldrh r0, [r5, 0x4] - ldrh r1, [r5, 0x6] - movs r3, 0x8 - ldrsh r2, [r5, r3] - movs r4, 0xA - ldrsh r3, [r5, r4] - ldrb r4, [r5, 0xC] - str r4, [sp] - bl sub_802EFA8 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0xE] - ldrh r0, [r5, 0x4] - ldrh r1, [r5, 0x6] - movs r3, 0x8 - ldrsh r2, [r5, r3] - movs r4, 0xA - ldrsh r3, [r5, r4] - ldrb r4, [r5, 0xC] - str r4, [sp] - adds r4, r5, 0 - adds r4, 0x10 - str r4, [sp, 0x4] - adds r4, 0x2 - str r4, [sp, 0x8] - bl sub_802EFFC - b _0802EC3E -_0802EC08: - ldrb r0, [r5, 0xE] - bl sub_802EC98 - cmp r0, 0 - bne _0802EC8A - ldrb r0, [r5, 0xE] - ldrb r1, [r5, 0x10] - ldrb r2, [r5, 0x12] - bl sub_802EDCC - movs r0, 0xE - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, =gSprites - adds r0, r4 - bl FreeSpriteOamMatrix - movs r3, 0xE - ldrsh r1, [r5, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite -_0802EC3E: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _0802EC8A - .pool -_0802EC4C: - ldrb r0, [r5, 0x10] - bl sub_802EE30 - cmp r0, 0 - bne _0802EC8A - movs r4, 0x10 - ldrsh r1, [r5, r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, =gSprites - adds r0, r4 - bl DestroySprite - movs r0, 0x12 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldrh r0, [r5, 0x4] - bl FreeSpriteTilesByTag - ldrh r0, [r5, 0x6] - bl FreeSpritePaletteByTag - adds r0, r6, 0 - bl DestroyTask -_0802EC8A: - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802EB98 - - thumb_func_start sub_802EC98 -sub_802EC98: @ 802EC98 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, =gSprites - adds r4, r1, r0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x7 - bls _0802ECB2 - b _0802EDC4 -_0802ECB2: - lsls r0, 2 - ldr r1, =_0802ECC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_0802ECC4: - .4byte _0802ECE4 - .4byte _0802ECF6 - .4byte _0802ED1C - .4byte _0802ED2C - .4byte _0802ED4E - .4byte _0802ED86 - .4byte _0802EDAC - .4byte _0802ED82 -_0802ECE4: - movs r1, 0x80 - lsls r1, 4 - adds r0, r4, 0 - movs r2, 0x1A - bl sub_8007E18 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] -_0802ECF6: - movs r2, 0x32 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _0802ED04 - movs r0, 0x39 - bl PlaySE -_0802ED04: - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _0802EDC4 - movs r0, 0 - strh r0, [r4, 0x32] - adds r0, r4, 0 - movs r1, 0x1 - b _0802EDA2 -_0802ED1C: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0802EDC4 - b _0802EDA6 -_0802ED2C: - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _0802EDC4 - movs r0, 0 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAffineAnim - b _0802EDC4 -_0802ED4E: - ldrh r0, [r4, 0x22] - subs r0, 0x4 - strh r0, [r4, 0x22] - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - ble _0802EDC4 - ldrh r1, [r4, 0x36] - movs r2, 0x36 - ldrsh r0, [r4, r2] - cmp r0, 0x1 - bgt _0802ED7E - adds r1, 0x1 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - movs r0, 0 - strh r0, [r4, 0x32] - b _0802EDA6 -_0802ED7E: - movs r0, 0x7 - strh r0, [r4, 0x2E] -_0802ED82: - movs r0, 0 - b _0802EDC6 -_0802ED86: - ldrh r0, [r4, 0x22] - adds r0, 0x4 - strh r0, [r4, 0x22] - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - ble _0802EDC4 - movs r0, 0 - strh r0, [r4, 0x32] - adds r0, r4, 0 - movs r1, 0x3 -_0802EDA2: - bl StartSpriteAffineAnim -_0802EDA6: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - b _0802EDC2 -_0802EDAC: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0802EDC4 - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - movs r0, 0x1 -_0802EDC2: - strh r0, [r4, 0x2E] -_0802EDC4: - movs r0, 0x1 -_0802EDC6: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_802EC98 - - thumb_func_start sub_802EDCC -sub_802EDCC: @ 802EDCC - push {r4-r6,lr} - mov r6, r8 - push {r6} - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - ldr r0, =gSprites - mov r8, r0 - lsls r4, r1, 4 - adds r4, r1 - lsls r4, 2 - adds r5, r4, r0 - ldr r0, =0x0000ffd8 - strh r0, [r5, 0x26] - lsls r3, r2, 4 - adds r3, r2 - lsls r3, 2 - mov r1, r8 - adds r2, r3, r1 - strh r0, [r2, 0x26] - adds r5, 0x3E - ldrb r6, [r5] - movs r1, 0x5 - negs r1, r1 - adds r0, r1, 0 - ands r0, r6 - strb r0, [r5] - adds r2, 0x3E - ldrb r0, [r2] - ands r1, r0 - strb r1, [r2] - movs r0, 0x1C - add r8, r0 - add r4, r8 - ldr r0, =sub_802EE5C - str r0, [r4] - add r3, r8 - str r0, [r3] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802EDCC - - thumb_func_start sub_802EE30 -sub_802EE30: @ 802EE30 - push {lr} - lsls r0, 24 - lsrs r0, 24 - movs r3, 0 - ldr r2, =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r2, 0x1C - adds r1, r2 - ldr r1, [r1] - ldr r0, =sub_802EE5C - cmp r1, r0 - bne _0802EE4E - movs r3, 0x1 -_0802EE4E: - adds r0, r3, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_802EE30 - - thumb_func_start sub_802EE5C -sub_802EE5C: @ 802EE5C - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r5, 0 - adds r4, 0x2E - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0x4 - bhi _0802EF46 - lsls r0, 2 - ldr r1, =_0802EE7C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_0802EE7C: - .4byte _0802EE90 - .4byte _0802EEA0 - .4byte _0802EEC8 - .4byte _0802EEFC - .4byte _0802EF34 -_0802EE90: - movs r0, 0x40 - strh r0, [r4, 0x8] - ldrh r0, [r5, 0x26] - lsls r0, 4 - strh r0, [r4, 0xA] - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] -_0802EEA0: - ldrh r1, [r4, 0x8] - ldrh r2, [r4, 0xA] - adds r0, r1, r2 - strh r0, [r4, 0xA] - adds r1, 0x1 - strh r1, [r4, 0x8] - lsls r0, 16 - asrs r0, 20 - strh r0, [r5, 0x26] - cmp r0, 0 - blt _0802EF46 - movs r0, 0x39 - bl PlaySE - movs r0, 0 - strh r0, [r5, 0x26] - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0802EF46 -_0802EEC8: - ldrh r0, [r4, 0x2] - adds r0, 0xC - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7F - ble _0802EEE6 - movs r0, 0x39 - bl PlaySE - movs r0, 0 - strh r0, [r4, 0x2] - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] -_0802EEE6: - ldr r0, =gSineTable - movs r2, 0x2 - ldrsh r1, [r4, r2] - lsls r1, 1 - adds r1, r0 - movs r2, 0 - ldrsh r0, [r1, r2] - asrs r0, 4 - b _0802EF2A - .pool -_0802EEFC: - ldrh r0, [r4, 0x2] - adds r0, 0x10 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7F - ble _0802EF1A - movs r0, 0x39 - bl PlaySE - movs r0, 0 - strh r0, [r4, 0x2] - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] -_0802EF1A: - ldr r1, =gSineTable - movs r2, 0x2 - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 21 -_0802EF2A: - negs r0, r0 - strh r0, [r5, 0x26] - b _0802EF46 - .pool -_0802EF34: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x28 - ble _0802EF46 - ldr r0, =SpriteCallbackDummy - str r0, [r5, 0x1C] -_0802EF46: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802EE5C - - thumb_func_start sub_802EF50 -sub_802EF50: @ 802EF50 - push {r4,lr} - sub sp, 0x10 - lsls r1, 16 - lsrs r1, 16 - ldr r2, =gUnknown_082FEBCC - ldr r3, [r2, 0x4] - ldr r2, [r2] - str r2, [sp] - str r3, [sp, 0x4] - ldr r2, =gUnknown_082FEBD4 - ldr r3, [r2, 0x4] - ldr r2, [r2] - str r2, [sp, 0x8] - str r3, [sp, 0xC] - lsls r0, 16 - ldr r3, =0x0000ffff - ldr r2, [sp, 0x4] - ands r2, r3 - orrs r2, r0 - str r2, [sp, 0x4] - ldr r2, =0xffff0000 - add r4, sp, 0x8 - ldr r0, [r4, 0x4] - ands r0, r2 - orrs r0, r1 - str r0, [r4, 0x4] - mov r0, sp - bl LoadCompressedSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802EF50 - - thumb_func_start sub_802EFA8 -sub_802EFA8: @ 802EFA8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x18 - mov r12, r3 - ldr r3, [sp, 0x30] - lsls r1, 16 - lsrs r1, 16 - lsls r3, 24 - lsrs r3, 24 - mov r8, r3 - mov r5, sp - ldr r4, =gUnknown_082FEC90 - ldm r4!, {r3,r6,r7} - stm r5!, {r3,r6,r7} - ldm r4!, {r3,r6,r7} - stm r5!, {r3,r6,r7} - mov r4, sp - strh r0, [r4] - mov r0, sp - strh r1, [r0, 0x2] - lsls r2, 16 - asrs r2, 16 - mov r0, r12 - lsls r6, r0, 16 - asrs r6, 16 - mov r0, sp - adds r1, r2, 0 - adds r2, r6, 0 - mov r3, r8 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - add sp, 0x18 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end sub_802EFA8 - - thumb_func_start sub_802EFFC -sub_802EFFC: @ 802EFFC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - mov r12, r3 - ldr r6, [sp, 0x38] - ldr r3, [sp, 0x3C] - mov r9, r3 - ldr r4, [sp, 0x40] - mov r8, r4 - lsls r1, 16 - lsrs r1, 16 - lsls r6, 24 - lsrs r6, 24 - mov r10, r6 - mov r4, sp - ldr r3, =gUnknown_082FECA8 - ldm r3!, {r5-r7} - stm r4!, {r5-r7} - ldm r3!, {r5-r7} - stm r4!, {r5-r7} - mov r3, sp - strh r0, [r3] - mov r0, sp - strh r1, [r0, 0x2] - lsls r2, 16 - asrs r4, r2, 16 - ldr r0, =0xffe00000 - adds r2, r0 - asrs r2, 16 - mov r1, r12 - lsls r5, r1, 16 - asrs r5, 16 - mov r0, sp - adds r1, r2, 0 - adds r2, r5, 0 - mov r3, r10 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r3, r9 - strh r0, [r3] - adds r4, 0x20 - lsls r4, 16 - asrs r4, 16 - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - mov r3, r10 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r4, r8 - strh r0, [r4] - ldr r2, =gSprites - mov r5, r9 - movs r6, 0 - ldrsh r1, [r5, r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r1, [r0] - movs r3, 0x4 - orrs r1, r3 - strb r1, [r0] - movs r7, 0 - ldrsh r1, [r4, r7] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - movs r0, 0 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x1 - bl StartSpriteAnim - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_802EFFC - - .align 2, 0 @ don't pad with nop diff --git a/asm/pokenav_unk_10.s b/asm/pokenav_unk_10.s deleted file mode 100644 index bf621e6a6..000000000 --- a/asm/pokenav_unk_10.s +++ /dev/null @@ -1,1309 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - thumb_func_start sub_81D0450 -sub_81D0450: @ 81D0450 - push {r4,lr} - movs r0, 0xD - movs r1, 0x9C - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081D0498 - movs r0, 0x12 - bl GetSubstructPtr - str r0, [r4, 0x8] - cmp r0, 0 - beq _081D0498 - adds r0, r4, 0 - bl sub_81D0814 - adds r1, r4, 0 - adds r1, 0x98 - ldr r0, =sub_81D04C4 - str r0, [r1] - ldr r1, =gKeyRepeatContinueDelay - movs r0, 0x3 - strh r0, [r1] - ldr r1, =gKeyRepeatStartDelay - movs r0, 0xA - strh r0, [r1] - movs r0, 0x1 - b _081D049A - .pool -_081D0498: - movs r0, 0 -_081D049A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81D0450 - - thumb_func_start sub_81D04A0 -sub_81D04A0: @ 81D04A0 - push {lr} - movs r0, 0xD - bl GetSubstructPtr - adds r1, r0, 0 - adds r1, 0x98 - ldr r1, [r1] - bl _call_via_r1 - pop {r1} - bx r1 - thumb_func_end sub_81D04A0 - - thumb_func_start sub_81D04B8 -sub_81D04B8: @ 81D04B8 - push {lr} - movs r0, 0xD - bl FreePokenavSubstruct - pop {r0} - bx r0 - thumb_func_end sub_81D04B8 - - thumb_func_start sub_81D04C4 -sub_81D04C4: @ 81D04C4 - push {r4,lr} - adds r4, r0, 0 - ldr r2, =gMain - ldrh r1, [r2, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _081D04E4 - ldr r3, [r4, 0x8] - ldrh r0, [r3, 0x2] - cmp r0, 0 - beq _081D04E4 - subs r0, 0x1 - b _081D04FC - .pool -_081D04E4: - ldrh r1, [r2, 0x30] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081D050C - ldr r3, [r4, 0x8] - ldrh r1, [r3, 0x2] - ldrh r0, [r3] - subs r0, 0x1 - cmp r1, r0 - bge _081D050C - adds r0, r1, 0x1 -_081D04FC: - movs r1, 0 - strh r0, [r3, 0x2] - strh r1, [r4, 0xC] - adds r0, r4, 0 - bl sub_81D0814 - movs r0, 0x1 - b _081D053E -_081D050C: - ldrh r2, [r2, 0x2E] - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - beq _081D0528 - adds r1, r4, 0 - adds r1, 0x98 - ldr r0, =sub_81D0548 - str r0, [r1] - movs r0, 0x2 - b _081D053E - .pool -_081D0528: - movs r0, 0x2 - ands r0, r2 - cmp r0, 0 - bne _081D0534 - movs r0, 0 - b _081D053E -_081D0534: - adds r1, r4, 0 - adds r1, 0x98 - ldr r0, =sub_81D05D4 - str r0, [r1] - movs r0, 0x5 -_081D053E: - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81D04C4 - - thumb_func_start sub_81D0548 -sub_81D0548: @ 81D0548 - push {r4,lr} - adds r4, r0, 0 - ldr r0, =gMain - ldrh r1, [r0, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _081D0562 - adds r0, r4, 0 - bl sub_81D05DC - cmp r0, 0 - bne _081D05A4 -_081D0562: - ldr r0, =gMain - ldrh r1, [r0, 0x30] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081D0578 - adds r0, r4, 0 - bl sub_81D061C - cmp r0, 0 - bne _081D05A4 -_081D0578: - ldr r0, =gMain - ldrh r1, [r0, 0x30] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _081D058E - adds r0, r4, 0 - bl sub_81D0664 - cmp r0, 0 - bne _081D05A4 -_081D058E: - ldr r0, =gMain - ldrh r1, [r0, 0x30] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _081D05AC - adds r0, r4, 0 - bl sub_81D0688 - cmp r0, 0 - beq _081D05AC -_081D05A4: - movs r0, 0x3 - b _081D05CA - .pool -_081D05AC: - ldr r0, =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _081D05C0 - movs r0, 0 - b _081D05CA - .pool -_081D05C0: - adds r1, r4, 0 - adds r1, 0x98 - ldr r0, =sub_81D04C4 - str r0, [r1] - movs r0, 0x4 -_081D05CA: - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81D0548 - - thumb_func_start sub_81D05D4 -sub_81D05D4: @ 81D05D4 - ldr r0, =0x000186ae - bx lr - .pool - thumb_func_end sub_81D05D4 - - thumb_func_start sub_81D05DC -sub_81D05DC: @ 81D05DC - push {r4,lr} - adds r1, r0, 0 - ldrh r0, [r1, 0xC] - adds r2, r0, 0 - cmp r2, 0x18 - bhi _081D05F0 - cmp r2, 0x8 - bls _081D0612 - subs r0, 0x9 - b _081D060C -_081D05F0: - ldrh r3, [r1, 0x10] - adds r2, r3, 0 - cmp r2, 0 - beq _081D0612 - ldrh r0, [r1, 0xC] - subs r0, 0x1B - ldrh r4, [r1, 0xE] - adds r0, r4 - strh r0, [r1, 0xC] - lsls r0, 16 - lsrs r0, 16 - cmp r0, r2 - bcc _081D060E - subs r0, r3, 0x1 -_081D060C: - strh r0, [r1, 0xC] -_081D060E: - movs r0, 0x1 - b _081D0614 -_081D0612: - movs r0, 0 -_081D0614: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81D05DC - - thumb_func_start sub_81D061C -sub_81D061C: @ 81D061C - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0xC] - adds r1, r0, 0 - cmp r1, 0x18 - bhi _081D065C - ldrh r3, [r2, 0xE] - cmp r1, r3 - bcs _081D0640 - adds r0, 0x9 - strh r0, [r2, 0xC] - ldrh r1, [r2, 0x10] - lsls r0, 16 - lsrs r0, 16 - cmp r0, r1 - bcc _081D0658 - subs r0, r1, 0x1 - b _081D0656 -_081D0640: - ldrh r0, [r2, 0x12] - cmp r0, 0 - beq _081D065C - ldrh r1, [r2, 0xC] - ldrh r0, [r2, 0xE] - subs r0, r1, r0 - ldrh r1, [r2, 0x12] - cmp r0, r1 - blt _081D0654 - subs r0, r1, 0x1 -_081D0654: - adds r0, 0x1B -_081D0656: - strh r0, [r2, 0xC] -_081D0658: - movs r0, 0x1 - b _081D065E -_081D065C: - movs r0, 0 -_081D065E: - pop {r1} - bx r1 - thumb_func_end sub_81D061C - - thumb_func_start sub_81D0664 -sub_81D0664: @ 81D0664 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r4, [r5, 0xC] - adds r0, r4, 0 - movs r1, 0x9 - bl __umodsi3 - lsls r0, 16 - cmp r0, 0 - bne _081D067C - movs r0, 0 - b _081D0682 -_081D067C: - subs r0, r4, 0x1 - strh r0, [r5, 0xC] - movs r0, 0x1 -_081D0682: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81D0664 - - thumb_func_start sub_81D0688 -sub_81D0688: @ 81D0688 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r4, [r5, 0xC] - adds r0, r4, 0 - movs r1, 0x9 - bl __umodsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x7 - bgt _081D06BC - cmp r4, 0x1A - bhi _081D06AC - ldrh r0, [r5, 0x10] - subs r0, 0x1 - cmp r4, r0 - bge _081D06BC - b _081D06B4 -_081D06AC: - ldrh r0, [r5, 0x12] - subs r0, 0x1 - cmp r1, r0 - bge _081D06BC -_081D06B4: - adds r0, r4, 0x1 - strh r0, [r5, 0xC] - movs r0, 0x1 - b _081D06BE -_081D06BC: - movs r0, 0 -_081D06BE: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81D0688 - - thumb_func_start sub_81D06C4 -sub_81D06C4: @ 81D06C4 - push {lr} - movs r0, 0xD - bl GetSubstructPtr - ldr r0, [r0, 0x8] - ldrh r0, [r0, 0x2] - pop {r1} - bx r1 - thumb_func_end sub_81D06C4 - - thumb_func_start sub_81D06D4 -sub_81D06D4: @ 81D06D4 - push {lr} - movs r0, 0xD - bl GetSubstructPtr - ldr r0, [r0, 0x8] - ldrh r0, [r0] - pop {r1} - bx r1 - thumb_func_end sub_81D06D4 - - thumb_func_start sub_81D06E4 -sub_81D06E4: @ 81D06E4 - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - adds r6, r2, 0 - movs r0, 0xD - bl GetSubstructPtr - ldr r1, [r0, 0x8] - ldrh r0, [r1, 0x2] - lsls r0, 2 - adds r0, 0x4 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0xE - bne _081D0730 - ldrb r1, [r1, 0x1] - movs r0, 0x64 - adds r4, r1, 0 - muls r4, r0 - ldr r0, =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x2 - adds r2, r5, 0 - bl GetMonData - adds r0, r4, 0 - bl GetLevelFromMonExp - strb r0, [r7] - adds r0, r4, 0 - bl GetMonGender - strb r0, [r6] - b _081D0752 - .pool -_081D0730: - ldrb r0, [r1] - ldrb r1, [r1, 0x1] - bl GetBoxedMonPtr - adds r4, r0, 0 - bl GetBoxMonGender - strb r0, [r6] - adds r0, r4, 0 - bl GetLevelFromBoxMonExp - strb r0, [r7] - adds r0, r4, 0 - movs r1, 0x2 - adds r2, r5, 0 - bl GetBoxMonData -_081D0752: - adds r0, r5, 0 - bl StringGetEnd10 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81D06E4 - - thumb_func_start sub_81D0760 -sub_81D0760: @ 81D0760 - push {r4-r7,lr} - adds r5, r0, 0 - adds r6, r1, 0 - adds r7, r2, 0 - movs r0, 0xD - bl GetSubstructPtr - ldr r1, [r0, 0x8] - ldrh r0, [r1, 0x2] - lsls r0, 2 - adds r0, 0x4 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0xE - bne _081D07AC - ldrb r1, [r1, 0x1] - movs r0, 0x64 - adds r4, r1, 0 - muls r4, r0 - ldr r0, =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - str r0, [r6] - adds r0, r4, 0 - movs r1, 0x1 - bl GetMonData - b _081D07D0 - .pool -_081D07AC: - ldrb r0, [r1] - ldrb r1, [r1, 0x1] - bl GetBoxedMonPtr - adds r4, r0, 0 - movs r1, 0xB - bl GetBoxMonData - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0 - bl GetBoxMonData - str r0, [r6] - adds r0, r4, 0 - movs r1, 0x1 - bl GetBoxMonData -_081D07D0: - str r0, [r7] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81D0760 - - thumb_func_start sub_81D07D8 -sub_81D07D8: @ 81D07D8 - push {lr} - movs r0, 0xD - bl GetSubstructPtr - ldr r1, [r0, 0x8] - ldrh r0, [r1, 0x2] - lsls r0, 2 - adds r0, 0x4 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0xE - beq _081D07FA - ldrb r1, [r1, 0x1] - movs r2, 0x52 - bl GetBoxMonDataAt - b _081D080A -_081D07FA: - ldrb r1, [r1, 0x1] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty - adds r0, r1 - movs r1, 0x52 - bl GetMonData -_081D080A: - pop {r1} - bx r1 - .pool - thumb_func_end sub_81D07D8 - - thumb_func_start sub_81D0814 -sub_81D0814: @ 81D0814 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r5, r0, 0 - ldr r0, [r5, 0x8] - ldrh r1, [r0, 0x2] - lsls r1, 2 - adds r1, 0x4 - adds r1, r0, r1 - ldrb r0, [r1] - cmp r0, 0xE - bne _081D0848 - ldrb r1, [r1, 0x1] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty - adds r0, r1 - movs r1, 0x53 - bl GetMonData - b _081D0852 - .pool -_081D0848: - ldrb r0, [r1] - ldrb r1, [r1, 0x1] - movs r2, 0x53 - bl GetBoxMonDataAt -_081D0852: - mov r12, r0 - movs r0, 0 - strh r0, [r5, 0x10] - strh r0, [r5, 0x12] - movs r6, 0 - ldr r0, =gUnknown_086237F8 - mov r9, r0 - mov r10, r9 -_081D0862: - lsls r2, r6, 2 - mov r3, r9 - adds r1, r2, r3 - movs r0, 0x1 - ldrb r3, [r1] - lsls r0, r3 - subs r4, r0, 0x1 - mov r0, r12 - ands r4, r0 - ldrb r0, [r1, 0x3] - adds r7, r2, 0 - cmp r0, 0 - bne _081D08AC - movs r3, 0 - adds r6, 0x1 - mov r8, r6 - cmp r3, r4 - bge _081D08D6 - adds r6, r5, 0 - adds r6, 0x14 - mov r1, r10 - adds r0, r7, r1 - ldrb r2, [r0, 0x2] -_081D0890: - ldrh r0, [r5, 0x10] - adds r1, r0, 0x1 - strh r1, [r5, 0x10] - lsls r0, 16 - lsrs r0, 14 - adds r0, r6, r0 - adds r1, r2, r3 - str r1, [r0] - adds r3, 0x1 - cmp r3, r4 - blt _081D0890 - b _081D08D6 - .pool -_081D08AC: - movs r3, 0 - adds r6, 0x1 - mov r8, r6 - cmp r3, r4 - bge _081D08D6 - adds r6, r5, 0 - adds r6, 0x78 - mov r1, r10 - adds r0, r7, r1 - ldrb r2, [r0, 0x2] -_081D08C0: - ldrh r0, [r5, 0x12] - adds r1, r0, 0x1 - strh r1, [r5, 0x12] - lsls r0, 16 - lsrs r0, 14 - adds r0, r6, r0 - adds r1, r2, r3 - str r1, [r0] - adds r3, 0x1 - cmp r3, r4 - blt _081D08C0 -_081D08D6: - mov r3, r9 - adds r0, r7, r3 - mov r1, r12 - ldrb r0, [r0] - lsrs r1, r0 - mov r12, r1 - mov r6, r8 - cmp r6, 0x10 - bls _081D0862 - ldrh r0, [r5, 0x10] - cmp r0, 0 - beq _081D0900 - subs r0, 0x1 - movs r1, 0x9 - bl __divsi3 - lsls r1, r0, 3 - adds r1, r0 - movs r0, 0 - strh r1, [r5, 0xE] - b _081D0904 -_081D0900: - strh r0, [r5, 0xE] - movs r0, 0x1B -_081D0904: - strh r0, [r5, 0xC] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81D0814 - - thumb_func_start sub_81D0914 -sub_81D0914: @ 81D0914 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0xD - bl GetSubstructPtr - ldrh r1, [r0, 0x10] - str r1, [r4] - adds r0, 0x14 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81D0914 - - thumb_func_start sub_81D092C -sub_81D092C: @ 81D092C - push {r4,lr} - adds r4, r0, 0 - movs r0, 0xD - bl GetSubstructPtr - ldrh r1, [r0, 0x12] - str r1, [r4] - adds r0, 0x78 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81D092C - - thumb_func_start sub_81D0944 -sub_81D0944: @ 81D0944 - push {lr} - movs r0, 0xD - bl GetSubstructPtr - ldrh r0, [r0, 0xC] - pop {r1} - bx r1 - thumb_func_end sub_81D0944 - - thumb_func_start sub_81D0954 -sub_81D0954: @ 81D0954 - push {lr} - movs r0, 0xD - bl GetSubstructPtr - adds r1, r0, 0 - ldrh r0, [r1, 0xC] - cmp r0, 0x18 - ble _081D096C - subs r0, 0x1B - lsls r0, 2 - adds r1, 0x78 - b _081D0970 -_081D096C: - lsls r0, 2 - adds r1, 0x14 -_081D0970: - adds r1, r0 - ldr r0, [r1] - pop {r1} - bx r1 - thumb_func_end sub_81D0954 - - thumb_func_start sub_81D0978 -sub_81D0978: @ 81D0978 - push {r4,lr} - ldr r1, =0x0000101c - movs r0, 0xE - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081D09A8 - ldr r0, =sub_81D0A6C - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r4, 0x4] - ldr r0, =sub_81D0A58 - str r0, [r4] - movs r0, 0x1 - b _081D09AA - .pool -_081D09A8: - movs r0, 0 -_081D09AA: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81D0978 - - thumb_func_start sub_81D09B0 -sub_81D09B0: @ 81D09B0 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xE - bl GetSubstructPtr - adds r5, r0, 0 - ldr r0, =gUnknown_08624BA0 - lsls r4, 2 - adds r4, r0 - ldr r0, [r4] - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r5, 0x4] - ldr r0, =sub_81D0A58 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81D09B0 - - thumb_func_start sub_81D09E0 -sub_81D09E0: @ 81D09E0 - push {lr} - movs r0, 0xE - bl GetSubstructPtr - ldr r0, [r0] - bl _call_via_r0 - pop {r1} - bx r1 - thumb_func_end sub_81D09E0 - - thumb_func_start sub_81D09F4 -sub_81D09F4: @ 81D09F4 - push {r4,lr} - movs r0, 0xE - bl GetSubstructPtr - adds r4, r0, 0 - ldrb r0, [r4, 0xA] - bl RemoveWindow - ldrb r0, [r4, 0x8] - bl RemoveWindow - ldrb r0, [r4, 0xC] - bl RemoveWindow - ldrb r0, [r4, 0xE] - bl RemoveWindow - adds r0, r4, 0 - bl sub_81D1178 - movs r0, 0x9 - bl FreeSpriteTilesByTag - movs r0, 0xF - bl FreeSpritePaletteByTag - movs r0, 0x10 - bl FreeSpritePaletteByTag - movs r0, 0x11 - bl FreeSpritePaletteByTag - movs r0, 0x12 - bl FreeSpritePaletteByTag - movs r0, 0x13 - bl FreeSpritePaletteByTag - ldr r0, [r4, 0x14] - bl FreeSpriteOamMatrix - ldr r0, [r4, 0x14] - bl DestroySprite - movs r0, 0xE - bl FreePokenavSubstruct - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81D09F4 - - thumb_func_start sub_81D0A58 -sub_81D0A58: @ 81D0A58 - push {lr} - movs r0, 0xE - bl GetSubstructPtr - ldr r0, [r0, 0x4] - bl IsLoopedTaskActive - pop {r1} - bx r1 - thumb_func_end sub_81D0A58 - - thumb_func_start sub_81D0A6C -sub_81D0A6C: @ 81D0A6C - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - movs r0, 0xE - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x9 - bls _081D0A80 - b _081D0C48 -_081D0A80: - lsls r0, r4, 2 - ldr r1, =_081D0A90 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081D0A90: - .4byte _081D0AB8 - .4byte _081D0B04 - .4byte _081D0B74 - .4byte _081D0B88 - .4byte _081D0B9C - .4byte _081D0BB0 - .4byte _081D0BC4 - .4byte _081D0BD8 - .4byte _081D0BE8 - .4byte _081D0C3C -_081D0AB8: - ldr r0, =gUnknown_08624B98 - movs r1, 0x2 - bl InitBgTemplates - ldr r1, =gUnknown_08DDE030 - movs r0, 0 - str r0, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - adds r1, r5, 0 - adds r1, 0x1C - movs r0, 0x2 - bl SetBgTilemapBuffer - ldr r1, =gUnknown_08DDE12C - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - ldr r0, =gUnknown_08DDE010 - movs r1, 0x10 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - b _081D0BBA - .pool -_081D0B04: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _081D0B12 - b _081D0C44 -_081D0B12: - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0x1 - bl sub_8199DF0 - ldr r1, =gUnknown_086240B8 - str r4, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0x1 - bl decompress_and_copy_tile_data_to_vram - ldr r0, =0x0000081c - adds r1, r5, r0 - movs r0, 0x1 - bl SetBgTilemapBuffer - movs r0, 0x20 - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - ldr r0, =gUnknown_08623FF8 - movs r1, 0x20 - movs r2, 0xA0 - bl CopyPaletteIntoBufferUnfaded - ldr r0, =gUnknown_08624098 - movs r1, 0xA0 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - movs r0, 0x1 - b _081D0BBC - .pool -_081D0B74: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081D0C44 - adds r0, r5, 0 - bl sub_81D0E60 - movs r0, 0 - b _081D0C4A -_081D0B88: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081D0C44 - adds r0, r5, 0 - bl sub_81D0FCC - movs r0, 0 - b _081D0C4A -_081D0B9C: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081D0C44 - adds r0, r5, 0 - bl sub_81D10A4 - movs r0, 0 - b _081D0C4A -_081D0BB0: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081D0C44 -_081D0BBA: - movs r0, 0x2 -_081D0BBC: - bl CopyBgTilemapBufferToVram - movs r0, 0 - b _081D0C4A -_081D0BC4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081D0C44 - adds r0, r5, 0 - bl sub_81D1148 - movs r0, 0x1 - b _081D0C4A -_081D0BD8: - adds r0, r5, 0 - bl sub_81D12D8 - movs r0, 0xA - bl sub_81C7BA4 - movs r0, 0 - b _081D0C4A -_081D0BE8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081D0C44 - adds r0, r5, 0 - bl sub_81D13FC - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl HideBg - movs r0, 0x1 - bl sub_81C7AC0 - movs r0, 0 - b _081D0C4A -_081D0C3C: - bl IsPaletteFadeActive - cmp r0, 0 - beq _081D0C48 -_081D0C44: - movs r0, 0x2 - b _081D0C4A -_081D0C48: - movs r0, 0x4 -_081D0C4A: - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81D0A6C - - thumb_func_start sub_81D0C54 -sub_81D0C54: @ 81D0C54 - push {lr} - cmp r0, 0 - beq _081D0C60 - cmp r0, 0x1 - beq _081D0C70 - b _081D0C7C -_081D0C60: - movs r0, 0x5 - bl PlaySE - movs r0, 0 - bl sub_81C7AC0 - movs r0, 0 - b _081D0C7E -_081D0C70: - bl IsPaletteFadeActive - cmp r0, 0 - beq _081D0C7C - movs r0, 0x2 - b _081D0C7E -_081D0C7C: - movs r0, 0x4 -_081D0C7E: - pop {r1} - bx r1 - thumb_func_end sub_81D0C54 - - thumb_func_start sub_81D0C84 -sub_81D0C84: @ 81D0C84 - push {r4,r5,lr} - adds r5, r0, 0 - movs r0, 0xE - bl GetSubstructPtr - adds r4, r0, 0 - cmp r5, 0x6 - bhi _081D0D24 - lsls r0, r5, 2 - ldr r1, =_081D0CA4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081D0CA4: - .4byte _081D0CC0 - .4byte _081D0CD0 - .4byte _081D0CE4 - .4byte _081D0CEE - .4byte _081D0CF8 - .4byte _081D0D02 - .4byte _081D0D16 -_081D0CC0: - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl sub_81D11D8 - movs r0, 0 - b _081D0D26 -_081D0CD0: - adds r0, r4, 0 - bl sub_81D1234 - cmp r0, 0 - bne _081D0D20 - adds r0, r4, 0 - bl sub_81D0FF0 - movs r0, 0x1 - b _081D0D26 -_081D0CE4: - adds r0, r4, 0 - bl sub_81D12D8 - movs r0, 0x1 - b _081D0D26 -_081D0CEE: - adds r0, r4, 0 - bl sub_81D10D0 - movs r0, 0x1 - b _081D0D26 -_081D0CF8: - adds r0, r4, 0 - bl sub_81D0E84 - movs r0, 0x1 - b _081D0D26 -_081D0D02: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081D0D20 - adds r0, r4, 0 - bl sub_81D11FC - movs r0, 0 - b _081D0D26 -_081D0D16: - adds r0, r4, 0 - bl sub_81D1234 - cmp r0, 0 - beq _081D0D24 -_081D0D20: - movs r0, 0x2 - b _081D0D26 -_081D0D24: - movs r0, 0x4 -_081D0D26: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81D0C84 - - thumb_func_start sub_81D0D2C -sub_81D0D2C: @ 81D0D2C - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xE - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x1 - beq _081D0D5C - cmp r4, 0x1 - bgt _081D0D46 - cmp r4, 0 - beq _081D0D4C - b _081D0D84 -_081D0D46: - cmp r4, 0x2 - beq _081D0D76 - b _081D0D84 -_081D0D4C: - movs r0, 0x5 - bl PlaySE - adds r0, r5, 0 - bl sub_81D1448 - movs r0, 0 - b _081D0D86 -_081D0D5C: - adds r0, r5, 0 - bl sub_81D1524 - cmp r0, 0 - bne _081D0D80 - adds r0, r5, 0 - bl sub_81D0EFC - movs r0, 0xB - bl sub_81C7BA4 - movs r0, 0 - b _081D0D86 -_081D0D76: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081D0D84 -_081D0D80: - movs r0, 0x2 - b _081D0D86 -_081D0D84: - movs r0, 0x4 -_081D0D86: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81D0D2C - - thumb_func_start sub_81D0D8C -sub_81D0D8C: @ 81D0D8C - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xE - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x1 - beq _081D0DC0 - cmp r4, 0x1 - bgt _081D0DA6 - cmp r4, 0 - beq _081D0DB0 - b _081D0DF6 -_081D0DA6: - cmp r4, 0x2 - beq _081D0DD4 - cmp r4, 0x3 - beq _081D0DE8 - b _081D0DF6 -_081D0DB0: - movs r0, 0x5 - bl PlaySE - adds r0, r5, 0 - bl sub_81D1500 - movs r0, 0 - b _081D0DF8 -_081D0DC0: - adds r0, r5, 0 - bl sub_81D1524 - cmp r0, 0 - bne _081D0DF2 - adds r0, r5, 0 - bl sub_81D1448 - movs r0, 0 - b _081D0DF8 -_081D0DD4: - adds r0, r5, 0 - bl sub_81D1524 - cmp r0, 0 - bne _081D0DF2 - adds r0, r5, 0 - bl sub_81D0EFC - movs r0, 0 - b _081D0DF8 -_081D0DE8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081D0DF6 -_081D0DF2: - movs r0, 0x2 - b _081D0DF8 -_081D0DF6: - movs r0, 0x4 -_081D0DF8: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81D0D8C - - thumb_func_start sub_81D0E00 -sub_81D0E00: @ 81D0E00 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xE - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x1 - beq _081D0E30 - cmp r4, 0x1 - bgt _081D0E1A - cmp r4, 0 - beq _081D0E20 - b _081D0E58 -_081D0E1A: - cmp r4, 0x2 - beq _081D0E4A - b _081D0E58 -_081D0E20: - movs r0, 0x5 - bl PlaySE - adds r0, r5, 0 - bl sub_81D1500 - movs r0, 0 - b _081D0E5A -_081D0E30: - adds r0, r5, 0 - bl sub_81D1524 - cmp r0, 0 - bne _081D0E54 - adds r0, r5, 0 - bl sub_81D0E84 - movs r0, 0xA - bl sub_81C7BA4 - movs r0, 0 - b _081D0E5A -_081D0E4A: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081D0E58 -_081D0E54: - movs r0, 0x2 - b _081D0E5A -_081D0E58: - movs r0, 0x4 -_081D0E5A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81D0E00 - - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/pokenav_unk_2.s b/asm/pokenav_unk_2.s deleted file mode 100644 index 89a8bde9e..000000000 --- a/asm/pokenav_unk_2.s +++ /dev/null @@ -1,2239 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - -@ File centered around AllocSubstruct(2) - - - thumb_func_start sub_81C9924 -sub_81C9924: @ 81C9924 - push {lr} - bl sub_81C9958 - adds r1, r0, 0 - cmp r1, 0 - beq _081C9938 - movs r0, 0 - strb r0, [r1, 0xD] - movs r0, 0x1 - b _081C993A -_081C9938: - movs r0, 0 -_081C993A: - pop {r1} - bx r1 - thumb_func_end sub_81C9924 - - thumb_func_start sub_81C9940 -sub_81C9940: @ 81C9940 - push {lr} - bl sub_81C9958 - adds r1, r0, 0 - cmp r1, 0 - beq _081C9952 - movs r0, 0x1 - strb r0, [r1, 0xD] - b _081C9954 -_081C9952: - movs r0, 0 -_081C9954: - pop {r1} - bx r1 - thumb_func_end sub_81C9940 - - thumb_func_start sub_81C9958 -sub_81C9958: @ 81C9958 - push {r4,lr} - ldr r1, =0x0000088c - movs r0, 0x2 - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081C997A - movs r0, 0 - strb r0, [r4, 0xC] - ldr r0, =sub_81C9A10 - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r4, 0x4] - ldr r0, =sub_81C99FC - str r0, [r4] -_081C997A: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81C9958 - - thumb_func_start sub_81C9990 -sub_81C9990: @ 81C9990 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x2 - bl GetSubstructPtr - adds r5, r0, 0 - ldr r0, =gUnknown_086201A0 - lsls r4, 2 - adds r4, r0 - ldr r0, [r4] - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r5, 0x4] - ldr r0, =sub_81C99FC - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C9990 - - thumb_func_start sub_81C99C0 -sub_81C99C0: @ 81C99C0 - push {lr} - movs r0, 0x2 - bl GetSubstructPtr - ldr r0, [r0] - bl _call_via_r0 - pop {r1} - bx r1 - thumb_func_end sub_81C99C0 - - thumb_func_start sub_81C99D4 -sub_81C99D4: @ 81C99D4 - push {r4,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r4, r0, 0 - bl sub_81CA7F4 - ldrb r0, [r4, 0x8] - bl RemoveWindow - bl sub_81C9FEC - bl sub_81CA994 - movs r0, 0x2 - bl FreePokenavSubstruct - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81C99D4 - - thumb_func_start sub_81C99FC -sub_81C99FC: @ 81C99FC - push {lr} - movs r0, 0x2 - bl GetSubstructPtr - ldr r0, [r0, 0x4] - bl IsLoopedTaskActive - pop {r1} - bx r1 - thumb_func_end sub_81C99FC - - thumb_func_start sub_81C9A10 -sub_81C9A10: @ 81C9A10 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0x2 - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x9 - bls _081C9A24 - b _081C9C60 -_081C9A24: - lsls r0, r4, 2 - ldr r1, =_081C9A34 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081C9A34: - .4byte _081C9A5C - .4byte _081C9AEC - .4byte _081C9B30 - .4byte _081C9B88 - .4byte _081C9B9E - .4byte _081C9BA4 - .4byte _081C9BB6 - .4byte _081C9BC0 - .4byte _081C9C0E - .4byte _081C9C4C -_081C9A5C: - ldr r0, =gUnknown_08620194 - movs r1, 0x3 - bl InitBgTemplates - ldr r1, =gPokenavMessageBox_Gfx - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - adds r1, r5, 0 - adds r1, 0x8C - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, =gPokenavMessageBox_Tilemap - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - ldr r0, =gPokenavMessageBox_Pal - movs r1, 0x10 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY -_081C9AD6: - movs r0, 0 - b _081C9C62 - .pool -_081C9AEC: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _081C9AFA - b _081C9C5C -_081C9AFA: - ldr r1, =gUnknown_0861FD6C - str r0, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r1, =gUnknown_0861FFF4 - movs r0, 0x1 - str r0, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r0, =gUnknown_0861FD4C - movs r1, 0x20 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - b _081C9AD6 - .pool -_081C9B30: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _081C9B3E - b _081C9C5C -_081C9B3E: - ldr r1, =gUnknown_0861FC98 - str r0, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r1, =gUnknown_0861FCAC - movs r0, 0x1 - str r0, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r0, =gUnknown_0861FC78 - movs r1, 0x30 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - bl sub_81C9894 - cmp r0, 0x3 - beq _081C9B76 - bl sub_81C9894 - cmp r0, 0x4 - bne _081C9AD6 -_081C9B76: - bl sub_81CA850 - b _081C9AD6 - .pool -_081C9B88: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081C9C5C - bl sub_81CA6E0 - bl sub_81CA7D4 -_081C9B9A: - movs r0, 0x1 - b _081C9C62 -_081C9B9E: - bl sub_81C9FC4 - b _081C9B9A -_081C9BA4: - bl sub_81CA714 - bl sub_81CA02C - bl sub_81CA640 - bl sub_81CA0C8 - b _081C9AD6 -_081C9BB6: - bl sub_81CA7C4 - cmp r0, 0 - bne _081C9C5C - b _081C9B9A -_081C9BC0: - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - ldrb r0, [r5, 0xD] - cmp r0, 0 - beq _081C9BE0 - movs r0, 0x1 - bl sub_81C7AC0 - b _081C9BEC -_081C9BE0: - movs r0, 0x6E - bl PlaySE - movs r0, 0x3 - bl sub_81C7AC0 -_081C9BEC: - bl sub_81C9894 - cmp r0, 0x3 - beq _081C9BFE - cmp r0, 0x4 - bne _081C9C06 - movs r0, 0x7 - bl LoadLeftHeaderGfxForIndex -_081C9BFE: - movs r0, 0x1 - bl LoadLeftHeaderGfxForIndex - b _081C9AD6 -_081C9C06: - movs r0, 0 - bl LoadLeftHeaderGfxForIndex - b _081C9AD6 -_081C9C0E: - bl IsPaletteFadeActive - cmp r0, 0 - bne _081C9C5C - bl sub_81C9894 - cmp r0, 0x3 - beq _081C9C2C - cmp r0, 0x4 - bne _081C9C38 - movs r0, 0x7 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 -_081C9C2C: - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 - b _081C9C42 -_081C9C38: - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 -_081C9C42: - bl sub_81CA20C - bl titlescreen_0 - b _081C9B9A -_081C9C4C: - bl sub_81CA324 - cmp r0, 0 - bne _081C9C5C - bl sub_81C8010 - cmp r0, 0 - beq _081C9C60 -_081C9C5C: - movs r0, 0x2 - b _081C9C62 -_081C9C60: - movs r0, 0x4 -_081C9C62: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81C9A10 - - thumb_func_start sub_81C9C6C -sub_81C9C6C: @ 81C9C6C - push {lr} - cmp r0, 0 - beq _081C9C78 - cmp r0, 0x1 - beq _081C9C8E - b _081C9CA2 -_081C9C78: - bl sub_81CAA3C - bl sub_81CA278 - bl sub_81CA714 - movs r0, 0x5 - bl PlaySE - movs r0, 0 - b _081C9CA4 -_081C9C8E: - bl sub_81CA324 - cmp r0, 0 - bne _081C9C9E - bl sub_81CA7C4 - cmp r0, 0 - beq _081C9CA2 -_081C9C9E: - movs r0, 0x2 - b _081C9CA4 -_081C9CA2: - movs r0, 0x4 -_081C9CA4: - pop {r1} - bx r1 - thumb_func_end sub_81C9C6C - - thumb_func_start sub_81C9CA8 -sub_81C9CA8: @ 81C9CA8 - push {lr} - cmp r0, 0x1 - beq _081C9CDC - cmp r0, 0x1 - bgt _081C9CB8 - cmp r0, 0 - beq _081C9CC2 - b _081C9D3C -_081C9CB8: - cmp r0, 0x2 - beq _081C9CFA - cmp r0, 0x3 - beq _081C9D14 - b _081C9D3C -_081C9CC2: - bl sub_81CA9C8 - bl sub_81CA2DC - movs r0, 0 - movs r1, 0 - bl sub_81C7FC4 - movs r0, 0x5 - bl PlaySE - movs r0, 0 - b _081C9D3E -_081C9CDC: - bl sub_81CA324 - cmp r0, 0 - bne _081C9D34 - bl sub_81C8010 - cmp r0, 0 - bne _081C9D34 - bl sub_81CA0C8 - movs r0, 0x1 - bl LoadLeftHeaderGfxForIndex - movs r0, 0 - b _081C9D3E -_081C9CFA: - bl sub_81CA20C - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 - bl sub_81CA818 - bl sub_81CA714 - movs r0, 0 - b _081C9D3E -_081C9D14: - bl sub_81CA324 - cmp r0, 0 - bne _081C9D34 - bl sub_81C8010 - cmp r0, 0 - bne _081C9D34 - bl sub_81CA89C - cmp r0, 0 - bne _081C9D34 - bl sub_81CA7C4 - cmp r0, 0 - beq _081C9D38 -_081C9D34: - movs r0, 0x2 - b _081C9D3E -_081C9D38: - bl sub_81CA9D8 -_081C9D3C: - movs r0, 0x4 -_081C9D3E: - pop {r1} - bx r1 - thumb_func_end sub_81C9CA8 - - thumb_func_start sub_81C9D44 -sub_81C9D44: @ 81C9D44 - push {lr} - cmp r0, 0x1 - beq _081C9D72 - cmp r0, 0x1 - bgt _081C9D54 - cmp r0, 0 - beq _081C9D5E - b _081C9DD2 -_081C9D54: - cmp r0, 0x2 - beq _081C9D90 - cmp r0, 0x3 - beq _081C9DAA - b _081C9DD2 -_081C9D5E: - bl sub_81CA9C8 - bl sub_81CA2DC - movs r0, 0x1 - movs r1, 0 - bl sub_81C7FC4 - movs r0, 0 - b _081C9DD4 -_081C9D72: - bl sub_81CA324 - cmp r0, 0 - bne _081C9DCA - bl sub_81C8010 - cmp r0, 0 - bne _081C9DCA - bl sub_81CA0C8 - movs r0, 0 - bl LoadLeftHeaderGfxForIndex - movs r0, 0 - b _081C9DD4 -_081C9D90: - bl sub_81CA20C - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 - bl sub_81CA864 - bl sub_81CA714 - movs r0, 0 - b _081C9DD4 -_081C9DAA: - bl sub_81CA324 - cmp r0, 0 - bne _081C9DCA - bl sub_81C8010 - cmp r0, 0 - bne _081C9DCA - bl sub_81CA89C - cmp r0, 0 - bne _081C9DCA - bl sub_81CA7C4 - cmp r0, 0 - beq _081C9DCE -_081C9DCA: - movs r0, 0x2 - b _081C9DD4 -_081C9DCE: - bl sub_81CA9D8 -_081C9DD2: - movs r0, 0x4 -_081C9DD4: - pop {r1} - bx r1 - thumb_func_end sub_81C9D44 - - thumb_func_start sub_81C9DD8 -sub_81C9DD8: @ 81C9DD8 - push {lr} - cmp r0, 0x1 - beq _081C9E04 - cmp r0, 0x1 - bgt _081C9DE8 - cmp r0, 0 - beq _081C9DF2 - b _081C9E50 -_081C9DE8: - cmp r0, 0x2 - beq _081C9E1A - cmp r0, 0x3 - beq _081C9E30 - b _081C9E50 -_081C9DF2: - bl sub_81CA9C8 - bl sub_81CA2DC - movs r0, 0x5 - bl PlaySE - movs r0, 0 - b _081C9E52 -_081C9E04: - bl sub_81CA324 - cmp r0, 0 - bne _081C9E48 - movs r0, 0x7 - bl LoadLeftHeaderGfxForIndex - bl sub_81CA0C8 - movs r0, 0 - b _081C9E52 -_081C9E1A: - bl sub_81CA20C - movs r0, 0x7 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 - bl sub_81CA714 - movs r0, 0 - b _081C9E52 -_081C9E30: - bl sub_81CA324 - cmp r0, 0 - bne _081C9E48 - bl sub_81C8010 - cmp r0, 0 - bne _081C9E48 - bl sub_81CA89C - cmp r0, 0 - beq _081C9E4C -_081C9E48: - movs r0, 0x2 - b _081C9E52 -_081C9E4C: - bl sub_81CA9D8 -_081C9E50: - movs r0, 0x4 -_081C9E52: - pop {r1} - bx r1 - thumb_func_end sub_81C9DD8 - - thumb_func_start sub_81C9E58 -sub_81C9E58: @ 81C9E58 - push {lr} - cmp r0, 0x1 - beq _081C9E86 - cmp r0, 0x1 - bgt _081C9E68 - cmp r0, 0 - beq _081C9E72 - b _081C9EC2 -_081C9E68: - cmp r0, 0x2 - beq _081C9E9E - cmp r0, 0x3 - beq _081C9EAA - b _081C9EC2 -_081C9E72: - bl sub_81CA9C8 - bl sub_81CA2DC - movs r0, 0x7 - movs r1, 0 - bl sub_81C7FC4 - movs r0, 0 - b _081C9EC4 -_081C9E86: - bl sub_81CA324 - cmp r0, 0 - bne _081C9EBA - bl sub_81C8010 - cmp r0, 0 - bne _081C9EBA - bl sub_81CA0C8 - movs r0, 0 - b _081C9EC4 -_081C9E9E: - bl sub_81CA20C - bl sub_81CA714 - movs r0, 0 - b _081C9EC4 -_081C9EAA: - bl sub_81CA324 - cmp r0, 0 - bne _081C9EBA - bl sub_81CA89C - cmp r0, 0 - beq _081C9EBE -_081C9EBA: - movs r0, 0x2 - b _081C9EC4 -_081C9EBE: - bl sub_81CA9D8 -_081C9EC2: - movs r0, 0x4 -_081C9EC4: - pop {r1} - bx r1 - thumb_func_end sub_81C9E58 - - thumb_func_start sub_81C9EC8 -sub_81C9EC8: @ 81C9EC8 - push {lr} - cmp r0, 0 - beq _081C9ED4 - cmp r0, 0x1 - beq _081C9EE2 - b _081C9EF0 -_081C9ED4: - movs r0, 0x20 - bl PlaySE - bl sub_81CA770 - movs r0, 0 - b _081C9EF2 -_081C9EE2: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081C9EF0 - movs r0, 0x2 - b _081C9EF2 -_081C9EF0: - movs r0, 0x4 -_081C9EF2: - pop {r1} - bx r1 - thumb_func_end sub_81C9EC8 - - thumb_func_start sub_81C9EF8 -sub_81C9EF8: @ 81C9EF8 - push {lr} - cmp r0, 0 - beq _081C9F04 - cmp r0, 0x1 - beq _081C9F12 - b _081C9F20 -_081C9F04: - movs r0, 0x5 - bl PlaySE - bl sub_81CA714 - movs r0, 0 - b _081C9F22 -_081C9F12: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081C9F20 - movs r0, 0x2 - b _081C9F22 -_081C9F20: - movs r0, 0x4 -_081C9F22: - pop {r1} - bx r1 - thumb_func_end sub_81C9EF8 - - thumb_func_start sub_81C9F28 -sub_81C9F28: @ 81C9F28 - push {lr} - cmp r0, 0x1 - beq _081C9F52 - cmp r0, 0x1 - bgt _081C9F38 - cmp r0, 0 - beq _081C9F42 - b _081C9FBC -_081C9F38: - cmp r0, 0x2 - beq _081C9F96 - cmp r0, 0x3 - beq _081C9FB0 - b _081C9FBC -_081C9F42: - bl sub_81C98C4 - lsls r0, 16 - lsrs r0, 16 - bl sub_81C7BA4 - movs r0, 0 - b _081C9FBE -_081C9F52: - bl IsDma3ManagerBusyWithBgCopy_ - cmp r0, 0 - bne _081C9FB8 - bl sub_81C7880 - bl sub_81CA9C8 - bl sub_81CA2DC - bl sub_81C9894 - cmp r0, 0x3 - beq _081C9F7A - cmp r0, 0x4 - bne _081C9F84 - movs r0, 0x7 - movs r1, 0 - bl sub_81C7FC4 -_081C9F7A: - movs r0, 0x1 - movs r1, 0 - bl sub_81C7FC4 - b _081C9F8C -_081C9F84: - movs r0, 0 - movs r1, 0 - bl sub_81C7FC4 -_081C9F8C: - movs r0, 0x5 - bl PlaySE - movs r0, 0 - b _081C9FBE -_081C9F96: - bl sub_81CA324 - cmp r0, 0 - bne _081C9FB8 - bl sub_81C8010 - cmp r0, 0 - bne _081C9FB8 - movs r0, 0 - bl sub_81C7AC0 - movs r0, 0 - b _081C9FBE -_081C9FB0: - bl IsPaletteFadeActive - cmp r0, 0 - beq _081C9FBC -_081C9FB8: - movs r0, 0x2 - b _081C9FBE -_081C9FBC: - movs r0, 0x4 -_081C9FBE: - pop {r1} - bx r1 - thumb_func_end sub_81C9F28 - - thumb_func_start sub_81C9FC4 -sub_81C9FC4: @ 81C9FC4 - push {r4,r5,lr} - movs r5, 0 - ldr r4, =gUnknown_086201C4 -_081C9FCA: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x1 - bls _081C9FCA - ldr r0, =gUnknown_086201D4 - bl Pokenav_AllocAndLoadPalettes - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C9FC4 - - thumb_func_start sub_81C9FEC -sub_81C9FEC: @ 81C9FEC - push {lr} - movs r0, 0x3 - bl FreeSpriteTilesByTag - movs r0, 0x1 - bl FreeSpriteTilesByTag - movs r0, 0x4 - bl FreeSpritePaletteByTag - movs r0, 0x5 - bl FreeSpritePaletteByTag - movs r0, 0x6 - bl FreeSpritePaletteByTag - movs r0, 0x7 - bl FreeSpritePaletteByTag - movs r0, 0x8 - bl FreeSpritePaletteByTag - movs r0, 0x3 - bl FreeSpritePaletteByTag - bl sub_81CA094 - bl sub_81CA698 - pop {r0} - bx r0 - thumb_func_end sub_81C9FEC - - thumb_func_start sub_81CA02C -sub_81CA02C: @ 81CA02C - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r0, 0x2 - bl GetSubstructPtr - movs r2, 0 - adds r0, 0x2C - mov r8, r0 -_081CA03E: - movs r4, 0 - lsls r0, r2, 2 - lsls r1, r2, 4 - adds r7, r2, 0x1 - adds r0, r2 - lsls r0, 18 - movs r2, 0xA0 - lsls r2, 14 - adds r5, r0, r2 - mov r0, r8 - adds r6, r1, r0 -_081CA054: - ldr r0, =gUnknown_0862034C - movs r1, 0x8C - asrs r2, r5, 16 - movs r3, 0x3 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, =gSprites - adds r1, r0 - stm r6!, {r1} - lsls r0, r4, 5 - strh r0, [r1, 0x24] - adds r4, 0x1 - cmp r4, 0x3 - ble _081CA054 - adds r2, r7, 0 - cmp r2, 0x5 - ble _081CA03E - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA02C - - thumb_func_start sub_81CA094 -sub_81CA094: @ 81CA094 - push {r4-r7,lr} - movs r0, 0x2 - bl GetSubstructPtr - movs r1, 0 - adds r7, r0, 0 - adds r7, 0x2C -_081CA0A2: - lsls r0, r1, 4 - adds r6, r1, 0x1 - adds r4, r0, r7 - movs r5, 0x3 -_081CA0AA: - ldr r0, [r4] - bl FreeSpriteOamMatrix - ldm r4!, {r0} - bl DestroySprite - subs r5, 0x1 - cmp r5, 0 - bge _081CA0AA - adds r1, r6, 0 - cmp r1, 0x5 - ble _081CA0A2 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81CA094 - - thumb_func_start sub_81CA0C8 -sub_81CA0C8: @ 81CA0C8 - push {lr} - bl sub_81C9894 - lsls r2, r0, 3 - subs r2, r0 - lsls r2, 2 - ldr r1, =gUnknown_08620244 - adds r0, r2, r1 - subs r1, 0x4 - adds r2, r1 - ldrh r1, [r2] - ldrh r2, [r2, 0x2] - bl sub_81CA0EC - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA0C8 - - thumb_func_start sub_81CA0EC -sub_81CA0EC: @ 81CA0EC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - adds r6, r0, 0 - str r1, [sp, 0x14] - str r2, [sp] - movs r0, 0x2 - bl GetSubstructPtr - mov r10, r0 - movs r0, 0x3 - bl GetSpriteTileStartByTag - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x4] - movs r1, 0 -_081CA114: - ldr r0, [r6] - cmp r0, 0 - beq _081CA1B0 - movs r5, 0 - lsls r2, r1, 4 - mov r0, r10 - adds r0, 0x2C - lsls r3, r1, 2 - mov r9, r3 - movs r4, 0x10 - add r4, r10 - mov r8, r4 - adds r7, r6, 0x4 - str r7, [sp, 0xC] - ldr r3, [sp, 0x14] - ldr r4, [sp] - adds r3, r4 - str r3, [sp, 0x8] - adds r1, 0x1 - str r1, [sp, 0x10] - adds r4, r2, r0 -_081CA13E: - ldr r3, [r4] - ldr r0, [r6] - ldrh r2, [r0] - ldr r7, [sp, 0x4] - adds r2, r7 - lsls r0, r5, 3 - adds r2, r0 - ldr r1, =0x000003ff - adds r0, r1, 0 - ands r2, r0 - ldrh r0, [r3, 0x4] - ldr r7, =0xfffffc00 - adds r1, r7, 0 - ands r0, r1 - orrs r0, r2 - strh r0, [r3, 0x4] - ldr r0, [r6] - ldrh r0, [r0, 0x2] - adds r0, 0x4 - lsls r0, 16 - lsrs r0, 16 - bl IndexOfSpritePaletteTag - ldr r3, [r4] - lsls r0, 4 - ldrb r2, [r3, 0x5] - movs r1, 0xF - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x5] - ldr r2, [r4] - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, [r4] - mov r1, sp - ldrh r1, [r1, 0x14] - strh r1, [r0, 0x22] - ldr r1, [r4] - movs r0, 0x8C - strh r0, [r1, 0x20] - ldm r4!, {r1} - lsls r0, r5, 5 - strh r0, [r1, 0x24] - adds r5, 0x1 - cmp r5, 0x3 - ble _081CA13E - mov r1, r8 - add r1, r9 - movs r0, 0x1 - b _081CA1EC - .pool -_081CA1B0: - lsls r2, r1, 4 - mov r0, r10 - adds r0, 0x2C - lsls r3, r1, 2 - mov r9, r3 - movs r4, 0x10 - add r4, r10 - mov r8, r4 - adds r6, 0x4 - str r6, [sp, 0xC] - ldr r7, [sp, 0x14] - ldr r3, [sp] - adds r7, r3 - str r7, [sp, 0x8] - adds r1, 0x1 - str r1, [sp, 0x10] - movs r3, 0x4 - adds r2, r0 - movs r5, 0x3 -_081CA1D6: - ldm r2!, {r1} - adds r1, 0x3E - ldrb r0, [r1] - orrs r0, r3 - strb r0, [r1] - subs r5, 0x1 - cmp r5, 0 - bge _081CA1D6 - mov r1, r8 - add r1, r9 - movs r0, 0 -_081CA1EC: - str r0, [r1] - ldr r6, [sp, 0xC] - ldr r4, [sp, 0x8] - str r4, [sp, 0x14] - ldr r1, [sp, 0x10] - cmp r1, 0x5 - ble _081CA114 - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81CA0EC - - thumb_func_start sub_81CA20C -sub_81CA20C: @ 81CA20C - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r0, 0x2 - bl GetSubstructPtr - adds r6, r0, 0 - bl sub_81C98A4 - mov r8, r0 - movs r7, 0 - movs r5, 0 - adds r4, r6, 0 - adds r4, 0x2C -_081CA228: - lsls r0, r5, 2 - adds r1, r6, 0 - adds r1, 0x10 - adds r1, r0 - ldr r0, [r1] - cmp r0, 0 - beq _081CA25C - adds r0, r7, 0 - adds r7, 0x1 - cmp r0, r8 - bne _081CA244 - movs r2, 0x82 - strb r5, [r6, 0xB] - b _081CA246 -_081CA244: - movs r2, 0x8C -_081CA246: - adds r0, r4, 0 - movs r1, 0x80 - lsls r1, 1 - movs r3, 0xC - bl sub_81CA35C - adds r0, r4, 0 - movs r1, 0 - bl sub_81CA448 - b _081CA264 -_081CA25C: - adds r0, r4, 0 - movs r1, 0x1 - bl sub_81CA448 -_081CA264: - adds r4, 0x10 - adds r5, 0x1 - cmp r5, 0x5 - ble _081CA228 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81CA20C - - thumb_func_start sub_81CA278 -sub_81CA278: @ 81CA278 - push {r4,r5,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r4, r0, 0 - bl sub_81C98A4 - adds r3, r0, 0 - movs r2, 0 - movs r5, 0 - ldr r0, [r4, 0x10] - cmp r0, 0 - beq _081CA298 - cmp r5, r3 - beq _081CA2B2 -_081CA296: - adds r5, 0x1 -_081CA298: - adds r2, 0x1 - cmp r2, 0x5 - bgt _081CA2B2 - lsls r0, r2, 2 - adds r1, r4, 0 - adds r1, 0x10 - adds r1, r0 - ldr r0, [r1] - cmp r0, 0 - beq _081CA298 - cmp r5, r3 - bne _081CA296 - adds r5, r2, 0 -_081CA2B2: - ldrb r0, [r4, 0xB] - lsls r0, 4 - adds r0, 0x2C - adds r0, r4, r0 - movs r1, 0x82 - movs r2, 0x8C - movs r3, 0x4 - bl sub_81CA35C - lsls r0, r5, 4 - adds r0, 0x2C - adds r0, r4, r0 - movs r1, 0x8C - movs r2, 0x82 - movs r3, 0x4 - bl sub_81CA35C - strb r5, [r4, 0xB] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81CA278 - - thumb_func_start sub_81CA2DC -sub_81CA2DC: @ 81CA2DC - push {r4-r6,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r6, r0, 0 - movs r5, 0 - adds r4, r6, 0 - adds r4, 0x2C -_081CA2EC: - lsls r0, r5, 2 - adds r1, r6, 0 - adds r1, 0x10 - adds r1, r0 - ldr r0, [r1] - cmp r0, 0 - beq _081CA316 - ldrb r0, [r6, 0xB] - cmp r0, r5 - beq _081CA310 - adds r0, r4, 0 - movs r1, 0x8C - movs r2, 0x80 - lsls r2, 1 - movs r3, 0x8 - bl sub_81CA35C - b _081CA316 -_081CA310: - adds r0, r4, 0 - bl sub_81CA3B4 -_081CA316: - adds r4, 0x10 - adds r5, 0x1 - cmp r5, 0x5 - ble _081CA2EC - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_81CA2DC - - thumb_func_start sub_81CA324 -sub_81CA324: @ 81CA324 - push {r4,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r3, r0, 0 - movs r2, 0 - ldr r4, =SpriteCallbackDummy - adds r1, r3, 0 - adds r1, 0x2C -_081CA336: - ldr r0, [r1] - ldr r0, [r0, 0x1C] - cmp r0, r4 - bne _081CA354 - adds r1, 0x10 - adds r2, 0x1 - cmp r2, 0x5 - ble _081CA336 - ldrb r0, [r3, 0xC] - cmp r0, 0 - bne _081CA354 - movs r0, 0 - b _081CA356 - .pool -_081CA354: - movs r0, 0x1 -_081CA356: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CA324 - - thumb_func_start sub_81CA35C -sub_81CA35C: @ 81CA35C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r4, r0, 0 - adds r5, r1, 0 - mov r9, r2 - adds r6, r3, 0 - ldr r0, =sub_81CA474 - mov r8, r0 - subs r0, r2, r5 - lsls r0, 4 - adds r1, r6, 0 - bl __divsi3 - adds r3, r0, 0 - movs r1, 0x3 - lsls r2, r5, 4 -_081CA380: - ldr r0, [r4] - strh r5, [r0, 0x20] - ldr r0, [r4] - strh r6, [r0, 0x2E] - ldr r0, [r4] - strh r3, [r0, 0x30] - ldr r0, [r4] - strh r2, [r0, 0x32] - ldr r0, [r4] - mov r7, r9 - strh r7, [r0, 0x3C] - ldm r4!, {r0} - mov r7, r8 - str r7, [r0, 0x1C] - subs r1, 0x1 - cmp r1, 0 - bge _081CA380 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA35C - - thumb_func_start sub_81CA3B4 -sub_81CA3B4: @ 81CA3B4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - movs r0, 0x2 - bl GetSubstructPtr - adds r7, r0, 0 - movs r5, 0 - mov r8, r5 -_081CA3C8: - ldr r2, [r4] - ldrb r1, [r2, 0x1] - movs r3, 0xD - negs r3, r3 - adds r0, r3, 0 - ands r1, r0 - movs r0, 0x4 - orrs r1, r0 - strb r1, [r2, 0x1] - ldr r2, [r4] - ldrb r0, [r2, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r2, 0x1] - ldr r1, [r4] - ldr r0, =sub_81CA4AC - str r0, [r1, 0x1C] - movs r6, 0x8 - strh r6, [r1, 0x2E] - ldr r0, [r4] - mov r1, r8 - strh r1, [r0, 0x30] - ldr r0, [r4] - strh r5, [r0, 0x3C] - ldr r0, [r4] - bl InitSpriteAffineAnim - ldm r4!, {r0} - movs r1, 0 - bl StartSpriteAffineAnim - adds r5, 0x1 - cmp r5, 0x3 - ble _081CA3C8 - movs r0, 0x52 - movs r1, 0x10 - bl SetGpuReg - ldr r0, =sub_81CA580 - movs r1, 0x3 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r6, [r1, 0x8] - ldrb r0, [r7, 0xC] - adds r0, 0x1 - strb r0, [r7, 0xC] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA3B4 - - thumb_func_start sub_81CA448 -sub_81CA448: @ 81CA448 - push {r4-r6,lr} - adds r5, r0, 0 - movs r0, 0x1 - ands r1, r0 - lsls r4, r1, 2 - movs r6, 0x5 - negs r6, r6 - movs r3, 0x3 -_081CA458: - ldm r5!, {r0} - adds r0, 0x3E - ldrb r2, [r0] - adds r1, r6, 0 - ands r1, r2 - orrs r1, r4 - strb r1, [r0] - subs r3, 0x1 - cmp r3, 0 - bge _081CA458 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_81CA448 - - thumb_func_start sub_81CA474 -sub_81CA474: @ 81CA474 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - subs r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - beq _081CA49A - ldrh r0, [r2, 0x30] - ldrh r1, [r2, 0x32] - adds r0, r1 - strh r0, [r2, 0x32] - lsls r0, 16 - asrs r0, 20 - strh r0, [r2, 0x20] - b _081CA4A2 -_081CA49A: - ldrh r0, [r2, 0x3C] - strh r0, [r2, 0x20] - ldr r0, =SpriteCallbackDummy - str r0, [r2, 0x1C] -_081CA4A2: - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA474 - - thumb_func_start sub_81CA4AC -sub_81CA4AC: @ 81CA4AC - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _081CA574 - movs r0, 0x30 - ldrsh r5, [r4, r0] - cmp r5, 0 - bne _081CA4E2 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - movs r0, 0x80 - lsls r0, 1 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - strh r5, [r4, 0x24] - b _081CA578 -_081CA4E2: - ldrh r0, [r4, 0x32] - adds r0, 0x10 - strh r0, [r4, 0x32] - movs r2, 0x32 - ldrsh r0, [r4, r2] - asrs r1, r0, 3 - adds r0, r1, 0 - subs r0, 0x20 - lsrs r1, r0, 31 - adds r0, r1 - asrs r1, r0, 1 - movs r2, 0x3C - ldrsh r0, [r4, r2] - cmp r0, 0x1 - beq _081CA518 - cmp r0, 0x1 - bgt _081CA50A - cmp r0, 0 - beq _081CA514 - b _081CA526 -_081CA50A: - cmp r0, 0x2 - beq _081CA51C - cmp r0, 0x3 - beq _081CA520 - b _081CA526 -_081CA514: - negs r1, r1 - b _081CA520 -_081CA518: - negs r0, r1 - b _081CA524 -_081CA51C: - strh r1, [r4, 0x24] - b _081CA526 -_081CA520: - lsls r0, r1, 1 - adds r0, r1 -_081CA524: - strh r0, [r4, 0x24] -_081CA526: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _081CA578 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r1, [r4, 0x1] - lsrs r1, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - adds r0, r4, 0 - movs r3, 0 - bl CalcCenterToCornerVec - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0xD - negs r1, r1 - ands r0, r1 - strb r0, [r4, 0x1] - ldr r0, =SpriteCallbackDummy - str r0, [r4, 0x1C] - b _081CA578 - .pool -_081CA574: - subs r0, r1, 0x1 - strh r0, [r4, 0x2E] -_081CA578: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81CA4AC - - thumb_func_start sub_81CA580 -sub_81CA580: @ 81CA580 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r4, r0, r1 - ldrh r0, [r4] - movs r1, 0 - ldrsh r2, [r4, r1] - cmp r2, 0 - bne _081CA634 - movs r0, 0x2 - ldrsh r1, [r4, r0] - cmp r1, 0 - beq _081CA5AC - cmp r1, 0x1 - beq _081CA5CC - b _081CA638 - .pool -_081CA5AC: - movs r0, 0x10 - strh r0, [r4, 0x4] - strh r2, [r4, 0x6] - movs r1, 0xFC - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0x10 - bl SetGpuReg - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - b _081CA638 -_081CA5CC: - ldrh r0, [r4, 0x8] - ands r1, r0 - cmp r1, 0 - beq _081CA5E4 - ldrh r0, [r4, 0x4] - subs r0, 0x3 - strh r0, [r4, 0x4] - lsls r0, 16 - cmp r0, 0 - bge _081CA5F6 - strh r2, [r4, 0x4] - b _081CA5F6 -_081CA5E4: - ldrh r0, [r4, 0x6] - adds r0, 0x3 - strh r0, [r4, 0x6] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _081CA5F6 - movs r0, 0x10 - strh r0, [r4, 0x6] -_081CA5F6: - ldrh r1, [r4, 0x6] - lsls r1, 8 - ldrh r0, [r4, 0x4] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xC - bne _081CA638 - movs r0, 0x2 - bl GetSubstructPtr - ldrb r1, [r0, 0xC] - subs r1, 0x1 - strb r1, [r0, 0xC] - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - adds r0, r5, 0 - bl DestroyTask - b _081CA638 -_081CA634: - subs r0, 0x1 - strh r0, [r4] -_081CA638: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81CA580 - - thumb_func_start sub_81CA640 -sub_81CA640: @ 81CA640 - push {r4,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r4, r0, 0 - ldr r0, =gUnknown_0862036C - movs r1, 0x10 - movs r2, 0x60 - movs r3, 0x4 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, =gSprites - adds r1, r0 - str r1, [r4, 0x28] - bl sub_81C98D4 - cmp r0, 0 - beq _081CA684 - ldr r1, [r4, 0x28] - ldr r0, =sub_81CA6AC - str r0, [r1, 0x1C] - b _081CA690 - .pool -_081CA684: - ldr r0, [r4, 0x28] - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_081CA690: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81CA640 - - thumb_func_start sub_81CA698 -sub_81CA698: @ 81CA698 - push {lr} - movs r0, 0x2 - bl GetSubstructPtr - ldr r0, [r0, 0x28] - bl DestroySprite - pop {r0} - bx r0 - thumb_func_end sub_81CA698 - - thumb_func_start sub_81CA6AC -sub_81CA6AC: @ 81CA6AC - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - ble _081CA6DA - movs r0, 0 - strh r0, [r3, 0x2E] - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_081CA6DA: - pop {r0} - bx r0 - thumb_func_end sub_81CA6AC - - thumb_func_start sub_81CA6E0 -sub_81CA6E0: @ 81CA6E0 - push {r4,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r4, r0, 0 - ldr r0, =gUnknown_086202CC - bl AddWindow - strh r0, [r4, 0x8] - lsls r0, 24 - lsrs r0, 24 - bl PutWindowTilemap - ldrb r0, [r4, 0x8] - movs r1, 0x66 - bl FillWindowPixelBuffer - ldrb r0, [r4, 0x8] - movs r1, 0x3 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA6E0 - - thumb_func_start sub_81CA714 -sub_81CA714: @ 81CA714 - push {r4-r6,lr} - sub sp, 0xC - movs r0, 0x2 - bl GetSubstructPtr - adds r5, r0, 0 - bl sub_81C98B4 - ldr r1, =gUnknown_086202D4 - lsls r0, 2 - adds r0, r1 - ldr r6, [r0] - movs r2, 0x1 - negs r2, r2 - movs r0, 0x1 - adds r1, r6, 0 - bl GetStringWidth - adds r4, r0, 0 - ldrb r0, [r5, 0x8] - movs r1, 0x66 - bl FillWindowPixelBuffer - ldrb r0, [r5, 0x8] - movs r2, 0xC0 - subs r2, r4 - lsrs r2, 1 - lsls r2, 24 - lsrs r2, 24 - ldr r1, =gUnknown_0862030C - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - str r6, [sp, 0x8] - movs r1, 0x1 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA714 - - thumb_func_start sub_81CA770 -sub_81CA770: @ 81CA770 - push {r4-r6,lr} - sub sp, 0xC - movs r0, 0x2 - bl GetSubstructPtr - adds r5, r0, 0 - ldr r6, =gText_NoRibbonWinners - movs r2, 0x1 - negs r2, r2 - movs r0, 0x1 - adds r1, r6, 0 - bl GetStringWidth - adds r4, r0, 0 - ldrb r0, [r5, 0x8] - movs r1, 0x66 - bl FillWindowPixelBuffer - ldrb r0, [r5, 0x8] - movs r2, 0xC0 - subs r2, r4 - lsrs r2, 1 - lsls r2, 24 - lsrs r2, 24 - ldr r1, =gUnknown_0862030F - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - str r6, [sp, 0x8] - movs r1, 0x1 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA770 - - thumb_func_start sub_81CA7C4 -sub_81CA7C4: @ 81CA7C4 - push {lr} - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_81CA7C4 - - thumb_func_start sub_81CA7D4 -sub_81CA7D4: @ 81CA7D4 - push {r4,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r4, r0, 0 - ldr r0, =sub_81CA808 - movs r1, 0x2 - bl CreateTask - strb r0, [r4, 0xA] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA7D4 - - thumb_func_start sub_81CA7F4 -sub_81CA7F4: @ 81CA7F4 - push {lr} - movs r0, 0x2 - bl GetSubstructPtr - ldrb r0, [r0, 0xA] - bl DestroyTask - pop {r0} - bx r0 - thumb_func_end sub_81CA7F4 - - thumb_func_start sub_81CA808 -sub_81CA808: @ 81CA808 - push {lr} - movs r0, 0x3 - movs r1, 0x80 - movs r2, 0x1 - bl ChangeBgX - pop {r0} - bx r0 - thumb_func_end sub_81CA808 - - thumb_func_start sub_81CA818 -sub_81CA818: @ 81CA818 - push {r4,r5,lr} - ldr r0, =sub_81CA8B0 - movs r1, 0x3 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, =gUnknown_0861FC78 + 2 - adds r0, r4, 0 - movs r1, 0x1 - adds r2, r5, 0 - bl SetWordTaskArg - adds r5, 0xC - adds r0, r4, 0 - movs r1, 0x3 - adds r2, r5, 0 - bl SetWordTaskArg - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA818 - - thumb_func_start sub_81CA850 -sub_81CA850: @ 81CA850 - push {lr} - ldr r0, =gUnknown_0861FC78 + 0xE - movs r1, 0x31 - movs r2, 0x4 - bl CopyPaletteIntoBufferUnfaded - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA850 - - thumb_func_start sub_81CA864 -sub_81CA864: @ 81CA864 - push {r4,r5,lr} - ldr r0, =sub_81CA8B0 - movs r1, 0x3 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, =gUnknown_0861FC78 + 0xE - adds r0, r4, 0 - movs r1, 0x1 - adds r2, r5, 0 - bl SetWordTaskArg - subs r5, 0xC - adds r0, r4, 0 - movs r1, 0x3 - adds r2, r5, 0 - bl SetWordTaskArg - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA864 - - thumb_func_start sub_81CA89C -sub_81CA89C: @ 81CA89C - push {lr} - ldr r0, =sub_81CA8B0 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CA89C - - thumb_func_start sub_81CA8B0 -sub_81CA8B0: @ 81CA8B0 - push {r4-r6,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r6, r0, 24 - lsls r4, r6, 2 - adds r4, r6 - lsls r4, 3 - ldr r0, =gTasks + 0x8 - adds r4, r0 - adds r0, r6, 0 - movs r1, 0x1 - bl GetWordTaskArg - adds r5, r0, 0 - adds r0, r6, 0 - movs r1, 0x3 - bl GetWordTaskArg - adds r1, r0, 0 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - asrs r0, 16 - str r0, [sp] - add r0, sp, 0x8 - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r2, 0x2 - movs r3, 0xC - bl sub_81C79BC - add r0, sp, 0x8 - movs r1, 0x31 - movs r2, 0x4 - bl LoadPalette - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0xC - bne _081CA908 - adds r0, r6, 0 - bl DestroyTask -_081CA908: - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA8B0 - - thumb_func_start sub_81CA914 -sub_81CA914: @ 81CA914 - push {lr} - bl TransferPlttBuffer - bl LoadOam - bl ProcessSpriteCopyRequests - bl ScanlineEffect_InitHBlankDmaTransfer - pop {r0} - bx r0 - thumb_func_end sub_81CA914 - - thumb_func_start titlescreen_0 -titlescreen_0: @ 81CA92C - push {lr} - movs r0, 0x50 - movs r1, 0x90 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuRegBits - movs r0, 0x4A - movs r1, 0x1F - bl SetGpuRegBits - movs r0, 0x44 - movs r1, 0xA0 - bl SetGpuRegBits - bl ScanlineEffect_Stop - bl sub_81CAA3C - ldr r2, =gUnknown_08620384 - ldr r0, [r2] - ldr r1, [r2, 0x4] - ldr r2, [r2, 0x8] - bl ScanlineEffect_SetParams - ldr r0, =sub_81CA914 - bl SetVBlankCallback_ - ldr r0, =sub_81CA9EC - movs r1, 0x3 - bl CreateTask - pop {r0} - bx r0 - .pool - thumb_func_end titlescreen_0 - - thumb_func_start sub_81CA994 -sub_81CA994: @ 81CA994 - push {lr} - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl ClearGpuRegBits - bl ScanlineEffect_Stop - ldr r0, =sub_81CA9EC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - bl SetPokenavVBlankCallback - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA994 - - thumb_func_start sub_81CA9C8 -sub_81CA9C8: @ 81CA9C8 - push {lr} - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_81CA9C8 - - thumb_func_start sub_81CA9D8 -sub_81CA9D8: @ 81CA9D8 - push {lr} - bl sub_81CAA3C - movs r0, 0x50 - movs r1, 0x90 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_81CA9D8 - - thumb_func_start sub_81CA9EC -sub_81CA9EC: @ 81CA9EC - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r2, r1, r0 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - lsls r0, 16 - cmp r0, 0 - ble _081CAA30 - movs r0, 0 - strh r0, [r2] - ldrh r0, [r2, 0x2] - adds r0, 0x3 - movs r1, 0x7F - ands r0, r1 - strh r0, [r2, 0x2] - ldr r1, =gSineTable - movs r3, 0x2 - ldrsh r0, [r2, r3] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - lsls r1, 16 - asrs r1, 21 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x54 - bl SetGpuReg -_081CAA30: - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA9EC - - thumb_func_start sub_81CAA3C -sub_81CAA3C: @ 81CAA3C - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x8 - bl sub_81C9894 - adds r4, r0, 0 - bl sub_81C98A4 - ldr r2, =gUnknown_08620240 - lsls r1, r4, 3 - subs r1, r4 - lsls r1, 2 - adds r1, r2 - ldrh r2, [r1, 0x2] - adds r4, r2, 0 - muls r4, r0 - ldrh r1, [r1] - adds r4, r1 - subs r4, 0x8 - mov r0, sp - movs r6, 0 - strh r6, [r0] - ldr r5, =gScanlineEffectRegBuffers - ldr r0, =0x010000a0 - mov r8, r0 - mov r0, sp - adds r1, r5, 0 - mov r2, r8 - bl CpuSet - mov r0, sp - adds r0, 0x2 - strh r6, [r0] - movs r1, 0xF0 - lsls r1, 3 - adds r1, r5 - mov r9, r1 - mov r2, r8 - bl CpuSet - add r0, sp, 0x4 - ldr r1, =0x000072f0 - adds r6, r1, 0 - strh r6, [r0] - lsls r4, 1 - adds r5, r4, r5 - ldr r1, =0x01000010 - mov r8, r1 - adds r1, r5, 0 - mov r2, r8 - bl CpuSet - mov r0, sp - adds r0, 0x6 - strh r6, [r0] - add r4, r9 - adds r1, r4, 0 - mov r2, r8 - bl CpuSet - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CAA3C - - thumb_func_start sub_81CAADC -sub_81CAADC: @ 81CAADC - push {lr} - bl sub_81CA9C8 - pop {r0} - bx r0 - thumb_func_end sub_81CAADC - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/pokenav_unk_6.s b/asm/pokenav_unk_6.s deleted file mode 100644 index f5e017816..000000000 --- a/asm/pokenav_unk_6.s +++ /dev/null @@ -1,1752 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - -@ File centered around AllocSubstruct(0xB) - - thumb_func_start sub_81CCFD8 -sub_81CCFD8: @ 81CCFD8 - push {r4,lr} - ldr r1, =0x0000678c - movs r0, 0xB - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CD01C - ldr r1, =0x00006428 - adds r0, r4, r1 - bl sub_81D1ED4 - bl sub_81CD970 - ldr r1, =gKeyRepeatStartDelay - movs r0, 0x14 - strh r0, [r1] - ldr r0, =0x00006304 - adds r1, r4, r0 - ldr r0, =sub_81CD08C - str r0, [r1] - movs r0, 0x1 - b _081CD01E - .pool -_081CD01C: - movs r0, 0 -_081CD01E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CCFD8 - - thumb_func_start sub_81CD024 -sub_81CD024: @ 81CD024 - push {r4,lr} - ldr r1, =0x0000678c - movs r0, 0xB - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CD068 - ldr r1, =0x00006428 - adds r0, r4, r1 - bl sub_81D1ED4 - bl sub_81CD9F8 - ldr r1, =gKeyRepeatStartDelay - movs r0, 0x14 - strh r0, [r1] - ldr r0, =0x00006304 - adds r1, r4, r0 - ldr r0, =sub_81CD08C - str r0, [r1] - movs r0, 0x1 - b _081CD06A - .pool -_081CD068: - movs r0, 0 -_081CD06A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CD024 - - thumb_func_start sub_81CD070 -sub_81CD070: @ 81CD070 - push {lr} - movs r0, 0xB - bl GetSubstructPtr - ldr r2, =0x00006304 - adds r1, r0, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CD070 - - thumb_func_start sub_81CD08C -sub_81CD08C: @ 81CD08C - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x12 - bl GetSubstructPtr - adds r5, r0, 0 - adds r0, r4, 0 - bl sub_81CD1E4 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _081CD100 - ldr r0, =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _081CD0D0 - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _081CD100 - movs r1, 0xC6 - lsls r1, 7 - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _081CD0F0 - ldrh r1, [r5, 0x2] - ldrh r0, [r5] - subs r0, 0x1 - cmp r1, r0 - bne _081CD100 -_081CD0D0: - movs r0, 0x5 - bl PlaySE - ldr r0, =0x00006304 - adds r1, r4, r0 - ldr r0, =sub_81CD19C - str r0, [r1] - movs r2, 0x2 - b _081CD100 - .pool -_081CD0F0: - movs r0, 0x5 - bl PlaySE - movs r2, 0x5 - ldr r0, =0x00006304 - adds r1, r4, r0 - ldr r0, =sub_81CD110 - str r0, [r1] -_081CD100: - adds r0, r2, 0 - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CD08C - - thumb_func_start sub_81CD110 -sub_81CD110: @ 81CD110 - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - movs r4, 0 - bl sub_811FBA4 - lsls r0, 24 - cmp r0, 0 - bne _081CD18A - bl sub_81CEF14 - ldr r1, =0x00006786 - adds r5, r6, r1 - movs r1, 0 - ldrsb r1, [r5, r1] - ldr r2, =0x00006783 - adds r4, r6, r2 - adds r1, r4, r1 - strb r0, [r1] - movs r0, 0x12 - bl GetSubstructPtr - ldrh r1, [r0, 0x2] - lsls r1, 2 - adds r0, r1 - ldrb r2, [r0, 0x4] - ldrb r3, [r0, 0x5] - movs r0, 0 - ldrsb r0, [r5, r0] - adds r4, r0 - ldrb r1, [r4] - mov r0, sp - strb r1, [r0] - cmp r2, 0xE - bne _081CD174 - movs r0, 0x64 - muls r0, r3 - ldr r1, =gPlayerParty - adds r0, r1 - movs r1, 0x8 - mov r2, sp - bl SetMonData - b _081CD180 - .pool -_081CD174: - adds r0, r2, 0 - adds r1, r3, 0 - movs r2, 0x8 - mov r3, sp - bl SetBoxMonDataAt -_081CD180: - ldr r0, =0x00006304 - adds r1, r6, r0 - ldr r0, =sub_81CD08C - str r0, [r1] - movs r4, 0x6 -_081CD18A: - adds r0, r4, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CD110 - - thumb_func_start sub_81CD19C -sub_81CD19C: @ 81CD19C - push {lr} - movs r1, 0xC6 - lsls r1, 7 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _081CD1B4 - ldr r0, =0x000186aa - b _081CD1B6 - .pool -_081CD1B4: - ldr r0, =0x000186a2 -_081CD1B6: - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CD19C - - thumb_func_start sub_81CD1C0 -sub_81CD1C0: @ 81CD1C0 - push {lr} - movs r0, 0xB - bl GetSubstructPtr - movs r1, 0xC6 - lsls r1, 7 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _081CD1DA - movs r0, 0x12 - bl FreePokenavSubstruct -_081CD1DA: - movs r0, 0xB - bl FreePokenavSubstruct - pop {r0} - bx r0 - thumb_func_end sub_81CD1C0 - - thumb_func_start sub_81CD1E4 -sub_81CD1E4: @ 81CD1E4 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x12 - bl GetSubstructPtr - adds r2, r0, 0 - movs r3, 0 - ldr r0, =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _081CD220 - movs r1, 0xC6 - lsls r1, 7 - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _081CD210 - ldrh r0, [r2, 0x2] - cmp r0, 0 - beq _081CD24E -_081CD210: - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - b _081CD246 - .pool -_081CD220: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081CD24E - movs r1, 0xC6 - lsls r1, 7 - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _081CD23E - ldrh r1, [r2, 0x2] - ldrh r0, [r2] - subs r0, 0x1 - cmp r1, r0 - bge _081CD24E -_081CD23E: - movs r0, 0x5 - bl PlaySE - movs r0, 0 -_081CD246: - bl sub_81CD258 - lsls r0, 24 - lsrs r3, r0, 24 -_081CD24E: - adds r0, r3, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CD1E4 - - thumb_func_start sub_81CD258 -sub_81CD258: @ 81CD258 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r0, 0xB - bl GetSubstructPtr - adds r4, r0, 0 - movs r0, 0x12 - bl GetSubstructPtr - adds r5, r0, 0 - mov r0, r8 - cmp r0, 0 - beq _081CD284 - ldr r1, =0x00006788 - adds r0, r4, r1 - b _081CD288 - .pool -_081CD284: - ldr r2, =0x00006787 - adds r0, r4, r2 -_081CD288: - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - lsls r0, 16 - lsrs r0, 16 - adds r7, r0, 0 - ldr r1, =0x00006428 - adds r0, r4, r1 - ldr r2, =0x00006786 - adds r1, r4, r2 - movs r2, 0 - ldrsb r2, [r1, r2] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 2 - ldr r3, =0x0000643c - adds r1, r3 - adds r1, r4, r1 - lsls r2, r7, 2 - adds r2, r7 - lsls r2, 2 - adds r2, r3 - adds r2, r4, r2 - bl sub_81D1F84 - ldrh r6, [r5, 0x2] - bl sub_81CDD5C - cmp r0, 0 - beq _081CD2D8 - ldrh r1, [r5] - b _081CD2DC - .pool -_081CD2D8: - ldrh r1, [r5] - subs r1, 0x1 -_081CD2DC: - eors r1, r6 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - adds r6, r0, 0 - mov r0, r8 - cmp r0, 0 - beq _081CD332 - ldr r1, =0x00006787 - adds r2, r4, r1 - ldrb r0, [r2] - adds r1, 0x1 - adds r3, r4, r1 - strb r0, [r3] - ldr r0, =0x00006786 - adds r1, r4, r0 - ldrb r0, [r1] - strb r0, [r2] - strb r7, [r1] - ldrb r1, [r3] - ldr r2, =0x00006789 - adds r0, r4, r2 - strb r1, [r0] - ldrh r0, [r5, 0x2] - cmp r0, 0 - bne _081CD312 - ldrh r0, [r5] -_081CD312: - subs r1, r0, 0x1 - strh r1, [r5, 0x2] - lsls r0, r1, 16 - cmp r0, 0 - beq _081CD32C - subs r1, 0x1 - b _081CD384 - .pool -_081CD32C: - ldrh r0, [r5] - subs r1, r0, 0x1 - b _081CD384 -_081CD332: - ldr r0, =0x00006788 - adds r2, r4, r0 - ldrb r0, [r2] - ldr r1, =0x00006787 - adds r3, r4, r1 - strb r0, [r3] - ldr r0, =0x00006786 - adds r1, r4, r0 - ldrb r0, [r1] - strb r0, [r2] - strb r7, [r1] - ldrb r1, [r3] - ldr r2, =0x00006789 - adds r0, r4, r2 - strb r1, [r0] - ldrh r1, [r5, 0x2] - ldrh r0, [r5] - subs r0, 0x1 - cmp r1, r0 - bge _081CD370 - adds r0, r1, 0x1 - b _081CD372 - .pool -_081CD370: - movs r0, 0 -_081CD372: - strh r0, [r5, 0x2] - ldrh r1, [r5, 0x2] - ldrh r0, [r5] - subs r0, 0x1 - cmp r1, r0 - bge _081CD382 - adds r1, 0x1 - b _081CD384 -_081CD382: - movs r1, 0 -_081CD384: - ldr r2, =0x00006302 - adds r0, r4, r2 - strh r1, [r0] - ldrh r4, [r5, 0x2] - bl sub_81CDD5C - cmp r0, 0 - beq _081CD39C - ldrh r1, [r5] - b _081CD3A0 - .pool -_081CD39C: - ldrh r1, [r5] - subs r1, 0x1 -_081CD3A0: - eors r1, r4 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - cmp r6, 0 - bne _081CD3B0 - movs r0, 0x3 - b _081CD3BA -_081CD3B0: - cmp r0, 0 - beq _081CD3B8 - movs r0, 0x1 - b _081CD3BA -_081CD3B8: - movs r0, 0x4 -_081CD3BA: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_81CD258 - - thumb_func_start sub_81CD3C4 -sub_81CD3C4: @ 81CD3C4 - push {r4,lr} - movs r0, 0xB - bl GetSubstructPtr - adds r4, r0, 0 - movs r0, 0x12 - bl GetSubstructPtr - adds r2, r0, 0 - ldr r1, =0x0000678a - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0x9 - bls _081CD3E2 - b _081CD530 -_081CD3E2: - lsls r0, 2 - ldr r1, =_081CD3F4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081CD3F4: - .4byte _081CD41C - .4byte _081CD428 - .4byte _081CD434 - .4byte _081CD440 - .4byte _081CD490 - .4byte _081CD4A8 - .4byte _081CD4C0 - .4byte _081CD4D8 - .4byte _081CD4F0 - .4byte _081CD508 -_081CD41C: - movs r1, 0x2 - ldrsh r0, [r2, r1] - movs r1, 0 - bl sub_81CD824 - b _081CD530 -_081CD428: - movs r1, 0x2 - ldrsh r0, [r2, r1] - movs r1, 0 - bl sub_81CDA1C - b _081CD530 -_081CD434: - movs r1, 0x2 - ldrsh r0, [r2, r1] - movs r1, 0 - bl sub_81CDB98 - b _081CD530 -_081CD440: - ldrh r0, [r2] - cmp r0, 0x1 - bne _081CD468 - ldr r2, =0x00006786 - adds r0, r4, r2 - movs r1, 0 - strb r1, [r0] - adds r2, 0x1 - adds r0, r4, r2 - strb r1, [r0] - adds r2, 0x1 - adds r0, r4, r2 - strb r1, [r0] - adds r2, 0x2 - adds r0, r4, r2 - strb r1, [r0] - movs r0, 0x1 - b _081CD53C - .pool -_081CD468: - ldr r0, =0x00006786 - adds r1, r4, r0 - movs r0, 0 - strb r0, [r1] - ldr r2, =0x00006787 - adds r1, r4, r2 - movs r0, 0x1 - strb r0, [r1] - ldr r0, =0x00006788 - adds r1, r4, r0 - movs r0, 0x2 - strb r0, [r1] - b _081CD530 - .pool -_081CD490: - ldrh r0, [r2, 0x2] - adds r0, 0x1 - ldrh r2, [r2] - cmp r0, r2 - blt _081CD49C - movs r0, 0 -_081CD49C: - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - bl sub_81CD824 - b _081CD530 -_081CD4A8: - ldrh r0, [r2, 0x2] - adds r0, 0x1 - ldrh r2, [r2] - cmp r0, r2 - blt _081CD4B4 - movs r0, 0 -_081CD4B4: - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - bl sub_81CDA1C - b _081CD530 -_081CD4C0: - ldrh r0, [r2, 0x2] - adds r0, 0x1 - ldrh r2, [r2] - cmp r0, r2 - blt _081CD4CC - movs r0, 0 -_081CD4CC: - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - bl sub_81CDB98 - b _081CD530 -_081CD4D8: - ldrh r0, [r2, 0x2] - subs r0, 0x1 - cmp r0, 0 - bge _081CD4E4 - ldrh r0, [r2] - subs r0, 0x1 -_081CD4E4: - lsls r0, 16 - asrs r0, 16 - movs r1, 0x2 - bl sub_81CD824 - b _081CD530 -_081CD4F0: - ldrh r0, [r2, 0x2] - subs r0, 0x1 - cmp r0, 0 - bge _081CD4FC - ldrh r0, [r2] - subs r0, 0x1 -_081CD4FC: - lsls r0, 16 - asrs r0, 16 - movs r1, 0x2 - bl sub_81CDA1C - b _081CD530 -_081CD508: - ldrh r0, [r2, 0x2] - subs r0, 0x1 - cmp r0, 0 - bge _081CD514 - ldrh r0, [r2] - subs r0, 0x1 -_081CD514: - lsls r0, 16 - asrs r0, 16 - movs r1, 0x2 - bl sub_81CDB98 - ldr r2, =0x0000678a - adds r1, r4, r2 - movs r0, 0 - strb r0, [r1] - movs r0, 0x1 - b _081CD53C - .pool -_081CD530: - ldr r0, =0x0000678a - adds r1, r4, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 -_081CD53C: - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CD3C4 - - thumb_func_start sub_81CD548 -sub_81CD548: @ 81CD548 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - movs r0, 0xB - bl GetSubstructPtr - adds r1, r0, 0 - cmp r4, 0x1 - beq _081CD588 - cmp r4, 0x1 - bgt _081CD566 - cmp r4, 0 - beq _081CD56C - b _081CD5C4 -_081CD566: - cmp r5, 0x2 - beq _081CD5A4 - b _081CD5C4 -_081CD56C: - ldr r2, =0x00006302 - adds r0, r1, r2 - movs r2, 0 - ldrsh r0, [r0, r2] - ldr r2, =0x00006789 - adds r1, r2 - ldrb r1, [r1] - bl sub_81CD824 - b _081CD5C4 - .pool -_081CD588: - ldr r2, =0x00006302 - adds r0, r1, r2 - movs r2, 0 - ldrsh r0, [r0, r2] - ldr r2, =0x00006789 - adds r1, r2 - ldrb r1, [r1] - bl sub_81CDA1C - b _081CD5C4 - .pool -_081CD5A4: - ldr r2, =0x00006302 - adds r0, r1, r2 - movs r2, 0 - ldrsh r0, [r0, r2] - ldr r2, =0x00006789 - adds r1, r2 - ldrb r1, [r1] - bl sub_81CDB98 - movs r0, 0x1 - b _081CD5C6 - .pool -_081CD5C4: - movs r0, 0 -_081CD5C6: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81CD548 - - thumb_func_start sub_81CD5CC -sub_81CD5CC: @ 81CD5CC - push {r4,lr} - adds r4, r0, 0 - lsls r2, 16 - lsrs r2, 16 - b _081CD5E4 -_081CD5D6: - strb r3, [r4] - adds r1, 0x1 - adds r4, 0x1 - lsls r0, r2, 16 - ldr r2, =0xffff0000 - adds r0, r2 - lsrs r2, r0, 16 -_081CD5E4: - ldrb r3, [r1] - adds r0, r3, 0 - cmp r0, 0xFF - bne _081CD5D6 - adds r1, r2, 0 - lsls r0, r1, 16 - ldr r2, =0xffff0000 - adds r0, r2 - lsrs r2, r0, 16 - lsls r1, 16 - cmp r1, 0 - ble _081CD612 - movs r3, 0 -_081CD5FE: - strb r3, [r4] - adds r4, 0x1 - adds r1, r2, 0 - lsls r0, r1, 16 - ldr r2, =0xffff0000 - adds r0, r2 - lsrs r2, r0, 16 - lsls r1, 16 - cmp r1, 0 - bgt _081CD5FE -_081CD612: - movs r0, 0xFF - strb r0, [r4] - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CD5CC - - thumb_func_start sub_81CD624 -sub_81CD624: @ 81CD624 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r5, r0, 0 - adds r4, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - movs r0, 0x12 - bl GetSubstructPtr - lsls r4, 2 - adds r0, r4 - ldrb r4, [r0, 0x4] - mov r8, r4 - ldrb r6, [r0, 0x5] - mov r9, r6 - movs r0, 0xFC - strb r0, [r5] - adds r5, 0x1 - movs r0, 0x4 - strb r0, [r5] - adds r5, 0x1 - movs r0, 0x8 - strb r0, [r5] - adds r5, 0x1 - movs r0, 0 - strb r0, [r5] - adds r5, 0x1 - movs r0, 0x9 - strb r0, [r5] - adds r5, 0x1 - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0x2D - movs r3, 0 - bl GetBoxOrPartyMonData - cmp r0, 0 - beq _081CD690 - ldr r1, =gText_EggNickname - adds r0, r5, 0 - movs r2, 0 - movs r3, 0xC - bl StringCopyPadded - b _081CD80E - .pool -_081CD690: - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0x2 - adds r3, r5, 0 - bl GetBoxOrPartyMonData - adds r0, r5, 0 - bl StringGetEnd10 - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0xB - movs r3, 0 - bl GetBoxOrPartyMonData - lsls r0, 16 - lsrs r7, r0, 16 - cmp r4, 0xE - bne _081CD6E0 - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - ldr r0, =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x38 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - adds r0, r4, 0 - bl GetMonGender - lsls r0, 24 - lsrs r6, r0, 24 - b _081CD6FE - .pool -_081CD6E0: - mov r0, r8 - mov r1, r9 - bl GetBoxedMonPtr - adds r4, r0, 0 - bl GetBoxMonGender - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r4, 0 - bl GetLevelFromBoxMonExp - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 -_081CD6FE: - cmp r7, 0x1D - beq _081CD706 - cmp r7, 0x20 - bne _081CD71C -_081CD706: - movs r0, 0xB - adds r1, r7, 0 - muls r1, r0 - ldr r0, =gSpeciesNames - adds r1, r0 - adds r0, r5, 0 - bl StringCompare - cmp r0, 0 - bne _081CD71C - movs r6, 0xFF -_081CD71C: - adds r3, r5, 0 - b _081CD726 - .pool -_081CD724: - adds r3, 0x1 -_081CD726: - ldrb r0, [r3] - cmp r0, 0xFF - bne _081CD724 - movs r1, 0xFC - strb r1, [r3] - adds r3, 0x1 - movs r0, 0x12 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0x3C - strb r0, [r3] - adds r3, 0x1 - cmp r6, 0 - beq _081CD74A - cmp r6, 0xFE - beq _081CD76E - movs r0, 0x77 - b _081CD790 -_081CD74A: - strb r1, [r3] - adds r3, 0x1 - movs r0, 0x1 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0x4 - strb r0, [r3] - adds r3, 0x1 - strb r1, [r3] - adds r3, 0x1 - movs r0, 0x3 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0x5 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0xB5 - b _081CD790 -_081CD76E: - strb r1, [r3] - adds r3, 0x1 - movs r0, 0x1 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0x6 - strb r0, [r3] - adds r3, 0x1 - strb r1, [r3] - adds r3, 0x1 - movs r0, 0x3 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0x7 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0xB6 -_081CD790: - strb r0, [r3] - adds r3, 0x1 - movs r0, 0xFC - strb r0, [r3] - adds r3, 0x1 - movs r0, 0x4 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0x8 - strb r0, [r3] - adds r3, 0x1 - movs r5, 0 - strb r5, [r3] - adds r3, 0x1 - movs r0, 0x9 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0xBA - strb r0, [r3] - adds r3, 0x1 - movs r0, 0xF9 - strb r0, [r3] - adds r3, 0x1 - movs r0, 0x5 - strb r0, [r3] - adds r3, 0x1 - adds r4, r3, 0 - adds r0, r4, 0 - mov r1, r8 - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - adds r3, r0, 0 - subs r4, r3, r4 - lsls r4, 16 - lsrs r4, 16 - strb r5, [r3] - adds r3, 0x1 - mov r0, r10 - cmp r0, 0 - bne _081CD808 - movs r0, 0x3 - subs r0, r4 - lsls r0, 16 - ldr r1, =0xffff0000 - adds r0, r1 - lsrs r4, r0, 16 - ldr r0, =0x0000ffff - cmp r4, r0 - beq _081CD808 - movs r2, 0 - adds r1, r0, 0 -_081CD7FA: - strb r2, [r3] - adds r3, 0x1 - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r1 - bne _081CD7FA -_081CD808: - movs r0, 0xFF - strb r0, [r3] - adds r0, r3, 0 -_081CD80E: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CD624 - - thumb_func_start sub_81CD824 -sub_81CD824: @ 81CD824 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r1, 24 - lsrs r6, r1, 24 - movs r0, 0xB - bl GetSubstructPtr - adds r5, r0, 0 - movs r0, 0x12 - bl GetSubstructPtr - adds r7, r0, 0 - mov r1, r8 - lsls r0, r1, 16 - asrs r4, r0, 16 - bl sub_81CDD5C - cmp r0, 0 - beq _081CD85A - ldrh r2, [r7] - cmp r4, r2 - bne _081CD862 - b _081CD900 -_081CD85A: - ldrh r0, [r7] - subs r0, 0x1 - cmp r4, r0 - beq _081CD900 -_081CD862: - lsls r0, r6, 6 - ldr r1, =0x00006368 - adds r0, r1 - adds r0, r5, r0 - mov r2, r8 - lsls r4, r2, 16 - lsrs r1, r4, 16 - movs r2, 0 - bl sub_81CD624 - asrs r4, 14 - adds r4, r7, r4 - ldrb r3, [r4, 0x4] - lsls r0, r6, 1 - adds r0, r6 - lsls r4, r0, 3 - ldr r1, =0x00006320 - adds r0, r5, r1 - adds r0, r4 - movs r2, 0 - movs r1, 0xFC - strb r1, [r0] - ldr r1, =0x00006321 - adds r0, r5, r1 - adds r0, r4 - movs r1, 0x4 - strb r1, [r0] - ldr r1, =0x00006322 - adds r0, r5, r1 - adds r0, r4 - movs r1, 0x8 - strb r1, [r0] - ldr r1, =0x00006323 - adds r0, r5, r1 - adds r0, r4 - strb r2, [r0] - ldr r2, =0x00006324 - adds r0, r5, r2 - adds r0, r4 - movs r1, 0x9 - strb r1, [r0] - cmp r3, 0xE - bne _081CD8E4 - adds r0, r4, r5 - ldr r1, =0x00006325 - adds r0, r1 - ldr r1, =gText_InParty - b _081CD8F4 - .pool -_081CD8E4: - adds r4, r5 - ldr r2, =0x00006325 - adds r4, r2 - adds r0, r3, 0 - bl GetBoxNamePtr - adds r1, r0, 0 - adds r0, r4, 0 -_081CD8F4: - movs r2, 0x8 - bl sub_81CD5CC - b _081CD95C - .pool -_081CD900: - movs r1, 0 - lsls r4, r6, 6 - lsls r0, r6, 1 - mov r8, r0 - adds r3, r4, 0 - ldr r0, =0x00006368 - adds r2, r5, r0 - movs r7, 0 -_081CD910: - adds r0, r1, r3 - adds r0, r2, r0 - strb r7, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0xB - bls _081CD910 - adds r1, r4 - ldr r2, =0x00006368 - adds r0, r5, r2 - adds r0, r1 - movs r1, 0xFF - strb r1, [r0] - movs r1, 0 - mov r2, r8 - adds r0, r2, r6 - lsls r3, r0, 3 - ldr r0, =0x00006320 - adds r2, r5, r0 - movs r4, 0 -_081CD93A: - adds r0, r1, r3 - adds r0, r2, r0 - strb r4, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x7 - bls _081CD93A - mov r2, r8 - adds r0, r2, r6 - lsls r0, 3 - adds r0, r1, r0 - ldr r2, =0x00006320 - adds r1, r5, r2 - adds r1, r0 - movs r0, 0xFF - strb r0, [r1] -_081CD95C: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CD824 - - thumb_func_start sub_81CD970 -sub_81CD970: @ 81CD970 - push {r4-r7,lr} - movs r0, 0xB - bl GetSubstructPtr - adds r7, r0, 0 - ldr r1, =0x000006ac - movs r0, 0x12 - bl AllocSubstruct - adds r6, r0, 0 - movs r0, 0xC6 - lsls r0, 7 - adds r1, r7, r0 - movs r0, 0 - strb r0, [r1] - movs r4, 0 - movs r5, 0 - b _081CD9C4 - .pool -_081CD998: - movs r0, 0x64 - muls r0, r4 - ldr r1, =gPlayerParty - adds r0, r1 - movs r1, 0x2D - bl GetMonData - adds r2, r0, 0 - cmp r2, 0 - bne _081CD9BE - lsls r1, r5, 2 - adds r1, r6, r1 - movs r0, 0xE - strb r0, [r1, 0x4] - strb r4, [r1, 0x5] - strh r2, [r1, 0x6] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_081CD9BE: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 -_081CD9C4: - bl CalculatePlayerPartyCount - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bcc _081CD998 - lsls r0, r5, 2 - adds r0, r6, r0 - movs r1, 0 - strb r1, [r0, 0x4] - strb r1, [r0, 0x5] - movs r2, 0 - strh r1, [r0, 0x6] - strh r1, [r6, 0x2] - adds r0, r5, 0x1 - strh r0, [r6] - ldr r1, =0x0000678a - adds r0, r7, r1 - strb r2, [r0] - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CD970 - - thumb_func_start sub_81CD9F8 -sub_81CD9F8: @ 81CD9F8 - push {lr} - movs r0, 0xB - bl GetSubstructPtr - movs r1, 0xC6 - lsls r1, 7 - adds r2, r0, r1 - movs r3, 0 - movs r1, 0x1 - strb r1, [r2] - ldr r1, =0x0000678a - adds r0, r1 - strb r3, [r0] - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CD9F8 - - thumb_func_start sub_81CDA1C -sub_81CDA1C: @ 81CDA1C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - movs r0, 0xB - bl GetSubstructPtr - mov r8, r0 - movs r0, 0x12 - bl GetSubstructPtr - adds r4, r0, 0 - lsls r0, r6, 16 - asrs r5, r0, 16 - bl sub_81CDD5C - cmp r0, 0 - beq _081CDA52 - ldrh r0, [r4] - cmp r5, r0 - bne _081CDA5A - b _081CDB48 -_081CDA52: - ldrh r0, [r4] - subs r0, 0x1 - cmp r5, r0 - beq _081CDB48 -_081CDA5A: - lsls r0, r6, 16 - asrs r0, 14 - adds r0, r4, r0 - ldrb r6, [r0, 0x4] - ldrb r7, [r0, 0x5] - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0x16 - movs r3, 0 - bl GetBoxOrPartyMonData - mov r1, r9 - lsls r5, r1, 2 - adds r4, r5, r1 - ldr r1, =0x00006428 - add r1, r8 - adds r1, r4 - strb r0, [r1] - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0x2F - movs r3, 0 - bl GetBoxOrPartyMonData - ldr r1, =0x00006429 - add r1, r8 - adds r1, r4 - strb r0, [r1] - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0x21 - movs r3, 0 - bl GetBoxOrPartyMonData - ldr r1, =0x0000642a - add r1, r8 - adds r1, r4 - strb r0, [r1] - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0x18 - movs r3, 0 - bl GetBoxOrPartyMonData - ldr r1, =0x0000642b - add r1, r8 - adds r1, r4 - strb r0, [r1] - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0x17 - movs r3, 0 - bl GetBoxOrPartyMonData - ldr r1, =0x0000642c - add r1, r8 - adds r1, r4 - strb r0, [r1] - movs r0, 0xCF - lsls r0, 7 - add r0, r8 - mov r2, r9 - adds r4, r0, r2 - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0x30 - movs r3, 0 - bl GetBoxOrPartyMonData - cmp r0, 0xFF - beq _081CDB10 - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0x30 - movs r3, 0 - bl GetBoxOrPartyMonData - movs r1, 0x1D - bl __udivsi3 - b _081CDB12 - .pool -_081CDB10: - movs r0, 0x9 -_081CDB12: - strb r0, [r4] - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0x8 - movs r3, 0 - bl GetBoxOrPartyMonData - ldr r1, =0x00006783 - add r1, r8 - add r1, r9 - strb r0, [r1] - mov r0, r9 - adds r1, r5, r0 - ldr r2, =0x00006428 - adds r0, r1, r2 - add r0, r8 - lsls r1, 2 - adds r2, 0x14 - adds r1, r2 - add r1, r8 - bl sub_81D2754 - b _081CDB80 - .pool -_081CDB48: - movs r2, 0 - mov r0, r9 - lsls r5, r0, 2 - add r5, r9 - ldr r4, =0x00006428 - add r4, r8 - lsls r3, r5, 2 - mov r9, r2 - ldr r7, =0x0000643c - movs r6, 0x9B -_081CDB5C: - adds r0, r2, r5 - adds r0, r4, r0 - mov r1, r9 - strb r1, [r0] - lsls r0, r2, 2 - adds r0, r3 - add r0, r8 - adds r1, r0, r7 - strh r6, [r1] - ldr r1, =0x0000643e - adds r0, r1 - movs r1, 0x5B - strh r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x4 - bls _081CDB5C -_081CDB80: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CDA1C - - thumb_func_start sub_81CDB98 -sub_81CDB98: @ 81CDB98 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - movs r0, 0xB - bl GetSubstructPtr - adds r7, r0, 0 - movs r0, 0x12 - bl GetSubstructPtr - adds r4, r0, 0 - lsls r0, r6, 16 - asrs r5, r0, 16 - bl sub_81CDD5C - cmp r0, 0 - beq _081CDBCC - ldrh r0, [r4] - b _081CDBD0 -_081CDBCC: - ldrh r0, [r4] - subs r0, 0x1 -_081CDBD0: - cmp r5, r0 - beq _081CDC3E - lsls r0, r6, 16 - asrs r0, 14 - adds r0, r4, r0 - ldrb r5, [r0, 0x4] - ldrb r6, [r0, 0x5] - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0x41 - movs r3, 0 - bl GetBoxOrPartyMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0x1 - movs r3, 0 - bl GetBoxOrPartyMonData - mov r8, r0 - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0 - movs r3, 0 - bl GetBoxOrPartyMonData - adds r5, r0, 0 - lsls r0, r4, 3 - ldr r1, =gMonFrontPicTable - adds r0, r1 - mov r2, r9 - lsls r1, r2, 13 - movs r2, 0xC0 - lsls r2, 2 - adds r1, r2 - adds r1, r7, r1 - movs r2, 0x1 - str r2, [sp] - adds r2, r4, 0 - adds r3, r5, 0 - bl LoadSpecialPokePic - adds r0, r4, 0 - mov r1, r8 - adds r2, r5, 0 - bl GetFrontSpritePalFromSpeciesAndPersonality - mov r2, r9 - lsls r1, r2, 7 - adds r1, r7, r1 - bl LZ77UnCompWram -_081CDC3E: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CDB98 - - thumb_func_start sub_81CDC50 -sub_81CDC50: @ 81CDC50 - push {lr} - movs r0, 0x12 - bl GetSubstructPtr - ldrh r0, [r0] - pop {r1} - bx r1 - thumb_func_end sub_81CDC50 - - thumb_func_start sub_81CDC60 -sub_81CDC60: @ 81CDC60 - push {lr} - movs r0, 0x12 - bl GetSubstructPtr - ldrh r0, [r0, 0x2] - pop {r1} - bx r1 - thumb_func_end sub_81CDC60 - - thumb_func_start sub_81CDC70 -sub_81CDC70: @ 81CDC70 - push {lr} - movs r0, 0xB - bl GetSubstructPtr - ldr r1, =0x00006428 - adds r0, r1 - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CDC70 - - thumb_func_start sub_81CDC84 -sub_81CDC84: @ 81CDC84 - push {lr} - movs r0, 0xB - bl GetSubstructPtr - ldr r1, =0x00006786 - adds r0, r1 - ldrb r0, [r0] - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CDC84 - - thumb_func_start sub_81CDC9C -sub_81CDC9C: @ 81CDC9C - push {lr} - movs r0, 0xB - bl GetSubstructPtr - ldr r1, =0x00006302 - adds r0, r1 - ldrb r0, [r0] - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CDC9C - - thumb_func_start sub_81CDCB4 -sub_81CDCB4: @ 81CDCB4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0xB - bl GetSubstructPtr - lsls r4, 13 - movs r1, 0xC0 - lsls r1, 2 - adds r4, r1 - adds r0, r4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CDCB4 - - thumb_func_start sub_81CDCD4 -sub_81CDCD4: @ 81CDCD4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0xB - bl GetSubstructPtr - lsls r4, 7 - adds r0, r4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CDCD4 - - thumb_func_start sub_81CDCEC -sub_81CDCEC: @ 81CDCEC - push {lr} - movs r0, 0xB - bl GetSubstructPtr - ldr r1, =0x00006789 - adds r0, r1 - ldrb r0, [r0] - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CDCEC - - thumb_func_start sub_81CDD04 -sub_81CDD04: @ 81CDD04 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0xB - bl GetSubstructPtr - lsls r4, 6 - ldr r1, =0x00006368 - adds r4, r1 - adds r0, r4 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CDD04 - - thumb_func_start sub_81CDD24 -sub_81CDD24: @ 81CDD24 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0xB - bl GetSubstructPtr - lsls r1, r4, 1 - adds r1, r4 - lsls r1, 3 - ldr r2, =0x00006320 - adds r1, r2 - adds r0, r1 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CDD24 - - thumb_func_start sub_81CDD48 -sub_81CDD48: @ 81CDD48 - push {lr} - movs r0, 0x12 - bl GetSubstructPtr - ldrh r1, [r0, 0x2] - lsls r1, 2 - adds r0, r1 - ldrh r0, [r0, 0x6] - pop {r1} - bx r1 - thumb_func_end sub_81CDD48 - - thumb_func_start sub_81CDD5C -sub_81CDD5C: @ 81CDD5C - push {lr} - movs r0, 0xB - bl GetSubstructPtr - movs r1, 0xC6 - lsls r1, 7 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _081CDD74 - movs r0, 0 - b _081CDD76 -_081CDD74: - movs r0, 0x1 -_081CDD76: - pop {r1} - bx r1 - thumb_func_end sub_81CDD5C - - thumb_func_start sub_81CDD7C -sub_81CDD7C: @ 81CDD7C - push {lr} - movs r0, 0xB - bl GetSubstructPtr - adds r2, r0, 0 - movs r1, 0xC6 - lsls r1, 7 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _081CDD96 - movs r0, 0 - b _081CDDA6 -_081CDD96: - ldr r3, =0x00006786 - adds r0, r2, r3 - movs r1, 0 - ldrsb r1, [r0, r1] - subs r3, 0x3 - adds r0, r2, r3 - adds r0, r1 - ldrb r0, [r0] -_081CDDA6: - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CDD7C - - thumb_func_start sub_81CDDB0 -sub_81CDDB0: @ 81CDDB0 - push {lr} - movs r0, 0xB - bl GetSubstructPtr - ldr r2, =0x00006786 - adds r1, r0, r2 - ldrb r1, [r1] - lsls r1, 24 - asrs r1, 24 - subs r2, 0x6 - adds r0, r2 - adds r0, r1 - ldrb r0, [r0] - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CDDB0 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/pokenav_unk_7.s b/asm/pokenav_unk_7.s deleted file mode 100644 index 6c363c01f..000000000 --- a/asm/pokenav_unk_7.s +++ /dev/null @@ -1,2001 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - -@ File centered around AllocSubstruct(0xC) - - thumb_func_start sub_81CDDD4 -sub_81CDDD4: @ 81CDDD4 - push {r4,lr} - ldr r1, =0x000038ac - movs r0, 0xC - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CDE24 - ldr r0, =0x00001816 - adds r1, r4, r0 - movs r0, 0xFF - strb r0, [r1] - ldr r0, =sub_81CDE94 - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r4] - ldr r0, =0x00001810 - adds r1, r4, r0 - ldr r0, =sub_81CDE80 - str r0, [r1] - ldr r0, =0x00002908 - adds r1, r4, r0 - movs r0, 0 - strb r0, [r1] - movs r0, 0x1 - b _081CDE26 - .pool -_081CDE24: - movs r0, 0 -_081CDE26: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CDDD4 - - thumb_func_start sub_81CDE2C -sub_81CDE2C: @ 81CDE2C - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xC - bl GetSubstructPtr - adds r5, r0, 0 - ldr r0, =gUnknown_08623384 - lsls r4, 2 - adds r4, r0 - ldr r0, [r4] - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r5] - ldr r0, =0x00001810 - adds r5, r0 - ldr r0, =sub_81CDE80 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CDE2C - - thumb_func_start sub_81CDE64 -sub_81CDE64: @ 81CDE64 - push {lr} - movs r0, 0xC - bl GetSubstructPtr - ldr r1, =0x00001810 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CDE64 - - thumb_func_start sub_81CDE80 -sub_81CDE80: @ 81CDE80 - push {lr} - movs r0, 0xC - bl GetSubstructPtr - ldr r0, [r0] - bl IsLoopedTaskActive - pop {r1} - bx r1 - thumb_func_end sub_81CDE80 - - thumb_func_start sub_81CDE94 -sub_81CDE94: @ 81CDE94 - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - movs r0, 0xC - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x14 - bls _081CDEA8 - b _081CE2C4 -_081CDEA8: - lsls r0, r4, 2 - ldr r1, =_081CDEB8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081CDEB8: - .4byte _081CDF0C - .4byte _081CDF18 - .4byte _081CDF94 - .4byte _081CDFB8 - .4byte _081CE030 - .4byte _081CE074 - .4byte _081CE0B0 - .4byte _081CE118 - .4byte _081CE120 - .4byte _081CE126 - .4byte _081CE136 - .4byte _081CE146 - .4byte _081CE156 - .4byte _081CE16C - .4byte _081CE1C8 - .4byte _081CE1EC - .4byte _081CE218 - .4byte _081CE23C - .4byte _081CE24A - .4byte _081CE25A - .4byte _081CE262 -_081CDF0C: - bl sub_81CD3C4 - cmp r0, 0x1 - beq _081CDF16 - b _081CE2C0 -_081CDF16: - b _081CDFB0 -_081CDF18: - ldr r0, =gUnknown_08623358 - movs r1, 0x3 - bl InitBgTemplates - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - ldr r1, =0x00007940 - movs r0, 0 - bl SetGpuReg - ldr r1, =0x00000844 - movs r0, 0x50 - bl SetGpuReg - ldr r1, =0x0000040b - movs r0, 0x52 - bl SetGpuReg - ldr r1, =gPokenavCondition_Gfx - movs r0, 0 - str r0, [sp] - movs r0, 0x3 - b _081CDFA8 - .pool -_081CDF94: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _081CDFA2 - b _081CE2C0 -_081CDFA2: - ldr r1, =gUnknown_08623228 - str r0, [sp] - movs r0, 0x2 -_081CDFA8: - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram -_081CDFB0: - movs r0, 0 - b _081CE2C6 - .pool -_081CDFB8: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - beq _081CDFC4 - b _081CE2C0 -_081CDFC4: - ldr r0, =gPokenavCondition_Tilemap - adds r4, r5, 0x4 - adds r1, r4, 0 - bl LZ77UnCompVram - movs r0, 0x3 - adds r1, r4, 0 - bl SetBgTilemapBuffer - bl sub_81CDD5C - cmp r0, 0x1 - bne _081CDFF2 - ldr r1, =gPokenavOptions_Tilemap - movs r0, 0x9 - str r0, [sp] - movs r0, 0x4 - str r0, [sp, 0x4] - movs r0, 0x3 - movs r2, 0 - movs r3, 0x5 - bl CopyToBgTilemapBufferRect -_081CDFF2: - movs r0, 0x3 - bl CopyBgTilemapBufferToVram - ldr r0, =gPokenavCondition_Pal - movs r1, 0x10 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - ldr r0, =gUnknown_08623208 - movs r1, 0xF0 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - ldr r0, =0x00001814 - adds r1, r5, r0 - ldr r0, =0x0000ffb0 - strh r0, [r1] - b _081CDFB0 - .pool -_081CE030: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - beq _081CE03C - b _081CE2C0 -_081CE03C: - ldr r0, =gUnknown_0862323C - ldr r1, =0x00001004 - adds r4, r5, r1 - adds r1, r4, 0 - bl LZ77UnCompVram - movs r0, 0x2 - adds r1, r4, 0 - bl SetBgTilemapBuffer - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldr r0, =gUnknown_086231E8 - movs r1, 0x30 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - movs r0, 0x2 - bl sub_81D21DC - b _081CDFB0 - .pool -_081CE074: - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0x1 - bl sub_8199DF0 - movs r0, 0x1 - movs r1, 0x11 - movs r2, 0x1 - movs r3, 0x1 - bl sub_8199DF0 - movs r0, 0 - str r0, [sp, 0x8] - ldr r2, =0x00000804 - adds r4, r5, r2 - ldr r2, =0x05000200 - add r0, sp, 0x8 - adds r1, r4, 0 - bl CpuSet - movs r0, 0x1 - adds r1, r4, 0 - bl SetBgTilemapBuffer - b _081CDFB0 - .pool -_081CE0B0: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - beq _081CE0BC - b _081CE2C0 -_081CE0BC: - ldr r0, =gUnknown_08623364 - bl AddWindow - movs r2, 0xC1 - lsls r2, 5 - adds r1, r5, r2 - strb r0, [r1] - bl sub_81CDD5C - cmp r0, 0x1 - bne _081CE0F6 - ldr r0, =gUnknown_0862336C - bl AddWindow - ldr r2, =0x00001821 - adds r1, r5, r2 - strb r0, [r1] - ldr r0, =gUnknown_08623374 - bl AddWindow - ldr r2, =0x00001822 - adds r1, r5, r2 - strb r0, [r1] - ldr r0, =gUnknown_0862337C - bl AddWindow - ldr r2, =0x00001823 - adds r1, r5, r2 - strb r0, [r1] -_081CE0F6: - bl DeactivateAllTextPrinters - b _081CDFB0 - .pool -_081CE118: - movs r0, 0 - bl sub_81CED30 - b _081CDFB0 -_081CE120: - bl sub_81CE9E4 - b _081CDFB0 -_081CE126: - bl sub_81CDD5C - cmp r0, 0x1 - beq _081CE130 - b _081CDFB0 -_081CE130: - bl sub_81CE934 - b _081CDFB0 -_081CE136: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0 - b _081CE164 -_081CE146: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0x1 - b _081CE164 -_081CE156: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0x2 -_081CE164: - movs r2, 0x1 - bl sub_81CE754 - b _081CDFB0 -_081CE16C: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0x3 - movs r2, 0x1 - bl sub_81CE754 - cmp r0, 0x1 - beq _081CE186 - b _081CE2C0 -_081CE186: - movs r1, 0xC1 - lsls r1, 5 - adds r0, r5, r1 - ldrb r0, [r0] - bl PutWindowTilemap - bl sub_81CDD5C - cmp r0, 0x1 - beq _081CE19C - b _081CDFB0 -_081CE19C: - ldr r2, =0x00001821 - adds r0, r5, r2 - ldrb r0, [r0] - bl PutWindowTilemap - ldr r1, =0x00001822 - adds r0, r5, r1 - ldrb r0, [r0] - bl PutWindowTilemap - ldr r2, =0x00001823 - adds r0, r5, r2 - ldrb r0, [r0] - bl PutWindowTilemap - b _081CDFB0 - .pool -_081CE1C8: - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl HideBg - movs r0, 0x3 - bl ShowBg - bl sub_81CDD5C - cmp r0, 0x1 - beq _081CE1E4 - b _081CDFB0 -_081CE1E4: - movs r0, 0x4 - bl sub_81C7BA4 - b _081CDFB0 -_081CE1EC: - movs r0, 0x1 - bl sub_81C7AC0 - bl sub_81CDD5C - cmp r0, 0 - beq _081CE1FC - b _081CDFB0 -_081CE1FC: - movs r0, 0x6 - bl LoadLeftHeaderGfxForIndex - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl sub_81C7FA0 - movs r0, 0x6 - movs r1, 0x1 - movs r2, 0 - bl sub_81C7FA0 - b _081CDFB0 -_081CE218: - bl IsPaletteFadeActive - cmp r0, 0 - bne _081CE2C0 - bl sub_81CDD5C - cmp r0, 0 - bne _081CE230 - bl sub_81C8010 - cmp r0, 0 - bne _081CE2C0 -_081CE230: - ldr r0, =sub_81CEE44 - bl SetVBlankCallback_ - b _081CDFB0 - .pool -_081CE23C: - bl sub_81CEE90 - bl sub_81CDC70 - bl sub_81D20AC - b _081CDFB0 -_081CE24A: - bl sub_81CDC70 - bl sub_81D20BC - lsls r0, 24 - cmp r0, 0 - bne _081CE2C0 - b _081CDFB0 -_081CE25A: - movs r0, 0x1 - bl sub_81CEE74 - b _081CDFB0 -_081CE262: - bl sub_81CDC70 - ldr r2, =0x00001814 - adds r1, r5, r2 - bl sub_81D3178 - lsls r0, 24 - cmp r0, 0 - bne _081CE2C0 - ldr r0, =0x000028e0 - adds r6, r5, r0 - adds r0, r6, 0 - bl sub_81D3464 - bl sub_81CDD5C - cmp r0, 0x1 - beq _081CE298 - bl sub_81CDC60 - adds r4, r0, 0 - bl sub_81CDC50 - lsls r4, 16 - lsls r0, 16 - cmp r4, r0 - beq _081CE2C4 -_081CE298: - ldr r1, =0x00001816 - adds r0, r5, r1 - ldrb r4, [r0] - bl sub_81CDDB0 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_81D3480 - b _081CE2C4 - .pool -_081CE2C0: - movs r0, 0x2 - b _081CE2C6 -_081CE2C4: - movs r0, 0x4 -_081CE2C6: - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81CDE94 - - thumb_func_start sub_81CE2D0 -sub_81CE2D0: @ 81CE2D0 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xC - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x1 - beq _081CE308 - cmp r4, 0x1 - bgt _081CE2EA - cmp r4, 0 - beq _081CE2F4 - b _081CE374 -_081CE2EA: - cmp r4, 0x2 - beq _081CE328 - cmp r4, 0x3 - beq _081CE33E - b _081CE374 -_081CE2F4: - bl sub_81CEEC8 - ldr r1, =0x000028e0 - adds r0, r5, r1 - bl sub_81D3520 - movs r0, 0x1 - b _081CE376 - .pool -_081CE308: - bl sub_81CDC70 - ldr r2, =0x00001814 - adds r1, r5, r2 - bl sub_81D31A4 - lsls r0, 24 - cmp r0, 0 - bne _081CE34E - movs r0, 0 - bl sub_81CEE74 - movs r0, 0x1 - b _081CE376 - .pool -_081CE328: - movs r0, 0 - bl sub_81C7AC0 - bl sub_81CDD5C - cmp r0, 0 - bne _081CE33A - bl sub_81C78A0 -_081CE33A: - movs r0, 0 - b _081CE376 -_081CE33E: - bl IsPaletteFadeActive - cmp r0, 0 - bne _081CE34E - bl MainMenuLoopedTaskIsBusy - cmp r0, 0 - beq _081CE352 -_081CE34E: - movs r0, 0x2 - b _081CE376 -_081CE352: - ldr r1, =0x000028e0 - adds r0, r5, r1 - bl sub_81D354C - movs r0, 0x1 - bl HideBg - movs r0, 0x2 - bl HideBg - movs r0, 0x3 - bl HideBg - movs r0, 0x1 - b _081CE376 - .pool -_081CE374: - movs r0, 0x4 -_081CE376: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81CE2D0 - - thumb_func_start sub_81CE37C -sub_81CE37C: @ 81CE37C - push {r4-r6,lr} - adds r4, r0, 0 - movs r0, 0xC - bl GetSubstructPtr - adds r6, r0, 0 - bl sub_81CDC70 - adds r2, r0, 0 - cmp r4, 0x9 - bls _081CE394 - b _081CE4D0 -_081CE394: - lsls r0, r4, 2 - ldr r1, =_081CE3A4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081CE3A4: - .4byte _081CE3CC - .4byte _081CE3D0 - .4byte _081CE3DA - .4byte _081CE3F0 - .4byte _081CE3F8 - .4byte _081CE418 - .4byte _081CE428 - .4byte _081CE438 - .4byte _081CE44E - .4byte _081CE468 -_081CE3CC: - movs r0, 0 - b _081CE3D2 -_081CE3D0: - movs r0, 0x1 -_081CE3D2: - bl sub_81CD548 -_081CE3D6: - movs r0, 0x1 - b _081CE4D2 -_081CE3DA: - movs r0, 0x2 - bl sub_81CD548 - ldr r1, =0x000028e0 - adds r0, r6, r1 - bl sub_81D3520 - b _081CE3D6 - .pool -_081CE3F0: - adds r0, r2, 0 - bl sub_81D2074 - b _081CE3D6 -_081CE3F8: - ldr r1, =0x00001814 - adds r0, r6, r1 - bl sub_81D3150 - lsls r0, 24 - cmp r0, 0 - bne _081CE4CC - bl sub_81CDC84 - lsls r0, 24 - lsrs r0, 24 - bl sub_81CED30 - b _081CE3D6 - .pool -_081CE418: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0 - b _081CE446 -_081CE428: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0x1 - b _081CE446 -_081CE438: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0x2 -_081CE446: - movs r2, 0 - bl sub_81CE754 - b _081CE3D6 -_081CE44E: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0x3 - movs r2, 0 - bl sub_81CE754 - cmp r0, 0x1 - beq _081CE3D6 - b _081CE4CC -_081CE468: - bl sub_81CDC70 - adds r2, r0, 0 - ldr r0, =0x00001814 - adds r1, r6, r0 - adds r0, r2, 0 - bl sub_81D3178 - lsls r0, 24 - cmp r0, 0 - bne _081CE4CC - ldr r1, =0x000028e0 - adds r0, r6, r1 - bl sub_81D3464 - bl sub_81CDD5C - cmp r0, 0x1 - beq _081CE4A0 - bl sub_81CDC60 - adds r4, r0, 0 - bl sub_81CDC50 - lsls r4, 16 - lsls r0, 16 - cmp r4, r0 - beq _081CE3D6 -_081CE4A0: - ldr r0, =0x000028e0 - adds r5, r6, r0 - ldr r1, =0x00001816 - adds r0, r6, r1 - ldrb r4, [r0] - bl sub_81CDDB0 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_81D3480 - b _081CE3D6 - .pool -_081CE4CC: - movs r0, 0x2 - b _081CE4D2 -_081CE4D0: - movs r0, 0x4 -_081CE4D2: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81CE37C - - thumb_func_start sub_81CE4D8 -sub_81CE4D8: @ 81CE4D8 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xC - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x8 - bhi _081CE5DC - lsls r0, r4, 2 - ldr r1, =_081CE4F8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081CE4F8: - .4byte _081CE51C - .4byte _081CE520 - .4byte _081CE524 - .4byte _081CE52E - .4byte _081CE53E - .4byte _081CE54E - .4byte _081CE55E - .4byte _081CE576 - .4byte _081CE592 -_081CE51C: - movs r0, 0 - b _081CE526 -_081CE520: - movs r0, 0x1 - b _081CE526 -_081CE524: - movs r0, 0x2 -_081CE526: - bl sub_81CD548 - movs r0, 0x1 - b _081CE5DE -_081CE52E: - bl sub_81CDC84 - lsls r0, 24 - lsrs r0, 24 - bl sub_81CED30 - movs r0, 0x1 - b _081CE5DE -_081CE53E: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0 - b _081CE56C -_081CE54E: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0x1 - b _081CE56C -_081CE55E: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0x2 -_081CE56C: - movs r2, 0 - bl sub_81CE754 - movs r0, 0x1 - b _081CE5DE -_081CE576: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0x3 - movs r2, 0 - bl sub_81CE754 - cmp r0, 0x1 - bne _081CE5D8 - movs r0, 0x1 - b _081CE5DE -_081CE592: - bl sub_81CDC70 - ldr r2, =0x00001814 - adds r1, r5, r2 - bl sub_81D3178 - lsls r0, 24 - cmp r0, 0 - bne _081CE5D8 - ldr r0, =0x000028e0 - adds r4, r5, r0 - adds r0, r4, 0 - bl sub_81D3464 - ldr r1, =0x00001816 - adds r0, r5, r1 - ldrb r5, [r0] - bl sub_81CDDB0 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_81D3480 - movs r0, 0x1 - b _081CE5DE - .pool -_081CE5D8: - movs r0, 0x2 - b _081CE5DE -_081CE5DC: - movs r0, 0x4 -_081CE5DE: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81CE4D8 - - thumb_func_start sub_81CE5E4 -sub_81CE5E4: @ 81CE5E4 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xC - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x7 - bhi _081CE6B2 - lsls r0, r4, 2 - ldr r1, =_081CE604 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081CE604: - .4byte _081CE624 - .4byte _081CE628 - .4byte _081CE632 - .4byte _081CE648 - .4byte _081CE660 - .4byte _081CE670 - .4byte _081CE680 - .4byte _081CE696 -_081CE624: - movs r0, 0 - b _081CE62A -_081CE628: - movs r0, 0x1 -_081CE62A: - bl sub_81CD548 -_081CE62E: - movs r0, 0x1 - b _081CE6B4 -_081CE632: - movs r0, 0x2 - bl sub_81CD548 - ldr r1, =0x000028e0 - adds r0, r5, r1 - bl sub_81D3520 - b _081CE62E - .pool -_081CE648: - bl sub_81CDC70 - ldr r2, =0x00001814 - adds r1, r5, r2 - bl sub_81D31A4 - lsls r0, 24 - cmp r0, 0 - beq _081CE62E - b _081CE6AE - .pool -_081CE660: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0 - b _081CE68E -_081CE670: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0x1 - b _081CE68E -_081CE680: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0x2 -_081CE68E: - movs r2, 0 - bl sub_81CE754 - b _081CE62E -_081CE696: - bl sub_81CDC84 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 8 - lsrs r1, 16 - movs r0, 0x3 - movs r2, 0 - bl sub_81CE754 - cmp r0, 0x1 - beq _081CE62E -_081CE6AE: - movs r0, 0x2 - b _081CE6B4 -_081CE6B2: - movs r0, 0x4 -_081CE6B4: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81CE5E4 - - thumb_func_start sub_81CE6BC -sub_81CE6BC: @ 81CE6BC - push {lr} - cmp r0, 0x1 - beq _081CE6E6 - cmp r0, 0x1 - bgt _081CE6CC - cmp r0, 0 - beq _081CE6D2 - b _081CE6FA -_081CE6CC: - cmp r0, 0x2 - beq _081CE6EE - b _081CE6FA -_081CE6D2: - bl sub_81CDD7C - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xB0 - movs r2, 0x20 - bl sub_811FAA4 -_081CE6E2: - movs r0, 0x1 - b _081CE6FC -_081CE6E6: - movs r0, 0x5 - bl sub_81C7BA4 - b _081CE6E2 -_081CE6EE: - bl IsDma3ManagerBusyWithBgCopy_ - cmp r0, 0x1 - bne _081CE6E2 - movs r0, 0x2 - b _081CE6FC -_081CE6FA: - movs r0, 0x4 -_081CE6FC: - pop {r1} - bx r1 - thumb_func_end sub_81CE6BC - - thumb_func_start sub_81CE700 -sub_81CE700: @ 81CE700 - push {lr} - cmp r0, 0x1 - beq _081CE71E - cmp r0, 0x1 - bgt _081CE710 - cmp r0, 0 - beq _081CE716 - b _081CE732 -_081CE710: - cmp r0, 0x2 - beq _081CE726 - b _081CE732 -_081CE716: - bl sub_811FAF8 -_081CE71A: - movs r0, 0x1 - b _081CE734 -_081CE71E: - movs r0, 0x4 - bl sub_81C7BA4 - b _081CE71A -_081CE726: - bl IsDma3ManagerBusyWithBgCopy_ - cmp r0, 0x1 - bne _081CE71A - movs r0, 0x2 - b _081CE734 -_081CE732: - movs r0, 0x4 -_081CE734: - pop {r1} - bx r1 - thumb_func_end sub_81CE700 - - thumb_func_start sub_81CE738 -sub_81CE738: @ 81CE738 - push {lr} - lsls r1, 16 - lsrs r1, 16 - movs r2, 0x1 - movs r3, 0x4 - bl ConvertIntToDecimalStringN - ldr r1, =gText_Number2 - bl StringCopy - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CE738 - - thumb_func_start sub_81CE754 -sub_81CE754: @ 81CE754 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x2C - lsls r0, 24 - lsrs r4, r0, 24 - adds r7, r4, 0 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - lsls r2, 24 - lsrs r5, r2, 24 - movs r0, 0xC - bl GetSubstructPtr - adds r6, r0, 0 - cmp r4, 0x1 - beq _081CE7B8 - cmp r4, 0x1 - bgt _081CE782 - cmp r4, 0 - beq _081CE78E - b _081CE924 -_081CE782: - cmp r4, 0x2 - beq _081CE800 - cmp r4, 0x3 - bne _081CE78C - b _081CE89C -_081CE78C: - b _081CE924 -_081CE78E: - movs r1, 0xC1 - lsls r1, 5 - adds r0, r6, r1 - ldrb r0, [r0] - movs r1, 0 - bl FillWindowPixelBuffer - bl sub_81CDD5C - cmp r0, 0x1 - beq _081CE7A6 - b _081CE924 -_081CE7A6: - ldr r1, =0x00001821 - adds r0, r6, r1 - ldrb r0, [r0] - movs r1, 0 - bl FillWindowPixelBuffer - b _081CE924 - .pool -_081CE7B8: - bl sub_81CDC60 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - bl sub_81CDC50 - lsls r0, 16 - lsrs r0, 16 - subs r0, 0x1 - cmp r4, r0 - bne _081CE7DA - bl sub_81CDD5C - cmp r0, 0x1 - beq _081CE7DA - b _081CE924 -_081CE7DA: - mov r1, r8 - lsls r0, r1, 24 - lsrs r0, 24 - bl sub_81CDD04 - adds r2, r0, 0 - movs r1, 0xC1 - lsls r1, 5 - adds r0, r6, r1 - ldrb r0, [r0] - str r7, [sp] - movs r1, 0 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - b _081CE924 -_081CE800: - bl sub_81CDD5C - adds r7, r0, 0 - cmp r7, 0x1 - beq _081CE80C - b _081CE924 -_081CE80C: - mov r1, r8 - lsls r0, r1, 24 - lsrs r0, 24 - bl sub_81CDD24 - adds r2, r0, 0 - movs r1, 0xC1 - lsls r1, 5 - adds r0, r6, r1 - ldrb r0, [r0] - movs r1, 0x11 - str r1, [sp] - movs r4, 0 - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl AddTextPrinterParameterized - add r1, sp, 0xC - movs r0, 0xFC - strb r0, [r1] - movs r0, 0x4 - strb r0, [r1, 0x1] - movs r0, 0x8 - strb r0, [r1, 0x2] - adds r0, r1, 0 - strb r4, [r0, 0x3] - movs r0, 0x9 - strb r0, [r1, 0x4] - mov r5, sp - adds r5, 0x11 - ldr r1, =gText_Number2 - adds r0, r5, 0 - bl StringCopy - ldr r0, =0x00001821 - adds r6, r0 - ldrb r0, [r6] - str r7, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0x1 - add r2, sp, 0xC - movs r3, 0x4 - bl AddTextPrinterParameterized - bl sub_81CDD48 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r5, 0 - movs r2, 0x1 - movs r3, 0x4 - bl ConvertIntToDecimalStringN - ldrb r0, [r6] - str r7, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0x1 - add r2, sp, 0xC - movs r3, 0x1C - bl AddTextPrinterParameterized - b _081CE924 - .pool -_081CE89C: - ldr r1, =0x00002908 - adds r0, r6, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _081CE8B0 - cmp r0, 0x1 - beq _081CE8EC - b _081CE924 - .pool -_081CE8B0: - cmp r5, 0 - beq _081CE8C4 - movs r1, 0xC1 - lsls r1, 5 - adds r0, r6, r1 - ldrb r0, [r0] - movs r1, 0x3 - bl CopyWindowToVram - b _081CE8D2 -_081CE8C4: - movs r1, 0xC1 - lsls r1, 5 - adds r0, r6, r1 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram -_081CE8D2: - bl sub_81CDD5C - cmp r0, 0x1 - bne _081CE910 - ldr r0, =0x00002908 - adds r1, r6, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _081CE924 - .pool -_081CE8EC: - cmp r5, 0 - beq _081CE904 - ldr r1, =0x00001821 - adds r0, r6, r1 - ldrb r0, [r0] - movs r1, 0x3 - bl CopyWindowToVram - b _081CE910 - .pool -_081CE904: - ldr r1, =0x00001821 - adds r0, r6, r1 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram -_081CE910: - ldr r0, =0x00002908 - adds r1, r6, r0 - movs r0, 0 - strb r0, [r1] - movs r0, 0x1 - b _081CE926 - .pool -_081CE924: - movs r0, 0 -_081CE926: - add sp, 0x2C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_81CE754 - - thumb_func_start sub_81CE934 -sub_81CE934: @ 81CE934 - push {r4,lr} - movs r0, 0xC - bl GetSubstructPtr - adds r4, r0, 0 - ldr r1, =0x00001822 - adds r0, r4, r1 - ldrb r0, [r0] - movs r1, 0x3 - bl CopyWindowToVram - ldr r0, =0x00001823 - adds r4, r0 - ldrb r0, [r4] - movs r1, 0x3 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CE934 - - thumb_func_start sub_81CE964 -sub_81CE964: @ 81CE964 - push {r4,r5,lr} - adds r5, r0, 0 - movs r0, 0x2E - ldrsh r4, [r5, r0] - bl sub_81CDC60 - lsls r0, 16 - lsrs r0, 16 - cmp r4, r0 - bne _081CE982 - adds r0, r5, 0 - movs r1, 0 - bl StartSpriteAnim - b _081CE98A -_081CE982: - adds r0, r5, 0 - movs r1, 0x1 - bl StartSpriteAnim -_081CE98A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81CE964 - - thumb_func_start sub_81CE990 -sub_81CE990: @ 81CE990 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_81CDC60 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - bl sub_81CDC50 - lsls r0, 16 - lsrs r0, 16 - subs r0, 0x1 - cmp r4, r0 - bne _081CE9B0 - movs r0, 0x65 - b _081CE9B2 -_081CE9B0: - movs r0, 0x66 -_081CE9B2: - bl IndexOfSpritePaletteTag - lsls r0, 4 - ldrb r2, [r5, 0x5] - movs r1, 0xF - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x5] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81CE990 - - thumb_func_start sub_81CE9C8 -sub_81CE9C8: @ 81CE9C8 - push {r4,lr} - adds r4, r0, 0 - bl sub_81CDD7C - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81CE9C8 - - thumb_func_start sub_81CE9E4 -sub_81CE9E4: @ 81CE9E4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x58 - movs r0, 0xC - bl GetSubstructPtr - adds r6, r0, 0 - add r4, sp, 0x20 - add r5, sp, 0x38 - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_81D321C - bl sub_81CDD5C - adds r7, r4, 0 - mov r10, r5 - cmp r0, 0x1 - bne _081CEA78 - ldr r1, =0x00001824 - adds r0, r6, r1 - movs r2, 0x6A - strh r2, [r0] - ldr r3, =0x00001826 - adds r1, r6, r3 - strh r2, [r1] - bl sub_811F90C - bl sub_811FA90 - ldr r2, =gUnknown_08623338 - movs r0, 0x69 - movs r1, 0x69 - bl sub_811FF94 - ldrb r1, [r0, 0x5] - movs r2, 0xC - orrs r1, r2 - strb r1, [r0, 0x5] - movs r1, 0xC0 - strh r1, [r0, 0x20] - movs r1, 0x20 - strh r1, [r0, 0x22] - ldr r1, =sub_81CE9C8 - str r1, [r0, 0x1C] - ldr r2, =0x000028dc - adds r1, r6, r2 - str r0, [r1] - movs r0, 0x69 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_81C7990 - add r3, sp, 0x50 - mov r8, r3 - b _081CEBC6 - .pool -_081CEA78: - mov r0, sp - bl LoadSpriteSheets - mov r0, r10 - bl Pokenav_AllocAndLoadPalettes - movs r4, 0 - add r0, sp, 0x50 - mov r8, r0 - b _081CEAE8 -_081CEA8C: - lsls r2, r4, 2 - adds r2, r4 - lsls r2, 18 - movs r1, 0x80 - lsls r1, 12 - adds r2, r1 - asrs r2, 16 - adds r0, r7, 0 - movs r1, 0xE2 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x40 - beq _081CEAD8 - ldr r2, =0x00001806 - adds r0, r6, r2 - adds r0, r4 - strb r3, [r0] - ldr r2, =gSprites - lsls r0, r3, 4 - adds r0, r3 - lsls r0, 2 - adds r1, r0, r2 - strh r4, [r1, 0x2E] - adds r2, 0x1C - adds r0, r2 - ldr r1, =sub_81CE964 - str r1, [r0] - b _081CEAE2 - .pool -_081CEAD8: - ldr r3, =0x00001806 - adds r0, r6, r3 - adds r0, r4 - movs r1, 0xFF - strb r1, [r0] -_081CEAE2: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 -_081CEAE8: - bl sub_81CDC50 - lsls r0, 16 - lsrs r0, 16 - subs r0, 0x1 - cmp r4, r0 - blt _081CEA8C - movs r0, 0x67 - strh r0, [r7] - ldr r0, =SpriteCallbackDummy - str r0, [r7, 0x14] - cmp r4, 0x5 - bhi _081CEB5C - ldr r0, =0x00001806 - adds r5, r6, r0 - ldr r1, =gSprites - mov r9, r1 -_081CEB0A: - lsls r2, r4, 2 - adds r2, r4 - lsls r2, 18 - movs r3, 0x80 - lsls r3, 12 - adds r2, r3 - asrs r2, 16 - adds r0, r7, 0 - movs r1, 0xE6 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x40 - beq _081CEB4C - adds r0, r5, r4 - strb r3, [r0] - lsls r1, r3, 4 - adds r1, r3 - lsls r1, 2 - add r1, r9 - ldrb r2, [r1, 0x3] - movs r0, 0x3F - ands r0, r2 - strb r0, [r1, 0x3] - b _081CEB52 - .pool -_081CEB4C: - adds r1, r5, r4 - movs r0, 0xFF - strb r0, [r1] -_081CEB52: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x5 - bls _081CEB0A -_081CEB5C: - movs r0, 0x66 - strh r0, [r7] - ldr r0, =sub_81CE990 - str r0, [r7, 0x14] - lsls r2, r4, 2 - adds r2, r4 - lsls r2, 18 - movs r0, 0x80 - lsls r0, 12 - adds r2, r0 - asrs r2, 16 - adds r0, r7, 0 - movs r1, 0xDE - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x40 - beq _081CEBBC - ldr r1, =0x00001806 - adds r0, r6, r1 - adds r0, r4 - strb r3, [r0] - ldr r0, =gSprites - lsls r2, r3, 4 - adds r2, r3 - lsls r2, 2 - adds r2, r0 - ldrb r3, [r2, 0x1] - movs r1, 0x3F - adds r0, r1, 0 - ands r0, r3 - movs r3, 0x40 - orrs r0, r3 - strb r0, [r2, 0x1] - ldrb r0, [r2, 0x3] - ands r1, r0 - movs r0, 0x80 - orrs r1, r0 - strb r1, [r2, 0x3] - b _081CEBC6 - .pool -_081CEBBC: - ldr r2, =0x00001806 - adds r0, r6, r2 - adds r0, r4 - movs r1, 0xFF - strb r1, [r0] -_081CEBC6: - mov r0, r8 - mov r1, r10 - bl sub_81D32B0 - mov r0, r8 - bl LoadSpriteSheet - movs r0, 0 - mov r3, r10 - str r0, [r3, 0x8] - mov r0, r10 - bl Pokenav_AllocAndLoadPalettes - add sp, 0x58 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CE9E4 - - thumb_func_start sub_81CEBF4 -sub_81CEBF4: @ 81CEBF4 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_81CDD5C - cmp r0, 0x1 - bne _081CEC28 - ldr r1, =0x000028dc - adds r0, r5, r1 - ldr r0, [r0] - bl DestroySprite - movs r0, 0x6A - bl FreeSpriteTilesByTag - movs r0, 0x69 - bl FreeSpriteTilesByTag - movs r0, 0x6A - bl FreeSpritePaletteByTag - movs r0, 0x69 - bl FreeSpritePaletteByTag - b _081CEC68 - .pool -_081CEC28: - movs r4, 0 -_081CEC2A: - ldr r1, =0x00001806 - adds r0, r5, r1 - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x6 - bls _081CEC2A - movs r0, 0x65 - bl FreeSpriteTilesByTag - movs r0, 0x66 - bl FreeSpriteTilesByTag - movs r0, 0x67 - bl FreeSpriteTilesByTag - movs r0, 0x65 - bl FreeSpritePaletteByTag - movs r0, 0x66 - bl FreeSpritePaletteByTag -_081CEC68: - ldr r0, =0x00001816 - adds r1, r5, r0 - ldrb r0, [r1] - cmp r0, 0xFF - beq _081CEC8E - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - bl DestroySprite - movs r0, 0x64 - bl FreeSpriteTilesByTag - movs r0, 0x64 - bl FreeSpritePaletteByTag -_081CEC8E: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CEBF4 - - thumb_func_start sub_81CECA0 -sub_81CECA0: @ 81CECA0 - push {r4,lr} - movs r0, 0xC - bl GetSubstructPtr - adds r4, r0, 0 - movs r1, 0xC1 - lsls r1, 5 - adds r0, r4, r1 - ldrb r0, [r0] - bl RemoveWindow - bl sub_81CDD5C - cmp r0, 0x1 - bne _081CECEC - ldr r1, =0x00001821 - adds r0, r4, r1 - ldrb r0, [r0] - bl RemoveWindow - ldr r1, =0x00001822 - adds r0, r4, r1 - ldrb r0, [r0] - bl RemoveWindow - ldr r1, =0x00001823 - adds r0, r4, r1 - ldrb r0, [r0] - bl RemoveWindow - b _081CECF0 - .pool -_081CECEC: - bl sub_81C7FDC -_081CECF0: - movs r1, 0x8A - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - adds r0, r4, 0 - bl sub_81CEBF4 - bl sub_81CEE68 - movs r0, 0xC - bl FreePokenavSubstruct - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81CECA0 - - thumb_func_start sub_81CED10 -sub_81CED10: @ 81CED10 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0xC - bl GetSubstructPtr - ldr r1, =0x00001814 - adds r0, r1 - ldrh r0, [r0] - adds r0, 0x26 - strh r0, [r4, 0x20] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CED10 - - thumb_func_start sub_81CED30 -sub_81CED30: @ 81CED30 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x28 - lsls r0, 24 - lsrs r6, r0, 24 - movs r0, 0xC - bl GetSubstructPtr - mov r8, r0 - ldr r7, =0x00001816 - add r7, r8 - ldrb r0, [r7] - cmp r0, 0xFF - bne _081CEDFC - add r5, sp, 0x18 - add r4, sp, 0x20 - adds r0, r5, 0 - mov r1, sp - adds r2, r4, 0 - bl sub_81D31D0 - adds r0, r6, 0 - bl sub_81CDCB4 - str r0, [sp, 0x18] - adds r0, r6, 0 - bl sub_81CDCD4 - str r0, [sp, 0x20] - adds r0, r4, 0 - bl LoadSpritePalette - lsls r0, 24 - lsrs r0, 24 - ldr r4, =0x00001818 - add r4, r8 - strh r0, [r4] - adds r0, r5, 0 - bl LoadSpriteSheet - ldr r5, =0x0000181a - add r5, r8 - strh r0, [r5] - mov r0, sp - movs r1, 0x26 - movs r2, 0x68 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - strb r0, [r7] - cmp r0, 0x40 - bne _081CEDBC - movs r0, 0x64 - bl FreeSpriteTilesByTag - movs r0, 0x64 - bl FreeSpritePaletteByTag - movs r0, 0xFF - strb r0, [r7] - b _081CEE26 - .pool -_081CEDBC: - strb r0, [r7] - ldr r2, =gSprites - ldrb r1, [r7] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, =sub_81CED10 - str r1, [r0] - ldr r1, =0x0000181c - add r1, r8 - ldrh r0, [r5] - lsls r0, 5 - ldr r2, =0x06010000 - adds r0, r2 - str r0, [r1] - ldrh r0, [r4] - lsls r0, 4 - movs r1, 0x80 - lsls r1, 1 - adds r0, r1 - strh r0, [r4] - b _081CEE26 - .pool -_081CEDFC: - adds r0, r6, 0 - bl sub_81CDCB4 - ldr r1, =0x0000181c - add r1, r8 - ldr r2, [r1] - ldr r1, =0x040000d4 - str r0, [r1] - str r2, [r1, 0x4] - ldr r0, =0x80000400 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r0, r6, 0 - bl sub_81CDCD4 - ldr r1, =0x00001818 - add r1, r8 - ldrh r1, [r1] - movs r2, 0x20 - bl LoadPalette -_081CEE26: - add sp, 0x28 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CED30 - - thumb_func_start sub_81CEE44 -sub_81CEE44: @ 81CEE44 - push {r4,lr} - bl sub_81CDC70 - adds r4, r0, 0 - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - adds r0, r4, 0 - bl sub_81D2108 - bl ScanlineEffect_InitHBlankDmaTransfer - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81CEE44 - - thumb_func_start sub_81CEE68 -sub_81CEE68: @ 81CEE68 - push {lr} - bl SetPokenavVBlankCallback - pop {r0} - bx r0 - thumb_func_end sub_81CEE68 - - thumb_func_start sub_81CEE74 -sub_81CEE74: @ 81CEE74 - push {lr} - lsls r0, 24 - cmp r0, 0 - beq _081CEE84 - movs r0, 0x2 - bl ShowBg - b _081CEE8A -_081CEE84: - movs r0, 0x2 - bl HideBg -_081CEE8A: - pop {r0} - bx r0 - thumb_func_end sub_81CEE74 - - thumb_func_start sub_81CEE90 -sub_81CEE90: @ 81CEE90 - push {r4,lr} - bl sub_81CDC70 - adds r4, r0, 0 - bl sub_81CDC84 - lsls r0, 24 - lsrs r0, 24 - ldr r1, =gUnknown_030012BC - strb r0, [r1] - adds r1, r4, 0 - adds r1, 0x50 - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 2 - adds r2, 0x14 - adds r2, r4, r2 - adds r0, r4, 0 - bl sub_81D1F84 - adds r0, r4, 0 - bl sub_81D2074 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CEE90 - - thumb_func_start sub_81CEEC8 -sub_81CEEC8: @ 81CEEC8 - push {r4,r5,lr} - bl sub_81CDC70 - adds r5, r0, 0 - bl sub_81CDD5C - cmp r0, 0 - bne _081CEEF0 - bl sub_81CDC60 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - bl sub_81CDC50 - lsls r0, 16 - lsrs r0, 16 - subs r0, 0x1 - cmp r4, r0 - beq _081CEF0C -_081CEEF0: - bl sub_81CDC84 - lsls r0, 24 - asrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, 0x14 - adds r1, r5, r1 - adds r2, r5, 0 - adds r2, 0x50 - adds r0, r5, 0 - bl sub_81D1F84 -_081CEF0C: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81CEEC8 - - thumb_func_start sub_81CEF14 -sub_81CEF14: @ 81CEF14 - push {r4,lr} - movs r0, 0xC - bl GetSubstructPtr - adds r4, r0, 0 - bl sub_81CDD5C - cmp r0, 0x1 - beq _081CEF2A - movs r0, 0 - b _081CEF30 -_081CEF2A: - ldr r1, =0x00001828 - adds r0, r4, r1 - ldrb r0, [r0] -_081CEF30: - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CEF14 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/pokenav_unk_8.s b/asm/pokenav_unk_8.s deleted file mode 100644 index 5bba161bb..000000000 --- a/asm/pokenav_unk_8.s +++ /dev/null @@ -1,1377 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - -@ File centered around AllocSubstruct(7) - - thumb_func_start sub_81CEF3C -sub_81CEF3C: @ 81CEF3C - push {r4,lr} - movs r0, 0x7 - movs r1, 0x24 - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CEF90 - ldr r1, =0x000006ac - movs r0, 0x12 - bl AllocSubstruct - str r0, [r4, 0x20] - cmp r0, 0 - beq _081CEF90 - ldr r0, =sub_81CF010 - str r0, [r4] - ldr r0, =sub_81CF11C - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r4, 0x4] - movs r0, 0 - str r0, [r4, 0x18] - bl sub_81C76AC - ldr r1, =gUnknown_086233A0 - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - str r0, [r4, 0x14] - movs r0, 0x1 - b _081CEF92 - .pool -_081CEF90: - movs r0, 0 -_081CEF92: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CEF3C - - thumb_func_start sub_81CEF98 -sub_81CEF98: @ 81CEF98 - push {r4,lr} - movs r0, 0x7 - movs r1, 0x24 - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CEFD4 - movs r0, 0x12 - bl GetSubstructPtr - str r0, [r4, 0x20] - ldr r0, =sub_81CF030 - str r0, [r4] - movs r0, 0x1 - str r0, [r4, 0x18] - bl sub_81C76AC - ldr r1, =gUnknown_086233A0 - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - str r0, [r4, 0x14] - movs r0, 0x1 - b _081CEFD6 - .pool -_081CEFD4: - movs r0, 0 -_081CEFD6: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CEF98 - - thumb_func_start sub_81CEFDC -sub_81CEFDC: @ 81CEFDC - push {lr} - movs r0, 0x7 - bl GetSubstructPtr - ldr r1, [r0] - bl _call_via_r1 - pop {r1} - bx r1 - thumb_func_end sub_81CEFDC - - thumb_func_start sub_81CEFF0 -sub_81CEFF0: @ 81CEFF0 - push {lr} - movs r0, 0x7 - bl GetSubstructPtr - ldr r0, [r0, 0x1C] - cmp r0, 0 - bne _081CF004 - movs r0, 0x12 - bl FreePokenavSubstruct -_081CF004: - movs r0, 0x7 - bl FreePokenavSubstruct - pop {r0} - bx r0 - thumb_func_end sub_81CEFF0 - - thumb_func_start sub_81CF010 -sub_81CF010: @ 81CF010 - push {r4,lr} - adds r4, r0, 0 - ldr r0, [r4, 0x4] - bl IsLoopedTaskActive - cmp r0, 0 - bne _081CF022 - ldr r0, =sub_81CF030 - str r0, [r4] -_081CF022: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CF010 - - thumb_func_start sub_81CF030 -sub_81CF030: @ 81CF030 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r2, =gMain - ldrh r1, [r2, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _081CF048 - movs r0, 0x1 - b _081CF0A6 - .pool -_081CF048: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081CF054 - movs r0, 0x2 - b _081CF0A6 -_081CF054: - ldrh r1, [r2, 0x2E] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _081CF062 - movs r0, 0x3 - b _081CF0A6 -_081CF062: - movs r0, 0x10 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _081CF072 - movs r0, 0x4 - b _081CF0A6 -_081CF072: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _081CF088 - str r2, [r4, 0x1C] - ldr r0, =sub_81CF0B0 - str r0, [r4] - movs r0, 0x5 - b _081CF0A6 - .pool -_081CF088: - movs r5, 0x1 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - bne _081CF096 - movs r0, 0 - b _081CF0A6 -_081CF096: - bl GetSelectedMatchCall - ldr r1, [r4, 0x20] - strh r0, [r1, 0x2] - str r5, [r4, 0x1C] - ldr r0, =sub_81CF0B8 - str r0, [r4] - movs r0, 0x6 -_081CF0A6: - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CF030 - - thumb_func_start sub_81CF0B0 -sub_81CF0B0: @ 81CF0B0 - ldr r0, =0x000186a3 - bx lr - .pool - thumb_func_end sub_81CF0B0 - - thumb_func_start sub_81CF0B8 -sub_81CF0B8: @ 81CF0B8 - ldr r0, =0x000186a9 - bx lr - .pool - thumb_func_end sub_81CF0B8 - - thumb_func_start sub_81CF0C0 -sub_81CF0C0: @ 81CF0C0 - push {lr} - movs r0, 0x7 - bl GetSubstructPtr - ldr r0, [r0, 0x18] - pop {r1} - bx r1 - thumb_func_end sub_81CF0C0 - - thumb_func_start sub_81CF0D0 -sub_81CF0D0: @ 81CF0D0 - push {lr} - movs r0, 0x7 - bl GetSubstructPtr - ldr r0, [r0, 0x20] - adds r0, 0x4 - pop {r1} - bx r1 - thumb_func_end sub_81CF0D0 - - thumb_func_start sub_81CF0E0 -sub_81CF0E0: @ 81CF0E0 - push {lr} - movs r0, 0x7 - bl GetSubstructPtr - ldr r0, [r0, 0x20] - ldrh r0, [r0] - pop {r1} - bx r1 - thumb_func_end sub_81CF0E0 - - thumb_func_start sub_81CF0F0 -sub_81CF0F0: @ 81CF0F0 - push {r4,lr} - movs r0, 0x7 - bl GetSubstructPtr - adds r4, r0, 0 - bl GetSelectedMatchCall - ldr r1, [r4, 0x20] - lsls r0, 2 - adds r1, r0 - ldrh r0, [r1, 0x6] - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CF0F0 - - thumb_func_start sub_81CF10C -sub_81CF10C: @ 81CF10C - push {lr} - movs r0, 0x7 - bl GetSubstructPtr - ldr r0, [r0, 0x20] - ldrh r0, [r0, 0x2] - pop {r1} - bx r1 - thumb_func_end sub_81CF10C - - thumb_func_start sub_81CF11C -sub_81CF11C: @ 81CF11C - push {lr} - ldr r2, =gUnknown_086233B4 - lsls r1, r0, 2 - adds r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CF11C - - thumb_func_start sub_81CF134 -sub_81CF134: @ 81CF134 - push {r4-r6,lr} - sub sp, 0x4 - movs r0, 0x7 - bl GetSubstructPtr - adds r6, r0, 0 - ldr r0, [r6, 0x20] - movs r1, 0 - strh r1, [r0] - ldr r0, [r6, 0x20] - strh r1, [r0, 0x2] - ldr r1, =0xffffff00 - ldr r0, [sp] - ands r0, r1 - movs r1, 0xE - orrs r0, r1 - str r0, [sp] - movs r5, 0 -_081CF158: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x5 - bl GetMonData - cmp r0, 0 - beq _081CF1AA - adds r0, r4, 0 - movs r1, 0x6 - bl GetMonData - cmp r0, 0 - bne _081CF1A4 - lsls r1, r5, 24 - lsrs r1, 16 - ldr r2, =0xffff00ff - ldr r0, [sp] - ands r0, r2 - orrs r0, r1 - str r0, [sp] - ldr r1, [r6, 0x14] - adds r0, r4, 0 - bl GetMonData - lsls r0, 16 - ldr r2, =0x0000ffff - ldr r1, [sp] - ands r1, r2 - orrs r1, r0 - str r1, [sp] - adds r0, r6, 0 - mov r1, sp - bl sub_81CF2C4 -_081CF1A4: - adds r5, 0x1 - cmp r5, 0x5 - ble _081CF158 -_081CF1AA: - movs r0, 0x1 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CF134 - - thumb_func_start sub_81CF1C4 -sub_81CF1C4: @ 81CF1C4 - push {lr} - movs r0, 0x7 - bl GetSubstructPtr - movs r1, 0 - str r1, [r0, 0x10] - str r1, [r0, 0xC] - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_81CF1C4 - - thumb_func_start sub_81CF1D8 -sub_81CF1D8: @ 81CF1D8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r0, 0x7 - bl GetSubstructPtr - adds r6, r0, 0 - ldr r5, [r6, 0xC] - ldr r4, [r6, 0x10] - movs r0, 0 - mov r8, r0 - cmp r5, 0xD - bgt _081CF268 -_081CF1F4: - cmp r4, 0x1D - bgt _081CF260 - lsls r0, r5, 24 - lsrs r7, r0, 24 -_081CF1FC: - adds r0, r5, 0 - adds r1, r4, 0 - bl CheckBoxMonSanityAt - cmp r0, 0 - beq _081CF23A - ldr r1, =0xffffff00 - ldr r0, [sp] - ands r0, r1 - orrs r0, r7 - lsls r1, r4, 24 - lsrs r1, 24 - lsls r3, r1, 8 - ldr r2, =0xffff00ff - ands r0, r2 - orrs r0, r3 - str r0, [sp] - ldr r2, [r6, 0x14] - adds r0, r7, 0 - bl GetBoxMonDataAt - lsls r0, 16 - ldr r2, =0x0000ffff - ldr r1, [sp] - ands r1, r2 - orrs r1, r0 - str r1, [sp] - adds r0, r6, 0 - mov r1, sp - bl sub_81CF2C4 -_081CF23A: - movs r0, 0x1 - add r8, r0 - adds r4, 0x1 - mov r0, r8 - cmp r0, 0xE - ble _081CF25C - str r5, [r6, 0xC] - str r4, [r6, 0x10] - movs r0, 0x3 - b _081CF26A - .pool -_081CF25C: - cmp r4, 0x1D - ble _081CF1FC -_081CF260: - movs r4, 0 - adds r5, 0x1 - cmp r5, 0xD - ble _081CF1F4 -_081CF268: - movs r0, 0x1 -_081CF26A: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_81CF1D8 - - thumb_func_start sub_81CF278 -sub_81CF278: @ 81CF278 - push {r4-r6,lr} - movs r0, 0x7 - bl GetSubstructPtr - adds r5, r0, 0 - ldr r0, [r5, 0x20] - ldrh r6, [r0] - ldrh r4, [r0, 0x6] - movs r1, 0x1 - strh r1, [r0, 0x6] - movs r3, 0x1 - cmp r3, r6 - bge _081CF2B8 -_081CF292: - ldr r2, [r5, 0x20] - lsls r0, r3, 2 - adds r1, r2, r0 - ldrh r0, [r1, 0x6] - cmp r0, r4 - bne _081CF2AC - subs r0, r3, 0x1 - lsls r0, 2 - adds r0, r2, r0 - ldrh r0, [r0, 0x6] - strh r0, [r1, 0x6] - adds r0, r3, 0x1 - b _081CF2B2 -_081CF2AC: - adds r4, r0, 0 - adds r0, r3, 0x1 - strh r0, [r1, 0x6] -_081CF2B2: - adds r3, r0, 0 - cmp r3, r6 - blt _081CF292 -_081CF2B8: - movs r0, 0x1 - str r0, [r5, 0x18] - movs r0, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81CF278 - - thumb_func_start sub_81CF2C4 -sub_81CF2C4: @ 81CF2C4 - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - movs r1, 0 - ldr r0, [r5, 0x20] - ldrh r2, [r0] - lsrs r3, r2, 1 - cmp r2, r3 - beq _081CF2F4 - adds r6, r0, 0 - ldrh r4, [r7, 0x2] -_081CF2DA: - lsls r0, r3, 2 - adds r0, r6, r0 - ldrh r0, [r0, 0x6] - cmp r4, r0 - bls _081CF2E8 - adds r2, r3, 0 - b _081CF2EA -_081CF2E8: - adds r1, r3, 0x1 -_081CF2EA: - subs r0, r2, r1 - lsrs r0, 1 - adds r3, r1, r0 - cmp r2, r3 - bne _081CF2DA -_081CF2F4: - ldr r0, [r5, 0x20] - ldrh r2, [r0] - lsls r6, r3, 2 - cmp r2, r3 - bls _081CF318 - lsls r0, r2, 2 - subs r4, r0, 0x4 -_081CF302: - ldr r0, [r5, 0x20] - lsls r1, r2, 2 - adds r0, 0x4 - adds r1, r0, r1 - adds r0, r4 - ldr r0, [r0] - str r0, [r1] - subs r4, 0x4 - subs r2, 0x1 - cmp r2, r3 - bhi _081CF302 -_081CF318: - ldr r0, [r5, 0x20] - adds r0, 0x4 - adds r0, r6 - ldr r1, [r7] - str r1, [r0] - ldr r1, [r5, 0x20] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81CF2C4 - - thumb_func_start sub_81CF330 -sub_81CF330: @ 81CF330 - push {r4,lr} - movs r1, 0x81 - lsls r1, 4 - movs r0, 0x8 - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CF360 - ldr r0, =sub_81CF418 - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r4, 0x4] - ldr r0, =sub_81CF3E4 - str r0, [r4] - movs r0, 0 - str r0, [r4, 0xC] - movs r0, 0x1 - b _081CF362 - .pool -_081CF360: - movs r0, 0 -_081CF362: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CF330 - - thumb_func_start sub_81CF368 -sub_81CF368: @ 81CF368 - push {r4,lr} - movs r1, 0x81 - lsls r1, 4 - movs r0, 0x8 - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CF398 - ldr r0, =sub_81CF418 - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r4, 0x4] - ldr r0, =sub_81CF3E4 - str r0, [r4] - movs r0, 0x1 - str r0, [r4, 0xC] - b _081CF39A - .pool -_081CF398: - movs r0, 0 -_081CF39A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CF368 - - thumb_func_start sub_81CF3A0 -sub_81CF3A0: @ 81CF3A0 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x8 - bl GetSubstructPtr - adds r5, r0, 0 - ldr r0, =gUnknown_08623598 - lsls r4, 2 - adds r4, r0 - ldr r0, [r4] - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r5, 0x4] - ldr r0, =sub_81CF3E4 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CF3A0 - - thumb_func_start sub_81CF3D0 -sub_81CF3D0: @ 81CF3D0 - push {lr} - movs r0, 0x8 - bl GetSubstructPtr - ldr r0, [r0] - bl _call_via_r0 - pop {r1} - bx r1 - thumb_func_end sub_81CF3D0 - - thumb_func_start sub_81CF3E4 -sub_81CF3E4: @ 81CF3E4 - push {lr} - movs r0, 0x8 - bl GetSubstructPtr - ldr r0, [r0, 0x4] - bl IsLoopedTaskActive - pop {r1} - bx r1 - thumb_func_end sub_81CF3E4 - - thumb_func_start sub_81CF3F8 -sub_81CF3F8: @ 81CF3F8 - push {r4,lr} - movs r0, 0x8 - bl GetSubstructPtr - adds r4, r0, 0 - bl sub_81C8234 - ldrb r0, [r4, 0x8] - bl RemoveWindow - movs r0, 0x8 - bl FreePokenavSubstruct - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81CF3F8 - - thumb_func_start sub_81CF418 -sub_81CF418: @ 81CF418 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0x8 - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x5 - bls _081CF42C - b _081CF56E -_081CF42C: - lsls r0, r4, 2 - ldr r1, =_081CF43C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081CF43C: - .4byte _081CF454 - .4byte _081CF4AC - .4byte _081CF4C0 - .4byte _081CF4E0 - .4byte _081CF4F6 - .4byte _081CF55A -_081CF454: - ldr r0, =gUnknown_08623590 - movs r1, 0x2 - bl InitBgTemplates - ldr r1, =gUnknown_086233E4 - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - adds r1, r5, 0 - adds r1, 0x10 - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, =gUnknown_086234AC - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - ldr r0, =gUnknown_086233C4 - movs r1, 0x10 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - movs r0, 0x1 - bl CopyBgTilemapBufferToVram -_081CF498: - movs r0, 0 - b _081CF570 - .pool -_081CF4AC: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081CF56A - bl sub_81CF0C0 - cmp r0, 0 - beq _081CF56A - b _081CF498 -_081CF4C0: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081CF56A - ldr r0, =gUnknown_08623570 - movs r1, 0x20 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - bl sub_81CF88C - b _081CF498 - .pool -_081CF4E0: - bl sub_81C8224 - cmp r0, 0 - bne _081CF56A - adds r0, r5, 0 - bl sub_81CF7C8 - movs r0, 0x3 - bl sub_81C7BA4 - b _081CF498 -_081CF4F6: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081CF56A - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl HideBg - ldr r0, [r5, 0xC] - cmp r0, 0 - bne _081CF552 - bl sub_81C76AC - adds r4, r0, 0 - adds r4, 0x8 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl LoadLeftHeaderGfxForIndex - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0 - bl sub_81C7FA0 - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl sub_81C7FA0 -_081CF552: - movs r0, 0x1 - bl sub_81C7AC0 - b _081CF498 -_081CF55A: - bl IsPaletteFadeActive - cmp r0, 0 - bne _081CF56A - bl sub_81C8010 - cmp r0, 0 - beq _081CF56E -_081CF56A: - movs r0, 0x2 - b _081CF570 -_081CF56E: - movs r0, 0x4 -_081CF570: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81CF418 - - thumb_func_start sub_81CF578 -sub_81CF578: @ 81CF578 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x8 - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x1 - beq _081CF5C6 - cmp r4, 0x1 - bgt _081CF592 - cmp r4, 0 - beq _081CF59C - b _081CF5E6 -_081CF592: - cmp r4, 0x2 - beq _081CF5CE - cmp r4, 0x3 - beq _081CF5D8 - b _081CF5E6 -_081CF59C: - bl MatchCall_MoveCursorUp - cmp r0, 0x1 - beq _081CF5B4 - cmp r0, 0x1 - bgt _081CF5AE - cmp r0, 0 - beq _081CF5E6 - b _081CF5D4 -_081CF5AE: - cmp r0, 0x2 - beq _081CF5BE - b _081CF5D4 -_081CF5B4: - movs r0, 0x5 - bl PlaySE - movs r0, 0x7 - b _081CF5E8 -_081CF5BE: - movs r0, 0x5 - bl PlaySE - b _081CF5D4 -_081CF5C6: - bl sub_81C8630 - cmp r0, 0 - bne _081CF5E2 -_081CF5CE: - adds r0, r5, 0 - bl sub_81CF7F4 -_081CF5D4: - movs r0, 0 - b _081CF5E8 -_081CF5D8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081CF5E6 -_081CF5E2: - movs r0, 0x2 - b _081CF5E8 -_081CF5E6: - movs r0, 0x4 -_081CF5E8: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81CF578 - - thumb_func_start sub_81CF5F0 -sub_81CF5F0: @ 81CF5F0 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x8 - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x1 - beq _081CF63E - cmp r4, 0x1 - bgt _081CF60A - cmp r4, 0 - beq _081CF614 - b _081CF65E -_081CF60A: - cmp r4, 0x2 - beq _081CF646 - cmp r4, 0x3 - beq _081CF650 - b _081CF65E -_081CF614: - bl MatchCall_MoveCursorDown - cmp r0, 0x1 - beq _081CF62C - cmp r0, 0x1 - bgt _081CF626 - cmp r0, 0 - beq _081CF65E - b _081CF64C -_081CF626: - cmp r0, 0x2 - beq _081CF636 - b _081CF64C -_081CF62C: - movs r0, 0x5 - bl PlaySE - movs r0, 0x7 - b _081CF660 -_081CF636: - movs r0, 0x5 - bl PlaySE - b _081CF64C -_081CF63E: - bl sub_81C8630 - cmp r0, 0 - bne _081CF65A -_081CF646: - adds r0, r5, 0 - bl sub_81CF7F4 -_081CF64C: - movs r0, 0 - b _081CF660 -_081CF650: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081CF65E -_081CF65A: - movs r0, 0x2 - b _081CF660 -_081CF65E: - movs r0, 0x4 -_081CF660: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81CF5F0 - - thumb_func_start sub_81CF668 -sub_81CF668: @ 81CF668 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x8 - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x1 - beq _081CF6B6 - cmp r4, 0x1 - bgt _081CF682 - cmp r4, 0 - beq _081CF68C - b _081CF6D6 -_081CF682: - cmp r4, 0x2 - beq _081CF6BE - cmp r4, 0x3 - beq _081CF6C8 - b _081CF6D6 -_081CF68C: - bl MatchCall_PageUp - cmp r0, 0x1 - beq _081CF6A4 - cmp r0, 0x1 - bgt _081CF69E - cmp r0, 0 - beq _081CF6D6 - b _081CF6C4 -_081CF69E: - cmp r0, 0x2 - beq _081CF6AE - b _081CF6C4 -_081CF6A4: - movs r0, 0x5 - bl PlaySE - movs r0, 0x7 - b _081CF6D8 -_081CF6AE: - movs r0, 0x5 - bl PlaySE - b _081CF6C4 -_081CF6B6: - bl sub_81C8630 - cmp r0, 0 - bne _081CF6D2 -_081CF6BE: - adds r0, r5, 0 - bl sub_81CF7F4 -_081CF6C4: - movs r0, 0 - b _081CF6D8 -_081CF6C8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081CF6D6 -_081CF6D2: - movs r0, 0x2 - b _081CF6D8 -_081CF6D6: - movs r0, 0x4 -_081CF6D8: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81CF668 - - thumb_func_start sub_81CF6E0 -sub_81CF6E0: @ 81CF6E0 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x8 - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x1 - beq _081CF72E - cmp r4, 0x1 - bgt _081CF6FA - cmp r4, 0 - beq _081CF704 - b _081CF74E -_081CF6FA: - cmp r4, 0x2 - beq _081CF736 - cmp r4, 0x3 - beq _081CF740 - b _081CF74E -_081CF704: - bl MatchCall_PageDown - cmp r0, 0x1 - beq _081CF71C - cmp r0, 0x1 - bgt _081CF716 - cmp r0, 0 - beq _081CF74E - b _081CF73C -_081CF716: - cmp r0, 0x2 - beq _081CF726 - b _081CF73C -_081CF71C: - movs r0, 0x5 - bl PlaySE - movs r0, 0x7 - b _081CF750 -_081CF726: - movs r0, 0x5 - bl PlaySE - b _081CF73C -_081CF72E: - bl sub_81C8630 - cmp r0, 0 - bne _081CF74A -_081CF736: - adds r0, r5, 0 - bl sub_81CF7F4 -_081CF73C: - movs r0, 0 - b _081CF750 -_081CF740: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081CF74E -_081CF74A: - movs r0, 0x2 - b _081CF750 -_081CF74E: - movs r0, 0x4 -_081CF750: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81CF6E0 - - thumb_func_start sub_81CF758 -sub_81CF758: @ 81CF758 - push {lr} - cmp r0, 0 - beq _081CF764 - cmp r0, 0x1 - beq _081CF778 - b _081CF790 -_081CF764: - movs r0, 0x5 - bl PlaySE - movs r0, 0 - bl sub_81C7AC0 - bl sub_81C78A0 - movs r0, 0 - b _081CF792 -_081CF778: - bl IsPaletteFadeActive - cmp r0, 0 - bne _081CF788 - bl MainMenuLoopedTaskIsBusy - cmp r0, 0 - beq _081CF78C -_081CF788: - movs r0, 0x2 - b _081CF792 -_081CF78C: - bl sub_81C7FDC -_081CF790: - movs r0, 0x4 -_081CF792: - pop {r1} - bx r1 - thumb_func_end sub_81CF758 - - thumb_func_start sub_81CF798 -sub_81CF798: @ 81CF798 - push {lr} - cmp r0, 0 - beq _081CF7A4 - cmp r0, 0x1 - beq _081CF7B4 - b _081CF7C0 -_081CF7A4: - movs r0, 0x5 - bl PlaySE - movs r0, 0 - bl sub_81C7AC0 - movs r0, 0 - b _081CF7C2 -_081CF7B4: - bl IsPaletteFadeActive - cmp r0, 0 - beq _081CF7C0 - movs r0, 0x2 - b _081CF7C2 -_081CF7C0: - movs r0, 0x4 -_081CF7C2: - pop {r1} - bx r1 - thumb_func_end sub_81CF798 - - thumb_func_start sub_81CF7C8 -sub_81CF7C8: @ 81CF7C8 - push {r4,lr} - adds r4, r0, 0 - ldr r0, =gUnknown_086235B4 - bl AddWindow - strh r0, [r4, 0x8] - lsls r0, 24 - lsrs r0, 24 - bl PutWindowTilemap - ldrb r0, [r4, 0x8] - movs r1, 0x1 - bl CopyWindowToVram - adds r0, r4, 0 - bl sub_81CF7F4 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CF7C8 - - thumb_func_start sub_81CF7F4 -sub_81CF7F4: @ 81CF7F4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - mov r8, r0 - bl sub_81CF0F0 - adds r7, r0, 0 - bl DynamicPlaceholderTextUtil_Reset - ldr r4, =gStringVar1 - movs r0, 0 - adds r1, r4, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - movs r0, 0xFF - strb r0, [r4] - ldr r5, =gStringVar2 - ldr r1, =gText_NumberF700 - adds r0, r5, 0 - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - mov r1, r8 - ldrb r0, [r1, 0x8] - movs r1, 0x1 - mov r10, r1 - str r1, [sp] - movs r1, 0xFF - mov r9, r1 - str r1, [sp, 0x4] - movs r6, 0 - str r6, [sp, 0x8] - movs r1, 0x1 - adds r2, r5, 0 - movs r3, 0x4 - bl AddTextPrinterParameterized - adds r0, r4, 0 - adds r1, r7, 0 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - mov r1, r8 - ldrb r0, [r1, 0x8] - mov r1, r10 - str r1, [sp] - mov r1, r9 - str r1, [sp, 0x4] - str r6, [sp, 0x8] - movs r1, 0x1 - adds r2, r4, 0 - movs r3, 0x22 - bl AddTextPrinterParameterized - mov r1, r8 - ldrb r0, [r1, 0x8] - movs r1, 0x2 - bl CopyWindowToVram - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CF7F4 - - thumb_func_start sub_81CF88C -sub_81CF88C: @ 81CF88C - push {r4,lr} - sub sp, 0x18 - bl sub_81CF0D0 - str r0, [sp] - bl sub_81CF0E0 - mov r1, sp - movs r4, 0 - strh r0, [r1, 0x4] - movs r0, 0x4 - strb r0, [r1, 0x8] - bl sub_81CF10C - mov r1, sp - strh r0, [r1, 0x6] - movs r0, 0xD - strb r0, [r1, 0x9] - movs r0, 0x11 - strb r0, [r1, 0xA] - mov r0, sp - movs r2, 0x1 - strb r2, [r0, 0xB] - movs r0, 0x8 - strb r0, [r1, 0xC] - movs r0, 0x2 - strb r0, [r1, 0xD] - mov r0, sp - strb r2, [r0, 0xE] - ldr r0, =sub_81CF8E4 - str r0, [sp, 0x10] - str r4, [sp, 0x14] - ldr r0, =gUnknown_08623594 - movs r2, 0 - bl sub_81C81D4 - add sp, 0x18 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CF88C - - thumb_func_start sub_81CF8E4 -sub_81CF8E4: @ 81CF8E4 - push {r4-r7,lr} - adds r2, r0, 0 - adds r6, r1, 0 - ldrb r0, [r2] - cmp r0, 0xE - bne _081CF924 - ldrb r1, [r2, 0x1] - movs r0, 0x64 - adds r4, r1, 0 - muls r4, r0 - ldr r0, =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - bl GetMonGender - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - bl GetLevelFromMonExp - lsls r0, 24 - lsrs r7, r0, 24 - ldr r2, =gStringVar3 - adds r0, r4, 0 - movs r1, 0x2 - bl GetMonData - b _081CF94A - .pool -_081CF924: - ldrb r0, [r2] - ldrb r1, [r2, 0x1] - bl GetBoxedMonPtr - adds r4, r0, 0 - bl GetBoxMonGender - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - bl GetLevelFromBoxMonExp - lsls r0, 24 - lsrs r7, r0, 24 - ldr r2, =gStringVar3 - adds r0, r4, 0 - movs r1, 0x2 - bl GetBoxMonData -_081CF94A: - ldr r4, =gStringVar3 - adds r0, r4, 0 - bl StringGetEnd10 - adds r0, r6, 0 - movs r1, 0x1 - adds r2, r4, 0 - movs r3, 0x3C - bl sub_81DB494 - adds r6, r0, 0 - cmp r5, 0 - beq _081CF974 - cmp r5, 0xFE - beq _081CF97C - ldr r1, =gUnknown_086235D4 - b _081CF97E - .pool -_081CF974: - ldr r1, =gUnknown_086235BC - b _081CF97E - .pool -_081CF97C: - ldr r1, =gUnknown_086235C8 -_081CF97E: - ldr r4, =gStringVar1 - adds r0, r4, 0 - bl StringCopy - movs r1, 0xBA - strb r1, [r0] - adds r0, 0x1 - movs r1, 0xF9 - strb r1, [r0] - adds r0, 0x1 - movs r1, 0x5 - strb r1, [r0] - adds r0, 0x1 - adds r1, r7, 0 - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - adds r0, r6, 0 - movs r1, 0x1 - adds r2, r4, 0 - movs r3, 0x28 - bl sub_81DB494 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CF8E4 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/pokenav_unk_9.s b/asm/pokenav_unk_9.s deleted file mode 100644 index 7f9d5d15b..000000000 --- a/asm/pokenav_unk_9.s +++ /dev/null @@ -1,1393 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - -@ File centered around AllocSubstruct(9) - - thumb_func_start sub_81CF9BC -sub_81CF9BC: @ 81CF9BC - push {r4,lr} - movs r0, 0x9 - movs r1, 0x20 - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CF9FC - ldr r1, =0x000006ac - movs r0, 0x12 - bl AllocSubstruct - str r0, [r4, 0x1C] - cmp r0, 0 - beq _081CF9FC - ldr r0, =sub_81CFA68 - str r0, [r4] - ldr r0, =sub_81CFB74 - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r4, 0x4] - movs r0, 0 - str r0, [r4, 0x14] - movs r0, 0x1 - b _081CF9FE - .pool -_081CF9FC: - movs r0, 0 -_081CF9FE: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CF9BC - - thumb_func_start sub_81CFA04 -sub_81CFA04: @ 81CFA04 - push {r4,lr} - movs r0, 0x9 - movs r1, 0x20 - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CFA2C - movs r0, 0x12 - bl GetSubstructPtr - str r0, [r4, 0x1C] - ldr r0, =sub_81CFA88 - str r0, [r4] - movs r0, 0x1 - str r0, [r4, 0x14] - b _081CFA2E - .pool -_081CFA2C: - movs r0, 0 -_081CFA2E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CFA04 - - thumb_func_start sub_81CFA34 -sub_81CFA34: @ 81CFA34 - push {lr} - movs r0, 0x9 - bl GetSubstructPtr - ldr r1, [r0] - bl _call_via_r1 - pop {r1} - bx r1 - thumb_func_end sub_81CFA34 - - thumb_func_start sub_81CFA48 -sub_81CFA48: @ 81CFA48 - push {lr} - movs r0, 0x9 - bl GetSubstructPtr - ldr r0, [r0, 0x18] - cmp r0, 0 - bne _081CFA5C - movs r0, 0x12 - bl FreePokenavSubstruct -_081CFA5C: - movs r0, 0x9 - bl FreePokenavSubstruct - pop {r0} - bx r0 - thumb_func_end sub_81CFA48 - - thumb_func_start sub_81CFA68 -sub_81CFA68: @ 81CFA68 - push {r4,lr} - adds r4, r0, 0 - ldr r0, [r4, 0x4] - bl IsLoopedTaskActive - cmp r0, 0 - bne _081CFA7A - ldr r0, =sub_81CFA88 - str r0, [r4] -_081CFA7A: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CFA68 - - thumb_func_start sub_81CFA88 -sub_81CFA88: @ 81CFA88 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r2, =gMain - ldrh r1, [r2, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _081CFAA0 - movs r0, 0x1 - b _081CFAFE - .pool -_081CFAA0: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081CFAAC - movs r0, 0x2 - b _081CFAFE -_081CFAAC: - ldrh r1, [r2, 0x2E] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _081CFABA - movs r0, 0x3 - b _081CFAFE -_081CFABA: - movs r0, 0x10 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _081CFACA - movs r0, 0x4 - b _081CFAFE -_081CFACA: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _081CFAE0 - str r2, [r4, 0x18] - ldr r0, =sub_81CFB08 - str r0, [r4] - movs r0, 0x5 - b _081CFAFE - .pool -_081CFAE0: - movs r5, 0x1 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - bne _081CFAEE - movs r0, 0 - b _081CFAFE -_081CFAEE: - bl GetSelectedMatchCall - ldr r1, [r4, 0x1C] - strh r0, [r1, 0x2] - str r5, [r4, 0x18] - ldr r0, =sub_81CFB10 - str r0, [r4] - movs r0, 0x6 -_081CFAFE: - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CFA88 - - thumb_func_start sub_81CFB08 -sub_81CFB08: @ 81CFB08 - ldr r0, =0x000186a5 - bx lr - .pool - thumb_func_end sub_81CFB08 - - thumb_func_start sub_81CFB10 -sub_81CFB10: @ 81CFB10 - ldr r0, =0x000186ad - bx lr - .pool - thumb_func_end sub_81CFB10 - - thumb_func_start sub_81CFB18 -sub_81CFB18: @ 81CFB18 - push {lr} - movs r0, 0x9 - bl GetSubstructPtr - ldr r0, [r0, 0x14] - pop {r1} - bx r1 - thumb_func_end sub_81CFB18 - - thumb_func_start sub_81CFB28 -sub_81CFB28: @ 81CFB28 - push {lr} - movs r0, 0x9 - bl GetSubstructPtr - ldr r0, [r0, 0x1C] - adds r0, 0x4 - pop {r1} - bx r1 - thumb_func_end sub_81CFB28 - - thumb_func_start sub_81CFB38 -sub_81CFB38: @ 81CFB38 - push {lr} - movs r0, 0x9 - bl GetSubstructPtr - ldr r0, [r0, 0x1C] - ldrh r0, [r0] - pop {r1} - bx r1 - thumb_func_end sub_81CFB38 - - thumb_func_start sub_81CFB48 -sub_81CFB48: @ 81CFB48 - push {r4,lr} - movs r0, 0x9 - bl GetSubstructPtr - adds r4, r0, 0 - bl GetSelectedMatchCall - ldr r1, [r4, 0x1C] - lsls r0, 2 - adds r1, r0 - ldrh r0, [r1, 0x6] - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CFB48 - - thumb_func_start sub_81CFB64 -sub_81CFB64: @ 81CFB64 - push {lr} - movs r0, 0x9 - bl GetSubstructPtr - ldr r0, [r0, 0x1C] - ldrh r0, [r0, 0x2] - pop {r1} - bx r1 - thumb_func_end sub_81CFB64 - - thumb_func_start sub_81CFB74 -sub_81CFB74: @ 81CFB74 - push {lr} - ldr r2, =gUnknown_086235D8 - lsls r1, r0, 2 - adds r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CFB74 - - thumb_func_start sub_81CFB8C -sub_81CFB8C: @ 81CFB8C - push {r4-r6,lr} - sub sp, 0x4 - movs r0, 0x9 - bl GetSubstructPtr - adds r6, r0, 0 - ldr r0, [r6, 0x1C] - movs r1, 0 - strh r1, [r0] - ldr r0, [r6, 0x1C] - strh r1, [r0, 0x2] - ldr r1, =0xffffff00 - ldr r0, [sp] - ands r0, r1 - movs r1, 0xE - orrs r0, r1 - str r0, [sp] - movs r5, 0 -_081CFBB0: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x5 - bl GetMonData - cmp r0, 0 - beq _081CFC10 - adds r0, r4, 0 - movs r1, 0x6 - bl GetMonData - cmp r0, 0 - bne _081CFC0A - adds r0, r4, 0 - movs r1, 0x4 - bl GetMonData - cmp r0, 0 - bne _081CFC0A - adds r0, r4, 0 - movs r1, 0x52 - bl GetMonData - adds r3, r0, 0 - cmp r3, 0 - beq _081CFC0A - lsls r1, r5, 24 - lsrs r1, 16 - ldr r2, =0xffff00ff - ldr r0, [sp] - ands r0, r2 - orrs r0, r1 - lsls r2, r3, 16 - ldr r1, =0x0000ffff - ands r0, r1 - orrs r0, r2 - str r0, [sp] - adds r0, r6, 0 - mov r1, sp - bl sub_81CFCEC -_081CFC0A: - adds r5, 0x1 - cmp r5, 0x5 - ble _081CFBB0 -_081CFC10: - movs r0, 0x1 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CFB8C - - thumb_func_start sub_81CFC2C -sub_81CFC2C: @ 81CFC2C - push {lr} - movs r0, 0x9 - bl GetSubstructPtr - movs r1, 0 - str r1, [r0, 0x10] - str r1, [r0, 0xC] - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_81CFC2C - - thumb_func_start sub_81CFC40 -sub_81CFC40: @ 81CFC40 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - movs r0, 0x9 - bl GetSubstructPtr - mov r8, r0 - ldr r7, [r0, 0xC] - ldr r6, [r0, 0x10] - movs r0, 0 - mov r9, r0 - cmp r7, 0xD - bgt _081CFCD4 - b _081CFCC8 -_081CFC60: - adds r0, r7, 0 - adds r1, r6, 0 - bl CheckBoxMonSanityAt - cmp r0, 0 - beq _081CFCA6 - lsls r0, r7, 24 - lsrs r5, r0, 24 - lsls r0, r6, 24 - lsrs r4, r0, 24 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x52 - bl GetBoxMonDataAt - adds r3, r0, 0 - cmp r3, 0 - beq _081CFCA6 - ldr r1, =0xffffff00 - ldr r0, [sp] - ands r0, r1 - orrs r0, r5 - lsls r2, r4, 8 - ldr r1, =0xffff00ff - ands r0, r1 - orrs r0, r2 - lsls r2, r3, 16 - ldr r1, =0x0000ffff - ands r0, r1 - orrs r0, r2 - str r0, [sp] - mov r0, r8 - mov r1, sp - bl sub_81CFCEC -_081CFCA6: - movs r1, 0x1 - add r9, r1 - adds r6, 0x1 - mov r0, r9 - cmp r0, 0xE - ble _081CFCC8 - mov r1, r8 - str r7, [r1, 0xC] - str r6, [r1, 0x10] - movs r0, 0x3 - b _081CFCDC - .pool -_081CFCC8: - cmp r6, 0x1D - ble _081CFC60 - movs r6, 0 - adds r7, 0x1 - cmp r7, 0xD - ble _081CFCC8 -_081CFCD4: - movs r0, 0x1 - mov r1, r8 - str r0, [r1, 0x14] - movs r0, 0x4 -_081CFCDC: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_81CFC40 - - thumb_func_start sub_81CFCEC -sub_81CFCEC: @ 81CFCEC - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - movs r1, 0 - ldr r0, [r5, 0x1C] - ldrh r2, [r0] - lsrs r3, r2, 1 - cmp r2, r3 - beq _081CFD1C - adds r6, r0, 0 - ldrh r4, [r7, 0x2] -_081CFD02: - lsls r0, r3, 2 - adds r0, r6, r0 - ldrh r0, [r0, 0x6] - cmp r4, r0 - bls _081CFD10 - adds r2, r3, 0 - b _081CFD12 -_081CFD10: - adds r1, r3, 0x1 -_081CFD12: - subs r0, r2, r1 - lsrs r0, 1 - adds r3, r1, r0 - cmp r2, r3 - bne _081CFD02 -_081CFD1C: - ldr r0, [r5, 0x1C] - ldrh r2, [r0] - lsls r6, r3, 2 - cmp r2, r3 - bls _081CFD40 - lsls r0, r2, 2 - subs r4, r0, 0x4 -_081CFD2A: - ldr r0, [r5, 0x1C] - lsls r1, r2, 2 - adds r0, 0x4 - adds r1, r0, r1 - adds r0, r4 - ldr r0, [r0] - str r0, [r1] - subs r4, 0x4 - subs r2, 0x1 - cmp r2, r3 - bhi _081CFD2A -_081CFD40: - ldr r0, [r5, 0x1C] - adds r0, 0x4 - adds r0, r6 - ldr r1, [r7] - str r1, [r0] - ldr r1, [r5, 0x1C] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81CFCEC - - thumb_func_start sub_81CFD58 -sub_81CFD58: @ 81CFD58 - push {r4-r6,lr} - movs r5, 0 -_081CFD5C: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x5 - bl GetMonData - cmp r0, 0 - beq _081CFD8A - adds r0, r4, 0 - movs r1, 0x6 - bl GetMonData - cmp r0, 0 - bne _081CFD8A - adds r0, r4, 0 - movs r1, 0x53 - bl GetMonData - cmp r0, 0 - bne _081CFDB2 -_081CFD8A: - adds r5, 0x1 - cmp r5, 0x5 - ble _081CFD5C - movs r5, 0 -_081CFD92: - movs r4, 0 - lsls r6, r5, 24 -_081CFD96: - adds r0, r5, 0 - adds r1, r4, 0 - bl CheckBoxMonSanityAt - cmp r0, 0 - beq _081CFDBC - lsls r1, r4, 24 - lsrs r1, 24 - lsrs r0, r6, 24 - movs r2, 0x53 - bl GetBoxMonDataAt - cmp r0, 0 - beq _081CFDBC -_081CFDB2: - movs r0, 0x1 - b _081CFDCA - .pool -_081CFDBC: - adds r4, 0x1 - cmp r4, 0x1D - ble _081CFD96 - adds r5, 0x1 - cmp r5, 0xD - ble _081CFD92 - movs r0, 0 -_081CFDCA: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81CFD58 - - thumb_func_start sub_81CFDD0 -sub_81CFDD0: @ 81CFDD0 - push {r4,lr} - movs r1, 0x81 - lsls r1, 4 - movs r0, 0xA - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CFE00 - ldr r0, =sub_81CFEB8 - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r4, 0x4] - ldr r0, =sub_81CFE84 - str r0, [r4] - movs r0, 0 - str r0, [r4, 0xC] - movs r0, 0x1 - b _081CFE02 - .pool -_081CFE00: - movs r0, 0 -_081CFE02: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CFDD0 - - thumb_func_start sub_81CFE08 -sub_81CFE08: @ 81CFE08 - push {r4,lr} - movs r1, 0x81 - lsls r1, 4 - movs r0, 0xA - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081CFE38 - ldr r0, =sub_81CFEB8 - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r4, 0x4] - ldr r0, =sub_81CFE84 - str r0, [r4] - movs r0, 0x1 - str r0, [r4, 0xC] - b _081CFE3A - .pool -_081CFE38: - movs r0, 0 -_081CFE3A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CFE08 - - thumb_func_start sub_81CFE40 -sub_81CFE40: @ 81CFE40 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xA - bl GetSubstructPtr - adds r5, r0, 0 - ldr r0, =gUnknown_086237B8 - lsls r4, 2 - adds r4, r0 - ldr r0, [r4] - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r5, 0x4] - ldr r0, =sub_81CFE84 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CFE40 - - thumb_func_start sub_81CFE70 -sub_81CFE70: @ 81CFE70 - push {lr} - movs r0, 0xA - bl GetSubstructPtr - ldr r0, [r0] - bl _call_via_r0 - pop {r1} - bx r1 - thumb_func_end sub_81CFE70 - - thumb_func_start sub_81CFE84 -sub_81CFE84: @ 81CFE84 - push {lr} - movs r0, 0xA - bl GetSubstructPtr - ldr r0, [r0, 0x4] - bl IsLoopedTaskActive - pop {r1} - bx r1 - thumb_func_end sub_81CFE84 - - thumb_func_start sub_81CFE98 -sub_81CFE98: @ 81CFE98 - push {r4,lr} - movs r0, 0xA - bl GetSubstructPtr - adds r4, r0, 0 - bl sub_81C8234 - ldrb r0, [r4, 0x8] - bl RemoveWindow - movs r0, 0xA - bl FreePokenavSubstruct - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81CFE98 - - thumb_func_start sub_81CFEB8 -sub_81CFEB8: @ 81CFEB8 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0xA - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x5 - bls _081CFECC - b _081CFFF2 -_081CFECC: - lsls r0, r4, 2 - ldr r1, =_081CFEDC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081CFEDC: - .4byte _081CFEF4 - .4byte _081CFF48 - .4byte _081CFF76 - .4byte _081CFF94 - .4byte _081CFFA4 - .4byte _081CFFDE -_081CFEF4: - ldr r0, =gUnknown_086237B0 - movs r1, 0x2 - bl InitBgTemplates - ldr r1, =gUnknown_08623604 - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - adds r1, r5, 0 - adds r1, 0x10 - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, =gUnknown_086236CC - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - ldr r0, =gUnknown_086235E4 - movs r1, 0x10 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - movs r0, 0x1 - bl CopyBgTilemapBufferToVram -_081CFF32: - movs r0, 0 - b _081CFFF4 - .pool -_081CFF48: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081CFFEE - bl sub_81CFB18 - cmp r0, 0 - beq _081CFFEE - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - bl ShowBg - b _081CFF32 -_081CFF76: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081CFFEE - ldr r0, =gUnknown_08623790 - movs r1, 0x20 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - bl sub_81D0304 - b _081CFF32 - .pool -_081CFF94: - bl sub_81C8224 - cmp r0, 0 - bne _081CFFEE - adds r0, r5, 0 - bl sub_81D024C - b _081CFF32 -_081CFFA4: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081CFFEE - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl HideBg - movs r0, 0x9 - bl sub_81C7BA4 - movs r0, 0x1 - bl sub_81C7AC0 - ldr r0, [r5, 0xC] - cmp r0, 0 - bne _081CFF32 - movs r0, 0x2 - bl LoadLeftHeaderGfxForIndex - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0 - bl sub_81C7FA0 - b _081CFF32 -_081CFFDE: - bl IsPaletteFadeActive - cmp r0, 0 - bne _081CFFEE - bl sub_81C8010 - cmp r0, 0 - beq _081CFFF2 -_081CFFEE: - movs r0, 0x2 - b _081CFFF4 -_081CFFF2: - movs r0, 0x4 -_081CFFF4: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81CFEB8 - - thumb_func_start sub_81CFFFC -sub_81CFFFC: @ 81CFFFC - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xA - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x1 - beq _081D004A - cmp r4, 0x1 - bgt _081D0016 - cmp r4, 0 - beq _081D0020 - b _081D006A -_081D0016: - cmp r4, 0x2 - beq _081D0052 - cmp r4, 0x3 - beq _081D005C - b _081D006A -_081D0020: - bl MatchCall_MoveCursorUp - cmp r0, 0x1 - beq _081D0038 - cmp r0, 0x1 - bgt _081D0032 - cmp r0, 0 - beq _081D006A - b _081D0058 -_081D0032: - cmp r0, 0x2 - beq _081D0042 - b _081D0058 -_081D0038: - movs r0, 0x5 - bl PlaySE - movs r0, 0x7 - b _081D006C -_081D0042: - movs r0, 0x5 - bl PlaySE - b _081D0058 -_081D004A: - bl sub_81C8630 - cmp r0, 0 - bne _081D0066 -_081D0052: - adds r0, r5, 0 - bl sub_81D0288 -_081D0058: - movs r0, 0 - b _081D006C -_081D005C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081D006A -_081D0066: - movs r0, 0x2 - b _081D006C -_081D006A: - movs r0, 0x4 -_081D006C: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81CFFFC - - thumb_func_start sub_81D0074 -sub_81D0074: @ 81D0074 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xA - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x1 - beq _081D00C2 - cmp r4, 0x1 - bgt _081D008E - cmp r4, 0 - beq _081D0098 - b _081D00E2 -_081D008E: - cmp r4, 0x2 - beq _081D00CA - cmp r4, 0x3 - beq _081D00D4 - b _081D00E2 -_081D0098: - bl MatchCall_MoveCursorDown - cmp r0, 0x1 - beq _081D00B0 - cmp r0, 0x1 - bgt _081D00AA - cmp r0, 0 - beq _081D00E2 - b _081D00D0 -_081D00AA: - cmp r0, 0x2 - beq _081D00BA - b _081D00D0 -_081D00B0: - movs r0, 0x5 - bl PlaySE - movs r0, 0x7 - b _081D00E4 -_081D00BA: - movs r0, 0x5 - bl PlaySE - b _081D00D0 -_081D00C2: - bl sub_81C8630 - cmp r0, 0 - bne _081D00DE -_081D00CA: - adds r0, r5, 0 - bl sub_81D0288 -_081D00D0: - movs r0, 0 - b _081D00E4 -_081D00D4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081D00E2 -_081D00DE: - movs r0, 0x2 - b _081D00E4 -_081D00E2: - movs r0, 0x4 -_081D00E4: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81D0074 - - thumb_func_start sub_81D00EC -sub_81D00EC: @ 81D00EC - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xA - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x1 - beq _081D013A - cmp r4, 0x1 - bgt _081D0106 - cmp r4, 0 - beq _081D0110 - b _081D015A -_081D0106: - cmp r4, 0x2 - beq _081D0142 - cmp r4, 0x3 - beq _081D014C - b _081D015A -_081D0110: - bl MatchCall_PageUp - cmp r0, 0x1 - beq _081D0128 - cmp r0, 0x1 - bgt _081D0122 - cmp r0, 0 - beq _081D015A - b _081D0148 -_081D0122: - cmp r0, 0x2 - beq _081D0132 - b _081D0148 -_081D0128: - movs r0, 0x5 - bl PlaySE - movs r0, 0x7 - b _081D015C -_081D0132: - movs r0, 0x5 - bl PlaySE - b _081D0148 -_081D013A: - bl sub_81C8630 - cmp r0, 0 - bne _081D0156 -_081D0142: - adds r0, r5, 0 - bl sub_81D0288 -_081D0148: - movs r0, 0 - b _081D015C -_081D014C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081D015A -_081D0156: - movs r0, 0x2 - b _081D015C -_081D015A: - movs r0, 0x4 -_081D015C: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81D00EC - - thumb_func_start sub_81D0164 -sub_81D0164: @ 81D0164 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0xA - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x1 - beq _081D01B2 - cmp r4, 0x1 - bgt _081D017E - cmp r4, 0 - beq _081D0188 - b _081D01D2 -_081D017E: - cmp r4, 0x2 - beq _081D01BA - cmp r4, 0x3 - beq _081D01C4 - b _081D01D2 -_081D0188: - bl MatchCall_PageDown - cmp r0, 0x1 - beq _081D01A0 - cmp r0, 0x1 - bgt _081D019A - cmp r0, 0 - beq _081D01D2 - b _081D01C0 -_081D019A: - cmp r0, 0x2 - beq _081D01AA - b _081D01C0 -_081D01A0: - movs r0, 0x5 - bl PlaySE - movs r0, 0x7 - b _081D01D4 -_081D01AA: - movs r0, 0x5 - bl PlaySE - b _081D01C0 -_081D01B2: - bl sub_81C8630 - cmp r0, 0 - bne _081D01CE -_081D01BA: - adds r0, r5, 0 - bl sub_81D0288 -_081D01C0: - movs r0, 0 - b _081D01D4 -_081D01C4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081D01D2 -_081D01CE: - movs r0, 0x2 - b _081D01D4 -_081D01D2: - movs r0, 0x4 -_081D01D4: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81D0164 - - thumb_func_start sub_81D01DC -sub_81D01DC: @ 81D01DC - push {lr} - cmp r0, 0 - beq _081D01E8 - cmp r0, 0x1 - beq _081D01FC - b _081D0214 -_081D01E8: - movs r0, 0x5 - bl PlaySE - movs r0, 0 - bl sub_81C7AC0 - bl sub_81C78A0 - movs r0, 0 - b _081D0216 -_081D01FC: - bl IsPaletteFadeActive - cmp r0, 0 - bne _081D020C - bl MainMenuLoopedTaskIsBusy - cmp r0, 0 - beq _081D0210 -_081D020C: - movs r0, 0x2 - b _081D0216 -_081D0210: - bl sub_81C7FDC -_081D0214: - movs r0, 0x4 -_081D0216: - pop {r1} - bx r1 - thumb_func_end sub_81D01DC - - thumb_func_start sub_81D021C -sub_81D021C: @ 81D021C - push {lr} - cmp r0, 0 - beq _081D0228 - cmp r0, 0x1 - beq _081D0238 - b _081D0244 -_081D0228: - movs r0, 0x5 - bl PlaySE - movs r0, 0 - bl sub_81C7AC0 - movs r0, 0 - b _081D0246 -_081D0238: - bl IsPaletteFadeActive - cmp r0, 0 - beq _081D0244 - movs r0, 0x2 - b _081D0246 -_081D0244: - movs r0, 0x4 -_081D0246: - pop {r1} - bx r1 - thumb_func_end sub_81D021C - - thumb_func_start sub_81D024C -sub_81D024C: @ 81D024C - push {r4,lr} - adds r4, r0, 0 - ldr r0, =gUnknown_086237D4 - bl AddWindow - strh r0, [r4, 0x8] - lsls r0, 24 - lsrs r0, 24 - bl PutWindowTilemap - bl sub_81CFB38 - adds r2, r0, 0 - ldrh r0, [r4, 0x8] - movs r1, 0 - bl sub_81D02B0 - ldrb r0, [r4, 0x8] - movs r1, 0x1 - bl CopyWindowToVram - adds r0, r4, 0 - bl sub_81D0288 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81D024C - - thumb_func_start sub_81D0288 -sub_81D0288: @ 81D0288 - push {r4,r5,lr} - adds r5, r0, 0 - bl GetSelectedMatchCall - adds r4, r0, 0 - bl sub_81CFB38 - adds r2, r0, 0 - ldrh r0, [r5, 0x8] - adds r4, 0x1 - adds r1, r4, 0 - bl sub_81D02B0 - ldrb r0, [r5, 0x8] - movs r1, 0x2 - bl CopyWindowToVram - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81D0288 - - thumb_func_start sub_81D02B0 -sub_81D02B0: @ 81D02B0 - push {r4,r5,lr} - sub sp, 0x1C - adds r4, r0, 0 - adds r5, r2, 0 - add r0, sp, 0xC - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - movs r1, 0xBA - strb r1, [r0] - adds r0, 0x1 - adds r1, r5, 0 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - movs r0, 0x1 - add r1, sp, 0xC - movs r2, 0x38 - bl GetStringCenterAlignXOffset - adds r3, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0x1 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0x1 - add r2, sp, 0xC - bl AddTextPrinterParameterized - add sp, 0x1C - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81D02B0 - - thumb_func_start sub_81D0304 -sub_81D0304: @ 81D0304 - push {r4,lr} - sub sp, 0x18 - bl sub_81CFB28 - str r0, [sp] - bl sub_81CFB38 - mov r1, sp - movs r4, 0 - strh r0, [r1, 0x4] - movs r0, 0x4 - strb r0, [r1, 0x8] - bl sub_81CFB64 - mov r1, sp - strh r0, [r1, 0x6] - movs r0, 0xD - strb r0, [r1, 0x9] - movs r0, 0x11 - strb r0, [r1, 0xA] - mov r0, sp - movs r2, 0x1 - strb r2, [r0, 0xB] - movs r0, 0x8 - strb r0, [r1, 0xC] - movs r0, 0x2 - strb r0, [r1, 0xD] - mov r0, sp - strb r2, [r0, 0xE] - ldr r0, =sub_81D035C - str r0, [sp, 0x10] - str r4, [sp, 0x14] - ldr r0, =gUnknown_086237B4 - movs r2, 0 - bl sub_81C81D4 - add sp, 0x18 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81D0304 - - thumb_func_start sub_81D035C -sub_81D035C: @ 81D035C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r1, 0 - adds r7, r0, 0 - ldrb r0, [r7] - cmp r0, 0xE - bne _081D03A4 - ldrb r1, [r7, 0x1] - movs r0, 0x64 - adds r4, r1, 0 - muls r4, r0 - ldr r0, =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - bl GetMonGender - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - bl GetLevelFromMonExp - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r2, =gStringVar3 - adds r0, r4, 0 - movs r1, 0x2 - bl GetMonData - b _081D03CC - .pool -_081D03A4: - ldrb r0, [r7] - ldrb r1, [r7, 0x1] - bl GetBoxedMonPtr - adds r4, r0, 0 - bl GetBoxMonGender - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - bl GetLevelFromBoxMonExp - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r2, =gStringVar3 - adds r0, r4, 0 - movs r1, 0x2 - bl GetBoxMonData -_081D03CC: - ldr r4, =gStringVar3 - adds r0, r4, 0 - bl StringGetEnd10 - adds r0, r6, 0 - movs r1, 0x1 - adds r2, r4, 0 - movs r3, 0x3C - bl sub_81DB494 - adds r6, r0, 0 - cmp r5, 0 - beq _081D03F8 - cmp r5, 0xFE - beq _081D0400 - ldr r1, =gUnknown_086237F4 - b _081D0402 - .pool -_081D03F8: - ldr r1, =gUnknown_086237DC - b _081D0402 - .pool -_081D0400: - ldr r1, =gUnknown_086237E8 -_081D0402: - ldr r4, =gStringVar1 - adds r0, r4, 0 - bl StringCopy - movs r1, 0xBA - strb r1, [r0] - adds r0, 0x1 - movs r1, 0xF9 - strb r1, [r0] - adds r0, 0x1 - movs r1, 0x5 - strb r1, [r0] - adds r0, 0x1 - mov r1, r8 - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - adds r0, r6, 0 - movs r1, 0x1 - adds r2, r4, 0 - movs r3, 0x36 - bl sub_81DB494 - adds r6, r0, 0 - ldrh r1, [r7, 0x2] - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81D035C - - .align 2, 0 @ Don't pad with 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/common_syms/ereader_screen.txt b/common_syms/ereader_screen.txt new file mode 100644 index 000000000..5a89d370d --- /dev/null +++ b/common_syms/ereader_screen.txt @@ -0,0 +1 @@ +gUnknown_03006370 diff --git a/common_syms/librfu.txt b/common_syms/librfu.txt new file mode 100644 index 000000000..e81d78795 --- /dev/null +++ b/common_syms/librfu.txt @@ -0,0 +1,6 @@ +gUnknown_03007870 +gUnknown_03007880 +gUnknown_03007890 +gUnknown_03007894 +gUnknown_03007898 +gUnknown_030078A0 diff --git a/common_syms/librfu_stwi.txt b/common_syms/librfu_stwi.txt new file mode 100644 index 000000000..0e8468f4d --- /dev/null +++ b/common_syms/librfu_stwi.txt @@ -0,0 +1 @@ +gRfuState 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/dodrio_berry_picking.s b/data/dodrio_berry_picking.s deleted file mode 100755 index 7537d9f04..000000000 --- a/data/dodrio_berry_picking.s +++ /dev/null @@ -1,666 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gUnknown_082F449C:: @ 82F449C - .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 - .byte 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x03, 0x08 - .byte 0x09, 0x00, 0x00, 0x01, 0x02, 0x05, 0x06, 0x03 - .byte 0x04, 0x05, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 - .byte 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x02, 0x09 - .byte 0x00, 0x00, 0x01, 0x04, 0x05, 0x06, 0x07, 0x02 - .byte 0x03, 0x04, 0x09, 0x00, 0x00, 0x01, 0x06, 0x07 - .byte 0x02, 0x03, 0x04, 0x05, 0x06, 0x09, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02 - .byte 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x00 - .byte 0x00, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01 - .byte 0x02, 0x03, 0x00, 0x00, 0x05, 0x06, 0x07, 0x08 - .byte 0x01, 0x02, 0x03, 0x04, 0x05, 0x00, 0x00, 0x07 - .byte 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03 - .byte 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x02 - .byte 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00 - .byte 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 - .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x06, 0x07, 0x08 - .byte 0x09, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 - .byte 0x08, 0x09, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 - .byte 0x06, 0x07, 0x08 - -gUknnown_082F45AF:: - .byte 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 - .byte 0x04, 0x05, 0x05, 0x06, 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05 - .byte 0x06, 0x06, 0x07, 0x02, 0x02, 0x03, 0x04, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x05 - .byte 0x05, 0x06, 0x07, 0x07, 0x08, 0x01, 0x01, 0x02 - .byte 0x03, 0x00, 0x00, 0x00, 0x04, 0x05, 0x06, 0x06 - .byte 0x07, 0x08, 0x08, 0x09, 0x00, 0x00, 0x01, 0x02 - .byte 0x02, 0x03, 0x04, 0x01, 0x00, 0x01, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01 - .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02 - .byte 0x03, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04 - .byte 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x03 - .byte 0x02, 0x03, 0x04, 0x03, 0x04, 0x00, 0x00, 0x00 - .byte 0x00, 0x09, 0x09, 0x09, 0x09, 0x01, 0x01, 0x01 - .byte 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00 - .byte 0x00, 0x01, 0x01, 0x00, 0x09, 0x09, 0x09, 0x09 - .byte 0x09, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x01 - .byte 0x09, 0x09, 0x09, 0x03, 0x03, 0x00, 0x00, 0x01 - .byte 0x01, 0x02, 0x02, 0x03, 0x09, 0x03, 0x03, 0x04 - .byte 0x04, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03 - .byte 0x05, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x00 - .byte 0x00, 0x00, 0x03, 0x05, 0x07, 0x00, 0x00, 0x02 - .byte 0x04, 0x06, 0x08, 0x00, 0x01, 0x03, 0x05, 0x06 - .byte 0x09 - - .align 2 -gUnknown_082F7DF0_UnrefDupe:: @ 82F4698 - .incbin "graphics/link_games/dodrioberry_bg1.gbapal" - - .align 2 - .incbin "graphics/link_games/dodrioberry_bg2.gbapal" - - .align 2 -gUnknown_082F7E30_UnrefDupe:: @ 82F46B8 - .incbin "graphics/link_games/dodrioberry_pkmn.gbapal" - - .align 2 -gUnknown_082F7E50_UnrefDupe:: @ 82F46D8 - .incbin "graphics/link_games/dodrioberry_shiny.gbapal" - - .align 2 -gUnknown_082F7E70_UnrefDupe:: @ 82F46F8 - .incbin "graphics/link_games/dodrioberry_status.gbapal" - - .align 2 -gUnknown_082F7E90_UnrefDupe:: @ 82F4718 - .incbin "graphics/link_games/dodrioberry_berrysprites.gbapal" - - .align 2 -gUnknown_082F7EB0_UnrefDupe:: @ 82F4738 - .incbin "graphics/link_games/dodrioberry_berrysprites.4bpp.lz" - - .align 2 -gUnknown_082F8064_UnrefDupe:: @ 82F490C - .incbin "graphics/link_games/dodrioberry_platform.gbapal" - - .align 2 -gUnknown_082F8084_UnrefDupe:: @ 82F492C - .incbin "graphics/link_games/dodrioberry_bg1.4bpp.lz" - - .align 2 -gUnknown_082F8914_UnrefDupe:: @ 82F51BC - .incbin "graphics/link_games/dodrioberry_bg2.4bpp.lz" - - .align 2 -gUnknown_082F96E0_UnrefDupe:: @ 82F5F88 - .incbin "graphics/link_games/dodrioberry_status.4bpp.lz" - - .align 2 -gUnknown_082F9774_UnrefDupe:: @ 82F601C - .incbin "graphics/link_games/dodrioberry_platform.4bpp.lz" - - .align 2 -gUnknown_082F98BC_UnrefDupe:: @ 82F6164 - .incbin "graphics/link_games/dodrioberry_pkmn.4bpp.lz" - - .align 2 -gUnknown_082FAAD8_UnrefDupe:: @ 82F7380 - .incbin "graphics/link_games/dodrioberry_bg1.bin.lz" - - .align 2 -gUnknown_082FAD44_UnrefDupe:: @ 82F75EC - .incbin "graphics/link_games/dodrioberry_bg2right.bin.lz" - - .align 2 -gUnknown_082FAF94_UnrefDupe:: @ 82F783C - .incbin "graphics/link_games/dodrioberry_bg2left.bin.lz" - - .align 2 -gUnknown_082F7A88:: @ 82F7A88 - .byte 0x28, 0x18, 0x0d, 0x20, 0x13, 0x0a, 0x16, 0x0d - .byte 0x07, 0x00, 0x00, 0x00 - - .align 2 -gUnknown_082F7A94:: @ 82F7A94 - .byte 0x08, 0x05, 0x08, 0x0b, 0x0f, 0x00, 0x00, 0x00 - - .align 2 -gUnknown_082F7A9C:: @ 82F7A9C - .byte 0x05, 0x0a, 0x14, 0x1e, 0x32, 0x46, 0x64, 0x00 - - .align 2 -gUnknown_082F7AA4:: @ 82F7AA4 - .byte 0x0f, 0x10, 0x11, 0x12, 0x13, 0x13, 0x12, 0x11 - .byte 0x10, 0x0f, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19 - .byte 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21 - .byte 0x22, 0x22, 0x21, 0x20, 0x1f, 0x1e, 0x00, 0x00 - - .align 2 -gUnknown_082F7AC4:: @ 82F7AC4 - .4byte sub_8024DBC - .4byte sub_8024E00 - .4byte sub_8024E38 - .4byte sub_8024F10 - .4byte sub_8024F38 - .4byte sub_8025198 - .4byte sub_8025324 - .4byte sub_8025470 - .4byte sub_8025644 - .4byte sub_80256AC - .4byte sub_8025758 - .4byte sub_80250D4 - - .align 2 -gUnknown_082F7AF4:: @ 82F7AF4 - .4byte sub_8024DBC - .4byte sub_8024E00 - .4byte sub_8024E38 - .4byte sub_8024F10 - .4byte sub_8024FFC - .4byte sub_8025230 - .4byte sub_8025324 - .4byte sub_8025470 - .4byte sub_8025644 - .4byte sub_80256AC - .4byte sub_8025758 - .4byte sub_8025158 - - .align 2 -gUnknown_082F7B24:: @ 82F7B24 - .2byte 0x000a, 0x001e, 0x0032, 0x0032 - - .align 2 -gUnknown_082F7B2C:: @ 82F7B2C - .byte 0x00, 0x05, 0x01, 0x14, 0x0b, 0x0f, 0x01, 0x00 - - .align 2 -gUnknown_082F7B34:: @ 82F7B34 - .4byte gText_BerriesPicked - .4byte gText_BestScore - .4byte gText_BerriesInRowFivePlayers - - .align 2 -gUnknown_082F7B40:: @ 82F7B40 - .byte 0x04, 0x07, 0x04, 0x00 - - .align 2 -gUnknown_082F7B44:: @ 82F7B44 - .2byte 0x0019, 0x0029, 0x0039 - -gUnknown_082F7B4A:: @ 82F7B4A - .2byte 0x0019, 0x0029, 0x0049 - - .align 2 -gUnknown_082F7B50:: @ 82F7B50 - .2byte 0x270f, 0x0000, 0x005a, 0x270f, 0x270f, 0x270f, 0x0046, 0x270f - .2byte 0x270f, 0x0000, 0x270f, 0x0000, 0x270f, 0x270f, 0x003c, 0x0000 - .2byte 0x270f, 0x270f, 0x270f, 0x0000 - - .align 2 -gUnknown_082F7B78:: @ 82F7B78 - .string "ÀÁÂÇÈÉÊ$" - - .align 2 -gUnknown_082F7B80:: @ 82F7B80 - .string "ABCDEFG$" - - .align 2 -gUnknown_082F7B88:: @ 82F7B88 - .string "0123456$" - - .align 2 -gUnknown_082F7B90:: @ 82F7B90 - .4byte gUnknown_082F7B78 - .4byte gUnknown_082F7B78 - .4byte gUnknown_082F7B78 - .4byte gUnknown_082F7B80 - .4byte gUnknown_082F7B88 - - .align 2 -gUnknown_082F7BA4:: @ 82F7BA4 struct BgTemplate - .4byte 0x000001e0 - .4byte 0x000012c9 - .4byte 0x000012ea - .4byte 0x000021ff - .4byte 0x000000ff - .4byte 0x00000000 - - .align 2 -gUnknown_082F7BBC:: @ 82F7BBC - window_template 0x00, 0x01, 0x01, 0x1c, 0x02, 0x0d, 0x0013 - window_template 0x00, 0x01, 0x05, 0x1c, 0x0e, 0x0d, 0x004b - - .align 2 -gUnknown_082F7BCC:: @ 82F7BCC - window_template 0x00, 0x01, 0x05, 0x1c, 0x07, 0x0d, 0x004b - - .align 2 -gUnknown_082F7BD4:: @ 82F7BD4 - window_template 0x00, 0x01, 0x08, 0x13, 0x03, 0x0d, 0x0013 - window_template 0x00, 0x16, 0x07, 0x06, 0x04, 0x0d, 0x004c - - .align 2 -gUnknown_082F7BE4:: @ 82F7BE4 - window_template 0x00, 0x04, 0x06, 0x16, 0x05, 0x0d, 0x0013 - - .align 2 -gUnknown_082F7BEC:: @ 82F7BEC - window_template 0x00, 0x05, 0x08, 0x13, 0x03, 0x0d, 0x0013 - - .align 2 -gUnknown_082F449C_UnrefDupe:: @ 82F7BF4 - .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 - .byte 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x03, 0x08 - .byte 0x09, 0x00, 0x00, 0x01, 0x02, 0x05, 0x06, 0x03 - .byte 0x04, 0x05, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 - .byte 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x02, 0x09 - .byte 0x00, 0x00, 0x01, 0x04, 0x05, 0x06, 0x07, 0x02 - .byte 0x03, 0x04, 0x09, 0x00, 0x00, 0x01, 0x06, 0x07 - .byte 0x02, 0x03, 0x04, 0x05, 0x06, 0x09, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02 - .byte 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x00 - .byte 0x00, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01 - .byte 0x02, 0x03, 0x00, 0x00, 0x05, 0x06, 0x07, 0x08 - .byte 0x01, 0x02, 0x03, 0x04, 0x05, 0x00, 0x00, 0x07 - .byte 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03 - .byte 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x02 - .byte 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00 - .byte 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 - .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x06, 0x07, 0x08 - .byte 0x09, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 - .byte 0x08, 0x09, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 - .byte 0x06, 0x07, 0x08, 0x04, 0x05, 0x06, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x03, 0x04, 0x05, 0x05, 0x06, 0x03 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x04, 0x05, 0x06, 0x06, 0x07, 0x02, 0x02 - .byte 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x04, 0x05, 0x05, 0x06, 0x07, 0x07, 0x08 - .byte 0x01, 0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x04 - .byte 0x05, 0x06, 0x06, 0x07, 0x08, 0x08, 0x09, 0x00 - .byte 0x00, 0x01, 0x02, 0x02, 0x03, 0x04, 0x01, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01 - .byte 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00 - .byte 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x01 - .byte 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00 - .byte 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x02 - .byte 0x01, 0x02, 0x03, 0x02, 0x03, 0x04, 0x03, 0x04 - .byte 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, 0x09 - .byte 0x01, 0x01, 0x01, 0x09, 0x09, 0x09, 0x09, 0x09 - .byte 0x09, 0x09, 0x00, 0x00, 0x01, 0x01, 0x00, 0x09 - .byte 0x09, 0x09, 0x09, 0x09, 0x02, 0x02, 0x00, 0x00 - .byte 0x01, 0x01, 0x01, 0x09, 0x09, 0x09, 0x03, 0x03 - .byte 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x09 - .byte 0x03, 0x03, 0x04, 0x04, 0x00, 0x00, 0x01, 0x01 - .byte 0x02, 0x02, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00 - .byte 0x04, 0x06, 0x00, 0x00, 0x00, 0x03, 0x05, 0x07 - .byte 0x00, 0x00, 0x02, 0x04, 0x06, 0x08, 0x00, 0x01 - .byte 0x03, 0x05, 0x06, 0x09 - - .align 2 -gDodrioBerryBgPal1:: @ 82F7DF0 - .incbin "graphics/link_games/dodrioberry_bg1.gbapal" - - .align 2 - .incbin "graphics/link_games/dodrioberry_bg2.gbapal" - - .align 2 -gDodrioBerryPkmnPal:: @ 82F7E30 - .incbin "graphics/link_games/dodrioberry_pkmn.gbapal" - - .align 2 -gDodrioBerryShinyPal:: @ 82F7E50 - .incbin "graphics/link_games/dodrioberry_shiny.gbapal" - - .align 2 -gDodrioBerryStatusPal:: @ 82F7E70 - .incbin "graphics/link_games/dodrioberry_status.gbapal" - - .align 2 -gDodrioBerrySpritesPal:: @ 82F7E90 - .incbin "graphics/link_games/dodrioberry_berrysprites.gbapal" - - .align 2 -gDodrioBerrySpritesGfx:: @ 82F7EB0 - .incbin "graphics/link_games/dodrioberry_berrysprites.4bpp.lz" - - .align 2 -gDodrioBerryPlatformPal:: @ 82F8064 - .incbin "graphics/link_games/dodrioberry_platform.gbapal" - - .align 2 -gDodrioBerryBgGfx1:: @ 82F8084 - .incbin "graphics/link_games/dodrioberry_bg1.4bpp.lz" - - .align 2 -gDodrioBerryBgGfx2:: @ 82F8914 - .incbin "graphics/link_games/dodrioberry_bg2.4bpp.lz" - - .align 2 -gDodrioBerryStatusGfx:: @ 82F96E0 - .incbin "graphics/link_games/dodrioberry_status.4bpp.lz" - - .align 2 -gDodrioBerryPlatformGfx:: @ 82F9774 - .incbin "graphics/link_games/dodrioberry_platform.4bpp.lz" - - .align 2 -gDodrioBerryPkmnGfx:: @ 82F98BC - .incbin "graphics/link_games/dodrioberry_pkmn.4bpp.lz" - - .align 2 -gDodrioBerryBgTilemap1:: @ 82FAAD8 - .incbin "graphics/link_games/dodrioberry_bg1.bin.lz" - - .align 2 -gDodrioBerryBgTilemap2Right:: @ 82FAD44 - .incbin "graphics/link_games/dodrioberry_bg2right.bin.lz" - - .align 2 -gDodrioBerryBgTilemap2Left:: @ 82FAF94 - .incbin "graphics/link_games/dodrioberry_bg2left.bin.lz" - - .align 2 -gUnknown_082FB1E0:: @ 82FB1E0 - .byte 0x00, 0x00, 0x00, 0xc0, 0x00, 0x08, 0x00, 0x00 - - .align 2 -gUnknown_082FB1E8:: @ 82FB1E8 - .byte 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00 - - .align 2 -gUnknown_082FB1F0:: @ 82FB1F0 - .byte 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00 - - .align 2 -gUnknown_082FB1F8:: @ 82FB1F8 - .byte 0x00, 0x40, 0x00, 0xc0, 0x00, 0x0c, 0x00, 0x00 - - .align 2 -gUnknown_082FB200:: @ 82FB200 - .2byte 0x0000, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB208:: @ 82FB208 - .2byte 0x0040, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB210:: @ 82FB210 - .2byte 0x0080, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB218:: @ 82FB218 - .2byte 0x00c0, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB220:: @ 82FB220 - .2byte 0x0100, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB228:: @ 82FB228 - .4byte gUnknown_082FB200 - .4byte gUnknown_082FB208 - .4byte gUnknown_082FB210 - .4byte gUnknown_082FB218 - .4byte gUnknown_082FB220 - - .align 2 -gUnknown_082FB23C:: @ 82FB23C - .2byte 0x0000, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB244:: @ 82FB244 - .2byte 0x0004, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB24C:: @ 82FB24C - .2byte 0x0008, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB254:: @ 82FB254 - .4byte gUnknown_082FB23C - .4byte gUnknown_082FB244 - .4byte gUnknown_082FB24C - - .align 2 -gUnknown_082FB260:: @ 82FB260 - .2byte 0x0000, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB268:: @ 82FB268 - .2byte 0x0004, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB270:: @ 82FB270 - .2byte 0x0008, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB278:: @ 82FB278 - .2byte 0x000c, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB280:: @ 82FB280 - .2byte 0x0010, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB288:: @ 82FB288 - .2byte 0x0014, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB290:: @ 82FB290 - .2byte 0x0018, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB298:: @ 82FB298 - .2byte 0x001c, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB2A0:: @ 82FB2A0 - .2byte 0x0020, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB2A8:: @ 82FB2A8 - .4byte gUnknown_082FB260 - .4byte gUnknown_082FB268 - .4byte gUnknown_082FB270 - .4byte gUnknown_082FB278 - .4byte gUnknown_082FB280 - .4byte gUnknown_082FB288 - .4byte gUnknown_082FB290 - .4byte gUnknown_082FB298 - .4byte gUnknown_082FB2A0 - - .align 2 -gUnknown_082FB2CC:: @ 82FB2CC - .2byte 0x0000, 0x0014 - .2byte 0xfffe, 0x0000 - - .align 2 -gUnknown_082FB2D4:: @ 82FB2D4 - .4byte gUnknown_082FB2CC - - .align 2 -gUnknown_082FB2D8:: @ 82FB2D8 - obj_pal gDodrioBerryPkmnPal, 0x0000 - - .align 2 -gUnknown_082FB2E0:: @ 82FB2E0 - obj_pal gDodrioBerryShinyPal, 0x0001 - - .align 2 -gUnknown_082FB2E8:: @ 82FB2E8 - obj_pal gDodrioBerryStatusPal, 0x0002 - - .align 2 -gUnknown_082FB2F0:: @ 82FB2F0 - spr_template 0x0001, 0x0002, gUnknown_082FB1E8, gUnknown_082FB254, NULL, gDummySpriteAffineAnimTable, nullsub_15 - - .align 2 - .byte 0xD4, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44 - .byte 0x45, 0xFB, 0x00, 0x00 - - .align 2 -gUnknown_082FB314:: @ 82FB314 - obj_pal gDodrioBerrySpritesPal, 0x0003 - - .align 2 -gUnknown_082FB31C:: @ 82FB31C - .2byte 0x0058, 0x0080, 0x00a8, 0x00d0 - - .align 2 -gUnknown_082FB324:: @ 82FB324 - spr_template 0x0002, 0x0003, gUnknown_082FB1F0, gUnknown_082FB2A8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gUnknown_082FB33C:: @ 82FB33C - spr_template 0x0002, 0x0003, gUnknown_082FB1E8, gUnknown_082FB2A8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gUnknown_082FB354:: @ 82FB354 - .byte 0x1E, 0x14 - -gUnknown_082FB356:: @ 82FB356 - .byte 0xE6, 0x00 - - .align 2 -gUnknown_082FB358:: @ 82FB358 - .2byte 0x0037, 0x001e, 0x004a, 0x0000 - - .align 2 -gUnknown_082FB360:: @ 82FB360 - obj_pal gDodrioBerryPlatformPal, 0x0006 - - .align 2 -gUnknown_082FB368:: @ 82FB368 - spr_template 0x0005, 0x0006, gUnknown_082FB1F8, gUnknown_082FB2D4, NULL, gDummySpriteAffineAnimTable, sub_8028CF4 - - .align 2 -gUnknown_082FB380:: @ 82FB380 - .byte 0x01, 0x02, 0x03 - -gUnknown_082FB383:: @ 82FB383 - .byte 0x01, 0x04, 0x05 - .byte 0x01, 0x08, 0x09 - .byte 0x01, 0x06, 0x07 - - .align 2 -gUnknown_082FB38C:: @ 82FB38C - .byte 0x0c, 0x06, 0x00, 0x00 - - .align 2 -gUnknown_082FB390:: @ 82FB390 - .byte 0x09, 0x0a, 0x00, 0x00, 0x0f, 0x06, 0x00, 0x00 - - .align 2 -gUnknown_082FB398:: @ 82FB398 - .byte 0x0c, 0x06, 0x00, 0x00, 0x12, 0x0a, 0x00, 0x00 - .byte 0x06, 0x0a, 0x00, 0x00 - - .align 2 -gUnknown_082FB3A4:: @ 82FB3A4 - .byte 0x09, 0x0a, 0x00, 0x00, 0x0f, 0x06, 0x00, 0x00 - .byte 0x15, 0x0a, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00 - - .align 2 -gUnknown_082FB3B4:: @ 82FB3B4 - .byte 0x0c, 0x06, 0x00, 0x00, 0x12, 0x0a, 0x00, 0x00 - .byte 0x17, 0x06, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00 - .byte 0x06, 0x0a, 0x00, 0x00 - - .align 2 -gUnknown_082FB3C8:: @ 82FB3C8 - .4byte gUnknown_082FB38C - .4byte gUnknown_082FB390 - .4byte gUnknown_082FB398 - .4byte gUnknown_082FB3A4 - .4byte gUnknown_082FB3B4 - - .align 2 -gUnknown_082FB3DC:: @ 82FB3DC - .4byte gText_1Colon - .4byte gText_2Colon - .4byte gText_3Colon - .4byte gText_4Colon - .4byte gText_5Colon - - .align 2 -gUnknown_082FB3F0:: @ 82FB3F0 - .2byte 0x005c, 0x0084, 0x00ac, 0x00d4 - -gUnknown_082FB3F8:: @ 82FB3F8 - .2byte 0x0021, 0x0031, 0x0041, 0x0051, 0x0061 - -gUnknown_082FB402:: @ 82FB402 - .2byte 0x0011, 0x0021, 0x0031, 0x0041, 0x0051 - - .align 2 -gUnknown_082FB40C:: @ 82FB40C - .4byte 0x00000000, sub_8029338 - .4byte 0x00000001, sub_8029440 - .4byte 0x00000002, sub_802988C - .4byte 0x00000003, sub_802A010 - .4byte 0x00000004, sub_802A380 - .4byte 0x00000005, sub_802A454 - .4byte 0x00000006, sub_802A534 - .4byte 0x00000007, sub_802A588 - .4byte 0x00000008, unused_0 - .4byte 0x00000009, nullsub_16 - - .align 2 -gUnknown_082FB45C:: @ 82FB45C - .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00 diff --git a/data/event_scripts.s b/data/event_scripts.s index a05069709..a7c2dc93f 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1,6 +1,7 @@ #include "constants/global.h" #include "constants/battle_frontier.h" #include "constants/battle_setup.h" +#include "constants/contest.h" #include "constants/easy_chat.h" #include "constants/event_objects.h" #include "constants/event_object_movement_constants.h" @@ -19,6 +20,7 @@ #include "constants/vars.h" #include "constants/weather.h" #include "constants/trainer_hill.h" +#include "constants/lilycove_lady.h" #include "constants/battle.h" #include "constants/metatile_labels.h" .include "asm/macros.inc" @@ -1118,7 +1120,7 @@ EverGrandeCity_HallOfFame_EventScript_2717C1:: @ 82717C1 call_if_unset FLAG_RECEIVED_BELDUM, EverGrandeCity_HallOfFame_EventScript_27183F setflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_BEDROOM setflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_RIVAL_BEDROOM - compare VAR_0x40D3, 0 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 0 call_if_eq EverGrandeCity_HallOfFame_EventScript_271851 return @@ -1145,7 +1147,7 @@ EverGrandeCity_HallOfFame_EventScript_271843:: @ 8271843 return EverGrandeCity_HallOfFame_EventScript_271851:: @ 8271851 - setvar VAR_0x40D3, 1 + setvar VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 1 return EventScript_WhiteOut:: @ 8271857 @@ -2556,7 +2558,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}!$" @@ -4281,23 +4283,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 +4309,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 +4319,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 +4359,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 +4376,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 +4384,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 +4398,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 +4426,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8545:: @ 82A8545 end LilycoveCity_PokemonCenter_1F_EventScript_2A854F:: @ 82A854F - special sub_818DEDC + special SetFavorLadyState_Complete release end @@ -4432,27 +4434,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 +4491,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 +4505,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 +4530,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 +4548,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 +4558,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 +4579,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 +4589,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 +4602,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 +4613,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 +4631,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 +4653,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 +4664,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 +4686,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 +4705,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 +4723,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 +4750,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 +4767,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 +4816,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 diff --git a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc index 96e9f86f5..59a010691 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 diff --git a/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc index 0bc74b1bd..f09166f5a 100644 --- a/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc @@ -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 diff --git a/data/maps/CaveOfOrigin_B1F/scripts.inc b/data/maps/CaveOfOrigin_B1F/scripts.inc index 0e554a945..5148d2942 100644 --- a/data/maps/CaveOfOrigin_B1F/scripts.inc +++ b/data/maps/CaveOfOrigin_B1F/scripts.inc @@ -52,7 +52,7 @@ CaveOfOrigin_B1F_EventScript_23584D:: @ 823584D playse SE_KAIDAN fadescreenspeed 1, 4 setflag FLAG_WALLACE_GOES_TO_SKY_PILLAR - setvar VAR_RAYQUAZA_STATE, 3 + setvar VAR_SOOTOPOLIS_CITY_STATE, 3 removeobject 1 clearflag FLAG_HIDE_SKY_PILLAR_WALLACE fadescreen 0 diff --git a/data/maps/DewfordTown/scripts.inc b/data/maps/DewfordTown/scripts.inc index 1fcaab8d6..fa29f4099 100644 --- a/data/maps/DewfordTown/scripts.inc +++ b/data/maps/DewfordTown/scripts.inc @@ -138,7 +138,7 @@ DewfordTown_EventScript_1E9660:: @ 81E9660 clearflag FLAG_HIDE_ROUTE_104_MR_BRINEY_BOAT setflag FLAG_HIDE_MR_BRINEY_BOAT_DEWFORD_TOWN hideobjectat 4, MAP_DEWFORD_TOWN - setvar VAR_BOARD_BRINEY_BOAT_ROUTE104_STATE, 2 + setvar VAR_BOARD_BRINEY_BOAT_STATE, 2 resetobjectpriority EVENT_OBJ_ID_PLAYER, MAP_DEWFORD_TOWN warp MAP_ROUTE104_MR_BRINEYS_HOUSE, 255, 5, 4 copyvar VAR_BRINEY_LOCATION, VAR_0x8008 @@ -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_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/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc index b6a278b03..de6545ec3 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 diff --git a/data/maps/LavaridgeTown/scripts.inc b/data/maps/LavaridgeTown/scripts.inc index 9e20673b7..de1a2bcee 100644 --- a/data/maps/LavaridgeTown/scripts.inc +++ b/data/maps/LavaridgeTown/scripts.inc @@ -9,9 +9,9 @@ LavaridgeTown_OnTransition: @ 81EA4DE call_if_set FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY, LavaridgeTown_EventScript_1EA53F call Common_EventScript_SetupRivalGender call Common_EventScript_SetupRivalOnBikeGender - compare VAR_LAVARIDGE_RIVAL_STATE, 1 + compare VAR_LAVARIDGE_TOWN_STATE, 1 call_if_eq LavaridgeTown_EventScript_1EA518 - compare VAR_LAVARIDGE_RIVAL_STATE, 1 + compare VAR_LAVARIDGE_TOWN_STATE, 1 call_if_eq LavaridgeTown_EventScript_1EA543 end @@ -41,7 +41,7 @@ LavaridgeTown_EventScript_1EA543:: @ 81EA543 return LavaridgeTown_MapScript2_1EA547: @ 81EA547 - map_script_2 VAR_LAVARIDGE_RIVAL_STATE, 1, LavaridgeTown_EventScript_1EA551 + map_script_2 VAR_LAVARIDGE_TOWN_STATE, 1, LavaridgeTown_EventScript_1EA551 .2byte 0 LavaridgeTown_EventScript_1EA551:: @ 81EA551 @@ -94,7 +94,7 @@ LavaridgeTown_EventScript_1EA5FF:: @ 81EA5FF compare VAR_0x8008, 9 call_if_ne LavaridgeTown_EventScript_1EA6C9 removeobject 7 - setvar VAR_LAVARIDGE_RIVAL_STATE, 2 + setvar VAR_LAVARIDGE_TOWN_STATE, 2 clearflag FLAG_HIDE_MAP_NAME_POPUP savebgm MUS_DUMMY fadedefaultbgm diff --git a/data/maps/LavaridgeTown_Gym_1F/scripts.inc b/data/maps/LavaridgeTown_Gym_1F/scripts.inc index bdc1da32f..8eec8cf43 100644 --- a/data/maps/LavaridgeTown_Gym_1F/scripts.inc +++ b/data/maps/LavaridgeTown_Gym_1F/scripts.inc @@ -82,7 +82,7 @@ LavaridgeTown_Gym_1F_EventScript_1FE7C1:: @ 81FE7C1 setvar VAR_0x8008, 4 call LavaridgeTown_Gym_1F_EventScript_271F43 setflag FLAG_HIDE_VERDANTURF_TOWN_WANDAS_HOUSE_WALLY - setvar VAR_LAVARIDGE_RIVAL_STATE, 1 + setvar VAR_LAVARIDGE_TOWN_STATE, 1 call LavaridgeTown_Gym_1F_EventScript_1FE841 closemessage delay 30 diff --git a/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc b/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc index 42ced50b9..b8d0a7c44 100644 --- a/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc @@ -144,7 +144,6 @@ 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 diff --git a/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc index 8dd40f4b3..6b5796604 100644 --- a/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc @@ -3,9 +3,9 @@ LilycoveCity_DepartmentStore_5F_MapScripts:: @ 821FF7A .byte 0 LilycoveCity_DepartmentStore_5F_MapScript2_21FF80: @ 821FF80 - map_script_2 VAR_RAYQUAZA_STATE, 1, LilycoveCity_DepartmentStore_5F_EventScript_21FF9A - map_script_2 VAR_RAYQUAZA_STATE, 2, LilycoveCity_DepartmentStore_5F_EventScript_21FF9A - map_script_2 VAR_RAYQUAZA_STATE, 3, LilycoveCity_DepartmentStore_5F_EventScript_21FF9A + map_script_2 VAR_SOOTOPOLIS_CITY_STATE, 1, LilycoveCity_DepartmentStore_5F_EventScript_21FF9A + map_script_2 VAR_SOOTOPOLIS_CITY_STATE, 2, LilycoveCity_DepartmentStore_5F_EventScript_21FF9A + map_script_2 VAR_SOOTOPOLIS_CITY_STATE, 3, LilycoveCity_DepartmentStore_5F_EventScript_21FF9A .2byte 0 LilycoveCity_DepartmentStore_5F_EventScript_21FF9A:: @ 821FF9A @@ -125,9 +125,9 @@ LilycoveCity_DepartmentStore_5F_EventScript_220075:: @ 8220075 lockall applymovement 7, Common_Movement_FacePlayer waitmovement 0 - compare VAR_RAYQUAZA_STATE, 0 + compare VAR_SOOTOPOLIS_CITY_STATE, 0 goto_if_eq LilycoveCity_DepartmentStore_5F_EventScript_22009C - compare VAR_RAYQUAZA_STATE, 4 + compare VAR_SOOTOPOLIS_CITY_STATE, 4 goto_if_ge LilycoveCity_DepartmentStore_5F_EventScript_22009C goto LilycoveCity_DepartmentStore_5F_EventScript_2200A7 end 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/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/map.json b/data/maps/LittlerootTown/map.json index 7ef696a58..eaa17a5df 100644 --- a/data/maps/LittlerootTown/map.json +++ b/data/maps/LittlerootTown/map.json @@ -154,7 +154,7 @@ "x": 10, "y": 1, "elevation": 3, - "var": "VAR_0x4050", + "var": "VAR_LITTLEROOT_TOWN_STATE", "var_value": "0", "script": "LittlerootTown_EventScript_1E8091" }, @@ -163,7 +163,7 @@ "x": 11, "y": 1, "elevation": 3, - "var": "VAR_0x4050", + "var": "VAR_LITTLEROOT_TOWN_STATE", "var_value": "0", "script": "LittlerootTown_EventScript_1E80EF" }, @@ -172,7 +172,7 @@ "x": 11, "y": 1, "elevation": 3, - "var": "VAR_0x4050", + "var": "VAR_LITTLEROOT_TOWN_STATE", "var_value": "1", "script": "LittlerootTown_EventScript_1E811F" }, @@ -181,7 +181,7 @@ "x": 8, "y": 9, "elevation": 3, - "var": "VAR_0x4050", + "var": "VAR_LITTLEROOT_TOWN_STATE", "var_value": "3", "script": "LittlerootTown_EventScript_1E81F9" }, @@ -190,7 +190,7 @@ "x": 9, "y": 9, "elevation": 3, - "var": "VAR_0x4050", + "var": "VAR_LITTLEROOT_TOWN_STATE", "var_value": "3", "script": "LittlerootTown_EventScript_1E8205" }, @@ -199,7 +199,7 @@ "x": 10, "y": 9, "elevation": 3, - "var": "VAR_0x4050", + "var": "VAR_LITTLEROOT_TOWN_STATE", "var_value": "3", "script": "LittlerootTown_EventScript_1E81E1" }, @@ -208,7 +208,7 @@ "x": 11, "y": 9, "elevation": 3, - "var": "VAR_0x4050", + "var": "VAR_LITTLEROOT_TOWN_STATE", "var_value": "3", "script": "LittlerootTown_EventScript_1E81ED" }, @@ -217,7 +217,7 @@ "x": 10, "y": 2, "elevation": 3, - "var": "VAR_0x4050", + "var": "VAR_LITTLEROOT_TOWN_STATE", "var_value": "3", "script": "LittlerootTown_EventScript_1E81BB" }, @@ -226,7 +226,7 @@ "x": 11, "y": 2, "elevation": 3, - "var": "VAR_0x4050", + "var": "VAR_LITTLEROOT_TOWN_STATE", "var_value": "3", "script": "LittlerootTown_EventScript_1E81CE" } @@ -265,4 +265,4 @@ "script": "LittlerootTown_EventScript_1E818F" } ] -}
\ No newline at end of file +} diff --git a/data/maps/LittlerootTown/scripts.inc b/data/maps/LittlerootTown/scripts.inc index f347811f8..8f10f2b4d 100644 --- a/data/maps/LittlerootTown/scripts.inc +++ b/data/maps/LittlerootTown/scripts.inc @@ -10,24 +10,24 @@ LittlerootTown_MapScript1_1E7DDB: @ 81E7DDB compare VAR_LITTLEROOT_INTRO_STATE, 2 call_if_eq LittlerootTown_EventScript_1E7E67 call_if_unset FLAG_RESCUED_BIRCH, LittlerootTown_EventScript_1E7E6F - compare VAR_0x4050, 3 + compare VAR_LITTLEROOT_TOWN_STATE, 3 call_if_eq LittlerootTown_EventScript_1E7E92 compare VAR_LITTLEROOT_HOUSES_STATE, 4 call_if_eq LittlerootTown_EventScript_1E7E5C compare VAR_LITTLEROOT_HOUSES_STATE_2, 4 call_if_eq LittlerootTown_EventScript_1E7E5C - compare VAR_OLDALE_STATE, 1 + compare VAR_OLDALE_RIVAL_STATE, 1 call_if_eq LittlerootTown_EventScript_1E7E53 compare VAR_LITTLEROOT_RIVAL_STATE, 3 call_if_eq LittlerootTown_EventScript_1E7E4F - compare VAR_0x40D3, 1 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 1 call_if_eq LittlerootTown_EventScript_1E7E4B - compare VAR_0x40D3, 2 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 call_if_eq LittlerootTown_EventScript_1E7E45 end LittlerootTown_EventScript_1E7E45:: @ 81E7E45 - setvar VAR_0x40D3, 3 + setvar VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 3 return LittlerootTown_EventScript_1E7E4B:: @ 81E7E4B @@ -39,7 +39,7 @@ LittlerootTown_EventScript_1E7E4F:: @ 81E7E4F return LittlerootTown_EventScript_1E7E53:: @ 81E7E53 - setvar VAR_OLDALE_STATE, 2 + setvar VAR_OLDALE_RIVAL_STATE, 2 setflag FLAG_HIDE_OLDALE_TOWN_RIVAL return @@ -53,7 +53,7 @@ LittlerootTown_EventScript_1E7E67:: @ 81E7E67 return LittlerootTown_EventScript_1E7E6F:: @ 81E7E6F - compare VAR_0x4050, 0 + compare VAR_LITTLEROOT_TOWN_STATE, 0 goto_if_eq LittlerootTown_EventScript_1E7E86 setobjectxyperm 1, 10, 1 setobjectmovementtype 1, MOVEMENT_TYPE_FACE_UP @@ -85,7 +85,7 @@ LittlerootTown_EventScript_1E7EB9:: @ 81E7EB9 LittlerootTown_MapScript2_1E7EC1: @ 81E7EC1 map_script_2 VAR_LITTLEROOT_INTRO_STATE, 1, LittlerootTown_EventScript_1E7EDB map_script_2 VAR_LITTLEROOT_INTRO_STATE, 2, LittlerootTown_EventScript_1E7EF9 - map_script_2 VAR_0x40D3, 1, LittlerootTown_EventScript_1E7FB1 + map_script_2 VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 1, LittlerootTown_EventScript_1E7FB1 .2byte 0 LittlerootTown_EventScript_1E7EDB:: @ 81E7EDB @@ -201,7 +201,7 @@ LittlerootTown_EventScript_1E7FB1:: @ 81E7FB1 end LittlerootTown_MapScript2_1E7FE2: @ 81E7FE2 - map_script_2 VAR_0x40D3, 1, LittlerootTown_EventScript_1E7FEC + map_script_2 VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 1, LittlerootTown_EventScript_1E7FEC .2byte 0 LittlerootTown_EventScript_1E7FEC:: @ 81E7FEC @@ -236,7 +236,7 @@ LittlerootTown_EventScript_1E8034:: @ 81E8034 faceplayer goto_if_set FLAG_ADVENTURE_STARTED, LittlerootTown_EventScript_1E8087 goto_if_set FLAG_RESCUED_BIRCH, LittlerootTown_EventScript_1E807A - compare VAR_0x4050, 0 + compare VAR_LITTLEROOT_TOWN_STATE, 0 goto_if_ne LittlerootTown_EventScript_1E805D msgbox LittlerootTown_Text_1E8BB8, MSGBOX_DEFAULT release @@ -248,7 +248,7 @@ LittlerootTown_EventScript_1E805D:: @ 81E805D closemessage applymovement 1, Common_Movement_FaceOriginalDirection waitmovement 0 - setvar VAR_0x4050, 2 + setvar VAR_LITTLEROOT_TOWN_STATE, 2 release end @@ -366,7 +366,7 @@ LittlerootTown_EventScript_1E811F:: @ 81E811F closemessage applymovement 1, Common_Movement_FaceOriginalDirection waitmovement 0 - setvar VAR_0x4050, 2 + setvar VAR_LITTLEROOT_TOWN_STATE, 2 releaseall end @@ -909,7 +909,7 @@ LittlerootTown_EventScript_1E863D:: @ 81E863D LittlerootTown_EventScript_1E8686:: @ 81E8686 removeobject 4 setflag FLAG_SYS_B_DASH - setvar VAR_0x4050, 4 + setvar VAR_LITTLEROOT_TOWN_STATE, 4 release end diff --git a/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc b/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc index d81340c6c..17cca3ea9 100644 --- a/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc +++ b/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc @@ -174,7 +174,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1F78E2:: @ 81F78E2 clearflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_BEDROOM delay 30 setvar VAR_LITTLEROOT_RIVAL_STATE, 3 - setvar VAR_0x4050, 1 + setvar VAR_LITTLEROOT_TOWN_STATE, 1 savebgm MUS_DUMMY fadedefaultbgm releaseall diff --git a/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc b/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc index a49c51499..3bb088ccf 100644 --- a/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc +++ b/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc @@ -24,7 +24,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1F8433:: @ 81F8433 checkplayergender compare VAR_RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_1F8456 - compare VAR_0x40D3, 2 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 goto_if_ge LittlerootTown_BrendansHouse_2F_EventScript_1F9309 setobjectxyperm 1, 0, 2 setobjectmovementtype 1, MOVEMENT_TYPE_FACE_UP @@ -84,7 +84,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1F8497:: @ 81F8497 setvar VAR_LITTLEROOT_RIVAL_STATE, 3 setflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F_POKE_BALL clearflag FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_BEDROOM - setvar VAR_0x4050, 1 + setvar VAR_LITTLEROOT_TOWN_STATE, 1 savebgm MUS_DUMMY fadedefaultbgm releaseall diff --git a/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc b/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc index 0557330a8..d983c9e64 100644 --- a/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc +++ b/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc @@ -211,7 +211,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1F8A8B:: @ 81F8A8B clearflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_RIVAL_BEDROOM delay 30 setvar VAR_LITTLEROOT_RIVAL_STATE, 3 - setvar VAR_0x4050, 1 + setvar VAR_LITTLEROOT_TOWN_STATE, 1 savebgm MUS_DUMMY fadedefaultbgm releaseall diff --git a/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc b/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc index 76bf7d6a8..dde6df71d 100644 --- a/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc +++ b/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc @@ -24,7 +24,7 @@ LittlerootTown_MaysHouse_2F_EventScript_1F92E6:: @ 81F92E6 checkplayergender compare VAR_RESULT, 1 goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_1F9309 - compare VAR_0x40D3, 2 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 goto_if_ge LittlerootTown_MaysHouse_2F_EventScript_1F9309 setobjectxyperm 1, 8, 2 setobjectmovementtype 1, MOVEMENT_TYPE_FACE_UP @@ -85,7 +85,7 @@ LittlerootTown_MaysHouse_2F_EventScript_1F934A:: @ 81F934A setvar VAR_LITTLEROOT_RIVAL_STATE, 3 setflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_2F_POKE_BALL clearflag FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_RIVAL_BEDROOM - setvar VAR_0x4050, 1 + setvar VAR_LITTLEROOT_TOWN_STATE, 1 savebgm MUS_DUMMY fadedefaultbgm releaseall diff --git a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc index 2b0dde7ae..c4f704520 100644 --- a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc +++ b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc @@ -7,11 +7,11 @@ LittlerootTown_ProfessorBirchsLab_MapScripts:: @ 81F9C91 LittlerootTown_ProfessorBirchsLab_MapScript1_1F9CA1: @ 81F9CA1 call Common_EventScript_SetupRivalGender call LittlerootTown_ProfessorBirchsLab_EventScript_2720AD - compare VAR_0x40D3, 6 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_1F9CF7 - compare VAR_0x40D3, 4 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 4 goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_1F9CF3 - compare VAR_0x40D3, 3 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 3 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1F9CCD end @@ -24,7 +24,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1F9CCD:: @ 81F9CCD end LittlerootTown_ProfessorBirchsLab_EventScript_1F9CE9:: @ 81F9CE9 - setvar VAR_0x40D3, 4 + setvar VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 4 goto LittlerootTown_ProfessorBirchsLab_EventScript_1F9CF3 LittlerootTown_ProfessorBirchsLab_EventScript_1F9CF3:: @ 81F9CF3 @@ -39,12 +39,12 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1F9CF7:: @ 81F9CF7 LittlerootTown_ProfessorBirchsLab_MapScript2_1F9D06: @ 81F9D06 map_script_2 VAR_BIRCH_LAB_STATE, 2, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D40 - map_script_2 VAR_0x40D3, 1, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D45 - map_script_2 VAR_0x40D3, 2, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D45 - map_script_2 VAR_0x40D3, 3, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D71 - map_script_2 VAR_0x40D3, 6, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D71 - map_script_2 VAR_0x40D3, 4, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D75 - map_script_2 VAR_0x40D3, 5, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D75 + map_script_2 VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 1, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D45 + map_script_2 VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D45 + map_script_2 VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 3, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D71 + map_script_2 VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D71 + map_script_2 VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 4, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D75 + map_script_2 VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 5, LittlerootTown_ProfessorBirchsLab_EventScript_1F9D75 .2byte 0 LittlerootTown_ProfessorBirchsLab_EventScript_1F9D40:: @ 81F9D40 @@ -87,8 +87,8 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1F9D75:: @ 81F9D75 LittlerootTown_ProfessorBirchsLab_MapScript2_1F9DB9: @ 81F9DB9 map_script_2 VAR_BIRCH_LAB_STATE, 2, LittlerootTown_ProfessorBirchsLab_EventScript_1F9DDB map_script_2 VAR_BIRCH_LAB_STATE, 4, LittlerootTown_ProfessorBirchsLab_EventScript_1F9E67 - map_script_2 VAR_0x40D3, 1, LittlerootTown_ProfessorBirchsLab_EventScript_1F9E80 - map_script_2 VAR_0x40D3, 4, LittlerootTown_ProfessorBirchsLab_EventScript_1F9F62 + map_script_2 VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 1, LittlerootTown_ProfessorBirchsLab_EventScript_1F9E80 + map_script_2 VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 4, LittlerootTown_ProfessorBirchsLab_EventScript_1F9F62 .2byte 0 LittlerootTown_ProfessorBirchsLab_EventScript_1F9DDB:: @ 81F9DDB @@ -194,7 +194,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1F9E80:: @ 81F9E80 closemessage setflag FLAG_HIDE_LITTLEROOT_TOWN_BIRCH setflag FLAG_HIDE_LITTLEROOT_TOWN_RIVAL - setvar VAR_0x40D3, 2 + setvar VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 setvar VAR_SCOTT_CALL_STEP_COUNTER, 0 setflag FLAG_SCOTT_CALL_NATIONAL_DEX releaseall @@ -247,7 +247,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1F9F62:: @ 81F9F62 applymovement EVENT_OBJ_ID_PLAYER, LittlerootTown_ProfessorBirchsLab_Movement_1F9F7C waitmovement 0 msgbox LittlerootTown_ProfessorBirchsLab_Text_1FB5F9, MSGBOX_DEFAULT - setvar VAR_0x40D3, 5 + setvar VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 5 releaseall end @@ -284,7 +284,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1F9FB1:: @ 81F9FB1 LittlerootTown_ProfessorBirchsLab_EventScript_1F9FBB:: @ 81F9FBB release - compare VAR_0x40D3, 6 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_1FA057 applymovement 2, Common_Movement_WalkInPlaceRight waitmovement 0 @@ -297,7 +297,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1F9FBB:: @ 81F9FBB LittlerootTown_ProfessorBirchsLab_EventScript_1F9FEF:: @ 81F9FEF release - compare VAR_0x40D3, 6 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_1FA057 applymovement 2, Common_Movement_WalkInPlaceRight waitmovement 0 @@ -310,7 +310,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1F9FEF:: @ 81F9FEF LittlerootTown_ProfessorBirchsLab_EventScript_1FA023:: @ 81FA023 release - compare VAR_0x40D3, 6 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_1FA057 applymovement 2, Common_Movement_WalkInPlaceRight waitmovement 0 @@ -373,7 +373,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA0F2:: @ 81FA0F2 LittlerootTown_ProfessorBirchsLab_EventScript_1FA0FD:: @ 81FA0FD erasemonpic msgbox LittlerootTown_ProfessorBirchsLab_Text_1FBA2C, MSGBOX_DEFAULT - setvar VAR_0x40D3, 6 + setvar VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 releaseall end @@ -418,7 +418,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA193:: @ 81FA193 LittlerootTown_ProfessorBirchsLab_EventScript_1FA19E:: @ 81FA19E erasemonpic msgbox LittlerootTown_ProfessorBirchsLab_Text_1FBA2C, MSGBOX_DEFAULT - setvar VAR_0x40D3, 6 + setvar VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 releaseall end @@ -463,7 +463,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA234:: @ 81FA234 LittlerootTown_ProfessorBirchsLab_EventScript_1FA23F:: @ 81FA23F erasemonpic msgbox LittlerootTown_ProfessorBirchsLab_Text_1FBA2C, MSGBOX_DEFAULT - setvar VAR_0x40D3, 6 + setvar VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 releaseall end @@ -477,9 +477,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA24F:: @ 81FA24F LittlerootTown_ProfessorBirchsLab_EventScript_1FA25A:: @ 81FA25A lock faceplayer - compare VAR_0x40D3, 5 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 5 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1FA28A - compare VAR_0x40D3, 2 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1FA294 goto_if_unset FLAG_HAS_MATCH_CALL, LittlerootTown_ProfessorBirchsLab_EventScript_1FA29E goto_if_unset FLAG_ENABLE_PROF_BIRCH_MATCH_CALL, LittlerootTown_ProfessorBirchsLab_EventScript_1FA2D2 @@ -498,9 +498,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA294:: @ 81FA294 LittlerootTown_ProfessorBirchsLab_EventScript_1FA29E:: @ 81FA29E goto_if_unset FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_UNKNOWN_0x380, LittlerootTown_ProfessorBirchsLab_EventScript_272141 - compare VAR_0x40D3, 3 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 3 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_272141 - compare VAR_0x40D3, 6 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_272141 compare VAR_BIRCH_LAB_STATE, 5 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1FA3C4 @@ -519,7 +519,7 @@ Route101_EventScript_1FA2D2:: @ 81FA2D2 closemessage delay 30 setflag FLAG_ENABLE_PROF_BIRCH_MATCH_CALL - setvar VAR_0x40DA, 2 + setvar VAR_REGISTER_BIRCH_STATE, 2 release end @@ -539,9 +539,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA2F8:: @ 81FA2F8 call_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1FA37F setvar VAR_BIRCH_LAB_STATE, 5 setflag FLAG_ADVENTURE_STARTED - setvar VAR_ROUTE102_ACCESSIBLE, 1 + setvar VAR_OLDALE_TOWN_STATE, 1 setvar VAR_LITTLEROOT_RIVAL_STATE, 4 - setvar VAR_0x4050, 3 + setvar VAR_LITTLEROOT_TOWN_STATE, 3 releaseall end @@ -598,11 +598,11 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA3E3:: @ 81FA3E3 LittlerootTown_ProfessorBirchsLab_EventScript_1FA3EC:: @ 81FA3EC lock faceplayer - compare VAR_0x40D3, 5 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 5 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1FA43A - compare VAR_0x40D3, 6 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6 goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_1FA465 - compare VAR_0x40D3, 2 + compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2 goto_if_ge LittlerootTown_ProfessorBirchsLab_EventScript_1FA490 checkplayergender compare VAR_RESULT, MALE diff --git a/data/maps/MagmaHideout_4F/scripts.inc b/data/maps/MagmaHideout_4F/scripts.inc index e6464a7f9..7bbb4ac18 100644 --- a/data/maps/MagmaHideout_4F/scripts.inc +++ b/data/maps/MagmaHideout_4F/scripts.inc @@ -62,7 +62,7 @@ MagmaHideout_4F_EventScript_23A560:: @ 823A560 closemessage clearflag FLAG_HIDE_SLATEPORT_CITY_CAPTAIN_STERN clearflag FLAG_HIDE_SLATEPORT_CITY_GABBY_AND_TY - setvar VAR_SLATEPORT_STATE, 1 + setvar VAR_SLATEPORT_CITY_STATE, 1 setflag FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT setvar VAR_SLATEPORT_HARBOR_STATE, 1 fadescreen 1 diff --git a/data/maps/MauvilleCity_GameCorner/scripts.inc b/data/maps/MauvilleCity_GameCorner/scripts.inc index 88b1ded16..0df7afe54 100644 --- a/data/maps/MauvilleCity_GameCorner/scripts.inc +++ b/data/maps/MauvilleCity_GameCorner/scripts.inc @@ -40,7 +40,6 @@ MauvilleCity_GameCorner_EventScript_20FC33:: @ 820FC33 givecoins 50 takemoney 0x3e8, 0 updatemoneybox 0, 0 - nop updatecoinsbox 1, 6 playse SE_REGI msgbox MauvilleCity_GameCorner_Text_210529, MSGBOX_DEFAULT @@ -61,7 +60,6 @@ MauvilleCity_GameCorner_EventScript_20FC75:: @ 820FC75 givecoins 500 takemoney 0x2710, 0 updatemoneybox 0, 0 - nop updatecoinsbox 1, 6 playse SE_REGI msgbox MauvilleCity_GameCorner_Text_210529, MSGBOX_DEFAULT diff --git a/data/maps/MirageTower_4F/scripts.inc b/data/maps/MirageTower_4F/scripts.inc index 3d8dd80d0..5208820df 100644 --- a/data/maps/MirageTower_4F/scripts.inc +++ b/data/maps/MirageTower_4F/scripts.inc @@ -52,7 +52,7 @@ MirageTower_4F_EventScript_23ADCA:: @ 823ADCA waitstate special DoMirageTowerCeilingCrumble waitstate - setvar VAR_ROUTE_111_STATE, 1 + setvar VAR_MIRAGE_TOWER_STATE, 1 clearflag FLAG_LANDMARK_MIRAGE_TOWER warp MAP_ROUTE111, 255, 19, 59 waitstate diff --git a/data/maps/MossdeepCity/map.json b/data/maps/MossdeepCity/map.json index 533183a35..db24a9b3b 100644 --- a/data/maps/MossdeepCity/map.json +++ b/data/maps/MossdeepCity/map.json @@ -366,7 +366,7 @@ "x": 42, "y": 21, "elevation": 5, - "var": "VAR_MOSSDEEP_STATE", + "var": "VAR_MOSSDEEP_CITY_STATE", "var_value": "1", "script": "MossdeepCity_EventScript_1E4B41" }, @@ -375,7 +375,7 @@ "x": 41, "y": 22, "elevation": 5, - "var": "VAR_MOSSDEEP_STATE", + "var": "VAR_MOSSDEEP_CITY_STATE", "var_value": "1", "script": "MossdeepCity_EventScript_1E4B41" }, @@ -384,7 +384,7 @@ "x": 41, "y": 23, "elevation": 5, - "var": "VAR_MOSSDEEP_STATE", + "var": "VAR_MOSSDEEP_CITY_STATE", "var_value": "1", "script": "MossdeepCity_EventScript_1E4B41" }, @@ -393,7 +393,7 @@ "x": 41, "y": 24, "elevation": 5, - "var": "VAR_MOSSDEEP_STATE", + "var": "VAR_MOSSDEEP_CITY_STATE", "var_value": "1", "script": "MossdeepCity_EventScript_1E4B41" }, @@ -402,7 +402,7 @@ "x": 40, "y": 25, "elevation": 5, - "var": "VAR_MOSSDEEP_STATE", + "var": "VAR_MOSSDEEP_CITY_STATE", "var_value": "1", "script": "MossdeepCity_EventScript_1E4B41" }, @@ -411,7 +411,7 @@ "x": 40, "y": 26, "elevation": 5, - "var": "VAR_MOSSDEEP_STATE", + "var": "VAR_MOSSDEEP_CITY_STATE", "var_value": "1", "script": "MossdeepCity_EventScript_1E4B41" } @@ -482,4 +482,4 @@ "script": "MossdeepCity_EventScript_1E4B14" } ] -}
\ No newline at end of file +} diff --git a/data/maps/MossdeepCity/scripts.inc b/data/maps/MossdeepCity/scripts.inc index 2da9f1f19..646b1d908 100644 --- a/data/maps/MossdeepCity/scripts.inc +++ b/data/maps/MossdeepCity/scripts.inc @@ -94,7 +94,7 @@ MossdeepCity_EventScript_1E4B41:: @ 81E4B41 removeobject 12 removeobject 13 delay 30 - setvar VAR_MOSSDEEP_STATE, 2 + setvar VAR_MOSSDEEP_CITY_STATE, 2 setflag FLAG_HIDE_MOSSDEEP_CITY_TEAM_MAGMA releaseall end diff --git a/data/maps/MossdeepCity_Gym/scripts.inc b/data/maps/MossdeepCity_Gym/scripts.inc index c0f092c6a..3779fa8d2 100644 --- a/data/maps/MossdeepCity_Gym/scripts.inc +++ b/data/maps/MossdeepCity_Gym/scripts.inc @@ -71,7 +71,7 @@ MossdeepCity_Gym_EventScript_2208D1:: @ 82208D1 clearflag FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_1F_TEAM_MAGMA clearflag FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_2F_TEAM_MAGMA clearflag FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_2F_STEVEN - setvar VAR_MOSSDEEP_STATE, 1 + setvar VAR_MOSSDEEP_CITY_STATE, 1 setflag FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_1F_STEVEN setvar VAR_MOSSDEEP_SPACE_CENTER_STATE_2, 1 call MossdeepCity_Gym_EventScript_22095B diff --git a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc index 66fd663b1..144113d72 100644 --- a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc +++ b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc @@ -4,7 +4,7 @@ MossdeepCity_SpaceCenter_1F_MapScripts:: @ 8222F41 .byte 0 MossdeepCity_SpaceCenter_1F_OnTransition: @ 8222F4C - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_222F58 end @@ -39,7 +39,7 @@ MossdeepCity_SpaceCenter_1F_EventScript_222FBA:: @ 8222FBA end MossdeepCity_SpaceCenter_1F_MapScript1_222FC2: @ 8222FC2 - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_le MossdeepCity_SpaceCenter_1F_EventScript_222FCE end @@ -50,7 +50,7 @@ MossdeepCity_SpaceCenter_1F_EventScript_222FCE:: @ 8222FCE MossdeepCity_SpaceCenter_1F_EventScript_222FD8:: @ 8222FD8 lock faceplayer - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_223024 dotimebasedevents specialvar VAR_RESULT, GetWeekCount @@ -98,7 +98,7 @@ MossdeepCity_SpaceCenter_1F_EventScript_22305A:: @ 822305A MossdeepCity_SpaceCenter_1F_EventScript_223063:: @ 8223063 lock faceplayer - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_22307A msgbox MossdeepCity_SpaceCenter_1F_Text_2233D3, MSGBOX_DEFAULT release @@ -114,7 +114,7 @@ MossdeepCity_SpaceCenter_1F_EventScript_22307A:: @ 822307A MossdeepCity_SpaceCenter_1F_EventScript_22308E:: @ 822308E lock faceplayer - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_2230DA goto_if_set FLAG_RECEIVED_SUN_STONE_MOSSDEEP, MossdeepCity_SpaceCenter_1F_EventScript_2230D0 msgbox MossdeepCity_SpaceCenter_1F_Text_223540, MSGBOX_DEFAULT @@ -155,9 +155,9 @@ MossdeepCity_SpaceCenter_1F_EventScript_22312D:: @ 822312D lock faceplayer goto_if_set FLAG_SYS_GAME_CLEAR, MossdeepCity_SpaceCenter_1F_EventScript_223154 - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_22315E - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_lt MossdeepCity_SpaceCenter_1F_EventScript_223154 goto MossdeepCity_SpaceCenter_1F_EventScript_22315E end @@ -176,9 +176,9 @@ MossdeepCity_SpaceCenter_1F_EventScript_223168:: @ 8223168 lock faceplayer goto_if_set FLAG_SYS_GAME_CLEAR, MossdeepCity_SpaceCenter_1F_EventScript_22318F - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_2231A4 - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_lt MossdeepCity_SpaceCenter_1F_EventScript_22318F goto MossdeepCity_SpaceCenter_1F_EventScript_2231A4 end @@ -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 b258740ac..8dcc74116 100644 --- a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc +++ b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc @@ -4,7 +4,7 @@ MossdeepCity_SpaceCenter_2F_MapScripts:: @ 8223D58 .byte 0 MossdeepCity_SpaceCenter_2F_OnTransition: @ 8223D63 - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 call_if_eq MossdeepCity_SpaceCenter_2F_EventScript_223D7A compare VAR_MOSSDEEP_SPACE_CENTER_STATE_2, 2 call_if_eq MossdeepCity_SpaceCenter_2F_EventScript_223D9F @@ -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 @@ -98,9 +98,9 @@ MossdeepCity_SpaceCenter_2F_EventScript_223E8D:: @ 8223E8D lock faceplayer goto_if_set FLAG_SYS_GAME_CLEAR, MossdeepCity_SpaceCenter_2F_EventScript_223EB4 - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_eq MossdeepCity_SpaceCenter_2F_EventScript_223EBE - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_lt MossdeepCity_SpaceCenter_2F_EventScript_223EB4 goto MossdeepCity_SpaceCenter_2F_EventScript_223EBE end @@ -119,9 +119,9 @@ MossdeepCity_SpaceCenter_2F_EventScript_223EC8:: @ 8223EC8 lock faceplayer goto_if_set FLAG_SYS_GAME_CLEAR, MossdeepCity_SpaceCenter_2F_EventScript_223EEF - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_eq MossdeepCity_SpaceCenter_2F_EventScript_223EF9 - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_lt MossdeepCity_SpaceCenter_2F_EventScript_223EEF goto MossdeepCity_SpaceCenter_2F_EventScript_223EF9 end @@ -140,9 +140,9 @@ MossdeepCity_SpaceCenter_2F_EventScript_223F03:: @ 8223F03 lock faceplayer goto_if_set FLAG_SYS_GAME_CLEAR, MossdeepCity_SpaceCenter_2F_EventScript_223F2A - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_eq MossdeepCity_SpaceCenter_2F_EventScript_223F34 - compare VAR_MOSSDEEP_STATE, 2 + compare VAR_MOSSDEEP_CITY_STATE, 2 goto_if_lt MossdeepCity_SpaceCenter_2F_EventScript_223F2A goto MossdeepCity_SpaceCenter_2F_EventScript_223F34 end @@ -287,7 +287,7 @@ MossdeepCity_SpaceCenter_2F_EventScript_224071:: @ 8224071 delay 20 msgbox MossdeepCity_SpaceCenter_2F_Text_2249DC, MSGBOX_DEFAULT closemessage - setvar VAR_MOSSDEEP_STATE, 3 + setvar VAR_MOSSDEEP_CITY_STATE, 3 fadedefaultbgm fadescreen 1 setvar VAR_MOSSDEEP_SPACE_CENTER_STATE_2, 3 diff --git a/data/maps/MtChimney/scripts.inc b/data/maps/MtChimney/scripts.inc index d770f095c..717973eba 100644 --- a/data/maps/MtChimney/scripts.inc +++ b/data/maps/MtChimney/scripts.inc @@ -131,7 +131,6 @@ MtChimney_EventScript_22EF51:: @ 822EF51 MtChimney_EventScript_22EF5E:: @ 822EF5E takemoney 0xc8, 0 updatemoneybox 0, 0 - nop return MtChimney_EventScript_22EF69:: @ 822EF69 diff --git a/data/maps/OldaleTown/map.json b/data/maps/OldaleTown/map.json index 37b6105f2..5f91e81ed 100644 --- a/data/maps/OldaleTown/map.json +++ b/data/maps/OldaleTown/map.json @@ -119,7 +119,7 @@ "x": 0, "y": 10, "elevation": 3, - "var": "VAR_ROUTE102_ACCESSIBLE", + "var": "VAR_OLDALE_TOWN_STATE", "var_value": "0", "script": "OldaleTown_EventScript_1E903F" }, @@ -128,7 +128,7 @@ "x": 8, "y": 19, "elevation": 3, - "var": "VAR_OLDALE_STATE", + "var": "VAR_OLDALE_RIVAL_STATE", "var_value": "1", "script": "OldaleTown_EventScript_1E9086" }, @@ -137,7 +137,7 @@ "x": 9, "y": 19, "elevation": 3, - "var": "VAR_OLDALE_STATE", + "var": "VAR_OLDALE_RIVAL_STATE", "var_value": "1", "script": "OldaleTown_EventScript_1E90A6" }, @@ -146,7 +146,7 @@ "x": 10, "y": 19, "elevation": 3, - "var": "VAR_OLDALE_STATE", + "var": "VAR_OLDALE_RIVAL_STATE", "var_value": "1", "script": "OldaleTown_EventScript_1E90C6" } @@ -193,4 +193,4 @@ "script": "Common_EventScript_ShowPokemartSign" } ] -}
\ No newline at end of file +} diff --git a/data/maps/OldaleTown/scripts.inc b/data/maps/OldaleTown/scripts.inc index 3a8b8046b..71b930b83 100644 --- a/data/maps/OldaleTown/scripts.inc +++ b/data/maps/OldaleTown/scripts.inc @@ -11,7 +11,7 @@ OldaleTown_OnTransition: @ 81E8EA8 end OldaleTown_EventScript_1E8ECC:: @ 81E8ECC - setvar VAR_ROUTE102_ACCESSIBLE, 1 + setvar VAR_OLDALE_TOWN_STATE, 1 return OldaleTown_EventScript_1E8ED2:: @ 81E8ED2 @@ -280,7 +280,7 @@ OldaleTown_EventScript_1E911A:: @ 81E911A applymovement 4, OldaleTown_Movement_1E9177 waitmovement 0 removeobject 4 - setvar VAR_OLDALE_STATE, 2 + setvar VAR_OLDALE_RIVAL_STATE, 2 setflag FLAG_HIDE_OLDALE_TOWN_RIVAL releaseall end diff --git a/data/maps/PetalburgCity/map.json b/data/maps/PetalburgCity/map.json index 00e89bfa0..44402aff5 100644 --- a/data/maps/PetalburgCity/map.json +++ b/data/maps/PetalburgCity/map.json @@ -193,7 +193,7 @@ "x": 8, "y": 10, "elevation": 3, - "var": "VAR_PETALBURG_STATE", + "var": "VAR_PETALBURG_CITY_STATE", "var_value": "0", "script": "PetalburgCity_EventScript_1DC49A" }, @@ -202,7 +202,7 @@ "x": 8, "y": 11, "elevation": 3, - "var": "VAR_PETALBURG_STATE", + "var": "VAR_PETALBURG_CITY_STATE", "var_value": "0", "script": "PetalburgCity_EventScript_1DC4A6" }, @@ -211,7 +211,7 @@ "x": 8, "y": 12, "elevation": 3, - "var": "VAR_PETALBURG_STATE", + "var": "VAR_PETALBURG_CITY_STATE", "var_value": "0", "script": "PetalburgCity_EventScript_1DC4B2" }, @@ -220,7 +220,7 @@ "x": 8, "y": 13, "elevation": 3, - "var": "VAR_PETALBURG_STATE", + "var": "VAR_PETALBURG_CITY_STATE", "var_value": "0", "script": "PetalburgCity_EventScript_1DC4BE" }, @@ -327,4 +327,4 @@ "flag": "FLAG_HIDDEN_ITEM_PETALBURG_CITY_RARE_CANDY" } ] -}
\ No newline at end of file +} diff --git a/data/maps/PetalburgCity/scripts.inc b/data/maps/PetalburgCity/scripts.inc index 59e28734d..e95fc9d92 100644 --- a/data/maps/PetalburgCity/scripts.inc +++ b/data/maps/PetalburgCity/scripts.inc @@ -5,11 +5,11 @@ PetalburgCity_MapScripts:: PetalburgCity_OnTransition: @ 81DC2D7 setflag FLAG_VISITED_PETALBURG_CITY - compare VAR_PETALBURG_STATE, 0 + compare VAR_PETALBURG_CITY_STATE, 0 call_if_eq PetalburgCity_EventScript_1DC307 - compare VAR_PETALBURG_STATE, 2 + compare VAR_PETALBURG_CITY_STATE, 2 call_if_eq PetalburgCity_EventScript_1DC30F - compare VAR_PETALBURG_STATE, 4 + compare VAR_PETALBURG_CITY_STATE, 4 call_if_eq PetalburgCity_EventScript_1DC30F compare VAR_PETALBURG_GYM_STATE, 8 call_if_eq PetalburgCity_EventScript_1DC316 @@ -29,8 +29,8 @@ PetalburgCity_EventScript_1DC316:: @ 81DC316 return PetalburgCity_MapScript2_1DC31C: @ 81DC31C - map_script_2 VAR_PETALBURG_STATE, 2, PetalburgCity_EventScript_1DC32E - map_script_2 VAR_PETALBURG_STATE, 4, PetalburgCity_EventScript_1DC390 + map_script_2 VAR_PETALBURG_CITY_STATE, 2, PetalburgCity_EventScript_1DC32E + map_script_2 VAR_PETALBURG_CITY_STATE, 4, PetalburgCity_EventScript_1DC390 .2byte 0 PetalburgCity_EventScript_1DC32E:: @ 81DC32E @@ -49,7 +49,7 @@ PetalburgCity_EventScript_1DC32E:: @ 81DC32E msgbox PetalburgCity_Text_1EC297, MSGBOX_DEFAULT closemessage clearflag FLAG_HIDE_MAP_NAME_POPUP - setvar VAR_PETALBURG_STATE, 3 + setvar VAR_PETALBURG_CITY_STATE, 3 fadedefaultbgm clearflag FLAG_SPECIAL_FLAG_0x4001 special LoadPlayerParty diff --git a/data/maps/PetalburgCity_Gym/scripts.inc b/data/maps/PetalburgCity_Gym/scripts.inc index d37bcfd91..a64c314a5 100644 --- a/data/maps/PetalburgCity_Gym/scripts.inc +++ b/data/maps/PetalburgCity_Gym/scripts.inc @@ -217,7 +217,7 @@ PetalburgCity_Gym_EventScript_204AAC:: @ 8204AAC removeobject 10 setflag FLAG_HIDE_PETALBURG_CITY_WALLYS_AUNT setvar VAR_PETALBURG_GYM_STATE, 1 - setvar VAR_PETALBURG_STATE, 2 + setvar VAR_PETALBURG_CITY_STATE, 2 clearflag FLAG_HIDE_PETALBURG_CITY_WALLY clearflag FLAG_HIDE_PETALBURG_GYM_WALLY setflag FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_RIVAL @@ -496,7 +496,7 @@ PetalburgCity_Gym_EventScript_204F13:: @ 8204F13 compare VAR_0x8008, 3 call_if_eq PetalburgCity_Gym_EventScript_20506C removeobject 11 - setvar VAR_PETALBURG_STATE, 4 + setvar VAR_PETALBURG_CITY_STATE, 4 clearflag FLAG_HIDE_PETALBURG_CITY_WALLYS_UNCLE warp MAP_PETALBURG_CITY, 255, 15, 8 waitstate diff --git a/data/maps/PetalburgCity_WallysHouse/scripts.inc b/data/maps/PetalburgCity_WallysHouse/scripts.inc index 8b1421abb..b285b220c 100644 --- a/data/maps/PetalburgCity_WallysHouse/scripts.inc +++ b/data/maps/PetalburgCity_WallysHouse/scripts.inc @@ -4,7 +4,7 @@ PetalburgCity_WallysHouse_MapScripts:: @ 8204229 .byte 0 PetalburgCity_WallysHouse_MapScript2_204234: @ 8204234 - map_script_2 VAR_PETALBURG_STATE, 4, PetalburgCity_WallysHouse_EventScript_20423E + map_script_2 VAR_PETALBURG_CITY_STATE, 4, PetalburgCity_WallysHouse_EventScript_20423E .2byte 0 PetalburgCity_WallysHouse_EventScript_20423E:: @ 820423E @@ -13,7 +13,7 @@ PetalburgCity_WallysHouse_EventScript_20423E:: @ 820423E end PetalburgCity_WallysHouse_MapScript2_204247: @ 8204247 - map_script_2 VAR_PETALBURG_STATE, 4, PetalburgCity_WallysHouse_EventScript_204251 + map_script_2 VAR_PETALBURG_CITY_STATE, 4, PetalburgCity_WallysHouse_EventScript_204251 .2byte 0 PetalburgCity_WallysHouse_EventScript_204251:: @ 8204251 @@ -22,7 +22,7 @@ PetalburgCity_WallysHouse_EventScript_204251:: @ 8204251 giveitem_std ITEM_HM03 setflag FLAG_RECEIVED_HM03 msgbox PetalburgCity_WallysHouse_Text_20461A, MSGBOX_DEFAULT - setvar VAR_PETALBURG_STATE, 5 + setvar VAR_PETALBURG_CITY_STATE, 5 releaseall end diff --git a/data/maps/Route103/scripts.inc b/data/maps/Route103/scripts.inc index 0183d385b..36b2c6c14 100644 --- a/data/maps/Route103/scripts.inc +++ b/data/maps/Route103/scripts.inc @@ -143,7 +143,7 @@ Route103_EventScript_1EC5A2:: @ 81EC5A2 setvar VAR_BIRCH_LAB_STATE, 4 clearflag FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_RIVAL setflag FLAG_DEFEATED_RIVAL_ROUTE103 - setvar VAR_OLDALE_STATE, 1 + setvar VAR_OLDALE_RIVAL_STATE, 1 clearflag FLAG_HIDE_OLDALE_TOWN_RIVAL savebgm MUS_DUMMY fadedefaultbgm diff --git a/data/maps/Route104/map.json b/data/maps/Route104/map.json index d2c7cc146..a02a1e170 100644 --- a/data/maps/Route104/map.json +++ b/data/maps/Route104/map.json @@ -537,7 +537,7 @@ "x": 17, "y": 51, "elevation": 3, - "var": "VAR_0x4063", + "var": "VAR_ROUTE104_STATE", "var_value": "1", "script": "Route104_EventScript_1ECCB3" } @@ -624,4 +624,4 @@ "flag": "FLAG_HIDDEN_ITEM_ROUTE_104_HEART_SCALE" } ] -}
\ No newline at end of file +} diff --git a/data/maps/Route104/scripts.inc b/data/maps/Route104/scripts.inc index 33200b800..fd195b973 100644 --- a/data/maps/Route104/scripts.inc +++ b/data/maps/Route104/scripts.inc @@ -4,7 +4,7 @@ Route104_MapScripts:: @ 81ECC32 .byte 0 Route104_MapScript2_1ECC3D: @ 81ECC3D - map_script_2 VAR_BOARD_BRINEY_BOAT_ROUTE104_STATE, 1, Route104_EventScript_1ECC47 + map_script_2 VAR_BOARD_BRINEY_BOAT_STATE, 1, Route104_EventScript_1ECC47 .2byte 0 Route104_EventScript_1ECC47:: @ 81ECC47 @@ -29,7 +29,7 @@ Route104_EventScript_1ECC74:: @ 81ECC74 return Route104_EventScript_1ECC78:: @ 81ECC78 - compare VAR_BOARD_BRINEY_BOAT_ROUTE104_STATE, 1 + compare VAR_BOARD_BRINEY_BOAT_STATE, 1 goto_if_ge Route104_EventScript_1ECC9D goto_if_set FLAG_MET_RIVAL_RUSTBORO, Route104_EventScript_1ECC9D goto_if_unset FLAG_REGISTER_RIVAL_POKENAV, Route104_EventScript_1ECC9D @@ -49,8 +49,8 @@ Route104_EventScript_1ECC9E:: @ 81ECC9E Route104_EventScript_1ECCB3:: @ 81ECCB3 lockall setflag FLAG_HIDE_RUSBORO_CITY_RIVAL - setvar VAR_RUSTBORO_STATE, 8 - setvar VAR_0x4063, 2 + setvar VAR_RUSTBORO_CITY_STATE, 8 + setvar VAR_ROUTE104_STATE, 2 applymovement EVENT_OBJ_ID_PLAYER, Common_Movement_WalkInPlaceUp waitmovement 0 delay 10 @@ -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,8 +416,8 @@ Route104_EventScript_1ED139:: @ 81ED139 copyvar VAR_BRINEY_LOCATION, VAR_0x8008 resetobjectpriority EVENT_OBJ_ID_PLAYER, MAP_ROUTE104 resetobjectpriority 2, MAP_DEWFORD_TOWN - moveobjectoffscreen 2 - setvar VAR_BOARD_BRINEY_BOAT_ROUTE104_STATE, 0 + 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 end diff --git a/data/maps/Route104_MrBrineysHouse/scripts.inc b/data/maps/Route104_MrBrineysHouse/scripts.inc index 52fd4b96d..c2877f0d9 100644 --- a/data/maps/Route104_MrBrineysHouse/scripts.inc +++ b/data/maps/Route104_MrBrineysHouse/scripts.inc @@ -75,12 +75,12 @@ Route104_MrBrineysHouse_EventScript_229E1D:: @ 8229E1D Route104_MrBrineysHouse_EventScript_229E27:: @ 8229E27 msgbox Route104_MrBrineysHouse_Text_229FE9, MSGBOX_DEFAULT call Route104_MrBrineysHouse_EventScript_271E95 - setvar VAR_BOARD_BRINEY_BOAT_ROUTE104_STATE, 1 + setvar VAR_BOARD_BRINEY_BOAT_STATE, 1 clearflag FLAG_HIDE_ROUTE_104_MR_BRINEY setflag FLAG_HIDE_BRINEYS_HOUSE_MR_BRINEY setflag FLAG_HIDE_BRINEYS_HOUSE_PEEKO - setvar VAR_RUSTBORO_STATE, 8 - setvar VAR_0x4063, 2 + setvar VAR_RUSTBORO_CITY_STATE, 8 + setvar VAR_ROUTE104_STATE, 2 setflag FLAG_HIDE_RUSBORO_CITY_RIVAL setflag FLAG_HIDE_ROUTE_104_RIVAL warp MAP_ROUTE104, 255, 13, 51 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..6447b49c5 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 diff --git a/data/maps/Route109_SeashoreHouse/scripts.inc b/data/maps/Route109_SeashoreHouse/scripts.inc index e52ab08f9..79d021334 100644 --- a/data/maps/Route109_SeashoreHouse/scripts.inc +++ b/data/maps/Route109_SeashoreHouse/scripts.inc @@ -58,7 +58,6 @@ Route109_SeashoreHouse_EventScript_269484:: @ 8269484 msgbox Route109_SeashoreHouse_Text_2697C8, MSGBOX_DEFAULT takemoney 0x12c, 0 updatemoneybox 0, 0 - nop giveitem_std ITEM_SODA_POP hidemoneybox nop diff --git a/data/maps/Route110/map.json b/data/maps/Route110/map.json index 8cbc93af6..570c38dcc 100644 --- a/data/maps/Route110/map.json +++ b/data/maps/Route110/map.json @@ -594,7 +594,7 @@ "x": 7, "y": 85, "elevation": 3, - "var": "VAR_0x40DA", + "var": "VAR_REGISTER_BIRCH_STATE", "var_value": "1", "script": "Route110_EventScript_1EF9CB" }, @@ -603,7 +603,7 @@ "x": 8, "y": 85, "elevation": 3, - "var": "VAR_0x40DA", + "var": "VAR_REGISTER_BIRCH_STATE", "var_value": "1", "script": "Route110_EventScript_1EF9D6" }, @@ -612,7 +612,7 @@ "x": 9, "y": 85, "elevation": 3, - "var": "VAR_0x40DA", + "var": "VAR_REGISTER_BIRCH_STATE", "var_value": "1", "script": "Route110_EventScript_1EF9E1" }, @@ -621,7 +621,7 @@ "x": 10, "y": 85, "elevation": 3, - "var": "VAR_0x40DA", + "var": "VAR_REGISTER_BIRCH_STATE", "var_value": "1", "script": "Route110_EventScript_1EF9EC" } @@ -762,4 +762,4 @@ "script": "Route110_EventScript_1EF34A" } ] -}
\ No newline at end of file +} diff --git a/data/maps/Route110/scripts.inc b/data/maps/Route110/scripts.inc index bc4768207..67fbbd0a8 100644 --- a/data/maps/Route110/scripts.inc +++ b/data/maps/Route110/scripts.inc @@ -660,7 +660,7 @@ Route110_EventScript_1EF9F7:: @ 81EF9F7 compare VAR_0x8008, 4 call_if_eq Route110_EventScript_1EFB25 removeobject 36 - setvar VAR_0x40DA, 2 + setvar VAR_REGISTER_BIRCH_STATE, 2 releaseall end diff --git a/data/maps/Route111/scripts.inc b/data/maps/Route111/scripts.inc index bf79c5eee..c913d7e6e 100644 --- a/data/maps/Route111/scripts.inc +++ b/data/maps/Route111/scripts.inc @@ -7,7 +7,7 @@ Route111_MapScripts:: @ 81F0CA7 Route111_MapScript1_1F0CBC: @ 81F0CBC call_if_unset FLAG_REGI_DOORS_OPENED, Route111_EventScript_1F0CD1 - compare VAR_ROUTE_111_STATE, 1 + compare VAR_MIRAGE_TOWER_STATE, 1 call_if_eq Route111_EventScript_1F0CE4 end @@ -41,9 +41,9 @@ Route111_OnTransition: @ 81F0D87 setvar VAR_TRAINER_HILL_IS_ACTIVE, 0 special SetMirageTowerVisibility call_if_unset FLAG_MIRAGE_TOWER_VISIBLE, Route111_EventScript_1F0E3C - compare VAR_ROUTE_111_STATE, 1 + compare VAR_MIRAGE_TOWER_STATE, 1 call_if_eq Route111_EventScript_1F0DC2 - compare VAR_ROUTE_111_STATE, 2 + compare VAR_MIRAGE_TOWER_STATE, 2 call_if_eq Route111_EventScript_1F0E40 call Route111_EventScript_1F0DE6 call Route111_EventScript_28CCC7 @@ -101,11 +101,11 @@ Route111_EventScript_1F0E3C:: @ 81F0E3C return Route111_EventScript_1F0E40:: @ 81F0E40 - setvar VAR_ROUTE_111_STATE, 3 + setvar VAR_MIRAGE_TOWER_STATE, 3 return Route111_MapScript2_1F0E46: @ 81F0E46 - map_script_2 VAR_ROUTE_111_STATE, 1, Route111_EventScript_1F0E50 + map_script_2 VAR_MIRAGE_TOWER_STATE, 1, Route111_EventScript_1F0E50 .2byte 0 Route111_EventScript_1F0E50:: @ 81F0E50 @@ -113,7 +113,7 @@ Route111_EventScript_1F0E50:: @ 81F0E50 end Route111_MapScript2_1F0E56: @ 81F0E56 - map_script_2 VAR_ROUTE_111_STATE, 1, Route111_EventScript_1F0E60 + map_script_2 VAR_MIRAGE_TOWER_STATE, 1, Route111_EventScript_1F0E60 .2byte 0 Route111_EventScript_1F0E60:: @ 81F0E60 @@ -134,7 +134,7 @@ Route111_EventScript_1F0E60:: @ 81F0E60 waitstate special StartMirageTowerFossilFallAndSink waitstate - setvar VAR_ROUTE_111_STATE, 2 + setvar VAR_MIRAGE_TOWER_STATE, 2 clearflag FLAG_HIDE_DESERT_UNDERPASS_FOSSIL goto_if_set FLAG_CHOSE_ROOT_FOSSIL, Route111_EventScript_1F0EA7 msgbox Route111_Text_1F1C74, MSGBOX_DEFAULT @@ -411,9 +411,9 @@ Route111_EventScript_1F1192:: @ 81F1192 Route111_EventScript_1F119B:: @ 81F119B lock faceplayer - compare VAR_ROUTE_111_STATE, 3 + compare VAR_MIRAGE_TOWER_STATE, 3 goto_if_eq Route111_EventScript_1F11C6 - compare VAR_ROUTE_111_STATE, 2 + compare VAR_MIRAGE_TOWER_STATE, 2 goto_if_eq Route111_EventScript_1F11D0 goto_if_set FLAG_MIRAGE_TOWER_VISIBLE, Route111_EventScript_1F11DA msgbox Route111_Text_1F1A22, MSGBOX_DEFAULT diff --git a/data/maps/Route119_WeatherInstitute_2F/scripts.inc b/data/maps/Route119_WeatherInstitute_2F/scripts.inc index d5a2de5ce..9257b3a64 100644 --- a/data/maps/Route119_WeatherInstitute_2F/scripts.inc +++ b/data/maps/Route119_WeatherInstitute_2F/scripts.inc @@ -77,7 +77,7 @@ 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 diff --git a/data/maps/Route121_SafariZoneEntrance/scripts.inc b/data/maps/Route121_SafariZoneEntrance/scripts.inc index 69f5ea80d..85b6c6c36 100644 --- a/data/maps/Route121_SafariZoneEntrance/scripts.inc +++ b/data/maps/Route121_SafariZoneEntrance/scripts.inc @@ -68,7 +68,6 @@ Route121_SafariZoneEntrance_EventScript_22BC48:: @ 822BC48 msgbox Route121_SafariZoneEntrance_Text_2A501B, MSGBOX_DEFAULT takemoney 0x1f4, 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/Route129/scripts.inc b/data/maps/Route129/scripts.inc index 49b26011a..d57a27cf9 100644 --- a/data/maps/Route129/scripts.inc +++ b/data/maps/Route129/scripts.inc @@ -14,7 +14,7 @@ Route129_MapScript1_1F7294: @ 81F7294 Route129_OnTransition: @ 81F72AB compare VAR_SHOULD_END_UNUSUAL_WEATHER, 1 call_if_eq Route129_EventScript_273D13 - compare VAR_RAYQUAZA_STATE, 4 + compare VAR_SOOTOPOLIS_CITY_STATE, 4 call_if_ge Route129_EventScript_1F72D8 compare VAR_UNUSUAL_WEATHER_LOCATION, UNUSUAL_WEATHER_ROUTE_129_WEST call_if_eq UnusualWeather_StartKyogreWeather diff --git a/data/maps/Route130/scripts.inc b/data/maps/Route130/scripts.inc index 213287237..18bccb185 100644 --- a/data/maps/Route130/scripts.inc +++ b/data/maps/Route130/scripts.inc @@ -3,7 +3,7 @@ Route130_MapScripts:: @ 81F735F .byte 0 Route130_OnTransition: @ 81F7365 - compare VAR_RAYQUAZA_STATE, 4 + compare VAR_SOOTOPOLIS_CITY_STATE, 4 call_if_ge Route130_EventScript_1F73B5 specialvar VAR_RESULT, IsMirageIslandPresent compare VAR_RESULT, 1 diff --git a/data/maps/Route131/scripts.inc b/data/maps/Route131/scripts.inc index 17ac3f52f..c1c3e26dc 100644 --- a/data/maps/Route131/scripts.inc +++ b/data/maps/Route131/scripts.inc @@ -3,7 +3,7 @@ Route131_MapScripts:: @ 81F7404 .byte 0 Route131_OnTransition: @ 81F740A - compare VAR_RAYQUAZA_STATE, 4 + compare VAR_SOOTOPOLIS_CITY_STATE, 4 call_if_ge Route131_EventScript_1F741F call Route131_EventScript_1F741B end diff --git a/data/maps/RustboroCity/map.json b/data/maps/RustboroCity/map.json index 94e22985b..d9fd0d8cc 100644 --- a/data/maps/RustboroCity/map.json +++ b/data/maps/RustboroCity/map.json @@ -331,7 +331,7 @@ "x": 23, "y": 20, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "1", "script": "RustboroCity_EventScript_1E095A" }, @@ -340,7 +340,7 @@ "x": 23, "y": 21, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "1", "script": "RustboroCity_EventScript_1E0971" }, @@ -349,7 +349,7 @@ "x": 23, "y": 22, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "1", "script": "RustboroCity_EventScript_1E0988" }, @@ -358,7 +358,7 @@ "x": 23, "y": 23, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "1", "script": "RustboroCity_EventScript_1E099F" }, @@ -367,7 +367,7 @@ "x": 23, "y": 24, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "1", "script": "RustboroCity_EventScript_1E09B6" }, @@ -376,7 +376,7 @@ "x": 30, "y": 9, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "2", "script": "RustboroCity_EventScript_1E0AFE" }, @@ -385,7 +385,7 @@ "x": 29, "y": 10, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "2", "script": "RustboroCity_EventScript_1E0B0A" }, @@ -394,7 +394,7 @@ "x": 30, "y": 11, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "2", "script": "RustboroCity_EventScript_1E0B16" }, @@ -403,7 +403,7 @@ "x": 30, "y": 12, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "2", "script": "RustboroCity_EventScript_1E0B22" }, @@ -412,7 +412,7 @@ "x": 30, "y": 9, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "4", "script": "RustboroCity_EventScript_1E0C2B" }, @@ -421,7 +421,7 @@ "x": 31, "y": 10, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "4", "script": "RustboroCity_EventScript_1E0C37" }, @@ -430,7 +430,7 @@ "x": 30, "y": 11, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "4", "script": "RustboroCity_EventScript_1E0C43" }, @@ -439,7 +439,7 @@ "x": 30, "y": 12, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "4", "script": "RustboroCity_EventScript_1E0C4F" }, @@ -448,7 +448,7 @@ "x": 12, "y": 53, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "7", "script": "RustboroCity_EventScript_1E0DF3" }, @@ -457,7 +457,7 @@ "x": 13, "y": 53, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "7", "script": "RustboroCity_EventScript_1E0E33" }, @@ -466,7 +466,7 @@ "x": 14, "y": 53, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "7", "script": "RustboroCity_EventScript_1E0E73" }, @@ -475,7 +475,7 @@ "x": 15, "y": 53, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "7", "script": "RustboroCity_EventScript_1E0EB3" }, @@ -484,7 +484,7 @@ "x": 16, "y": 53, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "7", "script": "RustboroCity_EventScript_1E0EF3" }, @@ -493,7 +493,7 @@ "x": 17, "y": 53, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "7", "script": "RustboroCity_EventScript_1E0F33" }, @@ -502,7 +502,7 @@ "x": 18, "y": 53, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "7", "script": "RustboroCity_EventScript_1E0F73" }, @@ -511,7 +511,7 @@ "x": 19, "y": 53, "elevation": 3, - "var": "VAR_RUSTBORO_STATE", + "var": "VAR_RUSTBORO_CITY_STATE", "var_value": "7", "script": "RustboroCity_EventScript_1E0FB3" } @@ -598,4 +598,4 @@ "script": "RustboroCity_EventScript_1E0919" } ] -}
\ No newline at end of file +} diff --git a/data/maps/RustboroCity/scripts.inc b/data/maps/RustboroCity/scripts.inc index e72496ff3..22177c783 100644 --- a/data/maps/RustboroCity/scripts.inc +++ b/data/maps/RustboroCity/scripts.inc @@ -6,10 +6,10 @@ RustboroCity_MapScripts:: @ 81E06BD RustboroCity_OnTransition: @ 81E06C8 setflag FLAG_VISITED_RUSTBORO_CITY call Common_EventScript_SetupRivalGender - compare VAR_RUSTBORO_STATE, 6 + compare VAR_RUSTBORO_CITY_STATE, 6 call_if_eq RustboroCity_EventScript_1E0707 getplayerxy VAR_TEMP_0, VAR_TEMP_1 - compare VAR_RUSTBORO_STATE, 6 + compare VAR_RUSTBORO_CITY_STATE, 6 goto_if_eq RustboroCity_EventScript_1E06EC end @@ -28,12 +28,12 @@ RustboroCity_EventScript_1E0707:: @ 81E0707 return RustboroCity_MapScript2_1E070B: @ 81E070B - map_script_2 VAR_RUSTBORO_STATE, 6, RustboroCity_EventScript_1E0715 + map_script_2 VAR_RUSTBORO_CITY_STATE, 6, RustboroCity_EventScript_1E0715 .2byte 0 RustboroCity_EventScript_1E0715:: @ 81E0715 lockall - setvar VAR_0x4063, 1 + setvar VAR_ROUTE104_STATE, 1 applymovement EVENT_OBJ_ID_PLAYER, RustboroCity_Movement_1E0850 waitmovement 0 playse SE_KAIDAN @@ -99,7 +99,7 @@ RustboroCity_EventScript_1E07BD:: @ 81E07BD playse SE_KAIDAN removeobject 15 setflag FLAG_HIDE_RUSTBORO_CITY_SCIENTIST - setvar VAR_RUSTBORO_STATE, 7 + setvar VAR_RUSTBORO_CITY_STATE, 7 clearflag FLAG_HIDE_MAP_NAME_POPUP releaseall end @@ -302,7 +302,7 @@ RustboroCity_EventScript_1E09CD:: @ 81E09CD setobjectxyperm 9, 30, 10 clearflag FLAG_HIDE_RUSTBORO_CITY_DEVON_EMPLOYEE_1 setflag FLAG_DEVON_GOODS_STOLEN - setvar VAR_RUSTBORO_STATE, 2 + setvar VAR_RUSTBORO_CITY_STATE, 2 setvar VAR_RUSTURF_TUNNEL_STATE, 2 setvar VAR_ROUTE116_STATE, 1 clearflag FLAG_HIDE_ROUTE_116_MR_BRINEY @@ -493,8 +493,8 @@ RustboroCity_EventScript_1E0B2E:: @ 81E0B2E compare VAR_TEMP_1, 3 call_if_eq RustboroCity_EventScript_1E0BF3 setflag FLAG_INTERACTED_WITH_DEVON_EMPLOYEE_GOODS_STOLEN - setvar VAR_RUSTBORO_STATE, 3 - moveobjectoffscreen 9 + setvar VAR_RUSTBORO_CITY_STATE, 3 + copyobjectxytoperm 9 msgbox RustboroCity_Text_1E183E, MSGBOX_DEFAULT releaseall end @@ -596,7 +596,7 @@ RustboroCity_EventScript_1E0C5B:: @ 81E0C5B closemessage setflag FLAG_RETURNED_DEVON_GOODS setflag FLAG_HIDE_RUSTBORO_CITY_DEVON_EMPLOYEE_1 - setvar VAR_RUSTBORO_STATE, 5 + setvar VAR_RUSTBORO_CITY_STATE, 5 delay 30 warp MAP_RUSTBORO_CITY_DEVON_CORP_3F, 255, 2, 2 waitstate @@ -840,8 +840,8 @@ RustboroCity_EventScript_1E100B:: @ 81E100B closemessage delay 30 setflag FLAG_ENABLE_RIVAL_MATCH_CALL - setvar VAR_RUSTBORO_STATE, 8 - setvar VAR_0x4063, 2 + setvar VAR_RUSTBORO_CITY_STATE, 8 + setvar VAR_ROUTE104_STATE, 2 setvar VAR_0x8008, 0 msgbox RustboroCity_Text_1E1AFA, MSGBOX_YESNO compare VAR_RESULT, 1 @@ -911,8 +911,8 @@ RustboroCity_EventScript_1E1114:: @ 81E1114 closemessage delay 30 setflag FLAG_ENABLE_RIVAL_MATCH_CALL - setvar VAR_RUSTBORO_STATE, 8 - setvar VAR_0x4063, 2 + setvar VAR_RUSTBORO_CITY_STATE, 8 + setvar VAR_ROUTE104_STATE, 2 msgbox RustboroCity_Text_1E1E34, MSGBOX_YESNO compare VAR_RESULT, 1 goto_if_eq RustboroCity_EventScript_1E1191 diff --git a/data/maps/RustboroCity_DevonCorp_2F/scripts.inc b/data/maps/RustboroCity_DevonCorp_2F/scripts.inc index 8549d1644..e5ac226c5 100644 --- a/data/maps/RustboroCity_DevonCorp_2F/scripts.inc +++ b/data/maps/RustboroCity_DevonCorp_2F/scripts.inc @@ -281,7 +281,7 @@ RustboroCity_DevonCorp_2F_EventScript_211BCF:: @ 8211BCF faceplayer compare VAR_FOSSIL_RESURRECTION_STATE, 1 call_if_eq RustboroCity_DevonCorp_2F_EventScript_211869 - compare VAR_RUSTBORO_STATE, 6 + compare VAR_RUSTBORO_CITY_STATE, 6 goto_if_ge RustboroCity_DevonCorp_2F_EventScript_211BF1 msgbox RustboroCity_DevonCorp_2F_Text_212338, MSGBOX_DEFAULT release diff --git a/data/maps/RustboroCity_DevonCorp_3F/scripts.inc b/data/maps/RustboroCity_DevonCorp_3F/scripts.inc index 6be85a0b0..6b83e195c 100644 --- a/data/maps/RustboroCity_DevonCorp_3F/scripts.inc +++ b/data/maps/RustboroCity_DevonCorp_3F/scripts.inc @@ -68,7 +68,7 @@ RustboroCity_DevonCorp_3F_EventScript_21246E:: @ 821246E setvar VAR_BRINEY_LOCATION, 1 clearflag FLAG_HIDE_RUSBORO_CITY_RIVAL setvar VAR_DEVON_CORP_3F_STATE, 1 - setvar VAR_RUSTBORO_STATE, 6 + setvar VAR_RUSTBORO_CITY_STATE, 6 releaseall end diff --git a/data/maps/RustboroCity_Gym/scripts.inc b/data/maps/RustboroCity_Gym/scripts.inc index aaa3b3f0b..04027dfa7 100644 --- a/data/maps/RustboroCity_Gym/scripts.inc +++ b/data/maps/RustboroCity_Gym/scripts.inc @@ -18,7 +18,7 @@ RustboroCity_Gym_EventScript_212F66:: @ 8212F66 msgbox RustboroCity_Gym_Text_213816, MSGBOX_DEFAULT setflag FLAG_DEFEATED_RUSTBORO_GYM setflag FLAG_BADGE01_GET - setvar VAR_RUSTBORO_STATE, 1 + setvar VAR_RUSTBORO_CITY_STATE, 1 addvar VAR_PETALBURG_GYM_STATE, 1 setvar VAR_0x8008, 1 call RustboroCity_Gym_EventScript_271F43 diff --git a/data/maps/RusturfTunnel/scripts.inc b/data/maps/RusturfTunnel/scripts.inc index e489580c9..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 @@ -345,7 +345,7 @@ RusturfTunnel_EventScript_22D0C2:: @ 822D0C2 removeobject 7 clearflag FLAG_DEVON_GOODS_STOLEN setflag FLAG_RECOVERED_DEVON_GOODS - setvar VAR_RUSTBORO_STATE, 4 + setvar VAR_RUSTBORO_CITY_STATE, 4 setvar VAR_BRINEY_HOUSE_STATE, 1 setflag FLAG_HIDE_ROUTE_116_MR_BRINEY release 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/SeafloorCavern_Room9/scripts.inc b/data/maps/SeafloorCavern_Room9/scripts.inc index b5e5034e7..17b1515c0 100644 --- a/data/maps/SeafloorCavern_Room9/scripts.inc +++ b/data/maps/SeafloorCavern_Room9/scripts.inc @@ -119,7 +119,7 @@ SeafloorCavern_Room9_EventScript_234DC9:: @ 8234DC9 waitmovement 0 msgbox SeafloorCavern_Room9_Text_235723, MSGBOX_DEFAULT setvar VAR_ROUTE128_STATE, 1 - setvar VAR_RAYQUAZA_STATE, 1 + setvar VAR_SOOTOPOLIS_CITY_STATE, 1 clearflag FLAG_HIDE_SOOTOPOLIS_CITY_STEVEN clearflag FLAG_HIDE_SOOTOPOLIS_CITY_ARCHIE clearflag FLAG_HIDE_SOOTOPOLIS_CITY_MAXIE diff --git a/data/maps/SkyPillar_Outside/scripts.inc b/data/maps/SkyPillar_Outside/scripts.inc index 9ff7dd01e..95f50ec02 100644 --- a/data/maps/SkyPillar_Outside/scripts.inc +++ b/data/maps/SkyPillar_Outside/scripts.inc @@ -5,9 +5,9 @@ SkyPillar_Outside_MapScripts:: @ 82392A8 .byte 0 SkyPillar_Outside_OnTransition: @ 82392B8 - compare VAR_RAYQUAZA_STATE, 3 + compare VAR_SOOTOPOLIS_CITY_STATE, 3 call_if_eq SkyPillar_Outside_EventScript_2392CF - compare VAR_RAYQUAZA_STATE, 4 + compare VAR_SOOTOPOLIS_CITY_STATE, 4 call_if_ge SkyPillar_Outside_EventScript_2392D3 end @@ -29,7 +29,7 @@ SkyPillar_Outside_EventScript_2392E7:: @ 82392E7 return SkyPillar_Outside_MapScript2_2392FA: @ 82392FA - map_script_2 VAR_RAYQUAZA_STATE, 3, SkyPillar_Outside_EventScript_239304 + map_script_2 VAR_SOOTOPOLIS_CITY_STATE, 3, SkyPillar_Outside_EventScript_239304 .2byte 0 SkyPillar_Outside_EventScript_239304:: @ 8239304 @@ -82,7 +82,7 @@ SkyPillar_Outside_EventScript_239304:: @ 8239304 playse SE_KAIDAN fadescreenswapbuffers 1 clearflag FLAG_HIDE_MAP_NAME_POPUP - setvar VAR_RAYQUAZA_STATE, 4 + setvar VAR_SOOTOPOLIS_CITY_STATE, 4 removeobject 1 clearflag FLAG_HIDE_SOOTOPOLIS_CITY_WALLACE fadescreenswapbuffers 0 diff --git a/data/maps/SkyPillar_Top/scripts.inc b/data/maps/SkyPillar_Top/scripts.inc index 6afbbd58c..0e9b4c3a1 100644 --- a/data/maps/SkyPillar_Top/scripts.inc +++ b/data/maps/SkyPillar_Top/scripts.inc @@ -130,7 +130,7 @@ SkyPillar_Top_EventScript_23979A:: @ 823979A applymovement EVENT_OBJ_ID_CAMERA, SkyPillar_Top_Movement_23985C waitmovement 0 special RemoveCameraObject - setvar VAR_RAYQUAZA_STATE, 5 + setvar VAR_SOOTOPOLIS_CITY_STATE, 5 setvar VAR_SKY_PILLAR_STATE, 1 setvar VAR_SKY_PILLAR_RAQUAZA_CRY_DONE, 1 releaseall diff --git a/data/maps/SlateportCity/scripts.inc b/data/maps/SlateportCity/scripts.inc index e2a3f5d93..a1ddb122d 100644 --- a/data/maps/SlateportCity/scripts.inc +++ b/data/maps/SlateportCity/scripts.inc @@ -6,7 +6,7 @@ SlateportCity_MapScripts:: @ 81DCC61 SlateportCity_OnTransition: @ 81DCC6C setvar VAR_SLATEPORT_MUSEUM_1F_STATE, 0 call SlateportCity_EventScript_1DCC8D - compare VAR_SLATEPORT_STATE, 1 + compare VAR_SLATEPORT_CITY_STATE, 1 call_if_eq SlateportCity_EventScript_1DCC99 compare VAR_SLATEPORT_OUTSIDE_MUSEUM_STATE, 1 call_if_eq SlateportCity_EventScript_1DCCE7 @@ -170,7 +170,7 @@ SlateportCity_EventScript_1DCE38:: @ 81DCE38 SlateportCity_EventScript_1DCE42:: @ 81DCE42 lock faceplayer - compare VAR_SLATEPORT_STATE, 1 + compare VAR_SLATEPORT_CITY_STATE, 1 call_if_eq SlateportCity_EventScript_1DCE59 msgbox SlateportCity_Text_1DD81A, MSGBOX_DEFAULT release @@ -184,7 +184,7 @@ SlateportCity_EventScript_1DCE59:: @ 81DCE59 SlateportCity_EventScript_1DCE63:: @ 81DCE63 lock faceplayer - compare VAR_SLATEPORT_STATE, 1 + compare VAR_SLATEPORT_CITY_STATE, 1 call_if_eq SlateportCity_EventScript_1DCE7A msgbox SlateportCity_Text_1DD8A6, MSGBOX_DEFAULT release @@ -198,7 +198,7 @@ SlateportCity_EventScript_1DCE7A:: @ 81DCE7A SlateportCity_EventScript_1DCE84:: @ 81DCE84 lock faceplayer - compare VAR_SLATEPORT_STATE, 1 + compare VAR_SLATEPORT_CITY_STATE, 1 call_if_eq SlateportCity_EventScript_1DCEA4 goto_if_set FLAG_RECEIVED_SECRET_POWER, SlateportCity_EventScript_1DCEAE msgbox SlateportCity_Text_1DD93D, MSGBOX_DEFAULT @@ -218,7 +218,7 @@ SlateportCity_EventScript_1DCEAE:: @ 81DCEAE SlateportCity_EventScript_1DCEB8:: @ 81DCEB8 lock faceplayer - compare VAR_SLATEPORT_STATE, 1 + compare VAR_SLATEPORT_CITY_STATE, 1 call_if_eq SlateportCity_EventScript_1DCECF msgbox SlateportCity_Text_1DDA34, MSGBOX_DEFAULT release @@ -230,7 +230,7 @@ SlateportCity_EventScript_1DCECF:: @ 81DCECF end SlateportCity_EventScript_1DCED9:: @ 81DCED9 - compare VAR_SLATEPORT_STATE, 1 + compare VAR_SLATEPORT_CITY_STATE, 1 goto_if_eq SlateportCity_EventScript_1DCEED msgbox SlateportCity_Text_1DDA9A, MSGBOX_NPC end @@ -242,7 +242,7 @@ SlateportCity_EventScript_1DCEED:: @ 81DCEED SlateportCity_EventScript_1DCEF6:: @ 81DCEF6 lock faceplayer - compare VAR_SLATEPORT_STATE, 1 + compare VAR_SLATEPORT_CITY_STATE, 1 call_if_eq SlateportCity_EventScript_1DCF0D msgbox SlateportCity_Text_1DDB21, MSGBOX_DEFAULT release @@ -323,7 +323,7 @@ SlateportCity_EventScript_1DCFB2:: @ 81DCFB2 SlateportCity_EventScript_1DCFBB:: @ 81DCFBB lock faceplayer - compare VAR_SLATEPORT_STATE, 1 + compare VAR_SLATEPORT_CITY_STATE, 1 call_if_eq SlateportCity_EventScript_1DCFD2 msgbox SlateportCity_Text_1DE10E, MSGBOX_DEFAULT release @@ -609,7 +609,7 @@ SlateportCity_EventScript_1DD1F8:: @ 81DD1F8 clearflag FLAG_HIDE_SLATEPORT_CITY_HARBOR_SUBMARINE_SHADOW clearflag FLAG_HIDE_SLATEPORT_CITY_HARBOR_AQUA_GRUNT clearflag FLAG_HIDE_SLATEPORT_CITY_HARBOR_ARCHIE - setvar VAR_SLATEPORT_STATE, 2 + setvar VAR_SLATEPORT_CITY_STATE, 2 warp MAP_SLATEPORT_CITY_HARBOR, 255, 11, 14 waitstate releaseall diff --git a/data/maps/SlateportCity_Harbor/scripts.inc b/data/maps/SlateportCity_Harbor/scripts.inc index 32fa9fa5d..c46923bb0 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 diff --git a/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc index 5a4947c8a..90d42ccae 100644 --- a/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc +++ b/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc @@ -40,7 +40,6 @@ SlateportCity_OceanicMuseum_1F_EventScript_20ADE8:: @ 820ADE8 playse SE_REGI takemoney 0x32, 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/SlateportCity_OceanicMuseum_2F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc index 96ae96685..d15a23558 100644 --- a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc +++ b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc @@ -81,7 +81,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_20BB00:: @ 820BB00 special HealPlayerParty removeobject 1 setflag FLAG_HIDE_ROUTE_110_TEAM_AQUA - compare VAR_0x40DA, 0 + compare VAR_REGISTER_BIRCH_STATE, 0 call_if_eq SlateportCity_OceanicMuseum_2F_EventScript_20BC8C setflag FLAG_DELIVERED_DEVON_GOODS clearflag FLAG_HIDE_ROUTE_116_DEVON_EMPLOYEE @@ -92,7 +92,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_20BB00:: @ 820BB00 end SlateportCity_OceanicMuseum_2F_EventScript_20BC8C:: @ 820BC8C - setvar VAR_0x40DA, 1 + setvar VAR_REGISTER_BIRCH_STATE, 1 return SlateportCity_OceanicMuseum_2F_EventScript_20BC92:: @ 820BC92 diff --git a/data/maps/SootopolisCity/scripts.inc b/data/maps/SootopolisCity/scripts.inc index ca562a87c..2f3ef0434 100644 --- a/data/maps/SootopolisCity/scripts.inc +++ b/data/maps/SootopolisCity/scripts.inc @@ -33,31 +33,31 @@ SootopolisCity_EventScript_1E56E5:: @ 81E56E5 SootopolisCity_OnTransition: @ 81E56EF setflag FLAG_VISITED_SOOTOPOLIS_CITY - compare VAR_RAYQUAZA_STATE, 1 + compare VAR_SOOTOPOLIS_CITY_STATE, 1 call_if_eq SootopolisCity_EventScript_1E5781 compare VAR_SKY_PILLAR_STATE, 1 call_if_eq SootopolisCity_EventScript_1E5781 call SootopolisCity_EventScript_1E5805 call SootopolisCity_EventScript_1E57B2 - compare VAR_RAYQUAZA_STATE, 1 + compare VAR_SOOTOPOLIS_CITY_STATE, 1 call_if_eq SootopolisCity_EventScript_1E5785 - compare VAR_RAYQUAZA_STATE, 2 + compare VAR_SOOTOPOLIS_CITY_STATE, 2 call_if_eq SootopolisCity_EventScript_1E5785 - compare VAR_RAYQUAZA_STATE, 3 + compare VAR_SOOTOPOLIS_CITY_STATE, 3 call_if_eq SootopolisCity_EventScript_1E5785 - compare VAR_RAYQUAZA_STATE, 4 + compare VAR_SOOTOPOLIS_CITY_STATE, 4 call_if_eq SootopolisCity_EventScript_1E5785 - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 call_if_eq SootopolisCity_EventScript_1E5785 - compare VAR_RAYQUAZA_STATE, 2 + compare VAR_SOOTOPOLIS_CITY_STATE, 2 call_if_eq SootopolisCity_EventScript_1E5842 - compare VAR_RAYQUAZA_STATE, 3 + compare VAR_SOOTOPOLIS_CITY_STATE, 3 call_if_eq SootopolisCity_EventScript_1E5842 - compare VAR_RAYQUAZA_STATE, 4 + compare VAR_SOOTOPOLIS_CITY_STATE, 4 call_if_eq SootopolisCity_EventScript_1E585B - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 call_if_eq SootopolisCity_EventScript_1E5871 - compare VAR_RAYQUAZA_STATE, 6 + compare VAR_SOOTOPOLIS_CITY_STATE, 6 call_if_eq SootopolisCity_EventScript_1E58D3 end @@ -77,17 +77,17 @@ SootopolisCity_EventScript_1E5785:: @ 81E5785 return SootopolisCity_EventScript_1E57B2:: @ 81E57B2 - compare VAR_RAYQUAZA_STATE, 0 + compare VAR_SOOTOPOLIS_CITY_STATE, 0 goto_if_eq SootopolisCity_EventScript_1E5800 - compare VAR_RAYQUAZA_STATE, 6 + compare VAR_SOOTOPOLIS_CITY_STATE, 6 goto_if_ge SootopolisCity_EventScript_1E5800 - compare VAR_RAYQUAZA_STATE, 1 + compare VAR_SOOTOPOLIS_CITY_STATE, 1 goto_if_eq SootopolisCity_EventScript_1E5801 - compare VAR_RAYQUAZA_STATE, 2 + compare VAR_SOOTOPOLIS_CITY_STATE, 2 goto_if_eq SootopolisCity_EventScript_1E5801 - compare VAR_RAYQUAZA_STATE, 3 + compare VAR_SOOTOPOLIS_CITY_STATE, 3 goto_if_eq SootopolisCity_EventScript_1E5801 - compare VAR_RAYQUAZA_STATE, 4 + compare VAR_SOOTOPOLIS_CITY_STATE, 4 goto_if_eq SootopolisCity_EventScript_1E5801 compare VAR_SKY_PILLAR_STATE, 1 goto_if_le SootopolisCity_EventScript_1E5801 @@ -101,11 +101,11 @@ SootopolisCity_EventScript_1E5801:: @ 81E5801 return SootopolisCity_EventScript_1E5805:: @ 81E5805 - compare VAR_RAYQUAZA_STATE, 0 + compare VAR_SOOTOPOLIS_CITY_STATE, 0 goto_if_eq SootopolisCity_EventScript_1E583D - compare VAR_RAYQUAZA_STATE, 6 + compare VAR_SOOTOPOLIS_CITY_STATE, 6 goto_if_ge SootopolisCity_EventScript_1E583D - compare VAR_RAYQUAZA_STATE, 1 + compare VAR_SOOTOPOLIS_CITY_STATE, 1 goto_if_eq SootopolisCity_EventScript_1E583E compare VAR_SKY_PILLAR_STATE, 1 goto_if_eq SootopolisCity_EventScript_1E583E @@ -140,11 +140,11 @@ SootopolisCity_EventScript_1E5871:: @ 81E5871 setobjectxyperm 7, 29, 33 setobjectxyperm 16, 33, 35 setobjectxyperm 17, 34, 35 - compare VAR_SOOTOPOLIS_STATE, 0 + compare VAR_SOOTOPOLIS_WALLACE_STATE, 0 call_if_eq SootopolisCity_EventScript_1E58AF - compare VAR_SOOTOPOLIS_STATE, 1 + compare VAR_SOOTOPOLIS_WALLACE_STATE, 1 call_if_eq SootopolisCity_EventScript_1E58BB - compare VAR_SOOTOPOLIS_STATE, 2 + compare VAR_SOOTOPOLIS_WALLACE_STATE, 2 call_if_eq SootopolisCity_EventScript_1E58C7 return @@ -168,7 +168,7 @@ SootopolisCity_EventScript_1E58D3:: @ 81E58D3 return SootopolisCity_MapScript2_1E58DB: @ 81E58DB - map_script_2 VAR_RAYQUAZA_STATE, 5, SootopolisCity_EventScript_1E58E5 + map_script_2 VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_1E58E5 .2byte 0 SootopolisCity_EventScript_1E58E5:: @ 81E58E5 @@ -192,7 +192,7 @@ SootopolisCity_MapScript1_1E590B: @ 81E590B end SootopolisCity_MapScript2_1E5914: @ 81E5914 - map_script_2 VAR_RAYQUAZA_STATE, 1, SootopolisCity_EventScript_1E5926 + map_script_2 VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_1E5926 map_script_2 VAR_SKY_PILLAR_STATE, 1, SootopolisCity_EventScript_1E5BFE .2byte 0 @@ -271,7 +271,7 @@ SootopolisCity_EventScript_1E5946:: @ 81E5946 applymovement EVENT_OBJ_ID_CAMERA, SootopolisCity_Movement_1E5A75 waitmovement 0 special RemoveCameraObject - setvar VAR_RAYQUAZA_STATE, 2 + setvar VAR_SOOTOPOLIS_CITY_STATE, 2 clearflag FLAG_HIDE_MAP_NAME_POPUP releaseall end @@ -371,7 +371,7 @@ SootopolisCity_EventScript_1E5A82:: @ 81E5A82 applymovement EVENT_OBJ_ID_CAMERA, SootopolisCity_Movement_1E5BAE waitmovement 0 special RemoveCameraObject - setvar VAR_RAYQUAZA_STATE, 2 + setvar VAR_SOOTOPOLIS_CITY_STATE, 2 clearflag FLAG_HIDE_MAP_NAME_POPUP releaseall end @@ -694,11 +694,11 @@ SootopolisCity_Movement_1E5E7F: @ 81E5E7F SootopolisCity_EventScript_1E5E8D:: @ 81E5E8D lock faceplayer - compare VAR_RAYQUAZA_STATE, 6 + compare VAR_SOOTOPOLIS_CITY_STATE, 6 goto_if_ge SootopolisCity_EventScript_1E5EC4 - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 goto_if_eq SootopolisCity_EventScript_1E5ECE - compare VAR_RAYQUAZA_STATE, 2 + compare VAR_SOOTOPOLIS_CITY_STATE, 2 goto_if_ge SootopolisCity_EventScript_1E5EBA msgbox SootopolisCity_Text_1E6D77, MSGBOX_DEFAULT release @@ -722,11 +722,11 @@ SootopolisCity_EventScript_1E5ECE:: @ 81E5ECE SootopolisCity_EventScript_1E5ED8:: @ 81E5ED8 lock faceplayer - compare VAR_RAYQUAZA_STATE, 1 + compare VAR_SOOTOPOLIS_CITY_STATE, 1 goto_if_le SootopolisCity_EventScript_1E5F1B - compare VAR_RAYQUAZA_STATE, 6 + compare VAR_SOOTOPOLIS_CITY_STATE, 6 goto_if_ge SootopolisCity_EventScript_1E5F1B - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 goto_if_eq SootopolisCity_EventScript_1E5F10 msgbox SootopolisCity_Text_1E6BFF, MSGBOX_DEFAULT closemessage @@ -794,7 +794,7 @@ SootopolisCity_EventScript_1E5FE2:: @ 81E5FE2 lockall applymovement 2, Common_Movement_FacePlayer waitmovement 0 - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 goto_if_eq SootopolisCity_EventScript_1E600D msgbox SootopolisCity_Text_1E71A1, MSGBOX_DEFAULT closemessage @@ -811,7 +811,7 @@ SootopolisCity_EventScript_1E600D:: @ 81E600D SootopolisCity_EventScript_1E6017:: @ 81E6017 lock faceplayer - compare VAR_RAYQUAZA_STATE, 6 + compare VAR_SOOTOPOLIS_CITY_STATE, 6 goto_if_ge SootopolisCity_EventScript_1E602E msgbox SootopolisCity_Text_1E6CCA, MSGBOX_DEFAULT release @@ -825,11 +825,11 @@ SootopolisCity_EventScript_1E602E:: @ 81E602E SootopolisCity_EventScript_1E6038:: @ 81E6038 lock faceplayer - compare VAR_RAYQUAZA_STATE, 6 + compare VAR_SOOTOPOLIS_CITY_STATE, 6 goto_if_ge SootopolisCity_EventScript_1E607A - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 goto_if_eq SootopolisCity_EventScript_1E6084 - compare VAR_RAYQUAZA_STATE, 2 + compare VAR_SOOTOPOLIS_CITY_STATE, 2 goto_if_ge SootopolisCity_EventScript_1E6065 msgbox SootopolisCity_Text_1E6F90, MSGBOX_DEFAULT release @@ -857,11 +857,11 @@ SootopolisCity_EventScript_1E608E:: @ 81E608E lockall applymovement 4, Common_Movement_FacePlayer waitmovement 0 - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 goto_if_eq SootopolisCity_EventScript_1E60D9 - compare VAR_RAYQUAZA_STATE, 6 + compare VAR_SOOTOPOLIS_CITY_STATE, 6 goto_if_ge SootopolisCity_EventScript_1E60CF - compare VAR_RAYQUAZA_STATE, 1 + compare VAR_SOOTOPOLIS_CITY_STATE, 1 goto_if_le SootopolisCity_EventScript_1E60CF msgbox SootopolisCity_Text_1E690B, MSGBOX_DEFAULT closemessage @@ -884,12 +884,12 @@ SootopolisCity_EventScript_1E60E3:: @ 81E60E3 lockall applymovement 5, Common_Movement_FacePlayer waitmovement 0 - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 goto_if_eq SootopolisCity_EventScript_1E612D goto_if_set FLAG_SYS_GAME_CLEAR, SootopolisCity_EventScript_1E6137 - compare VAR_RAYQUAZA_STATE, 6 + compare VAR_SOOTOPOLIS_CITY_STATE, 6 goto_if_ge SootopolisCity_EventScript_1E6141 - compare VAR_RAYQUAZA_STATE, 1 + compare VAR_SOOTOPOLIS_CITY_STATE, 1 goto_if_le SootopolisCity_EventScript_1E6141 msgbox SootopolisCity_Text_1E6692, MSGBOX_DEFAULT closemessage @@ -930,11 +930,11 @@ SootopolisCity_EventScript_1E6166:: @ 81E6166 applymovement 7, Common_Movement_FacePlayer waitmovement 0 call_if_unset FLAG_STEVEN_GUIDES_TO_CAVE_OF_ORIGIN, SootopolisCity_EventScript_1E61CC - compare VAR_RAYQUAZA_STATE, 2 + compare VAR_SOOTOPOLIS_CITY_STATE, 2 goto_if_eq SootopolisCity_EventScript_1E61AE - compare VAR_RAYQUAZA_STATE, 3 + compare VAR_SOOTOPOLIS_CITY_STATE, 3 goto_if_eq SootopolisCity_EventScript_1E61C2 - compare VAR_RAYQUAZA_STATE, 4 + compare VAR_SOOTOPOLIS_CITY_STATE, 4 goto_if_eq SootopolisCity_EventScript_1E61C2 goto_if_set FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE, SootopolisCity_EventScript_1E61B8 msgbox SootopolisCity_Text_1E78E5, MSGBOX_DEFAULT @@ -1263,7 +1263,7 @@ SootopolisCity_EventScript_1E635D:: @ 81E635D lockall applymovement 15, Common_Movement_FacePlayer waitmovement 0 - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 goto_if_eq SootopolisCity_EventScript_1E6388 msgbox SootopolisCity_Text_1E67DC, MSGBOX_DEFAULT closemessage @@ -1280,7 +1280,7 @@ SootopolisCity_EventScript_1E6388:: @ 81E6388 SootopolisCity_EventScript_1E6393:: @ 81E6393 lockall - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 goto_if_eq SootopolisCity_EventScript_1E63C7 msgbox SootopolisCity_Text_1E6936, MSGBOX_DEFAULT closemessage @@ -1304,7 +1304,7 @@ SootopolisCity_EventScript_1E63DB:: @ 81E63DB lockall applymovement 13, Common_Movement_FacePlayer waitmovement 0 - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 goto_if_eq SootopolisCity_EventScript_1E6406 msgbox SootopolisCity_Text_1E6C7C, MSGBOX_DEFAULT closemessage @@ -1323,7 +1323,7 @@ SootopolisCity_EventScript_1E6411:: @ 81E6411 lockall applymovement 12, Common_Movement_FacePlayer waitmovement 0 - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 goto_if_eq SootopolisCity_EventScript_1E643C msgbox SootopolisCity_Text_1E6A50, MSGBOX_DEFAULT closemessage @@ -1340,7 +1340,7 @@ SootopolisCity_EventScript_1E643C:: @ 81E643C SootopolisCity_EventScript_1E6446:: @ 81E6446 lock faceplayer - compare VAR_RAYQUAZA_STATE, 4 + compare VAR_SOOTOPOLIS_CITY_STATE, 4 goto_if_eq SootopolisCity_EventScript_1E64D8 goto_if_set FLAG_RECEIVED_HM07, SootopolisCity_EventScript_1E64E2 goto_if_set FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE, SootopolisCity_EventScript_1E646F @@ -1366,15 +1366,15 @@ SootopolisCity_EventScript_1E646F:: @ 81E646F SootopolisCity_EventScript_1E64B2:: @ 81E64B2 applymovement 18, SootopolisCity_Movement_1E64EC waitmovement 0 - moveobjectoffscreen 18 - setvar VAR_SOOTOPOLIS_STATE, 1 + copyobjectxytoperm 18 + setvar VAR_SOOTOPOLIS_WALLACE_STATE, 1 return SootopolisCity_EventScript_1E64C5:: @ 81E64C5 applymovement 18, SootopolisCity_Movement_1E64EF waitmovement 0 - moveobjectoffscreen 18 - setvar VAR_SOOTOPOLIS_STATE, 2 + copyobjectxytoperm 18 + setvar VAR_SOOTOPOLIS_WALLACE_STATE, 2 return SootopolisCity_EventScript_1E64D8:: @ 81E64D8 @@ -1399,7 +1399,7 @@ SootopolisCity_Movement_1E64EF: @ 81E64EF SootopolisCity_EventScript_1E64F2:: @ 81E64F2 lockall - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 goto_if_eq SootopolisCity_EventScript_1E6509 msgbox SootopolisCity_Text_1E72DB, MSGBOX_DEFAULT closemessage @@ -1415,7 +1415,7 @@ SootopolisCity_EventScript_1E6509:: @ 81E6509 SootopolisCity_EventScript_1E651F:: @ 81E651F lockall - compare VAR_RAYQUAZA_STATE, 5 + compare VAR_SOOTOPOLIS_CITY_STATE, 5 goto_if_eq SootopolisCity_EventScript_1E6536 msgbox SootopolisCity_Text_1E7460, MSGBOX_DEFAULT closemessage diff --git a/data/maps/SootopolisCity_Gym_1F/scripts.inc b/data/maps/SootopolisCity_Gym_1F/scripts.inc index 2991cc482..8db708e9c 100644 --- a/data/maps/SootopolisCity_Gym_1F/scripts.inc +++ b/data/maps/SootopolisCity_Gym_1F/scripts.inc @@ -106,7 +106,7 @@ SootopolisCity_Gym_1F_EventScript_224F82:: @ 8224F82 setflag FLAG_HIDE_SOOTOPOLIS_CITY_RESIDENTS setflag FLAG_HIDE_SOOTOPOLIS_CITY_STEVEN setflag FLAG_HIDE_SOOTOPOLIS_CITY_WALLACE - setvar VAR_RAYQUAZA_STATE, 6 + setvar VAR_SOOTOPOLIS_CITY_STATE, 6 clearflag FLAG_HIDE_SOOTOPOLIS_CITY_MAN_1 setvar VAR_0x8008, 8 call SootopolisCity_Gym_1F_EventScript_271F43 @@ -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_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/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/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/pokemon_jump.s b/data/pokemon_jump.s deleted file mode 100755 index b10c37600..000000000 --- a/data/pokemon_jump.s +++ /dev/null @@ -1,573 +0,0 @@ -#include "constants/species.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gUnknown_082FB63C:: @ 82FB63C - .2byte 0x001a, 0x001f, 0x0024, 0x0029, 0x002e, 0x0033, 0x0038, 0x003d - - .align 2 -gUnknown_082FB64C:: @ 82FB64C - .2byte 0x0000, 0x0001, 0x0001, 0x0002 - - .align 2 -gUnknown_082FB654:: @ 82FB654 - .2byte 0x005f, 0x0066, 0x00e4, 0x0105 - - .align 2 -gUnknown_082FB65C:: @ 82FB65C - .byte 0xfd, 0xfa, 0xf8, 0xf6, 0xf3, 0xf1, 0xef, 0xed - .byte 0xeb, 0xe9, 0xe7, 0xe5, 0xe4, 0xe3, 0xe2, 0xe2 - .byte 0xe2, 0xe4, 0xe5, 0xe6, 0xe7, 0xe9, 0xea, 0xec - .byte 0xee, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc - .byte 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .byte 0xfd, 0xfa, 0xf7, 0xf5, 0xf2, 0xf0, 0xee, 0xec - .byte 0xea, 0xe8, 0xe6, 0xe4, 0xe3, 0xe2, 0xe2, 0xe4 - .byte 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf5 - .byte 0xf7, 0xfa, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .byte 0xfd, 0xfa, 0xf7, 0xf5, 0xf3, 0xf1, 0xef, 0xed - .byte 0xeb, 0xe9, 0xe7, 0xe5, 0xe4, 0xe3, 0xe2, 0xe2 - .byte 0xe2, 0xe2, 0xe3, 0xe3, 0xe4, 0xe4, 0xe5, 0xe5 - .byte 0xe6, 0xe7, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2 - .byte 0xf4, 0xf5, 0xf7, 0xfa, 0xfc, 0xff, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .align 2 -gUnknown_082FB6EC:: @ 82FB6EC - .4byte 0x00000000, 0x00000000, 0x00000032, 0x00000064 - .4byte 0x000000c8, 0x000001f4 - - .align 2 -gUnknown_082FB704:: @ 82FB704 - .2byte 0x008a, 0x008d, 0x008e, 0x008f, 0x0090, 0x0091, 0x0092, 0x0093 - - .align 2 -gUnknown_082FB714:: @ 82FB714 - .4byte 0x00001388, 0x00000001, 0x00001f40, 0x00000002 - .4byte 0x00002ee0, 0x00000003, 0x00003e80, 0x00000004 - .4byte 0x00004e20, 0x00000005 - - .align 2 -gPkmnJumpPal1:: @ 82FB73C - .incbin "graphics/link_games/pkmnjump_pal1.gbapal" - - .align 2 -gPkmnJumpPal2:: @ 82FB75C - .incbin "graphics/link_games/pkmnjump_pal2.gbapal" - - .align 2 -gPkmnJumpRopeGfx1:: @ 82FB77C - .incbin "graphics/link_games/pkmnjump_rope1.4bpp.lz" - - .align 2 -gPkmnJumpRopeGfx2:: @ 82FB89C - .incbin "graphics/link_games/pkmnjump_rope2.4bpp.lz" - - .align 2 -gPkmnJumpRopeGfx3:: @ 82FBA70 - .incbin "graphics/link_games/pkmnjump_rope3.4bpp.lz" - - .align 2 -gPkmnJumpRopeGfx4:: @ 82FBBA0 - .incbin "graphics/link_games/pkmnjump_rope4.4bpp.lz" - - .align 2 -gPkmnJumpStarGfx:: @ 82FBC9C - .incbin "graphics/link_games/pkmnjump_star.4bpp.lz" - - .align 2 -gUnknown_082FBE08:: @ 82FBE08 - obj_tiles gPkmnJumpRopeGfx1, 0x0600, 0x0005 - - .align 2 - obj_tiles gPkmnJumpRopeGfx2, 0x0c00, 0x0006 - - .align 2 - obj_tiles gPkmnJumpRopeGfx3, 0x0600, 0x0007 - - .align 2 - obj_tiles gPkmnJumpRopeGfx4, 0x0600, 0x0008 - - .align 2 - obj_tiles gPkmnJumpStarGfx, 0x0200, 0x000a - - .align 2 -gUnknown_082FBE30:: @ 82FBE30 - obj_pal gPkmnJumpPal1, 0x0005 - - .align 2 - obj_pal gPkmnJumpPal2, 0x0006 - - .align 2 -gUnknown_082FBE40:: @ 82FBE40 - spr_template 0x0000, 0x0000, gUnknown_082FBEC8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_082FBE58:: @ 82FBE58 - .2byte 0x0060, 0x0060, 0x0060, 0x0072, 0x0078, 0x0078, 0x0078, 0x0072 - .2byte 0x0060, 0x0060, 0x0046, 0x0050, 0x0060, 0x0072, 0x0078, 0x0080 - .2byte 0x0078, 0x0072, 0x0060, 0x0050, 0x0032, 0x0048, 0x0060, 0x0072 - .2byte 0x0080, 0x0088, 0x0080, 0x0072, 0x0060, 0x0048, 0x002a, 0x0048 - .2byte 0x0060, 0x0072, 0x0080, 0x0088, 0x0080, 0x0072, 0x0060, 0x0048 - -gUnknown_082FBEA8:: @ 82FBEA8 - .2byte 0x0010, 0x0028, 0x0048, 0x0068, 0x0088, 0x00a8, 0x00c8, 0x00e0 - - .align 2 -gUnknown_082FBEB8:: @ 82FBEB8 - .4byte gUnknown_082FBF78 - .4byte gUnknown_082FBF90 - .4byte gUnknown_082FBFA8 - .4byte gUnknown_082FBFC0 - - .align 2 -gUnknown_082FBEC8:: @ 82FBED0 - .byte 0x00, 0x00, 0x00, 0xc0, 0x00, 0x08, 0x00, 0x00 - - .align 2 -gUnknown_082FBED0:: @ 82FBED0 - .byte 0x00, 0x80, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00 - - .align 2 -gUnknown_082FBED8:: @ 82FBED8 - .byte 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00 - - .align 2 -gUnknown_082FBEE0:: @ 82FBEE0 - .byte 0x00, 0x40, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00 - - .align 2 -gUnknown_082FBEE8:: @ 82FBEE8 - .2byte 0x0000, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBEF0:: @ 82FBEF0 - .2byte 0x0008, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBEF8:: @ 82FBEF8 - .2byte 0x0010, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBF00:: @ 82FBF00 - .2byte 0x0018, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBF08:: @ 82FBF08 - .2byte 0x0020, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBF10:: @ 82FBF10 - .2byte 0x0028, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBF18:: @ 82FBF18 - .2byte 0x0000, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBF20:: @ 82FBF20 - .2byte 0x0010, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBF28:: @ 82FBF28 - .2byte 0x0020, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBF30:: @ 82FBF30 - .2byte 0x0030, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBF38:: @ 82FBF38 - .2byte 0x0040, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBF40:: @ 82FBF40 - .2byte 0x0050, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBF48:: @ 82FBF48 - .4byte gUnknown_082FBEE8 - .4byte gUnknown_082FBEF0 - .4byte gUnknown_082FBEF8 - .4byte gUnknown_082FBF00 - .4byte gUnknown_082FBF08 - .4byte gUnknown_082FBF10 - - .align 2 -gUnknown_082FBF60:: @ 82FBF60 - .4byte gUnknown_082FBF18 - .4byte gUnknown_082FBF20 - .4byte gUnknown_082FBF28 - .4byte gUnknown_082FBF30 - .4byte gUnknown_082FBF38 - .4byte gUnknown_082FBF40 - - .align 2 -gUnknown_082FBF78:: @ 82FBF78 - spr_template 0x0005, 0x0005, gUnknown_082FBED0, gUnknown_082FBF48, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gUnknown_082FBF90:: @ 82FBF90 - spr_template 0x0006, 0x0005, gUnknown_082FBED8, gUnknown_082FBF60, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gUnknown_082FBFA8:: @ 82FBFA8 - spr_template 0x0007, 0x0005, gUnknown_082FBEE0, gUnknown_082FBF48, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gUnknown_082FBFC0:: @ 82FBFC0 - spr_template 0x0008, 0x0005, gUnknown_082FBEE0, gUnknown_082FBF48, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gUnknown_082FBFD8:: @ 82FBFD8 - .byte 0x00, 0x00, 0x00, 0x40, 0x00, 0x04, 0x00, 0x00 - - .align 2 -gUnknown_082FBFE0:: @ 82FBFE0 - .2byte 0x0000, 0x0000 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FBFE8:: @ 82FBFE8 - .2byte 0x0000, 0x0004 - .2byte 0x0004, 0x0004 - .2byte 0x0008, 0x0004 - .2byte 0x000c, 0x0004 - .2byte 0xfffd, 0x0001 - .2byte 0x0000, 0x0004 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FC004:: @ 82FC004 - .4byte gUnknown_082FBFE0 - .4byte gUnknown_082FBFE8 - - .align 2 -gUnknown_082FC00C:: @ 82FC00C - spr_template 0x000a, 0x0005, gUnknown_082FBFD8, gUnknown_082FC004, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gPkmnJumpPal3:: @ 82FC024 - .incbin "graphics/link_games/pkmnjump_pal3.gbapal" - - .align 2 -gPkmnJumpBgPal:: @ 82FC044 - .incbin "graphics/link_games/pkmnjump_bg.gbapal" - - .align 2 -gPkmnJumpBgGfx:: @ 82FC064 - .incbin "graphics/link_games/pkmnjump_bg.4bpp.lz" - - .align 2 -gPkmnJumpBgTilemap:: @ 82FC290 - .incbin "graphics/link_games/pkmnjump_bg.bin.lz" - - .align 2 -gPkmnJumpVenusaurPal:: @ 82FC440 - .incbin "graphics/link_games/pkmnjump_venusaur.gbapal" - - .align 2 -gPkmnJumpVenusaurGfx:: @ 82FC460 - .incbin "graphics/link_games/pkmnjump_venusaur.4bpp.lz" - - .align 2 -gPkmnJumpVenusaurTilemap:: @ 82FCDB0 - .incbin "graphics/link_games/pkmnjump_venusaur.bin.lz" - - .align 2 -gPkmnJumpResultsPal:: @ 82FD168 - .incbin "graphics/link_games/pkmnjump_results.gbapal" - - .align 2 -gPkmnJumpResultsGfx:: @ 82FD188 - .incbin "graphics/link_games/pkmnjump_results.4bpp.lz" - - .align 2 -gPkmnJumpResultsTilemap:: @ 82FDC38 - .incbin "graphics/link_games/pkmnjump_results.bin.lz" - - .align 2 -gUnknown_082FE164:: @ 82FE164 struct BgTemplate - .4byte 0x000001b0, 0x000025e6, 0x000016c9, 0x000031df - - .align 2 -gUnknown_082FE174:: @ 82FE174 - window_template 0x00, 0x13, 0x00, 0x06, 0x02, 0x02, 0x0013 - window_template 0x00, 0x08, 0x00, 0x06, 0x02, 0x02, 0x001f - null_window_template - - .align 2 -gUnknown_082FE18C:: @ 82FE18C - .4byte 0x00000000, sub_802D150 - .4byte 0x00000001, sub_802D2E4 - .4byte 0x00000002, sub_802D350 - .4byte 0x00000003, sub_802D3BC - .4byte 0x00000004, sub_802D448 - .4byte 0x00000005, sub_802D4F4 - .4byte 0x00000006, sub_802D598 - .4byte 0x00000007, sub_802D5E4 - .4byte 0x00000009, sub_802D72C - .4byte 0x00000008, sub_802D688 - - .align 2 -gUnknown_082FE1DC:: @ 82FE1DC - .byte 0x00, 0x02, 0x03 - -gUnknown_082FE1DF:: @ 82FE1DF - .byte 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00 - .byte 0x00, 0x02, 0x00, 0x00, 0x00 - - .align 2 -gUnknown_082FE1EC:: @ 82FE1EC - obj_tiles gUnknown_082FF1F8, 0x0000, 0x0320 - - .align 2 -gUnknown_082FE1F4:: @ 82FE1F4 - obj_pal gUnknown_082FF1D8, 0x0320 - - .align 2 -gUnknown_082FE1FC:: @ 82FE1FC - .2byte 0x0006, 0x0008, 0x0010, 0x0008 - - .align 2 -gUnknown_082FE204:: @ 82FE204 - .2byte 0x0006, 0x0008, 0x000b, 0x0006, 0x0010, 0x0008 - - .align 2 -gUnknown_082FE210:: @ 82FE210 - .2byte 0x0002, 0x0006, 0x0006, 0x0008, 0x0010, 0x0008, 0x0014, 0x0006 - - .align 2 -gUnknown_082FE220:: @ 82FE220 - .2byte 0x0002, 0x0006, 0x0006, 0x0008, 0x000b, 0x0006 - .2byte 0x0010, 0x0008, 0x0014, 0x0006 - - .align 2 -gUnknown_082FE234:: @ 82FE234 - .4byte gUnknown_082FE1FC - .4byte gUnknown_082FE204 - .4byte gUnknown_082FE210 - .4byte gUnknown_082FE220 - - .align 2 -gUnknown_082FE244:: @ 82FE244 - .2byte 0x0058, 0x0098 - -gUnknown_082FE248:: @ 82FE248 - .2byte 0x0058, 0x0078, 0x0098 - -gUnknown_082FE24E:: @ 82FE24E - .2byte 0x0038, 0x0058, 0x0098, 0x00b8 - -gUnknown_082FE256:: @ 82FE256 - .2byte 0x0038, 0x0058, 0x0078, 0x0098, 0x00b8 - - .align 2 -gUnknown_082FE260:: @ 82FE260 - .4byte gUnknown_082FE244 - .4byte gUnknown_082FE248 - .4byte gUnknown_082FE24E - .4byte gUnknown_082FE256 - - .align 2 -gUnknown_082FE270:: @ 82FE270 - .4byte 0x1c010100, 0x00010f09 - - .align 2 -gUnknown_082FE278:: @ 82FE278 - .4byte gText_JumpsInARow - .4byte gText_BestScore2 - .4byte gText_ExcellentsInARow - - .align 2 -gPkmnJump321StartPal1:: @ 82FE284 - .incbin "graphics/link_games/pkmnjump_321start1.gbapal" - - .align 2 -gPkmnJump321StartGfx1:: @ 82FE2A4 - .incbin "graphics/link_games/pkmnjump_321start1.4bpp.lz" - - .align 2 -gUnknown_082FE6C8:: @ 82FE6C8 - obj_tiles gPkmnJump321StartGfx1, 0x0c00, 0x2000 - null_obj_tiles - - .align 2 -gUnknown_082FE6D8:: @ 82FE6D8 - obj_pal gPkmnJump321StartPal1, 0x2000 - null_obj_pal - - .align 2 -gUnknown_082FE6E8:: @ 82FE6E8 - .2byte 0x0000, 0x0000 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FE6F0:: @ 82FE6F0 - .2byte 0x0010, 0x0000 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FE6F8:: @ 82FE6F8 - .2byte 0x0020, 0x0000 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FE700:: @ 82FE700 - .2byte 0x0040, 0x0000 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FE708:: @ 82FE708 - .2byte 0x0030, 0x0000 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FE710:: @ 82FE710 - .2byte 0x0050, 0x0000 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FE718:: @ 82FE718 - .4byte gUnknown_082FE6E8 - .4byte gUnknown_082FE6F0 - .4byte gUnknown_082FE6F8 - .4byte gUnknown_082FE700 - .4byte gUnknown_082FE708 - .4byte gUnknown_082FE710 - - .align 2 -gUnknown_082FE730:: @ 82FE730 - spr_template 0x2000, 0x2000, gUnknown_08524914, gUnknown_082FE718, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gUnknown_082FE748:: @ 82FE748 - .4byte sub_802E83C - .4byte sub_802E8C8 - .4byte sub_802EA50 - .4byte sub_802EAB0 - - .align 2 -gPkmnJump321StartPal2:: @ 82FE758 - .incbin "graphics/link_games/pkmnjump_321start2.gbapal" - - .align 2 -gPkmnJump321StartGfx2:: @ 82FE778 - .incbin "graphics/link_games/pkmnjump_321start2.4bpp.lz" - - .align 2 -gUnknown_082FEBCC:: @ 82FEBCC - obj_tiles gPkmnJump321StartGfx2, 0x0e00, 0x0000 - - .align 2 -gUnknown_082FEBD4:: @ 82FEBD4 - obj_pal gPkmnJump321StartPal2, 0x0000 - - .align 2 -gUnknown_082FEBDC:: @ 82FEBDC - .byte 0x00, 0x03, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00 - - .align 2 -gUnknown_082FEBE4:: @ 82FEBE4 - .byte 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00 - - .align 2 -gUnknown_082FEBEC:: @ 82FEBEC - .2byte 0x0000, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FEBF4:: @ 82FEBF4 - .2byte 0x0010, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FEBFC:: @ 82FEBFC - .2byte 0x0020, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FEC04:: @ 82FEC04 - .4byte gUnknown_082FEBEC - .4byte gUnknown_082FEBF4 - .4byte gUnknown_082FEBFC - - .align 2 -gUnknown_082FEC10:: @ 82FEC10 - .2byte 0x0030, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FEC18:: @ 82FEC18 - .2byte 0x0050, 0x0001 - .2byte 0xffff, 0x0000 - - .align 2 -gUnknown_082FEC20:: @ 82FEC20 - .4byte gUnknown_082FEC10 - .4byte gUnknown_082FEC18 - - .align 2 -gUnknown_082FEC28:: @ 82FEC28 - .2byte 0x0100, 0x0100 - .2byte 0x0000, 0x0000 - .2byte 0x7fff, 0x0000 - .2byte 0x0000, 0x0000 - - .align 2 -gUnknown_082FEC38:: @ 82FEC38 - .2byte 0x0100, 0x0100 - .2byte 0x0000, 0x0000 - .2byte 0x0010, 0xfff0 - .2byte 0x0800, 0x0000 - .2byte 0x7fff, 0x0000 - .2byte 0x0000, 0x0000 - - .align 2 -gUnknown_082FEC50:: @ 82FEC50 - .2byte 0xffee, 0x0012 - .2byte 0x0800, 0x0000 - .2byte 0x7fff, 0x0000 - .2byte 0x0000, 0x0000 - - .align 2 -gUnknown_082FEC60:: @ 82FEC60 - .2byte 0x0006, 0xfffa - .2byte 0x0800, 0x0000 - .2byte 0xfffc, 0x0004 - .2byte 0x0800, 0x0000 - .2byte 0x0100, 0x0100 - .2byte 0x0000, 0x0000 - .2byte 0x7fff, 0x0000 - .2byte 0x0000, 0x0000 - - .align 2 -gUnknown_082FEC80:: @ 82FEC80 - .4byte gUnknown_082FEC28 - .4byte gUnknown_082FEC38 - .4byte gUnknown_082FEC50 - .4byte gUnknown_082FEC60 - -gUnknown_082FEC90:: @ 82FEC90 - spr_template 0x0000, 0x0000, gUnknown_082FEBDC, gUnknown_082FEC04, NULL, gUnknown_082FEC80, SpriteCallbackDummy - -gUnknown_082FECA8:: @ 82FECA8 - spr_template 0x0000, 0x0000, gUnknown_082FEBE4, gUnknown_082FEC20, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy diff --git a/data/pokenav.s b/data/pokenav.s deleted file mode 100644 index 2ed2cf9a0..000000000 --- a/data/pokenav.s +++ /dev/null @@ -1,1658 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -// pokenav_unk_2.s -gUnknown_0861FC78:: @ 861FC78 - .incbin "graphics/pokenav/bg.gbapal" - -gUnknown_0861FC98:: @ 861FC98 - .incbin "graphics/pokenav/bg.4bpp.lz" - -gUnknown_0861FCAC:: @ 861FCAC - .incbin "graphics/pokenav/bg.bin.lz" - -gUnknown_0861FD4C:: @ 861FD4C - .incbin "graphics/pokenav/outline.gbapal" - -gUnknown_0861FD6C:: @ 861FD6C - .incbin "graphics/pokenav/outline.4bpp.lz" - -gUnknown_0861FFF4:: @ 861FFF4 - .incbin "graphics/pokenav/outline_map.bin.lz" - -gUnknown_08620104:: @ 8620104 - .incbin "graphics/pokenav/blue_light.gbapal" - -gUnknown_08620124:: @ 8620124 - .incbin "graphics/pokenav/blue_light.4bpp.lz" - -gUnknown_08620194:: @ 8620194 - .byte 0xF5, 0x10, 0, 0, 0x7A, 0x21, 0, 0, 0xFF, 0x31, 0, 0 - -gUnknown_086201A0:: @ 86201A0 - .4byte NULL - .4byte sub_81C9C6C - .4byte sub_81C9CA8 - .4byte sub_81C9D44 - .4byte sub_81C9DD8 - .4byte sub_81C9E58 - .4byte sub_81C9EC8 - .4byte sub_81C9EF8 - .4byte sub_81C9F28 - -gUnknown_086201C4:: @ 86201C4 - .4byte gPokenavOptions_Gfx - .byte 0, 0x34, 3, 0 - .4byte gUnknown_08620124 - .byte 0, 1, 1, 0 - -gUnknown_086201D4:: @ 86201D4 - .4byte gPokenavOptions_Pal + 0x0, 4 - .4byte gPokenavOptions_Pal + 0x20, 5 - .4byte gPokenavOptions_Pal + 0x40, 6 - .4byte gPokenavOptions_Pal + 0x60, 7 - .4byte gPokenavOptions_Pal + 0x80, 8 - .4byte gUnknown_08620104, 3 - .4byte 0, 0 - -gUnknown_0862020C:: @ 862020C - .2byte 0, 0 - -gUnknown_08620210:: @ 8620210 - .2byte 0x20, 1 - -gUnknown_08620214:: @ 8620214 - .2byte 0x40, 4 - -gUnknown_08620218:: @ 8620218 - .2byte 0x60, 2 - -gUnknown_0862021C:: @ 862021C - .2byte 0x80, 3 - -gUnknown_08620220:: @ 8620220 - .2byte 0xA0, 1 - -gUnknown_08620224:: @ 8620224 - .2byte 0xC0, 1 - -gUnknown_08620228:: @ 8620228 - .2byte 0xE0, 4 - -gUnknown_0862022C:: @ 862022C - .2byte 0x100, 1 - -gUnknown_08620230:: @ 8620230 - .2byte 0x120, 2 - -gUnknown_08620234:: @ 8620234 - .2byte 0x140, 0 - -gUnknown_08620238:: @ 8620238 - .2byte 0x160, 0 - -gUnknown_0862023C:: @ 862023C - .2byte 0x180, 3 - -gUnknown_08620240:: @ 8620240 - .2byte 0x2A, 0x14 - -gUnknown_08620244:: @ 8620244 - .4byte gUnknown_0862020C - .4byte gUnknown_08620210 - .4byte gUnknown_0862021C - .4byte NULL - .4byte NULL - .4byte NULL - .2byte 0x2A, 0x14 - .4byte gUnknown_0862020C - .4byte gUnknown_08620210 - .4byte gUnknown_08620214 - .4byte gUnknown_0862021C - .4byte NULL - .4byte NULL - .2byte 0x2A, 0x14 - .4byte gUnknown_0862020C - .4byte gUnknown_08620210 - .4byte gUnknown_08620214 - .4byte gUnknown_08620218 - .4byte gUnknown_0862021C - .4byte NULL - .2byte 0x38, 0x14 - .4byte gUnknown_08620220 - .4byte gUnknown_08620224 - .4byte gUnknown_0862023C - .4byte NULL - .4byte NULL - .4byte NULL - .2byte 0x28, 0x10 - .4byte gUnknown_08620228 - .4byte gUnknown_0862022C - .4byte gUnknown_08620230 - .4byte gUnknown_08620234 - .4byte gUnknown_08620238 - .4byte gUnknown_0862023C - -gUnknown_086202CC:: @ 86202CC - window_template 1, 3, 17, 0x18, 2, 1, 8 - -gUnknown_086202D4:: @ 86202D4 - .4byte gUnknown_085EBCC5 - .4byte gUnknown_085EBCE8 - .4byte gUnknown_085EBD01 - .4byte gUnknown_085EBD1C - .4byte gUnknown_085EBD34 - .4byte gUnknown_085EBD83 - .4byte gUnknown_085EBDA2 - .4byte gUnknown_085EBDBF - .4byte gUnknown_085EBDDB - .4byte gUnknown_085EBDEE - .4byte gUnknown_085EBE06 - .4byte gUnknown_085EBE19 - .4byte gUnknown_085EBE2D - .4byte gUnknown_085EBE41 - -gUnknown_0862030C:: @ 862030C - .byte 6, 8, 7 - -gUnknown_0862030F:: @ 862030F - .byte 6, 8, 7, 0, 0 - -gUnknown_08620314:: @ 8620314 - .byte 0, 0x40, 0, 0x80, 0, 8, 0, 0 - -gUnknown_0862031C:: @ 862031C - obj_rot_scal_anim_frame 0x100, 0x100, 0, 0 - obj_rot_scal_anim_end - -gUnknown_0862032C:: @ 862032C - obj_rot_scal_anim_frame 0x100, 0x100, 0, 0 - obj_rot_scal_anim_frame 0x10, 0x10, 0, 0x12 - obj_rot_scal_anim_end - -gUnknown_08620344:: @ 8620344 - .4byte gUnknown_0862031C - .4byte gUnknown_0862032C - -gUnknown_0862034C:: @ 862034C - spr_template 3, 4, gUnknown_08620314, gDummySpriteAnimTable, NULL, gUnknown_08620344, SpriteCallbackDummy - -gUnknown_08620364:: @ 8620364 - .2byte 0x4000 - .2byte 0x8000 - .2byte 0x800 - .2byte 0 - -gUnknown_0862036C:: @ 862036C - spr_template 1, 3, gUnknown_08620364, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_08620384:: @ 8620384 - .4byte 0x4000040 - .4byte 0xa2600001 - .byte 1, 0, 0, 0 - -// pokenav_unk_3.s -gUnknown_08620390:: @ 8620390 - .string "Becalm fighting emotions.$" - -gUnknown_086203AA:: @ 86203AA - .string "Fragrant GRASS POKéMON.$" - -gUnknown_086203C2:: @ 86203C2 - .string "Soothing aromas make the$" - -gUnknown_086203DB:: @ 86203DB - .string "body and mind healthy.$" - -gUnknown_086203F2:: @ 86203F2 - .string "I'm not very good at this.$" - -gUnknown_0862040D:: @ 862040D - .string "Ruin-exploration partners.$" - -gUnknown_08620428:: @ 8620428 - .string "I am searching for undersea$" - -gUnknown_08620444:: @ 8620444 - .string "ruins and relics.$" - -gUnknown_08620456:: @ 8620456 - .string "Overwhelm with power!$" - -gUnknown_0862046C:: @ 862046C - .string "Craggy ROCK POKéMON.$" - -gUnknown_08620481:: @ 8620481 - .string "In search of ancient lore,$" - -gUnknown_0862049C:: @ 862049C - .string "I travel the world.$" - -gUnknown_086204B0:: @ 86204B0 - .string "I'm going to try hard!$" - -gUnknown_086204C7:: @ 86204C7 - .string "Good swimmer POKéMON.$" - -gUnknown_086204DD:: @ 86204DD - .string "I wish I could swim without$" - -gUnknown_086204F9:: @ 86204F9 - .string "using an inner tube.$" - -gUnknown_0862050E:: @ 862050E - .string "I don't know. I'll try hard.$" - -gUnknown_0862052B:: @ 862052B - .string "WATER POKéMON are buddies.$" - -gUnknown_08620546:: @ 8620546 - .string "It's not like I can't swim.$" - -gUnknown_08620562:: @ 8620562 - .string "I just like my inner tube.$" - -gUnknown_0862057D:: @ 862057D - .string "We split our duties.$" - -gUnknown_08620592:: @ 8620592 - .string "We like friendly POKéMON.$" - -gUnknown_086205AC:: @ 86205AC - .string "We enjoy POKéMON together$" - -gUnknown_086205C6:: @ 86205C6 - .string "as sister and brother.$" - -gUnknown_086205DD:: @ 86205DD - .string "I finish with power moves!$" - -gUnknown_086205F8:: @ 86205F8 - .string "A mix of different types.$" - -gUnknown_08620612:: @ 8620612 - .string "I aim to become the ultimate$" - -gUnknown_0862062F:: @ 862062F - .string "TRAINER!$" - -gUnknown_08620638:: @ 8620638 - .string "Exploit the foe's weakness.$" - -gUnknown_08620654:: @ 8620654 - .string "Balance is crucial.$" - -gUnknown_08620668:: @ 8620668 - .string "My goal is to become the$" - -gUnknown_08620681:: @ 8620681 - .string "POKéMON CHAMPION.$" - -gUnknown_08620693:: @ 8620693 - .string "Upset the opponent.$" - -gUnknown_086206A7:: @ 86206A7 - .string "Type doesn't matter.$" - -gUnknown_086206BC:: @ 86206BC - .string "I'm a top student at the$" - -gUnknown_086206D5:: @ 86206D5 - .string "TRAINER'S SCHOOL.$" - -gUnknown_086206E7:: @ 86206E7 - .string "Slow, steady suffering.$" - -gUnknown_086206FF:: @ 86206FF - .string "Scary to meet at night.$" - -gUnknown_08620717:: @ 8620717 - .string "I see things that others$" - -gUnknown_08620730:: @ 8620730 - .string "can't see...$" - -gUnknown_0862073D:: @ 862073D - .string "Anything to win.$" - -gUnknown_0862074E:: @ 862074E - .string "Gorgeous type!$" - -gUnknown_0862075D:: @ 862075D - .string "I have a pool specially for$" - -gUnknown_08620779:: @ 8620779 - .string "my POKéMON at home.$" - -gUnknown_0862078D:: @ 862078D - .string "You'll fall under my spell!$" - -gUnknown_086207A9:: @ 86207A9 - .string "Mature WATER type.$" - -gUnknown_086207BC:: @ 86207BC - .string "I dream of cruising around$" - -gUnknown_086207D7:: @ 86207D7 - .string "the world on a luxury liner.$" - -gUnknown_086207F4:: @ 86207F4 - .string "I'll lead you astray.$" - -gUnknown_0862080A:: @ 862080A - .string "Cute, of course.$" - -gUnknown_0862081B:: @ 862081B - .string "I love the SAFARI ZONE.$" - -gUnknown_08620833:: @ 8620833 - .string "I seem to end up there.$" - -gUnknown_0862084B:: @ 862084B - .string "Strategy? Who needs it?$" - -gUnknown_08620863:: @ 8620863 - .string "I spent big money on it!$" - -gUnknown_0862087C:: @ 862087C - .string "I, being rich, sleep in a$" - -gUnknown_08620896:: @ 8620896 - .string "custom POKéMON bed.$" - -gUnknown_086208AA:: @ 86208AA - .string "Wrestle down with power.$" - -gUnknown_086208C3:: @ 86208C3 - .string "Took all night to catch.$" - -gUnknown_086208DC:: @ 86208DC - .string "Big, burly, and buff$" - -gUnknown_086208F1:: @ 86208F1 - .string "POKéMON are the best...$" - -gUnknown_08620909:: @ 8620909 - .string "Ram at full speed!$" - -gUnknown_0862091C:: @ 862091C - .string "Funky WATER type!$" - -gUnknown_0862092E:: @ 862092E - .string "If I can't be out swimming,$" - -gUnknown_0862094A:: @ 862094A - .string "I'll be pumping weights.$" - -gUnknown_08620963:: @ 8620963 - .string "Grand slam pummeling!$" - -gUnknown_08620979:: @ 8620979 - .string "FIGHTING type.$" - -gUnknown_08620988:: @ 8620988 - .string "Not to brag, but I can bust$" - -gUnknown_086209A4:: @ 86209A4 - .string "ten roof tiles!$" - -gUnknown_086209B4:: @ 86209B4 - .string "Witness karate power!$" - -gUnknown_086209CA:: @ 86209CA - .string "My partners in training!$" - -gUnknown_086209E3:: @ 86209E3 - .string "Let us discuss matters of$" - -gUnknown_086209FD:: @ 86209FD - .string "the world with bare fists!$" - -gUnknown_08620A18:: @ 8620A18 - .string "Rock to stunning sounds!$" - -gUnknown_08620A31:: @ 8620A31 - .string "Electric-and-sound combo!$" - -gUnknown_08620A4B:: @ 8620A4B - .string "My compositions will shock$" - -gUnknown_08620A66:: @ 8620A66 - .string "you and stun you!$" - -gUnknown_08620A78:: @ 8620A78 - .string "I'll electrify you!$" - -gUnknown_08620A8C:: @ 8620A8C - .string "They're ELECTRIC!$" - -gUnknown_08620A9E:: @ 8620A9E - .string "I want to make people cry$" - -gUnknown_08620AB8:: @ 8620AB8 - .string "with songs from my heart.$" - -gUnknown_08620AD2:: @ 8620AD2 - .string "Burn it all down!$" - -gUnknown_08620AE4:: @ 8620AE4 - .string "Burn-inducing POKéMON.$" - -gUnknown_08620AFB:: @ 8620AFB - .string "When you light a campfire,$" - -gUnknown_08620B16:: @ 8620B16 - .string "be sure there's some water.$" - -gUnknown_08620B32:: @ 8620B32 - .string "Hang in and be tenacious!$" - -gUnknown_08620B4C:: @ 8620B4C - .string "I'll raise any POKéMON.$" - -gUnknown_08620B64:: @ 8620B64 - .string "POKéMON raised in the wild$" - -gUnknown_08620B7F:: @ 8620B7F - .string "grow strong!$" - -gUnknown_08620B8C:: @ 8620B8C - .string "Our love lets us prevail.$" - -gUnknown_08620BA6:: @ 8620BA6 - .string "We've had them for years.$" - -gUnknown_08620BC0:: @ 8620BC0 - .string "Married 50 years, we've$" - -gUnknown_08620BD8:: @ 8620BD8 - .string "devotedly raised POKéMON.$" - -gUnknown_08620BF2:: @ 8620BF2 - .string "Attack in waves!$" - -gUnknown_08620C03:: @ 8620C03 - .string "BUG POKéMON are cool.$" - -gUnknown_08620C19:: @ 8620C19 - .string "I go into the forest every$" - -gUnknown_08620C34:: @ 8620C34 - .string "day to catch BUG POKéMON.$" - -gUnknown_08620C4E:: @ 8620C4E - .string "Daze and confuse!$" - -gUnknown_08620C60:: @ 8620C60 - .string "Ones with weird powers.$" - -gUnknown_08620C78:: @ 8620C78 - .string "I can see through exactly$" - -gUnknown_08620C92:: @ 8620C92 - .string "what you're thinking!$" - -gUnknown_08620CA8:: @ 8620CA8 - .string "Battle at full power.$" - -gUnknown_08620CBE:: @ 8620CBE - .string "POKéMON of many mysteries.$" - -gUnknown_08620CD9:: @ 8620CD9 - .string "When we spoke, I was really$" - -gUnknown_08620CF5:: @ 8620CF5 - .string "using telepathy.$" - -gUnknown_08620D06:: @ 8620D06 - .string "Calm and collected.$" - -gUnknown_08620D1A:: @ 8620D1A - .string "POKéMON of distinction.$" - -gUnknown_08620D32:: @ 8620D32 - .string "We enjoy a spot of tea$" - -gUnknown_08620D49:: @ 8620D49 - .string "every day. It's imported.$" - -gUnknown_08620D63:: @ 8620D63 - .string "I use my head to battle.$" - -gUnknown_08620D7C:: @ 8620D7C - .string "I love any kind of POKéMON!$" - -gUnknown_08620D98:: @ 8620D98 - .string "My daddy gives me spending$" - -gUnknown_08620DB3:: @ 8620DB3 - .string "money if I ace a test.$" - -gUnknown_08620DCA:: @ 8620DCA - .string "My knowledge rules!$" - -gUnknown_08620DDE:: @ 8620DDE - .string "Any smart POKéMON!$" - -gUnknown_08620DF1:: @ 8620DF1 - .string "I want to be a POKéMON$" - -gUnknown_08620E08:: @ 8620E08 - .string "researcher in the future.$" - -gUnknown_08620E22:: @ 8620E22 - .string "We talk it over first.$" - -gUnknown_08620E39:: @ 8620E39 - .string "POKéMON that we both like.$" - -gUnknown_08620E54:: @ 8620E54 - .string "We're senior and junior$" - -gUnknown_08620E6C:: @ 8620E6C - .string "students into POKéMON!$" - -gUnknown_08620E83:: @ 8620E83 - .string "Go for it, my dears!$" - -gUnknown_08620E98:: @ 8620E98 - .string "I have no likes or dislikes.$" - -gUnknown_08620EB5:: @ 8620EB5 - .string "While out shopping for$" - -gUnknown_08620ECC:: @ 8620ECC - .string "supper, I battle too.$" - -gUnknown_08620EE2:: @ 8620EE2 - .string "I battle with love!$" - -gUnknown_08620EF6:: @ 8620EF6 - .string "A POKéMON raised with love!$" - -gUnknown_08620F12:: @ 8620F12 - .string "It's important to build$" - -gUnknown_08620F2A:: @ 8620F2A - .string "trust with your POKéMON.$" - -gUnknown_08620F43:: @ 8620F43 - .string "I see through your moves!$" - -gUnknown_08620F5D:: @ 8620F5D - .string "The essence of FIGHTING.$" - -gUnknown_08620F76:: @ 8620F76 - .string "I'm not ready to give way$" - -gUnknown_08620F90:: @ 8620F90 - .string "to the young yet!$" - -gUnknown_08620FA2:: @ 8620FA2 - .string "Attack while defending.$" - -gUnknown_08620FBA:: @ 8620FBA - .string "The FIGHTING type.$" - -gUnknown_08620FCD:: @ 8620FCD - .string "Being old, I have my own$" - -gUnknown_08620FE6:: @ 8620FE6 - .string "style of battling.$" - -gUnknown_08620FF9:: @ 8620FF9 - .string "I do what I can.$" - -gUnknown_0862100A:: @ 862100A - .string "I use different types.$" - -gUnknown_08621021:: @ 8621021 - .string "I'm going to keep working$" - -gUnknown_0862103B:: @ 862103B - .string "until I beat a GYM LEADER.$" - -gUnknown_08621056:: @ 8621056 - .string "I battle patiently.$" - -gUnknown_0862106A:: @ 862106A - .string "WATER POKéMON to battle!$" - -gUnknown_08621083:: @ 8621083 - .string "I'm the world's only guy to$" - -gUnknown_0862109F:: @ 862109F - .string "catch a huge POKéMON!$" - -gUnknown_086210B5:: @ 86210B5 - .string "Exploit the environment!$" - -gUnknown_086210CE:: @ 86210CE - .string "All hail the WATER type!$" - -gUnknown_086210E7:: @ 86210E7 - .string "I won't be beaten by some$" - -gUnknown_08621101:: @ 8621101 - .string "beach bum SWIMMER!$" - -gUnknown_08621114:: @ 8621114 - .string "Speed above all!$" - -gUnknown_08621125:: @ 8621125 - .string "I use a speedy POKéMON.$" - -gUnknown_0862113D:: @ 862113D - .string "A marathon is a challenge$" - -gUnknown_08621157:: @ 8621157 - .string "against your own self.$" - -gUnknown_0862116E:: @ 862116E - .string "Defense is crucial.$" - -gUnknown_08621182:: @ 8621182 - .string "My POKéMON is solid.$" - -gUnknown_08621197:: @ 8621197 - .string "I started this for dieting,$" - -gUnknown_086211B3:: @ 86211B3 - .string "but I got right into it.$" - -gUnknown_086211CC:: @ 86211CC - .string "Strike before stricken!$" - -gUnknown_086211E4:: @ 86211E4 - .string "A fast-running POKéMON!$" - -gUnknown_086211FC:: @ 86211FC - .string "If you ran and ran, you'd$" - -gUnknown_08621216:: @ 8621216 - .string "become one with the wind.$" - -gUnknown_08621230:: @ 8621230 - .string "All-out offensive!$" - -gUnknown_08621243:: @ 8621243 - .string "WATER POKéMON rule!$" - -gUnknown_08621257:: @ 8621257 - .string "I must swim over 6 miles$" - -gUnknown_08621270:: @ 8621270 - .string "every day.$" - -gUnknown_0862127B:: @ 862127B - .string "Push and push again!$" - -gUnknown_08621290:: @ 8621290 - .string "The strength of STEEL.$" - -gUnknown_086212A7:: @ 86212A7 - .string "If you're sweating, get$" - -gUnknown_086212BF:: @ 86212BF - .string "fluids into you regularly.$" - -gUnknown_086212DA:: @ 86212DA - .string "Draw the power of WATER.$" - -gUnknown_086212F3:: @ 86212F3 - .string "Toughened WATER POKéMON.$" - -gUnknown_0862130C:: @ 862130C - .string "Training POKéMON is good,$" - -gUnknown_08621326:: @ 8621326 - .string "but don't neglect yourself.$" - -gUnknown_08621342:: @ 8621342 - .string "It's about POKéMON power!$" - -gUnknown_0862135C:: @ 862135C - .string "See the power of DRAGONS!$" - -gUnknown_08621376:: @ 8621376 - .string "I'll become legendary as the$" - -gUnknown_08621393:: @ 8621393 - .string "strongest one day!$" - -gUnknown_086213A6:: @ 86213A6 - .string "I'll show you my technique!$" - -gUnknown_086213C2:: @ 86213C2 - .string "Elegantly wheeling BIRDS.$" - -gUnknown_086213DC:: @ 86213DC - .string "My BIRD POKéMON, deliver my$" - -gUnknown_086213F8:: @ 86213F8 - .string "love to that girl!$" - -gUnknown_0862140B:: @ 862140B - .string "You'll suffer from poison!$" - -gUnknown_08621426:: @ 8621426 - .string "Poisonous POKéMON.$" - -gUnknown_08621439:: @ 8621439 - .string "I undertake training so$" - -gUnknown_08621451:: @ 8621451 - .string "that I may become a ninja.$" - -gUnknown_0862146C:: @ 862146C - .string "The first strike wins!$" - -gUnknown_08621483:: @ 8621483 - .string "Speedy FIGHTING type.$" - -gUnknown_08621499:: @ 8621499 - .string "If my POKéMON lose,$" - -gUnknown_086214AD:: @ 86214AD - .string "I'll carry on the fight!$" - -gUnknown_086214C6:: @ 86214C6 - .string "Go, go, my POKéMON!$" - -gUnknown_086214DA:: @ 86214DA - .string "I'll raise anything.$" - -gUnknown_086214EF:: @ 86214EF - .string "UV rays are your skin's$" - -gUnknown_08621507:: @ 8621507 - .string "enemy. Get protected.$" - -gUnknown_0862151D:: @ 862151D - .string "No mercy!$" - -gUnknown_08621527:: @ 8621527 - .string "Cute WATER POKéMON.$" - -gUnknown_0862153B:: @ 862153B - .string "I have too many fans.$" - -gUnknown_08621551:: @ 8621551 - .string "I was interviewed on TV.$" - -gUnknown_0862156A:: @ 862156A - .string "I think about this & that.$" - -gUnknown_08621585:: @ 8621585 - .string "I like all POKéMON.$" - -gUnknown_08621599:: @ 8621599 - .string "What lies beyond that$" - -gUnknown_086215AF:: @ 86215AF - .string "yonder hill?$" - -gUnknown_086215BC:: @ 86215BC - .string "We battle together!$" - -gUnknown_086215D0:: @ 86215D0 - .string "We train together!$" - -gUnknown_086215E3:: @ 86215E3 - .string "We like the same POKéMON,$" - -gUnknown_086215FD:: @ 86215FD - .string "but different desserts.$" - -gUnknown_08621615:: @ 8621615 - .string "I force things with power!$" - -gUnknown_08621630:: @ 8621630 - .string "WATER and FIGHTING types.$" - -gUnknown_0862164A:: @ 862164A - .string "Seamen are rough spirits!$" - -gUnknown_08621664:: @ 8621664 - .string "Any complaints?$" - -gUnknown_08621674:: @ 8621674 - .string "Up for a fight anytime!$" - -gUnknown_0862168C:: @ 862168C - .string "WATER POKéMON are my faves!$" - -gUnknown_086216A8:: @ 86216A8 - .string "If you want to shout loud,$" - -gUnknown_086216C3:: @ 86216C3 - .string "suck in air with your belly!$" - -gUnknown_086216E0:: @ 86216E0 - .string "Protect POKéMON from harm.$" - -gUnknown_086216FB:: @ 86216FB - .string "I love rare POKéMON.$" - -gUnknown_08621710:: @ 8621710 - .string "I want to collect all the$" - -gUnknown_0862172A:: @ 862172A - .string "world's rare POKéMON.$" - -gUnknown_08621740:: @ 8621740 - .string "I count on power.$" - -gUnknown_08621752:: @ 8621752 - .string "POKéMON are my children.$" - -gUnknown_0862176B:: @ 862176B - .string "It takes knowledge and$" - -gUnknown_08621782:: @ 8621782 - .string "love to raise POKéMON.$" - -gUnknown_08621799:: @ 8621799 - .string "Full-on attack!$" - -gUnknown_086217A9:: @ 86217A9 - .string "Anything. I'll raise it.$" - -gUnknown_086217C2:: @ 86217C2 - .string "I give them {POKEBLOCK}S for$" - -gUnknown_086217D9:: @ 86217D9 - .string "going after CONTEST titles.$" - -gUnknown_086217F5:: @ 86217F5 - .string "I raise POKéMON with care.$" - -gUnknown_08621810:: @ 8621810 - .string "Fun-to-raise POKéMON.$" - -gUnknown_08621826:: @ 8621826 - .string "Treat every POKéMON you$" - -gUnknown_0862183E:: @ 862183E - .string "meet with respect.$" - -gUnknown_08621851:: @ 8621851 - .string "I believe in my POKéMON.$" - -gUnknown_0862186A:: @ 862186A - .string "I like strong POKéMON.$" - -gUnknown_08621881:: @ 8621881 - .string "I'm training for rescue$" - -gUnknown_08621899:: @ 8621899 - .string "work with my POKéMON.$" - -gUnknown_086218AF:: @ 86218AF - .string "Attack in waves!$" - -gUnknown_086218C0:: @ 86218C0 - .string "I use different types.$" - -gUnknown_086218D7:: @ 86218D7 - .string "Those who destroy nature$" - -gUnknown_086218F0:: @ 86218F0 - .string "must never be forgiven!$" - -gUnknown_08621908:: @ 8621908 - .string "I'll show you some guts!$" - -gUnknown_08621921:: @ 8621921 - .string "Cute POKéMON are my faves!$" - -gUnknown_0862193C:: @ 862193C - .string "After a battle, I always$" - -gUnknown_08621955:: @ 8621955 - .string "bathe with my POKéMON.$" - -gUnknown_0862196C:: @ 862196C - .string "Lightning-fast attack!$" - -gUnknown_08621983:: @ 8621983 - .string "BUG POKéMON are number 1!$" - -gUnknown_0862199D:: @ 862199D - .string "If you want to catch BUG$" - -gUnknown_086219B6:: @ 86219B6 - .string "POKéMON, wake up early.$" - -gUnknown_086219CE:: @ 86219CE - .string "I battle with power.$" - -gUnknown_086219E3:: @ 86219E3 - .string "Hard-bodied POKéMON.$" - -gUnknown_086219F8:: @ 86219F8 - .string "I've been planning a month$" - -gUnknown_08621A13:: @ 8621A13 - .string "for today's hike.$" - -gUnknown_08621A25:: @ 8621A25 - .string "I like it hot!$" - -gUnknown_08621A34:: @ 8621A34 - .string "Hot POKéMON!$" - -gUnknown_08621A41:: @ 8621A41 - .string "As much as I love POKéMON,$" - -gUnknown_08621A5C:: @ 8621A5C - .string "I surely like hiking!$" - -gUnknown_08621A72:: @ 8621A72 - .string "Lovey-dovey strategy!$" - -gUnknown_08621A88:: @ 8621A88 - .string "Lovey-dovey POKéMON!$" - -gUnknown_08621A9D:: @ 8621A9D - .string "We're lovey-dovey!$" - -gUnknown_08621AB0:: @ 8621AB0 - .string "Forever lovey-dovey!$" - -gUnknown_08621AC5:: @ 8621AC5 - .string "We let it all hang out.$" - -gUnknown_08621ADD:: @ 8621ADD - .string "The 1st POKéMON I caught.$" - -gUnknown_08621AF7:: @ 8621AF7 - .string "POKéMON and I have grown$" - -gUnknown_08621B10:: @ 8621B10 - .string "stronger together.$" - -gUnknown_08621B23:: @ 8621B23 - .string "ROCK-type power attack.$" - -gUnknown_08621B3B:: @ 8621B3B - .string "I prefer rock-hard POKéMON.$" - -gUnknown_08621B57:: @ 8621B57 - .string "A LEADER of a big GYM bears$" - -gUnknown_08621B73:: @ 8621B73 - .string "a lot of responsibility.$" - -gUnknown_08621B8C:: @ 8621B8C - .string "Direct physical action!$" - -gUnknown_08621BA4:: @ 8621BA4 - .string "FIGHTING POKéMON rule!$" - -gUnknown_08621BBB:: @ 8621BBB - .string "The world awaits me as the$" - -gUnknown_08621BD6:: @ 8621BD6 - .string "next big wave!$" - -gUnknown_08621BE5:: @ 8621BE5 - .string "I choose to electrify.$" - -gUnknown_08621BFC:: @ 8621BFC - .string "Get shocked by electricity!$" - -gUnknown_08621C18:: @ 8621C18 - .string "One must never throw a$" - -gUnknown_08621C2F:: @ 8621C2F - .string "match. Even I must not.$" - -gUnknown_08621C47:: @ 8621C47 - .string "Battle aggressively.$" - -gUnknown_08621C5C:: @ 8621C5C - .string "Burn with passion!$" - -gUnknown_08621C6F:: @ 8621C6F - .string "Completely wash away daily$" - -gUnknown_08621C8A:: @ 8621C8A - .string "fatigue in hot springs!$" - -gUnknown_08621CA2:: @ 8621CA2 - .string "I flexibly adapt my style.$" - -gUnknown_08621CBD:: @ 8621CBD - .string "Grown in a balanced manner.$" - -gUnknown_08621CD9:: @ 8621CD9 - .string "I walk the 30 minutes from$" - -gUnknown_08621CF4:: @ 8621CF4 - .string "home to here every day.$" - -gUnknown_08621D0C:: @ 8621D0C - .string "I take advantage of speed.$" - -gUnknown_08621D27:: @ 8621D27 - .string "Graceful sky dancers.$" - -gUnknown_08621D3D:: @ 8621D3D - .string "The ultimate would be to$" - -gUnknown_08621D56:: @ 8621D56 - .string "live as one with nature.$" - -gUnknown_08621D6F:: @ 8621D6F - .string "We battle in cooperation.$" - -gUnknown_08621D89:: @ 8621D89 - .string "Always friendly POKéMON.$" - -gUnknown_08621DA2:: @ 8621DA2 - .string "Papa has trouble telling$" - -gUnknown_08621DBB:: @ 8621DBB - .string "the two of us apart!$" - -gUnknown_08621DD0:: @ 8621DD0 - .string "I use splendid waterpower.$" - -gUnknown_08621DEB:: @ 8621DEB - .string "POKéMON of elegance!$" - -gUnknown_08621E00:: @ 8621E00 - .string "The adulation of beautiful$" - -gUnknown_08621E1B:: @ 8621E1B - .string "ladies fills me with energy!$" - -gUnknown_08621E38:: @ 8621E38 - .string "Offense over defense!$" - -gUnknown_08621E4E:: @ 8621E4E - .string "The DARK side's beauties.$" - -gUnknown_08621E68:: @ 8621E68 - .string "They said I was a punk, but$" - -gUnknown_08621E84:: @ 8621E84 - .string "I'm one of the ELITE FOUR!$" - -gUnknown_08621E9F:: @ 8621E9F - .string "Confuse and confound.$" - -gUnknown_08621EB5:: @ 8621EB5 - .string "There's nothing definite.$" - -gUnknown_08621ECF:: @ 8621ECF - .string "I wonder how my grandma at$" - -gUnknown_08621EEA:: @ 8621EEA - .string "MT. PYRE is doing?$" - -gUnknown_08621EFD:: @ 8621EFD - .string "I use items for help.$" - -gUnknown_08621F13:: @ 8621F13 - .string "Flaming passion in icy cold!$" - -gUnknown_08621F30:: @ 8621F30 - .string "The ICE type can be better$" - -gUnknown_08621F4B:: @ 8621F4B - .string "trained in this hot land.$" - -gUnknown_08621F65:: @ 8621F65 - .string "Harness strong abilities.$" - -gUnknown_08621F7F:: @ 8621F7F - .string "The raw power of DRAGONS!$" - -gUnknown_08621F99:: @ 8621F99 - .string "I dedicate myself to the$" - -gUnknown_08621FB2:: @ 8621FB2 - .string "POKéMON that saved me.$" - -gUnknown_08621FC9:: @ 8621FC9 - .string "Dignity and respect.$" - -gUnknown_08621FDE:: @ 8621FDE - .string "I prefer POKéMON of grace.$" - -gUnknown_08621FF9:: @ 8621FF9 - .string "I represent beauty as$" - -gUnknown_0862200F:: @ 862200F - .string "well as intelligence.$" - -.align 2 - -@ strategy, mon text, introduction1, introduction2 -gUnknown_08622028:: @ 8622028 - .4byte gUnknown_08620390, gUnknown_086203AA, gUnknown_086203C2, gUnknown_086203DB - .4byte gUnknown_086203F2, gUnknown_0862040D, gUnknown_08620428, gUnknown_08620444 - .4byte gUnknown_08620456, gUnknown_0862046C, gUnknown_08620481, gUnknown_0862049C - .4byte gUnknown_086204B0, gUnknown_086204C7, gUnknown_086204DD, gUnknown_086204F9 - .4byte gUnknown_0862050E, gUnknown_0862052B, gUnknown_08620546, gUnknown_08620562 - .4byte gUnknown_0862057D, gUnknown_08620592, gUnknown_086205AC, gUnknown_086205C6 - .4byte gUnknown_086205DD, gUnknown_086205F8, gUnknown_08620612, gUnknown_0862062F - .4byte gUnknown_08620638, gUnknown_08620654, gUnknown_08620668, gUnknown_08620681 - .4byte gUnknown_08620693, gUnknown_086206A7, gUnknown_086206BC, gUnknown_086206D5 - .4byte gUnknown_086206E7, gUnknown_086206FF, gUnknown_08620717, gUnknown_08620730 - .4byte gUnknown_0862073D, gUnknown_0862074E, gUnknown_0862075D, gUnknown_08620779 - .4byte gUnknown_0862078D, gUnknown_086207A9, gUnknown_086207BC, gUnknown_086207D7 - .4byte gUnknown_086207F4, gUnknown_0862080A, gUnknown_0862081B, gUnknown_08620833 - .4byte gUnknown_0862084B, gUnknown_08620863, gUnknown_0862087C, gUnknown_08620896 - .4byte gUnknown_086208AA, gUnknown_086208C3, gUnknown_086208DC, gUnknown_086208F1 - .4byte gUnknown_08620909, gUnknown_0862091C, gUnknown_0862092E, gUnknown_0862094A - .4byte gUnknown_08620963, gUnknown_08620979, gUnknown_08620988, gUnknown_086209A4 - .4byte gUnknown_086209B4, gUnknown_086209CA, gUnknown_086209E3, gUnknown_086209FD - .4byte gUnknown_08620A18, gUnknown_08620A31, gUnknown_08620A4B, gUnknown_08620A66 - .4byte gUnknown_08620A78, gUnknown_08620A8C, gUnknown_08620A9E, gUnknown_08620AB8 - .4byte gUnknown_08620AD2, gUnknown_08620AE4, gUnknown_08620AFB, gUnknown_08620B16 - .4byte gUnknown_08620B32, gUnknown_08620B4C, gUnknown_08620B64, gUnknown_08620B7F - .4byte gUnknown_08620B8C, gUnknown_08620BA6, gUnknown_08620BC0, gUnknown_08620BD8 - .4byte gUnknown_08620BF2, gUnknown_08620C03, gUnknown_08620C19, gUnknown_08620C34 - .4byte gUnknown_08620C4E, gUnknown_08620C60, gUnknown_08620C78, gUnknown_08620C92 - .4byte gUnknown_08620CA8, gUnknown_08620CBE, gUnknown_08620CD9, gUnknown_08620CF5 - .4byte gUnknown_08620D06, gUnknown_08620D1A, gUnknown_08620D32, gUnknown_08620D49 - .4byte gUnknown_08620D63, gUnknown_08620D7C, gUnknown_08620D98, gUnknown_08620DB3 - .4byte gUnknown_08620DCA, gUnknown_08620DDE, gUnknown_08620DF1, gUnknown_08620E08 - .4byte gUnknown_08620E22, gUnknown_08620E39, gUnknown_08620E54, gUnknown_08620E6C - .4byte gUnknown_08620E83, gUnknown_08620E98, gUnknown_08620EB5, gUnknown_08620ECC - .4byte gUnknown_08620EE2, gUnknown_08620EF6, gUnknown_08620F12, gUnknown_08620F2A - .4byte gUnknown_08620F43, gUnknown_08620F5D, gUnknown_08620F76, gUnknown_08620F90 - .4byte gUnknown_08620FA2, gUnknown_08620FBA, gUnknown_08620FCD, gUnknown_08620FE6 - .4byte gUnknown_08620FF9, gUnknown_0862100A, gUnknown_08621021, gUnknown_0862103B - .4byte gUnknown_08621056, gUnknown_0862106A, gUnknown_08621083, gUnknown_0862109F - .4byte gUnknown_086210B5, gUnknown_086210CE, gUnknown_086210E7, gUnknown_08621101 - .4byte gUnknown_08621114, gUnknown_08621125, gUnknown_0862113D, gUnknown_08621157 - .4byte gUnknown_0862116E, gUnknown_08621182, gUnknown_08621197, gUnknown_086211B3 - .4byte gUnknown_086211CC, gUnknown_086211E4, gUnknown_086211FC, gUnknown_08621216 - .4byte gUnknown_08621230, gUnknown_08621243, gUnknown_08621257, gUnknown_08621270 - .4byte gUnknown_0862127B, gUnknown_08621290, gUnknown_086212A7, gUnknown_086212BF - .4byte gUnknown_086212DA, gUnknown_086212F3, gUnknown_0862130C, gUnknown_08621326 - .4byte gUnknown_08621342, gUnknown_0862135C, gUnknown_08621376, gUnknown_08621393 - .4byte gUnknown_086213A6, gUnknown_086213C2, gUnknown_086213DC, gUnknown_086213F8 - .4byte gUnknown_0862140B, gUnknown_08621426, gUnknown_08621439, gUnknown_08621451 - .4byte gUnknown_0862146C, gUnknown_08621483, gUnknown_08621499, gUnknown_086214AD - .4byte gUnknown_086214C6, gUnknown_086214DA, gUnknown_086214EF, gUnknown_08621507 - .4byte gUnknown_0862151D, gUnknown_08621527, gUnknown_0862153B, gUnknown_08621551 - .4byte gUnknown_0862156A, gUnknown_08621585, gUnknown_08621599, gUnknown_086215AF - .4byte gUnknown_086215BC, gUnknown_086215D0, gUnknown_086215E3, gUnknown_086215FD - .4byte gUnknown_08621615, gUnknown_08621630, gUnknown_0862164A, gUnknown_08621664 - .4byte gUnknown_08621674, gUnknown_0862168C, gUnknown_086216A8, gUnknown_086216C3 - .4byte gUnknown_086216E0, gUnknown_086216FB, gUnknown_08621710, gUnknown_0862172A - .4byte gUnknown_08621740, gUnknown_08621752, gUnknown_0862176B, gUnknown_08621782 - .4byte gUnknown_08621799, gUnknown_086217A9, gUnknown_086217C2, gUnknown_086217D9 - .4byte gUnknown_086217F5, gUnknown_08621810, gUnknown_08621826, gUnknown_0862183E - .4byte gUnknown_08621851, gUnknown_0862186A, gUnknown_08621881, gUnknown_08621899 - .4byte gUnknown_086218AF, gUnknown_086218C0, gUnknown_086218D7, gUnknown_086218F0 - .4byte gUnknown_08621908, gUnknown_08621921, gUnknown_0862193C, gUnknown_08621955 - .4byte gUnknown_0862196C, gUnknown_08621983, gUnknown_0862199D, gUnknown_086219B6 - .4byte gUnknown_086219CE, gUnknown_086219E3, gUnknown_086219F8, gUnknown_08621A13 - .4byte gUnknown_08621A25, gUnknown_08621A34, gUnknown_08621A41, gUnknown_08621A5C - .4byte gUnknown_08621A72, gUnknown_08621A88, gUnknown_08621A9D, gUnknown_08621AB0 - .4byte gUnknown_08621AC5, gUnknown_08621ADD, gUnknown_08621AF7, gUnknown_08621B10 - .4byte gUnknown_08621B23, gUnknown_08621B3B, gUnknown_08621B57, gUnknown_08621B73 - .4byte gUnknown_08621B8C, gUnknown_08621BA4, gUnknown_08621BBB, gUnknown_08621BD6 - .4byte gUnknown_08621BE5, gUnknown_08621BFC, gUnknown_08621C18, gUnknown_08621C2F - .4byte gUnknown_08621C47, gUnknown_08621C5C, gUnknown_08621C6F, gUnknown_08621C8A - .4byte gUnknown_08621CA2, gUnknown_08621CBD, gUnknown_08621CD9, gUnknown_08621CF4 - .4byte gUnknown_08621D0C, gUnknown_08621D27, gUnknown_08621D3D, gUnknown_08621D56 - .4byte gUnknown_08621D6F, gUnknown_08621D89, gUnknown_08621DA2, gUnknown_08621DBB - .4byte gUnknown_08621DD0, gUnknown_08621DEB, gUnknown_08621E00, gUnknown_08621E1B - .4byte gUnknown_08621E38, gUnknown_08621E4E, gUnknown_08621E68, gUnknown_08621E84 - .4byte gUnknown_08621E9F, gUnknown_08621EB5, gUnknown_08621ECF, gUnknown_08621EEA - .4byte gUnknown_08621EFD, gUnknown_08621F13, gUnknown_08621F30, gUnknown_08621F4B - .4byte gUnknown_08621F65, gUnknown_08621F7F, gUnknown_08621F99, gUnknown_08621FB2 - .4byte gUnknown_08621FC9, gUnknown_08621FDE, gUnknown_08621FF9, gUnknown_0862200F - -gUnknown_08622508:: @ 8622508 - .byte 0, 2 - -gUnknown_0862250A:: @ 862250A - .byte 0, 1, 2, 0, 0, 0 - -// pokenav_unk_4.s -gUnknown_08622510:: @ 8622510 - .incbin "graphics/pokenav/ui_matchcall.gbapal" - -gUnknown_08622530:: @ 8622530 - .incbin "graphics/pokenav/ui_matchcall.4bpp.lz" - -gUnknown_086225D4:: @ 86225D4 - .incbin "graphics/pokenav/ui_matchcall.bin.lz" - -gUnknown_08622698:: @ 8622698 - .incbin "graphics/pokenav/arrow2.gbapal" - -gUnknown_086226B8:: @ 86226B8 - .incbin "graphics/pokenav/arrow2.4bpp.lz" - -gUnknown_086226E0:: @ 86226E0 - .incbin "graphics/pokenav/86226E0.gbapal" - -gUnknown_08622700:: @ 8622700 - .incbin "graphics/pokenav/8622700.gbapal" - -gUnknown_08622720:: @ 8622720 - .incbin "graphics/pokenav/pokeball_matchcall.gbapal" - -gUnknown_08622760:: @ 8622760 - .incbin "graphics/pokenav/pokeball_matchcall.4bpp.lz" - -gUnknown_0862278C:: @ 862278C - .4byte 0x11FD - .4byte 0x20206A - -gUnknown_08622794:: @ 8622794 - .4byte 0x00003077 - -gUnknown_08622798:: @ 8622798 - .4byte NULL - .4byte sub_81CB510 - .4byte sub_81CB588 - .4byte sub_81CB600 - .4byte sub_81CB678 - .4byte sub_81CB6F0 - .4byte sub_81CB734 - .4byte sub_81CB75C - .4byte sub_81CB7A0 - .4byte sub_81CB824 - .4byte sub_81CB888 - .4byte sub_81CB93C - .4byte sub_81CBAD4 - .4byte sub_81CB9C8 - .4byte sub_81CBA68 - .4byte sub_81CBB74 - -gUnknown_086227D8:: @ 86227D8 - window_template 2, 0, 5, 11, 2, 2, 16 - -gUnknown_086227E0:: @ 86227E0 - window_template 2, 0, 9, 11, 8, 2, 0x26 - -gUnknown_086227E8:: @ 86227E8 - .4byte gUnknown_085EC017 - .4byte gUnknown_085EC01C - .4byte gUnknown_085EC022 - -gUnknown_086227F4:: @ 86227F4 - .string "·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·\p" - .string "$" - .align 2 - -gUnknown_08622808:: @ 8622808 - window_template 1, 1, 12, 0x1C, 4, 1, 10 - -gUnknown_08622810:: @ 8622810 - obj_tiles gUnknown_086226B8, 0x40, 7 - -gUnknown_08622818:: @ 8622818 - obj_pal gUnknown_08622698, 12 - null_obj_pal - -gUnknown_08622828:: @ 8622828 - .2byte 0x8000 - .2byte 0x0 - .2byte 0x400 - .2byte 0x0 - -gUnknown_08622830:: @ 8622830 - spr_template 7, 12, gUnknown_08622828, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_81CC34C - -gUnknown_08622848:: @ 8622848 - .2byte 0x0 - .2byte 0xC000 - .2byte 0x400 - .2byte 0x0 - -gUnknown_08622850:: @ 8622850 - spr_template 8, 13, gUnknown_08622848, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -// pokenav_unk_5.s -gUnknown_08622868:: @ 8622868 - .incbin "graphics/pokenav/8622868.gbapal" - -gUnknown_08622888:: @ 8622888 - .incbin "graphics/pokenav/zoom_tiles.4bpp.lz" - -gUnknown_08622A7C:: @ 8622A7C - .incbin "graphics/pokenav/city_maps/lavaridge_0.bin.lz" - -gUnknown_08622AC0:: @ 8622AC0 - .incbin "graphics/pokenav/city_maps/fallarbor_0.bin.lz" - -gUnknown_08622B08:: @ 8622B08 - .incbin "graphics/pokenav/city_maps/fortree_0.bin.lz" - -gUnknown_08622B58:: @ 8622B58 - .incbin "graphics/pokenav/city_maps/slateport_0.bin.lz" - -gUnknown_08622BB8:: @ 8622BB8 - .incbin "graphics/pokenav/city_maps/slateport_1.bin.lz" - -gUnknown_08622C04:: @ 8622C04 - .incbin "graphics/pokenav/city_maps/rustboro_0.bin.lz" - -gUnknown_08622C58:: @ 8622C58 - .incbin "graphics/pokenav/city_maps/rustboro_1.bin.lz" - -gUnknown_08622CAC:: @ 8622CAC - .incbin "graphics/pokenav/city_maps/pacifidlog_0.bin.lz" - -gUnknown_08622CEC:: @ 8622CEC - .incbin "graphics/pokenav/city_maps/mauville_0.bin.lz" - -gUnknown_08622D44:: @ 8622D44 - .incbin "graphics/pokenav/city_maps/mauville_1.bin.lz" - -gUnknown_08622D98:: @ 8622D98 - .incbin "graphics/pokenav/city_maps/oldale_0.bin.lz" - -gUnknown_08622DC8:: @ 8622DC8 - .incbin "graphics/pokenav/city_maps/lilycove_0.bin.lz" - -gUnknown_08622E14:: @ 8622E14 - .incbin "graphics/pokenav/city_maps/lilycove_1.bin.lz" - -gUnknown_08622E6C:: @ 8622E6C - .incbin "graphics/pokenav/city_maps/littleroot_0.bin.lz" - -gUnknown_08622E9C:: @ 8622E9C - .incbin "graphics/pokenav/city_maps/dewford_0.bin.lz" - -gUnknown_08622ED4:: @ 8622ED4 - .incbin "graphics/pokenav/city_maps/sootopolis_0.bin.lz" - -gUnknown_08622F14:: @ 8622F14 - .incbin "graphics/pokenav/city_maps/ever_grande_0.bin.lz" - -gUnknown_08622F5C:: @ 8622F5C - .incbin "graphics/pokenav/city_maps/ever_grande_1.bin.lz" - -gUnknown_08622FA0:: @ 8622FA0 - .incbin "graphics/pokenav/city_maps/verdanturf_0.bin.lz" - -gUnknown_08622FD8:: @ 8622FD8 - .incbin "graphics/pokenav/city_maps/mossdeep_0.bin.lz" - -gUnknown_08623020:: @ 8623020 - .incbin "graphics/pokenav/city_maps/mossdeep_1.bin.lz" - -gUnknown_0862307C:: @ 862307C - .incbin "graphics/pokenav/city_maps/petalburg_0.bin.lz" - -gUnknown_086230D8:: @ 86230D8 - .4byte 0x11F5 - .4byte 0x206A - .4byte 0x3402 - -gUnknown_086230E4:: @ 86230E4 - .4byte NULL - .4byte sub_81CC848 - .4byte sub_81CC878 - .4byte sub_81CC8D8 - .4byte sub_81CC95C - -gUnknown_086230F8:: @ 86230F8 - obj_tiles gHoennMapZoomIcons_Gfx, 0x800, 6 - -gUnknown_08623100:: @ 8623100 - obj_pal gHoennMapZoomIcons_Pal, 11 - null_obj_pal - -gUnknown_08623110:: @ 8623110 - .byte 1 - .byte 17 - .byte 4 - .byte 12 - .byte 13 - .byte 1 - .2byte 0x4C - -gUnknown_08623118:: @ 8623118 - .4byte 0, gUnknown_08622E6C - .4byte 1, gUnknown_08622D98 - .4byte 2, gUnknown_08622E9C - .4byte 3, gUnknown_08622A7C - .4byte 4, gUnknown_08622AC0 - .4byte 5, gUnknown_08622FA0 - .4byte 6, gUnknown_08622CAC - .4byte 7, gUnknown_0862307C - .4byte 8, gUnknown_08622B58 - .4byte 0x10008, gUnknown_08622BB8 - .4byte 9, gUnknown_08622D44 - .4byte 0x10009, gUnknown_08622CEC - .4byte 0xA, gUnknown_08622C04 - .4byte 0x1000A, gUnknown_08622C58 - .4byte 0xB, gUnknown_08622B08 - .4byte 0xC, gUnknown_08622E14 - .4byte 0x1000C, gUnknown_08622DC8 - .4byte 0xD, gUnknown_08623020 - .4byte 0x1000D, gUnknown_08622FD8 - .4byte 0xE, gUnknown_08622ED4 - .4byte 0xF, gUnknown_08622F14 - .4byte 0x1000F, gUnknown_08622F5C - -gUnknown_086231C8:: @ 86231C8 - .2byte 0x4000 - .2byte 0x4000 - .2byte 0x400 - .2byte 0x0 - -gUnknown_086231D0:: @ 86231D0 - spr_template 6, 11, gUnknown_086231C8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_81CCEF4 - -// pokenav_unk_6.s -// <none> - -// pokenav_unk_7.s -gUnknown_086231E8:: @ 86231E8 - .incbin "graphics/pokenav/86231E8.gbapal" - -gUnknown_08623208:: @ 8623208 - .incbin "graphics/pokenav/8623208.gbapal" - -gUnknown_08623228:: @ 8623228 - .incbin "graphics/pokenav/8623228.4bpp.lz" - -gUnknown_0862323C:: @ 862323C - .incbin "graphics/pokenav/862323C.bin.lz" - -gUnknown_08623338:: @ 8623338 - .incbin "graphics/pokenav/8623338.gbapal" - -gUnknown_08623358:: @ 8623358 - .4byte 0x11F5 - .4byte 0x21DE - .4byte 0x31EB - -gUnknown_08623364:: @ 8623364 - window_template 1, 13, 1, 13, 4, 15, 2 - -gUnknown_0862336C:: @ 862336C - window_template 1, 1, 6, 7, 2, 15, 0x36 - -gUnknown_08623374:: @ 8623374 - window_template 1, 1, 0x1C, 5, 2, 15, 0x44 - -gUnknown_0862337C:: @ 862337C - window_template 1, 13, 0x1C, 3, 2, 15, 0x44 - -// pokenav_unk_8.s -gUnknown_08623384:: @ 8623384 - .4byte NULL - .4byte sub_81CE37C - .4byte sub_81CE2D0 - .4byte sub_81CE4D8 - .4byte sub_81CE5E4 - .4byte sub_81CE6BC - .4byte sub_81CE700 - -gUnknown_086233A0:: @ 86233A0 - .4byte 0x16, 0x17, 0x18, 0x21, 0x2F - -gUnknown_086233B4:: @ 86233B4 - .4byte sub_81CF134 - .4byte sub_81CF1C4 - .4byte sub_81CF1D8 - .4byte sub_81CF278 - -gUnknown_086233C4:: @ 86233C4 - .incbin "graphics/pokenav/condition_search2.gbapal" - -gUnknown_086233E4:: @ 86233E4 - .incbin "graphics/pokenav/condition_search2.4bpp.lz" - -gUnknown_086234AC:: @ 86234AC - .incbin "graphics/pokenav/condition_search2.bin.lz" - -gUnknown_08623570:: @ 8623570 - .incbin "graphics/pokenav/8623570.gbapal" - -gUnknown_08623590:: @ 8623590 - .4byte 0x2065 - -gUnknown_08623594:: @ 8623594 - .4byte 0x307A - -gUnknown_08623598:: @ 8623598 - .4byte NULL - .4byte sub_81CF578 - .4byte sub_81CF5F0 - .4byte sub_81CF668 - .4byte sub_81CF6E0 - .4byte sub_81CF758 - .4byte sub_81CF798 - -gUnknown_086235B4:: @ 86235B4 - window_template 1, 1, 6, 7, 2, 1, 20 - -gUnknown_086235BC:: @ 86235BC - .string "{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}$" - .align 2 - -gUnknown_086235C8:: @ 86235C8 - .string "{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}$" - .align 2 - -gUnknown_086235D4:: @ 86235D4 - .string "{UNK_SPACER}$" - .align 2 - -// pokenav_unk_9.s -gUnknown_086235D8:: @ 86235D8 - .4byte sub_81CFB8C - .4byte sub_81CFC2C - .4byte sub_81CFC40 - -gUnknown_086235E4:: @ 86235E4 - .incbin "graphics/pokenav/ui_ribbons.gbapal" - -gUnknown_08623604:: @ 8623604 - .incbin "graphics/pokenav/ui_ribbons.4bpp.lz" - -gUnknown_086236CC:: @ 86236CC - .incbin "graphics/pokenav/ui_ribbons.bin.lz" - -gUnknown_08623790:: @ 8623790 - .incbin "graphics/pokenav/8623790.gbapal" - -gUnknown_086237B0:: @ 86237B0 - .4byte 0x2065 - -gUnknown_086237B4:: @ 86237B4 - .4byte 0x307A - -gUnknown_086237B8:: @ 86237B8 - .4byte NULL - .4byte sub_81CFFFC - .4byte sub_81D0074 - .4byte sub_81D00EC - .4byte sub_81D0164 - .4byte sub_81D01DC - .4byte sub_81D021C - -gUnknown_086237D4:: @ 86237D4 - window_template 1, 1, 6, 7, 2, 1, 20 - -gUnknown_086237DC:: @ 86237DC - .string "{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}$" - .align 2 - -gUnknown_086237E8:: @ 86237E8 - .string "{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}$" - .align 2 - -gUnknown_086237F4:: @ 86237F4 - .string "{UNK_SPACER}$" - .align 2 - -// pokenav_unk_10.s -gUnknown_086237F8:: @ 86237F8 - .byte 1, 1, 0, 0 - .byte 3, 4, 1, 0 - .byte 3, 4, 5, 0 - .byte 3, 4, 9, 0 - .byte 3, 4, 13, 0 - .byte 3, 4, 17, 0 - .byte 1, 1, 21, 0 - .byte 1, 1, 22, 0 - .byte 1, 1, 23, 0 - .byte 1, 1, 24, 0 - .byte 1, 1, 25, 1 - .byte 1, 1, 26, 1 - .byte 1, 1, 27, 1 - .byte 1, 1, 28, 1 - .byte 1, 1, 29, 1 - .byte 1, 1, 30, 1 - .byte 1, 1, 31, 1 - -@ 862383C - .include "data/text/ribbon_descriptions.inc" - -@ 8623A74 - .include "data/text/gift_ribbon_descriptions.inc" - -gUnknown_08623FF8:: @ 8623FF8 - .incbin "graphics/pokenav/ribbons_icon1.gbapal" - -gUnknown_08624018:: @ 8624018 - .incbin "graphics/pokenav/ribbons_icon2.gbapal" - -gUnknown_08624038:: @ 8624038 - .incbin "graphics/pokenav/ribbons_icon3.gbapal" - -gUnknown_08624058:: @ 8624058 - .incbin "graphics/pokenav/ribbons_icon4.gbapal" - -gUnknown_08624078:: @ 8624078 - .incbin "graphics/pokenav/ribbons_icon5.gbapal" - -gUnknown_08624098:: @ 8624098 - .incbin "graphics/pokenav/8624098.gbapal" - -gUnknown_086240B8:: @ 86240B8 - .incbin "graphics/pokenav/ribbons_icon.4bpp.lz" - -gUnknown_08624280:: @ 8624280 - .incbin "graphics/pokenav/ribbons_icon_big.4bpp.lz" - -gUnknown_08624B98:: @ 8624B98 - .4byte 0x107D - .4byte 0x2066 - -gUnknown_08624BA0:: @ 8624BA0 - .4byte NULL - .4byte sub_81D0C84 - .4byte sub_81D0D2C - .4byte sub_81D0D8C - .4byte sub_81D0E00 - .4byte sub_81D0C54 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/specials.inc b/data/specials.inc index 78a949df5..ba93b098d 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -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 diff --git a/data/text/gift_ribbon_descriptions.inc b/data/text/gift_ribbon_descriptions.inc deleted file mode 100644 index 47e004d67..000000000 --- a/data/text/gift_ribbon_descriptions.inc +++ /dev/null @@ -1,207 +0,0 @@ -gGiftRibbonDescriptionPart1_2003RegionalTourney:: @ 8623A74 - .string "2003 REGIONAL TOURNEY$" - -gGiftRibbonDescriptionPart2_Champion:: @ 8623A8A - .string "CHAMPION RIBBON$" - -gGiftRibbonDescriptionPart1_2003NationalTourney:: @ 8623A9A - .string "2003 NATIONAL TOURNEY$" - -gGiftRibbonDescriptionPart1_2003GlobalCup:: @ 8623AB0 - .string "2003 GLOBAL CUP$" - -gGiftRibbonDescriptionPart2_RunnerUp:: @ 8623AC0 - .string "Runner-up RIBBON$" - -gGiftRibbonDescriptionPart2_Semifinalist:: @ 8623AD1 - .string "Semifinalist RIBBON$" - -gGiftRibbonDescriptionPart1_2004RegionalTourney:: @ 8623AE5 - .string "2004 REGIONAL TOURNEY$" - -gGiftRibbonDescriptionPart1_2004NationalTourney:: @ 8623AFB - .string "2004 NATIONAL TOURNEY$" - -gGiftRibbonDescriptionPart1_2004GlobalCup:: @ 8623B11 - .string "2004 GLOBAL CUP$" - -gGiftRibbonDescriptionPart1_2005RegionalTourney:: @ 8623B21 - .string "2005 REGIONAL TOURNEY$" - -gGiftRibbonDescriptionPart1_2005NationalTourney:: @ 8623B37 - .string "2005 NATIONAL TOURNEY$" - -gGiftRibbonDescriptionPart1_2005GlobalCup:: @ 8623B4D - .string "2005 GLOBAL CUP$" - -gGiftRibbonDescriptionPart1_PokemonBattleCup:: @ 8623B5D - .string "POKéMON BATTLE CUP$" - -gGiftRibbonDescriptionPart2_Participation:: @ 8623B70 - .string "Participation RIBBON$" - -gGiftRibbonDescriptionPart1_PokemonLeague:: @ 8623B85 - .string "POKéMON LEAGUE$" - -gGiftRibbonDescriptionPart1_AdvanceCup:: @ 8623B94 - .string "ADVANCE CUP$" - -gGiftRibbonDescriptionPart1_PokemonTournament:: @ 8623BA0 - .string "POKéMON Tournament$" - -gGiftRibbonDescriptionPart2_Participation2:: @ 8623BB3 - .string "Participation RIBBON$" - -gGiftRibbonDescriptionPart1_PokemonEvent:: @ 8623BC8 - .string "POKéMON Event$" - -gGiftRibbonDescriptionPart1_PokemonFestival:: @ 8623BD6 - .string "POKéMON Festival$" - -gGiftRibbonDescriptionPart1_DifficultyClearing:: @ 8623BE7 - .string "Difficulty-clearing$" - -gGiftRibbonDescriptionPart2_Commemorative:: @ 8623BFB - .string "Commemorative RIBBON$" - -gGiftRibbonDescriptionPart1_ClearingAllChallenges:: @ 8623C10 - .string "RIBBON awarded for$" - -gGiftRibbonDescriptionPart2_ClearingAllChallenges:: @ 8623C23 - .string "clearing all challenges.$" - -gGiftRibbonDescriptionPart1_100StraightWin:: @ 8623C3C - .string "100-straight Win$" - -gGiftRibbonDescriptionPart1_DarknessTower:: @ 8623C4D - .string "DARKNESS TOWER Clear$" - -gGiftRibbonDescriptionPart1_RedTower:: @ 8623C62 - .string "RED TOWER Clear$" - -gGiftRibbonDescriptionPart1_BlackironTower:: @ 8623C72 - .string "BLACKIRON TOWER Clear$" - -gGiftRibbonDescriptionPart1_FinalTower:: @ 8623C88 - .string "FINAL TOWER Clear$" - -gGiftRibbonDescriptionPart1_LegendMaking:: @ 8623C9A - .string "Legend-making$" - -gGiftRibbonDescriptionPart1_PokemonCenterTokyo:: @ 8623CA8 - .string "POKéMON CENTER TOKYO$" - -gGiftRibbonDescriptionPart1_PokemonCenterOsaka:: @ 8623CBD - .string "POKéMON CENTER OSAKA$" - -gGiftRibbonDescriptionPart1_PokemonCenterNagoya:: @ 8623CD2 - .string "POKéMON CENTER NAGOYA$" - -gGiftRibbonDescriptionPart1_PokemonCenterNY:: @ 8623CE8 - .string "POKéMON CENTER NY$" - -gGiftRibbonDescriptionPart1_SummerHolidays:: @ 8623CFA - .string "Summer Holidays RIBBON$" - -gGiftRibbonDescriptionPart2_EmptyString:: @ 8623D11 - .string "$" - -gGiftRibbonDescriptionPart1_WinterHolidays:: @ 8623D12 - .string "Winter Holidays RIBBON$" - -gGiftRibbonDescriptionPart1_SpringHolidays:: @ 8623D29 - .string "Spring Holidays RIBBON$" - -gGiftRibbonDescriptionPart1_Evergreen:: @ 8623D40 - .string "Evergreen RIBBON$" - -gGiftRibbonDescriptionPart1_SpecialHoliday:: @ 8623D51 - .string "Special Holiday RIBBON$" - -gGiftRibbonDescriptionPart1_HardWorker:: @ 8623D68 - .string "Hard Worker RIBBON$" - -gGiftRibbonDescriptionPart1_LotsOfFriends:: @ 8623D7B - .string "Lots of Friends RIBBON$" - -gGiftRibbonDescriptionPart1_FullOfEnergy:: @ 8623D92 - .string "Full of Energy RIBBON$" - -gGiftRibbonDescriptionPart1_LovedPokemon:: @ 8623DA8 - .string "A commemorative RIBBON$" - -gGiftRibbonDescriptionPart2_LovedPokemon:: @ 8623DBF - .string "for a loved POKéMON.$" - -gGiftRibbonDescriptionPart1_LoveForPokemon:: @ 8623DD4 - .string "RIBBON that shows$" - -gGiftRibbonDescriptionPart2_LoveForPokemon:: @ 8623DE6 - .string "love for POKéMON.$" - - .align 2 -gGiftRibbonDescriptionPointers:: @ 8623DF8 - .4byte gGiftRibbonDescriptionPart1_2003RegionalTourney, gGiftRibbonDescriptionPart2_Champion - .4byte gGiftRibbonDescriptionPart1_2003NationalTourney, gGiftRibbonDescriptionPart2_Champion - .4byte gGiftRibbonDescriptionPart1_2003GlobalCup, gGiftRibbonDescriptionPart2_Champion - .4byte gGiftRibbonDescriptionPart1_2003RegionalTourney, gGiftRibbonDescriptionPart2_RunnerUp - .4byte gGiftRibbonDescriptionPart1_2003NationalTourney, gGiftRibbonDescriptionPart2_RunnerUp - .4byte gGiftRibbonDescriptionPart1_2003GlobalCup, gGiftRibbonDescriptionPart2_RunnerUp - .4byte gGiftRibbonDescriptionPart1_2003RegionalTourney, gGiftRibbonDescriptionPart2_Semifinalist - .4byte gGiftRibbonDescriptionPart1_2003NationalTourney, gGiftRibbonDescriptionPart2_Semifinalist - .4byte gGiftRibbonDescriptionPart1_2003GlobalCup, gGiftRibbonDescriptionPart2_Semifinalist - .4byte gGiftRibbonDescriptionPart1_2004RegionalTourney, gGiftRibbonDescriptionPart2_Champion - .4byte gGiftRibbonDescriptionPart1_2004NationalTourney, gGiftRibbonDescriptionPart2_Champion - .4byte gGiftRibbonDescriptionPart1_2004GlobalCup, gGiftRibbonDescriptionPart2_Champion - .4byte gGiftRibbonDescriptionPart1_2004RegionalTourney, gGiftRibbonDescriptionPart2_RunnerUp - .4byte gGiftRibbonDescriptionPart1_2004NationalTourney, gGiftRibbonDescriptionPart2_RunnerUp - .4byte gGiftRibbonDescriptionPart1_2004GlobalCup, gGiftRibbonDescriptionPart2_RunnerUp - .4byte gGiftRibbonDescriptionPart1_2004RegionalTourney, gGiftRibbonDescriptionPart2_Semifinalist - .4byte gGiftRibbonDescriptionPart1_2004NationalTourney, gGiftRibbonDescriptionPart2_Semifinalist - .4byte gGiftRibbonDescriptionPart1_2004GlobalCup, gGiftRibbonDescriptionPart2_Semifinalist - .4byte gGiftRibbonDescriptionPart1_2005RegionalTourney, gGiftRibbonDescriptionPart2_Champion - .4byte gGiftRibbonDescriptionPart1_2005NationalTourney, gGiftRibbonDescriptionPart2_Champion - .4byte gGiftRibbonDescriptionPart1_2005GlobalCup, gGiftRibbonDescriptionPart2_Champion - .4byte gGiftRibbonDescriptionPart1_2005RegionalTourney, gGiftRibbonDescriptionPart2_RunnerUp - .4byte gGiftRibbonDescriptionPart1_2005NationalTourney, gGiftRibbonDescriptionPart2_RunnerUp - .4byte gGiftRibbonDescriptionPart1_2005GlobalCup, gGiftRibbonDescriptionPart2_RunnerUp - .4byte gGiftRibbonDescriptionPart1_2005RegionalTourney, gGiftRibbonDescriptionPart2_Semifinalist - .4byte gGiftRibbonDescriptionPart1_2005NationalTourney, gGiftRibbonDescriptionPart2_Semifinalist - .4byte gGiftRibbonDescriptionPart1_2005GlobalCup, gGiftRibbonDescriptionPart2_Semifinalist - .4byte gGiftRibbonDescriptionPart1_PokemonBattleCup, gGiftRibbonDescriptionPart2_Champion - .4byte gGiftRibbonDescriptionPart1_PokemonBattleCup, gGiftRibbonDescriptionPart2_RunnerUp - .4byte gGiftRibbonDescriptionPart1_PokemonBattleCup, gGiftRibbonDescriptionPart2_Semifinalist - .4byte gGiftRibbonDescriptionPart1_PokemonBattleCup, gGiftRibbonDescriptionPart2_Participation - .4byte gGiftRibbonDescriptionPart1_PokemonLeague, gGiftRibbonDescriptionPart2_Champion - .4byte gGiftRibbonDescriptionPart1_PokemonLeague, gGiftRibbonDescriptionPart2_RunnerUp - .4byte gGiftRibbonDescriptionPart1_PokemonLeague, gGiftRibbonDescriptionPart2_Semifinalist - .4byte gGiftRibbonDescriptionPart1_PokemonLeague, gGiftRibbonDescriptionPart2_Participation - .4byte gGiftRibbonDescriptionPart1_AdvanceCup, gGiftRibbonDescriptionPart2_Champion - .4byte gGiftRibbonDescriptionPart1_AdvanceCup, gGiftRibbonDescriptionPart2_RunnerUp - .4byte gGiftRibbonDescriptionPart1_AdvanceCup, gGiftRibbonDescriptionPart2_Semifinalist - .4byte gGiftRibbonDescriptionPart1_AdvanceCup, gGiftRibbonDescriptionPart2_Participation - .4byte gGiftRibbonDescriptionPart1_PokemonTournament, gGiftRibbonDescriptionPart2_Participation2 - .4byte gGiftRibbonDescriptionPart1_PokemonEvent, gGiftRibbonDescriptionPart2_Participation2 - .4byte gGiftRibbonDescriptionPart1_PokemonFestival, gGiftRibbonDescriptionPart2_Participation2 - .4byte gGiftRibbonDescriptionPart1_DifficultyClearing, gGiftRibbonDescriptionPart2_Commemorative - .4byte gGiftRibbonDescriptionPart1_ClearingAllChallenges, gGiftRibbonDescriptionPart2_ClearingAllChallenges - .4byte gGiftRibbonDescriptionPart1_100StraightWin, gGiftRibbonDescriptionPart2_Commemorative - .4byte gGiftRibbonDescriptionPart1_DarknessTower, gGiftRibbonDescriptionPart2_Commemorative - .4byte gGiftRibbonDescriptionPart1_RedTower, gGiftRibbonDescriptionPart2_Commemorative - .4byte gGiftRibbonDescriptionPart1_BlackironTower, gGiftRibbonDescriptionPart2_Commemorative - .4byte gGiftRibbonDescriptionPart1_FinalTower, gGiftRibbonDescriptionPart2_Commemorative - .4byte gGiftRibbonDescriptionPart1_LegendMaking, gGiftRibbonDescriptionPart2_Commemorative - .4byte gGiftRibbonDescriptionPart1_PokemonCenterTokyo, gGiftRibbonDescriptionPart2_Commemorative - .4byte gGiftRibbonDescriptionPart1_PokemonCenterOsaka, gGiftRibbonDescriptionPart2_Commemorative - .4byte gGiftRibbonDescriptionPart1_PokemonCenterNagoya, gGiftRibbonDescriptionPart2_Commemorative - .4byte gGiftRibbonDescriptionPart1_PokemonCenterNY, gGiftRibbonDescriptionPart2_Commemorative - .4byte gGiftRibbonDescriptionPart1_SummerHolidays, gGiftRibbonDescriptionPart2_EmptyString - .4byte gGiftRibbonDescriptionPart1_WinterHolidays, gGiftRibbonDescriptionPart2_EmptyString - .4byte gGiftRibbonDescriptionPart1_SpringHolidays, gGiftRibbonDescriptionPart2_EmptyString - .4byte gGiftRibbonDescriptionPart1_Evergreen, gGiftRibbonDescriptionPart2_EmptyString - .4byte gGiftRibbonDescriptionPart1_SpecialHoliday, gGiftRibbonDescriptionPart2_EmptyString - .4byte gGiftRibbonDescriptionPart1_HardWorker, gGiftRibbonDescriptionPart2_EmptyString - .4byte gGiftRibbonDescriptionPart1_LotsOfFriends, gGiftRibbonDescriptionPart2_EmptyString - .4byte gGiftRibbonDescriptionPart1_FullOfEnergy, gGiftRibbonDescriptionPart2_EmptyString - .4byte gGiftRibbonDescriptionPart1_LovedPokemon, gGiftRibbonDescriptionPart2_LovedPokemon - .4byte gGiftRibbonDescriptionPart1_LoveForPokemon, gGiftRibbonDescriptionPart2_LoveForPokemon 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/text/ribbon_descriptions.inc b/data/text/ribbon_descriptions.inc deleted file mode 100644 index 6dd82c288..000000000 --- a/data/text/ribbon_descriptions.inc +++ /dev/null @@ -1,84 +0,0 @@ -gRibbonDescriptionPart1_Champion:: @ 862383C - .string "CHAMPION-beating, HALL$" - -gRibbonDescriptionPart2_Champion:: @ 8623853 - .string "OF FAME Member RIBBON$" - -gRibbonDescriptionPart1_CoolContest:: @ 8623869 - .string "COOL CONTEST$" - -gRibbonDescriptionPart1_BeautyContest:: @ 8623876 - .string "BEAUTY CONTEST$" - -gRibbonDescriptionPart1_CuteContest:: @ 8623885 - .string "CUTE CONTEST$" - -gRibbonDescriptionPart1_SmartContest:: @ 8623892 - .string "SMART CONTEST$" - -gRibbonDescriptionPart1_ToughContest:: @ 86238A0 - .string "TOUGH CONTEST$" - -gRibbonDescriptionPart2_NormalRank:: @ 86238AE - .string "Normal Rank winner!$" - -gRibbonDescriptionPart2_SuperRank:: @ 86238C2 - .string "Super Rank winner!$" - -gRibbonDescriptionPart2_HyperRank:: @ 86238D5 - .string "Hyper Rank winner!$" - -gRibbonDescriptionPart2_MasterRank:: @ 86238E8 - .string "Master Rank winner!$" - -gRibbonDescriptionPart1_Winning:: @ 86238FC - .string "For clearing LV50$" - -gRibbonDescriptionPart2_Winning:: @ 862390E - .string "at the BATTLE TOWER.$" - -gRibbonDescriptionPart1_Victory:: @ 8623923 - .string "For clearing Open Level$" - -gRibbonDescriptionPart2_Victory:: @ 862393B - .string "at the BATTLE TOWER.$" - -gRibbonDescriptionPart1_Artist:: @ 8623950 - .string "RIBBON for being chosen$" - -gRibbonDescriptionPart2_Artist:: @ 8623968 - .string "as a super sketch model.$" - -gRibbonDescriptionPart1_Effort:: @ 8623981 - .string "RIBBON awarded for$" - -gRibbonDescriptionPart2_Effort:: @ 8623994 - .string "being a hard worker.$" - - .align 2 -gRibbonDescriptionPointers:: @ 86239AC - .4byte gRibbonDescriptionPart1_Champion, gRibbonDescriptionPart2_Champion - .4byte gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_NormalRank - .4byte gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_SuperRank - .4byte gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_HyperRank - .4byte gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_MasterRank - .4byte gRibbonDescriptionPart1_BeautyContest, gRibbonDescriptionPart2_NormalRank - .4byte gRibbonDescriptionPart1_BeautyContest, gRibbonDescriptionPart2_SuperRank - .4byte gRibbonDescriptionPart1_BeautyContest, gRibbonDescriptionPart2_HyperRank - .4byte gRibbonDescriptionPart1_BeautyContest, gRibbonDescriptionPart2_MasterRank - .4byte gRibbonDescriptionPart1_CuteContest, gRibbonDescriptionPart2_NormalRank - .4byte gRibbonDescriptionPart1_CuteContest, gRibbonDescriptionPart2_SuperRank - .4byte gRibbonDescriptionPart1_CuteContest, gRibbonDescriptionPart2_HyperRank - .4byte gRibbonDescriptionPart1_CuteContest, gRibbonDescriptionPart2_MasterRank - .4byte gRibbonDescriptionPart1_SmartContest, gRibbonDescriptionPart2_NormalRank - .4byte gRibbonDescriptionPart1_SmartContest, gRibbonDescriptionPart2_SuperRank - .4byte gRibbonDescriptionPart1_SmartContest, gRibbonDescriptionPart2_HyperRank - .4byte gRibbonDescriptionPart1_SmartContest, gRibbonDescriptionPart2_MasterRank - .4byte gRibbonDescriptionPart1_ToughContest, gRibbonDescriptionPart2_NormalRank - .4byte gRibbonDescriptionPart1_ToughContest, gRibbonDescriptionPart2_SuperRank - .4byte gRibbonDescriptionPart1_ToughContest, gRibbonDescriptionPart2_HyperRank - .4byte gRibbonDescriptionPart1_ToughContest, gRibbonDescriptionPart2_MasterRank - .4byte gRibbonDescriptionPart1_Winning, gRibbonDescriptionPart2_Winning - .4byte gRibbonDescriptionPart1_Victory, gRibbonDescriptionPart2_Victory - .4byte gRibbonDescriptionPart1_Artist, gRibbonDescriptionPart2_Artist - .4byte gRibbonDescriptionPart1_Effort, gRibbonDescriptionPart2_Effort diff --git a/data/use_pokeblock.s b/data/use_pokeblock.s deleted file mode 100644 index dc2c7bd70..000000000 --- a/data/use_pokeblock.s +++ /dev/null @@ -1,113 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -.align 4 - -gUnknown_085DFA60:: @ 85DFA60 - .incbin "graphics/interface/85DFA60.bin" - -gUnknown_085DFA80:: @ 85DFA80 - .incbin "graphics/interface/85DFA80.4bpp" - -gUnknown_085DFB60:: @ 85DFB60 - .incbin "graphics/interface/85DFB60.bin" - -gUnknown_085DFC0C:: @ 85DFC0C - .incbin "graphics/interface/85DFC0C.bin" - -gUnknown_085DFCB0:: @ 85DFCB0 - .4byte 22, 47, 33, 24, 23 - -gUnknown_085DFCC4:: @ 85DFCC4 - .byte 0, 4, 3, 2, 1 - -gUnknown_085DFCC9:: @ 85DFCC9 - .byte 0, 8, 1 - -gUnknown_085DFCCC:: @ 85DFCCC - .4byte 0x1F8 - .4byte 0x31E1 - .4byte 0x4021DF - .4byte 0x1172 - -gUnknown_085DFCDC:: @ 85DFCDC - window_template 0, 0xD, 1, 0xD, 4, 0xF, 1 - window_template 0, 0, 0xE, 0xB, 2, 0xF, 0x35 - window_template 0, 1, 0x11, 0x1C, 2, 0xF, 0x4B - null_window_template - -sUsePokeblockYesNoWinTemplate:: @ 85DFCFC - window_template 0, 0x18, 0xB, 5, 4, 0xF, 0x83 - -sContestStatNames:: @ 85DFD04 - .4byte gText_Coolness - .4byte gText_Toughness - .4byte gText_Smartness - .4byte gText_Cuteness - .4byte gText_Beauty3 - -gSpriteSheet_ConditionUpDown:: @ 85DFD18 - obj_tiles gUsePokeblockUpDown_Gfx, 0x200, 0 - -gSpritePalette_ConditionUpDown:: @ 85DFD20 - obj_pal gUsePokeblockUpDown_Pal, 0 - -gUnknown_085DFD28:: @ 85DFD28 - .2byte 0x9c, 0x24 - .2byte 0x75, 0x3b - .2byte 0x75, 0x76 - .2byte 0xc5, 0x76 - .2byte 0xc5, 0x3b - -gUnknown_085DFD3C:: @ 85DFD3C - .2byte 0x4000 - .2byte 0x8000 - .2byte 0x400 - .2byte 0 - -gUnknown_085DFD44:: @ 85DFD44 - obj_image_anim_frame 0, 5 - obj_image_anim_end - -gUnknown_085DFD4C:: @ 85DFD4C - obj_image_anim_frame 8, 5 - obj_image_anim_end - -gUnknown_085DFD54:: @ 85DFD54 - .4byte gUnknown_085DFD44 - .4byte gUnknown_085DFD4C - -gSpriteTemplate_085DFD5C:: @ 85DFD5C - spr_template 0, 0, gUnknown_085DFD3C, gUnknown_085DFD54, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_085DFD74:: @ 85DFD74 - .2byte 0x4000 - .2byte 0xC000 - .2byte 0x400 - .2byte 0 - -gUnknown_085DFD7C:: @ 85DFD7C - obj_image_anim_frame 0, 5 - obj_image_anim_end - -gUnknown_085DFD84:: @ 85DFD84 - obj_image_anim_frame 32, 5 - obj_image_anim_end - -gUnknown_085DFD8C:: @ 85DFD8C - obj_image_anim_frame 64, 5 - obj_image_anim_end - -gUnknown_085DFD94:: @ 85DFD94 - .4byte gUnknown_085DFD7C - .4byte gUnknown_085DFD84 - .4byte gUnknown_085DFD8C - -gUnknown_085DFDA0:: @ 85DFDA0 - spr_template 1, 1, gUnknown_085DFD74, gUnknown_085DFD94, NULL, gDummySpriteAffineAnimTable, sub_8168374 - -gUnknown_085DFDB8:: @ 85DFDB8 - .4byte gUsePokeblockCondition_Pal - .4byte 1 diff --git a/graphics/pokenav/city_maps/lilycove_0.bin b/graphics/pokenav/city_maps/lilycove_0.bin index e8bf09eae..99895574d 100644 --- a/graphics/pokenav/city_maps/lilycove_0.bin +++ b/graphics/pokenav/city_maps/lilycove_0.bin @@ -1 +1,3 @@ -0000000000000000000000000000000 0
0000000000000000000
00000000000000000000
00000000000000000000000000000
\ No newline at end of file +000000000000000000000000000000000 0 0 0 00 000000000 +00000 0 0 0 0 00 000000000 +000000 0 0 0 00 0000000000000000000000
\ No newline at end of file diff --git a/graphics/pokenav/city_maps/lilycove_1.bin b/graphics/pokenav/city_maps/lilycove_1.bin index 99895574d..e8bf09eae 100644 --- a/graphics/pokenav/city_maps/lilycove_1.bin +++ b/graphics/pokenav/city_maps/lilycove_1.bin @@ -1,3 +1 @@ -000000000000000000000000000000000 0 0 0 00 000000000 -00000 0 0 0 0 00 000000000 -000000 0 0 0 00 0000000000000000000000
\ No newline at end of file +0000000000000000000000000000000 0
0000000000000000000
00000000000000000000
00000000000000000000000000000
\ No newline at end of file diff --git a/graphics/pokenav/city_maps/mauville_0.bin b/graphics/pokenav/city_maps/mauville_0.bin index 103d39e54..a0662010a 100644 --- a/graphics/pokenav/city_maps/mauville_0.bin +++ b/graphics/pokenav/city_maps/mauville_0.bin @@ -1,3 +1,3 @@ -000000000000000000000000000000000000000000 00 00 0
000000 -0000000000 -00000000 0 00
00000000000000000000000000
\ No newline at end of file +000000000000000000000000000000000000 +000000000 00 0 000000 +00000000000000000000000 0 0000000000000000000000
\ No newline at end of file diff --git a/graphics/pokenav/city_maps/mauville_1.bin b/graphics/pokenav/city_maps/mauville_1.bin index a0662010a..103d39e54 100644 --- a/graphics/pokenav/city_maps/mauville_1.bin +++ b/graphics/pokenav/city_maps/mauville_1.bin @@ -1,3 +1,3 @@ -000000000000000000000000000000000000 -000000000 00 0 000000 -00000000000000000000000 0 0000000000000000000000
\ No newline at end of file +000000000000000000000000000000000000000000 00 00 0
000000 +0000000000 +00000000 0 00
00000000000000000000000000
\ No newline at end of file diff --git a/graphics/pokenav/city_maps/mossdeep_0.bin b/graphics/pokenav/city_maps/mossdeep_0.bin index fd03cfe02..6c11d5624 100644 --- a/graphics/pokenav/city_maps/mossdeep_0.bin +++ b/graphics/pokenav/city_maps/mossdeep_0.bin @@ -1 +1,3 @@ -0000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 00000000000000000
\ No newline at end of file +00000000000000000000000000 0
00000000 +0000000000 +000000000 000000000000 0 000000000000000000000000000000000
\ No newline at end of file diff --git a/graphics/pokenav/city_maps/mossdeep_1.bin b/graphics/pokenav/city_maps/mossdeep_1.bin index 6c11d5624..fd03cfe02 100644 --- a/graphics/pokenav/city_maps/mossdeep_1.bin +++ b/graphics/pokenav/city_maps/mossdeep_1.bin @@ -1,3 +1 @@ -00000000000000000000000000 0
00000000 -0000000000 -000000000 000000000000 0 000000000000000000000000000000000
\ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 00000000000000000
\ No newline at end of file diff --git a/include/battle_message.h b/include/battle_message.h index 5d811fe69..88ccbb90f 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -154,7 +154,7 @@ { \ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ textVar[1] = B_BUFF_MOVE; \ - textVar[2] = move; \ + textVar[2] = (move & 0xFF); \ textVar[3] = (move & 0xFF00) >> 8; \ textVar[4] = B_BUFF_EOS; \ } diff --git a/include/berry_crush.h b/include/berry_crush.h index 101450a33..8909ae821 100755 --- a/include/berry_crush.h +++ b/include/berry_crush.h @@ -1,6 +1,8 @@ #ifndef GUARD_BERRY_CRUSH_H #define GUARD_BERRY_CRUSH_H +#include "main.h" + void sub_8020C70(MainCallback callback); #endif // GUARD_BERRY_CRUSH_H diff --git a/include/bg.h b/include/bg.h index ad5acd0ae..3c7eee292 100644 --- a/include/bg.h +++ b/include/bg.h @@ -27,13 +27,13 @@ enum struct BgTemplate { - u32 bg:2; // 0x1, 0x2 -> 0x3 - u32 charBaseIndex:2; // 0x4, 0x8 -> 0xC - u32 mapBaseIndex:5; // 0x10, 0x20, 0x40, 0x80, 0x100 -> 0x1F0 - u32 screenSize:2; // 0x200, 0x400 -> 0x600 - u32 paletteMode:1; // 0x800 - u32 priority:2; // 0x1000, 0x2000 > 0x3000 - u32 baseTile:10; + u16 bg:2; // 0x1, 0x2 -> 0x3 + u16 charBaseIndex:2; // 0x4, 0x8 -> 0xC + u16 mapBaseIndex:5; // 0x10, 0x20, 0x40, 0x80, 0x100 -> 0x1F0 + u16 screenSize:2; // 0x200, 0x400 -> 0x600 + u16 paletteMode:1; // 0x800 + u16 priority:2; // 0x1000, 0x2000 > 0x3000 + u16 baseTile:10; }; void ResetBgs(void); 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/global.h b/include/constants/global.h index ff28d6a4b..a862ecad2 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -50,6 +50,8 @@ #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 + // string lengths #define ITEM_NAME_LENGTH 14 #define POKEMON_NAME_LENGTH 10 @@ -74,4 +76,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/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 f63d755ad..5d0e562bc 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -82,4 +82,7 @@ #define NUM_STATS 6 #define NUM_BATTLE_STATS 8 +// Shiny odds +#define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536 + #endif // GUARD_CONSTANTS_POKEMON_H diff --git a/include/constants/vars.h b/include/constants/vars.h index 6fd1c16dd..6b213c8cc 100644 --- a/include/constants/vars.h +++ b/include/constants/vars.h @@ -94,56 +94,56 @@ #define VAR_POKELOT_PRIZE_PLACE 0x404D #define VAR_UNUSED_0x404E 0x404E // Unused Var #define VAR_LOTAD_SIZE_RECORD 0x404F -#define VAR_0x4050 0x4050 -#define VAR_ROUTE102_ACCESSIBLE 0x4051 -#define VAR_UNUSED_0x4052 0x4052 // Unused Var -#define VAR_LAVARIDGE_RIVAL_STATE 0x4053 -#define VAR_CURRENT_SECRET_BASE 0x4054 -#define VAR_UNUSED_0x4055 0x4055 // Unused Var -#define VAR_UNUSED_0x4056 0x4056 // Unused Var -#define VAR_PETALBURG_STATE 0x4057 -#define VAR_SLATEPORT_STATE 0x4058 -#define VAR_UNUSED_0x4059 0x4059 // Unused Var -#define VAR_RUSTBORO_STATE 0x405A -#define VAR_UNUSED_0x405B 0x405B // Unused Var -#define VAR_UNUSED_0x405C 0x405C // Unused Var -#define VAR_MOSSDEEP_STATE 0x405D -#define VAR_RAYQUAZA_STATE 0x405E -#define VAR_UNUSED_0x405F 0x405F // Unused Var +#define VAR_LITTLEROOT_TOWN_STATE 0x4050 +#define VAR_OLDALE_TOWN_STATE 0x4051 +#define VAR_DEWFORD_TOWN_STATE 0x4052 // Unused Var +#define VAR_LAVARIDGE_TOWN_STATE 0x4053 +#define VAR_CURRENT_SECRET_BASE 0x4054 // was probably allocated for VAR_FALLARBOR_TOWN_STATE at one point +#define VAR_VERDANTURF_TOWN_STATE 0x4055 // Unused Var +#define VAR_PACIFIDLOG_TOWN_STATE 0x4056 // Unused Var +#define VAR_PETALBURG_CITY_STATE 0x4057 +#define VAR_SLATEPORT_CITY_STATE 0x4058 +#define VAR_MAUVILLE_CITY_STATE 0x4059 // Unused Var +#define VAR_RUSTBORO_CITY_STATE 0x405A +#define VAR_FORTREE_CITY_STATE 0x405B // Unused Var +#define VAR_LILYCOVE_CITY_STATE 0x405C // Unused Var +#define VAR_MOSSDEEP_CITY_STATE 0x405D +#define VAR_SOOTOPOLIS_CITY_STATE 0x405E +#define VAR_EVER_GRANDE_CITY_STATE 0x405F // Unused Var #define VAR_ROUTE101_STATE 0x4060 -#define VAR_UNUSED_0x4061 0x4061 // Unused Var -#define VAR_UNUSED_0x4062 0x4062 // Unused Var -#define VAR_0x4063 0x4063 -#define VAR_UNUSED_0x4064 0x4064 // Unused Var -#define VAR_UNUSED_0x4065 0x4065 // Unused Var -#define VAR_UNUSED_0x4066 0x4066 // Unused Var -#define VAR_UNUSED_0x4067 0x4067 // Unused Var -#define VAR_UNUSED_0x4068 0x4068 // Unused Var +#define VAR_ROUTE102_STATE 0x4061 // Unused Var +#define VAR_ROUTE103_STATE 0x4062 // Unused Var +#define VAR_ROUTE104_STATE 0x4063 +#define VAR_ROUTE105_STATE 0x4064 // Unused Var +#define VAR_ROUTE106_STATE 0x4065 // Unused Var +#define VAR_ROUTE107_STATE 0x4066 // Unused Var +#define VAR_ROUTE108_STATE 0x4067 // Unused Var +#define VAR_ROUTE109_STATE 0x4068 // Unused Var #define VAR_ROUTE110_STATE 0x4069 -#define VAR_UNUSED_0x406A 0x406A // Unused Var -#define VAR_UNUSED_0x406B 0x406B // Unused Var -#define VAR_UNUSED_0x406C 0x406C // Unused Var -#define VAR_UNUSED_0x406D 0x406D // Unused Var -#define VAR_UNUSED_0x406E 0x406E // Unused Var +#define VAR_ROUTE111_STATE 0x406A // Unused Var +#define VAR_ROUTE112_STATE 0x406B // Unused Var +#define VAR_ROUTE113_STATE 0x406C // Unused Var +#define VAR_ROUTE114_STATE 0x406D // Unused Var +#define VAR_ROUTE115_STATE 0x406E // Unused Var #define VAR_ROUTE116_STATE 0x406F -#define VAR_UNUSED_0x4070 0x4070 // Unused Var +#define VAR_ROUTE117_STATE 0x4070 // Unused Var #define VAR_ROUTE118_STATE 0x4071 #define VAR_ROUTE119_STATE 0x4072 -#define VAR_UNUSED_0x4073 0x4073 // Unused Var +#define VAR_ROUTE120_STATE 0x4073 // Unused Var #define VAR_ROUTE121_STATE 0x4074 -#define VAR_UNUSED_0x4075 0x4075 // Unused Var -#define VAR_UNUSED_0x4076 0x4076 // Unused Var -#define VAR_UNUSED_0x4077 0x4077 // Unused Var -#define VAR_UNUSED_0x4078 0x4078 // Unused Var -#define VAR_UNUSED_0x4079 0x4079 // Unused Var -#define VAR_UNUSED_0x407A 0x407A // Unused Var +#define VAR_ROUTE122_STATE 0x4075 // Unused Var +#define VAR_ROUTE123_STATE 0x4076 // Unused Var +#define VAR_ROUTE124_STATE 0x4077 // Unused Var +#define VAR_ROUTE125_STATE 0x4078 // Unused Var +#define VAR_ROUTE126_STATE 0x4079 // Unused Var +#define VAR_ROUTE127_STATE 0x407A // Unused Var #define VAR_ROUTE128_STATE 0x407B -#define VAR_UNUSED_0x407C 0x407C // Unused Var -#define VAR_UNUSED_0x407D 0x407D // Unused Var -#define VAR_UNUSED_0x407E 0x407E // Unused Var -#define VAR_UNUSED_0x407F 0x407F // Unused Var -#define VAR_UNUSED_0x4080 0x4080 // Unused Var -#define VAR_UNUSED_0x4081 0x4081 // Unused Var +#define VAR_ROUTE129_STATE 0x407C // Unused Var +#define VAR_ROUTE130_STATE 0x407D // Unused Var +#define VAR_ROUTE131_STATE 0x407E // Unused Var +#define VAR_ROUTE132_STATE 0x407F // Unused Var +#define VAR_ROUTE133_STATE 0x4080 // Unused Var +#define VAR_ROUTE134_STATE 0x4081 // Unused Var #define VAR_LITTLEROOT_HOUSES_STATE 0x4082 #define VAR_UNUSED_0x4083 0x4083 // Unused Var #define VAR_BIRCH_LAB_STATE 0x4084 @@ -156,7 +156,7 @@ #define VAR_UNUSED_0x408B 0x408B // Unused Var #define VAR_LITTLEROOT_HOUSES_STATE_2 0x408C #define VAR_LITTLEROOT_RIVAL_STATE 0x408D -#define VAR_BOARD_BRINEY_BOAT_ROUTE104_STATE 0x408E +#define VAR_BOARD_BRINEY_BOAT_STATE 0x408E #define VAR_DEVON_CORP_3F_STATE 0x408F #define VAR_BRINEY_HOUSE_STATE 0x4090 #define VAR_UNUSED_0x4091 0x4091 // Unused Var @@ -165,7 +165,7 @@ #define VAR_LILYCOVE_MUSEUM_2F_STATE 0x4094 #define VAR_LILYCOVE_FAN_CLUB_STATE 0x4095 #define VAR_BRINEY_LOCATION 0x4096 -#define VAR_INIT_SECRET_BASE 0x4097 +#define VAR_INIT_SECRET_BASE 0x4097 #define VAR_PETALBURG_WOODS_STATE 0x4098 #define VAR_LILYCOVE_CONTEST_LOBBY_STATE 0x4099 #define VAR_RUSTURF_TUNNEL_STATE 0x409A @@ -213,11 +213,11 @@ #define VAR_FOSSIL_RESURRECTION_STATE 0x40C4 #define VAR_WHICH_FOSSIL_REVIVED 0x40C5 #define VAR_STEVENS_HOUSE_STATE 0x40C6 -#define VAR_OLDALE_STATE 0x40C7 +#define VAR_OLDALE_RIVAL_STATE 0x40C7 #define VAR_JAGGED_PASS_STATE 0x40C8 #define VAR_SCOTT_PETALBURG_ENCOUNTER 0x40C9 #define VAR_SKY_PILLAR_STATE 0x40CA -#define VAR_ROUTE_111_STATE 0x40CB +#define VAR_MIRAGE_TOWER_STATE 0x40CB #define VAR_FOSSIL_MANIAC_STATE 0x40CC #define VAR_CABLE_CLUB_TUTORIAL_STATE 0x40CD #define VAR_FRONTIER_BATTLE_MODE 0x40CE @@ -225,14 +225,14 @@ #define VAR_HAS_ENTERED_BATTLE_FRONTIER 0x40D0 // Var is used like a flag. #define VAR_SCOTT_STATE 0x40D1 #define VAR_SLATEPORT_OUTSIDE_MUSEUM_STATE 0x40D2 -#define VAR_0x40D3 0x40D3 +#define VAR_DEX_UPGRADE_JOHTO_STARTER_STATE 0x40D3 #define VAR_SS_TIDAL_SCOTT_STATE 0x40D4 // Always equal to FLAG_MET_SCOTT_ON_SS_TIDAL #define VAR_ROAMER_POKEMON 0x40D5 // 0 = Latias, 1 = Latios #define VAR_TRAINER_HILL_IS_ACTIVE 0x40D6 #define VAR_SKY_PILLAR_RAQUAZA_CRY_DONE 0x40D7 -#define VAR_SOOTOPOLIS_STATE 0x40D8 +#define VAR_SOOTOPOLIS_WALLACE_STATE 0x40D8 #define VAR_HAS_TALKED_TO_SEAFLOOR_CAVERN_ENTRANCE_GRUNT 0x40D9 -#define VAR_0x40DA 0x40DA +#define VAR_REGISTER_BIRCH_STATE 0x40DA #define VAR_UNUSED_0x40DB 0x40DB // Unused Var #define VAR_UNUSED_0x40DC 0x40DC // Unused Var #define VAR_EVENT_PICHU_SLOT 0x40DD diff --git a/include/contest.h b/include/contest.h index a4e209bcb..8ef208aea 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, 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/dodrio_berry_picking.h b/include/dodrio_berry_picking.h new file mode 100644 index 000000000..55e8fa880 --- /dev/null +++ b/include/dodrio_berry_picking.h @@ -0,0 +1,8 @@ +#ifndef GUARD_DODRIO_BERRY_PICKING_H +#define GUARD_DODRIO_BERRY_PICKING_H + +void sub_802493C(u16 a0, void (*callback)(void)); +void sub_8027A5C(void); +void sub_8027AAC(void); + +#endif // GUARD_DODRIO_BERRY_PICKING_H diff --git a/include/fieldmap.h b/include/fieldmap.h index 2384ed46a..be5610a46 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -23,9 +23,9 @@ int GetMapBorderIdAt(int x, int y); int CanCameraMoveInDirection(int direction); u16 GetBehaviorByMetatileId(u16 metatileId); void GetCameraFocusCoords(u16 *x, u16 *y); -u8 MapGridGetMetatileLayerTypeAt(s32 x, s32 y); +u8 MapGridGetMetatileLayerTypeAt(int x, int y); u8 MapGridGetZCoordAt(int x, int y); -u8 CameraMove(s32 deltaX, s32 deltaY); +bool8 CameraMove(int deltaX, int deltaY); struct MapConnection *sub_8088950(u8 direction, int x, int y); bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection); bool8 sub_8088A0C(int x, int src_width, int dest_width, int offset); diff --git a/include/gba/defines.h b/include/gba/defines.h index b68a2ad1e..9bd695aaa 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -6,9 +6,16 @@ #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"))) +#if MODERN +#define NOINLINE __attribute__((noinline)) +#else +#define NOINLINE +#endif + #define ALIGNED(n) __attribute__((aligned(n))) #define SOUND_INFO_PTR (*(struct SoundInfo **)0x3007FF0) 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 969680dd7..a82fe5861 100644 --- a/include/global.h +++ b/include/global.h @@ -2,6 +2,7 @@ #define GUARD_GLOBAL_H #include <string.h> +#include <limits.h> #include "config.h" // we need to define config before gba headers as print stuff needs the functions nulled before defines. #include "gba/gba.h" #include "constants/global.h" @@ -18,16 +19,23 @@ #if defined (__APPLE__) || defined (__CYGWIN__) || defined (_MSC_VER) #define _(x) x #define __(x) x -#define INCBIN_U8 {0} -#define INCBIN_U16 {0} -#define INCBIN_U32 {0} -#define INCBIN_S8 {0} -#define INCBIN_S16 {0} -#define INCBIN_S32 {0} + +// Fool CLion IDE +#define INCBIN(x) {0} +#define INCBIN_U8 INCBIN +#define INCBIN_U16 INCBIN +#define INCBIN_U32 INCBIN +#define INCBIN_S8 INCBIN +#define INCBIN_S16 INCBIN +#define INCBIN_S32 INCBIN #endif // IDE support #define ARRAY_COUNT(array) (size_t)(sizeof(array) / sizeof((array)[0])) +// GameFreak used a macro called "NELEMS", as evidenced by +// AgbAssert calls. +#define NELEMS(arr) (sizeof(arr)/sizeof(*(arr))) + #define SWAP(a, b, temp) \ { \ temp = a; \ @@ -62,6 +70,10 @@ #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) +#if MODERN +#define abs(x) (((x) < 0) ? -(x) : (x)) +#endif + // Extracts the upper 16 bits of a 32-bit number #define HIHALF(n) (((n) & 0xFFFF0000) >> 16) @@ -158,18 +170,17 @@ struct Pokedex /*0x44*/ u8 seen[DEX_FLAGS_NO]; }; -struct PokemonJumpResults // possibly used in the game itself? +struct PokemonJumpResults { u16 jumpsInRow; u16 field2; u16 excellentsInRow; u16 field6; - u16 field8; - u16 fieldA; + u32 field8; u32 bestJumpScore; }; -struct BerryPickingResults // possibly used in the game itself? Size may be wrong as well +struct BerryPickingResults { u32 bestScore; u16 berriesPicked; @@ -213,7 +224,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; @@ -252,7 +263,7 @@ struct EmeraldBattleTowerRecord /*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]; @@ -267,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]; @@ -414,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; @@ -422,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]; @@ -435,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; @@ -484,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; @@ -570,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; }; @@ -587,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*/ @@ -726,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; }; @@ -777,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]; diff --git a/include/graphics.h b/include/graphics.h index 43b014a9f..d1d99cc8f 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4005,10 +4005,13 @@ extern const u32 gBerryPalette_Starf[]; extern const u32 gBerryPic_Enigma[]; extern const u32 gBerryPalette_Enigma[]; -//credits -extern const u32 gCreditsCopyrightEnd_Gfx[]; - //pokenav +extern const u16 gPokenavCondition_Pal[]; +extern const u32 gPokenavCondition_Gfx[]; +extern const u32 gPokenavCondition_Tilemap[]; +extern const u16 gPokenavOptions_Tilemap[]; +extern const u32 gPokenavOptions_Gfx[]; +extern const u16 gPokenavOptions_Pal[]; extern const u8 gPokenavConditionMarker_Gfx[]; extern const u16 gPokenavConditionMarker_Pal[]; extern const u16 gPokenavLeftHeader_Pal[]; @@ -4027,6 +4030,9 @@ extern const u32 gPokenavLeftHeaderBeauty_Gfx[]; extern const u32 gPokenavLeftHeaderCute_Gfx[]; extern const u32 gPokenavLeftHeaderSmart_Gfx[]; extern const u32 gPokenavLeftHeaderTough_Gfx[]; +extern const u16 gUnknown_08DDE010[]; +extern const u32 gUnknown_08DDE030[]; +extern const u32 gUnknown_08DDE12C[]; extern const u32 gPageInfoTilemap[]; extern const u32 gUnknown_08D98CC8[]; @@ -4080,7 +4086,7 @@ extern const u32 gContestConfetti_Pal[]; extern const u32 gUnknown_08C093F0[]; extern const u32 gSubstituteDollTilemap[]; extern const u32 gSubstituteDollGfx[]; -extern const u16 gSubstituteDollPal[]; +extern const u32 gSubstituteDollPal[]; extern const u32 gHealthboxSinglesPlayerGfx[]; extern const u32 gHealthboxSinglesOpponentGfx[]; extern const u32 gHealthboxDoublesPlayerGfx[]; @@ -4936,9 +4942,19 @@ extern const u32 gLinkMiscMenu_Tilemap[]; // Use Pokeblock extern const u8 gPokenavConditionCancel_Gfx[]; extern const u16 gPokenavConditionCancel_Pal[]; +extern const u8 gUsePokeblockUpDown_Gfx[]; +extern const u16 gUsePokeblockUpDown_Pal[]; +extern const u16 gUsePokeblockCondition_Pal[]; // Berry Crush extern const u32 gUnknown_08DE34B8[]; extern const u16 gUnknown_08DE3398[]; +// Pokenav +extern const u32 gPokenavMessageBox_Gfx[]; +extern const u32 gPokenavMessageBox_Tilemap[]; +extern const u16 gPokenavMessageBox_Pal[]; +extern const u32 gPokenavOptions_Gfx[]; +extern const u16 gPokenavOptions_Pal[]; + #endif //GUARD_GRAPHICS_H 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/link_rfu.h b/include/link_rfu.h index dc5b963d1..d6e1009e1 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -275,10 +275,10 @@ void sub_8010FCC(u32 a0, u32 a1, u32 a2); void sub_8011C84(void); void sub_8012188(const u8 *name, struct UnkLinkRfuStruct_02022B14 *structPtr, u8 a2); bool32 sub_8011B90(void); -void sub_800FE50(u16 *a0); +void sub_800FE50(void *a0); bool32 sub_800E540(u16 id, u8 *name); void sub_8011DE0(u32 arg0); -u8 sub_801100C(int a0); +u8 sub_801100C(s32 a0); void sub_800EF7C(void); bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx); bool8 sub_800DF34(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx); diff --git a/include/menu.h b/include/menu.h index 08cad40bd..62e2558dc 100644 --- a/include/menu.h +++ b/include/menu.h @@ -25,7 +25,7 @@ void InitStandardTextBoxWindows(void); void sub_8197200(void); u16 RunTextPrintersAndIsPrinter0Active(void); void sub_81973A4(void); -void DrawDialogueFrame(u8, u8); +void DrawDialogueFrame(u8 windowId, bool8 copyToVram); void ClearStdWindowAndFrame(u8 windowId, bool8 copyToVram); u16 AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 fgColor, u8 bgColor, u8 shadowColor); void PrintPlayerNameOnWindow(u8, const u8*, u16, u16); diff --git a/include/menu_specialized.h b/include/menu_specialized.h index 014ee2585..14a246468 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -34,6 +34,7 @@ void sub_81D1EC0(void); void sub_81D1D04(u8 a0); void sub_81D1ED4(struct UnknownStruct_81D1ED4 *a0); void sub_81D2108(struct UnknownStruct_81D1ED4 *arg0); +void sub_81D21DC(u8 bg); void sub_81D20AC(struct UnknownStruct_81D1ED4 *arg0); void sub_81D2230(struct UnknownStruct_81D1ED4 *arg0); bool8 sub_81D20BC(struct UnknownStruct_81D1ED4 *arg0); diff --git a/include/player_pc.h b/include/player_pc.h index 53bb25c6b..219c11440 100644 --- a/include/player_pc.h +++ b/include/player_pc.h @@ -1,6 +1,8 @@ #ifndef GUARD_PLAYER_PC_H #define GUARD_PLAYER_PC_H +#include "menu.h" + // local task defines #define PAGE_INDEX data[0] #define ITEMS_ABOVE_TOP data[1] 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 090a21f18..ec125573c 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -506,7 +506,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); @@ -563,7 +563,7 @@ void PlayBattleBGM(void); void PlayMapChosenOrBattleBGM(u16 songId); void sub_806E694(u16 songId); const u32 *GetMonFrontSpritePal(struct Pokemon *mon); -const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality); +const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality); const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon); const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality); bool32 IsHMMove2(u16 move); diff --git a/include/pokemon_jump.h b/include/pokemon_jump.h index 9dbf194d0..28b19f9b1 100644 --- a/include/pokemon_jump.h +++ b/include/pokemon_jump.h @@ -3,9 +3,12 @@ #include "main.h" -void sub_802EB24(u8, u8, u8, u8, u8); -bool32 sub_802EB84(void); void sub_802A9A8(u16 monId, MainCallback callback); bool32 sub_802C908(u16 species); +void sub_802C920(void); +void ResetPokeJumpResults(void); +void sub_802E3C4(void); +void sub_802EB24(s16 tileTag, s16 palTag, s16 x, s16 y, u8 subpriority); +bool32 sub_802EB84(void); -#endif //GUARD_POKEMON_JUMP_H +#endif // GUARD_POKEMON_JUMP_H diff --git a/include/pokenav.h b/include/pokenav.h index c840fd494..b1c3287f1 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -3,8 +3,23 @@ #include "bg.h" #include "main.h" +#include "pokemon_storage_system.h" -typedef u32 (*LoopedTask)(int state); +typedef u32 (*LoopedTask)(s32 state); + +struct PokenavMonList +{ + u8 boxId; + u8 monId; + u16 unk6; +}; + +struct PokenavSub18 +{ + u16 unk0; + u16 unk2; + struct PokenavMonList unk4[TOTAL_BOXES_COUNT * IN_BOX_COUNT + PARTY_SIZE]; +}; // Return values of LoopedTask functions. #define LT_INC_AND_PAUSE 0 @@ -41,9 +56,35 @@ 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); -u16 sub_81C76AC(void); +u32 sub_81C76AC(void); void CB2_InitPokeNav(void); u32 CreateLoopedTask(LoopedTask loopedTask, u32 priority); @@ -62,7 +103,7 @@ void SetVBlankCallback_(IntrCallback callback); // pokenav_match_call_ui.c struct MatchCallListTemplate { - u32 unk0; + struct PokenavMonList * unk0; u16 unk4; u16 unk6; u8 unk8; @@ -72,9 +113,10 @@ struct MatchCallListTemplate u8 unkC; u8 unkD; u8 unkE; - void (*unk10)(u32, u8 *a1); + void (*unk10)(struct PokenavMonList *, u8 *a1); void (*unk14)(u16 a0, u32 a1, u32 a2); }; + u32 GetSelectedMatchCall(void); bool32 sub_81C8224(void); int MatchCall_MoveCursorUp(void); @@ -93,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); -u8 sub_81D16DC(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 @@ -111,7 +153,7 @@ void sub_81C7850(u32 a0); u32 sub_81C786C(void); void LoadLeftHeaderGfxForIndex(u32 arg0); void sub_81C7FA0(u32 arg0, bool32 arg1, bool32 arg2); -void sub_81C7AC0(int a0); +void sub_81C7AC0(s32 a0); bool32 sub_81C8010(void); void InitBgTemplates(const struct BgTemplate *templates, int count); bool32 IsPaletteFadeActive(void); @@ -125,44 +167,51 @@ void sub_81C7B40(void); struct Sprite *PauseSpinningPokenavSprite(void); void ResumeSpinningPokenavSprite(void); void sub_81C7E14(u32 arg0); +void sub_81C7FC4(u32 arg0, bool32 arg1); +void sub_81C7880(void); void sub_81C7990(u32 a0, u16 a1); +u32 PokenavMainMenuLoopedTaskIsActive(void); +bool32 WaitForPokenavShutdownFade(void); +void sub_81C7834(void *func1, void *func2); +void ShutdownPokenav(void); // pokenav_unk_1.c -bool32 sub_81C9298(void); -bool32 sub_81C92CC(void); -bool32 sub_81C9304(void); -bool32 sub_81C9338(void); -bool32 sub_81C9368(void); +bool32 PokenavCallback_Init_0(void); +bool32 PokenavCallback_Init_4(void); +bool32 PokenavCallback_Init_5(void); +bool32 PokenavCallback_Init_2(void); +bool32 PokenavCallback_Init_3(void); u32 sub_81C941C(void); void sub_81C9430(void); int sub_81C9894(void); const u8 *sub_81CAF78(int index, u8 *arg1); +int sub_81C98A4(void); +int sub_81C98B4(void); +u16 sub_81C98C4(void); // pokenav_unk_2.c +bool32 sub_81C9924(void); +bool32 sub_81C9940(void); +void sub_81C9990(s32 ltIdx); +bool32 sub_81C99C0(void); void sub_81C99D4(void); void sub_81CAADC(void); // pokenav_unk_3.c -struct Pokenav3Struct_Unk1C -{ - u8 unk0; - u8 unk1; - u16 unk2; -}; -bool32 sub_81CAAE8(void); +bool32 PokenavCallback_Init_11(void); u32 sub_81CAB24(void); void sub_81CAB38(void); int sub_81CAE28(void); int sub_81CAE38(void); int sub_81CAE48(void); -struct Pokenav3Struct_Unk1C *sub_81CAE94(void); +struct PokenavMonList *sub_81CAE94(void); u16 sub_81CAEA4(int); bool32 sub_81CAEBC(int index); int sub_81CAF04(int index); const u8 *sub_81CAFD8(int index, int textType); u16 sub_81CB01C(void); u16 sub_81CB02C(int arg0); -void sub_81CB050(u32 arg0, u8 *str); +void sub_81CB050(struct PokenavMonList * arg0, u8 *str); u8 sub_81CB0C8(int rematchIndex); int sub_81CB0E4(int index); bool32 sub_81CAE08(int); @@ -170,18 +219,75 @@ int sub_81CB128(int index); // pokenav_unk_4.c bool32 sub_81CB260(void); -void sub_81CB29C(int index); +void sub_81CB29C(s32 index); u32 sub_81CB2CC(void); void sub_81CB2E0(void); void sub_81CBD48(u16 windowId, u32 a1); // pokenav_unk_5.c -u32 sub_81CC4D4(void); +u32 PokenavCallback_Init_6(void); void sub_81CC524(void); u32 sub_81CC554(void); bool32 sub_81CC5F4(void); -void sub_81CC62C(int); +void sub_81CC62C(s32); u32 sub_81CC65C(void); void sub_81CC670(void); -#endif //GUARD_POKENAV_H +// pokenav_unk_6.c +u32 PokenavCallback_Init_7(void); +u32 PokenavCallback_Init_9(void); +u32 sub_81CD070(void); +void sub_81CD1C0(void); +bool32 sub_81CD3C4(void); +bool32 sub_81CDD5C(void); +struct UnknownStruct_81D1ED4 *sub_81CDC70(void); +u16 sub_81CDC60(void); +u16 sub_81CDC50(void); +u8 sub_81CDDB0(void); +bool32 sub_81CD548(u8 arg0); +u8 sub_81CDD7C(void); +u8 *sub_81CDD04(u8 id); +u8 *sub_81CDD24(u8 id); +u16 sub_81CDD48(void); +void *sub_81CDCB4(u8 id); +void *sub_81CDCD4(u8 id); + +// pokenav_unk_7.c +bool32 sub_81CDDD4(void); +void sub_81CDE2C(s32); +u32 sub_81CDE64(void); +void sub_81CECA0(void); +u8 sub_81CEF14(void); + +// pokenav_unk_8.c +u32 PokenavCallback_Init_8(void); +u32 PokenavCallback_Init_10(void); +u32 sub_81CEFDC(void); +void sub_81CEFF0(void); +bool32 sub_81CF330(void); +bool32 sub_81CF368(void); +void sub_81CF3A0(s32); +u32 sub_81CF3D0(void); +void sub_81CF3F8(void); + +// pokenav_unk_9.c +u32 PokenavCallback_Init_12(void); +u32 PokenavCallback_Init_14(void); +u32 sub_81CFA34(void); +void sub_81CFA48(void); +bool32 sub_81CFDD0(void); +bool32 sub_81CFE08(void); +void sub_81CFE40(s32); +u32 sub_81CFE70(void); +void sub_81CFE98(void); + +// pokenav_unk_10.c +u32 PokenavCallback_Init_13(void); +u32 sub_81D04A0(void); +void sub_81D04B8(void); +bool32 sub_81D0978(void); +void sub_81D09B0(s32); +u32 sub_81D09E0(void); +void sub_81D09F4(void); + +#endif // GUARD_POKENAV_H diff --git a/include/sprite.h b/include/sprite.h index 32bdd9c55..9753837fd 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -275,6 +275,7 @@ void FreeSpriteOamMatrix(struct Sprite *sprite); void DestroySpriteAndFreeResources(struct Sprite *sprite); void sub_800142C(u32 a1, u32 a2, u16 *a3, u16 a4, u32 a5); void AnimateSprite(struct Sprite *sprite); +void sub_8007E18(struct Sprite* sprite, s16 a2, s16 a3); void StartSpriteAnim(struct Sprite *sprite, u8 animNum); void StartSpriteAnimIfDifferent(struct Sprite *sprite, u8 animNum); void SeekSpriteAnim(struct Sprite *sprite, u8 animCmdIndex); diff --git a/include/strings.h b/include/strings.h index f30e82321..78ae2c140 100644 --- a/include/strings.h +++ b/include/strings.h @@ -485,7 +485,6 @@ extern const u8 gText_CryOf[]; extern const u8 gText_SizeComparedTo[]; extern const u8 gText_PokedexRegistration[]; extern const u8 gText_UnkCtrlF908Clear01[]; -extern const u8 sText_TenDashes2[]; extern const u8 gText_5MarksPokemon[]; extern const u8 gText_UnkHeight[]; extern const u8 gText_UnkWeight[]; @@ -1023,6 +1022,7 @@ extern const u8 gText_PokenavMatchCall_CheckTrainerButtons[]; extern const u8 gText_PokenavRibbons_MonListButtons[]; extern const u8 gText_PokenavRibbons_RibbonListButtons[]; extern const u8 gText_PokenavRibbons_RibbonCheckButtons[]; +extern const u8 gText_Number2[]; extern const u8 gUnknown_085EAD37[]; extern const u8 gUnknown_085EAD41[]; @@ -2708,6 +2708,67 @@ extern const u8 gText_Symbols[]; extern const u8 gText_Register2[]; extern const u8 gText_Exit2[]; +// Dodrio Berry Picking +extern const u8 gText_BerryPickingRecords[]; +extern const u8 gText_BerriesPicked[]; +extern const u8 gText_BerriesInRowFivePlayers[]; +extern const u8 gText_BestScore[]; +extern const u8 gText_1Colon[]; +extern const u8 gText_2Colon[]; +extern const u8 gText_3Colon[]; +extern const u8 gText_4Colon[]; +extern const u8 gText_5Colon[]; +extern const u8 gText_SpacePoints[]; +extern const u8 gText_10P30P50P50P[]; +extern const u8 gText_AnnouncingPrizes[]; +extern const u8 gText_AnnouncingRankings[]; +extern const u8 gText_FirstPlacePrize[]; +extern const u8 gText_CantHoldAnyMore[]; +extern const u8 gText_FilledStorageSpace[]; +extern const u8 gText_BerryPickingResults[]; +extern const u8 gText_WantToPlayAgain[]; +extern const u8 gText_CommunicationStandby3[]; +extern const u8 gText_SomeoneDroppedOut[]; + +// Pokemon jump +extern const u8 gText_WantToPlayAgain2[]; +extern const u8 gText_SomeoneDroppedOut2[]; +extern const u8 gText_CommunicationStandby4[]; +extern const u8 gText_AwesomeWonF701F700[]; +extern const u8 gText_FilledStorageSpace2[]; +extern const u8 gText_CantHoldMore[]; +extern const u8 gText_SpacePoints2[]; +extern const u8 gText_SpaceTimes3[]; +extern const u8 gText_PkmnJumpRecords[]; +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[]; @@ -2715,4 +2776,39 @@ extern const u8 gText_NumberOfBattles[]; extern const u8 gText_Unknown[]; extern const u8 gText_TrainerCloseBy[]; +// pokenav_unk_2 +extern const u8 gUnknown_085EBCC5[]; +extern const u8 gUnknown_085EBCE8[]; +extern const u8 gUnknown_085EBD01[]; +extern const u8 gUnknown_085EBD1C[]; +extern const u8 gUnknown_085EBD34[]; +extern const u8 gUnknown_085EBD83[]; +extern const u8 gUnknown_085EBDA2[]; +extern const u8 gUnknown_085EBDBF[]; +extern const u8 gUnknown_085EBDDB[]; +extern const u8 gUnknown_085EBDEE[]; +extern const u8 gUnknown_085EBE06[]; +extern const u8 gUnknown_085EBE19[]; +extern const u8 gUnknown_085EBE2D[]; +extern const u8 gUnknown_085EBE41[]; +extern const u8 gText_NoRibbonWinners[]; + +// pokenav_unk_4 +extern const u8 gUnknown_085EC017[]; +extern const u8 gUnknown_085EC01C[]; +extern const u8 gUnknown_085EC022[]; + +// pokenav_unk_8 +extern const u8 gText_NumberF700[]; + +// pokenav_unk_10 +extern const u8 gText_RibbonsF700[]; + +// use_pokeblock +extern const u8 gText_Coolness[]; +extern const u8 gText_Toughness[]; +extern const u8 gText_Smartness[]; +extern const u8 gText_Cuteness[]; +extern const u8 gText_Beauty3[]; + #endif // GUARD_STRINGS_H diff --git a/include/text.h b/include/text.h index eba3d0c4e..d3ff663bb 100644 --- a/include/text.h +++ b/include/text.h @@ -166,7 +166,11 @@ struct TextPrinter void (*callback)(struct TextPrinterTemplate *, u16); // 0x10 - union __attribute__((packed)) { + union +#if !MODERN + __attribute__((packed)) +#endif + { struct TextPrinterSubStruct sub; u8 fields[7]; } subUnion; diff --git a/include/trainer_hill.h b/include/trainer_hill.h index ad2713316..e605ac654 100644 --- a/include/trainer_hill.h +++ b/include/trainer_hill.h @@ -24,7 +24,7 @@ const struct WarpEvent* sub_81D6134(u8 warpEventId); u16 LocalIdToHillTrainerId(u8 localId); bool8 GetHillTrainerFlag(u8 eventObjectId); void SetHillTrainerFlag(void); -const u8 *sub_81D62AC(void); +const u8 *GetTrainerHillTrainerScript(void); void FillHillTrainerParty(void); void FillHillTrainersParties(void); u32 sub_81D63C4(void); diff --git a/ld_script.txt b/ld_script.txt index b1c81f6e4..a044ecdab 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -3,6 +3,12 @@ ENTRY(Start) gNumMusicPlayers = 4; gMaxLines = 0; +/* Modify the following load addresses as needed to make more room. Alternately, delete both the + declarations below and their references further down to get rid of the gaps. */ + +__anim_mon_load_address = 0x8b00000; +__gfx_load_address = 0x8c00000; + SECTIONS { . = 0x2000000; @@ -41,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); @@ -69,9 +75,7 @@ SECTIONS { asm/berry_crush.o(.text); src/berry_powder.o(.text); src/dodrio_berry_picking.o(.text); - asm/dodrio_berry_picking.o(.text); src/pokemon_jump.o(.text); - asm/pokemon_jump.o(.text); src/rtc.o(.text); src/main_menu.o(.text); src/battle_controllers.o(.text); @@ -306,15 +310,13 @@ SECTIONS { src/pokenav_match_call_ui.o(.text); src/pokenav_unk_1.o(.text); src/pokenav_unk_2.o(.text); - asm/pokenav_unk_2.o(.text); src/pokenav_unk_3.o(.text); src/pokenav_unk_4.o(.text); src/pokenav_unk_5.o(.text); - asm/pokenav_unk_6.o(.text); - asm/pokenav_unk_7.o(.text); - asm/pokenav_unk_8.o(.text); - asm/pokenav_unk_9.o(.text); - asm/pokenav_unk_10.o(.text); + src/pokenav_unk_6.o(.text); + src/pokenav_unk_7.o(.text); + src/pokenav_unk_8.o(.text); + src/pokenav_unk_9.o(.text); src/pokenav_unk_10.o(.text); src/pokenav_match_call_data.o(.text); src/menu_specialized.o(.text); @@ -346,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); @@ -358,7 +360,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:_call_via_rX.o(.text); *libgcc.a:_divdi3.o(.text); *libgcc.a:_divsi3.o(.text); @@ -423,7 +425,9 @@ SECTIONS { data/io_reg.o(.rodata); src/string_util.o(.rodata); src/link.o(.rodata); + src/link.o(.rodata.str1.4); src/link_rfu.o(.rodata); + src/link_rfu.o(.rodata.str1.4); src/union_room.o(.rodata); src/mystery_gift.o(.rodata); src/union_room_player_avatar.o(.rodata); @@ -434,14 +438,14 @@ SECTIONS { src/mevent_client.o(.rodata); src/mevent_scripts.o(.rodata); src/union_room_chat.o(.rodata); + src/berry_crush.o(.rodata); data/berry_crush.o(.rodata); data/berry_powder.o(.rodata); src/dodrio_berry_picking.o(.rodata); - data/dodrio_berry_picking.o(.rodata); src/pokemon_jump.o(.rodata); - data/pokemon_jump.o(.rodata); src/rtc.o(.rodata); src/main_menu.o(.rodata); + src/battle_controllers.o(.rodata); src/rom_8034C54.o(.rodata); src/data.o(.rodata); src/battle_bg.o(.rodata); @@ -451,6 +455,7 @@ SECTIONS { src/battle_controller_player.o(.rodata); data/smokescreen.o(.rodata); src/battle_controller_opponent.o(.rodata); + src/battle_ai_switch_items.o(.rodata); src/battle_controller_link_opponent.o(.rodata); src/pokemon.o(.rodata); src/trig.o(.rodata); @@ -473,6 +478,7 @@ SECTIONS { src/event_object_movement.o(.rodata); src/text_window.o(.rodata); src/scrcmd.o(.rodata); + src/field_control_avatar.o(.rodata); src/coord_event_weather.o(.rodata); src/field_tasks.o(.rodata); src/reset_rtc_screen.o(.rodata); @@ -483,6 +489,7 @@ SECTIONS { src/battle_anim.o(.rodata); src/battle_anim_mons.o(.rodata); data/map_events.o(.rodata); + src/reshow_battle_screen.o(.rodata); src/battle_anim_status_effects.o(.rodata); src/title_screen.o(.rodata); src/field_weather.o(.rodata); @@ -493,6 +500,7 @@ SECTIONS { src/trainer_see.o(.rodata); src/wild_encounter.o(.rodata); src/field_effect.o(.rodata); + src/scanline_effect.o(.rodata); src/option_menu.o(.rodata); src/pokedex.o(.rodata); src/trainer_card.o(.rodata); @@ -515,12 +523,14 @@ SECTIONS { src/record_mixing.o(.rodata); src/secret_base.o(.rodata); src/tv.o(.rodata); + src/contest_link_80F57C4.o(.rodata); data/contest_link_80F57C4.o(.rodata); src/script_pokemon_util_80F87D8.o(.rodata); src/pokemon_size_record.o(.rodata) src/fldeff_misc.o(.rodata); src/field_special_scene.o(.rodata); src/rotating_gate.o(.rodata); + src/contest_link_80FC4F4.o(.rodata); src/item_use.o(.rodata); src/battle_anim_effects_1.o(.rodata); src/battle_anim_effects_2.o(.rodata); @@ -549,6 +559,7 @@ SECTIONS { src/menu_helpers.o(.rodata); src/heal_location.o(.rodata); src/region_map.o(.rodata); + src/contest_painting_effects.o(.rodata); data/contest_painting_effects.o(.rodata); src/decoration.o(.rodata); src/slot_machine.o(.rodata); @@ -575,13 +586,13 @@ SECTIONS { src/save.o(.rodata); src/field_effect_helpers.o(.rodata); src/contest_ai.o(.rodata); + src/battle_anim_sound_tasks.o(.rodata); src/battle_controller_safari.o(.rodata); src/battle_anim_effects_3.o(.rodata); src/move_relearner.o(.rodata); src/roamer.o(.rodata); src/battle_tower.o(.rodata); src/use_pokeblock.o(.rodata); - data/use_pokeblock.o(.rodata); src/battle_controller_wally.o(.rodata); src/player_pc.o(.rodata); src/intro.o(.rodata); @@ -617,6 +628,7 @@ SECTIONS { src/battle_arena.o(.rodata); src/battle_factory.o(.rodata); src/battle_pike.o(.rodata); + src/mossdeep_gym.o(.rodata); data/mossdeep_gym.o(.rodata); src/battle_pyramid.o(.rodata); src/item_menu.o(.rodata); @@ -626,6 +638,7 @@ SECTIONS { src/party_menu.o(.rodata); src/battle_tent.o(.rodata); src/unk_text_util_2.o(.rodata); + src/multiboot.o(.rodata); src/unk_81BAD84.o(.rodata); src/battle_controller_player_partner.o(.rodata); src/mirage_tower.o(.rodata); @@ -637,12 +650,20 @@ SECTIONS { src/pokenav_main_menu.o(.rodata); src/pokenav_match_call_ui.o(.rodata); src/pokenav_unk_1.o(.rodata); - data/pokenav.o(.rodata); + src/pokenav_unk_2.o(.rodata); + src/pokenav_unk_3.o(.rodata); + src/pokenav_unk_4.o(.rodata); + src/pokenav_unk_5.o(.rodata); + src/pokenav_unk_7.o(.rodata); + src/pokenav_unk_8.o(.rodata); + src/pokenav_unk_9.o(.rodata); src/pokenav_unk_10.o(.rodata); 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); @@ -1195,6 +1216,7 @@ SECTIONS { lib_rodata : SUBALIGN(4) { + src/m4a.o(.rodata); src/agb_flash.o(.rodata); src/agb_flash_1m.o(.rodata); src/agb_flash_mx.o(.rodata); @@ -1217,27 +1239,13 @@ SECTIONS { data/multiboot_pokemon_colosseum.o(.rodata); } =0 - gap1 : - { - gap1_start = ABSOLUTE(.); - BYTE(0x00) - . = 0x8B00000 - gap1_start; - } =0 - - anim_mon_front_pic_data : + anim_mon_front_pic_data __anim_mon_load_address : ALIGN(4) { src/anim_mon_front_pics.o(.rodata); } =0 - gap2 : - { - gap2_start = ABSOLUTE(.); - BYTE(0x00) - . = 0x8C00000 - gap2_start; - } =0 - - gfx_data : + gfx_data __gfx_load_address : ALIGN(4) { src/graphics.o(.rodata); diff --git a/ld_script_modern.txt b/ld_script_modern.txt new file mode 100644 index 000000000..5157e81dc --- /dev/null +++ b/ld_script_modern.txt @@ -0,0 +1,155 @@ +ENTRY(Start) + +gNumMusicPlayers = 4; +gMaxLines = 0; + +SECTIONS { + . = 0x2000000; + + ewram (NOLOAD) : + ALIGN(4) + { + gHeap = .; + + . = 0x1C000; + + src/*.o(ewram_data); + + . = 0x40000; +} + + . = 0x3000000; + + iwram (NOLOAD) : + ALIGN(4) + { + /* .bss starts at 0x3000000 */ + src/*.o(.bss); + + /* .bss.code starts at 0x3001AA8 */ + src/m4a.o(.bss.code); + + /* COMMON starts at 0x30022A8 */ + src/*.o(COMMON); + *libc.a:sbrkr.o(COMMON); + end = .; + . = 0x8000; + } + + . = 0x8000000; + + .text : + ALIGN(4) + { + src/crt0.o(.text); + src/*.o(.text); + asm/*.o(.text); + } =0 + + script_data : + ALIGN(4) + { + data/*.o(script_data); + } =0 + + lib_text : + ALIGN(4) + { + src/libgcnmultiboot.o(.text); + src/m4a_1.o(.text); + src/m4a.o(.text); + src/agb_flash.o(.text); + src/agb_flash_1m.o(.text); + src/agb_flash_mx.o(.text); + src/siirtc.o(.text); + src/librfu_stwi.o(.text); + src/librfu_intr.o(.text); + asm/librfu_intr.o(.text); + src/librfu_rfu.o(.text); + asm/librfu.o(.text); + src/libagbsyscall.o(.text); + *libgcc.a:*.o(.text*); + *libc.a:*.o(.text*); + src/libisagbprn.o(.text); + } =0 + + .rodata : + ALIGN(4) + { + src/*.o(.rodata*); + data/*.o(.rodata*); + } =0 + + song_data : + ALIGN(4) + { + sound/songs/*.o(.rodata); + } =0 + + lib_rodata : + SUBALIGN(4) + { + src/m4a.o(.rodata); + src/agb_flash.o(.rodata); + src/agb_flash_1m.o(.rodata); + src/agb_flash_mx.o(.rodata); + src/agb_flash_le.o(.rodata); + src/siirtc.o(.rodata); + data/librfu_rodata.o(.rodata); + *libgcc.a:*.o(.rodata*); + *libc.a:*.o(.rodata*); + *libc.a:*.o(.data*); + src/libisagbprn.o(.rodata); + } =0 + + other_data : + ALIGN(4) + { + data/unknown_serial_data.o(.rodata); + data/multiboot_berry_glitch_fix.o(.rodata); + data/multiboot_pokemon_colosseum.o(.rodata); + } =0 + + anim_mon_front_pic_data : + ALIGN(4) + { + src/anim_mon_front_pics.o(.rodata); + } =0 + + gfx_data : + ALIGN(4) + { + src/graphics.o(.rodata); + } =0 + + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + + /* Discard everything not specifically mentioned above. */ + /DISCARD/ : + { + *(*); + } +} diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 49bb0216b..dfe5f0f3d 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; @@ -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; @@ -5315,21 +5315,19 @@ static void sub_8102D8C(s16 a, s16 b, s16* c, s16* d, s8 e) static void sub_8102DE4(struct Sprite* sprite) { - int b; - s16 a; - int c; + s16 y, yDelta; u8 index; + sprite->data[0]++; - b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); + yDelta = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); sprite->data[4] += sprite->data[6]; sprite->data[5] += sprite->data[7]; sprite->pos1.x = sprite->data[4] >> 4; sprite->pos1.y = sprite->data[5] >> 4; - sprite->pos2.y = Sin(b, 15); - a = (u16)sprite->pos1.y; - c = (u16)sprite->pos1.x; + sprite->pos2.y = Sin(yDelta, 15); - if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) + y = sprite->pos1.y; + if (sprite->pos1.x < -16 || sprite->pos1.x > 256 || y < -16 || y > 128) { DestroySpriteAndMatrix(sprite); } @@ -5350,12 +5348,8 @@ static void sub_8102DE4(struct Sprite* sprite) void sub_8102EB0(struct Sprite* sprite) { - int a; if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) - { - a = gBattleAnimArgs[1]; - (u16)gBattleAnimArgs[1] = -a; - } + gBattleAnimArgs[1] *= -1; sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; @@ -5393,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 @@ -5541,8 +5535,8 @@ static void sub_8103300(struct Sprite* sprite) static void sub_8103320(struct Sprite* sprite) { - s16 temp; - s16 temp2; + s16 x1, x2; + sprite->data[1] += 4; if (sprite->data[1] > 254) { @@ -5564,20 +5558,21 @@ static void sub_8103320(struct Sprite* sprite) if (sprite->data[1] > 0x9F) sprite->subpriority = sprite->data[2]; - temp = gSineTable[sprite->data[1]]; - sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); + x1 = gSineTable[sprite->data[1]]; + x2 = x1 >> 3; + sprite->pos2.x = (x1 >> 3) + (x2 >> 1); } void sub_8103390(struct Sprite* sprite) { - u8 bank; + u8 battler; if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimAttacker; + battler = gBattleAnimAttacker; else - bank = gBattleAnimTarget; + battler = gBattleAnimTarget; - sub_810310C(bank, sprite); - if (GetBattlerSide(bank) == B_SIDE_PLAYER) + sub_810310C(battler, sprite); + if (GetBattlerSide(battler) == B_SIDE_PLAYER) { StartSpriteAnim(sprite, 0); sprite->data[0] = 2; diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 65cc55604..3b7d26aab 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -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; } diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index ab765b8c1..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; } @@ -2504,13 +2504,10 @@ void sub_815BE04(struct Sprite *sprite) static void sub_815BF44(struct Sprite *sprite) { - int var0; - s8 var1; - - var0 = (u16)sprite->data[2] + (u16)sprite->data[3]; - var1 = var0 >> 8; - sprite->pos2.y -= var1; - sprite->data[3] = var0 & 0xFF; + s16 delta = sprite->data[3] + sprite->data[2]; + sprite->pos2.y -= delta >> 8; + sprite->data[3] += sprite->data[2]; + sprite->data[3] &= 0xFF; if (sprite->data[4] == 0 && sprite->pos2.y < -8) { gSprites[sprite->data[6]].invisible = 0; @@ -2543,19 +2540,12 @@ static void sub_815BFF4(struct Sprite *sprite) static void sub_815C050(struct Sprite *sprite) { - u16 d2; - register u16 d3 asm("r1"); - int var0; - s8 var1; - if (!sprite->invisible) { - d2 = sprite->data[2]; - d3 = sprite->data[3]; - var0 = d2 + d3; - var1 = var0 >> 8; - sprite->pos2.y -= var1; - sprite->data[3] = var0 & 0xFF; + s16 delta = sprite->data[3] + sprite->data[2]; + sprite->pos2.y -= delta >> 8; + sprite->data[3] += sprite->data[2]; + sprite->data[3] &= 0xFF; if (--sprite->data[1] == -1) { sprite->invisible = 1; @@ -4177,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 @@ -4322,12 +4312,12 @@ static void AnimSmellingSaltExclamationStep(struct Sprite *sprite) // Claps a hand several times. // arg 0: which hand -// arg 1: +// arg 1: 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; } @@ -4555,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_anim_mons.c b/src/battle_anim_mons.c index c6058204d..a667daecf 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -2037,7 +2037,7 @@ u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); if (!isBackpic) { - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); if (a10 == 1 || sub_80688F8(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->field_17C, @@ -2053,7 +2053,7 @@ u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority } else { - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); if (a10 == 1 || sub_80688F8(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], gMonSpritesGfxPtr->field_17C, diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c index 740340d14..6780f0a32 100755 --- a/src/battle_anim_special.c +++ b/src/battle_anim_special.c @@ -2029,7 +2029,7 @@ void sub_8172EF0(u8 battler, struct Pokemon *mon) if (IsBattlerSpriteVisible(battler)) { shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); - if (shinyValue < 8) + if (shinyValue < SHINY_ODDS) isShiny = TRUE; if (isShiny) diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 29272c19a..1225d1953 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); } @@ -819,15 +819,11 @@ static void Task_HandleSendLinkBuffersData(u8 taskId) } } -// fix me void sub_8033648(void) { u8 i; s32 j; - u16 r6; u8 *recvBuffer; - u8 *dest; - u8 *src; if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_20)) { @@ -838,25 +834,24 @@ void sub_8033648(void) { ResetBlockReceivedFlag(i); recvBuffer = (u8 *)gBlockRecvBuffer[i]; - #ifndef NONMATCHING - asm(""); - recvBuffer = (u8 *)&gBlockRecvBuffer[i]; - #endif - r6 = gBlockRecvBuffer[i][2]; - - if (gTasks[sLinkReceiveTaskId].data[14] + 9 + r6 > 0x1000) { - gTasks[sLinkReceiveTaskId].data[12] = gTasks[sLinkReceiveTaskId].data[14]; - gTasks[sLinkReceiveTaskId].data[14] = 0; - } + u8 *dest, *src; + u16 r6 = gBlockRecvBuffer[i][2]; + + if (gTasks[sLinkReceiveTaskId].data[14] + 9 + r6 > 0x1000) + { + gTasks[sLinkReceiveTaskId].data[12] = gTasks[sLinkReceiveTaskId].data[14]; + gTasks[sLinkReceiveTaskId].data[14] = 0; + } - dest = &gLinkBattleRecvBuffer[gTasks[sLinkReceiveTaskId].data[14]]; - src = recvBuffer; + dest = &gLinkBattleRecvBuffer[gTasks[sLinkReceiveTaskId].data[14]]; + src = recvBuffer; - for (j = 0; j < r6 + 8; j++) - dest[j] = src[j]; + for (j = 0; j < r6 + 8; j++) + dest[j] = src[j]; - gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + r6 + 8; + gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + r6 + 8; + } } } } diff --git a/src/battle_dome.c b/src/battle_dome.c index 162d46d61..1c116467d 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -1024,13 +1024,13 @@ static const union AnimCmd gUnknown_0860D020[] = static const union AnimCmd gUnknown_0860D028[] = { - ANIMCMD_FRAME(18, 129, .vFlip = TRUE), + ANIMCMD_FRAME(18, 1, .vFlip = TRUE), ANIMCMD_END, }; static const union AnimCmd gUnknown_0860D030[] = { - ANIMCMD_FRAME(16, 65, .hFlip = TRUE), + ANIMCMD_FRAME(16, 1, .hFlip = TRUE), ANIMCMD_END, }; diff --git a/src/battle_factory.c b/src/battle_factory.c index 1a150db1e..bc47b1fda 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -16,7 +16,7 @@ #include "constants/moves.h" // IWRAM bss -static IWRAM_DATA bool8 sPerformedRentalSwap; +static bool8 sPerformedRentalSwap; // This file's functions. static void InitFactoryChallenge(void); @@ -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_factory_screen.c b/src/battle_factory_screen.c index 280b65dc8..f56442432 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -227,9 +227,9 @@ static EWRAM_DATA u8 *sSwapMenuTilemapBuffer = NULL; static EWRAM_DATA u8 *sSwapMonCardBgTilemapBuffer = NULL; // IWRAM bss -static IWRAM_DATA struct FactorySelectMonsStruct *sFactorySelectScreen; -static IWRAM_DATA void (*sSwap_CurrentTableFunc)(u8 taskId); -static IWRAM_DATA struct FactorySwapMonsStruct *sFactorySwapScreen; +static struct FactorySelectMonsStruct *sFactorySelectScreen; +static void (*sSwap_CurrentTableFunc)(u8 taskId); +static struct FactorySwapMonsStruct *sFactorySwapScreen; // IWRAM common u8 (*gUnknown_030062E8)(void); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index d6b1b6dee..cdd7e8158 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -534,7 +534,7 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE) lzPaletteData = GetMonFrontSpritePal(mon); else - lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality); + lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality); LZDecompressWram(lzPaletteData, gDecompressionBuffer); LoadPalette(gDecompressionBuffer, paletteOffset, 0x20); @@ -597,7 +597,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE) lzPaletteData = GetMonFrontSpritePal(mon); else - lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality); + lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality); LZDecompressWram(lzPaletteData, gDecompressionBuffer); LoadPalette(gDecompressionBuffer, paletteOffset, 0x20); @@ -918,7 +918,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform dst = (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32); DmaCopy32(3, src, dst, 0x800); paletteOffset = 0x100 + battlerAtk * 16; - lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue); + lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue); LZDecompressWram(lzPaletteData, gDecompressionBuffer); LoadPalette(gDecompressionBuffer, paletteOffset, 32); @@ -945,10 +945,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite) { - u8 position; - s32 i; - u32 var; - const void *substitutePal; + s32 i, position, palOffset; if (!loadMonSprite) { @@ -964,19 +961,16 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite) else LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]); - i = 1; - var = battlerId * 16; - substitutePal = gSubstituteDollPal; - for (; i < 4; i++) + for (i = 1; i < 4; i++) { - register void *dmaSrc asm("r0") = gMonSpritesGfxPtr->sprites[position]; - void *dmaDst = (i * 0x800) + dmaSrc; - u32 dmaSize = 0x800; - DmaCopy32(3, dmaSrc, dmaDst, dmaSize); - i++;i--; + u8 (*ptr)[4][0x800] = gMonSpritesGfxPtr->sprites[position]; + ptr++;ptr--; // Needed to match. + + DmaCopy32Defvars(3, (*ptr)[0], (*ptr)[i], 0x800); } - LoadCompressedPalette(substitutePal, 0x100 + var, 32); + palOffset = (battlerId * 16) + 0x100; + LoadCompressedPalette(gSubstituteDollPal, palOffset, 32); } else { 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_intro.c b/src/battle_intro.c index 043cf855a..6964428a3 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -205,7 +205,7 @@ static void BattleIntroSlide1(u8 taskId) if (gBattle_WIN0V & 0xFF00) gBattle_WIN0V -= 0x3FC; - + if (gTasks[taskId].data[2]) gTasks[taskId].data[2] -= 2; @@ -314,7 +314,7 @@ static void BattleIntroSlide2(u8 taskId) if (gBattle_WIN0V & 0xFF00) gBattle_WIN0V -= 0x3FC; - + if (gTasks[taskId].data[2]) gTasks[taskId].data[2] -= 2; @@ -402,7 +402,7 @@ static void BattleIntroSlide3(u8 taskId) if (gBattle_WIN0V & 0xFF00) gBattle_WIN0V -= 0x3FC; - + if (gTasks[taskId].data[2]) gTasks[taskId].data[2] -= 2; @@ -484,7 +484,7 @@ static void BattleIntroSlideLink(u8 taskId) case 3: if (gBattle_WIN0V & 0xFF00) gBattle_WIN0V -= 0x3FC; - + if (gTasks[taskId].data[2]) gTasks[taskId].data[2] -= 2; @@ -537,7 +537,7 @@ static void BattleIntroSlidePartner(u8 taskId) gBattle_WIN0V += 0x100; if ((gBattle_WIN0V & 0xFF00) != 0x100) gBattle_WIN0V--; - + if ((gBattle_WIN0V & 0xFF00) == 0x2000) { gTasks[taskId].data[0]++; @@ -600,129 +600,18 @@ void sub_8118FBC(int bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *ar LoadBgTilemap(bgId, arg6, BG_SCREEN_SIZE, 0); } -#ifdef NONMATCHING void unref_sub_8119094(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u16 arg5, u8 arg6, u8 arg7) { - int i, j; - int offset; + int i, j, offset; + DmaCopy16(3, gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * arg3, (void *)BG_SCREEN_ADDR(0) + arg5, BG_SCREEN_SIZE); offset = (arg5 >> 5) - (arg7 << 9); for (i = arg1; i < arg1 + 8; i++) { for (j = arg0; j < arg0 + 8; j++) { - ((u16 *)BG_VRAM)[i * 32 + j + (arg6 * 0x400) + arg0] = offset | (arg4 << 12); + *((u16 *)(BG_VRAM) + (i * 32) + (j + (arg6 << 10))) = offset | (arg4 << 12); offset++; } } } -#else -NAKED -void unref_sub_8119094(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u16 arg5, u8 arg6, u8 arg7) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x4\n\ - ldr r4, [sp, 0x24]\n\ - ldr r5, [sp, 0x28]\n\ - mov r8, r5\n\ - ldr r5, [sp, 0x2C]\n\ - ldr r6, [sp, 0x30]\n\ - mov r9, r6\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r12, r0\n\ - lsls r1, 24\n\ - lsls r2, 24\n\ - lsls r3, 24\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - mov r10, r4\n\ - mov r7, r8\n\ - lsls r7, 16\n\ - lsrs r6, r7, 16\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - mov r0, r9\n\ - lsls r0, 24\n\ - mov r9, r0\n\ - ldr r4, =0x040000d4\n\ - ldr r0, =gMonSpritesGfxPtr\n\ - ldr r0, [r0]\n\ - lsrs r2, 22\n\ - adds r0, 0x4\n\ - adds r0, r2\n\ - lsrs r3, 13\n\ - ldr r0, [r0]\n\ - adds r0, r3\n\ - str r0, [r4]\n\ - movs r0, 0xC0\n\ - lsls r0, 19\n\ - adds r6, r0\n\ - str r6, [r4, 0x4]\n\ - ldr r0, =0x80000400\n\ - str r0, [r4, 0x8]\n\ - ldr r0, [r4, 0x8]\n\ - adds r2, r7, 0\n\ - lsrs r2, 21\n\ - mov r6, r9\n\ - lsrs r6, 15\n\ - subs r4, r2, r6\n\ - lsrs r0, r1, 24\n\ - adds r1, r0, 0\n\ - adds r1, 0x8\n\ - cmp r0, r1\n\ - bge _08119148\n\ - mov r9, r1\n\ - mov r7, r12\n\ - lsls r7, 1\n\ - mov r8, r7\n\ - lsls r5, 11\n\ - str r5, [sp]\n\ -_08119110:\n\ - mov r2, r12\n\ - adds r3, r2, 0\n\ - adds r3, 0x8\n\ - adds r5, r0, 0x1\n\ - cmp r2, r3\n\ - bge _08119142\n\ - mov r1, r10\n\ - lsls r6, r1, 12\n\ - lsls r0, 6\n\ - movs r7, 0xC0\n\ - lsls r7, 19\n\ - adds r0, r7\n\ - ldr r1, [sp]\n\ - adds r0, r1, r0\n\ - mov r7, r8\n\ - adds r1, r7, r0\n\ - subs r2, r3, r2\n\ -_08119132:\n\ - adds r0, r4, 0\n\ - orrs r0, r6\n\ - strh r0, [r1]\n\ - adds r4, 0x1\n\ - adds r1, 0x2\n\ - subs r2, 0x1\n\ - cmp r2, 0\n\ - bne _08119132\n\ -_08119142:\n\ - adds r0, r5, 0\n\ - cmp r0, r9\n\ - blt _08119110\n\ -_08119148:\n\ - add sp, 0x4\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); -} -#endif diff --git a/src/battle_main.c b/src/battle_main.c index b4c4bdf5c..92e21db75 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -72,6 +72,9 @@ extern const u8 *const gBattlescriptsForUsingItem[]; extern const u8 *const gBattlescriptsForSafariActions[]; // this file's functions +#if !defined(NONMATCHING) && MODERN +#define static +#endif static void CB2_InitBattleInternal(void); static void CB2_PreInitMultiBattle(void); static void CB2_PreInitIngamePlayerPartnerBattle(void); @@ -2001,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++) { @@ -2019,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; @@ -2033,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); diff --git a/src/battle_pike.c b/src/battle_pike.c index 7fdb0a07c..8846e2d1a 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -53,11 +53,11 @@ struct PikeWildMon }; // IWRAM bss -static IWRAM_DATA u8 sRoomType; -static IWRAM_DATA u8 sStatusMon; -static IWRAM_DATA bool8 sUnknown_0300128E; -static IWRAM_DATA u32 sStatusFlags; -static IWRAM_DATA u8 sNpcId; +static u8 sRoomType; +static u8 sStatusMon; +static bool8 sUnknown_0300128E; +static u32 sStatusFlags; +static u8 sNpcId; // This file's functions. static void SetRoomType(void); 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_tent.c b/src/battle_tent.c index 85194417f..34e3e9628 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -44,7 +44,7 @@ static void sub_81BA040(void); static void sub_81B9EC0(void); // IWRAM bss -static IWRAM_DATA u16 sRandMonSetId; +static u16 sRandMonSetId; // const rom data void static (*const gUnknown_086160B4[])(void) = diff --git a/src/battle_tower.c b/src/battle_tower.c index 6f8e3e25f..8ef848e39 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -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++) diff --git a/src/battle_transition.c b/src/battle_transition.c index 7edb1bd93..3e86fcf51 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -262,10 +262,10 @@ static bool8 sub_814842C(struct Sprite *sprite); static bool8 sub_8148458(struct Sprite *sprite); // iwram bss vars -IWRAM_DATA static s16 sUnusedRectangularSpiralVar; -IWRAM_DATA static u8 sTestingTransitionId; -IWRAM_DATA static u8 sTestingTransitionState; -IWRAM_DATA static struct StructRectangularSpiral sRectangularSpiralTransition[4]; +static s16 sUnusedRectangularSpiralVar; +static u8 sTestingTransitionId; +static u8 sTestingTransitionState; +static struct StructRectangularSpiral sRectangularSpiralTransition[4]; // ewram vars EWRAM_DATA static struct TransitionData *sTransitionStructPtr = NULL; diff --git a/src/berry_blender.c b/src/berry_blender.c index d6a7879f4..03764b2f8 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -194,10 +194,10 @@ EWRAM_DATA static s32 sUnknown_020322BC[5] = {0}; EWRAM_DATA static u32 sUnknown_020322D0 = 0; // IWRAM bss -IWRAM_DATA static s16 sUnknown_03000DE8[8]; -IWRAM_DATA static s16 sUnknown_03000DF8[6]; -IWRAM_DATA static s16 sUnknown_03000E04; -IWRAM_DATA static s16 sUnknown_03000E06; +static s16 sUnknown_03000DE8[8]; +static s16 sUnknown_03000DF8[6]; +static s16 sUnknown_03000E04; +static s16 sUnknown_03000E06; // IWRAM common u8 gInGameOpponentsNo; diff --git a/src/berry_crush.c b/src/berry_crush.c index a5d964cc9..6259e0a41 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -55,7 +55,10 @@ struct BerryCrushGame_138_C struct BerryCrushGame_138 { - u8 filler0[0xC]; + u8 filler0[0x4]; + u16 unk4; + u16 unk6; + u16 unk8; struct BerryCrushGame_138_C *unkC[5]; u8 filler1C[0x4]; struct Sprite *unk24[5]; @@ -105,7 +108,7 @@ struct BerryCrushGame u8 filler26[0x2]; u16 unk28; u16 unk2A; - u16 unk2C; + s16 unk2C; u8 filler2E[0x8]; u8 unk36[0xA]; struct BerryCrushGame_40 unk40; @@ -149,6 +152,8 @@ extern const struct SpriteTemplate gUnknown_082F436C; extern const u16 gUnknown_082F41E8[]; extern const s8 gUnknown_082F41CC[][2]; extern const s8 gUnknown_082F41D2[][2]; +extern const u32 gUnknown_082F334C[]; +extern const u8 gUnknown_082F32D8[][3]; struct BerryCrushGame *sub_8020C00(void) { @@ -700,76 +705,121 @@ void sub_80216A8(struct BerryCrushGame *arg0) } } -// void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) -// { -// u8 sp4; -// struct BerryCrushGame_4E *var4E; -// u8 i; -// u16 var0; - -// sp4 = 0; -// var4E = &arg0->unk40.unkE; -// for (i = 0; i < arg0->unk9; i++) -// { -// var0 = var4E->unkA >> (i * 3); -// var0 &= 7; -// if (var0) -// { -// int offset; -// sp4++; -// if (var0 & 0x4) -// StartSpriteAnim(arg1->unk24[i], 1); -// else -// StartSpriteAnim(arg1->unk24[i], 0); - -// arg1->unk24[i]->invisible = 0; -// arg1->unk24[i]->animPaused = 0; -// offset = (var0 % 4) - 1; -// arg1->unk24[i]->pos2.x = gUnknown_082F41CC[offset][0]; -// arg1->unk24[i]->pos2.y = gUnknown_082F41CC[offset][1]; -// } -// } - -// if (sp4 == 0) -// { -// arg0->unk25_2 = 0; -// } -// else -// { -// u8 var3 = arg0->unk28 % 3; -// u16 var2 = var3; -// for (i = 0; i < var4E->unkC * 2 + 3; i++) -// { -// if (arg1->unk4C[i]->invisible) -// { -// arg1->unk4C[i]->callback = sub_8022B28; -// arg1->unk4C[i]->pos1.x = gUnknown_082F41D2[i][0] + 120; -// arg1->unk4C[i]->pos1.y = gUnknown_082F41D2[i][1] + (136 - var2 * 4); -// arg1->unk4C[i]->pos2.x = gUnknown_082F41D2[i][0] / (var3 * 4); -// arg1->unk4C[i]->pos2.y = gUnknown_082F41D2[i][1]; -// if (var4E->unk4 & 0x2) -// StartSpriteAnim(arg1->unk4C[i], 1); -// else -// StartSpriteAnim(arg1->unk4C[i], 0); - -// var2++; -// if (var2 > 3) -// var2 = 0; -// } -// } - -// if (arg0->unk25_2) -// { -// arg0->unk25_2 = 0; -// } -// else -// { -// if (sp4 == 1) -// PlaySE(SE_TOY_DANGO); -// else -// PlaySE(SE_TOY_KABE); - -// arg0->unk25_2 = 1; -// } -// } -// } +void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) +{ + u8 sp4; + struct BerryCrushGame_4E *var4E; + u8 i; + u16 var, var2; + + sp4 = 0; + var4E = &arg0->unk40.unkE; + for (i = 0; i < arg0->unk9; i++) + { + var = var4E->unkA >> (i * 3); + var &= 7; + if (var) + { + sp4++; + if (var & 0x4) + StartSpriteAnim(arg1->unk24[i], 1); + else + StartSpriteAnim(arg1->unk24[i], 0); + + arg1->unk24[i]->invisible = 0; + arg1->unk24[i]->animPaused = 0; + arg1->unk24[i]->pos2.x = gUnknown_082F41CC[(var % 4) - 1][0]; + arg1->unk24[i]->pos2.y = gUnknown_082F41CC[(var % 4) - 1][1]; + } + } + + if (sp4 == 0) + { + arg0->unk25_2 = 0; + } + else + { + var = (u8)(arg0->unk28 % 3); + var2 = var; + for (i = 0; i < var4E->unkC * 2 + 3; i++) + { + if (arg1->unk4C[i]->invisible) + { + arg1->unk4C[i]->callback = sub_8022B28; + arg1->unk4C[i]->pos1.x = gUnknown_082F41D2[i][0] + 120; + arg1->unk4C[i]->pos1.y = gUnknown_082F41D2[i][1] + 136 - (var * 4); + arg1->unk4C[i]->pos2.x = gUnknown_082F41D2[i][0] + (gUnknown_082F41D2[i][0] / (var2 * 4)); + arg1->unk4C[i]->pos2.y = gUnknown_082F41D2[i][1]; + if (var4E->unk4 & 0x2) + StartSpriteAnim(arg1->unk4C[i], 1); + else + StartSpriteAnim(arg1->unk4C[i], 0); + + var++; + if (var > 3) + var = 0; + } + } + + if (arg0->unk25_2) + { + arg0->unk25_2 = 0; + } + else + { + if (sp4 == 1) + PlaySE(SE_TOY_DANGO); + else + PlaySE(SE_TOY_KABE); + + arg0->unk25_2 = 1; + } + } +} + +bool32 sub_80218D4(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) +{ + u8 i; + + for (i = 0; i < arg0->unk9; i++) + { + if (!arg1->unk24[i]->invisible) + return FALSE; + } + + for (i = 0; i < 11; i++) + { + if (!arg1->unk4C[i]->invisible) + return FALSE; + } + + if (arg0->unk2C != 0) + arg0->unk2C = 0; + + return TRUE; +} + +void sub_8021944(struct BerryCrushGame_138 *arg0, u16 arg1) +{ + u8 i = 0; + u32 r7 = 0; + s16 r3 = 0; + + arg0->unk4 = arg1 / 3600; + arg0->unk6 = (arg1 % 3600) / 60; + r3 = sub_8151534((arg1 % 60) << 8, 4); + + for (i = 0; i < 8; i++) + { + if ((r3 >> (7 - i)) & 1) + r7 += gUnknown_082F334C[i]; + } + + arg0->unk8 = r7 / 1000000; +} + +void sub_80219C8(u8 windowId, u8 left, u8 colorId, const u8 *string) +{ + left = (left * 4) - (GetStringWidth(2, string, -1) / 2u); + AddTextPrinterParameterized3(windowId, 2, left, 0, gUnknown_082F32D8[colorId], 0, string); +} @@ -37,9 +37,9 @@ struct BgConfig2 s32 bg_y; }; -static IWRAM_DATA struct BgControl sGpuBgConfigs; -static IWRAM_DATA struct BgConfig2 sGpuBgConfigs2[4]; -static IWRAM_DATA u32 sDmaBusyBitfield[4]; +static struct BgControl sGpuBgConfigs; +static struct BgConfig2 sGpuBgConfigs2[4]; +static u32 sDmaBusyBitfield[4]; u32 gUnneededFireRedVariable; @@ -220,7 +220,7 @@ static void ShowBgInternal(u8 bg) (sGpuBgConfigs.configs[bg].wraparound << 13) | (sGpuBgConfigs.configs[bg].screenSize << 14); - SetGpuReg((bg << 1) + 0x8, value); + SetGpuReg((bg << 1) + REG_OFFSET_BG0CNT, value); sGpuBgConfigs.bgVisibilityAndMode |= 1 << (bg + 8); sGpuBgConfigs.bgVisibilityAndMode &= DISPCNT_ALL_BG_AND_MODE_BITS; @@ -914,7 +914,6 @@ void CopyBgTilemapBufferToVram(u8 bg) void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height) { - const void *srcCopy; u16 destX16; u16 destY16; u16 mode; @@ -924,27 +923,31 @@ void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 wi switch (GetBgType(bg)) { case 0: - srcCopy = src; + { + const u16 * srcCopy = src; for (destY16 = destY; destY16 < (destY + height); destY16++) { for (destX16 = destX; destX16 < (destX + width); destX16++) { - ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *((u16*)srcCopy)++; + ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++; } } break; + } case 1: - srcCopy = src; + { + const u8 * srcCopy = src; mode = GetBgMetricAffineMode(bg, 0x1); for (destY16 = destY; destY16 < (destY + height); destY16++) { for (destX16 = destX; destX16 < (destX + width); destX16++) { - ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *((u8*)srcCopy)++; + ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; } } break; } + } } } diff --git a/src/cable_car.c b/src/cable_car.c index d44c9a241..adeee2647 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -245,7 +245,7 @@ static void CableCarMainCallback_Setup(void) { u16 imebak; u8 i = 0; - int sizeOut = 0; + u32 sizeOut = 0; switch (gMain.state) { diff --git a/src/contest.c b/src/contest.c index eb3252f72..662a27060 100644 --- a/src/contest.c +++ b/src/contest.c @@ -269,8 +269,6 @@ extern const u8 gText_Contest_Fear[]; extern const u8 gText_BDot[]; extern const u8 gText_CDot[]; extern const u8 *const gUnknown_08587E10[]; -extern const struct SpriteTemplate gSpriteTemplate_8587AD0; -extern const struct SpriteTemplate gSpriteTemplate_8587B18[]; extern void (*const gContestEffectFuncs[])(void); static const u8 gUnknown_08587A6C[] = @@ -1268,7 +1266,7 @@ static void sub_80D8108(u8 taskId) gTasks[taskId].data[0]++; break; case 1: - (s16)gBattle_BG1_Y += 7; + *(s16*)&gBattle_BG1_Y += 7; if ((s16)gBattle_BG1_Y <= 160) break; gTasks[taskId].data[0]++; @@ -2975,7 +2973,7 @@ static u8 sub_80DB174(u16 species, u32 otId, u32 personality, u32 index) else HandleLoadSpecialPokePic_DontHandleDeoxys(gMonBackPicTable + species, gMonSpritesGfxPtr->sprites[0], species, personality); - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x120, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x120, 0x20); SetMultiuseSpriteTemplateToPokemon(species, 0); spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x70, GetBattlerSpriteFinal_Y(2, species, FALSE), 30); diff --git a/src/contest_link_80F57C4.c b/src/contest_link_80F57C4.c index bae7859b5..a0a29f0ad 100644 --- a/src/contest_link_80F57C4.c +++ b/src/contest_link_80F57C4.c @@ -71,15 +71,10 @@ struct ContestLinkUnk14 u8 unk12; }; -struct ContestLinkUnk4 -{ - struct ContestLinkUnk14 unk0[4]; -}; - struct ContestLink80F57C4 { struct ContestLinkUnk0 *unk0; - struct ContestLinkUnk4 *unk4; + struct ContestLinkUnk14 (*unk4)[4]; u8 *unk8; u8 *unkC[4]; u8 *unk1C; @@ -205,9 +200,7 @@ void sub_80F57C4(void) void sub_80F591C(void) { int i, j; - s8 var0; - s8 var1; - int var2; + s8 var0, var1; u16 tile1, tile2; LZDecompressVram(gUnknown_08C19588, (void *)BG_CHAR_ADDR(0)); @@ -228,11 +221,7 @@ void sub_80F591C(void) if (j < var0) tile1 += 2; - var2 = var1; - if (var1 < 0) - var2 = -var2; - - if (j < var2) + if (j < abs(var1)) { tile2 = 0x60A4; if (var1 < 0) @@ -719,7 +708,7 @@ static void sub_80F6404(u8 taskId) if (top > 80) top = 80; - gBattle_WIN0V = (top << 8) | (160 - top);; + gBattle_WIN0V = (top << 8) | (160 - top); if (top == 80) gTasks[taskId].data[0]++; } @@ -737,8 +726,7 @@ static void sub_80F6404(u8 taskId) static void sub_80F66B4(u8 taskId) { - int i; - u16 nationalDexNum; + int i, nationalDexNum; if (gMain.newKeys & A_BUTTON) { @@ -859,13 +847,13 @@ static void sub_80F68F0(u8 taskId) void sub_80F69B8(u16 species, u8 monIndex, u8 srcOffset, u8 useDmaNow, u32 personality) { - u8 frameNum; const u8 *iconPtr; - u16 var0; - u16 var1; + u16 var0, var1, frameNum; - u8 *contestPlayerMonIndex = &gContestPlayerMonIndex; // fake match - frameNum = (monIndex == *contestPlayerMonIndex) ? 1 : 0; + if (monIndex == gContestPlayerMonIndex) + frameNum = 1; + else + frameNum = 0; iconPtr = GetMonIconPtr(species, personality, frameNum); iconPtr += srcOffset * 0x200 + 0x80; @@ -892,13 +880,12 @@ static void LoadAllContestMonIcons(u8 srcOffset, u8 useDmaNow) static void sub_80F6A9C(void) { - int i; - register u16 species asm("r0"); + int i, species; for (i = 0; i < 4; i++) { - species = GetIconSpecies(gContestMons[i].species, 0); - LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[species]], i * 0x10 + 0xA0, 0x20); + species = gContestMons[i].species; + LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[GetIconSpecies(species, 0)]], i * 0x10 + 0xA0, 0x20); } } @@ -1335,11 +1322,11 @@ static void sub_80F6F40(struct Sprite *sprite) static void sub_80F6F68(struct Sprite *sprite) { int i; - s16 var0; - var0 = (u16)sprite->data[7] + (u16)sprite->data[6]; - sprite->pos1.x -= var0 >> 8; - sprite->data[7] = (sprite->data[6] + sprite->data[7]) & 0xFF; + s16 delta = sprite->data[7] + sprite->data[6]; + sprite->pos1.x -= delta >> 8; + sprite->data[7] += sprite->data[6]; + sprite->data[7] &= 0xFF; if (sprite->pos1.x < sprite->data[4]) sprite->pos1.x = sprite->data[4]; @@ -1366,11 +1353,12 @@ static void sub_80F6FDC(struct Sprite *sprite) static void sub_80F7014(struct Sprite *sprite) { int i; - s16 var0; + s16 delta; - var0 = (u16)sprite->data[7] + (u16)sprite->data[6]; - sprite->pos1.x -= var0 >> 8; - sprite->data[7] = (sprite->data[6] + sprite->data[7]) & 0xFF; + delta = sprite->data[7] + sprite->data[6]; + sprite->pos1.x -= delta >> 8; + sprite->data[7] += sprite->data[6]; + sprite->data[7] &= 0xFF; for (i = 0; i < 3; i++) { struct Sprite *sprite2 = &gSprites[sprite->data[i]]; @@ -1487,14 +1475,11 @@ static void sub_80F71C8(void) CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_0203A034->unkC[2], 0, 0, 32, 4, palette); } -// fakematching? u8 sub_80F7310(u8 monIndex, u8 arg1) { - u32 var0; - u32 var1; + u32 var0 = gContestMonConditions[monIndex] << 16; + u32 var1 = var0 / 0x3F; - var0 = gContestMonConditions[monIndex] << 16; - var1 = var0 / 0x3F; if (var1 & 0xFFFF) var1 += 0x10000; @@ -1510,8 +1495,7 @@ u8 sub_80F7310(u8 monIndex, u8 arg1) s8 sub_80F7364(u8 arg0, u8 arg1) { - u32 r4; - u32 r2; + u32 r4, r2; s16 val; s8 ret; @@ -1607,9 +1591,10 @@ static void sub_80F75A8(struct Sprite *sprite) } else { - s16 delta = (u16)sprite->data[1] + 0x600; + s16 delta = sprite->data[1] + 0x600; sprite->pos1.x -= delta >> 8; - sprite->data[1] = (sprite->data[1] + 0x600) & 0xFF; + sprite->data[1] += 0x600; + sprite->data[1] &= 0xFF; if (sprite->pos1.x < 120) sprite->pos1.x = 120; @@ -1624,9 +1609,10 @@ static void sub_80F75A8(struct Sprite *sprite) static void sub_80F7620(struct Sprite *sprite) { - s16 delta = (u16)sprite->data[1] + 0x600; + s16 delta = sprite->data[1] + 0x600; sprite->pos1.x -= delta >> 8; - sprite->data[1] = (sprite->data[1] + 0x600) & 0xFF; + sprite->data[1] += + 0x600; + sprite->data[1] &= 0xFF; if (sprite->pos1.x < -32) { sprite->callback = SpriteCallbackDummy; @@ -1657,14 +1643,15 @@ static void sub_80F7670(u8 taskId) void sub_80F7768(struct Sprite *sprite) { - register s16 var0 asm("r1"); + s16 delta; sprite->data[3] += sprite->data[0]; sprite->pos2.x = Sin(sprite->data[3] >> 8, sprite->data[1]); - var0 = sprite->data[4] + sprite->data[2]; - sprite->pos1.x += var0 >> 8; - var0 = var0 & 0xFF; - sprite->data[4] = var0; + delta = sprite->data[4] + sprite->data[2]; + sprite->pos1.x += delta >> 8; + sprite->data[4] += sprite->data[2]; + sprite->data[4] &= 0xff; + sprite->pos1.y++; if (gUnknown_0203A034->unk0->unk9) sprite->invisible = 1; @@ -1695,705 +1682,145 @@ static void sub_80F7824(u8 taskId) } } -// static void sub_80F7880(void) -// { -// int i; -// int var0; -// int var1; -// int var2; -// int var3; -// u32 var4; -// int var5; -// int var6; -// s16 var7; -// s16 var8; -// s16 r2; - -// r2 = gUnknown_02039F08[0]; -// for (i = 1; i < 4; i++) -// { -// if (r2 < gUnknown_02039F08[i]) -// r2 = gUnknown_02039F08[i]; -// } - -// if (r2 < 0) -// { -// r2 = gUnknown_02039F08[0]; -// for (i = 1; i < 4; i++) -// { -// if (r2 > gUnknown_02039F08[i]) -// r2 = gUnknown_02039F08[i]; -// } -// } - -// // _080F78E4 -// for (i = 0; i < 4; i++) -// { -// var0 = gContestMonConditions[i] * 1000; -// var1 = r2; -// if (r2 < 0) -// var1 = -var1; - -// var2 = var0 / var1; -// if (var2 % 10 > 4) -// var2 += 10; - -// gUnknown_0203A034->unk4->unk0[i].unk0 = var2 / 10; -// var3 = gUnknown_02039F18[i]; -// if (var3 < 0) -// var3 = -var3; - -// var0 = var3 * 1000; -// var1 = r2; -// if (r2 < 0) -// var1 = -var1; - -// var2 = var0 / var1; -// if (var2 % 10 > 4) -// var2 += 10; - -// // _080F7966 -// gUnknown_0203A034->unk4->unk0[i].unk4 = var2 / 10; -// if (gUnknown_02039F18[i] < 0) -// gUnknown_0203A034->unk4->unk0[i].unk10 = 1; - -// var4 = gUnknown_0203A034->unk4->unk0[i].unk0 * 22528 / 100; -// if ((var4 & 0xFF) > 0x7F) -// var4 += 0x100; - -// gUnknown_0203A034->unk4->unk0[i].unk8 = var4 >> 8; -// var4 = gUnknown_0203A034->unk4->unk0[i].unk4 * 22528 / 100; -// if ((var4 & 0xFF) > 0x7F) -// var4 += 0x100; - -// gUnknown_0203A034->unk4->unk0[i].unkC = var4 >> 8; -// gUnknown_0203A034->unk4->unk0[i].unk11 = sub_80F7310(i, 1); -// var5 = sub_80F7364(i, 1); -// if (var5 < 0) -// var5 = -var5; - -// gUnknown_0203A034->unk4->unk0[i].unk12 = var5; -// if (gContestFinalStandings[i]) -// { -// var7 = gUnknown_0203A034->unk4->unk0[i].unk8; -// var8 = gUnknown_0203A034->unk4->unk0[i].unkC; -// if (gUnknown_0203A034->unk4->unk0[i].unk10) -// var8 = -var8; - -// if (var7 + var8 == 88) -// { -// if (var8 > 0) -// gUnknown_0203A034->unk4->unk0[i].unkC--; -// else if (var7 > 0) -// gUnknown_0203A034->unk4->unk0[i].unk8--; -// } -// } -// } -// } - -NAKED static void sub_80F7880(void) { - asm_unified("\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x4\n\ - ldr r0, =gUnknown_02039F08\n\ - ldrh r2, [r0]\n\ - adds r4, r0, 0\n\ - adds r3, r4, 0x2\n\ - movs r0, 0x2\n\ - mov r8, r0\n\ -_080F7898:\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - movs r5, 0\n\ - ldrsh r1, [r3, r5]\n\ - cmp r0, r1\n\ - bge _080F78A6\n\ - ldrh r2, [r3]\n\ -_080F78A6:\n\ - adds r3, 0x2\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - add r8, r0\n\ - mov r1, r8\n\ - cmp r1, 0\n\ - bge _080F7898\n\ - lsls r0, r2, 16\n\ - str r0, [sp]\n\ - cmp r0, 0\n\ - bge _080F78E4\n\ - ldrh r2, [r4]\n\ - adds r3, r4, 0x2\n\ - movs r4, 0x2\n\ - mov r8, r4\n\ -_080F78C4:\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - movs r5, 0\n\ - ldrsh r1, [r3, r5]\n\ - cmp r0, r1\n\ - ble _080F78D2\n\ - ldrh r2, [r3]\n\ -_080F78D2:\n\ - adds r3, 0x2\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - add r8, r0\n\ - lsls r1, r2, 16\n\ - str r1, [sp]\n\ - mov r4, r8\n\ - cmp r4, 0\n\ - bge _080F78C4\n\ -_080F78E4:\n\ - movs r5, 0\n\ - mov r8, r5\n\ - mov r10, r5\n\ -_080F78EA:\n\ - ldr r0, =gContestMonConditions\n\ - mov r1, r8\n\ - lsls r7, r1, 1\n\ - adds r0, r7, r0\n\ - movs r2, 0\n\ - ldrsh r1, [r0, r2]\n\ - lsls r0, r1, 5\n\ - subs r0, r1\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - lsls r0, 3\n\ - ldr r4, [sp]\n\ - asrs r5, r4, 16\n\ - adds r1, r5, 0\n\ - cmp r5, 0\n\ - bge _080F790C\n\ - negs r1, r5\n\ -_080F790C:\n\ - bl __divsi3\n\ - adds r4, r0, 0\n\ - movs r1, 0xA\n\ - bl __modsi3\n\ - cmp r0, 0x4\n\ - ble _080F791E\n\ - adds r4, 0xA\n\ -_080F791E:\n\ - ldr r0, =gUnknown_0203A034\n\ - mov r9, r0\n\ - ldr r0, [r0]\n\ - ldr r0, [r0, 0x4]\n\ - mov r1, r10\n\ - adds r6, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - str r0, [r6]\n\ - ldr r0, =gUnknown_02039F18\n\ - adds r7, r0\n\ - movs r2, 0\n\ - ldrsh r1, [r7, r2]\n\ - cmp r1, 0\n\ - bge _080F7942\n\ - negs r1, r1\n\ -_080F7942:\n\ - lsls r0, r1, 5\n\ - subs r0, r1\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - lsls r0, 3\n\ - adds r1, r5, 0\n\ - cmp r1, 0\n\ - bge _080F7954\n\ - negs r1, r1\n\ -_080F7954:\n\ - bl __divsi3\n\ - adds r4, r0, 0\n\ - movs r1, 0xA\n\ - bl __modsi3\n\ - cmp r0, 0x4\n\ - ble _080F7966\n\ - adds r4, 0xA\n\ -_080F7966:\n\ - adds r0, r4, 0\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - str r0, [r6, 0x4]\n\ - movs r4, 0\n\ - ldrsh r0, [r7, r4]\n\ - cmp r0, 0\n\ - bge _080F797C\n\ - movs r0, 0x1\n\ - strb r0, [r6, 0x10]\n\ -_080F797C:\n\ - mov r5, r9\n\ - ldr r0, [r5]\n\ - ldr r0, [r0, 0x4]\n\ - mov r1, r10\n\ - adds r4, r1, r0\n\ - ldr r1, [r4]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - subs r0, r1\n\ - lsls r0, 11\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - adds r1, r0, 0\n\ - movs r5, 0xFF\n\ - ands r0, r5\n\ - cmp r0, 0x7F\n\ - bls _080F79A8\n\ - movs r2, 0x80\n\ - lsls r2, 1\n\ - adds r1, r2\n\ -_080F79A8:\n\ - lsrs r0, r1, 8\n\ - str r0, [r4, 0x8]\n\ - ldr r1, [r4, 0x4]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - subs r0, r1\n\ - lsls r0, 11\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - adds r1, r0, 0\n\ - ands r0, r5\n\ - cmp r0, 0x7F\n\ - bls _080F79CC\n\ - movs r5, 0x80\n\ - lsls r5, 1\n\ - adds r1, r5\n\ -_080F79CC:\n\ - lsrs r0, r1, 8\n\ - str r0, [r4, 0xC]\n\ - mov r0, r8\n\ - lsls r4, r0, 24\n\ - lsrs r4, 24\n\ - adds r0, r4, 0\n\ - movs r1, 0x1\n\ - bl sub_80F7310\n\ - mov r2, r9\n\ - ldr r1, [r2]\n\ - ldr r1, [r1, 0x4]\n\ - add r1, r10\n\ - strb r0, [r1, 0x11]\n\ - adds r0, r4, 0\n\ - movs r1, 0x1\n\ - bl sub_80F7364\n\ - mov r4, r9\n\ - ldr r1, [r4]\n\ - ldr r1, [r1, 0x4]\n\ - add r1, r10\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - cmp r0, 0\n\ - bge _080F7A02\n\ - negs r0, r0\n\ -_080F7A02:\n\ - strb r0, [r1, 0x12]\n\ - ldr r0, =gContestFinalStandings\n\ - add r0, r8\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _080F7A60\n\ - mov r5, r9\n\ - ldr r0, [r5]\n\ - ldr r0, [r0, 0x4]\n\ - mov r2, r10\n\ - adds r1, r2, r0\n\ - ldr r5, [r1, 0x8]\n\ - ldrh r3, [r1, 0x8]\n\ - ldr r4, [r1, 0xC]\n\ - ldrh r2, [r1, 0xC]\n\ - ldrb r0, [r1, 0x10]\n\ - cmp r0, 0\n\ - beq _080F7A2C\n\ - lsls r0, r2, 16\n\ - negs r0, r0\n\ - lsrs r2, r0, 16\n\ -_080F7A2C:\n\ - lsls r0, r3, 16\n\ - asrs r3, r0, 16\n\ - lsls r0, r2, 16\n\ - asrs r2, r0, 16\n\ - adds r0, r3, r2\n\ - cmp r0, 0x58\n\ - bne _080F7A60\n\ - cmp r2, 0\n\ - ble _080F7A58\n\ - subs r0, r4, 0x1\n\ - str r0, [r1, 0xC]\n\ - b _080F7A60\n\ - .pool\n\ -_080F7A58:\n\ - cmp r3, 0\n\ - ble _080F7A60\n\ - subs r0, r5, 0x1\n\ - str r0, [r1, 0x8]\n\ -_080F7A60:\n\ - movs r4, 0x14\n\ - add r10, r4\n\ - movs r5, 0x1\n\ - add r8, r5\n\ - mov r0, r8\n\ - cmp r0, 0x3\n\ - bgt _080F7A70\n\ - b _080F78EA\n\ -_080F7A70:\n\ - add sp, 0x4\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0"); -} - -// static void sub_80F7A80(u8 arg0, u8 arg1) -// { -// int i; -// u8 taskId; -// u8 sp8, spC; - -// sp8 = 0; -// spC = 0; -// if (!arg0) -// { -// u32 var0; -// for (i = 0; i < 4; i++) -// { -// int var1 = gUnknown_0203A034->unk4->unk0[i].unk11; -// if (arg1 < var1) -// { -// int x = var1 + 19; -// x -= arg1; -// x--; -// FillBgTilemapBufferRect_Palette0(1, 0x60B3, x, i * 3 + 5, 1, 1); -// taskId = CreateTask(sub_80F7CA8, 10); -// var0 = ((gUnknown_0203A034->unk4->unk0[i].unk8 << 16) / gUnknown_0203A034->unk4->unk0[i].unk11) * (arg1 + 1); -// var0 &= 0xFFFF; -// if (var0 > 0x7FFF) -// var0 += 0x10000; - -// gTasks[taskId].data[0] = i; -// gTasks[taskId].data[1] = var0 >> 16; -// gUnknown_0203A034->unk0->unk14++; -// sp8++; -// } -// } -// } -// else -// { -// u32 var0; -// for (i = 0; i < 4; i++) -// { -// int tile; -// s8 var1 = gUnknown_0203A034->unk4->unk0[i].unk12; -// tile = gUnknown_0203A034->unk4->unk0[i].unk10 ? 0x60A5 : 0x60A3; -// if (arg1 < var1) -// { -// int thing = ((s8)arg1 - 19); -// int x = var1 - thing; -// x--; -// FillBgTilemapBufferRect_Palette0(1, tile, x, i * 3 + 6, 1, 1); -// taskId = CreateTask(sub_80F7CA8, 10); -// var0 = ((gUnknown_0203A034->unk4->unk0[i].unkC << 16) / gUnknown_0203A034->unk4->unk0[i].unk12) * (arg1 + 1); -// var0 &= 0xFFFF; -// if (var0 > 0x7FFF) -// var0 += 0x10000; - -// gTasks[taskId].data[0] = i; -// if (gUnknown_0203A034->unk4->unk0[i].unk10) -// { -// gTasks[taskId].data[2] = 1; -// spC++; -// } -// else -// { -// sp8++; -// } - -// if (gUnknown_0203A034->unk4->unk0[i].unk10) -// gTasks[taskId].data[1] = gUnknown_0203A034->unk4->unk0[i].unk8 - (var0 >> 16); -// else -// gTasks[taskId].data[1] = gUnknown_0203A034->unk4->unk0[i].unk8 + (var0 >> 16); - -// gUnknown_0203A034->unk0->unk14++; -// } -// } -// } - -// if (spC) -// PlaySE(SE_PIN); - -// if (sp8) -// PlaySE(SE_BAN); -// } + int i, r4; + u32 r1; + s16 r2; + s8 var; + + r2 = gUnknown_02039F08[0]; + for (i = 1; i < 4; i++) + { + if (r2 < gUnknown_02039F08[i]) + r2 = gUnknown_02039F08[i]; + } + + if (r2 < 0) + { + r2 = gUnknown_02039F08[0]; + for (i = 1; i < 4; i++) + { + if (r2 > gUnknown_02039F08[i]) + r2 = gUnknown_02039F08[i]; + } + } + + for (i = 0; i < 4; i++) + { + r4 = (gContestMonConditions[i] * 1000) / abs(r2); + if (r4 % 10 > 4) + r4 += 10; + (*gUnknown_0203A034->unk4)[i].unk0 = r4 / 10; + + r4 = (abs(gUnknown_02039F18[i]) * 1000) / abs(r2); + if (r4 % 10 > 4) + r4 += 10; + (*gUnknown_0203A034->unk4)[i].unk4 = r4 / 10; + + if (gUnknown_02039F18[i] < 0) + (*gUnknown_0203A034->unk4)[i].unk10 = 1; + + r1 = ((*gUnknown_0203A034->unk4)[i].unk0 * 22528) / 100; + if ((r1 & 0xFF) > 0x7F) + r1 += 0x100; + (*gUnknown_0203A034->unk4)[i].unk8 = r1 >> 8; + + r1 = ((*gUnknown_0203A034->unk4)[i].unk4 * 22528) / 100; + if ((r1 & 0xFF) > 0x7F) + r1 += 0x100; + (*gUnknown_0203A034->unk4)[i].unkC = r1 >> 8; + + (*gUnknown_0203A034->unk4)[i].unk11 = sub_80F7310(i, 1); + var = sub_80F7364(i, 1); + (*gUnknown_0203A034->unk4)[i].unk12 = abs(var); + + if (gContestFinalStandings[i]) + { + s16 var1 = (*gUnknown_0203A034->unk4)[i].unk8; + s16 var2 = (*gUnknown_0203A034->unk4)[i].unkC; + + if ((*gUnknown_0203A034->unk4)[i].unk10) + var2 *= -1; + + if (var1 + var2 == 88) + { + if (var2 > 0) + (*gUnknown_0203A034->unk4)[i].unkC--; + else if (var1 > 0) + (*gUnknown_0203A034->unk4)[i].unk8--; + } + } + } +} -NAKED static void sub_80F7A80(u8 arg0, u8 arg1) { - asm_unified("\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x14\n\ - lsls r0, 24\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r8, r1\n\ - movs r1, 0\n\ - str r1, [sp, 0x8]\n\ - movs r3, 0\n\ - str r3, [sp, 0xC]\n\ - cmp r0, 0\n\ - bne _080F7B5C\n\ - mov r9, r3\n\ - ldr r4, =gUnknown_0203A034\n\ - mov r10, r4\n\ - movs r7, 0xA0\n\ - lsls r7, 19\n\ - movs r6, 0\n\ -_080F7AAC:\n\ - mov r1, r10\n\ - ldr r0, [r1]\n\ - ldr r0, [r0, 0x4]\n\ - adds r0, r6, r0\n\ - ldrb r2, [r0, 0x11]\n\ - cmp r8, r2\n\ - bcs _080F7B2E\n\ - adds r2, 0x13\n\ - mov r3, r8\n\ - subs r2, r3\n\ - subs r2, 0x1\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - lsrs r3, r7, 24\n\ - movs r0, 0x1\n\ - str r0, [sp]\n\ - str r0, [sp, 0x4]\n\ - ldr r1, =0x000060b3\n\ - bl FillBgTilemapBufferRect_Palette0\n\ - ldr r0, =sub_80F7CA8\n\ - movs r1, 0xA\n\ - bl CreateTask\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - mov r0, r10\n\ - ldr r4, [r0]\n\ - ldr r1, [r4, 0x4]\n\ - adds r1, r6, r1\n\ - ldr r0, [r1, 0x8]\n\ - lsls r0, 16\n\ - ldrb r1, [r1, 0x11]\n\ - bl __udivsi3\n\ - mov r1, r8\n\ - adds r1, 0x1\n\ - adds r3, r0, 0\n\ - muls r3, r1\n\ - ldr r0, =0x0000ffff\n\ - ands r0, r3\n\ - ldr r1, =0x00007fff\n\ - cmp r0, r1\n\ - bls _080F7B0A\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - adds r3, r1\n\ -_080F7B0A:\n\ - ldr r1, =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - mov r1, r9\n\ - strh r1, [r0, 0x8]\n\ - lsrs r1, r3, 16\n\ - strh r1, [r0, 0xA]\n\ - ldr r1, [r4]\n\ - ldrb r0, [r1, 0x14]\n\ - adds r0, 0x1\n\ - strb r0, [r1, 0x14]\n\ - ldr r0, [sp, 0x8]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x8]\n\ -_080F7B2E:\n\ - movs r3, 0xC0\n\ - lsls r3, 18\n\ - adds r7, r3\n\ - adds r6, 0x14\n\ - movs r4, 0x1\n\ - add r9, r4\n\ - mov r0, r9\n\ - cmp r0, 0x3\n\ - ble _080F7AAC\n\ - b _080F7C7E\n\ - .pool\n\ -_080F7B5C:\n\ - movs r1, 0\n\ - mov r9, r1\n\ - mov r10, r1\n\ - movs r3, 0xC0\n\ - lsls r3, 19\n\ - str r3, [sp, 0x10]\n\ -_080F7B68:\n\ - ldr r4, =gUnknown_0203A034\n\ - ldr r0, [r4]\n\ - ldr r0, [r0, 0x4]\n\ - add r0, r10\n\ - ldrb r2, [r0, 0x12]\n\ - ldrb r0, [r0, 0x10]\n\ - ldr r1, =0x000060a3\n\ - cmp r0, 0\n\ - beq _080F7B7C\n\ - adds r1, 0x2\n\ -_080F7B7C:\n\ - lsls r0, r2, 24\n\ - asrs r0, 24\n\ - cmp r8, r0\n\ - bge _080F7C64\n\ - mov r3, r8\n\ - lsls r2, r3, 24\n\ - asrs r2, 24\n\ - subs r2, 0x13\n\ - subs r2, r0, r2\n\ - subs r2, 0x1\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - ldr r4, [sp, 0x10]\n\ - lsrs r3, r4, 24\n\ - movs r7, 0x1\n\ - str r7, [sp]\n\ - str r7, [sp, 0x4]\n\ - movs r0, 0x1\n\ - bl FillBgTilemapBufferRect_Palette0\n\ - ldr r0, =sub_80F7CA8\n\ - movs r1, 0xA\n\ - bl CreateTask\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldr r0, =gUnknown_0203A034\n\ - ldr r6, [r0]\n\ - ldr r1, [r6, 0x4]\n\ - add r1, r10\n\ - ldr r0, [r1, 0xC]\n\ - lsls r0, 16\n\ - ldrb r1, [r1, 0x12]\n\ - bl __udivsi3\n\ - mov r1, r8\n\ - adds r1, 0x1\n\ - adds r3, r0, 0\n\ - muls r3, r1\n\ - ldr r0, =0x0000ffff\n\ - ands r0, r3\n\ - ldr r1, =0x00007fff\n\ - cmp r0, r1\n\ - bls _080F7BDA\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - adds r3, r1\n\ -_080F7BDA:\n\ - ldr r1, =gTasks\n\ - lsls r2, r5, 2\n\ - adds r0, r2, r5\n\ - lsls r0, 3\n\ - adds r4, r0, r1\n\ - mov r0, r9\n\ - strh r0, [r4, 0x8]\n\ - ldr r0, [r6, 0x4]\n\ - add r0, r10\n\ - ldrb r0, [r0, 0x10]\n\ - adds r6, r1, 0\n\ - cmp r0, 0\n\ - beq _080F7C1C\n\ - strh r7, [r4, 0xC]\n\ - ldr r0, [sp, 0xC]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0xC]\n\ - b _080F7C26\n\ - .pool\n\ -_080F7C1C:\n\ - ldr r0, [sp, 0x8]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x8]\n\ -_080F7C26:\n\ - ldr r1, =gUnknown_0203A034\n\ - ldr r0, [r1]\n\ - ldr r0, [r0, 0x4]\n\ - mov r4, r10\n\ - adds r1, r4, r0\n\ - ldrb r0, [r1, 0x10]\n\ - ldr r4, =gUnknown_0203A034\n\ - cmp r0, 0\n\ - beq _080F7C4C\n\ - adds r0, r2, r5\n\ - lsls r0, 3\n\ - adds r0, r6\n\ - lsrs r2, r3, 16\n\ - ldr r1, [r1, 0x8]\n\ - subs r1, r2\n\ - b _080F7C58\n\ - .pool\n\ -_080F7C4C:\n\ - adds r0, r2, r5\n\ - lsls r0, 3\n\ - adds r0, r6\n\ - lsrs r2, r3, 16\n\ - ldr r1, [r1, 0x8]\n\ - adds r1, r2\n\ -_080F7C58:\n\ - strh r1, [r0, 0xA]\n\ - ldr r0, [r4]\n\ - ldr r1, [r0]\n\ - ldrb r0, [r1, 0x14]\n\ - adds r0, 0x1\n\ - strb r0, [r1, 0x14]\n\ -_080F7C64:\n\ - movs r0, 0x14\n\ - add r10, r0\n\ - ldr r1, [sp, 0x10]\n\ - movs r3, 0xC0\n\ - lsls r3, 18\n\ - adds r1, r3\n\ - str r1, [sp, 0x10]\n\ - movs r4, 0x1\n\ - add r9, r4\n\ - mov r0, r9\n\ - cmp r0, 0x3\n\ - bgt _080F7C7E\n\ - b _080F7B68\n\ -_080F7C7E:\n\ - ldr r1, [sp, 0xC]\n\ - cmp r1, 0\n\ - beq _080F7C8A\n\ - movs r0, 0x16\n\ - bl PlaySE\n\ -_080F7C8A:\n\ - ldr r3, [sp, 0x8]\n\ - cmp r3, 0\n\ - beq _080F7C96\n\ - movs r0, 0x15\n\ - bl PlaySE\n\ -_080F7C96:\n\ - add sp, 0x14\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0"); + int i, taskId; + u32 var0; + u8 sp8 = 0, spC = 0; + + if (!arg0) + { + for (i = 0; i < 4; i++) + { + u8 unk = (*gUnknown_0203A034->unk4)[i].unk11; + if (arg1 < unk) + { + FillBgTilemapBufferRect_Palette0(1, 0x60B3, ((19 + unk) - arg1) - 1, i * 3 + 5, 1, 1); + taskId = CreateTask(sub_80F7CA8, 10); + + var0 = (((*gUnknown_0203A034->unk4)[i].unk8 << 16) / (*gUnknown_0203A034->unk4)[i].unk11) * (arg1 + 1); + if ((var0 & 0xFFFF) > 0x7FFF) + var0 += 0x10000; + + gTasks[taskId].data[0] = i; + gTasks[taskId].data[1] = var0 >> 16; + gUnknown_0203A034->unk0->unk14++; + sp8++; + } + } + } + else + { + for (i = 0; i < 4; i++) + { + s8 unk = (*gUnknown_0203A034->unk4)[i].unk12; + u32 tile = (*gUnknown_0203A034->unk4)[i].unk10 ? 0x60A5 : 0x60A3; + if (arg1 < unk) + { + FillBgTilemapBufferRect_Palette0(1, tile, ((19 + unk) - arg1) - 1, i * 3 + 6, 1, 1); + taskId = CreateTask(sub_80F7CA8, 10); + + var0 = (((*gUnknown_0203A034->unk4)[i].unkC << 16) / (*gUnknown_0203A034->unk4)[i].unk12) * (arg1 + 1); + if ((var0 & 0xFFFF) > 0x7FFF) + var0 += 0x10000; + + gTasks[taskId].data[0] = i; + if ((*gUnknown_0203A034->unk4)[i].unk10) + { + gTasks[taskId].data[2] = 1; + spC++; + } + else + { + sp8++; + } + + if ((*gUnknown_0203A034->unk4)[i].unk10) + gTasks[taskId].data[1] = -(var0 >> 16) + (*gUnknown_0203A034->unk4)[i].unk8 ; + else + gTasks[taskId].data[1] = (var0 >> 16) + (*gUnknown_0203A034->unk4)[i].unk8; + + gUnknown_0203A034->unk0->unk14++; + } + } + } + + if (spC) + PlaySE(SE_BOO); + if (sp8) + PlaySE(SE_PIN); } void sub_80F7CA8(u8 taskId) @@ -2624,8 +2051,7 @@ void sub_80F8290(void) void sub_80F82B4(void) { - u8 i; - u8 count; + u8 i, count; for (i = 0, count = 0; i < 4; i++) { diff --git a/src/contest_painting.c b/src/contest_painting.c index b43923c7b..1b95e1ed9 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -28,11 +28,11 @@ struct ContestWinner *gUnknown_030061C0; u16 *gContestPaintingMonPalette; // IWRAM bss -IWRAM_DATA u8 gContestPaintingState; -IWRAM_DATA u16 gContestPaintingMosaicVal; -IWRAM_DATA u16 gContestPaintingFadeCounter; -IWRAM_DATA bool8 gUnknown_030011F6; -IWRAM_DATA u8 gContestPaintingWindowId; +static u8 gContestPaintingState; +static u16 gContestPaintingMosaicVal; +static u16 gContestPaintingFadeCounter; +static bool8 gUnknown_030011F6; +static u8 gContestPaintingWindowId; static void ShowContestPainting(void); static void HoldContestPainting(void); @@ -250,8 +250,7 @@ static void HoldContestPainting(void) case 1: if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { - u8 two = 2; //needed to make the asm match - gContestPaintingState = two; + gContestPaintingState++; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); } @@ -293,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); @@ -363,7 +362,7 @@ static void VBlankCB_ContestPainting(void) void sub_81302E8(u16 species, u8 arg1) { - const void *pal = GetFrontSpritePalFromSpeciesAndPersonality(species, gUnknown_030061C0->trainerId, gUnknown_030061C0->personality); + const void *pal = GetMonSpritePalFromSpeciesAndPersonality(species, gUnknown_030061C0->trainerId, gUnknown_030061C0->personality); LZDecompressVram(pal, gContestPaintingMonPalette); if (!arg1) { @@ -685,7 +684,7 @@ static void sub_8130760(u8 contestResult) gUnknown_030061A0.var_16 = 2; gUnknown_030061A0.var_0 = contestResult; - gUnknown_030061A0.var_10 = 0x6010000; + gUnknown_030061A0.var_10 = OBJ_VRAM0; sub_8124F2C(&gUnknown_030061A0); sub_81261A4(&gUnknown_030061A0); 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/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/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/region_map/city_map_entries.h b/src/data/region_map/city_map_entries.h new file mode 100644 index 000000000..7b8361a7c --- /dev/null +++ b/src/data/region_map/city_map_entries.h @@ -0,0 +1,113 @@ +const struct CityMapEntry gPokenavCityMaps[] = +{ + { + .mapSecId = 0, + .index = 0, + .tilemap = gPokenavCityMap_Littleroot_0, + }, + { + .mapSecId = 1, + .index = 0, + .tilemap = gPokenavCityMap_Oldale_0, + }, + { + .mapSecId = 2, + .index = 0, + .tilemap = gPokenavCityMap_Dewford_0, + }, + { + .mapSecId = 3, + .index = 0, + .tilemap = gPokenavCityMap_Lavarige_0, + }, + { + .mapSecId = 4, + .index = 0, + .tilemap = gPokenavCityMap_Fallarbor_0, + }, + { + .mapSecId = 5, + .index = 0, + .tilemap = gPokenavCityMap_Verdanturf_0, + }, + { + .mapSecId = 6, + .index = 0, + .tilemap = gPokenavCityMap_Pacifidlog_0, + }, + { + .mapSecId = 7, + .index = 0, + .tilemap = gPokenavCityMap_Petalburg_0, + }, + { + .mapSecId = 8, + .index = 0, + .tilemap = gPokenavCityMap_Slateport_0, + }, + { + .mapSecId = 8, + .index = 1, + .tilemap = gPokenavCityMap_Slateport_1, + }, + { + .mapSecId = 9, + .index = 0, + .tilemap = gPokenavCityMap_Mauville_0, + }, + { + .mapSecId = 9, + .index = 1, + .tilemap = gPokenavCityMap_Mauville_1, + }, + { + .mapSecId = 10, + .index = 0, + .tilemap = gPokenavCityMap_Rustboro_0, + }, + { + .mapSecId = 10, + .index = 1, + .tilemap = gPokenavCityMap_Rustboro_1, + }, + { + .mapSecId = 11, + .index = 0, + .tilemap = gPokenavCityMap_Fortree_0, + }, + { + .mapSecId = 12, + .index = 0, + .tilemap = gPokenavCityMap_Lilycove_0, + }, + { + .mapSecId = 12, + .index = 1, + .tilemap = gPokenavCityMap_Lilycove_1, + }, + { + .mapSecId = 13, + .index = 0, + .tilemap = gPokenavCityMap_Mossdeep_0, + }, + { + .mapSecId = 13, + .index = 1, + .tilemap = gPokenavCityMap_Mossdeep_1, + }, + { + .mapSecId = 14, + .index = 0, + .tilemap = gPokenavCityMap_Sootopolis_0, + }, + { + .mapSecId = 15, + .index = 0, + .tilemap = gPokenavCityMap_EverGrande_0, + }, + { + .mapSecId = 15, + .index = 1, + .tilemap = gPokenavCityMap_EverGrande_1, + }, +}; diff --git a/src/data/region_map/city_map_tilemaps.h b/src/data/region_map/city_map_tilemaps.h new file mode 100644 index 000000000..8a8a931f9 --- /dev/null +++ b/src/data/region_map/city_map_tilemaps.h @@ -0,0 +1,22 @@ +const u32 gPokenavCityMap_Lavarige_0[] = INCBIN_U32("graphics/pokenav/city_maps/lavaridge_0.bin.lz"); +const u32 gPokenavCityMap_Fallarbor_0[] = INCBIN_U32("graphics/pokenav/city_maps/fallarbor_0.bin.lz"); +const u32 gPokenavCityMap_Fortree_0[] = INCBIN_U32("graphics/pokenav/city_maps/fortree_0.bin.lz"); +const u32 gPokenavCityMap_Slateport_0[] = INCBIN_U32("graphics/pokenav/city_maps/slateport_0.bin.lz"); +const u32 gPokenavCityMap_Slateport_1[] = INCBIN_U32("graphics/pokenav/city_maps/slateport_1.bin.lz"); +const u32 gPokenavCityMap_Rustboro_0[] = INCBIN_U32("graphics/pokenav/city_maps/rustboro_0.bin.lz"); +const u32 gPokenavCityMap_Rustboro_1[] = INCBIN_U32("graphics/pokenav/city_maps/rustboro_1.bin.lz"); +const u32 gPokenavCityMap_Pacifidlog_0[] = INCBIN_U32("graphics/pokenav/city_maps/pacifidlog_0.bin.lz"); +const u32 gPokenavCityMap_Mauville_1[] = INCBIN_U32("graphics/pokenav/city_maps/mauville_1.bin.lz"); +const u32 gPokenavCityMap_Mauville_0[] = INCBIN_U32("graphics/pokenav/city_maps/mauville_0.bin.lz"); +const u32 gPokenavCityMap_Oldale_0[] = INCBIN_U32("graphics/pokenav/city_maps/oldale_0.bin.lz"); +const u32 gPokenavCityMap_Lilycove_1[] = INCBIN_U32("graphics/pokenav/city_maps/lilycove_1.bin.lz"); +const u32 gPokenavCityMap_Lilycove_0[] = INCBIN_U32("graphics/pokenav/city_maps/lilycove_0.bin.lz"); +const u32 gPokenavCityMap_Littleroot_0[] = INCBIN_U32("graphics/pokenav/city_maps/littleroot_0.bin.lz"); +const u32 gPokenavCityMap_Dewford_0[] = INCBIN_U32("graphics/pokenav/city_maps/dewford_0.bin.lz"); +const u32 gPokenavCityMap_Sootopolis_0[] = INCBIN_U32("graphics/pokenav/city_maps/sootopolis_0.bin.lz"); +const u32 gPokenavCityMap_EverGrande_0[] = INCBIN_U32("graphics/pokenav/city_maps/ever_grande_0.bin.lz"); +const u32 gPokenavCityMap_EverGrande_1[] = INCBIN_U32("graphics/pokenav/city_maps/ever_grande_1.bin.lz"); +const u32 gPokenavCityMap_Verdanturf_0[] = INCBIN_U32("graphics/pokenav/city_maps/verdanturf_0.bin.lz"); +const u32 gPokenavCityMap_Mossdeep_1[] = INCBIN_U32("graphics/pokenav/city_maps/mossdeep_1.bin.lz"); +const u32 gPokenavCityMap_Mossdeep_0[] = INCBIN_U32("graphics/pokenav/city_maps/mossdeep_0.bin.lz"); +const u32 gPokenavCityMap_Petalburg_0[] = INCBIN_U32("graphics/pokenav/city_maps/petalburg_0.bin.lz"); diff --git a/src/data/text/gift_ribbon_descriptions.h b/src/data/text/gift_ribbon_descriptions.h new file mode 100644 index 000000000..ea108be18 --- /dev/null +++ b/src/data/text/gift_ribbon_descriptions.h @@ -0,0 +1,115 @@ +const u8 gGiftRibbonDescriptionPart1_2003RegionalTourney[] = _("2003 REGIONAL TOURNEY"); +const u8 gGiftRibbonDescriptionPart2_Champion[] = _("CHAMPION RIBBON"); +const u8 gGiftRibbonDescriptionPart1_2003NationalTourney[] = _("2003 NATIONAL TOURNEY"); +const u8 gGiftRibbonDescriptionPart1_2003GlobalCup[] = _("2003 GLOBAL CUP"); +const u8 gGiftRibbonDescriptionPart2_RunnerUp[] = _("Runner-up RIBBON"); +const u8 gGiftRibbonDescriptionPart2_Semifinalist[] = _("Semifinalist RIBBON"); +const u8 gGiftRibbonDescriptionPart1_2004RegionalTourney[] = _("2004 REGIONAL TOURNEY"); +const u8 gGiftRibbonDescriptionPart1_2004NationalTourney[] = _("2004 NATIONAL TOURNEY"); +const u8 gGiftRibbonDescriptionPart1_2004GlobalCup[] = _("2004 GLOBAL CUP"); +const u8 gGiftRibbonDescriptionPart1_2005RegionalTourney[] = _("2005 REGIONAL TOURNEY"); +const u8 gGiftRibbonDescriptionPart1_2005NationalTourney[] = _("2005 NATIONAL TOURNEY"); +const u8 gGiftRibbonDescriptionPart1_2005GlobalCup[] = _("2005 GLOBAL CUP"); +const u8 gGiftRibbonDescriptionPart1_PokemonBattleCup[] = _("POKéMON BATTLE CUP"); +const u8 gGiftRibbonDescriptionPart2_Participation[] = _("Participation RIBBON"); +const u8 gGiftRibbonDescriptionPart1_PokemonLeague[] = _("POKéMON LEAGUE"); +const u8 gGiftRibbonDescriptionPart1_AdvanceCup[] = _("ADVANCE CUP"); +const u8 gGiftRibbonDescriptionPart1_PokemonTournament[] = _("POKéMON Tournament"); +const u8 gGiftRibbonDescriptionPart2_Participation2[] = _("Participation RIBBON"); +const u8 gGiftRibbonDescriptionPart1_PokemonEvent[] = _("POKéMON Event"); +const u8 gGiftRibbonDescriptionPart1_PokemonFestival[] = _("POKéMON Festival"); +const u8 gGiftRibbonDescriptionPart1_DifficultyClearing[] = _("Difficulty-clearing"); +const u8 gGiftRibbonDescriptionPart2_Commemorative[] = _("Commemorative RIBBON"); +const u8 gGiftRibbonDescriptionPart1_ClearingAllChallenges[] = _("RIBBON awarded for"); +const u8 gGiftRibbonDescriptionPart2_ClearingAllChallenges[] = _("clearing all challenges."); +const u8 gGiftRibbonDescriptionPart1_100StraightWin[] = _("100-straight Win"); +const u8 gGiftRibbonDescriptionPart1_DarknessTower[] = _("DARKNESS TOWER Clear"); +const u8 gGiftRibbonDescriptionPart1_RedTower[] = _("RED TOWER Clear"); +const u8 gGiftRibbonDescriptionPart1_BlackironTower[] = _("BLACKIRON TOWER Clear"); +const u8 gGiftRibbonDescriptionPart1_FinalTower[] = _("FINAL TOWER Clear"); +const u8 gGiftRibbonDescriptionPart1_LegendMaking[] = _("Legend-making"); +const u8 gGiftRibbonDescriptionPart1_PokemonCenterTokyo[] = _("POKéMON CENTER TOKYO"); +const u8 gGiftRibbonDescriptionPart1_PokemonCenterOsaka[] = _("POKéMON CENTER OSAKA"); +const u8 gGiftRibbonDescriptionPart1_PokemonCenterNagoya[] = _("POKéMON CENTER NAGOYA"); +const u8 gGiftRibbonDescriptionPart1_PokemonCenterNY[] = _("POKéMON CENTER NY"); +const u8 gGiftRibbonDescriptionPart1_SummerHolidays[] = _("Summer Holidays RIBBON"); +const u8 gGiftRibbonDescriptionPart2_EmptyString[] = _(""); +const u8 gGiftRibbonDescriptionPart1_WinterHolidays[] = _("Winter Holidays RIBBON"); +const u8 gGiftRibbonDescriptionPart1_SpringHolidays[] = _("Spring Holidays RIBBON"); +const u8 gGiftRibbonDescriptionPart1_Evergreen[] = _("Evergreen RIBBON"); +const u8 gGiftRibbonDescriptionPart1_SpecialHoliday[] = _("Special Holiday RIBBON"); +const u8 gGiftRibbonDescriptionPart1_HardWorker[] = _("Hard Worker RIBBON"); +const u8 gGiftRibbonDescriptionPart1_LotsOfFriends[] = _("Lots of Friends RIBBON"); +const u8 gGiftRibbonDescriptionPart1_FullOfEnergy[] = _("Full of Energy RIBBON"); +const u8 gGiftRibbonDescriptionPart1_LovedPokemon[] = _("A commemorative RIBBON"); +const u8 gGiftRibbonDescriptionPart2_LovedPokemon[] = _("for a loved POKéMON."); +const u8 gGiftRibbonDescriptionPart1_LoveForPokemon[] = _("RIBBON that shows"); +const u8 gGiftRibbonDescriptionPart2_LoveForPokemon[] = _("love for POKéMON."); + +const u8 *const gGiftRibbonDescriptionPointers[][2] = +{ + {gGiftRibbonDescriptionPart1_2003RegionalTourney, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2003NationalTourney, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2003GlobalCup, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2003RegionalTourney, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2003NationalTourney, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2003GlobalCup, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2003RegionalTourney, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2003NationalTourney, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2003GlobalCup, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2004RegionalTourney, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2004NationalTourney, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2004GlobalCup, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2004RegionalTourney, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2004NationalTourney, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2004GlobalCup, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2004RegionalTourney, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2004NationalTourney, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2004GlobalCup, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2005RegionalTourney, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2005NationalTourney, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2005GlobalCup, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2005RegionalTourney, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2005NationalTourney, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2005GlobalCup, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2005RegionalTourney, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2005NationalTourney, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2005GlobalCup, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_PokemonBattleCup, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_PokemonBattleCup, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_PokemonBattleCup, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_PokemonBattleCup, gGiftRibbonDescriptionPart2_Participation}, + {gGiftRibbonDescriptionPart1_PokemonLeague, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_PokemonLeague, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_PokemonLeague, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_PokemonLeague, gGiftRibbonDescriptionPart2_Participation}, + {gGiftRibbonDescriptionPart1_AdvanceCup, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_AdvanceCup, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_AdvanceCup, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_AdvanceCup, gGiftRibbonDescriptionPart2_Participation}, + {gGiftRibbonDescriptionPart1_PokemonTournament, gGiftRibbonDescriptionPart2_Participation2}, + {gGiftRibbonDescriptionPart1_PokemonEvent, gGiftRibbonDescriptionPart2_Participation2}, + {gGiftRibbonDescriptionPart1_PokemonFestival, gGiftRibbonDescriptionPart2_Participation2}, + {gGiftRibbonDescriptionPart1_DifficultyClearing, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_ClearingAllChallenges, gGiftRibbonDescriptionPart2_ClearingAllChallenges}, + {gGiftRibbonDescriptionPart1_100StraightWin, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_DarknessTower, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_RedTower, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_BlackironTower, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_FinalTower, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_LegendMaking, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_PokemonCenterTokyo, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_PokemonCenterOsaka, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_PokemonCenterNagoya, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_PokemonCenterNY, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_SummerHolidays, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_WinterHolidays, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_SpringHolidays, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_Evergreen, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_SpecialHoliday, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_HardWorker, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_LotsOfFriends, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_FullOfEnergy, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_LovedPokemon, gGiftRibbonDescriptionPart2_LovedPokemon}, + {gGiftRibbonDescriptionPart1_LoveForPokemon, gGiftRibbonDescriptionPart2_LoveForPokemon} +}; diff --git a/src/data/text/match_call_messages.h b/src/data/text/match_call_messages.h new file mode 100644 index 000000000..c3015b5a7 --- /dev/null +++ b/src/data/text/match_call_messages.h @@ -0,0 +1,476 @@ +#define MCFLAVOR(name) {gMatchCallFlavorText_##name##_Strategy, \ + gMatchCallFlavorText_##name##_Pokemon, \ + gMatchCallFlavorText_##name##_Intro1, \ + gMatchCallFlavorText_##name##_Intro2} + +const u8 gMatchCallFlavorText_AromaLady_Rose_Strategy[] = _("Becalm fighting emotions."); +const u8 gMatchCallFlavorText_AromaLady_Rose_Pokemon[] = _("Fragrant GRASS POKéMON."); +const u8 gMatchCallFlavorText_AromaLady_Rose_Intro1[] = _("Soothing aromas make the"); +const u8 gMatchCallFlavorText_AromaLady_Rose_Intro2[] = _("body and mind healthy."); + +const u8 gMatchCallFlavorText_RuinManiac_Andres_Strategy[] = _("I'm not very good at this."); +const u8 gMatchCallFlavorText_RuinManiac_Andres_Pokemon[] = _("Ruin-exploration partners."); +const u8 gMatchCallFlavorText_RuinManiac_Andres_Intro1[] = _("I am searching for undersea"); +const u8 gMatchCallFlavorText_RuinManiac_Andres_Intro2[] = _("ruins and relics."); + +const u8 gMatchCallFlavorText_RuinManiac_Dusty_Strategy[] = _("Overwhelm with power!"); +const u8 gMatchCallFlavorText_RuinManiac_Dusty_Pokemon[] = _("Craggy ROCK POKéMON."); +const u8 gMatchCallFlavorText_RuinManiac_Dusty_Intro1[] = _("In search of ancient lore,"); +const u8 gMatchCallFlavorText_RuinManiac_Dusty_Intro2[] = _("I travel the world."); + +const u8 gMatchCallFlavorText_Tuber_Lola_Strategy[] = _("I'm going to try hard!"); +const u8 gMatchCallFlavorText_Tuber_Lola_Pokemon[] = _("Good swimmer POKéMON."); +const u8 gMatchCallFlavorText_Tuber_Lola_Intro1[] = _("I wish I could swim without"); +const u8 gMatchCallFlavorText_Tuber_Lola_Intro2[] = _("using an inner tube."); + +const u8 gMatchCallFlavorText_Tuber_Ricky_Strategy[] = _("I don't know. I'll try hard."); +const u8 gMatchCallFlavorText_Tuber_Ricky_Pokemon[] = _("WATER POKéMON are buddies."); +const u8 gMatchCallFlavorText_Tuber_Ricky_Intro1[] = _("It's not like I can't swim."); +const u8 gMatchCallFlavorText_Tuber_Ricky_Intro2[] = _("I just like my inner tube."); + +const u8 gMatchCallFlavorText_SisAndBro_LilaAndRoy_Strategy[] = _("We split our duties."); +const u8 gMatchCallFlavorText_SisAndBro_LilaAndRoy_Pokemon[] = _("We like friendly POKéMON."); +const u8 gMatchCallFlavorText_SisAndBro_LilaAndRoy_Intro1[] = _("We enjoy POKéMON together"); +const u8 gMatchCallFlavorText_SisAndBro_LilaAndRoy_Intro2[] = _("as sister and brother."); + +const u8 gMatchCallFlavorText_Cooltrainer_Cristin_Strategy[] = _("I finish with power moves!"); +const u8 gMatchCallFlavorText_Cooltrainer_Cristin_Pokemon[] = _("A mix of different types."); +const u8 gMatchCallFlavorText_Cooltrainer_Cristin_Intro1[] = _("I aim to become the ultimate"); +const u8 gMatchCallFlavorText_Cooltrainer_Cristin_Intro2[] = _("TRAINER!"); + +const u8 gMatchCallFlavorText_Cooltrainer_Brooke_Strategy[] = _("Exploit the foe's weakness."); +const u8 gMatchCallFlavorText_Cooltrainer_Brooke_Pokemon[] = _("Balance is crucial."); +const u8 gMatchCallFlavorText_Cooltrainer_Brooke_Intro1[] = _("My goal is to become the"); +const u8 gMatchCallFlavorText_Cooltrainer_Brooke_Intro2[] = _("POKéMON CHAMPION."); + +const u8 gMatchCallFlavorText_Cooltrainer_Wilton_Strategy[] = _("Upset the opponent."); +const u8 gMatchCallFlavorText_Cooltrainer_Wilton_Pokemon[] = _("Type doesn't matter."); +const u8 gMatchCallFlavorText_Cooltrainer_Wilton_Intro1[] = _("I'm a top student at the"); +const u8 gMatchCallFlavorText_Cooltrainer_Wilton_Intro2[] = _("TRAINER'S SCHOOL."); + +const u8 gMatchCallFlavorText_HexManiac_Valerie_Strategy[] = _("Slow, steady suffering."); +const u8 gMatchCallFlavorText_HexManiac_Valerie_Pokemon[] = _("Scary to meet at night."); +const u8 gMatchCallFlavorText_HexManiac_Valerie_Intro1[] = _("I see things that others"); +const u8 gMatchCallFlavorText_HexManiac_Valerie_Intro2[] = _("can't see..."); + +const u8 gMatchCallFlavorText_Lady_Cindy_Strategy[] = _("Anything to win."); +const u8 gMatchCallFlavorText_Lady_Cindy_Pokemon[] = _("Gorgeous type!"); +const u8 gMatchCallFlavorText_Lady_Cindy_Intro1[] = _("I have a pool specially for"); +const u8 gMatchCallFlavorText_Lady_Cindy_Intro2[] = _("my POKéMON at home."); + +const u8 gMatchCallFlavorText_Beauty_Thalia_Strategy[] = _("You'll fall under my spell!"); +const u8 gMatchCallFlavorText_Beauty_Thalia_Pokemon[] = _("Mature WATER type."); +const u8 gMatchCallFlavorText_Beauty_Thalia_Intro1[] = _("I dream of cruising around"); +const u8 gMatchCallFlavorText_Beauty_Thalia_Intro2[] = _("the world on a luxury liner."); + +const u8 gMatchCallFlavorText_Beauty_Jessica_Strategy[] = _("I'll lead you astray."); +const u8 gMatchCallFlavorText_Beauty_Jessica_Pokemon[] = _("Cute, of course."); +const u8 gMatchCallFlavorText_Beauty_Jessica_Intro1[] = _("I love the SAFARI ZONE."); +const u8 gMatchCallFlavorText_Beauty_Jessica_Intro2[] = _("I seem to end up there."); + +const u8 gMatchCallFlavorText_RichBoy_Winston_Strategy[] = _("Strategy? Who needs it?"); +const u8 gMatchCallFlavorText_RichBoy_Winston_Pokemon[] = _("I spent big money on it!"); +const u8 gMatchCallFlavorText_RichBoy_Winston_Intro1[] = _("I, being rich, sleep in a"); +const u8 gMatchCallFlavorText_RichBoy_Winston_Intro2[] = _("custom POKéMON bed."); + +const u8 gMatchCallFlavorText_PokeManiac_Steve_Strategy[] = _("Wrestle down with power."); +const u8 gMatchCallFlavorText_PokeManiac_Steve_Pokemon[] = _("Took all night to catch."); +const u8 gMatchCallFlavorText_PokeManiac_Steve_Intro1[] = _("Big, burly, and buff"); +const u8 gMatchCallFlavorText_PokeManiac_Steve_Intro2[] = _("POKéMON are the best..."); + +const u8 gMatchCallFlavorText_Swimmer_Tony_Strategy[] = _("Ram at full speed!"); +const u8 gMatchCallFlavorText_Swimmer_Tony_Pokemon[] = _("Funky WATER type!"); +const u8 gMatchCallFlavorText_Swimmer_Tony_Intro1[] = _("If I can't be out swimming,"); +const u8 gMatchCallFlavorText_Swimmer_Tony_Intro2[] = _("I'll be pumping weights."); + +const u8 gMatchCallFlavorText_BlackBelt_Nob_Strategy[] = _("Grand slam pummeling!"); +const u8 gMatchCallFlavorText_BlackBelt_Nob_Pokemon[] = _("FIGHTING type."); +const u8 gMatchCallFlavorText_BlackBelt_Nob_Intro1[] = _("Not to brag, but I can bust"); +const u8 gMatchCallFlavorText_BlackBelt_Nob_Intro2[] = _("ten roof tiles!"); + +const u8 gMatchCallFlavorText_BlackBelt_Koji_Strategy[] = _("Witness karate power!"); +const u8 gMatchCallFlavorText_BlackBelt_Koji_Pokemon[] = _("My partners in training!"); +const u8 gMatchCallFlavorText_BlackBelt_Koji_Intro1[] = _("Let us discuss matters of"); +const u8 gMatchCallFlavorText_BlackBelt_Koji_Intro2[] = _("the world with bare fists!"); + +const u8 gMatchCallFlavorText_Guitarist_Fernando_Strategy[] = _("Rock to stunning sounds!"); +const u8 gMatchCallFlavorText_Guitarist_Fernando_Pokemon[] = _("Electric-and-sound combo!"); +const u8 gMatchCallFlavorText_Guitarist_Fernando_Intro1[] = _("My compositions will shock"); +const u8 gMatchCallFlavorText_Guitarist_Fernando_Intro2[] = _("you and stun you!"); + +const u8 gMatchCallFlavorText_Guitarist_Dalton_Strategy[] = _("I'll electrify you!"); +const u8 gMatchCallFlavorText_Guitarist_Dalton_Pokemon[] = _("They're ELECTRIC!"); +const u8 gMatchCallFlavorText_Guitarist_Dalton_Intro1[] = _("I want to make people cry"); +const u8 gMatchCallFlavorText_Guitarist_Dalton_Intro2[] = _("with songs from my heart."); + +const u8 gMatchCallFlavorText_Kindler_Bernie_Strategy[] = _("Burn it all down!"); +const u8 gMatchCallFlavorText_Kindler_Bernie_Pokemon[] = _("Burn-inducing POKéMON."); +const u8 gMatchCallFlavorText_Kindler_Bernie_Intro1[] = _("When you light a campfire,"); +const u8 gMatchCallFlavorText_Kindler_Bernie_Intro2[] = _("be sure there's some water."); + +const u8 gMatchCallFlavorText_Camper_Ethan_Strategy[] = _("Hang in and be tenacious!"); +const u8 gMatchCallFlavorText_Camper_Ethan_Pokemon[] = _("I'll raise any POKéMON."); +const u8 gMatchCallFlavorText_Camper_Ethan_Intro1[] = _("POKéMON raised in the wild"); +const u8 gMatchCallFlavorText_Camper_Ethan_Intro2[] = _("grow strong!"); + +const u8 gMatchCallFlavorText_OldCouple_JohnAndJay_Strategy[] = _("Our love lets us prevail."); +const u8 gMatchCallFlavorText_OldCouple_JohnAndJay_Pokemon[] = _("We've had them for years."); +const u8 gMatchCallFlavorText_OldCouple_JohnAndJay_Intro1[] = _("Married 50 years, we've"); +const u8 gMatchCallFlavorText_OldCouple_JohnAndJay_Intro2[] = _("devotedly raised POKéMON."); + +const u8 gMatchCallFlavorText_BugManiac_Jeffrey_Strategy[] = _("Attack in waves!"); +const u8 gMatchCallFlavorText_BugManiac_Jeffrey_Pokemon[] = _("BUG POKéMON are cool."); +const u8 gMatchCallFlavorText_BugManiac_Jeffrey_Intro1[] = _("I go into the forest every"); +const u8 gMatchCallFlavorText_BugManiac_Jeffrey_Intro2[] = _("day to catch BUG POKéMON."); + +const u8 gMatchCallFlavorText_Psychic_Cameron_Strategy[] = _("Daze and confuse!"); +const u8 gMatchCallFlavorText_Psychic_Cameron_Pokemon[] = _("Ones with weird powers."); +const u8 gMatchCallFlavorText_Psychic_Cameron_Intro1[] = _("I can see through exactly"); +const u8 gMatchCallFlavorText_Psychic_Cameron_Intro2[] = _("what you're thinking!"); + +const u8 gMatchCallFlavorText_Psychic_Jacki_Strategy[] = _("Battle at full power."); +const u8 gMatchCallFlavorText_Psychic_Jacki_Pokemon[] = _("POKéMON of many mysteries."); +const u8 gMatchCallFlavorText_Psychic_Jacki_Intro1[] = _("When we spoke, I was really"); +const u8 gMatchCallFlavorText_Psychic_Jacki_Intro2[] = _("using telepathy."); + +const u8 gMatchCallFlavorText_Gentleman_Walter_Strategy[] = _("Calm and collected."); +const u8 gMatchCallFlavorText_Gentleman_Walter_Pokemon[] = _("POKéMON of distinction."); +const u8 gMatchCallFlavorText_Gentleman_Walter_Intro1[] = _("We enjoy a spot of tea"); +const u8 gMatchCallFlavorText_Gentleman_Walter_Intro2[] = _("every day. It's imported."); + +const u8 gMatchCallFlavorText_SchoolKid_Karen_Strategy[] = _("I use my head to battle."); +const u8 gMatchCallFlavorText_SchoolKid_Karen_Pokemon[] = _("I love any kind of POKéMON!"); +const u8 gMatchCallFlavorText_SchoolKid_Karen_Intro1[] = _("My daddy gives me spending"); +const u8 gMatchCallFlavorText_SchoolKid_Karen_Intro2[] = _("money if I ace a test."); + +const u8 gMatchCallFlavorText_SchoolKid_Jerry_Strategy[] = _("My knowledge rules!"); +const u8 gMatchCallFlavorText_SchoolKid_Jerry_Pokemon[] = _("Any smart POKéMON!"); +const u8 gMatchCallFlavorText_SchoolKid_Jerry_Intro1[] = _("I want to be a POKéMON"); +const u8 gMatchCallFlavorText_SchoolKid_Jerry_Intro2[] = _("researcher in the future."); + +const u8 gMatchCallFlavorText_SrAndJr_AnnaAndMeg_Strategy[] = _("We talk it over first."); +const u8 gMatchCallFlavorText_SrAndJr_AnnaAndMeg_Pokemon[] = _("POKéMON that we both like."); +const u8 gMatchCallFlavorText_SrAndJr_AnnaAndMeg_Intro1[] = _("We're senior and junior"); +const u8 gMatchCallFlavorText_SrAndJr_AnnaAndMeg_Intro2[] = _("students into POKéMON!"); + +const u8 gMatchCallFlavorText_Pokefan_Isabel_Strategy[] = _("Go for it, my dears!"); +const u8 gMatchCallFlavorText_Pokefan_Isabel_Pokemon[] = _("I have no likes or dislikes."); +const u8 gMatchCallFlavorText_Pokefan_Isabel_Intro1[] = _("While out shopping for"); +const u8 gMatchCallFlavorText_Pokefan_Isabel_Intro2[] = _("supper, I battle too."); + +const u8 gMatchCallFlavorText_Pokefan_Miguel_Strategy[] = _("I battle with love!"); +const u8 gMatchCallFlavorText_Pokefan_Miguel_Pokemon[] = _("A POKéMON raised with love!"); +const u8 gMatchCallFlavorText_Pokefan_Miguel_Intro1[] = _("It's important to build"); +const u8 gMatchCallFlavorText_Pokefan_Miguel_Intro2[] = _("trust with your POKéMON."); + +const u8 gMatchCallFlavorText_Expert_Timothy_Strategy[] = _("I see through your moves!"); +const u8 gMatchCallFlavorText_Expert_Timothy_Pokemon[] = _("The essence of FIGHTING."); +const u8 gMatchCallFlavorText_Expert_Timothy_Intro1[] = _("I'm not ready to give way"); +const u8 gMatchCallFlavorText_Expert_Timothy_Intro2[] = _("to the young yet!"); + +const u8 gMatchCallFlavorText_Expert_Shelby_Strategy[] = _("Attack while defending."); +const u8 gMatchCallFlavorText_Expert_Shelby_Pokemon[] = _("The FIGHTING type."); +const u8 gMatchCallFlavorText_Expert_Shelby_Intro1[] = _("Being old, I have my own"); +const u8 gMatchCallFlavorText_Expert_Shelby_Intro2[] = _("style of battling."); + +const u8 gMatchCallFlavorText_Youngster_Calvin_Strategy[] = _("I do what I can."); +const u8 gMatchCallFlavorText_Youngster_Calvin_Pokemon[] = _("I use different types."); +const u8 gMatchCallFlavorText_Youngster_Calvin_Intro1[] = _("I'm going to keep working"); +const u8 gMatchCallFlavorText_Youngster_Calvin_Intro2[] = _("until I beat a GYM LEADER."); + +const u8 gMatchCallFlavorText_Fisherman_Elliot_Strategy[] = _("I battle patiently."); +const u8 gMatchCallFlavorText_Fisherman_Elliot_Pokemon[] = _("WATER POKéMON to battle!"); +const u8 gMatchCallFlavorText_Fisherman_Elliot_Intro1[] = _("I'm the world's only guy to"); +const u8 gMatchCallFlavorText_Fisherman_Elliot_Intro2[] = _("catch a huge POKéMON!"); + +const u8 gMatchCallFlavorText_Triathlete_Isaiah_Strategy[] = _("Exploit the environment!"); +const u8 gMatchCallFlavorText_Triathlete_Isaiah_Pokemon[] = _("All hail the WATER type!"); +const u8 gMatchCallFlavorText_Triathlete_Isaiah_Intro1[] = _("I won't be beaten by some"); +const u8 gMatchCallFlavorText_Triathlete_Isaiah_Intro2[] = _("beach bum SWIMMER!"); + +const u8 gMatchCallFlavorText_Triathlete_Maria_Strategy[] = _("Speed above all!"); +const u8 gMatchCallFlavorText_Triathlete_Maria_Pokemon[] = _("I use a speedy POKéMON."); +const u8 gMatchCallFlavorText_Triathlete_Maria_Intro1[] = _("A marathon is a challenge"); +const u8 gMatchCallFlavorText_Triathlete_Maria_Intro2[] = _("against your own self."); + +const u8 gMatchCallFlavorText_Triathlete_Abigail_Strategy[] = _("Defense is crucial."); +const u8 gMatchCallFlavorText_Triathlete_Abigail_Pokemon[] = _("My POKéMON is solid."); +const u8 gMatchCallFlavorText_Triathlete_Abigail_Intro1[] = _("I started this for dieting,"); +const u8 gMatchCallFlavorText_Triathlete_Abigail_Intro2[] = _("but I got right into it."); + +const u8 gMatchCallFlavorText_Triathlete_Dylan_Strategy[] = _("Strike before stricken!"); +const u8 gMatchCallFlavorText_Triathlete_Dylan_Pokemon[] = _("A fast-running POKéMON!"); +const u8 gMatchCallFlavorText_Triathlete_Dylan_Intro1[] = _("If you ran and ran, you'd"); +const u8 gMatchCallFlavorText_Triathlete_Dylan_Intro2[] = _("become one with the wind."); + +const u8 gMatchCallFlavorText_Triathlete_Katelyn_Strategy[] = _("All-out offensive!"); +const u8 gMatchCallFlavorText_Triathlete_Katelyn_Pokemon[] = _("WATER POKéMON rule!"); +const u8 gMatchCallFlavorText_Triathlete_Katelyn_Intro1[] = _("I must swim over 6 miles"); +const u8 gMatchCallFlavorText_Triathlete_Katelyn_Intro2[] = _("every day."); + +const u8 gMatchCallFlavorText_Triathlete_Benjamin_Strategy[] = _("Push and push again!"); +const u8 gMatchCallFlavorText_Triathlete_Benjamin_Pokemon[] = _("The strength of STEEL."); +const u8 gMatchCallFlavorText_Triathlete_Benjamin_Intro1[] = _("If you're sweating, get"); +const u8 gMatchCallFlavorText_Triathlete_Benjamin_Intro2[] = _("fluids into you regularly."); + +const u8 gMatchCallFlavorText_Triathlete_Pablo_Strategy[] = _("Draw the power of WATER."); +const u8 gMatchCallFlavorText_Triathlete_Pablo_Pokemon[] = _("Toughened WATER POKéMON."); +const u8 gMatchCallFlavorText_Triathlete_Pablo_Intro1[] = _("Training POKéMON is good,"); +const u8 gMatchCallFlavorText_Triathlete_Pablo_Intro2[] = _("but don't neglect yourself."); + +const u8 gMatchCallFlavorText_DragonTamer_Nicolas_Strategy[] = _("It's about POKéMON power!"); +const u8 gMatchCallFlavorText_DragonTamer_Nicolas_Pokemon[] = _("See the power of DRAGONS!"); +const u8 gMatchCallFlavorText_DragonTamer_Nicolas_Intro1[] = _("I'll become legendary as the"); +const u8 gMatchCallFlavorText_DragonTamer_Nicolas_Intro2[] = _("strongest one day!"); + +const u8 gMatchCallFlavorText_BirdKeeper_Robert_Strategy[] = _("I'll show you my technique!"); +const u8 gMatchCallFlavorText_BirdKeeper_Robert_Pokemon[] = _("Elegantly wheeling BIRDS."); +const u8 gMatchCallFlavorText_BirdKeeper_Robert_Intro1[] = _("My BIRD POKéMON, deliver my"); +const u8 gMatchCallFlavorText_BirdKeeper_Robert_Intro2[] = _("love to that girl!"); + +const u8 gMatchCallFlavorText_NinjaBoy_Lao_Strategy[] = _("You'll suffer from poison!"); +const u8 gMatchCallFlavorText_NinjaBoy_Lao_Pokemon[] = _("Poisonous POKéMON."); +const u8 gMatchCallFlavorText_NinjaBoy_Lao_Intro1[] = _("I undertake training so"); +const u8 gMatchCallFlavorText_NinjaBoy_Lao_Intro2[] = _("that I may become a ninja."); + +const u8 gMatchCallFlavorText_BattleGirl_Cyndy_Strategy[] = _("The first strike wins!"); +const u8 gMatchCallFlavorText_BattleGirl_Cyndy_Pokemon[] = _("Speedy FIGHTING type."); +const u8 gMatchCallFlavorText_BattleGirl_Cyndy_Intro1[] = _("If my POKéMON lose,"); +const u8 gMatchCallFlavorText_BattleGirl_Cyndy_Intro2[] = _("I'll carry on the fight!"); + +const u8 gMatchCallFlavorText_ParasolLady_Madeline_Strategy[] = _("Go, go, my POKéMON!"); +const u8 gMatchCallFlavorText_ParasolLady_Madeline_Pokemon[] = _("I'll raise anything."); +const u8 gMatchCallFlavorText_ParasolLady_Madeline_Intro1[] = _("UV rays are your skin's"); +const u8 gMatchCallFlavorText_ParasolLady_Madeline_Intro2[] = _("enemy. Get protected."); + +const u8 gMatchCallFlavorText_Swimmer_Jenny_Strategy[] = _("No mercy!"); +const u8 gMatchCallFlavorText_Swimmer_Jenny_Pokemon[] = _("Cute WATER POKéMON."); +const u8 gMatchCallFlavorText_Swimmer_Jenny_Intro1[] = _("I have too many fans."); +const u8 gMatchCallFlavorText_Swimmer_Jenny_Intro2[] = _("I was interviewed on TV."); + +const u8 gMatchCallFlavorText_Picnicker_Diana_Strategy[] = _("I think about this & that."); +const u8 gMatchCallFlavorText_Picnicker_Diana_Pokemon[] = _("I like all POKéMON."); +const u8 gMatchCallFlavorText_Picnicker_Diana_Intro1[] = _("What lies beyond that"); +const u8 gMatchCallFlavorText_Picnicker_Diana_Intro2[] = _("yonder hill?"); + +const u8 gMatchCallFlavorText_Twins_AmyAndLiv_Strategy[] = _("We battle together!"); +const u8 gMatchCallFlavorText_Twins_AmyAndLiv_Pokemon[] = _("We train together!"); +const u8 gMatchCallFlavorText_Twins_AmyAndLiv_Intro1[] = _("We like the same POKéMON,"); +const u8 gMatchCallFlavorText_Twins_AmyAndLiv_Intro2[] = _("but different desserts."); + +const u8 gMatchCallFlavorText_Sailor_Ernest_Strategy[] = _("I force things with power!"); +const u8 gMatchCallFlavorText_Sailor_Ernest_Pokemon[] = _("WATER and FIGHTING types."); +const u8 gMatchCallFlavorText_Sailor_Ernest_Intro1[] = _("Seamen are rough spirits!"); +const u8 gMatchCallFlavorText_Sailor_Ernest_Intro2[] = _("Any complaints?"); + +const u8 gMatchCallFlavorText_Sailor_Cory_Strategy[] = _("Up for a fight anytime!"); +const u8 gMatchCallFlavorText_Sailor_Cory_Pokemon[] = _("WATER POKéMON are my faves!"); +const u8 gMatchCallFlavorText_Sailor_Cory_Intro1[] = _("If you want to shout loud,"); +const u8 gMatchCallFlavorText_Sailor_Cory_Intro2[] = _("suck in air with your belly!"); + +const u8 gMatchCallFlavorText_Collector_Edwin_Strategy[] = _("Protect POKéMON from harm."); +const u8 gMatchCallFlavorText_Collector_Edwin_Pokemon[] = _("I love rare POKéMON."); +const u8 gMatchCallFlavorText_Collector_Edwin_Intro1[] = _("I want to collect all the"); +const u8 gMatchCallFlavorText_Collector_Edwin_Intro2[] = _("world's rare POKéMON."); + +const u8 gMatchCallFlavorText_PkmnBreeder_Lydia_Strategy[] = _("I count on power."); +const u8 gMatchCallFlavorText_PkmnBreeder_Lydia_Pokemon[] = _("POKéMON are my children."); +const u8 gMatchCallFlavorText_PkmnBreeder_Lydia_Intro1[] = _("It takes knowledge and"); +const u8 gMatchCallFlavorText_PkmnBreeder_Lydia_Intro2[] = _("love to raise POKéMON."); + +const u8 gMatchCallFlavorText_PkmnBreeder_Isaac_Strategy[] = _("Full-on attack!"); +const u8 gMatchCallFlavorText_PkmnBreeder_Isaac_Pokemon[] = _("Anything. I'll raise it."); +const u8 gMatchCallFlavorText_PkmnBreeder_Isaac_Intro1[] = _("I give them {POKEBLOCK}S for"); +const u8 gMatchCallFlavorText_PkmnBreeder_Isaac_Intro2[] = _("going after CONTEST titles."); + +const u8 gMatchCallFlavorText_PkmnBreeder_Gabrielle_Strategy[] = _("I raise POKéMON with care."); +const u8 gMatchCallFlavorText_PkmnBreeder_Gabrielle_Pokemon[] = _("Fun-to-raise POKéMON."); +const u8 gMatchCallFlavorText_PkmnBreeder_Gabrielle_Intro1[] = _("Treat every POKéMON you"); +const u8 gMatchCallFlavorText_PkmnBreeder_Gabrielle_Intro2[] = _("meet with respect."); + +const u8 gMatchCallFlavorText_PkmnRanger_Catherine_Strategy[] = _("I believe in my POKéMON."); +const u8 gMatchCallFlavorText_PkmnRanger_Catherine_Pokemon[] = _("I like strong POKéMON."); +const u8 gMatchCallFlavorText_PkmnRanger_Catherine_Intro1[] = _("I'm training for rescue"); +const u8 gMatchCallFlavorText_PkmnRanger_Catherine_Intro2[] = _("work with my POKéMON."); + +const u8 gMatchCallFlavorText_PkmnRanger_Jackson_Strategy[] = _("Attack in waves!"); +const u8 gMatchCallFlavorText_PkmnRanger_Jackson_Pokemon[] = _("I use different types."); +const u8 gMatchCallFlavorText_PkmnRanger_Jackson_Intro1[] = _("Those who destroy nature"); +const u8 gMatchCallFlavorText_PkmnRanger_Jackson_Intro2[] = _("must never be forgiven!"); + +const u8 gMatchCallFlavorText_Lass_Haley_Strategy[] = _("I'll show you some guts!"); +const u8 gMatchCallFlavorText_Lass_Haley_Pokemon[] = _("Cute POKéMON are my faves!"); +const u8 gMatchCallFlavorText_Lass_Haley_Intro1[] = _("After a battle, I always"); +const u8 gMatchCallFlavorText_Lass_Haley_Intro2[] = _("bathe with my POKéMON."); + +const u8 gMatchCallFlavorText_BugCatcher_James_Strategy[] = _("Lightning-fast attack!"); +const u8 gMatchCallFlavorText_BugCatcher_James_Pokemon[] = _("BUG POKéMON are number 1!"); +const u8 gMatchCallFlavorText_BugCatcher_James_Intro1[] = _("If you want to catch BUG"); +const u8 gMatchCallFlavorText_BugCatcher_James_Intro2[] = _("POKéMON, wake up early."); + +const u8 gMatchCallFlavorText_Hiker_Trent_Strategy[] = _("I battle with power."); +const u8 gMatchCallFlavorText_Hiker_Trent_Pokemon[] = _("Hard-bodied POKéMON."); +const u8 gMatchCallFlavorText_Hiker_Trent_Intro1[] = _("I've been planning a month"); +const u8 gMatchCallFlavorText_Hiker_Trent_Intro2[] = _("for today's hike."); + +const u8 gMatchCallFlavorText_Hiker_Sawyer_Strategy[] = _("I like it hot!"); +const u8 gMatchCallFlavorText_Hiker_Sawyer_Pokemon[] = _("Hot POKéMON!"); +const u8 gMatchCallFlavorText_Hiker_Sawyer_Intro1[] = _("As much as I love POKéMON,"); +const u8 gMatchCallFlavorText_Hiker_Sawyer_Intro2[] = _("I surely like hiking!"); + +const u8 gMatchCallFlavorText_YoungCouple_LoisAndHal_Strategy[] = _("Lovey-dovey strategy!"); +const u8 gMatchCallFlavorText_YoungCouple_LoisAndHal_Pokemon[] = _("Lovey-dovey POKéMON!"); +const u8 gMatchCallFlavorText_YoungCouple_LoisAndHal_Intro1[] = _("We're lovey-dovey!"); +const u8 gMatchCallFlavorText_YoungCouple_LoisAndHal_Intro2[] = _("Forever lovey-dovey!"); + +const u8 gMatchCallFlavorText_PkmnTrainer_Wally_Strategy[] = _("We let it all hang out."); +const u8 gMatchCallFlavorText_PkmnTrainer_Wally_Pokemon[] = _("The 1st POKéMON I caught."); +const u8 gMatchCallFlavorText_PkmnTrainer_Wally_Intro1[] = _("POKéMON and I have grown"); +const u8 gMatchCallFlavorText_PkmnTrainer_Wally_Intro2[] = _("stronger together."); + +const u8 gMatchCallFlavorText_RockinWhiz_Roxanne_Strategy[] = _("ROCK-type power attack."); +const u8 gMatchCallFlavorText_RockinWhiz_Roxanne_Pokemon[] = _("I prefer rock-hard POKéMON."); +const u8 gMatchCallFlavorText_RockinWhiz_Roxanne_Intro1[] = _("A LEADER of a big GYM bears"); +const u8 gMatchCallFlavorText_RockinWhiz_Roxanne_Intro2[] = _("a lot of responsibility."); + +const u8 gMatchCallFlavorText_TheBigHit_Brawly_Strategy[] = _("Direct physical action!"); +const u8 gMatchCallFlavorText_TheBigHit_Brawly_Pokemon[] = _("FIGHTING POKéMON rule!"); +const u8 gMatchCallFlavorText_TheBigHit_Brawly_Intro1[] = _("The world awaits me as the"); +const u8 gMatchCallFlavorText_TheBigHit_Brawly_Intro2[] = _("next big wave!"); + +const u8 gMatchCallFlavorText_SwellShock_Wattson_Strategy[] = _("I choose to electrify."); +const u8 gMatchCallFlavorText_SwellShock_Wattson_Pokemon[] = _("Get shocked by electricity!"); +const u8 gMatchCallFlavorText_SwellShock_Wattson_Intro1[] = _("One must never throw a"); +const u8 gMatchCallFlavorText_SwellShock_Wattson_Intro2[] = _("match. Even I must not."); + +const u8 gMatchCallFlavorText_PassionBurn_Flannery_Strategy[] = _("Battle aggressively."); +const u8 gMatchCallFlavorText_PassionBurn_Flannery_Pokemon[] = _("Burn with passion!"); +const u8 gMatchCallFlavorText_PassionBurn_Flannery_Intro1[] = _("Completely wash away daily"); +const u8 gMatchCallFlavorText_PassionBurn_Flannery_Intro2[] = _("fatigue in hot springs!"); + +const u8 gMatchCallFlavorText_ReliableOne_Dad_Strategy[] = _("I flexibly adapt my style."); +const u8 gMatchCallFlavorText_ReliableOne_Dad_Pokemon[] = _("Grown in a balanced manner."); +const u8 gMatchCallFlavorText_ReliableOne_Dad_Intro1[] = _("I walk the 30 minutes from"); +const u8 gMatchCallFlavorText_ReliableOne_Dad_Intro2[] = _("home to here every day."); + +const u8 gMatchCallFlavorText_SkyTamer_Winona_Strategy[] = _("I take advantage of speed."); +const u8 gMatchCallFlavorText_SkyTamer_Winona_Pokemon[] = _("Graceful sky dancers."); +const u8 gMatchCallFlavorText_SkyTamer_Winona_Intro1[] = _("The ultimate would be to"); +const u8 gMatchCallFlavorText_SkyTamer_Winona_Intro2[] = _("live as one with nature."); + +const u8 gMatchCallFlavorText_MysticDuo_TateAndLiza_Strategy[] = _("We battle in cooperation."); +const u8 gMatchCallFlavorText_MysticDuo_TateAndLiza_Pokemon[] = _("Always friendly POKéMON."); +const u8 gMatchCallFlavorText_MysticDuo_TateAndLiza_Intro1[] = _("Papa has trouble telling"); +const u8 gMatchCallFlavorText_MysticDuo_TateAndLiza_Intro2[] = _("the two of us apart!"); + +const u8 gMatchCallFlavorText_DandyCharm_Juan_Strategy[] = _("I use splendid waterpower."); +const u8 gMatchCallFlavorText_DandyCharm_Juan_Pokemon[] = _("POKéMON of elegance!"); +const u8 gMatchCallFlavorText_DandyCharm_Juan_Intro1[] = _("The adulation of beautiful"); +const u8 gMatchCallFlavorText_DandyCharm_Juan_Intro2[] = _("ladies fills me with energy!"); + +const u8 gMatchCallFlavorText_EliteFour_Sidney_Strategy[] = _("Offense over defense!"); +const u8 gMatchCallFlavorText_EliteFour_Sidney_Pokemon[] = _("The DARK side's beauties."); +const u8 gMatchCallFlavorText_EliteFour_Sidney_Intro1[] = _("They said I was a punk, but"); +const u8 gMatchCallFlavorText_EliteFour_Sidney_Intro2[] = _("I'm one of the ELITE FOUR!"); + +const u8 gMatchCallFlavorText_EliteFour_Phoebe_Strategy[] = _("Confuse and confound."); +const u8 gMatchCallFlavorText_EliteFour_Phoebe_Pokemon[] = _("There's nothing definite."); +const u8 gMatchCallFlavorText_EliteFour_Phoebe_Intro1[] = _("I wonder how my grandma at"); +const u8 gMatchCallFlavorText_EliteFour_Phoebe_Intro2[] = _("MT. PYRE is doing?"); + +const u8 gMatchCallFlavorText_EliteFour_Glacia_Strategy[] = _("I use items for help."); +const u8 gMatchCallFlavorText_EliteFour_Glacia_Pokemon[] = _("Flaming passion in icy cold!"); +const u8 gMatchCallFlavorText_EliteFour_Glacia_Intro1[] = _("The ICE type can be better"); +const u8 gMatchCallFlavorText_EliteFour_Glacia_Intro2[] = _("trained in this hot land."); + +const u8 gMatchCallFlavorText_EliteFour_Drake_Strategy[] = _("Harness strong abilities."); +const u8 gMatchCallFlavorText_EliteFour_Drake_Pokemon[] = _("The raw power of DRAGONS!"); +const u8 gMatchCallFlavorText_EliteFour_Drake_Intro1[] = _("I dedicate myself to the"); +const u8 gMatchCallFlavorText_EliteFour_Drake_Intro2[] = _("POKéMON that saved me."); + +const u8 gMatchCallFlavorText_Champion_Wallace_Strategy[] = _("Dignity and respect."); +const u8 gMatchCallFlavorText_Champion_Wallace_Pokemon[] = _("I prefer POKéMON of grace."); +const u8 gMatchCallFlavorText_Champion_Wallace_Intro1[] = _("I represent beauty as"); +const u8 gMatchCallFlavorText_Champion_Wallace_Intro2[] = _("well as intelligence."); + +const u8 *const gMatchCallMessages[][4] = +{ + [REMATCH_ROSE] = MCFLAVOR(AromaLady_Rose), + [REMATCH_ANDRES] = MCFLAVOR(RuinManiac_Andres), + [REMATCH_DUSTY] = MCFLAVOR(RuinManiac_Dusty), + [REMATCH_LOLA] = MCFLAVOR(Tuber_Lola), + [REMATCH_RICKY] = MCFLAVOR(Tuber_Ricky), + [REMATCH_LILA_AND_ROY] = MCFLAVOR(SisAndBro_LilaAndRoy), + [REMATCH_CRISTIN] = MCFLAVOR(Cooltrainer_Cristin), + [REMATCH_BROOKE] = MCFLAVOR(Cooltrainer_Brooke), + [REMATCH_WILTON] = MCFLAVOR(Cooltrainer_Wilton), + [REMATCH_VALERIE] = MCFLAVOR(HexManiac_Valerie), + [REMATCH_CINDY] = MCFLAVOR(Lady_Cindy), + [REMATCH_THALIA] = MCFLAVOR(Beauty_Thalia), + [REMATCH_JESSICA] = MCFLAVOR(Beauty_Jessica), + [REMATCH_WINSTON] = MCFLAVOR(RichBoy_Winston), + [REMATCH_STEVE] = MCFLAVOR(PokeManiac_Steve), + [REMATCH_TONY] = MCFLAVOR(Swimmer_Tony), + [REMATCH_NOB] = MCFLAVOR(BlackBelt_Nob), + [REMATCH_KOJI] = MCFLAVOR(BlackBelt_Koji), + [REMATCH_FERNANDO] = MCFLAVOR(Guitarist_Fernando), + [REMATCH_DALTON] = MCFLAVOR(Guitarist_Dalton), + [REMATCH_BERNIE] = MCFLAVOR(Kindler_Bernie), + [REMATCH_ETHAN] = MCFLAVOR(Camper_Ethan), + [REMATCH_JOHN_AND_JAY] = MCFLAVOR(OldCouple_JohnAndJay), + [REMATCH_JEFFREY] = MCFLAVOR(BugManiac_Jeffrey), + [REMATCH_CAMERON] = MCFLAVOR(Psychic_Cameron), + [REMATCH_JACKI] = MCFLAVOR(Psychic_Jacki), + [REMATCH_WALTER] = MCFLAVOR(Gentleman_Walter), + [REMATCH_KAREN] = MCFLAVOR(SchoolKid_Karen), + [REMATCH_JERRY] = MCFLAVOR(SchoolKid_Jerry), + [REMATCH_ANNA_AND_MEG] = MCFLAVOR(SrAndJr_AnnaAndMeg), + [REMATCH_ISABEL] = MCFLAVOR(Pokefan_Isabel), + [REMATCH_MIGUEL] = MCFLAVOR(Pokefan_Miguel), + [REMATCH_TIMOTHY] = MCFLAVOR(Expert_Timothy), + [REMATCH_SHELBY] = MCFLAVOR(Expert_Shelby), + [REMATCH_CALVIN] = MCFLAVOR(Youngster_Calvin), + [REMATCH_ELLIOT] = MCFLAVOR(Fisherman_Elliot), + [REMATCH_ISAIAH] = MCFLAVOR(Triathlete_Isaiah), + [REMATCH_MARIA] = MCFLAVOR(Triathlete_Maria), + [REMATCH_ABIGAIL] = MCFLAVOR(Triathlete_Abigail), + [REMATCH_DYLAN] = MCFLAVOR(Triathlete_Dylan), + [REMATCH_KATELYN] = MCFLAVOR(Triathlete_Katelyn), + [REMATCH_BENJAMIN] = MCFLAVOR(Triathlete_Benjamin), + [REMATCH_PABLO] = MCFLAVOR(Triathlete_Pablo), + [REMATCH_NICOLAS] = MCFLAVOR(DragonTamer_Nicolas), + [REMATCH_ROBERT] = MCFLAVOR(BirdKeeper_Robert), + [REMATCH_LAO] = MCFLAVOR(NinjaBoy_Lao), + [REMATCH_CYNDY] = MCFLAVOR(BattleGirl_Cyndy), + [REMATCH_MADELINE] = MCFLAVOR(ParasolLady_Madeline), + [REMATCH_JENNY] = MCFLAVOR(Swimmer_Jenny), + [REMATCH_DIANA] = MCFLAVOR(Picnicker_Diana), + [REMATCH_AMY_AND_LIV] = MCFLAVOR(Twins_AmyAndLiv), + [REMATCH_ERNEST] = MCFLAVOR(Sailor_Ernest), + [REMATCH_CORY] = MCFLAVOR(Sailor_Cory), + [REMATCH_EDWIN] = MCFLAVOR(Collector_Edwin), + [REMATCH_LYDIA] = MCFLAVOR(PkmnBreeder_Lydia), + [REMATCH_ISAAC] = MCFLAVOR(PkmnBreeder_Isaac), + [REMATCH_GABRIELLE] = MCFLAVOR(PkmnBreeder_Gabrielle), + [REMATCH_CATHERINE] = MCFLAVOR(PkmnRanger_Catherine), + [REMATCH_JACKSON] = MCFLAVOR(PkmnRanger_Jackson), + [REMATCH_HALEY] = MCFLAVOR(Lass_Haley), + [REMATCH_JAMES] = MCFLAVOR(BugCatcher_James), + [REMATCH_TRENT] = MCFLAVOR(Hiker_Trent), + [REMATCH_SAWYER] = MCFLAVOR(Hiker_Sawyer), + [REMATCH_KIRA_AND_DAN] = MCFLAVOR(YoungCouple_LoisAndHal), + [REMATCH_WALLY_3] = MCFLAVOR(PkmnTrainer_Wally), + [REMATCH_ROXANNE] = MCFLAVOR(RockinWhiz_Roxanne), + [REMATCH_BRAWLY] = MCFLAVOR(TheBigHit_Brawly), + [REMATCH_WATTSON] = MCFLAVOR(SwellShock_Wattson), + [REMATCH_FLANNERY] = MCFLAVOR(PassionBurn_Flannery), + [REMATCH_NORMAN] = MCFLAVOR(ReliableOne_Dad), + [REMATCH_WINONA] = MCFLAVOR(SkyTamer_Winona), + [REMATCH_TATE_AND_LIZA] = MCFLAVOR(MysticDuo_TateAndLiza), + [REMATCH_JUAN] = MCFLAVOR(DandyCharm_Juan), + [REMATCH_SIDNEY] = MCFLAVOR(EliteFour_Sidney), + [REMATCH_PHOEBE] = MCFLAVOR(EliteFour_Phoebe), + [REMATCH_GLACIA] = MCFLAVOR(EliteFour_Glacia), + [REMATCH_DRAKE] = MCFLAVOR(EliteFour_Drake), + [REMATCH_WALLACE] = MCFLAVOR(Champion_Wallace), +}; diff --git a/src/data/text/ribbon_descriptions.h b/src/data/text/ribbon_descriptions.h new file mode 100644 index 000000000..f455a7771 --- /dev/null +++ b/src/data/text/ribbon_descriptions.h @@ -0,0 +1,48 @@ +const u8 gRibbonDescriptionPart1_Champion[] = _("CHAMPION-beating, HALL"); +const u8 gRibbonDescriptionPart2_Champion[] = _("OF FAME Member RIBBON"); +const u8 gRibbonDescriptionPart1_CoolContest[] = _("COOL CONTEST"); +const u8 gRibbonDescriptionPart1_BeautyContest[] = _("BEAUTY CONTEST"); +const u8 gRibbonDescriptionPart1_CuteContest[] = _("CUTE CONTEST"); +const u8 gRibbonDescriptionPart1_SmartContest[] = _("SMART CONTEST"); +const u8 gRibbonDescriptionPart1_ToughContest[] = _("TOUGH CONTEST"); +const u8 gRibbonDescriptionPart2_NormalRank[] = _("Normal Rank winner!"); +const u8 gRibbonDescriptionPart2_SuperRank[] = _("Super Rank winner!"); +const u8 gRibbonDescriptionPart2_HyperRank[] = _("Hyper Rank winner!"); +const u8 gRibbonDescriptionPart2_MasterRank[] = _("Master Rank winner!"); +const u8 gRibbonDescriptionPart1_Winning[] = _("For clearing LV50"); +const u8 gRibbonDescriptionPart2_Winning[] = _("at the BATTLE TOWER."); +const u8 gRibbonDescriptionPart1_Victory[] = _("For clearing Open Level"); +const u8 gRibbonDescriptionPart2_Victory[] = _("at the BATTLE TOWER."); +const u8 gRibbonDescriptionPart1_Artist[] = _("RIBBON for being chosen"); +const u8 gRibbonDescriptionPart2_Artist[] = _("as a super sketch model."); +const u8 gRibbonDescriptionPart1_Effort[] = _("RIBBON awarded for"); +const u8 gRibbonDescriptionPart2_Effort[] = _("being a hard worker."); + +const u8 *const gRibbonDescriptionPointers[][2] = +{ + {gRibbonDescriptionPart1_Champion, gRibbonDescriptionPart2_Champion}, + {gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_NormalRank}, + {gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_SuperRank}, + {gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_HyperRank}, + {gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_MasterRank}, + {gRibbonDescriptionPart1_BeautyContest, gRibbonDescriptionPart2_NormalRank}, + {gRibbonDescriptionPart1_BeautyContest, gRibbonDescriptionPart2_SuperRank}, + {gRibbonDescriptionPart1_BeautyContest, gRibbonDescriptionPart2_HyperRank}, + {gRibbonDescriptionPart1_BeautyContest, gRibbonDescriptionPart2_MasterRank}, + {gRibbonDescriptionPart1_CuteContest, gRibbonDescriptionPart2_NormalRank}, + {gRibbonDescriptionPart1_CuteContest, gRibbonDescriptionPart2_SuperRank}, + {gRibbonDescriptionPart1_CuteContest, gRibbonDescriptionPart2_HyperRank}, + {gRibbonDescriptionPart1_CuteContest, gRibbonDescriptionPart2_MasterRank}, + {gRibbonDescriptionPart1_SmartContest, gRibbonDescriptionPart2_NormalRank}, + {gRibbonDescriptionPart1_SmartContest, gRibbonDescriptionPart2_SuperRank}, + {gRibbonDescriptionPart1_SmartContest, gRibbonDescriptionPart2_HyperRank}, + {gRibbonDescriptionPart1_SmartContest, gRibbonDescriptionPart2_MasterRank}, + {gRibbonDescriptionPart1_ToughContest, gRibbonDescriptionPart2_NormalRank}, + {gRibbonDescriptionPart1_ToughContest, gRibbonDescriptionPart2_SuperRank}, + {gRibbonDescriptionPart1_ToughContest, gRibbonDescriptionPart2_HyperRank}, + {gRibbonDescriptionPart1_ToughContest, gRibbonDescriptionPart2_MasterRank}, + {gRibbonDescriptionPart1_Winning, gRibbonDescriptionPart2_Winning}, + {gRibbonDescriptionPart1_Victory, gRibbonDescriptionPart2_Victory}, + {gRibbonDescriptionPart1_Artist, gRibbonDescriptionPart2_Artist}, + {gRibbonDescriptionPart1_Effort, gRibbonDescriptionPart2_Effort}, +}; diff --git a/src/daycare.c b/src/daycare.c index 885ac31a1..2d05035d7 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -835,7 +835,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, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; @@ -862,7 +862,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, 0x20, TRUE, personality, OT_ID_PLAYER_ID, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; 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/dma3_manager.c b/src/dma3_manager.c index 51fa7072d..43744883f 100644 --- a/src/dma3_manager.c +++ b/src/dma3_manager.c @@ -8,7 +8,7 @@ #define DMA_REQUEST_COPY16 3 #define DMA_REQUEST_FILL16 4 -IWRAM_DATA struct +BSS_DATA struct { const u8 *src; u8 *dest; @@ -17,7 +17,7 @@ IWRAM_DATA struct u32 value; } gDma3Requests[MAX_DMA_REQUESTS]; -static bool8 gDma3ManagerLocked; +static volatile bool8 gDma3ManagerLocked; static u8 gDma3RequestCursor; void ClearDma3Requests(void) diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 966dccfcf..714b10ef6 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -1,249 +1,456 @@ #include "global.h" #include "alloc.h" -#include "palette.h" -#include "window.h" #include "bg.h" +#include "dodrio_berry_picking.h" +#include "dynamic_placeholder_text_util.h" +#include "event_data.h" #include "gpu_regs.h" -#include "random.h" +#include "international_string_util.h" +#include "item.h" #include "link.h" #include "link_rfu.h" -#include "task.h" -#include "main.h" -#include "constants/songs.h" -#include "sound.h" #include "m4a.h" +#include "main.h" +#include "palette.h" #include "pokemon_jump.h" +#include "random.h" +#include "save.h" +#include "script.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text_window.h" +#include "window.h" +#include "constants/items.h" +#include "constants/songs.h" +#include "constants/species.h" -struct DodrioBerryPickingSubstruct_0160 +struct DodrioSubstruct_0160 { - /*0x0000 : 0x0160*/ u8 filler_000[12]; - /*0x000C : 0x016C*/ u8 unk_00C; - /*0x000D : 0x016D*/ u8 filler_00D[0x3000 - 0xd]; - /*0x3000 : 0x3160*/ u32 unk_3000; - /*0x3004 : 0x3164*/ u8 filler_3004[16]; - /*0x3014 : 0x3174*/ u8 unk_3014; - /*0x3015 : 0x3175*/ u8 filler_3015[0x318C - 0x3175]; + /*0x0000 : 0x3000*/ u16 ALIGNED(4) tilemapBuffers[3][BG_SCREEN_SIZE]; + /*0x3000 : 0x3160*/ bool32 finished; + /*0x3004 : 0x3164*/ u8 ALIGNED(4) unk3004; + /*0x3008 : 0x3168*/ u8 ALIGNED(4) unk3008[10]; + /*0x3014 : 0x3174*/ u8 ALIGNED(4) state; + /*0x3018 : 0x3178*/ u8 ALIGNED(4) unk3018; + /*0x301C : 0x317C*/ u16 ALIGNED(4) unk301C; + /*0x3020 : 0x3180*/ u8 ALIGNED(4) unk3020; + /*0x3024 : 0x3184*/ u8 ALIGNED(4) unk3024; + /*0x3024 : 0x3184*/ void (*unk3028)(void); }; // size = 0x302C -struct DodrioBerryPickingStruct_2022CF4 +struct DodrioStruct_2022CF4 { - u8 filler_00[0x40]; + u8 filler_00[0xc]; + u8 unkC[10]; + s16 unk16[10]; + u16 unk2A[10]; + u16 unk3E; }; // size = 0x40 -struct DodrioBerryPickingSubstruct_31A0_14 +struct DodrioSubstruct_31A0_14 { - u8 unk_0[11]; - u8 unk_B[11]; + u8 unk0[11]; + u8 unkB[11]; }; -struct DodrioBerryPickingSubstruct_31A0 -{ - u8 unk_00[0x10]; - u32 unk_10; - struct DodrioBerryPickingSubstruct_31A0_14 unk_14; - u8 unk_2C; - u8 filler_2D[3]; - u8 unk_30; - u8 filler_31[3]; - u8 unk_34; - u8 filler_35[7]; +struct DodrioSubstruct_31A0_2C +{ + u8 unk0; + u8 ALIGNED(4) unk4; + u8 ALIGNED(4) unk8; +}; + +struct DodrioSubstruct_31A0 +{ + u8 name[0x10]; + u32 unk10; + struct DodrioSubstruct_31A0_14 unk14; + struct DodrioSubstruct_31A0_2C unk2C; + u8 filler_35[4]; }; // size = 0x3C -struct DodrioBerryPickingSubstruct_318C +struct DodrioSubstruct_318C { bool8 isShiny; }; -struct DodrioBerryPickingStruct +struct DodrioSubstruct_3308 +{ + u8 unk0; + u32 unk4; +}; + +struct DodrioStruct { /*0x0000*/ void (*savedCallback)(void); - /*0x0004*/ u8 unk_0004; - /*0x0005*/ u8 filler_0005[3]; - /*0x0008*/ u8 unk_0008; - /*0x0009*/ u8 filler_0009[3]; - /*0x000C*/ u8 unk_000C; - /*0x000D*/ u8 filler_000D[3]; - /*0x0010*/ u8 unk_0010; - /*0x0011*/ u8 filler_0011[3]; - /*0x0014*/ u8 unk_0014; - /*0x0015*/ u8 filler_0015[3]; - /*0x0018*/ u8 unk_0018; - /*0x0019*/ u8 filler_0019[3]; - /*0x001C*/ u8 unk_001C; - /*0x001D*/ u8 filler_001D[3]; - /*0x0020*/ u8 unk_0020; - /*0x0021*/ u8 filler_0021[3]; - /*0x0024*/ u8 unk_0024; - /*0x0025*/ u8 filler_0025[3]; - /*0x0028*/ u8 multiplayerId; + /*0x0004*/ u8 ALIGNED(4) unk04; + /*0x0008*/ u8 ALIGNED(4) unk08; + /*0x000C*/ u8 ALIGNED(4) unk0C; + /*0x0010*/ u8 ALIGNED(4) unk10; + /*0x0014*/ u8 ALIGNED(4) unk14; + /*0x0018*/ u8 ALIGNED(4) unk18; + /*0x001C*/ u8 ALIGNED(4) unk1C; + /*0x0020*/ u8 ALIGNED(4) unk20; + /*0x0024*/ u8 ALIGNED(4) unk24; + /*0x0028*/ u8 ALIGNED(4) multiplayerId; /*0x0029*/ u8 filler_0029[7]; - /*0x0030*/ u8 unk_0030; - /*0x0031*/ u8 filler_0031[3]; - /*0x0034*/ u8 unk_0034[5]; - /*0x0039*/ u8 filler_0039[3]; - /*0x003C*/ u8 unk_003C; - /*0x003D*/ u8 filler_003D[3]; - /*0x0040*/ u8 unk_0040; - /*0x0041*/ u8 filler_0041[3]; - /*0x0044*/ u8 unk_0044; - /*0x0045*/ u8 filler_0045[3]; - /*0x0048*/ u8 unk_0048; - // align 1 - /*0x004A*/ u16 unk_004A[5][6]; - /*0x0086*/ u16 unk_0086[5]; - /*0x0090*/ u8 unk_0090[5]; - /*0x0095*/ u8 filler_0095[3]; - /*0x0098*/ u8 unk_0098[4]; - /*0x009C*/ u8 unk_009C[12]; - /*0x00A8*/ u8 unk_00A8[5]; - /*0x00AD*/ u8 filler_00AD[3]; - /*0x00B0*/ u8 unk_00B0[5]; - /*0x00B5*/ u8 filler_00B5[3]; - /*0x00B8*/ u8 unk_00B8[5]; - /*0x00BD*/ u8 filler_00BD[7]; - /*0x00C4*/ u8 unk_00C4[11]; - /*0x00CF*/ u8 filler_00CF[1]; - /*0x00D0*/ u8 unk_00D0[11]; - /*0x00DB*/ u8 filler_00DB[1]; - /*0x00DC*/ u8 unk_00DC[11]; - /*0x00E7*/ u8 filler_0xE7[1]; - /*0x00E8*/ u8 unk_00E8[5]; - /*0x00ED*/ u8 filler_00ED[7]; - /*0x00F4*/ u8 unk_00F4[11][2]; - /*0x010A*/ u8 filler_010A[2]; - /*0x010C*/ u8 unk_010C[5]; - /*0x0111*/ u8 filler_0111[3]; - /*0x0114*/ u16 unk_0114; - // align 2 - /*0x0118*/ u32 unk_0118; - /*0x011C*/ u32 unk_011C; - /*0x0120*/ u32 unk_0120; - /*0x0124*/ u8 unk_0124; - /*0x0125*/ u8 filler_0125[3]; - /*0x0128*/ u8 unk_0128; - // align 2 - /*0x012C*/ u32 unk_012C; - /*0x0130*/ u32 unk_0130[5]; - /*0x0144*/ u8 unk_0144; - /*0x0145*/ u8 filler_0145[3]; - /*0x0148*/ u8 unk_0148[11]; - /*0x0153*/ u8 filler_0153[1]; - /*0x0154*/ u8 unk_0154; - /*0x0155*/ u8 filler_0155[11]; - /*0x0160*/ struct DodrioBerryPickingSubstruct_0160 unk_0160; - /*0x318C*/ struct DodrioBerryPickingSubstruct_318C unk_318C[5]; - /*0x31A0*/ struct DodrioBerryPickingSubstruct_31A0 unk_31A0[5]; - /*0x32CC*/ struct DodrioBerryPickingSubstruct_31A0 unk_32CC; - /*0x3308*/ u8 unk_3308[0x3330 - 0x3308]; + /*0x0030*/ u8 ALIGNED(4) unk30; + /*0x0034*/ u8 ALIGNED(4) unk34[5]; + /*0x003C*/ u8 ALIGNED(4) unk3C; + /*0x0040*/ u8 ALIGNED(4) unk40; + /*0x0044*/ u8 ALIGNED(4) unk44; + /*0x0048*/ u8 ALIGNED(4) unk48; + /*0x004A*/ u16 unk4A[5][6]; + /*0x0086*/ u16 unk86[5]; + /*0x0090*/ u8 ALIGNED(4) unk90[5]; + /*0x0098*/ u8 ALIGNED(4) unk98[4]; + /*0x009C*/ u8 ALIGNED(4) unk9C[11]; + /*0x00A8*/ u8 ALIGNED(4) unkA8[5]; + /*0x00B0*/ u8 ALIGNED(4) unkB0[5]; + /*0x00B8*/ u8 ALIGNED(4) unkB8[11]; + /*0x00C4*/ u8 ALIGNED(4) unkC4[11]; + /*0x00D0*/ u8 ALIGNED(4) unkD0[11]; + /*0x00DC*/ u8 ALIGNED(4) unkDC[11]; + /*0x00E8*/ u8 ALIGNED(4) unkE8[11]; + /*0x00F4*/ u8 ALIGNED(4) unkF4[11][2]; + /*0x010C*/ u8 ALIGNED(4) unk10C[5]; + /*0x0112*/ u16 unk112; + /*0x0114*/ u16 unk114; + /*0x0118*/ u32 unk118; + /*0x011C*/ u32 unk11C; + /*0x0120*/ u32 unk120; + /*0x0124*/ u8 ALIGNED(4) unk124; + /*0x0128*/ u8 ALIGNED(4) unk128; + /*0x012C*/ u32 unk12C; + /*0x0130*/ u32 unk130[5]; + /*0x0144*/ u8 ALIGNED(4) unk144; + /*0x0148*/ u8 ALIGNED(4) unk148[11]; + /*0x0154*/ u8 ALIGNED(4) unk154; + /*0x0158*/ u8 ALIGNED(4) unk158[5]; + /*0x0160*/ struct DodrioSubstruct_0160 unk160; + /*0x318C*/ struct DodrioSubstruct_318C unk318C[5]; + /*0x31A0*/ struct DodrioSubstruct_31A0 unk31A0[5]; + /*0x32CC*/ struct DodrioSubstruct_31A0 unk32CC; + /*0x3308*/ struct DodrioSubstruct_3308 unk3308[5]; }; // size = 0x3330 -EWRAM_DATA struct DodrioBerryPickingStruct * gUnknown_02022C98 = NULL; -EWRAM_DATA u16 * gUnknown_02022C9C[5] = {NULL}; -EWRAM_DATA u16 * gUnknown_02022CB0[2] = {NULL}; -EWRAM_DATA u16 * gUnknown_02022CB8[11] = {NULL}; -EWRAM_DATA u16 * gUnknown_02022CE4[4] = {NULL}; -EWRAM_DATA struct DodrioBerryPickingStruct_2022CF4 * gUnknown_02022CF4 = NULL; -EWRAM_DATA struct DodrioBerryPickingSubstruct_0160 * gUnknown_02022CF8 = NULL; - -IWRAM_DATA bool32 gUnknown_03000DB0; - -void sub_8024A1C(void); -void sub_8024A30(struct DodrioBerryPickingStruct *); -void sub_8024BC8(u8 taskId); -void sub_8024DBC(void); -void sub_8024E00(void); -void sub_8024E38(void); -void sub_8024F10(void); -void sub_8024F38(void); -void sub_8024FFC(void); -void sub_80250D4(void); -void sub_8025158(void); -void sub_8025198(void); -void sub_8025230(void); -void sub_8025324(void); -void sub_8025470(void); -void sub_8025644(void); -void sub_80256AC(void); -void sub_8025758(void); -void sub_802589C(u8 taskId); -void sub_8025910(u8 taskId); -void sub_8025D04(void); -void sub_8025D50(void); -void sub_8025E0C(void); -void sub_8025ED8(void); -void sub_8025F48(void); -void sub_8026044(void); -void sub_80261CC(void); -void sub_80261E4(void); -void sub_80261F8(struct DodrioBerryPickingSubstruct_318C *, struct Pokemon *); -void sub_802620C(TaskFunc, u8); -void sub_802621C(TaskFunc); -void sub_8026240(u8); -bool32 sub_8026264(void); -void sub_80262C0(void); -u32 sub_8026634(u8, u8, u8); -void sub_802671C(void); -void sub_8026AF4(void); -void sub_8026B28(void); -void sub_8026B5C(u8, u8*, u8*); -u32 sub_8026BB8(void); -void sub_8026C28(void); -bool32 sub_8026C50(void); -bool32 sub_8026C90(void); -void sub_8026D1C(u8); -u8 sub_8026D8C(u8); -u8 sub_8026DB0(u8, u8); -void sub_8026F1C(u8, u8, u8); -void sub_8027234(u8); -void sub_80272A4(void); -void sub_80272E8(void); -void sub_80273F0(void); -void sub_802749C(void); -u8 sub_8027518(u8); -void sub_8027554(void); -void sub_8027608(void); -u32 sub_8027748(void); -void sub_8027DD0(u8); -u32 sub_8027E30(struct DodrioBerryPickingSubstruct_31A0 *, u8 *, u8 *, u8 *, u8 *, u8 *, u8, u32, u32); -u32 sub_8028164(u32 unused, struct DodrioBerryPickingSubstruct_31A0 *, u8 *, u8 *, u8 *, u8 *, u8 *, u8 *, u32 *, u32 *); -void sub_80282EC(u8); -u32 sub_8028318(u8, u8 *); -void sub_8028350(u8); -bool32 sub_8028374(u8); -void sub_80283A8(void); -void sub_8028408(struct DodrioBerryPickingSubstruct_318C *, u8, u8, u8); -void sub_80284CC(u8); -void sub_8028504(u8); -void sub_8028614(u8); -void sub_802868C(u8, u8); -void sub_8028734(void); -void sub_80287E4(void); -void sub_80289E8(u8); -void sub_80286E4(void); -bool32 sub_8028828(void); -void sub_8028A34(void); -void sub_8028A88(void); -void sub_8028B80(void); -void sub_8028D44(void); -void sub_8028DFC(void); -void sub_8028E4C(void); -void sub_8028E84(void); -void sub_8028EC8(u8); -void sub_8028FCC(void); -void sub_802903C(void); -void sub_8029274(struct DodrioBerryPickingSubstruct_0160 *); -void sub_80292E0(u8); -bool32 sub_802A770(void); -u8 sub_802A794(void); - -extern const u8 gUnknown_082F7A88[][3]; -extern const u8 gUnknown_082F449C[]; -extern const u8 gUknnown_082F45AF[]; -extern const u8 gUnknown_082F7A94[]; -extern void (*const gUnknown_082F7AC4[])(void); -extern void (*const gUnknown_082F7AF4[])(void); - -void sub_802493C(u16 a0, void (*a1)(void)) +EWRAM_DATA static struct DodrioStruct * gUnknown_02022C98 = NULL; +EWRAM_DATA static u16 *gUnknown_02022C9C[5] = {NULL}; +EWRAM_DATA static u16 *gUnknown_02022CB0[2] = {NULL}; +EWRAM_DATA static u16 *gUnknown_02022CB8[11] = {NULL}; +EWRAM_DATA static u16 *gUnknown_02022CE4[4] = {NULL}; +EWRAM_DATA static struct DodrioStruct_2022CF4 *gUnknown_02022CF4 = NULL; +EWRAM_DATA static struct DodrioSubstruct_0160 *gUnknown_02022CF8 = NULL; + +static bool32 gUnknown_03000DB0; + +static void sub_8024A1C(void); +static void sub_8024A30(struct DodrioStruct *); +static void sub_8024BC8(u8 taskId); +static void sub_8024DBC(void); +static void sub_8024E00(void); +static void sub_8024E38(void); +static void sub_8024F10(void); +static void sub_8024F38(void); +static void sub_8024FFC(void); +static void sub_80250D4(void); +static void sub_8025158(void); +static void sub_8025198(void); +static void sub_8025230(void); +static void sub_8025324(void); +static void sub_8025470(void); +static void sub_8025644(void); +static void sub_80256AC(void); +static void sub_8025758(void); +static void sub_802589C(u8 taskId); +static void sub_8025910(u8 taskId); +static void sub_8025D04(void); +static void sub_8025D50(void); +static void sub_8025E0C(void); +static void sub_8025ED8(void); +static void sub_8025F48(void); +static void sub_8026044(void); +static void sub_80261CC(void); +static void sub_80261E4(void); +static void sub_80261F8(struct DodrioSubstruct_318C *, struct Pokemon *); +static void sub_802620C(TaskFunc, u8); +static void sub_802621C(TaskFunc); +static void sub_8026240(u8); +static bool32 sub_8026264(void); +static void sub_80262C0(void); +static bool32 sub_8026634(u8, u8, u8); +static void sub_802671C(void); +static void sub_8026AF4(void); +static void sub_8026B28(void); +static void sub_8026B5C(u8, u8*, u8*); +static bool32 sub_8026BB8(void); +static void sub_8026C28(void); +static bool32 sub_8026C50(void); +static bool32 sub_8026C90(void); +static void sub_8026D1C(u8); +static u8 sub_8026D8C(u8); +static u8 sub_8026DB0(u8, u8); +static void sub_8026F1C(u8, u8, u8); +static void sub_8027234(bool32 arg0); +static void sub_80272A4(void); +static void sub_80272E8(void); +static void sub_80273F0(void); +static void sub_802749C(void); +static u8 sub_8027518(u8); +static void sub_8027554(void); +static void sub_8027608(void); +static u32 sub_8027748(void); +static void sub_8027DD0(u32 arg0); +static void sub_8027E30(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8); +static u32 sub_8028164(u32 unused, struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 *arg6, u32 *arg7, u32 *arg8); +static void sub_80282EC(u8); +static u32 sub_8028318(u32 arg0, u8 *arg1); +static void sub_8028350(u32 arg0); +static u32 sub_8028374(u32 arg0); +static void sub_80283A8(void); +static void sub_8028408(struct DodrioSubstruct_318C *arg0, u8 arg1, u8 id, u8 arg3); +static void sub_80284CC(u8); +static void sub_8028504(u8); +static void sub_8028614(u8 count); +static void sub_802868C(bool8 invisible, u8 count); +static void sub_8028734(void); +static void sub_80287E4(void); +static void sub_80289E8(bool8 invisible); +static void sub_80286E4(void); +static bool32 sub_8028828(void); +static void sub_8028A34(void); +static void sub_8028A88(void); +static void sub_8028B80(void); +static void sub_8028D44(void); +static void sub_8028DFC(void); +static void sub_8028E4C(void); +static void sub_8028E84(void); +static void sub_8028EC8(bool8 invisible); +static void sub_8028FCC(void); +static void sub_802903C(void); +static void sub_8029274(struct DodrioSubstruct_0160 *PTR); +static void sub_80292E0(u8); +static bool32 sub_802A770(void); +static u8 sub_802A794(void); +static void sub_8028BF8(u8 id, bool8 invisible); +static void sub_8028C30(bool8 invisible); +static void sub_8028CA4(u16 id, u8 frameNum); +static void sub_8028C7C(u8 id, u8 y); +static void sub_80286B4(u8 id, u8 frameNum); +static u8 sub_8026E70(u8 arg0, u8 arg1); +static void sub_80288D4(u8 arg0); +static u32 sub_8027DFC(u32 arg0); +static u32 IncrementWithLimit(u32 arg0, u32 arg1); +static u32 Min(u32 arg0, u32 arg1); +static u32 sub_80276C0(u8 arg0); +static void sub_8027ACC(u8 taskId); +static void sub_8029314(u8 taskId); +static void sub_8027BEC(u8 windowId, s32 width); +static void nullsub_15(struct Sprite *sprite); +static void sub_80284A8(struct Sprite *sprite); +static u32 sub_802853C(struct Sprite *sprite); +static u32 sub_80285AC(struct Sprite *sprite); +static s16 sub_8028F14(u8 arg0, u8 arg1); +static void sub_8028654(bool8 invisible, u8 id); +static void sub_8029338(void); +static bool32 sub_802A8E8(void); +static void sub_802A7A8(void); +static void sub_802A72C(void (*func)(void)); +static void (*sub_802A75C(void))(void); +static void sub_8029338(void); +static void sub_8029440(void); +static void sub_802988C(void); +static void sub_802A010(void); +static void sub_802A380(void); +static void sub_802A454(void); +static void sub_802A534(void); +static void sub_802A588(void); +static void sub_802A6FC(void); +static void nullsub_16(void); + +// const rom data +static const u8 gUnknown_082F449C[5][5][11] = +{ + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0}, + {0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 7, 2, 9, 0}, + {0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0}, + {0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0}, + {0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0}, + {0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0}, + {0, 7, 8, 1, 2, 3, 4, 5, 6, 7, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, + {2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2}, + {4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4}, + {6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6}, + {8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8}, + }, +}; + +static const u8 gUknnown_082F45AF[5][5][3] = +{ + { + {4, 5, 6}, + }, + { + {3, 4, 5}, + {5, 6, 3}, + }, + { + {4, 5, 6}, + {6, 7, 2}, + {2, 3, 4}, + }, + { + {3, 4, 5}, + {5, 6, 7}, + {7, 8, 1}, + {1, 2, 3}, + }, + { + {4, 5, 6}, + {6, 7, 8}, + {8, 9, 0}, + {0, 1, 2}, + {2, 3, 4}, + }, +}; + +static const u8 gUnknown_082F45FA[5][5][3] = +{ + { + {1, 0, 1}, + }, + { + {1, 0, 1}, + {0, 1, 0}, + }, + { + {2, 0, 1}, + {0, 1, 2}, + {1, 2, 0}, + }, + { + {3, 0, 1}, + {0, 1, 2}, + {1, 2, 3}, + {2, 3, 0}, + }, + { + {4, 0, 1}, + {0, 1, 2}, + {1, 2, 3}, + {2, 3, 4}, + {3, 4, 0}, + }, +}; + +ALIGNED(4) +static const u8 gUnknown_082F4648[5][11] = +{ + {9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9}, + {9, 9, 9, 0, 0, 1, 1, 0, 9, 9, 9}, + {9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9}, + {9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9}, + {3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3}, +}; + +static const u8 gUnknown_082F467F[5][5] = +{ + {5}, + {4, 6}, + {3, 5, 7}, + {2, 4, 6, 8}, + {1, 3, 5, 6, 9}, +}; + +// Duplicate and unused gfx. Feel free to remove. +static const u32 sDuplicateGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.gbapal", + "graphics/link_games/dodrioberry_bg2.gbapal", + "graphics/link_games/dodrioberry_pkmn.gbapal", + "graphics/link_games/dodrioberry_shiny.gbapal", + "graphics/link_games/dodrioberry_status.gbapal", + "graphics/link_games/dodrioberry_berrysprites.gbapal", + "graphics/link_games/dodrioberry_berrysprites.4bpp.lz", + "graphics/link_games/dodrioberry_platform.gbapal", + "graphics/link_games/dodrioberry_bg1.4bpp.lz", + "graphics/link_games/dodrioberry_bg2.4bpp.lz", + "graphics/link_games/dodrioberry_status.4bpp.lz", + "graphics/link_games/dodrioberry_platform.4bpp.lz", + "graphics/link_games/dodrioberry_pkmn.4bpp.lz", + "graphics/link_games/dodrioberry_bg1.bin.lz", + "graphics/link_games/dodrioberry_bg2right.bin.lz", + "graphics/link_games/dodrioberry_bg2left.bin.lz"); + + +static const u8 gUnknown_082F7A88[][3] = +{ + {40, 24, 13}, + {32, 19, 10}, + {22, 13, 7}, +}; + +ALIGNED(4) +static const u8 gUnknown_082F7A94[] = {8, 5, 8, 11, 15}; + +ALIGNED(4) +static const u8 gUnknown_082F7A9C[] = {5, 10, 20, 30, 50, 70, 100}; + +ALIGNED(4) +static const u8 gUnknown_082F7AA4[][10] = +{ + {15, 16, 17, 18, 19, 19, 18, 17, 16, 15}, + {20, 21, 22, 23, 24, 25, 26, 27, 28, 29}, + {30, 31, 32, 33, 34, 34, 33, 32, 31, 30}, +}; + +static void (*const gUnknown_082F7AC4[])(void) = +{ + sub_8024DBC, + sub_8024E00, + sub_8024E38, + sub_8024F10, + sub_8024F38, + sub_8025198, + sub_8025324, + sub_8025470, + sub_8025644, + sub_80256AC, + sub_8025758, + sub_80250D4 +}; + +static void (*const gUnknown_082F7AF4[])(void) = +{ + sub_8024DBC, + sub_8024E00, + sub_8024E38, + sub_8024F10, + sub_8024FFC, + sub_8025230, + sub_8025324, + sub_8025470, + sub_8025644, + sub_80256AC, + sub_8025758, + sub_8025158 +}; + +// code +void sub_802493C(u16 a0, void (*callback)(void)) { gUnknown_03000DB0 = FALSE; @@ -251,108 +458,108 @@ void sub_802493C(u16 a0, void (*a1)(void)) { sub_8024A1C(); sub_8024A30(gUnknown_02022C98); - gUnknown_02022C98->savedCallback = a1; + gUnknown_02022C98->savedCallback = callback; gUnknown_02022C98->multiplayerId = GetMultiplayerId(); - gUnknown_02022C98->unk_32CC = gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId]; - sub_80261F8(&gUnknown_02022C98->unk_318C[gUnknown_02022C98->multiplayerId], &gPlayerParty[a0]); + gUnknown_02022C98->unk32CC = gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId]; + sub_80261F8(&gUnknown_02022C98->unk318C[gUnknown_02022C98->multiplayerId], &gPlayerParty[a0]); CreateTask(sub_8024BC8, 1); SetMainCallback2(sub_80261CC); sub_80273F0(); - sub_8026B5C(gUnknown_02022C98->unk_0024, &gUnknown_02022C98->unk_0044, &gUnknown_02022C98->unk_0048); + sub_8026B5C(gUnknown_02022C98->unk24, &gUnknown_02022C98->unk44, &gUnknown_02022C98->unk48); StopMapMusic(); PlayNewMapMusic(MUS_RG_KINOMIKUI); } else { - SetMainCallback2(a1); + SetMainCallback2(callback); return; } } -void sub_8024A1C(void) +static void sub_8024A1C(void) { ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); } -void sub_8024A30(struct DodrioBerryPickingStruct * data) +static void sub_8024A30(struct DodrioStruct * data) { u8 i; - data->unk_000C = 0; - data->unk_0010 = 0; - data->unk_0014 = 0; - data->unk_0018 = 0; - data->unk_001C = 0; - data->unk_011C = 0; - data->unk_0120 = 0; - data->unk_0030 = 0; - data->unk_0040 = 0; - data->unk_003C = 0; - data->unk_012C = 0; + data->unk0C = 0; + data->unk10 = 0; + data->unk14 = 0; + data->unk18 = 0; + data->unk1C = 0; + data->unk11C = 0; + data->unk120 = 0; + data->unk30 = 0; + data->unk40 = 0; + data->unk3C = 0; + data->unk12C = 0; for (i = 0; i < 4; i++) { - data->unk_0098[i] = 0; + data->unk98[i] = 0; } for (i = 0; i < 5; i++) { - data->unk_00A8[i] = 0; - data->unk_00B0[i] = 0; - data->unk_004A[i][0] = 0; - data->unk_004A[i][1] = 0; - data->unk_004A[i][2] = 0; - data->unk_004A[i][3] = 0; - data->unk_004A[i][5] = 0; - data->unk_010C[i] = 0; - data->unk_0130[i] = 0; + data->unkA8[i] = 0; + data->unkB0[i] = 0; + data->unk4A[i][0] = 0; + data->unk4A[i][1] = 0; + data->unk4A[i][2] = 0; + data->unk4A[i][3] = 0; + data->unk4A[i][5] = 0; + data->unk10C[i] = 0; + data->unk130[i] = 0; } for (i = 0; i < 11; i++) { - data->unk_00D0[i] = 0; - data->unk_00DC[i] = 0; - data->unk_00C4[i] = 0; - data->unk_00F4[i][0] = 0xFF; - data->unk_00F4[i][1] = 0xFF; + data->unkD0[i] = 0; + data->unkDC[i] = 0; + data->unkC4[i] = 0; + data->unkF4[i][0] = 0xFF; + data->unkF4[i][1] = 0xFF; } - data->unk_0020 = GetMultiplayerId() == 0 ? 1 : 0; - data->unk_0024 = GetLinkPlayerCount(); - data->unk_0034[0] = GetMultiplayerId(); - for (i = 1; i < data->unk_0024; i++) + data->unk20 = GetMultiplayerId() == 0 ? 1 : 0; + data->unk24 = GetLinkPlayerCount(); + data->unk34[0] = GetMultiplayerId(); + for (i = 1; i < data->unk24; i++) { - data->unk_0034[i] = data->unk_0034[i - 1] + 1; - if (data->unk_0034[i] > data->unk_0024 - 1) - data->unk_0034[i] %= data->unk_0024; + data->unk34[i] = data->unk34[i - 1] + 1; + if (data->unk34[i] > data->unk24 - 1) + data->unk34[i] %= data->unk24; } } -void sub_8024BC8(u8 taskId) +static void sub_8024BC8(u8 taskId) { u8 r4, r5; - switch (gUnknown_02022C98->unk_000C) + switch (gUnknown_02022C98->unk0C) { case 0: SetVBlankCallback(NULL); sub_802620C(sub_8025910, 4); - gUnknown_02022C98->unk_000C++; + gUnknown_02022C98->unk0C++; break; case 1: if (!FuncIsActiveTask(sub_8025910)) { - sub_8029274(&gUnknown_02022C98->unk_0160); - gUnknown_02022C98->unk_000C++; + sub_8029274(&gUnknown_02022C98->unk160); + gUnknown_02022C98->unk0C++; } break; case 2: if (!sub_802A770()) { sub_8010434(); - gUnknown_02022C98->unk_000C++; + gUnknown_02022C98->unk0C++; } break; case 3: @@ -363,37 +570,37 @@ void sub_8024BC8(u8 taskId) LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); } - gUnknown_02022C98->unk_000C++; + gUnknown_02022C98->unk0C++; } break; case 4: - r5 = gUnknown_02022C98->unk_0024; + r5 = gUnknown_02022C98->unk24; sub_80283A8(); for (r4 = 0; r4 < r5; r4++) { - sub_8028408(&gUnknown_02022C98->unk_318C[gUnknown_02022C98->unk_0034[r4]], r4, gUnknown_02022C98->unk_0034[r4], gUnknown_02022C98->unk_0024); + sub_8028408(&gUnknown_02022C98->unk318C[gUnknown_02022C98->unk34[r4]], r4, gUnknown_02022C98->unk34[r4], gUnknown_02022C98->unk24); } - sub_802868C(0, gUnknown_02022C98->unk_0024); - gUnknown_02022C98->unk_000C++; + sub_802868C(FALSE, gUnknown_02022C98->unk24); + gUnknown_02022C98->unk0C++; break; case 5: sub_8028A34(); sub_8028A88(); sub_8028D44(); sub_8028734(); - gUnknown_02022C98->unk_000C++; + gUnknown_02022C98->unk0C++; break; case 6: BlendPalettes(0xFFFFFFFF, 0x10, 0x00); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); SetVBlankCallback(sub_80261E4); - gUnknown_02022C98->unk_000C++; + gUnknown_02022C98->unk0C++; break; case 7: UpdatePaletteFade(); if (!gPaletteFade.active) { - gUnknown_02022C98->unk_000C++; + gUnknown_02022C98->unk0C++; } break; default: @@ -403,36 +610,36 @@ void sub_8024BC8(u8 taskId) } } -void sub_8024D4C(u8 taskId) +static void sub_8024D4C(u8 taskId) { sub_8025D04(); - gUnknown_082F7AC4[gUnknown_02022C98->unk_0018](); - if (gUnknown_03000DB0 == FALSE) + gUnknown_082F7AC4[gUnknown_02022C98->unk18](); + if (!gUnknown_03000DB0) { sub_8026AF4(); } sub_8025D50(); } -void sub_8024D84(u8 taskId) +static void sub_8024D84(u8 taskId) { sub_8025E0C(); - gUnknown_082F7AF4[gUnknown_02022C98->unk_0018](); - if (gUnknown_03000DB0 == FALSE) + gUnknown_082F7AF4[gUnknown_02022C98->unk18](); + if (!gUnknown_03000DB0) { sub_8026B28(); } sub_8025ED8(); } -void sub_8024DBC(void) +static void sub_8024DBC(void) { - switch (gUnknown_02022C98->unk_0010) + switch (gUnknown_02022C98->unk10) { case 0: sub_8028504(1); sub_80292E0(1); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 1: if (!sub_802A770()) @@ -441,50 +648,50 @@ void sub_8024DBC(void) } } -void sub_8024E00(void) +static void sub_8024E00(void) { - if (gUnknown_02022C98->unk_0010 == 0) + if (gUnknown_02022C98->unk10 == 0) { sub_80262C0(); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } else { - gUnknown_02022C98->unk_0118 = 1; + gUnknown_02022C98->unk118 = 1; sub_8026240(2); } } -void sub_8024E38(void) +static void sub_8024E38(void) { - switch (gUnknown_02022C98->unk_0010) + switch (gUnknown_02022C98->unk10) { case 0: sub_802EB24(7, 8, 120, 80, 0); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 1: sub_8010434(); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 2: if (IsLinkTaskFinished()) { - gUnknown_02022C98->unk_0010++; - gUnknown_02022C98->unk_0030 = 0; + gUnknown_02022C98->unk10++; + gUnknown_02022C98->unk30 = 0; } break; case 3: if (!sub_802EB84()) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 4: - if (++gUnknown_02022C98->unk_0030 > 5) + if (++gUnknown_02022C98->unk30 > 5) { sub_8010434(); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 5: @@ -496,52 +703,52 @@ void sub_8024E38(void) } } -void sub_8024F10(void) +static void sub_8024F10(void) { - if (gUnknown_02022C98->unk_0010 == 0) + if (gUnknown_02022C98->unk10 == 0) { - if (gUnknown_02022C98->unk_011C != 0) + if (gUnknown_02022C98->unk11C != 0) { sub_8026240(4); } } } -void sub_8024F38(void) +static void sub_8024F38(void) { - if (gUnknown_02022C98->unk_0010 == 0) + if (gUnknown_02022C98->unk10 == 0) { - if (gUnknown_02022C98->unk_0040 < 10) + if (gUnknown_02022C98->unk40 < 10) { - if (gUnknown_02022C98->unk_00A8[0] == 0) + if (gUnknown_02022C98->unkA8[0] == 0) { if (JOY_NEW(DPAD_UP)) { - if (gUnknown_02022C98->unk_31A0[0].unk_2C == 0) + if (gUnknown_02022C98->unk31A0[0].unk2C.unk0 == 0) { - gUnknown_02022C98->unk_31A0[0].unk_30 = 0; - gUnknown_02022C98->unk_31A0[0].unk_2C = sub_8027518(2); + gUnknown_02022C98->unk31A0[0].unk2C.unk4 = 0; + gUnknown_02022C98->unk31A0[0].unk2C.unk0 = sub_8027518(2); } } else if (JOY_NEW(DPAD_RIGHT)) { - if (gUnknown_02022C98->unk_31A0[0].unk_2C == 0) + if (gUnknown_02022C98->unk31A0[0].unk2C.unk0 == 0) { - gUnknown_02022C98->unk_31A0[0].unk_30 = 0; - gUnknown_02022C98->unk_31A0[0].unk_2C = sub_8027518(1); + gUnknown_02022C98->unk31A0[0].unk2C.unk4 = 0; + gUnknown_02022C98->unk31A0[0].unk2C.unk0 = sub_8027518(1); } } else if (JOY_NEW(DPAD_LEFT)) { - if (gUnknown_02022C98->unk_31A0[0].unk_2C == 0) + if (gUnknown_02022C98->unk31A0[0].unk2C.unk0 == 0) { - gUnknown_02022C98->unk_31A0[0].unk_30 = 0; - gUnknown_02022C98->unk_31A0[0].unk_2C = sub_8027518(3); + gUnknown_02022C98->unk31A0[0].unk2C.unk4 = 0; + gUnknown_02022C98->unk31A0[0].unk2C.unk0 = sub_8027518(3); } } else { - gUnknown_02022C98->unk_31A0[0].unk_2C = sub_8027518(0); + gUnknown_02022C98->unk31A0[0].unk2C.unk0 = sub_8027518(0); } } } @@ -554,34 +761,34 @@ void sub_8024F38(void) } } -void sub_8024FFC(void) +static void sub_8024FFC(void) { - if (gUnknown_02022C98->unk_0040 < 10) + if (gUnknown_02022C98->unk40 < 10) { if (JOY_NEW(DPAD_UP)) { - if (gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId].unk_2C == 0) + if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 == 0) { - gUnknown_02022C98->unk_32CC.unk_2C = 2; + gUnknown_02022C98->unk32CC.unk2C.unk0 = 2; } } else if (JOY_NEW(DPAD_RIGHT)) { - if (gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId].unk_2C == 0) + if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 == 0) { - gUnknown_02022C98->unk_32CC.unk_2C = 1; + gUnknown_02022C98->unk32CC.unk2C.unk0 = 1; } } else if (JOY_NEW(DPAD_LEFT)) { - if (gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId].unk_2C == 0) + if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 == 0) { - gUnknown_02022C98->unk_32CC.unk_2C = 3; + gUnknown_02022C98->unk32CC.unk2C.unk0 = 3; } } else { - gUnknown_02022C98->unk_32CC.unk_2C = 0; + gUnknown_02022C98->unk32CC.unk2C.unk0 = 0; } } else @@ -591,7 +798,7 @@ void sub_8024FFC(void) sub_8026044(); } -void sub_80250D4(void) +static void sub_80250D4(void) { u8 i; @@ -604,26 +811,26 @@ void sub_80250D4(void) } else { - gUnknown_02022C98->unk_012C = 1; - for (i = 1; i < gUnknown_02022C98->unk_0024; i++) + gUnknown_02022C98->unk12C = 1; + for (i = 1; i < gUnknown_02022C98->unk24; i++) { - if (gUnknown_02022C98->unk_0130[i] != 1) + if (gUnknown_02022C98->unk130[i] != 1) { - gUnknown_02022C98->unk_012C = 0; + gUnknown_02022C98->unk12C = 0; break; } } } } -void sub_8025158(void) +static void sub_8025158(void) { sub_8026044(); if (sub_8026C90() == 1) sub_8026240(5); } -bool32 sub_8025170(void) +static bool32 sub_8025170(void) { u8 r4 = GetBlockReceivedStatus(); u8 r0 = sub_800A9D8(); @@ -638,32 +845,32 @@ bool32 sub_8025170(void) } } -void sub_8025198(void) +static void sub_8025198(void) { - switch (gUnknown_02022C98->unk_0010) + switch (gUnknown_02022C98->unk10) { case 0: - if (SendBlock(0, gUnknown_02022C98->unk_004A, sizeof(gUnknown_02022C98->unk_004A))) + if (SendBlock(0, gUnknown_02022C98->unk4A, sizeof(gUnknown_02022C98->unk4A))) { - gUnknown_02022C98->unk_0008 = 0; - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk08 = 0; + gUnknown_02022C98->unk10++; } break; case 1: if (IsLinkTaskFinished()) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 2: if (sub_8025170()) { - gUnknown_02022C98->unk_0008 = gUnknown_02022C98->unk_0024; + gUnknown_02022C98->unk08 = gUnknown_02022C98->unk24; } - if (gUnknown_02022C98->unk_0008 >= gUnknown_02022C98->unk_0024) + if (gUnknown_02022C98->unk08 >= gUnknown_02022C98->unk24) { - gUnknown_02022C98->unk_0014++; - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk14++; + gUnknown_02022C98->unk10++; } break; default: @@ -676,38 +883,38 @@ void sub_8025198(void) } } -void sub_8025230(void) +static void sub_8025230(void) { u8 i; - switch (gUnknown_02022C98->unk_0010) { + switch (gUnknown_02022C98->unk10) { case 0: - if (SendBlock(0, gUnknown_02022C98->unk_004A[gUnknown_02022C98->unk_0014], - sizeof(gUnknown_02022C98->unk_004A))) { - gUnknown_02022C98->unk_0008 = 0; - gUnknown_02022C98->unk_0010++; + if (SendBlock(0, gUnknown_02022C98->unk4A[gUnknown_02022C98->unk14], + sizeof(gUnknown_02022C98->unk4A))) { + gUnknown_02022C98->unk08 = 0; + gUnknown_02022C98->unk10++; } break; case 1: if (IsLinkTaskFinished()) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 2: if (sub_8025170()) { - for (i = 0; i < gUnknown_02022C98->unk_0024; i++) { - memcpy(gUnknown_02022C98->unk_004A, gBlockRecvBuffer, sizeof(gUnknown_02022C98->unk_004A)); - gUnknown_02022C98->unk_0008 = gUnknown_02022C98->unk_0024; + for (i = 0; i < gUnknown_02022C98->unk24; i++) { + memcpy(gUnknown_02022C98->unk4A, gBlockRecvBuffer, sizeof(gUnknown_02022C98->unk4A)); + gUnknown_02022C98->unk08 = gUnknown_02022C98->unk24; } } - if (gUnknown_02022C98->unk_0008 >= gUnknown_02022C98->unk_0024) { - gUnknown_02022C98->unk_0014++; - gUnknown_02022C98->unk_0010++; + if (gUnknown_02022C98->unk08 >= gUnknown_02022C98->unk24) { + gUnknown_02022C98->unk14++; + gUnknown_02022C98->unk10++; } break; default: if (WaitFanfare(TRUE)) { - gUnknown_02022C98->unk_0114 = gUnknown_02022C98->unk_004A[gUnknown_02022C98->multiplayerId][5]; + gUnknown_02022C98->unk114 = gUnknown_02022C98->unk4A[gUnknown_02022C98->multiplayerId][5]; sub_8026240(6); FadeOutAndPlayNewMapMusic(MUS_RG_WIN_YASEI, 4); } @@ -715,56 +922,56 @@ void sub_8025230(void) } } -void sub_8025324(void) +static void sub_8025324(void) { u8 sp00 = 1; u8 i; - switch (gUnknown_02022C98->unk_0010) + switch (gUnknown_02022C98->unk10) { case 0: sub_802749C(); - sub_80289E8(1); + sub_80289E8(TRUE); sub_8028DFC(); - sub_8028EC8(1); + sub_8028EC8(TRUE); sub_80292E0(2); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 1: if (!sub_802A770()) { sub_80292E0(5); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 2: sp00 = sub_802A794(); if (SendBlock(0, &sp00, sizeof(sp00))) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 3: if (IsLinkTaskFinished()) { - gUnknown_02022C98->unk_0010++; - gUnknown_02022C98->unk_0008 = 0; + gUnknown_02022C98->unk10++; + gUnknown_02022C98->unk08 = 0; } break; case 4: if (sub_8025170()) { - for (i = 0; i < gUnknown_02022C98->unk_0024; i++) + for (i = 0; i < gUnknown_02022C98->unk24; i++) { - *(gUnknown_02022C98->unk_010C + i) = *(u8 *)gBlockRecvBuffer[i]; - gUnknown_02022C98->unk_0008 = gUnknown_02022C98->unk_0024; + *(gUnknown_02022C98->unk10C + i) = *(u8 *)gBlockRecvBuffer[i]; + gUnknown_02022C98->unk08 = gUnknown_02022C98->unk24; } } - if (gUnknown_02022C98->unk_0008 >= gUnknown_02022C98->unk_0024) { - if (++gUnknown_02022C98->unk_0014 >= 120) + if (gUnknown_02022C98->unk08 >= gUnknown_02022C98->unk24) { + if (++gUnknown_02022C98->unk14 >= 120) { sub_80292E0(6); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } } break; @@ -777,74 +984,74 @@ void sub_8025324(void) } } -void sub_8025470(void) +static void sub_8025470(void) { u8 sp0; u8 i; - switch (gUnknown_02022C98->unk_0010) + switch (gUnknown_02022C98->unk10) { case 0: if (sub_8027748() >= 3000) { sub_80292E0(4); } - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 1: if (!sub_802A770()) { sub_80292E0(3); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 2: sub_8028FCC(); sub_80272E8(); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 3: if ((sp0 = sub_802A794()) != 0) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 4: if (!sub_802A770()) { sub_80292E0(5); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 5: sp0 = sub_802A794(); if (SendBlock(0, &sp0, sizeof(sp0))) { - gUnknown_02022C98->unk_0008 = 0; - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk08 = 0; + gUnknown_02022C98->unk10++; } break; case 6: if (IsLinkTaskFinished()) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 7: if (sub_8025170()) { - for (i = 0; i < gUnknown_02022C98->unk_0024; i++) + for (i = 0; i < gUnknown_02022C98->unk24; i++) { - *(gUnknown_02022C98->unk_010C + i) = *(u8 *)gBlockRecvBuffer[i]; - gUnknown_02022C98->unk_0008 = gUnknown_02022C98->unk_0024; + *(gUnknown_02022C98->unk10C + i) = *(u8 *)gBlockRecvBuffer[i]; + gUnknown_02022C98->unk08 = gUnknown_02022C98->unk24; } } - if (gUnknown_02022C98->unk_0008 >= gUnknown_02022C98->unk_0024) { - if (++gUnknown_02022C98->unk_0014 >= 120) + if (gUnknown_02022C98->unk08 >= gUnknown_02022C98->unk24) { + if (++gUnknown_02022C98->unk14 >= 120) { sub_8027608(); sub_80292E0(6); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } } else @@ -855,9 +1062,9 @@ void sub_8025470(void) default: if (!sub_802A770()) { - for (i = 0; i < gUnknown_02022C98->unk_0024; i++) + for (i = 0; i < gUnknown_02022C98->unk24; i++) { - if (gUnknown_02022C98->unk_010C[i] == 2) + if (gUnknown_02022C98->unk10C[i] == 2) { sub_8026240(8); return; @@ -869,25 +1076,25 @@ void sub_8025470(void) } } -void sub_8025644(void) +static void sub_8025644(void) { - switch (gUnknown_02022C98->unk_0010) + switch (gUnknown_02022C98->unk10) { case 0: sub_800AC34(); sub_80292E0(7); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 1: if (!sub_802A770()) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 2: if (sub_802A794() == 5) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; default: @@ -899,35 +1106,35 @@ void sub_8025644(void) } } -void sub_80256AC(void) +static void sub_80256AC(void) { - switch (gUnknown_02022C98->unk_0010) + switch (gUnknown_02022C98->unk10) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 1: UpdatePaletteFade(); if (!gPaletteFade.active) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 2: sub_8028B80(); sub_80287E4(); - sub_8028614(gUnknown_02022C98->unk_0024); + sub_8028614(gUnknown_02022C98->unk24); sub_8028E84(); gUnknown_03000DB0 = TRUE; sub_80292E0(8); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; default: if (!sub_802A770()) { SetMainCallback2(gUnknown_02022C98->savedCallback); - DestroyTask(gUnknown_02022C98->unk_0004); + DestroyTask(gUnknown_02022C98->unk04); Free(gUnknown_02022C98); FreeAllWindowBuffers(); } @@ -935,20 +1142,20 @@ void sub_80256AC(void) } } -void sub_8025758(void) +static void sub_8025758(void) { - switch (gUnknown_02022C98->unk_0010) + switch (gUnknown_02022C98->unk10) { case 0: sub_80292E0(9); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 1: UpdatePaletteFade(); if (!gPaletteFade.active) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 2: @@ -960,66 +1167,66 @@ void sub_8025758(void) ChangeBgY(2, 0, 0); ChangeBgX(3, 0, 0); ChangeBgY(3, 0, 0); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 3: StopMapMusic(); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 4: PlayNewMapMusic(MUS_RG_KINOMIKUI); sub_8028E4C(); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 5: BlendPalettes(0xFFFFFFFF, 16, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 6: UpdatePaletteFade(); if (!gPaletteFade.active) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; default: - DestroyTask(gUnknown_02022C98->unk_0004); + DestroyTask(gUnknown_02022C98->unk04); sub_802621C(sub_802589C); sub_802903C(); sub_8024A30(gUnknown_02022C98); if (gReceivedRemoteLinkPlayers == 0) { - gUnknown_02022C98->unk_0024 = 1; + gUnknown_02022C98->unk24 = 1; } sub_80273F0(); - sub_8028EC8(0); + sub_8028EC8(FALSE); break; } } -void sub_802589C(u8 taskId) +static void sub_802589C(u8 taskId) { - switch (gUnknown_02022C98->unk_0010) + switch (gUnknown_02022C98->unk10) { case 0: if (sub_8026264() == 1) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; case 1: sub_80286E4(); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; break; case 2: - if (sub_8028828() == 1) + if (sub_8028828() == TRUE) { - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; default: - if (gUnknown_02022C98->unk_0020 != 0) + if (gUnknown_02022C98->unk20 != 0) { sub_802621C(sub_8024D4C); } @@ -1032,7 +1239,7 @@ void sub_802589C(u8 taskId) } } -void sub_8025910(u8 taskId) +static void sub_8025910(u8 taskId) { s16 * data = gTasks[taskId].data; u8 i; @@ -1040,9 +1247,9 @@ void sub_8025910(u8 taskId) switch (data[0]) { case 0: - if (SendBlock(0, &gUnknown_02022C98->unk_318C[gUnknown_02022C98->multiplayerId].isShiny, sizeof(gUnknown_02022C98->unk_318C[gUnknown_02022C98->multiplayerId].isShiny))) + if (SendBlock(0, &gUnknown_02022C98->unk318C[gUnknown_02022C98->multiplayerId].isShiny, sizeof(gUnknown_02022C98->unk318C[gUnknown_02022C98->multiplayerId].isShiny))) { - gUnknown_02022C98->unk_0008 = 0; + gUnknown_02022C98->unk08 = 0; data[0]++; } break; @@ -1055,129 +1262,129 @@ void sub_8025910(u8 taskId) case 2: if (sub_8025170()) { - for (i = 0; i < gUnknown_02022C98->unk_0024; i++) + for (i = 0; i < gUnknown_02022C98->unk24; i++) { - *(u8 *)&gUnknown_02022C98->unk_318C[i] = *(u8 *)gBlockRecvBuffer[i]; - gUnknown_02022C98->unk_0008 = gUnknown_02022C98->unk_0024; + *(u8 *)&gUnknown_02022C98->unk318C[i] = *(u8 *)gBlockRecvBuffer[i]; + gUnknown_02022C98->unk08 = gUnknown_02022C98->unk24; } } - if (gUnknown_02022C98->unk_0008 >= gUnknown_02022C98->unk_0024) + if (gUnknown_02022C98->unk08 >= gUnknown_02022C98->unk24) { DestroyTask(taskId); sub_80292E0(6); - gUnknown_02022C98->unk_0010++; + gUnknown_02022C98->unk10++; } break; } } -void sub_80259FC(void) +static void sub_80259FC(void) { u8 i; - u8 r7 = gUnknown_02022C98->unk_0024; + u8 r7 = gUnknown_02022C98->unk24; - gUnknown_02022C98->unk_31A0[0].unk_10 = sub_8028164(0, &gUnknown_02022C98->unk_31A0[0], &gUnknown_02022C98->unk_31A0[0].unk_2C, &gUnknown_02022C98->unk_31A0[1].unk_2C, &gUnknown_02022C98->unk_31A0[2].unk_2C, &gUnknown_02022C98->unk_31A0[3].unk_2C, &gUnknown_02022C98->unk_31A0[4].unk_2C, &gUnknown_02022C98->unk_0040, &gUnknown_02022C98->unk_0120, &gUnknown_02022C98->unk_012C); - gUnknown_02022C98->unk_0128 = 1; + gUnknown_02022C98->unk31A0[0].unk10 = sub_8028164(0, &gUnknown_02022C98->unk31A0[0], &gUnknown_02022C98->unk31A0[0].unk2C, &gUnknown_02022C98->unk31A0[1].unk2C, &gUnknown_02022C98->unk31A0[2].unk2C, &gUnknown_02022C98->unk31A0[3].unk2C, &gUnknown_02022C98->unk31A0[4].unk2C, &gUnknown_02022C98->unk40, &gUnknown_02022C98->unk120, &gUnknown_02022C98->unk12C); + gUnknown_02022C98->unk128 = 1; for (i = 1; i < r7; i++) { - if ( gUnknown_02022C98->unk_00A8[i] == 0 - && sub_8028318(i, &gUnknown_02022C98->unk_31A0[i].unk_2C) == 0) + if ( gUnknown_02022C98->unkA8[i] == 0 + && sub_8028318(i, &gUnknown_02022C98->unk31A0[i].unk2C.unk0) == 0) { - gUnknown_02022C98->unk_31A0[i].unk_2C = 0; - gUnknown_02022C98->unk_0128 = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk0 = 0; + gUnknown_02022C98->unk128 = 0; } } - if (++gUnknown_02022C98->unk_0124 >= 60) + if (++gUnknown_02022C98->unk124 >= 60) { - if (gUnknown_02022C98->unk_0128 != 0) + if (gUnknown_02022C98->unk128 != 0) { sub_8011AC8(); - gUnknown_02022C98->unk_0124 = 0; + gUnknown_02022C98->unk124 = 0; } - else if (gUnknown_02022C98->unk_0124 > 70) + else if (gUnknown_02022C98->unk124 > 70) { sub_8011AC8(); - gUnknown_02022C98->unk_0124 = 0; + gUnknown_02022C98->unk124 = 0; } } for (i = 0; i < r7; i++) { - if ( gUnknown_02022C98->unk_31A0[i].unk_2C != 0 - && gUnknown_02022C98->unk_00A8[i] == 0) + if ( gUnknown_02022C98->unk31A0[i].unk2C.unk0 != 0 + && gUnknown_02022C98->unkA8[i] == 0) { - gUnknown_02022C98->unk_00A8[i] = 1; + gUnknown_02022C98->unkA8[i] = 1; } - switch (gUnknown_02022C98->unk_00A8[i]) + switch (gUnknown_02022C98->unkA8[i]) { case 0: default: break; case 1 ... 3: - if (++gUnknown_02022C98->unk_00B0[i] >= 6) + if (++gUnknown_02022C98->unkB0[i] >= 6) { - gUnknown_02022C98->unk_00B0[i] = 0; - gUnknown_02022C98->unk_00A8[i] = 0; - gUnknown_02022C98->unk_31A0[i].unk_2C = 0; - gUnknown_02022C98->unk_31A0[i].unk_30 = 0; - gUnknown_02022C98->unk_31A0[i].unk_34 = 0; + gUnknown_02022C98->unkB0[i] = 0; + gUnknown_02022C98->unkA8[i] = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk0 = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk4 = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk8 = 0; } break; case 4: - if (++gUnknown_02022C98->unk_00B0[i] >= 40) + if (++gUnknown_02022C98->unkB0[i] >= 40) { - gUnknown_02022C98->unk_00B0[i] = 0; - gUnknown_02022C98->unk_00A8[i] = 0; - gUnknown_02022C98->unk_31A0[i].unk_2C = 0; - gUnknown_02022C98->unk_31A0[i].unk_30 = 0; - gUnknown_02022C98->unk_31A0[i].unk_34 = 0; + gUnknown_02022C98->unkB0[i] = 0; + gUnknown_02022C98->unkA8[i] = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk0 = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk4 = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk8 = 0; } break; } } } -void sub_8025C0C(void) +static void sub_8025C0C(void) { u8 i; - u8 r6 = gUnknown_02022C98->unk_0024; + u8 r6 = gUnknown_02022C98->unk24; - gUnknown_02022C98->unk_31A0[0].unk_10 = sub_8028164(0, &gUnknown_02022C98->unk_31A0[0], &gUnknown_02022C98->unk_31A0[0].unk_2C, &gUnknown_02022C98->unk_31A0[1].unk_2C, &gUnknown_02022C98->unk_31A0[2].unk_2C, &gUnknown_02022C98->unk_31A0[3].unk_2C, &gUnknown_02022C98->unk_31A0[4].unk_2C, &gUnknown_02022C98->unk_0040, &gUnknown_02022C98->unk_0120, &gUnknown_02022C98->unk_012C); - gUnknown_02022C98->unk_0128 = 1; + gUnknown_02022C98->unk31A0[0].unk10 = sub_8028164(0, &gUnknown_02022C98->unk31A0[0], &gUnknown_02022C98->unk31A0[0].unk2C, &gUnknown_02022C98->unk31A0[1].unk2C, &gUnknown_02022C98->unk31A0[2].unk2C, &gUnknown_02022C98->unk31A0[3].unk2C, &gUnknown_02022C98->unk31A0[4].unk2C, &gUnknown_02022C98->unk40, &gUnknown_02022C98->unk120, &gUnknown_02022C98->unk12C); + gUnknown_02022C98->unk128 = 1; for (i = 1; i < r6; i++) { if (sub_8028374(i) != 0) { - gUnknown_02022C98->unk_0130[i] = 1; - gUnknown_02022C98->unk_0128 = 0; + gUnknown_02022C98->unk130[i] = 1; + gUnknown_02022C98->unk128 = 0; } } - if (++gUnknown_02022C98->unk_0124 >= 60) + if (++gUnknown_02022C98->unk124 >= 60) { - if (gUnknown_02022C98->unk_0128 != 0) + if (gUnknown_02022C98->unk128 != 0) { sub_8011AC8(); - gUnknown_02022C98->unk_0124 = 0; + gUnknown_02022C98->unk124 = 0; } - else if (gUnknown_02022C98->unk_0124 > 70) + else if (gUnknown_02022C98->unk124 > 70) { sub_8011AC8(); - gUnknown_02022C98->unk_0124 = 0; + gUnknown_02022C98->unk124 = 0; } } } -void sub_8025D04(void) +static void sub_8025D04(void) { - switch (gUnknown_02022C98->unk_0018) + switch (gUnknown_02022C98->unk18) { case 3: - if (sub_8026BB8() == 1) + if (sub_8026BB8() == TRUE) { sub_8026C28(); - gUnknown_02022C98->unk_011C = 1; + gUnknown_02022C98->unk11C = 1; } break; case 4: @@ -1189,48 +1396,48 @@ void sub_8025D04(void) } } -void sub_8025D50(void) +static void sub_8025D50(void) { - switch (gUnknown_02022C98->unk_0018) + switch (gUnknown_02022C98->unk18) { case 4: - sub_8027E30(&gUnknown_02022C98->unk_32CC, &gUnknown_02022C98->unk_31A0[0].unk_2C, &gUnknown_02022C98->unk_31A0[1].unk_2C, &gUnknown_02022C98->unk_31A0[2].unk_2C, &gUnknown_02022C98->unk_31A0[3].unk_2C, &gUnknown_02022C98->unk_31A0[4].unk_2C, gUnknown_02022C98->unk_0040, gUnknown_02022C98->unk_0120, gUnknown_02022C98->unk_012C); + sub_8027E30(&gUnknown_02022C98->unk32CC, &gUnknown_02022C98->unk31A0[0].unk2C, &gUnknown_02022C98->unk31A0[1].unk2C, &gUnknown_02022C98->unk31A0[2].unk2C, &gUnknown_02022C98->unk31A0[3].unk2C, &gUnknown_02022C98->unk31A0[4].unk2C, gUnknown_02022C98->unk40, gUnknown_02022C98->unk120, gUnknown_02022C98->unk12C); break; case 11: - sub_8027E30(&gUnknown_02022C98->unk_32CC, &gUnknown_02022C98->unk_31A0[0].unk_2C, &gUnknown_02022C98->unk_31A0[1].unk_2C, &gUnknown_02022C98->unk_31A0[2].unk_2C, &gUnknown_02022C98->unk_31A0[3].unk_2C, &gUnknown_02022C98->unk_31A0[4].unk_2C, gUnknown_02022C98->unk_0040, gUnknown_02022C98->unk_0120, gUnknown_02022C98->unk_012C); + sub_8027E30(&gUnknown_02022C98->unk32CC, &gUnknown_02022C98->unk31A0[0].unk2C, &gUnknown_02022C98->unk31A0[1].unk2C, &gUnknown_02022C98->unk31A0[2].unk2C, &gUnknown_02022C98->unk31A0[3].unk2C, &gUnknown_02022C98->unk31A0[4].unk2C, gUnknown_02022C98->unk40, gUnknown_02022C98->unk120, gUnknown_02022C98->unk12C); break; } } -void sub_8025E0C(void) +static void sub_8025E0C(void) { - switch (gUnknown_02022C98->unk_0018) + switch (gUnknown_02022C98->unk18) { case 4: - sub_8028164(gUnknown_02022C98->multiplayerId, &gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId], &gUnknown_02022C98->unk_31A0[0].unk_2C, &gUnknown_02022C98->unk_31A0[1].unk_2C, &gUnknown_02022C98->unk_31A0[2].unk_2C, &gUnknown_02022C98->unk_31A0[3].unk_2C, &gUnknown_02022C98->unk_31A0[4].unk_2C, &gUnknown_02022C98->unk_0040, &gUnknown_02022C98->unk_0120, &gUnknown_02022C98->unk_012C); + sub_8028164(gUnknown_02022C98->multiplayerId, &gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId], &gUnknown_02022C98->unk31A0[0].unk2C, &gUnknown_02022C98->unk31A0[1].unk2C, &gUnknown_02022C98->unk31A0[2].unk2C, &gUnknown_02022C98->unk31A0[3].unk2C, &gUnknown_02022C98->unk31A0[4].unk2C, &gUnknown_02022C98->unk40, &gUnknown_02022C98->unk120, &gUnknown_02022C98->unk12C); break; case 11: - sub_8028164(gUnknown_02022C98->multiplayerId, &gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId], &gUnknown_02022C98->unk_31A0[0].unk_2C, &gUnknown_02022C98->unk_31A0[1].unk_2C, &gUnknown_02022C98->unk_31A0[2].unk_2C, &gUnknown_02022C98->unk_31A0[3].unk_2C, &gUnknown_02022C98->unk_31A0[4].unk_2C, &gUnknown_02022C98->unk_0040, &gUnknown_02022C98->unk_0120, &gUnknown_02022C98->unk_012C); + sub_8028164(gUnknown_02022C98->multiplayerId, &gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId], &gUnknown_02022C98->unk31A0[0].unk2C, &gUnknown_02022C98->unk31A0[1].unk2C, &gUnknown_02022C98->unk31A0[2].unk2C, &gUnknown_02022C98->unk31A0[3].unk2C, &gUnknown_02022C98->unk31A0[4].unk2C, &gUnknown_02022C98->unk40, &gUnknown_02022C98->unk120, &gUnknown_02022C98->unk12C); break; } } -void sub_8025ED8(void) +static void sub_8025ED8(void) { - switch (gUnknown_02022C98->unk_0018) + switch (gUnknown_02022C98->unk18) { case 3: sub_8027DD0(1); - gUnknown_02022C98->unk_011C = 1; + gUnknown_02022C98->unk11C = 1; break; case 4: - if (gUnknown_02022C98->unk_32CC.unk_2C != 0) + if (gUnknown_02022C98->unk32CC.unk2C.unk0 != 0) { - sub_80282EC(gUnknown_02022C98->unk_32CC.unk_2C); + sub_80282EC(gUnknown_02022C98->unk32CC.unk2C.unk0); } break; case 11: - if (gUnknown_02022C98->unk_0120 == 0 && gUnknown_02022C98->unk_012C == 0) + if (gUnknown_02022C98->unk120 == 0 && gUnknown_02022C98->unk12C == 0) { sub_8028350(1); } @@ -1238,105 +1445,105 @@ void sub_8025ED8(void) } } -void sub_8025F48(void) +static void sub_8025F48(void) { - if (gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId].unk_2C == 0) + if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 == 0) { if (!IsSEPlaying()) { - gUnknown_02022C98->unk_0144 = 0; + gUnknown_02022C98->unk144 = 0; } } - else if (gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId].unk_30 == 1) + else if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk4 == 1) { - if (gUnknown_02022C98->unk_0144 == 0) + if (gUnknown_02022C98->unk144 == 0) { m4aSongNumStop(SE_SEIKAI); PlaySE(SE_SEIKAI); - gUnknown_02022C98->unk_0144 = 1; + gUnknown_02022C98->unk144 = 1; } } - else if (gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId].unk_34 == 1) + else if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk8 == 1) { - if (gUnknown_02022C98->unk_0144 == 0 && !IsSEPlaying()) + if (gUnknown_02022C98->unk144 == 0 && !IsSEPlaying()) { PlaySE(SE_BOO); sub_80284CC(1); - gUnknown_02022C98->unk_0144 = 1; + gUnknown_02022C98->unk144 = 1; } } - if (gUnknown_02022C98->unk_0154 == 0 && gUnknown_02022C98->unk_0040 >= 10) + if (gUnknown_02022C98->unk154 == 0 && gUnknown_02022C98->unk40 >= 10) { StopMapMusic(); - gUnknown_02022C98->unk_0154 = 1; + gUnknown_02022C98->unk154 = 1; } - else if (gUnknown_02022C98->unk_0154 == 1) + else if (gUnknown_02022C98->unk154 == 1) { PlayFanfareByFanfareNum(11); // MUS_ME_ZANNEN - gUnknown_02022C98->unk_0154 = 2; + gUnknown_02022C98->unk154 = 2; } } -void sub_8026044(void) +static void sub_8026044(void) { - u8 r8 = gUnknown_02022C98->unk_0044; - u8 r7 = gUnknown_02022C98->unk_0048; + u8 r8 = gUnknown_02022C98->unk44; + u8 r7 = gUnknown_02022C98->unk48; u8 r4; - if (gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId].unk_2C == 0) + if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 == 0) { - if (gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId].unk_30 != 1 && gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId].unk_34 != 1) + if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk4 != 1 && gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk8 != 1) { - gUnknown_02022C98->unk_0144 = 0; + gUnknown_02022C98->unk144 = 0; } } - else if (gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId].unk_30 == 1) + else if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk4 == 1) { - if (gUnknown_02022C98->unk_0144 == 0) + if (gUnknown_02022C98->unk144 == 0) { m4aSongNumStop(SE_SEIKAI); PlaySE(SE_SEIKAI); - gUnknown_02022C98->unk_0144 = 1; + gUnknown_02022C98->unk144 = 1; } } - else if (gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId].unk_34 == 1) + else if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk8 == 1) { - if (gUnknown_02022C98->unk_0144 == 0 && !IsSEPlaying()) + if (gUnknown_02022C98->unk144 == 0 && !IsSEPlaying()) { PlaySE(SE_BOO); sub_80284CC(1); - gUnknown_02022C98->unk_0144 = 1; + gUnknown_02022C98->unk144 = 1; } } for (r4 = r8; r4 < r7; r4++) { - struct DodrioBerryPickingSubstruct_31A0_14 * ptr = &gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId].unk_14; - if (ptr->unk_B[r4] >= 10) + struct DodrioSubstruct_31A0_14 * ptr = &gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk14; + if (ptr->unkB[r4] >= 10) { - if (gUnknown_02022C98->unk_0148[r4] == 0) + if (gUnknown_02022C98->unk148[r4] == 0) { - PlaySE(SE_FUUSEN1 + ptr->unk_0[r4]); - gUnknown_02022C98->unk_0148[r4] = 1; + PlaySE(SE_FUUSEN1 + ptr->unk0[r4]); + gUnknown_02022C98->unk148[r4] = 1; } } else { - gUnknown_02022C98->unk_0148[r4] = 0; + gUnknown_02022C98->unk148[r4] = 0; } } - if (gUnknown_02022C98->unk_0154 == 0 && gUnknown_02022C98->unk_0040 >= 10) + if (gUnknown_02022C98->unk154 == 0 && gUnknown_02022C98->unk40 >= 10) { StopMapMusic(); - gUnknown_02022C98->unk_0154 = 1; + gUnknown_02022C98->unk154 = 1; } - else if (gUnknown_02022C98->unk_0154 == 1) + else if (gUnknown_02022C98->unk154 == 1) { PlayFanfareByFanfareNum(11); // MUS_ME_ZANNEN - gUnknown_02022C98->unk_0154 = 2; + gUnknown_02022C98->unk154 = 2; } } -void sub_80261CC(void) +static void sub_80261CC(void) { RunTasks(); AnimateSprites(); @@ -1344,46 +1551,46 @@ void sub_80261CC(void) UpdatePaletteFade(); } -void sub_80261E4(void) +static void sub_80261E4(void) { TransferPlttBuffer(); LoadOam(); ProcessSpriteCopyRequests(); } -void sub_80261F8(struct DodrioBerryPickingSubstruct_318C * a0, struct Pokemon * a1) +static void sub_80261F8(struct DodrioSubstruct_318C * a0, struct Pokemon * a1) { a0->isShiny = IsMonShiny(a1); } -void sub_802620C(TaskFunc func, u8 priority) +static void sub_802620C(TaskFunc func, u8 priority) { CreateTask(func, priority); } -void sub_802621C(TaskFunc func) +static void sub_802621C(TaskFunc func) { - gUnknown_02022C98->unk_0004 = CreateTask(func, 1); - gUnknown_02022C98->unk_0010 = 0; - gUnknown_02022C98->unk_000C = 0; - gUnknown_02022C98->unk_0014 = 0; + gUnknown_02022C98->unk04 = CreateTask(func, 1); + gUnknown_02022C98->unk10 = 0; + gUnknown_02022C98->unk0C = 0; + gUnknown_02022C98->unk14 = 0; } -void sub_8026240(u8 a0) +static void sub_8026240(u8 a0) { - gUnknown_02022C98->unk_001C = gUnknown_02022C98->unk_0018; - gUnknown_02022C98->unk_0018 = a0; - gUnknown_02022C98->unk_0010 = 0; - gUnknown_02022C98->unk_0014 = 0; + gUnknown_02022C98->unk1C = gUnknown_02022C98->unk18; + gUnknown_02022C98->unk18 = a0; + gUnknown_02022C98->unk10 = 0; + gUnknown_02022C98->unk14 = 0; } -bool32 sub_8026264(void) +static bool32 sub_8026264(void) { - u8 r2 = gUnknown_02022C98->unk_0014 / 4; - gUnknown_02022C98->unk_0014++; - if (r2 != 0 && gUnknown_02022C98->unk_0014 % 4 == 0) + u8 r2 = gUnknown_02022C98->unk14 / 4; + gUnknown_02022C98->unk14++; + if (r2 != 0 && gUnknown_02022C98->unk14 % 4 == 0) { - if (r2 < gUnknown_082F7A94[gUnknown_02022C98->unk_0024 - 1]) + if (r2 < gUnknown_082F7A94[gUnknown_02022C98->unk24 - 1]) { SetGpuReg(REG_OFFSET_BG1HOFS, (r2 * 8)); SetGpuReg(REG_OFFSET_BG2HOFS, -(r2 * 8)); @@ -1400,530 +1607,125 @@ bool32 sub_8026264(void) } } -void sub_80262C0(void) +static void sub_80262C0(void) { u8 i; - u8 start = gUnknown_02022C98->unk_0044; - u8 finish = gUnknown_02022C98->unk_0048; + u8 start = gUnknown_02022C98->unk44; + u8 finish = gUnknown_02022C98->unk48; for (i = start; i < finish; i++) { - struct DodrioBerryPickingSubstruct_31A0_14 * ptr = &gUnknown_02022C98->unk_32CC.unk_14; - ptr->unk_B[i] = (i % 2 == 0) ? 1 : 0; - ptr->unk_0[i] = 0; + struct DodrioSubstruct_31A0_14 * ptr = &gUnknown_02022C98->unk32CC.unk14; + ptr->unkB[i] = (i % 2 == 0) ? 1 : 0; + ptr->unk0[i] = 0; } } -#ifdef NONMATCHING -void sub_8026324(void) +static void sub_8026324(void) { - u8 sp0 = gUnknown_02022C98->unk_0044; - u8 sp4 = gUnknown_02022C98->unk_0048; - u8 sp8 = gUnknown_02022C98->unk_0024; - u8 r6; - u8 r10; - u8 r2; - u8 r5; - u8 r3; - s32 r2_2; - u8 r4; - u8 r7, r7_2; + u8 sp0 = gUnknown_02022C98->unk44; + u8 sp4 = gUnknown_02022C98->unk48; + u8 sp8 = gUnknown_02022C98->unk24; + u8 i, j, k, r5; + + if (gUnknown_02022C98->unk40 >= 10) + return; - if (gUnknown_02022C98->unk_0040 < 10) + for (i = 0; i < sp8; i++) { - for (r6 = 0; r6 < sp8; r6++) + u8 *ptr = &gUnknown_02022C98->unk31A0[i].unk2C.unk0; + if (*ptr != 0 && gUnknown_02022C98->unkA8[i] == 1) { - if ( gUnknown_02022C98->unk_31A0[r6].unk_2C != 0 - && gUnknown_02022C98->unk_00A8[r6] == 1) + for (j = sp0; j < sp4; j++) { - for (r10 = sp0; r10 < sp4; r10++) + r5 = gUnknown_082F449C[0][0][j]; + if (gUnknown_02022C98->unkF4[r5][0] == i || gUnknown_02022C98->unkF4[r5][1] == i) + break; + if (sub_8026634(i, *ptr, r5) == TRUE) { - r5 = gUnknown_082F449C[r10]; - if (gUnknown_02022C98->unk_00F4[r5][0] == r6) - { - break; - } - if (gUnknown_02022C98->unk_00F4[r5][1] == r6) - { - break; - } - if (sub_8026634(gUnknown_02022C98->unk_31A0[r6].unk_2C, r6, gUnknown_082F449C[r10]) == 1) + for (k = 0; k < 2; k++) { - for (r2 = 0; r2 < 2; r2++) + if (gUnknown_02022C98->unkF4[r5][k] == 0xFF) { - if (gUnknown_02022C98->unk_00F4[r5][r2] == 0xFF) - { - gUnknown_02022C98->unk_00F4[r5][r2] = r6; - gUnknown_02022C98->unk_00A8[r6] = 2; - gUnknown_02022C98->unk_00C4[r5] = 1; - break; - } + gUnknown_02022C98->unkF4[r5][k] = i; + gUnknown_02022C98->unkA8[i] = 2; + gUnknown_02022C98->unkC4[r5] = 1; + break; } - break; - } - if (gUnknown_02022C98->unk_31A0[r6].unk_34 == 1) - { - break; } + break; } + if (gUnknown_02022C98->unk31A0[i].unk2C.unk8 == 1) + break; } } - for (r10 = sp0; r10 < sp4; r10++) + } + + for (j = sp0; j < sp4; j++) + { + u8 id = 0xFF; + r5 = gUnknown_082F449C[0][0][j]; + if (gUnknown_02022C98->unkC4[r5] == 1) { - r6 = 0xFF; - r5 = gUnknown_082F449C[r10]; - if (gUnknown_02022C98->unk_00C4[r5] == 1) + s32 r2; + u8 r4, r3 = gUnknown_02022C98->unk90[sub_8026D8C(r5)] / 7; + if (r3 >= ARRAY_COUNT(gUnknown_082F7A88) - 1) + r3 = ARRAY_COUNT(gUnknown_082F7A88) - 1; + + r2 = gUnknown_082F7A88[r3][gUnknown_02022C98->unk31A0[0].unk14.unk0[r5]] - gUnknown_02022C98->unkD0[r5]; + if (r2 < 6) + gUnknown_02022C98->unk9C[r5] += r2; + + if (++gUnknown_02022C98->unk9C[r5] >= 6) { - r3 = gUnknown_02022C98->unk_0090[sub_8026D8C(r5)] / 7; - if (r3 < 2) + gUnknown_02022C98->unk9C[r5] = 0; + if (gUnknown_02022C98->unkF4[r5][0] == 0xFF && gUnknown_02022C98->unkF4[r5][1] == 0xFF) { - r3 = 2; + continue; } - r2 = gUnknown_082F7A88[r3][gUnknown_02022C98->unk_31A0[0].unk_14.unk_0[r5]] - gUnknown_02022C98->unk_00D0[r5]; - if (r2 < 6) + else if (gUnknown_02022C98->unkF4[r5][0] != 0xFF && gUnknown_02022C98->unkF4[r5][1] == 0xFF) { - gUnknown_02022C98->unk_009C[r5] += r2; + r4 = gUnknown_02022C98->unkF4[r5][0]; } - if (++gUnknown_02022C98->unk_009C[r5] < 6) + else { - gUnknown_02022C98->unk_009C[r5] = 0; - if (gUnknown_02022C98->unk_00F4[r5][0] != 0xFF && gUnknown_02022C98->unk_00F4[r5][1] == 0xFF) + u8 unk0 = gUnknown_02022C98->unkF4[r5][0]; + i = gUnknown_02022C98->unkF4[r5][1]; // Have to re-use the variable to match. + if (!(Random() & 1)) { - r4 = gUnknown_02022C98->unk_00F4[r5][0]; - } - else if (gUnknown_02022C98->unk_00F4[r5][0] == 0xFF && gUnknown_02022C98->unk_00F4[r5][1] == 0xFF) - { - continue; + r4 = unk0; + id = i; } else { - r7 = gUnknown_02022C98->unk_00F4[r5][0]; - r7_2 = gUnknown_02022C98->unk_00F4[r5][1]; - if ((Random() & 1)) - { - r4 = r7_2; - r6 = r7; - } - else - { - r4 = r7; - r6 = r7_2; - } + r4 = i; + id = unk0; } - gUnknown_02022C98->unk_32CC.unk_1F[r5] = 7; - gUnknown_02022C98->unk_00C4[r5] = 2; - gUnknown_02022C98->unk_00A8[r4] = 3; - gUnknown_02022C98->unk_00B8[r5] = r4; - gUnknown_02022C98->unk_31A0[r4].unk_30 = 1; - gUnknown_02022C98->unk_31A0[r6].unk_34 = 1; - gUnknown_02022C98->unk_0086[r4]++; - sub_8026F1C(0, r5, r4); - sub_8027234(1); - sub_8026D1C(r4); - gUnknown_02022C98->unk_00E8[r5] = gUnknown_02022C98->unk_32CC.unk_14.unk_0[r5]; - gUnknown_02022C98->unk_32CC.unk_14.unk_0[r5] = 3; - gUnknown_02022C98->unk_00F4[r5][0] = 0xFF; - gUnknown_02022C98->unk_00F4[r5][1] = 0xFF; } + gUnknown_02022C98->unk32CC.unk14.unkB[r5] = 7; + gUnknown_02022C98->unkC4[r5] = 2; + gUnknown_02022C98->unkA8[r4] = 3; + gUnknown_02022C98->unkB8[r5] = r4; + gUnknown_02022C98->unk31A0[r4].unk2C.unk4 = 1; + gUnknown_02022C98->unk31A0[id].unk2C.unk8 = 1; + gUnknown_02022C98->unk86[r4]++; + sub_8026F1C(0, r5, r4); + sub_8027234(TRUE); + sub_8026D1C(r4); + gUnknown_02022C98->unkE8[r5] = gUnknown_02022C98->unk32CC.unk14.unk0[r5]; + gUnknown_02022C98->unk32CC.unk14.unk0[r5] = 3; + gUnknown_02022C98->unkF4[r5][0] = 0xFF; + gUnknown_02022C98->unkF4[r5][1] = 0xFF; } } } } -#else -NAKED -void sub_8026324(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x10\n" - "\tldr r0, =gUnknown_02022C98\n" - "\tldr r1, [r0]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0x44\n" - "\tldrb r0, [r0]\n" - "\tstr r0, [sp]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0x48\n" - "\tldrb r0, [r0]\n" - "\tstr r0, [sp, 0x4]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0x24\n" - "\tldrb r0, [r0]\n" - "\tstr r0, [sp, 0x8]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0x40\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0x9\n" - "\tbls _08026358\n" - "\tb _08026614\n" - "_08026358:\n" - "\tmovs r6, 0\n" - "\tldr r0, [sp, 0x8]\n" - "\tcmp r6, r0\n" - "\tbcs _08026440\n" - "_08026360:\n" - "\tldr r3, =gUnknown_02022C98\n" - "\tlsls r0, r6, 4\n" - "\tsubs r1, r0, r6\n" - "\tlsls r1, 2\n" - "\tldr r2, [r3]\n" - "\tadds r1, r2\n" - "\tldr r4, =0x000031cc\n" - "\tadds r4, r1\n" - "\tmov r8, r4\n" - "\tldrb r1, [r4]\n" - "\tmov r9, r0\n" - "\tadds r0, r6, 0x1\n" - "\tstr r0, [sp, 0xC]\n" - "\tcmp r1, 0\n" - "\tbeq _08026434\n" - "\tadds r0, r2, 0\n" - "\tadds r0, 0xA8\n" - "\tadds r0, r6\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0x1\n" - "\tbne _08026434\n" - "\tldr r1, [sp]\n" - "\tmov r10, r1\n" - "\tldr r2, [sp, 0x4]\n" - "\tcmp r10, r2\n" - "\tbcs _08026434\n" - "\tadds r7, r3, 0\n" - "_08026396:\n" - "\tldr r0, =gUnknown_082F449C\n" - "\tadd r0, r10\n" - "\tldrb r5, [r0]\n" - "\tldr r1, [r7]\n" - "\tlsls r4, r5, 1\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0xF4\n" - "\tadds r0, r4\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, r6\n" - "\tbeq _08026434\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0xF5\n" - "\tadds r0, r4\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, r6\n" - "\tbeq _08026434\n" - "\tmov r0, r8\n" - "\tldrb r1, [r0]\n" - "\tadds r0, r6, 0\n" - "\tadds r2, r5, 0\n" - "\tbl sub_8026634\n" - "\tcmp r0, 0x1\n" - "\tbne _08026410\n" - "\tmovs r2, 0\n" - "\tldr r3, =gUnknown_02022C98\n" - "\tmov r8, r4\n" - "_080263CE:\n" - "\tldr r0, [r3]\n" - "\tmov r4, r8\n" - "\tadds r1, r2, r4\n" - "\tadds r0, 0xF4\n" - "\tadds r1, r0, r1\n" - "\tldrb r0, [r1]\n" - "\tcmp r0, 0xFF\n" - "\tbne _08026404\n" - "\tstrb r6, [r1]\n" - "\tldr r0, [r3]\n" - "\tadds r0, 0xA8\n" - "\tadds r0, r6\n" - "\tmovs r1, 0x2\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r3]\n" - "\tadds r0, 0xC4\n" - "\tadds r0, r5\n" - "\tmovs r1, 0x1\n" - "\tstrb r1, [r0]\n" - "\tb _08026434\n" - "\t.pool\n" - "_08026404:\n" - "\tadds r0, r2, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r2, r0, 24\n" - "\tcmp r2, 0x1\n" - "\tbls _080263CE\n" - "\tb _08026434\n" - "_08026410:\n" - "\tldr r0, [r7]\n" - "\tmov r2, r9\n" - "\tsubs r1, r2, r6\n" - "\tlsls r1, 2\n" - "\tadds r0, r1\n" - "\tldr r4, =0x000031d4\n" - "\tadds r0, r4\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0x1\n" - "\tbeq _08026434\n" - "\tmov r0, r10\n" - "\tadds r0, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tmov r10, r0\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r10, r0\n" - "\tbcc _08026396\n" - "_08026434:\n" - "\tldr r1, [sp, 0xC]\n" - "\tlsls r0, r1, 24\n" - "\tlsrs r6, r0, 24\n" - "\tldr r2, [sp, 0x8]\n" - "\tcmp r6, r2\n" - "\tbcc _08026360\n" - "_08026440:\n" - "\tldr r4, [sp]\n" - "\tmov r10, r4\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r10, r0\n" - "\tbcc _0802644C\n" - "\tb _08026614\n" - "_0802644C:\n" - "\tldr r1, =gUnknown_02022C98\n" - "\tmov r9, r1\n" - "_08026450:\n" - "\tmovs r6, 0xFF\n" - "\tldr r0, =gUnknown_082F449C\n" - "\tadd r0, r10\n" - "\tldrb r5, [r0]\n" - "\tmov r2, r9\n" - "\tldr r0, [r2]\n" - "\tadds r0, 0xC4\n" - "\tadds r0, r5\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0x1\n" - "\tbeq _08026468\n" - "\tb _08026602\n" - "_08026468:\n" - "\tadds r0, r5, 0\n" - "\tbl sub_8026D8C\n" - "\tmov r1, r9\n" - "\tldr r4, [r1]\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tadds r1, r4, 0\n" - "\tadds r1, 0x90\n" - "\tadds r1, r0\n" - "\tldrb r0, [r1]\n" - "\tmovs r1, 0x7\n" - "\tbl __udivsi3\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x1\n" - "\tbls _0802648E\n" - "\tmovs r3, 0x2\n" - "_0802648E:\n" - "\tldr r2, =gUnknown_082F7A88\n" - "\tldr r0, =0x000031b4\n" - "\tadds r1, r4, r0\n" - "\tadds r1, r5\n" - "\tlsls r0, r3, 1\n" - "\tadds r0, r3\n" - "\tldrb r1, [r1]\n" - "\tadds r0, r1\n" - "\tadds r0, r2\n" - "\tldrb r1, [r0]\n" - "\tadds r0, r4, 0\n" - "\tadds r0, 0xD0\n" - "\tadds r0, r5\n" - "\tldrb r0, [r0]\n" - "\tsubs r2, r1, r0\n" - "\tcmp r2, 0x5\n" - "\tbgt _080264BC\n" - "\tadds r1, r4, 0\n" - "\tadds r1, 0x9C\n" - "\tadds r1, r5\n" - "\tldrb r0, [r1]\n" - "\tadds r0, r2\n" - "\tstrb r0, [r1]\n" - "_080264BC:\n" - "\tmov r2, r9\n" - "\tldr r1, [r2]\n" - "\tadds r1, 0x9C\n" - "\tadds r1, r5\n" - "\tldrb r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tmovs r2, 0\n" - "\tstrb r0, [r1]\n" - "\tmovs r4, 0xFF\n" - "\tands r0, r4\n" - "\tcmp r0, 0x5\n" - "\tbhi _080264D6\n" - "\tb _08026602\n" - "_080264D6:\n" - "\tmov r1, r9\n" - "\tldr r0, [r1]\n" - "\tadds r0, 0x9C\n" - "\tadds r0, r5\n" - "\tstrb r2, [r0]\n" - "\tldr r3, [r1]\n" - "\tlsls r1, r5, 1\n" - "\tadds r0, r3, 0\n" - "\tadds r0, 0xF4\n" - "\tadds r2, r0, r1\n" - "\tldrb r0, [r2]\n" - "\tmov r8, r1\n" - "\tcmp r0, 0xFF\n" - "\tbne _08026518\n" - "\tadds r0, r3, 0\n" - "\tadds r0, 0xF5\n" - "\tadd r0, r8\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0xFF\n" - "\tbne _08026500\n" - "\tb _08026602\n" - "_08026500:\n" - "\tb _08026528\n" - "\t.pool\n" - "_08026518:\n" - "\tadds r0, r3, 0\n" - "\tadds r0, 0xF5\n" - "\tadd r0, r8\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0xFF\n" - "\tbne _08026528\n" - "\tldrb r4, [r2]\n" - "\tb _0802654E\n" - "_08026528:\n" - "\tmov r2, r9\n" - "\tldr r1, [r2]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0xF4\n" - "\tadd r0, r8\n" - "\tldrb r7, [r0]\n" - "\tadds r1, 0xF5\n" - "\tadd r1, r8\n" - "\tldrb r6, [r1]\n" - "\tbl Random\n" - "\tmovs r1, 0x1\n" - "\tands r1, r0\n" - "\tcmp r1, 0\n" - "\tbne _0802654A\n" - "\tadds r4, r7, 0\n" - "\tb _0802654E\n" - "_0802654A:\n" - "\tadds r4, r6, 0\n" - "\tadds r6, r7, 0\n" - "_0802654E:\n" - "\tmov r1, r9\n" - "\tldr r0, [r1]\n" - "\tldr r2, =0x000032eb\n" - "\tadds r0, r2\n" - "\tadds r0, r5\n" - "\tmovs r1, 0x7\n" - "\tstrb r1, [r0]\n" - "\tmov r1, r9\n" - "\tldr r0, [r1]\n" - "\tadds r0, 0xC4\n" - "\tadds r0, r5\n" - "\tmovs r1, 0x2\n" - "\tstrb r1, [r0]\n" - "\tmov r2, r9\n" - "\tldr r0, [r2]\n" - "\tadds r0, 0xA8\n" - "\tadds r0, r4\n" - "\tmovs r1, 0x3\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r2]\n" - "\tadds r0, 0xB8\n" - "\tadds r0, r5\n" - "\tstrb r4, [r0]\n" - "\tldr r1, [r2]\n" - "\tlsls r0, r4, 4\n" - "\tsubs r0, r4\n" - "\tlsls r0, 2\n" - "\tadds r1, r0\n" - "\tldr r2, =0x000031d0\n" - "\tadds r1, r2\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r1]\n" - "\tmov r2, r9\n" - "\tldr r1, [r2]\n" - "\tlsls r0, r6, 4\n" - "\tsubs r0, r6\n" - "\tlsls r0, 2\n" - "\tadds r1, r0\n" - "\tldr r0, =0x000031d4\n" - "\tadds r1, r0\n" - "\tmovs r2, 0x1\n" - "\tstrb r2, [r1]\n" - "\tmov r0, r9\n" - "\tldr r1, [r0]\n" - "\tlsls r0, r4, 1\n" - "\tadds r1, 0x86\n" - "\tadds r1, r0\n" - "\tldrh r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r1]\n" - "\tmovs r0, 0\n" - "\tadds r1, r5, 0\n" - "\tadds r2, r4, 0\n" - "\tbl sub_8026F1C\n" - "\tmovs r0, 0x1\n" - "\tbl sub_8027234\n" - "\tadds r0, r4, 0\n" - "\tbl sub_8026D1C\n" - "\tmov r1, r9\n" - "\tldr r0, [r1]\n" - "\tadds r1, r0, 0\n" - "\tadds r1, 0xE8\n" - "\tadds r1, r5\n" - "\tldr r2, =0x000032e0\n" - "\tadds r0, r2\n" - "\tadds r0, r5\n" - "\tldrb r0, [r0]\n" - "\tstrb r0, [r1]\n" - "\tmov r4, r9\n" - "\tldr r0, [r4]\n" - "\tadds r0, r2\n" - "\tadds r0, r5\n" - "\tmovs r1, 0x3\n" - "\tstrb r1, [r0]\n" - "\tldr r1, [r4]\n" - "\tadds r1, 0xF4\n" - "\tadd r1, r8\n" - "\tldrb r0, [r1]\n" - "\tmovs r2, 0xFF\n" - "\torrs r0, r2\n" - "\tstrb r0, [r1]\n" - "\tldr r1, [r4]\n" - "\tadds r1, 0xF5\n" - "\tadd r1, r8\n" - "\tldrb r0, [r1]\n" - "\torrs r0, r2\n" - "\tstrb r0, [r1]\n" - "_08026602:\n" - "\tmov r0, r10\n" - "\tadds r0, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tmov r10, r0\n" - "\tldr r4, [sp, 0x4]\n" - "\tcmp r10, r4\n" - "\tbcs _08026614\n" - "\tb _08026450\n" - "_08026614:\n" - "\tadd sp, 0x10\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.pool"); -} -#endif // NONMATCHING -u32 sub_8026634(u8 a0, u8 a1, u8 a2) +static bool32 sub_8026634(u8 a0, u8 a1, u8 a2) { s32 r7 = 0; - u8 r5 = gUnknown_02022C98->unk_0024 - 1; - struct DodrioBerryPickingSubstruct_31A0_14 * ptr = &gUnknown_02022C98->unk_32CC.unk_14; + u8 r5 = gUnknown_02022C98->unk24 - 1; + struct DodrioSubstruct_31A0_14 * ptr = &gUnknown_02022C98->unk32CC.unk14; switch (a1) { @@ -1938,13 +1740,13 @@ u32 sub_8026634(u8 a0, u8 a1, u8 a2) r7 = 2; break; } - if (ptr->unk_B[a2] == 6 || ptr->unk_B[a2] == 7) + if (ptr->unkB[a2] == 6 || ptr->unkB[a2] == 7) { - if (a2 == gUknnown_082F45AF[r7 + a0 * 3 + 15 * r5]) + if (a2 == gUknnown_082F45AF[r5][a0][r7]) { - if (gUnknown_02022C98->unk_00C4[a2] == 1 || gUnknown_02022C98->unk_00C4[a2] == 2) + if (gUnknown_02022C98->unkC4[a2] == 1 || gUnknown_02022C98->unkC4[a2] == 2) { - gUnknown_02022C98->unk_31A0[a0].unk_34 = 1; + gUnknown_02022C98->unk31A0[a0].unk2C.unk8 = 1; return FALSE; } else @@ -1955,401 +1757,3330 @@ u32 sub_8026634(u8 a0, u8 a1, u8 a2) } else { - if (a2 == gUknnown_082F45AF[r7 + a0 * 3 + 15 * r5]) + if (a2 == gUknnown_082F45AF[r5][a0][r7]) { - gUnknown_02022C98->unk_00A8[a0] = 4; - gUnknown_02022C98->unk_31A0[a0].unk_34 = 1; + gUnknown_02022C98->unkA8[a0] = 4; + gUnknown_02022C98->unk31A0[a0].unk2C.unk8 = 1; } } return FALSE; } -#ifdef NONMATCHING -void sub_802671C(void) +static void sub_802671C(void) { - u8 r1 = gUnknown_02022C98->unk_0044; - u8 r9 = gUnknown_02022C98->unk_0048; + u8 r1 = gUnknown_02022C98->unk44; + u8 r9 = gUnknown_02022C98->unk48; + u8 r3 = 0; u8 r10 = 0; u8 i; - u8 r3; u8 r2; - struct DodrioBerryPickingSubstruct_31A0_14 * ptr; + struct DodrioStruct *ptr; - gUnknown_02022C98->unk_0120 = 0; + gUnknown_02022C98->unk120 = 0; for (i = r1; i < r9 - 1; i++) { - ptr = &gUnknown_02022C98->unk_32CC.unk_14; + ptr = gUnknown_02022C98; - if (gUnknown_02022C98->unk_00C4[i] == 0 || gUnknown_02022C98->unk_00C4[i] == 1) + if (gUnknown_02022C98->unkC4[i] == 0 || gUnknown_02022C98->unkC4[i] == 1) { - gUnknown_02022C98->unk_0120 = 1; - if (ptr->unk_B[i] >= 10) + gUnknown_02022C98->unk120 = 1; + if (ptr->unk32CC.unk14.unkB[i] >= 10) { - ptr->unk_B[i] = 10; - gUnknown_02022C98->unk_00C4[i] = 3; - if (gUnknown_02022C98->unk_0148[i] == 0) + ptr->unk32CC.unk14.unkB[i] = 10; + gUnknown_02022C98->unkC4[i] = 3; + if (gUnknown_02022C98->unk148[i] == 0) { - gUnknown_02022C98->unk_0148[i] = 1; - PlaySE(SE_FUUSEN1 + ptr->unk_0[i]); + gUnknown_02022C98->unk148[i] = 1; + PlaySE(SE_FUUSEN1 + ptr->unk32CC.unk14.unk0[i]); } - if (gUnknown_02022C98->unk_0040 < 10 || r10 == 1) + if (gUnknown_02022C98->unk40 < 10 || r10 == 1) { r10 = 1; - gUnknown_02022C98->unk_0148[i] = 0; - if (gUnknown_02022C98->unk_0040 < 10) + gUnknown_02022C98->unk148[i] = 0; + if (gUnknown_02022C98->unk40 < 10) { - gUnknown_02022C98->unk_0040++; + gUnknown_02022C98->unk40++; } sub_8026F1C(3, i, 0); - sub_8027234(0); + sub_8027234(FALSE); } } else { - r3 = gUnknown_02022C98->unk_0090[sub_8026D8C(i)] / 7; - if (r3 < 2) + r3 = gUnknown_02022C98->unk90[sub_8026D8C(i)] / 7; + if (r3 >= 2) { r3 = 2; } - r2 = gUnknown_082F7A88[r3][ptr->unk_0[i]]; - if (++gUnknown_02022C98->unk_00D0[i] >= r2) + r2 = gUnknown_082F7A88[r3][ptr->unk32CC.unk14.unk0[i]]; + if (++gUnknown_02022C98->unkD0[i] >= r2) { - ptr->unk_B[i]++; - gUnknown_02022C98->unk_00D0[i] = 0; + ptr->unk32CC.unk14.unkB[i]++; + gUnknown_02022C98->unkD0[i] = 0; } sub_8026324(); } } - else if (gUnknown_02022C98->unk_00C4[i] == 2) + else if (gUnknown_02022C98->unkC4[i] == 2) { - gUnknown_02022C98->unk_0120 = 1; - if (++gUnknown_02022C98->unk_00DC[i] >= 20) + gUnknown_02022C98->unk120 = 1; + if (++gUnknown_02022C98->unkDC[i] >= 20) { - gUnknown_02022C98->unk_31A0[gUnknown_02022C98->unk_00B8[i]].unk_30 = 0; - gUnknown_02022C98->unk_00DC[i] = 0; - gUnknown_02022C98->unk_00D0[i] = 0; - gUnknown_02022C98->unk_00C4[i] = 0; - ptr->unk_B[i] = 1; - ptr->unk_0[i] = sub_8026DB0(sub_8026D8C(i), i); + gUnknown_02022C98->unk31A0[gUnknown_02022C98->unkB8[i]].unk2C.unk4 = 0; + gUnknown_02022C98->unkDC[i] = 0; + gUnknown_02022C98->unkD0[i] = 0; + gUnknown_02022C98->unkC4[i] = 0; + ptr->unk32CC.unk14.unkB[i] = 1; + ptr->unk32CC.unk14.unk0[i] = sub_8026DB0(sub_8026D8C(i), i); } } - else if (gUnknown_02022C98->unk_00C4[i] == 3) + else if (gUnknown_02022C98->unkC4[i] == 3) { - if (++gUnknown_02022C98->unk_00DC[i] >= 20) + if (++gUnknown_02022C98->unkDC[i] >= 20) { - if (gUnknown_02022C98->unk_0040 < 10) + if (gUnknown_02022C98->unk40 < 10) { - gUnknown_02022C98->unk_00DC[i] = 0; - gUnknown_02022C98->unk_00D0[i] = 0; - gUnknown_02022C98->unk_00C4[i] = 0; - ptr->unk_B[i] = 1; - gUnknown_02022C98->unk_00E8[i] = ptr->unk_0[i]; - ptr->unk_0[i] = sub_8026DB0(sub_8026D8C(i), i); + gUnknown_02022C98->unkDC[i] = 0; + gUnknown_02022C98->unkD0[i] = 0; + gUnknown_02022C98->unkC4[i] = 0; + ptr->unk32CC.unk14.unkB[i] = 1; + gUnknown_02022C98->unkE8[i] = ptr->unk32CC.unk14.unk0[i]; + ptr->unk32CC.unk14.unk0[i] = sub_8026DB0(sub_8026D8C(i), i); } } } } } + +static void sub_8026988(void) +{ + u8 i, first, count; + + first = gUnknown_02022C98->unk44; + count = gUnknown_02022C98->unk48; + for (i = first; i < count; i++) + { + struct DodrioSubstruct_31A0 *ptr = &gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId]; + u8 var = gUnknown_082F449C[gUnknown_02022C98->unk24 - 1][gUnknown_02022C98->multiplayerId][i]; + + if (ptr->unk14.unkB[var] != 0) + sub_8028BF8(i, FALSE); + else + sub_8028BF8(i, TRUE); + + if (ptr->unk14.unkB[var] > 9) + { + sub_8028CA4(i, ptr->unk14.unk0[var] + 3); + sub_8028C7C(i, ptr->unk14.unkB[var] * 2 - 1); + } + else if (ptr->unk14.unk0[var] == 3) + { + ptr->unk14.unkB[var] = 7; + sub_8028CA4(i, 6); + sub_8028C7C(i, ptr->unk14.unkB[var] * 2 - 1); + } + else + { + sub_8028CA4(i, ptr->unk14.unk0[var]); + sub_8028C7C(i, ptr->unk14.unkB[var] * 2); + } + } +} + +static void sub_8026A88(void) +{ + u8 i, count; + + count = gUnknown_02022C98->unk24; + for (i = 0; i < count; i++) + { + struct DodrioSubstruct_31A0 *ptr = &gUnknown_02022C98->unk31A0[i]; + sub_80286B4(i, ptr->unk2C.unk0); + } +} + +static void sub_8026AC8(void) +{ + u8 i, count; + + count = gUnknown_02022C98->unk24; + for (i = 0; i < count; i++) + sub_80286B4(i, 4); +} + +static void sub_8026AF4(void) +{ + sub_8026988(); + if (gUnknown_02022C98->unk40 > 9) + sub_8026AC8(); + else + sub_8026A88(); + + sub_80288D4(gUnknown_02022C98->unk40); +} + +// This function is literally the same as the one above...Why? +static void sub_8026B28(void) +{ + sub_8026988(); + if (gUnknown_02022C98->unk40 > 9) + sub_8026AC8(); + else + sub_8026A88(); + + sub_80288D4(gUnknown_02022C98->unk40); +} + +static void sub_8026B5C(u8 arg0, u8 *arg1, u8 *arg2) +{ + switch (arg0) + { + case 1: + *arg1 = 4, *arg2 = 7; + break; + case 2: + *arg1 = 3, *arg2 = 8; + break; + case 3: + *arg1 = 2, *arg2 = 9; + break; + case 4: + *arg1 = 1, *arg2 = 10; + break; + case 5: + *arg1 = 0, *arg2 = 11; + break; + } +} + +static bool32 sub_8026BB8(void) +{ + u8 i, count; + + count = gUnknown_02022C98->unk24; + for (i = 1; i < count; i++) + { + if (gUnknown_02022C98->unk158[i] == 0) + gUnknown_02022C98->unk158[i] = sub_8027DFC(i); + } + + // This loop won't ever run, the seemingly poitnless assingment below is to make the compiler + // generate code for it. + count = count; + for (; i < count; i++) + { + if (gUnknown_02022C98->unk158[i] == 0) + return FALSE; + } + + return TRUE; +} + +static void sub_8026C28(void) +{ + u8 i; + + for (i = 0; i < 5; i++) + gUnknown_02022C98->unk158[i] = 0; +} + +static bool32 sub_8026C50(void) +{ + if (gUnknown_02022C98->unk40 > 9 && gUnknown_02022C98->unk120 == 0) + { + gUnknown_02022C98->unk40 = 10; + if (gUnknown_02022C98->unk12C != 0) + return TRUE; + } + + return FALSE; +} + +static bool32 sub_8026C90(void) +{ + u8 i, first, count; + + if (gUnknown_02022C98->unk40 > 9) + { + first = gUnknown_02022C98->unk44; + count = gUnknown_02022C98->unk48; + gUnknown_02022C98->unk40 = 10; + if (gUnknown_02022C98->unk12C != 0) + { + for (i = first; i < count; i++) + { + struct DodrioSubstruct_31A0 *ptr = &gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId]; + u8 var = gUnknown_082F449C[gUnknown_02022C98->unk24 - 1][gUnknown_02022C98->multiplayerId][i]; + + if (ptr->unk14.unkB[var] != 10) + return FALSE; + } + return TRUE; + } + } + + return FALSE; +} + +static void sub_8026D1C(u8 arg0) +{ + u8 var = gUnknown_082F7A9C[gUnknown_02022C98->unk90[arg0] % 7] + (gUnknown_02022C98->unk90[arg0] / 7) * 100; + if (gUnknown_02022C98->unk86[arg0] >= var) + gUnknown_02022C98->unk90[arg0]++; +} + +static u8 sub_8026D8C(u8 arg0) +{ + return gUnknown_082F4648[gUnknown_02022C98->unk24 - 1][arg0]; +} + +static u8 sub_8026DB0(u8 arg0, u8 arg1) +{ + u8 i, var3; + u8 count = gUnknown_02022C98->unk24 - 1; + u8 var0 = gUnknown_082F45FA[count][arg0][0]; + u8 var1 = gUnknown_082F45FA[count][arg0][1]; + u8 var2 = gUnknown_082F45FA[count][arg0][2]; + + for (i = 0; gUnknown_082F467F[count][i] != 0; i++) + { + if (arg1 == gUnknown_082F467F[count][i]) + return sub_8026E70(gUnknown_02022C98->unk90[var1], arg1); + } + + // Gets the highest of the three. + if (gUnknown_02022C98->unk90[var0] > gUnknown_02022C98->unk90[var1]) + var3 = gUnknown_02022C98->unk90[var0]; + else + var3 = gUnknown_02022C98->unk90[var1]; + + if (gUnknown_02022C98->unk90[var2] > var3) + var3 = gUnknown_02022C98->unk90[var2]; + + return sub_8026E70(var3, arg1); +} + +static u8 sub_8026E70(u8 arg0, u8 arg1) +{ + u8 var = gUnknown_02022C98->unkE8[arg1]; + switch (arg0 % 7) + { + default: return 0; + case 0: return 0; + case 1: return 1; + case 2: return 2; + case 3: + if (var == 0) + return 1; + else + return 0; + case 4: + if (var == 0) + return 2; + else + return 0; + case 5: + if (var == 2) + return 1; + else + return 2; + case 6: + if (var == 0) + return 1; + else if (var == 1) + return 2; + else + return 0; + } +} + +static bool32 sub_8026EEC(u16 arg0[5][6]) +{ + int sum, i; + for (sum = 0, i = 0; i < GetLinkPlayerCount(); sum += arg0[i][3], i++) + ; + + if (sum >= 11) + return TRUE; + else + return FALSE; +} + +static void sub_8026F1C(u8 arg0, u8 arg1, u8 arg2) +{ + u8 var; + u8 count = gUnknown_02022C98->unk24; + switch (arg0) + { + case 0: + case 1: + case 2: + var = gUnknown_02022C98->unk31A0[0].unk14.unk0[arg1]; + gUnknown_02022C98->unk4A[arg2][var] = IncrementWithLimit(gUnknown_02022C98->unk4A[arg2][var], 20000); + break; + case 3: + if (sub_8026EEC(gUnknown_02022C98->unk4A)) + break; + switch (count) + { + case 5: + switch (arg1) + { + case 0: + gUnknown_02022C98->unk4A[2][3]++; + gUnknown_02022C98->unk4A[3][3]++; + break; + case 1: + gUnknown_02022C98->unk4A[3][3]++; + break; + case 2: + gUnknown_02022C98->unk4A[3][3]++; + gUnknown_02022C98->unk4A[4][3]++; + break; + case 3: + gUnknown_02022C98->unk4A[4][3]++; + break; + case 4: + gUnknown_02022C98->unk4A[4][3]++; + gUnknown_02022C98->unk4A[0][3]++; + break; + case 5: + gUnknown_02022C98->unk4A[0][3]++; + break; + case 6: + gUnknown_02022C98->unk4A[0][3]++; + gUnknown_02022C98->unk4A[1][3]++; + break; + case 7: + gUnknown_02022C98->unk4A[1][3]++; + break; + case 8: + gUnknown_02022C98->unk4A[1][3]++; + gUnknown_02022C98->unk4A[2][3]++; + break; + case 9: + gUnknown_02022C98->unk4A[2][3]++; + break; + } + break; + case 4: + switch (arg1) + { + case 1: + gUnknown_02022C98->unk4A[2][3]++; + gUnknown_02022C98->unk4A[3][3]++; + break; + case 2: + gUnknown_02022C98->unk4A[3][3]++; + break; + case 3: + gUnknown_02022C98->unk4A[3][3]++; + gUnknown_02022C98->unk4A[0][3]++; + break; + case 4: + gUnknown_02022C98->unk4A[0][3]++; + break; + case 5: + gUnknown_02022C98->unk4A[0][3]++; + gUnknown_02022C98->unk4A[1][3]++; + break; + case 6: + gUnknown_02022C98->unk4A[1][3]++; + break; + case 7: + gUnknown_02022C98->unk4A[1][3]++; + gUnknown_02022C98->unk4A[2][3]++; + break; + case 8: + gUnknown_02022C98->unk4A[2][3]++; + break; + } + break; + case 3: + switch (arg1) + { + case 2: + gUnknown_02022C98->unk4A[1][3]++; + gUnknown_02022C98->unk4A[2][3]++; + break; + case 3: + gUnknown_02022C98->unk4A[2][3]++; + break; + case 4: + gUnknown_02022C98->unk4A[2][3]++; + gUnknown_02022C98->unk4A[0][3]++; + break; + case 5: + gUnknown_02022C98->unk4A[0][3]++; + break; + case 6: + gUnknown_02022C98->unk4A[0][3]++; + gUnknown_02022C98->unk4A[1][3]++; + break; + case 7: + gUnknown_02022C98->unk4A[1][3]++; + break; + } + break; + case 2: + switch (arg1) + { + case 3: + gUnknown_02022C98->unk4A[0][3]++; + gUnknown_02022C98->unk4A[1][3]++; + break; + case 4: + gUnknown_02022C98->unk4A[0][3]++; + break; + case 5: + gUnknown_02022C98->unk4A[0][3]++; + gUnknown_02022C98->unk4A[1][3]++; + break; + case 6: + gUnknown_02022C98->unk4A[1][3]++; + break; + } + break; + } + break; + } +} + +static void sub_8027234(bool32 arg0) +{ + if (gUnknown_02022C98->unk24 != 5) + return; + + if (arg0 == TRUE) + { + if (++gUnknown_02022C98->unk112 > gUnknown_02022C98->unk114) + gUnknown_02022C98->unk114 = gUnknown_02022C98->unk112; + if (gUnknown_02022C98->unk112 > 9999) + gUnknown_02022C98->unk112 = 9999; + } + else + { + if (gUnknown_02022C98->unk112 > gUnknown_02022C98->unk114) + gUnknown_02022C98->unk114 = gUnknown_02022C98->unk112; + gUnknown_02022C98->unk112 = 0; + } +} + +static void sub_80272A4(void) +{ + u8 i; + for (i = 0; i < gUnknown_02022C98->unk24; i++) + gUnknown_02022C98->unk4A[i][5] = gUnknown_02022C98->unk114; +} + +static void sub_80272E8(void) +{ + u8 i, j; + + for (i = 0; i < 5; i++) + { + for (j = 0; j < 11; j++) + gUnknown_02022C98->unk31A0[i].unk14.unkB[j] = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk0 = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk4 = 0; + gUnknown_02022C98->unk90[i] = 0; + gUnknown_02022C98->unk86[i] = 0; + gUnknown_02022C98->unk3308[i].unk0 = 0; + gUnknown_02022C98->unk3308[i].unk4 = 0; + gUnknown_02022C98->unk4A[i][0] = 0; + gUnknown_02022C98->unk4A[i][1] = 0; + gUnknown_02022C98->unk4A[i][2] = 0; + gUnknown_02022C98->unk4A[i][3] = 0; + gUnknown_02022C98->unk4A[i][4] = 0; + gUnknown_02022C98->unk4A[i][5] = 0; + } + gUnknown_02022C98->unk154 = 0; + gUnknown_02022C98->unk112 = 0; + gUnknown_02022C98->unk40 = 0; + sub_8026A88(); + sub_8026988(); +} + +static const s16 gUnknown_082F7B24[] = {10, 30, 50, 50}; + +static void sub_80273F0(void) +{ + u8 i, var = 0, var2 = 0; + + switch (gUnknown_02022C98->unk24) + { + case 4: var = 1; break; + case 5: var = 2; break; + } + + var2 = Random() % 10; + for (i = 0; i < 5; i++) + gUnknown_02022C98->unk4A[i][4] = gUnknown_082F7AA4[var][var2]; +} + +static u32 sub_802745C(u8 arg0) +{ + u32 sum = gUnknown_02022C98->unk4A[arg0][0] + + gUnknown_02022C98->unk4A[arg0][1] + + gUnknown_02022C98->unk4A[arg0][2]; + return min(sum, 9999); +} + +static void sub_802749C(void) +{ + u32 berriesPicked = Min(sub_802745C(gUnknown_02022C98->multiplayerId), 9999); + u32 score = Min(sub_80276C0(gUnknown_02022C98->multiplayerId), 999990); + + if (gSaveBlock2Ptr->berryPick.bestScore < score) + gSaveBlock2Ptr->berryPick.bestScore = score; + if (gSaveBlock2Ptr->berryPick.berriesPicked < berriesPicked) + gSaveBlock2Ptr->berryPick.berriesPicked = berriesPicked; + if (gSaveBlock2Ptr->berryPick.berriesPickedInRow < gUnknown_02022C98->unk114) + gSaveBlock2Ptr->berryPick.berriesPickedInRow = gUnknown_02022C98->unk114; +} + +static u8 sub_8027518(u8 arg0) +{ + u8 i, saved; + + saved = gUnknown_02022C98->unk98[3]; + for (i = 3; i != 0; i--) + gUnknown_02022C98->unk98[i] = gUnknown_02022C98->unk98[i - 1]; + gUnknown_02022C98->unk98[0] = arg0; + return saved; +} + +static void sub_8027554(void) +{ + if (gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] == 0) + { + if (gMain.newKeys & DPAD_UP) + { + gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 2; + gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6; + PlaySE(SE_W204); + } + else if (gMain.newKeys & DPAD_LEFT) + { + gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 3; + gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6; + PlaySE(SE_W204); + } + else if (gMain.newKeys & DPAD_RIGHT) + { + gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 1; + gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6; + PlaySE(SE_W204); + } + else + { + gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 0; + } + } + else + { + gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId]--; + } +} + +static void sub_8027608(void) +{ + gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 0; +} + +static u16 sub_802762C(void) +{ + return gUnknown_02022C98->unk4A[gUnknown_02022C98->multiplayerId][4] + FIRST_BERRY_INDEX; +} + +static u8 sub_8027650(void) +{ + return gUnknown_02022C98->unk24; +} + +static u8 *sub_8027660(u8 id) +{ + if (gReceivedRemoteLinkPlayers) + return gLinkPlayers[id].name; + else + return gUnknown_02022C98->unk31A0[id].name; +} + +static u16 sub_80276A0(u8 arg0, u8 arg1) +{ + return gUnknown_02022C98->unk4A[arg0][arg1]; +} + +static u32 sub_80276C0(u8 arg0) +{ + u8 i; + u32 var, sum = 0; + + for (i = 0; i < 3; i++) + sum += gUnknown_02022C98->unk4A[arg0][i] * gUnknown_082F7B24[i]; + + var = gUnknown_02022C98->unk4A[arg0][3] * gUnknown_082F7B24[3]; + if (sum <= var) + return 0; + else + return sum - var; +} + +static u32 sub_8027748(void) +{ + u8 i, count = gUnknown_02022C98->unk24; + u32 maxVar = sub_80276C0(0); + + for (i = 1; i < count; i++) + { + u32 var = sub_80276C0(i); + if (var > maxVar) + maxVar = var; + } + return Min(maxVar, 999990); +} + +static u32 sub_802778C(u8 arg0) +{ + u8 i, count = gUnknown_02022C98->unk24; + u16 maxVar = gUnknown_02022C98->unk4A[0][arg0]; + + for (i = 0; i < count; i++) + { + u16 var = gUnknown_02022C98->unk4A[i][arg0]; + if (var > maxVar) + maxVar = var; + } + return maxVar; +} + +static u32 sub_80277D0(u8 arg0) +{ + u32 vals[5], temp; + s16 r6 = TRUE; + u8 i, count = gUnknown_02022C98->unk24; + + for (i = 0; i < count; i++) + vals[i] = temp = sub_80276C0(i); + + while (r6) + { + r6 = FALSE; + for (i = 0; i < count - 1; i++) + { + if (vals[i] < vals[i + 1]) + { + SWAP(vals[i], vals[i + 1], temp); + r6 = TRUE; + } + } + } + + return vals[arg0]; +} + +static u32 sub_802784C(void) +{ + u8 i, r10 = 0, r8 = 0, r9 = 0, count = gUnknown_02022C98->unk24; + + // Function called two times for some reason. + sub_8027748(); + if (sub_8027748() == 0) + { + for (i = 0; i < count; i++) + { + gUnknown_02022C98->unk3308[i].unk0 = 4; + gUnknown_02022C98->unk3308[i].unk4 = 0; + } + } + + for (i = 0; i < count; i++) + gUnknown_02022C98->unk3308[i].unk4 = Min(sub_80276C0(i), 999990); + + do + { + u32 r6 = sub_80277D0(r10); + u8 r3 = r8; + for (i = 0; i < count; i++) + { + if (r6 == gUnknown_02022C98->unk3308[i].unk4) + { + gUnknown_02022C98->unk3308[i].unk0 = r3; + r8++; + r9++; + } + } + r10 = r8; + } while (r9 < count); + + return 0; +} + +static void sub_802793C(struct DodrioSubstruct_3308 *dst, u8 id) +{ + *dst = gUnknown_02022C98->unk3308[id]; +} + +// Unused function +static u8 sub_802795C(u8 arg0) +{ + u8 i, ret = 0, count = gUnknown_02022C98->unk24; + u32 var, vars[5] = {0}; + + for (i = 0; i < count; i++) + vars[i] = sub_80276C0(i); + + var = vars[arg0]; + for (i = 0; i < 5; i++) + { + if (i != arg0 && var < vars[i]) + ret++; + } + + return ret; +} + +static u8 sub_80279C8(void) +{ + u8 multiplayerId = gUnknown_02022C98->multiplayerId; + u16 itemId = sub_802762C(); + + if (sub_80276C0(multiplayerId) != sub_8027748()) + return 3; + if (!CheckBagHasSpace(itemId, 1)) + return 2; + + AddBagItem(itemId, 1); + if (!CheckBagHasSpace(itemId, 1)) + return 1; + return 0; +} + +// Really? What next, u32 Add(u32 a)return a+1;? +static u32 IncrementWithLimit(u32 a, u32 max) +{ + if (a < max) + return a + 1; + else + return max; +} + +// Gamefreak pls, min(a, b) ((a) < (b) ? (a) : (b)) is a well-known macro +static u32 Min(u32 a, u32 b) +{ + if (a < b) + return a; + else + return b; +} + +static u8 sub_8027A48(u8 id) +{ + return gUnknown_02022C98->unk34[id]; +} + +void sub_8027A5C(void) +{ + int i; + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_DODRIO) + { + gSpecialVar_Result = 1; + return; + } + } + + gSpecialVar_Result = 0; +} + +void sub_8027AAC(void) +{ + u8 taskId = CreateTask(sub_8027ACC, 0); + sub_8027ACC(taskId); +} + +// Data related to printing saved results. +static const struct WindowTemplate gUnknown_082F7B2C = +{ + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 1, + .width = 20, + .height = 11, + .paletteNum = 15, + .baseBlock = 0x1, +}; + +static const u8 *const gUnknown_082F7B34[3] = {gText_BerriesPicked, gText_BestScore, gText_BerriesInRowFivePlayers}; +static const u8 gUnknown_082F7B40[] = {4, 7, 4}; + +ALIGNED(4) +static const u8 gUnknown_082F7B44[][2] = {{25}, {41}, {57}}; +static const u8 gUnknown_082F7B4A[][2] = {{25}, {41}, {73}}; + +static void sub_8027ACC(u8 taskId) +{ + struct WindowTemplate window; + s32 i, width, widthCurr; + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + window = gUnknown_082F7B2C; + width = GetStringWidth(1, gText_BerryPickingRecords, 0); + for (i = 0; i < ARRAY_COUNT(gUnknown_082F7B34); i++) + { + widthCurr = GetStringWidth(1, gUnknown_082F7B34[i], 0) + 50; + if (widthCurr > width) + width = widthCurr; + } + width = (width + 7) / 8; + if (width & 1) + width++; + window.tilemapLeft = (30 - width) / 2; + window.width = width; + data[1] = AddWindow(&window); + sub_8027BEC(data[1], width); + CopyWindowToVram(data[1], 3); + data[0]++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + data[0]++; + break; + case 2: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + rbox_fill_rectangle(data[1]); + CopyWindowToVram(data[1], 1); + data[0]++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + RemoveWindow(data[1]); + DestroyTask(taskId); + EnableBothScriptContexts(); + } + break; + } +} + +static void sub_8027BEC(u8 windowId, s32 width) +{ + s32 i, x, numWidth; + s32 results[3]; + results[0] = gSaveBlock2Ptr->berryPick.berriesPicked; + results[1] = gSaveBlock2Ptr->berryPick.bestScore; + results[2] = gSaveBlock2Ptr->berryPick.berriesPickedInRow; + + LoadUserWindowBorderGfx_(windowId, 0x21D, 0xD0); + DrawTextBorderOuter(windowId, 0x21D, 0xD); + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + AddTextPrinterParameterized(windowId, 1, gText_BerryPickingRecords, GetStringCenterAlignXOffset(1, gText_BerryPickingRecords, width * 8), 1, TEXT_SPEED_FF, NULL); + for (i = 0; i < 3; i++) + { + ConvertIntToDecimalStringN(gStringVar1, results[i], STR_CONV_MODE_LEFT_ALIGN, gUnknown_082F7B40[i]); + numWidth = GetStringWidth(1, gStringVar1, -1); + AddTextPrinterParameterized(windowId, 1, gUnknown_082F7B34[i], 0, gUnknown_082F7B44[i][0], TEXT_SPEED_FF, NULL); + x = (width * 8) - numWidth; + AddTextPrinterParameterized(windowId, 1, gStringVar1, x, gUnknown_082F7B4A[i][0], TEXT_SPEED_FF, NULL); + } + PutWindowTilemap(windowId); +} + +// Debug functions? +static const u16 gUnknown_082F7B50[][4] = +{ + {9999, 0, 90, 9999}, + {9999, 9999, 70, 9999}, + {9999, 0, 9999, 0}, + {9999, 9999, 60, 0}, + {9999, 9999, 9999, 0}, +}; + +static const u8 gUnknown_082F7B78[] = _("あいうえおかき"); +static const u8 gUnknown_082F7B80[] = _("ABCDEFG"); +static const u8 gUnknown_082F7B88[] = _("0123456"); + +static const u8 *const gUnknown_082F7B90[] = +{ + gUnknown_082F7B78, + gUnknown_082F7B78, + gUnknown_082F7B78, + gUnknown_082F7B80, + gUnknown_082F7B88 +}; + +static void sub_8027D20(void) +{ + gUnknown_02022C98->unk24 = GetLinkPlayerCount(); +} + +static void sub_8027D38(void) +{ + u8 i, playerId; + + for (playerId = gUnknown_02022C98->unk24; playerId < 5; playerId++) + StringCopy(gLinkPlayers[playerId].name, gUnknown_082F7B90[playerId]); + + gUnknown_02022C98->unk24 = 5; + for (i = 0; i < 4; i++) + { + for (playerId = 0; playerId < gUnknown_02022C98->unk24; playerId++) + gUnknown_02022C98->unk4A[playerId][i] = gUnknown_082F7B50[playerId][i]; + } +} + +struct UnkPacket1 +{ + u8 id; + u8 ALIGNED(4) unk4; +}; + +static void sub_8027DD0(u32 arg0) +{ + struct UnkPacket1 packet; + packet.id = 1; + packet.unk4 = arg0; + sub_800FE50(&packet); +} + +static u32 sub_8027DFC(u32 arg0) +{ + struct UnkPacket1 *packet; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return 0; + + packet = (void *)&gRecvCmds[arg0][1]; + if (packet->id == 1) + return packet->unk4; + + return 0; +} + +struct UnkPacket2 +{ + u8 id; + u8 unk1_0:4; + u8 unk1_1:4; + u8 unk2_0:4; + u8 unk2_1:4; + u8 unk3_0:4; + u8 unk3_1:4; + u8 unk4_0:4; + u8 unk4_1:4; + u8 unk5_0:4; + u8 unk5_1:4; + u8 unk6_0:2; + u8 unk6_1:2; + u8 unk6_2:2; + u8 unk6_3:2; + u8 unk7_0:2; + u8 unk7_1:2; + u8 unk7_2:2; + u8 unk7_3:2; + u8 unk8_0:2; + u8 unk8_1:2; + u8 unk8_2:2; + u8 unk8_3:2; + u8 unk9_0:2; + u8 unk9_1:2; + u8 unk9_2:2; + u8 unk9_3:1; + u8 unk9_4:1; + u8 unkA_0:1; + u8 unkA_1:1; + u8 unkA_2:1; + u8 unkA_3:5; + u8 unkB_0:1; + u8 unkB_1:1; + u8 unkB_2:1; + u8 unkB_3:1; + u8 unkB_4:1; + u8 unkB_5:1; + u8 unkB_6:1; +}; + +#ifdef NONMATCHING +static void sub_8027E30(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8) +{ + struct UnkPacket2 packet; + struct DodrioSubstruct_31A0_14 *ptr = &arg0->unk14; + + packet.id = 2; + packet.unk1_0 = ptr->unkB[0]; + packet.unk1_1 = ptr->unkB[1]; + packet.unk2_0 = ptr->unkB[2]; + packet.unk2_1 = ptr->unkB[3]; + packet.unk3_0 = ptr->unkB[4]; + packet.unk3_1 = ptr->unkB[5]; + packet.unk4_0 = ptr->unkB[6]; + packet.unk4_1 = ptr->unkB[7]; + packet.unk5_0 = ptr->unkB[8]; + packet.unk5_1 = ptr->unkB[9]; + + packet.unk6_0 = ptr->unk0[0]; + packet.unk6_1 = ptr->unk0[1]; + packet.unk6_2 = ptr->unk0[2]; + packet.unk6_3 = ptr->unk0[3]; + packet.unk7_0 = ptr->unk0[4]; + packet.unk7_1 = ptr->unk0[5]; + packet.unk7_2 = ptr->unk0[6]; + packet.unk7_3 = ptr->unk0[7]; + packet.unk8_0 = ptr->unk0[8]; + packet.unk8_1 = ptr->unk0[9]; + + packet.unk8_2 = arg1->unk0; + packet.unk8_3 = arg2->unk0; + packet.unk9_0 = arg3->unk0; + packet.unk9_1 = arg4->unk0; + packet.unk9_2 = arg5->unk0; + + packet.unk9_3 = arg1->unk4; + packet.unk9_4 = arg2->unk4; + packet.unkA_0 = arg3->unk4; + packet.unkA_1 = arg4->unk4; + packet.unkA_2 = arg5->unk4; + + packet.unkB_2 = arg1->unk8; + packet.unkB_3 = arg2->unk8; + packet.unkB_4 = arg3->unk8; + packet.unkB_5 = arg4->unk8; + packet.unkB_6 = arg5->unk8; + + packet.unkA_3 = arg6; + packet.unkB_1 = arg7; + packet.unkB_0 = arg8; + sub_800FE50(&packet); +} #else NAKED -void sub_802671C(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tldr r2, =gUnknown_02022C98\n" - "\tldr r4, [r2]\n" - "\tadds r0, r4, 0\n" - "\tadds r0, 0x44\n" - "\tldrb r1, [r0]\n" - "\tadds r0, 0x4\n" - "\tldrb r0, [r0]\n" - "\tmov r9, r0\n" - "\tmovs r3, 0\n" - "\tmov r10, r3\n" - "\tmovs r5, 0x90\n" - "\tlsls r5, 1\n" - "\tadds r0, r4, r5\n" - "\tstr r3, [r0]\n" - "\tadds r5, r1, 0\n" - "\tmov r0, r9\n" - "\tsubs r0, 0x1\n" - "\tcmp r5, r0\n" - "\tblt _0802674E\n" - "\tb _08026974\n" - "_0802674E:\n" - "\tmov r8, r2\n" - "_08026750:\n" - "\tmov r0, r8\n" - "\tldr r4, [r0]\n" - "\tadds r0, r4, 0\n" - "\tadds r0, 0xC4\n" - "\tadds r0, r5\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0x1\n" - "\tbls _08026762\n" - "\tb _0802686C\n" - "_08026762:\n" - "\tmovs r1, 0x90\n" - "\tlsls r1, 1\n" - "\tadds r0, r4, r1\n" - "\tmovs r2, 0x1\n" - "\tstr r2, [r0]\n" - "\tldr r1, =0x000032eb\n" - "\tadds r0, r4, r1\n" - "\tadds r6, r0, r5\n" - "\tldrb r0, [r6]\n" - "\tcmp r0, 0x9\n" - "\tbls _080267FC\n" - "\tmovs r7, 0\n" - "\tmovs r0, 0xA\n" - "\tstrb r0, [r6]\n" - "\tmov r1, r8\n" - "\tldr r0, [r1]\n" - "\tadds r0, 0xC4\n" - "\tadds r0, r5\n" - "\tmovs r1, 0x3\n" - "\tstrb r1, [r0]\n" - "\tmov r1, r8\n" - "\tldr r0, [r1]\n" - "\tmovs r6, 0xA4\n" - "\tlsls r6, 1\n" - "\tadds r0, r6\n" - "\tadds r1, r0, r5\n" - "\tldrb r0, [r1]\n" - "\tcmp r0, 0\n" - "\tbne _080267AC\n" - "\tstrb r2, [r1]\n" - "\tldr r2, =0x000032e0\n" - "\tadds r0, r4, r2\n" - "\tadds r0, r5\n" - "\tldrb r0, [r0]\n" - "\tadds r0, 0x4A\n" - "\tbl PlaySE\n" - "_080267AC:\n" - "\tmov r0, r8\n" - "\tldr r1, [r0]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0x40\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0x9\n" - "\tbls _080267C2\n" - "\tmov r2, r10\n" - "\tcmp r2, 0x1\n" - "\tbeq _080267C2\n" - "\tb _08026964\n" - "_080267C2:\n" - "\tmovs r0, 0x1\n" - "\tmov r10, r0\n" - "\tadds r0, r1, r6\n" - "\tadds r0, r5\n" - "\tstrb r7, [r0]\n" - "\tmov r1, r8\n" - "\tldr r0, [r1]\n" - "\tadds r1, r0, 0\n" - "\tadds r1, 0x40\n" - "\tldrb r0, [r1]\n" - "\tcmp r0, 0x9\n" - "\tbhi _080267DE\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r1]\n" - "_080267DE:\n" - "\tmovs r0, 0x3\n" - "\tadds r1, r5, 0\n" - "\tmovs r2, 0\n" - "\tbl sub_8026F1C\n" - "\tmovs r0, 0\n" - "\tbl sub_8027234\n" - "\tb _08026964\n" - "\t.pool\n" - "_080267FC:\n" - "\tadds r0, r5, 0\n" - "\tbl sub_8026D8C\n" - "\tmov r2, r8\n" - "\tldr r7, [r2]\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tadds r1, r7, 0\n" - "\tadds r1, 0x90\n" - "\tadds r1, r0\n" - "\tldrb r0, [r1]\n" - "\tmovs r1, 0x7\n" - "\tbl __udivsi3\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x1\n" - "\tbls _08026822\n" - "\tmovs r3, 0x2\n" - "_08026822:\n" - "\tldr r2, =gUnknown_082F7A88\n" - "\tldr r0, =0x000032e0\n" - "\tadds r1, r4, r0\n" - "\tadds r1, r5\n" - "\tlsls r0, r3, 1\n" - "\tadds r0, r3\n" - "\tldrb r1, [r1]\n" - "\tadds r0, r1\n" - "\tadds r0, r2\n" - "\tldrb r2, [r0]\n" - "\tadds r1, r7, 0\n" - "\tadds r1, 0xD0\n" - "\tadds r1, r5\n" - "\tldrb r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tmovs r3, 0\n" - "\tstrb r0, [r1]\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, r2\n" - "\tbcc _0802685C\n" - "\tldrb r0, [r6]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r6]\n" - "\tmov r1, r8\n" - "\tldr r0, [r1]\n" - "\tadds r0, 0xD0\n" - "\tadds r0, r5\n" - "\tstrb r3, [r0]\n" - "_0802685C:\n" - "\tbl sub_8026324\n" - "\tb _08026964\n" - "\t.pool\n" - "_0802686C:\n" - "\tcmp r0, 0x2\n" - "\tbne _080268F4\n" - "\tmovs r2, 0x90\n" - "\tlsls r2, 1\n" - "\tadds r0, r4, r2\n" - "\tmovs r6, 0x1\n" - "\tstr r6, [r0]\n" - "\tadds r1, r4, 0\n" - "\tadds r1, 0xDC\n" - "\tadds r1, r5\n" - "\tldrb r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tmovs r3, 0\n" - "\tstrb r0, [r1]\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x13\n" - "\tbls _08026964\n" - "\tmov r0, r8\n" - "\tldr r2, [r0]\n" - "\tadds r0, r2, 0\n" - "\tadds r0, 0xB8\n" - "\tadds r0, r5\n" - "\tldrb r1, [r0]\n" - "\tlsls r0, r1, 4\n" - "\tsubs r0, r1\n" - "\tlsls r0, 2\n" - "\tadds r2, r0\n" - "\tldr r1, =0x000031d0\n" - "\tadds r2, r1\n" - "\tstrb r3, [r2]\n" - "\tmov r2, r8\n" - "\tldr r0, [r2]\n" - "\tadds r0, 0xDC\n" - "\tadds r0, r5\n" - "\tstrb r3, [r0]\n" - "\tldr r0, [r2]\n" - "\tadds r0, 0xD0\n" - "\tadds r0, r5\n" - "\tstrb r3, [r0]\n" - "\tldr r0, [r2]\n" - "\tadds r0, 0xC4\n" - "\tadds r0, r5\n" - "\tstrb r3, [r0]\n" - "\tldr r1, =0x000032eb\n" - "\tadds r0, r4, r1\n" - "\tadds r0, r5\n" - "\tstrb r6, [r0]\n" - "\tadds r0, r5, 0\n" - "\tbl sub_8026D8C\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tadds r1, r5, 0\n" - "\tbl sub_8026DB0\n" - "\tldr r2, =0x000032e0\n" - "\tadds r1, r4, r2\n" - "\tadds r1, r5\n" - "\tstrb r0, [r1]\n" - "\tb _08026964\n" - "\t.pool\n" - "_080268F4:\n" - "\tcmp r0, 0x3\n" - "\tbne _08026964\n" - "\tadds r1, r4, 0\n" - "\tadds r1, 0xDC\n" - "\tadds r1, r5\n" - "\tldrb r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tmovs r2, 0\n" - "\tstrb r0, [r1]\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x13\n" - "\tbls _08026964\n" - "\tmov r0, r8\n" - "\tldr r1, [r0]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0x40\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0x9\n" - "\tbhi _08026964\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0xDC\n" - "\tadds r0, r5\n" - "\tstrb r2, [r0]\n" - "\tmov r1, r8\n" - "\tldr r0, [r1]\n" - "\tadds r0, 0xD0\n" - "\tadds r0, r5\n" - "\tstrb r2, [r0]\n" - "\tldr r0, [r1]\n" - "\tadds r0, 0xC4\n" - "\tadds r0, r5\n" - "\tstrb r2, [r0]\n" - "\tldr r2, =0x000032eb\n" - "\tadds r0, r4, r2\n" - "\tadds r0, r5\n" - "\tmovs r1, 0x1\n" - "\tstrb r1, [r0]\n" - "\tmov r0, r8\n" - "\tldr r1, [r0]\n" - "\tadds r1, 0xE8\n" - "\tadds r1, r5\n" - "\tsubs r2, 0xB\n" - "\tadds r4, r2\n" - "\tadds r4, r5\n" - "\tldrb r0, [r4]\n" - "\tstrb r0, [r1]\n" - "\tadds r0, r5, 0\n" - "\tbl sub_8026D8C\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tadds r1, r5, 0\n" - "\tbl sub_8026DB0\n" - "\tstrb r0, [r4]\n" - "_08026964:\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tmov r0, r9\n" - "\tsubs r0, 0x1\n" - "\tcmp r5, r0\n" - "\tbge _08026974\n" - "\tb _08026750\n" - "_08026974:\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.pool"); +static void sub_8027E30(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8) +{ + asm_unified(" push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x20\n\ + ldr r4, [sp, 0x48]\n\ + lsls r4, 24\n\ + str r4, [sp, 0x1C]\n\ + movs r4, 0x14\n\ + adds r4, r0\n\ + mov r9, r4\n\ + mov r5, sp\n\ + movs r4, 0x2\n\ + strb r4, [r5]\n\ + mov r10, sp\n\ + mov r5, r9\n\ + ldrb r4, [r5, 0xB]\n\ + movs r7, 0xF\n\ + adds r5, r7, 0\n\ + ands r5, r4\n\ + mov r6, r10\n\ + ldrb r6, [r6, 0x1]\n\ + mov r8, r6\n\ + movs r4, 0x10\n\ + negs r4, r4\n\ + mov r6, r8\n\ + ands r4, r6\n\ + orrs r4, r5\n\ + mov r5, r10\n\ + strb r4, [r5, 0x1]\n\ + mov r8, sp\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0xC]\n\ + lsls r5, 4\n\ + ands r4, r7\n\ + orrs r4, r5\n\ + mov r5, r8\n\ + strb r4, [r5, 0x1]\n\ + ldrb r5, [r6, 0xD]\n\ + movs r6, 0xF\n\ + ands r5, r6\n\ + mov r4, r10\n\ + ldrb r4, [r4, 0x2]\n\ + mov r8, r4\n\ + movs r4, 0x10\n\ + negs r4, r4\n\ + mov r6, r8\n\ + ands r4, r6\n\ + orrs r4, r5\n\ + mov r5, r10\n\ + strb r4, [r5, 0x2]\n\ + mov r8, sp\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0xE]\n\ + lsls r5, 4\n\ + ands r4, r7\n\ + orrs r4, r5\n\ + mov r5, r8\n\ + strb r4, [r5, 0x2]\n\ + ldrb r5, [r6, 0xF]\n\ + movs r6, 0xF\n\ + ands r5, r6\n\ + mov r4, r10\n\ + ldrb r4, [r4, 0x3]\n\ + mov r8, r4\n\ + movs r4, 0x10\n\ + negs r4, r4\n\ + mov r6, r8\n\ + ands r4, r6\n\ + orrs r4, r5\n\ + mov r5, r10\n\ + strb r4, [r5, 0x3]\n\ + mov r8, sp\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0x10]\n\ + lsls r5, 4\n\ + ands r4, r7\n\ + orrs r4, r5\n\ + mov r5, r8\n\ + strb r4, [r5, 0x3]\n\ + ldrb r5, [r6, 0x11]\n\ + movs r6, 0xF\n\ + ands r5, r6\n\ + mov r4, r10\n\ + ldrb r4, [r4, 0x4]\n\ + mov r8, r4\n\ + movs r4, 0x10\n\ + negs r4, r4\n\ + mov r6, r8\n\ + ands r4, r6\n\ + orrs r4, r5\n\ + mov r5, r10\n\ + strb r4, [r5, 0x4]\n\ + mov r8, sp\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0x12]\n\ + lsls r5, 4\n\ + ands r4, r7\n\ + orrs r4, r5\n\ + mov r5, r8\n\ + strb r4, [r5, 0x4]\n\ + ldrb r4, [r6, 0x13]\n\ + movs r6, 0xF\n\ + ands r4, r6\n\ + mov r6, r8\n\ + ldrb r5, [r6, 0x5]\n\ + movs r6, 0x10\n\ + negs r6, r6\n\ + ands r6, r5\n\ + orrs r6, r4\n\ + str r6, [sp, 0xC]\n\ + mov r4, r8\n\ + strb r6, [r4, 0x5]\n\ + mov r5, sp\n\ + mov r6, r9\n\ + ldrb r4, [r6, 0x14]\n\ + lsls r4, 4\n\ + ldr r6, [sp, 0xC]\n\ + ands r6, r7\n\ + orrs r6, r4\n\ + strb r6, [r5, 0x5]\n\ + mov r7, sp\n\ + movs r4, 0x3\n\ + mov r8, r4\n\ + ldrb r0, [r0, 0x14]\n\ + mov r5, r8\n\ + ands r0, r5\n\ + ldrb r5, [r7, 0x6]\n\ + movs r6, 0x4\n\ + negs r6, r6\n\ + mov r10, r6\n\ + mov r4, r10\n\ + ands r4, r5\n\ + orrs r4, r0\n\ + strb r4, [r7, 0x6]\n\ + mov r5, r9\n\ + ldrb r0, [r5, 0x1]\n\ + mov r6, r8\n\ + ands r0, r6\n\ + lsls r0, 2\n\ + movs r5, 0xD\n\ + negs r5, r5\n\ + ands r5, r4\n\ + orrs r5, r0\n\ + strb r5, [r7, 0x6]\n\ + mov r0, r9\n\ + ldrb r4, [r0, 0x2]\n\ + ands r4, r6\n\ + lsls r4, 4\n\ + movs r0, 0x31\n\ + negs r0, r0\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + strb r0, [r7, 0x6]\n\ + mov r5, sp\n\ + mov r6, r9\n\ + ldrb r4, [r6, 0x3]\n\ + lsls r4, 6\n\ + movs r6, 0x3F\n\ + ands r0, r6\n\ + orrs r0, r4\n\ + strb r0, [r5, 0x6]\n\ + mov r4, r9\n\ + ldrb r0, [r4, 0x4]\n\ + mov r5, r8\n\ + ands r0, r5\n\ + ldrb r5, [r7, 0x7]\n\ + mov r4, r10\n\ + ands r4, r5\n\ + orrs r4, r0\n\ + strb r4, [r7, 0x7]\n\ + mov r6, r9\n\ + ldrb r0, [r6, 0x5]\n\ + mov r5, r8\n\ + ands r0, r5\n\ + lsls r0, 2\n\ + movs r5, 0xD\n\ + negs r5, r5\n\ + ands r5, r4\n\ + orrs r5, r0\n\ + strb r5, [r7, 0x7]\n\ + ldrb r4, [r6, 0x6]\n\ + mov r6, r8\n\ + ands r4, r6\n\ + lsls r4, 4\n\ + movs r0, 0x31\n\ + negs r0, r0\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + strb r0, [r7, 0x7]\n\ + mov r5, sp\n\ + mov r6, r9\n\ + ldrb r4, [r6, 0x7]\n\ + lsls r4, 6\n\ + movs r6, 0x3F\n\ + ands r0, r6\n\ + orrs r0, r4\n\ + strb r0, [r5, 0x7]\n\ + mov r8, sp\n\ + mov r0, r9\n\ + ldrb r4, [r0, 0x8]\n\ + movs r7, 0x3\n\ + adds r0, r7, 0\n\ + ands r0, r4\n\ + mov r4, r8\n\ + ldrb r5, [r4, 0x8]\n\ + mov r4, r10\n\ + ands r4, r5\n\ + orrs r4, r0\n\ + mov r5, r8\n\ + strb r4, [r5, 0x8]\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0x9]\n\ + adds r0, r7, 0\n\ + ands r0, r5\n\ + lsls r0, 2\n\ + movs r5, 0xD\n\ + negs r5, r5\n\ + ands r5, r4\n\ + orrs r5, r0\n\ + mov r0, r8\n\ + strb r5, [r0, 0x8]\n\ + ldrb r0, [r1]\n\ + adds r4, r7, 0\n\ + ands r4, r0\n\ + lsls r4, 4\n\ + movs r0, 0x31\n\ + negs r0, r0\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + mov r4, r8\n\ + strb r0, [r4, 0x8]\n\ + mov r5, sp\n\ + ldrb r4, [r2]\n\ + lsls r4, 6\n\ + movs r6, 0x3F\n\ + ands r0, r6\n\ + orrs r0, r4\n\ + strb r0, [r5, 0x8]\n\ + ldrb r4, [r3]\n\ + adds r0, r7, 0\n\ + ands r0, r4\n\ + ldrb r4, [r5, 0x9]\n\ + mov r6, r10\n\ + ands r6, r4\n\ + orrs r6, r0\n\ + mov r10, r6\n\ + strb r6, [r5, 0x9]\n\ + ldr r0, [sp, 0x40]\n\ + ldrb r4, [r0]\n\ + adds r0, r7, 0\n\ + ands r0, r4\n\ + lsls r0, 2\n\ + movs r4, 0xD\n\ + negs r4, r4\n\ + ands r6, r4\n\ + orrs r6, r0\n\ + str r6, [sp, 0x10]\n\ + strb r6, [r5, 0x9]\n\ + mov r4, sp\n\ + ldr r5, [sp, 0x44]\n\ + ldrb r0, [r5]\n\ + adds r6, r7, 0\n\ + ands r6, r0\n\ + lsls r0, r6, 4\n\ + subs r7, 0x34\n\ + ldr r5, [sp, 0x10]\n\ + ands r7, r5\n\ + orrs r7, r0\n\ + strb r7, [r4, 0x9]\n\ + mov r5, sp\n\ + ldrb r0, [r1, 0x4]\n\ + movs r6, 0x1\n\ + mov r12, r6\n\ + mov r4, r12\n\ + ands r4, r0\n\ + lsls r4, 6\n\ + movs r0, 0x41\n\ + negs r0, r0\n\ + mov r10, r0\n\ + ands r0, r7\n\ + orrs r0, r4\n\ + strb r0, [r5, 0x9]\n\ + ldrb r4, [r2, 0x4]\n\ + lsls r4, 7\n\ + movs r5, 0x7F\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + mov r4, r8\n\ + strb r0, [r4, 0x9]\n\ + ldrb r4, [r3, 0x4]\n\ + mov r0, r12\n\ + ands r0, r4\n\ + mov r5, r8\n\ + ldrb r4, [r5, 0xA]\n\ + movs r7, 0x2\n\ + negs r7, r7\n\ + adds r5, r7, 0\n\ + ands r5, r4\n\ + orrs r5, r0\n\ + mov r6, r8\n\ + strb r5, [r6, 0xA]\n\ + mov r9, sp\n\ + ldr r4, [sp, 0x40]\n\ + ldrb r0, [r4, 0x4]\n\ + mov r4, r12\n\ + ands r4, r0\n\ + lsls r4, 1\n\ + movs r6, 0x3\n\ + negs r6, r6\n\ + mov r8, r6\n\ + mov r0, r8\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + mov r4, r9\n\ + strb r0, [r4, 0xA]\n\ + ldr r6, [sp, 0x44]\n\ + ldrb r5, [r6, 0x4]\n\ + mov r4, r12\n\ + ands r4, r5\n\ + lsls r4, 2\n\ + movs r5, 0x5\n\ + negs r5, r5\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + mov r4, r9\n\ + strb r0, [r4, 0xA]\n\ + mov r4, sp\n\ + ldrb r1, [r1, 0x8]\n\ + mov r0, r12\n\ + ands r0, r1\n\ + lsls r0, 2\n\ + ldrb r1, [r4, 0xB]\n\ + ands r5, r1\n\ + orrs r5, r0\n\ + strb r5, [r4, 0xB]\n\ + ldrb r1, [r2, 0x8]\n\ + mov r0, r12\n\ + ands r0, r1\n\ + lsls r0, 3\n\ + movs r1, 0x9\n\ + negs r1, r1\n\ + ands r1, r5\n\ + orrs r1, r0\n\ + strb r1, [r4, 0xB]\n\ + ldrb r2, [r3, 0x8]\n\ + mov r0, r12\n\ + ands r0, r2\n\ + lsls r0, 4\n\ + movs r2, 0x11\n\ + negs r2, r2\n\ + ands r2, r1\n\ + orrs r2, r0\n\ + strb r2, [r4, 0xB]\n\ + mov r3, sp\n\ + ldr r5, [sp, 0x40]\n\ + ldrb r0, [r5, 0x8]\n\ + mov r1, r12\n\ + ands r1, r0\n\ + lsls r1, 5\n\ + movs r0, 0x21\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3, 0xB]\n\ + mov r2, sp\n\ + ldrb r1, [r6, 0x8]\n\ + mov r6, r12\n\ + ands r6, r1\n\ + lsls r1, r6, 6\n\ + mov r3, r10\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strb r0, [r2, 0xB]\n\ + ldr r4, [sp, 0x1C]\n\ + lsrs r3, r4, 21\n\ + ldrb r1, [r2, 0xA]\n\ + movs r0, 0x7\n\ + ands r0, r1\n\ + orrs r0, r3\n\ + strb r0, [r2, 0xA]\n\ + mov r1, sp\n\ + ldr r5, [sp, 0x4C]\n\ + movs r6, 0x1\n\ + ands r5, r6\n\ + lsls r2, r5, 1\n\ + ldrb r0, [r1, 0xB]\n\ + mov r3, r8\n\ + ands r3, r0\n\ + orrs r3, r2\n\ + mov r8, r3\n\ + strb r3, [r1, 0xB]\n\ + mov r0, sp\n\ + ldr r4, [sp, 0x50]\n\ + ands r4, r6\n\ + mov r5, r8\n\ + ands r5, r7\n\ + orrs r5, r4\n\ + strb r5, [r0, 0xB]\n\ + bl sub_800FE50\n\ + add sp, 0x20\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ +"); } +#endif + +static u32 sub_8028164(u32 unused, struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 *arg6, u32 *arg7, u32 *arg8) +{ + struct UnkPacket2 *packet; + struct DodrioSubstruct_31A0_14 *ptr = &arg0->unk14; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return 0; + + packet = (void *)&gRecvCmds[0][1]; + if (packet->id == 2) + { + ptr->unkB[0] = packet->unk1_0; + ptr->unkB[1] = packet->unk1_1; + ptr->unkB[2] = packet->unk2_0; + ptr->unkB[3] = packet->unk2_1; + ptr->unkB[4] = packet->unk3_0; + ptr->unkB[5] = packet->unk3_1; + ptr->unkB[6] = packet->unk4_0; + ptr->unkB[7] = packet->unk4_1; + ptr->unkB[8] = packet->unk5_0; + ptr->unkB[9] = packet->unk5_1; + ptr->unkB[10] = packet->unk1_0; + + ptr->unk0[0] = packet->unk6_0; + ptr->unk0[1] = packet->unk6_1; + ptr->unk0[2] = packet->unk6_2; + ptr->unk0[3] = packet->unk6_3; + ptr->unk0[4] = packet->unk7_0; + ptr->unk0[5] = packet->unk7_1; + ptr->unk0[6] = packet->unk7_2; + ptr->unk0[7] = packet->unk7_3; + ptr->unk0[8] = packet->unk8_0; + ptr->unk0[9] = packet->unk8_1; + ptr->unk0[10] = packet->unk6_0; + + arg1->unk0 = packet->unk8_2; + arg1->unk4 = packet->unk9_3; + arg1->unk8 = packet->unkB_2; + + arg2->unk0 = packet->unk8_3; + arg2->unk4 = packet->unk9_4; + arg2->unk8 = packet->unkB_3; + + arg3->unk0 = packet->unk9_0; + arg3->unk4 = packet->unkA_0; + arg3->unk8 = packet->unkB_4; + + arg4->unk0 = packet->unk9_1; + arg4->unk4 = packet->unkA_1; + arg4->unk8 = packet->unkB_5; + + arg5->unk0 = packet->unk9_2; + arg5->unk4 = packet->unkA_2; + arg5->unk8 = packet->unkB_6; + + *arg6 = packet->unkA_3; + *arg7 = packet->unkB_1; + *arg8 = packet->unkB_0; + return 1; + } + + return 0; +} + +struct UnkPacket3 +{ + u8 id; + u8 ALIGNED(4) unk4; +}; + +static void sub_80282EC(u8 arg0) +{ + struct UnkPacket3 packet; + packet.id = 3; + packet.unk4 = arg0; + sub_800FE50(&packet); +} + +static u32 sub_8028318(u32 arg0, u8 *arg1) +{ + struct UnkPacket3 *packet; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return 0; + + packet = (void *)&gRecvCmds[arg0][1]; + if (packet->id == 3) + { + *arg1 = packet->unk4; + return 1; + } + + return 0; +} + +struct UnkPacket4 +{ + u8 id; + u32 unk4; +}; + +static void sub_8028350(u32 arg0) +{ + struct UnkPacket4 packet; + packet.id = 4; + packet.unk4 = arg0; + sub_800FE50(&packet); +} + +static u32 sub_8028374(u32 arg0) +{ + struct UnkPacket4 *packet; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return 0; + + packet = (void *)&gRecvCmds[arg0][1]; + if (packet->id == 4) + return packet->unk4; + + return 0; +} + +// Large chunk of data +static const struct BgTemplate gUnknown_082F7BA4[] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 2, + .mapBaseIndex = 12, + .screenSize = 1, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 14, + .screenSize = 1, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, +}; + +// Unknown unreferenced data, feel free to remove. +static const u32 sUnused[] = {255, 0}; + +static const struct WindowTemplate gUnknown_082F7BBC[] = +{ + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 28, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x13, + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 14, + .paletteNum = 13, + .baseBlock = 0x4B, + } +}; +static const struct WindowTemplate gUnknown_082F7BCC = +{ + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 7, + .paletteNum = 13, + .baseBlock = 0x4B, +}; +static const struct WindowTemplate gUnknown_082F7BD4[] = +{ + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 8, + .width = 19, + .height = 3, + .paletteNum = 13, + .baseBlock = 0x13, + }, + { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 7, + .width = 6, + .height = 4, + .paletteNum = 13, + .baseBlock = 0x4C, + } +}; +static const struct WindowTemplate gUnknown_082F7BE4 = +{ + .bg = 0, + .tilemapLeft = 4, + .tilemapTop = 6, + .width = 22, + .height = 5, + .paletteNum = 13, + .baseBlock = 0x13, +}; +static const struct WindowTemplate gUnknown_082F7BEC = +{ + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 8, + .width = 19, + .height = 3, + .paletteNum = 13, + .baseBlock = 0x13, +}; + +// This is an unused copy of the tables from the top of the file. Feel free to remove. +static const u8 sDuplicateArray[] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0, 0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 2, 9, + 0, 0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0, 0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0, 0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0, 0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0, 0, 7, + 8, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 2, 3, 4, 5, 6, 7, 8, 9, 0, + 1, 2, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 4, 5, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 5, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 6, 7, 2, 2, 3, 4, 0, 0, 0, 0, 0, 0, + 3, 4, 5, 5, 6, 7, 7, 8, 1, 1, 2, 3, 0, 0, 0, 4, 5, 6, 6, 7, 8, 8, 9, 0, 0, 1, 2, 2, 3, 4, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 1, + 2, 1, 2, 3, 2, 3, 0, 0, 0, 0, 4, 0, 1, 0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 4, 0, 0, 0, 0, 9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 1, 1, 0, 9, 9, 9, 9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9, 9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9, 3, 3, 4, 4, 0, 0, 1, 1, + 2, 2, 3, 5, 0, 0, 0, 0, 4, 6, 0, 0, 0, 3, 5, 7, 0, 0, 2, 4, 6, 8, 0, 1, 3, 5, 6, 9 +}; + +static const u16 gDodrioBerryBgPal1[] = INCBIN_U16("graphics/link_games/dodrioberry_bg1.gbapal", + "graphics/link_games/dodrioberry_bg2.gbapal"); +static const u16 gDodrioBerryPkmnPal[] = INCBIN_U16("graphics/link_games/dodrioberry_pkmn.gbapal"); +static const u16 gDodrioBerryShinyPal[] = INCBIN_U16("graphics/link_games/dodrioberry_shiny.gbapal"); +static const u16 gDodrioBerryStatusPal[] = INCBIN_U16("graphics/link_games/dodrioberry_status.gbapal"); +static const u16 gDodrioBerrySpritesPal[] = INCBIN_U16("graphics/link_games/dodrioberry_berrysprites.gbapal"); +static const u32 gDodrioBerrySpritesGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_berrysprites.4bpp.lz"); +static const u16 gDodrioBerryPlatformPal[] = INCBIN_U16("graphics/link_games/dodrioberry_platform.gbapal"); +static const u32 gDodrioBerryBgGfx1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.4bpp.lz"); +static const u32 gDodrioBerryBgGfx2[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2.4bpp.lz"); +static const u32 gDodrioBerryStatusGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_status.4bpp.lz"); +static const u32 gDodrioBerryPlatformGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_platform.4bpp.lz"); +static const u32 gDodrioBerryPkmnGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_pkmn.4bpp.lz"); +static const u32 gDodrioBerryBgTilemap1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.bin.lz"); +static const u32 gDodrioBerryBgTilemap2Right[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2right.bin.lz"); +static const u32 gDodrioBerryBgTilemap2Left[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2left.bin.lz"); + +static const struct OamData sOamData_82FB1E0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FB1E8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FB1F0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FB1F8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_82FB200[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB208[] = +{ + ANIMCMD_FRAME(64, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB210[] = +{ + ANIMCMD_FRAME(128, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB218[] = +{ + ANIMCMD_FRAME(192, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB220[] = +{ + ANIMCMD_FRAME(256, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_82FB228[] = +{ + sSpriteAnim_82FB200, + sSpriteAnim_82FB208, + sSpriteAnim_82FB210, + sSpriteAnim_82FB218, + sSpriteAnim_82FB220 +}; + +static const union AnimCmd sSpriteAnim_82FB23C[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB244[] = +{ + ANIMCMD_FRAME(4, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB24C[] = +{ + ANIMCMD_FRAME(8, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_82FB254[] = +{ + sSpriteAnim_82FB23C, + sSpriteAnim_82FB244, + sSpriteAnim_82FB24C +}; + +static const union AnimCmd sSpriteAnim_82FB260[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB268[] = +{ + ANIMCMD_FRAME(4, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB270[] = +{ + ANIMCMD_FRAME(8, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB278[] = +{ + ANIMCMD_FRAME(12, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB280[] = +{ + ANIMCMD_FRAME(16, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB288[] = +{ + ANIMCMD_FRAME(20, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB290[] = +{ + ANIMCMD_FRAME(24, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB298[] = +{ + ANIMCMD_FRAME(28, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB2A0[] = +{ + ANIMCMD_FRAME(32, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_82FB2A8[] = +{ + sSpriteAnim_82FB260, + sSpriteAnim_82FB268, + sSpriteAnim_82FB270, + sSpriteAnim_82FB278, + sSpriteAnim_82FB280, + sSpriteAnim_82FB288, + sSpriteAnim_82FB290, + sSpriteAnim_82FB298, + sSpriteAnim_82FB2A0 +}; + +static const union AnimCmd sSpriteAnim_82FB2CC[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_82FB2D4[] = +{ + sSpriteAnim_82FB2CC +}; + +static void sub_80283A8(void) +{ + void *ptr = AllocZeroed(0x3000); + struct SpritePalette pal1 = {gDodrioBerryPkmnPal, 0}; + struct SpritePalette pal2 = {gDodrioBerryShinyPal, 1}; + + LZ77UnCompWram(gDodrioBerryPkmnGfx, ptr); + // This check should be one line up. + if (ptr != NULL) + { + struct SpriteSheet sheet = {ptr, 0x3000, 0}; + LoadSpriteSheet(&sheet); + Free(ptr); + } + LoadSpritePalette(&pal1); + LoadSpritePalette(&pal2); +} + +static void sub_8028408(struct DodrioSubstruct_318C *arg0, u8 arg1, u8 id, u8 arg3) +{ + struct SpriteTemplate sprTemplate = + { + .tileTag = 0, + .paletteTag = arg0->isShiny, + .oam = &sOamData_82FB1E0, + .anims = sSpriteAnimTable_82FB228, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80284A8, + }; + + gUnknown_02022C9C[id] = AllocZeroed(4); + *gUnknown_02022C9C[id] = CreateSprite(&sprTemplate, sub_8028F14(arg1, arg3), 136, 3); + sub_8028654(TRUE, id); +} + +static void sub_80284A8(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + break; + case 1: + sub_802853C(sprite); + break; + case 2: + sub_80285AC(sprite); + break; + } +} + +static void sub_80284CC(u8 unused) +{ + struct Sprite *sprite = &gSprites[*gUnknown_02022C9C[GetMultiplayerId()]]; + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; +} + +static void sub_8028504(u8 unused) +{ + struct Sprite *sprite = &gSprites[*gUnknown_02022C9C[GetMultiplayerId()]]; + sprite->data[0] = 2; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; +} + +static u32 sub_802853C(struct Sprite *sprite) +{ + s8 var; + u8 mod = (++sprite->data[1] / 2) % 4; + + if (sprite->data[1] >= 3) + { + switch (mod) + { + default: + var = 1; + break; + case 1: + case 2: + var = -1; + break; + } + + sprite->pos1.x += var; + if (++sprite->data[1] >= 40) + { + sprite->data[0] = 0; + sprite->pos1.x = sub_8028F14(0, sub_8027650()); + } + } + + return 0; +} + +static u32 sub_80285AC(struct Sprite *sprite) +{ + u8 mod = (++sprite->data[1] / 13) % 4; + + if (sprite->data[1] % 13 == 0 && mod != 0) + PlaySE(SE_W204); + if (sprite->data[1] >= 104) + { + sprite->data[0] = 0; + mod = 0; + } + sub_80286B4(GetMultiplayerId(), mod); + return 0; +} + +static void sub_8028614(u8 count) +{ + u8 i; + for (i = 0; i < count; i++) + { + struct Sprite *sprite = &gSprites[*gUnknown_02022C9C[i]]; + if (sprite != NULL) + DestroySpriteAndFreeResources(sprite); + // Memory should be freed here but is not. + } +} + +static void sub_8028654(bool8 invisible, u8 id) +{ + gSprites[*gUnknown_02022C9C[id]].invisible = invisible; +} + +static void sub_802868C(bool8 invisible, u8 count) +{ + u8 i; + for (i = 0; i < count; i++) + sub_8028654(invisible, i); +} + +static void sub_80286B4(u8 id, u8 frameNum) +{ + StartSpriteAnim(&gSprites[*gUnknown_02022C9C[id]], frameNum); +} + +static void nullsub_15(struct Sprite *sprite) +{ + +} + +static void sub_80286E4(void) +{ + u8 i; + for (i = 0; i < 10; i++) + { + struct Sprite *sprite = &gSprites[gUnknown_02022CF4->unk2A[i]]; + sprite->pos1.x = (i * 16) + 48; + sprite->pos1.y = -8 - (i * 8); + gUnknown_02022CF4->unkC[i] = 0; + } +} + +static void sub_8028734(void) +{ + u8 i; + void *ptr = AllocZeroed(0x180); + struct SpritePalette spPal = {gDodrioBerryStatusPal, 2}; + + LZ77UnCompWram(gDodrioBerryStatusGfx, ptr); + // This check should be one line up. + if (ptr != NULL) + { + struct SpriteSheet spSheet = {ptr, 0x180, 1}; + struct SpriteTemplate spTemplate = + { + .tileTag = 1, + .paletteTag = 2, + .oam = &sOamData_82FB1E8, + .anims = sSpriteAnimTable_82FB254, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = nullsub_15, + }; + + gUnknown_02022CF4 = AllocZeroed(sizeof(*gUnknown_02022CF4)); + LoadSpriteSheet(&spSheet); + LoadSpritePalette(&spPal); + for (i = 0; i < 10; i++) + gUnknown_02022CF4->unk2A[i] = CreateSprite(&spTemplate, (i * 16) + 48, -8 - (i * 8), 0); + } + + Free(ptr); +} + +static void sub_80287E4(void) +{ + u8 i; + for (i = 0; i < 10; i++) + { + struct Sprite *sprite = &gSprites[gUnknown_02022CF4->unk2A[i]]; + if (sprite != NULL) + DestroySpriteAndFreeResources(sprite); + } + FREE_AND_SET_NULL(gUnknown_02022CF4); +} + +static bool32 sub_8028828(void) +{ + u8 i; + bool32 r3 = FALSE; + for (i = 0; i < 10; i++) + { + struct Sprite *sprite = &gSprites[gUnknown_02022CF4->unk2A[i]]; + gUnknown_02022CF4->unk16[i] = 2; + if (gUnknown_02022CF4->unkC[i] != 0 && sprite->pos1.y == 8) + continue; + r3 = TRUE; + if (sprite->pos1.y == 8) + { + if (gUnknown_02022CF4->unkC[i] != 0) + continue; + gUnknown_02022CF4->unkC[i] = 1; + gUnknown_02022CF4->unk16[i] = -16; + PlaySE(SE_TK_KASYA); + } + sprite->pos1.y += gUnknown_02022CF4->unk16[i]; + } + + if (r3) + return FALSE; + else + return TRUE; +} + +static void sub_80288D4(u8 arg0) +{ + u8 i; + + if (arg0 > 10) + { + for (i = 0; i < 10; i++) + StartSpriteAnim(&gSprites[gUnknown_02022CF4->unk2A[i]], 1); + } + else + { + for (i = 0; i < 10 - arg0; i++) + { + if (arg0 > 6) + { + gUnknown_02022CF4->unk3E += arg0 - 6; + if (gUnknown_02022CF4->unk3E > 30) + gUnknown_02022CF4->unk3E = 0; + else if (gUnknown_02022CF4->unk3E > 10) + StartSpriteAnim(&gSprites[gUnknown_02022CF4->unk2A[i]], 2); + else + StartSpriteAnim(&gSprites[gUnknown_02022CF4->unk2A[i]], 0); + } + else + { + StartSpriteAnim(&gSprites[gUnknown_02022CF4->unk2A[i]], 0); + } + } + for (; i < 10; i++) + StartSpriteAnim(&gSprites[gUnknown_02022CF4->unk2A[i]], 1); + } +} + +static void sub_80289E8(bool8 invisible) +{ + u8 i; + for (i = 0; i < 10; i++) + gSprites[gUnknown_02022CF4->unk2A[i]].invisible = invisible; +} + +// Unknown unused data, feel free to remove. +static const u8 sUnused2[] = {0xD4, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0xFB, 0x0, 0x0}; + +static void sub_8028A34(void) +{ + void *ptr = AllocZeroed(0x480); + struct SpritePalette sprPal = {gDodrioBerrySpritesPal, 3}; + + LZ77UnCompWram(gDodrioBerrySpritesGfx, ptr); + if (ptr != NULL) + { + struct SpriteSheet sprSheet = {ptr, 0x480, 2}; + LoadSpriteSheet(&sprSheet); + } + + LoadSpritePalette(&sprPal); + Free(ptr); +} + +static const s16 gUnknown_082FB31C[] = {88, 128, 168, 208}; + +static void sub_8028A88(void) +{ + u8 i; + s16 x; + + struct SpriteTemplate sprTemplate1 = + { + .tileTag = 2, + .paletteTag = 3, + .oam = &sOamData_82FB1F0, + .anims = sSpriteAnimTable_82FB2A8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + struct SpriteTemplate sprTemplate2 = + { + .tileTag = 2, + .paletteTag = 3, + .oam = &sOamData_82FB1E8, + .anims = sSpriteAnimTable_82FB2A8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + for (i = 0; i < 11; i++) + { + gUnknown_02022CB8[i] = AllocZeroed(4); + x = i * 16; + *gUnknown_02022CB8[i] = CreateSprite(&sprTemplate1, x + (i * 8), 8, 1); + sub_8028BF8(i, TRUE); + } + for (i = 0; i < 4; i++) + { + gUnknown_02022CE4[i] = AllocZeroed(4); + if (i == 3) + *gUnknown_02022CE4[i] = CreateSprite(&sprTemplate2, gUnknown_082FB31C[i], 49, 0); + else + *gUnknown_02022CE4[i] = CreateSprite(&sprTemplate2, gUnknown_082FB31C[i], 52, 0); + StartSpriteAnim(&gSprites[*gUnknown_02022CE4[i]], i); + } + + sub_8028C30(TRUE); +} + +static void sub_8028B80(void) +{ + struct Sprite *sprite; + u8 i; + + for (i = 0; i < 11; i++) + { + sprite = &gSprites[*gUnknown_02022CB8[i]]; + if (sprite != NULL) + DestroySprite(sprite); + FREE_AND_SET_NULL(gUnknown_02022CB8[i]); + } + for (i = 0; i < 4; i++) + { + sprite = &gSprites[*gUnknown_02022CE4[i]]; + if (sprite != NULL) + DestroySprite(sprite); + FREE_AND_SET_NULL(gUnknown_02022CE4[i]); + } +} + +static void sub_8028BF8(u8 id, bool8 invisible) +{ + gSprites[*gUnknown_02022CB8[id]].invisible = invisible; +} + +static void sub_8028C30(bool8 invisible) +{ + u8 i; + for (i = 0; i < 4; i++) + gSprites[*gUnknown_02022CE4[i]].invisible = invisible; +} + +static void sub_8028C7C(u8 id, u8 y) +{ + gSprites[*gUnknown_02022CB8[id]].pos1.y = y * 8; +} + +static void sub_8028CA4(u16 id, u8 frameNum) +{ + StartSpriteAnim(&gSprites[*gUnknown_02022CB8[id]], frameNum); +} + +// Unused +static void sub_8028CD0(u8 spriteId) +{ + gSprites[spriteId].pos1.x = 20 * spriteId + 50; + gSprites[spriteId].pos1.y = 50; +} + +// Gamefreak made a mistake there and goes out of bounds for the data array as it holds 8 elements +// in turn overwriting sprite's subpriority and subsprites fields. +#if defined(NONMATCHING) || MODERN + #define sKeepPosX data[1] +#else + #define sKeepPosX data[10] #endif // NONMATCHING + +static void sub_8028CF4(struct Sprite *sprite) +{ + u8 i; + static const u8 array[] = {30, 20}; + + if (sprite->sKeepPosX != TRUE) + { + for (i = 0; i < 2; i++) + { + if (++gUnknown_02022CB0[i][1] > array[i]) + { + sprite->pos1.x--; + gUnknown_02022CB0[i][1] = 0; + } + } + } +} + +static const s16 gUnknown_082FB356[][2] = {{230, 55}, {30, 74}}; + +static void sub_8028D44(void) +{ + u8 i; + void *ptr = AllocZeroed(0x400); + struct SpritePalette sprPal = {gDodrioBerryPlatformPal, 6}; + + LZ77UnCompWram(gDodrioBerryPlatformGfx, ptr); + if (ptr != NULL) + { + struct SpriteSheet sprSheet = {ptr, 0x400, 5}; + struct SpriteTemplate sprTemplate = + { + .tileTag = 5, + .paletteTag = 6, + .oam = &sOamData_82FB1F8, + .anims = sSpriteAnimTable_82FB2D4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8028CF4, + }; + + LoadSpriteSheet(&sprSheet); + LoadSpritePalette(&sprPal); + for (i = 0; i < 2; i++) + { + gUnknown_02022CB0[i] = AllocZeroed(4); + *gUnknown_02022CB0[i] = CreateSprite(&sprTemplate, gUnknown_082FB356[i][0], gUnknown_082FB356[i][1], 4); + } + } + + Free(ptr); +} + +static void sub_8028DFC(void) +{ + u8 i; + for (i = 0; i < 2; i++) + { + struct Sprite *sprite = &gSprites[*gUnknown_02022CB0[i]]; + sprite->sKeepPosX = TRUE; + sprite->pos1.x = gUnknown_082FB356[i][0]; + sprite->pos1.y = gUnknown_082FB356[i][1]; + } +} + +static void sub_8028E4C(void) +{ + u8 i; + for (i = 0; i < 2; i++) + { + struct Sprite *sprite = &gSprites[*gUnknown_02022CB0[i]]; + sprite->sKeepPosX = FALSE; + } +} + +static void sub_8028E84(void) +{ + u8 i; + for (i = 0; i < 2; i++) + { + struct Sprite *sprite = &gSprites[*gUnknown_02022CB0[i]]; + if (sprite) + DestroySprite(sprite); + FREE_AND_SET_NULL(gUnknown_02022CB0[i]); + } +} + +static void sub_8028EC8(bool8 invisible) +{ + u8 i; + for (i = 0; i < 2; i++) + gSprites[*gUnknown_02022CB0[i]].invisible = invisible; +} + +#undef sKeepPosX + +static s16 sub_8028F14(u8 arg0, u8 arg1) +{ + s16 x = 0; + switch (arg1) + { + case 1: + x = 15; + break; + case 2: + switch (arg0) + { + case 0: x = 12; break; + case 1: x = 18; break; + } + break; + case 3: + switch (arg0) + { + case 0: x = 15; break; + case 1: x = 21; break; + case 2: x = 9; break; + } + break; + case 4: + switch (arg0) + { + case 0: x = 12; break; + case 1: x = 18; break; + case 2: x = 24; break; + case 3: x = 6; break; + } + break; + case 5: + switch (arg0) + { + case 0: x = 15; break; + case 1: x = 21; break; + case 2: x = 27; break; + case 3: x = 3; break; + case 4: x = 9; break; + } + break; + } + + return x * 8; +} + +static void sub_8028FCC(void) +{ + u8 i; + for (i = 0; i < 11; i++) + { + sub_8028BF8(i, TRUE); + sub_8028C7C(i, 1); + } + sub_80289E8(FALSE); +} + +static void sub_8028FF8(u8 frameId) +{ + LoadBgTiles(0, GetWindowFrameTilesPal(frameId)->tiles, 0x120, 1); + LoadPalette(GetWindowFrameTilesPal(frameId)->pal, 0xA0, 0x20); +} + +static void sub_802902C(void) +{ + LoadUserWindowBorderGfx_(0, 0xA, 0xB0); +} + +static void sub_802903C(void) +{ + gUnknown_02022CF8->finished = FALSE; + gUnknown_02022CF8->state = 0; + gUnknown_02022CF8->unk3018 = 0; + gUnknown_02022CF8->unk3020 = 0; + gUnknown_02022CF8->unk3024 = 0; +} + +static void sub_8029074(const struct WindowTemplate *winTempl) +{ + u8 pal = 0xA; + + FillBgTilemapBufferRect(0, 1, winTempl->tilemapLeft - 1, winTempl->tilemapTop - 1, 1, 1, pal); + FillBgTilemapBufferRect(0, 2, winTempl->tilemapLeft, winTempl->tilemapTop - 1, winTempl->width, 1, pal); + FillBgTilemapBufferRect(0, 3, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop - 1, 1, 1, pal); + FillBgTilemapBufferRect(0, 4, winTempl->tilemapLeft - 1, winTempl->tilemapTop, 1, winTempl->height, pal); + FillBgTilemapBufferRect(0, 6, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop, 1, winTempl->height, pal); + FillBgTilemapBufferRect(0, 7, winTempl->tilemapLeft - 1, winTempl->tilemapTop + winTempl->height, 1, 1, pal); + FillBgTilemapBufferRect(0, 8, winTempl->tilemapLeft, winTempl->tilemapTop + winTempl->height, winTempl->width, 1, pal); + FillBgTilemapBufferRect(0, 9, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop + winTempl->height, 1, 1, pal); +} + +static void sub_8029174(const struct WindowTemplate *winTempl) +{ + u8 pal = 0xB; + + FillBgTilemapBufferRect(0, 10, winTempl->tilemapLeft - 1, winTempl->tilemapTop - 1, 1, 1, pal); + FillBgTilemapBufferRect(0, 11, winTempl->tilemapLeft, winTempl->tilemapTop - 1, winTempl->width, 1, pal); + FillBgTilemapBufferRect(0, 12, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop - 1, 1, 1, pal); + FillBgTilemapBufferRect(0, 13, winTempl->tilemapLeft - 1, winTempl->tilemapTop, 1, winTempl->height, pal); + FillBgTilemapBufferRect(0, 15, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop, 1, winTempl->height, pal); + FillBgTilemapBufferRect(0, 16, winTempl->tilemapLeft - 1, winTempl->tilemapTop + winTempl->height, 1, 1, pal); + FillBgTilemapBufferRect(0, 17, winTempl->tilemapLeft, winTempl->tilemapTop + winTempl->height, winTempl->width, 1, pal); + FillBgTilemapBufferRect(0, 18, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop + winTempl->height, 1, 1, pal); +} + +static void sub_8029274(struct DodrioSubstruct_0160 *ptr) +{ + gUnknown_02022CF8 = ptr; + gUnknown_02022CF8->finished = FALSE; + gUnknown_02022CF8->state = 0; + gUnknown_02022CF8->unk3018 = 0; + gUnknown_02022CF8->unk3020 = 0; + gUnknown_02022CF8->unk3024 = 0; + gUnknown_02022CF8->unk3004 = CreateTask(sub_8029314, 3); + sub_802A72C(sub_8029338); +} + +static void sub_80292D4(void) +{ + FreeAllWindowBuffers(); +} + +// Data used by functions below. +struct WinCoords +{ + u8 left; + u8 top; +}; + +static const u8 gUnknown_082FB380[][3] = +{ + {1, 2, 3}, + {1, 4, 5}, + {1, 8, 9}, + {1, 6, 7}, +}; + +static const struct WinCoords gUnknown_082FB38C[] = {{12, 6}}; +static const struct WinCoords gUnknown_082FB390[] = {{9, 10}, {15, 6}}; +static const struct WinCoords gUnknown_082FB398[] = {{12, 6}, {18, 10}, {6, 10}}; +static const struct WinCoords gUnknown_082FB3A4[] = {{9, 10}, {15, 6}, {21, 10}, {3, 6}}; +static const struct WinCoords gUnknown_082FB3B4[] = {{12, 6}, {18, 10}, {23, 6}, {1, 6}, {6, 10}}; + +static const struct WinCoords *const gUnknown_082FB3C8[] = +{ + gUnknown_082FB38C, + gUnknown_082FB390, + gUnknown_082FB398, + gUnknown_082FB3A4, + gUnknown_082FB3B4, +}; + +static const u8 *const gUnknown_082FB3DC[] = +{ + gText_1Colon, + gText_2Colon, + gText_3Colon, + gText_4Colon, + gText_5Colon, +}; + +static const u16 gUnknown_082FB3F0[] = {92, 132, 172, 212}; +static const u16 gUnknown_082FB3F8[] = {33, 49, 65, 81, 97}; +static const u16 gUnknown_082FB402[] = {17, 33, 49, 65, 81}; + +struct +{ + u8 id; + void (*func)(void); +} const gUnknown_082FB40C[] = +{ + {0, sub_8029338}, + {1, sub_8029440}, + {2, sub_802988C}, + {3, sub_802A010}, + {4, sub_802A380}, + {5, sub_802A454}, + {6, sub_802A534}, + {7, sub_802A588}, + {8, sub_802A6FC}, + {9, nullsub_16}, +}; + +static void sub_80292E0(u8 arg0) +{ + u8 i; + for (i = 0; i < 10; i++) + { + if (gUnknown_082FB40C[i].id == arg0) + sub_802A72C(gUnknown_082FB40C[i].func); + } +} + +static void sub_8029314(u8 taskId) +{ + if (!gUnknown_02022CF8->finished) + sub_802A75C()(); +} + +static void sub_8029338(void) +{ + switch (gUnknown_02022CF8->state) + { + case 0: + sub_802A7A8(); + gUnknown_02022CF8->state++; + break; + case 1: + if (sub_802A8E8() == TRUE) + gUnknown_02022CF8->state++; + break; + case 2: + CopyToBgTilemapBuffer(3, gDodrioBerryBgTilemap1, 0, 0); + CopyToBgTilemapBuffer(1, gDodrioBerryBgTilemap2Left, 0, 0); + CopyToBgTilemapBuffer(2, gDodrioBerryBgTilemap2Right, 0, 0); + CopyBgTilemapBufferToVram(3); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + gUnknown_02022CF8->state++; + break; + case 3: + ShowBg(0); + ShowBg(3); + ShowBg(1); + ShowBg(2); + gUnknown_02022CF8->state++; + break; + case 4: + sub_8028FF8(gSaveBlock2Ptr->optionsWindowFrameType); + sub_802902C(); + gUnknown_02022CF8->state++; + break; + default: + gUnknown_02022CF8->finished = TRUE; + break; + } +} + +static void sub_8029440(void) +{ + u8 i, playersCount, id, colorsId, *name; + u32 left; + struct WindowTemplate window; + const struct WinCoords *ptr; + + switch (gUnknown_02022CF8->state) + { + case 0: + playersCount = sub_8027650(); + ptr = gUnknown_082FB3C8[playersCount - 1]; + window.bg = 0; + window.width = 7; + window.height = 2; + window.paletteNum = 0xD; + window.baseBlock = 0x13; + for (i = 0; i < playersCount; ptr++, i++) + { + colorsId = 0; + id = sub_8027A48(i); + left = (56 - GetStringWidth(1, sub_8027660(id), -1)) / 2u; + window.tilemapLeft = ptr->left; + window.tilemapTop = ptr->top; + gUnknown_02022CF8->unk3008[i] = AddWindow(&window); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[i]); + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[i], PIXEL_FILL(1)); + if (id == GetMultiplayerId()) + colorsId = 2; + name = sub_8027660(id); + AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[i], 1, left, 1, gUnknown_082FB380[colorsId], -1, name); + CopyWindowToVram(gUnknown_02022CF8->unk3008[i], 2); + window.baseBlock += 0xE; + sub_8029174(&window); + } + gUnknown_02022CF8->state++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + playersCount = sub_8027650(); + for (i = 0; i < playersCount; i++) + PutWindowTilemap(gUnknown_02022CF8->unk3008[i]); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->state++; + } + break; + default: + if (++gUnknown_02022CF8->state > 180) + { + playersCount = sub_8027650(); + for (i = 0; i < playersCount; i++) + { + ClearWindowTilemap(gUnknown_02022CF8->unk3008[i]); + RemoveWindow(gUnknown_02022CF8->unk3008[i]); + } + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->finished = TRUE; + } + break; + } +} + +static void sub_80296A8(u8 playersCount_) +{ + u8 i, r8 = 0, r6 = 0; + u8 playersCount = playersCount_; // Pointless variable, I know, but it's needed to match. + u8 *name; + u32 x, numWidth; + u8 numString[32]; + u8 array[5] = {0, 1, 2, 3, 4}; + struct DodrioSubstruct_3308 temp, structArray[5]; + + for (i = 0; i < playersCount; i++) + { + array[i] = i; + sub_802793C(&temp, i); + structArray[i] = temp; + } + + if (sub_8027748() != 0) + { + do + { + for (i = 0; i < playersCount; i++) + { + if (structArray[i].unk0 == r8) + { + array[r6] = i; + r6++; + } + } + r8 = r6; + } while (r6 < playersCount); + } + + for (i = 0; i < playersCount; i++) + { + if (structArray[i].unk4 == 0) + structArray[i].unk0 = playersCount - 1; + } + + x = 216 - GetStringWidth(1, gText_SpacePoints, 0); + for (i = 0; i < playersCount; i++) + { + u8 colorsId = 0; + u8 id = array[i]; + u32 points = structArray[id].unk4; + + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gUnknown_082FB3DC[structArray[id].unk0], 8, gUnknown_082FB402[i], -1, NULL); + if (id == GetMultiplayerId()) + colorsId = 2; + name = sub_8027660(id); + AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[1], 1, 28, gUnknown_082FB402[i], gUnknown_082FB380[colorsId], -1, name); + ConvertIntToDecimalStringN(numString, points, STR_CONV_MODE_LEFT_ALIGN, 7); + numWidth = GetStringWidth(1, numString, -1); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, numString, x - numWidth, gUnknown_082FB402[i], -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_SpacePoints, x, gUnknown_082FB402[i], -1, NULL); + } +} + +static void sub_802988C(void) +{ + u8 i, j, itemGiveRet, playersCount = sub_8027650(); + u8 *name; + u32 strWidth, x; + + switch (gUnknown_02022CF8->state) + { + case 0: + sub_802784C(); + gUnknown_02022CF8->unk301C = 0; + gUnknown_02022CF8->state++; + break; + case 1: + gUnknown_02022CF8->unk3008[0] = AddWindow(&gUnknown_082F7BBC[0]); + gUnknown_02022CF8->unk3008[1] = AddWindow(&gUnknown_082F7BBC[1]); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[1]); + sub_8029174(&gUnknown_082F7BBC[0]); + sub_8029174(&gUnknown_082F7BBC[1]); + gUnknown_02022CF8->state++; + break; + case 2: + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1)); + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[1], PIXEL_FILL(1)); + strWidth = GetStringWidth(1, gText_BerryPickingResults, -1); + x = (224 - strWidth) / 2; + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[0], 1, gText_BerryPickingResults, x, 1, -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_10P30P50P50P, 68, 17, -1, NULL); + for (i = 0; i < playersCount; i++) + { + u8 colorsId = 0; + if (i == GetMultiplayerId()) + colorsId = 2; + + name = sub_8027660(i); + AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[1], 1, 0, gUnknown_082FB3F8[i], gUnknown_082FB380[colorsId], -1, name); + for (j = 0; j < 4; j++) + { + u32 width; + u16 result1 = Min(sub_80276A0(i, j), 9999); + u16 result2 = Min(sub_802778C(j), 9999); + + ConvertIntToDecimalStringN(gStringVar4, result1, STR_CONV_MODE_LEFT_ALIGN, 4); + width = GetStringWidth(1, gStringVar4, -1); + if (result2 == result1 && result2 != 0) + AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[1], 1, gUnknown_082FB3F0[j] - width, gUnknown_082FB3F8[i], gUnknown_082FB380[1], -1, gStringVar4); + else + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gStringVar4, gUnknown_082FB3F0[j] - width, gUnknown_082FB3F8[i], -1, NULL); + } + } + CopyWindowToVram(gUnknown_02022CF8->unk3008[0], 2); + CopyWindowToVram(gUnknown_02022CF8->unk3008[1], 2); + gUnknown_02022CF8->state++; + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022CF8->unk3008[0]); + PutWindowTilemap(gUnknown_02022CF8->unk3008[1]); + } + CopyBgTilemapBufferToVram(0); + sub_8028C30(FALSE); + gUnknown_02022CF8->state++; + break; + case 4: + if (++gUnknown_02022CF8->unk301C >= 30 && gMain.newKeys & A_BUTTON) + { + gUnknown_02022CF8->unk301C = 0; + PlaySE(SE_SELECT); + sub_8028C30(TRUE); + gUnknown_02022CF8->state++; + } + break; + case 5: + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1)); + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[1], PIXEL_FILL(1)); + strWidth = GetStringWidth(1, gText_AnnouncingRankings, -1); + x = (224 - strWidth) / 2; + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[0], 1, gText_AnnouncingRankings, x, 1, -1, NULL); + gUnknown_02022CF8->state++; + break; + case 6: + sub_80296A8(playersCount); + CopyWindowToVram(gUnknown_02022CF8->unk3008[0], 2); + CopyWindowToVram(gUnknown_02022CF8->unk3008[1], 2); + gUnknown_02022CF8->state++; + break; + case 7: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022CF8->unk3008[0]); + PutWindowTilemap(gUnknown_02022CF8->unk3008[1]); + } + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->state++; + break; + case 8: + if (++gUnknown_02022CF8->unk301C >= 30 && gMain.newKeys & A_BUTTON) + { + gUnknown_02022CF8->unk301C = 0; + PlaySE(SE_SELECT); + if (sub_8027748() < 3000) + { + gUnknown_02022CF8->state = 127; + } + else + { + StopMapMusic(); + gUnknown_02022CF8->state++; + } + + FillBgTilemapBufferRect_Palette0(0, 0, 0, 5, 30, 15); + RemoveWindow(gUnknown_02022CF8->unk3008[1]); + gUnknown_02022CF8->unk3008[1] = AddWindow(&gUnknown_082F7BCC); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[1]); + sub_8029174(&gUnknown_082F7BCC); + } + break; + case 9: + PlayNewMapMusic(MUS_FANFA1); + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1)); + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[1], PIXEL_FILL(1)); + strWidth = GetStringWidth(1, gText_AnnouncingPrizes, -1); + x = (224 - strWidth) / 2; + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[0], 1, gText_AnnouncingPrizes, x, 1, -1, NULL); + DynamicPlaceholderTextUtil_Reset(); + CopyItemName(sub_802762C(), gStringVar1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_FirstPlacePrize); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gStringVar4, 0, 1, -1, NULL); + itemGiveRet = sub_80279C8(); + if (itemGiveRet != 0 && itemGiveRet != 3) + { + DynamicPlaceholderTextUtil_Reset(); + CopyItemName(sub_802762C(), gStringVar1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + if (itemGiveRet == 2) + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_CantHoldAnyMore); + else if (itemGiveRet == 1) + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_FilledStorageSpace); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gStringVar4, 0, 41, -1, NULL); + } + CopyWindowToVram(gUnknown_02022CF8->unk3008[0], 2); + CopyWindowToVram(gUnknown_02022CF8->unk3008[1], 2); + gUnknown_02022CF8->state++; + break; + case 10: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022CF8->unk3008[0]); + PutWindowTilemap(gUnknown_02022CF8->unk3008[1]); + } + CopyBgTilemapBufferToVram(0); + FadeOutAndFadeInNewMapMusic(MUS_RG_WIN_YASEI, 20, 10); + gUnknown_02022CF8->state++; + break; + case 11: + if (++gUnknown_02022CF8->unk301C >= 30 && gMain.newKeys & A_BUTTON) + { + gUnknown_02022CF8->unk301C = 0; + PlaySE(SE_SELECT); + gUnknown_02022CF8->state++; + } + break; + default: + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[1]); + RemoveWindow(gUnknown_02022CF8->unk3008[0]); + RemoveWindow(gUnknown_02022CF8->unk3008[1]); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->finished = TRUE; + break; + } +} + +static void sub_802A010(void) +{ + u8 y; + + switch (gUnknown_02022CF8->state) + { + case 0: + gUnknown_02022CF8->unk3008[0] = AddWindow(&gUnknown_082F7BD4[0]); + gUnknown_02022CF8->unk3008[1] = AddWindow(&gUnknown_082F7BD4[1]); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[1]); + sub_8029174(&gUnknown_082F7BD4[0]); + sub_8029074(&gUnknown_082F7BD4[1]); + gUnknown_02022CF8->state++; + gUnknown_02022CF8->unk3020 = 0; + gUnknown_02022CF8->unk3024 = 0; + break; + case 1: + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1)); + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[1], PIXEL_FILL(1)); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[0], 1, gText_WantToPlayAgain, 0, 5, -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_Yes, 8, 1, -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_No, 8, 17, -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_SelectorArrow2, 0, 1, -1, NULL); + CopyWindowToVram(gUnknown_02022CF8->unk3008[0], 2); + CopyWindowToVram(gUnknown_02022CF8->unk3008[1], 2); + gUnknown_02022CF8->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022CF8->unk3008[0]); + PutWindowTilemap(gUnknown_02022CF8->unk3008[1]); + } + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->state++; + break; + case 3: + y = gUnknown_02022CF8->unk3020; + if (y == 0) + y = 1; + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[1], PIXEL_FILL(1)); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_Yes, 8, 1, -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_No, 8, 17, -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_SelectorArrow2, 0, ((y - 1) * 16) + 1, -1, NULL); + CopyWindowToVram(gUnknown_02022CF8->unk3008[1], 3); + // Increment state only if A or B button have been pressed. + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gUnknown_02022CF8->unk3020 == 0) + gUnknown_02022CF8->unk3020 = 1; + gUnknown_02022CF8->state++; + } + else if (gMain.newKeys & (DPAD_UP | DPAD_DOWN)) + { + PlaySE(SE_SELECT); + switch (gUnknown_02022CF8->unk3020) + { + case 0: + gUnknown_02022CF8->unk3020 = 2; + break; + case 1: + gUnknown_02022CF8->unk3020 = 2; + break; + case 2: + gUnknown_02022CF8->unk3020 = 1; + break; + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_02022CF8->unk3020 = 2; + gUnknown_02022CF8->state++; + } + break; + default: + gUnknown_02022CF8->unk3024 = gUnknown_02022CF8->unk3020; + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[1]); + RemoveWindow(gUnknown_02022CF8->unk3008[0]); + RemoveWindow(gUnknown_02022CF8->unk3008[1]); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->finished = TRUE; + break; + } +} + +static void sub_802A380(void) +{ + switch (gUnknown_02022CF8->state) + { + case 0: + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3); + gUnknown_02022CF8->state++; + break; + case 1: + CopyWindowToVram(0, 3); + gUnknown_02022CF8->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + CreateTask(sub_8153688, 0); + gUnknown_02022CF8->state++; + } + break; + case 3: + if (!FuncIsActiveTask(sub_8153688)) + gUnknown_02022CF8->state++; + break; + default: + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->finished = TRUE; + break; + } +} + +static void sub_802A454(void) +{ + switch (gUnknown_02022CF8->state) + { + case 0: + gUnknown_02022CF8->unk3008[0] = AddWindow(&gUnknown_082F7BEC); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + sub_8029174(&gUnknown_082F7BEC); + gUnknown_02022CF8->state++; + break; + case 1: + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1)); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[0], 1, gText_CommunicationStandby3, 0, 5, -1, NULL); + CopyWindowToVram(gUnknown_02022CF8->unk3008[0], 2); + gUnknown_02022CF8->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + PutWindowTilemap(gUnknown_02022CF8->unk3008[0]); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->state++; + break; + default: + gUnknown_02022CF8->finished = TRUE; + break; + } +} + +static void sub_802A534(void) +{ + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + RemoveWindow(gUnknown_02022CF8->unk3008[0]); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->finished = TRUE; +} + +static void sub_802A588(void) +{ + switch (gUnknown_02022CF8->state) + { + case 0: + gUnknown_02022CF8->unk3008[0] = AddWindow(&gUnknown_082F7BE4); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + sub_8029174(&gUnknown_082F7BE4); + gUnknown_02022CF8->state++; + gUnknown_02022CF8->unk301C = 0; + gUnknown_02022CF8->unk3020 = 0; + gUnknown_02022CF8->unk3024 = 0; + break; + case 1: + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1)); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[0], 1, gText_SomeoneDroppedOut, 0, 5, -1, NULL); + CopyWindowToVram(gUnknown_02022CF8->unk3008[0], 2); + gUnknown_02022CF8->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + PutWindowTilemap(gUnknown_02022CF8->unk3008[0]); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->state++; + break; + case 3: + if (++gUnknown_02022CF8->unk301C >= 120) + gUnknown_02022CF8->state++; + break; + default: + gUnknown_02022CF8->unk3024 = 5; + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + RemoveWindow(gUnknown_02022CF8->unk3008[0]); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->finished = TRUE; + break; + } +} + +static void sub_802A6FC(void) +{ + DestroyTask(gUnknown_02022CF8->unk3004); + gUnknown_02022CF8->finished = TRUE; +} + +static void nullsub_16(void) +{ + +} + +static void sub_802A72C(void (*func)(void)) +{ + gUnknown_02022CF8->state = 0; + gUnknown_02022CF8->finished = FALSE; + gUnknown_02022CF8->unk3028 = func; +} + +static void (*sub_802A75C(void))(void) +{ + return gUnknown_02022CF8->unk3028; +} + +static bool32 sub_802A770(void) +{ + if (gUnknown_02022CF8->finished == TRUE) + return FALSE; + else + return TRUE; +} + +static u8 sub_802A794(void) +{ + return gUnknown_02022CF8->unk3024; +} + +static void sub_802A7A8(void) +{ + DmaClearLarge16(3, (void *)VRAM, VRAM_SIZE, 0x1000); + DmaClear32(3,(void *)OAM, OAM_SIZE); + DmaClear16(3, (void *)PLTT, PLTT_SIZE); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_082F7BA4, ARRAY_COUNT(gUnknown_082F7BA4)); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + InitStandardTextBoxWindows(); + sub_8197200(); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + SetBgTilemapBuffer(3, gUnknown_02022CF8->tilemapBuffers[0]); + SetBgTilemapBuffer(1, gUnknown_02022CF8->tilemapBuffers[1]); + SetBgTilemapBuffer(2, gUnknown_02022CF8->tilemapBuffers[2]); +} + +static bool32 sub_802A8E8(void) +{ + switch (gUnknown_02022CF8->unk3018) + { + case 0: + LoadPalette(gDodrioBerryBgPal1, 0, sizeof(gDodrioBerryBgPal1)); + break; + case 1: + reset_temp_tile_data_buffers(); + break; + case 2: + decompress_and_copy_tile_data_to_vram(3, gDodrioBerryBgGfx1, 0, 0, 0); + break; + case 3: + decompress_and_copy_tile_data_to_vram(1, gDodrioBerryBgGfx2, 0, 0, 0); + break; + case 4: + if (free_temp_tile_data_buffers_if_possible() == TRUE) + return FALSE; + break; + case 5: + LoadPalette(stdpal_get(3), 0xD0, 0x20); + break; + default: + gUnknown_02022CF8->unk3018 = 0; + return TRUE; + } + + gUnknown_02022CF8->unk3018++; + return FALSE; +} 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 605cd0366..5e16f1479 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -73,7 +73,7 @@ static void CreateRandomEggShardSprite(void); static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex); // IWRAM bss -static IWRAM_DATA struct EggHatchData *sEggHatchData; +static struct EggHatchData *sEggHatchData; // rom data static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/normal.gbapal"); @@ -322,7 +322,7 @@ 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++) { 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 cd64afe0e..11aaaafe7 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -26,17 +26,17 @@ static void sub_81D414C(void); static void sub_81D3F1C(u32, u32*, u32*); static void sub_81D3F68(void); -IWRAM_DATA struct Unknown030012C8 gUnknown_030012C8; -IWRAM_DATA u16 gUnknown_030012E0; -IWRAM_DATA u16 gUnknown_030012E2; -IWRAM_DATA u16 gUnknown_030012E4; -IWRAM_DATA u16 gUnknown_030012E6; -IWRAM_DATA u32 gUnknown_030012E8; -IWRAM_DATA u16 gUnknown_030012EC; -IWRAM_DATA u16 gUnknown_030012EE; -IWRAM_DATA u16 gUnknown_030012F0; -IWRAM_DATA u16 gUnknown_030012F2; -IWRAM_DATA u16 gUnknown_030012F4; +static struct Unknown030012C8 gUnknown_030012C8; +static u16 gUnknown_030012E0; +static u16 gUnknown_030012E2; +static u16 gUnknown_030012E4; +static u16 gUnknown_030012E6; +static u32 gUnknown_030012E8; +static u16 gUnknown_030012EC; +static u16 gUnknown_030012EE; +static u16 gUnknown_030012F0; +static u16 gUnknown_030012F2; +static u16 gUnknown_030012F4; extern const u8 gUnknown_08625B6C[][0x148]; diff --git a/src/ereader_screen.c b/src/ereader_screen.c index f74efa32b..98f0d9b8c 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -38,7 +38,7 @@ struct Unk03006370 static void sub_81D5084(u8); -extern struct Unk03006370 gUnknown_03006370; +struct Unk03006370 gUnknown_03006370; extern const u8 gUnknown_089A3470[]; extern const u8 gMultiBootProgram_BerryGlitchFix_Start[]; diff --git a/src/field_camera.c b/src/field_camera.c index b976cf2ff..7f294afdb 100644 --- a/src/field_camera.c +++ b/src/field_camera.c @@ -36,11 +36,11 @@ static void DrawMetatile(s32 a, u16 *b, u16 c); static void CameraPanningCB_PanAhead(void); // IWRAM bss vars -static IWRAM_DATA struct FieldCameraOffset sFieldCameraOffset; -static IWRAM_DATA s16 sHorizontalCameraPan; -static IWRAM_DATA s16 sVerticalCameraPan; -static IWRAM_DATA u8 gUnknown_03000E2C; -static IWRAM_DATA void (*sFieldCameraPanningCallback)(void); +static struct FieldCameraOffset sFieldCameraOffset; +static s16 sHorizontalCameraPan; +static s16 sVerticalCameraPan; +static u8 gUnknown_03000E2C; +static void (*sFieldCameraPanningCallback)(void); struct CameraObject gFieldCamera; u16 gTotalCameraPixelOffsetY; diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 455c38deb..8a41087f5 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -304,7 +304,7 @@ static const u8 *GetInteractedEventObjectScript(struct MapPosition *position, u8 gSpecialVar_Facing = direction; if (InTrainerHill() == TRUE) - script = sub_81D62AC(); + script = GetTrainerHillTrainerScript(); else script = GetEventObjectScriptPointerByEventObjectId(eventObjectId); diff --git a/src/field_effect.c b/src/field_effect.c index 22bf44f28..7569bdc75 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -232,7 +232,7 @@ static void Fldeff_MoveDeoxysRock_Step(u8 taskId); // Static RAM declarations -static IWRAM_DATA u8 sActiveList[32]; +static u8 sActiveList[32]; // External declarations extern struct CompressedSpritePalette gMonPaletteTable[]; // GF made a mistake and did not extern it as const. diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index b322fc1c7..6d62cdc4a 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -336,14 +336,9 @@ void player_step(u8 direction, u16 newKeys, u16 heldKeys) static bool8 TryInterruptEventObjectSpecialAnim(struct EventObject *playerEventObj, u8 direction) { - #ifdef NONMATCHING - u8 r5 = direction; - u8 r6 = direction; - #else - u8 r5 = direction; - register u8 r6 asm("r6") = direction; - #endif - //a very bad HACK + u8 r5 = direction; + u8 r6 = direction; + r6++; r6--; if (EventObjectIsMovementOverridden(playerEventObj) && !EventObjectClearHeldMovementIfFinished(playerEventObj)) diff --git a/src/field_specials.c b/src/field_specials.c index efe77bd70..99e8e93a9 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1442,7 +1442,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, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0); monData = TRUE; SetMonData(&gPlayerParty[0], MON_DATA_ABILITY_NUM, &monData); monData = MOVE_TACKLE; diff --git a/src/field_weather.c b/src/field_weather.c index 814e85ef4..024b6631f 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -68,7 +68,7 @@ static u8 None_Finish(void); EWRAM_DATA struct Weather gWeather = {0}; EWRAM_DATA static u8 sFieldEffectPaletteGammaTypes[32] = {0}; -IWRAM_DATA static const u8 *sPaletteGammaTypes; +static const u8 *sPaletteGammaTypes; // The drought weather effect uses a precalculated color lookup table. Presumably this // is because the underlying color shift calculation is slow. 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 d428dc13b..2998d46ca 100644 --- a/src/fire.c +++ b/src/fire.c @@ -891,6 +891,7 @@ static void sub_81094D0(u8 taskId) // animate Move_ERUPTION? break; default: + break; } } diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 68c50cae7..3115ff231 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -59,11 +59,11 @@ static void CutGrassSpriteCallbackEnd(struct Sprite *); static void HandleLongGrassOnHyper(u8, s16, s16); // IWRAM variables -static IWRAM_DATA u8 sCutSquareSide; -static IWRAM_DATA u8 sTileCountFromPlayer_X; -static IWRAM_DATA u8 sTileCountFromPlayer_Y; -static IWRAM_DATA u32 sUnused; -static IWRAM_DATA bool8 sHyperCutTiles[CUT_HYPER_AREA]; +static u8 sCutSquareSide; +static u8 sTileCountFromPlayer_X; +static u8 sTileCountFromPlayer_Y; +static u32 sUnused; +static bool8 sHyperCutTiles[CUT_HYPER_AREA]; // EWRAM variables static EWRAM_DATA u8 *sCutGrassSpriteArrayPtr = NULL; diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index c002f700f..a2457307b 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -219,8 +219,8 @@ static void sub_8137404(u8 taskId) static void sub_8137420(u8 taskId) { SetGpuReg(REG_OFFSET_DISPCNT, 0); - LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000); - LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800); + LZ77UnCompVram(gCaveTransitionTiles, (void *)(VRAM + 0xC000)); + LZ77UnCompVram(gCaveTransitionTilemap, (void *)(VRAM + 0xF800)); LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20); LoadPalette(gUnknown_085B28A0, 0xE0, 0x10); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 @@ -304,8 +304,8 @@ static void sub_81375BC(u8 taskId) static void sub_81375D8(u8 taskId) { SetGpuReg(REG_OFFSET_DISPCNT, 0); - LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000); - LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800); + LZ77UnCompVram(gCaveTransitionTiles, (void *)(VRAM + 0xC000)); + LZ77UnCompVram(gCaveTransitionTilemap, (void *)(VRAM + 0xF800)); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); SetGpuReg(REG_OFFSET_BLDY, 0); 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..536e23e30 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -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 97b86aa76..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 { @@ -1148,7 +1148,8 @@ static void sub_8112B78(struct Sprite *sprite) if (++coeffB > 16) coeffB = 16; - if (--(s16)coeffA < 0) + --coeffA; + if ((s16)coeffA < 0) coeffA = 0; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(coeffA, coeffB)); diff --git a/src/gpu_regs.c b/src/gpu_regs.c index e5ff4fe8f..3bcc4fd93 100644 --- a/src/gpu_regs.c +++ b/src/gpu_regs.c @@ -10,9 +10,9 @@ static u8 sGpuRegBuffer[GPU_REG_BUF_SIZE]; static u8 sGpuRegWaitingList[GPU_REG_BUF_SIZE]; -static bool8 sGpuRegBufferLocked; -static bool8 sShouldSyncRegIE; -static u16 sRegIE; +static volatile bool8 sGpuRegBufferLocked; +static volatile bool8 sShouldSyncRegIE; +static vu16 sRegIE; static void CopyBufferedValueToGpuReg(u8 regOffset); static void SyncRegIE(void); 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/item.c b/src/item.c index fe8e8eadd..5e505724c 100644 --- a/src/item.c +++ b/src/item.c @@ -18,6 +18,9 @@ extern u16 gUnknown_0203CF30[]; // this file's functions +#if !defined(NONMATCHING) && MODERN +#define static +#endif static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count); static bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count); diff --git a/src/item_menu.c b/src/item_menu.c index a8d1d4445..12f03b328 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -81,7 +81,7 @@ void TaskCloseBagMenu_2(u8); u8 AddItemMessageWindow(u8); void bag_menu_RemoveBagItem_message_window(u8); void set_callback3_to_bag(u8); -void sub_81ABC54(u8, s16); +void PrintItemDepositAmount(u8, s16); u8 BagMenu_AddWindow(u8); u8 GetSwitchBagPocketDirection(void); void SwitchBagPocket(u8, s16, u16); @@ -118,16 +118,16 @@ 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); u8 sub_81AB1F0(u8); void sub_81AC23C(u8); void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu*); -void PrintItemQuantityPlusGFX(u8 rboxId, int item_index_in_pocket, u8 a); +void PrintItemQuantityPlusGFX(u8 rboxId, s32 item_index_in_pocket, u8 a); void ItemMenu_UseOutOfBattle(u8 taskId); void ItemMenu_Toss(u8 taskId); void ItemMenu_Register(u8 taskId); @@ -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; } @@ -830,7 +830,7 @@ void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu *unused) } } -void PrintItemQuantityPlusGFX(u8 rboxId, int item_index_in_pocket, u8 a) +void PrintItemQuantityPlusGFX(u8 rboxId, s32 item_index_in_pocket, u8 a) { u16 itemId; u16 itemQuantity; @@ -1050,10 +1050,10 @@ void BagMenu_InitListsMenu(u8 taskId) void sub_81ABC3C(u8 a) { - sub_81ABC54(BagMenu_AddWindow(a), 1); + PrintItemDepositAmount(BagMenu_AddWindow(a), 1); } -void sub_81ABC54(u8 a, s16 b) +void PrintItemDepositAmount(u8 a, s16 b) { u8 r3 = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2; ConvertIntToDecimalStringN(gStringVar1, b, 2, r3); @@ -1704,7 +1704,7 @@ void Task_ChooseHowManyToToss(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_81ABC54(gBagMenu->unk817, data[8]); + PrintItemDepositAmount(gBagMenu->unk817, data[8]); } else if (gMain.newKeys & A_BUTTON) { @@ -2056,7 +2056,7 @@ void sub_81ADA7C(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_81ABC54(gBagMenu->unk817, data[8]); + PrintItemDepositAmount(gBagMenu->unk817, data[8]); } else if (gMain.newKeys & A_BUTTON) { @@ -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/librfu.c b/src/librfu.c new file mode 100644 index 000000000..cdf14b693 --- /dev/null +++ b/src/librfu.c @@ -0,0 +1,9 @@ +#include "global.h" +#include "librfu.h" + +struct RfuUnk1* gUnknown_03007870[4]; +struct RfuUnk2* gUnknown_03007880[4]; +struct RfuUnk5 *gUnknown_03007890; +u32 *gUnknown_03007894; +struct RfuUnk3* gUnknown_03007898; +u8 gUnknown_030078A0[12]; diff --git a/src/librfu_intr.c b/src/librfu_intr.c index bdf8b072a..c6db9a50c 100644 --- a/src/librfu_intr.c +++ b/src/librfu_intr.c @@ -1,4 +1,5 @@ #include "global.h" #include "main.h" +#include "librfu.h" //TODO: decompile asm/librfu_intr.s to here diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c index 556b79bf8..670692118 100644 --- a/src/librfu_stwi.c +++ b/src/librfu_stwi.c @@ -1,6 +1,8 @@ #include "global.h" #include "librfu.h" +struct RfuStruct *gRfuState; + extern IntrFunc IntrSIO32(void); extern void STWI_stop_timer(void); 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/src/link.c b/src/link.c index bcdcb52a4..9928b48da 100644 --- a/src/link.c +++ b/src/link.c @@ -52,22 +52,21 @@ struct LinkTestBGInfo // Static RAM declarations -IWRAM_DATA struct BlockTransfer sBlockSend; -IWRAM_DATA u32 link_c_unused_03000d1c; -IWRAM_DATA struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS]; -IWRAM_DATA u32 sBlockSendDelayCounter; -IWRAM_DATA u32 gUnknown_03000D54; -IWRAM_DATA u8 gUnknown_03000D58; -IWRAM_DATA u32 sPlayerDataExchangeStatus; -IWRAM_DATA u32 gUnknown_03000D60; -IWRAM_DATA u8 sLinkTestLastBlockSendPos; -ALIGNED() IWRAM_DATA u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; -IWRAM_DATA u8 sNumVBlanksWithoutSerialIntr; -IWRAM_DATA bool8 sSendBufferEmpty; -IWRAM_DATA u16 sSendNonzeroCheck; -IWRAM_DATA u16 sRecvNonzeroCheck; -IWRAM_DATA u8 sChecksumAvailable; -IWRAM_DATA u8 sHandshakePlayerCount; +static struct BlockTransfer sBlockSend; +static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS]; +static u32 sBlockSendDelayCounter; +static u32 gUnknown_03000D54; +static u8 gUnknown_03000D58; +static u32 sPlayerDataExchangeStatus; +static u32 gUnknown_03000D60; +static u8 sLinkTestLastBlockSendPos; +static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; +static u8 sNumVBlanksWithoutSerialIntr; +static bool8 sSendBufferEmpty; +static u16 sSendNonzeroCheck; +static u16 sRecvNonzeroCheck; +static u8 sChecksumAvailable; +static u8 sHandshakePlayerCount; u16 gLinkPartnersHeldKeys[6]; u32 gLinkDebugSeed; diff --git a/src/link_rfu.c b/src/link_rfu.c index 9732e9889..4b0b0a2a5 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -24,10 +24,10 @@ extern u16 gHeldKeyCodeToSend; struct UnkRfuStruct_1 gUnknown_03004140; struct UnkRfuStruct_2 gUnknown_03005000; -IWRAM_DATA u8 gUnknown_03000D74; -ALIGNED(4) IWRAM_DATA u8 gUnknown_03000D78[8]; -IWRAM_DATA u8 gUnknown_03000D80[16]; -IWRAM_DATA u16 gUnknown_03000D90[8]; +BSS_DATA u8 gUnknown_03000D74; +ALIGNED(4) BSS_DATA u8 gUnknown_03000D78[8]; +BSS_DATA u8 gUnknown_03000D80[16]; +BSS_DATA u16 gUnknown_03000D90[8]; EWRAM_DATA u8 gWirelessStatusIndicatorSpriteId = 0; EWRAM_DATA ALIGNED(4) struct UnkLinkRfuStruct_02022B14 gUnknown_02022B14 = {}; @@ -2021,6 +2021,8 @@ void sub_800DBF8(u8 *q1, u8 mode) } } +// File boundary here maybe? + void PkmnStrToASCII(u8 *q1, const u8 *q2) { s32 i; @@ -2413,7 +2415,7 @@ void RecordMixTrainerNames(void) } } } - + // Save the connected trainers first, at the top of the list. nextSpace = 0; for (i = 0; i < GetLinkPlayerCount(); i++) @@ -2444,7 +2446,7 @@ void RecordMixTrainerNames(void) } } } - + // Finalize the new list, and clean up. memcpy(gSaveBlock1Ptr->trainerNameRecords, newRecords, 20 * sizeof(struct TrainerNameRecord)); free(newRecords); @@ -2480,7 +2482,7 @@ void WipeTrainerNameRecords(void) } } -void nullsub_5(const char *unused_0, u8 unused_1, u8 unused_2) +void nullsub_5(const void *unused_0, u8 unused_1, u8 unused_2) { // debug? } @@ -2510,7 +2512,7 @@ void sub_800E604(void) sub_800D724(&gUnknown_03005000.unk_9e8); CpuFill16(0, gSendCmd, sizeof gSendCmd); CpuFill16(0, gRecvCmds, sizeof gRecvCmds); - CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers) + CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers); } void sub_800E6D0(void) @@ -2914,70 +2916,21 @@ void sub_800EF88(u8 a0) } } -#ifdef NONMATCHING -// FIXME: gUnknown_03005000.unk_c87 should be in r5 -// FIXME: gRecvCmds should be in r6 and r7 void sub_800EFB0(void) { s32 i, j; + for (i = 0; i < 5; i++) { + struct UnkRfuStruct_2 *ptr = &gUnknown_03005000; for (j = 0; j < 7; j++) { - gUnknown_03005000.unk_c87[i][j][1] = gRecvCmds[i][j] >> 8; - gUnknown_03005000.unk_c87[i][j][0] = gRecvCmds[i][j]; + ptr->unk_c87[i][j][1] = gRecvCmds[i][j] >> 8; + ptr->unk_c87[i][j][0] = gRecvCmds[i][j]; } } CpuFill16(0, gRecvCmds, sizeof gRecvCmds); } -#else -NAKED void sub_800EFB0(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tsub sp, 0x4\n" - "\tmovs r2, 0\n" - "\tldr r7, =gRecvCmds\n" - "\tldr r0, =gUnknown_03005000\n" - "\tadds r6, r7, 0\n" - "\tldr r1, =0x00000c87\n" - "\tadds r5, r0, r1\n" - "_0800EFC0:\n" - "\tmovs r3, 0\n" - "\tlsls r0, r2, 3\n" - "\tlsls r1, r2, 4\n" - "\tadds r4, r2, 0x1\n" - "\tsubs r0, r2\n" - "\tlsls r0, 1\n" - "\tadds r2, r0, r5\n" - "\tadds r1, r6\n" - "_0800EFD0:\n" - "\tldrh r0, [r1]\n" - "\tlsrs r0, 8\n" - "\tstrb r0, [r2, 0x1]\n" - "\tldrh r0, [r1]\n" - "\tstrb r0, [r2]\n" - "\tadds r2, 0x2\n" - "\tadds r1, 0x2\n" - "\tadds r3, 0x1\n" - "\tcmp r3, 0x6\n" - "\tble _0800EFD0\n" - "\tadds r2, r4, 0\n" - "\tcmp r2, 0x4\n" - "\tble _0800EFC0\n" - "\tmovs r0, 0\n" - "\tmov r1, sp\n" - "\tstrh r0, [r1]\n" - "\tldr r2, =0x01000028\n" - "\tmov r0, sp\n" - "\tadds r1, r7, 0\n" - "\tbl CpuSet\n" - "\tadd sp, 0x4\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.pool"); -} -#endif void sub_800F014(void) { @@ -3542,7 +3495,7 @@ void sub_800FD14(u16 command) } } -void sub_800FE50(u16 *a0) +void sub_800FE50(void *a0) { if (gSendCmd[0] == 0 && !sub_8011A80()) { @@ -5191,4 +5144,3 @@ u32 GetRfuRecvQueueLength(void) { return gUnknown_03005000.unk_124.unk_8c2; } - diff --git a/src/load_save.c b/src/load_save.c index 150c557c6..5857f2b46 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -42,10 +42,10 @@ EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0}; EWRAM_DATA u32 gLastEncryptionKey = 0; // IWRAM common -IWRAM_DATA bool32 gFlashMemoryPresent; -IWRAM_DATA struct SaveBlock1 *gSaveBlock1Ptr; -IWRAM_DATA struct SaveBlock2 *gSaveBlock2Ptr; -IWRAM_DATA struct PokemonStorage *gPokemonStoragePtr; +bool32 gFlashMemoryPresent; +struct SaveBlock1 *gSaveBlock1Ptr; +struct SaveBlock2 *gSaveBlock2Ptr; +struct PokemonStorage *gPokemonStoragePtr; // code void CheckForFlashMemory(void) @@ -1,3 +1,4 @@ +#include <string.h> #include "gba/m4a_internal.h" extern const u8 gCgb3Vol[]; 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/main.c b/src/main.c index 40381bb68..06425e661 100644 --- a/src/main.c +++ b/src/main.c @@ -85,7 +85,27 @@ void EnableVCountIntrAtLine150(void); void AgbMain() { +#if MODERN + // Modern compilers are liberal with the stack on entry to this function, + // so RegisterRamReset may crash if it resets IWRAM. + RegisterRamReset(RESET_ALL & ~RESET_IWRAM); + asm("mov\tr1, #0xC0\n" + "\tlsl\tr1, r1, #0x12\n" + "\tmov r2, #0xFC\n" + "\tlsl r2, r2, #0x7\n" + "\tadd\tr2, r1, r2\n" + "\tmov\tr0, #0\n" + "\tmov\tr3, r0\n" + "\tmov\tr4, r0\n" + "\tmov\tr5, r0\n" + ".LCU0:\n" + "\tstmia r1!, {r0, r3, r4, r5}\n" + "\tcmp\tr1, r2\n" + "\tbcc\t.LCU0\n" + ); +#else RegisterRamReset(RESET_ALL); +#endif //MODERN *(vu16 *)BG_PLTT = 0x7FFF; InitGpuRegManager(); REG_WAITCNT = WAITCNT_PREFETCH_ENABLE | WAITCNT_WS0_S_1 | WAITCNT_WS0_N_3; diff --git a/src/main_menu.c b/src/main_menu.c index bc509c70d..6a0bd9e2d 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -176,7 +176,7 @@ static EWRAM_DATA u8 gUnknown_02022D04 = 0; static EWRAM_DATA u16 sCurrItemAndOptionMenuCheck = 0; -static IWRAM_DATA u8 sBirchSpeechMainTaskId; +static u8 sBirchSpeechMainTaskId; // Static ROM declarations diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 8bb9cb6e4..64f04f3bc 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -33,7 +33,7 @@ static void Task_BardSong(u8 taskId); static void StorytellerSetup(void); static void Storyteller_ResetFlag(void); -IWRAM_DATA u8 sSelectedStory; +static u8 sSelectedStory; struct BardSong gBardSong; diff --git a/src/menu.c b/src/menu.c index 354346d27..8d50d4dcc 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1,6 +1,7 @@ #include "global.h" #include "alloc.h" #include "bg.h" +#include "blit.h" #include "dma3.h" #include "event_data.h" #include "graphics.h" @@ -2013,337 +2014,82 @@ void PrintPlayerNameOnWindow(u8 windowId, const u8 *src, u16 x, u16 y) AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, 0xFF, 0); } -//Screw this function, it's long and unreferenced and ugh +// Unused. Similar to BlitBitmapRect4Bit. +void sub_819A080(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height) +{ + int loopSrcY, loopDstY, loopSrcX, loopDstX, xEnd, yEnd, multiplierSrcY, multiplierDstY; + const u8 *pixelsSrc; + u16 *pixelsDst; + u16 toOrr; -struct UnkStruct_819A080 { - u8 *unk00; - u16 unk04; - u16 unk06; -}; + if (dst->width - dstX < width) + xEnd = dst->width - dstX + srcX; + else + xEnd = width + srcX; + + if (dst->height - dstY < height) + yEnd = srcY + dst->height - dstY; + else + yEnd = srcY + height; -#ifdef NONMATCHING -void sub_819A080(struct UnkStruct_819A080 *a0, struct UnkStruct_819A080 *a1, u16 a2, u16 a3, u16 a4, u16 a5, u16 a6, u16 a7) -{ - // r3 = a3 - // r4 = a5 - // r1 = a6 - // r5 = a7 - // sp+00 = a0 - // sp+04 = a1 - // sp+08 = a2 - // sp+0c = a4 - int sp10 = a1->unk04 - a4 < a6 ? a1->unk04 - a4 + a2 : a6 + a2; - int sp14 = a0->unk06 - a5 < a7 ? a3 + a0->unk06 - a5 : a3 + a7; - int sp18 = (a0->unk04 + (a0->unk04 & 0x7)) / 8; - int sp1c = (a1->unk04 + (a1->unk04 & 0x7)) / 8; - int r12; // sp+20 - int r8; // sp+24 - int r5; - int r6; - u16 r2; - - for (r12 = a3, r8 = a5; r12 < sp14; r12++, r8++) - { - for (r5 = a2, r6 = a4; a5 < sp10; a5++, a6++) + multiplierSrcY = (src->width + (src->width & 7)) >> 3; + multiplierDstY = (dst->width + (dst->width & 7)) >> 3; + + for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++) + { + for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++) { - u8 *r3 = a0->unk00 + ((r5 >> 1) & 0x3) + ((r5 >> 3) << 5) + (((r12 >> 3) * sp18) << 5) + ((r12 & 0x7) << 2); - u8 *r4 = a1->unk00 + ((r6 >> 1) & 0x3) + ((r6 >> 3) << 5) + (((r8 >> 3) * sp1c) << 5) + ((r8 & 0x7) << 2); - if (((uintptr_t)r4) & 0x1) + pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B); + pixelsDst = (void*) dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)( loopDstY << 0x1d) >> 0x1B); + + if ((uintptr_t )pixelsDst & 0x1) { - u16 *r4_2 = (u16 *)(r4 - 1); - if (r6 & 0x1) + pixelsDst = (void*)(pixelsDst) - 1; + if (loopDstX & 0x1) { - r2 = *r4_2 & 0x0fff; - if (r5 & 0x1) - *r4_2 = r2 | ((*r3 & 0xf0) << 8); + toOrr = *pixelsDst & 0x0fff; + if (loopSrcX & 0x1) + *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 8); else - *r4_2 = r2 | ((*r3 & 0x0f) << 12); + *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 12); } else { - r2 = *r4_2 * 0xf0ff; - if (r5 & 0x1) - *r4_2 = r2 | ((*r3 & 0xf0) << 4); + toOrr = *pixelsDst & 0xf0ff; + if (loopSrcX & 0x1) + *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 4); else - *r4_2 = r2 | ((*r3 & 0x0f) << 8); + *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 8); } } else { - u16 *r4_2 = (u16 *)r4; - if (r6 & 1) + if (loopDstX & 1) { - r2 = *r4_2 & 0xff0f; - if (r5 & 1) - *r4_2 = r2 | ((*r3 & 0xf0) << 0); + toOrr = *pixelsDst & 0xff0f; + if (loopSrcX & 1) + *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 0); else - *r4_2 = r2 | ((*r3 & 0x0f) << 4); + *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 4); } else { - r2 = *r4_2 & 0xfff0; - if (r5 & 1) - *r4_2 = r2 | ((*r3 & 0xf0) >> 4); + toOrr = *pixelsDst & 0xfff0; + if (loopSrcX & 1) + *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) >> 4); else - *r4_2 = r2 | ((*r3 & 0x0f) >> 0); + *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) >> 0); } } + + // Needed to match, urgh. + #ifndef NONMATCHING + asm("":::"r4"); + pixelsDst++;pixelsDst--; + #endif // NONMATCHING } } } -#else -NAKED -void sub_819A080(struct UnkStruct_819A080 *a0, struct UnkStruct_819A080 *a1, u16 a2, u16 a3, u16 a4, u16 a5, u16 a6, u16 a7) -{ - asm("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, #0x28\n\ - str r0, [sp]\n\ - str r1, [sp, #0x4]\n\ - ldr r0, [sp, #0x48]\n\ - ldr r4, [sp, #0x4C]\n\ - ldr r1, [sp, #0x50]\n\ - ldr r5, [sp, #0x54]\n\ - lsl r2, #16\n\ - lsr r2, #16\n\ - str r2, [sp, #0x8]\n\ - lsl r3, #16\n\ - lsr r3, #16\n\ - lsl r0, #16\n\ - lsr r0, #16\n\ - str r0, [sp, #0xC]\n\ - lsl r4, #16\n\ - lsr r4, #16\n\ - lsl r1, #16\n\ - lsr r1, #16\n\ - lsl r5, #16\n\ - lsr r5, #16\n\ - ldr r2, [sp, #0x4]\n\ - ldrh r0, [r2, #0x4]\n\ - ldr r2, [sp, #0xC]\n\ - sub r0, r2\n\ - ldr r2, [sp, #0x8]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x10]\n\ - cmp r0, r1\n\ - bge _0819A0CC\n\ - ldr r1, [sp, #0x8]\n\ - add r0, r1\n\ - str r0, [sp, #0x10]\n\ -_0819A0CC:\n\ - ldr r2, [sp, #0x4]\n\ - ldrh r1, [r2, #0x6]\n\ - sub r0, r1, r4\n\ - cmp r0, r5\n\ - bge _0819A0DE\n\ - add r0, r3, r1\n\ - sub r0, r4\n\ - str r0, [sp, #0x14]\n\ - b _0819A0E2\n\ -_0819A0DE:\n\ - add r5, r3, r5\n\ - str r5, [sp, #0x14]\n\ -_0819A0E2:\n\ - ldr r0, [sp]\n\ - ldrh r1, [r0, #0x4]\n\ - mov r2, #0x7\n\ - add r0, r1, #0\n\ - and r0, r2\n\ - add r1, r0\n\ - asr r1, #3\n\ - str r1, [sp, #0x18]\n\ - ldr r0, [sp, #0x4]\n\ - ldrh r1, [r0, #0x4]\n\ - add r0, r1, #0\n\ - and r0, r2\n\ - add r1, r0\n\ - asr r1, #3\n\ - str r1, [sp, #0x1C]\n\ - mov r12, r3\n\ - mov r8, r4\n\ - ldr r1, [sp, #0x14]\n\ - cmp r12, r1\n\ - blt _0819A10C\n\ - b _0819A24A\n\ -_0819A10C:\n\ - ldr r5, [sp, #0x8]\n\ - ldr r6, [sp, #0xC]\n\ - mov r2, r12\n\ - add r2, #0x1\n\ - str r2, [sp, #0x20]\n\ - mov r0, r8\n\ - add r0, #0x1\n\ - str r0, [sp, #0x24]\n\ - ldr r1, [sp, #0x10]\n\ - cmp r5, r1\n\ - blt _0819A124\n\ - b _0819A23A\n\ -_0819A124:\n\ - mov r7, #0x1\n\ - mov r2, #0xF0\n\ - mov r10, r2\n\ - mov r0, #0xF\n\ - mov r9, r0\n\ -_0819A12E:\n\ - asr r0, r5, #1\n\ - mov r1, #0x3\n\ - and r0, r1\n\ - ldr r2, [sp]\n\ - ldr r1, [r2]\n\ - add r1, r0\n\ - asr r0, r5, #3\n\ - lsl r0, #5\n\ - add r1, r0\n\ - mov r2, r12\n\ - asr r0, r2, #3\n\ - ldr r2, [sp, #0x18]\n\ - mul r0, r2\n\ - lsl r0, #5\n\ - add r1, r0\n\ - mov r2, r12\n\ - lsl r0, r2, #29\n\ - lsr r0, #27\n\ - add r3, r1, r0\n\ - asr r0, r6, #1\n\ - mov r1, #0x3\n\ - and r0, r1\n\ - ldr r2, [sp, #0x4]\n\ - ldr r1, [r2]\n\ - add r1, r0\n\ - asr r0, r6, #3\n\ - lsl r0, #5\n\ - add r1, r0\n\ - mov r2, r8\n\ - asr r0, r2, #3\n\ - ldr r2, [sp, #0x1C]\n\ - mul r0, r2\n\ - lsl r0, #5\n\ - add r1, r0\n\ - mov r2, r8\n\ - lsl r0, r2, #29\n\ - lsr r0, #27\n\ - add r4, r1, r0\n\ - add r0, r4, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A1DA\n\ - sub r4, #0x1\n\ - add r0, r6, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A1B2\n\ - ldrh r0, [r4]\n\ - ldr r2, =0x00000fff\n\ - and r2, r0\n\ - add r0, r5, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A1A8\n\ - ldrb r1, [r3]\n\ - mov r0, r10\n\ - and r0, r1\n\ - lsl r0, #8\n\ - b _0819A22A\n\ - .pool\n\ -_0819A1A8:\n\ - ldrb r1, [r3]\n\ - mov r0, r9\n\ - and r0, r1\n\ - lsl r0, #12\n\ - b _0819A22A\n\ -_0819A1B2:\n\ - ldrh r0, [r4]\n\ - ldr r2, =0x0000f0ff\n\ - and r2, r0\n\ - add r0, r5, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A1D0\n\ - ldrb r1, [r3]\n\ - mov r0, r10\n\ - and r0, r1\n\ - lsl r0, #4\n\ - b _0819A22A\n\ - .pool\n\ -_0819A1D0:\n\ - ldrb r1, [r3]\n\ - mov r0, r9\n\ - and r0, r1\n\ - lsl r0, #8\n\ - b _0819A22A\n\ -_0819A1DA:\n\ - add r0, r6, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A206\n\ - ldrh r0, [r4]\n\ - ldr r2, =0x0000ff0f\n\ - and r2, r0\n\ - add r0, r5, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A1FC\n\ - ldrb r1, [r3]\n\ - mov r0, r10\n\ - b _0819A228\n\ - .pool\n\ -_0819A1FC:\n\ - ldrb r1, [r3]\n\ - mov r0, r9\n\ - and r0, r1\n\ - lsl r0, #4\n\ - b _0819A22A\n\ -_0819A206:\n\ - ldrh r0, [r4]\n\ - ldr r2, =0x0000fff0\n\ - and r2, r0\n\ - add r0, r5, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A224\n\ - ldrb r1, [r3]\n\ - mov r0, r10\n\ - and r0, r1\n\ - lsr r0, #4\n\ - b _0819A22A\n\ - .pool\n\ -_0819A224:\n\ - ldrb r1, [r3]\n\ - mov r0, r9\n\ -_0819A228:\n\ - and r0, r1\n\ -_0819A22A:\n\ - orr r2, r0\n\ - strh r2, [r4]\n\ - add r5, #0x1\n\ - add r6, #0x1\n\ - ldr r0, [sp, #0x10]\n\ - cmp r5, r0\n\ - bge _0819A23A\n\ - b _0819A12E\n\ -_0819A23A:\n\ - ldr r1, [sp, #0x20]\n\ - mov r12, r1\n\ - ldr r2, [sp, #0x24]\n\ - mov r8, r2\n\ - ldr r0, [sp, #0x14]\n\ - cmp r12, r0\n\ - bge _0819A24A\n\ - b _0819A10C\n\ -_0819A24A:\n\ - add sp, #0x28\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n"); -} -#endif void sub_819A25C(u8 palOffset, u16 speciesId) { diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 801e2546b..cb0d621c6 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -27,7 +27,7 @@ EWRAM_DATA static struct YesNoFuncTable gUnknown_0203A138 = {0}; EWRAM_DATA static u8 gUnknown_0203A140 = 0; // IWRAM bss vars -IWRAM_DATA static TaskFunc gUnknown_0300117C; +static TaskFunc gUnknown_0300117C; // const rom data static const struct OamData sOamData_859F4E8 = diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 34dd1fe2b..1536cf413 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -458,338 +458,106 @@ void sub_81D2230(struct UnknownStruct_81D1ED4 *arg0) arg0->unk354 = 1; } -/* TODO -static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 arg1[66][2], struct UnknownSubStruct_81D1ED4 *arg2, struct UnknownSubStruct_81D1ED4 *arg3, u8 arg4, u16 arg5[66][2]) +static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 *arg1, struct UnknownSubStruct_81D1ED4 *arg2, struct UnknownSubStruct_81D1ED4 *arg3, u8 arg4, u16 *arg5) { - s32 var_2C = 0; - u16 r8; - s32 r10, r4, r2, r0, r1, var_30; + u16 i, r8, r10, r0, var_30; + u16 *ptr; + s32 r4, var_2C; + var_2C = 0; if (arg2->unk2 < arg3->unk2) { - r2 = arg2->unk2; r10 = arg2->unk2; r0 = arg3->unk2; - r1 = arg2->unk0; - r4 = r1 << 10; + r4 = arg2->unk0 << 10; var_30 = arg3->unk0; + r8 = r0 - r10; + if (r8 != 0) + var_2C = ((var_30 - arg2->unk0) << 10) / r8; } else { - r0 = arg2->unk0; + r0 = arg2->unk2; r10 = arg3->unk2; - r1 = arg3->unk0; - r4 = r1 << 10; + r4 = arg3->unk0 << 10; var_30 = arg2->unk0; - r2 = arg3->unk2; + r8 = r0 - r10; + if (r8 != 0) + var_2C = ((var_30 - arg3->unk0) << 10) / r8; } - r8 = r0 - r2; - if (r8 != 0) - var_2C = ((var_30 - r1) << 10) / r8; r8++; if (arg5 == NULL) { + arg1 += (r10 - 56) * 2; + for (i = 0; i < r8; i++) + { + arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; + r4 += var_2C; + arg1 += 2; + } + ptr = arg1 - 2; } -} -*/ -NAKED -static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 arg1[66][2], struct UnknownSubStruct_81D1ED4 *arg2, struct UnknownSubStruct_81D1ED4 *arg3, u8 arg4, u16 arg5[66][2]) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x18\n\ - str r0, [sp]\n\ - adds r6, r1, 0\n\ - adds r5, r2, 0\n\ - str r3, [sp, 0x4]\n\ - ldr r0, [sp, 0x38]\n\ - ldr r7, [sp, 0x3C]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - movs r0, 0\n\ - str r0, [sp, 0xC]\n\ - ldrh r0, [r5, 0x2]\n\ - ldrh r1, [r3, 0x2]\n\ - cmp r0, r1\n\ - bcs _081D22B2\n\ - adds r2, r0, 0\n\ - mov r10, r2\n\ - ldrh r0, [r3, 0x2]\n\ - ldrh r1, [r5]\n\ - lsls r4, r1, 10\n\ - ldrh r3, [r3]\n\ - str r3, [sp, 0x8]\n\ - b _081D22C6\n\ - _081D22B2:\n\ - ldrh r0, [r5, 0x2]\n\ - ldr r1, [sp, 0x4]\n\ - ldrh r1, [r1, 0x2]\n\ - mov r10, r1\n\ - ldr r2, [sp, 0x4]\n\ - ldrh r1, [r2]\n\ - lsls r4, r1, 10\n\ - ldrh r3, [r5]\n\ - str r3, [sp, 0x8]\n\ - mov r2, r10\n\ - _081D22C6:\n\ - subs r0, r2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - cmp r0, 0\n\ - beq _081D22DE\n\ - subs r0, r3, r1\n\ - lsls r0, 10\n\ - mov r1, r8\n\ - bl __divsi3\n\ - str r0, [sp, 0xC]\n\ - _081D22DE:\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - cmp r7, 0\n\ - bne _081D2328\n\ - mov r0, r10\n\ - subs r0, 0x38\n\ - lsls r0, 2\n\ - adds r6, r0\n\ - movs r5, 0\n\ - mov r3, r9\n\ - lsls r3, 1\n\ - mov r12, r3\n\ - ldr r0, [sp, 0x8]\n\ - add r0, r9\n\ - str r0, [sp, 0x10]\n\ - cmp r7, r8\n\ - bcs _081D23B6\n\ - movs r7, 0x1\n\ - _081D2308:\n\ - adds r2, r3, r6\n\ - asrs r1, r4, 10\n\ - asrs r0, r4, 9\n\ - ands r0, r7\n\ - adds r1, r0\n\ - add r1, r9\n\ - strh r1, [r2]\n\ - ldr r1, [sp, 0xC]\n\ - adds r4, r1\n\ - adds r6, 0x4\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, r8\n\ - bcc _081D2308\n\ - b _081D23B6\n\ - _081D2328:\n\ - ldr r2, [sp, 0xC]\n\ - cmp r2, 0\n\ - ble _081D23C0\n\ - mov r0, r10\n\ - subs r0, 0x38\n\ - lsls r0, 2\n\ - adds r7, r0\n\ - movs r5, 0\n\ - mov r3, r9\n\ - lsls r3, 1\n\ - mov r12, r3\n\ - ldr r0, [sp, 0x8]\n\ - add r0, r9\n\ - str r0, [sp, 0x10]\n\ - cmp r5, r8\n\ - bcs _081D237A\n\ - ldr r0, =0x00026bff\n\ - cmp r4, r0\n\ - bgt _081D237A\n\ - mov r1, r12\n\ - str r1, [sp, 0x14]\n\ - _081D2352:\n\ - ldr r3, [sp, 0x14]\n\ - adds r2, r3, r7\n\ - asrs r1, r4, 10\n\ - asrs r0, r4, 9\n\ - movs r3, 0x1\n\ - ands r0, r3\n\ - adds r1, r0\n\ - add r1, r9\n\ - strh r1, [r2]\n\ - ldr r0, [sp, 0xC]\n\ - adds r4, r0\n\ - adds r7, 0x4\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, r8\n\ - bcs _081D237A\n\ - ldr r1, =0x00026bff\n\ - cmp r4, r1\n\ - ble _081D2352\n\ - _081D237A:\n\ - mov r2, r10\n\ - adds r1, r2, r5\n\ - ldr r3, [sp]\n\ - movs r2, 0xD4\n\ - lsls r2, 2\n\ - adds r0, r3, r2\n\ - strh r1, [r0]\n\ - ldrh r0, [r0]\n\ - subs r0, 0x38\n\ - lsls r0, 2\n\ - adds r6, r0\n\ - cmp r5, r8\n\ - bcs _081D23B6\n\ - mov r3, r12\n\ - movs r7, 0x1\n\ - _081D2398:\n\ - adds r2, r3, r6\n\ - asrs r1, r4, 10\n\ - asrs r0, r4, 9\n\ - ands r0, r7\n\ - adds r1, r0\n\ - add r1, r9\n\ - strh r1, [r2]\n\ - ldr r0, [sp, 0xC]\n\ - adds r4, r0\n\ - adds r6, 0x4\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, r8\n\ - bcc _081D2398\n\ - _081D23B6:\n\ - subs r0, r6, 0x4\n\ - b _081D248C\n\ - .pool\n\ - _081D23C0:\n\ - ldr r1, [sp, 0xC]\n\ - cmp r1, 0\n\ - bge _081D2464\n\ - mov r0, r10\n\ - subs r0, 0x38\n\ - lsls r0, 2\n\ - adds r6, r0\n\ - movs r5, 0\n\ - mov r2, r9\n\ - lsls r2, 1\n\ - mov r12, r2\n\ - ldr r3, [sp, 0x8]\n\ - add r3, r9\n\ - str r3, [sp, 0x10]\n\ - cmp r5, r8\n\ - bcs _081D241E\n\ - adds r3, r2, r6\n\ - asrs r1, r4, 10\n\ - asrs r0, r4, 9\n\ - movs r2, 0x1\n\ - ands r0, r2\n\ - adds r1, r0\n\ - add r1, r9\n\ - strh r1, [r3]\n\ - b _081D2414\n\ - _081D23F2:\n\ - ldr r0, [sp, 0xC]\n\ - adds r4, r0\n\ - adds r6, 0x4\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, r8\n\ - bcs _081D241E\n\ - mov r1, r12\n\ - adds r3, r1, r6\n\ - asrs r2, r4, 10\n\ - asrs r0, r4, 9\n\ - movs r1, 0x1\n\ - ands r0, r1\n\ - adds r2, r0\n\ - add r2, r9\n\ - strh r2, [r3]\n\ - _081D2414:\n\ - ldr r0, =0x00026bff\n\ - cmp r4, r0\n\ - bgt _081D23F2\n\ - movs r0, 0x9B\n\ - strh r0, [r3]\n\ - _081D241E:\n\ - mov r2, r10\n\ - adds r1, r2, r5\n\ - ldr r3, [sp]\n\ - movs r2, 0xD4\n\ - lsls r2, 2\n\ - adds r0, r3, r2\n\ - strh r1, [r0]\n\ - ldrh r0, [r0]\n\ - subs r0, 0x38\n\ - lsls r0, 2\n\ - adds r7, r0\n\ - cmp r5, r8\n\ - bcs _081D245A\n\ - mov r3, r12\n\ - movs r6, 0x1\n\ - _081D243C:\n\ - adds r2, r3, r7\n\ - asrs r1, r4, 10\n\ - asrs r0, r4, 9\n\ - ands r0, r6\n\ - adds r1, r0\n\ - add r1, r9\n\ - strh r1, [r2]\n\ - ldr r0, [sp, 0xC]\n\ - adds r4, r0\n\ - adds r7, 0x4\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, r8\n\ - bcc _081D243C\n\ - _081D245A:\n\ - subs r0, r7, 0x4\n\ - b _081D248C\n\ - .pool\n\ - _081D2464:\n\ - ldr r1, [sp]\n\ - movs r2, 0xD4\n\ - lsls r2, 2\n\ - adds r0, r1, r2\n\ - mov r3, r10\n\ - strh r3, [r0]\n\ - mov r0, r10\n\ - subs r0, 0x38\n\ - lsls r0, 2\n\ - adds r6, r0\n\ - adds r7, r0\n\ - ldrh r0, [r5]\n\ - adds r0, 0x1\n\ - strh r0, [r6, 0x2]\n\ - ldr r1, [sp, 0x4]\n\ - ldrh r0, [r1]\n\ - strh r0, [r7]\n\ - movs r0, 0x9B\n\ - strh r0, [r7, 0x2]\n\ - b _081D2494\n\ - _081D248C:\n\ - add r0, r12\n\ - mov r2, sp\n\ - ldrh r2, [r2, 0x10]\n\ - strh r2, [r0]\n\ - _081D2494:\n\ - add sp, 0x18\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - "); + else if (var_2C > 0) + { + arg5 += (r10 - 56) * 2; + // Less readable than the other loops, but it has to be written this way to match. + for (i = 0; i < r8; arg5[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4, r4 += var_2C, arg5 += 2, i++) + { + if (r4 >= (155 << 10)) + break; + } + + arg0->unk350 = r10 + i; + arg1 += (arg0->unk350 - 56) * 2; + for (; i < r8; i++) + { + arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; + r4 += var_2C; + arg1 += 2; + } + + ptr = arg1 - 2; + } + else if (var_2C < 0) + { + arg1 += (r10 - 56) * 2; + for (i = 0; i < r8; i++) + { + arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; + if (r4 < (155 << 10)) + { + arg1[arg4] = 155; + break; + } + r4 += var_2C; + arg1 += 2; + } + + arg0->unk350 = r10 + i; + arg5 += (arg0->unk350 - 56) * 2; + for (; i < r8; i++) + { + arg5[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; + r4 += var_2C; + arg5 += 2; + } + + ptr = arg5 - 2; + } + else + { + arg0->unk350 = r10; + arg1 += (r10 - 56) * 2; + arg5 += (r10 - 56) * 2; + arg1[1] = arg2->unk0 + 1; + arg5[0] = arg3->unk0; + arg5[1] = 155; + return; + } + + ptr[arg4] = arg4 + var_30; } static void sub_81D24A4(struct UnknownStruct_81D1ED4 *arg0) @@ -799,18 +567,18 @@ static void sub_81D24A4(struct UnknownStruct_81D1ED4 *arg0) if (arg0->unk12C[0].unk2 < arg0->unk12C[1].unk2) { r6 = arg0->unk12C[0].unk2; - sub_81D2278(arg0, arg0->unk140, &arg0->unk12C[0], &arg0->unk12C[1], 1, NULL); + sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[0], &arg0->unk12C[1], 1, NULL); } else { r6 = arg0->unk12C[1].unk2; - sub_81D2278(arg0, arg0->unk140, &arg0->unk12C[1], &arg0->unk12C[0], 0, NULL); + sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[1], &arg0->unk12C[0], 0, NULL); } - sub_81D2278(arg0, arg0->unk140, &arg0->unk12C[1], &arg0->unk12C[2], 1, NULL); + sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[1], &arg0->unk12C[2], 1, NULL); i = (arg0->unk12C[2].unk2 <= arg0->unk12C[3].unk2); - sub_81D2278(arg0, arg0->unk140, &arg0->unk12C[2], &arg0->unk12C[3], i, arg0->unk248); + sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[2], &arg0->unk12C[3], i, arg0->unk248[0]); for (i = 56; i < r6; i++) { arg0->unk140[i - 56][0] = 0; @@ -841,15 +609,15 @@ static void sub_81D2634(struct UnknownStruct_81D1ED4 *arg0) if (arg0->unk12C[0].unk2 < arg0->unk12C[4].unk2) { r6 = arg0->unk12C[0].unk2; - sub_81D2278(arg0, arg0->unk248, &arg0->unk12C[0], &arg0->unk12C[4], 0, NULL); + sub_81D2278(arg0, arg0->unk248[0], &arg0->unk12C[0], &arg0->unk12C[4], 0, NULL); } else { r6 = arg0->unk12C[4].unk2; - sub_81D2278(arg0, arg0->unk248, &arg0->unk12C[4], &arg0->unk12C[0], 1, NULL); + sub_81D2278(arg0, arg0->unk248[0], &arg0->unk12C[4], &arg0->unk12C[0], 1, NULL); } - sub_81D2278(arg0, arg0->unk248, &arg0->unk12C[4], &arg0->unk12C[3], 0, NULL); + sub_81D2278(arg0, arg0->unk248[0], &arg0->unk12C[4], &arg0->unk12C[3], 0, NULL); for (i = 56; i < r6; i++) { @@ -1290,7 +1058,7 @@ void sub_81D3094(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 arg5, u u32 personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); LoadSpecialPokePic(&gMonFrontPicTable[species], tilesDst, species, personality, TRUE); - LZ77UnCompWram(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), palDst); + LZ77UnCompWram(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), palDst); } } diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 269f8ea1b..bb9c6e958 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -258,7 +258,7 @@ EWRAM_DATA static struct Struct203CF10 *sUnknown_0203CF10 = NULL; EWRAM_DATA static struct BgRegOffsets *sBgShakeOffsets = NULL; EWRAM_DATA struct MirageTowerPulseBlend *sMirageTowerPulseBlend = NULL; -IWRAM_DATA static u16 gUnknown_030012A8[8]; +static u16 gUnknown_030012A8[8]; bool8 IsMirageTowerVisible(void) { @@ -318,7 +318,7 @@ void SetMirageTowerVisibility(void) u16 rand; bool8 visible; - if (VarGet(VAR_ROUTE_111_STATE)) + if (VarGet(VAR_MIRAGE_TOWER_STATE)) { FlagClear(FLAG_MIRAGE_TOWER_VISIBLE); return; diff --git a/src/multiboot.c b/src/multiboot.c index da90a55c0..c7e14392e 100644 --- a/src/multiboot.c +++ b/src/multiboot.c @@ -1,7 +1,7 @@ #include "gba/gba.h" #include "multiboot.h" -IWRAM_DATA static u16 MultiBoot_required_data[MULTIBOOT_NCHILD]; +static u16 MultiBoot_required_data[MULTIBOOT_NCHILD]; static int MultiBootSend(struct MultiBootParam *mp, u16 data); static int MultiBootHandShake(struct MultiBootParam *mp); @@ -435,7 +435,7 @@ static int MultiBootHandShake(struct MultiBootParam *mp) #undef must_data } -static void MultiBootWaitCycles(u32 cycles) +static NOINLINE void MultiBootWaitCycles(u32 cycles) { asm("mov r2, pc"); asm("lsr r2, #24"); diff --git a/src/new_game.c b/src/new_game.c index 7a0c668a4..b4d9ba9b3 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -37,6 +37,7 @@ #include "contest.h" #include "item_menu.h" #include "pokemon_storage_system.h" +#include "pokemon_jump.h" #include "decoration_inventory.h" #include "secret_base.h" #include "player_pc.h" @@ -45,8 +46,6 @@ #include "mevent.h" #include "union_room_chat.h" -extern void ResetPokeJumpResults(void); - extern const u8 EventScript_ResetAllMapFlags[]; // this file's functions @@ -199,7 +198,7 @@ void NewGameInitData(void) ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags); ResetMiniGamesResults(); copy_strings_to_sav1(); - SetLilycoveLady(); + InitLilycoveLady(); ResetAllApprenticeData(); ClearRankingHallRecords(); InitMatchCallCounters(); diff --git a/src/overworld.c b/src/overworld.c index 4356752c1..cefbd8159 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -186,15 +186,15 @@ static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStr static u16 GetCenterScreenMetatileBehavior(void); // IWRAM bss vars -IWRAM_DATA static void *sUnusedOverworldCallback; -IWRAM_DATA static u8 sPlayerTradingStates[4]; +static void *sUnusedOverworldCallback; +static u8 sPlayerTradingStates[4]; // This callback is called with a player's key code. It then returns an // adjusted key code, effectively intercepting the input before anything // can process it. -IWRAM_DATA static u16 (*sPlayerKeyInterceptCallback)(u32); -IWRAM_DATA static bool8 sUnknown_03000E18; -IWRAM_DATA static u8 sRfuKeepAliveTimer; -IWRAM_DATA static u32 sUnusedVar; +static u16 (*sPlayerKeyInterceptCallback)(u32); +static bool8 sUnknown_03000E18; +static u8 sRfuKeepAliveTimer; +static u32 sUnusedVar; // IWRAM common u16 *gBGTilemapBuffers1; @@ -1040,7 +1040,7 @@ static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp) case MAP_NUM(ROUTE128): return TRUE; default: - if (VarGet(VAR_RAYQUAZA_STATE) < 4) + if (VarGet(VAR_SOOTOPOLIS_CITY_STATE) < 4) return FALSE; switch (warp->mapNum) { @@ -1081,9 +1081,9 @@ static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp) static bool16 IsInflitratedSpaceCenter(struct WarpData *warp) { - if (VarGet(VAR_MOSSDEEP_STATE) == 0) + if (VarGet(VAR_MOSSDEEP_CITY_STATE) == 0) return FALSE; - else if (VarGet(VAR_MOSSDEEP_STATE) > 2) + else if (VarGet(VAR_MOSSDEEP_CITY_STATE) > 2) return FALSE; else if (warp->mapGroup != MAP_GROUP(MOSSDEEP_CITY_SPACE_CENTER_1F)) return FALSE; diff --git a/src/palette.c b/src/palette.c index 5d1d6635c..eb49ce4c6 100644 --- a/src/palette.c +++ b/src/palette.c @@ -54,8 +54,10 @@ static void UpdateBlendRegisters(void); static bool8 IsSoftwarePaletteFadeFinishing(void); static void sub_80A2D54(u8 taskId); -EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0}; -EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0}; +// palette buffers require alignment with agbcc because +// unaligned word reads are issued in BlendPalette otherwise +ALIGNED(4) EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0}; +ALIGNED(4) EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0}; EWRAM_DATA struct PaletteStruct sPaletteStructs[0x10] = {0}; EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; static EWRAM_DATA u32 gFiller_2037FE0 = 0; diff --git a/src/party_menu.c b/src/party_menu.c index f20bdff51..f4b749bde 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1596,8 +1596,8 @@ static void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 messageId, TaskFunc task, M gUnknown_0203CEC4->task = task; gUnknown_0203CEC4->exitCallback = NULL; gUnknown_0203CEC4->unk8_1 = 0; - gUnknown_0203CEC4->unk8_2 = 0xFF; - gUnknown_0203CEC4->unk9_0 = 0xFF; + gUnknown_0203CEC4->unk8_2 = 0x7F; + gUnknown_0203CEC4->unk9_0 = 0x7F; if (a == 4) gUnknown_0203CEC4->unk8_0 = TRUE; @@ -1820,7 +1820,7 @@ static bool8 AllocPartyMenuBg(void) static bool8 AllocPartyMiscGfx(void) { - int sizeout; + u32 sizeout; switch (gUnknown_0203CEC4->data[0]) { @@ -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/pokedex.c b/src/pokedex.c index 2588e2b73..c1787ef6a 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1319,7 +1319,7 @@ void CB2_Pokedex(void) default: SetVBlankCallback(NULL); sub_80C09B0(0); - DmaFillLarge16(3, 0, (u8 *)VRAM, VRAM_SIZE, 0x1000) + DmaFillLarge16(3, 0, (u8 *)VRAM, VRAM_SIZE, 0x1000); DmaClear32(3, OAM, OAM_SIZE); DmaClear16(3, PLTT, PLTT_SIZE); gMain.state = 1; @@ -3855,7 +3855,7 @@ void blockset_load_palette_to_gpu(u8 taskId) otId = ((u16)gTasks[taskId].data[13] << 16) | (u16)gTasks[taskId].data[12]; personality = ((u16)gTasks[taskId].data[15] << 16) | (u16)gTasks[taskId].data[14]; paletteNum = gSprites[gTasks[taskId].data[3]].oam.paletteNum; - lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality); + lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality); LoadCompressedPalette(lzPaletteData, 0x100 | paletteNum * 16, 32); DestroyTask(taskId); } @@ -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/pokedex_area_screen.c b/src/pokedex_area_screen.c index 1eb8c0953..dc69b5d54 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -763,11 +763,11 @@ static void sub_813D6B4(void) static void CreateAreaMarkerSprites(void) { u8 spriteId; - static IWRAM_DATA s16 x; - static IWRAM_DATA s16 y; - static IWRAM_DATA s16 i; - static IWRAM_DATA s16 mapSecId; - static IWRAM_DATA s16 numSprites; + static s16 x; + static s16 y; + static s16 i; + static s16 mapSecId; + static s16 numSprites; LoadSpriteSheet(&sAreaMarkerSpriteSheet); LoadSpritePalette(&sAreaMarkerSpritePalette); diff --git a/src/pokemon.c b/src/pokemon.c index c54e8ad2c..f5e79243e 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2183,7 +2183,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, { value = Random32(); shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality); - } while (shinyValue < 8); + } while (shinyValue < SHINY_ODDS); } else if (otIdType == OT_ID_PRESET) //Pokemon has a preset OT ID { @@ -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++) { @@ -2649,25 +2649,20 @@ bool8 sub_80688F8(u8 caseId, u8 battlerId) return TRUE; } -static s32 GetDeoxysStat(struct Pokemon *mon, s32 statId) +static u16 GetDeoxysStat(struct Pokemon *mon, s32 statId) { s32 ivVal, evVal; - s32 statValue; - u8 nature, statId_; + u16 statValue = 0; + u8 nature; - if (gBattleTypeFlags & BATTLE_TYPE_20) - return 0; - if (GetMonData(mon, MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS) + if (gBattleTypeFlags & BATTLE_TYPE_20 || GetMonData(mon, MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS) return 0; ivVal = GetMonData(mon, MON_DATA_HP_IV + statId, NULL); evVal = GetMonData(mon, MON_DATA_HP_EV + statId, NULL); - statValue = (u16)(((sDeoxysBaseStats[statId] * 2 + ivVal + evVal / 4) * mon->level) / 100 + 5); - + statValue = ((sDeoxysBaseStats[statId] * 2 + ivVal + evVal / 4) * mon->level) / 100 + 5; nature = GetNature(mon); - statId_ = statId; // needed to match - statValue = ModifyStatByNature(nature, statValue, statId_); - + statValue = ModifyStatByNature(nature, statValue, (u8)statId); return statValue; } @@ -3584,27 +3579,27 @@ u32 GetMonData(struct Pokemon *mon, s32 field, u8* data) ret = mon->maxHP; break; case MON_DATA_ATK: - ret = (u16)GetDeoxysStat(mon, STAT_ATK); + ret = GetDeoxysStat(mon, STAT_ATK); if (!ret) ret = mon->attack; break; case MON_DATA_DEF: - ret = (u16)GetDeoxysStat(mon, STAT_DEF); + ret = GetDeoxysStat(mon, STAT_DEF); if (!ret) ret = mon->defense; break; case MON_DATA_SPEED: - ret = (u16)GetDeoxysStat(mon, STAT_SPEED); + ret = GetDeoxysStat(mon, STAT_SPEED); if (!ret) ret = mon->speed; break; case MON_DATA_SPATK: - ret = (u16)GetDeoxysStat(mon, STAT_SPATK); + ret = GetDeoxysStat(mon, STAT_SPATK); if (!ret) ret = mon->spAttack; break; case MON_DATA_SPDEF: - ret = (u16)GetDeoxysStat(mon, STAT_SPDEF); + ret = GetDeoxysStat(mon, STAT_SPDEF); if (!ret) ret = mon->spDefense; break; @@ -4429,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]; @@ -4463,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]); @@ -6321,10 +6316,10 @@ const u32 *GetMonFrontSpritePal(struct Pokemon *mon) u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); - return GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality); + return GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality); } -const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality) +const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality) { u32 shinyValue; @@ -6332,7 +6327,7 @@ const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 return gMonPaletteTable[0].data; shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); - if (shinyValue < 8) + if (shinyValue < SHINY_ODDS) return gMonShinyPaletteTable[species].data; else return gMonPaletteTable[species].data; @@ -6351,7 +6346,7 @@ const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u u32 shinyValue; shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); - if (shinyValue < 8) + if (shinyValue < SHINY_ODDS) return &gMonShinyPaletteTable[species]; else return &gMonPaletteTable[species]; @@ -6525,7 +6520,7 @@ bool8 IsShinyOtIdPersonality(u32 otId, u32 personality) { bool8 retVal = FALSE; u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); - if (shinyValue < 8) + if (shinyValue < SHINY_ODDS) retVal = TRUE; return retVal; } diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 52fa6db51..340327475 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -177,9 +177,9 @@ static void SpriteCB_SetDummyOnAnimEnd(struct Sprite *sprite); #define STRUCT_COUNT 4 // IWRAM bss -static IWRAM_DATA struct UnkAnimStruct sUnknown_03001240[STRUCT_COUNT]; -static IWRAM_DATA u8 sUnknown_03001270; -static IWRAM_DATA bool32 sUnknown_03001274; +static struct UnkAnimStruct sUnknown_03001240[STRUCT_COUNT]; +static u8 sUnknown_03001270; +static bool32 sUnknown_03001274; // const rom data static const u8 sSpeciesToBackAnimSet[] = @@ -861,16 +861,27 @@ u8 GetSpeciesBackAnimSet(u16 species) } #define tState data[0] -#define tPtrLO data[1] -#define tPtrHI data[2] +#define tPtrHi data[1] +#define tPtrLo data[2] #define tAnimId data[3] #define tSaved0 data[4] #define tSaved2 data[5] +// BUG: In vanilla, tPtrLo is read as an s16, so if bit 15 of the +// address were to be set it would cause the pointer to be read +// as 0xFFFFXXXX instead of the desired 0x02YYXXXX. +// By dumb luck, this is not an issue in vanilla. However, +// changing the link order revealed this bug. +#if MODERN +#define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | ((u16)gTasks[taskId].tPtrLo))) +#else +#define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | (gTasks[taskId].tPtrLo))) +#endif //MODERN + static void Task_HandleMonAnimation(u8 taskId) { u32 i; - struct Sprite *sprite = (struct Sprite*)(u32)((gTasks[taskId].tPtrLO << 0x10) | (gTasks[taskId].tPtrHI)); + struct Sprite *sprite = ANIM_SPRITE(taskId); if (gTasks[taskId].tState == 0) { @@ -900,8 +911,8 @@ static void Task_HandleMonAnimation(u8 taskId) void LaunchAnimationTaskForFrontSprite(struct Sprite *sprite, u8 frontAnimId) { u8 taskId = CreateTask(Task_HandleMonAnimation, 128); - gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10; - gTasks[taskId].tPtrHI = (u32)(sprite); + gTasks[taskId].tPtrHi = (u32)(sprite) >> 0x10; + gTasks[taskId].tPtrLo = (u32)(sprite); gTasks[taskId].tAnimId = frontAnimId; } @@ -916,8 +927,8 @@ void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet) u8 nature, taskId, animId, battlerId; taskId = CreateTask(Task_HandleMonAnimation, 128); - gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10; - gTasks[taskId].tPtrHI = (u32)(sprite); + gTasks[taskId].tPtrHi = (u32)(sprite) >> 0x10; + gTasks[taskId].tPtrLo = (u32)(sprite); battlerId = sprite->data[0]; nature = GetNature(&gPlayerParty[gBattlerPartyIndexes[battlerId]]); @@ -927,8 +938,8 @@ void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet) } #undef tState -#undef tPtrLO -#undef tPtrHI +#undef tPtrHi +#undef tPtrLo #undef tAnimId #undef tSaved0 #undef tSaved2 diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 4a457adc4..8f16e1ce2 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -1,8 +1,12 @@ #include "global.h" #include "alloc.h" +#include "battle_anim.h" +#include "bg.h" #include "data.h" #include "decompress.h" +#include "dynamic_placeholder_text_util.h" #include "event_data.h" +#include "international_string_util.h" #include "item.h" #include "link.h" #include "link_rfu.h" @@ -10,11 +14,15 @@ #include "menu.h" #include "palette.h" #include "random.h" +#include "rom_8034C54.h" #include "save.h" +#include "script.h" #include "sound.h" #include "sprite.h" #include "string_util.h" +#include "strings.h" #include "task.h" +#include "text_window.h" #include "trig.h" #include "pokemon.h" #include "pokemon_jump.h" @@ -43,6 +51,42 @@ struct PokemonJump1_82E4 u8 unk1C[11]; }; +struct PokemonJump2 +{ + int unk0; + u16 unk4; + u8 unk6; + u8 filler7[0xa - 0x7]; + u8 unkA; + u8 unkB; + u8 unkC; + u8 unkD; + u8 unkE; + u8 unkF; + u16 filler10; + u16 unk12; + u16 unk14; + u32 unk18; + u16 unk1C[5]; + u8 txtBuff[2][0x40]; + u8 strBuff[0x100]; + u16 tilemapBuffer[(0x81a8 - 0x1a6) / 2]; // 0x1A6 + struct Sprite *unk81A8[MAX_RFU_PLAYERS]; + struct Sprite *unk81BC[MAX_RFU_PLAYERS]; + struct Sprite *unk81D0[8]; + u8 filler81F0[0xC]; + u8 unk81FC[MAX_RFU_PLAYERS]; +}; + +struct PokemonJump1Sub +{ + u8 unk0; + u8 unk1; + u16 unk2; + u16 unk4; + u32 unk8; +}; + struct PokemonJump1 { MainCallback returnCallback; @@ -91,19 +135,14 @@ struct PokemonJump1 int unk64; int unk68; int unk6C; - u8 unk70; - u8 unk71; - u16 unk72; - u16 unk74; - u32 unk78; + struct PokemonJump1Sub unk70; u8 unk7C[MAX_RFU_PLAYERS]; u8 unk81[MAX_RFU_PLAYERS]; u8 unk86[MAX_RFU_PLAYERS]; u8 unk8B[MAX_RFU_PLAYERS]; u16 unk90[MAX_RFU_PLAYERS]; u16 unk9A[MAX_RFU_PLAYERS]; - void **unkA4; - u8 fillerA8[0x8200]; + struct PokemonJump2 unkA4; struct PokemonJump1_MonInfo unk82A8[MAX_RFU_PLAYERS]; struct PokemonJump1_82E4 unk82E4[MAX_RFU_PLAYERS]; struct PokemonJump1_82E4 *unk83AC; @@ -115,33 +154,9 @@ struct PokemonJumpMons u16 unk2; }; -struct Unk802B078 -{ - u8 unk0; - u8 unk1; - u16 unk2; - u16 unk4; - u16 unk6; - int unk8; -}; - - -struct PokemonJump2 -{ - u8 filler0[0xE]; - u8 unkE; - u8 unkF; - u8 filler10[0x8198]; - struct Sprite *unk81A8[MAX_RFU_PLAYERS]; - struct Sprite *unk81BC[MAX_RFU_PLAYERS]; - struct Sprite *unk81D0[8]; - u8 filler81F0[0xC]; - u8 unk81FC[MAX_RFU_PLAYERS]; -}; - static void sub_802AA60(struct PokemonJump1 *); -void sub_802AA94(struct PokemonJump1 *); -void sub_802AB20(void); +static void sub_802AA94(struct PokemonJump1 *); +static void sub_802AB20(void); static void sub_802AB98(void); static s16 sub_802AC00(u16 species); static void sub_802AC2C(struct PokemonJump1_MonInfo *monInfo, struct Pokemon *mon); @@ -215,45 +230,85 @@ static void sub_802CB7C(struct Sprite *sprite); static void sub_802CC40(struct Sprite *sprite); static void sub_802CD08(struct Sprite *sprite); static void sub_802CDD4(struct Sprite *sprite); -void sub_802DC9C(u32); -void sub_802D074(void *); -void sub_802D0AC(void); -void sub_802D0C8(int); -int sub_802D0F0(void); -void sub_802D764(void); -bool32 sub_802D788(void); -void sub_802D7E8(u16, u16); -void sub_802D884(u16); -void sub_802D8FC(u16); -bool32 sub_802D974(void); -void sub_802DA14(void); -void sub_802DC80(int, s8); -void sub_802DD88(u8); -bool32 sub_802DA44(void); -void sub_802DD64(int); -s8 sub_802DA8C(void); -int sub_802DCCC(u8); -void sub_802DD74(u16); -void sub_802DDA0(u8); -int sub_802DDB8(int); -void sub_802DDCC(void); -void sub_802DDE0(void); -void sub_802DDF4(int); -int sub_802DE08(void); -void sub_802E0AC(struct PokemonJump1_MonInfo *); -bool32 sub_802E0D0(int, struct PokemonJump1_MonInfo *); -void sub_802E138(struct PokemonJump1_82E4 *, u8 *); -bool32 sub_802E1BC(struct PokemonJump1_82E4 *, struct Unk802B078 *); -void sub_802E234(struct PokemonJump1_82E4 *, u8 , u16); -bool32 sub_802E264(struct PokemonJump1_82E4 *, int, u8 *, u16 *); -bool32 sub_802E2D0(struct PokemonJump1_82E4 *, int); -int sub_802E354(int, u16, u16); -void sub_802E3A8(void); - -extern struct PokemonJump1 *gUnknown_02022CFC; -extern struct PokemonJump2 *gUnknown_02022D00; - -const struct PokemonJumpMons gPkmnJumpSpecies[] = +static void sub_802DC9C(int id); +static void sub_802D074(struct PokemonJump2 *); +static void sub_802D0BC(struct PokemonJump2 *); +static void sub_802D0AC(void); +static void sub_802D0C8(int); +static bool32 sub_802D0F0(void); +static void sub_802D764(void); +static bool32 sub_802D788(void); +static void sub_802D7E8(u16 itemId, u16 quantity); +static void sub_802D884(u16 itemId); +static void sub_802D8FC(u16 itemId); +static bool32 sub_802D974(void); +static void sub_802DA14(void); +static void sub_802DC80(u32 id, s16 y); +static void sub_802DD88(u8 multiplayerId); +static bool32 sub_802DA44(void); +static void sub_802DD64(int); +static s8 sub_802DA8C(void); +static int sub_802DCCC(u8 flags); +static void sub_802DD74(u16); +static void sub_802DDA0(u8 multiplayerId); +static int sub_802DDB8(int multiplayerId); +static void sub_802DDCC(void); +static void sub_802DDE0(void); +static void sub_802DDF4(int); +static int sub_802DE08(void); +static void sub_802E0AC(struct PokemonJump1_MonInfo *arg0); +static bool32 sub_802E0D0(int multiplayerId, struct PokemonJump1_MonInfo *arg0); +static void sub_802E138(struct PokemonJump1_82E4 *arg0, struct PokemonJump1Sub *arg1); +static bool32 sub_802E1BC(struct PokemonJump1_82E4 *arg0, struct PokemonJump1Sub *arg1); +static void sub_802E234(struct PokemonJump1_82E4 *arg0, u8 arg1, u16 arg2); +static bool32 sub_802E264(struct PokemonJump1_82E4 *arg0, int multiplayerId, u8 *arg2, u16 *arg3); +static bool32 sub_802E2D0(struct PokemonJump1_82E4 *arg0, int multiplayerId); +static bool32 sub_802E354(u32 jumpScore, u16 jumpsInRow, u16 excellentsInRow); +static void sub_802E3A8(void); +static void sub_802D12C(u8 taskId); +static void sub_802E00C(u8 arg0); +static void sub_802E090(u8 taskId); +static void sub_802D150(void); +static void sub_802DD08(void); +static void sub_802DB8C(void); +static void sub_802DBF8(void); +static void sub_802DE1C(void); +static void sub_802DFD4(void); +static void sub_802D108(void (*func)(void)); +static void sub_802DF70(bool32 arg0); +static u32 sub_802DA9C(u32 left, u32 top, u32 width, u32 height); +static void sub_802DB18(u16 left, u16 top, u8 cursorPos); +static void sub_802D150(void); +static void sub_802D2E4(void); +static void sub_802D350(void); +static void sub_802D3BC(void); +static void sub_802D448(void); +static void sub_802D4F4(void); +static void sub_802D598(void); +static void sub_802D5E4(void); +static void sub_802D72C(void); +static void sub_802D688(void); +static void sub_802E3E4(u8 taskId); +static void sub_802E6D0(u8 taskId); +static void sub_802EB98(u8 taskId); +static void sub_802E500(u16 windowId, int width); +static void TruncateToFirstWordOnly(u8 *str); +static void sub_802EF50(u16 tileTag, u16 palTag); +static u8 sub_802EFA8(u16 tileTag, u16 palTag, s16 x, s16 y, u8 subpriority); +static void sub_802EFFC(u16 tileTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 *spriteId1, s16 *spriteId2); +static bool32 sub_802EC98(u8 spriteId); +static bool32 sub_802EE30(u8 spriteId); +static void sub_802EDCC(u8 spriteId1, u8 spriteId2, u8 spriteId3); +static void sub_802EE5C(struct Sprite *sprite); +static void sub_802E83C(u8 taskId); +static void sub_802E8C8(u8 taskId); +static void sub_802EA50(u8 taskId); +static void sub_802EAB0(u8 taskId); + +EWRAM_DATA static struct PokemonJump1 *gUnknown_02022CFC = NULL; +EWRAM_DATA static struct PokemonJump2 *gUnknown_02022D00 = NULL; + +static const struct PokemonJumpMons gPkmnJumpSpecies[] = { { .species = SPECIES_BULBASAUR, .unk2 = 2, }, { .species = SPECIES_CHARMANDER, .unk2 = 1, }, @@ -357,47 +412,6 @@ const struct PokemonJumpMons gPkmnJumpSpecies[] = { .species = SPECIES_BAGON, .unk2 = 1, }, }; -bool32 (* const gUnknown_082FB5F4[])(void) = -{ - sub_802B248, - sub_802B2D4, - sub_802B368, - sub_802B3D4, - sub_802B4CC, - sub_802B5C8, - sub_802B664, - sub_802B6B8, - sub_802B720, -}; - -bool32 (* const gUnknown_082FB618[])(void) = -{ - sub_802B29C, - sub_802B31C, - sub_802B3B4, - sub_802B470, - sub_802B568, - sub_802B628, - sub_802B664, - sub_802B704, - sub_802B720, -}; - -extern const u16 gUnknown_082FB63C[]; -extern const u16 gUnknown_082FB64C[4]; -extern const u16 gUnknown_082FB654[]; -extern const s8 gUnknown_082FB65C[][48]; -extern const int gUnknown_082FB6EC[]; -extern const int gUnknown_082FB714[]; -extern const u16 gUnknown_082FB704[8]; -extern const struct CompressedSpriteSheet gUnknown_082FBE08[5]; -extern const struct SpritePalette gUnknown_082FBE30[2]; -extern const struct SpriteTemplate gUnknown_082FBE40; -extern const struct SpriteTemplate gUnknown_082FC00C; -extern const s16 gUnknown_082FBE58[]; -extern const s16 gUnknown_082FBEA8[8]; -extern const struct SpriteTemplate gUnknown_082FBEB8[4]; - void sub_802A9A8(u16 partyIndex, MainCallback callback) { u8 taskId; @@ -433,15 +447,15 @@ static void sub_802AA48(void) static void sub_802AA60(struct PokemonJump1 *arg0) { arg0->unk5 = GetLinkPlayerCount(); - arg0->unk70 = 5; - arg0->unk72 = 0; + arg0->unk70.unk0 = 5; + arg0->unk70.unk2 = 0; sub_802AB20(); sub_802AA94(arg0); if (arg0->unk5 == MAX_RFU_PLAYERS) sub_802E3A8(); } -void sub_802AA94(struct PokemonJump1 *arg0) +static void sub_802AA94(struct PokemonJump1 *arg0) { int i; @@ -462,9 +476,9 @@ void sub_802AA94(struct PokemonJump1 *arg0) arg0->unk46 = 0; arg0->unk49 = 0; arg0->unk48 = 1; - arg0->unk78 = 0; - arg0->unk71 = 0; - arg0->unk74 = 0; + arg0->unk70.unk8 = 0; + arg0->unk70.unk1 = 0; + arg0->unk70.unk4 = 0; arg0->unk60 = 1; arg0->unk4D = 0; arg0->unk68 = 0; @@ -481,7 +495,7 @@ void sub_802AA94(struct PokemonJump1 *arg0) } } -void sub_802AB20(void) +static void sub_802AB20(void) { int i, index; @@ -629,7 +643,7 @@ static void sub_802AE50(u8 arg0) { int i; - gUnknown_02022CFC->unk70 = arg0; + gUnknown_02022CFC->unk70.unk0 = arg0; gUnknown_02022CFC->unk8 = 0; gUnknown_02022CFC->unkA = 0; gUnknown_02022CFC->unk48 = 1; @@ -656,7 +670,7 @@ static void sub_802AEA4(void) gUnknown_02022CFC->unk82E4[i].unk12 = var0; } - if (gUnknown_02022CFC->unk82E4[i].unk18 && gUnknown_02022CFC->unk8B[i] == gUnknown_02022CFC->unk70) + if (gUnknown_02022CFC->unk82E4[i].unk18 && gUnknown_02022CFC->unk8B[i] == gUnknown_02022CFC->unk70.unk0) count++; } @@ -664,6 +678,19 @@ static void sub_802AEA4(void) gUnknown_02022CFC->unk49 = 1; } +static bool32 (* const gUnknown_082FB5F4[])(void) = +{ + sub_802B248, + sub_802B2D4, + sub_802B368, + sub_802B3D4, + sub_802B4CC, + sub_802B5C8, + sub_802B664, + sub_802B6B8, + sub_802B720, +}; + static void sub_802AF80(u8 taskId) { sub_802AEA4(); @@ -676,7 +703,7 @@ static void sub_802AF80(u8 taskId) if (gUnknown_02022CFC->unk48 == 1) { - if (!gUnknown_082FB5F4[gUnknown_02022CFC->unk70]()) + if (!gUnknown_082FB5F4[gUnknown_02022CFC->unk70.unk0]()) { gUnknown_02022CFC->unk48 = 0; gUnknown_02022CFC->unk82E4[gUnknown_02022CFC->unk6].unk18 = 1; @@ -701,7 +728,7 @@ static void sub_802B008(void) static void sub_802B044(u8 arg0) { - gUnknown_02022CFC->unk70 = arg0; + gUnknown_02022CFC->unk70.unk0 = arg0; gUnknown_02022CFC->unk8 = 0; gUnknown_02022CFC->unkA = 0; gUnknown_02022CFC->unk48 = 1; @@ -712,30 +739,30 @@ static void sub_802B078(void) { int i; u16 var0; - struct Unk802B078 sp0; + struct PokemonJump1Sub sp0; var0 = gUnknown_02022CFC->unk82E4[0].unk10; if (sub_802E1BC(gUnknown_02022CFC->unk82E4, &sp0)) { if (gUnknown_02022CFC->unk82E4[gUnknown_02022CFC->unk6].unk18 == 1 - && sp0.unk0 != gUnknown_02022CFC->unk70) + && sp0.unk0 != gUnknown_02022CFC->unk70.unk0) { sub_802B044(sp0.unk0); } - if (gUnknown_02022CFC->unk78 != sp0.unk8) + if (gUnknown_02022CFC->unk70.unk8 != sp0.unk8) { - gUnknown_02022CFC->unk78 = sp0.unk8; + gUnknown_02022CFC->unk70.unk8 = sp0.unk8; gUnknown_02022CFC->unk5C = 1; - gUnknown_02022CFC->unk71 = sp0.unk1; - if (gUnknown_02022CFC->unk71) + gUnknown_02022CFC->unk70.unk1 = sp0.unk1; + if (gUnknown_02022CFC->unk70.unk1) gUnknown_02022CFC->unk4D = 1; else gUnknown_02022CFC->unk4D = 0; } - gUnknown_02022CFC->unk72 = sp0.unk2; - gUnknown_02022CFC->unk74 = sp0.unk4; + gUnknown_02022CFC->unk70.unk2 = sp0.unk2; + gUnknown_02022CFC->unk70.unk4 = sp0.unk4; gUnknown_02022CFC->unk82E4[0].unk12 = var0; } @@ -750,12 +777,25 @@ static void sub_802B078(void) } } +static bool32 (* const gUnknown_082FB618[])(void) = +{ + sub_802B29C, + sub_802B31C, + sub_802B3B4, + sub_802B470, + sub_802B568, + sub_802B628, + sub_802B664, + sub_802B704, + sub_802B720, +}; + static void sub_802B194(u8 taskId) { sub_802B078(); if (gUnknown_02022CFC->unk48) { - if (!gUnknown_082FB618[gUnknown_02022CFC->unk70]()) + if (!gUnknown_082FB618[gUnknown_02022CFC->unk70.unk0]()) { gUnknown_02022CFC->unk48 = 0; gUnknown_02022CFC->unk82E4[gUnknown_02022CFC->unk6].unk18 = 1; @@ -770,7 +810,7 @@ static void sub_802B194(u8 taskId) static void sub_802B1FC(void) { if (!gUnknown_02022CFC->unk2C) - sub_802E234(&gUnknown_02022CFC->unk82E4[gUnknown_02022CFC->unk6], gUnknown_02022CFC->unk70, gUnknown_02022CFC->unk42); + sub_802E234(&gUnknown_02022CFC->unk82E4[gUnknown_02022CFC->unk6], gUnknown_02022CFC->unk70.unk0, gUnknown_02022CFC->unk42); if (gUnknown_02022CFC->unk30 != 0x1111) { @@ -790,7 +830,7 @@ static bool32 sub_802B248(void) case 1: if (!sub_802B7E0()) { - gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unk4A; + gUnknown_02022CFC->unk70.unk2 = gUnknown_02022CFC->unk4A; gUnknown_02022CFC->unk4C = 1; return FALSE; } @@ -806,7 +846,7 @@ static bool32 sub_802B29C(void) { case 0: sub_802AE14(0); - gUnknown_02022CFC->unk24 = gUnknown_02022CFC->unk72; + gUnknown_02022CFC->unk24 = gUnknown_02022CFC->unk70.unk2; gUnknown_02022CFC->unk8++; // fall through case 1: @@ -844,7 +884,7 @@ static bool32 sub_802B31C(void) case 0: sub_802C0E8(); sub_802AE14(0); - gUnknown_02022CFC->unk4A = gUnknown_02022CFC->unk72; + gUnknown_02022CFC->unk4A = gUnknown_02022CFC->unk70.unk2; gUnknown_02022CFC->unk8++; // fall through case 1: @@ -860,7 +900,7 @@ static bool32 sub_802B368(void) { if (!sub_802B8CC()) { - gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unk4A; + gUnknown_02022CFC->unk70.unk2 = gUnknown_02022CFC->unk4A; gUnknown_02022CFC->unk4C = 1; } else if (sub_802C538()) @@ -902,17 +942,17 @@ static bool32 sub_802B3D4(void) { if (sub_802C7BC()) { - gUnknown_02022CFC->unk72 = sub_802C7E0(); + gUnknown_02022CFC->unk70.unk2 = sub_802C7E0(); gUnknown_02022CFC->unk4C = 7; } - else if (gUnknown_02022CFC->unk74 >= 200) + else if (gUnknown_02022CFC->unk70.unk4 >= 200) { - gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unkE; + gUnknown_02022CFC->unk70.unk2 = gUnknown_02022CFC->unkE; gUnknown_02022CFC->unk4C = 8; } else { - gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unkE; + gUnknown_02022CFC->unk70.unk2 = gUnknown_02022CFC->unkE; gUnknown_02022CFC->unk4C = 4; } @@ -962,7 +1002,7 @@ static bool32 sub_802B4CC(void) case 1: if (!sub_802BB84()) { - sub_802E354(gUnknown_02022CFC->unk78, gUnknown_02022CFC->unk74, gUnknown_02022CFC->unk72); + sub_802E354(gUnknown_02022CFC->unk70.unk8, gUnknown_02022CFC->unk70.unk4, gUnknown_02022CFC->unk70.unk2); gUnknown_02022CFC->unk8++; } break; @@ -996,7 +1036,7 @@ static bool32 sub_802B568(void) case 1: if (!sub_802BB84()) { - sub_802E354(gUnknown_02022CFC->unk78, gUnknown_02022CFC->unk74, gUnknown_02022CFC->unk72); + sub_802E354(gUnknown_02022CFC->unk70.unk8, gUnknown_02022CFC->unk70.unk4, gUnknown_02022CFC->unk70.unk2); gUnknown_02022CFC->unk42 = gUnknown_02022CFC->unk45; return FALSE; } @@ -1019,7 +1059,7 @@ static bool32 sub_802B5C8(void) { sub_802AA94(gUnknown_02022CFC); gUnknown_02022CFC->unk24 = Random(); - gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unk24; + gUnknown_02022CFC->unk70.unk2 = gUnknown_02022CFC->unk24; gUnknown_02022CFC->unk4C = 0; return FALSE; } @@ -1082,7 +1122,7 @@ static bool32 sub_802B6B8(void) case 1: if (!sub_802BA58()) { - gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unkE; + gUnknown_02022CFC->unk70.unk2 = gUnknown_02022CFC->unkE; gUnknown_02022CFC->unk4C = 8; return FALSE; } @@ -1106,7 +1146,7 @@ static bool32 sub_802B720(void) switch (gUnknown_02022CFC->unk8) { case 0: - sub_802E354(gUnknown_02022CFC->unk78, gUnknown_02022CFC->unk74, gUnknown_02022CFC->unk72); + sub_802E354(gUnknown_02022CFC->unk70.unk8, gUnknown_02022CFC->unk70.unk4, gUnknown_02022CFC->unk70.unk2); sub_802D0C8(5); gUnknown_02022CFC->unk8++; break; @@ -1145,8 +1185,6 @@ static bool32 sub_802B720(void) static bool32 sub_802B7E0(void) { - int var0; - switch (gUnknown_02022CFC->unkA) { case 0: @@ -1155,8 +1193,7 @@ static bool32 sub_802B7E0(void) gUnknown_02022CFC->unkA++; break; case 1: - var0 = sub_802D0F0(); - if (!var0) + if (!sub_802D0F0()) { sub_802DDF4(gUnknown_02022CFC->unk6); gUnknown_02022CFC->unk3C = 0; @@ -1278,7 +1315,7 @@ static bool32 sub_802B964(void) if (!sub_802D0F0()) { sub_802DDCC(); - gUnknown_02022CFC->unk71 = 0; + gUnknown_02022CFC->unk70.unk1 = 0; sub_802C114(); gUnknown_02022CFC->unkA++; return FALSE; @@ -1296,7 +1333,7 @@ static bool32 sub_802BA58(void) switch (gUnknown_02022CFC->unkA) { case 0: - sub_802C808(gUnknown_02022CFC->unk72, &gUnknown_02022CFC->unk3E, &gUnknown_02022CFC->unk40); + sub_802C808(gUnknown_02022CFC->unk70.unk2, &gUnknown_02022CFC->unk3E, &gUnknown_02022CFC->unk40); sub_802D7E8(gUnknown_02022CFC->unk3E, gUnknown_02022CFC->unk40); gUnknown_02022CFC->unkA++; break; @@ -1576,6 +1613,9 @@ static int sub_802BF48(void) return result; } +static const u16 gUnknown_082FB63C[] = {0x1a, 0x1f, 0x24, 0x29, 0x2e, 0x33, 0x38, 0x3d}; +static const u16 gUnknown_082FB64C[] = {0, 1, 1, 2}; + static void sub_802BF7C(void) { int var0; @@ -1694,21 +1734,23 @@ static void sub_802C1BC(void) gUnknown_02022CFC->unk83AC->unk10 = 0; } +static const u16 gUnknown_082FB654[] = {SE_REGI, SE_REAPOKE, SE_W234, SE_RG_EXCELLENT}; + static void sub_802C1DC(void) { if (gUnknown_02022CFC->unk5C) { - sub_802DD64(gUnknown_02022CFC->unk78); + sub_802DD64(gUnknown_02022CFC->unk70.unk8); gUnknown_02022CFC->unk5C = 0; if (gUnknown_02022CFC->unk4D) { - int index = sub_802DCCC(gUnknown_02022CFC->unk71); + int index = sub_802DCCC(gUnknown_02022CFC->unk70.unk1); PlaySE(gUnknown_082FB654[index - 2]); gUnknown_02022CFC->unk4D = 0; } } - sub_802DD74(gUnknown_02022CFC->unk74); + sub_802DD74(gUnknown_02022CFC->unk70.unk4); sub_802C280(); sub_802C240(); } @@ -1774,6 +1816,19 @@ static void sub_802C280(void) PlaySE(SE_DANSA); } +static const s8 gUnknown_082FB65C[][48] = +{ + {-3, -6, -8, -10, -13, -15, -17, -19, -21, -23, -25, -27, -28, -29, -30, -30, -30, -28, -27, + -26, -25, -23, -22, -20, -18, -17, -15, -13, -11, -8, -6, -4, -1}, + + {-3, -6, -9, -11, -14, -16, -18, -20, -22, -24, -26, -28, -29, -30, -30, -28, -26, -24, -22, + -20, -18, -16, -14, -11, -9, -6, -4, -1}, + + {-3, -6, -9, -11, -13, -15, -17, -19, -21, -23, -25, -27, -28, -29, -30, -30, -30, -30, -29, + -29, -28, -28, -27, -27, -26, -25, -24, -22, -20, -18, -16, -14, + -12, -11, -9, -6, -4, -1}, +}; + static void sub_802C398(int multiplayerId) { int var0; @@ -1813,7 +1868,7 @@ static void sub_802C398(int multiplayerId) sub_802DC80(multiplayerId, var1); if (!var1 && multiplayerId == gUnknown_02022CFC->unk6) sub_802C1BC(); - + player->unk0 = var1; } @@ -1826,7 +1881,7 @@ static void sub_802C43C(void) sub_802C780(); gUnknown_02022CFC->unk54 = 0; gUnknown_02022CFC->unk58 = 1; - gUnknown_02022CFC->unk71 = 0; + gUnknown_02022CFC->unk70.unk1 = 0; } else { @@ -1849,9 +1904,9 @@ static void sub_802C43C(void) sub_802C780(); gUnknown_02022CFC->unk54 = 0; gUnknown_02022CFC->unk58 = 1; - gUnknown_02022CFC->unk71 = 0; - if (gUnknown_02022CFC->unk74 < 9999) - gUnknown_02022CFC->unk74++; + gUnknown_02022CFC->unk70.unk1 = 0; + if (gUnknown_02022CFC->unk70.unk4 < 9999) + gUnknown_02022CFC->unk70.unk4++; sub_802C688(10); sub_802AE14(3); @@ -1955,10 +2010,10 @@ static bool32 sub_802C650(void) static void sub_802C688(int arg0) { - gUnknown_02022CFC->unk78 += arg0; + gUnknown_02022CFC->unk70.unk8 += arg0; gUnknown_02022CFC->unk5C = 1; - if (gUnknown_02022CFC->unk78 >= 99990) - gUnknown_02022CFC->unk78 = 99990; + if (gUnknown_02022CFC->unk70.unk8 >= 99990) + gUnknown_02022CFC->unk70.unk8 = 99990; } static int sub_802C6B0(void) @@ -2003,7 +2058,7 @@ static int sub_802C73C(u8 *arg0) } } - gUnknown_02022CFC->unk71 = flags; + gUnknown_02022CFC->unk70.unk1 = flags; if (flags) gUnknown_02022CFC->unk4D = 1; @@ -2015,6 +2070,8 @@ static void sub_802C780(void) gUnknown_02022CFC->unk44 = 0; } +static const int gUnknown_082FB6EC[] = {0, 0, 0x32, 0x64, 0xc8, 0x1f4}; + static int sub_802C790(int arg0) { return gUnknown_082FB6EC[arg0]; @@ -2026,9 +2083,19 @@ static void sub_802C7A0(u16 arg0) gUnknown_02022CFC->unkE = arg0; } +static const u16 gUnknown_082FB704[] = {0x8a, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93}; +static const u32 gUnknown_082FB714[][2] = +{ + {0x1388, 1}, + {0x1f40, 2}, + {0x2ee0, 3}, + {0x3e80, 4}, + {0x4e20, 5}, +}; + static bool32 sub_802C7BC(void) { - if (gUnknown_02022CFC->unk78 >= gUnknown_082FB714[0]) + if (gUnknown_02022CFC->unk70.unk8 >= gUnknown_082FB714[0][0]) return TRUE; else return FALSE; @@ -2053,6 +2120,22 @@ static u16 sub_802C818(void) return gUnknown_082FB704[index]; } +#ifdef NONMATCHING +// Impossible to match. +static u16 sub_802C838(void) +{ + u32 val, i; + + val = 0; + for (i = 0; i < 5; val = gUnknown_082FB714[i][1], i++) + { + if (gUnknown_02022CFC->unk70.unk8 < gUnknown_082FB714[i][0]) + break; + } + + return val; +} +#else NAKED static u16 sub_802C838(void) { @@ -2091,31 +2174,32 @@ _0802C874:\n\ pop {r1}\n\ bx r1"); } +#endif static u16 sub_802C880(u16 item, u16 quantity) { while (quantity && !CheckBagHasSpace(item, quantity)) quantity--; - + return quantity; } -u16 sub_802C8AC(void) +static u16 sub_802C8AC(void) { return GetLinkPlayerCount(); } -u16 sub_802C8BC(void) +static u16 sub_802C8BC(void) { return gUnknown_02022CFC->unk6; } -struct PokemonJump1_MonInfo *sub_802C8C8(u8 multiplayerId) +static struct PokemonJump1_MonInfo *sub_802C8C8(u8 multiplayerId) { return &gUnknown_02022CFC->unk82A8[multiplayerId]; } -u8 *sub_802C8E8(u8 multiplayerId) +static u8 *sub_802C8E8(u8 multiplayerId) { return gUnknown_02022CFC->unk82E4[multiplayerId].unk1C; } @@ -2145,13 +2229,331 @@ void sub_802C920(void) gSpecialVar_Result = 0; } -void sub_802C974(struct PokemonJump2 *arg0) +// Large group of data. +static const u16 gPkmnJumpPal1[] = INCBIN_U16("graphics/link_games/pkmnjump_pal1.gbapal"); +static const u16 gPkmnJumpPal2[] = INCBIN_U16("graphics/link_games/pkmnjump_pal2.gbapal"); + +static const u32 gPkmnJumpRopeGfx1[] = INCBIN_U32("graphics/link_games/pkmnjump_rope1.4bpp.lz"); +static const u32 gPkmnJumpRopeGfx2[] = INCBIN_U32("graphics/link_games/pkmnjump_rope2.4bpp.lz"); +static const u32 gPkmnJumpRopeGfx3[] = INCBIN_U32("graphics/link_games/pkmnjump_rope3.4bpp.lz"); +static const u32 gPkmnJumpRopeGfx4[] = INCBIN_U32("graphics/link_games/pkmnjump_rope4.4bpp.lz"); + +static const u32 gPkmnJumpStarGfx[] = INCBIN_U32("graphics/link_games/pkmnjump_star.4bpp.lz"); + +static const struct CompressedSpriteSheet gUnknown_082FBE08[] = +{ + {gPkmnJumpRopeGfx1, 0x600, 5}, + {gPkmnJumpRopeGfx2, 0x0c00, 6}, + {gPkmnJumpRopeGfx3, 0x0600, 7}, + {gPkmnJumpRopeGfx4, 0x0600, 8}, + {gPkmnJumpStarGfx, 0x0200, 10}, +}; + +static const struct SpritePalette gUnknown_082FBE30[] = +{ + {gPkmnJumpPal1, 5}, + {gPkmnJumpPal2, 6}, +}; + +// Forward declarations. +static const struct OamData sOamData_82FBEC8; +static const struct SpriteTemplate gUnknown_082FBF78; +static const struct SpriteTemplate gUnknown_082FBF90; +static const struct SpriteTemplate gUnknown_082FBFA8; +static const struct SpriteTemplate gUnknown_082FBFC0; + +static const struct SpriteTemplate gUnknown_082FBE40 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_82FBEC8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const s16 gUnknown_082FBE58[][10] = +{ + {0x60, 0x60, 0x60, 0x72, 0x78, 0x78, 0x78, 0x72, 0x60, 0x60}, + {0x46, 0x50, 0x60, 0x72, 0x78, 0x80, 0x78, 0x72, 0x60, 0x50}, + {0x32, 0x48, 0x60, 0x72, 0x80, 0x88, 0x80, 0x72, 0x60, 0x48}, + {0x2a, 0x48, 0x60, 0x72, 0x80, 0x88, 0x80, 0x72, 0x60, 0x48}, +}; + +static const s16 gUnknown_082FBEA8[] = {0x10, 0x28, 0x48, 0x68, 0x88, 0xa8, 0xc8, 0xe0}; + +static const struct SpriteTemplate *const gUnknown_082FBEB8[] = +{ + &gUnknown_082FBF78, + &gUnknown_082FBF90, + &gUnknown_082FBFA8, + &gUnknown_082FBFC0, +}; + +static const struct OamData sOamData_82FBEC8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FBED0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FBED8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FBEE0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_82FBEE8[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBEF0[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBEF8[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF00[] = +{ + ANIMCMD_FRAME(24, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF08[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF10[] = +{ + ANIMCMD_FRAME(40, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF18[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF20[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF28[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF30[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF38[] = +{ + ANIMCMD_FRAME(64, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF40[] = +{ + ANIMCMD_FRAME(80, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_82FBF48[] = +{ + sSpriteAnim_82FBEE8, + sSpriteAnim_82FBEF0, + sSpriteAnim_82FBEF8, + sSpriteAnim_82FBF00, + sSpriteAnim_82FBF08, + sSpriteAnim_82FBF10 +}; + +static const union AnimCmd *const sSpriteAnimTable_82FBF60[] = +{ + sSpriteAnim_82FBF18, + sSpriteAnim_82FBF20, + sSpriteAnim_82FBF28, + sSpriteAnim_82FBF30, + sSpriteAnim_82FBF38, + sSpriteAnim_82FBF40 +}; + +static const struct SpriteTemplate gUnknown_082FBF78 = +{ + .tileTag = 5, + .paletteTag = 5, + .oam = &sOamData_82FBED0, + .anims = sSpriteAnimTable_82FBF48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate gUnknown_082FBF90 = +{ + .tileTag = 6, + .paletteTag = 5, + .oam = &sOamData_82FBED8, + .anims = sSpriteAnimTable_82FBF60, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate gUnknown_082FBFA8 = +{ + .tileTag = 7, + .paletteTag = 5, + .oam = &sOamData_82FBEE0, + .anims = sSpriteAnimTable_82FBF48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate gUnknown_082FBFC0 = +{ + .tileTag = 8, + .paletteTag = 5, + .oam = &sOamData_82FBEE0, + .anims = sSpriteAnimTable_82FBF48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct OamData sOamData_82FBFD8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_82FBFE0[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBFE8[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(12, 4), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME(0, 4), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_82FC004[] = +{ + sSpriteAnim_82FBFE0, + sSpriteAnim_82FBFE8 +}; + +static const struct SpriteTemplate gUnknown_082FC00C = +{ + .tileTag = 10, + .paletteTag = 5, + .oam = &sOamData_82FBFD8, + .anims = sSpriteAnimTable_82FC004, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +// Back to code +static void sub_802C974(struct PokemonJump2 *arg0) { int i; for (i = 0; i < ARRAY_COUNT(gUnknown_082FBE08); i++) LoadCompressedSpriteSheet(&gUnknown_082FBE08[i]); - + for (i = 0; i < ARRAY_COUNT(gUnknown_082FBE30); i++) LoadSpritePalette(&gUnknown_082FBE30[i]); @@ -2166,7 +2568,7 @@ static void sub_802C9BC(struct Sprite *sprite) sprite->data[i] = 0; } -void sub_802C9D4(struct PokemonJump2 *arg0, struct PokemonJump1_MonInfo *jumpMon, u16 x, u16 y, u8 multiplayerId) +static void sub_802C9D4(struct PokemonJump2 *arg0, struct PokemonJump1_MonInfo *jumpMon, s16 x, s16 y, u8 multiplayerId) { struct SpriteTemplate spriteTemplate; struct SpriteSheet spriteSheet; @@ -2197,7 +2599,7 @@ void sub_802C9D4(struct PokemonJump2 *arg0, struct PokemonJump1_MonInfo *jumpMon spriteSheet.size = 0x800; LoadSpriteSheet(&spriteSheet); - spritePalette.data = GetFrontSpritePalFromSpeciesAndPersonality(jumpMon->species, jumpMon->otId, jumpMon->personality); + spritePalette.data = GetMonSpritePalFromSpeciesAndPersonality(jumpMon->species, jumpMon->otId, jumpMon->personality); spritePalette.tag = multiplayerId; LoadCompressedSpritePalette(&spritePalette); @@ -2218,7 +2620,7 @@ void sub_802C9D4(struct PokemonJump2 *arg0, struct PokemonJump1_MonInfo *jumpMon arg0->unk81A8[multiplayerId] = NULL; } -void sub_802CB14(struct PokemonJump2 *arg0, int multiplayerId) +static void sub_802CB14(struct PokemonJump2 *arg0, int multiplayerId) { sub_802C9BC(arg0->unk81BC[multiplayerId]); arg0->unk81BC[multiplayerId]->data[7] = arg0->unk81A8[multiplayerId] - gSprites; @@ -2258,14 +2660,14 @@ static void sub_802CB7C(struct Sprite *sprite) } } -void sub_802CBF0(struct PokemonJump2 *arg0, int multiplayerId) +static void sub_802CBF0(struct PokemonJump2 *arg0, int multiplayerId) { arg0->unk81A8[multiplayerId]->callback = sub_802CC40; arg0->unk81A8[multiplayerId]->pos2.y = 0; sub_802C9BC(arg0->unk81A8[multiplayerId]); } -bool32 sub_802CC18(struct PokemonJump2 *arg0, int multiplayerId) +static bool32 sub_802CC18(struct PokemonJump2 *arg0, int multiplayerId) { return arg0->unk81A8[multiplayerId]->callback == sub_802CC40; } @@ -2289,13 +2691,13 @@ static void sub_802CC40(struct Sprite *sprite) } } -void sub_802CC88(struct PokemonJump2 *arg0, int multiplayerId) +static void sub_802CC88(struct PokemonJump2 *arg0, int multiplayerId) { sub_802C9BC(arg0->unk81A8[multiplayerId]); arg0->unk81A8[multiplayerId]->callback = sub_802CD08; } -void sub_802CCB0(struct PokemonJump2 *arg0) +static void sub_802CCB0(struct PokemonJump2 *arg0) { int i; u16 numPlayers = sub_802C8AC(); @@ -2319,7 +2721,7 @@ static void sub_802CD08(struct Sprite *sprite) } } -void sub_802CD3C(struct PokemonJump2 *arg0) +static void sub_802CD3C(struct PokemonJump2 *arg0) { int i; u16 numPlayers = sub_802C8AC(); @@ -2327,13 +2729,13 @@ void sub_802CD3C(struct PokemonJump2 *arg0) arg0->unk81A8[i]->subpriority = arg0->unk81FC[i]; } -void sub_802CD70(struct PokemonJump2 *arg0, int multiplayerId) +static void sub_802CD70(struct PokemonJump2 *arg0, int multiplayerId) { sub_802C9BC(arg0->unk81A8[multiplayerId]); arg0->unk81A8[multiplayerId]->callback = sub_802CDD4; } -bool32 sub_802CD98(struct PokemonJump2 *arg0) +static bool32 sub_802CD98(struct PokemonJump2 *arg0) { int i; u16 numPlayers = sub_802C8AC(); @@ -2372,7 +2774,7 @@ static void sub_802CDD4(struct Sprite *sprite) } } -void sub_802CE48(struct PokemonJump2 *arg0, s16 x, s16 y, u8 multiplayerId) +static void sub_802CE48(struct PokemonJump2 *arg0, s16 x, s16 y, u8 multiplayerId) { u8 spriteId = CreateSprite(&gUnknown_082FC00C, x, y, 1); if (spriteId != MAX_SPRITES) @@ -2382,25 +2784,1853 @@ void sub_802CE48(struct PokemonJump2 *arg0, s16 x, s16 y, u8 multiplayerId) } } -// void sub_802CE9C(struct PokemonJump2 *arg0) -// { -// int i; -// int count; -// u8 spriteId; - -// count = 0; -// for (i = 0; i < 4; i++) -// { -// spriteId = CreateSprite(&gUnknown_082FBEB8[i], gUnknown_082FBEA8[count], gUnknown_082FBE58[i * 10], 2); -// arg0->unk81D0[count] = &gSprites[spriteId]; -// count++; -// } - -// for (i = 0; i < 4; i++) -// { -// spriteId = CreateSprite(&gUnknown_082FBEB8[i], gUnknown_082FBEA8[count], gUnknown_082FBE58[i * 10], 2); -// arg0->unk81D0[count] = &gSprites[spriteId]; -// arg0->unk81D0[count]->hFlip = 1; -// count++; -// } -// } +static void sub_802CE9C(struct PokemonJump2 *arg0) +{ + int i; + int count; + u8 spriteId; + + count = 0; + for (i = 0; i < 4; i++) + { + spriteId = CreateSprite(gUnknown_082FBEB8[i], gUnknown_082FBEA8[count], gUnknown_082FBE58[i][0], 2); + arg0->unk81D0[count] = &gSprites[spriteId]; + count++; + } + + for (i = 3; i >= 0; i--) + { + spriteId = CreateSprite(gUnknown_082FBEB8[i], gUnknown_082FBEA8[count], gUnknown_082FBE58[i][0], 2); + arg0->unk81D0[count] = &gSprites[spriteId]; + arg0->unk81D0[count]->hFlip = 1; + count++; + } +} + +static void sub_802CF50(struct PokemonJump2 *arg0, int arg1) +{ + int i, count, palNum; + int priority; + + if (arg1 > 5) + { + arg1 = 10 - arg1; + priority = 3; + palNum = arg0->unkF; + } + else + { + priority = 2; + palNum = arg0->unkE; + } + + count = 0; + for (i = 0; i < 4; i++) + { + arg0->unk81D0[count]->pos1.y = gUnknown_082FBE58[i][arg1]; + arg0->unk81D0[count]->oam.priority = priority; + arg0->unk81D0[count]->oam.paletteNum = palNum; + StartSpriteAnim(arg0->unk81D0[count], arg1); + count++; + } + + for (i = 3; i >= 0; i--) + { + arg0->unk81D0[count]->pos1.y = gUnknown_082FBE58[i][arg1]; + arg0->unk81D0[count]->oam.priority = priority; + arg0->unk81D0[count]->oam.paletteNum = palNum; + StartSpriteAnim(arg0->unk81D0[count], arg1); + count++; + } +} + +static void sub_802D044(struct PokemonJump2 *arg0) +{ + sub_802EB24(9, 7, 120, 80, 0); + sub_802CD3C(arg0); +} + +static bool32 sub_802D068(void) +{ + return sub_802EB84(); +} + +static void sub_802D074(struct PokemonJump2 *arg0) +{ + u8 taskId; + + gUnknown_02022D00 = arg0; + sub_802D0BC(gUnknown_02022D00); + taskId = CreateTask(sub_802D12C, 3); + gUnknown_02022D00->unk6 = taskId; + SetWordTaskArg(gUnknown_02022D00->unk6, 2, (u32) gUnknown_02022D00); + sub_802D108(sub_802D150); +} + +static void sub_802D0AC(void) +{ + FreeAllWindowBuffers(); + sub_8034CC8(); +} + +static void sub_802D0BC(struct PokemonJump2 *arg0) +{ + arg0->unk4 = 0; + arg0->unk0 = 0; + arg0->unk12 = 0xFF; +} + +// Gfx +static const u16 gPkmnJumpPal3[] = INCBIN_U16("graphics/link_games/pkmnjump_pal3.gbapal"); + +static const u16 gPkmnJumpBgPal[] = INCBIN_U16("graphics/link_games/pkmnjump_bg.gbapal"); +static const u32 gPkmnJumpBgGfx[] = INCBIN_U32("graphics/link_games/pkmnjump_bg.4bpp.lz"); +static const u32 gPkmnJumpBgTilemap[] = INCBIN_U32("graphics/link_games/pkmnjump_bg.bin.lz"); + +static const u16 gPkmnJumpVenusaurPal[] = INCBIN_U16("graphics/link_games/pkmnjump_venusaur.gbapal"); +static const u32 gPkmnJumpVenusaurGfx[] = INCBIN_U32("graphics/link_games/pkmnjump_venusaur.4bpp.lz"); +static const u32 gPkmnJumpVenusaurTilemap[] = INCBIN_U32("graphics/link_games/pkmnjump_venusaur.bin.lz"); + +static const u16 gPkmnJumpResultsPal[] = INCBIN_U16("graphics/link_games/pkmnjump_results.gbapal"); +static const u32 gPkmnJumpResultsGfx[] = INCBIN_U32("graphics/link_games/pkmnjump_results.4bpp.lz"); +static const u32 gPkmnJumpResultsTilemap[] = INCBIN_U32("graphics/link_games/pkmnjump_results.bin.lz"); + +static const struct BgTemplate gUnknown_082FE164[] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 27, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 30, + .screenSize = 2, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 2, + .mapBaseIndex = 12, + .screenSize = 3, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, +}; + +static const struct WindowTemplate gUnknown_082FE174[] = +{ + { + .bg = 0, + .tilemapLeft = 19, + .tilemapTop = 0, + .width = 6, + .height = 2, + .paletteNum = 2, + .baseBlock = 0x13, + }, + { + .bg = 0, + .tilemapLeft = 8, + .tilemapTop = 0, + .width = 6, + .height = 2, + .paletteNum = 2, + .baseBlock = 0x1F, + }, + DUMMY_WIN_TEMPLATE, +}; + +struct +{ + int id; + void (*func)(void); +} static const gUnknown_082FE18C[] = +{ + {0x00, sub_802D150}, + {0x01, sub_802D2E4}, + {0x02, sub_802D350}, + {0x03, sub_802D3BC}, + {0x04, sub_802D448}, + {0x05, sub_802D4F4}, + {0x06, sub_802D598}, + {0x07, sub_802D5E4}, + {0x09, sub_802D72C}, + {0x08, sub_802D688}, +}; + +static void sub_802D0C8(int arg0) +{ + int i; + + for (i = 0; i < ARRAY_COUNT(gUnknown_082FE18C); i++) + { + if (gUnknown_082FE18C[i].id == arg0) + sub_802D108(gUnknown_082FE18C[i].func); + } +} + +static bool32 sub_802D0F0(void) +{ + return (gUnknown_02022D00->unk0 != 1); +} + +static void sub_802D108(void (*func)(void)) +{ + SetWordTaskArg(gUnknown_02022D00->unk6, 0, (u32) func); + gUnknown_02022D00->unk4 = 0; + gUnknown_02022D00->unk0 = 0; +} + +static void sub_802D12C(u8 taskId) +{ + if (!gUnknown_02022D00->unk0) + { + void (*func)(void) = (void *)(GetWordTaskArg(taskId, 0)); + + func(); + } +} + +static void sub_802D150(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_082FE164, ARRAY_COUNT(gUnknown_082FE164)); + InitWindows(gUnknown_082FE174); + reset_temp_tile_data_buffers(); + sub_802C974(gUnknown_02022D00); + sub_802DD08(); + LoadPalette(gPkmnJumpBgPal, 0, 0x20); + decompress_and_copy_tile_data_to_vram(3, gPkmnJumpBgGfx, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(3, gPkmnJumpBgTilemap, 0, 0, 1); + LoadPalette(gPkmnJumpVenusaurPal, 0x30, 0x20); + decompress_and_copy_tile_data_to_vram(2, gPkmnJumpVenusaurGfx, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(2, gPkmnJumpVenusaurTilemap, 0, 0, 1); + LoadPalette(gPkmnJumpResultsPal, 0x10, 0x20); + decompress_and_copy_tile_data_to_vram(1, gPkmnJumpResultsGfx, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(1, gPkmnJumpResultsTilemap, 0, 0, 1); + LoadPalette(gPkmnJumpPal3, 0x20, 0x20); + SetBgTilemapBuffer(0, gUnknown_02022D00->tilemapBuffer); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); + sub_802DB8C(); + sub_802DD64(0); + sub_8098C6C(0, 1, 0xE0); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(1); + ResetBgPositions(); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!free_temp_tile_data_buffers_if_possible()) + { + sub_802DBF8(); + sub_802CE9C(gUnknown_02022D00); + sub_802CF50(gUnknown_02022D00, 6); + ShowBg(3); + ShowBg(0); + ShowBg(2); + HideBg(1); + gUnknown_02022D00->unk4++; + } + break; + case 2: + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D2E4(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + sub_802DE1C(); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_802DF70(FALSE); + gUnknown_02022D00->unk4++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_802DFD4(); + gUnknown_02022D00->unk4++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D350(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + sub_802DE1C(); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_802DF70(TRUE); + gUnknown_02022D00->unk4++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_802DFD4(); + gUnknown_02022D00->unk4++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D3BC(void) +{ + int i, numPlayers; + + numPlayers = sub_802C8AC(); + switch (gUnknown_02022D00->unk4) + { + case 0: + for (i = 0; i < numPlayers; i++) + ClearWindowTilemap(gUnknown_02022D00->unk1C[i]); + + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + for (i = 0; i < numPlayers; i++) + RemoveWindow(gUnknown_02022D00->unk1C[i]); + + gUnknown_02022D00->unk0 = 1; + } + break; + } +} + +static void sub_802D448(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + gUnknown_02022D00->unk12 = sub_802DA9C(1, 8, 20, 2); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gText_WantToPlayAgain2, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022D00->unk12); + DrawTextBorderOuter(gUnknown_02022D00->unk12, 1, 14); + sub_802DB18(23, 7, 0); + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unk4++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D4F4(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + gUnknown_02022D00->unk12 = sub_802DA9C(2, 7, 26, 4); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gText_SavingDontTurnOffPower, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022D00->unk12); + DrawTextBorderOuter(gUnknown_02022D00->unk12, 1, 14); + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unk4++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D598(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + sub_802DA14(); + sub_8198C78(); + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!sub_802DA44() && !IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D5E4(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + gUnknown_02022D00->unk12 = sub_802DA9C(2, 8, 22, 4); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gText_SomeoneDroppedOut2, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022D00->unk12); + DrawTextBorderOuter(gUnknown_02022D00->unk12, 1, 14); + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unk4++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D688(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + gUnknown_02022D00->unk12 = sub_802DA9C(7, 10, 16, 2); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gText_CommunicationStandby4, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022D00->unk12); + DrawTextBorderOuter(gUnknown_02022D00->unk12, 1, 14); + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unk4++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D72C(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + sub_802D044(gUnknown_02022D00); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!sub_802D068()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D764(void) +{ + gUnknown_02022D00->unkA = 0; + gUnknown_02022D00->unkB = 0; + gUnknown_02022D00->unkC = 6; + sub_802DC9C(gUnknown_02022D00->unkC); +} + +static bool32 sub_802D788(void) +{ + switch (gUnknown_02022D00->unkA) + { + case 0: + gUnknown_02022D00->unkB++; + if (gUnknown_02022D00->unkB > 10) + { + gUnknown_02022D00->unkB = 0; + gUnknown_02022D00->unkC++; + if (gUnknown_02022D00->unkC >= 10) + { + gUnknown_02022D00->unkC = 0; + gUnknown_02022D00->unkA++; + } + } + sub_802DC9C(gUnknown_02022D00->unkC); + if (gUnknown_02022D00->unkC != 7) + break; + case 1: + return FALSE; + } + + return TRUE; +} + +static void sub_802D7E8(u16 itemId, u16 quantity) +{ + CopyItemNameHandlePlural(itemId, gUnknown_02022D00->txtBuff[0], quantity); + ConvertIntToDecimalStringN(gUnknown_02022D00->txtBuff[1], quantity, STR_CONV_MODE_LEFT_ALIGN, 1); + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gUnknown_02022D00->txtBuff[0]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_02022D00->txtBuff[1]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_02022D00->strBuff, gText_AwesomeWonF701F700); + gUnknown_02022D00->unk12 = sub_802DA9C(4, 8, 22, 4); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gUnknown_02022D00->strBuff, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk14 = MUS_FANFA1; + gUnknown_02022D00->unkD = 0; +} + +static void sub_802D884(u16 itemId) +{ + CopyItemName(itemId, gUnknown_02022D00->txtBuff[0]); + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gUnknown_02022D00->txtBuff[0]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_02022D00->strBuff, gText_FilledStorageSpace2); + gUnknown_02022D00->unk12 = sub_802DA9C(4, 8, 22, 4); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gUnknown_02022D00->strBuff, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk14 = 0; + gUnknown_02022D00->unkD = 0; +} + +static void sub_802D8FC(u16 itemId) +{ + CopyItemName(itemId, gUnknown_02022D00->txtBuff[0]); + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gUnknown_02022D00->txtBuff[0]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_02022D00->strBuff, gText_CantHoldMore); + gUnknown_02022D00->unk12 = sub_802DA9C(4, 9, 22, 2); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gUnknown_02022D00->strBuff, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk14 = 0; + gUnknown_02022D00->unkD = 0; +} + +static bool32 sub_802D974(void) +{ + switch (gUnknown_02022D00->unkD) + { + case 0: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022D00->unk12); + DrawTextBorderOuter(gUnknown_02022D00->unk12, 1, 14); + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unkD++; + } + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + break; + if (gUnknown_02022D00->unk14 == 0) + { + gUnknown_02022D00->unkD += 2; + return FALSE; + } + PlayFanfare(gUnknown_02022D00->unk14); + gUnknown_02022D00->unkD++; + case 2: + if (!IsFanfareTaskInactive()) + break; + gUnknown_02022D00->unkD++; + case 3: + return FALSE; + } + + return TRUE; +} + +static void sub_802DA14(void) +{ + if (gUnknown_02022D00->unk12 != 0xFF) + { + rbox_fill_rectangle(gUnknown_02022D00->unk12); + CopyWindowToVram(gUnknown_02022D00->unk12, 1); + gUnknown_02022D00->unkD = 0; + } +} + +// Can't match this without the ugly GOTO, oh well. +static bool32 sub_802DA44(void) +{ + if (gUnknown_02022D00->unk12 == 0xFF) + { + RET_FALSE: + return FALSE; + } + + if (gUnknown_02022D00->unkD == 0) + { + if (!IsDma3ManagerBusyWithBgCopy()) + { + RemoveWindow(gUnknown_02022D00->unk12); + gUnknown_02022D00->unk12 = 0xFF; + gUnknown_02022D00->unkD++; + goto RET_FALSE; + } + } + else if (gUnknown_02022D00->unkD == 1) + goto RET_FALSE; + + return TRUE; +} + +static s8 sub_802DA8C(void) +{ + return Menu_ProcessInputNoWrapClearOnChoose(); +} + +static u32 sub_802DA9C(u32 left, u32 top, u32 width, u32 height) +{ + u32 windowId; + struct WindowTemplate window; + + window.bg = 0; + window.tilemapLeft = left; + window.tilemapTop = top; + window.width = width; + window.height = height; + window.paletteNum = 0xF; + window.baseBlock = 0x43; + + windowId = AddWindow(&window); + FillWindowPixelBuffer(windowId, 0x11); + return windowId; +} + +static void sub_802DB18(u16 left, u16 top, u8 cursorPos) +{ + struct WindowTemplate window; + u8 a = cursorPos; + + window.bg = 0; + window.tilemapLeft = left; + window.tilemapTop = top; + window.width = 6; + window.height = 4; + window.paletteNum = 2; + window.baseBlock = 0x2B; + + CreateYesNoMenu(&window, 1, 0xD, a); +} + +static void sub_802DB8C(void) +{ + u8 color[] = {0, 2, 3}; + + PutWindowTilemap(0); + PutWindowTilemap(1); + FillWindowPixelBuffer(0, 0); + FillWindowPixelBuffer(1, 0); + AddTextPrinterParameterized3(0, 0, 0, 1, color, 0, gText_SpacePoints2); + AddTextPrinterParameterized3(1, 0, 0, 1, color, 0, gText_SpaceTimes3); +} + +static const u8 gUnknown_082FE1DF[] = {2, 2, 0, 0, 1, 1, 1, 0, 0, 2, 0, 0, 0}; + +static const struct CompressedSpriteSheet gUnknown_082FE1EC = {gUnknown_082FF1F8, 0, 0x320}; +static const struct SpritePalette gUnknown_082FE1F4 = {gUnknown_082FF1D8, 0x320}; + +static const u16 gUnknown_082FE1FC[] = {0x06, 0x08, 0x10, 0x08}; +static const u16 gUnknown_082FE204[] = {0x06, 0x08, 0x0b, 0x06, 0x10, 0x08}; +static const u16 gUnknown_082FE210[] = {0x02, 0x06, 0x06, 0x08, 0x10, 0x08, 0x14, 0x06}; +static const u16 gUnknown_082FE220[] = {0x02, 0x06, 0x06, 0x08, 0x0b, 0x06, 0x10, 0x08, 0x14, 0x06}; + +static const u16 *const gUnknown_082FE234[] = +{ + gUnknown_082FE1FC, + gUnknown_082FE204, + gUnknown_082FE210, + gUnknown_082FE220, +}; + +static const s16 gUnknown_082FE244[] = {0x0058, 0x0098}; +static const s16 gUnknown_082FE248[] = {0x0058, 0x0078, 0x0098}; +static const s16 gUnknown_082FE24E[] = {0x0038, 0x0058, 0x0098, 0x00b8}; +static const s16 gUnknown_082FE256[] = {0x0038, 0x0058, 0x0078, 0x0098, 0x00b8}; + +static const s16 *const gUnknown_082FE260[] = +{ + gUnknown_082FE244, + gUnknown_082FE248, + gUnknown_082FE24E, + gUnknown_082FE256, +}; + +static void sub_802DBF8(void) +{ + int i, y, playersCount = sub_802C8AC(); + const s16 *xCoords = gUnknown_082FE260[playersCount - 2]; + + for (i = 0; i < playersCount; i++) + { + struct PokemonJump1_MonInfo *info = sub_802C8C8(i); + + y = gMonFrontPicCoords[info->species].y_offset; + sub_802C9D4(gUnknown_02022D00, info, *xCoords, y + 112, i); + sub_802CE48(gUnknown_02022D00, *xCoords, 112, i); + xCoords++; + } +} + +static void sub_802DC80(u32 id, s16 y) +{ + gUnknown_02022D00->unk81A8[id]->pos2.y = y; +} + +static void sub_802DC9C(int id) +{ + sub_802CF50(gUnknown_02022D00, id); + ChangeBgY(2, (gUnknown_082FE1DF[id] * 5) << 0xD, 0); +} + +static int sub_802DCCC(u8 flags) +{ + int i, count; + + for (i = 0, count = 0; i < 5; i++) + { + if (flags & 1) + { + sub_802CB14(gUnknown_02022D00, i); + count++; + } + flags >>= 1; + } + + sub_802E00C(count - 2); + return count; +} + +static void sub_802DD08(void) +{ + struct UnkStruct3 unkStruct; + struct UnkStruct3 *ptr = &unkStruct; // This temp variable is needed to match, don't ask me why. + + ptr->shape = 0; + ptr->size = 0; + ptr->field_0_0 = 0; + ptr->priority = 1; + ptr->field_1 = 5; + ptr->xDelta = 8; + ptr->x = 108; + ptr->y = 6; + ptr->spriteSheet = (void*) &gUnknown_082FE1EC; + ptr->spritePal = &gUnknown_082FE1F4; + + sub_8034C54(2); + sub_8034D14(0, 0, ptr); + + unkStruct.field_1 = 4; + unkStruct.x = 30; + unkStruct.y = 6; + sub_8034D14(1, 0, &unkStruct); +} + +static void sub_802DD64(int arg0) +{ + sub_8035044(0, arg0); +} + +static void sub_802DD74(u16 arg0) +{ + sub_8035044(1, arg0); +} + +static void sub_802DD88(u8 multiplayerId) +{ + sub_802CBF0(gUnknown_02022D00, multiplayerId); +} + +static void sub_802DDA0(u8 multiplayerId) +{ + sub_802CC88(gUnknown_02022D00, multiplayerId); +} + +static int sub_802DDB8(int multiplayerId) +{ + return sub_802CC18(gUnknown_02022D00, multiplayerId); +} + +static void sub_802DDCC(void) +{ + sub_802CCB0(gUnknown_02022D00); +} + +static void sub_802DDE0(void) +{ + sub_802CD3C(gUnknown_02022D00); +} + +static void sub_802DDF4(int multiplayerId) +{ + sub_802CD70(gUnknown_02022D00, multiplayerId); +} + +static int sub_802DE08(void) +{ + return sub_802CD98(gUnknown_02022D00); +} + +static void sub_802DE1C(void) +{ + struct WindowTemplate window; + int i, playersCount = sub_802C8AC(); + const u16 *winCoords = gUnknown_082FE234[playersCount - 2]; + + window.bg = 0; + window.width = 8; + window.height = 2; + window.paletteNum = 2; + window.baseBlock = 0x2B; + + for (i = 0; i < playersCount; i++) + { + window.tilemapLeft = winCoords[0]; + window.tilemapTop = winCoords[1]; + gUnknown_02022D00->unk1C[i] = AddWindow(&window); + ClearWindowTilemap(gUnknown_02022D00->unk1C[i]); + window.baseBlock += 0x10; + winCoords += 2; + } + + CopyBgTilemapBufferToVram(0); +} + +static void sub_802DED8(int multiplayerId, u8 clr1, u8 clr2, u8 clr3) +{ + u32 x; + u8 colors[3] = {clr1, clr2, clr3}; + + FillWindowPixelBuffer(gUnknown_02022D00->unk1C[multiplayerId], 0); + x = 64 - GetStringWidth(1, sub_802C8E8(multiplayerId), -1); + x /= 2; + AddTextPrinterParameterized3(gUnknown_02022D00->unk1C[multiplayerId], 1, x, 1, colors, -1, sub_802C8E8(multiplayerId)); + CopyWindowToVram(gUnknown_02022D00->unk1C[multiplayerId], 2); +} + +static void sub_802DF70(bool32 arg0) +{ + int i, var, playersCount = sub_802C8AC(); + + if (!arg0) + { + for (i = 0; i < playersCount; i++) + sub_802DED8(i, 0, 2, 3); + } + else + { + var = sub_802C8BC(); + for (i = 0; i < playersCount; i++) + { + if (var != i) + sub_802DED8(i, 0, 2, 3); + else + sub_802DED8(i, 0, 4, 5); + } + } +} + +static void sub_802DFD4(void) +{ + int i, playersCount = sub_802C8AC(); + + for (i = 0; i < playersCount; i++) + PutWindowTilemap(gUnknown_02022D00->unk1C[i]); + CopyBgTilemapBufferToVram(0); +} + +static void sub_802E00C(u8 arg0) +{ + gUnknown_02022D00->unk18 = 0; + ChangeBgX(1, (arg0 / 2) << 16, 0); + ChangeBgY(1, (((arg0 % 2) << 8) - 40) << 8, 0); + ShowBg(1); + CreateTask(sub_802E090, 4); +} + +static bool32 sub_802E058(void) +{ + if (gUnknown_02022D00->unk18 >= 32) + { + return FALSE; + } + else + { + ChangeBgY(1, 128, 1); + if (++gUnknown_02022D00->unk18 >= 32) + HideBg(1); + return TRUE; + } +} + +static void sub_802E090(u8 taskId) +{ + if (!sub_802E058()) + DestroyTask(taskId); +} + +struct MonInfoPacket +{ + u8 id; // packet id + u16 species; + u32 personality; + u32 otId; +}; + +static void sub_802E0AC(struct PokemonJump1_MonInfo *arg0) +{ + struct MonInfoPacket packet; + packet.id = 1, + packet.species = arg0->species, + packet.otId = arg0->otId, + packet.personality = arg0->personality, + sub_800FE50(&packet); +} + +static bool32 sub_802E0D0(int multiplayerId, struct PokemonJump1_MonInfo *arg0) +{ + struct MonInfoPacket packet; + + if ((gRecvCmds[multiplayerId][0] & 0xFF00) != 0x2F00) + return FALSE; + + memcpy(&packet, &gRecvCmds[multiplayerId][1], sizeof(packet)); + if (packet.id == 1) + { + arg0->species = packet.species; + arg0->otId = packet.otId; + arg0->personality = packet.personality; + return TRUE; + } + + return FALSE; +} + +struct UnkPacket2 +{ + u8 id; // packet id + u32 unk4; + u32 unk8; +}; + +static void sub_802E120(u32 arg0) +{ + struct UnkPacket2 packet; + packet.id = 2; + packet.unk4 = arg0; + sub_800FE50(&packet); +} + +struct UnkPacket3 +{ + u8 id; // packet id + u8 unk1; + u8 unk2; + u8 unk3_0:5; + u8 unk3_1:3; + u16 unk4; + u16 unk6; + u32 unk8_0:15; + u32 unk8_1:17; +}; + +static void sub_802E138(struct PokemonJump1_82E4 *arg0, struct PokemonJump1Sub *arg1) +{ + struct UnkPacket3 packet; + packet.id = 3; + packet.unk8_1 = arg1->unk8; + packet.unk3_0 = arg1->unk1; + packet.unk1 = arg1->unk0; + packet.unk6 = arg1->unk2; + packet.unk8_0 = arg1->unk4; + packet.unk2 = arg0->unk10; + packet.unk3_1 = arg0->unk14; + packet.unk4 = arg0->unkE; + sub_800FE50(&packet); +} + +static bool32 sub_802E1BC(struct PokemonJump1_82E4 *arg0, struct PokemonJump1Sub *arg1) +{ + struct UnkPacket3 packet; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return FALSE; + + memcpy(&packet, &gRecvCmds[0][1], sizeof(packet)); + if (packet.id != 3) + return FALSE; + + arg1->unk8 = packet.unk8_1; + arg1->unk1 = packet.unk3_0; + arg1->unk0 = packet.unk1; + arg1->unk2 = packet.unk6; + arg1->unk4 = packet.unk8_0; + arg0->unk10 = packet.unk2; + arg0->unk14 = packet.unk3_1; + arg0->unkE = packet.unk4; + return TRUE; +} + +struct UnkPacket4 +{ + u8 id; // packet id + u8 unk1; + u8 unk2; + u8 unk3; + u16 unk4; + u8 unk6; + u16 unk8; +}; + +static void sub_802E234(struct PokemonJump1_82E4 *arg0, u8 arg1, u16 arg2) +{ + struct UnkPacket4 packet; + packet.id = 4; + packet.unk1 = arg0->unk10; + packet.unk2 = arg0->unk14; + packet.unk3 = arg0->unk18; + packet.unk4 = arg0->unkE; + packet.unk6 = arg1; + packet.unk8 = arg2; + sub_800FE50(&packet); +} + +static bool32 sub_802E264(struct PokemonJump1_82E4 *arg0, int multiplayerId, u8 *arg2, u16 *arg3) +{ + struct UnkPacket4 packet; + + if ((gRecvCmds[multiplayerId][0] & 0xFF00) != 0x2F00) + return FALSE; + + memcpy(&packet, &gRecvCmds[multiplayerId][1], sizeof(packet)); + if (packet.id != 4) + return FALSE; + + arg0->unk10 = packet.unk1; + arg0->unk14 = packet.unk2; + arg0->unk18 = packet.unk3; + arg0->unkE = packet.unk4; + *arg2 = packet.unk6; + *arg3 = packet.unk8; + return TRUE; +} + +static bool32 sub_802E2D0(struct PokemonJump1_82E4 *arg0, int multiplayerId) +{ + struct UnkPacket4 packet; + + if ((gRecvCmds[multiplayerId][0] & 0xFF00) != 0x2F00) + return FALSE; + + memcpy(&packet, &gRecvCmds[multiplayerId][1], sizeof(packet)); + if (packet.id != 4) + return FALSE; + + arg0->unk10 = packet.unk1; + arg0->unk14 = packet.unk2; + arg0->unk18 = packet.unk3; + arg0->unkE = packet.unk4; + return TRUE; +} + +static struct PokemonJumpResults *sub_802E32C(void) +{ + return &gSaveBlock2Ptr->pokeJump; +} + +void ResetPokeJumpResults(void) +{ + struct PokemonJumpResults *pokeJump = sub_802E32C(); + pokeJump->jumpsInRow = 0; + pokeJump->bestJumpScore = 0; + pokeJump->excellentsInRow = 0; + pokeJump->field6 = 0; + pokeJump->field8 = 0; + pokeJump->field2 = 0; +} + +static bool32 sub_802E354(u32 jumpScore, u16 jumpsInRow, u16 excellentsInRow) +{ + struct PokemonJumpResults *pokeJump = sub_802E32C(); + bool32 ret = FALSE; + + if (pokeJump->bestJumpScore < jumpScore && jumpScore <= 99990) + pokeJump->bestJumpScore = jumpScore, ret = TRUE; + if (pokeJump->jumpsInRow < jumpsInRow && jumpsInRow <= 9999) + pokeJump->jumpsInRow = jumpsInRow, ret = TRUE; + if (pokeJump->excellentsInRow < excellentsInRow && excellentsInRow <= 9999) + pokeJump->excellentsInRow = excellentsInRow, ret = TRUE; + + return ret; +} + +static void sub_802E3A8(void) +{ + struct PokemonJumpResults *pokeJump = sub_802E32C(); + if (pokeJump->field6 < 9999) + pokeJump->field6++; +} + +void sub_802E3C4(void) +{ + u8 taskId = CreateTask(sub_802E3E4, 0); + sub_802E3E4(taskId); +} + +static const struct WindowTemplate gUnknown_082FE270 = +{ + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 28, + .height = 9, + .paletteNum = 15, + .baseBlock = 0x1, +}; + +static const u8 *const gUnknown_082FE278[] = {gText_JumpsInARow, gText_BestScore2, gText_ExcellentsInARow}; + +static void sub_802E3E4(u8 taskId) +{ + struct WindowTemplate window; + int i, width, widthCurr; + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + window = gUnknown_082FE270; + width = GetStringWidth(1, gText_PkmnJumpRecords, 0); + for (i = 0; i < ARRAY_COUNT(gUnknown_082FE278); i++) + { + widthCurr = GetStringWidth(1, gUnknown_082FE278[i], 0) + 38; + if (widthCurr > width) + width = widthCurr; + } + width = (width + 7) / 8; + if (width & 1) + width++; + window.tilemapLeft = (30 - width) / 2; + window.width = width; + data[1] = AddWindow(&window); + sub_802E500(data[1], width); + CopyWindowToVram(data[1], 3); + data[0]++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + data[0]++; + break; + case 2: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + rbox_fill_rectangle(data[1]); + CopyWindowToVram(data[1], 1); + data[0]++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + RemoveWindow(data[1]); + DestroyTask(taskId); + EnableBothScriptContexts(); + } + break; + } +} + +static void sub_802E500(u16 windowId, int width) +{ + int i, x; + int results[3]; + struct PokemonJumpResults *pokeJump = sub_802E32C(); + results[0] = pokeJump->jumpsInRow; + results[1] = pokeJump->bestJumpScore; + results[2] = pokeJump->excellentsInRow; + + LoadUserWindowBorderGfx_(windowId, 0x21D, 0xD0); + DrawTextBorderOuter(windowId, 0x21D, 0xD); + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + AddTextPrinterParameterized(windowId, 1, gText_PkmnJumpRecords, GetStringCenterAlignXOffset(1, gText_PkmnJumpRecords, width * 8), 1, TEXT_SPEED_FF, NULL); + for (i = 0; i < ARRAY_COUNT(gUnknown_082FE278); i++) + { + AddTextPrinterParameterized(windowId, 1, gUnknown_082FE278[i], 0, 25 + (i * 16), TEXT_SPEED_FF, NULL); + ConvertIntToDecimalStringN(gStringVar1, results[i], STR_CONV_MODE_LEFT_ALIGN, 5); + TruncateToFirstWordOnly(gStringVar1); + x = (width * 8) - GetStringWidth(1, gStringVar1, 0); + AddTextPrinterParameterized(windowId, 1, gStringVar1, x, 25 + (i * 16), TEXT_SPEED_FF, NULL); + } + PutWindowTilemap(windowId); +} + +static void TruncateToFirstWordOnly(u8 *str) +{ + for (;*str != EOS; str++) + { + if (*str == CHAR_SPACE) + { + *str = EOS; + break; + } + } +} + +static const u16 gPkmnJump321StartPal1[] = INCBIN_U16("graphics/link_games/pkmnjump_321start1.gbapal"); +static const u32 gPkmnJump321StartGfx1[] = INCBIN_U32("graphics/link_games/pkmnjump_321start1.4bpp.lz"); + +static const struct CompressedSpriteSheet gUnknown_082FE6C8[] = +{ + {gPkmnJump321StartGfx1, 0xC00, 0x2000}, + {}, +}; + +static const struct SpritePalette gUnknown_082FE6D8[] = +{ + {gPkmnJump321StartPal1, 0x2000}, + {}, +}; + +static const union AnimCmd sSpriteAnim_82FE6E8[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FE6F0[] = +{ + ANIMCMD_FRAME(16, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FE6F8[] = +{ + ANIMCMD_FRAME(32, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FE700[] = +{ + ANIMCMD_FRAME(64, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FE708[] = +{ + ANIMCMD_FRAME(48, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FE710[] = +{ + ANIMCMD_FRAME(80, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_82FE718[] = +{ + sSpriteAnim_82FE6E8, + sSpriteAnim_82FE6F0, + sSpriteAnim_82FE6F8, + sSpriteAnim_82FE700, + sSpriteAnim_82FE708, + sSpriteAnim_82FE710 +}; + +static const struct SpriteTemplate gUnknown_082FE730[] = +{ + { + .tileTag = 0x2000, + .paletteTag = 0x2000, + .oam = &gUnknown_08524914, + .anims = sSpriteAnimTable_82FE718, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, +}; + +static const TaskFunc gUnknown_082FE748[][4] = +{ + { + sub_802E83C, + sub_802E8C8, + sub_802EA50, + sub_802EAB0 + }, +}; + +// There's only set of task functions. +static u32 sub_802E63C(u8 funcSetId, u8 taskPriority) +{ + u8 taskId = CreateTask(sub_802E6D0, taskPriority); + struct Task *task = &gTasks[taskId]; + + task->data[0] = 1; + task->data[1] = funcSetId; + gUnknown_082FE748[funcSetId][0](taskId); + return taskId; +} + +static bool32 sub_802E688(void) +{ + u8 taskId = FindTaskIdByFunc(sub_802E6D0); + if (taskId == 0xFF) + return FALSE; + + gTasks[taskId].data[0] = 2; + return TRUE; +} + +static bool32 sub_802E6BC(void) +{ + return FuncIsActiveTask(sub_802E6D0); +} + +static void sub_802E6D0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 2: + gUnknown_082FE748[data[1]][2](taskId); + data[0] = 3; + break; + case 3: + gUnknown_082FE748[data[1]][3](taskId); + break; + case 4: + gUnknown_082FE748[data[1]][1](taskId); + DestroyTask(taskId); + break; + } +} + +static void sub_802E75C(u8 taskId, s16 *data) +{ + u8 i; + struct Sprite *sprite; + + LoadCompressedSpriteSheet(&gUnknown_082FE6C8[data[3]]); + LoadSpritePalette(&gUnknown_082FE6D8[data[4]]); + for (i = 0; i < data[8]; i++) + data[13 + i] = CreateSprite(&gUnknown_082FE730[data[2]], data[9], data[10], data[7]); + for (i = 0; i < data[8]; i++) + { + sprite = &gSprites[data[13 + i]]; + sprite->oam.priority = data[6]; + sprite->invisible = TRUE; + sprite->data[1] = data[5]; + sprite->data[3] = taskId; + sprite->data[4] = i; + sprite->data[5] = data[13]; + } +} + +static void sub_802E83C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + data[2] = 0; + data[3] = 0; + data[4] = 0; + data[5] = 60; + data[6] = 0; + data[7] = 0; + data[8] = 3; + data[9] = 120; + data[10] = 88; + sub_802E75C(taskId, data); + + StartSpriteAnim(&gSprites[data[14]], 4); + gSprites[data[14]].pos2.x = -32; + + StartSpriteAnim(&gSprites[data[15]], 5); + gSprites[data[15]].pos2.x = 32; +} + +static void sub_802E8C8(u8 taskId) +{ + u8 i = 0; + s16 *data = gTasks[taskId].data; + + for (i = 0; i < data[8]; i++) + DestroySprite(&gSprites[data[13 + i]]); + FreeSpriteTilesByTag(gUnknown_082FE6C8[data[3]].tag); + FreeSpritePaletteByTag(gUnknown_082FE6D8[data[4]].tag); +} + +static void sub_802E938(struct Sprite *sprite) +{ + s16 *data = gTasks[sprite->data[3]].data; + + if (data[11] % data[5] != 0) + return; + if (data[11] == data[10]) + return; + + data[10] = data[11]; + switch (sprite->data[2]) + { + case 0: + sprite->invisible = FALSE; + case 1: + case 2: + PlaySE(SE_KON); + StartSpriteAnim(sprite, sprite->data[2]); + break; + case 3: + PlaySE(SE_PIN); + StartSpriteAnim(sprite, sprite->data[2]); + gSprites[data[14]].invisible = FALSE; + gSprites[data[15]].invisible = FALSE; + break; + case 4: + sprite->invisible = TRUE; + gSprites[data[14]].invisible = TRUE; + gSprites[data[15]].invisible = TRUE; + data[0] = 4; + return; + } + sprite->data[2]++; +} + +static void sub_802EA50(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + PlaySE(SE_KON); + gSprites[data[13]].callback = sub_802E938; + gSprites[data[13]].invisible = FALSE; + gTasks[taskId].data[0] = 3; +} + +static void sub_802EAB0(u8 taskId) +{ + u16 packet[6]; + s16 *data = gTasks[taskId].data; + + if (gReceivedRemoteLinkPlayers != 0) + { + if (gRecvCmds[0][1] == 0x7FFF) + data[11] = gRecvCmds[0][2]; + if (GetMultiplayerId() == 0) + { + data[12]++; + memset(packet, 0, sizeof(packet)); + packet[0] = 0x7FFF; + packet[1] = data[12]; + sub_800FE50(packet); + } + } + else + { + data[11]++; + } +} + +void sub_802EB24(s16 tileTag, s16 palTag, s16 x, s16 y, u8 subpriority) +{ + u8 taskId = CreateTask(sub_802EB98, 0x50); + gTasks[taskId].data[2] = tileTag; + gTasks[taskId].data[3] = palTag; + gTasks[taskId].data[4] = x; + gTasks[taskId].data[5] = y; + gTasks[taskId].data[6] = subpriority; +} + +bool32 sub_802EB84(void) +{ + return FuncIsActiveTask(sub_802EB98); +} + +static void sub_802EB98(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_802EF50(data[2], data[3]); + data[7] = sub_802EFA8(data[2], data[3], data[4], data[5], data[6]); + sub_802EFFC(data[2], data[3], data[4], data[5], data[6], &data[8], &data[9]); + data[0]++; + break; + case 1: + if (!sub_802EC98(data[7])) + { + sub_802EDCC(data[7], data[8], data[9]); + FreeSpriteOamMatrix(&gSprites[data[7]]); + DestroySprite(&gSprites[data[7]]); + data[0]++; + } + break; + case 2: + if (!sub_802EE30(data[8])) + { + DestroySprite(&gSprites[data[8]]); + DestroySprite(&gSprites[data[9]]); + FreeSpriteTilesByTag(data[2]); + FreeSpritePaletteByTag(data[3]); + DestroyTask(taskId); + } + break; + } +} + +static bool32 sub_802EC98(u8 spriteId) +{ + struct Sprite *sprite = &gSprites[spriteId]; + + switch (sprite->data[0]) + { + case 0: + sub_8007E18(sprite, 0x800, 0x1A); + sprite->data[0]++; + case 1: + if (sprite->data[2] == 0) + PlaySE(SE_KON2); + if (++sprite->data[2] >= 20) + { + sprite->data[2] = 0; + StartSpriteAffineAnim(sprite, 1); + sprite->data[0]++; + } + break; + case 2: + if (sprite->affineAnimEnded) + sprite->data[0]++; + break; + case 3: + if (++sprite->data[2] >= 4) + { + sprite->data[2] = 0; + sprite->data[0]++; + StartSpriteAffineAnim(sprite, 2); + } + break; + case 4: + sprite->pos1.y -= 4; + if (++sprite->data[2] >= 8) + { + if (sprite->data[4] <= 1) + { + StartSpriteAnim(sprite, sprite->data[4] + 1); + sprite->data[2] = 0; + sprite->data[0]++; + } + else + { + sprite->data[0] = 7; + return FALSE; + } + } + break; + case 5: + sprite->pos1.y += 4; + if (++sprite->data[2] >= 8) + { + sprite->data[2] = 0; + StartSpriteAffineAnim(sprite, 3); + sprite->data[0]++; + } + break; + case 6: + if (sprite->affineAnimEnded) + { + sprite->data[4]++; + sprite->data[0] = 1; + } + break; + case 7: + return FALSE; + } + + return TRUE; +} + +// First argument is unused. +static void sub_802EDCC(u8 spriteId1, u8 spriteId2, u8 spriteId3) +{ + gSprites[spriteId2].pos2.y = -40; + gSprites[spriteId3].pos2.y = -40; + gSprites[spriteId2].invisible = FALSE; + gSprites[spriteId3].invisible = FALSE; + gSprites[spriteId2].callback = sub_802EE5C; + gSprites[spriteId3].callback = sub_802EE5C; +} + +static bool32 sub_802EE30(u8 spriteId) +{ + return (gSprites[spriteId].callback == sub_802EE5C); +} + +static void sub_802EE5C(struct Sprite *sprite) +{ + int y; + s16 *data = sprite->data; + + switch (data[0]) + { + case 0: + data[4] = 64; + data[5] = sprite->pos2.y << 4; + data[0]++; + case 1: + data[5] += data[4]; + data[4]++; + sprite->pos2.y = data[5] >> 4; + if (sprite->pos2.y >= 0) + { + PlaySE(SE_KON2); + sprite->pos2.y = 0; + data[0]++; + } + break; + case 2: + data[1] += 12; + if (data[1] >= 128) + { + PlaySE(SE_KON2); + data[1] = 0; + data[0]++; + } + y = gSineTable[data[1]]; + sprite->pos2.y = -(y >> 4); + break; + case 3: + data[1] += 16; + if (data[1] >= 128) + { + PlaySE(SE_KON2); + data[1] = 0; + data[0]++; + } + sprite->pos2.y = -(gSineTable[data[1]] >> 5); + break; + case 4: + if (++data[1] > 40) + sprite->callback = SpriteCallbackDummy; + break; + } +} + +static const u16 gPkmnJump321StartPal2[] = INCBIN_U16("graphics/link_games/pkmnjump_321start2.gbapal"); +static const u32 gPkmnJump321StartGfx2[] = INCBIN_U32("graphics/link_games/pkmnjump_321start2.4bpp.lz"); + +static void sub_802EF50(u16 tileTag, u16 palTag) +{ + struct CompressedSpriteSheet sprSheet = {gPkmnJump321StartGfx2, 0xE00, 0}; + struct SpritePalette sprPal = {gPkmnJump321StartPal2, 0}; + + sprSheet.tag = tileTag; + sprPal.tag = palTag; + + LoadCompressedSpriteSheet(&sprSheet); + LoadSpritePalette(&sprPal); +} + +static const struct OamData sOamData_82FEBDC = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FEBE4 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_82FEBEC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FEBF4[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FEBFC[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_82FEC04[] = +{ + sSpriteAnim_82FEBEC, + sSpriteAnim_82FEBF4, + sSpriteAnim_82FEBFC +}; + +static const union AnimCmd sSpriteAnim_82FEC10[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FEC18[] = +{ + ANIMCMD_FRAME(80, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_82FEC20[] = +{ + sSpriteAnim_82FEC10, + sSpriteAnim_82FEC18 +}; + +static const union AffineAnimCmd sSpriteAffineAnim_82FEC28[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_82FEC38[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_FRAME(16, -16, 0, 8), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_82FEC50[] = +{ + AFFINEANIMCMD_FRAME(-18, 18, 0, 8), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_82FEC60[] = +{ + AFFINEANIMCMD_FRAME(6, -6, 0, 8), + AFFINEANIMCMD_FRAME(-4, 4, 0, 8), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_82FEC80[] = +{ + sSpriteAffineAnim_82FEC28, + sSpriteAffineAnim_82FEC38, + sSpriteAffineAnim_82FEC50, + sSpriteAffineAnim_82FEC60 +}; + +static u8 sub_802EFA8(u16 tileTag, u16 palTag, s16 x, s16 y, u8 subpriority) +{ + u8 spriteId; + struct SpriteTemplate sprTemplate = + { + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_82FEBDC, + .anims = sSpriteAnimTable_82FEC04, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_82FEC80, + .callback = SpriteCallbackDummy, + }; + + sprTemplate.tileTag = tileTag; + sprTemplate.paletteTag = palTag; + spriteId = CreateSprite(&sprTemplate, x, y, subpriority); + return spriteId; +} + +static void sub_802EFFC(u16 tileTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 *spriteId1, s16 *spriteId2) +{ + struct SpriteTemplate sprTemplate = + { + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_82FEBE4, + .anims = sSpriteAnimTable_82FEC20, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + sprTemplate.tileTag = tileTag; + sprTemplate.paletteTag = palTag; + *spriteId1 = CreateSprite(&sprTemplate, x - 32, y, subpriority); + *spriteId2 = CreateSprite(&sprTemplate, x + 32, y, subpriority); + + gSprites[*spriteId1].invisible = TRUE; + gSprites[*spriteId2].invisible = TRUE; + StartSpriteAnim(&gSprites[*spriteId2], 1); +} diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 0ddad55a6..4cd1a4772 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -443,7 +443,7 @@ enum #define TAG_TILE_1 0x1 // IWRAM bss -IWRAM_DATA static u32 gUnknown_03000F78[98]; +static u32 gUnknown_03000F78[98]; // EWRAM DATA EWRAM_DATA static u8 sPreviousBoxOption = 0; @@ -6824,7 +6824,7 @@ static void SetCursorMonData(void *pokemon, u8 mode) sPSSData->cursorMonLevel = GetLevelFromBoxMonExp(boxMon); sPSSData->cursorMonMarkings = GetBoxMonData(boxMon, MON_DATA_MARKINGS); sPSSData->cursorMonPersonality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY); - sPSSData->cursorMonPalette = GetFrontSpritePalFromSpeciesAndPersonality(sPSSData->cursorMonSpecies, otId, sPSSData->cursorMonPersonality); + sPSSData->cursorMonPalette = GetMonSpritePalFromSpeciesAndPersonality(sPSSData->cursorMonSpecies, otId, sPSSData->cursorMonPersonality); gender = GetGenderFromSpeciesAndPersonality(sPSSData->cursorMonSpecies, sPSSData->cursorMonPersonality); sPSSData->cursorMonItem = GetBoxMonData(boxMon, MON_DATA_HELD_ITEM); } diff --git a/src/pokenav.c b/src/pokenav.c index be3826bed..a5bb51789 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -31,72 +31,30 @@ struct UnknownPokenavCallbackStruct bool32 (*unk0)(void); u32 (*unk4)(void); bool32 (*unk8)(void); - void (*unkC)(int); + void (*unkC)(s32); u32 (*unk10)(void); void (*unk14)(void); void (*unk18)(void); }; -extern bool32 sub_81C9924(void); -extern u32 sub_81C99C0(void); -extern void sub_81C9990(int); -extern bool32 sub_81C9940(void); -extern u32 sub_81CCFD8(void); -extern u32 sub_81CD070(void); -extern bool32 sub_81CDDD4(void); -extern void sub_81CDE2C(int); -extern u32 sub_81CDE64(void); -extern void sub_81CD1C0(void); -extern void sub_81CECA0(void); -extern u32 sub_81CEF3C(void); -extern u32 sub_81CEFDC(void); -extern bool32 sub_81CF330(void); -extern void sub_81CF3A0(int); -extern u32 sub_81CF3D0(void); -extern void sub_81CEFF0(void); -extern void sub_81CF3F8(void); -extern u32 sub_81CD024(void); -extern u32 sub_81CEF98(void); -extern bool32 sub_81CF368(void); -extern u32 sub_81CF9BC(void); -extern u32 sub_81CFA34(void); -extern bool32 sub_81CFDD0(void); -extern void sub_81CFE40(int); -extern u32 sub_81CFE70(void); -extern void sub_81CFA48(void); -extern void sub_81CFE98(void); -extern u32 sub_81D0450(void); -extern u32 sub_81D04A0(void); -extern bool32 sub_81D0978(void); -extern void sub_81D09B0(int); -extern u32 sub_81D09E0(void); -extern void sub_81D04B8(void); -extern void sub_81D09F4(void); -extern u32 sub_81CFA04(void); -extern bool32 sub_81CFE08(void); - +static u32 sub_81C75E0(void); +static u32 sub_81C75D4(void); static bool32 SetActivePokenavMenu(u32 menuId); static bool32 AnyMonHasRibbon(void); -u32 sub_81C75E0(void); -u32 sub_81C75D4(void); -u32 PokenavMainMenuLoopedTaskIsActive(void); -bool32 WaitForPokenavShutdownFade(void); -void sub_81C7834(void *func1, void *func2); static void InitPokenavResources(struct PokenavResources *a0); -void Task_RunLoopedTask_LinkMode(u8 a0); -void Task_RunLoopedTask(u8 taskId); -void sub_81C742C(u8 taskId); -void ShutdownPokenav(void); static void InitKeys_(void); static void FreePokenavResources(void); static void VBlankCB_Pokenav(void); static void CB2_Pokenav(void); -void sub_81C72BC(void); +static void Task_RunLoopedTask_LinkMode(u8 a0); +static void Task_RunLoopedTask(u8 taskId); +static void sub_81C742C(u8 taskId); +static void sub_81C72BC(void); const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = { { - .unk0 = sub_81C9298, + .unk0 = PokenavCallback_Init_0, .unk4 = sub_81C941C, .unk8 = sub_81C9924, .unkC = sub_81C9990, @@ -105,7 +63,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81C99D4, }, { - .unk0 = sub_81C9298, + .unk0 = PokenavCallback_Init_0, .unk4 = sub_81C941C, .unk8 = sub_81C9940, .unkC = sub_81C9990, @@ -114,7 +72,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81C99D4, }, { - .unk0 = sub_81C9338, + .unk0 = PokenavCallback_Init_2, .unk4 = sub_81C941C, .unk8 = sub_81C9940, .unkC = sub_81C9990, @@ -123,7 +81,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81C99D4, }, { - .unk0 = sub_81C9368, + .unk0 = PokenavCallback_Init_3, .unk4 = sub_81C941C, .unk8 = sub_81C9940, .unkC = sub_81C9990, @@ -132,16 +90,16 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81C99D4, }, { - .unk0 = sub_81C92CC, + .unk0 = PokenavCallback_Init_4, .unk4 = sub_81C941C, .unk8 = sub_81C9940, .unkC = sub_81C9990, - .unk10 =sub_81C99C0, + .unk10 = sub_81C99C0, .unk14 = sub_81C9430, .unk18 = sub_81C99D4, }, { - .unk0 = sub_81C9304, + .unk0 = PokenavCallback_Init_5, .unk4 = sub_81C941C, .unk8 = sub_81C9940, .unkC = sub_81C9990, @@ -150,7 +108,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81C99D4, }, { - .unk0 = sub_81CC4D4, + .unk0 = PokenavCallback_Init_6, .unk4 = sub_81CC554, .unk8 = sub_81CC5F4, .unkC = sub_81CC62C, @@ -159,7 +117,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81CC670, }, { - .unk0 = sub_81CCFD8, + .unk0 = PokenavCallback_Init_7, .unk4 = sub_81CD070, .unk8 = sub_81CDDD4, .unkC = sub_81CDE2C, @@ -168,7 +126,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81CECA0, }, { - .unk0 = sub_81CEF3C, + .unk0 = PokenavCallback_Init_8, .unk4 = sub_81CEFDC, .unk8 = sub_81CF330, .unkC = sub_81CF3A0, @@ -177,7 +135,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81CF3F8, }, { - .unk0 = sub_81CD024, + .unk0 = PokenavCallback_Init_9, .unk4 = sub_81CD070, .unk8 = sub_81CDDD4, .unkC = sub_81CDE2C, @@ -186,7 +144,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81CECA0, }, { - .unk0 = sub_81CEF98, + .unk0 = PokenavCallback_Init_10, .unk4 = sub_81CEFDC, .unk8 = sub_81CF368, .unkC = sub_81CF3A0, @@ -195,7 +153,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81CF3F8, }, { - .unk0 = sub_81CAAE8, + .unk0 = PokenavCallback_Init_11, .unk4 = sub_81CAB24, .unk8 = sub_81CB260, .unkC = sub_81CB29C, @@ -204,7 +162,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81CB2E0, }, { - .unk0 = sub_81CF9BC, + .unk0 = PokenavCallback_Init_12, .unk4 = sub_81CFA34, .unk8 = sub_81CFDD0, .unkC = sub_81CFE40, @@ -213,7 +171,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81CFE98, }, { - .unk0 = sub_81D0450, + .unk0 = PokenavCallback_Init_13, .unk4 = sub_81D04A0, .unk8 = sub_81D0978, .unkC = sub_81D09B0, @@ -222,7 +180,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] = .unk18 = sub_81D09F4, }, { - .unk0 = sub_81CFA04, + .unk0 = PokenavCallback_Init_14, .unk4 = sub_81CFA34, .unk8 = sub_81CFE08, .unkC = sub_81CFE40, @@ -277,7 +235,7 @@ bool32 FuncIsActiveLoopedTask(LoopedTask func) return FALSE; } -void Task_RunLoopedTask(u8 taskId) +static void Task_RunLoopedTask(u8 taskId) { LoopedTask loopedTask = (LoopedTask)GetWordTaskArg(taskId, 1); s16 *state = &gTasks[taskId].data[0]; @@ -310,7 +268,7 @@ void Task_RunLoopedTask(u8 taskId) } // Every "Continue" action pauses instead. -void Task_RunLoopedTask_LinkMode(u8 taskId) +static void Task_RunLoopedTask_LinkMode(u8 taskId) { LoopedTask task; s16 *state; @@ -318,7 +276,7 @@ void Task_RunLoopedTask_LinkMode(u8 taskId) if (sub_8087598()) return; - + task = (LoopedTask)GetWordTaskArg(taskId, 1); state = &gTasks[taskId].data[0]; action = task(*state); @@ -365,7 +323,7 @@ void sub_81C72A4(void) FadeScreen(1, 0); } -void sub_81C72BC(void) +static void sub_81C72BC(void) { UpdatePaletteFade(); if (gPaletteFade.active) @@ -458,7 +416,7 @@ static void VBlankCB_Pokenav(void) ProcessSpriteCopyRequests(); } -void sub_81C742C(u8 taskId) +static void sub_81C742C(u8 taskId) { u32 v1; s16 *data = gTasks[taskId].data; @@ -544,12 +502,12 @@ static bool32 SetActivePokenavMenu(u32 menuId) return TRUE; } -u32 sub_81C75D4(void) +static u32 sub_81C75D4(void) { return sub_81C786C(); } -u32 sub_81C75E0(void) +static u32 sub_81C75E0(void) { return gPokenavResources->currentMenuCb1(); } @@ -605,7 +563,7 @@ void sub_81C7694(u32 a0) gPokenavResources->fieldA = value; } -u16 sub_81C76AC(void) +u32 sub_81C76AC(void) { return gPokenavResources->fieldA; } diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index 94dab60bb..4422a70e3 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -64,16 +64,16 @@ static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide); static void HideLeftHeaderSprites(bool32 isOnRightSide); static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide); static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide); -static void MoveLeftHeader(struct Sprite *sprite, int startX, int endX, int duration); +static void MoveLeftHeader(struct Sprite *sprite, s32 startX, s32 endX, s32 duration); static void SpriteCB_MoveLeftHeader(struct Sprite *sprite); static void InitPokenavMainMenuResources(void); static void InitHoennMapHeaderSprites(void); static void sub_81C7B74(void); -static u32 LoopedTask_ScrollMenuHeaderDown(int a0); -static u32 LoopedTask_ScrollMenuHeaderUp(int a0); +static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0); +static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0); static void sub_81C7BF8(u32 a0); static void SpriteCB_SpinningPokenav(struct Sprite* sprite); -static u32 LoopedTask_InitPokenavMenu(int a0); +static u32 LoopedTask_InitPokenavMenu(s32 a0); const u16 gSpinningPokenavPaletteData[] = INCBIN_U16("graphics/pokenav/icon2.gbapal"); const u32 gSpinningPokenavGfx[] = INCBIN_U32("graphics/pokenav/icon2.4bpp.lz"); @@ -360,7 +360,7 @@ bool32 WaitForPokenavShutdownFade(void) return TRUE; } -static u32 LoopedTask_InitPokenavMenu(int a0) +static u32 LoopedTask_InitPokenavMenu(s32 a0) { struct PokenavMainMenuResources *structPtr; @@ -440,7 +440,7 @@ bool32 MainMenuLoopedTaskIsBusy(void) return IsLoopedTaskActive(structPtr->currentTaskId); } -static u32 LoopedTask_ScrollMenuHeaderDown(int a0) +static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0) { switch (a0) { @@ -461,7 +461,7 @@ static u32 LoopedTask_ScrollMenuHeaderDown(int a0) } } -static u32 LoopedTask_ScrollMenuHeaderUp(int a0) +static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0) { if (ChangeBgY(0, 384, 2) <= 0) { @@ -637,7 +637,7 @@ _081C7AAE:\n\ .syntax divided"); } -void sub_81C7AC0(int a0) +void sub_81C7AC0(s32 a0) { struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); @@ -708,7 +708,7 @@ static void sub_81C7BF8(u32 windowId) static void InitPokenavMainMenuResources(void) { - int i; + s32 i; u8 spriteId; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); @@ -758,13 +758,13 @@ void ResumeSpinningPokenavSprite(void) static void InitHoennMapHeaderSprites(void) { - int i, spriteId; + s32 i, spriteId; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); LoadCompressedSpriteSheet(&sPokenavHoennMapLeftHeaderSpriteSheet); AllocSpritePalette(1); AllocSpritePalette(2); - for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) { spriteId = CreateSprite(&sPokenavLeftHeaderHoennMapSpriteTemplate, 0, 0, 1); structPtr->leftHeaderSprites[i] = &gSprites[spriteId]; @@ -859,10 +859,10 @@ void sub_81C7FC4(u32 arg0, bool32 arg1) void sub_81C7FDC(void) { - int i; + s32 i; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) { structPtr->leftHeaderSprites[i]->invisible = TRUE; structPtr->submenuLeftHeaderSprites[i]->invisible = TRUE; @@ -881,7 +881,7 @@ bool32 sub_81C8010(void) static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) { - int start, end, i; + s32 start, end, i; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); if (!isOnRightSide) @@ -889,7 +889,7 @@ static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) else start = 256, end = 160; - for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) { structPtr->leftHeaderSprites[i]->pos1.y = startY; MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12); @@ -898,7 +898,7 @@ static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) { - int start, end, i; + s32 start, end, i; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); if (!isOnRightSide) @@ -906,7 +906,7 @@ static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) else start = 256, end = 192; - for (i = 0; i < (int)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) { structPtr->submenuLeftHeaderSprites[i]->pos1.y = startY; MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12); @@ -915,7 +915,7 @@ static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) static void HideLeftHeaderSprites(bool32 isOnRightSide) { - int start, end, i; + s32 start, end, i; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); if (!isOnRightSide) @@ -923,7 +923,7 @@ static void HideLeftHeaderSprites(bool32 isOnRightSide) else start = 192, end = 256; - for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) { MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12); } @@ -931,7 +931,7 @@ static void HideLeftHeaderSprites(bool32 isOnRightSide) static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide) { - int start, end, i; + s32 start, end, i; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); if (!isOnRightSide) @@ -939,13 +939,13 @@ static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide) else start = 192, end = 256; - for (i = 0; i < (int)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) { MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12); } } -static void MoveLeftHeader(struct Sprite *sprite, int startX, int endX, int duration) +static void MoveLeftHeader(struct Sprite *sprite, s32 startX, s32 endX, s32 duration) { sprite->pos1.x = startX; sprite->data[0] = startX * 16; diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c index 70fa42541..5379ee88e 100644 --- a/src/pokenav_match_call_data.c +++ b/src/pokenav_match_call_data.c @@ -6,6 +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 @@ -17,13 +20,13 @@ typedef struct MatchCallTextDataStruct { struct MatchCallStructCommon { u8 type; - u8 v1; + u8 mapSec; u16 flag; }; struct MatchCallStruct0 { u8 type; - u8 v1; + u8 mapSec; u16 flag; const u8 *desc; const u8 *name; @@ -32,7 +35,7 @@ struct MatchCallStruct0 { struct MatchCallStruct1 { u8 type; - u8 v1; + u8 mapSec; u16 flag; u16 rematchTableIdx; const u8 *desc; @@ -42,12 +45,12 @@ struct MatchCallStruct1 { struct MatchCallSubstruct2 { u16 flag; - u8 v2; + u8 mapSec; }; struct MatchCallStruct2 { u8 type; - u8 v1; + u8 mapSec; u16 flag; u16 rematchTableIdx; const u8 *desc; @@ -57,7 +60,7 @@ struct MatchCallStruct2 { struct MatchCallStruct3 { u8 type; - u8 v1; + u8 mapSec; u16 flag; const u8 *desc; const u8 *name; @@ -75,7 +78,7 @@ struct MatchCallStruct4 { // Note: Type1 and Type5 have identical struct layouts. struct MatchCallStruct5 { u8 type; - u8 v1; + u8 mapSec; u16 flag; u16 rematchTableIdx; const u8 *desc; @@ -93,11 +96,11 @@ typedef union { const struct MatchCallStruct5 *type5; } match_call_t; -struct UnkStruct_08625388 { +struct MatchCallOverride { u16 idx; - u16 v2; - u16 v4; - const u8 *v8[4]; + u16 facilityClass; + u32 flag; + const u8 *flavorTexts[4]; }; // Static RAM declarations @@ -110,11 +113,11 @@ static bool32 MatchCallGetFlag_Type2(match_call_t); static bool32 MatchCallGetFlag_Type3(match_call_t); static bool32 MatchCallGetFlag_Type4(match_call_t); -static u8 sub_81D1714(match_call_t); -static u8 sub_81D1718(match_call_t); -static u8 sub_81D171C(match_call_t); -static u8 sub_81D1750(match_call_t); -static u8 sub_81D1754(match_call_t); +static u8 MatchCallGetMapSec_Type0(match_call_t); +static u8 MatchCallGetMapSec_Type1(match_call_t); +static u8 MatchCallGetMapSec_Type2(match_call_t); +static u8 MatchCallGetMapSec_Type3(match_call_t); +static u8 MatchCallGetMapSec_Type4(match_call_t); static bool32 MatchCall_IsRematchable_Type0(match_call_t); static bool32 MatchCall_IsRematchable_Type1(match_call_t); @@ -122,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); @@ -325,7 +328,7 @@ static const match_call_text_data_t sMrStoneTextScripts[] = { static const struct MatchCallStruct0 sMrStoneMatchCallHeader = { .type = 0, - .v1 = 10, + .mapSec = MAPSEC_RUSTBORO_CITY, .flag = 0xFFFF, .desc = gMrStoneMatchCallDesc, .name = gMrStoneMatchCallName, @@ -348,7 +351,7 @@ static const match_call_text_data_t sNormanTextScripts[] = { static const struct MatchCallStruct5 sNormanMatchCallHeader = { .type = 5, - .v1 = 7, + .mapSec = MAPSEC_PETALBURG_CITY, .flag = FLAG_ENABLE_NORMAN_MATCH_CALL, .rematchTableIdx = REMATCH_NORMAN, .desc = gNormanMatchCallDesc, @@ -359,7 +362,7 @@ static const struct MatchCallStruct5 sNormanMatchCallHeader = static const struct MatchCallStruct3 sProfBirchMatchCallHeader = { .type = 3, - .v1 = 0, + .mapSec = 0, .flag = FLAG_ENABLE_PROF_BIRCH_MATCH_CALL, .desc = gProfBirchMatchCallDesc, .name = gProfBirchMatchCallName @@ -375,7 +378,7 @@ static const match_call_text_data_t sMomTextScripts[] = { static const struct MatchCallStruct0 sMomMatchCallHeader = { .type = 0, - .v1 = 0, + .mapSec = MAPSEC_LITTLEROOT_TOWN, .flag = FLAG_ENABLE_MOM_MATCH_CALL, .desc = gMomMatchCallDesc, .name = gMomMatchCallName, @@ -396,7 +399,7 @@ static const match_call_text_data_t sStevenTextScripts[] = { static const struct MatchCallStruct0 sStevenMatchCallHeader = { .type = 0, - .v1 = 0xD5, + .mapSec = MAPSEC_NONE, .flag = FLAG_REGISTERED_STEVEN_POKENAV, .desc = gStevenMatchCallDesc, .name = gStevenMatchCallName, @@ -422,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, @@ -451,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, @@ -473,16 +476,16 @@ static const match_call_text_data_t sWallyTextScripts[] = { }; const struct MatchCallSubstruct2 sWallyAdditionalData[] = { - { FLAG_HIDE_MAUVILLE_CITY_WALLY, 0x05 }, - { FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, 0xD5 }, - { FLAG_HIDE_VICTORY_ROAD_ENTRANCE_WALLY, 0x46 }, - { 0xFFFF, 0xD5 } + { FLAG_HIDE_MAUVILLE_CITY_WALLY, MAPSEC_VERDANTURF_TOWN }, + { FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, MAPSEC_NONE }, + { FLAG_HIDE_VICTORY_ROAD_ENTRANCE_WALLY, MAPSEC_VICTORY_ROAD }, + { 0xFFFF, MAPSEC_NONE } }; static const struct MatchCallStruct2 sWallyMatchCallHeader = { .type = 2, - .v1 = 0, + .mapSec = 0, .flag = FLAG_ENABLE_WALLY_MATCH_CALL, .rematchTableIdx = REMATCH_WALLY_3, .desc = gWallyMatchCallDesc, @@ -505,7 +508,7 @@ static const match_call_text_data_t sScottTextScripts[] = { static const struct MatchCallStruct0 sScottMatchCallHeader = { .type = 0, - .v1 = 0xD5, + .mapSec = MAPSEC_NONE, .flag = FLAG_ENABLE_SCOTT_MATCH_CALL, .desc = gScottMatchCallDesc, .name = gScottMatchCallName, @@ -523,7 +526,7 @@ static const match_call_text_data_t sRoxanneTextScripts[] = { static const struct MatchCallStruct5 sRoxanneMatchCallHeader = { .type = 5, - .v1 = 10, + .mapSec = MAPSEC_RUSTBORO_CITY, .flag = FLAG_ENABLE_ROXANNE_MATCH_CALL, .rematchTableIdx = REMATCH_ROXANNE, .desc = gRoxanneMatchCallDesc, @@ -542,7 +545,7 @@ static const match_call_text_data_t sBrawlyTextScripts[] = { static const struct MatchCallStruct5 sBrawlyMatchCallHeader = { .type = 5, - .v1 = 2, + .mapSec = MAPSEC_DEWFORD_TOWN, .flag = FLAG_ENABLE_BRAWLY_MATCH_CALL, .rematchTableIdx = REMATCH_BRAWLY, .desc = gBrawlyMatchCallDesc, @@ -561,7 +564,7 @@ static const match_call_text_data_t sWattsonTextScripts[] = { static const struct MatchCallStruct5 sWattsonMatchCallHeader = { .type = 5, - .v1 = 9, + .mapSec = MAPSEC_MAUVILLE_CITY, .flag = FLAG_ENABLE_WATTSON_MATCH_CALL, .rematchTableIdx = REMATCH_WATTSON, .desc = gWattsonMatchCallDesc, @@ -580,7 +583,7 @@ static const match_call_text_data_t sFlanneryTextScripts[] = { static const struct MatchCallStruct5 sFlanneryMatchCallHeader = { .type = 5, - .v1 = 3, + .mapSec = MAPSEC_LAVARIDGE_TOWN, .flag = FLAG_ENABLE_FLANNERY_MATCH_CALL, .rematchTableIdx = REMATCH_FLANNERY, .desc = gFlanneryMatchCallDesc, @@ -599,7 +602,7 @@ static const match_call_text_data_t sWinonaTextScripts[] = { static const struct MatchCallStruct5 sWinonaMatchCallHeader = { .type = 5, - .v1 = 11, + .mapSec = MAPSEC_FORTREE_CITY, .flag = FLAG_ENABLE_WINONA_MATCH_CALL, .rematchTableIdx = REMATCH_WINONA, .desc = gWinonaMatchCallDesc, @@ -618,7 +621,7 @@ static const match_call_text_data_t sTateLizaTextScripts[] = { static const struct MatchCallStruct5 sTateLizaMatchCallHeader = { .type = 5, - .v1 = 13, + .mapSec = MAPSEC_MOSSDEEP_CITY, .flag = FLAG_ENABLE_TATE_AND_LIZA_MATCH_CALL, .rematchTableIdx = REMATCH_TATE_AND_LIZA, .desc = gTateLizaMatchCallDesc, @@ -637,7 +640,7 @@ static const match_call_text_data_t sJuanTextScripts[] = { static const struct MatchCallStruct5 sJuanMatchCallHeader = { .type = 5, - .v1 = 14, + .mapSec = MAPSEC_SOOTOPOLIS_CITY, .flag = FLAG_ENABLE_JUAN_MATCH_CALL, .rematchTableIdx = REMATCH_JUAN, .desc = gJuanMatchCallDesc, @@ -653,7 +656,7 @@ static const match_call_text_data_t sSidneyTextScripts[] = { static const struct MatchCallStruct5 sSidneyMatchCallHeader = { .type = 5, - .v1 = 15, + .mapSec = MAPSEC_EVER_GRANDE_CITY, .flag = FLAG_REMATCH_SIDNEY, .rematchTableIdx = REMATCH_SIDNEY, .desc = gEliteFourMatchCallDesc, @@ -669,7 +672,7 @@ static const match_call_text_data_t sPhoebeTextScripts[] = { static const struct MatchCallStruct5 sPhoebeMatchCallHeader = { .type = 5, - .v1 = 15, + .mapSec = MAPSEC_EVER_GRANDE_CITY, .flag = FLAG_REMATCH_PHOEBE, .rematchTableIdx = REMATCH_PHOEBE, .desc = gEliteFourMatchCallDesc, @@ -685,7 +688,7 @@ static const match_call_text_data_t sGlaciaTextScripts[] = { static const struct MatchCallStruct5 sGlaciaMatchCallHeader = { .type = 5, - .v1 = 15, + .mapSec = MAPSEC_EVER_GRANDE_CITY, .flag = FLAG_REMATCH_GLACIA, .rematchTableIdx = REMATCH_GLACIA, .desc = gEliteFourMatchCallDesc, @@ -701,7 +704,7 @@ static const match_call_text_data_t sDrakeTextScripts[] = { static const struct MatchCallStruct5 sDrakeMatchCallHeader = { .type = 5, - .v1 = 15, + .mapSec = MAPSEC_EVER_GRANDE_CITY, .flag = FLAG_REMATCH_DRAKE, .rematchTableIdx = REMATCH_DRAKE, .desc = gEliteFourMatchCallDesc, @@ -717,7 +720,7 @@ static const match_call_text_data_t sWallaceTextScripts[] = { static const struct MatchCallStruct5 sWallaceMatchCallHeader = { .type = 5, - .v1 = 15, + .mapSec = MAPSEC_EVER_GRANDE_CITY, .flag = FLAG_REMATCH_WALLACE, .rematchTableIdx = REMATCH_WALLACE, .desc = gChampionMatchCallDesc, @@ -726,90 +729,90 @@ 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) = { MatchCallGetFlag_Type0, MatchCallGetFlag_Type1, MatchCallGetFlag_Type2, - MatchCallGetFlag_Type3, - MatchCallGetFlag_Type4 + MatchCallGetFlag_Type4, + MatchCallGetFlag_Type3 }; -static u8 (*const gUnknown_08625310[])(match_call_t) = { - sub_81D1714, - sub_81D1718, - sub_81D171C, - sub_81D1750, - sub_81D1754 +static u8 (*const sMatchCallGetMapSecFuncs[])(match_call_t) = { + MatchCallGetMapSec_Type0, + MatchCallGetMapSec_Type1, + MatchCallGetMapSec_Type2, + MatchCallGetMapSec_Type4, + MatchCallGetMapSec_Type3 }; static bool32 (*const sMatchCall_IsRematchableFunctions[])(match_call_t) = { MatchCall_IsRematchable_Type0, MatchCall_IsRematchable_Type1, MatchCall_IsRematchable_Type2, - MatchCall_IsRematchable_Type3, - MatchCall_IsRematchable_Type4 + MatchCall_IsRematchable_Type4, + 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) = { MatchCall_GetRematchTableIdx_Type0, MatchCall_GetRematchTableIdx_Type1, MatchCall_GetRematchTableIdx_Type2, - MatchCall_GetRematchTableIdx_Type3, - MatchCall_GetRematchTableIdx_Type4 + MatchCall_GetRematchTableIdx_Type4, + MatchCall_GetRematchTableIdx_Type3 }; static void (*const sMatchCall_GetMessageFunctions[])(match_call_t, u8 *) = { MatchCall_GetMessage_Type0, MatchCall_GetMessage_Type1, MatchCall_GetMessage_Type2, - MatchCall_GetMessage_Type3, - MatchCall_GetMessage_Type4 + MatchCall_GetMessage_Type4, + MatchCall_GetMessage_Type3 }; static void (*const sMatchCall_GetNameAndDescFunctions[])(match_call_t, const u8 **, const u8 **) = { MatchCall_GetNameAndDesc_Type0, MatchCall_GetNameAndDesc_Type1, MatchCall_GetNameAndDesc_Type2, - MatchCall_GetNameAndDesc_Type3, - MatchCall_GetNameAndDesc_Type4 + MatchCall_GetNameAndDesc_Type4, + 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 @@ -883,7 +886,7 @@ static bool32 MatchCallGetFlag_Type2(match_call_t matchCall) return FlagGet(matchCall.type2->flag); } -static bool32 MatchCallGetFlag_Type3(match_call_t matchCall) +static bool32 MatchCallGetFlag_Type4(match_call_t matchCall) { if (matchCall.type4->gender != gSaveBlock2Ptr->playerGender) return FALSE; @@ -892,12 +895,12 @@ static bool32 MatchCallGetFlag_Type3(match_call_t matchCall) return FlagGet(matchCall.type4->flag); } -static bool32 MatchCallGetFlag_Type4(match_call_t matchCall) +static bool32 MatchCallGetFlag_Type3(match_call_t matchCall) { return FlagGet(matchCall.type3->flag); } -u8 sub_81D16DC(u32 idx) +u8 MatchCallMapSecGetByIndex(u32 idx) { match_call_t matchCall; u32 i; @@ -906,20 +909,20 @@ u8 sub_81D16DC(u32 idx) return 0; matchCall = sMatchCallHeaders[idx]; i = MatchCallGetFunctionIndex(matchCall); - return gUnknown_08625310[i](matchCall); + return sMatchCallGetMapSecFuncs[i](matchCall); } -static u8 sub_81D1714(match_call_t matchCall) +static u8 MatchCallGetMapSec_Type0(match_call_t matchCall) { - return matchCall.type0->v1; + return matchCall.type0->mapSec; } -static u8 sub_81D1718(match_call_t matchCall) +static u8 MatchCallGetMapSec_Type1(match_call_t matchCall) { - return matchCall.type1->v1; + return matchCall.type1->mapSec; } -static u8 sub_81D171C(match_call_t matchCall) +static u8 MatchCallGetMapSec_Type2(match_call_t matchCall) { s32 i; @@ -928,17 +931,17 @@ static u8 sub_81D171C(match_call_t matchCall) if (!FlagGet(matchCall.type2->v10[i].flag)) break; } - return matchCall.type2->v10[i].v2; + return matchCall.type2->v10[i].mapSec; } -static u8 sub_81D1750(match_call_t matchCall) +static u8 MatchCallGetMapSec_Type4(match_call_t matchCall) { - return 0xd5; + return MAPSEC_NONE; } -static u8 sub_81D1754(match_call_t matchCall) +static u8 MatchCallGetMapSec_Type3(match_call_t matchCall) { - return 0xd5; + return MAPSEC_NONE; } bool32 MatchCall_IsRematchable(u32 idx) @@ -970,17 +973,17 @@ static bool32 MatchCall_IsRematchable_Type2(match_call_t matchCall) return gSaveBlock1Ptr->trainerRematches[matchCall.type2->rematchTableIdx] ? TRUE : FALSE; } -static bool32 MatchCall_IsRematchable_Type3(match_call_t matchCall) +static bool32 MatchCall_IsRematchable_Type4(match_call_t matchCall) { return FALSE; } -static bool32 MatchCall_IsRematchable_Type4(match_call_t matchCall) +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; @@ -989,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++) { @@ -999,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; } @@ -1051,12 +1054,12 @@ static u32 MatchCall_GetRematchTableIdx_Type2(match_call_t matchCall) return matchCall.type2->rematchTableIdx; } -static u32 MatchCall_GetRematchTableIdx_Type3(match_call_t matchCall) +static u32 MatchCall_GetRematchTableIdx_Type4(match_call_t matchCall) { return REMATCH_TABLE_ENTRIES; } -static u32 MatchCall_GetRematchTableIdx_Type4(match_call_t matchCall) +static u32 MatchCall_GetRematchTableIdx_Type3(match_call_t matchCall) { return REMATCH_TABLE_ENTRIES; } @@ -1091,12 +1094,12 @@ static void MatchCall_GetMessage_Type2(match_call_t matchCall, u8 *dest) sub_81D1920(matchCall.type2->textData, dest); } -static void MatchCall_GetMessage_Type3(match_call_t matchCall, u8 *dest) +static void MatchCall_GetMessage_Type4(match_call_t matchCall, u8 *dest) { sub_81D1920(matchCall.type4->textData, dest); } -static void MatchCall_GetMessage_Type4(match_call_t matchCall, u8 *dest) +static void MatchCall_GetMessage_Type3(match_call_t matchCall, u8 *dest) { sub_8197080(dest); } @@ -1190,13 +1193,13 @@ static void MatchCall_GetNameAndDesc_Type2(match_call_t matchCall, const u8 **de *desc = matchCall.type2->desc; } -static void MatchCall_GetNameAndDesc_Type3(match_call_t matchCall, const u8 **desc, const u8 **name) +static void MatchCall_GetNameAndDesc_Type4(match_call_t matchCall, const u8 **desc, const u8 **name) { *desc = matchCall.type4->desc; *name = matchCall.type4->name; } -static void MatchCall_GetNameAndDesc_Type4(match_call_t matchCall, const u8 **desc, const u8 **name) +static void MatchCall_GetNameAndDesc_Type3(match_call_t matchCall, const u8 **desc, const u8 **name) { *desc = matchCall.type3->desc; *name = matchCall.type3->name; @@ -1209,8 +1212,7 @@ static void MatchCall_GetNameAndDescByRematchIdx(u32 idx, const u8 **desc, const *name = trainer->trainerName; } -#ifdef NONMATCHING -const u8 *sub_81D1B40(u32 idx, u32 offset) +const u8 *MatchCall_GetOverrideFlavorText(u32 idx, u32 offset) { u32 i; @@ -1218,104 +1220,30 @@ const u8 *sub_81D1B40(u32 idx, u32 offset) { if (sMatchCallCheckPageOverrides[i].idx == idx) { - for (; i + 1 < ARRAY_COUNT(sMatchCallCheckPageOverrides) && sMatchCallCheckPageOverrides[i + 1].idx == idx; i++) + while (1) { - if (!FlagGet(sMatchCallCheckPageOverrides[i + 1].v4)) + if (i + 1 >= ARRAY_COUNT(sMatchCallCheckPageOverrides)) break; + if (sMatchCallCheckPageOverrides[i + 1].idx != idx) + break; + if (!FlagGet(sMatchCallCheckPageOverrides[i + 1].flag)) + break; + i++; } - return sMatchCallCheckPageOverrides[i].v8[offset]; + return sMatchCallCheckPageOverrides[i].flavorTexts[offset]; } } return NULL; } -#else -NAKED const u8 *sub_81D1B40(u32 idx, u32 offset) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r9\n" - "\tmov r6, r8\n" - "\tpush {r6,r7}\n" - "\tadds r6, r0, 0\n" - "\tmovs r5, 0\n" - "\tldr r2, =sMatchCallCheckPageOverrides\n" - "\tmovs r0, 0x8\n" - "\tadds r0, r2\n" - "\tmov r9, r0\n" - "_081D1B54:\n" - "\tlsls r0, r5, 1\n" - "\tadds r0, r5\n" - "\tlsls r0, 3\n" - "\tadds r0, r2\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, r6\n" - "\tbne _081D1BBC\n" - "\tadds r4, r5, 0x1\n" - "\tlsls r1, 2\n" - "\tmov r8, r1\n" - "\tcmp r4, 0x3\n" - "\tbhi _081D1BA8\n" - "\tlsls r0, r4, 1\n" - "\tadds r0, r4\n" - "\tlsls r0, 3\n" - "\tadds r0, r2\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, r6\n" - "\tbne _081D1BA8\n" - "\tldr r7, =sMatchCallCheckPageOverrides\n" - "_081D1B7C:\n" - "\tlsls r0, r4, 1\n" - "\tadds r0, r4\n" - "\tlsls r0, 3\n" - "\tadds r1, r7, 0x4\n" - "\tadds r0, r1\n" - "\tldrh r0, [r0]\n" - "\tbl FlagGet\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _081D1BA8\n" - "\tadds r5, r4, 0\n" - "\tadds r4, r5, 0x1\n" - "\tcmp r4, 0x3\n" - "\tbhi _081D1BA8\n" - "\tlsls r0, r4, 1\n" - "\tadds r0, r4\n" - "\tlsls r0, 3\n" - "\tadds r0, r7\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, r6\n" - "\tbeq _081D1B7C\n" - "_081D1BA8:\n" - "\tlsls r0, r5, 1\n" - "\tadds r0, r5\n" - "\tlsls r0, 3\n" - "\tadd r0, r8\n" - "\tadd r0, r9\n" - "\tldr r0, [r0]\n" - "\tb _081D1BC4\n" - "\t.pool\n" - "_081D1BBC:\n" - "\tadds r5, 0x1\n" - "\tcmp r5, 0x3\n" - "\tbls _081D1B54\n" - "\tmovs r0, 0\n" - "_081D1BC4:\n" - "\tpop {r3,r4}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1"); -} -#endif -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_match_call_ui.c b/src/pokenav_match_call_ui.c index bae3a8d7a..275a4063e 100644 --- a/src/pokenav_match_call_ui.c +++ b/src/pokenav_match_call_ui.c @@ -31,22 +31,22 @@ struct MatchCallWindowState { u16 visibleEntries; u16 unkA; u32 unkC; - u32 unk10; + void * unk10; }; -struct UnknownInnerStruct_81C81D4 +struct PokenavSub17Substruct { struct UnknownSubSubStruct_0203CF40 unk0; u32 unk10; u32 unk14; u32 unk18; - u32 unk1C; + void * unk1C; s32 unk20; s32 unk24; u32 unk28; s32 unk2C; u32 unk30; - void (*unk34)(u32, u8*); + void (*unk34)(struct PokenavMonList *, u8*); void (*unk38)(u16, u32, u32); struct Sprite *rightArrow; struct Sprite *upArrow; @@ -55,155 +55,59 @@ struct UnknownInnerStruct_81C81D4 }; // Generally at index 0x11 (17) -struct UnknownSubStruct_81C81D4 +struct PokenavSub17 { - struct UnknownInnerStruct_81C81D4 unk0; + struct PokenavSub17Substruct unk0; u8 tilemapBuffer[0x800]; struct MatchCallWindowState unk888; - u32 unk89C; + s32 unk89C; u32 unk8A0; }; extern void sub_81DB620(u32 windowId, u32 a1, u32 a2, u32 a3, u32 a4); -void sub_81C82E4(struct UnknownSubStruct_81C81D4 *a0); -u32 sub_81C91AC(struct UnknownInnerStruct_81C81D4 *a0, const struct BgTemplate *a1, struct MatchCallListTemplate *a2, s32 a3); +void sub_81C82E4(struct PokenavSub17 *a0); +bool32 sub_81C91AC(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct MatchCallListTemplate *a2, s32 a3); void sub_81C9160(struct MatchCallWindowState *a0, struct MatchCallListTemplate *a1); void SpriteCB_MatchCallUpArrow(struct Sprite *sprite); void SpriteCB_MatchCallDownArrow(struct Sprite *sprite); void SpriteCB_MatchCallRightArrow(struct Sprite *sprite); -void ToggleMatchCallArrows(struct UnknownInnerStruct_81C81D4 *a0, u32 a1); -void sub_81C8FE0(struct UnknownInnerStruct_81C81D4 *a0); -void sub_81C8EF8(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1); +void ToggleMatchCallArrows(struct PokenavSub17Substruct *a0, u32 a1); +void sub_81C8FE0(struct PokenavSub17Substruct *a0); +void sub_81C8EF8(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); void sub_81C8ED0(void); -void sub_81C8E54(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1, u32 a2); -void PrintMatchCallFieldNames(struct UnknownInnerStruct_81C81D4 *a0, u32 a1); -void sub_81C8D4C(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1); -void sub_81C8CB4(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1); -void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1, u32 a2); -void sub_81C8568(s32 a0, struct UnknownInnerStruct_81C81D4 *a1); -void sub_81C83AC(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, struct UnknownInnerStruct_81C81D4 *a5); -void sub_81C837C(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1); +void sub_81C8E54(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1, u32 a2); +void PrintMatchCallFieldNames(struct PokenavSub17Substruct *a0, u32 a1); +void sub_81C8D4C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); +void sub_81C8CB4(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); +void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, s32 a1, s32 a2); +void sub_81C8568(s32 a0, struct PokenavSub17Substruct *a1); +void sub_81C83AC(void * a0, u32 a1, u32 a2, u32 a3, u32 a4, struct PokenavSub17Substruct *a5); +void sub_81C837C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); void sub_81C835C(struct UnknownSubSubStruct_0203CF40 *a0); -u32 LoopedTask_sub_81C8254(s32 a0); +u32 LoopedTask_sub_81C8254(s32 state); bool32 sub_81C83E0(void); -u32 LoopedTask_sub_81C83F0(s32 a0); -u32 LoopedTask_sub_81C85A0(s32 a0); -u32 LoopedTask_sub_81C8870(s32 a0); -u32 LoopedTask_sub_81C8A28(s32 a0); -u32 LoopedTask_sub_81C8958(s32 a0); +u32 LoopedTask_sub_81C83F0(s32 state); +u32 LoopedTask_sub_81C85A0(s32 state); +u32 LoopedTask_sub_81C8870(s32 state); +u32 LoopedTask_sub_81C8A28(s32 state); +u32 LoopedTask_sub_81C8958(s32 state); static const u16 sMatchcallArrowPaletteData[] = INCBIN_U16("graphics/pokenav/arrows_matchcall.gbapal"); static const u32 sMatchcallArrowSpriteSheetData[] = INCBIN_U32("graphics/pokenav/arrows_matchcall.4bpp.lz"); -static const u8 sPokenavColors_0861FBE4[] = -{ - 0, 2, 5 -}; - -static const u8 *const sMatchCallFieldNames[] = -{ - gText_PokenavMatchCall_Strategy, - gText_PokenavMatchCall_TrainerPokemon, - gText_PokenavMatchCall_SelfIntroduction -}; - -static const u8 sMatchCallFieldColors[] = -{ - 1, 4, 5 -}; - -static const u8 sUnknown_0861FBF7[] = -{ - 2, 4, 6, 7, 0 -}; - -static const struct CompressedSpriteSheet sMatchcallArrowSpriteSheets[] = -{ - { - .data = sMatchcallArrowSpriteSheetData, - .size = 192, - .tag = 0xA - } -}; - -static const struct SpritePalette sMatchcallArrowPalettes[] = -{ - { - .data = sMatchcallArrowPaletteData, - .tag = 0x14 - }, - {} -}; - -static const struct OamData sMatchCallRightArrowSpriteOam = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x16), - .x = 0, - .size = SPRITE_SIZE(8x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0 -}; - -static const struct SpriteTemplate sMatchCallRightArrowSprite = -{ - .tileTag = 0xA, - .paletteTag = 0x14, - .oam = &sMatchCallRightArrowSpriteOam, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_MatchCallRightArrow -}; - -static const struct OamData sMatchCallUpDownArrowSpriteOam = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x8), - .x = 0, - .size = SPRITE_SIZE(16x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0 -}; - -static const struct SpriteTemplate sMatchCallUpDownArrowSprite = -{ - .tileTag = 0xA, - .paletteTag = 0x14, - .oam = &sMatchCallUpDownArrowSpriteOam, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - EWRAM_DATA u32 gUnknown_0203CF44 = 0; bool32 sub_81C81D4(const struct BgTemplate *arg0, struct MatchCallListTemplate *arg1, s32 arg2) { - u32 v1; - struct UnknownSubStruct_81C81D4 *structPtr; - - structPtr = AllocSubstruct(0x11, sizeof(struct UnknownSubStruct_81C81D4)); - + struct PokenavSub17 *structPtr = AllocSubstruct(17, sizeof(struct PokenavSub17)); if (structPtr == NULL) return FALSE; - - sub_81C9160(&structPtr->unk888, arg1); - v1 = sub_81C91AC(&structPtr->unk0, arg0, arg1, arg2); - if (v1 == 0) + sub_81C9160(&structPtr->unk888, arg1); + if (!sub_81C91AC(&structPtr->unk0, arg0, arg1, arg2)) return FALSE; - + CreateLoopedTask(LoopedTask_sub_81C8254, 6); return TRUE; } @@ -215,59 +119,59 @@ bool32 sub_81C8224(void) void sub_81C8234(void) { - struct UnknownSubStruct_81C81D4 *structPtr; + struct PokenavSub17 *structPtr; - structPtr = GetSubstructPtr(0x11); + structPtr = GetSubstructPtr(17); sub_81C8FE0(&structPtr->unk0); RemoveWindow(structPtr->unk0.unk0.windowId); - FreePokenavSubstruct(0x11); + FreePokenavSubstruct(17); } -u32 LoopedTask_sub_81C8254(s32 a0) +u32 LoopedTask_sub_81C8254(s32 state) { - struct UnknownSubStruct_81C81D4 *structPtr; + struct PokenavSub17 *structPtr; if (IsDma3ManagerBusyWithBgCopy()) return 2; - - structPtr = GetSubstructPtr(0x11); - switch (a0) + structPtr = GetSubstructPtr(17); + + switch (state) { - case 0: - sub_81C82E4(structPtr); - return 0; - case 1: - sub_81C835C(&structPtr->unk0.unk0); - return 0; - case 2: - sub_81C837C(&structPtr->unk888, &structPtr->unk0); - return 0; - case 3: - if (sub_81C83E0()) - { - return 2; - } - else - { - sub_81C8ED0(); - return 1; - } - case 4: - sub_81C8EF8(&structPtr->unk888, &structPtr->unk0); - return 4; - default: - return 4; + case 0: + sub_81C82E4(structPtr); + return LT_INC_AND_PAUSE; + case 1: + sub_81C835C(&structPtr->unk0.unk0); + return LT_INC_AND_PAUSE; + case 2: + sub_81C837C(&structPtr->unk888, &structPtr->unk0); + return LT_INC_AND_PAUSE; + case 3: + if (sub_81C83E0()) + { + return LT_PAUSE; + } + else + { + sub_81C8ED0(); + return LT_INC_AND_CONTINUE; + } + case 4: + sub_81C8EF8(&structPtr->unk888, &structPtr->unk0); + return LT_FINISH; + default: + return LT_FINISH; } } -void sub_81C82E4(struct UnknownSubStruct_81C81D4 *a0) +void sub_81C82E4(struct PokenavSub17 *a0) { - u16 v1 = (a0->unk0.unk0.unk1 << 12) | a0->unk0.unk0.unk6; + u16 tileNum = (a0->unk0.unk0.unk1 << 12) | a0->unk0.unk0.unk6; sub_8199DF0(a0->unk0.unk0.bg, PIXEL_FILL(1), a0->unk0.unk0.unk6, 1); sub_8199DF0(a0->unk0.unk0.bg, PIXEL_FILL(4), a0->unk0.unk0.unk6 + 1, 1); SetBgTilemapBuffer(a0->unk0.unk0.bg, a0->tilemapBuffer); - FillBgTilemapBufferRect_Palette0(a0->unk0.unk0.bg, v1, 0, 0, 32, 32); + FillBgTilemapBufferRect_Palette0(a0->unk0.unk0.bg, tileNum, 0, 0, 32, 32); ChangeBgY(a0->unk0.unk0.bg, 0, 0); ChangeBgX(a0->unk0.unk0.bg, 0, 0); ChangeBgY(a0->unk0.unk0.bg, a0->unk0.unk0.unk3 << 11, 2); @@ -281,20 +185,16 @@ void sub_81C835C(struct UnknownSubSubStruct_0203CF40 *a0) CopyWindowToVram(a0->windowId, 1); } -void sub_81C837C(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1) +void sub_81C837C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1) { - s32 v1; - s32 v2; - - // TODO: Clean this up. - v1 = a0->listLength - a0->windowTopIndex; - v2 = a0->visibleEntries; - if (v1 > a0->visibleEntries) - v1 = v2; - sub_81C83AC(a0->unk10, a0->windowTopIndex, v1, a0->unkC, 0, a1); + s32 arg2 = a0->listLength - a0->windowTopIndex; + if (arg2 > a0->visibleEntries) + arg2 = a0->visibleEntries; + + sub_81C83AC(a0->unk10, a0->windowTopIndex, arg2, a0->unkC, 0, a1); } -void sub_81C83AC(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, struct UnknownInnerStruct_81C81D4 *a5) +void sub_81C83AC(void * a0, u32 a1, u32 a2, u32 a3, u32 a4, struct PokenavSub17Substruct *a5) { if (a2 == 0) return; @@ -313,108 +213,83 @@ bool32 sub_81C83E0(void) return FuncIsActiveLoopedTask(LoopedTask_sub_81C83F0); } -u32 LoopedTask_sub_81C83F0(s32 a0) +u32 LoopedTask_sub_81C83F0(s32 state) { - struct UnknownInnerStruct_81C81D4 *structPtr; u32 v1; + struct PokenavSub17Substruct *structPtr = GetSubstructPtr(17); - structPtr = &((struct UnknownSubStruct_81C81D4*)GetSubstructPtr(0x11))->unk0; - switch (a0) + switch (state) { case 0: v1 = (structPtr->unk0.unkA + structPtr->unk0.unkC + structPtr->unk10) & 0xF; structPtr->unk34(structPtr->unk1C, structPtr->unkTextBuffer); if (structPtr->unk38 != NULL) - // Accessing unk0.windowId as if it were a u16...? - // It's accessed as a u8 again in the very next line... - structPtr->unk38(*(u16*)(&structPtr->unk0.windowId), structPtr->unk14, v1); - + structPtr->unk38(structPtr->unk0.windowId, structPtr->unk14, v1); + AddTextPrinterParameterized(structPtr->unk0.windowId, structPtr->unk0.fontId, structPtr->unkTextBuffer, 8, (v1 << 4) + 1, 255, NULL); - if (++structPtr->unk0.unkC >= structPtr->unk0.unkE) { if (structPtr->unk38 != NULL) CopyWindowToVram(structPtr->unk0.windowId, 3); else CopyWindowToVram(structPtr->unk0.windowId, 2); - return 0; + return LT_INC_AND_PAUSE; } else { structPtr->unk1C += structPtr->unk18; structPtr->unk14++; - return 3; + return LT_CONTINUE; } case 1: if (IsDma3ManagerBusyWithBgCopy()) - return 2; - else - return 4; - default: - return 4; + return LT_PAUSE; + return LT_FINISH; } + return LT_FINISH; } bool32 ShouldShowUpArrow(void) { - u16 v1; - s32 v2; - struct UnknownSubStruct_81C81D4 *structPtr; - structPtr = GetSubstructPtr(0x11); + struct PokenavSub17 *structPtr = GetSubstructPtr(17); - return structPtr->unk888.windowTopIndex != 0; + return (structPtr->unk888.windowTopIndex != 0); } bool32 ShouldShowDownArrow(void) { - struct MatchCallWindowState *subPtr; - struct UnknownSubStruct_81C81D4 *structPtr; - structPtr = GetSubstructPtr(0x11); - subPtr = &structPtr->unk888; - - return subPtr->windowTopIndex + subPtr->visibleEntries < subPtr->listLength; + struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct MatchCallWindowState *subPtr = &structPtr->unk888; + + return (subPtr->windowTopIndex + subPtr->visibleEntries < subPtr->listLength); } -void MatchCall_MoveWindow(s32 a0, bool32 a1_) +void MatchCall_MoveWindow(s32 a0, bool32 a1) { - register bool32 a1 asm("r4")= a1_; - s32 v1; - struct UnknownSubStruct_81C81D4 *structPtr = GetSubstructPtr(0x11); - register struct MatchCallWindowState *subPtr asm("r5") = &structPtr->unk888; + struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct MatchCallWindowState *subPtr = &structPtr->unk888; if (a0 < 0) { - u16 temp = subPtr->windowTopIndex; - if (temp + a0 < 0) - v1 = -1 * temp; - else - v1 = a0; + if (subPtr->windowTopIndex + a0 < 0) + a0 = -1 * subPtr->windowTopIndex; if (a1) - sub_81C83AC(subPtr->unk10, temp + v1, v1 * -1, subPtr->unkC, v1, &structPtr->unk0); + sub_81C83AC(subPtr->unk10, subPtr->windowTopIndex + a0, a0 * -1, subPtr->unkC, a0, &structPtr->unk0); } else if (a1) { s32 temp = gUnknown_0203CF44 = subPtr->windowTopIndex + subPtr->visibleEntries; - s32 listLength; - if (temp + a0 >= (listLength = subPtr->listLength)) - v1 = listLength - temp; - else - v1 = a0; - - sub_81C83AC(subPtr->unk10, gUnknown_0203CF44, v1, subPtr->unkC, subPtr->visibleEntries, &structPtr->unk0); - // Needed to prevent GCC from combining the two sub_81C83AC calls. - asm(""); - } - else - { - v1 = a0; + if (temp + a0 >= subPtr->listLength) + a0 = subPtr->listLength - temp; + + sub_81C83AC(subPtr->unk10, gUnknown_0203CF44, a0, subPtr->unkC, subPtr->visibleEntries, &structPtr->unk0); } - - sub_81C8568(v1, &structPtr->unk0); - subPtr->windowTopIndex += v1; + + sub_81C8568(a0, &structPtr->unk0); + subPtr->windowTopIndex += a0; } -void sub_81C8568(s32 a0, struct UnknownInnerStruct_81C81D4 *a1) +void sub_81C8568(s32 a0, struct PokenavSub17Substruct *a1) { a1->unk20 = GetBgY(a1->unk0.bg); a1->unk24 = a1->unk20 + (a0 << 12); @@ -426,123 +301,98 @@ void sub_81C8568(s32 a0, struct UnknownInnerStruct_81C81D4 *a1) a1->unk28 = CreateLoopedTask(LoopedTask_sub_81C85A0, 6); } -u32 LoopedTask_sub_81C85A0(s32 a0) +u32 LoopedTask_sub_81C85A0(s32 state) { - s32 y; - s32 v1; + s32 y, v1; bool32 flag; - struct UnknownInnerStruct_81C81D4 *structPtr; - structPtr = &((struct UnknownSubStruct_81C81D4 *)GetSubstructPtr(0x11))->unk0; - - switch (a0) + struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17Substruct *subPtr = &structPtr->unk0; + + switch (state) { case 0: - if (sub_81C83E0() == FALSE) - return 1; - else - return 2; + if (!sub_81C83E0()) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; case 1: flag = FALSE; - y = GetBgY(structPtr->unk0.bg); - v1 = ChangeBgY(structPtr->unk0.bg, 0x1000, structPtr->unk30); - if (structPtr->unk30 == 2) + y = GetBgY(subPtr->unk0.bg); + v1 = ChangeBgY(subPtr->unk0.bg, 0x1000, subPtr->unk30); + if (subPtr->unk30 == 2) { - if ((y > structPtr->unk24 || y <= structPtr->unk20) && v1 <= structPtr->unk24) - { + if ((y > subPtr->unk24 || y <= subPtr->unk20) && v1 <= subPtr->unk24) flag = TRUE; - } } else { - if ((y < structPtr->unk24 || y >= structPtr->unk20) && v1 >= structPtr->unk24) - { + if ((y < subPtr->unk24 || y >= subPtr->unk20) && v1 >= subPtr->unk24) flag = TRUE; - } } + if (flag) { - structPtr->unk0.unkA = (structPtr->unk0.unkA + structPtr->unk2C) & 0xF; - ChangeBgY(structPtr->unk0.bg, structPtr->unk24, 0); - return 4; - } - else - { - return 2; + subPtr->unk0.unkA = (subPtr->unk0.unkA + subPtr->unk2C) & 0xF; + ChangeBgY(subPtr->unk0.bg, subPtr->unk24, 0); + return LT_FINISH; } - default: - return 4; + return LT_PAUSE; } + return LT_FINISH; } bool32 sub_81C8630(void) { - struct UnknownSubStruct_81C81D4 *structPtr; - structPtr = GetSubstructPtr(0x11); + struct PokenavSub17 *structPtr = GetSubstructPtr(17); return IsLoopedTaskActive(structPtr->unk0.unk28); } struct MatchCallWindowState *GetMatchCallWindowStruct(void) { - struct UnknownSubStruct_81C81D4 *structPtr; - structPtr = GetSubstructPtr(0x11); + struct PokenavSub17 *structPtr = GetSubstructPtr(17); return &structPtr->unk888; } int MatchCall_MoveCursorUp(void) { - struct MatchCallWindowState *structPtr; - structPtr = GetMatchCallWindowStruct(); + struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); if (structPtr->selectedIndexOffset != 0) { structPtr->selectedIndexOffset--; return 1; } - else + if (ShouldShowUpArrow()) { - if (ShouldShowUpArrow()) - { - MatchCall_MoveWindow(-1, TRUE); - return 2; - } - else - { - return 0; - } + MatchCall_MoveWindow(-1, TRUE); + return 2; } + return 0; } int MatchCall_MoveCursorDown(void) { - struct MatchCallWindowState *structPtr; - structPtr = GetMatchCallWindowStruct(); + struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); - if (structPtr->windowTopIndex + structPtr->selectedIndexOffset < structPtr->listLength - 1) + if (structPtr->windowTopIndex + structPtr->selectedIndexOffset >= structPtr->listLength - 1) + return 0; + if (structPtr->selectedIndexOffset < structPtr->visibleEntries - 1) { - if (structPtr->selectedIndexOffset < structPtr->visibleEntries - 1) - { - structPtr->selectedIndexOffset++; - return 1; - } - else if (!ShouldShowDownArrow()) - { - return 0; - } + structPtr->selectedIndexOffset++; + return 1; } - else + if (ShouldShowDownArrow()) { - return 0; + MatchCall_MoveWindow(1, TRUE); + return 2; } - MatchCall_MoveWindow(1, TRUE); - return 2; + return 0; } int MatchCall_PageUp(void) { - struct MatchCallWindowState *structPtr; s32 scroll; - - structPtr = GetMatchCallWindowStruct(); + struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); + if (ShouldShowUpArrow()) { if (structPtr->windowTopIndex >= structPtr->visibleEntries) @@ -557,24 +407,18 @@ int MatchCall_PageUp(void) structPtr->selectedIndexOffset = 0; return 1; } - else - { - return 0; - } + return 0; } int MatchCall_PageDown(void) { - struct MatchCallWindowState *structPtr; - structPtr = GetMatchCallWindowStruct(); + struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); if (ShouldShowDownArrow()) { - s32 scroll; - s32 windowBottomIndex; - s32 v3; - windowBottomIndex = structPtr->windowTopIndex + structPtr->visibleEntries; - scroll = structPtr->unk4 - structPtr->windowTopIndex; + s32 windowBottomIndex = structPtr->windowTopIndex + structPtr->visibleEntries; + s32 scroll = structPtr->unk4 - structPtr->windowTopIndex; + if (windowBottomIndex <= structPtr->unk4) scroll = structPtr->visibleEntries; MatchCall_MoveWindow(scroll, TRUE); @@ -582,8 +426,7 @@ int MatchCall_PageDown(void) } else { - s32 cursor; - s32 lastVisibleIndex; + s32 cursor, lastVisibleIndex; if (structPtr->listLength >= structPtr->visibleEntries) { cursor = structPtr->selectedIndexOffset; @@ -596,89 +439,68 @@ int MatchCall_PageDown(void) } lastVisibleIndex -= 1; if (cursor >= lastVisibleIndex) - { return 0; - } - else - { - structPtr->selectedIndexOffset = lastVisibleIndex; - return 1; - } + + structPtr->selectedIndexOffset = lastVisibleIndex; + return 1; } } u32 GetSelectedMatchCall(void) { - struct MatchCallWindowState *structPtr; - structPtr = GetMatchCallWindowStruct(); + struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); return structPtr->windowTopIndex + structPtr->selectedIndexOffset; } u32 GetMatchCallListTopIndex(void) { - struct MatchCallWindowState *structPtr; - structPtr = GetMatchCallWindowStruct(); - + struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); + return structPtr->windowTopIndex; } void sub_81C877C(void) { - struct UnknownSubStruct_81C81D4 *structPtr; - structPtr = GetSubstructPtr(0x11); + struct PokenavSub17 *structPtr = GetSubstructPtr(17); structPtr->unk89C = 0; structPtr->unk8A0 = CreateLoopedTask(LoopedTask_sub_81C8870, 6); } void sub_81C87AC(s16 a0) { - u16 temp; - struct UnknownSubStruct_81C81D4 *structPtr; - structPtr = GetSubstructPtr(0x11); - temp = structPtr->unk888.windowTopIndex; - temp += a0; - structPtr->unk888.windowTopIndex = temp; + struct PokenavSub17 *structPtr = GetSubstructPtr(17); + structPtr->unk888.windowTopIndex += a0; structPtr->unk89C = 0; structPtr->unk8A0 = CreateLoopedTask(LoopedTask_sub_81C8958, 6); } void sub_81C87F0(void) { - struct UnknownSubStruct_81C81D4 *structPtr; - structPtr = GetSubstructPtr(0x11); + struct PokenavSub17 *structPtr = GetSubstructPtr(17); structPtr->unk89C = 0; structPtr->unk8A0 = CreateLoopedTask(LoopedTask_sub_81C8A28, 6); } bool32 sub_81C8820(void) { - struct UnknownSubStruct_81C81D4 *structPtr; - structPtr = GetSubstructPtr(0x11); + struct PokenavSub17 *structPtr = GetSubstructPtr(17); return IsLoopedTaskActive(structPtr->unk8A0); } void sub_81C8838(void) { - struct UnknownSubStruct_81C81D4 *structPtr; - struct MatchCallWindowState *subStr; - structPtr = GetSubstructPtr(0x11); - subStr = &structPtr->unk888; - structPtr->unk0.unk38(structPtr->unk0.unk0.windowId, subStr->windowTopIndex + subStr->selectedIndexOffset, (structPtr->unk0.unk0.unkA + subStr->selectedIndexOffset) & 0xF); + struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct MatchCallWindowState *subPtr = &structPtr->unk888; + structPtr->unk0.unk38(structPtr->unk0.unk0.windowId, subPtr->windowTopIndex + subPtr->selectedIndexOffset, (structPtr->unk0.unk0.unkA + subPtr->selectedIndexOffset) & 0xF); CopyWindowToVram(structPtr->unk0.unk0.windowId, 1); } -u32 LoopedTask_sub_81C8870(s32 a0) +u32 LoopedTask_sub_81C8870(s32 state) { - struct UnknownSubStruct_81C81D4 *structPtr; - u16 v1; - u32 v2; + struct PokenavSub17 *structPtr = GetSubstructPtr(17); - // Needed to fix a register renaming issue. - register u16* temp asm("r1"); - structPtr = GetSubstructPtr(0x11); - - switch (a0) + switch (state) { case 0: ToggleMatchCallArrows(&structPtr->unk0, 1); @@ -686,50 +508,48 @@ u32 LoopedTask_sub_81C8870(s32 a0) case 1: if (structPtr->unk89C != structPtr->unk888.selectedIndexOffset) sub_81C8B70(&structPtr->unk0.unk0, structPtr->unk89C, 1); - + structPtr->unk89C++; - return 0; + return LT_INC_AND_PAUSE; case 2: - if (IsDma3ManagerBusyWithBgCopy()) - return 2; - - if (structPtr->unk89C != structPtr->unk888.visibleEntries) - return 6; - - if (structPtr->unk888.selectedIndexOffset != 0) - sub_81C8B70(&structPtr->unk0.unk0, structPtr->unk89C, structPtr->unk888.selectedIndexOffset); - - return 0; + if (!IsDma3ManagerBusyWithBgCopy()) + { + if (structPtr->unk89C != structPtr->unk888.visibleEntries) + return 6; + if (structPtr->unk888.selectedIndexOffset != 0) + sub_81C8B70(&structPtr->unk0.unk0, structPtr->unk89C, structPtr->unk888.selectedIndexOffset); + + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; case 3: - if (IsDma3ManagerBusyWithBgCopy()) - return 2; - temp = &structPtr->unk888.selectedIndexOffset; - v1 = *temp; - if (v1 == 0) - return 4; - - MatchCall_MoveWindow(v1, FALSE); - return 0; + if (!IsDma3ManagerBusyWithBgCopy()) + { + if (structPtr->unk888.selectedIndexOffset != 0) + { + MatchCall_MoveWindow(structPtr->unk888.selectedIndexOffset, FALSE); + return LT_INC_AND_PAUSE; + } + return LT_FINISH; + } + return LT_PAUSE; case 4: - v2 = sub_81C8630(); - if (v2) - return 2; + if (sub_81C8630()) + return LT_PAUSE; - structPtr->unk888.selectedIndexOffset = v2; - return 4; - default: - return 4; + structPtr->unk888.selectedIndexOffset = 0; + return LT_FINISH; } + return LT_FINISH; } -u32 LoopedTask_sub_81C8958(s32 a0) +u32 LoopedTask_sub_81C8958(s32 state) { - struct UnknownSubStruct_81C81D4 *structPtr; - structPtr = GetSubstructPtr(0x11); + struct PokenavSub17 *structPtr = GetSubstructPtr(17); if (IsDma3ManagerBusyWithBgCopy()) - return 2; - - switch (a0) + return LT_PAUSE; + + switch (state) { case 0: sub_81C8CB4(&structPtr->unk888, &structPtr->unk0); @@ -756,173 +576,136 @@ u32 LoopedTask_sub_81C8958(s32 a0) sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 3); break; default: - return 4; + return LT_FINISH; } - return 0; + return LT_INC_AND_PAUSE; } -u32 LoopedTask_sub_81C8A28(s32 a0) +u32 LoopedTask_sub_81C8A28(s32 state) { - struct UnknownSubStruct_81C81D4 *structPtr; + struct PokenavSub17 *structPtr; struct MatchCallWindowState *subPtr888; - register struct UnknownInnerStruct_81C81D4 *subPtr0 asm("r2"); - s32 v4; + struct PokenavSub17Substruct *subPtr0; + s32 r5, *ptr; if (IsDma3ManagerBusyWithBgCopy()) - { - return 2; - } - - structPtr = GetSubstructPtr(0x11); + return LT_PAUSE; + + structPtr = GetSubstructPtr(17); subPtr888 = &structPtr->unk888; subPtr0 = &structPtr->unk0; - switch (a0) + switch (state) { - default: - return 4; case 0: sub_81C8D4C(subPtr888, subPtr0); - return 0; + return LT_INC_AND_PAUSE; case 1: - { - s32 v1; - s32 v2; - u32 *v3; - register s32 v4 asm("r5"); - - v3 = &structPtr->unk89C; - v1 = *v3 + 1; - *v3 = v1; - if (v1 < structPtr->unk888.visibleEntries) + ptr = &structPtr->unk89C; + if (++(*ptr) < structPtr->unk888.visibleEntries) { - sub_81C8B70(&subPtr0->unk0, v1, 1); - return 2; + sub_81C8B70(&subPtr0->unk0, *ptr, 1); + return LT_PAUSE; } - *v3 = 0; + *ptr = 0; if (subPtr888->listLength <= subPtr888->visibleEntries) { - register u32 temp asm("r0"); - temp = subPtr888->windowTopIndex; - if (temp == 0) - return 9; - v2 = temp; + if (subPtr888->windowTopIndex != 0) + { + s32 r4 = subPtr888->windowTopIndex; + r5 = -r4; + sub_81C8B70(&subPtr0->unk0, r5, r4); + subPtr888->selectedIndexOffset = r4; + *ptr = r5; + return LT_INC_AND_PAUSE; + } } else { - register s32 temp asm("r1"); - v2 = subPtr888->windowTopIndex + subPtr888->visibleEntries; - temp = (s32)subPtr888->listLength; - if (v2 <= temp) - return 9; - v2 -= temp; + if (subPtr888->windowTopIndex + subPtr888->visibleEntries > subPtr888->listLength) + { + s32 r4 = subPtr888->windowTopIndex + subPtr888->visibleEntries - subPtr888->listLength; + r5 = -r4; + sub_81C8B70(&subPtr0->unk0, r5, r4); + subPtr888->selectedIndexOffset = r4; + *ptr = r5; + return LT_INC_AND_PAUSE; + } } - v4 = v2 * -1; - sub_81C8B70(&subPtr0->unk0, v4, v2); - subPtr888->selectedIndexOffset = v2; - *v3 = v4; - return 0; - } + return 9; case 2: MatchCall_MoveWindow(structPtr->unk89C, FALSE); - return 0; + return LT_INC_AND_PAUSE; case 3: - if (sub_81C8630()) - return 2; - - structPtr->unk89C = 0; - return 1; + if (!sub_81C8630()) + { + structPtr->unk89C = 0; + return 1; + } + return 2; case 4: sub_81C83AC(subPtr888->unk10, subPtr888->windowTopIndex + structPtr->unk89C, 1, subPtr888->unkC, structPtr->unk89C, &structPtr->unk0); - return 0; + return LT_INC_AND_PAUSE; case 5: if (sub_81C83E0()) - return 2; - - v4 = ++structPtr->unk89C; - if (v4 >= subPtr888->listLength || v4 >= subPtr888->visibleEntries) - return 1; + return LT_PAUSE; + if (++structPtr->unk89C >= subPtr888->listLength || structPtr->unk89C >= subPtr888->visibleEntries) + return LT_INC_AND_CONTINUE; return 9; case 6: ToggleMatchCallArrows(subPtr0, 0); - return 4; + return LT_FINISH; } + + return LT_FINISH; } -void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1, u32 a2) +void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, s32 a1, s32 a2) { - u8 *v1; - u32 v2; - - v1 = (u8*)GetWindowAttribute(a0->windowId, WINDOW_TILE_DATA); - v2 = a0->unk4 * 64; + u8 *v1 = (u8*)GetWindowAttribute(a0->windowId, WINDOW_TILE_DATA); + u32 v2 = a0->unk4 * 64; a1 = (a0->unkA + a1) & 0xF; - if ((s32)(a1 + a2) <= 16) + if (a1 + a2 <= 16) { CpuFastFill8(PIXEL_FILL(1), v1 + a1 * v2, a2 * v2); CopyWindowToVram(a0->windowId, 2); } else { - u32 v3; - u32 v4; - - v3 = 16 - a1; - v4 = a2 - v3; + u32 v3 = 16 - a1; + u32 v4 = a2 - v3; CpuFastFill8(PIXEL_FILL(1), v1 + a1 * v2, v3 * v2); CpuFastFill8(PIXEL_FILL(1), v1, v4 * v2); CopyWindowToVram(a0->windowId, 2); } - a2 -= 1; - for (a2; a2 != -1; a1 = (a1 + 1) & 0xF, a2--) - { + for (a2--; a2 != -1; a1 = (a1 + 1) & 0xF, a2--) sub_81CBD48(a0->windowId, a1); - } CopyWindowToVram(a0->windowId, 1); } void sub_81C8C64(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1) { - u16 *v1; - register u32 v2 asm("r0"); - u32 v3; - - v1 = (u16*)GetBgTilemapBuffer(GetWindowAttribute(a0->windowId, WINDOW_BG)); - - v1 = &v1[(a0->unkA << 6) + a0->unk2 - 1]; + u16 var; + u16 *v1 = (u16*)GetBgTilemapBuffer(GetWindowAttribute(a0->windowId, WINDOW_BG)); + v1 += ((a0->unkA << 6) + a0->unk2) - 1; if (a1 != 0) - { - v2 = a0->unk1 << 12; - v3 = a0->unk6 + 1; - } + var = (a0->unk1 << 12) | (a0->unk6 + 1); else - { - v2 = a0->unk1 << 12; - v3 = a0->unk6; - } - { - register u16 v5 asm("r1"); - register u32 v6 asm("r0"); - v6 = (v3 | v2); - v6 = v6 << 16; - v5 = v6 >> 16; - v1[0] = v5; - v1[0x20] = v5; - } + var = (a0->unk1 << 12) | (a0->unk6); + + v1[0] = var; + v1[0x20] = var; } -void sub_81C8CB4(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1) +void sub_81C8CB4(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1) { - u8 colors[3]; - - - memcpy(colors, sPokenavColors_0861FBE4, ARRAY_COUNT(sPokenavColors_0861FBE4)); + u8 colors[3] = {0, 2, 5}; a1->unk34(a0->unk10 + a0->unkC * a0->windowTopIndex, a1->unkTextBuffer); a1->unk38(a1->unk0.windowId, a0->windowTopIndex, a1->unk0.unkA); @@ -932,7 +715,7 @@ void sub_81C8CB4(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C8 CopyWindowRectToVram(a1->unk0.windowId, 3, 0, a1->unk0.unkA * 2, a1->unk0.unk4, 2); } -void sub_81C8D4C(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1) +void sub_81C8D4C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1) { a1->unk34(a0->unk10 + a0->unkC * a0->windowTopIndex, a1->unkTextBuffer); FillWindowPixelRect(a1->unk0.windowId, PIXEL_FILL(1), 0, a1->unk0.unkA * 16, a1->unk0.unk4 * 8, 16); @@ -941,80 +724,131 @@ void sub_81C8D4C(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C8 CopyWindowToVram(a1->unk0.windowId, 3); } -void PrintMatchCallFieldNames(struct UnknownInnerStruct_81C81D4 *a0, u32 fieldId) +void PrintMatchCallFieldNames(struct PokenavSub17Substruct *a0, u32 fieldId) { - const u8 *fieldNames[3]; - u8 colors[3]; - u32 r4; - u32 r5; - u32 tmp; - u32 one; - - memcpy(fieldNames, sMatchCallFieldNames, sizeof(sMatchCallFieldNames)); - memcpy(colors, sMatchCallFieldColors, sizeof(sMatchCallFieldColors)); - - r4 = a0->unk0.unkA; - tmp = fieldId * 2 + 1; - r4 += tmp; - r4 &= 0xF; - FillWindowPixelRect(a0->unk0.windowId, PIXEL_FILL(1), 0, r4 << 4, a0->unk0.unk4, 16); - - // This is a fake match. It should be this: - // AddTextPrinterParameterized3(a0->unk0.windowId, 7, 2, r4 << 4 + 1, colors, TEXT_SPEED_FF, fieldNames[fieldId]); - // But the original GCC does some clever reuse of the `1` constant that the current GCC doesn't. - one = 1; - AddTextPrinterParameterized3(a0->unk0.windowId, 7, 2, (r4 << 4) + one, colors, one - 2, fieldNames[fieldId]); - CopyWindowRectToVram(a0->unk0.windowId, 2, 0, r4 << 1, a0->unk0.unk4, 2); + const u8 *fieldNames[] = {gText_PokenavMatchCall_Strategy, gText_PokenavMatchCall_TrainerPokemon, gText_PokenavMatchCall_SelfIntroduction}; + u8 colors[3] = {1, 4, 5}; + u32 top = (a0->unk0.unkA + 1 + (fieldId * 2)) & 0xF; + + FillWindowPixelRect(a0->unk0.windowId, PIXEL_FILL(1), 0, top << 4, a0->unk0.unk4, 16); + AddTextPrinterParameterized3(a0->unk0.windowId, 7, 2, (top << 4) + 1, colors, -1, fieldNames[fieldId]); + CopyWindowRectToVram(a0->unk0.windowId, 2, 0, top << 1, a0->unk0.unk4, 2); } -void sub_81C8E54(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1, u32 a2) +void sub_81C8E54(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1, u32 a2) { - const u8 *str; - u32 r6; + static const u8 array[] = {2, 4, 6, 7}; + u32 r6 = (a1->unk0.unkA + array[a2]) & 0xF; + const u8 *str = sub_81CAFD8(a0->windowTopIndex, a2); - r6 = (a1->unk0.unkA + sUnknown_0861FBF7[a2]) & 0xF; - - str = sub_81CAFD8(a0->windowTopIndex, a2); - if (str != NULL) { + if (str != NULL) + { sub_81DB620(a1->unk0.windowId, 1, r6 * 2, a1->unk0.unk4 - 1, 2); AddTextPrinterParameterized(a1->unk0.windowId, 7, str, 2, (r6 << 4) + 1, TEXT_SPEED_FF, NULL); CopyWindowRectToVram(a1->unk0.windowId, 2, 0, r6 * 2, a1->unk0.unk4, 2); } } +static const struct CompressedSpriteSheet sMatchcallArrowSpriteSheets[] = +{ + { + .data = sMatchcallArrowSpriteSheetData, + .size = 192, + .tag = 0xA + } +}; + +static const struct SpritePalette sMatchcallArrowPalettes[] = +{ + { + .data = sMatchcallArrowPaletteData, + .tag = 0x14 + }, + {} +}; + +static const struct OamData sMatchCallRightArrowSpriteOam = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0 +}; + +static const struct SpriteTemplate sMatchCallRightArrowSprite = +{ + .tileTag = 0xA, + .paletteTag = 0x14, + .oam = &sMatchCallRightArrowSpriteOam, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_MatchCallRightArrow +}; + +static const struct OamData sMatchCallUpDownArrowSpriteOam = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0 +}; + +static const struct SpriteTemplate sMatchCallUpDownArrowSprite = +{ + .tileTag = 0xA, + .paletteTag = 0x14, + .oam = &sMatchCallUpDownArrowSpriteOam, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + void sub_81C8ED0(void) { u32 i; const struct CompressedSpriteSheet *ptr; - + for (i = 0, ptr = sMatchcallArrowSpriteSheets; i < ARRAY_COUNT(sMatchcallArrowSpriteSheets); ptr++, i++) - { LoadCompressedSpriteSheet(ptr); - } + Pokenav_AllocAndLoadPalettes(sMatchcallArrowPalettes); } -void sub_81C8EF8(struct MatchCallWindowState *a0, struct UnknownInnerStruct_81C81D4 *a1) +void sub_81C8EF8(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1) { - register u32 spriteId asm("r3"); - s16 temp; + u32 spriteId; + s16 x; - spriteId = (u8)CreateSprite(&sMatchCallRightArrowSprite, a1->unk0.unk2 * 8 + 3, (a1->unk0.unk3 + 1) * 8, 7); + spriteId = CreateSprite(&sMatchCallRightArrowSprite, a1->unk0.unk2 * 8 + 3, (a1->unk0.unk3 + 1) * 8, 7); a1->rightArrow = &gSprites[spriteId]; - temp = a1->unk0.unk2 * 8 + (a1->unk0.unk4 - 1) * 4; - spriteId = (u8)CreateSprite(&sMatchCallUpDownArrowSprite, temp, a1->unk0.unk3 * 8 + a0->visibleEntries * 16, 7); + x = a1->unk0.unk2 * 8 + (a1->unk0.unk4 - 1) * 4; + spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, a1->unk0.unk3 * 8 + a0->visibleEntries * 16, 7); a1->downArrow = &gSprites[spriteId]; a1->downArrow->oam.tileNum += 2; a1->downArrow->callback = SpriteCB_MatchCallDownArrow; - spriteId = (u8)CreateSprite(&sMatchCallUpDownArrowSprite, temp, a1->unk0.unk3 * 8, 7); + spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, a1->unk0.unk3 * 8, 7); a1->upArrow = &gSprites[spriteId]; a1->upArrow->oam.tileNum += 4; a1->upArrow->callback = SpriteCB_MatchCallUpArrow; } -void sub_81C8FE0(struct UnknownInnerStruct_81C81D4 *a0) +void sub_81C8FE0(struct PokenavSub17Substruct *a0) { DestroySprite(a0->rightArrow); DestroySprite(a0->upArrow); @@ -1023,7 +857,7 @@ void sub_81C8FE0(struct UnknownInnerStruct_81C81D4 *a0) FreeSpritePaletteByTag(0x14); } -void ToggleMatchCallArrows(struct UnknownInnerStruct_81C81D4 *a0, bool32 shouldHide) +void ToggleMatchCallArrows(struct PokenavSub17Substruct *a0, bool32 shouldHide) { if (shouldHide) { @@ -1044,8 +878,7 @@ void ToggleMatchCallArrows(struct UnknownInnerStruct_81C81D4 *a0, bool32 shouldH void SpriteCB_MatchCallRightArrow(struct Sprite *sprite) { - struct UnknownSubStruct_81C81D4 *structPtr; - structPtr = GetSubstructPtr(0x11); + struct PokenavSub17 *structPtr = GetSubstructPtr(17); sprite->pos2.y = structPtr->unk888.selectedIndexOffset << 4; } @@ -1055,7 +888,7 @@ void SpriteCB_MatchCallDownArrow(struct Sprite *sprite) sprite->invisible = FALSE; else sprite->invisible = TRUE; - + if (++sprite->data[0] > 3) { s16 offset; @@ -1073,7 +906,7 @@ void SpriteCB_MatchCallUpArrow(struct Sprite *sprite) sprite->invisible = FALSE; else sprite->invisible = TRUE; - + if (++sprite->data[0] > 3) { s16 offset; @@ -1087,36 +920,31 @@ void SpriteCB_MatchCallUpArrow(struct Sprite *sprite) void ToggleMatchCallVerticalArrows(bool32 shouldHide) { - struct UnknownSubStruct_81C81D4 *structPtr; - structPtr = GetSubstructPtr(0x11); + struct PokenavSub17 *structPtr = GetSubstructPtr(17); structPtr->unk0.upArrow->data[7] = shouldHide; structPtr->unk0.downArrow->data[7] = shouldHide; } void sub_81C9160(struct MatchCallWindowState *a0, struct MatchCallListTemplate *a1) { - u32 unused1 = a0->unk10 = a1->unk0; - u32 v0 = a1->unk6; - u32 zero = 0; - u32 unused2 = a0->windowTopIndex = v0; - u32 v1 = a0->listLength = a1->unk4; - + a0->unk10 = a1->unk0; + a0->windowTopIndex = a1->unk6; + a0->listLength = a1->unk4; a0->unkC = a1->unk8; a0->visibleEntries = a1->unkC; - if (a0->visibleEntries >= (u16)v1) + if (a0->visibleEntries >= a0->listLength) { a0->windowTopIndex = 0; a0->unk4 = 0; - a0->selectedIndexOffset = v0; + a0->selectedIndexOffset = a1->unk6; } else { - s32 v2; a0->unk4 = a0->listLength - a0->visibleEntries; - v2 = a0->windowTopIndex + a0->visibleEntries; - if (v2 > a0->listLength) { - a0->selectedIndexOffset = v2 - a0->listLength; - a0->windowTopIndex = v0 - a0->selectedIndexOffset; + if (a0->windowTopIndex + a0->visibleEntries > a0->listLength) + { + a0->selectedIndexOffset = a0->windowTopIndex + a0->visibleEntries - a0->listLength; + a0->windowTopIndex = a1->unk6 - a0->selectedIndexOffset; } else { @@ -1125,15 +953,11 @@ void sub_81C9160(struct MatchCallWindowState *a0, struct MatchCallListTemplate * } } -u32 sub_81C91AC(struct UnknownInnerStruct_81C81D4 *a0, const struct BgTemplate *a1, struct MatchCallListTemplate *a2, s32 a3) +bool32 sub_81C91AC(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct MatchCallListTemplate *a2, s32 a3) { - register u32 raw_bg asm("r4") = ((a1->bg) << 30); - u8 bg = raw_bg >> 30; - u32 unknown = 0; struct WindowTemplate window; - u8 bg_again; - a0->unk0.bg = bg; + a0->unk0.bg = a1->bg; a0->unk0.unk6 = a3; a0->unk34 = a2->unk10; a0->unk38 = a2->unk14; @@ -1142,8 +966,8 @@ u32 sub_81C91AC(struct UnknownInnerStruct_81C81D4 *a0, const struct BgTemplate * a0->unk0.unk3 = a2->unkB; a0->unk0.unk4 = a2->unkA; a0->unk0.fontId = a2->unkE; - - window.bg = raw_bg >> 30; + + window.bg = a1->bg; window.tilemapLeft = a2->unk9; window.tilemapTop = 0; window.width = a2->unkA; @@ -1153,15 +977,11 @@ u32 sub_81C91AC(struct UnknownInnerStruct_81C81D4 *a0, const struct BgTemplate * a0->unk0.windowId = AddWindow(&window); if (a0->unk0.windowId == 0xFF) - { - return 0; - } - else - { - a0->unk0.unkA = unknown; - a0->rightArrow = NULL; - a0->upArrow = NULL; - a0->downArrow = NULL; - return 1; - } + return FALSE; + + a0->unk0.unkA = 0; + a0->rightArrow = NULL; + a0->upArrow = NULL; + a0->downArrow = NULL; + return 1; } diff --git a/src/pokenav_unk_1.c b/src/pokenav_unk_1.c index 96ecf9c8b..b5bbc4b74 100644 --- a/src/pokenav_unk_1.c +++ b/src/pokenav_unk_1.c @@ -55,7 +55,7 @@ static u8 GetPokenavMainMenuType(void) return retVal; } -bool32 sub_81C9298(void) +bool32 PokenavCallback_Init_0(void) { struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); if (!state) @@ -69,7 +69,7 @@ bool32 sub_81C9298(void) return TRUE; } -bool32 sub_81C92CC(void) +bool32 PokenavCallback_Init_4(void) { struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); if (!state) @@ -83,7 +83,7 @@ bool32 sub_81C92CC(void) return TRUE; } -bool32 sub_81C9304(void) +bool32 PokenavCallback_Init_5(void) { struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); if (!state) @@ -96,7 +96,7 @@ bool32 sub_81C9304(void) return TRUE; } -bool32 sub_81C9338(void) +bool32 PokenavCallback_Init_2(void) { struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); if (!state) @@ -110,7 +110,7 @@ bool32 sub_81C9338(void) return TRUE; } -bool32 sub_81C9368(void) +bool32 PokenavCallback_Init_3(void) { struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); if (!state) @@ -459,7 +459,7 @@ int sub_81C98B4(void) return state->descriptionId; } -int sub_81C98C4(void) +u16 sub_81C98C4(void) { struct Pokenav1Struct *state = GetSubstructPtr(1); return state->helpBarIndex; diff --git a/src/pokenav_unk_10.c b/src/pokenav_unk_10.c index dcdbacfb9..135ff24b3 100644 --- a/src/pokenav_unk_10.c +++ b/src/pokenav_unk_10.c @@ -1,67 +1,737 @@ #include "global.h" #include "decompress.h" #include "dynamic_placeholder_text_util.h" +#include "graphics.h" #include "international_string_util.h" #include "pokenav.h" +#include "sound.h" #include "sprite.h" #include "string_util.h" +#include "strings.h" #include "text.h" #include "trainer_pokemon_sprites.h" #include "window.h" +#include "constants/songs.h" -struct Pokenav10Struct +struct PokenavSub13 { - u32 field_0[5]; - struct Sprite *field_14; + u8 filler0[0x8]; + struct PokenavSub18 *field_8; + u16 field_C; + u16 field_E; + u16 field_10; + u16 field_12; + u32 field_14[25]; + u32 field_78[8]; + u32 (*field_98)(struct PokenavSub13 *structPtr); }; -struct Pokenav10Struct2 +struct PokenavSub14 { - u32 filler0[2]; + u32 (*field_0)(void); + u32 loopedTaskId; u16 field_8; u16 field_A; u16 field_C; - u8 filler[2]; + u16 field_E; u16 field_10; + struct Sprite *field_14; + u32 filler; + u8 tilemapBuffers[2][BG_SCREEN_SIZE]; }; -// To do: move to C. -extern const u16 gUnknown_08623FF8[]; -extern const u16 gUnknown_08624038[]; -extern const u16 gUnknown_08624018[]; -extern const u16 gUnknown_08624078[]; -extern const u16 gUnknown_08624058[]; -extern const u32 gUnknown_08624280[]; -extern const u8 gText_RibbonsF700[]; -extern const u8 *const gRibbonDescriptionPointers[][2]; -extern const u8 *const gGiftRibbonDescriptionPointers[][2]; - -extern u32 gUnknown_030012C0; -extern u32 gUnknown_030012C4; - -void sub_81D0E84(struct Pokenav10Struct2 *structPtr); -void sub_81D0FF0(struct Pokenav10Struct2 *structPtr); -void sub_81D10D0(struct Pokenav10Struct2 *structPtr); +static u32 gUnknown_030012C0; +static u32 gUnknown_030012C4; + +void sub_81D0E84(struct PokenavSub14 *structPtr); +void sub_81D0FF0(struct PokenavSub14 *structPtr); +void sub_81D10D0(struct PokenavSub14 *structPtr); +void sub_81D1500(struct PokenavSub14 *structPtr); +void sub_81D0EFC(struct PokenavSub14 *structPtr); +void sub_81D1148(struct PokenavSub14 *structPtr); +void sub_81D10A4(struct PokenavSub14 *structPtr); +void sub_81D1178(struct PokenavSub14 *structPtr); +void sub_81D11D8(struct PokenavSub14 *structPtr); +void sub_81D11FC(struct PokenavSub14 *structPtr); +void sub_81D0E60(struct PokenavSub14 *structPtr); +void sub_81D1448(struct PokenavSub14 *structPtr); +void sub_81D13FC(struct PokenavSub14 *structPtr); +void sub_81D0FCC(struct PokenavSub14 *structPtr); +void sub_81D12D8(struct PokenavSub14 *structPtr); +bool32 sub_81D1524(struct PokenavSub14 *structPtr); +bool32 sub_81D1234(struct PokenavSub14 *structPtr); +void sub_81D0814(struct PokenavSub13 *structPtr); +u32 sub_81D0548(struct PokenavSub13 *structPtr); +u32 sub_81D04C4(struct PokenavSub13 *structPtr); +u32 sub_81D05D4(struct PokenavSub13 *structPtr); +bool32 sub_81D05DC(struct PokenavSub13 *structPtr); +bool32 sub_81D0688(struct PokenavSub13 *structPtr); +bool32 sub_81D0664(struct PokenavSub13 *structPtr); +bool32 sub_81D061C(struct PokenavSub13 *structPtr); +bool32 sub_81D0688(struct PokenavSub13 *structPtr); +bool32 sub_81D0A58(void); u32 sub_81D06C4(void); -u32 sub_81D07D8(void); u32 sub_81D06D4(void); -void sub_81D06E4(u8 *nick, u8 *level, u8 *gender); -void sub_81D0760(u16 *species, u32 *personality, u32 *otId); u16 sub_81D1184(s32 unused0, s32 unused1); void sub_81D1258(struct Sprite *sprite, s32 arg1, s32 arg2, s32 arg3); void sub_81D1284(struct Sprite *sprite); -u32 *sub_81D0914(u32 *arg0); -u32 *sub_81D092C(u32 *arg0); void sub_81D1350(void); void sub_81D13BC(u16 *dst, u32 id); void sub_81D1370(u32 arg0, u32 id); -u16 sub_81D0944(void); -u32 sub_81D0954(void); -void sub_81D1500(struct Pokenav10Struct *structPtr); -bool32 sub_81D1524(struct Pokenav10Struct *structPtr); void sub_81D1538(struct Sprite *sprite); +u32 sub_81D0A6C(s32 state); +u32 sub_81D0C84(s32 state); +u32 sub_81D0D2C(s32 state); +u32 sub_81D0D8C(s32 state); +u32 sub_81D0E00(s32 state); +u32 sub_81D0C54(s32 state); + +struct +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; +} static const gUnknown_086237F8[] = +{ + {1, 1, 0, 0}, + {3, 4, 1, 0}, + {3, 4, 5, 0}, + {3, 4, 9, 0}, + {3, 4, 13, 0}, + {3, 4, 17, 0}, + {1, 1, 21, 0}, + {1, 1, 22, 0}, + {1, 1, 23, 0}, + {1, 1, 24, 0}, + {1, 1, 25, 1}, + {1, 1, 26, 1}, + {1, 1, 27, 1}, + {1, 1, 28, 1}, + {1, 1, 29, 1}, + {1, 1, 30, 1}, + {1, 1, 31, 1} +}; + +#include "data/text/ribbon_descriptions.h" +#include "data/text/gift_ribbon_descriptions.h" + +static const u16 gUnknown_08623FF8[] = INCBIN_U16("graphics/pokenav/ribbons_icon1.gbapal"); +static const u16 gUnknown_08624018[] = INCBIN_U16("graphics/pokenav/ribbons_icon2.gbapal"); +static const u16 gUnknown_08624038[] = INCBIN_U16("graphics/pokenav/ribbons_icon3.gbapal"); +static const u16 gUnknown_08624058[] = INCBIN_U16("graphics/pokenav/ribbons_icon4.gbapal"); +static const u16 gUnknown_08624078[] = INCBIN_U16("graphics/pokenav/ribbons_icon5.gbapal"); +static const u16 gUnknown_08624098[] = INCBIN_U16("graphics/pokenav/8624098.gbapal"); +static const u32 gUnknown_086240B8[] = INCBIN_U32("graphics/pokenav/ribbons_icon.4bpp.lz"); +static const u32 gUnknown_08624280[] = INCBIN_U32("graphics/pokenav/ribbons_icon_big.4bpp.lz"); + +static const struct BgTemplate gUnknown_08624B98[] = +{ + { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 0x07, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 0x06, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + } +}; + +static const LoopedTask gUnknown_08624BA0[] = +{ + NULL, + sub_81D0C84, + sub_81D0D2C, + sub_81D0D8C, + sub_81D0E00, + sub_81D0C54 +}; // code +bool32 PokenavCallback_Init_13(void) +{ + struct PokenavSub13 *structPtr = AllocSubstruct(13, sizeof(struct PokenavSub13)); + if (structPtr == NULL) + return FALSE; + + structPtr->field_8 = GetSubstructPtr(18); + if (structPtr->field_8 == NULL) + return FALSE; + + sub_81D0814(structPtr); + structPtr->field_98 = sub_81D04C4; + gKeyRepeatContinueDelay = 3; + gKeyRepeatStartDelay = 10; + return TRUE; +} + +u32 sub_81D04A0(void) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + return structPtr->field_98(structPtr); +} + +void sub_81D04B8(void) +{ + FreePokenavSubstruct(13); +} + +u32 sub_81D04C4(struct PokenavSub13 *structPtr) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP && structPtr->field_8->unk2 != 0) + { + structPtr->field_8->unk2--; + structPtr->field_C = 0; + sub_81D0814(structPtr); + return 1; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN && structPtr->field_8->unk2 < structPtr->field_8->unk0 - 1) + { + structPtr->field_8->unk2++; + structPtr->field_C = 0; + sub_81D0814(structPtr); + return 1; + } + else if (gMain.newKeys & A_BUTTON) + { + structPtr->field_98 = sub_81D0548; + return 2; + } + else if (gMain.newKeys & B_BUTTON) + { + structPtr->field_98 = sub_81D05D4; + return 5; + } + return 0; +} + +u32 sub_81D0548(struct PokenavSub13 *structPtr) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP && sub_81D05DC(structPtr)) + return 3; + else if (gMain.newAndRepeatedKeys & DPAD_DOWN && sub_81D061C(structPtr)) + return 3; + else if (gMain.newAndRepeatedKeys & DPAD_LEFT && sub_81D0664(structPtr)) + return 3; + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT && sub_81D0688(structPtr)) + return 3; + else if (gMain.newKeys & B_BUTTON) + { + structPtr->field_98 = sub_81D04C4; + return 4; + } + return 0; +} + +u32 sub_81D05D4(struct PokenavSub13 *structPtr) +{ + return 100014; +} + +bool32 sub_81D05DC(struct PokenavSub13 *structPtr) +{ + if (structPtr->field_C < 25) + { + if (structPtr->field_C <= 8) + return FALSE; + + structPtr->field_C -= 9; + return TRUE; + } + if (structPtr->field_10 != 0) + { + u32 var = structPtr->field_C - 27; + structPtr->field_C = var + structPtr->field_E; + if (structPtr->field_C >= structPtr->field_10) + structPtr->field_C = structPtr->field_10 - 1; + return TRUE; + } + return FALSE; +} + +bool32 sub_81D061C(struct PokenavSub13 *structPtr) +{ + if (structPtr->field_C >= 25) + return FALSE; + if (structPtr->field_C < structPtr->field_E) + { + structPtr->field_C += 9; + if (structPtr->field_C >= structPtr->field_10) + structPtr->field_C = structPtr->field_10 - 1; + return TRUE; + } + if (structPtr->field_12 != 0) + { + int var = structPtr->field_C - structPtr->field_E; + if (var >= structPtr->field_12) + var = structPtr->field_12 - 1; + + structPtr->field_C = var + 27; + return TRUE; + } + return FALSE; +} + +bool32 sub_81D0664(struct PokenavSub13 *structPtr) +{ + u16 var = structPtr->field_C % 9; + if (var != 0) + { + structPtr->field_C--; + return TRUE; + } + + return FALSE; +} + +bool32 sub_81D0688(struct PokenavSub13 *structPtr) +{ + int r1 = structPtr->field_C % 9; + + if (r1 >= 8) + return FALSE; + + if (structPtr->field_C <= 26) + { + if (structPtr->field_C < structPtr->field_10 - 1) + { + structPtr->field_C++; + return TRUE; + } + } + else + { + if (r1 < structPtr->field_12 - 1) + { + structPtr->field_C++; + return TRUE; + } + } + return FALSE; +} + +u32 sub_81D06C4(void) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + return structPtr->field_8->unk2; +} + +u32 sub_81D06D4(void) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + return structPtr->field_8->unk0; +} + +static void GetCurrMonInfo1(u8 *nick, u8 *level, u8 *gender) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub18 *mons = structPtr->field_8; + struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + + if (monInfo->boxId == TOTAL_BOXES_COUNT) + { + struct Pokemon *mon = &gPlayerParty[monInfo->monId]; + GetMonData(mon, MON_DATA_NICKNAME, nick); + *level = GetLevelFromMonExp(mon); + *gender = GetMonGender(mon); + } + else + { + struct BoxPokemon *boxMon = GetBoxedMonPtr(monInfo->boxId, monInfo->monId); + *gender = GetBoxMonGender(boxMon); + *level = GetLevelFromBoxMonExp(boxMon); + GetBoxMonData(boxMon, MON_DATA_NICKNAME, nick); + } + StringGetEnd10(nick); +} + +static void GetCurrMonInfo2(u16 *species, u32 *personality, u32 *otId) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub18 *mons = structPtr->field_8; + struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + + if (monInfo->boxId == TOTAL_BOXES_COUNT) + { + struct Pokemon *mon = &gPlayerParty[monInfo->monId]; + *species = GetMonData(mon, MON_DATA_SPECIES); + *personality = GetMonData(mon, MON_DATA_PERSONALITY); + *otId = GetMonData(mon, MON_DATA_OT_ID); + } + else + { + struct BoxPokemon *boxMon = GetBoxedMonPtr(monInfo->boxId, monInfo->monId); + *species = GetBoxMonData(boxMon, MON_DATA_SPECIES); + *personality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY); + *otId = GetBoxMonData(boxMon, MON_DATA_OT_ID); + } +} + +static u32 GetCurrMonRibbonCount(void) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub18 *mons = structPtr->field_8; + struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + + if (monInfo->boxId == TOTAL_BOXES_COUNT) + return GetMonData(&gPlayerParty[monInfo->monId], MON_DATA_RIBBON_COUNT); + else + return GetBoxMonDataAt(monInfo->boxId, monInfo->monId, MON_DATA_RIBBON_COUNT); +} + +void sub_81D0814(struct PokenavSub13 *structPtr) +{ + u32 ribbons; + s32 i, j; + struct PokenavSub18 *mons = structPtr->field_8; + struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + + if (monInfo->boxId == TOTAL_BOXES_COUNT) + ribbons = GetMonData(&gPlayerParty[monInfo->monId], MON_DATA_RIBBONS); + else + ribbons = GetBoxMonDataAt(monInfo->boxId, monInfo->monId, MON_DATA_RIBBONS); + + structPtr->field_10 = 0; + structPtr->field_12 = 0; + for (i = 0; i < ARRAY_COUNT(gUnknown_086237F8); i++) + { + s32 r4 = ((1 << gUnknown_086237F8[i].unk0) - 1) & ribbons; + if (gUnknown_086237F8[i].unk3 == 0) + { + for (j = 0; j < r4; j++) + structPtr->field_14[structPtr->field_10++] = gUnknown_086237F8[i].unk2 + j; + } + else + { + for (j = 0; j < r4; j++) + structPtr->field_78[structPtr->field_12++] = gUnknown_086237F8[i].unk2 + j; + } + ribbons >>= gUnknown_086237F8[i].unk0; + } + + if (structPtr->field_10 != 0) + { + structPtr->field_E = ((structPtr->field_10 - 1) / 9) * 9; + structPtr->field_C = 0; + } + else + { + structPtr->field_E = 0; + structPtr->field_C = 27; + } +} + +u32 *sub_81D0914(u32 *arg0) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + *arg0 = structPtr->field_10; + return structPtr->field_14; +} + +u32 *sub_81D092C(u32 *arg0) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + *arg0 = structPtr->field_12; + return structPtr->field_78; +} + +u16 sub_81D0944(void) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + return structPtr->field_C; +} + +u32 sub_81D0954(void) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + int var = structPtr->field_C; + if (var <= 24) + return structPtr->field_14[var]; + else + return structPtr->field_78[var - 27]; +} + +bool32 sub_81D0978(void) +{ + struct PokenavSub14 *structPtr = AllocSubstruct(14, sizeof(struct PokenavSub14)); + if (structPtr == NULL) + return FALSE; + + structPtr->loopedTaskId = CreateLoopedTask(sub_81D0A6C, 1); + structPtr->field_0 = sub_81D0A58; + return TRUE; +} + +void sub_81D09B0(s32 id) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + structPtr->loopedTaskId = CreateLoopedTask(gUnknown_08624BA0[id], 1); + structPtr->field_0 = sub_81D0A58; +} + +u32 sub_81D09E0(void) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + return structPtr->field_0(); +} + +void sub_81D09F4(void) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + RemoveWindow(structPtr->field_A); + RemoveWindow(structPtr->field_8); + RemoveWindow(structPtr->field_C); + RemoveWindow(structPtr->field_E); + sub_81D1178(structPtr); + FreeSpriteTilesByTag(9); + FreeSpritePaletteByTag(0xF); + FreeSpritePaletteByTag(0x10); + FreeSpritePaletteByTag(0x11); + FreeSpritePaletteByTag(0x12); + FreeSpritePaletteByTag(0x13); + FreeSpriteOamMatrix(structPtr->field_14); + DestroySprite(structPtr->field_14); + FreePokenavSubstruct(14); +} + +bool32 sub_81D0A58(void) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + return IsLoopedTaskActive(structPtr->loopedTaskId); +} + +u32 sub_81D0A6C(s32 state) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + switch (state) + { + case 0: + InitBgTemplates(gUnknown_08624B98, ARRAY_COUNT(gUnknown_08624B98)); + decompress_and_copy_tile_data_to_vram(2, gUnknown_08DDE030, 0, 0, 0); + SetBgTilemapBuffer(2, structPtr->tilemapBuffers[0]); + CopyToBgTilemapBuffer(2, gUnknown_08DDE12C, 0, 0); + CopyPaletteIntoBufferUnfaded(gUnknown_08DDE010, 0x10, 0x20); + CopyBgTilemapBufferToVram(2); + return LT_INC_AND_PAUSE; + case 1: + if (!free_temp_tile_data_buffers_if_possible()) + { + sub_8199DF0(1, 0, 0, 1); + decompress_and_copy_tile_data_to_vram(1, gUnknown_086240B8, 0, 1, 0); + SetBgTilemapBuffer(1, structPtr->tilemapBuffers[1]); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); + CopyPaletteIntoBufferUnfaded(gUnknown_08623FF8, 0x20, 0xA0); + CopyPaletteIntoBufferUnfaded(gUnknown_08624098, 0xA0, 0x20); + CopyBgTilemapBufferToVram(1); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 2: + if (!free_temp_tile_data_buffers_if_possible()) + { + sub_81D0E60(structPtr); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 3: + if (!free_temp_tile_data_buffers_if_possible()) + { + sub_81D0FCC(structPtr); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 4: + if (!free_temp_tile_data_buffers_if_possible()) + { + sub_81D10A4(structPtr); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 5: + if (!IsDma3ManagerBusyWithBgCopy()) + { + CopyBgTilemapBufferToVram(2); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 6: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81D1148(structPtr); + return LT_INC_AND_CONTINUE; + } + return LT_PAUSE; + case 7: + sub_81D12D8(structPtr); + sub_81C7BA4(10); + return LT_INC_AND_PAUSE; + case 8: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81D13FC(structPtr); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ShowBg(1); + ShowBg(2); + HideBg(3); + sub_81C7AC0(1); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 9: + if (IsPaletteFadeActive()) + return LT_PAUSE; + return LT_FINISH; + } + return LT_FINISH; +} + +u32 sub_81D0C54(s32 state) +{ + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81C7AC0(0); + return LT_INC_AND_PAUSE; + case 1: + if (IsPaletteFadeActive()) + return LT_PAUSE; + return LT_FINISH; + } + return LT_FINISH; +} + +u32 sub_81D0C84(s32 state) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81D11D8(structPtr); + return LT_INC_AND_PAUSE; + case 1: + if (!sub_81D1234(structPtr)) + { + sub_81D0FF0(structPtr); + return LT_INC_AND_CONTINUE; + } + return LT_PAUSE; + case 2: + sub_81D12D8(structPtr); + return LT_INC_AND_CONTINUE; + case 3: + sub_81D10D0(structPtr); + return LT_INC_AND_CONTINUE; + case 4: + sub_81D0E84(structPtr); + return LT_INC_AND_CONTINUE; + case 5: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81D11FC(structPtr); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 6: + if (sub_81D1234(structPtr)) + return LT_PAUSE; + return LT_FINISH; + } + return LT_FINISH; +} + +u32 sub_81D0D2C(s32 state) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81D1448(structPtr); + return LT_INC_AND_PAUSE; + case 1: + if (!sub_81D1524(structPtr)) + { + sub_81D0EFC(structPtr); + sub_81C7BA4(11); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 2: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + } + return LT_FINISH; +} + +u32 sub_81D0D8C(s32 state) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81D1500(structPtr); + return LT_INC_AND_PAUSE; + case 1: + if (!sub_81D1524(structPtr)) + { + sub_81D1448(structPtr); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 2: + if (!sub_81D1524(structPtr)) + { + sub_81D0EFC(structPtr); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + } + return LT_FINISH; +} + +u32 sub_81D0E00(s32 state) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81D1500(structPtr); + return LT_INC_AND_PAUSE; + case 1: + if (!sub_81D1524(structPtr)) + { + sub_81D0E84(structPtr); + sub_81C7BA4(10); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 2: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + } + return LT_FINISH; +} + static const struct WindowTemplate gUnknown_08624BB8 = { .bg = 2, @@ -73,18 +743,18 @@ static const struct WindowTemplate gUnknown_08624BB8 = .baseBlock = 0x14, }; -void sub_81D0E60(struct Pokenav10Struct2 *structPtr) +void sub_81D0E60(struct PokenavSub14 *structPtr) { structPtr->field_A = AddWindow(&gUnknown_08624BB8); PutWindowTilemap(structPtr->field_A); sub_81D0E84(structPtr); } -void sub_81D0E84(struct Pokenav10Struct2 *structPtr) +void sub_81D0E84(struct PokenavSub14 *structPtr) { u8 color[] = {4, 2, 3}; - ConvertIntToDecimalStringN(gStringVar1, sub_81D07D8(), STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar1, GetCurrMonRibbonCount(), STR_CONV_MODE_LEFT_ALIGN, 2); DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_RibbonsF700); @@ -93,7 +763,7 @@ void sub_81D0E84(struct Pokenav10Struct2 *structPtr) CopyWindowToVram(structPtr->field_A, 2); } -void sub_81D0EFC(struct Pokenav10Struct2 *structPtr) +void sub_81D0EFC(struct PokenavSub14 *structPtr) { s32 i; u32 ribbonId = sub_81D0954(); @@ -130,7 +800,7 @@ static const struct WindowTemplate gUnknown_08624BC4 = .baseBlock = 0x54, }; -void sub_81D0FCC(struct Pokenav10Struct2 *structPtr) +void sub_81D0FCC(struct PokenavSub14 *structPtr) { structPtr->field_8 = AddWindow(&gUnknown_08624BC4); PutWindowTilemap(structPtr->field_8); @@ -141,7 +811,7 @@ static const u8 sMaleIconString[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE static const u8 sFemaleIconString[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); static const u8 sGenderlessIconString[] = _("{UNK_SPACER}"); -void sub_81D0FF0(struct Pokenav10Struct2 *structPtr) +void sub_81D0FF0(struct PokenavSub14 *structPtr) { const u8 *genderTxt; u8 *txtPtr; @@ -149,7 +819,7 @@ void sub_81D0FF0(struct Pokenav10Struct2 *structPtr) u16 windowId = structPtr->field_8; FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - sub_81D06E4(gStringVar3, &level, &gender); + GetCurrMonInfo1(gStringVar3, &level, &gender); AddTextPrinterParameterized(windowId, 1, gStringVar3, 0, 1, TEXT_SPEED_FF, NULL); switch (gender) { @@ -187,7 +857,7 @@ static const struct WindowTemplate gUnknown_08624BE8[] = {}, }; -void sub_81D10A4(struct Pokenav10Struct2 *structPtr) +void sub_81D10A4(struct PokenavSub14 *structPtr) { structPtr->field_C = AddWindow(gUnknown_08624BE8); FillWindowPixelBuffer(structPtr->field_C, PIXEL_FILL(1)); @@ -195,7 +865,7 @@ void sub_81D10A4(struct Pokenav10Struct2 *structPtr) sub_81D10D0(structPtr); } -void sub_81D10D0(struct Pokenav10Struct2 *structPtr) +void sub_81D10D0(struct PokenavSub14 *structPtr) { s32 x; u8 *txtPtr; @@ -210,18 +880,18 @@ void sub_81D10D0(struct Pokenav10Struct2 *structPtr) CopyWindowToVram(structPtr->field_C, 2); } -void sub_81D1148(struct Pokenav10Struct2 *structPtr) +void sub_81D1148(struct PokenavSub14 *structPtr) { u16 species; u32 personality, otId; - sub_81D0760(&species, &personality, &otId); + GetCurrMonInfo2(&species, &personality, &otId); ResetAllPicSprites(); structPtr->field_10 = sub_81D1184(40, 104); sub_81C7990(15, 0); } -void sub_81D1178(struct Pokenav10Struct2 *structPtr) +void sub_81D1178(struct PokenavSub14 *structPtr) { FreeAndDestroyMonPicSprite(structPtr->field_10); } @@ -231,25 +901,25 @@ u16 sub_81D1184(s32 unused0, s32 unused1) u16 species, spriteId; u32 personality, otId; - sub_81D0760(&species, &personality, &otId); + GetCurrMonInfo2(&species, &personality, &otId); spriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 40, 104, 15, 0xFFFF); gSprites[spriteId].oam.priority = 0; return spriteId; } -void sub_81D11D8(struct Pokenav10Struct2 *structPtr) +void sub_81D11D8(struct PokenavSub14 *structPtr) { sub_81D1258(&gSprites[structPtr->field_10], 40, -32, 6); } -void sub_81D11FC(struct Pokenav10Struct2 *structPtr) +void sub_81D11FC(struct PokenavSub14 *structPtr) { FreeAndDestroyMonPicSprite(structPtr->field_10); structPtr->field_10 = sub_81D1184(-32, 104); sub_81D1258(&gSprites[structPtr->field_10], -32, 40, 6); } -bool32 sub_81D1234(struct Pokenav10Struct2 *structPtr) +bool32 sub_81D1234(struct PokenavSub14 *structPtr) { return (gSprites[structPtr->field_10].callback != SpriteCallbackDummy); } @@ -286,7 +956,7 @@ void sub_81D1284(struct Sprite *sprite) } } -void sub_81D12D8(void) +void sub_81D12D8(struct PokenavSub14 *structPtr) { u32 *ptr; @@ -439,7 +1109,7 @@ static const struct SpriteTemplate gUnknown_08624D04 = .callback = SpriteCallbackDummy, }; -void sub_81D13FC(struct Pokenav10Struct *structPtr) +void sub_81D13FC(struct PokenavSub14 *structPtr) { u8 spriteId; @@ -451,7 +1121,7 @@ void sub_81D13FC(struct Pokenav10Struct *structPtr) structPtr->field_14->invisible = TRUE; } -void sub_81D1448(struct Pokenav10Struct *structPtr) +void sub_81D1448(struct PokenavSub14 *structPtr) { u32 ribbonId; s32 r4 = sub_81D0944(); @@ -471,14 +1141,14 @@ void sub_81D1448(struct Pokenav10Struct *structPtr) structPtr->field_14->callback = sub_81D1538; } -void sub_81D1500(struct Pokenav10Struct *structPtr) +void sub_81D1500(struct PokenavSub14 *structPtr) { structPtr->field_14->data[0] = 1; StartSpriteAffineAnim(structPtr->field_14, 2); structPtr->field_14->callback = sub_81D1538; } -bool32 sub_81D1524(struct Pokenav10Struct *structPtr) +bool32 sub_81D1524(struct PokenavSub14 *structPtr) { return (structPtr->field_14->callback != SpriteCallbackDummy); } diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index 3aec4685e..1c40e146f 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -1,18 +1,1275 @@ #include "global.h" -#include "gym_leader_rematch.h" +#include "alloc.h" +#include "decompress.h" +#include "bg.h" +#include "palette.h" +#include "trig.h" +#include "gpu_regs.h" +#include "menu.h" +#include "window.h" #include "pokenav.h" +#include "graphics.h" +#include "sound.h" +#include "gym_leader_rematch.h" +#include "window.h" +#include "strings.h" +#include "scanline_effect.h" +#include "constants/songs.h" +#include "constants/rgb.h" + +// Top Menu + +struct Pokenav2Struct +{ + bool32 (*callback)(void); + u32 loopedTaskId; + u16 optionDescriptionWindowId; + u8 bg3ScrollTaskId; + u8 cursorPos; + bool8 otherIconsInMotion; + u8 field_00d; + bool32 iconVisible[6]; + struct Sprite * field_028; + struct Sprite * iconSprites[6][4]; + u16 bg1TilemapBuffer[0x400]; +}; + +static struct Pokenav2Struct * sub_81C9958(void); +static bool32 sub_81C99FC(void); +static u32 sub_81C9A10(s32 state); +static u32 sub_81C9C6C(s32 state); +static u32 sub_81C9CA8(s32 state); +static u32 sub_81C9D44(s32 state); +static u32 sub_81C9DD8(s32 state); +static u32 sub_81C9E58(s32 state); +static u32 sub_81C9EC8(s32 state); +static u32 sub_81C9EF8(s32 state); +static u32 sub_81C9F28(s32 state); +static void sub_81C9FC4(void); +static void sub_81C9FEC(void); +static void sub_81CA02C(void); +static void sub_81CA094(void); +static void sub_81CA0C8(void); +static void sub_81CA0EC(const u16 *const * a0, s32 a1, s32 a2); +static void sub_81CA20C(void); +static void sub_81CA278(void); +static void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3); +static void sub_81CA3B4(struct Sprite ** sprites); +static void sub_81CA2DC(void); +static bool32 sub_81CA324(void); +static void sub_81CA448(struct Sprite ** sprites, bool32 a1); +static void sub_81CA474(struct Sprite * sprite); +static void sub_81CA4AC(struct Sprite * sprite); +static void sub_81CA580(u8 taskId); +static void sub_81CA640(void); +static void sub_81CA6AC(struct Sprite * sprite); +static void sub_81CA698(void); +static void sub_81CA6E0(void); +static void sub_81CA714(void); +static void sub_81CA770(void); +static bool32 sub_81CA7C4(void); +static void sub_81CA7D4(void); +static void sub_81CA7F4(void); +static void sub_81CA808(u8 taskId); +static void sub_81CA818(void); +static void sub_81CA850(void); +static void sub_81CA864(void); +static bool32 sub_81CA89C(void); +static void sub_81CA8B0(u8 taskId); +static void sub_81CA92C(void); +static void sub_81CA994(void); +static void sub_81CA9C8(void); +static void sub_81CA9D8(void); +static void sub_81CA9EC(u8 taskId); +static void sub_81CAA3C(void); + +static const u16 gUnknown_0861FC78[] = INCBIN_U16("graphics/pokenav/bg.gbapal"); +static const u32 gUnknown_0861FC98[] = INCBIN_U32("graphics/pokenav/bg.4bpp.lz"); +static const u32 gUnknown_0861FCAC[] = INCBIN_U32("graphics/pokenav/bg.bin.lz"); +static const u16 gUnknown_0861FD4C[] = INCBIN_U16("graphics/pokenav/outline.gbapal"); +static const u32 gUnknown_0861FD6C[] = INCBIN_U32("graphics/pokenav/outline.4bpp.lz"); +static const u32 gUnknown_0861FFF4[] = INCBIN_U32("graphics/pokenav/outline_map.bin.lz"); +static const u16 gUnknown_08620104[] = INCBIN_U16("graphics/pokenav/blue_light.gbapal"); +static const u32 gUnknown_08620124[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); + +static const struct BgTemplate gUnknown_08620194[] = { + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 15, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0x000 + }, { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 23, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + } +}; + +static const LoopedTask gUnknown_086201A0[] = { + NULL, + sub_81C9C6C, + sub_81C9CA8, + sub_81C9D44, + sub_81C9DD8, + sub_81C9E58, + sub_81C9EC8, + sub_81C9EF8, + sub_81C9F28 +}; + +static const struct CompressedSpriteSheet gUnknown_086201C4[] = +{ + { + .data = gPokenavOptions_Gfx, + .size = 0x3400, + .tag = 0x0003 + }, + { + .data = gUnknown_08620124, + .size = 0x0100, + .tag = 0x0001 + } +}; + +static const struct SpritePalette gUnknown_086201D4[] = +{ + {gPokenavOptions_Pal + 0x00, 4}, + {gPokenavOptions_Pal + 0x10, 5}, + {gPokenavOptions_Pal + 0x20, 6}, + {gPokenavOptions_Pal + 0x30, 7}, + {gPokenavOptions_Pal + 0x40, 8}, + {gUnknown_08620104, 3}, + {} +}; + +static const u16 gUnknown_0862020C[] = {0, 0}; +static const u16 gUnknown_08620210[] = {0x20, 1}; +static const u16 gUnknown_08620214[] = {0x40, 4}; +static const u16 gUnknown_08620218[] = {0x60, 2}; +static const u16 gUnknown_0862021C[] = {0x80, 3}; +static const u16 gUnknown_08620220[] = {0xA0, 1}; +static const u16 gUnknown_08620224[] = {0xC0, 1}; +static const u16 gUnknown_08620228[] = {0xE0, 4}; +static const u16 gUnknown_0862022C[] = {0x100, 1}; +static const u16 gUnknown_08620230[] = {0x120, 2}; +static const u16 gUnknown_08620234[] = {0x140, 0}; +static const u16 gUnknown_08620238[] = {0x160, 0}; +static const u16 gUnknown_0862023C[] = {0x180, 3}; + +struct UnkStruct_08620240 +{ + u16 unk0; + u16 unk2; + const u16 *unk4[6]; +}; + +static const struct UnkStruct_08620240 gUnknown_08620240[5] = +{ + { + 0x2A, + 0x14, + {gUnknown_0862020C, gUnknown_08620210, gUnknown_0862021C} + }, + { + 0x2A, + 0x14, + {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_0862021C} + }, + { + 0x2A, + 0x14, + {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_08620218, gUnknown_0862021C} + }, + { + 0x38, + 0x14, + {gUnknown_08620220, gUnknown_08620224, gUnknown_0862023C} + }, + { + 0x28, + 0x10, + {gUnknown_08620228, gUnknown_0862022C, gUnknown_08620230, gUnknown_08620234, gUnknown_08620238, gUnknown_0862023C} + }, +}; + +static const struct WindowTemplate gUnknown_086202CC = +{ + .bg = 1, + .tilemapLeft = 3, + .tilemapTop = 17, + .width = 0x18, + .height = 0x2, + .paletteNum = 1, + .baseBlock = 8 +}; + +static const u8 *const gUnknown_086202D4[] = +{ + gUnknown_085EBCC5, + gUnknown_085EBCE8, + gUnknown_085EBD01, + gUnknown_085EBD1C, + gUnknown_085EBD34, + gUnknown_085EBD83, + gUnknown_085EBDA2, + gUnknown_085EBDBF, + gUnknown_085EBDDB, + gUnknown_085EBDEE, + gUnknown_085EBE06, + gUnknown_085EBE19, + gUnknown_085EBE2D, + gUnknown_085EBE41 +}; + +static const u8 gUnknown_0862030C[] = {6, 8, 7}; + +static const u8 gUnknown_0862030F[] = {6, 8, 7, 0, 0}; + +static const struct OamData gUnknown_08620314 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +static const union AffineAnimCmd gUnknown_0862031C[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_0862032C[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0x12), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_08620344[] = +{ + gUnknown_0862031C, + gUnknown_0862032C +}; + +static const struct SpriteTemplate gUnknown_0862034C = +{ + .tileTag = 3, + .paletteTag = 4, + .oam = &gUnknown_08620314, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08620344, + .callback = SpriteCallbackDummy, +}; + +static const struct OamData gUnknown_08620364 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +static const struct SpriteTemplate gUnknown_0862036C = +{ + .tileTag = 1, + .paletteTag = 3, + .oam = &gUnknown_08620364, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct ScanlineEffectParams gUnknown_08620384 = +{ + (void *)REG_ADDR_WIN0H, + ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, + 1, + 0 +}; -bool32 sub_81C98D4(void) +static bool32 sub_81C98D4(void) { s32 i; for (i = 0; i < REMATCH_TABLE_ENTRIES; i++) { if (sub_81CB0C8(i) == gMapHeader.regionMapSectionId - && sub_81CAE08(i) - && gSaveBlock1Ptr->trainerRematches[i]) + && sub_81CAE08(i) + && gSaveBlock1Ptr->trainerRematches[i]) return TRUE; } return FALSE; } + +bool32 sub_81C9924(void) +{ + struct Pokenav2Struct * unk = sub_81C9958(); + + if (unk == NULL) + return FALSE; + + unk->field_00d = 0; + return TRUE; +} + +bool32 sub_81C9940(void) +{ + struct Pokenav2Struct * unk = sub_81C9958(); + + if (unk == NULL) + return FALSE; + + unk->field_00d = 1; + return TRUE; +} + +static struct Pokenav2Struct * sub_81C9958(void) +{ + struct Pokenav2Struct * unk = AllocSubstruct(2, sizeof(struct Pokenav2Struct)); + + if (unk != NULL) + { + unk->otherIconsInMotion = FALSE; + unk->loopedTaskId = CreateLoopedTask(sub_81C9A10, 1); + unk->callback = sub_81C99FC; + } + + return unk; +} + + +void sub_81C9990(s32 ltIdx) +{ + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + unk->loopedTaskId = CreateLoopedTask(gUnknown_086201A0[ltIdx], 1); + unk->callback = sub_81C99FC; +} + +bool32 sub_81C99C0(void) +{ + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + return unk->callback(); +} + +void sub_81C99D4(void) +{ + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + sub_81CA7F4(); + RemoveWindow(unk->optionDescriptionWindowId); + sub_81C9FEC(); + sub_81CA994(); + FreePokenavSubstruct(2); +} + +static bool32 sub_81C99FC(void) +{ + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + return IsLoopedTaskActive(unk->loopedTaskId); +} + +static u32 sub_81C9A10(s32 state) +{ + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + switch (state) + { + case 0: + InitBgTemplates(gUnknown_08620194, ARRAY_COUNT(gUnknown_08620194)); + decompress_and_copy_tile_data_to_vram(1, gPokenavMessageBox_Gfx, 0, 0, 0); + SetBgTilemapBuffer(1, unk->bg1TilemapBuffer); + CopyToBgTilemapBuffer(1, gPokenavMessageBox_Tilemap, 0, 0); + CopyBgTilemapBufferToVram(1); + CopyPaletteIntoBufferUnfaded(gPokenavMessageBox_Pal, 0x10, 0x20); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + return LT_INC_AND_PAUSE; + case 1: + if (free_temp_tile_data_buffers_if_possible()) + return LT_PAUSE; + decompress_and_copy_tile_data_to_vram(2, gUnknown_0861FD6C, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(2, gUnknown_0861FFF4, 0, 0, 1); + CopyPaletteIntoBufferUnfaded(gUnknown_0861FD4C, 0x20, 0x20); + return LT_INC_AND_PAUSE; + case 2: + if (free_temp_tile_data_buffers_if_possible()) + return LT_PAUSE; + decompress_and_copy_tile_data_to_vram(3, gUnknown_0861FC98, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(3, gUnknown_0861FCAC, 0, 0, 1); + CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78, 0x30, 0x20); + if (sub_81C9894() == 3 || sub_81C9894() == 4) + sub_81CA850(); + return LT_INC_AND_PAUSE; + case 3: + if (free_temp_tile_data_buffers_if_possible()) + return LT_PAUSE; + sub_81CA6E0(); + sub_81CA7D4(); + return LT_INC_AND_CONTINUE; + case 4: + sub_81C9FC4(); + return LT_INC_AND_CONTINUE; + case 5: + sub_81CA714(); + sub_81CA02C(); + sub_81CA640(); + sub_81CA0C8(); + return LT_INC_AND_PAUSE; + case 6: + if (sub_81CA7C4()) + return LT_PAUSE; + return LT_INC_AND_CONTINUE; + case 7: + ShowBg(1); + ShowBg(2); + ShowBg(3); + if (unk->field_00d) + sub_81C7AC0(1); + else + { + PlaySE(SE_PN_ON); + sub_81C7AC0(3); + } + switch (sub_81C9894()) + { + case 4: + LoadLeftHeaderGfxForIndex(7); + // fallthrough + case 3: + LoadLeftHeaderGfxForIndex(1); + break; + default: + LoadLeftHeaderGfxForIndex(0); + break; + } + return LT_INC_AND_PAUSE; + case 8: + if (IsPaletteFadeActive()) + return LT_PAUSE; + switch (sub_81C9894()) + { + case 4: + sub_81C7FA0(7, FALSE, FALSE); + // fallthrough + case 3: + sub_81C7FA0(1, FALSE, FALSE); + break; + default: + sub_81C7FA0(0, FALSE, FALSE); + break; + } + sub_81CA20C(); + sub_81CA92C(); + return LT_INC_AND_CONTINUE; + case 9: + if (sub_81CA324()) + return LT_PAUSE; + if (sub_81C8010()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81C9C6C(s32 state) +{ + switch (state) + { + case 0: + sub_81CAA3C(); + sub_81CA278(); + sub_81CA714(); + PlaySE(SE_SELECT); + return LT_INC_AND_PAUSE; + case 1: + if (sub_81CA324()) + return LT_PAUSE; + if (sub_81CA7C4()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81C9CA8(s32 state) +{ + switch (state) + { + case 0: + sub_81CA9C8(); + sub_81CA2DC(); + sub_81C7FC4(0, 0); + PlaySE(SE_SELECT); + return LT_INC_AND_PAUSE; + case 1: + if (sub_81CA324()) + return LT_PAUSE; + if (sub_81C8010()) + return LT_PAUSE; + sub_81CA0C8(); + LoadLeftHeaderGfxForIndex(1); + return LT_INC_AND_PAUSE; + case 2: + sub_81CA20C(); + sub_81C7FA0(1, FALSE, FALSE); + sub_81CA818(); + sub_81CA714(); + return LT_INC_AND_PAUSE; + case 3: + if (sub_81CA324()) + return LT_PAUSE; + if (sub_81C8010()) + return LT_PAUSE; + if (sub_81CA89C()) + return LT_PAUSE; + if (sub_81CA7C4()) + return LT_PAUSE; + sub_81CA9D8(); + break; + } + return LT_FINISH; +} + +static u32 sub_81C9D44(s32 state) +{ + switch (state) + { + case 0: + sub_81CA9C8(); + sub_81CA2DC(); + sub_81C7FC4(1, 0); + return LT_INC_AND_PAUSE; + case 1: + if (sub_81CA324()) + return LT_PAUSE; + if (sub_81C8010()) + return LT_PAUSE; + sub_81CA0C8(); + LoadLeftHeaderGfxForIndex(0); + return LT_INC_AND_PAUSE; + case 2: + sub_81CA20C(); + sub_81C7FA0(0, FALSE, FALSE); + sub_81CA864(); + sub_81CA714(); + return LT_INC_AND_PAUSE; + case 3: + if (sub_81CA324()) + return LT_PAUSE; + if (sub_81C8010()) + return LT_PAUSE; + if (sub_81CA89C()) + return LT_PAUSE; + if (sub_81CA7C4()) + return LT_PAUSE; + sub_81CA9D8(); + break; + } + return LT_FINISH; +} + +static u32 sub_81C9DD8(s32 state) +{ + switch (state) + { + case 0: + sub_81CA9C8(); + sub_81CA2DC(); + PlaySE(SE_SELECT); + return LT_INC_AND_PAUSE; + case 1: + if (sub_81CA324()) + return LT_PAUSE; + LoadLeftHeaderGfxForIndex(7); + sub_81CA0C8(); + return LT_INC_AND_PAUSE; + case 2: + sub_81CA20C(); + sub_81C7FA0(7, FALSE, FALSE); + sub_81CA714(); + return LT_INC_AND_PAUSE; + case 3: + if (sub_81CA324()) + return LT_PAUSE; + if (sub_81C8010()) + return LT_PAUSE; + if (sub_81CA89C()) + return LT_PAUSE; + sub_81CA9D8(); + break; + } + return LT_FINISH; +} + +static u32 sub_81C9E58(s32 state) +{ + switch (state) + { + case 0: + sub_81CA9C8(); + sub_81CA2DC(); + sub_81C7FC4(7, 0); + return LT_INC_AND_PAUSE; + case 1: + if (sub_81CA324()) + return LT_PAUSE; + if (sub_81C8010()) + return LT_PAUSE; + sub_81CA0C8(); + return LT_INC_AND_PAUSE; + case 2: + sub_81CA20C(); + sub_81CA714(); + return LT_INC_AND_PAUSE; + case 3: + if (sub_81CA324()) + return LT_PAUSE; + if (sub_81CA89C()) + return LT_PAUSE; + sub_81CA9D8(); + break; + } + return LT_FINISH; +} + +static u32 sub_81C9EC8(s32 state) +{ + switch (state) + { + case 0: + PlaySE(SE_HAZURE); + sub_81CA770(); + return LT_INC_AND_PAUSE; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81C9EF8(s32 state) +{ + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81CA714(); + return LT_INC_AND_PAUSE; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81C9F28(s32 state) +{ + switch (state) + { + case 0: + sub_81C7BA4(sub_81C98C4()); + return LT_INC_AND_PAUSE; + case 1: + if (IsDma3ManagerBusyWithBgCopy_()) + return LT_PAUSE; + sub_81C7880(); + sub_81CA9C8(); + sub_81CA2DC(); + switch (sub_81C9894()) + { + case 4: + sub_81C7FC4(7, FALSE); + // fallthrough + case 3: + sub_81C7FC4(1, FALSE); + break; + default: + sub_81C7FC4(0, FALSE); + break; + } + PlaySE(SE_SELECT); + return LT_INC_AND_PAUSE; + case 2: + if (sub_81CA324()) + return LT_PAUSE; + if (sub_81C8010()) + return LT_PAUSE; + sub_81C7AC0(0); + return LT_INC_AND_PAUSE; + case 3: + if (IsPaletteFadeActive()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static void sub_81C9FC4(void) +{ + s32 i; + + for (i = 0; i < NELEMS(gUnknown_086201C4); i++) + LoadCompressedSpriteSheet(&gUnknown_086201C4[i]); + Pokenav_AllocAndLoadPalettes(gUnknown_086201D4); +} + +static void sub_81C9FEC(void) +{ + FreeSpriteTilesByTag(3); + FreeSpriteTilesByTag(1); + FreeSpritePaletteByTag(4); + FreeSpritePaletteByTag(5); + FreeSpritePaletteByTag(6); + FreeSpritePaletteByTag(7); + FreeSpritePaletteByTag(8); + FreeSpritePaletteByTag(3); + sub_81CA094(); + sub_81CA698(); +} + +static void sub_81CA02C(void) +{ + s32 i, j; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + for (i = 0; i < 6; i++) + { + for (j = 0; j < 4; j++) + { + u8 spriteId = CreateSprite(&gUnknown_0862034C, 0x8c, 20 * i + 40, 3); + unk->iconSprites[i][j] = &gSprites[spriteId]; + gSprites[spriteId].pos2.x = 32 * j; + } + } +} + +static void sub_81CA094(void) +{ + s32 i, j; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + for (i = 0; i < 6; i++) + { + for (j = 0; j < 4; j++) + { + FreeSpriteOamMatrix(unk->iconSprites[i][j]); + DestroySprite(unk->iconSprites[i][j]); + } + } +} + +static void sub_81CA0C8(void) +{ + s32 r0 = sub_81C9894(); + sub_81CA0EC(gUnknown_08620240[r0].unk4, gUnknown_08620240[r0].unk0, gUnknown_08620240[r0].unk2); +} + +static void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) +{ + s32 i, j; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + s32 sp04 = GetSpriteTileStartByTag(3); + + for (i = 0; i < 6; i++) + { + if (*a0 != NULL) + { + for (j = 0; j < 4; j++) + { + unk->iconSprites[i][j]->oam.tileNum = (*a0)[0] + sp04 + 8 * j; + unk->iconSprites[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*a0)[1] + 4); + unk->iconSprites[i][j]->invisible = TRUE; + unk->iconSprites[i][j]->pos1.y = a1; + unk->iconSprites[i][j]->pos1.x = 0x8c; + unk->iconSprites[i][j]->pos2.x = 32 * j; + } + unk->iconVisible[i] = TRUE; + } + else + { + for (j = 0; j < 4; j++) + { + unk->iconSprites[i][j]->invisible = TRUE; + } + unk->iconVisible[i] = FALSE; + } + a0++; + a1 += a2; + } +} + +static void sub_81CA20C(void) +{ + s32 i; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + s32 r8 = sub_81C98A4(); + s32 r7 = 0; + s32 r2; + + for (i = 0; i < 6; i++) + { + if (unk->iconVisible[i]) + { + if (r7++ == r8) + { + r2 = 0x82; + unk->cursorPos = i; + } + else + r2 = 0x8c; + sub_81CA35C(unk->iconSprites[i], 0x100, r2, 0xC); + sub_81CA448(unk->iconSprites[i], FALSE); + } + else + sub_81CA448(unk->iconSprites[i], TRUE); + } +} + +static void sub_81CA278(void) +{ + s32 i; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + s32 r3 = sub_81C98A4(); + s32 r5; + + for (i = 0, r5 = 0; i < 6; i++) + { + if (unk->iconVisible[i]) + { + if (r5 == r3) + { + r5 = i; + break; + } + r5++; + } + } + + sub_81CA35C(unk->iconSprites[unk->cursorPos], 0x82, 0x8c, 0x4); + sub_81CA35C(unk->iconSprites[r5], 0x8c, 0x82, 0x4); + unk->cursorPos = r5; +} + +static void sub_81CA2DC(void) +{ + s32 i; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + for (i = 0; i < 6; i++) + { + if (unk->iconVisible[i]) + { + if (unk->cursorPos != i) + sub_81CA35C(unk->iconSprites[i], 0x8C, 0x100, 0x8); + else + sub_81CA3B4(unk->iconSprites[i]); + } + } +} + +static bool32 sub_81CA324(void) +{ + s32 i; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + for (i = 0; i < 6; i++) + { + if (unk->iconSprites[i][0]->callback != SpriteCallbackDummy) + return TRUE; + } + + if (unk->otherIconsInMotion) + return TRUE; + + return FALSE; +} + +static void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + (*sprites)->pos1.x = a1; + (*sprites)->data[0] = a3; + (*sprites)->data[1] = 16 * (a2 - a1) / a3; + (*sprites)->data[2] = 16 * a1; + (*sprites)->data[7] = a2; + (*sprites)->callback = sub_81CA474; + sprites++; + } +} + +static void sub_81CA3B4(struct Sprite ** sprites) +{ + s32 i; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + u8 taskId; + + for (i = 0; i < 4; i++) + { + (*sprites)->oam.objMode = ST_OAM_OBJ_BLEND; + (*sprites)->oam.affineMode = ST_OAM_AFFINE_DOUBLE; + (*sprites)->callback = sub_81CA4AC; + (*sprites)->data[0] = 8; + (*sprites)->data[1] = 0; + (*sprites)->data[7] = i; + InitSpriteAffineAnim(sprites[0]); + StartSpriteAffineAnim(sprites[0], 0); + sprites++; + } + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0x00)); + taskId = CreateTask(sub_81CA580, 3); + gTasks[taskId].data[0] = 8; + unk->otherIconsInMotion++; +} + +static void sub_81CA448(struct Sprite ** sprites, bool32 a1) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + (*sprites)->invisible = a1; + sprites++; + } +} + +static void sub_81CA474(struct Sprite * sprite) +{ + sprite->data[0]--; + if (sprite->data[0] != -1) + { + sprite->data[2] += sprite->data[1]; + sprite->pos1.x = sprite->data[2] >> 4; + } + else + { + sprite->pos1.x = sprite->data[7]; + sprite->callback = SpriteCallbackDummy; + } +} + +static void sub_81CA4AC(struct Sprite * sprite) +{ + s32 r0; + s32 r1; + if (sprite->data[0] == 0) + { + if (sprite->data[1] == 0) + { + StartSpriteAffineAnim(sprite, 1); + sprite->data[1]++; + sprite->data[2] = 0x100; + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.x = 0; + } + else + { + sprite->data[2] += 16; + r0 = sprite->data[2]; + r1 = r0 >> 3; + r1 = (r1 - 32) / 2; + switch (sprite->data[7]) + { + case 0: + sprite->pos2.x = -r1 * 3; + break; + case 1: + sprite->pos2.x = -r1; + break; + case 2: + sprite->pos2.x = r1; + break; + case 3: + sprite->pos2.x = r1 * 3; + break; + } + if (sprite->affineAnimEnded) + { + sprite->invisible = TRUE; + FreeOamMatrix(sprite->oam.matrixNum); + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, 0); + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + sprite->oam.objMode = ST_OAM_OBJ_NORMAL; + sprite->callback = SpriteCallbackDummy; + } + } + } + else + { + sprite->data[0]--; + } +} + +static void sub_81CA580(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (data[0] == 0) + { + switch (data[1]) + { + case 0: + data[2] = 16; + data[3] = 0; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_NONE | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0x00)); + data[1]++; + break; + case 1: + if (data[4] & 1) + { + data[2] -= 3; + if (data[2] < 0) + data[2] = 0; + } + else + { + data[3] += 3; + if (data[3] > 16) + data[3] = 16; + } + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(data[2], data[3])); + data[4]++; + if (data[4] == 12) + { + ((struct Pokenav2Struct *)GetSubstructPtr(2))->otherIconsInMotion--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x00, 0x10)); + DestroyTask(taskId); + } + break; + } + } + else + data[0]--; +} + +static void sub_81CA640(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + u8 spriteId = CreateSprite(&gUnknown_0862036C, 0x10, 0x60, 4); + ptr->field_028 = &gSprites[spriteId]; + if (sub_81C98D4()) + ptr->field_028->callback = sub_81CA6AC; + else + ptr->field_028->invisible = TRUE; +} + +static void sub_81CA698(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + DestroySprite(ptr->field_028); +} + +static void sub_81CA6AC(struct Sprite * sprite) +{ + sprite->data[0]++; + if (sprite->data[0] > 8) + { + sprite->data[0] = 0; + sprite->invisible ^= 1; + } +} + +static void sub_81CA6E0(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + + ptr->optionDescriptionWindowId = AddWindow(&gUnknown_086202CC); + PutWindowTilemap(ptr->optionDescriptionWindowId); + FillWindowPixelBuffer(ptr->optionDescriptionWindowId, PIXEL_FILL(6)); + CopyWindowToVram(ptr->optionDescriptionWindowId, 3); +} + +static void sub_81CA714(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + int i = sub_81C98B4(); + const u8 * s = gUnknown_086202D4[i]; + u32 width = GetStringWidth(1, s, -1); + FillWindowPixelBuffer(ptr->optionDescriptionWindowId, PIXEL_FILL(6)); + AddTextPrinterParameterized3(ptr->optionDescriptionWindowId, 1, (192 - width) / 2, 1, gUnknown_0862030C, 0, s); +} + + +static void sub_81CA770(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + const u8 * s = gText_NoRibbonWinners; + u32 width = GetStringWidth(1, s, -1); + FillWindowPixelBuffer(ptr->optionDescriptionWindowId, PIXEL_FILL(6)); + AddTextPrinterParameterized3(ptr->optionDescriptionWindowId, 1, (192 - width) / 2, 1, gUnknown_0862030F, 0, s); +} + +static bool32 sub_81CA7C4(void) +{ + return IsDma3ManagerBusyWithBgCopy(); +} + +static void sub_81CA7D4(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + ptr->bg3ScrollTaskId = CreateTask(sub_81CA808, 2); +} + +static void sub_81CA7F4(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + DestroyTask(ptr->bg3ScrollTaskId); +} + +static void sub_81CA808(u8 taskId) +{ + ChangeBgX(3, 0x80, 1); +} + +static void sub_81CA818(void) +{ + u8 taskId = CreateTask(sub_81CA8B0, 3); + SetWordTaskArg(taskId, 1, (uintptr_t)(gUnknown_0861FC78 + 1)); + SetWordTaskArg(taskId, 3, (uintptr_t)(gUnknown_0861FC78 + 7)); +} + +static void sub_81CA850(void) +{ + CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78 + 7, 0x31, 4); +} + +static void sub_81CA864(void) +{ + u8 taskId = CreateTask(sub_81CA8B0, 3); + SetWordTaskArg(taskId, 1, (uintptr_t)(gUnknown_0861FC78 + 7)); + SetWordTaskArg(taskId, 3, (uintptr_t)(gUnknown_0861FC78 + 1)); +} + +static bool32 sub_81CA89C(void) +{ + return FuncIsActiveTask(sub_81CA8B0); +} + +static void sub_81CA8B0(u8 taskId) +{ + u16 sp8[2]; + s16 * data = gTasks[taskId].data; + const u16 * pal1 = (const u16 *)GetWordTaskArg(taskId, 1); + const u16 * pal2 = (const u16 *)GetWordTaskArg(taskId, 3); + + sub_81C79BC(pal1, pal2, 2, 12, ++data[0], sp8); + LoadPalette(sp8, 0x31, 4); + if (data[0] == 12) + DestroyTask(taskId); +} + +static void sub_81CA914(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +static void sub_81CA92C(void) +{ + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuRegBits(REG_OFFSET_WININ, 0x3F); + SetGpuRegBits(REG_OFFSET_WINOUT, 0x1F); + SetGpuRegBits(REG_OFFSET_WIN0V, 0xA0); + ScanlineEffect_Stop(); + sub_81CAA3C(); + ScanlineEffect_SetParams(gUnknown_08620384); + SetVBlankCallback_(sub_81CA914); + CreateTask(sub_81CA9EC, 3); +} + +static void sub_81CA994(void) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + ScanlineEffect_Stop(); + DestroyTask(FindTaskIdByFunc(sub_81CA9EC)); + SetPokenavVBlankCallback(); +} + +static void sub_81CA9C8(void) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); +} + +static void sub_81CA9D8(void) +{ + sub_81CAA3C(); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN); +} + +static void sub_81CA9EC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + data[0]++; + if (data[0] > 0) + { + data[0] = 0; + data[1] += 3; + data[1] &= 0x7F; + SetGpuReg(REG_OFFSET_BLDY, gSineTable[data[1]] >> 5); + } +} + +static void sub_81CAA3C(void) +{ + int i = sub_81C9894(); + int j = sub_81C98A4(); + int r4 = gUnknown_08620240[i].unk2 * j + gUnknown_08620240[i].unk0 - 8; + CpuFill16(0, gScanlineEffectRegBuffers[0], 0x140); + CpuFill16(0, gScanlineEffectRegBuffers[1], 0x140); + CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[0][r4], 0x20); + CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[1][r4], 0x20); +} + +void sub_81CAADC(void) +{ + sub_81CA9C8(); +} diff --git a/src/pokenav_unk_3.c b/src/pokenav_unk_3.c index 404743345..c66434192 100755 --- a/src/pokenav_unk_3.c +++ b/src/pokenav_unk_3.c @@ -26,7 +26,7 @@ struct Pokenav3Struct u32 unk10; u32 unk14; u32 (*callback)(struct Pokenav3Struct*); - struct Pokenav3Struct_Unk1C unk1C[99]; + struct PokenavMonList unk1C[99]; }; static u32 sub_81CAB44(struct Pokenav3Struct *); @@ -34,14 +34,15 @@ static u32 sub_81CABFC(struct Pokenav3Struct *); static u32 sub_81CAC04(struct Pokenav3Struct *); static u32 sub_81CACB8(struct Pokenav3Struct *); static u32 sub_81CACF8(struct Pokenav3Struct *); -static u32 sub_81CAD20(int); +static u32 sub_81CAD20(s32); static bool32 sub_81CB1D0(void); -extern const u8 gUnknown_08622508[]; -extern const u8 gUnknown_0862250A[]; -extern const u8 *const gUnknown_08622028[][4]; +#include "data/text/match_call_messages.h" -bool32 sub_81CAAE8(void) +const u8 gUnknown_08622508[] = {0, 2}; +const u8 gUnknown_0862250A[] = {0, 1, 2}; + +bool32 PokenavCallback_Init_11(void) { struct Pokenav3Struct *state = AllocSubstruct(5, sizeof(struct Pokenav3Struct)); if (!state) @@ -83,7 +84,7 @@ static u32 sub_81CAB44(struct Pokenav3Struct *state) state->callback = sub_81CAC04; state->unk0 = 0; selectedMatchCall = GetSelectedMatchCall(); - if (!state->unk1C[selectedMatchCall].unk0 || sub_81D17E8(state->unk1C[selectedMatchCall].unk2)) + if (!state->unk1C[selectedMatchCall].boxId || MatchCall_HasCheckPage(state->unk1C[selectedMatchCall].unk6)) { state->unk4 = gUnknown_0862250A; state->unk2 = 2; @@ -190,7 +191,7 @@ static u32 sub_81CACF8(struct Pokenav3Struct *state) return 0; } -static u32 sub_81CAD20(int taskState) +static u32 sub_81CAD20(s32 taskState) { int i, j; struct Pokenav3Struct *state = GetSubstructPtr(5); @@ -205,13 +206,13 @@ static u32 sub_81CAD20(int taskState) { if (MatchCallFlagGetByIndex(j)) { - state->unk1C[state->unkA].unk2 = j; - state->unk1C[state->unkA].unk0 = 1; - state->unk1C[state->unkA].unk1 = sub_81D16DC(j); + state->unk1C[state->unkA].unk6 = j; + state->unk1C[state->unkA].boxId = 1; + state->unk1C[state->unkA].monId = MatchCallMapSecGetByIndex(j); 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; @@ -225,9 +226,9 @@ static u32 sub_81CAD20(int taskState) { if (!sub_81D1BF8(state->unk8) && sub_81CAE08(state->unk8)) { - state->unk1C[state->unkA].unk2 = state->unk8; - state->unk1C[state->unkA].unk0 = 0; - state->unk1C[state->unkA].unk1 = sub_81CB0C8(j); + state->unk1C[state->unkA].unk6 = state->unk8; + state->unk1C[state->unkA].boxId = 0; + state->unk1C[state->unkA].monId = sub_81CB0C8(j); state->unkA++; } @@ -283,10 +284,10 @@ int unref_sub_81CAE6C(int arg0) if (arg0 >= state->unkA) return REMATCH_TABLE_ENTRIES; - return state->unk1C[arg0].unk2; + return state->unk1C[arg0].unk6; } -struct Pokenav3Struct_Unk1C *sub_81CAE94(void) +struct PokenavMonList *sub_81CAE94(void) { struct Pokenav3Struct *state = GetSubstructPtr(5); return state->unk1C; @@ -295,16 +296,16 @@ struct Pokenav3Struct_Unk1C *sub_81CAE94(void) u16 sub_81CAEA4(int index) { struct Pokenav3Struct *state = GetSubstructPtr(5); - return state->unk1C[index].unk1; + return state->unk1C[index].monId; } bool32 sub_81CAEBC(int index) { struct Pokenav3Struct *state = GetSubstructPtr(5); - if (!state->unk1C[index].unk0) - index = state->unk1C[index].unk2; + if (!state->unk1C[index].boxId) + index = state->unk1C[index].unk6; else - index = MatchCall_GetRematchTableIdx(state->unk1C[index].unk2); + index = MatchCall_GetRematchTableIdx(state->unk1C[index].unk6); if (index == REMATCH_TABLE_ENTRIES) return FALSE; @@ -316,13 +317,13 @@ int sub_81CAF04(int index) { int var0; struct Pokenav3Struct *state = GetSubstructPtr(5); - if (!state->unk1C[index].unk0) + if (!state->unk1C[index].boxId) { - index = GetTrainerIdxByRematchIdx(state->unk1C[index].unk2); + index = GetTrainerIdxByRematchIdx(state->unk1C[index].unk6); return gTrainers[index].trainerPic; } - var0 = state->unk1C[index].unk2; + var0 = state->unk1C[index].unk6; index = MatchCall_GetRematchTableIdx(var0); if (index != REMATCH_TABLE_ENTRIES) { @@ -330,7 +331,7 @@ int sub_81CAF04(int index) return gTrainers[index].trainerPic; } - index = sub_81D1BD0(var0); + index = MatchCall_GetOverrideFacilityClass(var0); return gFacilityClassToPicIndex[index]; } @@ -341,10 +342,10 @@ const u8 *sub_81CAF78(int index, u8 *arg1) if (!Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType)) return gText_CallCantBeMadeHere; - if (!state->unk1C[index].unk0) - *arg1 = SelectMatchCallMessage(GetTrainerIdxByRematchIdx(state->unk1C[index].unk2), gStringVar4); + if (!state->unk1C[index].boxId) + *arg1 = SelectMatchCallMessage(GetTrainerIdxByRematchIdx(state->unk1C[index].unk6), gStringVar4); else - MatchCall_GetMessage(state->unk1C[index].unk2, gStringVar4); + MatchCall_GetMessage(state->unk1C[index].unk6, gStringVar4); return gStringVar4; } @@ -353,18 +354,18 @@ const u8 *sub_81CAFD8(int index, int textType) { int var0; struct Pokenav3Struct *state = GetSubstructPtr(5); - if (state->unk1C[index].unk0) + if (state->unk1C[index].boxId) { - var0 = MatchCall_GetRematchTableIdx(state->unk1C[index].unk2); + var0 = MatchCall_GetRematchTableIdx(state->unk1C[index].unk6); if (var0 == REMATCH_TABLE_ENTRIES) - return sub_81D1B40(state->unk1C[index].unk2, textType); + return MatchCall_GetOverrideFlavorText(state->unk1C[index].unk6, textType); } else { - var0 = state->unk1C[index].unk2; + var0 = state->unk1C[index].unk6; } - return gUnknown_08622028[var0][textType]; + return gMatchCallMessages[var0][textType]; } u16 sub_81CB01C(void) @@ -382,14 +383,13 @@ u16 sub_81CB02C(int arg0) return state->unk4[arg0]; } -void sub_81CB050(u32 arg0, u8 *str) +void sub_81CB050(struct PokenavMonList * arg0, u8 *str) { - struct Pokenav3Struct_Unk1C *var0 = (struct Pokenav3Struct_Unk1C *)arg0; const u8 *trainerName; const u8 *className; - if (!var0->unk0) + if (!arg0->boxId) { - int index = GetTrainerIdxByRematchIdx(var0->unk2); + int index = GetTrainerIdxByRematchIdx(arg0->unk6); const struct Trainer *trainer = &gTrainers[index]; int class = trainer->trainerClass; className = gTrainerClassNames[class]; @@ -397,7 +397,7 @@ void sub_81CB050(u32 arg0, u8 *str) } else { - sub_81D1A78(var0->unk2, &className, &trainerName); + sub_81D1A78(arg0->unk6, &className, &trainerName); } if (className && trainerName) @@ -424,9 +424,9 @@ int sub_81CB0E4(int index) int count = 1; while (++index < state->unkA) { - if (!state->unk1C[index].unk0) + if (!state->unk1C[index].boxId) return count; - if (sub_81D17E8(state->unk1C[index].unk2)) + if (MatchCall_HasCheckPage(state->unk1C[index].unk6)) return count; count++; @@ -441,9 +441,9 @@ int sub_81CB128(int index) int count = -1; while (--index >= 0) { - if (!state->unk1C[index].unk0) + if (!state->unk1C[index].boxId) return count; - if (sub_81D17E8(state->unk1C[index].unk2)) + 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)) { @@ -479,17 +479,17 @@ static bool32 sub_81CB1D0(void) { struct Pokenav3Struct *state = GetSubstructPtr(5); int index = GetSelectedMatchCall(); - if (!state->unk1C[index].unk0) + if (!state->unk1C[index].boxId) { if (sub_81CAEA4(index) == gMapHeader.regionMapSectionId) { - if (!gSaveBlock1Ptr->trainerRematches[state->unk1C[index].unk2]) + if (!gSaveBlock1Ptr->trainerRematches[state->unk1C[index].unk6]) return TRUE; } } else { - if (state->unk1C[index].unk2 == 11) + if (state->unk1C[index].unk6 == 11) { if (sub_81CAEA4(index) == gMapHeader.regionMapSectionId && FlagGet(FLAG_BADGE05_GET) == TRUE) diff --git a/src/pokenav_unk_4.c b/src/pokenav_unk_4.c index 6fa76daf2..0f05c6f5d 100755 --- a/src/pokenav_unk_4.c +++ b/src/pokenav_unk_4.c @@ -50,7 +50,7 @@ struct Pokenav4Struct }; static bool32 sub_81CB310(void); -static u32 sub_81CB324(int); +static u32 sub_81CB324(s32); static void sub_81CBBB8(void); static void sub_81CBC1C(void); static void sub_81CC2B4(void); @@ -93,27 +93,191 @@ static void sub_81CC330(struct Pokenav4Struct *); static struct Sprite *sub_81CC370(void); static void sub_81CC440(struct Sprite *sprite); static void sub_81CC4A4(struct Sprite *sprite); +void sub_81CC34C(struct Sprite *sprite); +u32 sub_81CB510(s32); +u32 sub_81CB588(s32); +u32 sub_81CB600(s32); +u32 sub_81CB678(s32); +u32 sub_81CB6F0(s32); +u32 sub_81CB734(s32); +u32 sub_81CB75C(s32); +u32 sub_81CB7A0(s32); +u32 sub_81CB824(s32); +u32 sub_81CB888(s32); +u32 sub_81CB93C(s32); +u32 sub_81CBAD4(s32); +u32 sub_81CB9C8(s32); +u32 sub_81CBA68(s32); +u32 sub_81CBB74(s32); -extern const LoopedTask gUnknown_08622798[]; -extern const struct BgTemplate gUnknown_0862278C[3]; -extern const u16 gUnknown_08622510[]; -extern const u32 gUnknown_08622530[]; -extern const u32 gUnknown_08622760[]; -extern const u16 gUnknown_08622700[]; -extern const u16 gUnknown_08622720[]; -extern const u8 gUnknown_086225D4[]; -extern const u16 gUnknown_086226E0[]; -extern const struct BgTemplate gUnknown_08622794; -extern const struct WindowTemplate gUnknown_086227D8; -extern const struct WindowTemplate gUnknown_086227E0; -extern const u8 *const gUnknown_086227E8[]; extern const struct WindowTemplate gUnknown_08622808; -extern const u8 gUnknown_086227F4[]; -extern const struct CompressedSpriteSheet gUnknown_08622810[1]; -extern const struct SpritePalette gUnknown_08622818[]; extern const struct SpriteTemplate gUnknown_08622830; extern const struct SpriteTemplate gUnknown_08622850; +const u16 gUnknown_08622510[] = INCBIN_U16("graphics/pokenav/ui_matchcall.gbapal"); +const u32 gUnknown_08622530[] = INCBIN_U32("graphics/pokenav/ui_matchcall.4bpp.lz"); +const u32 gUnknown_086225D4[] = INCBIN_U32("graphics/pokenav/ui_matchcall.bin.lz"); +const u16 gUnknown_08622698[] = INCBIN_U16("graphics/pokenav/arrow2.gbapal"); +const u32 gUnknown_086226B8[] = INCBIN_U32("graphics/pokenav/arrow2.4bpp.lz"); +const u16 gUnknown_086226E0[] = INCBIN_U16("graphics/pokenav/86226E0.gbapal"); +const u16 gUnknown_08622700[] = INCBIN_U16("graphics/pokenav/8622700.gbapal"); +const u16 gUnknown_08622720[] = INCBIN_U16("graphics/pokenav/pokeball_matchcall.gbapal"); +const u32 gUnknown_08622760[] = INCBIN_U32("graphics/pokenav/pokeball_matchcall.4bpp.lz"); + +const struct BgTemplate gUnknown_0862278C[3] = +{ + { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 0x06, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x80 + }, + { + .bg = 3, + .charBaseIndex = 1, + .mapBaseIndex = 0x07, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } +}; + +const LoopedTask gUnknown_08622798[] = +{ + NULL, + sub_81CB510, + sub_81CB588, + sub_81CB600, + sub_81CB678, + sub_81CB6F0, + sub_81CB734, + sub_81CB75C, + sub_81CB7A0, + sub_81CB824, + sub_81CB888, + sub_81CB93C, + sub_81CBAD4, + sub_81CB9C8, + sub_81CBA68, + sub_81CBB74 +}; + +const struct WindowTemplate gUnknown_086227D8 = +{ + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 5, + .width = 11, + .height = 2, + .paletteNum = 2, + .baseBlock = 16 +}; + +const struct WindowTemplate gUnknown_086227E0 = +{ + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 9, + .width = 11, + .height = 8, + .paletteNum = 2, + .baseBlock = 38 +}; + +const u8 *const gUnknown_086227E8[] = +{ + gUnknown_085EC017, + gUnknown_085EC01C, + gUnknown_085EC022 +}; + +const u8 gUnknown_086227F4[] = _("·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·\p"); + +const struct WindowTemplate gUnknown_08622808 = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 12, + .width = 0x1C, + .height = 0x04, + .paletteNum = 1, + .baseBlock = 10 +}; + +const struct CompressedSpriteSheet gUnknown_08622810[1] = +{ + {gUnknown_086226B8, 0x40, 7} +}; + +const struct SpritePalette gUnknown_08622818[] = +{ + {gUnknown_08622698, 12}, + {} +}; + +const struct OamData gUnknown_08622828 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +const struct SpriteTemplate gUnknown_08622830 = +{ + .tileTag = 7, + .paletteTag = 12, + .oam = &gUnknown_08622828, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81CC34C, +}; + +const struct OamData gUnknown_08622848 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +const struct SpriteTemplate gUnknown_08622850 = +{ + .tileTag = 8, + .paletteTag = 13, + .oam = &gUnknown_08622848, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + bool32 sub_81CB260(void) { struct Pokenav4Struct *state = AllocSubstruct(6, sizeof(struct Pokenav4Struct)); @@ -126,7 +290,7 @@ bool32 sub_81CB260(void) return TRUE; } -void sub_81CB29C(int index) +void sub_81CB29C(s32 index) { struct Pokenav4Struct *state = GetSubstructPtr(6); state->unk4 = CreateLoopedTask(gUnknown_08622798[index], 1); @@ -156,7 +320,7 @@ static bool32 sub_81CB310(void) return IsLoopedTaskActive(state->unk4); } -static u32 sub_81CB324(int taskState) +static u32 sub_81CB324(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -229,7 +393,7 @@ static u32 sub_81CB324(int taskState) } } -u32 sub_81CB510(int taskState) +u32 sub_81CB510(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -266,7 +430,7 @@ u32 sub_81CB510(int taskState) return 4; } -u32 sub_81CB588(int taskState) +u32 sub_81CB588(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -303,7 +467,7 @@ u32 sub_81CB588(int taskState) return 4; } -u32 sub_81CB600(int taskState) +u32 sub_81CB600(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -340,7 +504,7 @@ u32 sub_81CB600(int taskState) return 4; } -u32 sub_81CB678(int taskState) +u32 sub_81CB678(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -377,7 +541,7 @@ u32 sub_81CB678(int taskState) return 4; } -u32 sub_81CB6F0(int taskState) +u32 sub_81CB6F0(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -396,7 +560,7 @@ u32 sub_81CB6F0(int taskState) return 4; } -u32 sub_81CB734(int taskState) +u32 sub_81CB734(s32 taskState) { struct Pokenav4Struct *state; u16 var0; @@ -408,7 +572,7 @@ u32 sub_81CB734(int taskState) return 4; } -u32 sub_81CB75C(int taskState) +u32 sub_81CB75C(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -427,7 +591,7 @@ u32 sub_81CB75C(int taskState) return 4; } -u32 sub_81CB7A0(int taskState) +u32 sub_81CB7A0(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -459,7 +623,7 @@ u32 sub_81CB7A0(int taskState) return 4; } -u32 sub_81CB824(int taskState) +u32 sub_81CB824(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -485,7 +649,7 @@ u32 sub_81CB824(int taskState) return 4; } -u32 sub_81CB888(int taskState) +u32 sub_81CB888(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); u32 result = 0; @@ -549,7 +713,7 @@ u32 sub_81CB888(int taskState) return result; } -u32 sub_81CB93C(int taskState) +u32 sub_81CB93C(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -578,7 +742,7 @@ u32 sub_81CB93C(int taskState) return 4; } -u32 sub_81CB9C8(int taskState) +u32 sub_81CB9C8(s32 taskState) { int index; int var0; @@ -617,7 +781,7 @@ u32 sub_81CB9C8(int taskState) return 4; } -u32 sub_81CBA68(int taskState) +u32 sub_81CBA68(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -643,7 +807,7 @@ u32 sub_81CBA68(int taskState) return 4; } -u32 sub_81CBAD4(int taskState) +u32 sub_81CBAD4(s32 taskState) { int index; int var0; @@ -682,7 +846,7 @@ u32 sub_81CBAD4(int taskState) return 4; } -u32 sub_81CBB74(int taskState) +u32 sub_81CBB74(s32 taskState) { switch (taskState) { @@ -706,7 +870,7 @@ u32 sub_81CBB74(int taskState) static void sub_81CBBB8(void) { struct MatchCallListTemplate template; - template.unk0 = (u32)sub_81CAE94(); + template.unk0 = sub_81CAE94(); template.unk4 = sub_81CAE38(); template.unk8 = 4; template.unk6 = 0; @@ -718,7 +882,7 @@ static void sub_81CBBB8(void) template.unkE = 7; template.unk10 = sub_81CB050; template.unk14 = sub_81CBCEC; - sub_81C81D4(&gUnknown_08622794, &template, 2); + sub_81C81D4(&gUnknown_0862278C[2], &template, 2); CreateTask(sub_81CBC64, 7); } diff --git a/src/pokenav_unk_5.c b/src/pokenav_unk_5.c index eccc200d5..03ac05d4d 100755 --- a/src/pokenav_unk_5.c +++ b/src/pokenav_unk_5.c @@ -32,18 +32,18 @@ struct Pokenav5Struct_2 u8 cityZoomPics[22][0xC8]; }; -struct CityZoomPic +struct CityMapEntry { u16 mapSecId; - u16 unk2; - const u32 *data; + u16 index; + const u32 *tilemap; }; static u32 sub_81CC568(struct Pokenav5Struct *); static u32 sub_81CC5B4(struct Pokenav5Struct *); static u32 sub_81CC5DC(struct Pokenav5Struct *); -static u32 sub_81CC6F4(int); -static u32 sub_81CCD34(int); +static u32 sub_81CC6F4(s32); +static u32 sub_81CCD34(s32); static bool32 sub_81CC6BC(void); static void sub_81CC9EC(void); static void sub_81CC9C0(void); @@ -61,19 +61,112 @@ static void sub_81CCDE8(struct Pokenav5Struct_2 *, int, int); static void sub_81CCFA4(int); static void sub_81CCC9C(u8 taskId); static void sub_81CCF78(void); +void sub_81CCEF4(struct Sprite *sprite); +u32 sub_81CC848(s32); +u32 sub_81CC878(s32); +u32 sub_81CC8D8(s32); +u32 sub_81CC95C(s32); -extern const LoopedTask gUnknown_086230E4[]; -extern const struct BgTemplate gUnknown_086230D8[2]; -extern const struct CompressedSpriteSheet gUnknown_086230F8[1]; -extern const struct SpritePalette gUnknown_08623100[]; -extern const struct WindowTemplate gUnknown_08623110; -extern const u32 gUnknown_08622888[]; -extern const u16 gUnknown_08622868[]; extern const u16 gHoennMapZoomIcons_Pal[]; -extern const struct CityZoomPic gUnknown_08623118[22]; extern const struct SpriteTemplate gUnknown_086231D0; +extern const u32 gHoennMapZoomIcons_Gfx[]; -u32 sub_81CC4D4(void) +const u16 gUnknown_08622868[] = INCBIN_U16("graphics/pokenav/8622868.gbapal"); +const u32 gUnknown_08622888[] = INCBIN_U32("graphics/pokenav/zoom_tiles.4bpp.lz"); + +#include "data/region_map/city_map_tilemaps.h" + + +const struct BgTemplate gUnknown_086230D8[3] = +{ + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 0x06, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 0x00, + .screenSize = 2, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, +}; + +const LoopedTask gUnknown_086230E4[] = +{ + NULL, + sub_81CC848, + sub_81CC878, + sub_81CC8D8, + sub_81CC95C +}; + +const struct CompressedSpriteSheet gUnknown_086230F8[1] = +{ + {gHoennMapZoomIcons_Gfx, 0x800, 6} +}; + +const struct SpritePalette gUnknown_08623100[] = +{ + {gHoennMapZoomIcons_Pal, 11}, + {} +}; + +const struct WindowTemplate gUnknown_08623110 = +{ + .bg = 1, + .tilemapLeft = 17, + .tilemapTop = 4, + .width = 12, + .height = 13, + .paletteNum = 1, + .baseBlock = 0x4C +}; + +#include "data/region_map/city_map_entries.h" + +const struct OamData gUnknown_086231C8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +const struct SpriteTemplate gUnknown_086231D0 = +{ + .tileTag = 6, + .paletteTag = 11, + .oam = &gUnknown_086231C8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81CCEF4, +}; + +u32 PokenavCallback_Init_6(void) { struct Pokenav5Struct *state = AllocSubstruct(3, sizeof(struct Pokenav5Struct)); if (!state) @@ -101,7 +194,7 @@ void sub_81CC524(void) u32 sub_81CC554(void) { struct Pokenav5Struct *state = GetSubstructPtr(3); - state->unk10(state); + return state->unk10(state); } static u32 sub_81CC568(struct Pokenav5Struct *state) @@ -155,7 +248,7 @@ bool32 sub_81CC5F4(void) return TRUE; } -void sub_81CC62C(int index) +void sub_81CC62C(s32 index) { struct Pokenav5Struct_2 *state = GetSubstructPtr(4); state->unk4 = CreateLoopedTask(gUnknown_086230E4[index], 1); @@ -202,7 +295,7 @@ static bool8 sub_81CC6D0(void) return gSaveBlock2Ptr->regionMapZoom == 1; } -static u32 sub_81CC6F4(int taskState) +static u32 sub_81CC6F4(s32 taskState) { int var0; struct RegionMap *regionMap; @@ -215,7 +308,7 @@ static u32 sub_81CC6F4(int taskState) HideBg(2); HideBg(3); SetBgMode(1); - InitBgTemplates(gUnknown_086230D8, ARRAY_COUNT(gUnknown_086230D8)); + InitBgTemplates(gUnknown_086230D8, ARRAY_COUNT(gUnknown_086230D8) - 1); regionMap = GetSubstructPtr(16); sub_8122CF8(regionMap, &gUnknown_086230D8[1], sub_81CC6D0()); sub_81CC9C0(); @@ -278,7 +371,7 @@ static u32 sub_81CC6F4(int taskState) } } -u32 sub_81CC848(int taskState) +u32 sub_81CC848(s32 taskState) { struct Pokenav5Struct_2 *state = GetSubstructPtr(4); switch (taskState) @@ -295,7 +388,7 @@ u32 sub_81CC848(int taskState) return 4; } -u32 sub_81CC878(int taskState) +u32 sub_81CC878(s32 taskState) { switch (taskState) { @@ -321,7 +414,7 @@ u32 sub_81CC878(int taskState) return 4; } -u32 sub_81CC8D8(int taskState) +u32 sub_81CC8D8(s32 taskState) { struct Pokenav5Struct_2 *state = GetSubstructPtr(4); switch (taskState) @@ -354,7 +447,7 @@ u32 sub_81CC8D8(int taskState) return 4; } -u32 sub_81CC95C(int taskState) +u32 sub_81CC95C(s32 taskState) { switch (taskState) { @@ -518,12 +611,12 @@ static bool32 sub_81CCD24(void) return FuncIsActiveLoopedTask(sub_81CCD34); } -static u32 sub_81CCD34(int taskState) +static u32 sub_81CCD34(s32 taskState) { struct Pokenav5Struct_2 *state = GetSubstructPtr(4); - if (taskState < (int)ARRAY_COUNT(gUnknown_08623118)) + if (taskState < (int)ARRAY_COUNT(gPokenavCityMaps)) { - LZ77UnCompWram(gUnknown_08623118[taskState].data, state->cityZoomPics[taskState]); + LZ77UnCompWram(gPokenavCityMaps[taskState].tilemap, state->cityZoomPics[taskState]); return 1; } @@ -533,10 +626,10 @@ static u32 sub_81CCD34(int taskState) static void sub_81CCD70(struct Pokenav5Struct_2 *state, int mapSecId, int pos) { int i; - for (i = 0; i < (int)ARRAY_COUNT(gUnknown_08623118) && (gUnknown_08623118[i].mapSecId != mapSecId || gUnknown_08623118[i].unk2 != pos); i++) + for (i = 0; i < (int)ARRAY_COUNT(gPokenavCityMaps) && (gPokenavCityMaps[i].mapSecId != mapSecId || gPokenavCityMaps[i].index != pos); i++) ; - if (i == ARRAY_COUNT(gUnknown_08623118)) + if (i == ARRAY_COUNT(gPokenavCityMaps)) return; FillBgTilemapBufferRect_Palette0(1, 0x1041, 17, 6, 12, 11); diff --git a/src/pokenav_unk_6.c b/src/pokenav_unk_6.c new file mode 100644 index 000000000..ac8237793 --- /dev/null +++ b/src/pokenav_unk_6.c @@ -0,0 +1,625 @@ +#include "global.h" +#include "data.h" +#include "decompress.h" +#include "main.h" +#include "menu_specialized.h" +#include "mon_markings.h" +#include "pokenav.h" +#include "pokemon.h" +#include "pokemon_storage_system.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "constants/songs.h" +#include "constants/species.h" + +struct PokenavSub11 +{ + u32 monPal[3][0x20]; + u8 fill[0x180]; + u32 monPicGfx[3][0x800]; + u8 unk6300; + s16 unk6302; + u32 (*unk6304)(struct PokenavSub11 *); + u8 fill2[0x6320 - 0x6308]; + u8 unk6320[3][24]; + u8 unk6368[3][64]; + struct UnknownStruct_81D1ED4 unk6428; + u8 unk6780[3]; + u8 unk6783[3]; + s8 unk6786; + s8 unk6787; + s8 unk6788; + s8 unk6789; + u8 unk678A; +}; + +void sub_81CD970(void); +void sub_81CD9F8(void); +u32 sub_81CD08C(struct PokenavSub11 *structPtr); +u32 sub_81CD19C(struct PokenavSub11 *structPtr); +u32 sub_81CD110(struct PokenavSub11 *structPtr); +u8 sub_81CD1E4(struct PokenavSub11 *structPtr); +u8 sub_81CD258(u8 arg0); +void sub_81CD824(s16 arg0, u8 arg1); +void sub_81CDA1C(s16 arg0, u8 arg1); +void sub_81CDB98(s16 arg0, u8 arg1); + +// code +bool32 PokenavCallback_Init_7(void) +{ + struct PokenavSub11 *structPtr = AllocSubstruct(11, sizeof(struct PokenavSub11)); + + if (structPtr == NULL) + return FALSE; + + sub_81D1ED4(&structPtr->unk6428); + sub_81CD970(); + gKeyRepeatStartDelay = 20; + structPtr->unk6304 = sub_81CD08C; + return TRUE; +} + +bool32 PokenavCallback_Init_9(void) +{ + struct PokenavSub11 *structPtr = AllocSubstruct(11, sizeof(struct PokenavSub11)); + + if (structPtr == NULL) + return FALSE; + + sub_81D1ED4(&structPtr->unk6428); + sub_81CD9F8(); + gKeyRepeatStartDelay = 20; + structPtr->unk6304 = sub_81CD08C; + return TRUE; +} + +u32 sub_81CD070(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + + return structPtr->unk6304(structPtr); +} + +u32 sub_81CD08C(struct PokenavSub11 *structPtr) +{ + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + u32 ret = sub_81CD1E4(structPtr); + + if (ret == 0) + { + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + structPtr->unk6304 = sub_81CD19C; + ret = 2; + } + else if (gMain.newKeys & A_BUTTON) + { + if (structPtr->unk6300 == 0) + { + if (unkPtr->unk2 == unkPtr->unk0 - 1) + { + PlaySE(SE_SELECT); + structPtr->unk6304 = sub_81CD19C; + ret = 2; + } + } + else + { + PlaySE(SE_SELECT); + ret = 5; + structPtr->unk6304 = sub_81CD110; + } + } + } + + return ret; +} + +u32 sub_81CD110(struct PokenavSub11 *structPtr) +{ + struct PokenavSub18 *unkPtr; + u8 markings; + u32 ret = 0, boxId, monId; + + if (!sub_811FBA4()) + { + structPtr->unk6783[structPtr->unk6786] = sub_81CEF14(); + unkPtr = GetSubstructPtr(18); + boxId = unkPtr->unk4[unkPtr->unk2].boxId; + monId = unkPtr->unk4[unkPtr->unk2].monId; + markings = structPtr->unk6783[structPtr->unk6786]; + + if (boxId == TOTAL_BOXES_COUNT) + SetMonData(&gPlayerParty[monId], MON_DATA_MARKINGS, &markings); + else + SetBoxMonDataAt(boxId, monId, MON_DATA_MARKINGS, &markings); + + structPtr->unk6304 = sub_81CD08C; + ret = 6; + } + + return ret; +} + +u32 sub_81CD19C(struct PokenavSub11 *structPtr) +{ + if (structPtr->unk6300 == 0) + return 100002; + else + return 100010; +} + +void sub_81CD1C0(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + if (structPtr->unk6300 == 0) + FreePokenavSubstruct(18); + + FreePokenavSubstruct(11); +} + +u8 sub_81CD1E4(struct PokenavSub11 *structPtr) +{ + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + u8 ret = 0; + + if (gMain.heldKeys & DPAD_UP) + { + if (structPtr->unk6300 == 0 || unkPtr->unk2 != 0) + { + PlaySE(SE_SELECT); + ret = sub_81CD258(1); + } + } + else if (gMain.heldKeys & DPAD_DOWN) + { + if (structPtr->unk6300 == 0 || unkPtr->unk2 < unkPtr->unk0 - 1) + { + PlaySE(SE_SELECT); + ret = sub_81CD258(0); + } + } + + return ret; +} + +u8 sub_81CD258(u8 arg0) +{ + u16 r7; + bool8 r6, r0; + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + + r7 = (arg0) ? structPtr->unk6788 : structPtr->unk6787; + sub_81D1F84(&structPtr->unk6428, structPtr->unk6428.unk14[structPtr->unk6786], structPtr->unk6428.unk14[r7]); + r6 = (unkPtr->unk2 != ((sub_81CDD5C() != 0) ? unkPtr->unk0 : unkPtr->unk0 - 1)); + if (arg0) + { + structPtr->unk6788 = structPtr->unk6787; + structPtr->unk6787 = structPtr->unk6786; + structPtr->unk6786 = r7; + structPtr->unk6789 = structPtr->unk6788; + + unkPtr->unk2 = (unkPtr->unk2 == 0) ? unkPtr->unk0 - 1 : unkPtr->unk2 - 1; + structPtr->unk6302 = (unkPtr->unk2 != 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1; + } + else + { + structPtr->unk6787 = structPtr->unk6788; + structPtr->unk6788 = structPtr->unk6786; + structPtr->unk6786 = r7; + structPtr->unk6789 = structPtr->unk6787; + + unkPtr->unk2 = (unkPtr->unk2 < unkPtr->unk0 - 1) ? unkPtr->unk2 + 1 : 0; + structPtr->unk6302 = (unkPtr->unk2 < unkPtr->unk0 - 1) ? unkPtr->unk2 + 1 : 0; + } + + r0 = (unkPtr->unk2 != ((sub_81CDD5C() != 0) ? unkPtr->unk0 : unkPtr->unk0 - 1)); + + if (!r6) + return 3; + else if (!r0) + return 4; + else + return 1; +} + +bool32 sub_81CD3C4(void) +{ + s32 var; + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + + switch (structPtr->unk678A) + { + case 0: + sub_81CD824(unkPtr->unk2, 0); + break; + case 1: + sub_81CDA1C(unkPtr->unk2, 0); + break; + case 2: + sub_81CDB98(unkPtr->unk2, 0); + break; + case 3: + if (unkPtr->unk0 == 1) + { + structPtr->unk6786 = 0; + structPtr->unk6787 = 0; + structPtr->unk6788 = 0; + structPtr->unk678A = 0; + return TRUE; + } + else + { + structPtr->unk6786 = 0; + structPtr->unk6787 = 1; + structPtr->unk6788 = 2; + } + break; + // These were probably ternaries just like cases 7-9, but couldn't match it any other way. + case 4: + var = unkPtr->unk2 + 1; + if (var >= unkPtr->unk0) + var = 0; + sub_81CD824(var, 1); + break; + case 5: + var = unkPtr->unk2 + 1; + if (var >= unkPtr->unk0) + var = 0; + sub_81CDA1C(var, 1); + break; + case 6: + var = unkPtr->unk2 + 1; + if (var >= unkPtr->unk0) + var = 0; + sub_81CDB98(var, 1); + break; + case 7: + sub_81CD824((unkPtr->unk2 - 1 >= 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1, 2); + break; + case 8: + sub_81CDA1C((unkPtr->unk2 - 1 >= 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1, 2); + break; + case 9: + sub_81CDB98((unkPtr->unk2 - 1 >= 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1, 2); + structPtr->unk678A = 0; + return TRUE; + } + + structPtr->unk678A++; + return FALSE; +} + +bool32 sub_81CD548(u8 arg0) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + + switch (arg0) + { + case 0: + sub_81CD824(structPtr->unk6302, structPtr->unk6789); + break; + case 1: + sub_81CDA1C(structPtr->unk6302, structPtr->unk6789); + break; + case 2: + sub_81CDB98(structPtr->unk6302, structPtr->unk6789); + return TRUE; + } + + return FALSE; +} + +u8 *sub_81CD5CC(u8 *dst, const u8 *src, s16 n) +{ + while (*src != EOS) + *dst++ = *src++, n--; + + while (n-- > 0) + *dst++ = CHAR_SPACE; + + *dst = EOS; + return dst; +} + +u8 *sub_81CD624(u8 *str, u16 id, bool8 arg3) +{ + u16 boxId, monId, gender, species, level, lvlDigits; + struct BoxPokemon *boxMon; + u8 *txtPtr, *str_; + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + + boxId = unkPtr->unk4[id].boxId; + monId = unkPtr->unk4[id].monId; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = 4; + *(str++) = 8; + *(str++) = 0; + *(str++) = 9; + + if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) + return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, 12); + + GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, str); + StringGetEnd10(str); + species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL); + if (boxId == TOTAL_BOXES_COUNT) + { + level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + gender = GetMonGender(&gPlayerParty[monId]); + } + else + { + boxMon = GetBoxedMonPtr(boxId, monId); + gender = GetBoxMonGender(boxMon); + level = GetLevelFromBoxMonExp(boxMon); + } + + if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(str, gSpeciesNames[species])) + gender = MON_GENDERLESS; + + str_ = str; // For some reason, a variable is needed to match. + while (*str_ != EOS) + (str_++); + + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = 0x12; + *(str_++) = 0x3C; + switch (gender) + { + default: + *(str_++) = 0x77; + break; + case MON_MALE: + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_COLOR; + *(str_++) = 4; + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = 3; + *(str_++) = 5; + *(str_++) = CHAR_MALE; + break; + case MON_FEMALE: + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_COLOR; + *(str_++) = 6; + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = 3; + *(str_++) = 7; + *(str_++) = CHAR_FEMALE; + break; + } + + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = 4; + *(str_++) = 8; + *(str_++) = 0; + *(str_++) = 9; + *(str_++) = CHAR_SLASH; + *(str_++) = CHAR_SPECIAL_F9; + *(str_++) = 5; + txtPtr = str_; + str_ = ConvertIntToDecimalStringN(str_, level, STR_CONV_MODE_LEFT_ALIGN, 3); + lvlDigits = str_ - txtPtr; + *(str_++) = CHAR_SPACE; + if (!arg3) + { + lvlDigits = 3 - lvlDigits; + while (lvlDigits-- != 0) + *(str_++) = CHAR_SPACE; + } + + *str_ = EOS; + return str_; +} + +void sub_81CD824(s16 arg0, u8 arg1) +{ + u16 boxId, i; + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + + if (arg0 != (sub_81CDD5C() != 0 ? unkPtr->unk0 : unkPtr->unk0 - 1)) + { + sub_81CD624(structPtr->unk6368[arg1], arg0, FALSE); + boxId = unkPtr->unk4[arg0].boxId; + structPtr->unk6320[arg1][0] = EXT_CTRL_CODE_BEGIN; + structPtr->unk6320[arg1][1] = 4; + structPtr->unk6320[arg1][2] = 8; + structPtr->unk6320[arg1][3] = 0; + structPtr->unk6320[arg1][4] = 9; + if (boxId == TOTAL_BOXES_COUNT) + sub_81CD5CC(&structPtr->unk6320[arg1][5], gText_InParty, 8); + else + sub_81CD5CC(&structPtr->unk6320[arg1][5], GetBoxNamePtr(boxId), 8); + } + else + { + for (i = 0; i < 12; i++) + structPtr->unk6368[arg1][i] = CHAR_SPACE; + structPtr->unk6368[arg1][i] = EOS; + + for (i = 0; i < 8; i++) + structPtr->unk6320[arg1][i] = CHAR_SPACE; + structPtr->unk6320[arg1][i] = EOS; + } +} + +void sub_81CD970(void) +{ + u16 i, count; + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub18 *unkPtr = AllocSubstruct(18, sizeof(struct PokenavSub18)); + + structPtr->unk6300 = 0; + for (i = 0, count = 0; i < CalculatePlayerPartyCount(); i++) + { + if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + { + unkPtr->unk4[count].boxId = TOTAL_BOXES_COUNT; + unkPtr->unk4[count].monId = i; + unkPtr->unk4[count].unk6 = 0; + count++; + } + } + + unkPtr->unk4[count].boxId = 0; + unkPtr->unk4[count].monId = 0; + unkPtr->unk4[count].unk6 = 0; + unkPtr->unk2 = 0; + unkPtr->unk0 = count + 1; + structPtr->unk678A = 0; +} + +void sub_81CD9F8(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + structPtr->unk6300 = 1; + structPtr->unk678A = 0; +} + +void sub_81CDA1C(s16 arg0, u8 arg1) +{ + u16 boxId, monId, i; + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + + if (arg0 != (sub_81CDD5C() != 0 ? unkPtr->unk0 : unkPtr->unk0 - 1)) + { + boxId = unkPtr->unk4[arg0].boxId; + monId = unkPtr->unk4[arg0].monId; + structPtr->unk6428.unk0[arg1][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + structPtr->unk6428.unk0[arg1][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + structPtr->unk6428.unk0[arg1][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + structPtr->unk6428.unk0[arg1][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + structPtr->unk6428.unk0[arg1][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + structPtr->unk6780[arg1] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 255) + ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u + : 9; + structPtr->unk6783[arg1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_MARKINGS, NULL); + sub_81D2754(structPtr->unk6428.unk0[arg1], structPtr->unk6428.unk14[arg1]); + } + else + { + for (i = 0; i < 5; i++) + { + structPtr->unk6428.unk0[arg1][i] = 0; + structPtr->unk6428.unk14[arg1][i].unk0 = 155; + structPtr->unk6428.unk14[arg1][i].unk2 = 91; + } + } +} + +void sub_81CDB98(s16 arg0, u8 arg1) +{ + u16 boxId, monId, species; + u32 personality, tid; + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + + if (arg0 == (sub_81CDD5C() != 0 ? unkPtr->unk0 : unkPtr->unk0 - 1)) + return; + + boxId = unkPtr->unk4[arg0].boxId; + monId = unkPtr->unk4[arg0].monId; + species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); + tid = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); + personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); + LoadSpecialPokePic(&gMonFrontPicTable[species], structPtr->monPicGfx[arg1], species, personality, TRUE); + LZ77UnCompWram(GetMonSpritePalFromSpeciesAndPersonality(species, tid, personality), structPtr->monPal[arg1]); +} + +u16 sub_81CDC50(void) +{ + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + return unkPtr->unk0; +} + +u16 sub_81CDC60(void) +{ + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + return unkPtr->unk2; +} + +struct UnknownStruct_81D1ED4 *sub_81CDC70(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return &structPtr->unk6428; +} + +u8 sub_81CDC84(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->unk6786; +} + +u8 sub_81CDC9C(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->unk6302; +} + +void *sub_81CDCB4(u8 id) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->monPicGfx[id]; +} + +void *sub_81CDCD4(u8 id) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->monPal[id]; +} + +u8 sub_81CDCEC(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->unk6789; +} + +u8 *sub_81CDD04(u8 id) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->unk6368[id]; +} + +u8 *sub_81CDD24(u8 id) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->unk6320[id]; +} + +u16 sub_81CDD48(void) +{ + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + return unkPtr->unk4[unkPtr->unk2].unk6; +} + +bool32 sub_81CDD5C(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + if (structPtr->unk6300 == 1) + return TRUE; + else + return FALSE; +} + +u8 sub_81CDD7C(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + if (structPtr->unk6300 == 1) + return structPtr->unk6783[structPtr->unk6786]; + else + return 0; +} + +u8 sub_81CDDB0(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->unk6780[structPtr->unk6786]; +} diff --git a/src/pokenav_unk_7.c b/src/pokenav_unk_7.c new file mode 100644 index 000000000..34432a077 --- /dev/null +++ b/src/pokenav_unk_7.c @@ -0,0 +1,884 @@ +#include "global.h" +#include "bg.h" +#include "window.h" +#include "pokenav.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "menu.h" +#include "menu_specialized.h" +#include "mon_markings.h" +#include "palette.h" +#include "pokenav.h" +#include "scanline_effect.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" + +u32 sub_81CE37C(s32); +u32 sub_81CE2D0(s32); +u32 sub_81CE4D8(s32); +u32 sub_81CE5E4(s32); +u32 sub_81CE6BC(s32); +u32 sub_81CE700(s32); + +BSS_DATA u8 gUnknown_030012BC; + +const u16 gUnknown_086231E8[] = INCBIN_U16("graphics/pokenav/86231E8.gbapal"); +const u16 gUnknown_08623208[] = INCBIN_U16("graphics/pokenav/8623208.gbapal"); +const u32 gUnknown_08623228[] = INCBIN_U32("graphics/pokenav/8623228.4bpp.lz"); +const u32 gUnknown_0862323C[] = INCBIN_U32("graphics/pokenav/862323C.bin.lz"); +const u16 gUnknown_08623338[] = INCBIN_U16("graphics/pokenav/8623338.gbapal"); + +const struct BgTemplate gUnknown_08623358[3] = +{ + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 3, + .mapBaseIndex = 0x1D, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 2, + .mapBaseIndex = 0x1E, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } +}; + +const struct WindowTemplate gUnknown_08623364 = +{ + .bg = 1, + .tilemapLeft = 13, + .tilemapTop = 1, + .width = 13, + .height = 4, + .paletteNum = 15, + .baseBlock = 2 +}; + +const struct WindowTemplate gUnknown_0862336C = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 6, + .width = 7, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x36 +}; + +const struct WindowTemplate gUnknown_08623374 = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 0x1C, + .width = 5, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x44 +}; + +const struct WindowTemplate gUnknown_0862337C = +{ + .bg = 1, + .tilemapLeft = 13, + .tilemapTop = 0x1C, + .width = 3, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x44 +}; + +const LoopedTask gUnknown_08623384[] = +{ + NULL, + sub_81CE37C, + sub_81CE2D0, + sub_81CE4D8, + sub_81CE5E4, + sub_81CE6BC, + sub_81CE700 +}; + +struct Pokenav7Struct +{ + u32 loopedTaskId; + u8 tilemapBuffers[3][BG_SCREEN_SIZE]; + u8 filler[2]; + u8 unk1806[10]; + u32 (*unk1810)(void); + s16 unk1814; + u8 unk1816; + u16 unk1818; + u16 unk181A; + void *unk181C; + u8 unk1820; + u8 unk1821; + u8 unk1822; + u8 unk1823; + struct PokemonMarkMenu monMarks; + struct Sprite *unk28dc; + struct Sprite *unk28e0[10]; + u8 unk2908; + u8 filler2[0x38ac - 0x2909]; +}; + +extern s8 sub_81CDC84(void); // This function's declaration here is different than its definition in pokenav_unk_6. u8/s8 + +u32 sub_81CDE94(s32 state); +u32 sub_81CDE80(void); +void sub_81CED30(u8 var); +void sub_81CE9E4(void); +void sub_81CE934(void); +bool32 sub_81CE754(u8 a0, u16 a1, bool8 a2); +void sub_81CEE44(void); +void sub_81CEE90(void); +void sub_81CEEC8(void); +void sub_81CEE68(void); +void sub_81CEE74(bool8 showBg); + +// code +bool32 sub_81CDDD4(void) +{ + struct Pokenav7Struct *structPtr = AllocSubstruct(0xC, sizeof(struct Pokenav7Struct)); + + if (structPtr == NULL) + return FALSE; + + structPtr->unk1816 = 0xFF; + structPtr->loopedTaskId = CreateLoopedTask(sub_81CDE94, 1); + structPtr->unk1810 = sub_81CDE80; + structPtr->unk2908 = 0; + return TRUE; +} + +void sub_81CDE2C(s32 id) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + structPtr->loopedTaskId = CreateLoopedTask(gUnknown_08623384[id], 1); + structPtr->unk1810 = sub_81CDE80; +} + +u32 sub_81CDE64(void) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + return structPtr->unk1810(); +} + +u32 sub_81CDE80(void) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + return IsLoopedTaskActive(structPtr->loopedTaskId); +} + +u32 sub_81CDE94(s32 state) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + switch (state) + { + case 0: + if (sub_81CD3C4() != TRUE) + return 2; + return 0; + case 1: + InitBgTemplates(gUnknown_08623358, ARRAY_COUNT(gUnknown_08623358)); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + decompress_and_copy_tile_data_to_vram(3, gPokenavCondition_Gfx, 0, 0, 0); + return 0; + case 2: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + decompress_and_copy_tile_data_to_vram(2, gUnknown_08623228, 0, 0, 0); + return 0; + case 3: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + + LZ77UnCompVram(gPokenavCondition_Tilemap, structPtr->tilemapBuffers[0]); + SetBgTilemapBuffer(3, structPtr->tilemapBuffers[0]); + if (sub_81CDD5C() == TRUE) + CopyToBgTilemapBufferRect(3, gPokenavOptions_Tilemap, 0, 5, 9, 4); + + CopyBgTilemapBufferToVram(3); + CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, 0x10, 0x20); + CopyPaletteIntoBufferUnfaded(gUnknown_08623208, 0xF0, 0x20); + structPtr->unk1814 = -80; + return 0; + case 4: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + + LZ77UnCompVram(gUnknown_0862323C, structPtr->tilemapBuffers[2]); + SetBgTilemapBuffer(2, structPtr->tilemapBuffers[2]); + CopyBgTilemapBufferToVram(2); + CopyPaletteIntoBufferUnfaded(gUnknown_086231E8, 0x30, 0x20); + sub_81D21DC(2); + return 0; + case 5: + sub_8199DF0(1, 0, 0, 1); + sub_8199DF0(1, 17, 1, 1); + CpuFill32(0, structPtr->tilemapBuffers[1], BG_SCREEN_SIZE); + SetBgTilemapBuffer(1, structPtr->tilemapBuffers[1]); + return 0; + case 6: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + + structPtr->unk1820 = AddWindow(&gUnknown_08623364); + if (sub_81CDD5C() == TRUE) + { + structPtr->unk1821 = AddWindow(&gUnknown_0862336C); + structPtr->unk1822 = AddWindow(&gUnknown_08623374); + structPtr->unk1823 = AddWindow(&gUnknown_0862337C); + } + DeactivateAllTextPrinters(); + return 0; + case 7: + sub_81CED30(0); + return 0; + case 8: + sub_81CE9E4(); + return 0; + case 9: + if (sub_81CDD5C() == TRUE) + sub_81CE934(); + return 0; + case 10: + sub_81CE754(0, sub_81CDC84(), TRUE); + return 0; + case 11: + sub_81CE754(1, sub_81CDC84(), TRUE); + return 0; + case 12: + sub_81CE754(2, sub_81CDC84(), TRUE); + return 0; + case 13: + if (sub_81CE754(3, sub_81CDC84(), TRUE) != TRUE) + return 2; + PutWindowTilemap(structPtr->unk1820); + if (sub_81CDD5C() == TRUE) + { + PutWindowTilemap(structPtr->unk1821); + PutWindowTilemap(structPtr->unk1822); + PutWindowTilemap(structPtr->unk1823); + } + return 0; + case 14: + ShowBg(1); + HideBg(2); + ShowBg(3); + if (sub_81CDD5C() == TRUE) + sub_81C7BA4(4); + return 0; + case 15: + sub_81C7AC0(1); + if (!sub_81CDD5C()) + { + LoadLeftHeaderGfxForIndex(6); + sub_81C7FA0(1, TRUE, 0); + sub_81C7FA0(6, TRUE, 0); + } + return 0; + case 16: + if (IsPaletteFadeActive()) + return 2; + if (!sub_81CDD5C() && sub_81C8010()) + return 2; + SetVBlankCallback_(sub_81CEE44); + return 0; + case 17: + sub_81CEE90(); + sub_81D20AC(sub_81CDC70()); + return 0; + case 18: + if (sub_81D20BC(sub_81CDC70())) + return 2; + return 0; + case 19: + sub_81CEE74(TRUE); + return 0; + case 20: + if (!sub_81D3178(sub_81CDC70(), &structPtr->unk1814)) + { + sub_81D3464(structPtr->unk28e0); + if (sub_81CDD5C() == TRUE || sub_81CDC60() != sub_81CDC50()) + sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); + + return 4; + } + return 2; + } + + return 4; +} + +u32 sub_81CE2D0(s32 state) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + switch (state) + { + case 0: + sub_81CEEC8(); + sub_81D3520(structPtr->unk28e0); + return 1; + case 1: + if (sub_81D31A4(sub_81CDC70(), &structPtr->unk1814)) + return 2; + sub_81CEE74(FALSE); + return 1; + case 2: + sub_81C7AC0(0); + if (!sub_81CDD5C()) + sub_81C78A0(); + return 0; + case 3: + if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) + return 2; + sub_81D354C(structPtr->unk28e0); + HideBg(1); + HideBg(2); + HideBg(3); + return 1; + } + + return 4; +} + +u32 sub_81CE37C(s32 state) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct UnknownStruct_81D1ED4 *unkPtr = sub_81CDC70(); + + switch (state) + { + case 0: + sub_81CD548(0); + return 1; + case 1: + sub_81CD548(1); + return 1; + case 2: + sub_81CD548(2); + sub_81D3520(structPtr->unk28e0); + return 1; + case 3: + sub_81D2074(unkPtr); + return 1; + case 4: + if (!sub_81D3150(&structPtr->unk1814)) + { + sub_81CED30(sub_81CDC84()); + return 1; + } + return 2; + case 5: + sub_81CE754(0, sub_81CDC84(), FALSE); + return 1; + case 6: + sub_81CE754(1, sub_81CDC84(), FALSE); + return 1; + case 7: + sub_81CE754(2, sub_81CDC84(), FALSE); + return 1; + case 8: + if (sub_81CE754(3, sub_81CDC84(), FALSE) == TRUE) + return 1; + return 2; + case 9: + unkPtr = sub_81CDC70(); + if (!sub_81D3178(unkPtr, &structPtr->unk1814)) + { + sub_81D3464(structPtr->unk28e0); + if (sub_81CDD5C() != TRUE && sub_81CDC60() == sub_81CDC50()) + return 1; + + sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); + return 1; + } + return 2; + } + + return 4; +} + +u32 sub_81CE4D8(s32 state) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + switch (state) + { + case 0: + sub_81CD548(0); + return 1; + case 1: + sub_81CD548(1); + return 1; + case 2: + sub_81CD548(2); + return 1; + case 3: + sub_81CED30(sub_81CDC84()); + return 1; + case 4: + sub_81CE754(0, sub_81CDC84(), FALSE); + return 1; + case 5: + sub_81CE754(1, sub_81CDC84(), FALSE); + return 1; + case 6: + sub_81CE754(2, sub_81CDC84(), FALSE); + return 1; + case 7: + if (sub_81CE754(3, sub_81CDC84(), FALSE) == TRUE) + return 1; + return 2; + case 8: + if (!sub_81D3178(sub_81CDC70(), &structPtr->unk1814)) + { + sub_81D3464(structPtr->unk28e0); + sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); + return 1; + } + return 2; + } + + return 4; +} + +u32 sub_81CE5E4(s32 state) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + switch (state) + { + case 0: + sub_81CD548(0); + return 1; + case 1: + sub_81CD548(1); + return 1; + case 2: + sub_81CD548(2); + sub_81D3520(structPtr->unk28e0); + return 1; + case 3: + if (!sub_81D31A4(sub_81CDC70(), &structPtr->unk1814)) + return 1; + return 2; + case 4: + sub_81CE754(0, sub_81CDC84(), FALSE); + return 1; + case 5: + sub_81CE754(1, sub_81CDC84(), FALSE); + return 1; + case 6: + sub_81CE754(2, sub_81CDC84(), FALSE); + return 1; + case 7: + if (sub_81CE754(3, sub_81CDC84(), FALSE) == TRUE) + return 1; + return 2; + } + + return 4; +} + +u32 sub_81CE6BC(s32 state) +{ + switch (state) + { + case 0: + sub_811FAA4(sub_81CDD7C(), 0xb0, 0x20); + return 1; + case 1: + sub_81C7BA4(5); + return 1; + case 2: + if (IsDma3ManagerBusyWithBgCopy_() == TRUE) + return 2; + return 1; + } + + return 4; +} + +u32 sub_81CE700(s32 state) +{ + switch (state) + { + case 0: + sub_811FAF8(); + return 1; + case 1: + sub_81C7BA4(4); + return 1; + case 2: + if (IsDma3ManagerBusyWithBgCopy_() == TRUE) + return 2; + return 1; + } + + return 4; +} + +u8 *sub_81CE738(u8 *dst, u16 num) +{ + u8 *txtPtr = ConvertIntToDecimalStringN(dst, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + txtPtr = StringCopy(txtPtr, gText_Number2); + + return txtPtr; +} + +bool32 sub_81CE754(u8 a0, u16 a1, bool8 a2) +{ + u8 text[32]; + const u8 *str; + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + switch (a0) + { + case 0: + FillWindowPixelBuffer(structPtr->unk1820, 0); + if (sub_81CDD5C() == TRUE) + FillWindowPixelBuffer(structPtr->unk1821, 0); + break; + case 1: + if (sub_81CDC60() != sub_81CDC50() - 1 || sub_81CDD5C() == TRUE) + { + str = sub_81CDD04(a1); + AddTextPrinterParameterized(structPtr->unk1820, 1, str, 0, 1, 0, NULL); + } + break; + case 2: + if (sub_81CDD5C() == TRUE) + { + str = sub_81CDD24(a1); + AddTextPrinterParameterized(structPtr->unk1820, 1, str, 0, 17, 0, NULL); + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = 4; + text[2] = 8; + text[3] = 0; + text[4] = 9; + StringCopy(text + 5, gText_Number2); + AddTextPrinterParameterized(structPtr->unk1821, 1, text, 4, 1, 0, NULL); + ConvertIntToDecimalStringN(text + 5, sub_81CDD48(), STR_CONV_MODE_RIGHT_ALIGN, 4); + AddTextPrinterParameterized(structPtr->unk1821, 1, text, 28, 1, 0, NULL); + } + break; + case 3: + switch (structPtr->unk2908) + { + case 0: + if (a2) + CopyWindowToVram(structPtr->unk1820, 3); + else + CopyWindowToVram(structPtr->unk1820, 2); + + if (sub_81CDD5C() == TRUE) + { + structPtr->unk2908++; + return FALSE; + } + else + { + structPtr->unk2908 = 0; + return TRUE; + } + case 1: + if (a2) + CopyWindowToVram(structPtr->unk1821, 3); + else + CopyWindowToVram(structPtr->unk1821, 2); + + structPtr->unk2908 = 0; + return TRUE; + } + } + + return FALSE; +} + +void sub_81CE934(void) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + CopyWindowToVram(structPtr->unk1822, 3); + CopyWindowToVram(structPtr->unk1823, 3); +} + +void sub_81CE964(struct Sprite *sprite) +{ + if (sprite->data[0] == sub_81CDC60()) + StartSpriteAnim(sprite, 0); + else + StartSpriteAnim(sprite, 1); +} + +void sub_81CE990(struct Sprite *sprite) +{ + if (sub_81CDC60() == sub_81CDC50() - 1) + sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x65); + else + sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x66); +} + +void sub_81CE9C8(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, sub_81CDD7C()); +} + +void sub_81CE9E4(void) +{ + struct SpriteSheet sprSheets[4]; + struct SpriteTemplate sprTemplate; + struct SpritePalette sprPals[3]; + struct SpriteSheet sprSheet; + struct Sprite *sprite; + u16 i, spriteId; + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + sub_81D321C(sprSheets, &sprTemplate, sprPals); + if (sub_81CDD5C() == TRUE) + { + structPtr->monMarks.baseTileTag = 0x6A; + structPtr->monMarks.basePaletteTag = 0x6A; + sub_811F90C(&structPtr->monMarks); + sub_811FA90(); + sprite = sub_811FF94(0x69, 0x69, gUnknown_08623338); + sprite->oam.priority = 3; + sprite->pos1.x = 192; + sprite->pos1.y = 32; + sprite->callback = sub_81CE9C8; + structPtr->unk28dc = sprite; + sub_81C7990(IndexOfSpritePaletteTag(0x69), 0); + } + else + { + LoadSpriteSheets(sprSheets); + Pokenav_AllocAndLoadPalettes(sprPals); + for (i = 0; i < sub_81CDC50() - 1; i++) + { + spriteId = CreateSprite(&sprTemplate, 226, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + structPtr->unk1806[i] = spriteId; + gSprites[spriteId].data[0] = i; + gSprites[spriteId].callback = sub_81CE964; + } + else + { + structPtr->unk1806[i] = 0xFF; + } + } + + sprTemplate.tileTag = 0x67; + sprTemplate.callback = SpriteCallbackDummy; + for (; i < 6; i++) + { + spriteId = CreateSprite(&sprTemplate, 230, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + structPtr->unk1806[i] = spriteId; + gSprites[spriteId].oam.size = 0; + } + else + { + structPtr->unk1806[i] = 0xFF; + } + } + + sprTemplate.tileTag = 0x66; + sprTemplate.callback = sub_81CE990; + spriteId = CreateSprite(&sprTemplate, 222, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + structPtr->unk1806[i] = spriteId; + gSprites[spriteId].oam.shape = 1; + gSprites[spriteId].oam.size = 2; + } + else + { + structPtr->unk1806[i] = 0xFF; + } + } + + sub_81D32B0(&sprSheet, &sprPals[0]); + LoadSpriteSheet(&sprSheet); + sprPals[1].data = NULL; + Pokenav_AllocAndLoadPalettes(sprPals); +} + +void sub_81CEBF4(struct Pokenav7Struct *structPtr) +{ + u8 i; + + if (sub_81CDD5C() == TRUE) + { + DestroySprite(structPtr->unk28dc); + FreeSpriteTilesByTag(0x6A); + FreeSpriteTilesByTag(0x69); + FreeSpritePaletteByTag(0x6A); + FreeSpritePaletteByTag(0x69); + } + else + { + for (i = 0; i < 7; i++) + DestroySprite(&gSprites[structPtr->unk1806[i]]); + + FreeSpriteTilesByTag(0x65); + FreeSpriteTilesByTag(0x66); + FreeSpriteTilesByTag(0x67); + FreeSpritePaletteByTag(0x65); + FreeSpritePaletteByTag(0x66); + } + + if (structPtr->unk1816 != 0xFF) + { + DestroySprite(&gSprites[structPtr->unk1816]); + FreeSpriteTilesByTag(0x64); + FreeSpritePaletteByTag(0x64); + } +} + +void sub_81CECA0(void) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + RemoveWindow(structPtr->unk1820); + if (sub_81CDD5C() == TRUE) + { + RemoveWindow(structPtr->unk1821); + RemoveWindow(structPtr->unk1822); + RemoveWindow(structPtr->unk1823); + } + else + { + sub_81C7FDC(); + } + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP); + sub_81CEBF4(structPtr); + sub_81CEE68(); + FreePokenavSubstruct(0xC); +} + +void sub_81CED10(struct Sprite *sprite) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + sprite->pos1.x = structPtr->unk1814 + 38; +} + +void sub_81CED30(u8 var) +{ + struct SpriteTemplate sprTemplate; + struct SpriteSheet sprSheet; + struct SpritePalette sprPal; + u8 spriteId; + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + if (structPtr->unk1816 == 0xFF) + { + sub_81D31D0(&sprSheet, &sprTemplate, &sprPal); + sprSheet.data = sub_81CDCB4(var); + sprPal.data = sub_81CDCD4(var); + structPtr->unk1818 = LoadSpritePalette(&sprPal); + structPtr->unk181A = LoadSpriteSheet(&sprSheet); + spriteId = CreateSprite(&sprTemplate, 38, 104, 0); + structPtr->unk1816 = spriteId; + if (spriteId == MAX_SPRITES) + { + FreeSpriteTilesByTag(0x64); + FreeSpritePaletteByTag(0x64); + structPtr->unk1816 = 0xFF; + } + else + { + structPtr->unk1816 = spriteId; + gSprites[structPtr->unk1816].callback = sub_81CED10; + structPtr->unk181C = (void*)(VRAM) + 0x10000 + (structPtr->unk181A * 32); + structPtr->unk1818 = (structPtr->unk1818 * 16) + 0x100; + } + } + else + { + DmaCopy16Defvars(3, sub_81CDCB4(var), structPtr->unk181C, 0x800); + LoadPalette(sub_81CDCD4(var), structPtr->unk1818, 0x20); + } +} + +void sub_81CEE44(void) +{ + struct UnknownStruct_81D1ED4 *unk = sub_81CDC70(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_81D2108(unk); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +void sub_81CEE68(void) +{ + SetPokenavVBlankCallback(); +} + +void sub_81CEE74(bool8 showBg) +{ + if (showBg) + ShowBg(2); + else + HideBg(2); +} + +void sub_81CEE90(void) +{ + struct UnknownStruct_81D1ED4 *unk = sub_81CDC70(); + u8 id = sub_81CDC84(); + + gUnknown_030012BC = id; + sub_81D1F84(unk, unk->unk14[3], unk->unk14[id]); + sub_81D2074(unk); +} + +void sub_81CEEC8(void) +{ + struct UnknownStruct_81D1ED4 *unk = sub_81CDC70(); + + if (sub_81CDD5C() || sub_81CDC60() != sub_81CDC50() - 1) + sub_81D1F84(unk, unk->unk14[sub_81CDC84()], unk->unk14[3]); +} + +u8 sub_81CEF14(void) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + if (sub_81CDD5C() == 1) + return structPtr->monMarks.markings; + else + return 0; +} diff --git a/src/pokenav_unk_8.c b/src/pokenav_unk_8.c new file mode 100644 index 000000000..c52932a79 --- /dev/null +++ b/src/pokenav_unk_8.c @@ -0,0 +1,710 @@ +#include "global.h" +#include "pokenav.h" +#include "bg.h" +#include "menu.h" +#include "window.h" +#include "sound.h" +#include "dynamic_placeholder_text_util.h" +#include "strings.h" +#include "string_util.h" +#include "international_string_util.h" +#include "constants/songs.h" + +struct PokenavSub7 +{ + u32 (*unk0)(struct PokenavSub7 *); + u32 loopedTaskId; + u8 fill1[4]; + s32 unkC; + s32 unk10; + u32 unk14; + u32 unk18; + u32 unk1C; + struct PokenavSub18 *unkPtr; +}; + +struct PokenavSub8 +{ + bool32 (*callback)(void); + u32 ltid; + u16 winid; + bool32 unkC; + u8 buff[BG_SCREEN_SIZE]; +}; // size: 0x810 + +static u32 sub_81CF010(struct PokenavSub7 *structPtr); +static u32 sub_81CF030(struct PokenavSub7 *structPtr); +static u32 sub_81CF0B8(struct PokenavSub7 *structPtr); +static u32 sub_81CF0B0(struct PokenavSub7 *structPtr); +static u32 sub_81CF11C(s32 state); +static u32 sub_81CF134(s32 state); +static u32 sub_81CF1C4(s32 state); +static u32 sub_81CF1D8(s32 state); +static u32 sub_81CF278(s32 state); +static u32 sub_81CF578(s32 state); +static u32 sub_81CF5F0(s32 state); +static u32 sub_81CF668(s32 state); +static u32 sub_81CF6E0(s32 state); +static u32 sub_81CF758(s32 state); +static u32 sub_81CF798(s32 state); +static void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *item); +static bool32 sub_81CF3E4(void); +static u32 sub_81CF418(s32 state); +static void sub_81CF7C8(struct PokenavSub8 *); +static void sub_81CF7F4(struct PokenavSub8 *); +static void sub_81CF88C(void); +static void sub_81CF8E4(struct PokenavMonList *, u8 *); + +static const u32 gUnknown_086233A0[] = {0x16, 0x17, 0x18, 0x21, 0x2F}; + +static const LoopedTask gUnknown_086233B4[] = +{ + sub_81CF134, + sub_81CF1C4, + sub_81CF1D8, + sub_81CF278 +}; + +static const u16 gUnknown_086233C4[] = INCBIN_U16("graphics/pokenav/condition_search2.gbapal"); +static const u32 gUnknown_086233E4[] = INCBIN_U32("graphics/pokenav/condition_search2.4bpp.lz"); +static const u32 gUnknown_086234AC[] = INCBIN_U32("graphics/pokenav/condition_search2.bin.lz"); +static const u16 gUnknown_08623570[] = INCBIN_U16("graphics/pokenav/8623570.gbapal"); + +static const struct BgTemplate gUnknown_08623590[] = +{ + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 0x06, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 0x07, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } +}; + +static const LoopedTask gUnknown_08623598[] = +{ + NULL, + sub_81CF578, + sub_81CF5F0, + sub_81CF668, + sub_81CF6E0, + sub_81CF758, + sub_81CF798 +}; + +static const struct WindowTemplate gUnknown_086235B4 = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 6, + .width = 7, + .height = 2, + .paletteNum = 1, + .baseBlock = 20 +}; + +static const u8 gUnknown_086235BC[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); +static const u8 gUnknown_086235C8[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); +static const u8 gUnknown_086235D4[] = _("{UNK_SPACER}"); + +bool32 PokenavCallback_Init_8(void) +{ + struct PokenavSub7 *structPtr = AllocSubstruct(7, sizeof(struct PokenavSub7)); + if (structPtr == NULL) + return FALSE; + + structPtr->unkPtr = AllocSubstruct(18, sizeof(struct PokenavSub18)); + if (structPtr->unkPtr == NULL) + return FALSE; + + structPtr->unk0 = sub_81CF010; + structPtr->loopedTaskId = CreateLoopedTask(sub_81CF11C, 1); + structPtr->unk18 = 0; + structPtr->unk14 = gUnknown_086233A0[sub_81C76AC()]; + return TRUE; +} + +bool32 PokenavCallback_Init_10(void) +{ + struct PokenavSub7 *structPtr = AllocSubstruct(7, sizeof(struct PokenavSub7)); + if (structPtr == NULL) + return FALSE; + + structPtr->unkPtr = GetSubstructPtr(18); + structPtr->unk0 = sub_81CF030; + structPtr->unk18 = 1; + structPtr->unk14 = gUnknown_086233A0[sub_81C76AC()]; + return TRUE; +} + +u32 sub_81CEFDC(void) +{ + struct PokenavSub7 *structPtr = GetSubstructPtr(7); + return structPtr->unk0(structPtr); +} + +void sub_81CEFF0(void) +{ + struct PokenavSub7 *structPtr = GetSubstructPtr(7); + if (structPtr->unk1C == 0) + FreePokenavSubstruct(18); + FreePokenavSubstruct(7); +} + +static bool32 sub_81CF010(struct PokenavSub7 *structPtr) +{ + if (!IsLoopedTaskActive(structPtr->loopedTaskId)) + structPtr->unk0 = sub_81CF030; + return FALSE; +} + +static u32 sub_81CF030(struct PokenavSub7 *structPtr) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + return 1; + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + return 2; + else if (gMain.newKeys & DPAD_LEFT) + return 3; + else if (gMain.newKeys & DPAD_RIGHT) + return 4; + else if (gMain.newKeys & B_BUTTON) + { + structPtr->unk1C = 0; + structPtr->unk0 = sub_81CF0B0; + return 5; + } + else if (gMain.newKeys & A_BUTTON) + { + structPtr->unkPtr->unk2 = GetSelectedMatchCall(); + structPtr->unk1C = 1; + structPtr->unk0 = sub_81CF0B8; + return 6; + } + else + return 0; +} + +static u32 sub_81CF0B0(struct PokenavSub7 *structPtr) +{ + return 100003; +} + +static u32 sub_81CF0B8(struct PokenavSub7 *structPtr) +{ + return 100009; +} + +static u32 sub_81CF0C0(void) +{ + struct PokenavSub7 *structPtr = GetSubstructPtr(7); + return structPtr->unk18; +} + +static struct PokenavMonList * sub_81CF0D0(void) +{ + struct PokenavSub7 * ptr = GetSubstructPtr(7); + return ptr->unkPtr->unk4; +} + +static u16 sub_81CF0E0(void) +{ + struct PokenavSub7 * ptr = GetSubstructPtr(7); + return ptr->unkPtr->unk0; +} + +static s32 sub_81CF0F0(void) +{ + struct PokenavSub7 * ptr = GetSubstructPtr(7); + s32 i = GetSelectedMatchCall(); + return ptr->unkPtr->unk4[i].unk6; +} + +static u16 sub_81CF10C(void) +{ + struct PokenavSub7 * ptr = GetSubstructPtr(7); + return ptr->unkPtr->unk2; +} + +static u32 sub_81CF11C(s32 state) +{ + return gUnknown_086233B4[state](state); +} + +static u32 sub_81CF134(s32 state) +{ + s32 i; + struct PokenavMonList item; + struct PokenavSub7 * ptr = GetSubstructPtr(7); + + ptr->unkPtr->unk0 = 0; + ptr->unkPtr->unk2 = 0; + item.boxId = 14; + for (i = 0; i < PARTY_SIZE; i++) + { + struct Pokemon * pokemon = &gPlayerParty[i]; + if (!GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES)) + return LT_INC_AND_CONTINUE; + if (!GetMonData(pokemon, MON_DATA_SANITY_IS_EGG)) + { + item.monId = i; + item.unk6 = GetMonData(pokemon, ptr->unk14); + sub_81CF2C4(ptr, &item); + } + } + + return LT_INC_AND_CONTINUE; +} + +static u32 sub_81CF1C4(s32 state) +{ + struct PokenavSub7 * ptr = GetSubstructPtr(7); + ptr->unk10 = 0; + ptr->unkC = 0; + return LT_INC_AND_CONTINUE; +} + +static u32 sub_81CF1D8(s32 state) +{ + struct PokenavSub7 * ptr = GetSubstructPtr(7); + s32 boxId = ptr->unkC; + s32 monId = ptr->unk10; + s32 boxCount = 0; + struct PokenavMonList item; + + while (boxId < TOTAL_BOXES_COUNT) + { + while (monId < IN_BOX_COUNT) + { + if (CheckBoxMonSanityAt(boxId, monId)) + { + item.boxId = boxId; + item.monId = monId; + item.unk6 = GetBoxMonDataAt(boxId, monId, ptr->unk14); + sub_81CF2C4(ptr, &item); + } + boxCount++; + monId++; + if (boxCount > 14) + { + ptr->unkC = boxId; + ptr->unk10 = monId; + return LT_CONTINUE; + } + } + monId = 0; + boxId++; + } + + return LT_INC_AND_CONTINUE; +} + +static u32 sub_81CF278(s32 state) +{ + struct PokenavSub7 * ptr = GetSubstructPtr(7); + s32 r6 = ptr->unkPtr->unk0; + s32 r4 = ptr->unkPtr->unk4[0].unk6; + s32 i; + ptr->unkPtr->unk4[0].unk6 = 1; + for (i = 1; i < r6; i++) + { + if (ptr->unkPtr->unk4[i].unk6 == r4) + { + ptr->unkPtr->unk4[i].unk6 = ptr->unkPtr->unk4[i - 1].unk6; + } + else + { + r4 = ptr->unkPtr->unk4[i].unk6; + ptr->unkPtr->unk4[i].unk6 = i + 1; + } + } + ptr->unk18 = 1; + return LT_FINISH; +} + +static void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *item) +{ + u32 left = 0; + u32 right = structPtr->unkPtr->unk0; + u32 insertionIdx = left + (right - left) / 2; + + while (right != insertionIdx) + { + if (item->unk6 > structPtr->unkPtr->unk4[insertionIdx].unk6) + right = insertionIdx; + else + left = insertionIdx + 1; + insertionIdx = left + (right - left) / 2; + } + for (right = structPtr->unkPtr->unk0; right > insertionIdx; right--) + structPtr->unkPtr->unk4[right] = structPtr->unkPtr->unk4[right - 1]; + structPtr->unkPtr->unk4[insertionIdx] = *item; + structPtr->unkPtr->unk0++; +} + +bool32 sub_81CF330(void) +{ + struct PokenavSub8 * unk = AllocSubstruct(8, sizeof(struct PokenavSub8)); + if (unk == NULL) + return FALSE; + unk->ltid = CreateLoopedTask(sub_81CF418, 1); + unk->callback = sub_81CF3E4; + unk->unkC = FALSE; + return TRUE; +} + +bool32 sub_81CF368(void) +{ + struct PokenavSub8 * unk = AllocSubstruct(8, sizeof(struct PokenavSub8)); + if (unk == NULL) + return FALSE; + unk->ltid = CreateLoopedTask(sub_81CF418, 1); + unk->callback = sub_81CF3E4; + unk->unkC = TRUE; + return TRUE; +} + +void sub_81CF3A0(s32 idx) +{ + struct PokenavSub8 * unk = GetSubstructPtr(8); + unk->ltid = CreateLoopedTask(gUnknown_08623598[idx], 1); + unk->callback = sub_81CF3E4; +} + +bool32 sub_81CF3D0(void) +{ + struct PokenavSub8 * unk = GetSubstructPtr(8); + return unk->callback(); +} + +bool32 sub_81CF3E4(void) +{ + struct PokenavSub8 * unk = GetSubstructPtr(8); + return IsLoopedTaskActive(unk->ltid); +} + +void sub_81CF3F8(void) +{ + struct PokenavSub8 * unk = GetSubstructPtr(8); + sub_81C8234(); + RemoveWindow(unk->winid); + FreePokenavSubstruct(8); +} + +static u32 sub_81CF418(s32 state) +{ + struct PokenavSub8 * unk = GetSubstructPtr(8); + switch (state) + { + case 0: + InitBgTemplates(gUnknown_08623590, NELEMS(gUnknown_08623590)); + decompress_and_copy_tile_data_to_vram(1, gUnknown_086233E4, 0, 0, 0); + SetBgTilemapBuffer(1, unk->buff); + CopyToBgTilemapBuffer(1, gUnknown_086234AC, 0, 0); + CopyBgTilemapBufferToVram(1); + CopyPaletteIntoBufferUnfaded(gUnknown_086233C4, 0x10, 0x20); + CopyBgTilemapBufferToVram(1); + return LT_INC_AND_PAUSE; + case 1: + if (free_temp_tile_data_buffers_if_possible()) + return LT_PAUSE; + if (!sub_81CF0C0()) + return LT_PAUSE; + return LT_INC_AND_PAUSE; + case 2: + if (free_temp_tile_data_buffers_if_possible()) + return LT_PAUSE; + CopyPaletteIntoBufferUnfaded(gUnknown_08623570, 0x20, 0x20); + sub_81CF88C(); + return LT_INC_AND_PAUSE; + case 3: + if (sub_81C8224()) + return LT_PAUSE; + sub_81CF7C8(unk); + sub_81C7BA4(3); + return LT_INC_AND_PAUSE; + case 4: + if (free_temp_tile_data_buffers_if_possible()) + return LT_PAUSE; + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ShowBg(1); + ShowBg(2); + HideBg(3); + if (!unk->unkC) + { + u8 r4 = sub_81C76AC() + 8; + LoadLeftHeaderGfxForIndex(r4); + sub_81C7FA0(r4, 1, 0); + sub_81C7FA0(1, 1, 0); + } + sub_81C7AC0(1); + return LT_INC_AND_PAUSE; + case 5: + if (IsPaletteFadeActive()) + return LT_PAUSE; + if (sub_81C8010()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81CF578(s32 state) +{ + struct PokenavSub8 * unk = GetSubstructPtr(8); + switch (state) + { + case 0: + switch (MatchCall_MoveCursorUp()) + { + case 0: + return LT_FINISH; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + break; + } + return LT_INC_AND_PAUSE; + case 1: + if (sub_81C8630()) + return LT_PAUSE; + // fallthrough + case 2: + sub_81CF7F4(unk); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81CF5F0(s32 state) +{ + struct PokenavSub8 * unk = GetSubstructPtr(8); + switch (state) + { + case 0: + switch (MatchCall_MoveCursorDown()) + { + case 0: + return LT_FINISH; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + break; + } + return LT_INC_AND_PAUSE; + case 1: + if (sub_81C8630()) + return LT_PAUSE; + // fallthrough + case 2: + sub_81CF7F4(unk); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81CF668(s32 state) +{ + struct PokenavSub8 * unk = GetSubstructPtr(8); + switch (state) + { + case 0: + switch (MatchCall_PageUp()) + { + case 0: + return LT_FINISH; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + break; + } + return LT_INC_AND_PAUSE; + case 1: + if (sub_81C8630()) + return LT_PAUSE; + // fallthrough + case 2: + sub_81CF7F4(unk); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81CF6E0(s32 state) +{ + struct PokenavSub8 * unk = GetSubstructPtr(8); + switch (state) + { + case 0: + switch (MatchCall_PageDown()) + { + case 0: + return LT_FINISH; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + break; + } + return LT_INC_AND_PAUSE; + case 1: + if (sub_81C8630()) + return LT_PAUSE; + // fallthrough + case 2: + sub_81CF7F4(unk); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81CF758(s32 state) +{ + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81C7AC0(0); + sub_81C78A0(); + return LT_INC_AND_PAUSE; + case 1: + if (IsPaletteFadeActive()) + return LT_PAUSE; + if (MainMenuLoopedTaskIsBusy()) + return LT_PAUSE; + sub_81C7FDC(); + break; + } + return LT_FINISH; +} + +static u32 sub_81CF798(s32 state) +{ + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81C7AC0(0); + return LT_INC_AND_PAUSE; + case 1: + if (IsPaletteFadeActive()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static void sub_81CF7C8(struct PokenavSub8 * ptr) +{ + ptr->winid = AddWindow(&gUnknown_086235B4); + PutWindowTilemap(ptr->winid); + CopyWindowToVram(ptr->winid, 1); + sub_81CF7F4(ptr); +} + +static void sub_81CF7F4(struct PokenavSub8 * ptr) +{ + s32 r7 = sub_81CF0F0(); + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + *gStringVar1 = EOS; + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar2, gText_NumberF700); + AddTextPrinterParameterized(ptr->winid, 1, gStringVar2, 4, 1, 0xFF, NULL); + ConvertIntToDecimalStringN(gStringVar1, r7, STR_CONV_MODE_RIGHT_ALIGN, 3); + AddTextPrinterParameterized(ptr->winid, 1, gStringVar1, 34, 1, 0xFF, NULL); + CopyWindowToVram(ptr->winid, 2); +} + +static void sub_81CF88C(void) +{ + struct MatchCallListTemplate template; + template.unk0 = sub_81CF0D0(); + template.unk4 = sub_81CF0E0(); + template.unk8 = 4; + template.unk6 = sub_81CF10C(); + template.unk9 = 13; + template.unkA = 17; + template.unkB = 1; + template.unkC = 8; + template.unkD = 2; + template.unkE = 1; + template.unk10 = sub_81CF8E4; + template.unk14 = NULL; + sub_81C81D4(&gUnknown_08623590[1], &template, 0); +} + +static void sub_81CF8E4(struct PokenavMonList * item, u8 * dest) +{ + u8 gender; + u8 level; + u8 * s; + const u8 * genderStr; + if (item->boxId == 14) + { + struct Pokemon * mon = &gPlayerParty[item->monId]; + gender = GetMonGender(mon); + level = GetLevelFromMonExp(mon); + GetMonData(mon, MON_DATA_NICKNAME, gStringVar3); + } + else + { + struct BoxPokemon * mon = GetBoxedMonPtr(item->boxId, item->monId); + gender = GetBoxMonGender(mon); + level = GetLevelFromBoxMonExp(mon); + GetBoxMonData(mon, MON_DATA_NICKNAME, gStringVar3); + } + StringGetEnd10(gStringVar3); + dest = sub_81DB494(dest, 1, gStringVar3, 60); + switch (gender) + { + default: + genderStr = gUnknown_086235D4; + break; + case MON_MALE: + genderStr = gUnknown_086235BC; + break; + case MON_FEMALE: + genderStr = gUnknown_086235C8; + break; + } + s = StringCopy(gStringVar1, genderStr); + *s++ = CHAR_SLASH; + *s++ = CHAR_SPECIAL_F9; + *s++ = 5; // LV + ConvertIntToDecimalStringN(s, level, STR_CONV_MODE_LEFT_ALIGN, 3); + sub_81DB494(dest, 1, gStringVar1, 40); +} diff --git a/src/pokenav_unk_9.c b/src/pokenav_unk_9.c new file mode 100644 index 000000000..05d590a87 --- /dev/null +++ b/src/pokenav_unk_9.c @@ -0,0 +1,726 @@ +#include "global.h" +#include "pokenav.h" +#include "bg.h" +#include "menu.h" +#include "window.h" +#include "sound.h" +#include "string_util.h" +#include "international_string_util.h" +#include "constants/songs.h" + +struct PokenavSub9 +{ + u32 (*unk0)(struct PokenavSub9*); + u32 loopedTaskId; + u16 winid; + s32 unkC; + s32 unk10; + u32 unk14; + u32 unk18; + struct PokenavSub18 *unk1C; +}; + +struct PokenavSub10 +{ + bool32 (*callback)(void); + u32 ltid; + u16 winid; + bool32 unkC; + u8 buff[BG_SCREEN_SIZE]; +}; + +static u32 sub_81CFA68(struct PokenavSub9 *structPtr); +static u32 sub_81CFA88(struct PokenavSub9 *structPtr); +static u32 sub_81CFB08(struct PokenavSub9 *structPtr); +static u32 sub_81CFB10(struct PokenavSub9 *structPtr); +static u32 sub_81CFB8C(s32 state); +static u32 sub_81CFC2C(s32 state); +static u32 sub_81CFC40(s32 state); +static u32 sub_81CFB74(s32 state); +static void sub_81CFCEC(struct PokenavSub9 *structPtr, struct PokenavMonList *item); +static u32 sub_81CFEB8(s32 state); +static bool32 sub_81CFE84(void); +static u32 sub_81CFFFC(s32 state); +static u32 sub_81D0074(s32 state); +static u32 sub_81D00EC(s32 state); +static u32 sub_81D0164(s32 state); +static u32 sub_81D01DC(s32 state); +static u32 sub_81D021C(s32 state); +static void sub_81D02B0(s32 windowId, s32 val1, s32 val2); +static void sub_81D024C(struct PokenavSub10 *ptr); +static void sub_81D0288(struct PokenavSub10 *ptr); +static void sub_81D0304(void); +static void sub_81D035C(struct PokenavMonList *, u8 *); + +static const LoopedTask gUnknown_086235D8[] = +{ + sub_81CFB8C, + sub_81CFC2C, + sub_81CFC40 +}; + +static const u16 gUnknown_086235E4[] = INCBIN_U16("graphics/pokenav/ui_ribbons.gbapal"); +static const u32 gUnknown_08623604[] = INCBIN_U32("graphics/pokenav/ui_ribbons.4bpp.lz"); +static const u32 gUnknown_086236CC[] = INCBIN_U32("graphics/pokenav/ui_ribbons.bin.lz"); +static const u16 gUnknown_08623790[] = INCBIN_U16("graphics/pokenav/8623790.gbapal"); + +static const struct BgTemplate gUnknown_086237B0[] = +{ + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 0x06, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 0x07, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } +}; + +static const LoopedTask gUnknown_086237B8[] = +{ + NULL, + sub_81CFFFC, + sub_81D0074, + sub_81D00EC, + sub_81D0164, + sub_81D01DC, + sub_81D021C +}; + +static const struct WindowTemplate gUnknown_086237D4 = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 6, + .width = 7, + .height = 2, + .paletteNum = 1, + .baseBlock = 20 +}; + +static const u8 gUnknown_086237DC[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); +static const u8 gUnknown_086237E8[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); +static const u8 gUnknown_086237F4[] = _("{UNK_SPACER}"); + +bool32 PokenavCallback_Init_12(void) +{ + struct PokenavSub9 *structPtr = AllocSubstruct(9, sizeof(struct PokenavSub9)); + if (structPtr == NULL) + return FALSE; + + structPtr->unk1C = AllocSubstruct(18, sizeof(struct PokenavSub18)); + if (structPtr->unk1C == NULL) + return FALSE; + + structPtr->unk0 = sub_81CFA68; + structPtr->loopedTaskId = CreateLoopedTask(sub_81CFB74, 1); + structPtr->unk14 = 0; + return TRUE; +} + +bool32 PokenavCallback_Init_14(void) +{ + struct PokenavSub9 *structPtr = AllocSubstruct(9, sizeof(struct PokenavSub9)); + if (structPtr == NULL) + return FALSE; + + structPtr->unk1C = GetSubstructPtr(18); + structPtr->unk0 = sub_81CFA88; + structPtr->unk14 = 1; + return TRUE; +} + +u32 sub_81CFA34(void) +{ + struct PokenavSub9 *structPtr = GetSubstructPtr(9); + return structPtr->unk0(structPtr); +} + +void sub_81CFA48(void) +{ + struct PokenavSub9 *structPtr = GetSubstructPtr(9); + if (!structPtr->unk18) + FreePokenavSubstruct(18); + FreePokenavSubstruct(9); +} + +static u32 sub_81CFA68(struct PokenavSub9 *structPtr) +{ + if (!IsLoopedTaskActive(structPtr->loopedTaskId)) + structPtr->unk0 = sub_81CFA88; + return 0; +} + +static u32 sub_81CFA88(struct PokenavSub9 *structPtr) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + return 1; + if (gMain.newAndRepeatedKeys & DPAD_DOWN) + return 2; + if (gMain.newKeys & DPAD_LEFT) + return 3; + if (gMain.newKeys & DPAD_RIGHT) + return 4; + if (gMain.newKeys & B_BUTTON) + { + structPtr->unk18 = 0; + structPtr->unk0 = sub_81CFB08; + return 5; + } + if (gMain.newKeys & A_BUTTON) + { + structPtr->unk1C->unk2 = GetSelectedMatchCall(); + structPtr->unk18 = 1; + structPtr->unk0 = sub_81CFB10; + return 6; + } + return 0; +} + +static u32 sub_81CFB08(struct PokenavSub9 *structPtr) +{ + return 100005; +} + +static u32 sub_81CFB10(struct PokenavSub9 *structPtr) +{ + return 100013; +} + +static u32 sub_81CFB18(void) +{ + struct PokenavSub9 *structPtr = GetSubstructPtr(9); + return structPtr->unk14; +} + +static struct PokenavMonList * sub_81CFB28(void) +{ + struct PokenavSub9 * ptr = GetSubstructPtr(9); + return ptr->unk1C->unk4; +} + +static s32 sub_81CFB38(void) +{ + struct PokenavSub9 * ptr = GetSubstructPtr(9); + return ptr->unk1C->unk0; +} + +static s32 sub_81CFB48(void) +{ + struct PokenavSub9 * ptr = GetSubstructPtr(9); + s32 idx = GetSelectedMatchCall(); + return ptr->unk1C->unk4[idx].unk6; +} + +static s32 sub_81CFB64(void) +{ + struct PokenavSub9 * ptr = GetSubstructPtr(9); + return ptr->unk1C->unk2; +} + +static u32 sub_81CFB74(s32 state) +{ + return gUnknown_086235D8[state](state); +} + +static u32 sub_81CFB8C(s32 state) +{ + s32 i; + struct PokenavMonList item; + struct PokenavSub9 * ptr = GetSubstructPtr(9); + + ptr->unk1C->unk0 = 0; + ptr->unk1C->unk2 = 0; + item.boxId = 14; + for (i = 0; i < PARTY_SIZE; i++) + { + struct Pokemon * pokemon = &gPlayerParty[i]; + if (!GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES)) + return LT_INC_AND_CONTINUE; + if (!GetMonData(pokemon, MON_DATA_SANITY_IS_EGG) && !GetMonData(pokemon, MON_DATA_SANITY_IS_BAD_EGG)) + { + u32 ribbonCount = GetMonData(pokemon, MON_DATA_RIBBON_COUNT); + if (ribbonCount != 0) + { + item.monId = i; + item.unk6 = ribbonCount; + sub_81CFCEC(ptr, &item); + } + } + } + + return LT_INC_AND_CONTINUE; +} + +static u32 sub_81CFC2C(s32 state) +{ + struct PokenavSub9 * ptr = GetSubstructPtr(9); + ptr->unk10 = 0; + ptr->unkC = 0; + return LT_INC_AND_CONTINUE; +} + +static u32 sub_81CFC40(s32 state) +{ + struct PokenavSub9 * ptr = GetSubstructPtr(9); + s32 boxId = ptr->unkC; + s32 monId = ptr->unk10; + s32 boxCount = 0; + struct PokenavMonList item; + + while (boxId < TOTAL_BOXES_COUNT) + { + while (monId < IN_BOX_COUNT) + { + if (CheckBoxMonSanityAt(boxId, monId)) + { + u32 ribbonCount = GetBoxMonDataAt(boxId, monId, MON_DATA_RIBBON_COUNT); + if (ribbonCount != 0) + { + item.boxId = boxId; + item.monId = monId; + item.unk6 = ribbonCount; + sub_81CFCEC(ptr, &item); + } + } + boxCount++; + monId++; + if (boxCount > 14) + { + ptr->unkC = boxId; + ptr->unk10 = monId; + return LT_CONTINUE; + } + } + monId = 0; + boxId++; + } + + ptr->unk14 = 1; + return LT_FINISH; +} + +static void sub_81CFCEC(struct PokenavSub9 *structPtr, struct PokenavMonList *item) +{ + u32 left = 0; + u32 right = structPtr->unk1C->unk0; + u32 insertionIdx = left + (right - left) / 2; + + while (right != insertionIdx) + { + if (item->unk6 > structPtr->unk1C->unk4[insertionIdx].unk6) + right = insertionIdx; + else + left = insertionIdx + 1; + insertionIdx = left + (right - left) / 2; + } + for (right = structPtr->unk1C->unk0; right > insertionIdx; right--) + structPtr->unk1C->unk4[right] = structPtr->unk1C->unk4[right - 1]; + structPtr->unk1C->unk4[insertionIdx] = *item; + structPtr->unk1C->unk0++; +} + +static bool32 sub_81CFD58(void) +{ + s32 i, j; + + for (i = 0; i < PARTY_SIZE; i++) + { + struct Pokemon * mon = &gPlayerParty[i]; + if (!GetMonData(mon, MON_DATA_SANITY_HAS_SPECIES)) + continue; + if (GetMonData(mon, MON_DATA_SANITY_IS_EGG)) + continue; + if (GetMonData(mon, MON_DATA_RIBBONS)) + return TRUE; + } + + for (i = 0; i < TOTAL_BOXES_COUNT; i++) + { + for (j = 0; j < IN_BOX_COUNT; j++) + { + if (!CheckBoxMonSanityAt(i, j)) + continue; + if (GetBoxMonDataAt(i, j, MON_DATA_RIBBONS)) + return TRUE; + } + } + + return FALSE; +} + +bool32 sub_81CFDD0(void) +{ + struct PokenavSub10 * ptr = AllocSubstruct(10, sizeof(struct PokenavSub10)); + if (ptr == NULL) + return FALSE; + ptr->ltid = CreateLoopedTask(sub_81CFEB8, 1); + ptr->callback = sub_81CFE84; + ptr->unkC = FALSE; + return TRUE; +} + +bool32 sub_81CFE08(void) +{ + struct PokenavSub10 * ptr = AllocSubstruct(10, sizeof(struct PokenavSub10)); + if (ptr == NULL) + return FALSE; + ptr->ltid = CreateLoopedTask(sub_81CFEB8, 1); + ptr->callback = sub_81CFE84; + ptr->unkC = TRUE; + return TRUE; +} + +void sub_81CFE40(s32 idx) +{ + struct PokenavSub10 * ptr = GetSubstructPtr(10); + ptr->ltid = CreateLoopedTask(gUnknown_086237B8[idx], 1); + ptr->callback = sub_81CFE84; +} + +bool32 sub_81CFE70(void) +{ + struct PokenavSub10 * ptr = GetSubstructPtr(10); + return ptr->callback(); +} + +bool32 sub_81CFE84(void) +{ + struct PokenavSub10 * ptr = GetSubstructPtr(10); + return IsLoopedTaskActive(ptr->ltid); +} + +void sub_81CFE98(void) +{ + struct PokenavSub10 * ptr = GetSubstructPtr(10); + sub_81C8234(); + RemoveWindow(ptr->winid); + FreePokenavSubstruct(10); +} + +static u32 sub_81CFEB8(s32 state) +{ + struct PokenavSub10 * unk = GetSubstructPtr(10); + switch (state) + { + case 0: + InitBgTemplates(gUnknown_086237B0, NELEMS(gUnknown_086237B0)); + decompress_and_copy_tile_data_to_vram(1, gUnknown_08623604, 0, 0, 0); + SetBgTilemapBuffer(1, unk->buff); + CopyToBgTilemapBuffer(1, gUnknown_086236CC, 0, 0); + CopyPaletteIntoBufferUnfaded(gUnknown_086235E4, 0x10, 0x20); + CopyBgTilemapBufferToVram(1); + return LT_INC_AND_PAUSE; + case 1: + if (free_temp_tile_data_buffers_if_possible()) + return LT_PAUSE; + if (!sub_81CFB18()) + return LT_PAUSE; + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ShowBg(1); + return LT_INC_AND_PAUSE; + case 2: + if (free_temp_tile_data_buffers_if_possible()) + return LT_PAUSE; + CopyPaletteIntoBufferUnfaded(gUnknown_08623790, 0x20, 0x20); + sub_81D0304(); + return LT_INC_AND_PAUSE; + case 3: + if (sub_81C8224()) + return LT_PAUSE; + sub_81D024C(unk); + return LT_INC_AND_PAUSE; + case 4: + if (free_temp_tile_data_buffers_if_possible()) + return LT_PAUSE; + ShowBg(2); + HideBg(3); + sub_81C7BA4(9); + sub_81C7AC0(1); + if (!unk->unkC) + { + LoadLeftHeaderGfxForIndex(2); + sub_81C7FA0(2, 1, 0); + } + return LT_INC_AND_PAUSE; + case 5: + if (IsPaletteFadeActive()) + return LT_PAUSE; + if (sub_81C8010()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81CFFFC(s32 state) +{ + struct PokenavSub10 * unk = GetSubstructPtr(10); + switch (state) + { + case 0: + switch (MatchCall_MoveCursorUp()) + { + case 0: + return LT_FINISH; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + break; + } + return LT_INC_AND_PAUSE; + case 1: + if (sub_81C8630()) + return LT_PAUSE; + // fallthrough + case 2: + sub_81D0288(unk); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81D0074(s32 state) +{ + struct PokenavSub10 * unk = GetSubstructPtr(10); + switch (state) + { + case 0: + switch (MatchCall_MoveCursorDown()) + { + case 0: + return LT_FINISH; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + break; + } + return LT_INC_AND_PAUSE; + case 1: + if (sub_81C8630()) + return LT_PAUSE; + // fallthrough + case 2: + sub_81D0288(unk); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81D00EC(s32 state) +{ + struct PokenavSub10 * unk = GetSubstructPtr(10); + switch (state) + { + case 0: + switch (MatchCall_PageUp()) + { + case 0: + return LT_FINISH; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + break; + } + return LT_INC_AND_PAUSE; + case 1: + if (sub_81C8630()) + return LT_PAUSE; + // fallthrough + case 2: + sub_81D0288(unk); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81D0164(s32 state) +{ + struct PokenavSub10 * unk = GetSubstructPtr(10); + switch (state) + { + case 0: + switch (MatchCall_PageDown()) + { + case 0: + return LT_FINISH; + case 1: + PlaySE(SE_SELECT); + return LT_SET_STATE(2); + case 2: + PlaySE(SE_SELECT); + break; + } + return LT_INC_AND_PAUSE; + case 1: + if (sub_81C8630()) + return LT_PAUSE; + // fallthrough + case 2: + sub_81D0288(unk); + return LT_INC_AND_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static u32 sub_81D01DC(s32 state) +{ + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81C7AC0(0); + sub_81C78A0(); + return LT_INC_AND_PAUSE; + case 1: + if (IsPaletteFadeActive()) + return LT_PAUSE; + if (MainMenuLoopedTaskIsBusy()) + return LT_PAUSE; + sub_81C7FDC(); + break; + } + return LT_FINISH; +} + +static u32 sub_81D021C(s32 state) +{ + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81C7AC0(0); + return LT_INC_AND_PAUSE; + case 1: + if (IsPaletteFadeActive()) + return LT_PAUSE; + break; + } + return LT_FINISH; +} + +static void sub_81D024C(struct PokenavSub10 * ptr) +{ + s32 r2; + ptr->winid = AddWindow(&gUnknown_086237D4); + PutWindowTilemap(ptr->winid); + r2 = sub_81CFB38(); + sub_81D02B0(ptr->winid, 0, r2); + CopyWindowToVram(ptr->winid, 1); + sub_81D0288(ptr); +} + +static void sub_81D0288(struct PokenavSub10 * ptr) +{ + s32 r4 = GetSelectedMatchCall(); + s32 r2 = sub_81CFB38(); + sub_81D02B0(ptr->winid, r4 + 1, r2); + CopyWindowToVram(ptr->winid, 2); +} + +static void sub_81D02B0(s32 windowId, s32 val1, s32 val2) +{ + u8 strbuf[16]; + u32 x; + + u8 * ptr = strbuf; + ptr = ConvertIntToDecimalStringN(ptr, val1, STR_CONV_MODE_RIGHT_ALIGN, 3); + *ptr++ = CHAR_SLASH; + ConvertIntToDecimalStringN(ptr, val2, STR_CONV_MODE_RIGHT_ALIGN, 3); + x = GetStringCenterAlignXOffset(1, strbuf, 56); + AddTextPrinterParameterized(windowId, 1, strbuf,x, 1, 0xFF, NULL); +} + +static void sub_81D0304(void) +{ + struct MatchCallListTemplate template; + template.unk0 = sub_81CFB28(); + template.unk4 = sub_81CFB38(); + template.unk8 = 4; + template.unk6 = sub_81CFB64(); + template.unk9 = 13; + template.unkA = 17; + template.unkB = 1; + template.unkC = 8; + template.unkD = 2; + template.unkE = 1; + template.unk10 = sub_81D035C; + template.unk14 = NULL; + sub_81C81D4(&gUnknown_086237B0[1], &template, 0); +} + +static void sub_81D035C(struct PokenavMonList * item0, u8 * dest) +{ + u8 gender; + u8 level; + u8 * s; + const u8 * genderStr; + struct PokenavMonList * item = item0; + if (item->boxId == 14) + { + struct Pokemon * mon = &gPlayerParty[item->monId]; + gender = GetMonGender(mon); + level = GetLevelFromMonExp(mon); + GetMonData(mon, MON_DATA_NICKNAME, gStringVar3); + } + else + { + struct BoxPokemon * mon = GetBoxedMonPtr(item->boxId, item->monId); + gender = GetBoxMonGender(mon); + level = GetLevelFromBoxMonExp(mon); + GetBoxMonData(mon, MON_DATA_NICKNAME, gStringVar3); + } + StringGetEnd10(gStringVar3); + dest = sub_81DB494(dest, 1, gStringVar3, 60); + switch (gender) + { + default: + genderStr = gUnknown_086237F4; + break; + case MON_MALE: + genderStr = gUnknown_086237DC; + break; + case MON_FEMALE: + genderStr = gUnknown_086237E8; + break; + } + s = StringCopy(gStringVar1, genderStr); + *s++ = CHAR_SLASH; + *s++ = CHAR_SPECIAL_F9; + *s++ = 5; // LV + ConvertIntToDecimalStringN(s, level, STR_CONV_MODE_LEFT_ALIGN, 3); + dest = sub_81DB494(dest, 1, gStringVar1, 54); + ConvertIntToDecimalStringN(dest, item->unk6, STR_CONV_MODE_RIGHT_ALIGN, 2); +} diff --git a/src/random.c b/src/random.c index f0b2d9e5f..b570a7bc3 100644 --- a/src/random.c +++ b/src/random.c @@ -8,8 +8,8 @@ EWRAM_DATA static u8 sUnknown = 0; EWRAM_DATA static u32 sRandCount = 0; // IWRAM common -IWRAM_DATA u32 gRngValue; -IWRAM_DATA u32 gRng2Value; +u32 gRngValue; +u32 gRng2Value; u16 Random(void) { diff --git a/src/record_mixing.c b/src/record_mixing.c index 85b52e478..32e0404b9 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -82,21 +82,21 @@ union PlayerRecords // Static RAM declarations -static IWRAM_DATA bool8 gUnknown_03001130; -static IWRAM_DATA struct SecretBase *sSecretBasesSave; -static IWRAM_DATA TVShow *sTvShowsSave; -static IWRAM_DATA PokeNews *sPokeNewsSave; -static IWRAM_DATA OldMan *sOldManSave; -static IWRAM_DATA struct EasyChatPair *sEasyChatPairsSave; -static IWRAM_DATA struct RecordMixingDayCareMail *gUnknown_03001148; -static IWRAM_DATA void *sBattleTowerSave; -static IWRAM_DATA LilycoveLady *sLilycoveLadySave; -static IWRAM_DATA void *sApprenticesSave; -static IWRAM_DATA void *sBattleTowerSave_Duplicate; -static IWRAM_DATA u32 sRecordStructSize; -static IWRAM_DATA u8 gUnknown_03001160; -static IWRAM_DATA u32 filler_03001164; -static IWRAM_DATA struct PlayerHallRecords *gUnknown_03001168[3]; +static bool8 gUnknown_03001130; +static struct SecretBase *sSecretBasesSave; +static TVShow *sTvShowsSave; +static PokeNews *sPokeNewsSave; +static OldMan *sOldManSave; +static struct EasyChatPair *sEasyChatPairsSave; +static struct RecordMixingDayCareMail *gUnknown_03001148; +static void *sBattleTowerSave; +static LilycoveLady *sLilycoveLadySave; +static void *sApprenticesSave; +static void *sBattleTowerSave_Duplicate; +static u32 sRecordStructSize; +static u8 gUnknown_03001160; +static u32 filler_03001164; +static struct PlayerHallRecords *gUnknown_03001168[3]; static EWRAM_DATA struct RecordMixingDayCareMail gUnknown_02039F9C = {0}; static EWRAM_DATA union PlayerRecords *sReceivedRecords = NULL; @@ -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 ac97dfcd6..9e03d57f6 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -100,8 +100,8 @@ EWRAM_DATA static u8 sApprenticeId = 0; EWRAM_DATA static u16 sEasyChatSpeech[6] = {0}; EWRAM_DATA static u8 sBattleOutcome = 0; -IWRAM_DATA static u8 sRecordMixFriendLanguage; -IWRAM_DATA static u8 sApprenticeLanguage; +static u8 sRecordMixFriendLanguage; +static u8 sApprenticeLanguage; // this file's functions static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2); diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c index d675c49d1..1fe9f2279 100644 --- a/src/reset_rtc_screen.c +++ b/src/reset_rtc_screen.c @@ -142,7 +142,7 @@ static const union AnimCmd sSpriteAnim_85104CC[] = static const union AnimCmd sSpriteAnim_85104D4[] = { - ANIMCMD_FRAME(0, 158, .vFlip = TRUE), + ANIMCMD_FRAME(0, 30, .vFlip = TRUE), ANIMCMD_JUMP(0), }; diff --git a/src/reset_save_heap.c b/src/reset_save_heap.c index 95d63a323..beba742f5 100644 --- a/src/reset_save_heap.c +++ b/src/reset_save_heap.c @@ -14,7 +14,7 @@ void sub_81700F8(void) imeBackup = REG_IME; REG_IME = 0; - RegisterRamReset(0x00000001); + RegisterRamReset(RESET_EWRAM); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK); REG_IME = imeBackup; gMain.inBattle = FALSE; 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/rom_8034C54.c b/src/rom_8034C54.c index a3707017e..42817fc2b 100644 --- a/src/rom_8034C54.c +++ b/src/rom_8034C54.c @@ -43,9 +43,9 @@ static bool32 SharesPalWithAnyActive(u32 id); static void sub_8035648(void); // iwram -static IWRAM_DATA s32 gUnknown_03000DD4; -static IWRAM_DATA s32 gUnknown_03000DD8; -static IWRAM_DATA s32 gUnknown_03000DDC; +static s32 gUnknown_03000DD4; +static s32 gUnknown_03000DD8; +static s32 gUnknown_03000DDC; // ewram static EWRAM_DATA struct UnkStruct1 *gUnknown_02022E10 = {0}; diff --git a/src/roulette.c b/src/roulette.c index 25c079cda..662522aae 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -3994,8 +3994,8 @@ static void sub_8144514(struct Sprite *sprite) if (gUnknown_0203AB88->var94 > 40.f) return; - gUnknown_0203AB88->var98 = -(4.0f / (float)gUnknown_0203AB88->var86); - gUnknown_0203AB88->var90 = -(gUnknown_0203AB88->var8C / (float)gUnknown_0203AB88->var86); + gUnknown_0203AB88->var98 = -(4.0f / (float)(gUnknown_0203AB88->var86)); + gUnknown_0203AB88->var90 = -(gUnknown_0203AB88->var8C / (float)(gUnknown_0203AB88->var86)); sprite->animNum = 2; sprite->animBeginning = TRUE; sprite->animEnded = FALSE; @@ -4010,8 +4010,8 @@ static void sub_81445D8(struct Sprite *sprite) return; m4aSongNumStartOrChange(SE_TAMAKORO_E); - gUnknown_0203AB88->var98 = -(20.0f / (float)gUnknown_0203AB88->var84); - gUnknown_0203AB88->var90 = ((1.0f - gUnknown_0203AB88->var8C) / (float)gUnknown_0203AB88->var84); + gUnknown_0203AB88->var98 = -(20.0f / (float)(gUnknown_0203AB88->var84)); + gUnknown_0203AB88->var90 = ((1.0f - gUnknown_0203AB88->var8C) / (float)(gUnknown_0203AB88->var84)); sprite->animNum = 1; sprite->animBeginning = TRUE; sprite->animEnded = FALSE; diff --git a/src/roulette_util.c b/src/roulette_util.c index 9531302d9..f1f04a73a 100755 --- a/src/roulette_util.c +++ b/src/roulette_util.c @@ -408,7 +408,8 @@ void UpdatePulseBlend(struct PulseBlend *pulseBlend) } } break; - case 2: // Flip back and forth + case (MODERN ? -2 : 2): // Flip back and forth + // This code is never reached in vanilla if (pulseBlendPalette->fadeDirection) pulseBlendPalette->blendCoeff = 0; else @@ -4,10 +4,10 @@ #include "text.h" // iwram bss -IWRAM_DATA static u16 sErrorStatus; -IWRAM_DATA static struct SiiRtcInfo sRtc; -IWRAM_DATA static u8 sProbeResult; -IWRAM_DATA static u16 sSavedIme; +static u16 sErrorStatus; +static struct SiiRtcInfo sRtc; +static u8 sProbeResult; +static u16 sSavedIme; // iwram common struct Time gLocalTime; diff --git a/src/save.c b/src/save.c index 45a75b5dc..cdfd2ae1d 100644 --- a/src/save.c +++ b/src/save.c @@ -626,7 +626,10 @@ static u16 CalculateChecksum(void *data, u16 size) u32 checksum = 0; for (i = 0; i < (size / 4); i++) - checksum += *((u32 *)data)++; + { + checksum += *((u32 *)data); + data += sizeof(u32); + } return ((checksum >> 16) + checksum); } diff --git a/src/scrcmd.c b/src/scrcmd.c index 8d597b887..0326a56a4 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; -IWRAM_DATA 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)); @@ -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; } @@ -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.c b/src/script.c index 27476dba3..34484561c 100644 --- a/src/script.c +++ b/src/script.c @@ -10,12 +10,12 @@ extern const u8* gUnknown_020375C0; // ewram bss -IWRAM_DATA static u8 sScriptContext1Status; -IWRAM_DATA static u32 sUnusedVariable1; -IWRAM_DATA static struct ScriptContext sScriptContext1; -IWRAM_DATA static u32 sUnusedVariable2; -IWRAM_DATA static struct ScriptContext sScriptContext2; -IWRAM_DATA static bool8 sScriptContext2Enabled; +static u8 sScriptContext1Status; +static u32 sUnusedVariable1; +static struct ScriptContext sScriptContext1; +static u32 sUnusedVariable2; +static struct ScriptContext sScriptContext2; +static bool8 sScriptContext2Enabled; extern ScrCmdFunc gScriptCmdTable[]; extern ScrCmdFunc gScriptCmdTableEnd[]; diff --git a/src/script_menu.c b/src/script_menu.c index 082253e35..b0e0ec920 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -41,11 +41,11 @@ const struct MenuAction MultichoiceList_003[] = const struct MenuAction MultichoiceList_004[] = { - {gUnknown_085EADA4, NULL}, - {gUnknown_085EADB5, NULL}, - {gUnknown_085EADC4, NULL}, - {gUnknown_085EADD5, NULL}, - {gUnknown_085EADE7, NULL}, + {gText_CoolnessContest, NULL}, + {gText_BeautyContest, NULL}, + {gText_CutenessContest, NULL}, + {gText_SmartnessContest, NULL}, + {gText_ToughnessContest, NULL}, {gText_Exit, NULL}, }; @@ -1017,8 +1017,8 @@ const u8 *const gUnknown_0858BBEC[] = EWRAM_DATA u8 gUnknown_02039F90 = 0; -IWRAM_DATA u8 gUnknown_03001124[7]; -IWRAM_DATA u32 filler_0300112c; +static u8 gUnknown_03001124[7]; +static u32 filler_0300112c; static void Task_HandleMultichoiceInput(u8); static void Task_HandleYesNoInput(u8); diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c index 2c7a9c775..51bd73b1c 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); @@ -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 ac35a090a..12cb8cd61 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -71,7 +71,7 @@ static EWRAM_DATA struct SecretBaseRegistryMenu *sRegistryMenu = NULL; static void Task_ShowSecretBaseRegistryMenu(u8 taskId); static void BuildRegistryMenuItems(u8 taskId); -static void RegistryMenu_OnCursorMove(int unused, bool8 flag, struct ListMenu *menu); +static void RegistryMenu_OnCursorMove(s32 unused, bool8 flag, struct ListMenu *menu); static void FinalizeRegistryMenu(u8 taskId); static void AddRegistryMenuScrollArrows(u8 taskId); static void HandleRegistryMenuInput(u8 taskId); @@ -932,7 +932,7 @@ static void BuildRegistryMenuItems(u8 taskId) gMultiuseListMenuTemplate.maxShowed = data[3]; } -static void RegistryMenu_OnCursorMove(int unused, bool8 flag, struct ListMenu *menu) +static void RegistryMenu_OnCursorMove(s32 unused, bool8 flag, struct ListMenu *menu) { if (flag != TRUE) PlaySE(SE_SELECT); diff --git a/src/shop.c b/src/shop.c index 7f1a8f27e..bf15568fb 100755 --- a/src/shop.c +++ b/src/shop.c @@ -87,8 +87,8 @@ static void Task_ReturnToItemListAfterItemPurchase(u8 taskId); static void Task_ReturnToItemListAfterDecorationPurchase(u8 taskId); static void Task_HandleShopMenuBuy(u8 taskId); static void Task_HandleShopMenuSell(u8 taskId); -static void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, struct ListMenu *list); -static void BuyMenuPrintPriceInList(u8 windowId, int item, u8 y); +static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list); +static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y); static const struct YesNoFuncTable sShopPurchaseYesNoFuncs = { @@ -521,7 +521,7 @@ static void BuyMenuSetListEntry(struct ListMenuItem *menuItem, u16 item, u8 *nam menuItem->id = item; } -static void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, struct ListMenu *list) +static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list) { const u8 *description; if (onInit != TRUE) @@ -550,7 +550,7 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, s BuyMenuPrint(2, description, 3, 1, 0, 0); } -static void BuyMenuPrintPriceInList(u8 windowId, int item, u8 y) +static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) { u8 x; diff --git a/src/slot_machine.c b/src/slot_machine.c index b853daa39..003ac3327 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -350,7 +350,7 @@ static EWRAM_DATA struct SpriteSheet *sUnknown_0203AB30 = NULL; static EWRAM_DATA struct SlotMachineEwramStruct *sSlotMachine = NULL; // IWRAM bss -static IWRAM_DATA struct SpriteFrameImage *gUnknown_03001188[26]; +static struct SpriteFrameImage *gUnknown_03001188[26]; // Const rom data. extern const struct UnkStruct1 *const gUnknown_083ED048[]; diff --git a/src/sound.c b/src/sound.c index 16f024858..dba4354df 100644 --- a/src/sound.c +++ b/src/sound.c @@ -19,11 +19,11 @@ EWRAM_DATA struct MusicPlayerInfo* gMPlay_PokemonCry = NULL; EWRAM_DATA u8 gPokemonCryBGMDuckingCounter = 0; // iwram bss -IWRAM_DATA static u16 sCurrentMapMusic; -IWRAM_DATA static u16 sNextMapMusic; -IWRAM_DATA static u8 sMapMusicState; -IWRAM_DATA static u8 sMapMusicFadeInSpeed; -IWRAM_DATA static u16 sFanfareCounter; +static u16 sCurrentMapMusic; +static u16 sNextMapMusic; +static u8 sMapMusicState; +static u8 sMapMusicFadeInSpeed; +static u16 sFanfareCounter; // iwram common bool8 gDisableMusic; diff --git a/src/sprite.c b/src/sprite.c index d2ea7889c..e25eac62e 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -285,10 +285,10 @@ static const struct OamDimensions sOamDimensions[3][4] = }; // iwram bss -IWRAM_DATA static u16 sSpriteTileRangeTags[MAX_SPRITES]; -IWRAM_DATA static u16 sSpriteTileRanges[MAX_SPRITES * 2]; -IWRAM_DATA static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT]; -IWRAM_DATA static u16 sSpritePaletteTags[16]; +static u16 sSpriteTileRangeTags[MAX_SPRITES]; +static u16 sSpriteTileRanges[MAX_SPRITES * 2]; +static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT]; +static u16 sSpritePaletteTags[16]; // iwram common u32 gOamMatrixAllocBitmap; diff --git a/src/starter_choose.c b/src/starter_choose.c index 886daa45a..5524d407b 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -51,7 +51,7 @@ void sub_81346DC(struct Sprite *sprite); void sub_813473C(struct Sprite *sprite); void StarterPokemonSpriteCallback(struct Sprite *sprite); -static IWRAM_DATA u16 sStarterChooseWindowId; +static u16 sStarterChooseWindowId; // .rodata const u16 gBirchBagGrassPal[][16] = diff --git a/src/strings.c b/src/strings.c index 8463cfacb..ebc995f13 100644 --- a/src/strings.c +++ b/src/strings.c @@ -610,11 +610,11 @@ 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 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 gUnknown_085EADF9[] = _("DECORATION"); const u8 gUnknown_085EAE04[] = _("PACK UP"); const u8 gUnknown_085EAE0C[] = _("COUNT"); @@ -1591,23 +1591,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/text.c b/src/text.c index 43834eab4..7e4fa7104 100644 --- a/src/text.c +++ b/src/text.c @@ -197,7 +197,7 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, voi gTempTextPrinter.textSpeed = 0; for (j = 0; j < 0x400; ++j) { - if ((u32)RenderFont(&gTempTextPrinter) == 1) + if (RenderFont(&gTempTextPrinter) == 1) break; } @@ -462,6 +462,108 @@ u8 GetLastTextColor(u8 colorType) } } +#ifdef NONMATCHING + +#define GLYPH_COPY(fromY_, toY_, fromX_, toX_, unk) \ +{ \ + u32 i, j, *ptr, toY, fromX, toX, r5, toOrr, bits; \ + u8 *dst; \ + \ + j = fromX_; \ + i = fromY_; \ + ptr = unk; \ + toX = toX_; \ + toY = toY_; \ + fromX = fromX_; \ + \ + for (; i < toY; i++) \ + { \ + r5 = *(ptr++); \ + for (j = fromX; j < toX; j++) \ + { \ + toOrr = r5 & 0xF; \ + if (toOrr) \ + { \ + dst = windowTiles + ((j / 8) * 32) + ((j & 7) / 2) + ((i / 8) * widthOffset) + ((i & 7) * 4); \ + bits = ((j & 1) << 2); \ + *dst = ((toOrr << bits) | (*dst & (0xF0 >> bits))); \ + } \ + r5 >>= 4; \ + } \ + } \ +} + +void CopyGlyphToWindow(struct TextPrinter *textPrinter) +{ + struct Window *win; + struct WindowTemplate *winTempl; + struct Struct_03002F90 *unkStruct; + u32 currX, widthOffset, currY; + s32 r4, r0; + u8 *windowTiles; + + win = &gWindows[textPrinter->printerTemplate.windowId]; + winTempl = &win->window; + + r4 = (winTempl->width * 8) - textPrinter->printerTemplate.currentX; + if (r4 > gUnknown_03002F90.unk80) + r4 = gUnknown_03002F90.unk80; + + r0 = (winTempl->height * 8) - textPrinter->printerTemplate.currentY; + if (r0 > gUnknown_03002F90.unk81) + r0 = gUnknown_03002F90.unk81; + + currX = textPrinter->printerTemplate.currentX; + currY = textPrinter->printerTemplate.currentY; + unkStruct = &gUnknown_03002F90; + windowTiles = win->tileData; + widthOffset = winTempl->width * 32; + + if (r4 <= 8) + { + if (r0 <= 8) + { + GLYPH_COPY(currY, currY + r0, currX, currX + r4, unkStruct->unk0); + } + else + { + u32 temp; + GLYPH_COPY(currY, currY + 8, currX, currX + r4, unkStruct->unk0); + + temp = currY + 8; + GLYPH_COPY(temp, (temp - 8) + r0, currX, currX + r4, unkStruct->unk40); + } + } + else + { + if (r0 <= 8) + { + u32 temp; + GLYPH_COPY(currY, currY + r0, currX, currX + 8, unkStruct->unk0); + + temp = currX + 8; + GLYPH_COPY(currY, currY + r0, temp, (temp - 8) + r4, unkStruct->unk20); + } + else + { + u32 temp; + GLYPH_COPY(currY, currY + 8, currX, currX + 8, unkStruct->unk0); + + temp = currX + 8; + GLYPH_COPY(currY, currY + 8, temp, temp - 8 + r4, unkStruct->unk20); + + temp = currY + 8; + GLYPH_COPY(temp, temp - 8 + r0, currX, currX + 8, unkStruct->unk40); + { + u32 tempX, tempY; + tempX = currX + 8; + tempY = currY + 8; + GLYPH_COPY(tempY, tempY - 8 + r0, tempX, tempX - 8 + r4, unkStruct->unk60); + } + } + } +} +#else NAKED void CopyGlyphToWindow(struct TextPrinter *x) { @@ -1164,6 +1266,7 @@ _080052AA:\n\ bx r0\n\ .pool"); } +#endif // NONMATCHING void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) { diff --git a/src/trade.c b/src/trade.c index f7650ff03..d95e4ebf5 100644 --- a/src/trade.c +++ b/src/trade.c @@ -158,6 +158,9 @@ static EWRAM_DATA struct { /*0xFE*/ u8 unk_FE; } *gUnknown_020322A0 = {NULL}; +#if !defined(NONMATCHING) && MODERN +#define static +#endif static bool32 sub_8077260(void); static void sub_80773D0(void); static void sub_807811C(void); @@ -1548,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); @@ -2779,7 +2782,7 @@ static void sub_8079398(void) } } -static void DisplayMessageAndContinueTask(void) +static void Wait2SecondsAndCreateYesNoMenu(void) { gUnknown_0203229C->unk_A8++; @@ -2918,7 +2921,7 @@ static void sub_80795AC(void) sub_80781C8(); break; case 14: - DisplayMessageAndContinueTask(); + Wait2SecondsAndCreateYesNoMenu(); break; case 15: sub_8079034(); @@ -5829,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/trainer_hill.c b/src/trainer_hill.c index 650a748cb..77c8fcb53 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -915,7 +915,7 @@ void SetHillTrainerFlag(void) } } -const u8 *sub_81D62AC(void) +const u8 *GetTrainerHillTrainerScript(void) { return EventScript_2C83F0; } diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index 6824e8747..047783a85 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -104,7 +104,7 @@ static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 if (paletteTag == 0xFFFF) { sCreatingSpriteTemplate.paletteTag = 0xFFFF; - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20); } else { @@ -130,7 +130,7 @@ static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 static void LoadPicPaletteBySlot(u16 species, u32 otId, u32 personality, u8 paletteSlot, bool8 isTrainer) { if (!isTrainer) - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), paletteSlot * 0x10, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), paletteSlot * 0x10, 0x20); else LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, paletteSlot * 0x10, 0x20); } diff --git a/src/trainer_see.c b/src/trainer_see.c index 9925aa6bc..22b256a99 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -235,7 +235,7 @@ static u8 CheckTrainer(u8 eventObjectId) u8 approachDistance; if (InTrainerHill() == TRUE) - scriptPtr = sub_81D62AC(); + scriptPtr = GetTrainerHillTrainerScript(); else scriptPtr = GetEventObjectScriptPointerByEventObjectId(eventObjectId); @@ -56,9 +56,9 @@ struct { u16 move; } sTV_SecretBaseVisitMonsTemp[10]; -IWRAM_DATA u8 sTVShowMixingNumPlayers; -IWRAM_DATA u8 sTVShowNewsMixingNumPlayers; -IWRAM_DATA s8 sTVShowMixingCurSlot; +static u8 sTVShowMixingNumPlayers; +static u8 sTVShowNewsMixingNumPlayers; +static s8 sTVShowMixingCurSlot; EWRAM_DATA u16 sPokemonAnglerSpecies = 0; EWRAM_DATA u16 sPokemonAnglerAttemptCounters = 0; @@ -69,10 +69,9 @@ EWRAM_DATA ALIGNED(4) u8 sTVShowState = 0; EWRAM_DATA u8 sTVSecretBaseSecretsRandomValues[3] = {}; // Static ROM declarations - -extern const u8 *const sTVBravoTrainerTextGroup[]; -extern const u8 *const sTVBravoTrainerBattleTowerTextGroup[]; - +#if !defined(NONMATCHING) && MODERN +#define static +#endif void ClearPokemonNews(void); u8 GetTVChannelByShowType(u8 kind); u8 FindFirstActiveTVShowThatIsNotAMassOutbreak(void); @@ -1658,12 +1657,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); } @@ -5601,7 +5600,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) @@ -7721,7 +7720,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/union_room.c b/src/union_room.c index 6e7c0965d..01288c8cc 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1,53 +1,54 @@ #include "global.h" -#include "window.h" +#include "alloc.h" +#include "battle.h" +#include "berry_crush.h" #include "bg.h" -#include "random.h" -#include "string_util.h" -#include "task.h" +#include "cable_club.h" +#include "data.h" +#include "decompress.h" +#include "dodrio_berry_picking.h" +#include "dynamic_placeholder_text_util.h" +#include "easy_chat.h" #include "event_data.h" +#include "event_obj_lock.h" +#include "field_control_avatar.h" +#include "field_player_avatar.h" +#include "field_screen_effect.h" +#include "field_weather.h" +#include "international_string_util.h" +#include "librfu.h" #include "link.h" #include "link_rfu.h" -#include "librfu.h" -#include "alloc.h" -#include "menu.h" #include "list_menu.h" +#include "load_save.h" +#include "menu.h" #include "menu_helpers.h" -#include "script.h" -#include "sound.h" -#include "constants/songs.h" -#include "constants/game_stat.h" -#include "constants/maps.h" -#include "constants/species.h" -#include "constants/rgb.h" -#include "constants/battle_frontier.h" -#include "trade.h" -#include "trainer_card.h" +#include "mevent.h" +#include "mystery_gift.h" #include "overworld.h" -#include "battle.h" -#include "load_save.h" -#include "cable_club.h" -#include "field_control_avatar.h" -#include "party_menu.h" -#include "field_weather.h" #include "palette.h" -#include "decompress.h" -#include "start_menu.h" -#include "data.h" -#include "field_screen_effect.h" +#include "party_menu.h" +#include "pokemon_jump.h" +#include "random.h" +#include "script.h" #include "script_pokemon_util_80F87D8.h" -#include "international_string_util.h" -#include "field_player_avatar.h" +#include "sound.h" +#include "start_menu.h" +#include "string_util.h" #include "strings.h" -#include "mevent.h" -#include "dynamic_placeholder_text_util.h" +#include "task.h" +#include "trade.h" +#include "trainer_card.h" #include "union_room.h" -#include "easy_chat.h" -#include "event_obj_lock.h" #include "union_room_chat.h" -#include "berry_crush.h" -#include "mystery_gift.h" #include "union_room_player_avatar.h" -#include "pokemon_jump.h" +#include "window.h" +#include "constants/battle_frontier.h" +#include "constants/game_stat.h" +#include "constants/maps.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/species.h" EWRAM_DATA u8 gUnknown_02022C20[12] = {}; EWRAM_DATA u8 gUnknown_02022C2C = 0; @@ -60,9 +61,9 @@ EWRAM_DATA u8 gUnknown_02022C3E = 0; EWRAM_DATA struct TradeUnkStruct gUnknown_02022C40 = {}; // IWRAM vars -IWRAM_DATA struct UnkStruct_Leader *gUnknown_03000DA0; -IWRAM_DATA struct UnkStruct_Group *gUnknown_03000DA4; -IWRAM_DATA struct UnkStruct_URoom *gUnknown_03000DA8; +static struct UnkStruct_Leader *gUnknown_03000DA0; +static struct UnkStruct_Group *gUnknown_03000DA4; +static struct UnkStruct_URoom *gUnknown_03000DA8; // this file's functions void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5); @@ -98,7 +99,6 @@ bool32 sub_8017678(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1) u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId); void sub_801807C(struct TradeUnkStruct *arg0); void sub_801AC54(void); -void sub_802493C(u8 monId, MainCallback callback); void sub_80149D8(void); void MG_DrawTextBorder(u8 windowId); s8 mevent_message_print_and_prompt_yes_no(u8 *textState, u8 *arg1, u8 arg2, const u8 *str); diff --git a/src/union_room_battle.c b/src/union_room_battle.c index 321b49092..79d12291d 100644 --- a/src/union_room_battle.c +++ b/src/union_room_battle.c @@ -40,7 +40,7 @@ struct UnkStruct_2022C6C s16 a0; }; -IWRAM_DATA struct UnkStruct_3000DAC * gUnknown_03000DAC; +static struct UnkStruct_3000DAC * gUnknown_03000DAC; EWRAM_DATA struct UnkStruct_2022C6C * gUnknown_02022C6C = NULL; diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index f28b651cc..655f38def 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -85,6 +85,10 @@ struct UsePokeblockStruct /*0x7FD0*/ struct UsePokeblockSubStruct info; }; +#define TAG_TILE_CONDITION_UP_DOWN 0 +#define TAG_PAL_CONDITION_UP_DOWN 0 +#define TAG_PAL_POKEBLOCK_CONDITION 1 + extern void sub_81D21DC(u8); // this file's functions @@ -130,26 +134,12 @@ static u8 sub_8168048(void); void sub_8168180(struct Sprite *sprite); void sub_81681B4(struct Sprite *sprite); void sub_8168168(struct Sprite *sprite); +void sub_8168374(struct Sprite *sprite); -extern const struct BgTemplate gUnknown_085DFCCC[4]; -extern const struct WindowTemplate gUnknown_085DFCDC[]; -extern const struct WindowTemplate sUsePokeblockYesNoWinTemplate[]; -extern const u8* sContestStatNames[]; -extern const u32 gUnknown_085DFCB0[]; -extern const u8 gUnknown_085DFCC4[]; -extern const struct SpriteSheet gSpriteSheet_ConditionUpDown; -extern const struct SpritePalette gSpritePalette_ConditionUpDown; -extern const struct SpriteTemplate gSpriteTemplate_085DFD5C; -extern const s16 gUnknown_085DFD28[][2]; -extern const u32 gUnknown_085DFB60[]; -extern const u32 gUnknown_085DFA80[]; -extern const u32 gUnknown_085DFA60[]; -extern const u32 gUnknown_085DFC0C[]; extern const u16 gUnknown_086231E8[]; extern const u16 gUnknown_08623208[]; -extern const u8 gUnknown_085DFCC9[]; -extern const struct SpritePalette gUnknown_085DFDB8; -extern const struct SpriteTemplate gUnknown_085DFDA0; +extern const struct SpritePalette gSpritePalette_085DFDB8; +extern const struct SpriteTemplate gSpriteTemplate_085DFDA0; // ram variables EWRAM_DATA struct UsePokeblockSubStruct *gUnknown_0203BC90 = NULL; @@ -165,6 +155,245 @@ EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL; // const rom data // todo: make it static once the file is decompiled +const u32 gUnknown_085DFA60[] = INCBIN_U32("graphics/interface/85DFA60.bin"); +const u32 gUnknown_085DFA80[] = INCBIN_U32("graphics/interface/85DFA80.4bpp"); +const u32 gUnknown_085DFB60[] = INCBIN_U32("graphics/interface/85DFB60.bin"); +const u32 gUnknown_085DFC0C[] = INCBIN_U32("graphics/interface/85DFC0C.bin"); + +const u32 gUnknown_085DFCB0[] = +{ + MON_DATA_COOL, + MON_DATA_TOUGH, + MON_DATA_SMART, + MON_DATA_CUTE, + MON_DATA_BEAUTY +}; + +const u8 gUnknown_085DFCC4[] = +{ + 0, // Spicy/Cool + 4, // Dry/Beauty + 3, // Sweet/Cute + 2, // Bitter/Smart + 1 // Sour/Tough +}; + +const u8 gUnknown_085DFCC9[] = +{ + 0, + 8, + 1 +}; + +const struct BgTemplate gUnknown_085DFCCC[4] = +{ + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 0x1E, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 0x1D, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x100 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 0x17, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + } +}; + +const struct WindowTemplate gUnknown_085DFCDC[] = +{ + { + .bg = 0, + .tilemapLeft = 0xD, + .tilemapTop = 1, + .width = 0xD, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 1 + }, + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0xE, + .width = 0xB, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x35 + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0x11, + .width = 0x1C, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x4B + }, + DUMMY_WIN_TEMPLATE +}; + +const struct WindowTemplate sUsePokeblockYesNoWinTemplate = +{ + .bg = 0, + .tilemapLeft = 0x18, + .tilemapTop = 0xB, + .width = 5, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x83 +}; + +const u8 *const sContestStatNames[] = +{ + gText_Coolness, + gText_Toughness, + gText_Smartness, + gText_Cuteness, + gText_Beauty3 +}; + +const struct SpriteSheet gSpriteSheet_ConditionUpDown = +{ + gUsePokeblockUpDown_Gfx, 0x200, TAG_TILE_CONDITION_UP_DOWN +}; + +const struct SpritePalette gSpritePalette_ConditionUpDown = +{ + gUsePokeblockUpDown_Pal, TAG_PAL_CONDITION_UP_DOWN +}; + +const s16 gUnknown_085DFD28[][2] = +{ + {0x9C, 0x24}, + {0x75, 0x3B}, + {0x75, 0x76}, + {0xC5, 0x76}, + {0xC5, 0x3B} +}; + +const struct OamData gOamData_085DFD3C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +const union AnimCmd gSpriteAnim_085DFD44[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_085DFD4C[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_085DFD54[] = +{ + gSpriteAnim_085DFD44, + gSpriteAnim_085DFD4C +}; + +const struct SpriteTemplate gSpriteTemplate_085DFD5C = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gOamData_085DFD3C, + .anims = gSpriteAnimTable_085DFD54, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct OamData gOamData_085DFD74 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +const union AnimCmd gSpriteAnim_085DFD7C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_085DFD84[] = +{ + ANIMCMD_FRAME(32, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_085DFD8C[] = +{ + ANIMCMD_FRAME(64, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_085DFD94[] = +{ + gSpriteAnim_085DFD7C, + gSpriteAnim_085DFD84, + gSpriteAnim_085DFD8C +}; + +const struct SpriteTemplate gSpriteTemplate_085DFDA0 = +{ + .tileTag = 1, + .paletteTag = 1, + .oam = &gOamData_085DFD74, + .anims = gSpriteAnimTable_085DFD94, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8168374, +}; + +const struct SpritePalette gSpritePalette_085DFDB8 = +{ + gUsePokeblockCondition_Pal, TAG_PAL_POKEBLOCK_CONDITION +}; + // code void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void)) { @@ -618,7 +847,7 @@ void sub_8166D44(void) AddTextPrinterParameterized(2, 1, gStringVar4, 0, 1, 0, NULL); PutWindowTilemap(2); CopyWindowToVram(2, 3); - CreateYesNoMenu(sUsePokeblockYesNoWinTemplate, 151, 14, 0); + CreateYesNoMenu(&sUsePokeblockYesNoWinTemplate, 151, 14, 0); } s8 sub_8166DE4(void) @@ -1373,7 +1602,7 @@ static void sub_8168248(void) struct CompressedSpriteSheet spriteSheet; struct SpritePalette spritePalette; - spritePalette = gUnknown_085DFDB8; + spritePalette = gSpritePalette_085DFDB8; spriteSheet.data = gUsePokeblockCondition_Gfx; spriteSheet.size = 0x800; spriteSheet.tag = 1; @@ -1388,7 +1617,7 @@ static void sub_8168294(void) int yStart = 17; int var = 8; struct Sprite **sprites = gUnknown_0203BCAC->field_7B44; - const struct SpriteTemplate *template = &gUnknown_085DFDA0; + const struct SpriteTemplate *template = &gSpriteTemplate_085DFDA0; for (i = 0, xDiff = 64, xStart = -96; i < 2; i++) { diff --git a/sym_bss.txt b/sym_bss.txt index 037c8d892..29b30f2db 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -47,20 +47,11 @@ .include "src/multiboot.o" .include "src/mirage_tower.o" .include "src/berry_fix_program.o" - - @ pokenav -gUnknown_030012BC: @ 30012BC - .space 0x4 - -gUnknown_030012C0: @ 30012C0 - .space 0x4 - -gUnknown_030012C4: @ 30012C4 - .space 0x4 - + .include "src/pokenav_unk_7.o" + .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/sym_common.txt b/sym_common.txt index 17dbf5c41..f277ed0f2 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -45,29 +45,8 @@ .space 0x44 -gUnknown_03006370: @ 3006370 - .space 0x10 - + .include "ereader_screen.o" .include "m4a.o" .include "agb_flash.o" - -gRfuState: @ 3007868 - .space 0x8 - -gUnknown_03007870: @ 3007870 - .space 0x10 - -gUnknown_03007880: @ 3007880 - .space 0x10 - -gUnknown_03007890: @ 3007890 - .space 0x4 - -gUnknown_03007894: @ 3007894 - .space 0x4 - -gUnknown_03007898: @ 3007898 - .space 0x8 - -gUnknown_030078A0: @ 30078A0 - .space 0xC + .include "librfu_stwi.o" + .include "librfu.o" diff --git a/sym_ewram.txt b/sym_ewram.txt index 5fbcba779..3de0c45cb 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -18,14 +18,7 @@ .include "src/berry_crush.o" .include "src/berry_powder.o" .include "src/dodrio_berry_picking.o" - - @ pokemon_jump -gUnknown_02022CFC: @ 2022CFC - .space 0x4 - -gUnknown_02022D00: @ 2022D00 - .space 0x4 - + .include "src/pokemon_jump.o" .include "src/main_menu.o" .include "src/battle_controllers.o" .include "src/rom_8034C54.o" diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile index e5cb6ad31..77df29152 100644 --- a/tools/aif2pcm/Makefile +++ b/tools/aif2pcm/Makefile @@ -1,4 +1,4 @@ -CC = gcc +CC ?= gcc CFLAGS = -Wall -Wextra -Wno-switch -Werror -std=c11 -O2 @@ -6,7 +6,10 @@ LIBS = -lm SRCS = main.c extended.c -.PHONY: clean +.PHONY: all clean + +all: aif2pcm + @: aif2pcm: $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile index 73f78980e..52806e39c 100644 --- a/tools/bin2c/Makefile +++ b/tools/bin2c/Makefile @@ -1,11 +1,14 @@ -CC = gcc +CC ?= gcc CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -.PHONY: clean +.PHONY: all clean SRCS = bin2c.c +all: bin2c + @: + bin2c: $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile index f12c8cc4f..91a60a9e4 100644 --- a/tools/gbafix/Makefile +++ b/tools/gbafix/Makefile @@ -1,8 +1,11 @@ -CC = gcc -.PHONY: clean +CC ?= gcc +.PHONY: all clean SRCS = gbafix.c +all: gbafix + @: + gbafix: $(SRCS) $(CC) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/gbafix/elf.h b/tools/gbafix/elf.h new file mode 100644 index 000000000..79d3b974b --- /dev/null +++ b/tools/gbafix/elf.h @@ -0,0 +1,3147 @@ +/* +From musl include/elf.h + +Copyright © 2005-2014 Rich Felker, et al. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef _ELF_H +#define _ELF_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdint.h> + +typedef uint16_t Elf32_Half; +typedef uint16_t Elf64_Half; + +typedef uint32_t Elf32_Word; +typedef int32_t Elf32_Sword; +typedef uint32_t Elf64_Word; +typedef int32_t Elf64_Sword; + +typedef uint64_t Elf32_Xword; +typedef int64_t Elf32_Sxword; +typedef uint64_t Elf64_Xword; +typedef int64_t Elf64_Sxword; + +typedef uint32_t Elf32_Addr; +typedef uint64_t Elf64_Addr; + +typedef uint32_t Elf32_Off; +typedef uint64_t Elf64_Off; + +typedef uint16_t Elf32_Section; +typedef uint16_t Elf64_Section; + +typedef Elf32_Half Elf32_Versym; +typedef Elf64_Half Elf64_Versym; + +#define EI_NIDENT (16) + +typedef struct { + unsigned char e_ident[EI_NIDENT]; + Elf32_Half e_type; + Elf32_Half e_machine; + Elf32_Word e_version; + Elf32_Addr e_entry; + Elf32_Off e_phoff; + Elf32_Off e_shoff; + Elf32_Word e_flags; + Elf32_Half e_ehsize; + Elf32_Half e_phentsize; + Elf32_Half e_phnum; + Elf32_Half e_shentsize; + Elf32_Half e_shnum; + Elf32_Half e_shstrndx; +} Elf32_Ehdr; + +typedef struct { + unsigned char e_ident[EI_NIDENT]; + Elf64_Half e_type; + Elf64_Half e_machine; + Elf64_Word e_version; + Elf64_Addr e_entry; + Elf64_Off e_phoff; + Elf64_Off e_shoff; + Elf64_Word e_flags; + Elf64_Half e_ehsize; + Elf64_Half e_phentsize; + Elf64_Half e_phnum; + Elf64_Half e_shentsize; + Elf64_Half e_shnum; + Elf64_Half e_shstrndx; +} Elf64_Ehdr; + +#define EI_MAG0 0 +#define ELFMAG0 0x7f + +#define EI_MAG1 1 +#define ELFMAG1 'E' + +#define EI_MAG2 2 +#define ELFMAG2 'L' + +#define EI_MAG3 3 +#define ELFMAG3 'F' + + +#define ELFMAG "\177ELF" +#define SELFMAG 4 + +#define EI_CLASS 4 +#define ELFCLASSNONE 0 +#define ELFCLASS32 1 +#define ELFCLASS64 2 +#define ELFCLASSNUM 3 + +#define EI_DATA 5 +#define ELFDATANONE 0 +#define ELFDATA2LSB 1 +#define ELFDATA2MSB 2 +#define ELFDATANUM 3 + +#define EI_VERSION 6 + + +#define EI_OSABI 7 +#define ELFOSABI_NONE 0 +#define ELFOSABI_SYSV 0 +#define ELFOSABI_HPUX 1 +#define ELFOSABI_NETBSD 2 +#define ELFOSABI_LINUX 3 +#define ELFOSABI_GNU 3 +#define ELFOSABI_SOLARIS 6 +#define ELFOSABI_AIX 7 +#define ELFOSABI_IRIX 8 +#define ELFOSABI_FREEBSD 9 +#define ELFOSABI_TRU64 10 +#define ELFOSABI_MODESTO 11 +#define ELFOSABI_OPENBSD 12 +#define ELFOSABI_ARM 97 +#define ELFOSABI_STANDALONE 255 + +#define EI_ABIVERSION 8 + +#define EI_PAD 9 + + + +#define ET_NONE 0 +#define ET_REL 1 +#define ET_EXEC 2 +#define ET_DYN 3 +#define ET_CORE 4 +#define ET_NUM 5 +#define ET_LOOS 0xfe00 +#define ET_HIOS 0xfeff +#define ET_LOPROC 0xff00 +#define ET_HIPROC 0xffff + + + +#define EM_NONE 0 +#define EM_M32 1 +#define EM_SPARC 2 +#define EM_386 3 +#define EM_68K 4 +#define EM_88K 5 +#define EM_860 7 +#define EM_MIPS 8 +#define EM_S370 9 +#define EM_MIPS_RS3_LE 10 + +#define EM_PARISC 15 +#define EM_VPP500 17 +#define EM_SPARC32PLUS 18 +#define EM_960 19 +#define EM_PPC 20 +#define EM_PPC64 21 +#define EM_S390 22 + +#define EM_V800 36 +#define EM_FR20 37 +#define EM_RH32 38 +#define EM_RCE 39 +#define EM_ARM 40 +#define EM_FAKE_ALPHA 41 +#define EM_SH 42 +#define EM_SPARCV9 43 +#define EM_TRICORE 44 +#define EM_ARC 45 +#define EM_H8_300 46 +#define EM_H8_300H 47 +#define EM_H8S 48 +#define EM_H8_500 49 +#define EM_IA_64 50 +#define EM_MIPS_X 51 +#define EM_COLDFIRE 52 +#define EM_68HC12 53 +#define EM_MMA 54 +#define EM_PCP 55 +#define EM_NCPU 56 +#define EM_NDR1 57 +#define EM_STARCORE 58 +#define EM_ME16 59 +#define EM_ST100 60 +#define EM_TINYJ 61 +#define EM_X86_64 62 +#define EM_PDSP 63 + +#define EM_FX66 66 +#define EM_ST9PLUS 67 +#define EM_ST7 68 +#define EM_68HC16 69 +#define EM_68HC11 70 +#define EM_68HC08 71 +#define EM_68HC05 72 +#define EM_SVX 73 +#define EM_ST19 74 +#define EM_VAX 75 +#define EM_CRIS 76 +#define EM_JAVELIN 77 +#define EM_FIREPATH 78 +#define EM_ZSP 79 +#define EM_MMIX 80 +#define EM_HUANY 81 +#define EM_PRISM 82 +#define EM_AVR 83 +#define EM_FR30 84 +#define EM_D10V 85 +#define EM_D30V 86 +#define EM_V850 87 +#define EM_M32R 88 +#define EM_MN10300 89 +#define EM_MN10200 90 +#define EM_PJ 91 +#define EM_OR1K 92 +#define EM_OPENRISC 92 +#define EM_ARC_A5 93 +#define EM_ARC_COMPACT 93 +#define EM_XTENSA 94 +#define EM_VIDEOCORE 95 +#define EM_TMM_GPP 96 +#define EM_NS32K 97 +#define EM_TPC 98 +#define EM_SNP1K 99 +#define EM_ST200 100 +#define EM_IP2K 101 +#define EM_MAX 102 +#define EM_CR 103 +#define EM_F2MC16 104 +#define EM_MSP430 105 +#define EM_BLACKFIN 106 +#define EM_SE_C33 107 +#define EM_SEP 108 +#define EM_ARCA 109 +#define EM_UNICORE 110 +#define EM_EXCESS 111 +#define EM_DXP 112 +#define EM_ALTERA_NIOS2 113 +#define EM_CRX 114 +#define EM_XGATE 115 +#define EM_C166 116 +#define EM_M16C 117 +#define EM_DSPIC30F 118 +#define EM_CE 119 +#define EM_M32C 120 +#define EM_TSK3000 131 +#define EM_RS08 132 +#define EM_SHARC 133 +#define EM_ECOG2 134 +#define EM_SCORE7 135 +#define EM_DSP24 136 +#define EM_VIDEOCORE3 137 +#define EM_LATTICEMICO32 138 +#define EM_SE_C17 139 +#define EM_TI_C6000 140 +#define EM_TI_C2000 141 +#define EM_TI_C5500 142 +#define EM_TI_ARP32 143 +#define EM_TI_PRU 144 +#define EM_MMDSP_PLUS 160 +#define EM_CYPRESS_M8C 161 +#define EM_R32C 162 +#define EM_TRIMEDIA 163 +#define EM_QDSP6 164 +#define EM_8051 165 +#define EM_STXP7X 166 +#define EM_NDS32 167 +#define EM_ECOG1X 168 +#define EM_MAXQ30 169 +#define EM_XIMO16 170 +#define EM_MANIK 171 +#define EM_CRAYNV2 172 +#define EM_RX 173 +#define EM_METAG 174 +#define EM_MCST_ELBRUS 175 +#define EM_ECOG16 176 +#define EM_CR16 177 +#define EM_ETPU 178 +#define EM_SLE9X 179 +#define EM_L10M 180 +#define EM_K10M 181 +#define EM_AARCH64 183 +#define EM_AVR32 185 +#define EM_STM8 186 +#define EM_TILE64 187 +#define EM_TILEPRO 188 +#define EM_MICROBLAZE 189 +#define EM_CUDA 190 +#define EM_TILEGX 191 +#define EM_CLOUDSHIELD 192 +#define EM_COREA_1ST 193 +#define EM_COREA_2ND 194 +#define EM_ARC_COMPACT2 195 +#define EM_OPEN8 196 +#define EM_RL78 197 +#define EM_VIDEOCORE5 198 +#define EM_78KOR 199 +#define EM_56800EX 200 +#define EM_BA1 201 +#define EM_BA2 202 +#define EM_XCORE 203 +#define EM_MCHP_PIC 204 +#define EM_KM32 210 +#define EM_KMX32 211 +#define EM_EMX16 212 +#define EM_EMX8 213 +#define EM_KVARC 214 +#define EM_CDP 215 +#define EM_COGE 216 +#define EM_COOL 217 +#define EM_NORC 218 +#define EM_CSR_KALIMBA 219 +#define EM_Z80 220 +#define EM_VISIUM 221 +#define EM_FT32 222 +#define EM_MOXIE 223 +#define EM_AMDGPU 224 +#define EM_RISCV 243 +#define EM_BPF 247 +#define EM_NUM 248 + +#define EM_ALPHA 0x9026 + +#define EV_NONE 0 +#define EV_CURRENT 1 +#define EV_NUM 2 + +typedef struct { + Elf32_Word sh_name; + Elf32_Word sh_type; + Elf32_Word sh_flags; + Elf32_Addr sh_addr; + Elf32_Off sh_offset; + Elf32_Word sh_size; + Elf32_Word sh_link; + Elf32_Word sh_info; + Elf32_Word sh_addralign; + Elf32_Word sh_entsize; +} Elf32_Shdr; + +typedef struct { + Elf64_Word sh_name; + Elf64_Word sh_type; + Elf64_Xword sh_flags; + Elf64_Addr sh_addr; + Elf64_Off sh_offset; + Elf64_Xword sh_size; + Elf64_Word sh_link; + Elf64_Word sh_info; + Elf64_Xword sh_addralign; + Elf64_Xword sh_entsize; +} Elf64_Shdr; + + + +#define SHN_UNDEF 0 +#define SHN_LORESERVE 0xff00 +#define SHN_LOPROC 0xff00 +#define SHN_BEFORE 0xff00 + +#define SHN_AFTER 0xff01 + +#define SHN_HIPROC 0xff1f +#define SHN_LOOS 0xff20 +#define SHN_HIOS 0xff3f +#define SHN_ABS 0xfff1 +#define SHN_COMMON 0xfff2 +#define SHN_XINDEX 0xffff +#define SHN_HIRESERVE 0xffff + + + +#define SHT_NULL 0 +#define SHT_PROGBITS 1 +#define SHT_SYMTAB 2 +#define SHT_STRTAB 3 +#define SHT_RELA 4 +#define SHT_HASH 5 +#define SHT_DYNAMIC 6 +#define SHT_NOTE 7 +#define SHT_NOBITS 8 +#define SHT_REL 9 +#define SHT_SHLIB 10 +#define SHT_DYNSYM 11 +#define SHT_INIT_ARRAY 14 +#define SHT_FINI_ARRAY 15 +#define SHT_PREINIT_ARRAY 16 +#define SHT_GROUP 17 +#define SHT_SYMTAB_SHNDX 18 +#define SHT_NUM 19 +#define SHT_LOOS 0x60000000 +#define SHT_GNU_ATTRIBUTES 0x6ffffff5 +#define SHT_GNU_HASH 0x6ffffff6 +#define SHT_GNU_LIBLIST 0x6ffffff7 +#define SHT_CHECKSUM 0x6ffffff8 +#define SHT_LOSUNW 0x6ffffffa +#define SHT_SUNW_move 0x6ffffffa +#define SHT_SUNW_COMDAT 0x6ffffffb +#define SHT_SUNW_syminfo 0x6ffffffc +#define SHT_GNU_verdef 0x6ffffffd +#define SHT_GNU_verneed 0x6ffffffe +#define SHT_GNU_versym 0x6fffffff +#define SHT_HISUNW 0x6fffffff +#define SHT_HIOS 0x6fffffff +#define SHT_LOPROC 0x70000000 +#define SHT_HIPROC 0x7fffffff +#define SHT_LOUSER 0x80000000 +#define SHT_HIUSER 0x8fffffff + +#define SHF_WRITE (1 << 0) +#define SHF_ALLOC (1 << 1) +#define SHF_EXECINSTR (1 << 2) +#define SHF_MERGE (1 << 4) +#define SHF_STRINGS (1 << 5) +#define SHF_INFO_LINK (1 << 6) +#define SHF_LINK_ORDER (1 << 7) +#define SHF_OS_NONCONFORMING (1 << 8) + +#define SHF_GROUP (1 << 9) +#define SHF_TLS (1 << 10) +#define SHF_COMPRESSED (1 << 11) +#define SHF_MASKOS 0x0ff00000 +#define SHF_MASKPROC 0xf0000000 +#define SHF_ORDERED (1 << 30) +#define SHF_EXCLUDE (1U << 31) + +typedef struct { + Elf32_Word ch_type; + Elf32_Word ch_size; + Elf32_Word ch_addralign; +} Elf32_Chdr; + +typedef struct { + Elf64_Word ch_type; + Elf64_Word ch_reserved; + Elf64_Xword ch_size; + Elf64_Xword ch_addralign; +} Elf64_Chdr; + +#define ELFCOMPRESS_ZLIB 1 +#define ELFCOMPRESS_LOOS 0x60000000 +#define ELFCOMPRESS_HIOS 0x6fffffff +#define ELFCOMPRESS_LOPROC 0x70000000 +#define ELFCOMPRESS_HIPROC 0x7fffffff + + +#define GRP_COMDAT 0x1 + +typedef struct { + Elf32_Word st_name; + Elf32_Addr st_value; + Elf32_Word st_size; + unsigned char st_info; + unsigned char st_other; + Elf32_Section st_shndx; +} Elf32_Sym; + +typedef struct { + Elf64_Word st_name; + unsigned char st_info; + unsigned char st_other; + Elf64_Section st_shndx; + Elf64_Addr st_value; + Elf64_Xword st_size; +} Elf64_Sym; + +typedef struct { + Elf32_Half si_boundto; + Elf32_Half si_flags; +} Elf32_Syminfo; + +typedef struct { + Elf64_Half si_boundto; + Elf64_Half si_flags; +} Elf64_Syminfo; + +#define SYMINFO_BT_SELF 0xffff +#define SYMINFO_BT_PARENT 0xfffe +#define SYMINFO_BT_LOWRESERVE 0xff00 + +#define SYMINFO_FLG_DIRECT 0x0001 +#define SYMINFO_FLG_PASSTHRU 0x0002 +#define SYMINFO_FLG_COPY 0x0004 +#define SYMINFO_FLG_LAZYLOAD 0x0008 + +#define SYMINFO_NONE 0 +#define SYMINFO_CURRENT 1 +#define SYMINFO_NUM 2 + +#define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4) +#define ELF32_ST_TYPE(val) ((val) & 0xf) +#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) + +#define ELF64_ST_BIND(val) ELF32_ST_BIND (val) +#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val) +#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type)) + +#define STB_LOCAL 0 +#define STB_GLOBAL 1 +#define STB_WEAK 2 +#define STB_NUM 3 +#define STB_LOOS 10 +#define STB_GNU_UNIQUE 10 +#define STB_HIOS 12 +#define STB_LOPROC 13 +#define STB_HIPROC 15 + +#define STT_NOTYPE 0 +#define STT_OBJECT 1 +#define STT_FUNC 2 +#define STT_SECTION 3 +#define STT_FILE 4 +#define STT_COMMON 5 +#define STT_TLS 6 +#define STT_NUM 7 +#define STT_LOOS 10 +#define STT_GNU_IFUNC 10 +#define STT_HIOS 12 +#define STT_LOPROC 13 +#define STT_HIPROC 15 + +#define STN_UNDEF 0 + +#define ELF32_ST_VISIBILITY(o) ((o) & 0x03) +#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) + +#define STV_DEFAULT 0 +#define STV_INTERNAL 1 +#define STV_HIDDEN 2 +#define STV_PROTECTED 3 + + + + +typedef struct { + Elf32_Addr r_offset; + Elf32_Word r_info; +} Elf32_Rel; + +typedef struct { + Elf64_Addr r_offset; + Elf64_Xword r_info; +} Elf64_Rel; + + + +typedef struct { + Elf32_Addr r_offset; + Elf32_Word r_info; + Elf32_Sword r_addend; +} Elf32_Rela; + +typedef struct { + Elf64_Addr r_offset; + Elf64_Xword r_info; + Elf64_Sxword r_addend; +} Elf64_Rela; + + + +#define ELF32_R_SYM(val) ((val) >> 8) +#define ELF32_R_TYPE(val) ((val) & 0xff) +#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff)) + +#define ELF64_R_SYM(i) ((i) >> 32) +#define ELF64_R_TYPE(i) ((i) & 0xffffffff) +#define ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type)) + + + +typedef struct { + Elf32_Word p_type; + Elf32_Off p_offset; + Elf32_Addr p_vaddr; + Elf32_Addr p_paddr; + Elf32_Word p_filesz; + Elf32_Word p_memsz; + Elf32_Word p_flags; + Elf32_Word p_align; +} Elf32_Phdr; + +typedef struct { + Elf64_Word p_type; + Elf64_Word p_flags; + Elf64_Off p_offset; + Elf64_Addr p_vaddr; + Elf64_Addr p_paddr; + Elf64_Xword p_filesz; + Elf64_Xword p_memsz; + Elf64_Xword p_align; +} Elf64_Phdr; + + + +#define PT_NULL 0 +#define PT_LOAD 1 +#define PT_DYNAMIC 2 +#define PT_INTERP 3 +#define PT_NOTE 4 +#define PT_SHLIB 5 +#define PT_PHDR 6 +#define PT_TLS 7 +#define PT_NUM 8 +#define PT_LOOS 0x60000000 +#define PT_GNU_EH_FRAME 0x6474e550 +#define PT_GNU_STACK 0x6474e551 +#define PT_GNU_RELRO 0x6474e552 +#define PT_LOSUNW 0x6ffffffa +#define PT_SUNWBSS 0x6ffffffa +#define PT_SUNWSTACK 0x6ffffffb +#define PT_HISUNW 0x6fffffff +#define PT_HIOS 0x6fffffff +#define PT_LOPROC 0x70000000 +#define PT_HIPROC 0x7fffffff + + +#define PN_XNUM 0xffff + + +#define PF_X (1 << 0) +#define PF_W (1 << 1) +#define PF_R (1 << 2) +#define PF_MASKOS 0x0ff00000 +#define PF_MASKPROC 0xf0000000 + + + +#define NT_PRSTATUS 1 +#define NT_FPREGSET 2 +#define NT_PRPSINFO 3 +#define NT_PRXREG 4 +#define NT_TASKSTRUCT 4 +#define NT_PLATFORM 5 +#define NT_AUXV 6 +#define NT_GWINDOWS 7 +#define NT_ASRS 8 +#define NT_PSTATUS 10 +#define NT_PSINFO 13 +#define NT_PRCRED 14 +#define NT_UTSNAME 15 +#define NT_LWPSTATUS 16 +#define NT_LWPSINFO 17 +#define NT_PRFPXREG 20 +#define NT_SIGINFO 0x53494749 +#define NT_FILE 0x46494c45 +#define NT_PRXFPREG 0x46e62b7f +#define NT_PPC_VMX 0x100 +#define NT_PPC_SPE 0x101 +#define NT_PPC_VSX 0x102 +#define NT_386_TLS 0x200 +#define NT_386_IOPERM 0x201 +#define NT_X86_XSTATE 0x202 +#define NT_S390_HIGH_GPRS 0x300 +#define NT_S390_TIMER 0x301 +#define NT_S390_TODCMP 0x302 +#define NT_S390_TODPREG 0x303 +#define NT_S390_CTRS 0x304 +#define NT_S390_PREFIX 0x305 +#define NT_S390_LAST_BREAK 0x306 +#define NT_S390_SYSTEM_CALL 0x307 +#define NT_S390_TDB 0x308 +#define NT_ARM_VFP 0x400 +#define NT_ARM_TLS 0x401 +#define NT_ARM_HW_BREAK 0x402 +#define NT_ARM_HW_WATCH 0x403 +#define NT_ARM_SYSTEM_CALL 0x404 +#define NT_ARM_SVE 0x405 +#define NT_METAG_CBUF 0x500 +#define NT_METAG_RPIPE 0x501 +#define NT_METAG_TLS 0x502 +#define NT_VERSION 1 + + + + +typedef struct { + Elf32_Sword d_tag; + union { + Elf32_Word d_val; + Elf32_Addr d_ptr; + } d_un; +} Elf32_Dyn; + +typedef struct { + Elf64_Sxword d_tag; + union { + Elf64_Xword d_val; + Elf64_Addr d_ptr; + } d_un; +} Elf64_Dyn; + + + +#define DT_NULL 0 +#define DT_NEEDED 1 +#define DT_PLTRELSZ 2 +#define DT_PLTGOT 3 +#define DT_HASH 4 +#define DT_STRTAB 5 +#define DT_SYMTAB 6 +#define DT_RELA 7 +#define DT_RELASZ 8 +#define DT_RELAENT 9 +#define DT_STRSZ 10 +#define DT_SYMENT 11 +#define DT_INIT 12 +#define DT_FINI 13 +#define DT_SONAME 14 +#define DT_RPATH 15 +#define DT_SYMBOLIC 16 +#define DT_REL 17 +#define DT_RELSZ 18 +#define DT_RELENT 19 +#define DT_PLTREL 20 +#define DT_DEBUG 21 +#define DT_TEXTREL 22 +#define DT_JMPREL 23 +#define DT_BIND_NOW 24 +#define DT_INIT_ARRAY 25 +#define DT_FINI_ARRAY 26 +#define DT_INIT_ARRAYSZ 27 +#define DT_FINI_ARRAYSZ 28 +#define DT_RUNPATH 29 +#define DT_FLAGS 30 +#define DT_ENCODING 32 +#define DT_PREINIT_ARRAY 32 +#define DT_PREINIT_ARRAYSZ 33 +#define DT_NUM 34 +#define DT_LOOS 0x6000000d +#define DT_HIOS 0x6ffff000 +#define DT_LOPROC 0x70000000 +#define DT_HIPROC 0x7fffffff +#define DT_PROCNUM DT_MIPS_NUM + +#define DT_VALRNGLO 0x6ffffd00 +#define DT_GNU_PRELINKED 0x6ffffdf5 +#define DT_GNU_CONFLICTSZ 0x6ffffdf6 +#define DT_GNU_LIBLISTSZ 0x6ffffdf7 +#define DT_CHECKSUM 0x6ffffdf8 +#define DT_PLTPADSZ 0x6ffffdf9 +#define DT_MOVEENT 0x6ffffdfa +#define DT_MOVESZ 0x6ffffdfb +#define DT_FEATURE_1 0x6ffffdfc +#define DT_POSFLAG_1 0x6ffffdfd + +#define DT_SYMINSZ 0x6ffffdfe +#define DT_SYMINENT 0x6ffffdff +#define DT_VALRNGHI 0x6ffffdff +#define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) +#define DT_VALNUM 12 + +#define DT_ADDRRNGLO 0x6ffffe00 +#define DT_GNU_HASH 0x6ffffef5 +#define DT_TLSDESC_PLT 0x6ffffef6 +#define DT_TLSDESC_GOT 0x6ffffef7 +#define DT_GNU_CONFLICT 0x6ffffef8 +#define DT_GNU_LIBLIST 0x6ffffef9 +#define DT_CONFIG 0x6ffffefa +#define DT_DEPAUDIT 0x6ffffefb +#define DT_AUDIT 0x6ffffefc +#define DT_PLTPAD 0x6ffffefd +#define DT_MOVETAB 0x6ffffefe +#define DT_SYMINFO 0x6ffffeff +#define DT_ADDRRNGHI 0x6ffffeff +#define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) +#define DT_ADDRNUM 11 + + + +#define DT_VERSYM 0x6ffffff0 + +#define DT_RELACOUNT 0x6ffffff9 +#define DT_RELCOUNT 0x6ffffffa + + +#define DT_FLAGS_1 0x6ffffffb +#define DT_VERDEF 0x6ffffffc + +#define DT_VERDEFNUM 0x6ffffffd +#define DT_VERNEED 0x6ffffffe + +#define DT_VERNEEDNUM 0x6fffffff +#define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) +#define DT_VERSIONTAGNUM 16 + + + +#define DT_AUXILIARY 0x7ffffffd +#define DT_FILTER 0x7fffffff +#define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1) +#define DT_EXTRANUM 3 + + +#define DF_ORIGIN 0x00000001 +#define DF_SYMBOLIC 0x00000002 +#define DF_TEXTREL 0x00000004 +#define DF_BIND_NOW 0x00000008 +#define DF_STATIC_TLS 0x00000010 + + + +#define DF_1_NOW 0x00000001 +#define DF_1_GLOBAL 0x00000002 +#define DF_1_GROUP 0x00000004 +#define DF_1_NODELETE 0x00000008 +#define DF_1_LOADFLTR 0x00000010 +#define DF_1_INITFIRST 0x00000020 +#define DF_1_NOOPEN 0x00000040 +#define DF_1_ORIGIN 0x00000080 +#define DF_1_DIRECT 0x00000100 +#define DF_1_TRANS 0x00000200 +#define DF_1_INTERPOSE 0x00000400 +#define DF_1_NODEFLIB 0x00000800 +#define DF_1_NODUMP 0x00001000 +#define DF_1_CONFALT 0x00002000 +#define DF_1_ENDFILTEE 0x00004000 +#define DF_1_DISPRELDNE 0x00008000 +#define DF_1_DISPRELPND 0x00010000 +#define DF_1_NODIRECT 0x00020000 +#define DF_1_IGNMULDEF 0x00040000 +#define DF_1_NOKSYMS 0x00080000 +#define DF_1_NOHDR 0x00100000 +#define DF_1_EDITED 0x00200000 +#define DF_1_NORELOC 0x00400000 +#define DF_1_SYMINTPOSE 0x00800000 +#define DF_1_GLOBAUDIT 0x01000000 +#define DF_1_SINGLETON 0x02000000 + +#define DTF_1_PARINIT 0x00000001 +#define DTF_1_CONFEXP 0x00000002 + + +#define DF_P1_LAZYLOAD 0x00000001 +#define DF_P1_GROUPPERM 0x00000002 + + + + +typedef struct { + Elf32_Half vd_version; + Elf32_Half vd_flags; + Elf32_Half vd_ndx; + Elf32_Half vd_cnt; + Elf32_Word vd_hash; + Elf32_Word vd_aux; + Elf32_Word vd_next; +} Elf32_Verdef; + +typedef struct { + Elf64_Half vd_version; + Elf64_Half vd_flags; + Elf64_Half vd_ndx; + Elf64_Half vd_cnt; + Elf64_Word vd_hash; + Elf64_Word vd_aux; + Elf64_Word vd_next; +} Elf64_Verdef; + + + +#define VER_DEF_NONE 0 +#define VER_DEF_CURRENT 1 +#define VER_DEF_NUM 2 + + +#define VER_FLG_BASE 0x1 +#define VER_FLG_WEAK 0x2 + + +#define VER_NDX_LOCAL 0 +#define VER_NDX_GLOBAL 1 +#define VER_NDX_LORESERVE 0xff00 +#define VER_NDX_ELIMINATE 0xff01 + + + +typedef struct { + Elf32_Word vda_name; + Elf32_Word vda_next; +} Elf32_Verdaux; + +typedef struct { + Elf64_Word vda_name; + Elf64_Word vda_next; +} Elf64_Verdaux; + + + + +typedef struct { + Elf32_Half vn_version; + Elf32_Half vn_cnt; + Elf32_Word vn_file; + Elf32_Word vn_aux; + Elf32_Word vn_next; +} Elf32_Verneed; + +typedef struct { + Elf64_Half vn_version; + Elf64_Half vn_cnt; + Elf64_Word vn_file; + Elf64_Word vn_aux; + Elf64_Word vn_next; +} Elf64_Verneed; + + + +#define VER_NEED_NONE 0 +#define VER_NEED_CURRENT 1 +#define VER_NEED_NUM 2 + + + +typedef struct { + Elf32_Word vna_hash; + Elf32_Half vna_flags; + Elf32_Half vna_other; + Elf32_Word vna_name; + Elf32_Word vna_next; +} Elf32_Vernaux; + +typedef struct { + Elf64_Word vna_hash; + Elf64_Half vna_flags; + Elf64_Half vna_other; + Elf64_Word vna_name; + Elf64_Word vna_next; +} Elf64_Vernaux; + + + +#define VER_FLG_WEAK 0x2 + + + +typedef struct { + uint32_t a_type; + union { + uint32_t a_val; + } a_un; +} Elf32_auxv_t; + +typedef struct { + uint64_t a_type; + union { + uint64_t a_val; + } a_un; +} Elf64_auxv_t; + + + +#define AT_NULL 0 +#define AT_IGNORE 1 +#define AT_EXECFD 2 +#define AT_PHDR 3 +#define AT_PHENT 4 +#define AT_PHNUM 5 +#define AT_PAGESZ 6 +#define AT_BASE 7 +#define AT_FLAGS 8 +#define AT_ENTRY 9 +#define AT_NOTELF 10 +#define AT_UID 11 +#define AT_EUID 12 +#define AT_GID 13 +#define AT_EGID 14 +#define AT_CLKTCK 17 + + +#define AT_PLATFORM 15 +#define AT_HWCAP 16 + + + + +#define AT_FPUCW 18 + + +#define AT_DCACHEBSIZE 19 +#define AT_ICACHEBSIZE 20 +#define AT_UCACHEBSIZE 21 + + + +#define AT_IGNOREPPC 22 + +#define AT_SECURE 23 + +#define AT_BASE_PLATFORM 24 + +#define AT_RANDOM 25 + +#define AT_HWCAP2 26 + +#define AT_EXECFN 31 + + + +#define AT_SYSINFO 32 +#define AT_SYSINFO_EHDR 33 + + + +#define AT_L1I_CACHESHAPE 34 +#define AT_L1D_CACHESHAPE 35 +#define AT_L2_CACHESHAPE 36 +#define AT_L3_CACHESHAPE 37 + + + + +typedef struct { + Elf32_Word n_namesz; + Elf32_Word n_descsz; + Elf32_Word n_type; +} Elf32_Nhdr; + +typedef struct { + Elf64_Word n_namesz; + Elf64_Word n_descsz; + Elf64_Word n_type; +} Elf64_Nhdr; + + + + +#define ELF_NOTE_SOLARIS "SUNW Solaris" + + +#define ELF_NOTE_GNU "GNU" + + + + + +#define ELF_NOTE_PAGESIZE_HINT 1 + + +#define NT_GNU_ABI_TAG 1 +#define ELF_NOTE_ABI NT_GNU_ABI_TAG + + + +#define ELF_NOTE_OS_LINUX 0 +#define ELF_NOTE_OS_GNU 1 +#define ELF_NOTE_OS_SOLARIS2 2 +#define ELF_NOTE_OS_FREEBSD 3 + +#define NT_GNU_BUILD_ID 3 +#define NT_GNU_GOLD_VERSION 4 + + + +typedef struct { + Elf32_Xword m_value; + Elf32_Word m_info; + Elf32_Word m_poffset; + Elf32_Half m_repeat; + Elf32_Half m_stride; +} Elf32_Move; + +typedef struct { + Elf64_Xword m_value; + Elf64_Xword m_info; + Elf64_Xword m_poffset; + Elf64_Half m_repeat; + Elf64_Half m_stride; +} Elf64_Move; + + +#define ELF32_M_SYM(info) ((info) >> 8) +#define ELF32_M_SIZE(info) ((unsigned char) (info)) +#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size)) + +#define ELF64_M_SYM(info) ELF32_M_SYM (info) +#define ELF64_M_SIZE(info) ELF32_M_SIZE (info) +#define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size) + +#define EF_CPU32 0x00810000 + +#define R_68K_NONE 0 +#define R_68K_32 1 +#define R_68K_16 2 +#define R_68K_8 3 +#define R_68K_PC32 4 +#define R_68K_PC16 5 +#define R_68K_PC8 6 +#define R_68K_GOT32 7 +#define R_68K_GOT16 8 +#define R_68K_GOT8 9 +#define R_68K_GOT32O 10 +#define R_68K_GOT16O 11 +#define R_68K_GOT8O 12 +#define R_68K_PLT32 13 +#define R_68K_PLT16 14 +#define R_68K_PLT8 15 +#define R_68K_PLT32O 16 +#define R_68K_PLT16O 17 +#define R_68K_PLT8O 18 +#define R_68K_COPY 19 +#define R_68K_GLOB_DAT 20 +#define R_68K_JMP_SLOT 21 +#define R_68K_RELATIVE 22 +#define R_68K_NUM 23 + +#define R_386_NONE 0 +#define R_386_32 1 +#define R_386_PC32 2 +#define R_386_GOT32 3 +#define R_386_PLT32 4 +#define R_386_COPY 5 +#define R_386_GLOB_DAT 6 +#define R_386_JMP_SLOT 7 +#define R_386_RELATIVE 8 +#define R_386_GOTOFF 9 +#define R_386_GOTPC 10 +#define R_386_32PLT 11 +#define R_386_TLS_TPOFF 14 +#define R_386_TLS_IE 15 +#define R_386_TLS_GOTIE 16 +#define R_386_TLS_LE 17 +#define R_386_TLS_GD 18 +#define R_386_TLS_LDM 19 +#define R_386_16 20 +#define R_386_PC16 21 +#define R_386_8 22 +#define R_386_PC8 23 +#define R_386_TLS_GD_32 24 +#define R_386_TLS_GD_PUSH 25 +#define R_386_TLS_GD_CALL 26 +#define R_386_TLS_GD_POP 27 +#define R_386_TLS_LDM_32 28 +#define R_386_TLS_LDM_PUSH 29 +#define R_386_TLS_LDM_CALL 30 +#define R_386_TLS_LDM_POP 31 +#define R_386_TLS_LDO_32 32 +#define R_386_TLS_IE_32 33 +#define R_386_TLS_LE_32 34 +#define R_386_TLS_DTPMOD32 35 +#define R_386_TLS_DTPOFF32 36 +#define R_386_TLS_TPOFF32 37 +#define R_386_SIZE32 38 +#define R_386_TLS_GOTDESC 39 +#define R_386_TLS_DESC_CALL 40 +#define R_386_TLS_DESC 41 +#define R_386_IRELATIVE 42 +#define R_386_GOT32X 43 +#define R_386_NUM 44 + + + + + +#define STT_SPARC_REGISTER 13 + + + +#define EF_SPARCV9_MM 3 +#define EF_SPARCV9_TSO 0 +#define EF_SPARCV9_PSO 1 +#define EF_SPARCV9_RMO 2 +#define EF_SPARC_LEDATA 0x800000 +#define EF_SPARC_EXT_MASK 0xFFFF00 +#define EF_SPARC_32PLUS 0x000100 +#define EF_SPARC_SUN_US1 0x000200 +#define EF_SPARC_HAL_R1 0x000400 +#define EF_SPARC_SUN_US3 0x000800 + + + +#define R_SPARC_NONE 0 +#define R_SPARC_8 1 +#define R_SPARC_16 2 +#define R_SPARC_32 3 +#define R_SPARC_DISP8 4 +#define R_SPARC_DISP16 5 +#define R_SPARC_DISP32 6 +#define R_SPARC_WDISP30 7 +#define R_SPARC_WDISP22 8 +#define R_SPARC_HI22 9 +#define R_SPARC_22 10 +#define R_SPARC_13 11 +#define R_SPARC_LO10 12 +#define R_SPARC_GOT10 13 +#define R_SPARC_GOT13 14 +#define R_SPARC_GOT22 15 +#define R_SPARC_PC10 16 +#define R_SPARC_PC22 17 +#define R_SPARC_WPLT30 18 +#define R_SPARC_COPY 19 +#define R_SPARC_GLOB_DAT 20 +#define R_SPARC_JMP_SLOT 21 +#define R_SPARC_RELATIVE 22 +#define R_SPARC_UA32 23 + + + +#define R_SPARC_PLT32 24 +#define R_SPARC_HIPLT22 25 +#define R_SPARC_LOPLT10 26 +#define R_SPARC_PCPLT32 27 +#define R_SPARC_PCPLT22 28 +#define R_SPARC_PCPLT10 29 +#define R_SPARC_10 30 +#define R_SPARC_11 31 +#define R_SPARC_64 32 +#define R_SPARC_OLO10 33 +#define R_SPARC_HH22 34 +#define R_SPARC_HM10 35 +#define R_SPARC_LM22 36 +#define R_SPARC_PC_HH22 37 +#define R_SPARC_PC_HM10 38 +#define R_SPARC_PC_LM22 39 +#define R_SPARC_WDISP16 40 +#define R_SPARC_WDISP19 41 +#define R_SPARC_GLOB_JMP 42 +#define R_SPARC_7 43 +#define R_SPARC_5 44 +#define R_SPARC_6 45 +#define R_SPARC_DISP64 46 +#define R_SPARC_PLT64 47 +#define R_SPARC_HIX22 48 +#define R_SPARC_LOX10 49 +#define R_SPARC_H44 50 +#define R_SPARC_M44 51 +#define R_SPARC_L44 52 +#define R_SPARC_REGISTER 53 +#define R_SPARC_UA64 54 +#define R_SPARC_UA16 55 +#define R_SPARC_TLS_GD_HI22 56 +#define R_SPARC_TLS_GD_LO10 57 +#define R_SPARC_TLS_GD_ADD 58 +#define R_SPARC_TLS_GD_CALL 59 +#define R_SPARC_TLS_LDM_HI22 60 +#define R_SPARC_TLS_LDM_LO10 61 +#define R_SPARC_TLS_LDM_ADD 62 +#define R_SPARC_TLS_LDM_CALL 63 +#define R_SPARC_TLS_LDO_HIX22 64 +#define R_SPARC_TLS_LDO_LOX10 65 +#define R_SPARC_TLS_LDO_ADD 66 +#define R_SPARC_TLS_IE_HI22 67 +#define R_SPARC_TLS_IE_LO10 68 +#define R_SPARC_TLS_IE_LD 69 +#define R_SPARC_TLS_IE_LDX 70 +#define R_SPARC_TLS_IE_ADD 71 +#define R_SPARC_TLS_LE_HIX22 72 +#define R_SPARC_TLS_LE_LOX10 73 +#define R_SPARC_TLS_DTPMOD32 74 +#define R_SPARC_TLS_DTPMOD64 75 +#define R_SPARC_TLS_DTPOFF32 76 +#define R_SPARC_TLS_DTPOFF64 77 +#define R_SPARC_TLS_TPOFF32 78 +#define R_SPARC_TLS_TPOFF64 79 +#define R_SPARC_GOTDATA_HIX22 80 +#define R_SPARC_GOTDATA_LOX10 81 +#define R_SPARC_GOTDATA_OP_HIX22 82 +#define R_SPARC_GOTDATA_OP_LOX10 83 +#define R_SPARC_GOTDATA_OP 84 +#define R_SPARC_H34 85 +#define R_SPARC_SIZE32 86 +#define R_SPARC_SIZE64 87 +#define R_SPARC_GNU_VTINHERIT 250 +#define R_SPARC_GNU_VTENTRY 251 +#define R_SPARC_REV32 252 + +#define R_SPARC_NUM 253 + + + +#define DT_SPARC_REGISTER 0x70000001 +#define DT_SPARC_NUM 2 + + +#define EF_MIPS_NOREORDER 1 +#define EF_MIPS_PIC 2 +#define EF_MIPS_CPIC 4 +#define EF_MIPS_XGOT 8 +#define EF_MIPS_64BIT_WHIRL 16 +#define EF_MIPS_ABI2 32 +#define EF_MIPS_ABI_ON32 64 +#define EF_MIPS_FP64 512 +#define EF_MIPS_NAN2008 1024 +#define EF_MIPS_ARCH 0xf0000000 + + + +#define EF_MIPS_ARCH_1 0x00000000 +#define EF_MIPS_ARCH_2 0x10000000 +#define EF_MIPS_ARCH_3 0x20000000 +#define EF_MIPS_ARCH_4 0x30000000 +#define EF_MIPS_ARCH_5 0x40000000 +#define EF_MIPS_ARCH_32 0x50000000 +#define EF_MIPS_ARCH_64 0x60000000 +#define EF_MIPS_ARCH_32R2 0x70000000 +#define EF_MIPS_ARCH_64R2 0x80000000 + + +#define E_MIPS_ARCH_1 0x00000000 +#define E_MIPS_ARCH_2 0x10000000 +#define E_MIPS_ARCH_3 0x20000000 +#define E_MIPS_ARCH_4 0x30000000 +#define E_MIPS_ARCH_5 0x40000000 +#define E_MIPS_ARCH_32 0x50000000 +#define E_MIPS_ARCH_64 0x60000000 + + + +#define SHN_MIPS_ACOMMON 0xff00 +#define SHN_MIPS_TEXT 0xff01 +#define SHN_MIPS_DATA 0xff02 +#define SHN_MIPS_SCOMMON 0xff03 +#define SHN_MIPS_SUNDEFINED 0xff04 + + + +#define SHT_MIPS_LIBLIST 0x70000000 +#define SHT_MIPS_MSYM 0x70000001 +#define SHT_MIPS_CONFLICT 0x70000002 +#define SHT_MIPS_GPTAB 0x70000003 +#define SHT_MIPS_UCODE 0x70000004 +#define SHT_MIPS_DEBUG 0x70000005 +#define SHT_MIPS_REGINFO 0x70000006 +#define SHT_MIPS_PACKAGE 0x70000007 +#define SHT_MIPS_PACKSYM 0x70000008 +#define SHT_MIPS_RELD 0x70000009 +#define SHT_MIPS_IFACE 0x7000000b +#define SHT_MIPS_CONTENT 0x7000000c +#define SHT_MIPS_OPTIONS 0x7000000d +#define SHT_MIPS_SHDR 0x70000010 +#define SHT_MIPS_FDESC 0x70000011 +#define SHT_MIPS_EXTSYM 0x70000012 +#define SHT_MIPS_DENSE 0x70000013 +#define SHT_MIPS_PDESC 0x70000014 +#define SHT_MIPS_LOCSYM 0x70000015 +#define SHT_MIPS_AUXSYM 0x70000016 +#define SHT_MIPS_OPTSYM 0x70000017 +#define SHT_MIPS_LOCSTR 0x70000018 +#define SHT_MIPS_LINE 0x70000019 +#define SHT_MIPS_RFDESC 0x7000001a +#define SHT_MIPS_DELTASYM 0x7000001b +#define SHT_MIPS_DELTAINST 0x7000001c +#define SHT_MIPS_DELTACLASS 0x7000001d +#define SHT_MIPS_DWARF 0x7000001e +#define SHT_MIPS_DELTADECL 0x7000001f +#define SHT_MIPS_SYMBOL_LIB 0x70000020 +#define SHT_MIPS_EVENTS 0x70000021 +#define SHT_MIPS_TRANSLATE 0x70000022 +#define SHT_MIPS_PIXIE 0x70000023 +#define SHT_MIPS_XLATE 0x70000024 +#define SHT_MIPS_XLATE_DEBUG 0x70000025 +#define SHT_MIPS_WHIRL 0x70000026 +#define SHT_MIPS_EH_REGION 0x70000027 +#define SHT_MIPS_XLATE_OLD 0x70000028 +#define SHT_MIPS_PDR_EXCEPTION 0x70000029 + + + +#define SHF_MIPS_GPREL 0x10000000 +#define SHF_MIPS_MERGE 0x20000000 +#define SHF_MIPS_ADDR 0x40000000 +#define SHF_MIPS_STRINGS 0x80000000 +#define SHF_MIPS_NOSTRIP 0x08000000 +#define SHF_MIPS_LOCAL 0x04000000 +#define SHF_MIPS_NAMES 0x02000000 +#define SHF_MIPS_NODUPE 0x01000000 + + + + + +#define STO_MIPS_DEFAULT 0x0 +#define STO_MIPS_INTERNAL 0x1 +#define STO_MIPS_HIDDEN 0x2 +#define STO_MIPS_PROTECTED 0x3 +#define STO_MIPS_PLT 0x8 +#define STO_MIPS_SC_ALIGN_UNUSED 0xff + + +#define STB_MIPS_SPLIT_COMMON 13 + + + +typedef union { + struct { + Elf32_Word gt_current_g_value; + Elf32_Word gt_unused; + } gt_header; + struct { + Elf32_Word gt_g_value; + Elf32_Word gt_bytes; + } gt_entry; +} Elf32_gptab; + + + +typedef struct { + Elf32_Word ri_gprmask; + Elf32_Word ri_cprmask[4]; + Elf32_Sword ri_gp_value; +} Elf32_RegInfo; + + + +typedef struct { + unsigned char kind; + + unsigned char size; + Elf32_Section section; + + Elf32_Word info; +} Elf_Options; + + + +#define ODK_NULL 0 +#define ODK_REGINFO 1 +#define ODK_EXCEPTIONS 2 +#define ODK_PAD 3 +#define ODK_HWPATCH 4 +#define ODK_FILL 5 +#define ODK_TAGS 6 +#define ODK_HWAND 7 +#define ODK_HWOR 8 + + + +#define OEX_FPU_MIN 0x1f +#define OEX_FPU_MAX 0x1f00 +#define OEX_PAGE0 0x10000 +#define OEX_SMM 0x20000 +#define OEX_FPDBUG 0x40000 +#define OEX_PRECISEFP OEX_FPDBUG +#define OEX_DISMISS 0x80000 + +#define OEX_FPU_INVAL 0x10 +#define OEX_FPU_DIV0 0x08 +#define OEX_FPU_OFLO 0x04 +#define OEX_FPU_UFLO 0x02 +#define OEX_FPU_INEX 0x01 + + + +#define OHW_R4KEOP 0x1 +#define OHW_R8KPFETCH 0x2 +#define OHW_R5KEOP 0x4 +#define OHW_R5KCVTL 0x8 + +#define OPAD_PREFIX 0x1 +#define OPAD_POSTFIX 0x2 +#define OPAD_SYMBOL 0x4 + + + +typedef struct { + Elf32_Word hwp_flags1; + Elf32_Word hwp_flags2; +} Elf_Options_Hw; + + + +#define OHWA0_R4KEOP_CHECKED 0x00000001 +#define OHWA1_R4KEOP_CLEAN 0x00000002 + + + +#define R_MIPS_NONE 0 +#define R_MIPS_16 1 +#define R_MIPS_32 2 +#define R_MIPS_REL32 3 +#define R_MIPS_26 4 +#define R_MIPS_HI16 5 +#define R_MIPS_LO16 6 +#define R_MIPS_GPREL16 7 +#define R_MIPS_LITERAL 8 +#define R_MIPS_GOT16 9 +#define R_MIPS_PC16 10 +#define R_MIPS_CALL16 11 +#define R_MIPS_GPREL32 12 + +#define R_MIPS_SHIFT5 16 +#define R_MIPS_SHIFT6 17 +#define R_MIPS_64 18 +#define R_MIPS_GOT_DISP 19 +#define R_MIPS_GOT_PAGE 20 +#define R_MIPS_GOT_OFST 21 +#define R_MIPS_GOT_HI16 22 +#define R_MIPS_GOT_LO16 23 +#define R_MIPS_SUB 24 +#define R_MIPS_INSERT_A 25 +#define R_MIPS_INSERT_B 26 +#define R_MIPS_DELETE 27 +#define R_MIPS_HIGHER 28 +#define R_MIPS_HIGHEST 29 +#define R_MIPS_CALL_HI16 30 +#define R_MIPS_CALL_LO16 31 +#define R_MIPS_SCN_DISP 32 +#define R_MIPS_REL16 33 +#define R_MIPS_ADD_IMMEDIATE 34 +#define R_MIPS_PJUMP 35 +#define R_MIPS_RELGOT 36 +#define R_MIPS_JALR 37 +#define R_MIPS_TLS_DTPMOD32 38 +#define R_MIPS_TLS_DTPREL32 39 +#define R_MIPS_TLS_DTPMOD64 40 +#define R_MIPS_TLS_DTPREL64 41 +#define R_MIPS_TLS_GD 42 +#define R_MIPS_TLS_LDM 43 +#define R_MIPS_TLS_DTPREL_HI16 44 +#define R_MIPS_TLS_DTPREL_LO16 45 +#define R_MIPS_TLS_GOTTPREL 46 +#define R_MIPS_TLS_TPREL32 47 +#define R_MIPS_TLS_TPREL64 48 +#define R_MIPS_TLS_TPREL_HI16 49 +#define R_MIPS_TLS_TPREL_LO16 50 +#define R_MIPS_GLOB_DAT 51 +#define R_MIPS_COPY 126 +#define R_MIPS_JUMP_SLOT 127 + +#define R_MIPS_NUM 128 + + + +#define PT_MIPS_REGINFO 0x70000000 +#define PT_MIPS_RTPROC 0x70000001 +#define PT_MIPS_OPTIONS 0x70000002 +#define PT_MIPS_ABIFLAGS 0x70000003 + + + +#define PF_MIPS_LOCAL 0x10000000 + + + +#define DT_MIPS_RLD_VERSION 0x70000001 +#define DT_MIPS_TIME_STAMP 0x70000002 +#define DT_MIPS_ICHECKSUM 0x70000003 +#define DT_MIPS_IVERSION 0x70000004 +#define DT_MIPS_FLAGS 0x70000005 +#define DT_MIPS_BASE_ADDRESS 0x70000006 +#define DT_MIPS_MSYM 0x70000007 +#define DT_MIPS_CONFLICT 0x70000008 +#define DT_MIPS_LIBLIST 0x70000009 +#define DT_MIPS_LOCAL_GOTNO 0x7000000a +#define DT_MIPS_CONFLICTNO 0x7000000b +#define DT_MIPS_LIBLISTNO 0x70000010 +#define DT_MIPS_SYMTABNO 0x70000011 +#define DT_MIPS_UNREFEXTNO 0x70000012 +#define DT_MIPS_GOTSYM 0x70000013 +#define DT_MIPS_HIPAGENO 0x70000014 +#define DT_MIPS_RLD_MAP 0x70000016 +#define DT_MIPS_DELTA_CLASS 0x70000017 +#define DT_MIPS_DELTA_CLASS_NO 0x70000018 + +#define DT_MIPS_DELTA_INSTANCE 0x70000019 +#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a + +#define DT_MIPS_DELTA_RELOC 0x7000001b +#define DT_MIPS_DELTA_RELOC_NO 0x7000001c + +#define DT_MIPS_DELTA_SYM 0x7000001d + +#define DT_MIPS_DELTA_SYM_NO 0x7000001e + +#define DT_MIPS_DELTA_CLASSSYM 0x70000020 + +#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 + +#define DT_MIPS_CXX_FLAGS 0x70000022 +#define DT_MIPS_PIXIE_INIT 0x70000023 +#define DT_MIPS_SYMBOL_LIB 0x70000024 +#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025 +#define DT_MIPS_LOCAL_GOTIDX 0x70000026 +#define DT_MIPS_HIDDEN_GOTIDX 0x70000027 +#define DT_MIPS_PROTECTED_GOTIDX 0x70000028 +#define DT_MIPS_OPTIONS 0x70000029 +#define DT_MIPS_INTERFACE 0x7000002a +#define DT_MIPS_DYNSTR_ALIGN 0x7000002b +#define DT_MIPS_INTERFACE_SIZE 0x7000002c +#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d + +#define DT_MIPS_PERF_SUFFIX 0x7000002e + +#define DT_MIPS_COMPACT_SIZE 0x7000002f +#define DT_MIPS_GP_VALUE 0x70000030 +#define DT_MIPS_AUX_DYNAMIC 0x70000031 + +#define DT_MIPS_PLTGOT 0x70000032 + +#define DT_MIPS_RWPLT 0x70000034 +#define DT_MIPS_RLD_MAP_REL 0x70000035 +#define DT_MIPS_NUM 0x36 + + + +#define RHF_NONE 0 +#define RHF_QUICKSTART (1 << 0) +#define RHF_NOTPOT (1 << 1) +#define RHF_NO_LIBRARY_REPLACEMENT (1 << 2) +#define RHF_NO_MOVE (1 << 3) +#define RHF_SGI_ONLY (1 << 4) +#define RHF_GUARANTEE_INIT (1 << 5) +#define RHF_DELTA_C_PLUS_PLUS (1 << 6) +#define RHF_GUARANTEE_START_INIT (1 << 7) +#define RHF_PIXIE (1 << 8) +#define RHF_DEFAULT_DELAY_LOAD (1 << 9) +#define RHF_REQUICKSTART (1 << 10) +#define RHF_REQUICKSTARTED (1 << 11) +#define RHF_CORD (1 << 12) +#define RHF_NO_UNRES_UNDEF (1 << 13) +#define RHF_RLD_ORDER_SAFE (1 << 14) + + + +typedef struct { + Elf32_Word l_name; + Elf32_Word l_time_stamp; + Elf32_Word l_checksum; + Elf32_Word l_version; + Elf32_Word l_flags; +} Elf32_Lib; + +typedef struct { + Elf64_Word l_name; + Elf64_Word l_time_stamp; + Elf64_Word l_checksum; + Elf64_Word l_version; + Elf64_Word l_flags; +} Elf64_Lib; + + + + +#define LL_NONE 0 +#define LL_EXACT_MATCH (1 << 0) +#define LL_IGNORE_INT_VER (1 << 1) +#define LL_REQUIRE_MINOR (1 << 2) +#define LL_EXPORTS (1 << 3) +#define LL_DELAY_LOAD (1 << 4) +#define LL_DELTA (1 << 5) + + + +typedef Elf32_Addr Elf32_Conflict; + +typedef struct { + Elf32_Half version; + unsigned char isa_level; + unsigned char isa_rev; + unsigned char gpr_size; + unsigned char cpr1_size; + unsigned char cpr2_size; + unsigned char fp_abi; + Elf32_Word isa_ext; + Elf32_Word ases; + Elf32_Word flags1; + Elf32_Word flags2; +} Elf_MIPS_ABIFlags_v0; + +#define MIPS_AFL_REG_NONE 0x00 +#define MIPS_AFL_REG_32 0x01 +#define MIPS_AFL_REG_64 0x02 +#define MIPS_AFL_REG_128 0x03 + +#define MIPS_AFL_ASE_DSP 0x00000001 +#define MIPS_AFL_ASE_DSPR2 0x00000002 +#define MIPS_AFL_ASE_EVA 0x00000004 +#define MIPS_AFL_ASE_MCU 0x00000008 +#define MIPS_AFL_ASE_MDMX 0x00000010 +#define MIPS_AFL_ASE_MIPS3D 0x00000020 +#define MIPS_AFL_ASE_MT 0x00000040 +#define MIPS_AFL_ASE_SMARTMIPS 0x00000080 +#define MIPS_AFL_ASE_VIRT 0x00000100 +#define MIPS_AFL_ASE_MSA 0x00000200 +#define MIPS_AFL_ASE_MIPS16 0x00000400 +#define MIPS_AFL_ASE_MICROMIPS 0x00000800 +#define MIPS_AFL_ASE_XPA 0x00001000 +#define MIPS_AFL_ASE_MASK 0x00001fff + +#define MIPS_AFL_EXT_XLR 1 +#define MIPS_AFL_EXT_OCTEON2 2 +#define MIPS_AFL_EXT_OCTEONP 3 +#define MIPS_AFL_EXT_LOONGSON_3A 4 +#define MIPS_AFL_EXT_OCTEON 5 +#define MIPS_AFL_EXT_5900 6 +#define MIPS_AFL_EXT_4650 7 +#define MIPS_AFL_EXT_4010 8 +#define MIPS_AFL_EXT_4100 9 +#define MIPS_AFL_EXT_3900 10 +#define MIPS_AFL_EXT_10000 11 +#define MIPS_AFL_EXT_SB1 12 +#define MIPS_AFL_EXT_4111 13 +#define MIPS_AFL_EXT_4120 14 +#define MIPS_AFL_EXT_5400 15 +#define MIPS_AFL_EXT_5500 16 +#define MIPS_AFL_EXT_LOONGSON_2E 17 +#define MIPS_AFL_EXT_LOONGSON_2F 18 + +#define MIPS_AFL_FLAGS1_ODDSPREG 1 + +enum +{ + Val_GNU_MIPS_ABI_FP_ANY = 0, + Val_GNU_MIPS_ABI_FP_DOUBLE = 1, + Val_GNU_MIPS_ABI_FP_SINGLE = 2, + Val_GNU_MIPS_ABI_FP_SOFT = 3, + Val_GNU_MIPS_ABI_FP_OLD_64 = 4, + Val_GNU_MIPS_ABI_FP_XX = 5, + Val_GNU_MIPS_ABI_FP_64 = 6, + Val_GNU_MIPS_ABI_FP_64A = 7, + Val_GNU_MIPS_ABI_FP_MAX = 7 +}; + + + + +#define EF_PARISC_TRAPNIL 0x00010000 +#define EF_PARISC_EXT 0x00020000 +#define EF_PARISC_LSB 0x00040000 +#define EF_PARISC_WIDE 0x00080000 +#define EF_PARISC_NO_KABP 0x00100000 + +#define EF_PARISC_LAZYSWAP 0x00400000 +#define EF_PARISC_ARCH 0x0000ffff + + + +#define EFA_PARISC_1_0 0x020b +#define EFA_PARISC_1_1 0x0210 +#define EFA_PARISC_2_0 0x0214 + + + +#define SHN_PARISC_ANSI_COMMON 0xff00 + +#define SHN_PARISC_HUGE_COMMON 0xff01 + + + +#define SHT_PARISC_EXT 0x70000000 +#define SHT_PARISC_UNWIND 0x70000001 +#define SHT_PARISC_DOC 0x70000002 + + + +#define SHF_PARISC_SHORT 0x20000000 +#define SHF_PARISC_HUGE 0x40000000 +#define SHF_PARISC_SBP 0x80000000 + + + +#define STT_PARISC_MILLICODE 13 + +#define STT_HP_OPAQUE (STT_LOOS + 0x1) +#define STT_HP_STUB (STT_LOOS + 0x2) + + + +#define R_PARISC_NONE 0 +#define R_PARISC_DIR32 1 +#define R_PARISC_DIR21L 2 +#define R_PARISC_DIR17R 3 +#define R_PARISC_DIR17F 4 +#define R_PARISC_DIR14R 6 +#define R_PARISC_PCREL32 9 +#define R_PARISC_PCREL21L 10 +#define R_PARISC_PCREL17R 11 +#define R_PARISC_PCREL17F 12 +#define R_PARISC_PCREL14R 14 +#define R_PARISC_DPREL21L 18 +#define R_PARISC_DPREL14R 22 +#define R_PARISC_GPREL21L 26 +#define R_PARISC_GPREL14R 30 +#define R_PARISC_LTOFF21L 34 +#define R_PARISC_LTOFF14R 38 +#define R_PARISC_SECREL32 41 +#define R_PARISC_SEGBASE 48 +#define R_PARISC_SEGREL32 49 +#define R_PARISC_PLTOFF21L 50 +#define R_PARISC_PLTOFF14R 54 +#define R_PARISC_LTOFF_FPTR32 57 +#define R_PARISC_LTOFF_FPTR21L 58 +#define R_PARISC_LTOFF_FPTR14R 62 +#define R_PARISC_FPTR64 64 +#define R_PARISC_PLABEL32 65 +#define R_PARISC_PLABEL21L 66 +#define R_PARISC_PLABEL14R 70 +#define R_PARISC_PCREL64 72 +#define R_PARISC_PCREL22F 74 +#define R_PARISC_PCREL14WR 75 +#define R_PARISC_PCREL14DR 76 +#define R_PARISC_PCREL16F 77 +#define R_PARISC_PCREL16WF 78 +#define R_PARISC_PCREL16DF 79 +#define R_PARISC_DIR64 80 +#define R_PARISC_DIR14WR 83 +#define R_PARISC_DIR14DR 84 +#define R_PARISC_DIR16F 85 +#define R_PARISC_DIR16WF 86 +#define R_PARISC_DIR16DF 87 +#define R_PARISC_GPREL64 88 +#define R_PARISC_GPREL14WR 91 +#define R_PARISC_GPREL14DR 92 +#define R_PARISC_GPREL16F 93 +#define R_PARISC_GPREL16WF 94 +#define R_PARISC_GPREL16DF 95 +#define R_PARISC_LTOFF64 96 +#define R_PARISC_LTOFF14WR 99 +#define R_PARISC_LTOFF14DR 100 +#define R_PARISC_LTOFF16F 101 +#define R_PARISC_LTOFF16WF 102 +#define R_PARISC_LTOFF16DF 103 +#define R_PARISC_SECREL64 104 +#define R_PARISC_SEGREL64 112 +#define R_PARISC_PLTOFF14WR 115 +#define R_PARISC_PLTOFF14DR 116 +#define R_PARISC_PLTOFF16F 117 +#define R_PARISC_PLTOFF16WF 118 +#define R_PARISC_PLTOFF16DF 119 +#define R_PARISC_LTOFF_FPTR64 120 +#define R_PARISC_LTOFF_FPTR14WR 123 +#define R_PARISC_LTOFF_FPTR14DR 124 +#define R_PARISC_LTOFF_FPTR16F 125 +#define R_PARISC_LTOFF_FPTR16WF 126 +#define R_PARISC_LTOFF_FPTR16DF 127 +#define R_PARISC_LORESERVE 128 +#define R_PARISC_COPY 128 +#define R_PARISC_IPLT 129 +#define R_PARISC_EPLT 130 +#define R_PARISC_TPREL32 153 +#define R_PARISC_TPREL21L 154 +#define R_PARISC_TPREL14R 158 +#define R_PARISC_LTOFF_TP21L 162 +#define R_PARISC_LTOFF_TP14R 166 +#define R_PARISC_LTOFF_TP14F 167 +#define R_PARISC_TPREL64 216 +#define R_PARISC_TPREL14WR 219 +#define R_PARISC_TPREL14DR 220 +#define R_PARISC_TPREL16F 221 +#define R_PARISC_TPREL16WF 222 +#define R_PARISC_TPREL16DF 223 +#define R_PARISC_LTOFF_TP64 224 +#define R_PARISC_LTOFF_TP14WR 227 +#define R_PARISC_LTOFF_TP14DR 228 +#define R_PARISC_LTOFF_TP16F 229 +#define R_PARISC_LTOFF_TP16WF 230 +#define R_PARISC_LTOFF_TP16DF 231 +#define R_PARISC_GNU_VTENTRY 232 +#define R_PARISC_GNU_VTINHERIT 233 +#define R_PARISC_TLS_GD21L 234 +#define R_PARISC_TLS_GD14R 235 +#define R_PARISC_TLS_GDCALL 236 +#define R_PARISC_TLS_LDM21L 237 +#define R_PARISC_TLS_LDM14R 238 +#define R_PARISC_TLS_LDMCALL 239 +#define R_PARISC_TLS_LDO21L 240 +#define R_PARISC_TLS_LDO14R 241 +#define R_PARISC_TLS_DTPMOD32 242 +#define R_PARISC_TLS_DTPMOD64 243 +#define R_PARISC_TLS_DTPOFF32 244 +#define R_PARISC_TLS_DTPOFF64 245 +#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L +#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R +#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L +#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R +#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32 +#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64 +#define R_PARISC_HIRESERVE 255 + + + +#define PT_HP_TLS (PT_LOOS + 0x0) +#define PT_HP_CORE_NONE (PT_LOOS + 0x1) +#define PT_HP_CORE_VERSION (PT_LOOS + 0x2) +#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3) +#define PT_HP_CORE_COMM (PT_LOOS + 0x4) +#define PT_HP_CORE_PROC (PT_LOOS + 0x5) +#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6) +#define PT_HP_CORE_STACK (PT_LOOS + 0x7) +#define PT_HP_CORE_SHM (PT_LOOS + 0x8) +#define PT_HP_CORE_MMF (PT_LOOS + 0x9) +#define PT_HP_PARALLEL (PT_LOOS + 0x10) +#define PT_HP_FASTBIND (PT_LOOS + 0x11) +#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12) +#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13) +#define PT_HP_STACK (PT_LOOS + 0x14) + +#define PT_PARISC_ARCHEXT 0x70000000 +#define PT_PARISC_UNWIND 0x70000001 + + + +#define PF_PARISC_SBP 0x08000000 + +#define PF_HP_PAGE_SIZE 0x00100000 +#define PF_HP_FAR_SHARED 0x00200000 +#define PF_HP_NEAR_SHARED 0x00400000 +#define PF_HP_CODE 0x01000000 +#define PF_HP_MODIFY 0x02000000 +#define PF_HP_LAZYSWAP 0x04000000 +#define PF_HP_SBP 0x08000000 + + + + + + +#define EF_ALPHA_32BIT 1 +#define EF_ALPHA_CANRELAX 2 + + + + +#define SHT_ALPHA_DEBUG 0x70000001 +#define SHT_ALPHA_REGINFO 0x70000002 + + + +#define SHF_ALPHA_GPREL 0x10000000 + + +#define STO_ALPHA_NOPV 0x80 +#define STO_ALPHA_STD_GPLOAD 0x88 + + + +#define R_ALPHA_NONE 0 +#define R_ALPHA_REFLONG 1 +#define R_ALPHA_REFQUAD 2 +#define R_ALPHA_GPREL32 3 +#define R_ALPHA_LITERAL 4 +#define R_ALPHA_LITUSE 5 +#define R_ALPHA_GPDISP 6 +#define R_ALPHA_BRADDR 7 +#define R_ALPHA_HINT 8 +#define R_ALPHA_SREL16 9 +#define R_ALPHA_SREL32 10 +#define R_ALPHA_SREL64 11 +#define R_ALPHA_GPRELHIGH 17 +#define R_ALPHA_GPRELLOW 18 +#define R_ALPHA_GPREL16 19 +#define R_ALPHA_COPY 24 +#define R_ALPHA_GLOB_DAT 25 +#define R_ALPHA_JMP_SLOT 26 +#define R_ALPHA_RELATIVE 27 +#define R_ALPHA_TLS_GD_HI 28 +#define R_ALPHA_TLSGD 29 +#define R_ALPHA_TLS_LDM 30 +#define R_ALPHA_DTPMOD64 31 +#define R_ALPHA_GOTDTPREL 32 +#define R_ALPHA_DTPREL64 33 +#define R_ALPHA_DTPRELHI 34 +#define R_ALPHA_DTPRELLO 35 +#define R_ALPHA_DTPREL16 36 +#define R_ALPHA_GOTTPREL 37 +#define R_ALPHA_TPREL64 38 +#define R_ALPHA_TPRELHI 39 +#define R_ALPHA_TPRELLO 40 +#define R_ALPHA_TPREL16 41 + +#define R_ALPHA_NUM 46 + + +#define LITUSE_ALPHA_ADDR 0 +#define LITUSE_ALPHA_BASE 1 +#define LITUSE_ALPHA_BYTOFF 2 +#define LITUSE_ALPHA_JSR 3 +#define LITUSE_ALPHA_TLS_GD 4 +#define LITUSE_ALPHA_TLS_LDM 5 + + +#define DT_ALPHA_PLTRO (DT_LOPROC + 0) +#define DT_ALPHA_NUM 1 + + + + +#define EF_PPC_EMB 0x80000000 + + +#define EF_PPC_RELOCATABLE 0x00010000 +#define EF_PPC_RELOCATABLE_LIB 0x00008000 + + + +#define R_PPC_NONE 0 +#define R_PPC_ADDR32 1 +#define R_PPC_ADDR24 2 +#define R_PPC_ADDR16 3 +#define R_PPC_ADDR16_LO 4 +#define R_PPC_ADDR16_HI 5 +#define R_PPC_ADDR16_HA 6 +#define R_PPC_ADDR14 7 +#define R_PPC_ADDR14_BRTAKEN 8 +#define R_PPC_ADDR14_BRNTAKEN 9 +#define R_PPC_REL24 10 +#define R_PPC_REL14 11 +#define R_PPC_REL14_BRTAKEN 12 +#define R_PPC_REL14_BRNTAKEN 13 +#define R_PPC_GOT16 14 +#define R_PPC_GOT16_LO 15 +#define R_PPC_GOT16_HI 16 +#define R_PPC_GOT16_HA 17 +#define R_PPC_PLTREL24 18 +#define R_PPC_COPY 19 +#define R_PPC_GLOB_DAT 20 +#define R_PPC_JMP_SLOT 21 +#define R_PPC_RELATIVE 22 +#define R_PPC_LOCAL24PC 23 +#define R_PPC_UADDR32 24 +#define R_PPC_UADDR16 25 +#define R_PPC_REL32 26 +#define R_PPC_PLT32 27 +#define R_PPC_PLTREL32 28 +#define R_PPC_PLT16_LO 29 +#define R_PPC_PLT16_HI 30 +#define R_PPC_PLT16_HA 31 +#define R_PPC_SDAREL16 32 +#define R_PPC_SECTOFF 33 +#define R_PPC_SECTOFF_LO 34 +#define R_PPC_SECTOFF_HI 35 +#define R_PPC_SECTOFF_HA 36 + + +#define R_PPC_TLS 67 +#define R_PPC_DTPMOD32 68 +#define R_PPC_TPREL16 69 +#define R_PPC_TPREL16_LO 70 +#define R_PPC_TPREL16_HI 71 +#define R_PPC_TPREL16_HA 72 +#define R_PPC_TPREL32 73 +#define R_PPC_DTPREL16 74 +#define R_PPC_DTPREL16_LO 75 +#define R_PPC_DTPREL16_HI 76 +#define R_PPC_DTPREL16_HA 77 +#define R_PPC_DTPREL32 78 +#define R_PPC_GOT_TLSGD16 79 +#define R_PPC_GOT_TLSGD16_LO 80 +#define R_PPC_GOT_TLSGD16_HI 81 +#define R_PPC_GOT_TLSGD16_HA 82 +#define R_PPC_GOT_TLSLD16 83 +#define R_PPC_GOT_TLSLD16_LO 84 +#define R_PPC_GOT_TLSLD16_HI 85 +#define R_PPC_GOT_TLSLD16_HA 86 +#define R_PPC_GOT_TPREL16 87 +#define R_PPC_GOT_TPREL16_LO 88 +#define R_PPC_GOT_TPREL16_HI 89 +#define R_PPC_GOT_TPREL16_HA 90 +#define R_PPC_GOT_DTPREL16 91 +#define R_PPC_GOT_DTPREL16_LO 92 +#define R_PPC_GOT_DTPREL16_HI 93 +#define R_PPC_GOT_DTPREL16_HA 94 +#define R_PPC_TLSGD 95 +#define R_PPC_TLSLD 96 + + +#define R_PPC_EMB_NADDR32 101 +#define R_PPC_EMB_NADDR16 102 +#define R_PPC_EMB_NADDR16_LO 103 +#define R_PPC_EMB_NADDR16_HI 104 +#define R_PPC_EMB_NADDR16_HA 105 +#define R_PPC_EMB_SDAI16 106 +#define R_PPC_EMB_SDA2I16 107 +#define R_PPC_EMB_SDA2REL 108 +#define R_PPC_EMB_SDA21 109 +#define R_PPC_EMB_MRKREF 110 +#define R_PPC_EMB_RELSEC16 111 +#define R_PPC_EMB_RELST_LO 112 +#define R_PPC_EMB_RELST_HI 113 +#define R_PPC_EMB_RELST_HA 114 +#define R_PPC_EMB_BIT_FLD 115 +#define R_PPC_EMB_RELSDA 116 + + +#define R_PPC_DIAB_SDA21_LO 180 +#define R_PPC_DIAB_SDA21_HI 181 +#define R_PPC_DIAB_SDA21_HA 182 +#define R_PPC_DIAB_RELSDA_LO 183 +#define R_PPC_DIAB_RELSDA_HI 184 +#define R_PPC_DIAB_RELSDA_HA 185 + + +#define R_PPC_IRELATIVE 248 + + +#define R_PPC_REL16 249 +#define R_PPC_REL16_LO 250 +#define R_PPC_REL16_HI 251 +#define R_PPC_REL16_HA 252 + + + +#define R_PPC_TOC16 255 + + +#define DT_PPC_GOT (DT_LOPROC + 0) +#define DT_PPC_OPT (DT_LOPROC + 1) +#define DT_PPC_NUM 2 + +#define PPC_OPT_TLS 1 + + +#define R_PPC64_NONE R_PPC_NONE +#define R_PPC64_ADDR32 R_PPC_ADDR32 +#define R_PPC64_ADDR24 R_PPC_ADDR24 +#define R_PPC64_ADDR16 R_PPC_ADDR16 +#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO +#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI +#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA +#define R_PPC64_ADDR14 R_PPC_ADDR14 +#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN +#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN +#define R_PPC64_REL24 R_PPC_REL24 +#define R_PPC64_REL14 R_PPC_REL14 +#define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN +#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN +#define R_PPC64_GOT16 R_PPC_GOT16 +#define R_PPC64_GOT16_LO R_PPC_GOT16_LO +#define R_PPC64_GOT16_HI R_PPC_GOT16_HI +#define R_PPC64_GOT16_HA R_PPC_GOT16_HA + +#define R_PPC64_COPY R_PPC_COPY +#define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT +#define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT +#define R_PPC64_RELATIVE R_PPC_RELATIVE + +#define R_PPC64_UADDR32 R_PPC_UADDR32 +#define R_PPC64_UADDR16 R_PPC_UADDR16 +#define R_PPC64_REL32 R_PPC_REL32 +#define R_PPC64_PLT32 R_PPC_PLT32 +#define R_PPC64_PLTREL32 R_PPC_PLTREL32 +#define R_PPC64_PLT16_LO R_PPC_PLT16_LO +#define R_PPC64_PLT16_HI R_PPC_PLT16_HI +#define R_PPC64_PLT16_HA R_PPC_PLT16_HA + +#define R_PPC64_SECTOFF R_PPC_SECTOFF +#define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO +#define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI +#define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA +#define R_PPC64_ADDR30 37 +#define R_PPC64_ADDR64 38 +#define R_PPC64_ADDR16_HIGHER 39 +#define R_PPC64_ADDR16_HIGHERA 40 +#define R_PPC64_ADDR16_HIGHEST 41 +#define R_PPC64_ADDR16_HIGHESTA 42 +#define R_PPC64_UADDR64 43 +#define R_PPC64_REL64 44 +#define R_PPC64_PLT64 45 +#define R_PPC64_PLTREL64 46 +#define R_PPC64_TOC16 47 +#define R_PPC64_TOC16_LO 48 +#define R_PPC64_TOC16_HI 49 +#define R_PPC64_TOC16_HA 50 +#define R_PPC64_TOC 51 +#define R_PPC64_PLTGOT16 52 +#define R_PPC64_PLTGOT16_LO 53 +#define R_PPC64_PLTGOT16_HI 54 +#define R_PPC64_PLTGOT16_HA 55 + +#define R_PPC64_ADDR16_DS 56 +#define R_PPC64_ADDR16_LO_DS 57 +#define R_PPC64_GOT16_DS 58 +#define R_PPC64_GOT16_LO_DS 59 +#define R_PPC64_PLT16_LO_DS 60 +#define R_PPC64_SECTOFF_DS 61 +#define R_PPC64_SECTOFF_LO_DS 62 +#define R_PPC64_TOC16_DS 63 +#define R_PPC64_TOC16_LO_DS 64 +#define R_PPC64_PLTGOT16_DS 65 +#define R_PPC64_PLTGOT16_LO_DS 66 + + +#define R_PPC64_TLS 67 +#define R_PPC64_DTPMOD64 68 +#define R_PPC64_TPREL16 69 +#define R_PPC64_TPREL16_LO 70 +#define R_PPC64_TPREL16_HI 71 +#define R_PPC64_TPREL16_HA 72 +#define R_PPC64_TPREL64 73 +#define R_PPC64_DTPREL16 74 +#define R_PPC64_DTPREL16_LO 75 +#define R_PPC64_DTPREL16_HI 76 +#define R_PPC64_DTPREL16_HA 77 +#define R_PPC64_DTPREL64 78 +#define R_PPC64_GOT_TLSGD16 79 +#define R_PPC64_GOT_TLSGD16_LO 80 +#define R_PPC64_GOT_TLSGD16_HI 81 +#define R_PPC64_GOT_TLSGD16_HA 82 +#define R_PPC64_GOT_TLSLD16 83 +#define R_PPC64_GOT_TLSLD16_LO 84 +#define R_PPC64_GOT_TLSLD16_HI 85 +#define R_PPC64_GOT_TLSLD16_HA 86 +#define R_PPC64_GOT_TPREL16_DS 87 +#define R_PPC64_GOT_TPREL16_LO_DS 88 +#define R_PPC64_GOT_TPREL16_HI 89 +#define R_PPC64_GOT_TPREL16_HA 90 +#define R_PPC64_GOT_DTPREL16_DS 91 +#define R_PPC64_GOT_DTPREL16_LO_DS 92 +#define R_PPC64_GOT_DTPREL16_HI 93 +#define R_PPC64_GOT_DTPREL16_HA 94 +#define R_PPC64_TPREL16_DS 95 +#define R_PPC64_TPREL16_LO_DS 96 +#define R_PPC64_TPREL16_HIGHER 97 +#define R_PPC64_TPREL16_HIGHERA 98 +#define R_PPC64_TPREL16_HIGHEST 99 +#define R_PPC64_TPREL16_HIGHESTA 100 +#define R_PPC64_DTPREL16_DS 101 +#define R_PPC64_DTPREL16_LO_DS 102 +#define R_PPC64_DTPREL16_HIGHER 103 +#define R_PPC64_DTPREL16_HIGHERA 104 +#define R_PPC64_DTPREL16_HIGHEST 105 +#define R_PPC64_DTPREL16_HIGHESTA 106 +#define R_PPC64_TLSGD 107 +#define R_PPC64_TLSLD 108 +#define R_PPC64_TOCSAVE 109 +#define R_PPC64_ADDR16_HIGH 110 +#define R_PPC64_ADDR16_HIGHA 111 +#define R_PPC64_TPREL16_HIGH 112 +#define R_PPC64_TPREL16_HIGHA 113 +#define R_PPC64_DTPREL16_HIGH 114 +#define R_PPC64_DTPREL16_HIGHA 115 + + +#define R_PPC64_JMP_IREL 247 +#define R_PPC64_IRELATIVE 248 +#define R_PPC64_REL16 249 +#define R_PPC64_REL16_LO 250 +#define R_PPC64_REL16_HI 251 +#define R_PPC64_REL16_HA 252 + +#define EF_PPC64_ABI 3 + +#define DT_PPC64_GLINK (DT_LOPROC + 0) +#define DT_PPC64_OPD (DT_LOPROC + 1) +#define DT_PPC64_OPDSZ (DT_LOPROC + 2) +#define DT_PPC64_OPT (DT_LOPROC + 3) +#define DT_PPC64_NUM 4 + +#define PPC64_OPT_TLS 1 +#define PPC64_OPT_MULTI_TOC 2 + +#define STO_PPC64_LOCAL_BIT 5 +#define STO_PPC64_LOCAL_MASK 0xe0 +#define PPC64_LOCAL_ENTRY_OFFSET(x) (1 << (((x)&0xe0)>>5) & 0xfc) + + +#define EF_ARM_RELEXEC 0x01 +#define EF_ARM_HASENTRY 0x02 +#define EF_ARM_INTERWORK 0x04 +#define EF_ARM_APCS_26 0x08 +#define EF_ARM_APCS_FLOAT 0x10 +#define EF_ARM_PIC 0x20 +#define EF_ARM_ALIGN8 0x40 +#define EF_ARM_NEW_ABI 0x80 +#define EF_ARM_OLD_ABI 0x100 +#define EF_ARM_SOFT_FLOAT 0x200 +#define EF_ARM_VFP_FLOAT 0x400 +#define EF_ARM_MAVERICK_FLOAT 0x800 + +#define EF_ARM_ABI_FLOAT_SOFT 0x200 +#define EF_ARM_ABI_FLOAT_HARD 0x400 + + +#define EF_ARM_SYMSARESORTED 0x04 +#define EF_ARM_DYNSYMSUSESEGIDX 0x08 +#define EF_ARM_MAPSYMSFIRST 0x10 +#define EF_ARM_EABIMASK 0XFF000000 + + +#define EF_ARM_BE8 0x00800000 +#define EF_ARM_LE8 0x00400000 + +#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK) +#define EF_ARM_EABI_UNKNOWN 0x00000000 +#define EF_ARM_EABI_VER1 0x01000000 +#define EF_ARM_EABI_VER2 0x02000000 +#define EF_ARM_EABI_VER3 0x03000000 +#define EF_ARM_EABI_VER4 0x04000000 +#define EF_ARM_EABI_VER5 0x05000000 + + +#define STT_ARM_TFUNC STT_LOPROC +#define STT_ARM_16BIT STT_HIPROC + + +#define SHF_ARM_ENTRYSECT 0x10000000 +#define SHF_ARM_COMDEF 0x80000000 + + + +#define PF_ARM_SB 0x10000000 + +#define PF_ARM_PI 0x20000000 +#define PF_ARM_ABS 0x40000000 + + +#define PT_ARM_EXIDX (PT_LOPROC + 1) + + +#define SHT_ARM_EXIDX (SHT_LOPROC + 1) +#define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) +#define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) + +#define R_AARCH64_NONE 0 +#define R_AARCH64_P32_ABS32 1 +#define R_AARCH64_P32_COPY 180 +#define R_AARCH64_P32_GLOB_DAT 181 +#define R_AARCH64_P32_JUMP_SLOT 182 +#define R_AARCH64_P32_RELATIVE 183 +#define R_AARCH64_P32_TLS_DTPMOD 184 +#define R_AARCH64_P32_TLS_DTPREL 185 +#define R_AARCH64_P32_TLS_TPREL 186 +#define R_AARCH64_P32_TLSDESC 187 +#define R_AARCH64_P32_IRELATIVE 188 +#define R_AARCH64_ABS64 257 +#define R_AARCH64_ABS32 258 +#define R_AARCH64_ABS16 259 +#define R_AARCH64_PREL64 260 +#define R_AARCH64_PREL32 261 +#define R_AARCH64_PREL16 262 +#define R_AARCH64_MOVW_UABS_G0 263 +#define R_AARCH64_MOVW_UABS_G0_NC 264 +#define R_AARCH64_MOVW_UABS_G1 265 +#define R_AARCH64_MOVW_UABS_G1_NC 266 +#define R_AARCH64_MOVW_UABS_G2 267 +#define R_AARCH64_MOVW_UABS_G2_NC 268 +#define R_AARCH64_MOVW_UABS_G3 269 +#define R_AARCH64_MOVW_SABS_G0 270 +#define R_AARCH64_MOVW_SABS_G1 271 +#define R_AARCH64_MOVW_SABS_G2 272 +#define R_AARCH64_LD_PREL_LO19 273 +#define R_AARCH64_ADR_PREL_LO21 274 +#define R_AARCH64_ADR_PREL_PG_HI21 275 +#define R_AARCH64_ADR_PREL_PG_HI21_NC 276 +#define R_AARCH64_ADD_ABS_LO12_NC 277 +#define R_AARCH64_LDST8_ABS_LO12_NC 278 +#define R_AARCH64_TSTBR14 279 +#define R_AARCH64_CONDBR19 280 +#define R_AARCH64_JUMP26 282 +#define R_AARCH64_CALL26 283 +#define R_AARCH64_LDST16_ABS_LO12_NC 284 +#define R_AARCH64_LDST32_ABS_LO12_NC 285 +#define R_AARCH64_LDST64_ABS_LO12_NC 286 +#define R_AARCH64_MOVW_PREL_G0 287 +#define R_AARCH64_MOVW_PREL_G0_NC 288 +#define R_AARCH64_MOVW_PREL_G1 289 +#define R_AARCH64_MOVW_PREL_G1_NC 290 +#define R_AARCH64_MOVW_PREL_G2 291 +#define R_AARCH64_MOVW_PREL_G2_NC 292 +#define R_AARCH64_MOVW_PREL_G3 293 +#define R_AARCH64_LDST128_ABS_LO12_NC 299 +#define R_AARCH64_MOVW_GOTOFF_G0 300 +#define R_AARCH64_MOVW_GOTOFF_G0_NC 301 +#define R_AARCH64_MOVW_GOTOFF_G1 302 +#define R_AARCH64_MOVW_GOTOFF_G1_NC 303 +#define R_AARCH64_MOVW_GOTOFF_G2 304 +#define R_AARCH64_MOVW_GOTOFF_G2_NC 305 +#define R_AARCH64_MOVW_GOTOFF_G3 306 +#define R_AARCH64_GOTREL64 307 +#define R_AARCH64_GOTREL32 308 +#define R_AARCH64_GOT_LD_PREL19 309 +#define R_AARCH64_LD64_GOTOFF_LO15 310 +#define R_AARCH64_ADR_GOT_PAGE 311 +#define R_AARCH64_LD64_GOT_LO12_NC 312 +#define R_AARCH64_LD64_GOTPAGE_LO15 313 +#define R_AARCH64_TLSGD_ADR_PREL21 512 +#define R_AARCH64_TLSGD_ADR_PAGE21 513 +#define R_AARCH64_TLSGD_ADD_LO12_NC 514 +#define R_AARCH64_TLSGD_MOVW_G1 515 +#define R_AARCH64_TLSGD_MOVW_G0_NC 516 +#define R_AARCH64_TLSLD_ADR_PREL21 517 +#define R_AARCH64_TLSLD_ADR_PAGE21 518 +#define R_AARCH64_TLSLD_ADD_LO12_NC 519 +#define R_AARCH64_TLSLD_MOVW_G1 520 +#define R_AARCH64_TLSLD_MOVW_G0_NC 521 +#define R_AARCH64_TLSLD_LD_PREL19 522 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527 +#define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528 +#define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529 +#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530 +#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531 +#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532 +#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533 +#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534 +#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535 +#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536 +#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537 +#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538 +#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539 +#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540 +#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541 +#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542 +#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543 +#define R_AARCH64_TLSLE_MOVW_TPREL_G2 544 +#define R_AARCH64_TLSLE_MOVW_TPREL_G1 545 +#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546 +#define R_AARCH64_TLSLE_MOVW_TPREL_G0 547 +#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548 +#define R_AARCH64_TLSLE_ADD_TPREL_HI12 549 +#define R_AARCH64_TLSLE_ADD_TPREL_LO12 550 +#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551 +#define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552 +#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553 +#define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554 +#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555 +#define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556 +#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557 +#define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558 +#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559 +#define R_AARCH64_TLSDESC_LD_PREL19 560 +#define R_AARCH64_TLSDESC_ADR_PREL21 561 +#define R_AARCH64_TLSDESC_ADR_PAGE21 562 +#define R_AARCH64_TLSDESC_LD64_LO12 563 +#define R_AARCH64_TLSDESC_ADD_LO12 564 +#define R_AARCH64_TLSDESC_OFF_G1 565 +#define R_AARCH64_TLSDESC_OFF_G0_NC 566 +#define R_AARCH64_TLSDESC_LDR 567 +#define R_AARCH64_TLSDESC_ADD 568 +#define R_AARCH64_TLSDESC_CALL 569 +#define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570 +#define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571 +#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 +#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573 +#define R_AARCH64_COPY 1024 +#define R_AARCH64_GLOB_DAT 1025 +#define R_AARCH64_JUMP_SLOT 1026 +#define R_AARCH64_RELATIVE 1027 +#define R_AARCH64_TLS_DTPMOD 1028 +#define R_AARCH64_TLS_DTPMOD64 1028 +#define R_AARCH64_TLS_DTPREL 1029 +#define R_AARCH64_TLS_DTPREL64 1029 +#define R_AARCH64_TLS_TPREL 1030 +#define R_AARCH64_TLS_TPREL64 1030 +#define R_AARCH64_TLSDESC 1031 + + +#define R_ARM_NONE 0 +#define R_ARM_PC24 1 +#define R_ARM_ABS32 2 +#define R_ARM_REL32 3 +#define R_ARM_PC13 4 +#define R_ARM_ABS16 5 +#define R_ARM_ABS12 6 +#define R_ARM_THM_ABS5 7 +#define R_ARM_ABS8 8 +#define R_ARM_SBREL32 9 +#define R_ARM_THM_PC22 10 +#define R_ARM_THM_PC8 11 +#define R_ARM_AMP_VCALL9 12 +#define R_ARM_TLS_DESC 13 +#define R_ARM_THM_SWI8 14 +#define R_ARM_XPC25 15 +#define R_ARM_THM_XPC22 16 +#define R_ARM_TLS_DTPMOD32 17 +#define R_ARM_TLS_DTPOFF32 18 +#define R_ARM_TLS_TPOFF32 19 +#define R_ARM_COPY 20 +#define R_ARM_GLOB_DAT 21 +#define R_ARM_JUMP_SLOT 22 +#define R_ARM_RELATIVE 23 +#define R_ARM_GOTOFF 24 +#define R_ARM_GOTPC 25 +#define R_ARM_GOT32 26 +#define R_ARM_PLT32 27 +#define R_ARM_CALL 28 +#define R_ARM_JUMP24 29 +#define R_ARM_THM_JUMP24 30 +#define R_ARM_BASE_ABS 31 +#define R_ARM_ALU_PCREL_7_0 32 +#define R_ARM_ALU_PCREL_15_8 33 +#define R_ARM_ALU_PCREL_23_15 34 +#define R_ARM_LDR_SBREL_11_0 35 +#define R_ARM_ALU_SBREL_19_12 36 +#define R_ARM_ALU_SBREL_27_20 37 +#define R_ARM_TARGET1 38 +#define R_ARM_SBREL31 39 +#define R_ARM_V4BX 40 +#define R_ARM_TARGET2 41 +#define R_ARM_PREL31 42 +#define R_ARM_MOVW_ABS_NC 43 +#define R_ARM_MOVT_ABS 44 +#define R_ARM_MOVW_PREL_NC 45 +#define R_ARM_MOVT_PREL 46 +#define R_ARM_THM_MOVW_ABS_NC 47 +#define R_ARM_THM_MOVT_ABS 48 +#define R_ARM_THM_MOVW_PREL_NC 49 +#define R_ARM_THM_MOVT_PREL 50 +#define R_ARM_THM_JUMP19 51 +#define R_ARM_THM_JUMP6 52 +#define R_ARM_THM_ALU_PREL_11_0 53 +#define R_ARM_THM_PC12 54 +#define R_ARM_ABS32_NOI 55 +#define R_ARM_REL32_NOI 56 +#define R_ARM_ALU_PC_G0_NC 57 +#define R_ARM_ALU_PC_G0 58 +#define R_ARM_ALU_PC_G1_NC 59 +#define R_ARM_ALU_PC_G1 60 +#define R_ARM_ALU_PC_G2 61 +#define R_ARM_LDR_PC_G1 62 +#define R_ARM_LDR_PC_G2 63 +#define R_ARM_LDRS_PC_G0 64 +#define R_ARM_LDRS_PC_G1 65 +#define R_ARM_LDRS_PC_G2 66 +#define R_ARM_LDC_PC_G0 67 +#define R_ARM_LDC_PC_G1 68 +#define R_ARM_LDC_PC_G2 69 +#define R_ARM_ALU_SB_G0_NC 70 +#define R_ARM_ALU_SB_G0 71 +#define R_ARM_ALU_SB_G1_NC 72 +#define R_ARM_ALU_SB_G1 73 +#define R_ARM_ALU_SB_G2 74 +#define R_ARM_LDR_SB_G0 75 +#define R_ARM_LDR_SB_G1 76 +#define R_ARM_LDR_SB_G2 77 +#define R_ARM_LDRS_SB_G0 78 +#define R_ARM_LDRS_SB_G1 79 +#define R_ARM_LDRS_SB_G2 80 +#define R_ARM_LDC_SB_G0 81 +#define R_ARM_LDC_SB_G1 82 +#define R_ARM_LDC_SB_G2 83 +#define R_ARM_MOVW_BREL_NC 84 +#define R_ARM_MOVT_BREL 85 +#define R_ARM_MOVW_BREL 86 +#define R_ARM_THM_MOVW_BREL_NC 87 +#define R_ARM_THM_MOVT_BREL 88 +#define R_ARM_THM_MOVW_BREL 89 +#define R_ARM_TLS_GOTDESC 90 +#define R_ARM_TLS_CALL 91 +#define R_ARM_TLS_DESCSEQ 92 +#define R_ARM_THM_TLS_CALL 93 +#define R_ARM_PLT32_ABS 94 +#define R_ARM_GOT_ABS 95 +#define R_ARM_GOT_PREL 96 +#define R_ARM_GOT_BREL12 97 +#define R_ARM_GOTOFF12 98 +#define R_ARM_GOTRELAX 99 +#define R_ARM_GNU_VTENTRY 100 +#define R_ARM_GNU_VTINHERIT 101 +#define R_ARM_THM_PC11 102 +#define R_ARM_THM_PC9 103 +#define R_ARM_TLS_GD32 104 + +#define R_ARM_TLS_LDM32 105 + +#define R_ARM_TLS_LDO32 106 + +#define R_ARM_TLS_IE32 107 + +#define R_ARM_TLS_LE32 108 +#define R_ARM_TLS_LDO12 109 +#define R_ARM_TLS_LE12 110 +#define R_ARM_TLS_IE12GP 111 +#define R_ARM_ME_TOO 128 +#define R_ARM_THM_TLS_DESCSEQ 129 +#define R_ARM_THM_TLS_DESCSEQ16 129 +#define R_ARM_THM_TLS_DESCSEQ32 130 +#define R_ARM_THM_GOT_BREL12 131 +#define R_ARM_IRELATIVE 160 +#define R_ARM_RXPC25 249 +#define R_ARM_RSBREL32 250 +#define R_ARM_THM_RPC22 251 +#define R_ARM_RREL32 252 +#define R_ARM_RABS22 253 +#define R_ARM_RPC24 254 +#define R_ARM_RBASE 255 + +#define R_ARM_NUM 256 + + + + +#define EF_IA_64_MASKOS 0x0000000f +#define EF_IA_64_ABI64 0x00000010 +#define EF_IA_64_ARCH 0xff000000 + + +#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) +#define PT_IA_64_UNWIND (PT_LOPROC + 1) +#define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12) +#define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13) +#define PT_IA_64_HP_STACK (PT_LOOS + 0x14) + + +#define PF_IA_64_NORECOV 0x80000000 + + +#define SHT_IA_64_EXT (SHT_LOPROC + 0) +#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) + + +#define SHF_IA_64_SHORT 0x10000000 +#define SHF_IA_64_NORECOV 0x20000000 + + +#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) +#define DT_IA_64_NUM 1 + + +#define R_IA64_NONE 0x00 +#define R_IA64_IMM14 0x21 +#define R_IA64_IMM22 0x22 +#define R_IA64_IMM64 0x23 +#define R_IA64_DIR32MSB 0x24 +#define R_IA64_DIR32LSB 0x25 +#define R_IA64_DIR64MSB 0x26 +#define R_IA64_DIR64LSB 0x27 +#define R_IA64_GPREL22 0x2a +#define R_IA64_GPREL64I 0x2b +#define R_IA64_GPREL32MSB 0x2c +#define R_IA64_GPREL32LSB 0x2d +#define R_IA64_GPREL64MSB 0x2e +#define R_IA64_GPREL64LSB 0x2f +#define R_IA64_LTOFF22 0x32 +#define R_IA64_LTOFF64I 0x33 +#define R_IA64_PLTOFF22 0x3a +#define R_IA64_PLTOFF64I 0x3b +#define R_IA64_PLTOFF64MSB 0x3e +#define R_IA64_PLTOFF64LSB 0x3f +#define R_IA64_FPTR64I 0x43 +#define R_IA64_FPTR32MSB 0x44 +#define R_IA64_FPTR32LSB 0x45 +#define R_IA64_FPTR64MSB 0x46 +#define R_IA64_FPTR64LSB 0x47 +#define R_IA64_PCREL60B 0x48 +#define R_IA64_PCREL21B 0x49 +#define R_IA64_PCREL21M 0x4a +#define R_IA64_PCREL21F 0x4b +#define R_IA64_PCREL32MSB 0x4c +#define R_IA64_PCREL32LSB 0x4d +#define R_IA64_PCREL64MSB 0x4e +#define R_IA64_PCREL64LSB 0x4f +#define R_IA64_LTOFF_FPTR22 0x52 +#define R_IA64_LTOFF_FPTR64I 0x53 +#define R_IA64_LTOFF_FPTR32MSB 0x54 +#define R_IA64_LTOFF_FPTR32LSB 0x55 +#define R_IA64_LTOFF_FPTR64MSB 0x56 +#define R_IA64_LTOFF_FPTR64LSB 0x57 +#define R_IA64_SEGREL32MSB 0x5c +#define R_IA64_SEGREL32LSB 0x5d +#define R_IA64_SEGREL64MSB 0x5e +#define R_IA64_SEGREL64LSB 0x5f +#define R_IA64_SECREL32MSB 0x64 +#define R_IA64_SECREL32LSB 0x65 +#define R_IA64_SECREL64MSB 0x66 +#define R_IA64_SECREL64LSB 0x67 +#define R_IA64_REL32MSB 0x6c +#define R_IA64_REL32LSB 0x6d +#define R_IA64_REL64MSB 0x6e +#define R_IA64_REL64LSB 0x6f +#define R_IA64_LTV32MSB 0x74 +#define R_IA64_LTV32LSB 0x75 +#define R_IA64_LTV64MSB 0x76 +#define R_IA64_LTV64LSB 0x77 +#define R_IA64_PCREL21BI 0x79 +#define R_IA64_PCREL22 0x7a +#define R_IA64_PCREL64I 0x7b +#define R_IA64_IPLTMSB 0x80 +#define R_IA64_IPLTLSB 0x81 +#define R_IA64_COPY 0x84 +#define R_IA64_SUB 0x85 +#define R_IA64_LTOFF22X 0x86 +#define R_IA64_LDXMOV 0x87 +#define R_IA64_TPREL14 0x91 +#define R_IA64_TPREL22 0x92 +#define R_IA64_TPREL64I 0x93 +#define R_IA64_TPREL64MSB 0x96 +#define R_IA64_TPREL64LSB 0x97 +#define R_IA64_LTOFF_TPREL22 0x9a +#define R_IA64_DTPMOD64MSB 0xa6 +#define R_IA64_DTPMOD64LSB 0xa7 +#define R_IA64_LTOFF_DTPMOD22 0xaa +#define R_IA64_DTPREL14 0xb1 +#define R_IA64_DTPREL22 0xb2 +#define R_IA64_DTPREL64I 0xb3 +#define R_IA64_DTPREL32MSB 0xb4 +#define R_IA64_DTPREL32LSB 0xb5 +#define R_IA64_DTPREL64MSB 0xb6 +#define R_IA64_DTPREL64LSB 0xb7 +#define R_IA64_LTOFF_DTPREL22 0xba + + +#define EF_SH_MACH_MASK 0x1f +#define EF_SH_UNKNOWN 0x0 +#define EF_SH1 0x1 +#define EF_SH2 0x2 +#define EF_SH3 0x3 +#define EF_SH_DSP 0x4 +#define EF_SH3_DSP 0x5 +#define EF_SH4AL_DSP 0x6 +#define EF_SH3E 0x8 +#define EF_SH4 0x9 +#define EF_SH2E 0xb +#define EF_SH4A 0xc +#define EF_SH2A 0xd +#define EF_SH4_NOFPU 0x10 +#define EF_SH4A_NOFPU 0x11 +#define EF_SH4_NOMMU_NOFPU 0x12 +#define EF_SH2A_NOFPU 0x13 +#define EF_SH3_NOMMU 0x14 +#define EF_SH2A_SH4_NOFPU 0x15 +#define EF_SH2A_SH3_NOFPU 0x16 +#define EF_SH2A_SH4 0x17 +#define EF_SH2A_SH3E 0x18 + +#define R_SH_NONE 0 +#define R_SH_DIR32 1 +#define R_SH_REL32 2 +#define R_SH_DIR8WPN 3 +#define R_SH_IND12W 4 +#define R_SH_DIR8WPL 5 +#define R_SH_DIR8WPZ 6 +#define R_SH_DIR8BP 7 +#define R_SH_DIR8W 8 +#define R_SH_DIR8L 9 +#define R_SH_SWITCH16 25 +#define R_SH_SWITCH32 26 +#define R_SH_USES 27 +#define R_SH_COUNT 28 +#define R_SH_ALIGN 29 +#define R_SH_CODE 30 +#define R_SH_DATA 31 +#define R_SH_LABEL 32 +#define R_SH_SWITCH8 33 +#define R_SH_GNU_VTINHERIT 34 +#define R_SH_GNU_VTENTRY 35 +#define R_SH_TLS_GD_32 144 +#define R_SH_TLS_LD_32 145 +#define R_SH_TLS_LDO_32 146 +#define R_SH_TLS_IE_32 147 +#define R_SH_TLS_LE_32 148 +#define R_SH_TLS_DTPMOD32 149 +#define R_SH_TLS_DTPOFF32 150 +#define R_SH_TLS_TPOFF32 151 +#define R_SH_GOT32 160 +#define R_SH_PLT32 161 +#define R_SH_COPY 162 +#define R_SH_GLOB_DAT 163 +#define R_SH_JMP_SLOT 164 +#define R_SH_RELATIVE 165 +#define R_SH_GOTOFF 166 +#define R_SH_GOTPC 167 +#define R_SH_GOT20 201 +#define R_SH_GOTOFF20 202 +#define R_SH_GOTFUNCDESC 203 +#define R_SH_GOTFUNCDEST20 204 +#define R_SH_GOTOFFFUNCDESC 205 +#define R_SH_GOTOFFFUNCDEST20 206 +#define R_SH_FUNCDESC 207 +#define R_SH_FUNCDESC_VALUE 208 + +#define R_SH_NUM 256 + + + +#define R_390_NONE 0 +#define R_390_8 1 +#define R_390_12 2 +#define R_390_16 3 +#define R_390_32 4 +#define R_390_PC32 5 +#define R_390_GOT12 6 +#define R_390_GOT32 7 +#define R_390_PLT32 8 +#define R_390_COPY 9 +#define R_390_GLOB_DAT 10 +#define R_390_JMP_SLOT 11 +#define R_390_RELATIVE 12 +#define R_390_GOTOFF32 13 +#define R_390_GOTPC 14 +#define R_390_GOT16 15 +#define R_390_PC16 16 +#define R_390_PC16DBL 17 +#define R_390_PLT16DBL 18 +#define R_390_PC32DBL 19 +#define R_390_PLT32DBL 20 +#define R_390_GOTPCDBL 21 +#define R_390_64 22 +#define R_390_PC64 23 +#define R_390_GOT64 24 +#define R_390_PLT64 25 +#define R_390_GOTENT 26 +#define R_390_GOTOFF16 27 +#define R_390_GOTOFF64 28 +#define R_390_GOTPLT12 29 +#define R_390_GOTPLT16 30 +#define R_390_GOTPLT32 31 +#define R_390_GOTPLT64 32 +#define R_390_GOTPLTENT 33 +#define R_390_PLTOFF16 34 +#define R_390_PLTOFF32 35 +#define R_390_PLTOFF64 36 +#define R_390_TLS_LOAD 37 +#define R_390_TLS_GDCALL 38 + +#define R_390_TLS_LDCALL 39 + +#define R_390_TLS_GD32 40 + +#define R_390_TLS_GD64 41 + +#define R_390_TLS_GOTIE12 42 + +#define R_390_TLS_GOTIE32 43 + +#define R_390_TLS_GOTIE64 44 + +#define R_390_TLS_LDM32 45 + +#define R_390_TLS_LDM64 46 + +#define R_390_TLS_IE32 47 + +#define R_390_TLS_IE64 48 + +#define R_390_TLS_IEENT 49 + +#define R_390_TLS_LE32 50 + +#define R_390_TLS_LE64 51 + +#define R_390_TLS_LDO32 52 + +#define R_390_TLS_LDO64 53 + +#define R_390_TLS_DTPMOD 54 +#define R_390_TLS_DTPOFF 55 +#define R_390_TLS_TPOFF 56 + +#define R_390_20 57 +#define R_390_GOT20 58 +#define R_390_GOTPLT20 59 +#define R_390_TLS_GOTIE20 60 + + +#define R_390_NUM 61 + + + +#define R_CRIS_NONE 0 +#define R_CRIS_8 1 +#define R_CRIS_16 2 +#define R_CRIS_32 3 +#define R_CRIS_8_PCREL 4 +#define R_CRIS_16_PCREL 5 +#define R_CRIS_32_PCREL 6 +#define R_CRIS_GNU_VTINHERIT 7 +#define R_CRIS_GNU_VTENTRY 8 +#define R_CRIS_COPY 9 +#define R_CRIS_GLOB_DAT 10 +#define R_CRIS_JUMP_SLOT 11 +#define R_CRIS_RELATIVE 12 +#define R_CRIS_16_GOT 13 +#define R_CRIS_32_GOT 14 +#define R_CRIS_16_GOTPLT 15 +#define R_CRIS_32_GOTPLT 16 +#define R_CRIS_32_GOTREL 17 +#define R_CRIS_32_PLT_GOTREL 18 +#define R_CRIS_32_PLT_PCREL 19 + +#define R_CRIS_NUM 20 + + + +#define R_X86_64_NONE 0 +#define R_X86_64_64 1 +#define R_X86_64_PC32 2 +#define R_X86_64_GOT32 3 +#define R_X86_64_PLT32 4 +#define R_X86_64_COPY 5 +#define R_X86_64_GLOB_DAT 6 +#define R_X86_64_JUMP_SLOT 7 +#define R_X86_64_RELATIVE 8 +#define R_X86_64_GOTPCREL 9 + +#define R_X86_64_32 10 +#define R_X86_64_32S 11 +#define R_X86_64_16 12 +#define R_X86_64_PC16 13 +#define R_X86_64_8 14 +#define R_X86_64_PC8 15 +#define R_X86_64_DTPMOD64 16 +#define R_X86_64_DTPOFF64 17 +#define R_X86_64_TPOFF64 18 +#define R_X86_64_TLSGD 19 + +#define R_X86_64_TLSLD 20 + +#define R_X86_64_DTPOFF32 21 +#define R_X86_64_GOTTPOFF 22 + +#define R_X86_64_TPOFF32 23 +#define R_X86_64_PC64 24 +#define R_X86_64_GOTOFF64 25 +#define R_X86_64_GOTPC32 26 +#define R_X86_64_GOT64 27 +#define R_X86_64_GOTPCREL64 28 +#define R_X86_64_GOTPC64 29 +#define R_X86_64_GOTPLT64 30 +#define R_X86_64_PLTOFF64 31 +#define R_X86_64_SIZE32 32 +#define R_X86_64_SIZE64 33 + +#define R_X86_64_GOTPC32_TLSDESC 34 +#define R_X86_64_TLSDESC_CALL 35 + +#define R_X86_64_TLSDESC 36 +#define R_X86_64_IRELATIVE 37 +#define R_X86_64_RELATIVE64 38 +#define R_X86_64_GOTPCRELX 41 +#define R_X86_64_REX_GOTPCRELX 42 +#define R_X86_64_NUM 43 + + + +#define R_MN10300_NONE 0 +#define R_MN10300_32 1 +#define R_MN10300_16 2 +#define R_MN10300_8 3 +#define R_MN10300_PCREL32 4 +#define R_MN10300_PCREL16 5 +#define R_MN10300_PCREL8 6 +#define R_MN10300_GNU_VTINHERIT 7 +#define R_MN10300_GNU_VTENTRY 8 +#define R_MN10300_24 9 +#define R_MN10300_GOTPC32 10 +#define R_MN10300_GOTPC16 11 +#define R_MN10300_GOTOFF32 12 +#define R_MN10300_GOTOFF24 13 +#define R_MN10300_GOTOFF16 14 +#define R_MN10300_PLT32 15 +#define R_MN10300_PLT16 16 +#define R_MN10300_GOT32 17 +#define R_MN10300_GOT24 18 +#define R_MN10300_GOT16 19 +#define R_MN10300_COPY 20 +#define R_MN10300_GLOB_DAT 21 +#define R_MN10300_JMP_SLOT 22 +#define R_MN10300_RELATIVE 23 + +#define R_MN10300_NUM 24 + + + +#define R_M32R_NONE 0 +#define R_M32R_16 1 +#define R_M32R_32 2 +#define R_M32R_24 3 +#define R_M32R_10_PCREL 4 +#define R_M32R_18_PCREL 5 +#define R_M32R_26_PCREL 6 +#define R_M32R_HI16_ULO 7 +#define R_M32R_HI16_SLO 8 +#define R_M32R_LO16 9 +#define R_M32R_SDA16 10 +#define R_M32R_GNU_VTINHERIT 11 +#define R_M32R_GNU_VTENTRY 12 + +#define R_M32R_16_RELA 33 +#define R_M32R_32_RELA 34 +#define R_M32R_24_RELA 35 +#define R_M32R_10_PCREL_RELA 36 +#define R_M32R_18_PCREL_RELA 37 +#define R_M32R_26_PCREL_RELA 38 +#define R_M32R_HI16_ULO_RELA 39 +#define R_M32R_HI16_SLO_RELA 40 +#define R_M32R_LO16_RELA 41 +#define R_M32R_SDA16_RELA 42 +#define R_M32R_RELA_GNU_VTINHERIT 43 +#define R_M32R_RELA_GNU_VTENTRY 44 +#define R_M32R_REL32 45 + +#define R_M32R_GOT24 48 +#define R_M32R_26_PLTREL 49 +#define R_M32R_COPY 50 +#define R_M32R_GLOB_DAT 51 +#define R_M32R_JMP_SLOT 52 +#define R_M32R_RELATIVE 53 +#define R_M32R_GOTOFF 54 +#define R_M32R_GOTPC24 55 +#define R_M32R_GOT16_HI_ULO 56 + +#define R_M32R_GOT16_HI_SLO 57 + +#define R_M32R_GOT16_LO 58 +#define R_M32R_GOTPC_HI_ULO 59 + +#define R_M32R_GOTPC_HI_SLO 60 + +#define R_M32R_GOTPC_LO 61 + +#define R_M32R_GOTOFF_HI_ULO 62 + +#define R_M32R_GOTOFF_HI_SLO 63 + +#define R_M32R_GOTOFF_LO 64 +#define R_M32R_NUM 256 + +#define R_MICROBLAZE_NONE 0 +#define R_MICROBLAZE_32 1 +#define R_MICROBLAZE_32_PCREL 2 +#define R_MICROBLAZE_64_PCREL 3 +#define R_MICROBLAZE_32_PCREL_LO 4 +#define R_MICROBLAZE_64 5 +#define R_MICROBLAZE_32_LO 6 +#define R_MICROBLAZE_SRO32 7 +#define R_MICROBLAZE_SRW32 8 +#define R_MICROBLAZE_64_NONE 9 +#define R_MICROBLAZE_32_SYM_OP_SYM 10 +#define R_MICROBLAZE_GNU_VTINHERIT 11 +#define R_MICROBLAZE_GNU_VTENTRY 12 +#define R_MICROBLAZE_GOTPC_64 13 +#define R_MICROBLAZE_GOT_64 14 +#define R_MICROBLAZE_PLT_64 15 +#define R_MICROBLAZE_REL 16 +#define R_MICROBLAZE_JUMP_SLOT 17 +#define R_MICROBLAZE_GLOB_DAT 18 +#define R_MICROBLAZE_GOTOFF_64 19 +#define R_MICROBLAZE_GOTOFF_32 20 +#define R_MICROBLAZE_COPY 21 +#define R_MICROBLAZE_TLS 22 +#define R_MICROBLAZE_TLSGD 23 +#define R_MICROBLAZE_TLSLD 24 +#define R_MICROBLAZE_TLSDTPMOD32 25 +#define R_MICROBLAZE_TLSDTPREL32 26 +#define R_MICROBLAZE_TLSDTPREL64 27 +#define R_MICROBLAZE_TLSGOTTPREL32 28 +#define R_MICROBLAZE_TLSTPREL32 29 + +#define DT_NIOS2_GP 0x70000002 + +#define R_NIOS2_NONE 0 +#define R_NIOS2_S16 1 +#define R_NIOS2_U16 2 +#define R_NIOS2_PCREL16 3 +#define R_NIOS2_CALL26 4 +#define R_NIOS2_IMM5 5 +#define R_NIOS2_CACHE_OPX 6 +#define R_NIOS2_IMM6 7 +#define R_NIOS2_IMM8 8 +#define R_NIOS2_HI16 9 +#define R_NIOS2_LO16 10 +#define R_NIOS2_HIADJ16 11 +#define R_NIOS2_BFD_RELOC_32 12 +#define R_NIOS2_BFD_RELOC_16 13 +#define R_NIOS2_BFD_RELOC_8 14 +#define R_NIOS2_GPREL 15 +#define R_NIOS2_GNU_VTINHERIT 16 +#define R_NIOS2_GNU_VTENTRY 17 +#define R_NIOS2_UJMP 18 +#define R_NIOS2_CJMP 19 +#define R_NIOS2_CALLR 20 +#define R_NIOS2_ALIGN 21 +#define R_NIOS2_GOT16 22 +#define R_NIOS2_CALL16 23 +#define R_NIOS2_GOTOFF_LO 24 +#define R_NIOS2_GOTOFF_HA 25 +#define R_NIOS2_PCREL_LO 26 +#define R_NIOS2_PCREL_HA 27 +#define R_NIOS2_TLS_GD16 28 +#define R_NIOS2_TLS_LDM16 29 +#define R_NIOS2_TLS_LDO16 30 +#define R_NIOS2_TLS_IE16 31 +#define R_NIOS2_TLS_LE16 32 +#define R_NIOS2_TLS_DTPMOD 33 +#define R_NIOS2_TLS_DTPREL 34 +#define R_NIOS2_TLS_TPREL 35 +#define R_NIOS2_COPY 36 +#define R_NIOS2_GLOB_DAT 37 +#define R_NIOS2_JUMP_SLOT 38 +#define R_NIOS2_RELATIVE 39 +#define R_NIOS2_GOTOFF 40 +#define R_NIOS2_CALL26_NOAT 41 +#define R_NIOS2_GOT_LO 42 +#define R_NIOS2_GOT_HA 43 +#define R_NIOS2_CALL_LO 44 +#define R_NIOS2_CALL_HA 45 + +#define R_OR1K_NONE 0 +#define R_OR1K_32 1 +#define R_OR1K_16 2 +#define R_OR1K_8 3 +#define R_OR1K_LO_16_IN_INSN 4 +#define R_OR1K_HI_16_IN_INSN 5 +#define R_OR1K_INSN_REL_26 6 +#define R_OR1K_GNU_VTENTRY 7 +#define R_OR1K_GNU_VTINHERIT 8 +#define R_OR1K_32_PCREL 9 +#define R_OR1K_16_PCREL 10 +#define R_OR1K_8_PCREL 11 +#define R_OR1K_GOTPC_HI16 12 +#define R_OR1K_GOTPC_LO16 13 +#define R_OR1K_GOT16 14 +#define R_OR1K_PLT26 15 +#define R_OR1K_GOTOFF_HI16 16 +#define R_OR1K_GOTOFF_LO16 17 +#define R_OR1K_COPY 18 +#define R_OR1K_GLOB_DAT 19 +#define R_OR1K_JMP_SLOT 20 +#define R_OR1K_RELATIVE 21 +#define R_OR1K_TLS_GD_HI16 22 +#define R_OR1K_TLS_GD_LO16 23 +#define R_OR1K_TLS_LDM_HI16 24 +#define R_OR1K_TLS_LDM_LO16 25 +#define R_OR1K_TLS_LDO_HI16 26 +#define R_OR1K_TLS_LDO_LO16 27 +#define R_OR1K_TLS_IE_HI16 28 +#define R_OR1K_TLS_IE_LO16 29 +#define R_OR1K_TLS_LE_HI16 30 +#define R_OR1K_TLS_LE_LO16 31 +#define R_OR1K_TLS_TPOFF 32 +#define R_OR1K_TLS_DTPOFF 33 +#define R_OR1K_TLS_DTPMOD 34 + +#define R_BPF_NONE 0 +#define R_BPF_MAP_FD 1 + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/tools/gbafix/gbafix.c b/tools/gbafix/gbafix.c index 81c8c04c0..9088cdc5f 100644 --- a/tools/gbafix/gbafix.c +++ b/tools/gbafix/gbafix.c @@ -1,45 +1,46 @@ /* - "$Id: gbafix.c,v 1.2 2008-07-30 17:12:51 wntrmute Exp $" + "$Id: gbafix.c,v 1.2 2008-07-30 17:12:51 wntrmute Exp $" - DevkitPro GBA ROM fix utility + DevkitPro GBA ROM fix utility - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA. + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. - Please report all bugs and problems through the bug tracker at - "http://sourceforge.net/tracker/?group_id=114505&atid=668551". + Please report all bugs and problems through the bug tracker at + "http://sourceforge.net/tracker/?group_id=114505&atid=668551". - "$Header: /lvm/shared/ds/ds/cvs/devkitpro-cvsbackup/tools/gba/gbatools/gbafix.c,v 1.2 2008-07-30 17:12:51 wntrmute Exp $" + "$Header: /lvm/shared/ds/ds/cvs/devkitpro-cvsbackup/tools/gba/gbatools/gbafix.c,v 1.2 2008-07-30 17:12:51 wntrmute Exp $" */ //--------------------------------------------------------------------------------- // gbafix.c //--------------------------------------------------------------------------------- /* - Gameboy Advance ROM fixer (by Dark Fader / BlackThunder / WinterMute / Diegoisawesome) - Validates header of GBA roms. - - History - ------- - v1.06 - added output silencing, (Diegoisawesome) - v1.05 - added debug offset argument, (Diegoisawesome) - v1.04 - converted to plain C, (WinterMute) - v1.03 - header.fixed, header.device_type - v1.02 - redefined the options (rgbfix style), checksum=0 - v1.01 - fix in parameters - v1.00 - logo, complement + Gameboy Advance ROM fixer (by Dark Fader / BlackThunder / WinterMute / Diegoisawesome) + Validates header of GBA roms. + + History + ------- + v1.07 - added support for ELF input, (PikalaxALT) + v1.06 - added output silencing, (Diegoisawesome) + v1.05 - added debug offset argument, (Diegoisawesome) + v1.04 - converted to plain C, (WinterMute) + v1.03 - header.fixed, header.device_type + v1.02 - redefined the options (rgbfix style), checksum=0 + v1.01 - fix in parameters + v1.00 - logo, complement */ #pragma pack(1) @@ -48,26 +49,27 @@ #include <stdlib.h> #include <string.h> #include <stdint.h> +#include "elf.h" -#define VER "1.06" -#define ARGV argv[arg] -#define VALUE (ARGV+2) -#define NUMBER strtoul(VALUE, NULL, 0) +#define VER "1.07" +#define ARGV argv[arg] +#define VALUE (ARGV+2) +#define NUMBER strtoul(VALUE, NULL, 0) typedef struct { - uint32_t start_code; // B instruction - uint8_t logo[0xA0-0x04]; // logo data - uint8_t title[0xC]; // game title name - uint32_t game_code; // - uint16_t maker_code; // - uint8_t fixed; // 0x96 - uint8_t unit_code; // 0x00 - uint8_t device_type; // 0x00 - uint8_t unused[7]; // - uint8_t game_version; // 0x00 - uint8_t complement; // 800000A0..800000BC - uint16_t checksum; // 0x0000 + uint32_t start_code; // B instruction + uint8_t logo[0xA0-0x04]; // logo data + uint8_t title[0xC]; // game title name + uint32_t game_code; // + uint16_t maker_code; // + uint8_t fixed; // 0x96 + uint8_t unit_code; // 0x00 + uint8_t device_type; // 0x00 + uint8_t unused[7]; // + uint8_t game_version; // 0x00 + uint8_t complement; // 800000A0..800000BC + uint16_t checksum; // 0x0000 } Header; @@ -77,55 +79,55 @@ unsigned short checksum_without_header = 0; const Header good_header = { - // start_code - 0xEA00002E, - // logo - { 0x24,0xFF,0xAE,0x51,0x69,0x9A,0xA2,0x21,0x3D,0x84,0x82,0x0A,0x84,0xE4,0x09,0xAD, - 0x11,0x24,0x8B,0x98,0xC0,0x81,0x7F,0x21,0xA3,0x52,0xBE,0x19,0x93,0x09,0xCE,0x20, - 0x10,0x46,0x4A,0x4A,0xF8,0x27,0x31,0xEC,0x58,0xC7,0xE8,0x33,0x82,0xE3,0xCE,0xBF, - 0x85,0xF4,0xDF,0x94,0xCE,0x4B,0x09,0xC1,0x94,0x56,0x8A,0xC0,0x13,0x72,0xA7,0xFC, - 0x9F,0x84,0x4D,0x73,0xA3,0xCA,0x9A,0x61,0x58,0x97,0xA3,0x27,0xFC,0x03,0x98,0x76, - 0x23,0x1D,0xC7,0x61,0x03,0x04,0xAE,0x56,0xBF,0x38,0x84,0x00,0x40,0xA7,0x0E,0xFD, - 0xFF,0x52,0xFE,0x03,0x6F,0x95,0x30,0xF1,0x97,0xFB,0xC0,0x85,0x60,0xD6,0x80,0x25, - 0xA9,0x63,0xBE,0x03,0x01,0x4E,0x38,0xE2,0xF9,0xA2,0x34,0xFF,0xBB,0x3E,0x03,0x44, - 0x78,0x00,0x90,0xCB,0x88,0x11,0x3A,0x94,0x65,0xC0,0x7C,0x63,0x87,0xF0,0x3C,0xAF, - 0xD6,0x25,0xE4,0x8B,0x38,0x0A,0xAC,0x72,0x21,0xD4,0xF8,0x07 } , - // title - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - // game code - 0x00000000, - // maker code - 0x3130, - // fixed - 0x96, - // unit_code - 0x00, - // device type - 0x00, - // unused - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - // game version - 0x00, - // complement - 0x00, - // checksum - 0x0000 + // start_code + 0xEA00002E, + // logo + { 0x24,0xFF,0xAE,0x51,0x69,0x9A,0xA2,0x21,0x3D,0x84,0x82,0x0A,0x84,0xE4,0x09,0xAD, + 0x11,0x24,0x8B,0x98,0xC0,0x81,0x7F,0x21,0xA3,0x52,0xBE,0x19,0x93,0x09,0xCE,0x20, + 0x10,0x46,0x4A,0x4A,0xF8,0x27,0x31,0xEC,0x58,0xC7,0xE8,0x33,0x82,0xE3,0xCE,0xBF, + 0x85,0xF4,0xDF,0x94,0xCE,0x4B,0x09,0xC1,0x94,0x56,0x8A,0xC0,0x13,0x72,0xA7,0xFC, + 0x9F,0x84,0x4D,0x73,0xA3,0xCA,0x9A,0x61,0x58,0x97,0xA3,0x27,0xFC,0x03,0x98,0x76, + 0x23,0x1D,0xC7,0x61,0x03,0x04,0xAE,0x56,0xBF,0x38,0x84,0x00,0x40,0xA7,0x0E,0xFD, + 0xFF,0x52,0xFE,0x03,0x6F,0x95,0x30,0xF1,0x97,0xFB,0xC0,0x85,0x60,0xD6,0x80,0x25, + 0xA9,0x63,0xBE,0x03,0x01,0x4E,0x38,0xE2,0xF9,0xA2,0x34,0xFF,0xBB,0x3E,0x03,0x44, + 0x78,0x00,0x90,0xCB,0x88,0x11,0x3A,0x94,0x65,0xC0,0x7C,0x63,0x87,0xF0,0x3C,0xAF, + 0xD6,0x25,0xE4,0x8B,0x38,0x0A,0xAC,0x72,0x21,0xD4,0xF8,0x07 } , + // title + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + // game code + 0x00000000, + // maker code + 0x3130, + // fixed + 0x96, + // unit_code + 0x00, + // device type + 0x00, + // unused + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + // game version + 0x00, + // complement + 0x00, + // checksum + 0x0000 }; //--------------------------------------------------------------------------------- char HeaderComplement() /*--------------------------------------------------------------------------------- - Calculate Header complement check + Calculate Header complement check ---------------------------------------------------------------------------------*/ { - int n; - char c = 0; - char *p = (char *)&header + 0xA0; - for (n=0; n<0xBD-0xA0; n++) - { - c += *p++; - } - return -(0x19+c); + int n; + char c = 0; + char *p = (char *)&header + 0xA0; + for (n=0; n<0xBD-0xA0; n++) + { + c += *p++; + } + return -(0x19+c); } @@ -133,157 +135,183 @@ char HeaderComplement() int main(int argc, char *argv[]) //--------------------------------------------------------------------------------- { - int arg; - char *argfile = 0; - FILE *infile; - int silent = 0; - - int size,bit; - - // show syntax - if (argc <= 1) - { - printf("GBA ROM fixer v"VER" by Dark Fader / BlackThunder / WinterMute / Diegoisawesome \n"); - printf("Syntax: gbafix <rom.gba> [-p] [-t[title]] [-c<game_code>] [-m<maker_code>] [-r<version>] [-d<debug>] [--silent]\n"); - printf("\n"); - printf("parameters:\n"); - printf(" -p Pad to next exact power of 2. No minimum size!\n"); - printf(" -t[<title>] Patch title. Stripped filename if none given.\n"); - printf(" -c<game_code> Patch game code (four characters)\n"); - printf(" -m<maker_code> Patch maker code (two characters)\n"); - printf(" -r<version> Patch game version (number)\n"); - printf(" -d<debug> Enable debugging handler and set debug entry point (0 or 1)\n"); - printf(" --silent Silence non-error output\n"); - return -1; - } - - // get filename - for (arg=1; arg<argc; arg++) - { - if (ARGV[0] != '-') { argfile=ARGV; } - if (strncmp("--silent", &ARGV[0], 7) == 0) { silent = 1; } - } - - // check filename - if (!argfile) - { - fprintf(stderr, "Filename needed!\n"); - return -1; - } - - // read file - infile = fopen(argfile, "r+b"); - if (!infile) { fprintf(stderr, "Error opening input file!\n"); return -1; } - fseek(infile, 0, SEEK_SET); - fread(&header, sizeof(header), 1, infile); - - // fix some data - memcpy(header.logo, good_header.logo, sizeof(header.logo)); - memcpy(&header.fixed, &good_header.fixed, sizeof(header.fixed)); - memcpy(&header.device_type, &good_header.device_type, sizeof(header.device_type)); - - // parse command line - for (arg=1; arg<argc; arg++) - { - if ((ARGV[0] == '-')) - { - switch (ARGV[1]) - { - case 'p': // pad - { - fseek(infile, 0, SEEK_END); - size = ftell(infile); - for (bit=31; bit>=0; bit--) if (size & (1<<bit)) break; - if (size != (1<<bit)) - { - int todo = (1<<(bit+1)) - size; - while (todo--) fputc(0xFF, infile); - } - fseek(infile, 0, SEEK_SET); - break; - } - - case 't': // title - { - char title[256]; - memset(title, 0, sizeof(title)); - if (VALUE[0]) - { - strncpy(title, VALUE, sizeof(header.title)); - } - else - { - // use filename - char s[256], *begin=s, *t; strcpy(s, argfile); - t = strrchr(s, '\\'); if (t) begin = t+1; - t = strrchr(s, '/'); if (t) begin = t+1; - t = strrchr(s, '.'); if (t) *t = 0; - strncpy(title, begin, sizeof(header.title)); - if (!silent) printf("%s\n",begin); - } - memcpy(header.title, title, sizeof(header.title)); // copy - break; - } - - case 'c': // game code - { - //if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } - //header.game_code = NUMBER; - header.game_code = VALUE[0] | VALUE[1]<<8 | VALUE[2]<<16 | VALUE[3]<<24; - break; - } - - case 'm': // maker code - { - //if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } - //header.maker_code = (unsigned short)NUMBER; - header.maker_code = VALUE[0] | VALUE[1]<<8; - break; - } - - case 'v': // ignored, compatability with other gbafix - { - break; - } - - case 'r': // version - { - if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } - header.game_version = (unsigned char)NUMBER; - break; - } - - case 'd': // debug - { - if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } - header.logo[0x9C-0x04] = 0xA5; // debug enable - header.device_type = (unsigned char)((NUMBER & 1) << 7); // debug handler entry point - break; - } - case '-': // long arguments - { - if (strncmp("silent", &ARGV[2], 6) == 0) { continue; } - break; - } - default: - { - printf("Invalid option: %s\n", ARGV); - } - } - } - } - - // update complement check & total checksum - header.complement = 0; - header.checksum = 0; // must be 0 - header.complement = HeaderComplement(); - //header.checksum = checksum_without_header + HeaderChecksum(); - - fseek(infile, 0, SEEK_SET); - fwrite(&header, sizeof(header), 1, infile); - fclose(infile); - - if (!silent) printf("ROM fixed!\n"); - - return 0; + int arg; + char *argfile = 0; + FILE *infile; + int silent = 0; + int schedule_pad = 0; + + int size,bit; + + // show syntax + if (argc <= 1) + { + printf("GBA ROM fixer v"VER" by Dark Fader / BlackThunder / WinterMute / Diegoisawesome \n"); + printf("Syntax: gbafix <rom.gba> [-p] [-t[title]] [-c<game_code>] [-m<maker_code>] [-r<version>] [-d<debug>] [--silent]\n"); + printf("\n"); + printf("parameters:\n"); + printf(" -p Pad to next exact power of 2. No minimum size!\n"); + printf(" -t[<title>] Patch title. Stripped filename if none given.\n"); + printf(" -c<game_code> Patch game code (four characters)\n"); + printf(" -m<maker_code> Patch maker code (two characters)\n"); + printf(" -r<version> Patch game version (number)\n"); + printf(" -d<debug> Enable debugging handler and set debug entry point (0 or 1)\n"); + printf(" --silent Silence non-error output\n"); + return -1; + } + + // get filename + for (arg=1; arg<argc; arg++) + { + if (ARGV[0] != '-') { argfile=ARGV; } + if (strncmp("--silent", &ARGV[0], 7) == 0) { silent = 1; } + } + + // check filename + if (!argfile) + { + fprintf(stderr, "Filename needed!\n"); + return -1; + } + + uint32_t sh_offset = 0; + + // read file + infile = fopen(argfile, "r+b"); + if (!infile) { fprintf(stderr, "Error opening input file!\n"); return -1; } + fseek(infile, sh_offset, SEEK_SET); + fread(&header, sizeof(header), 1, infile); + + // elf check + Elf32_Shdr secHeader; + if (memcmp(&header, ELFMAG, 4) == 0) { + Elf32_Ehdr *elfHeader = (Elf32_Ehdr *)&header; + fseek(infile, elfHeader->e_shoff, SEEK_SET); + int i; + for (i = 0; i < elfHeader->e_shnum; i++) { + fread(&secHeader, sizeof(Elf32_Shdr), 1, infile); + if (secHeader.sh_type == SHT_PROGBITS && secHeader.sh_addr == elfHeader->e_entry) break; + } + if (i == elfHeader->e_shnum) { fprintf(stderr, "Error finding entry point!\n"); return 1; } + fseek(infile, secHeader.sh_offset, SEEK_SET); + sh_offset = secHeader.sh_offset; + fread(&header, sizeof(header), 1, infile); + } + + // fix some data + memcpy(header.logo, good_header.logo, sizeof(header.logo)); + memcpy(&header.fixed, &good_header.fixed, sizeof(header.fixed)); + memcpy(&header.device_type, &good_header.device_type, sizeof(header.device_type)); + + // parse command line + for (arg=1; arg<argc; arg++) + { + if ((ARGV[0] == '-')) + { + switch (ARGV[1]) + { + case 'p': // pad + { + schedule_pad = 1; + break; + } + + case 't': // title + { + char title[256]; + memset(title, 0, sizeof(title)); + if (VALUE[0]) + { + strncpy(title, VALUE, sizeof(header.title)); + } + else + { + // use filename + char s[256], *begin=s, *t; strcpy(s, argfile); + t = strrchr(s, '\\'); if (t) begin = t+1; + t = strrchr(s, '/'); if (t) begin = t+1; + t = strrchr(s, '.'); if (t) *t = 0; + strncpy(title, begin, sizeof(header.title)); + if (!silent) printf("%s\n",begin); + } + memcpy(header.title, title, sizeof(header.title)); // copy + break; + } + + case 'c': // game code + { + //if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } + //header.game_code = NUMBER; + header.game_code = VALUE[0] | VALUE[1]<<8 | VALUE[2]<<16 | VALUE[3]<<24; + break; + } + + case 'm': // maker code + { + //if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } + //header.maker_code = (unsigned short)NUMBER; + header.maker_code = VALUE[0] | VALUE[1]<<8; + break; + } + + case 'v': // ignored, compatability with other gbafix + { + break; + } + + case 'r': // version + { + if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } + header.game_version = (unsigned char)NUMBER; + break; + } + + case 'd': // debug + { + if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } + header.logo[0x9C-0x04] = 0xA5; // debug enable + header.device_type = (unsigned char)((NUMBER & 1) << 7); // debug handler entry point + break; + } + case '-': // long arguments + { + if (strncmp("silent", &ARGV[2], 6) == 0) { continue; } + break; + } + default: + { + printf("Invalid option: %s\n", ARGV); + } + } + } + } + + // update complement check & total checksum + header.complement = 0; + header.checksum = 0; // must be 0 + header.complement = HeaderComplement(); + //header.checksum = checksum_without_header + HeaderChecksum(); + + if (schedule_pad) { + if (sh_offset != 0) { + fprintf(stderr, "Warning: Cannot safely pad an ELF\n"); + } else { + fseek(infile, 0, SEEK_END); + size = ftell(infile); + for (bit=31; bit>=0; bit--) if (size & (1<<bit)) break; + if (size != (1<<bit)) + { + int todo = (1<<(bit+1)) - size; + while (todo--) fputc(0xFF, infile); + } + } + } + + fseek(infile, sh_offset, SEEK_SET); + fwrite(&header, sizeof(header), 1, infile); + fclose(infile); + + if (!silent) printf("ROM fixed!\n"); + + return 0; } diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index 339585b92..f0638414d 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -1,16 +1,19 @@ 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/Makefile b/tools/jsonproc/Makefile index 69093a216..47198b171 100755 --- a/tools/jsonproc/Makefile +++ b/tools/jsonproc/Makefile @@ -1,4 +1,4 @@ -CXX := g++ +CXX ?= g++ CXXFLAGS := -Wall -std=c++11 -O2 @@ -8,7 +8,10 @@ SRCS := jsonproc.cpp HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp -.PHONY: clean +.PHONY: all clean + +all: jsonproc + @: jsonproc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/mapjson/Makefile b/tools/mapjson/Makefile index d09acad50..c1f703f9f 100644 --- a/tools/mapjson/Makefile +++ b/tools/mapjson/Makefile @@ -1,4 +1,4 @@ -CXX := g++ +CXX ?= g++ CXXFLAGS := -Wall -std=c++11 -O2 @@ -6,7 +6,10 @@ SRCS := json11.cpp mapjson.cpp HEADERS := mapjson.h -.PHONY: clean +.PHONY: all clean + +all: mapjson + @: mapjson: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/mid2agb/Makefile b/tools/mid2agb/Makefile index 77f96db5a..451d4b39f 100644 --- a/tools/mid2agb/Makefile +++ b/tools/mid2agb/Makefile @@ -1,4 +1,4 @@ -CXX := g++ +CXX ?= g++ CXXFLAGS := -std=c++11 -O2 -Wall -Wno-switch -Werror diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 3d3275819..8c48afea2 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -1,4 +1,4 @@ -CXX := g++ +CXX ?= g++ CXXFLAGS := -std=c++11 -O2 -Wall -Wno-switch -Werror @@ -8,7 +8,10 @@ SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ utf8.h -.PHONY: clean +.PHONY: all clean + +all: preproc + @: preproc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) 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/Makefile b/tools/ramscrgen/Makefile index 9aa309aa1..4e901a29c 100644 --- a/tools/ramscrgen/Makefile +++ b/tools/ramscrgen/Makefile @@ -1,4 +1,4 @@ -CXX := g++ +CXX ?= g++ CXXFLAGS := -std=c++11 -O2 -Wall -Wno-switch -Werror @@ -6,7 +6,10 @@ SRCS := main.cpp sym_file.cpp elf.cpp HEADERS := ramscrgen.h sym_file.h elf.h char_util.h -.PHONY: clean +.PHONY: all clean + +all: ramscrgen + @: ramscrgen: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) 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/rsfont/Makefile b/tools/rsfont/Makefile index 582be7b88..930a92b36 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -1,4 +1,4 @@ -CC = gcc +CC ?= gcc CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK @@ -6,7 +6,10 @@ LIBS = -lpng -lz SRCS = main.c convert_png.c util.c font.c -.PHONY: clean +.PHONY: all clean + +all: rsfont + @: rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile index 53c9d0060..52e663d8d 100644 --- a/tools/scaninc/Makefile +++ b/tools/scaninc/Makefile @@ -1,4 +1,4 @@ -CXX = g++ +CXX ?= g++ CXXFLAGS = -Wall -Werror -std=c++11 -O2 @@ -6,7 +6,10 @@ SRCS = scaninc.cpp c_file.cpp asm_file.cpp source_file.cpp HEADERS := scaninc.h asm_file.h c_file.h source_file.h -.PHONY: clean +.PHONY: all clean + +all: scaninc + @: scaninc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) 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 { |