summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--INSTALL.md26
-rw-r--r--Makefile79
-rw-r--r--config.mk13
-rw-r--r--data/btl_attrs.s45
-rw-r--r--data/debug_mystery_event_scripts.s131
-rw-r--r--data/pokemon_storage_system.s7
-rw-r--r--include/battle.h21
-rw-r--r--include/config.h17
-rw-r--r--include/fieldmap.h4
-rw-r--r--include/global.h5
-rw-r--r--include/graphics.h9
-rw-r--r--include/main.h2
-rw-r--r--include/money.h2
-rw-r--r--include/pokemon.h4
-rw-r--r--include/start_menu.h15
-rw-r--r--ruby_debug.sha11
-rw-r--r--sapphire_de_debug.sha11
-rw-r--r--sapphire_debug.sha11
-rw-r--r--src/battle/anim/dark.c254
-rw-r--r--src/battle/anim/flying.c208
-rw-r--r--src/battle/anim/ice.c939
-rw-r--r--src/battle/anim/psychic.c135
-rw-r--r--src/battle/anim/water.c1043
-rw-r--r--src/battle_ai_script_commands.c303
-rw-r--r--src/battle_ai_switch_items.c275
-rw-r--r--src/battle_anim.c222
-rwxr-xr-xsrc/battle_anim_special.c80
-rw-r--r--src/battle_controller_player.c219
-rw-r--r--src/battle_main.c97
-rw-r--r--src/battle_script_commands.c968
-rw-r--r--src/berry_blender.c2
-rw-r--r--src/contest_painting.c192
-rw-r--r--src/data/graphics.c8
-rw-r--r--src/debug/mori_debug_menu.c6
-rw-r--r--src/debug/nakamura_debug_menu.c21
-rw-r--r--src/debug/nohara_debug_menu.c257
-rw-r--r--src/debug/start_menu_debug.c144
-rw-r--r--src/debug/taya_debug_window.c221
-rw-r--r--src/debug/tomomichi_debug_menu.c57
-rw-r--r--src/debug/watanabe_debug_menu.c19
-rw-r--r--src/decoration.c659
-rw-r--r--src/field_player_avatar.c12
-rw-r--r--src/field_tasks.c126
-rw-r--r--src/fieldmap.c2
-rw-r--r--src/libs/agb_flash_mx.c2
-rw-r--r--src/main.c11
-rw-r--r--src/mauville_man.c14
-rw-r--r--src/money.c27
-rw-r--r--src/pokemon_1.c3
-rw-r--r--src/pokemon_storage_system_4.c1366
-rw-r--r--src/pokemon_summary_screen.c939
-rw-r--r--src/roulette.c45
-rw-r--r--src/roulette_gfx.c365
-rw-r--r--src/save.c4
-rw-r--r--src/save_failed_screen.c4
-rw-r--r--src/secret_base.c6
-rw-r--r--src/slot_machine.c4
-rw-r--r--src/text.c9
-rw-r--r--src/trade.c199
-rw-r--r--src/trainer_card.c386
-rw-r--r--src/use_pokeblock.c60
-rw-r--r--src/util.c286
-rw-r--r--sym_common.txt14
63 files changed, 2128 insertions, 8468 deletions
diff --git a/INSTALL.md b/INSTALL.md
index 9b8003726..2b8d35db3 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -38,9 +38,9 @@ To set up the repository:
cd ../pokeruby
-To build **pokeruby.gba** and confirm it matches the official ROM image:
+To build Pokémon Ruby:
- make
+ make ruby
To build Pokémon Sapphire:
@@ -50,6 +50,15 @@ The above two commands will build the English v1.0 version of the respective tit
make ruby_rev2
+To also build debug targets (only v1.0 is currently supported), run either of the following:
+
+ make ruby_debug
+ make sapphire_debug
+
+To compare between official ROM images for each target:
+
+ make (target) COMPARE=1
+
## Notes
* 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`.
@@ -57,33 +66,28 @@ The above two commands will build the English v1.0 version of the respective tit
* 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)
## Notes about the German language ROMs
-This repository also supports the German versions of Ruby and Sapphire. However, due to major differences in scripts, text, and graphics, a special configuration needs to be set up before compilation and torn down after.
+This repository also supports the "first edition" German versions of Ruby and Sapphire. However, due to major differences in scripts, text, and graphics, a special configuration needs to be set up before compilation and torn down after.
To set up the repository:
make clean
sh de_before.sh
-To compile the German ROMs:
+To compile the "first edition" German ROMs:
make ruby_de
make sapphire_de
-To compile the leaked Debug ROM (German):
+To compile their debug equivalents:
make ruby_de_debug
+ make sapphire_de_debug
To restore the repository (**MUST BE DONE BEFORE ATTEMPTING TO BUILD ANY ENGLISH LANGUAGE ROM**):
make clean
sh de_after.sh
-# Guidance
-
-To build **pokeruby.gba** with your changes:
-
- make COMPARE=0
-
## Parallel builds
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.
diff --git a/Makefile b/Makefile
index 70eb57508..befd85598 100644
--- a/Makefile
+++ b/Makefile
@@ -38,8 +38,8 @@ GBAFIX := tools/gbafix/gbafix$(EXE)
MAPJSON := tools/mapjson/mapjson$(EXE)
JSONPROC := tools/jsonproc/jsonproc$(EXE)
-ASFLAGS := -mcpu=arm7tdmi -I include --defsym $(GAME_VERSION)=1 --defsym REVISION=$(GAME_REVISION) --defsym DEBUG_TRANSLATE=$(DEBUG_TRANSLATE) --defsym $(GAME_LANGUAGE)=1 --defsym DEBUG=$(DEBUG) --defsym MODERN=$(MODERN)
-CPPFLAGS := -iquote include -Werror -Wno-trigraphs -D $(GAME_VERSION) -D REVISION=$(GAME_REVISION) -D $(GAME_LANGUAGE) -DDEBUG_TRANSLATE=$(DEBUG_TRANSLATE) -D DEBUG=$(DEBUG) -D MODERN=$(MODERN)
+ASFLAGS := -mcpu=arm7tdmi -I include --defsym $(GAME_VERSION)=1 --defsym REVISION=$(GAME_REVISION) --defsym DEBUG_FIX=$(DEBUG_FIX) --defsym $(GAME_LANGUAGE)=1 --defsym DEBUG=$(DEBUG) --defsym MODERN=$(MODERN)
+CPPFLAGS := -iquote include -Werror -Wno-trigraphs -D $(GAME_VERSION) -D REVISION=$(GAME_REVISION) -D $(GAME_LANGUAGE) -D=DEBUG_FIX$(DEBUG_FIX) -D DEBUG=$(DEBUG) -D MODERN=$(MODERN)
ifeq ($(MODERN),0)
CPPFLAGS += -I tools/agbcc/include -nostdinc -undef
CC1FLAGS := -mthumb-interwork -Wimplicit -Wparentheses -Wunused -Werror -O2 -fhex-asm
@@ -105,8 +105,7 @@ endif
#### Main Rules ####
-ALL_BUILDS := ruby ruby_rev1 ruby_rev2 sapphire sapphire_rev1 sapphire_rev2 ruby_de sapphire_de ruby_de_debug
-ALL_BUILDS := ruby ruby_rev1 ruby_rev2 sapphire sapphire_rev1 sapphire_rev2 ruby_de sapphire_de ruby_de_debug ruby_en_debug
+ALL_BUILDS := ruby ruby_debug ruby_rev1 ruby_rev2 sapphire sapphire_debug sapphire_rev1 sapphire_rev2 ruby_de ruby_de_debug sapphire_de sapphire_de_debug
MODERN_BUILDS := $(ALL_BUILDS:%=%_modern)
# Available targets
@@ -217,39 +216,45 @@ $(BUILD_DIR)/%.o: %.s $$(ASM_DEP)
$(AS) $(ASFLAGS) $< -o $@
# "friendly" target names for convenience sake
-ruby: ; @$(MAKE) GAME_VERSION=RUBY
-ruby_rev1: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=1
-ruby_rev2: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=2
-sapphire: ; @$(MAKE) GAME_VERSION=SAPPHIRE
-sapphire_rev1: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=1
-sapphire_rev2: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=2
-ruby_de: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN
-sapphire_de: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN
-ruby_de_debug: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN DEBUG=1
-
-modern: ; @$(MAKE) GAME_VERSION=RUBY MODERN=1
-ruby_modern: ; @$(MAKE) GAME_VERSION=RUBY MODERN=1
-ruby_rev1_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=1 MODERN=1
-ruby_rev2_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=2 MODERN=1
-sapphire_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE MODERN=1
-sapphire_rev1_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=1 MODERN=1
-sapphire_rev2_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=2 MODERN=1
-ruby_de_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN MODERN=1
-sapphire_de_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN MODERN=1
-ruby_de_debug_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN DEBUG=1 MODERN=1
-
-ruby_en_debug: ; @$(MAKE) GAME_VERSION=RUBY DEBUG=1 DEBUG_TRANSLATE=1
-
-compare_ruby: ; @$(MAKE) GAME_VERSION=RUBY COMPARE=1
-compare_ruby_rev1: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=1 COMPARE=1
-compare_ruby_rev2: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=2 COMPARE=1
-compare_sapphire: ; @$(MAKE) GAME_VERSION=SAPPHIRE COMPARE=1
-compare_sapphire_rev1: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=1 COMPARE=1
-compare_sapphire_rev2: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=2 COMPARE=1
-compare_ruby_de: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN COMPARE=1
-compare_sapphire_de: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN COMPARE=1
-compare_ruby_de_debug: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN DEBUG=1 COMPARE=1
-compare_ruby_en_debug: ; @$(MAKE) GAME_VERSION=RUBY DEBUG=1 DEBUG_TRANSLATE=1 COMPARE=1
+ruby: ; @$(MAKE) GAME_VERSION=RUBY
+ruby_debug: ; @$(MAKE) GAME_VERSION=RUBY DEBUG=1
+ruby_rev1: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=1
+ruby_rev2: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=2
+sapphire: ; @$(MAKE) GAME_VERSION=SAPPHIRE
+sapphire_debug: ; @$(MAKE) GAME_VERSION=SAPPHIRE DEBUG=1
+sapphire_rev1: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=1
+sapphire_rev2: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=2
+ruby_de: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN
+ruby_de_debug: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN DEBUG=1
+sapphire_de: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN
+sapphire_de_debug: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN DEBUG=1
+
+modern: ; @$(MAKE) GAME_VERSION=RUBY MODERN=1
+ruby_modern: ; @$(MAKE) GAME_VERSION=RUBY MODERN=1
+ruby_debug_modern: ; @$(MAKE) GAME_VERSION=RUBY DEBUG=1 MODERN=1
+ruby_rev1_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=1 MODERN=1
+ruby_rev2_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=2 MODERN=1
+sapphire_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE MODERN=1
+sappphire_debug_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE DEBUG=1 MODERN=1
+sapphire_rev1_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=1 MODERN=1
+sapphire_rev2_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=2 MODERN=1
+ruby_de_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN MODERN=1
+ruby_de_debug_modern: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN DEBUG=1 MODERN=1
+sapphire_de_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN MODERN=1
+sapphire_de_debug_modern: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN DEBUG=1 MODERN=1
+
+compare_ruby: ; @$(MAKE) GAME_VERSION=RUBY COMPARE=1
+compare_ruby_debug: ; @$(MAKE) GAME_VERSION=RUBY DEBUG=1 COMPARE=1
+compare_ruby_rev1: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=1 COMPARE=1
+compare_ruby_rev2: ; @$(MAKE) GAME_VERSION=RUBY GAME_REVISION=2 COMPARE=1
+compare_sapphire: ; @$(MAKE) GAME_VERSION=SAPPHIRE COMPARE=1
+compare_sapphire_debug: ; @$(MAKE) GAME_VERSION=SAPPHIRE DEBUG=1 COMPARE=1
+compare_sapphire_rev1: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=1 COMPARE=1
+compare_sapphire_rev2: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_REVISION=2 COMPARE=1
+compare_ruby_de: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN COMPARE=1
+compare_ruby_de_debug: ; @$(MAKE) GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN DEBUG=1 COMPARE=1
+compare_sapphire_de: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN COMPARE=1
+compare_sapphire_de_debug: ; @$(MAKE) GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN DEBUG=1 COMPARE=1
#### Graphics Rules ####
diff --git a/config.mk b/config.mk
index 303af6233..fb5b79ee7 100644
--- a/config.mk
+++ b/config.mk
@@ -6,8 +6,8 @@ GAME_REVISION ?= 0
GAME_LANGUAGE ?= ENGLISH
DEBUG ?= 0
MODERN ?= 0
-DEBUG_TRANSLATE ?= 0
-COMPARE ?= 0
+DEBUG_FIX ?= 0
+COMPARE ?= 0
# For gbafix
MAKER_CODE := 01
@@ -55,8 +55,8 @@ else
endif
endif
-# Debug translations (always nonmatching)
-ifeq ($(DEBUG_TRANSLATE),1)
+# Debug fixes (always nonmatching)
+ifeq ($(DEBUG_FIX), 1)
COMPARE := 0
DEBUG = 1
endif
@@ -64,9 +64,8 @@ endif
# Debug
ifeq ($(DEBUG), 1)
BUILD_NAME := $(BUILD_NAME)_debug
-ifeq ($(GAME_LANGUAGE), ENGLISH)
- COMPARE := 0
- DEBUG_TRANSLATE := 1
+ifeq ($(DEBUG_FIX), 1)
+ BUILD_NAME := $(BUILD_NAME)_fixed
endif
endif
diff --git a/data/btl_attrs.s b/data/btl_attrs.s
index 3cee4e1c8..54328e7c7 100644
--- a/data/btl_attrs.s
+++ b/data/btl_attrs.s
@@ -104,11 +104,16 @@ gUnknown_Debug_821F5AC::
.byte 0x09, 0x14, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x0a, 0x00, 0x14, 0x00, 0x00, 0x14, 0x14, 0x00, 0x0b, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x0c, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00
.byte 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x0e, 0x14, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+.ifdef ENGLISH
+Str_821F624:: @ 0x821F624
+ .string "ーーーーーーーー$"
+.else @ GERMAN
Str_821F624:: @ 0x821F624
.string "ーーーーーーーーーーーー$"
+.endif @ GERMAN
-.if DEBUG_TRANSLATE
-
+.if DEBUG_FIX
+@ TODO: GERMAN translations
str_821F631:: @ 0x821F631
.string "JUNICHI$"
.string "STEVEN LOW$"
@@ -119,16 +124,18 @@ Str_821F649:: @ 0x821F649
.string "TETSUJI$"
debug_unk_0b::
-@ 0x821F64D
- .string "  ON$"
+ .string " "
+
+Str_821F64D::
+ .string "ON$"
-@ 0x821F652
+Str_821F652::
.string "OFF$"
-@ 0x821F655
+Str_821F655::
.string "MONO$"
-@ 0x821F65A
+Str_821F65A::
.string "STEREO$"
@ 0x821F65F
@@ -139,8 +146,7 @@ debug_unk_0b::
@ 0x821F66D
.string "Connection error$"
-
-.else @ !DEBUG_TRANSLATE
+.else @ !DEBUG_FIX
str_821F631:: @ 0x821F631
.string "ジュンイチ$"
.string "ダイゴロウ$"
@@ -151,16 +157,18 @@ Str_821F649:: @ 0x821F649
.string "てつじ$"
debug_unk_0b::
-@ 0x821F64D
- .string "  オン$"
+ .string " "
+
+Str_821F64D::
+ .string "オン$"
-@ 0x821F652
+Str_821F652::
.string "オフ$"
-@ 0x821F655
+Str_821F655::
.string "モノラル$"
-@ 0x821F65A
+Str_821F65A::
.string "ステレオ$"
@ 0x821F65F
@@ -172,7 +180,7 @@ debug_unk_0b::
@ 0x821F66D
.string "せつぞくエラー$"
-.endif @ !DEBUG_TRANSLATE
+.endif @ !DEBUG_FIX
@ 0x821f675
.byte 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00
@@ -191,7 +199,8 @@ gUnknown_Debug_821F680::
gUnknown_Debug_821F798::
.byte 0xc0, 0x03, 0x00, 0x00, 0xd6, 0x03, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x56, 0x04, 0x00, 0x00, 0xc0, 0x0b, 0x00, 0x00, 0xd6, 0x0b, 0x00, 0x00, 0x40, 0x0c, 0x00, 0x00, 0x56, 0x0c, 0x00, 0x00
-.if DEBUG_TRANSLATE
+.if DEBUG_FIX
+@ TODO: GERMAN translations
Str_821F7B8:: @ 0x821F7B8
.string "HEIGHT$"
@@ -210,7 +219,7 @@ Str_821F7EA:: @ 0x821F7EA
gUnknown_Debug_821F7F3::
.string "Would you like to save?$"
-.else @ !DEBUG_TRANSLATE
+.else @ !DEBUG_FIX
Str_821F7B8:: @ 0x821F7B8
.string "たかさ $"
@@ -229,7 +238,7 @@ Str_821F7EA:: @ 0x821F7EA
@ 0x821F7F3
gUnknown_Debug_821F7F3::
.string "セーブしますか?$"
-.endif @ DEBUG_TRANSLATE
+.endif @ !DEBUG_FIX
.endif @ DEBUG
diff --git a/data/debug_mystery_event_scripts.s b/data/debug_mystery_event_scripts.s
index a64f8351d..830cbeca6 100644
--- a/data/debug_mystery_event_scripts.s
+++ b/data/debug_mystery_event_scripts.s
@@ -17,8 +17,20 @@
.section .rodata
+.ifdef ENGLISH
+ .set unkConstant, 2
+.else @ GERMAN
+ .set unkConstant, 4
+.endif @ GERMAN
+
+.ifdef SAPPHIRE
+ .set versionMask, 0x100
+.else @ RUBY
+ .set versionMask, 0x80
+.endif @ RUBY
+
gUnknown_Debug_845DAE1::
- me_checkcompat gUnknown_Debug_845DAE1, 0x4, 0x4, 0x4, 0x80
+ me_checkcompat gUnknown_Debug_845DAE1, unkConstant, unkConstant, 0x4, versionMask
me_crc 0x0, _0845DAFF, _0845DAFFEnd
_0845DAFF:
me_initramscript MAP_PETALBURG_CITY_GYM, 0x1, _845DB56, _845DB56End
@@ -26,15 +38,15 @@ _0845DAFF:
me_runscript _0845DD0D
me_end
-.if DEBUG_TRANSLATE
+.ifdef ENGLISH
_0845DB16:
- .string "Run and visit your DAD in the\n"
- .string "PETALBURG CITY GYM.$"
-.else
+ .string "Go see your father at the GYM in\n"
+ .string "PETALBURG.$"
+.else @ GERMAN
_0845DB16:
.string "Lauf und besuche deinen Vater in der\n"
.string "ARENA von BLÜTENBURG CITY.$"
-.endif
+.endif @ GERMAN
_845DB56:
setvaddress _845DB56
checkitem ITEM_EON_TICKET, 0x1
@@ -70,22 +82,22 @@ _0845DBB5:
release
end
-.if DEBUG_TRANSLATE
+.ifdef ENGLISH
_0845DBBE:
- .string "DAD: {PLAYER}! Nice to see you!\n"
- .string "Here is a Letter for you, {PLAYER}.$"
+ .string "DAD: {PLAYER}! Good to see you!\n"
+ .string "There's a letter here for you, {PLAYER}.$"
_0845DC00:
- .string "DAD: I'm not sure. It could be a\n"
- .string "TICKET for a Ferry.\p"
- .string "You should go to LILYCOVE CITY and\n"
- .string "ask about it there.$"
+ .string "DAD: It appears to be a ferry TICKET,\n"
+ .string "but I've never seen one like it before.\p"
+ .string "You should visit LILYCOVE and ask\n"
+ .string "about it there.$"
_0845DC94:
- .string "DAD: {PLAYER}, the KEY ITEMS pocket\n"
- .string "in your BAG is full.\p"
- .string "Store some of your KEY ITEMS in\n"
- .string "the PC and come back later.$"
-.else @ !DEBUG_TRANSLATE
+ .string "DAD: {PLAYER}, the KEY ITEMS POCKET in\n"
+ .string "your BAG is full.\p"
+ .string "Move some key items for safekeeping\n"
+ .string "in your PC, then come see me.$"
+.else @ GERMAN
_0845DBBE:
.string "VATER: {PLAYER}! Schön, dich zu sehen!\n"
.string "Hier ist ein Brief für dich, {PLAYER}.$"
@@ -100,7 +112,7 @@ _0845DC94:
.string "deines BEUTELS ist voll.\p"
.string "Lagere einige deiner Basis-Items in\n"
.string "deinem PC und komm dann wieder.$"
-.endif @ !DEBUG_TRANSLATE
+.endif @ GERMAN
_845DB56End:
.size _845DB56, _845DB56End - _845DB56
@@ -132,26 +144,25 @@ _0845DD5B:
setmysteryeventstatus 0x3
end
-.if DEBUG_TRANSLATE
+.ifdef ENGLISH
_0845DD63:
- .string "This GIFT can only be used\n"
- .string "once.$"
+ .string "This EVENT may be played only once.$"
_0845DD95:
- .string "The KEY ITEMS pocket is full.$"
-.else
+ .string "Your BAG's KEY ITEMS POCKET is full.$"
+.else @ GERMAN
_0845DD63:
.string "Dieses GESCHEHEN kann nur einmal\n"
.string "gespielt werden.$"
_0845DD95:
.string "Deine BASIS-TASCHE ist voll.$"
-.endif
+.endif @ GERMAN
_0845DAFFEnd:
.size _0845DAFF, _0845DAFFEnd - _0845DAFF
gUnknown_Debug_845DAE1End::
gUnknown_Debug_845DDB2::
- me_checkcompat gUnknown_Debug_845DDB2, 4, 4, 4, 0x80
+ me_checkcompat gUnknown_Debug_845DDB2, unkConstant, unkConstant, 0x4, versionMask
me_checksum 0x0, _0845DDD0, _0845DDD0End
_0845DDD0:
me_setenigmaberry gUnknown_Debug_845DDD6
@@ -164,7 +175,7 @@ _0845DDD0End:
gUnknown_Debug_845DDB2End::
gUnknown_Debug_845E306::
- me_checkcompat gUnknown_Debug_845E306, 0x4, 0x4, 0x4, 0x80
+ me_checkcompat gUnknown_Debug_845E306, unkConstant, unkConstant, 0x4, versionMask
me_runscript _0845E329
me_setmsg 0x2, _0845E34F
me_setmsg 0x3, _0845E387
@@ -183,16 +194,15 @@ _0845E34C:
setmysteryeventstatus 0x3
end
-.if DEBUG_TRANSLATE
+.ifdef ENGLISH
_0845E34F:
- .string "A POKéMON was added to {PLAYER}'s\n"
- .string "team.$"
+ .string "A POKéMON was added to the\n"
+ .string "player's party.$"
_0845E387:
- .string "Your team is full.\n"
- .string "No more POKéMON can be added to your\l"
- .string "team.$"
-.else
+ .string "The player's party is full.\n"
+ .string "A POKéMON couldn't be added.$"
+.else @ GERMAN
_0845E34F:
.string "Ein POKéMON wurde in das Team des\n"
.string "Spielers aufgenommen.$"
@@ -201,10 +211,10 @@ _0845E387:
.string "Das Team des Spielers ist vollständig.\n"
.string "Es kann kein weiteres POKéMON\l"
.string "aufgenommen werden.$"
-.endif
+.endif @ GERMAN
gUnknown_Debug_845E3E0::
- me_checkcompat gUnknown_Debug_845E3E0, 0x4, 0x4, 0x4, 0x80
+ me_checkcompat gUnknown_Debug_845E3E0, unkConstant, unkConstant, 0x4, versionMask
me_crc 0x0, _0845E3FE, _0845E3FEEnd
_0845E3FE:
me_giveribbon 0x0, 0x1
@@ -214,7 +224,7 @@ _0845E3FEEnd:
gUnknown_Debug_845E3E0End::
gUnknown_Debug_845E402::
- me_checkcompat gUnknown_Debug_845E402, 0x4, 0x4, 0x4, 0x80
+ me_checkcompat gUnknown_Debug_845E402, unkConstant, unkConstant, 0x4, versionMask
me_crc 0x0, _0845E420, _0845E420End
_0845E420:
me_givenationaldex
@@ -224,7 +234,7 @@ _0845E420End:
gUnknown_Debug_845E402End::
gUnknown_Debug_845E422::
- me_checkcompat gUnknown_Debug_845E422, 0x4, 0x4, 0x4, 0x80
+ me_checkcompat gUnknown_Debug_845E422, unkConstant, unkConstant, 0x4, versionMask
me_crc 0x0, _0845E440, _0845E440End
_0845E440:
me_addrareword 0x1
@@ -234,7 +244,7 @@ _0845E440End:
gUnknown_Debug_845E422End::
gUnknown_Debug_845E443::
- me_checkcompat gUnknown_Debug_845E443, 0x4, 0x4, 0x4, 0x80
+ me_checkcompat gUnknown_Debug_845E443, unkConstant, unkConstant, 0x4, versionMask
me_crc 0x0, _0845E461, _0845E461End
_0845E461:
me_givepokemon gUnknown_Debug_845E467
@@ -250,7 +260,7 @@ _0845E461End:
gUnknown_Debug_845E443End::
gUnknown_Debug_845E4EF::
- me_checkcompat gUnknown_Debug_845E4EF, 0x4, 0x4, 0x4, 0x80
+ me_checkcompat gUnknown_Debug_845E4EF, unkConstant, unkConstant, 0x4, versionMask
me_addtrainer gUnknown_Debug_845E506
me_end
@@ -259,13 +269,13 @@ gUnknown_Debug_845E506::
gUnknown_Debug_845E4EFEnd::
gUnknown_Debug_845E606::
- me_checkcompat gUnknown_Debug_845E606, 0x4, 0x4, 0x4, 0x80
+ me_checkcompat gUnknown_Debug_845E606, unkConstant, unkConstant, 0x4, versionMask
me_enableresetrtc
me_end
gUnknown_Debug_845E606End::
gUnknown_Debug_845E619::
- me_checkcompat gUnknown_Debug_845E619, 0x4, 0x4, 0x4, 0x80
+ me_checkcompat gUnknown_Debug_845E619, unkConstant, unkConstant, 0x4, versionMask
me_checksum 0x0, _0845E637, _0845E637End
_0845E637:
me_initramscript MAP_PETALBURG_CITY_GYM, 0x1, _0845E683, _0845E683End
@@ -273,16 +283,15 @@ _0845E637:
me_setstatus 0x2
me_end
-.if DEBUG_TRANSLATE
-
+.ifdef ENGLISH
_0845E64C:
- .string "Visit your DAD in the PETALBURG\n"
- .string "CITY GYM.$"
-.else
+ .string "Go see your dad at the\n"
+ .string "PETALBURG GYM.$"
+.else @ GERMAN
_0845E64C:
.string "Besuche deinen Vater in der ARENA\n"
.string "von BLÜTENBURG CITY.$"
-.endif
+.endif @ GERMAN
_0845E683:
setvaddress _0845E683
@@ -305,17 +314,17 @@ _0845E683:
_0845E6BF:
gotoram
-.if DEBUG_TRANSLATE
+.ifdef ENGLISH
_0845E6C0:
.string "DAD: Hi, {PLAYER}!\p"
- .string "I have just received this rare\n"
- .string "BERRY. You can have it!$"
-.else
+ .string "I just received a rare BERRY.\n"
+ .string "I'd like you to have it.$"
+.else @ GERMAN
_0845E6C0:
.string "VATER: Hi, {PLAYER}!\p"
.string "Ich habe gerade diese seltene BEERE\n"
.string "erhalten. Ich schenke sie dir!$"
-.endif
+.endif @GERMAN
_0845E637End:
.size _0845E637, _0845E637End - _0845E637
@@ -324,7 +333,7 @@ _0845E683End:
gUnknown_Debug_845E619End::
gUnknown_Debug_845E712::
- me_checkcompat gUnknown_Debug_845E712, 0x4, 0x4, 0x4, 0x80
+ me_checkcompat gUnknown_Debug_845E712, unkConstant, unkConstant, 0x4, versionMask
me_crc 0x0, _0845E730, _0845E730End
_0845E730:
me_runscript _0845E736
@@ -345,26 +354,26 @@ _0845E755:
setmysteryeventstatus 0x3
end
-.if DEBUG_TRANSLATE
+.ifdef ENGLISH
_0845E75D:
- .string "{STR_VAR_1} was handed over.$"
+ .string "{STR_VAR_1} was received!$"
_0845E771:
- .string "There is no room for {STR_VAR_1}\n"
- .string "available...$"
-.else
+ .string "There was no room to accept\n"
+ .string "{STR_VAR_1}...$"
+.else @ GERMAN
_0845E75D:
.string "{STR_VAR_1} wurde übergeben.$"
_0845E771:
.string "Es ist kein Platz für {STR_VAR_1}\n"
.string "vorhanden...$"
-.endif
+.endif @ GERMAN
_0845E730End:
.size _0845E730, _0845E730End - _0845E730
gUnknown_Debug_845E712End::
gUnknown_Debug_845E797::
- me_checkcompat gUnknown_Debug_845E797, 0x4, 0x4, 0x4, 0x80
+ me_checkcompat gUnknown_Debug_845E797, unkConstant, unkConstant, 0x4, versionMask
me_crc 0x0, gUnknown_Debug_845E7B5, gUnknown_Debug_845E7B5End
gUnknown_Debug_845E7B5::
me_setrecordmixinggift 0x1, 0x3, ITEM_POTION
diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s
index e4a4cf95c..361ecf847 100644
--- a/data/pokemon_storage_system.s
+++ b/data/pokemon_storage_system.s
@@ -73,13 +73,14 @@ gSpriteTemplate_83BBC88:: @ 83BBC88
spr_template 1, 56006, gOamData_83BBC34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_809CB74
.if DEBUG
-.if DEBUG_TRANSLATE
+.if DEBUG_FIX
gUnknown_Debug_0x83E6268:: @ 0x83E6268
+@ TODO: translations
.string "SET$"
-.else
+.else @ !DEBUG_FIX
gUnknown_Debug_0x83E6268:: @ 0x83E6268
.string "セットする$"
-.endif
+.endif @ !DEBUG_FIX
.endif
.align 2
diff --git a/include/battle.h b/include/battle.h
index 59eee8407..afebbc781 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -130,8 +130,8 @@ struct ProtectStruct
u32 free : 4;
/*field3*/
u32 field3 : 8;
- u32 physicalDmg;
- u32 specialDmg;
+ s32 physicalDmg;
+ s32 specialDmg;
u8 physicalBattlerId;
u8 specialBattlerId;
u16 fieldE;
@@ -139,15 +139,14 @@ struct ProtectStruct
struct SpecialStatus
{
- u8 statLowered:1;
- u8 lightningRodRedirected:1;
- u8 restoredBattlerSprite: 1;
- u8 intimidatedMon:1;
- u8 traced:1;
- u8 ppNotAffectedByPressure:1;
- u8 flag40:1;
- u8 focusBanded:1;
- u8 field1[3];
+ u32 statLowered:1;
+ u32 lightningRodRedirected:1;
+ u32 restoredBattlerSprite: 1;
+ u32 intimidatedMon:1;
+ u32 traced:1;
+ u32 ppNotAffectedByPressure:1;
+ u32 flag40:1;
+ u32 focusBanded:1;
s32 dmg;
s32 physicalDmg;
s32 specialDmg;
diff --git a/include/config.h b/include/config.h
index 38923710d..947b0d553 100644
--- a/include/config.h
+++ b/include/config.h
@@ -5,11 +5,11 @@
// Ruby/Sapphire and Emerald do not have these asserts while Fire Red
// still has them in the ROM. This is because the developers forgot
// to define NDEBUG before release, however this has been changed as
-// Ruby's actual debug build does not use the AGBPrint features.
+// Ruby's actual debug builds do not use the AGBPrint features.
// To note, Ruby/Sapphire likely did not use AGBPrint. This is because
-// the german debug ROM of Ruby did not have any uses of AGBPrint and
-// the assert commands but instead a "crash" screen. This config exists
+// the debug ROMs of Ruby did not have any uses of AGBPrint and the
+// assert commands but instead a "crash" screen. This config exists
// for convenience for the user of pokeruby and NOT because it is
// authoritative. These additions are for user convenience based on
// officially recommended SDK practices for debugging and is therefore
@@ -55,15 +55,8 @@
#define UNITS_METRIC
#endif
-// An option to use translations/encoding fixes for the Debug menus.
-// Selected by default for custom English debug roms.
-#ifndef DEBUG_TRANSLATE
-#if ENGLISH && DEBUG
-#define DEBUG_TRANSLATE 1
-#else
-#define DEBUG_TRANSLATE 0
-#endif
-#endif
+// An option to use fuller translations for debug ROMs.
+// #define DEBUG_FIX 1 // Unsupported languages default to English text.
// Fixed in Emerald.
// #define BUGFIX_SETMONIVS
diff --git a/include/fieldmap.h b/include/fieldmap.h
index cc2a29914..cdac9f79c 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -13,7 +13,7 @@ extern struct BackupMapLayout gUnknown_03004870;
struct MapHeader *mapconnection_get_mapheader(struct MapConnection *connection);
int GetMapBorderIdAt(int x, int y);
int CanCameraMoveInDirection(int direction);
-u32 GetBehaviorByMetatileId(u16 metatile);
+u16 GetBehaviorByMetatileId(u16 metatile);
void MapGridSetMetatileEntryAt(int, int, u16);
void not_trainer_hill_battle_pyramid(void);
@@ -31,7 +31,7 @@ u32 MapGridGetMetatileIdAt(int, int);
u32 MapGridGetMetatileBehaviorAt(int x, int y); // return: (u8|u16|int) args: (int|s16|s32)
u8 MapGridGetMetatileLayerTypeAt(int, int);
void MapGridSetMetatileIdAt(int, int, u16);
-u32 GetBehaviorByMetatileId(u16 metatile);
+u16 GetBehaviorByMetatileId(u16 metatile);
void save_serialize_map(void);
void sub_8056670();
bool8 CameraMove(int, int);
diff --git a/include/global.h b/include/global.h
index 5c1369feb..d207f1cd4 100644
--- a/include/global.h
+++ b/include/global.h
@@ -22,12 +22,13 @@
#endif
// For debug menu translations.
-// DTR("こんにちは", "Hello") will expand to "Hello" with DEBUG_TRANSLATE,
+// DTR("こんにちは", "Hello") will expand to "Hello" with DEBUG_FIX,
// or "こんにちは" if not.
// The KANA macro will wrap Japanese text with encoding markers to
// prevent mojibake while they are being translated.
-#if DEBUG_TRANSLATE
+// TODO: Support multiple languages.
+#if DEBUG_FIX
#define DTR(japanese, english) _(english)
#define KANA(txt) _("{JPN}" txt "{ENG}")
#else
diff --git a/include/graphics.h b/include/graphics.h
index e14aa72d5..66ef9a028 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -3317,6 +3317,8 @@ extern struct BattleAnimBackground gBattleAnimBackgroundImage_16[];
extern struct BattleAnimBackground gBattleAnimBackgroundImage_17[];
extern struct BattleAnimBackground gBattleAnimBackgroundImage_20[];
extern struct BattleAnimBackground gBattleAnimBackgroundImage_21[];
+extern struct BattleAnimBackground gBattleAnimBackgroundImage_Surf[];
+extern struct BattleAnimBackground gBattleAnimBackgroundImageMuddyWater_Pal[];
extern struct BattleAnimBackground gBattleAnimBackgroundPalette_00[];
extern struct BattleAnimBackground gBattleAnimBackgroundPalette_02[];
extern struct BattleAnimBackground gBattleAnimBackgroundPalette_03[];
@@ -3331,6 +3333,7 @@ extern struct BattleAnimBackground gBattleAnimBackgroundPalette_17[];
extern struct BattleAnimBackground gBattleAnimBackgroundPalette_18[];
extern struct BattleAnimBackground gBattleAnimBackgroundPalette_20[];
extern struct BattleAnimBackground gBattleAnimBackgroundPalette_21[];
+extern struct BattleAnimBackground gBattleAnimBackgroundPalette_Surf[];
extern struct BattleAnimBackground gBattleAnimBackgroundPalette_22[];
extern struct BattleAnimBackground gBattleAnimBackgroundPalette_24[];
extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_00[];
@@ -3429,6 +3432,10 @@ extern const u8 Tiles_D129AC[];
extern const u8 gAreaUnknownTiles[];
extern const u16 gAreaUnknownPalette[];
+extern const u8 gUnknown_08E70968[];
+extern const u8 gUnknown_08E70C38[];
+extern const u8 gUnknown_08E70F0C[];
+
extern const u8 gUnknown_08E964B8[];
extern const u8 gUnknown_08E8096C[];
@@ -3439,4 +3446,6 @@ extern const u8 gRouletteCreditTiles[];
extern const u8 gRouletteNumbersTiles[];
extern const u8 gRouletteMultiplierTiles[];
+extern const u8 gDecoration10000_Gfx[];
+
#endif // GUARD_GRAPHICS_H
diff --git a/include/main.h b/include/main.h
index 8a7c4d67c..20ed1ec74 100644
--- a/include/main.h
+++ b/include/main.h
@@ -64,7 +64,7 @@ void InitFlashTimer(void);
void DoSoftReset(void);
void ClearPokemonCrySongs(void);
-extern const char BuildDateTime[];
+extern const u8 BuildDateTime[];
extern s8 gPcmDmaCounter;
#endif // GUARD_MAIN_H
diff --git a/include/money.h b/include/money.h
index 43579910c..98f70cc08 100644
--- a/include/money.h
+++ b/include/money.h
@@ -7,7 +7,7 @@ void RemoveMoney(u32 *, u32);
void GetMoneyAmountText(u8 *buffer, u32 arg1, u8 arg2);
void PrintMoneyAmount(u32 arg0, u8 arg1, u8 x, u8 y);
void sub_80B7AEC(u32, u8 right, u8 top);
-void Draw10000Sprite(u8, u8, int);
+void Draw10000Sprite(u8, u8, s32);
void UpdateMoneyWindow(u32, u8, u8);
void OpenMoneyWindow(u32, u8, u8);
void CloseMoneyWindow(u8, u8);
diff --git a/include/pokemon.h b/include/pokemon.h
index 5c19c0447..c8e7ce719 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -509,8 +509,8 @@ void BoxMonRestorePP(struct BoxPokemon *);
bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId);
u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit);
-#if DEBUG
+#if DEBUG && !(ENGLISH && REVISION == 0)
void Nakamura_NakaGenderTest_RecalcStats(struct Pokemon *);
-#endif // DEBUG
+#endif
#endif // GUARD_POKEMON_H
diff --git a/include/start_menu.h b/include/start_menu.h
index 575efeb8c..f73fd9e72 100644
--- a/include/start_menu.h
+++ b/include/start_menu.h
@@ -13,7 +13,20 @@ void debug_sub_8075DB4(struct BattleTowerEReaderTrainer *ereaderTrainer, const u
bool8 debug_sub_8075C30(void);
#if DEBUG
-extern u32 gUnknown_Debug_03004BD0;
+
+#if (ENGLISH && REVISION == 0)
+#define TYPE u8
+#else
+#define TYPE u32
+#endif
+
+extern TYPE gUnknown_Debug_03004BD0;
+// TODO: see if this is in rev1+
+#if (ENGLISH && REVISION == 0)
+extern TYPE gUnknown_Debug_Murakawa2;
+#endif
+
+#undef TYPE
#endif // DEBUG
#endif // GUARD_START_MENU_H
diff --git a/ruby_debug.sha1 b/ruby_debug.sha1
new file mode 100644
index 000000000..c67d57fde
--- /dev/null
+++ b/ruby_debug.sha1
@@ -0,0 +1 @@
+1d03a9128288a7076f6b4517e7602b29f76218a1 pokeruby_debug.gba
diff --git a/sapphire_de_debug.sha1 b/sapphire_de_debug.sha1
new file mode 100644
index 000000000..74e2a1f03
--- /dev/null
+++ b/sapphire_de_debug.sha1
@@ -0,0 +1 @@
+261bec8dbd7159790cd5126bd47df5b5cef61ac1 pokesapphire_de_debug.gba
diff --git a/sapphire_debug.sha1 b/sapphire_debug.sha1
new file mode 100644
index 000000000..961712d4a
--- /dev/null
+++ b/sapphire_debug.sha1
@@ -0,0 +1 @@
+e96e268b802aaa3e9215afeada21a2498dd2a9c5 pokesapphire_debug.gba
diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c
index d3d992bda..08aafe195 100644
--- a/src/battle/anim/dark.c
+++ b/src/battle/anim/dark.c
@@ -730,215 +730,55 @@ static void sub_80E0620(u8 taskId)
}
}
-// static void sub_80E079C(struct Task *task)
-// {
-// int var0, var1;
-// s16 var2;
-// s16 i, j;
-
-// var2 = task->data[5] - task->data[4];
-// if (var2 != 0)
-// {
-// var0 = task->data[13] / var2;
-// var1 = task->data[6];
-
-// for (i = 0; i < task->data[4]; i++)
-// {
-// gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[10] - (i - 159);
-// }
-
-// for (i = task->data[4]; i <= task->data[5]; i++)
-// {
-// if (i >= 0)
-// {
-// gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = (var1 - i) + task->data[10];
-// }
-
-// var1 += var0;
-// }
-
-// for (j = i; j < task->data[7]; j++)
-// {
-// if (j >= 0)
-// {
-// gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][j] = (task->data[10] + 159) - j;
-// }
-// }
-// }
-// else
-// {
-// for (i = 0; i < 112; i++)
-// {
-// gScanlineEffectRegBuffers[0][i] = task->data[10] + 159 - i;
-// gScanlineEffectRegBuffers[1][i] = task->data[10] + 159 - i;
-// }
-// }
-// }
-
-NAKED
static void sub_80E079C(struct Task *task)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- adds r6, r0, 0\n\
- ldrh r0, [r6, 0x12]\n\
- ldrh r4, [r6, 0x10]\n\
- subs r0, r4\n\
- lsls r0, 16\n\
- asrs r1, r0, 16\n\
- cmp r1, 0\n\
- beq _080E0890\n\
- movs r2, 0x22\n\
- ldrsh r0, [r6, r2]\n\
- bl __divsi3\n\
- mov r8, r0\n\
- movs r3, 0x14\n\
- ldrsh r0, [r6, r3]\n\
- lsls r5, r0, 8\n\
- lsls r0, r4, 16\n\
- movs r4, 0\n\
- cmp r0, 0\n\
- ble _080E07FC\n\
- ldr r0, _080E0888 @ =gScanlineEffectRegBuffers\n\
- mov r12, r0\n\
- ldr r7, _080E088C @ =gScanlineEffect\n\
-_080E07D0:\n\
- lsls r2, r4, 16\n\
- asrs r2, 16\n\
- lsls r3, r2, 1\n\
- ldrb r1, [r7, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r3, r0\n\
- add r3, r12\n\
- adds r1, r2, 0\n\
- subs r1, 0x9F\n\
- ldrh r0, [r6, 0x1C]\n\
- subs r0, r1\n\
- strh r0, [r3]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- lsrs r4, r2, 16\n\
- asrs r2, 16\n\
- movs r1, 0x10\n\
- ldrsh r0, [r6, r1]\n\
- cmp r2, r0\n\
- blt _080E07D0\n\
-_080E07FC:\n\
- ldrh r4, [r6, 0x10]\n\
- lsls r3, r4, 16\n\
- asrs r1, r3, 16\n\
- movs r2, 0x12\n\
- ldrsh r0, [r6, r2]\n\
- cmp r1, r0\n\
- bgt _080E0846\n\
- ldr r0, _080E0888 @ =gScanlineEffectRegBuffers\n\
- mov r12, r0\n\
- ldr r7, _080E088C @ =gScanlineEffect\n\
-_080E0810:\n\
- asrs r4, r3, 16\n\
- cmp r4, 0\n\
- blt _080E0832\n\
- asrs r1, r5, 8\n\
- subs r1, r4\n\
- lsls r3, r4, 1\n\
- ldrb r2, [r7, 0x14]\n\
- lsls r0, r2, 4\n\
- subs r0, r2\n\
- lsls r0, 7\n\
- adds r3, r0\n\
- add r3, r12\n\
- lsls r1, 16\n\
- asrs r1, 16\n\
- ldrh r2, [r6, 0x1C]\n\
- adds r1, r2\n\
- strh r1, [r3]\n\
-_080E0832:\n\
- add r5, r8\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- lsls r3, r4, 16\n\
- asrs r1, r3, 16\n\
- movs r2, 0x12\n\
- ldrsh r0, [r6, r2]\n\
- cmp r1, r0\n\
- ble _080E0810\n\
-_080E0846:\n\
- movs r3, 0x1C\n\
- ldrsh r0, [r6, r3]\n\
- adds r0, 0x9F\n\
- lsls r2, r4, 16\n\
- asrs r1, r2, 16\n\
- subs r5, r0, r1\n\
- movs r3, 0x16\n\
- ldrsh r0, [r6, r3]\n\
- cmp r1, r0\n\
- bge _080E08BE\n\
- ldr r7, _080E0888 @ =gScanlineEffectRegBuffers\n\
- ldr r4, _080E088C @ =gScanlineEffect\n\
-_080E085E:\n\
- asrs r3, r2, 16\n\
- cmp r3, 0\n\
- blt _080E0876\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r4, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r7\n\
- strh r5, [r2]\n\
- subs r5, 0x1\n\
-_080E0876:\n\
- adds r0, r3, 0x1\n\
- lsls r2, r0, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x16\n\
- ldrsh r0, [r6, r3]\n\
- cmp r1, r0\n\
- blt _080E085E\n\
- b _080E08BE\n\
- .align 2, 0\n\
-_080E0888: .4byte gScanlineEffectRegBuffers\n\
-_080E088C: .4byte gScanlineEffect\n\
-_080E0890:\n\
- movs r1, 0x1C\n\
- ldrsh r0, [r6, r1]\n\
- adds r5, r0, 0\n\
- adds r5, 0x9F\n\
- movs r4, 0\n\
- ldr r3, _080E08C8 @ =gScanlineEffectRegBuffers\n\
- movs r2, 0xF0\n\
- lsls r2, 3\n\
- adds r6, r3, r2\n\
-_080E08A2:\n\
- lsls r0, r4, 16\n\
- asrs r0, 16\n\
- lsls r2, r0, 1\n\
- adds r1, r2, r3\n\
- strh r5, [r1]\n\
- adds r2, r6\n\
- strh r5, [r2]\n\
- subs r5, 0x1\n\
- adds r0, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x6F\n\
- ble _080E08A2\n\
-_080E08BE:\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080E08C8: .4byte gScanlineEffectRegBuffers\n\
- .syntax divided\n");
+ int var0, var1;
+ s16 var2;
+ s16 i;
+ int var4;
+
+ var2 = task->data[5] - task->data[4];
+ if (var2 != 0)
+ {
+ var0 = task->data[13] / var2;
+ var1 = task->data[6] << 8;
+
+ for (i = 0; i < task->data[4]; i++)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[10] - (i - 159);
+ }
+
+ for (i = task->data[4]; i <= task->data[5]; i++)
+ {
+ if (i >= 0)
+ {
+ s16 var3 = (var1 >> 8) - i;
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = var3 + task->data[10];
+ }
+
+ var1 += var0;
+ }
+
+ var4 = task->data[10] - (i - 159);
+ for (i = i; i < task->data[7]; i++)
+ {
+ if (i >= 0)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = var4;
+ var4--;
+ }
+ }
+ }
+ else
+ {
+ var4 = task->data[10] + 159;
+ for (i = 0; i < 112; i++)
+ {
+ gScanlineEffectRegBuffers[0][i] = var4;
+ gScanlineEffectRegBuffers[1][i] = var4;
+ var4--;
+ }
+ }
}
static void sub_80E08CC(u8 priority)
diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c
index 407c9a08f..64991d161 100644
--- a/src/battle/anim/flying.c
+++ b/src/battle/anim/flying.c
@@ -2330,195 +2330,59 @@ void sub_80DB330(struct Sprite *sprite)
}
}
-#ifdef NONMATCHING
void sub_80DB374(struct Sprite *sprite)
{
- // NONMATCHING - Functionally equivalent - slight register swap at end
-
u32 matrixNum;
- int t1, t3;
- s16 t2;
+ int t1, t2;
switch (sprite->data[0])
{
+ case 0:
+ if (!gBattleAnimArgs[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ }
- case 0:
- if (!gBattleAnimArgs[0])
- {
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
- }
- else
- {
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
- }
-
- sprite->data[1] = 512;
+ sprite->data[1] = 512;
- sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
- ++sprite->data[0];
- break;
- case 1:
- if (sprite->data[2] <= 11)
- {
- sprite->data[1] -= 40;
- }
- else
- {
- sprite->data[1] += 40;
- }
+ sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
+ sprite->data[0]++;
+ break;
+ case 1:
+ if (sprite->data[2] <= 11)
+ sprite->data[1] -= 40;
+ else
+ sprite->data[1] += 40;
- ++sprite->data[2];
+ sprite->data[2]++;
- sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
+ sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
- matrixNum = sprite->oam.matrixNum;
+ matrixNum = sprite->oam.matrixNum;
- t1 = 15616;
- t2 = gOamMatrices[matrixNum].d;
- t3 = t1 / t2 + 1;
+ t1 = 15616;
+ t2 = t1 / gOamMatrices[matrixNum].d + 1;
- if (t3 > 128)
- {
- t3 = 128;
- }
+ if (t2 > 128)
+ t2 = 128;
- /* NONMATCHING
- * compiles to:
- * asr r0, r0, #0x1
- strh r0, [r5, #0x26]
- * needed:
- * asrs r1, r0, 1
- * strh r1, [r5, 0x26] */
- sprite->pos2.y = (64 - t3) / 2;
+ t2 = (64 - t2) / 2;
+ sprite->pos2.y = t2;
- if (sprite->data[2] == 24)
- {
- sub_8079098(sprite);
- DestroyAnimSprite(sprite);
- }
+ if (sprite->data[2] == 24)
+ {
+ sub_8079098(sprite);
+ DestroyAnimSprite(sprite);
+ }
+ break;
}
}
-#else
-NAKED
-void sub_80DB374(struct Sprite *sprite)
-{
- asm_unified("push {r4,r5,lr}\n\
- sub sp, 0x4\n\
- adds r5, r0, 0\n\
- movs r1, 0x2E\n\
- ldrsh r0, [r5, r1]\n\
- cmp r0, 0\n\
- beq _080DB388\n\
- cmp r0, 0x1\n\
- beq _080DB3E0\n\
- b _080DB44C\n\
-_080DB388:\n\
- ldr r0, _080DB398 @ =gBattleAnimArgs\n\
- movs r2, 0\n\
- ldrsh r0, [r0, r2]\n\
- cmp r0, 0\n\
- bne _080DB3A0\n\
- ldr r4, _080DB39C @ =gBattleAnimAttacker\n\
- b _080DB3A2\n\
- .align 2, 0\n\
-_080DB398: .4byte gBattleAnimArgs\n\
-_080DB39C: .4byte gBattleAnimAttacker\n\
-_080DB3A0:\n\
- ldr r4, _080DB3DC @ =gBattleAnimTarget\n\
-_080DB3A2:\n\
- ldrb r0, [r4]\n\
- movs r1, 0\n\
- bl GetBattlerSpriteCoord\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- strh r0, [r5, 0x20]\n\
- ldrb r0, [r4]\n\
- movs r1, 0x1\n\
- bl GetBattlerSpriteCoord\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- strh r0, [r5, 0x22]\n\
- movs r0, 0\n\
- movs r3, 0x80\n\
- lsls r3, 2\n\
- strh r3, [r5, 0x30]\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- str r0, [sp]\n\
- adds r0, r5, 0\n\
- movs r1, 0\n\
- bl sub_8078FDC\n\
- ldrh r0, [r5, 0x2E]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x2E]\n\
- b _080DB44C\n\
- .align 2, 0\n\
-_080DB3DC: .4byte gBattleAnimTarget\n\
-_080DB3E0:\n\
- movs r1, 0x32\n\
- ldrsh r0, [r5, r1]\n\
- cmp r0, 0xB\n\
- bgt _080DB3EE\n\
- ldrh r0, [r5, 0x30]\n\
- subs r0, 0x28\n\
- b _080DB3F2\n\
-_080DB3EE:\n\
- ldrh r0, [r5, 0x30]\n\
- adds r0, 0x28\n\
-_080DB3F2:\n\
- strh r0, [r5, 0x30]\n\
- ldrh r0, [r5, 0x32]\n\
- adds r0, 0x1\n\
- movs r1, 0\n\
- strh r0, [r5, 0x32]\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- movs r0, 0x30\n\
- ldrsh r3, [r5, r0]\n\
- str r1, [sp]\n\
- adds r0, r5, 0\n\
- bl sub_8078FDC\n\
- ldrb r1, [r5, 0x3]\n\
- lsls r1, 26\n\
- lsrs r1, 27\n\
- movs r0, 0xF4\n\
- lsls r0, 6\n\
- ldr r2, _080DB454 @ =gOamMatrices\n\
- lsls r1, 3\n\
- adds r1, r2\n\
- movs r2, 0x6\n\
- ldrsh r1, [r1, r2]\n\
- bl __divsi3\n\
- adds r1, r0, 0x1\n\
- cmp r1, 0x80\n\
- ble _080DB42C\n\
- movs r1, 0x80\n\
-_080DB42C:\n\
- movs r0, 0x40\n\
- subs r0, r1\n\
- lsrs r1, r0, 31\n\
- adds r0, r1\n\
- asrs r1, r0, 1\n\
- strh r1, [r5, 0x26]\n\
- movs r1, 0x32\n\
- ldrsh r0, [r5, r1]\n\
- cmp r0, 0x18\n\
- bne _080DB44C\n\
- adds r0, r5, 0\n\
- bl sub_8079098\n\
- adds r0, r5, 0\n\
- bl DestroyAnimSprite\n\
-_080DB44C:\n\
- add sp, 0x4\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080DB454: .4byte gOamMatrices\n");
-}
-#endif
void sub_80DB458(struct Sprite *sprite)
{
diff --git a/src/battle/anim/ice.c b/src/battle/anim/ice.c
index e41057d72..438c61f9f 100644
--- a/src/battle/anim/ice.c
+++ b/src/battle/anim/ice.c
@@ -26,6 +26,7 @@ extern struct INCBIN_U8 gBattleAnimFogTilemap;
extern struct INCBIN_U8 gWeatherFog1Tiles;
static void sub_80D7704(struct Sprite *sprite);
+static void sub_80D7888(struct Sprite *sprite);
static void AnimIcePunchSwirlingParticle(struct Sprite *sprite);
static void AnimIceBeamParticle(struct Sprite *sprite);
static void AnimIceEffectParticle(struct Sprite *sprite);
@@ -53,7 +54,15 @@ static void AnimIceBallParticle(struct Sprite *sprite);
static void AnimTask_Haze2(u8 taskId);
static void AnimTask_OverlayFogTiles(u8 taskId);
static void AnimTask_Hail2(u8 taskId);
-bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4);
+bool8 sub_80D8BA8(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c);
+
+struct HailStruct
+{
+ s32 x:10;
+ s32 y:10;
+ s32 bPosition:8;
+ s32 unk3:4;
+};
const union AnimCmd gSpriteAnim_83D9B58[] =
{
@@ -374,18 +383,18 @@ const struct SpriteTemplate gPoisonGasCloudSpriteTemplate =
.callback = InitPoisonGasCloudAnim,
};
-const u8 gUnknown_083D9DC4[][4] =
-{
- {0x64, 0xE0, 0x01, 0x20},
- {0x55, 0xE0, 0x01, 0x00},
- {0xF2, 0xE0, 0x11, 0x10},
- {0x42, 0xE0, 0x21, 0x10},
- {0xB6, 0xE0, 0x31, 0x00},
- {0x3C, 0xE0, 0x01, 0x20},
- {0xD6, 0xE0, 0x11, 0x00},
- {0x71, 0xE0, 0x01, 0x10},
- {0xD2, 0xE0, 0x31, 0x10},
- {0x26, 0xE0, 0x21, 0x00},
+const struct HailStruct gUnknown_083D9DC4[] =
+{
+ {.x = 100, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2},
+ {.x = 85, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 0},
+ {.x = 242, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 1},
+ {.x = 66, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 1},
+ {.x = 182, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 0},
+ {.x = 60, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2},
+ {.x = 214, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 0},
+ {.x = 113, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 1},
+ {.x = 210, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 1},
+ {.x = 38, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 0},
};
const union AffineAnimCmd gSpriteAffineAnim_83D9DEC[] =
@@ -528,266 +537,46 @@ const struct SpriteTemplate gIceBallParticleSpriteTemplate =
.callback = InitIceBallParticle,
};
-// unknown - potentially used in weather ball
-// TODO: decompile function and name it
-/*
-// NOT EQUIVALENT
static void sub_80D7704(struct Sprite *sprite)
{
- //
- //u16 battler1, battler2, battler3, battler4; //
- u16 r9, r8, r3, r6;
- //s16 r4, r10;
+ s16 targetX, targetY, attackerX, attackerY;
sprite->oam.tileNum += 7;
-
- //u8 battler1, battler2, battler3, battler4;
-
- //battler1 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- //battler2 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
- //battler3 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- //battler4 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
-
- //sprite->oam.tileNum += 7;
-
- //sprite->data[0] = gBattleAnimArgs[4];
-
- //sprite->data[1] = battler3 + gBattleAnimArgs[0]; //???
- //sprite->data[2] = battler1 + gBattleAnimArgs[2];
- //sprite->data[3] = battler4 + gBattleAnimArgs[1];
- //sprite->data[4] = battler2 + gBattleAnimArgs[3];
-
- r9 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- r8 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
- r3 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- r6 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
-
+ targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = gBattleAnimArgs[0] + attackerX;
+ sprite->data[2] = gBattleAnimArgs[2] + targetX;
+ sprite->data[3] = gBattleAnimArgs[1] + attackerY;
+ sprite->data[4] = gBattleAnimArgs[3] + targetY;
+ sub_8078314(sprite);
- sprite->data[1] = r3 + gBattleAnimArgs[0]; //???
- sprite->data[2] = r9 + gBattleAnimArgs[2];
- sprite->data[3] = r6 + gBattleAnimArgs[1];
- sprite->data[4] = r8 + gBattleAnimArgs[3];
-
- //sprite->data[0] = gBattleAnimArgs;
+ for (;(targetX >= -32 && targetX <= 272) && (targetY >= -32 && targetY <= 192);
+ targetX += sprite->data[1], targetY += sprite->data[2])
+ ;
+ sprite->data[1] = -sprite->data[1];
+ sprite->data[2] = -sprite->data[2];
+ for (;(attackerX >= -32 && attackerX <= 272) && (attackerY >= -32 && attackerY <= 192);
+ attackerX += sprite->data[1], attackerY += sprite->data[2])
+ ;
+ sprite->pos1.x = attackerX;
+ sprite->pos1.y = attackerY;
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = attackerX;
+ sprite->data[2] = targetX;
+ sprite->data[3] = attackerY;
+ sprite->data[4] = targetY;
sub_8078314(sprite);
-
- if ((u32)(r9 + 32) <= 304 || (u32)(r8 + 32) <= 224) // cmp 1
- {
- r4 = sprite->data[1];
- r10 = 304;
-
- // _080D77AA
- for (int i = 0; i < 3; i++)
- {
- //
- if (((u32)((s16)r9 + r4) + (0x80 << 14)) >> 16 > 304
- || ((u32)((s16)r8 + r4) + (0x80 << 14)) >> 16 > 0xE0)
- {
- break;
- }
- }
- }
- // _080D77DE
-}
-*/
-
-NAKED static void sub_80D7704(struct Sprite *sprite)
-{
- 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, 0x4\n"
- "\tadds r5, r0, 0\n"
- "\tldrh r2, [r5, 0x4]\n"
- "\tlsls r1, r2, 22\n"
- "\tlsrs r1, 22\n"
- "\tadds r1, 0x7\n"
- "\tldr r3, _080D780C @ =0x000003ff\n"
- "\tadds r0, r3, 0\n"
- "\tands r1, r0\n"
- "\tldr r0, _080D7810 @ =0xfffffc00\n"
- "\tands r0, r2\n"
- "\torrs r0, r1\n"
- "\tstrh r0, [r5, 0x4]\n"
- "\tldr r4, _080D7814 @ =gBattleAnimTarget\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x2\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r9, r0\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x3\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r8, r0\n"
- "\tldr r4, _080D7818 @ =gBattleAnimAttacker\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x2\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x3\n"
- "\tstr r3, [sp]\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r1, _080D781C @ =gBattleAnimArgs\n"
- "\tldrh r0, [r1, 0x8]\n"
- "\tstrh r0, [r5, 0x2E]\n"
- "\tldrh r0, [r1]\n"
- "\tldr r3, [sp]\n"
- "\tadds r0, r3\n"
- "\tstrh r0, [r5, 0x30]\n"
- "\t ldrh r0, [r1, 0x4]\n"
- "\t mov r4, r9\n"
- "\t adds r0, r4, r0\n"
- "\tstrh r0, [r5, 0x32]\n"
- "\tldrh r0, [r1, 0x2]\n"
- "\tadds r0, r6\n"
- "\tstrh r0, [r5, 0x34]\n"
- "\tldrh r0, [r1, 0x6]\n"
- "\tmov r7, r8\n"
- "\tadds r0, r7, r0\n"
- "\tstrh r0, [r5, 0x36]\n"
- "\tadds r0, r5, 0\n"
- "\tbl sub_8078314\n"
- "\tadds r4, 0x20\n"
- "\tmovs r0, 0x98\n"
- "\tlsls r0, 1\n"
- "\tmov r12, r0\n"
- "\tldr r3, [sp]\n"
- "\tcmp r4, r12\n"
- "\tbhi _080D77DE\n"
- "\tadds r0, r7, 0\n"
- "\tadds r0, 0x20\n"
- "\tldrh r1, [r5, 0x30]\n"
- "\tldrh r2, [r5, 0x32]\n"
- "\tcmp r0, 0xE0\n"
- "\tbhi _080D77DE\n"
- "\tadds r4, r1, 0\n"
- "\tmov r10, r12\n"
- "_080D77AA:\n"
- "\tmov r7, r9\n"
- "\tlsls r1, r7, 16\n"
- "\tasrs r1, 16\n"
- "\tadds r1, r4\n"
- "\tlsls r1, 16\n"
- "\tmov r7, r8\n"
- "\tlsls r0, r7, 16\n"
- "\tasrs r0, 16\n"
- "\tadds r0, r2\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r8, r0\n"
- "\tlsrs r0, r1, 16\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0x80\n"
- "\tlsls r7, 14\n"
- "\tadds r1, r7\n"
- "\tlsrs r1, 16\n"
- "\tcmp r1, r10\n"
- "\tbhi _080D77DE\n"
- "\tmov r1, r8\n"
- "\tlsls r0, r1, 16\n"
- "\tadds r0, r7\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0xE0\n"
- "\tbls _080D77AA\n"
- "_080D77DE:\n"
- "\tldrh r0, [r5, 0x30]\n"
- "\tnegs r7, r0\n"
- "\tstrh r7, [r5, 0x30]\n"
- "\tldrh r0, [r5, 0x32]\n"
- "\tnegs r4, r0\n"
- "\tstrh r4, [r5, 0x32]\n"
- "\tlsls r0, r3, 16\n"
- "\tmovs r1, 0x80\n"
- "\tlsls r1, 14\n"
- "\tadds r0, r1\n"
- "\tlsrs r0, 16\n"
- "\tmovs r2, 0x98\n"
- "\tlsls r2, 1\n"
- "\tmov r12, r2\n"
- "\tldr r1, _080D781C @ =gBattleAnimArgs\n"
- "\tmov r10, r1\n"
- "\tcmp r0, r12\n"
- "\tbhi _080D784A\n"
- "\tlsls r1, r6, 16\n"
- "\tmovs r2, 0x80\n"
- "\tlsls r2, 14\n"
- "\tadds r0, r1, r2\n"
- "\tb _080D7842\n"
- "\t.align 2, 0\n"
- "_080D780C: .4byte 0x000003ff\n"
- "_080D7810: .4byte 0xfffffc00\n"
- "_080D7814: .4byte gBattleAnimTarget\n"
- "_080D7818: .4byte gBattleAnimAttacker\n"
- "_080D781C: .4byte gBattleAnimArgs\n"
- "_080D7820:\n"
- "\tlsls r1, r3, 16\n"
- "\tasrs r1, 16\n"
- "\tadds r1, r7\n"
- "\tlsls r1, 16\n"
- "\tasrs r0, r2, 16\n"
- "\tadds r0, r4\n"
- "\tlsls r0, 16\n"
- "\tlsrs r6, r0, 16\n"
- "\tlsrs r3, r1, 16\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 14\n"
- "\tadds r1, r0\n"
- "\tlsrs r1, 16\n"
- "\tcmp r1, r12\n"
- "\tbhi _080D784A\n"
- "\tlsls r1, r6, 16\n"
- "\tadds r0, r1, r0\n"
- "_080D7842:\n"
- "\tlsrs r0, 16\n"
- "\tadds r2, r1, 0\n"
- "\tcmp r0, 0xE0\n"
- "\tbls _080D7820\n"
- "_080D784A:\n"
- "\tstrh r3, [r5, 0x20]\n"
- "\tstrh r6, [r5, 0x22]\n"
- "\tmov r1, r10\n"
- "\tldrh r0, [r1, 0x8]\n"
- "\tstrh r0, [r5, 0x2E]\n"
- "\tstrh r3, [r5, 0x30]\n"
- "\tmov r2, r9\n"
- "\tstrh r2, [r5, 0x32]\n"
- "\tstrh r6, [r5, 0x34]\n"
- "\tmov r3, r8\n"
- "\tstrh r3, [r5, 0x36]\n"
- "\tadds r0, r5, 0\n"
- "\tbl sub_8078314\n"
- "\tmov r7, r10\n"
- "\tldrh r0, [r7, 0xA]\n"
- "\tstrh r0, [r5, 0x34]\n"
- "\tldrh r0, [r7, 0xC]\n"
- "\tstrh r0, [r5, 0x36]\n"
- "\tldr r0, _080D7884 @ =sub_80D7888\n"
- "\tstr r0, [r5, 0x1C]\n"
- "\tadd sp, 0x4\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.align 2, 0\n"
- "_080D7884: .4byte sub_80D7888");
+ sprite->data[3] = gBattleAnimArgs[5];
+ sprite->data[4] = gBattleAnimArgs[6];
+ sprite->callback = sub_80D7888;
}
-void sub_80D7888(struct Sprite *sprite)
+static void sub_80D7888(struct Sprite *sprite)
{
if (sprite->data[0] != 0)
{
@@ -1460,13 +1249,9 @@ static void InitPoisonGasCloudAnim(struct Sprite *sprite)
}
// Animates the gas clouds towards the target mon in Poison Gas.
-// functionally correct, but there appears to be an unused local variable causing
-// switch case 1 to not match
-#ifdef NONMATCHING
static void sub_80D8874(struct Sprite *sprite)
{
int value;
- register s16 value2 asm("r5");
switch (sprite->data[7] & 0xFF)
{
@@ -1481,19 +1266,20 @@ static void sub_80D8874(struct Sprite *sprite)
if (sprite->data[0] <= 0)
{
- value2 = 80;
- sprite->data[0] = value2;
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ sprite->data[0] = 80;
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = sprite->pos1.x;
sprite->pos1.y += sprite->pos2.y;
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = sprite->pos1.y + 29;
sprite->data[7]++;
- if (gMain.inBattle && gBattlerPositions[gBattleAnimTarget] & 1)
+ if (!gMain.inBattle)
+ sprite->data[5] = 80;
+ else if (gBattlerPositions[gBattleAnimTarget] & 1)
sprite->data[5] = 204;
else
- sprite->data[5] = value2;
+ sprite->data[5] = 80;
sprite->pos2.y = 0;
value = gSineTable[sprite->data[5]];
@@ -1530,12 +1316,13 @@ static void sub_80D8874(struct Sprite *sprite)
if (sprite->data[0] <= 0)
{
- asm("mov r2, #0"); // unused local variable?
sprite->data[0] = 0x300;
sprite->data[1] = sprite->pos1.x += sprite->pos2.x;
sprite->data[3] = sprite->pos1.y += sprite->pos2.y;
sprite->data[4] = sprite->pos1.y + 4;
- if (gMain.inBattle && gBattlerPositions[gBattleAnimTarget] & 1)
+ if (!gMain.inBattle)
+ sprite->data[2] = -0x10;
+ else if (gBattlerPositions[gBattleAnimTarget] & 1)
sprite->data[2] = 0x100;
else
sprite->data[2] = -0x10;
@@ -1560,321 +1347,6 @@ static void sub_80D8874(struct Sprite *sprite)
break;
}
}
-#else
-NAKED static void sub_80D8874(struct Sprite *sprite)
-{
- asm_unified("\tpush {r4-r6,lr}\n"
- "\tadds r4, r0, 0\n"
- "\tldrh r0, [r4, 0x3C]\n"
- "\tmovs r5, 0xFF\n"
- "\tmovs r1, 0xFF\n"
- "\tands r1, r0\n"
- "\tcmp r1, 0x1\n"
- "\tbeq _080D8968\n"
- "\tcmp r1, 0x1\n"
- "\tbgt _080D888E\n"
- "\tcmp r1, 0\n"
- "\tbeq _080D8896\n"
- "\tb _080D8AD0\n"
- "_080D888E:\n"
- "\tcmp r1, 0x2\n"
- "\tbne _080D8894\n"
- "\tb _080D8A94\n"
- "_080D8894:\n"
- "\tb _080D8AD0\n"
- "_080D8896:\n"
- "\tadds r0, r4, 0\n"
- "\tbl TranslateAnimLinear\n"
- "\tldr r1, _080D88C0 @ =gSineTable\n"
- "\tmovs r2, 0x38\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tlsls r0, 1\n"
- "\tadds r0, r1\n"
- "\tmovs r1, 0\n"
- "\tldrsh r0, [r0, r1]\n"
- "\tasrs r0, 4\n"
- "\tldrh r2, [r4, 0x24]\n"
- "\tadds r0, r2\n"
- "\tstrh r0, [r4, 0x24]\n"
- "\tmovs r1, 0x3A\n"
- "\tldrsh r0, [r4, r1]\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D88C4\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tsubs r0, 0x8\n"
- "\tb _080D88C8\n"
- "\t.align 2, 0\n"
- "_080D88C0: .4byte gSineTable\n"
- "_080D88C4:\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tadds r0, 0x8\n"
- "_080D88C8:\n"
- "\tands r0, r5\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tmovs r2, 0x2E\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tcmp r0, 0\n"
- "\tble _080D88D6\n"
- "\tb _080D8AD0\n"
- "_080D88D6:\n"
- "\tmovs r5, 0x50\n"
- "\tstrh r5, [r4, 0x2E]\n"
- "\tldr r6, _080D8928 @ =gBattleAnimTarget\n"
- "\tldrb r0, [r6]\n"
- "\tmovs r1, 0\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tstrh r0, [r4, 0x20]\n"
- "\tstrh r0, [r4, 0x30]\n"
- "\tstrh r0, [r4, 0x32]\n"
- "\tldrh r0, [r4, 0x26]\n"
- "\tldrh r1, [r4, 0x22]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r4, 0x22]\n"
- "\tstrh r0, [r4, 0x34]\n"
- "\tadds r0, 0x1D\n"
- "\tstrh r0, [r4, 0x36]\n"
- "\tldrh r0, [r4, 0x3C]\n"
- "\tadds r0, 0x1\n"
- "\tstrh r0, [r4, 0x3C]\n"
- "\tldr r0, _080D892C @ =gMain\n"
- "\tldr r2, _080D8930 @ =0x0000043d\n"
- "\tadds r0, r2\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8938\n"
- "\tldr r1, _080D8934 @ =gBattlerPositions\n"
- "\tldrb r0, [r6]\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8938\n"
- "\tmovs r0, 0xCC\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tb _080D893A\n"
- "\t.align 2, 0\n"
- "_080D8928: .4byte gBattleAnimTarget\n"
- "_080D892C: .4byte gMain\n"
- "_080D8930: .4byte 0x0000043d\n"
- "_080D8934: .4byte gBattlerPositions\n"
- "_080D8938:\n"
- "\tstrh r5, [r4, 0x38]\n"
- "_080D893A:\n"
- "\tmovs r0, 0\n"
- "\tstrh r0, [r4, 0x26]\n"
- "\tldr r1, _080D8964 @ =gSineTable\n"
- "\tmovs r2, 0x38\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tlsls r0, 1\n"
- "\tadds r0, r1\n"
- "\tmovs r1, 0\n"
- "\tldrsh r0, [r0, r1]\n"
- "\tasrs r0, 3\n"
- "\tstrh r0, [r4, 0x24]\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tadds r0, 0x2\n"
- "\tmovs r1, 0xFF\n"
- "\tands r0, r1\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tadds r0, r4, 0\n"
- "\tbl InitAnimLinearTranslation\n"
- "\tb _080D8AD0\n"
- "\t.align 2, 0\n"
- "_080D8964: .4byte gSineTable\n"
- "_080D8968:\n"
- "\tadds r0, r4, 0\n"
- "\tbl TranslateAnimLinear\n"
- "\tldr r1, _080D89C8 @ =gSineTable\n"
- "\tmovs r2, 0x38\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tlsls r0, 1\n"
- "\tadds r0, r1\n"
- "\tmovs r2, 0\n"
- "\tldrsh r0, [r0, r2]\n"
- "\tasrs r0, 3\n"
- "\tldrh r2, [r4, 0x24]\n"
- "\tadds r0, r2\n"
- "\tstrh r0, [r4, 0x24]\n"
- "\tmovs r2, 0x38\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tadds r0, 0x40\n"
- "\tlsls r0, 1\n"
- "\tadds r0, r1\n"
- "\tmovs r2, 0\n"
- "\tldrsh r1, [r0, r2]\n"
- "\tlsls r0, r1, 1\n"
- "\tadds r0, r1\n"
- "\tnegs r0, r0\n"
- "\tasrs r0, 8\n"
- "\tldrh r1, [r4, 0x26]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r4, 0x26]\n"
- "\tldr r0, _080D89CC @ =gMain\n"
- "\tldr r2, _080D89D0 @ =0x0000043d\n"
- "\tadds r0, r2\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D89F2\n"
- "\tldrh r1, [r4, 0x38]\n"
- "\tadds r0, r1, 0\n"
- "\tsubs r0, 0x40\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tadds r3, r1, 0\n"
- "\tcmp r0, 0x7F\n"
- "\tbhi _080D89D4\n"
- "\tldrh r1, [r4, 0x3C]\n"
- "\tlsls r1, 16\n"
- "\tasrs r1, 24\n"
- "\tb _080D89DC\n"
- "\t.align 2, 0\n"
- "_080D89C8: .4byte gSineTable\n"
- "_080D89CC: .4byte gMain\n"
- "_080D89D0: .4byte 0x0000043d\n"
- "_080D89D4:\n"
- "\tldrh r1, [r4, 0x3C]\n"
- "\tlsls r1, 16\n"
- "\tasrs r1, 24\n"
- "\tadds r1, 0x1\n"
- "_080D89DC:\n"
- "\tmovs r0, 0x3\n"
- "\tands r1, r0\n"
- "\tlsls r1, 2\n"
- "\tldrb r2, [r4, 0x5]\n"
- "\tmovs r0, 0xD\n"
- "\tnegs r0, r0\n"
- "\tands r0, r2\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r4, 0x5]\n"
- "\tadds r0, r3, 0x4\n"
- "\tb _080D8A12\n"
- "_080D89F2:\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tsubs r0, 0x40\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0x7F\n"
- "\tbhi _080D8A06\n"
- "\tadds r1, r4, 0\n"
- "\tadds r1, 0x43\n"
- "\tmovs r0, 0x80\n"
- "\tb _080D8A0C\n"
- "_080D8A06:\n"
- "\tadds r1, r4, 0\n"
- "\tadds r1, 0x43\n"
- "\tmovs r0, 0x8C\n"
- "_080D8A0C:\n"
- "\tstrb r0, [r1]\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tsubs r0, 0x4\n"
- "_080D8A12:\n"
- "\tmovs r1, 0xFF\n"
- "\tands r0, r1\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tmovs r1, 0x2E\n"
- "\tldrsh r0, [r4, r1]\n"
- "\tcmp r0, 0\n"
- "\tbgt _080D8AD0\n"
- "\tmovs r2, 0\n"
- "\tmovs r0, 0xC0\n"
- "\tlsls r0, 2\n"
- "\tstrh r0, [r4, 0x2E]\n"
- "\tldrh r0, [r4, 0x24]\n"
- "\tldrh r1, [r4, 0x20]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r4, 0x20]\n"
- "\tstrh r0, [r4, 0x30]\n"
- "\tldrh r0, [r4, 0x26]\n"
- "\tldrh r1, [r4, 0x22]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r4, 0x22]\n"
- "\tstrh r0, [r4, 0x34]\n"
- "\tadds r0, 0x4\n"
- "\tstrh r0, [r4, 0x36]\n"
- "\tldr r0, _080D8A68 @ =gMain\n"
- "\tldr r1, _080D8A6C @ =0x0000043d\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8A78\n"
- "\tldr r1, _080D8A70 @ =gBattlerPositions\n"
- "\tldr r0, _080D8A74 @ =gBattleAnimTarget\n"
- "\tldrb r0, [r0]\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8A78\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 1\n"
- "\tb _080D8A7A\n"
- "\t.align 2, 0\n"
- "_080D8A68: .4byte gMain\n"
- "_080D8A6C: .4byte 0x0000043d\n"
- "_080D8A70: .4byte gBattlerPositions\n"
- "_080D8A74: .4byte gBattleAnimTarget\n"
- "_080D8A78:\n"
- "\tldr r0, _080D8A90 @ =0x0000fff0\n"
- "_080D8A7A:\n"
- "\tstrh r0, [r4, 0x32]\n"
- "\tldrh r0, [r4, 0x3C]\n"
- "\tadds r0, 0x1\n"
- "\tmovs r1, 0\n"
- "\tstrh r0, [r4, 0x3C]\n"
- "\tstrh r1, [r4, 0x26]\n"
- "\tstrh r1, [r4, 0x24]\n"
- "\tadds r0, r4, 0\n"
- "\tbl sub_8078BD4\n"
- "\tb _080D8AD0\n"
- "\t.align 2, 0\n"
- "_080D8A90: .4byte 0x0000fff0\n"
- "_080D8A94:\n"
- "\tadds r0, r4, 0\n"
- "\tbl TranslateAnimLinear\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8AD0\n"
- "\tldrb r0, [r4, 0x1]\n"
- "\tlsls r0, 30\n"
- "\tlsrs r0, 30\n"
- "\tmovs r1, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8AC2\n"
- "\tldrb r0, [r4, 0x3]\n"
- "\tlsls r0, 26\n"
- "\tlsrs r0, 27\n"
- "\tbl FreeOamMatrix\n"
- "\tldrb r1, [r4, 0x1]\n"
- "\tmovs r0, 0x4\n"
- "\tnegs r0, r0\n"
- "\tands r0, r1\n"
- "\tstrb r0, [r4, 0x1]\n"
- "_080D8AC2:\n"
- "\tadds r0, r4, 0\n"
- "\tbl DestroySprite\n"
- "\tldr r1, _080D8AD8 @ =gAnimVisualTaskCount\n"
- "\tldrb r0, [r1]\n"
- "\tsubs r0, 0x1\n"
- "\tstrb r0, [r1]\n"
- "_080D8AD0:\n"
- "\tpop {r4-r6}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_080D8AD8: .4byte gAnimVisualTaskCount");
-}
-#endif // NONMATCHING
// Creates Hail.
void AnimTask_Hail1(u8 taskId)
@@ -1929,266 +1401,63 @@ static void AnimTask_Hail2(u8 taskId)
}
}
-
-/*
-// Something to do with Hail.
-// possibly equivalent, possibly not
-bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)//(u8 spriteId, u8 taskId, u8 a3)//(u8 taskId)
+bool8 sub_80D8BA8(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c)
{
- //
- //struct Task *task = &gTasks[a2];
- //u16 i, j;
- //task->data[3]++;
- //u8 r5bank = ;
-
- //const struct SpriteTemplate *spriteTemplate;
- u8 spriteId;
+ u8 id;
+ s16 battlerX, battlerY;
+ s16 spriteX;
+ bool8 possibleBool = FALSE;
+ s8 unk = gUnknown_083D9DC4[hailStructId].unk3;
- s16 r6, r7;
-
- u32 tempA, tempB; // u32? s16? u16? u8? int?
-
- //u8 r6, r7;
-
- tempA = a3 + 0;
- tempB = 0;
-
- // is that gunknown a tempvar?
-
- if (gUnknown_083D9DC4[a1][3] != 2
- || IsAnimBankSpriteVisible(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2])))
+ if (unk != 2)
{
- //return TRUE;
- tempB = 1;
-
- r7 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 2);
- r6 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 3);
-
- switch (gUnknown_083D9DC4[a1][3])
+ id = GetBattlerAtPosition(gUnknown_083D9DC4[hailStructId].bPosition);
+ if (IsAnimBankSpriteVisible(id))
{
- case 0:
- //
- r7 -= GetBattlerSpriteCoordAttr(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6;
- r6 -= GetBattlerSpriteCoordAttr(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6;
- break;
- case 1:
- //
- r7 += GetBattlerSpriteCoordAttr(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6;
- r6 += GetBattlerSpriteCoordAttr(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6;
+ possibleBool = TRUE;
+ battlerX = GetBattlerSpriteCoord(id, BATTLER_COORD_X_2);
+ battlerY = GetBattlerSpriteCoord(id, BATTLER_COORD_Y_PIC_OFFSET);
+ switch (unk)
+ {
+ case 0:
+ battlerX -= GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_WIDTH) / 6;
+ battlerY -= GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_HEIGHT) / 6;
+ break;
+ case 1:
+ battlerX += GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_WIDTH) / 6;
+ battlerY += GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_HEIGHT) / 6;
+ break;
+ }
+ }
+ else
+ {
+ battlerX = (gUnknown_083D9DC4[hailStructId].x);
+ battlerY = (gUnknown_083D9DC4[hailStructId].y);
}
}
-
else
{
- // _94
- r7 = gUnknown_083D9DC4[a1][0];
- r6 = gUnknown_083D9DC4[a1][1];
+ battlerX = (gUnknown_083D9DC4[hailStructId].x);
+ battlerY = (gUnknown_083D9DC4[hailStructId].y);
}
-
- spriteId = CreateSprite(&HailSpriteTemplate, r7 - r6, -0x8, 0x12);
-
- if (spriteId != 0x40)
+ spriteX = battlerX - ((battlerY + 8) / 2);
+ id = CreateSprite(&gHailSpriteTemplate, spriteX, -8, 18);
+ if (id == MAX_SPRITES)
{
- //
- StartSpriteAffineAnim(&gSprites[spriteId], a2);
-
- gSprites[spriteId].data[0] = tempB;
- gSprites[spriteId].data[3] = r7;
- gSprites[spriteId].data[4] = r6;
-
- gSprites[spriteId].data[5] = a2;
- gSprites[spriteId].data[6] = tempA;
- gSprites[spriteId].data[7] = a4;
-
+ return FALSE;
+ }
+ else
+ {
+ StartSpriteAffineAnim(&gSprites[id], affineAnimNum);
+ gSprites[id].data[0] = possibleBool;
+ gSprites[id].data[3] = battlerX;
+ gSprites[id].data[4] = battlerY;
+ gSprites[id].data[5] = affineAnimNum;
+ gSprites[id].data[6] = taskId;
+ gSprites[id].data[7] = c;
return TRUE;
}
-
- return FALSE;
-
-}
-//*/
-
-//*
-NAKED bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)
-{
- 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, 0x8\n"
- "\tlsls r0, 24\n"
- "\tlsls r1, 24\n"
- "\tlsrs r1, 24\n"
- "\tmov r9, r1\n"
- "\tlsls r2, 24\n"
- "\tlsrs r2, 24\n"
- "\tstr r2, [sp]\n"
- "\tlsls r3, 24\n"
- "\tlsrs r3, 24\n"
- "\tmov r10, r3\n"
- "\tmovs r1, 0\n"
- "\tstr r1, [sp, 0x4]\n"
- "\tldr r1, _080D8C20 @ =gUnknown_083D9DC4\n"
- "\tlsrs r0, 22\n"
- "\tadds r4, r0, r1\n"
- "\tldrb r0, [r4, 0x3]\n"
- "\tlsls r0, 24\n"
- "\tasrs r0, 28\n"
- "\tmov r8, r0\n"
- "\tcmp r0, 0x2\n"
- "\tbeq _080D8C94\n"
- "\tldrh r0, [r4, 0x2]\n"
- "\tlsls r0, 20\n"
- "\tlsrs r0, 24\n"
- "\tbl GetBattlerAtPosition\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tadds r0, r5, 0\n"
- "\tbl IsAnimBankSpriteVisible\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8C94\n"
- "\tmovs r0, 0x1\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0x2\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0x3\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tmov r1, r8\n"
- "\tcmp r1, 0\n"
- "\tbeq _080D8C24\n"
- "\tcmp r1, 0x1\n"
- "\tbeq _080D8C5A\n"
- "\tb _080D8CA6\n"
- "\t.align 2, 0\n"
- "_080D8C20: .4byte gUnknown_083D9DC4\n"
- "_080D8C24:\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0x1\n"
- "\tbl GetBattlerSpriteCoordAttr\n"
- "\tlsls r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmovs r1, 0x6\n"
- "\tbl __divsi3\n"
- "\tlsls r1, r7, 16\n"
- "\tasrs r1, 16\n"
- "\tsubs r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r7, r1, 16\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0\n"
- "\tbl GetBattlerSpriteCoordAttr\n"
- "\tlsls r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmovs r1, 0x6\n"
- "\tbl __divsi3\n"
- "\tlsls r1, r6, 16\n"
- "\tasrs r1, 16\n"
- "\tsubs r1, r0\n"
- "\tb _080D8C8E\n"
- "_080D8C5A:\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0x1\n"
- "\tbl GetBattlerSpriteCoordAttr\n"
- "\tlsls r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmovs r1, 0x6\n"
- "\tbl __divsi3\n"
- "\tlsls r1, r7, 16\n"
- "\tasrs r1, 16\n"
- "\tadds r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r7, r1, 16\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0\n"
- "\tbl GetBattlerSpriteCoordAttr\n"
- "\tlsls r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmovs r1, 0x6\n"
- "\tbl __divsi3\n"
- "\tlsls r1, r6, 16\n"
- "\tasrs r1, 16\n"
- "\tadds r1, r0\n"
- "_080D8C8E:\n"
- "\tlsls r1, 16\n"
- "\tlsrs r6, r1, 16\n"
- "\tb _080D8CA6\n"
- "_080D8C94:\n"
- "\tldrh r0, [r4]\n"
- "\tlsls r0, 22\n"
- "\tasrs r0, 6\n"
- "\tlsrs r7, r0, 16\n"
- "\tldr r0, [r4]\n"
- "\tlsls r0, 12\n"
- "\tasrs r0, 22\n"
- "\tlsls r0, 16\n"
- "\tlsrs r6, r0, 16\n"
- "_080D8CA6:\n"
- "\tlsls r0, r6, 16\n"
- "\tasrs r0, 16\n"
- "\tadds r0, 0x8\n"
- "\tlsrs r1, r0, 31\n"
- "\tadds r0, r1\n"
- "\tasrs r0, 1\n"
- "\tlsls r1, r7, 16\n"
- "\tasrs r1, 16\n"
- "\tsubs r1, r0\n"
- "\tldr r0, _080D8D00 @ =HailSpriteTemplate\n"
- "\tlsls r1, 16\n"
- "\tasrs r1, 16\n"
- "\tmovs r2, 0x8\n"
- "\tnegs r2, r2\n"
- "\tmovs r3, 0x12\n"
- "\tbl CreateSprite\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tcmp r5, 0x40\n"
- "\tbeq _080D8D08\n"
- "\tlsls r4, r5, 4\n"
- "\tadds r4, r5\n"
- "\tlsls r4, 2\n"
- "\tldr r0, _080D8D04 @ =gSprites\n"
- "\tadds r4, r0\n"
- "\tadds r0, r4, 0\n"
- "\tmov r1, r9\n"
- "\tbl StartSpriteAffineAnim\n"
- "\tmov r0, sp\n"
- "\tldrh r0, [r0, 0x4]\n"
- "\tstrh r0, [r4, 0x2E]\n"
- "\tstrh r7, [r4, 0x34]\n"
- "\tstrh r6, [r4, 0x36]\n"
- "\tmov r1, r9\n"
- "\tstrh r1, [r4, 0x38]\n"
- "\tmov r0, sp\n"
- "\tldrh r0, [r0]\n"
- "\tstrh r0, [r4, 0x3A]\n"
- "\tmov r1, r10\n"
- "\tstrh r1, [r4, 0x3C]\n"
- "\tmovs r0, 0x1\n"
- "\tb _080D8D0A\n"
- "\t.align 2, 0\n"
- "_080D8D00: .4byte gHailSpriteTemplate\n"
- "_080D8D04: .4byte gSprites\n"
- "_080D8D08:\n"
- "\tmovs r0, 0\n"
- "_080D8D0A:\n"
- "\tadd sp, 0x8\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1");
}
-//*/
static void AnimHailBegin(struct Sprite *sprite)
{
diff --git a/src/battle/anim/psychic.c b/src/battle/anim/psychic.c
index 84a7741e1..c76e522f4 100644
--- a/src/battle/anim/psychic.c
+++ b/src/battle/anim/psychic.c
@@ -1042,17 +1042,14 @@ static void sub_80DC3F4(u8 taskId)
}
}
-#ifdef NONMATCHING
void sub_80DC4F4(u8 taskId)
{
s16 spriteId;
- u8 matrixNum;
- register u8 matrixNum2 asm("r6");
+ s16 matrixNum;
struct Task *task = &gTasks[taskId];
matrixNum = AllocOamMatrix();
- matrixNum2 = matrixNum;
- if (matrixNum2 == 0xFF)
+ if (matrixNum == 0xFF)
{
DestroyAnimVisualTask(taskId);
return;
@@ -1068,7 +1065,7 @@ void sub_80DC4F4(u8 taskId)
gSprites[spriteId].callback = SpriteCallbackDummy;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
- gSprites[spriteId].oam.matrixNum = matrixNum2;
+ gSprites[spriteId].oam.matrixNum = matrixNum;
gSprites[spriteId].affineAnimPaused = 1;
gSprites[spriteId].subpriority++;
obj_id_set_rotscale(spriteId, 256, 256, 0);
@@ -1079,132 +1076,6 @@ void sub_80DC4F4(u8 taskId)
task->data[15] = spriteId;
task->func = sub_80DC5F4;
}
-#else
-NAKED
-void sub_80DC4F4(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- mov r8, r4\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 3\n\
- ldr r1, _080DC528 @ =gTasks\n\
- adds r7, r0, r1\n\
- bl AllocOamMatrix\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- mov r10, r5\n\
- adds r6, r5, 0\n\
- cmp r6, 0xFF\n\
- bne _080DC52C\n\
- adds r0, r4, 0\n\
- bl DestroyAnimVisualTask\n\
- b _080DC5D6\n\
- .align 2, 0\n\
-_080DC528: .4byte gTasks\n\
-_080DC52C:\n\
- ldr r1, _080DC550 @ =gBattleAnimArgs\n\
- ldrb r0, [r1]\n\
- bl duplicate_obj_of_side_rel2move_in_transparent_mode\n\
- lsls r0, 16\n\
- lsrs r1, r0, 16\n\
- mov r9, r1\n\
- asrs r0, 16\n\
- cmp r0, 0\n\
- bge _080DC554\n\
- adds r0, r5, 0\n\
- bl FreeOamMatrix\n\
- mov r0, r8\n\
- bl DestroyAnimVisualTask\n\
- b _080DC5D6\n\
- .align 2, 0\n\
-_080DC550: .4byte gBattleAnimArgs\n\
-_080DC554:\n\
- ldr r2, _080DC5E4 @ =gSprites\n\
- lsls r4, r0, 4\n\
- adds r4, r0\n\
- lsls r4, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x1C\n\
- adds r0, r4, r0\n\
- ldr r1, _080DC5E8 @ =SpriteCallbackDummy\n\
- str r1, [r0]\n\
- adds r4, r2\n\
- ldrb r0, [r4, 0x1]\n\
- movs r1, 0x3\n\
- orrs r0, r1\n\
- strb r0, [r4, 0x1]\n\
- movs r0, 0x1F\n\
- ands r6, r0\n\
- lsls r2, r6, 1\n\
- ldrb r1, [r4, 0x3]\n\
- movs r0, 0x3F\n\
- negs r0, r0\n\
- ands r0, r1\n\
- orrs r0, r2\n\
- strb r0, [r4, 0x3]\n\
- adds r2, r4, 0\n\
- adds r2, 0x2C\n\
- ldrb r0, [r2]\n\
- movs r1, 0x80\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- adds r1, r4, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
- mov r1, r9\n\
- lsls r0, r1, 24\n\
- lsrs r0, 24\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- adds r1, r2, 0\n\
- movs r3, 0\n\
- bl obj_id_set_rotscale\n\
- ldrb r3, [r4, 0x1]\n\
- lsrs r1, r3, 6\n\
- ldrb r2, [r4, 0x3]\n\
- lsrs r2, 6\n\
- lsls r3, 30\n\
- lsrs r3, 30\n\
- adds r0, r4, 0\n\
- bl CalcCenterToCornerVec\n\
- ldr r1, _080DC5EC @ =gBattleAnimArgs\n\
- ldrb r0, [r1]\n\
- bl GetAnimBattlerSpriteId\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- strh r0, [r7, 0x22]\n\
- mov r0, r10\n\
- strh r0, [r7, 0x24]\n\
- mov r1, r9\n\
- strh r1, [r7, 0x26]\n\
- ldr r0, _080DC5F0 @ =sub_80DC5F4\n\
- str r0, [r7]\n\
-_080DC5D6:\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\
- .align 2, 0\n\
-_080DC5E4: .4byte gSprites\n\
-_080DC5E8: .4byte SpriteCallbackDummy\n\
-_080DC5EC: .4byte gBattleAnimArgs\n\
-_080DC5F0: .4byte sub_80DC5F4\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
void sub_80DC5F4(u8 taskId)
{
diff --git a/src/battle/anim/water.c b/src/battle/anim/water.c
index 98e50f17f..135ed43cb 100644
--- a/src/battle/anim/water.c
+++ b/src/battle/anim/water.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "battle.h"
+#include "decompress.h"
+#include "graphics.h"
#include "battle_anim.h"
#include "random.h"
#include "rom_8077ABC.h"
@@ -25,6 +27,7 @@ void sub_8078F40(u8);
void sub_8079A64(u8);
void sub_80D37FC(struct Sprite *sprite);
void sub_80D3838(struct Sprite *sprite);
+void sub_80D3B60(u8 taskId);
void sub_80D3D68(u8 taskId);
void sub_80D4044(struct Sprite *sprite);
void sub_80D40A8(struct Sprite *);
@@ -44,7 +47,7 @@ void sub_80D4BF0(struct Sprite *sprite);
void sub_80D4C18(struct Sprite *);
void sub_80D4CEC(struct Sprite *);
void sub_80D4C64(struct Sprite *sprite);
-void sub_80D4D64(struct Sprite*, int, int);
+void sub_80D4D64(struct Sprite*, s32, s32);
void sub_80E1864(u8);
static void sub_80D3874(struct Sprite *sprite);
@@ -260,329 +263,104 @@ static void sub_80D3874(struct Sprite *sprite)
}
}
-NAKED
void AnimTask_CreateSurfWave(u8 taskId)
{
- asm(".syntax unified\n\
- .equ REG_BLDCNT, 0x4000050\n\
- .equ REG_BG1CNT, 0x400000A\n\
- .equ REG_BG1HOFS, 0x4000014\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\
- lsrs r0, 24\n\
- mov r10, r0\n\
- ldr r1, _080D398C @ =REG_BLDCNT\n\
- ldr r2, _080D3990 @ =0x00003f42\n\
- adds r0, r2, 0\n\
- strh r0, [r1]\n\
- adds r1, 0x2\n\
- movs r3, 0x80\n\
- lsls r3, 5\n\
- adds r0, r3, 0\n\
- strh r0, [r1]\n\
- ldr r2, _080D3994 @ =REG_BG1CNT\n\
- ldrb r1, [r2]\n\
- movs r0, 0x4\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x1\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldrb r1, [r2, 0x1]\n\
- movs r0, 0x3F\n\
- ands r0, r1\n\
- movs r1, 0x40\n\
- orrs r0, r1\n\
- strb r0, [r2, 0x1]\n\
- mov r0, sp\n\
- bl sub_8078914\n\
- ldr r2, [sp]\n\
- movs r3, 0x80\n\
- lsls r3, 6\n\
- add r6, sp, 0x10\n\
- add r0, sp, 0xC\n\
- mov r12, r0\n\
- movs r5, 0\n\
- ldr r1, _080D3998 @ =0x040000d4\n\
- movs r4, 0x80\n\
- lsls r4, 5\n\
- mov r8, r6\n\
- ldr r7, _080D399C @ =0x85000400\n\
- movs r0, 0x85\n\
- lsls r0, 24\n\
- mov r9, r0\n\
-_080D3920:\n\
- str r5, [sp, 0x10]\n\
- mov r0, r8\n\
- str r0, [r1]\n\
- str r2, [r1, 0x4]\n\
- str r7, [r1, 0x8]\n\
- ldr r0, [r1, 0x8]\n\
- adds r2, r4\n\
- subs r3, r4\n\
- cmp r3, r4\n\
- bhi _080D3920\n\
- str r5, [sp, 0x10]\n\
- str r6, [r1]\n\
- str r2, [r1, 0x4]\n\
- lsrs r0, r3, 2\n\
- mov r2, r9\n\
- orrs r0, r2\n\
- str r0, [r1, 0x8]\n\
- ldr r0, [r1, 0x8]\n\
- movs r0, 0\n\
- mov r3, r12\n\
- strb r0, [r3]\n\
- strb r0, [r3]\n\
- ldr r1, [sp, 0x4]\n\
- movs r0, 0\n\
- str r0, [sp, 0x10]\n\
- ldr r0, _080D3998 @ =0x040000d4\n\
- str r6, [r0]\n\
- str r1, [r0, 0x4]\n\
- ldr r1, _080D399C @ =0x85000400\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- bl IsContest\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _080D39B8\n\
- ldr r2, _080D3994 @ =REG_BG1CNT\n\
- ldrb r1, [r2]\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldr r0, _080D39A0 @ =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _080D39A8\n\
- ldr r0, _080D39A4 @ =gUnknown_08E70968\n\
- b _080D39AA\n\
- .align 2, 0\n\
-_080D398C: .4byte REG_BLDCNT\n\
-_080D3990: .4byte 0x00003f42\n\
-_080D3994: .4byte REG_BG1CNT\n\
-_080D3998: .4byte 0x040000d4\n\
-_080D399C: .4byte 0x85000400\n\
-_080D39A0: .4byte gBattleAnimAttacker\n\
-_080D39A4: .4byte gUnknown_08E70968\n\
-_080D39A8:\n\
- ldr r0, _080D39B4 @ =gUnknown_08E70C38\n\
-_080D39AA:\n\
- ldr r1, [sp, 0x4]\n\
- bl LZDecompressVram\n\
- b _080D39CE\n\
- .align 2, 0\n\
-_080D39B4: .4byte gUnknown_08E70C38\n\
-_080D39B8:\n\
- ldr r0, _080D39F0 @ =gUnknown_08E70F0C\n\
- ldr r1, [sp, 0x4]\n\
- bl LZDecompressVram\n\
- mov r0, sp\n\
- ldrb r0, [r0, 0x8]\n\
- ldr r1, [sp, 0x4]\n\
- movs r2, 0\n\
- movs r3, 0x1\n\
- bl sub_80763FC\n\
-_080D39CE:\n\
- ldr r0, _080D39F4 @ =gBattleAnimBackgroundImage_Surf\n\
- ldr r1, [sp]\n\
- bl LZDecompressVram\n\
- ldr r0, _080D39F8 @ =gBattleAnimArgs\n\
- movs r1, 0\n\
- ldrsh r0, [r0, r1]\n\
- cmp r0, 0\n\
- bne _080D3A00\n\
- ldr r0, _080D39FC @ =gBattleAnimBackgroundPalette_Surf\n\
- mov r1, sp\n\
- ldrb r1, [r1, 0x8]\n\
- lsls r1, 4\n\
- movs r2, 0x20\n\
- bl LoadCompressedPalette\n\
- b _080D3A0E\n\
- .align 2, 0\n\
-_080D39F0: .4byte gUnknown_08E70F0C\n\
-_080D39F4: .4byte gBattleAnimBackgroundImage_Surf\n\
-_080D39F8: .4byte gBattleAnimArgs\n\
-_080D39FC: .4byte gBattleAnimBackgroundPalette_Surf\n\
-_080D3A00:\n\
- ldr r0, _080D3A78 @ =gBattleAnimBackgroundImageMuddyWater_Pal\n\
- mov r1, sp\n\
- ldrb r1, [r1, 0x8]\n\
- lsls r1, 4\n\
- movs r2, 0x20\n\
- bl LoadCompressedPalette\n\
-_080D3A0E:\n\
- ldr r0, _080D3A7C @ =sub_80D3D68\n\
- ldr r4, _080D3A80 @ =gTasks\n\
- mov r2, r10\n\
- lsls r5, r2, 2\n\
- adds r1, r5, r2\n\
- lsls r1, 3\n\
- adds r6, r1, r4\n\
- ldrb r1, [r6, 0x7]\n\
- adds r1, 0x1\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- bl CreateTask\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- movs r3, 0\n\
- mov r9, r3\n\
- mov r0, r8\n\
- strh r0, [r6, 0x26]\n\
- mov r1, r8\n\
- lsls r0, r1, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r7, r0, r4\n\
- mov r2, r9\n\
- strh r2, [r7, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- strh r0, [r7, 0xA]\n\
- strh r0, [r7, 0xC]\n\
- bl IsContest\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0\n\
- beq _080D3A94\n\
- ldr r3, _080D3A84 @ =0x0000ffb0\n\
- adds r0, r3, 0\n\
- ldr r1, _080D3A88 @ =gBattle_BG1_X\n\
- strh r0, [r1]\n\
- ldr r2, _080D3A8C @ =0x0000ffd0\n\
- adds r0, r2, 0\n\
- ldr r3, _080D3A90 @ =gBattle_BG1_Y\n\
- strh r0, [r3]\n\
- movs r0, 0x2\n\
- strh r0, [r6, 0x8]\n\
- movs r0, 0x1\n\
- strh r0, [r6, 0xA]\n\
- mov r0, r9\n\
- strh r0, [r7, 0xE]\n\
- b _080D3AEE\n\
- .align 2, 0\n\
-_080D3A78: .4byte gBattleAnimBackgroundImageMuddyWater_Pal\n\
-_080D3A7C: .4byte sub_80D3D68\n\
-_080D3A80: .4byte gTasks\n\
-_080D3A84: .4byte 0x0000ffb0\n\
-_080D3A88: .4byte gBattle_BG1_X\n\
-_080D3A8C: .4byte 0x0000ffd0\n\
-_080D3A90: .4byte gBattle_BG1_Y\n\
-_080D3A94:\n\
- ldr r0, _080D3AC4 @ =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x1\n\
- bne _080D3AD8\n\
- ldr r2, _080D3AC8 @ =0x0000ff20\n\
- adds r0, r2, 0\n\
- ldr r3, _080D3ACC @ =gBattle_BG1_X\n\
- strh r0, [r3]\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- adds r0, r2, 0\n\
- ldr r3, _080D3AD0 @ =gBattle_BG1_Y\n\
- strh r0, [r3]\n\
- movs r0, 0x2\n\
- strh r0, [r6, 0x8]\n\
- ldr r0, _080D3AD4 @ =0x0000ffff\n\
- strh r0, [r6, 0xA]\n\
- strh r1, [r7, 0xE]\n\
- b _080D3AEE\n\
- .align 2, 0\n\
-_080D3AC4: .4byte gBattleAnimAttacker\n\
-_080D3AC8: .4byte 0x0000ff20\n\
-_080D3ACC: .4byte gBattle_BG1_X\n\
-_080D3AD0: .4byte gBattle_BG1_Y\n\
-_080D3AD4: .4byte 0x0000ffff\n\
-_080D3AD8:\n\
- ldr r0, _080D3B1C @ =gBattle_BG1_X\n\
- strh r4, [r0]\n\
- ldr r1, _080D3B20 @ =0x0000ffd0\n\
- adds r0, r1, 0\n\
- ldr r2, _080D3B24 @ =gBattle_BG1_Y\n\
- strh r0, [r2]\n\
- ldr r0, _080D3B28 @ =0x0000fffe\n\
- strh r0, [r6, 0x8]\n\
- movs r0, 0x1\n\
- strh r0, [r6, 0xA]\n\
- strh r4, [r7, 0xE]\n\
-_080D3AEE:\n\
- ldr r1, _080D3B2C @ =REG_BG1HOFS\n\
- ldr r3, _080D3B1C @ =gBattle_BG1_X\n\
- ldrh r0, [r3]\n\
- strh r0, [r1]\n\
- adds r1, 0x2\n\
- ldr r2, _080D3B24 @ =gBattle_BG1_Y\n\
- ldrh r0, [r2]\n\
- strh r0, [r1]\n\
- ldr r1, _080D3B30 @ =gTasks\n\
- mov r3, r8\n\
- lsls r0, r3, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r2, r0, r1\n\
- movs r3, 0xE\n\
- ldrsh r0, [r2, r3]\n\
- cmp r0, 0\n\
- bne _080D3B34\n\
- movs r0, 0x30\n\
- strh r0, [r2, 0x10]\n\
- movs r0, 0x70\n\
- b _080D3B38\n\
- .align 2, 0\n\
-_080D3B1C: .4byte gBattle_BG1_X\n\
-_080D3B20: .4byte 0x0000ffd0\n\
-_080D3B24: .4byte gBattle_BG1_Y\n\
-_080D3B28: .4byte 0x0000fffe\n\
-_080D3B2C: .4byte REG_BG1HOFS\n\
-_080D3B30: .4byte gTasks\n\
-_080D3B34:\n\
- movs r0, 0\n\
- strh r0, [r2, 0x10]\n\
-_080D3B38:\n\
- strh r0, [r2, 0x12]\n\
- mov r2, r10\n\
- adds r0, r5, r2\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- movs r1, 0x1\n\
- strh r1, [r0, 0x14]\n\
- ldr r1, _080D3B5C @ =sub_80D3B60\n\
- str r1, [r0]\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\n\
- .align 2, 0\n\
-_080D3B5C: .4byte sub_80D3B60\n\
- .syntax divided\n");
+ struct Struct_sub_8078914 subStruct;
+ u8 taskId2;
+ u16 *BGptrX = &gBattle_BG1_X;
+ u16 *BGptrY = &gBattle_BG1_Y;
+ vu8 cpuDelay; // explanation below
+
+ REG_BLDCNT = BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL;
+ REG_BLDALPHA = 0x1000;
+ REG_BG1CNT_BITFIELD.priority = 1;
+ REG_BG1CNT_BITFIELD.screenSize = 1;
+ sub_8078914(&subStruct);
+
+ // This is gone in FireRed and Emerald.
+ Dma3FillLarge32_(0, subStruct.field_0, 0x2000); // !
+ /*
+ Many games use wasteful NOPs; some of which are
+ even moreso than regular ones. This is so that
+ hardware operations can finish.
+
+ This is just an example. Also, this is apparently
+ not a macro, as making it a macro results in a
+ NONMATCHING.
+ */
+ cpuDelay = 0; // stall the CPU
+ cpuDelay = 0; // stall the CPU
+ Dma3FillLarge32_(0, subStruct.field_4, 0x1000); // !
+
+ if (!IsContest())
+ {
+ REG_BG1CNT_BITFIELD.charBaseBlock = 1;
+ if (GetBattlerSide(gBattleAnimAttacker) == 1)
+ LZDecompressVram(&gUnknown_08E70968, subStruct.field_4);
+ else
+ LZDecompressVram(&gUnknown_08E70C38, subStruct.field_4);
+ }
+ else
+ {
+ LZDecompressVram(&gUnknown_08E70F0C, subStruct.field_4);
+ sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 1);
+ }
+ LZDecompressVram(&gBattleAnimBackgroundImage_Surf, subStruct.field_0);
+ if (gBattleAnimArgs[0] == 0)
+ LoadCompressedPalette(&gBattleAnimBackgroundPalette_Surf, 16 * subStruct.field_8, 32);
+ else
+ LoadCompressedPalette(&gBattleAnimBackgroundImageMuddyWater_Pal, 16 * subStruct.field_8, 32);
+ taskId2 = CreateTask(sub_80D3D68, gTasks[taskId].priority + 1);
+ gTasks[taskId].data[15] = taskId2;
+ gTasks[taskId2].data[0] = 0;
+ gTasks[taskId2].data[1] = 0x1000;
+ gTasks[taskId2].data[2] = 0x1000;
+ if (IsContest())
+ {
+ *BGptrX = -80;
+ *BGptrY = -48;
+ gTasks[taskId].data[0] = 2;
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId2].data[3] = 0;
+ }
+ else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ {
+ *BGptrX = -224;
+ *BGptrY = 256;
+ gTasks[taskId].data[0] = 2;
+ gTasks[taskId].data[1] = -1;
+ gTasks[taskId2].data[3] = 1;
+ }
+ else
+ {
+ *BGptrX = 0;
+ *BGptrY = -48;
+ gTasks[taskId].data[0] = -2;
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId2].data[3] = 0;
+ }
+ REG_BG1HOFS = *BGptrX;
+ REG_BG1VOFS = *BGptrY;
+ if(gTasks[taskId2].data[3] == 0)
+ {
+ gTasks[taskId2].data[4] = 48;
+ gTasks[taskId2].data[5] = 112;
+ }
+ else
+ {
+ gTasks[taskId2].data[4] = 0;
+ gTasks[taskId2].data[5] = 0;
+ }
+ gTasks[taskId].data[6] = 1;
+ gTasks[taskId].func = sub_80D3B60;
}
#ifdef NONMATCHING
void sub_80D3B60(u8 taskId)
{
struct Struct_sub_8078914 unk;
+
+ vu8 cpuDelay; // yet again
u8 i;
u16 rgbBuffer;
u16 *BGptrX = &gBattle_BG1_X;
@@ -609,6 +387,7 @@ void sub_80D3B60(u8 taskId)
}
if (++gTasks[taskId].data[6] > 1)
{
+ // there is some weird math going on here
gTasks[taskId].data[6] = 0;
unkUse = ++gTasks[taskId].data[3];
if (unkUse <= 13)
@@ -624,8 +403,20 @@ void sub_80D3B60(u8 taskId)
}
if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F))
{
- gTasks[taskId].data[0] = gTasks[gTasks[taskId].data[15]].data[1] & 0x1F;
- gTasks[taskId].func = sub_80D3D68;
+ Dma3FillLarge32_(0, unk.field_0, 0x2000); // !
+ cpuDelay = 0; // stall the CPU
+ cpuDelay = 0; // stall the CPU
+ Dma3FillLarge32_(0, unk.field_4, 0x1000); // !
+ if (!IsContest)
+ REG_BG1CNT_BITFIELD.charBaseBlock = 1;
+ *BGptrX = 0;
+ *BGptrY = 0;
+
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+
+ gTasks[gTasks[taskId].data[15]].data[15] = 0xffff;
+ DestroyAnimVisualTask(taskId);
}
}
#else
@@ -882,44 +673,35 @@ _080D3D32:\n\
}
#endif
-#ifdef NONMATCHING
void sub_80D3D68(u8 taskId)
{
s16 i;
struct ScanlineEffectParams params;
struct Task *task = &gTasks[taskId];
- // u16 *scanlineBuffer;
switch (task->data[0])
{
case 0:
for (i = 0; i < task->data[4]; i++)
{
- /* scanlineBuffer = &gScanlineEffectRegBuffers[0][i];
- *(u16 *)(&gScanlineEffect) = task->data[2];
- *scanlineBuffer = task->data[2] & -1; */
- gScanlineEffectRegBuffers[1][i] = task->data[2];
- gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[2] & 0xFFFF));
+ /* variable initialization isn't literal to ASM */
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
}
for (i = task->data[4]; i < task->data[5]; i++)
{
- gScanlineEffectRegBuffers[1][i] = task->data[1];
- gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[1] & 0xFFFF));
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[1];
}
for (i = task->data[5]; i < 160; i++)
{
- gScanlineEffectRegBuffers[1][i] = task->data[2];
- gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[2] & 0xFFFF));
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
}
if (task->data[4] == 0)
{
- gScanlineEffectRegBuffers[1][i] = task->data[1];
- gScanlineEffectRegBuffers[0][i] = task->data[1];
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[1];
}
else
{
- gScanlineEffectRegBuffers[1][i] = task->data[2];
- gScanlineEffectRegBuffers[0][i] = task->data[2];
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
}
params.dmaDest = (vu16 *)REG_ADDR_BLDALPHA;
params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
@@ -975,391 +757,6 @@ void sub_80D3D68(u8 taskId)
break;
}
}
-#else
-NAKED
-void sub_80D3D68(u8 taskId)
-{
- asm_unified("push {r4-r7,lr}\n\
- sub sp, 0xC\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- lsls r0, r7, 2\n\
- adds r0, r7\n\
- lsls r0, 3\n\
- ldr r1, =gTasks\n\
- adds r4, r0, r1\n\
- movs r1, 0x8\n\
- ldrsh r0, [r4, r1]\n\
- cmp r0, 0x1\n\
- bne _080D3D84\n\
- b _080D3EBC\n\
-_080D3D84:\n\
- cmp r0, 0x1\n\
- bgt _080D3D94\n\
- cmp r0, 0\n\
- beq _080D3D9C\n\
- b _080D4032\n\
- .align 2, 0\n\
- .pool\n\
-_080D3D94:\n\
- cmp r0, 0x2\n\
- bne _080D3D9A\n\
- b _080D3F88\n\
-_080D3D9A:\n\
- b _080D4032\n\
-_080D3D9C:\n\
- movs r3, 0\n\
- movs r2, 0x10\n\
- ldrsh r0, [r4, r2]\n\
- ldr r1, =gScanlineEffectRegBuffers\n\
- mov r12, r1\n\
- cmp r3, r0\n\
- bge _080D3DDA\n\
- mov r7, r12\n\
- movs r5, 0xF0\n\
- lsls r5, 3\n\
- add r5, r12\n\
- ldr r6, =0x0000ffff\n\
-_080D3DB4:\n\
- lsls r2, r3, 16\n\
- asrs r2, 16\n\
- lsls r1, r2, 1\n\
- adds r3, r1, r7\n\
- adds r1, r5\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r1]\n\
- ldrh r1, [r4, 0xC]\n\
- adds r0, r6, 0\n\
- ands r0, r1\n\
- strh r0, [r3]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- lsrs r3, r2, 16\n\
- asrs r2, 16\n\
- movs r1, 0x10\n\
- ldrsh r0, [r4, r1]\n\
- cmp r2, r0\n\
- blt _080D3DB4\n\
-_080D3DDA:\n\
- ldrh r3, [r4, 0x10]\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- bge _080D3E14\n\
- ldr r5, =gScanlineEffectRegBuffers\n\
- movs r0, 0xF0\n\
- lsls r0, 3\n\
- adds r6, r5, r0\n\
- ldr r7, =0x0000ffff\n\
-_080D3DF2:\n\
- asrs r2, 16\n\
- lsls r1, r2, 1\n\
- adds r3, r1, r5\n\
- adds r1, r6\n\
- ldrh r0, [r4, 0xA]\n\
- strh r0, [r1]\n\
- ldrh r1, [r4, 0xA]\n\
- adds r0, r7, 0\n\
- ands r0, r1\n\
- strh r0, [r3]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- blt _080D3DF2\n\
-_080D3E14:\n\
- ldrh r3, [r4, 0x12]\n\
- lsls r2, r3, 16\n\
- asrs r0, r2, 16\n\
- cmp r0, 0x9F\n\
- bgt _080D3E4A\n\
- ldr r5, =gScanlineEffectRegBuffers\n\
- movs r0, 0xF0\n\
- lsls r0, 3\n\
- adds r6, r5, r0\n\
- ldr r7, =0x0000ffff\n\
-_080D3E28:\n\
- asrs r2, 16\n\
- lsls r1, r2, 1\n\
- adds r3, r1, r5\n\
- adds r1, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r1]\n\
- ldrh r1, [r4, 0xC]\n\
- adds r0, r7, 0\n\
- ands r0, r1\n\
- strh r0, [r3]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- lsrs r3, r2, 16\n\
- lsls r2, r3, 16\n\
- asrs r0, r2, 16\n\
- cmp r0, 0x9F\n\
- ble _080D3E28\n\
-_080D3E4A:\n\
- movs r1, 0x10\n\
- ldrsh r0, [r4, r1]\n\
- cmp r0, 0\n\
- bne _080D3E74\n\
- lsls r0, r3, 16\n\
- asrs r0, 15\n\
- mov r3, r12\n\
- adds r2, r0, r3\n\
- movs r1, 0xF0\n\
- lsls r1, 3\n\
- add r1, r12\n\
- adds r0, r1\n\
- ldrh r1, [r4, 0xA]\n\
- strh r1, [r0]\n\
- ldrh r0, [r4, 0xA]\n\
- b _080D3E8A\n\
- .align 2, 0\n\
- .pool\n\
-_080D3E74:\n\
- lsls r0, r3, 16\n\
- asrs r0, 15\n\
- mov r1, r12\n\
- adds r2, r0, r1\n\
- movs r1, 0xF0\n\
- lsls r1, 3\n\
- add r1, r12\n\
- adds r0, r1\n\
- ldrh r1, [r4, 0xC]\n\
- strh r1, [r0]\n\
- ldrh r0, [r4, 0xC]\n\
-_080D3E8A:\n\
- strh r0, [r2]\n\
- ldr r0, =0x04000052\n\
- str r0, [sp]\n\
- ldr r0, =0xa2600001\n\
- str r0, [sp, 0x4]\n\
- mov r1, sp\n\
- movs r2, 0\n\
- movs r0, 0x1\n\
- strb r0, [r1, 0x8]\n\
- mov r0, sp\n\
- strb r2, [r0, 0x9]\n\
- ldr r0, [sp]\n\
- ldr r1, [sp, 0x4]\n\
- ldr r2, [sp, 0x8]\n\
- bl ScanlineEffect_SetParams\n\
- ldrh r0, [r4, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x8]\n\
- b _080D4032\n\
- .align 2, 0\n\
- .pool\n\
-_080D3EBC:\n\
- movs r2, 0xE\n\
- ldrsh r1, [r4, r2]\n\
- cmp r1, 0\n\
- bne _080D3ED4\n\
- ldrh r0, [r4, 0x10]\n\
- subs r0, 0x1\n\
- strh r0, [r4, 0x10]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bgt _080D3EE8\n\
- strh r1, [r4, 0x10]\n\
- b _080D3EE2\n\
-_080D3ED4:\n\
- ldrh r0, [r4, 0x12]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x12]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x6F\n\
- ble _080D3EE8\n\
-_080D3EE2:\n\
- ldrh r0, [r4, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x8]\n\
-_080D3EE8:\n\
- movs r3, 0\n\
- movs r1, 0x10\n\
- ldrsh r0, [r4, r1]\n\
- cmp r3, r0\n\
- bge _080D3F1C\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3EF6:\n\
- lsls r1, r3, 16\n\
- asrs r1, 16\n\
- lsls r3, r1, 1\n\
- ldrb r2, [r5, 0x14]\n\
- lsls r0, r2, 4\n\
- subs r0, r2\n\
- lsls r0, 7\n\
- adds r3, r0\n\
- adds r3, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r3]\n\
- adds r1, 0x1\n\
- lsls r1, 16\n\
- lsrs r3, r1, 16\n\
- asrs r1, 16\n\
- movs r2, 0x10\n\
- ldrsh r0, [r4, r2]\n\
- cmp r1, r0\n\
- blt _080D3EF6\n\
-_080D3F1C:\n\
- ldrh r3, [r4, 0x10]\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- bge _080D3F50\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3F2E:\n\
- asrs r3, r2, 16\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r5, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r6\n\
- ldrh r0, [r4, 0xA]\n\
- strh r0, [r2]\n\
- adds r3, 0x1\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- blt _080D3F2E\n\
-_080D3F50:\n\
- ldrh r3, [r4, 0x12]\n\
- lsls r1, r3, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x9F\n\
- bgt _080D4032\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3F5E:\n\
- asrs r3, r1, 16\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r5, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r2]\n\
- adds r3, 0x1\n\
- lsls r1, r3, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x9F\n\
- ble _080D3F5E\n\
- b _080D4032\n\
- .align 2, 0\n\
- .pool\n\
-_080D3F88:\n\
- movs r3, 0\n\
- movs r1, 0x10\n\
- ldrsh r0, [r4, r1]\n\
- cmp r3, r0\n\
- bge _080D3FBC\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3F96:\n\
- lsls r1, r3, 16\n\
- asrs r1, 16\n\
- lsls r3, r1, 1\n\
- ldrb r2, [r5, 0x14]\n\
- lsls r0, r2, 4\n\
- subs r0, r2\n\
- lsls r0, 7\n\
- adds r3, r0\n\
- adds r3, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r3]\n\
- adds r1, 0x1\n\
- lsls r1, 16\n\
- lsrs r3, r1, 16\n\
- asrs r1, 16\n\
- movs r2, 0x10\n\
- ldrsh r0, [r4, r2]\n\
- cmp r1, r0\n\
- blt _080D3F96\n\
-_080D3FBC:\n\
- ldrh r3, [r4, 0x10]\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- bge _080D3FF0\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3FCE:\n\
- asrs r3, r2, 16\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r5, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r6\n\
- ldrh r0, [r4, 0xA]\n\
- strh r0, [r2]\n\
- adds r3, 0x1\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- blt _080D3FCE\n\
-_080D3FF0:\n\
- ldrh r3, [r4, 0x12]\n\
- lsls r1, r3, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x9F\n\
- bgt _080D401C\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3FFE:\n\
- asrs r3, r1, 16\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r5, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r2]\n\
- adds r3, 0x1\n\
- lsls r1, r3, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x9F\n\
- ble _080D3FFE\n\
-_080D401C:\n\
- movs r0, 0x26\n\
- ldrsh r1, [r4, r0]\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- cmp r1, r0\n\
- bne _080D4032\n\
- bl ScanlineEffect_Stop\n\
- adds r0, r7, 0\n\
- bl DestroyTask\n\
-_080D4032:\n\
- add sp, 0xC\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
- .pool\n");
-}
-#endif
void sub_80D4044(struct Sprite *sprite)
{
@@ -1892,17 +1289,32 @@ void sub_80D4CEC(struct Sprite *sprite)
sprite->data[0]++;
}
-#ifdef NONMATCHING
-void sub_80D4D64(struct Sprite *sprite, int xDiff, int yDiff)
+void sub_80D4D64(struct Sprite *sprite, s32 xDiff, s32 yDiff)
{
- s16 something = sprite->data[0] / 2;
- s16 combinedX = sprite->pos1.x + sprite->pos2.x;
- s16 combinedY = sprite->pos1.y + sprite->pos2.y;
- s16 randomSomethingY = yDiff + (Random() % 10) - 5;
- s16 randomSomethingX = -xDiff + (Random() % 10) - 5;
s16 i;
u8 spriteId;
+ s16 combinedX;
+ s16 combinedY;
+ s16 something;
+ s16 randomSomethingX;
+ s16 randomSomethingY;
+
+ something = sprite->data[0] / 2;
+ // regalloc acts strange here...
+ combinedX = sprite->pos1.x + sprite->pos2.x;
+ combinedY = sprite->pos1.y + sprite->pos2.y;
+
+ // ...then goes back to normal right here.
+ // Nothing but this appears to reproduce the behavior.
+ if (xDiff) // yDiff works too, but not sprite.
+ {
+ u8 unk = -unk; // this can be any sort of negation
+ }
+
+ randomSomethingY = yDiff + (Random() % 10) - 5;
+ randomSomethingX = -xDiff + (Random() % 10) - 5;
+
for (i = 0; i <= 0; i++)
{
spriteId = CreateSprite(&gSpriteTemplate_83D9420, combinedX, combinedY + something, 130);
@@ -1926,184 +1338,3 @@ void sub_80D4D64(struct Sprite *sprite, int xDiff, int yDiff)
gSprites[spriteId].data[2] = randomSomethingX;
}
}
-#else
-NAKED
-void sub_80D4D64(struct Sprite *sprite, int xDiff, int yDiff)
-{
- 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, 0x18\n\
- adds r4, r1, 0\n\
- adds r5, r2, 0\n\
- movs r2, 0x2E\n\
- ldrsh r1, [r0, r2]\n\
- lsrs r2, r1, 31\n\
- adds r1, r2\n\
- lsls r1, 15\n\
- lsrs r1, 16\n\
- str r1, [sp]\n\
- ldrh r1, [r0, 0x24]\n\
- ldrh r3, [r0, 0x20]\n\
- adds r1, r3\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r8, r1\n\
- ldrh r1, [r0, 0x26]\n\
- ldrh r0, [r0, 0x22]\n\
- adds r1, r0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r10, r1\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- adds r0, r5, r0\n\
- subs r0, 0x5\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r9, r0\n\
- bl Random\n\
- negs r4, r4\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- adds r4, r0\n\
- subs r4, 0x5\n\
- lsls r4, 16\n\
- lsrs r7, r4, 16\n\
- movs r6, 0\n\
- mov r0, r8\n\
- lsls r0, 16\n\
- mov r8, r0\n\
- mov r1, r10\n\
- lsls r1, 16\n\
- str r1, [sp, 0xC]\n\
- ldr r2, [sp]\n\
- lsls r2, 16\n\
- str r2, [sp, 0x10]\n\
- asrs r1, 16\n\
- lsls r0, r7, 16\n\
- asrs r5, r0, 16\n\
- str r0, [sp, 0x14]\n\
- negs r3, r5\n\
- str r3, [sp, 0x4]\n\
- asrs r0, r2, 16\n\
- adds r1, r0\n\
- lsls r1, 16\n\
- mov r10, r1\n\
-_080D4DF2:\n\
- ldr r0, =gSpriteTemplate_83D9420\n\
- mov r2, r8\n\
- asrs r1, r2, 16\n\
- mov r3, r10\n\
- asrs r2, r3, 16\n\
- movs r3, 0x82\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- ldr r1, =gSprites\n\
- lsls r0, r2, 4\n\
- adds r0, r2\n\
- lsls r0, 2\n\
- adds r4, r0, r1\n\
- movs r0, 0x14\n\
- strh r0, [r4, 0x2E]\n\
- mov r0, r9\n\
- strh r0, [r4, 0x30]\n\
- ldr r0, =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSubpriority\n\
- subs r0, 0x1\n\
- adds r1, r4, 0\n\
- adds r1, 0x43\n\
- strb r0, [r1]\n\
- cmp r5, 0\n\
- bge _080D4E40\n\
- mov r1, sp\n\
- ldrh r1, [r1, 0x4]\n\
- strh r1, [r4, 0x32]\n\
- b _080D4E42\n\
- .align 2, 0\n\
- .pool\n\
-_080D4E40:\n\
- strh r7, [r4, 0x32]\n\
-_080D4E42:\n\
- lsls r0, r6, 16\n\
- movs r2, 0x80\n\
- lsls r2, 9\n\
- adds r0, r2\n\
- lsrs r6, r0, 16\n\
- cmp r0, 0\n\
- ble _080D4DF2\n\
- movs r6, 0\n\
- ldr r3, [sp, 0xC]\n\
- asrs r1, r3, 16\n\
- ldr r0, [sp, 0x14]\n\
- asrs r5, r0, 16\n\
- negs r2, r5\n\
- str r2, [sp, 0x8]\n\
- ldr r3, [sp, 0x10]\n\
- asrs r0, r3, 16\n\
- subs r1, r0\n\
- lsls r1, 16\n\
- mov r10, r1\n\
-_080D4E68:\n\
- ldr r0, =gSpriteTemplate_83D9420\n\
- mov r2, r8\n\
- asrs r1, r2, 16\n\
- mov r3, r10\n\
- asrs r2, r3, 16\n\
- movs r3, 0x82\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- ldr r1, =gSprites\n\
- lsls r0, r2, 4\n\
- adds r0, r2\n\
- lsls r0, 2\n\
- adds r4, r0, r1\n\
- movs r0, 0x14\n\
- strh r0, [r4, 0x2E]\n\
- mov r0, r9\n\
- strh r0, [r4, 0x30]\n\
- ldr r0, =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSubpriority\n\
- subs r0, 0x1\n\
- adds r1, r4, 0\n\
- adds r1, 0x43\n\
- strb r0, [r1]\n\
- cmp r5, 0\n\
- ble _080D4EB8\n\
- mov r1, sp\n\
- ldrh r1, [r1, 0x8]\n\
- strh r1, [r4, 0x32]\n\
- b _080D4EBA\n\
- .align 2, 0\n\
- .pool\n\
-_080D4EB8:\n\
- strh r7, [r4, 0x32]\n\
-_080D4EBA:\n\
- lsls r0, r6, 16\n\
- movs r2, 0x80\n\
- lsls r2, 9\n\
- adds r0, r2\n\
- lsrs r6, r0, 16\n\
- cmp r0, 0\n\
- ble _080D4E68\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");
-}
-#endif
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index 405776db6..956cc2f6e 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -246,10 +246,7 @@ static const BattleAICmdFunc sBattleAICmdTable[] =
BattleAICmd_if_not_taunted, // 0x5D
};
-#ifdef NONMATCHING
-static
-#endif
-const u16 sDiscouragedPowerfulMoveEffects[] =
+static const u16 sDiscouragedPowerfulMoveEffects[] =
{
EFFECT_EXPLOSION,
EFFECT_DREAM_EATER,
@@ -337,7 +334,7 @@ void BattleAI_SetupAIData(void)
AI_THINKING_STRUCT->aiFlags = 0x20000000;
else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
AI_THINKING_STRUCT->aiFlags = 0x80000000;
-#ifdef GERMAN
+#if GERMAN || (ENGLISH && DEBUG && REVISION == 0)
else if (gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER) || gTrainerBattleOpponent == SECRET_BASE_OPPONENT)
AI_THINKING_STRUCT->aiFlags = 7;
#endif
@@ -945,18 +942,19 @@ static void BattleAICmd_get_move_power(void)
gAIScriptPtr += 1;
}
-#ifdef NONMATCHING
static void BattleAICmd_is_most_powerful_move(void)
{
- int i, j;
- s32 damages[MAX_MON_MOVES];
+ s32 i, checkedMove;
+ s32 moveDmgs[MAX_MON_MOVES];
for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++)
+ {
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sDiscouragedPowerfulMoveEffects[i])
break;
+ }
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power > 1
- && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF)
+ && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF)
{
gDynamicBasePower = 0;
eDynamicMoveType = 0;
@@ -964,294 +962,49 @@ static void BattleAICmd_is_most_powerful_move(void)
gMoveResultFlags = 0;
gCritMultiplier = 1;
- for (i = 0; i < MAX_MON_MOVES; i++)
+ for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
{
- for (j = 0; sDiscouragedPowerfulMoveEffects[j] != 0xFFFF; j++)
- { // _08108276
- if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == sDiscouragedPowerfulMoveEffects[j])
+ for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++)
+ {
+ if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[checkedMove]].effect == sDiscouragedPowerfulMoveEffects[i])
break;
}
- // _081082BA
- if (gBattleMons[gBattlerAttacker].moves[i]
- && sDiscouragedPowerfulMoveEffects[j] == 0xFFFF
- && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].power > 1)
+ if (gBattleMons[gBattlerAttacker].moves[checkedMove] != MOVE_NONE
+ && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF
+ && gBattleMoves[gBattleMons[gBattlerAttacker].moves[checkedMove]].power > 1)
{
- gCurrentMove = gBattleMons[gBattlerAttacker].moves[i];
+ gCurrentMove = gBattleMons[gBattlerAttacker].moves[checkedMove];
AI_CalcDmg(gBattlerAttacker, gBattlerTarget);
TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
- damages[i] = (gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[i]) / 100;
-
- if (damages[i] == 0) // moves always do at least 1 damage.
- damages[i] = 1;
+ moveDmgs[checkedMove] = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[checkedMove] / 100;
+ if (moveDmgs[checkedMove] == 0)
+ moveDmgs[checkedMove] = 1;
}
else
{
- damages[i] = 0;
+ moveDmgs[checkedMove] = 0;
}
}
- for (i = 0; i < MAX_MON_MOVES; i++)
- if (damages[i] > damages[AI_THINKING_STRUCT->movesetIndex])
+ for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
+ {
+ if (moveDmgs[checkedMove] > moveDmgs[AI_THINKING_STRUCT->movesetIndex])
break;
+ }
- if (i == MAX_MON_MOVES)
- AI_THINKING_STRUCT->funcResult = 2;
+ if (checkedMove == MAX_MON_MOVES)
+ AI_THINKING_STRUCT->funcResult = 2; // Is the most powerful.
else
- AI_THINKING_STRUCT->funcResult = 1;
+ AI_THINKING_STRUCT->funcResult = 1; // Not the most powerful.
}
else
{
- AI_THINKING_STRUCT->funcResult = 0;
+ AI_THINKING_STRUCT->funcResult = 0; // Highly discouraged in terms of power.
}
- gAIScriptPtr += 1;
+ gAIScriptPtr++;
}
-#else
-NAKED
-static void BattleAICmd_is_most_powerful_move(void)
-{
- asm(".syntax 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\
- movs r3, 0\n\
- ldr r0, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\
- ldrh r1, [r0]\n\
- ldr r4, _0810832C @ =0x0000ffff\n\
- ldr r6, _08108330 @ =gBattleMoves\n\
- ldr r5, _08108334 @ =gSharedMem + 0x16800\n\
- cmp r1, r4\n\
- beq _0810822E\n\
- ldrh r1, [r5, 0x2]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r6\n\
- ldrb r2, [r0]\n\
- ldr r1, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\
-_0810821E:\n\
- ldrh r0, [r1]\n\
- cmp r2, r0\n\
- beq _0810822E\n\
- adds r1, 0x2\n\
- adds r3, 0x1\n\
- ldrh r0, [r1]\n\
- cmp r0, r4\n\
- bne _0810821E\n\
-_0810822E:\n\
- ldrh r0, [r5, 0x2]\n\
- lsls r1, r0, 1\n\
- adds r1, r0\n\
- lsls r1, 2\n\
- adds r1, r6\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0x1\n\
- bhi _08108240\n\
- b _081083B2\n\
-_08108240:\n\
- lsls r0, r3, 1\n\
- ldr r1, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\
- adds r0, r1\n\
- ldrh r3, [r0]\n\
- ldr r0, _0810832C @ =0x0000ffff\n\
- cmp r3, r0\n\
- beq _08108250\n\
- b _081083B2\n\
-_08108250:\n\
- ldr r0, _08108338 @ =gDynamicBasePower\n\
- movs r1, 0\n\
- strh r1, [r0]\n\
- ldr r2, _0810833C @ =0xfffff81c\n\
- adds r0, r5, r2\n\
- strb r1, [r0]\n\
- adds r2, 0x3\n\
- adds r0, r5, r2\n\
- movs r2, 0x1\n\
- strb r2, [r0]\n\
- ldr r0, _08108340 @ =gMoveResultFlags\n\
- strb r1, [r0]\n\
- ldr r0, _08108344 @ =gCritMultiplier\n\
- strb r2, [r0]\n\
- movs r6, 0\n\
- mov r9, r3\n\
- ldr r0, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\
- ldrh r0, [r0]\n\
- str r0, [sp, 0x10]\n\
-_08108276:\n\
- movs r3, 0\n\
- ldr r5, _08108348 @ =gBattleMons\n\
- lsls r4, r6, 1\n\
- ldr r7, _0810834C @ =gBattlerAttacker\n\
- lsls r1, r6, 2\n\
- mov r8, r1\n\
- adds r2, r6, 0x1\n\
- mov r10, r2\n\
- ldr r0, [sp, 0x10]\n\
- cmp r0, r9\n\
- beq _081082BA\n\
- ldr r2, _08108330 @ =gBattleMoves\n\
- ldrb r1, [r7]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r0, r4, r0\n\
- adds r1, r5, 0\n\
- adds r1, 0xC\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- ldrb r2, [r0]\n\
- ldr r1, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\
-_081082AA:\n\
- ldrh r0, [r1]\n\
- cmp r2, r0\n\
- beq _081082BA\n\
- adds r1, 0x2\n\
- adds r3, 0x1\n\
- ldrh r0, [r1]\n\
- cmp r0, r9\n\
- bne _081082AA\n\
-_081082BA:\n\
- ldrb r1, [r7]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r0, r4, r0\n\
- adds r1, r5, 0\n\
- adds r1, 0xC\n\
- adds r1, r0, r1\n\
- ldrh r0, [r1]\n\
- cmp r0, 0\n\
- beq _0810835C\n\
- lsls r0, r3, 1\n\
- ldr r2, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\
- adds r0, r2\n\
- ldrh r0, [r0]\n\
- cmp r0, r9\n\
- bne _0810835C\n\
- ldr r0, _08108330 @ =gBattleMoves\n\
- ldrh r2, [r1]\n\
- lsls r1, r2, 1\n\
- adds r1, r2\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0x1\n\
- bls _0810835C\n\
- ldr r5, _08108350 @ =gCurrentMove\n\
- strh r2, [r5]\n\
- ldrb r0, [r7]\n\
- ldr r4, _08108354 @ =gBattlerTarget\n\
- ldrb r1, [r4]\n\
- bl AI_CalcDmg\n\
- ldrh r0, [r5]\n\
- ldrb r1, [r7]\n\
- ldrb r2, [r4]\n\
- bl TypeCalc\n\
- mov r4, sp\n\
- add r4, r8\n\
- ldr r2, _08108358 @ =gBattleMoveDamage\n\
- ldr r0, _08108334 @ =gSharedMem + 0x16800\n\
- adds r0, 0x18\n\
- adds r0, r6, r0\n\
- ldrb r1, [r0]\n\
- ldr r0, [r2]\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- str r0, [r4]\n\
- cmp r0, 0\n\
- bne _08108364\n\
- movs r0, 0x1\n\
- str r0, [r4]\n\
- b _08108364\n\
- .align 2, 0\n\
-_08108328: .4byte sDiscouragedPowerfulMoveEffects\n\
-_0810832C: .4byte 0x0000ffff\n\
-_08108330: .4byte gBattleMoves\n\
-_08108334: .4byte gSharedMem + 0x16800\n\
-_08108338: .4byte gDynamicBasePower\n\
-_0810833C: .4byte 0xfffff81c\n\
-_08108340: .4byte gMoveResultFlags\n\
-_08108344: .4byte gCritMultiplier\n\
-_08108348: .4byte gBattleMons\n\
-_0810834C: .4byte gBattlerAttacker\n\
-_08108350: .4byte gCurrentMove\n\
-_08108354: .4byte gBattlerTarget\n\
-_08108358: .4byte gBattleMoveDamage\n\
-_0810835C:\n\
- mov r1, sp\n\
- add r1, r8\n\
- movs r0, 0\n\
- str r0, [r1]\n\
-_08108364:\n\
- mov r6, r10\n\
- cmp r6, 0x3\n\
- ble _08108276\n\
- movs r6, 0\n\
- ldr r1, _081083A4 @ =gSharedMem + 0x16800\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 2\n\
- add r0, sp\n\
- ldr r2, [sp]\n\
- ldr r0, [r0]\n\
- adds r5, r1, 0\n\
- ldr r4, _081083A8 @ =gAIScriptPtr\n\
- cmp r2, r0\n\
- bgt _0810839A\n\
- adds r3, r5, 0\n\
- mov r2, sp\n\
-_08108384:\n\
- adds r2, 0x4\n\
- adds r6, 0x1\n\
- cmp r6, 0x3\n\
- bgt _0810839A\n\
- ldrb r0, [r3, 0x1]\n\
- lsls r0, 2\n\
- add r0, sp\n\
- ldr r1, [r2]\n\
- ldr r0, [r0]\n\
- cmp r1, r0\n\
- ble _08108384\n\
-_0810839A:\n\
- cmp r6, 0x4\n\
- bne _081083AC\n\
- movs r0, 0x2\n\
- str r0, [r5, 0x8]\n\
- b _081083B8\n\
- .align 2, 0\n\
-_081083A4: .4byte gSharedMem + 0x16800\n\
-_081083A8: .4byte gAIScriptPtr\n\
-_081083AC:\n\
- movs r0, 0x1\n\
- str r0, [r5, 0x8]\n\
- b _081083B8\n\
-_081083B2:\n\
- movs r0, 0\n\
- str r0, [r5, 0x8]\n\
- ldr r4, _081083D0 @ =gAIScriptPtr\n\
-_081083B8:\n\
- ldr r0, [r4]\n\
- adds r0, 0x1\n\
- str r0, [r4]\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\n\
- .align 2, 0\n\
-_081083D0: .4byte gAIScriptPtr\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
static void BattleAICmd_get_move(void)
{
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index b4b2841e0..f83334be3 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -47,263 +47,60 @@ static bool8 ShouldSwitchIfPerishSong(void)
return FALSE;
}
-#ifdef NONMATCHING
static bool8 ShouldSwitchIfWonderGuard(void)
{
u8 opposingBattler;
u8 moveFlags;
s32 i, j;
+ u16 move;
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- return FALSE;
-
- if (gBattleMons[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)].ability != ABILITY_WONDER_GUARD)
+ if(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
return FALSE;
- // check if pokemon has a super effective move
- opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
- for (i = 0; i < 4; i++)
+ if (gBattleMons[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)].ability == ABILITY_WONDER_GUARD)
{
- u16 move = gBattleMons[gActiveBattler].moves[i];
- if (move == MOVE_NONE)
- continue;
-
- moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
- if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
- return FALSE;
- }
-
- // find a pokemon in the party that has a super effective move
- for (i = 0; i < 6; i++)
- {
- if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0
- || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
- || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG
- || i == gBattlerPartyIndexes[gActiveBattler])
- continue;
-
- GetMonData(&gEnemyParty[i], MON_DATA_SPECIES); // unused return value
- GetMonData(&gEnemyParty[i], MON_DATA_ALT_ABILITY); // unused return value
-
- opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
- for (j = 0; j < 4; j++)
+ // Check if Pokemon has a super effective move.
+ for (opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT), i = 0; i < MAX_MON_MOVES; ++i)
{
- u16 move = GetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j);
+ move = gBattleMons[gActiveBattler].moves[i];
if (move == MOVE_NONE)
continue;
-
moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
- if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && (Random() % 3) < 2)
+ if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
+ return FALSE;
+ }
+ // Find a Pokemon in the party that has a super effective move.
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0)
+ continue;
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE)
+ continue;
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
+ continue;
+ if (i == gBattlerPartyIndexes[gActiveBattler])
+ continue;
+ GetMonData(&gEnemyParty[i], MON_DATA_SPECIES); // Unused return value.
+ GetMonData(&gEnemyParty[i], MON_DATA_ALT_ABILITY); // Unused return value.
+
+ for (opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT), j = 0; j < MAX_MON_MOVES; ++j)
{
- // we found a mon
- ewram160C8arr(GetBattlerPosition(gActiveBattler)) = i; // gBattleStruct->AI_monToSwitchIntoId[GetBattlerPosition(gActiveBattler)] = i;
- BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
- return TRUE;
+ move = GetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j);
+ if (move == MOVE_NONE)
+ continue;
+ moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
+ if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % 3 < 2)
+ {
+ // We found a mon.
+ ewram160C8arr(GetBattlerPosition(gActiveBattler)) = i; // gBattleStruct->AI_monToSwitchIntoId[GetBattlerPosition(gActiveBattler)] = i;
+ BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
}
}
}
-
- return FALSE; // at this point there is not a single pokemon in the party that has a super effective move against a pokemon with wonder guard
-}
-#else
-NAKED
-static bool8 ShouldSwitchIfWonderGuard(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- ldr r0, _0803606C @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080360A0\n\
- b _080361C8\n\
- .align 2, 0\n\
-_0803606C: .4byte gBattleTypeFlags\n\
-_08036070:\n\
- ldr r0, _08036094 @ =gActiveBattler\n\
- ldrb r0, [r0]\n\
- bl GetBattlerPosition\n\
- ldr r1, _08036098 @ =gSharedMem\n\
- lsls r0, 24\n\
- lsrs r0, 25\n\
- ldr r2, _0803609C @ =0x000160c8\n\
- adds r0, r2\n\
- adds r0, r1\n\
- strb r6, [r0]\n\
- movs r0, 0x1\n\
- movs r1, 0x2\n\
- movs r2, 0\n\
- bl BtlController_EmitTwoReturnValues\n\
- movs r0, 0x1\n\
- b _080361CA\n\
- .align 2, 0\n\
-_08036094: .4byte gActiveBattler\n\
-_08036098: .4byte gSharedMem\n\
-_0803609C: .4byte 0x000160c8\n\
-_080360A0:\n\
- ldr r4, _080361D8 @ =gBattleMons\n\
- movs r0, 0\n\
- bl GetBattlerAtPosition\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- movs r1, 0x58\n\
- muls r0, r1\n\
- adds r0, r4\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x19\n\
- beq _080360BC\n\
- b _080361C8\n\
-_080360BC:\n\
- movs r0, 0\n\
- bl GetBattlerAtPosition\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- movs r6, 0\n\
- adds r7, r4, 0\n\
- movs r5, 0x58\n\
- adds r0, r2, 0\n\
- muls r0, r5\n\
- adds r4, r0, r7\n\
- movs r3, 0x20\n\
- adds r3, r4\n\
- mov r8, r3\n\
-_080360D8:\n\
- lsls r1, r6, 1\n\
- ldr r0, _080361DC @ =gActiveBattler\n\
- ldrb r0, [r0]\n\
- muls r0, r5\n\
- adds r1, r0\n\
- adds r0, r7, 0\n\
- adds r0, 0xC\n\
- adds r1, r0\n\
- ldrh r0, [r1]\n\
- cmp r0, 0\n\
- beq _08036104\n\
- ldrh r1, [r4]\n\
- mov r3, r8\n\
- ldrb r2, [r3]\n\
- bl AI_TypeCalc\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- movs r0, 0x2\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _080361C8\n\
-_08036104:\n\
- adds r6, 0x1\n\
- cmp r6, 0x3\n\
- ble _080360D8\n\
- movs r6, 0\n\
- ldr r0, _080361E0 @ =gEnemyParty\n\
- mov r9, r0\n\
-_08036110:\n\
- movs r0, 0x64\n\
- adds r5, r6, 0\n\
- muls r5, r0\n\
- mov r2, r9\n\
- adds r4, r5, r2\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _080361C2\n\
- adds r0, r4, 0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _080361C2\n\
- adds r0, r4, 0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- movs r1, 0xCE\n\
- lsls r1, 1\n\
- cmp r0, r1\n\
- beq _080361C2\n\
- ldr r1, _080361E4 @ =gBattlerPartyIndexes\n\
- ldr r0, _080361DC @ =gActiveBattler\n\
- ldrb r0, [r0]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r0, [r0]\n\
- cmp r6, r0\n\
- beq _080361C2\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- adds r0, r4, 0\n\
- movs r1, 0x2E\n\
- bl GetMonData\n\
- movs r0, 0\n\
- bl GetBattlerAtPosition\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- movs r4, 0\n\
- mov r8, r5\n\
- ldr r1, _080361D8 @ =gBattleMons\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r5, r0, r1\n\
- adds r7, r5, 0\n\
- adds r7, 0x20\n\
-_0803617C:\n\
- adds r1, r4, 0\n\
- adds r1, 0xD\n\
- mov r0, r8\n\
- add r0, r9\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0\n\
- beq _080361BC\n\
- ldrh r1, [r5]\n\
- ldrb r2, [r7]\n\
- bl AI_TypeCalc\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- movs r0, 0x2\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _080361BC\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bhi _080361BC\n\
- b _08036070\n\
-_080361BC:\n\
- adds r4, 0x1\n\
- cmp r4, 0x3\n\
- ble _0803617C\n\
-_080361C2:\n\
- adds r6, 0x1\n\
- cmp r6, 0x5\n\
- ble _08036110\n\
-_080361C8:\n\
- movs r0, 0\n\
-_080361CA:\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_080361D8: .4byte gBattleMons\n\
-_080361DC: .4byte gActiveBattler\n\
-_080361E0: .4byte gEnemyParty\n\
-_080361E4: .4byte gBattlerPartyIndexes\n\
- .syntax divided\n");
+ return FALSE; // There is not a single Pokemon in the party that has a super effective move against a mon with Wonder Guard.
}
-#endif // NONMATCHING
static bool8 FindMonThatAbsorbsOpponentsMove(void)
{
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 3be28dd77..ae4342847 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -1479,7 +1479,7 @@ void LaunchBattleAnimation(const u8 *const moveAnims[], u16 move, u8 isMoveAnim)
UpdateOamPriorityInAllHealthboxes(0);
for (i = 0; i < 4; i++)
{
- if (GetBattlerSide(i) != 0)
+ if (GetBattlerSide(i) != B_SIDE_PLAYER)
gAnimSpeciesByBanks[i] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES);
else
gAnimSpeciesByBanks[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES);
@@ -1793,7 +1793,7 @@ static void ScriptCmd_end(void)
if (!continuousAnim) // may have been used for debug?
{
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
- if (IsContest() == 0)
+ if (!IsContest())
{
UpdateBattlerSpritePriorities();
UpdateOamPriorityInAllHealthboxes(1);
@@ -1838,7 +1838,7 @@ static void ScriptCmd_monbg(void)
{
identity = GetBattlerPosition(bank);
identity += 0xFF;
- if (identity <= 1 || IsContest() != 0)
+ if (identity <= 1 || IsContest())
toBG_2 = 0;
else
toBG_2 = 1;
@@ -1870,7 +1870,7 @@ static void ScriptCmd_monbg(void)
{
identity = GetBattlerPosition(bank);
identity += 0xFF;
- if (identity <= 1 || IsContest() != 0)
+ if (identity <= 1 || IsContest())
toBG_2 = 0;
else
toBG_2 = 1;
@@ -1940,7 +1940,7 @@ void MoveBattlerSpriteToBG(u8 bank, u8 toBG_2)
spriteId = gBattlerSpriteIds[bank];
gBattle_BG1_X = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32;
- if (IsContest() != 0 && IsSpeciesNotUnown(EWRAM_19348[0]) != 0)
+ if (IsContest() && IsSpeciesNotUnown(EWRAM_19348[0]) != 0)
gBattle_BG1_X--;
gBattle_BG1_Y = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32;
gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
@@ -1951,12 +1951,12 @@ void MoveBattlerSpriteToBG(u8 bank, u8 toBG_2)
LoadPalette(gPlttBufferUnfaded + 0x100 + bank * 16, s.unk8 * 16, 32);
DmaCopy32Defvars(3, gPlttBufferUnfaded + 0x100 + bank * 16, (u16 *)PLTT + s.unk8 * 16, 32);
- if (IsContest() != 0)
+ if (IsContest())
r2 = 0;
else
r2 = GetBattlerPosition(bank);
sub_80E4EF8(0, 0, r2, s.unk8, (u32)s.unk0, (((s32)s.unk4 - VRAM) / 2048), REG_BG1CNT_BITFIELD.charBaseBlock);
- if (IsContest() != 0)
+ if (IsContest())
sub_8076380();
}
else
@@ -2040,7 +2040,7 @@ void sub_8076464(u8 a)
struct UnknownStruct2 s;
sub_8078914(&s);
- if (a == 0 || IsContest() != 0)
+ if (a == 0 || IsContest())
{
DmaFill32Large(3, 0, s.unk0, 0x2000, 0x1000);
pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in?
@@ -2128,7 +2128,7 @@ static void sub_807672C(u8 taskId)
{
identity = GetBattlerPosition(gTasks[taskId].data[2]);
identity += 0xFF;
- if (identity <= 1 || IsContest() != 0)
+ if (identity <= 1 || IsContest())
to_BG2 = 0;
else
to_BG2 = 1;
@@ -2172,7 +2172,7 @@ static void ScriptCmd_monbg_22(void)
{
identity = GetBattlerPosition(bank);
identity += 0xFF;
- if (identity <= 1 || IsContest() != 0)
+ if (identity <= 1 || IsContest())
r1 = 0;
else
r1 = 1;
@@ -2185,7 +2185,7 @@ static void ScriptCmd_monbg_22(void)
{
identity = GetBattlerPosition(bank);
identity += 0xFF;
- if (identity <= 1 || IsContest() != 0)
+ if (identity <= 1 || IsContest())
r1 = 0;
else
r1 = 1;
@@ -2240,7 +2240,7 @@ static void sub_80769A4(u8 taskId)
bank = gTasks[taskId].data[2];
identity = GetBattlerPosition(bank);
identity += 0xFF;
- if (identity <= 1 || IsContest() != 0)
+ if (identity <= 1 || IsContest())
toBG_2 = 0;
else
toBG_2 = 1;
@@ -2400,7 +2400,7 @@ static void ScriptCmd_fadetobgfromset(void)
if (IsContest())
gTasks[taskId].tBackgroundId = bg3;
- else if (GetBattlerSide(gBattleAnimTarget) == 0)
+ else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
gTasks[taskId].tBackgroundId = bg2;
else
gTasks[taskId].tBackgroundId = bg1;
@@ -2524,188 +2524,60 @@ static void ScriptCmd_changebg(void)
sBattleAnimScriptPtr++;
}
-//Weird control flow
-/*
-s8 BattleAnimAdjustPanning(s8 a)
+s8 BattleAnimAdjustPanning(s8 pan)
{
if (!IsContest() && (EWRAM_17810[gBattleAnimAttacker].unk0 & 0x10))
{
- a = GetBattlerSide(gBattleAnimAttacker) ? SOUND_PAN_ATTACKER : SOUND_PAN_TARGET;
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ pan = SOUND_PAN_TARGET;
+ else
+ pan = SOUND_PAN_ATTACKER_NEG;
}
- //_08076FDC
- else
+ else if (IsContest())
{
- if (IsContest())
- {
- if (gBattleAnimAttacker == gBattleAnimTarget && gBattleAnimAttacker == 2
- && a == SOUND_PAN_TARGET)
- {
- //jump to _0807707A
- if (a < SOUND_PAN_ATTACKER_NEG)
- a = SOUND_PAN_ATTACKER;
- return a;
- }
- }
- //_08077004
- else
+ if (gBattleAnimAttacker != gBattleAnimTarget || gBattleAnimAttacker != 2 || pan != SOUND_PAN_TARGET)
+ pan *= -1;
+ }
+ else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
{
- if (GetBattlerSide(gBattleAnimAttacker) == 0)
- {
- if (GetBattlerSide(gBattleAnimTarget) == 0)
- }
- //_08077042
- else
- {
-
- }
- //_0807706C
+ if (pan == SOUND_PAN_TARGET)
+ pan = SOUND_PAN_ATTACKER_NEG;
+ else if (pan != SOUND_PAN_ATTACKER_NEG)
+ pan *= -1;
}
}
- //_0807706E
-}
-*/
-NAKED
-s8 BattleAnimAdjustPanning(s8 a)
-{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- bl IsContest\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _08076FDC\n\
- ldr r0, _08076FD4 @ =gBattleAnimAttacker\n\
- ldrb r2, [r0]\n\
- lsls r0, r2, 1\n\
- adds r0, r2\n\
- lsls r0, 2\n\
- ldr r1, _08076FD8 @ =gSharedMem + 0x17810\n\
- adds r0, r1\n\
- ldrb r1, [r0]\n\
- movs r0, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08076FDC\n\
- adds r0, r2, 0\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- movs r4, 0xC0\n\
- cmp r0, 0\n\
- beq _0807706E\n\
- movs r4, 0x3F\n\
- b _0807706E\n\
- .align 2, 0\n\
-_08076FD4: .4byte gBattleAnimAttacker\n\
-_08076FD8: .4byte gSharedMem + 0x17810\n\
-_08076FDC:\n\
- bl IsContest\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _08077004\n\
- ldr r0, _08076FFC @ =gBattleAnimAttacker\n\
- ldr r1, _08077000 @ =gBattleAnimTarget\n\
- ldrb r0, [r0]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- bne _08077068\n\
- cmp r0, 0x2\n\
- bne _08077068\n\
- cmp r4, 0x3F\n\
- beq _0807707A\n\
- b _08077068\n\
- .align 2, 0\n\
-_08076FFC: .4byte gBattleAnimAttacker\n\
-_08077000: .4byte gBattleAnimTarget\n\
-_08077004:\n\
- ldr r0, _0807702C @ =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _08077042\n\
- ldr r0, _08077030 @ =gBattleAnimTarget\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0807706E\n\
- lsls r0, r4, 24\n\
- asrs r1, r0, 24\n\
- cmp r1, 0x3F\n\
- bne _08077034\n\
- movs r4, 0xC0\n\
- b _0807706E\n\
- .align 2, 0\n\
-_0807702C: .4byte gBattleAnimAttacker\n\
-_08077030: .4byte gBattleAnimTarget\n\
-_08077034:\n\
- movs r0, 0x40\n\
- negs r0, r0\n\
- cmp r1, r0\n\
- beq _0807706E\n\
- negs r0, r1\n\
- lsls r0, 24\n\
- b _0807706C\n\
-_08077042:\n\
- ldr r0, _08077064 @ =gBattleAnimTarget\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _08077068\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- movs r1, 0x40\n\
- negs r1, r1\n\
- cmp r0, r1\n\
- bne _0807706E\n\
- movs r4, 0x3F\n\
- b _0807706E\n\
- .align 2, 0\n\
-_08077064: .4byte gBattleAnimTarget\n\
-_08077068:\n\
- lsls r0, r4, 24\n\
- negs r0, r0\n\
-_0807706C:\n\
- lsrs r4, r0, 24\n\
-_0807706E:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x3F\n\
- ble _0807707A\n\
- movs r4, 0x3F\n\
- b _08077088\n\
-_0807707A:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- movs r1, 0x40\n\
- negs r1, r1\n\
- cmp r0, r1\n\
- bge _08077088\n\
- movs r4, 0xC0\n\
-_08077088:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- pop {r4}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
+ else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
+ {
+ if (pan == SOUND_PAN_ATTACKER_NEG)
+ pan = SOUND_PAN_TARGET;
+ }
+ else
+ {
+ pan *= -1;
+ }
+
+ if (pan > SOUND_PAN_TARGET)
+ pan = SOUND_PAN_TARGET;
+ else if (pan < SOUND_PAN_ATTACKER_NEG)
+ pan = SOUND_PAN_ATTACKER_NEG;
+
+ return pan;
}
s8 BattleAnimAdjustPanning2(s8 pan)
{
if (!IsContest() && (EWRAM_17810[gBattleAnimAttacker].unk0 & 0x10))
{
- if (GetBattlerSide(gBattleAnimAttacker) != 0)
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
pan = SOUND_PAN_TARGET;
else
pan = SOUND_PAN_ATTACKER;
}
else
{
- if (GetBattlerSide(gBattleAnimAttacker) != 0 || IsContest() != 0)
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER || IsContest())
pan = -pan;
}
return pan;
diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c
index 86dde8d30..3c2a60077 100755
--- a/src/battle_anim_special.c
+++ b/src/battle_anim_special.c
@@ -1272,18 +1272,14 @@ static void sub_81407B8(struct Sprite *sprite)
sprite->callback = sub_81407F4;
}
-#ifdef NONMATCHING
-// there is some weird typing going on with var0 and var1.
static void sub_81407F4(struct Sprite *sprite)
{
- s16 var0, var1;
-
- var0 = sprite->data[0] + 0x800;
- var1 = sprite->data[1] + 0x680;
+ s16 var0 = sprite->data[0] + 0x800;
+ s16 var1 = sprite->data[1] + 0x680;
sprite->pos2.x -= var1 >> 8;
sprite->pos2.y += var0 >> 8;
- sprite->data[0] = var0 & 0xFF;
- sprite->data[1] = var1 & 0xFF;
+ sprite->data[0] = (sprite->data[0] + 0x800) & 0xFF;
+ sprite->data[1] = (sprite->data[1] + 0x680) & 0xFF;
if (sprite->pos1.y + sprite->pos2.y > 160
|| sprite->pos1.x + sprite->pos2.x < -8)
@@ -1294,74 +1290,6 @@ static void sub_81407F4(struct Sprite *sprite)
UpdateOamPriorityInAllHealthboxes(1);
}
}
-#else
-NAKED
-static void sub_81407F4(struct Sprite *sprite)
-{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- adds r4, r0, 0\n\
- movs r0, 0x80\n\
- lsls r0, 4\n\
- adds r2, r0, 0\n\
- ldrh r1, [r4, 0x2E]\n\
- adds r2, r1\n\
- movs r0, 0xD0\n\
- lsls r0, 3\n\
- adds r3, r0, 0\n\
- ldrh r1, [r4, 0x30]\n\
- adds r3, r1\n\
- lsls r1, r3, 16\n\
- asrs r1, 24\n\
- ldrh r0, [r4, 0x24]\n\
- subs r0, r1\n\
- strh r0, [r4, 0x24]\n\
- lsls r0, r2, 16\n\
- asrs r0, 24\n\
- ldrh r1, [r4, 0x26]\n\
- adds r0, r1\n\
- strh r0, [r4, 0x26]\n\
- movs r0, 0xFF\n\
- ands r2, r0\n\
- strh r2, [r4, 0x2E]\n\
- ands r3, r0\n\
- strh r3, [r4, 0x30]\n\
- movs r2, 0x22\n\
- ldrsh r0, [r4, r2]\n\
- movs r2, 0x26\n\
- ldrsh r1, [r4, r2]\n\
- adds r0, r1\n\
- cmp r0, 0xA0\n\
- bgt _0814084A\n\
- movs r1, 0x20\n\
- ldrsh r0, [r4, r1]\n\
- movs r2, 0x24\n\
- ldrsh r1, [r4, r2]\n\
- adds r0, r1\n\
- movs r1, 0x8\n\
- negs r1, r1\n\
- cmp r0, r1\n\
- bge _0814085E\n\
-_0814084A:\n\
- movs r0, 0\n\
- strh r0, [r4, 0x2E]\n\
- ldr r0, _08140864 @ =sub_81405C8\n\
- str r0, [r4, 0x1C]\n\
- ldr r1, _08140868 @ =gDoingBattleAnim\n\
- movs r0, 0\n\
- strb r0, [r1]\n\
- movs r0, 0x1\n\
- bl UpdateOamPriorityInAllHealthboxes\n\
-_0814085E:\n\
- pop {r4}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08140864: .4byte sub_81405C8\n\
-_08140868: .4byte gDoingBattleAnim\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballIndex)
{
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 9a48f4e16..cf816f392 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -1387,7 +1387,6 @@ void sub_802DA9C(u8 taskId)
gTasks[taskId].func = sub_802DB6C;
}
-#ifdef NONMATCHING
void sub_802DB6C(u8 taskId)
{
if (gTasks[taskId].data[10] < 13)
@@ -1396,209 +1395,49 @@ void sub_802DB6C(u8 taskId)
}
else
{
- u8 r9 = gTasks[taskId].data[0];
- s32 r10 = gTasks[taskId].data[1]; //s16?
- u8 r7 = gTasks[taskId].data[2];
- s16 r4;
+ u8 monId = gTasks[taskId].data[0];
+ s16 gainedExp = gTasks[taskId].data[1];
+ u8 battlerId = gTasks[taskId].data[2];
+ s16 newExpPoints;
- r4 = sub_8045C78(r7, gHealthboxSpriteIds[r7], 1, 0);
- sub_8043DFC(gHealthboxSpriteIds[r7]);
- if (r4 == -1)
+ newExpPoints = sub_8045C78(battlerId, gHealthboxSpriteIds[battlerId], 1, 0);
+ sub_8043DFC(gHealthboxSpriteIds[battlerId]);
+ if (newExpPoints == -1)
{
- struct Pokemon *pkmn;
- u8 r4;
- u32 sp4;
- u16 r0;
- u32 sp0;
+ u8 level;
+ s32 currExp;
+ u16 species;
+ s32 expOnNextLvl;
m4aSongNumStop(SE_EXP);
- pkmn = &gPlayerParty[r9];
- r4 = GetMonData(pkmn, MON_DATA_LEVEL);
- sp4 = GetMonData(pkmn, MON_DATA_EXP);
- r0 = GetMonData(pkmn, MON_DATA_SPECIES);
- sp0 = gExperienceTables[gBaseStats[r0].growthRate][r4 + 1];
- if (sp4 + r10 >= sp0)
+ level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP);
+ species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
+ expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+
+ if (currExp + gainedExp >= expOnNextLvl)
{
- u8 r5;
- u32 asdf;
-
- SetMonData(pkmn, MON_DATA_EXP, &sp0);
- CalculateMonStats(pkmn);
- //r10 -= sp0 - sp4;
- asdf = sp0 - sp4;
- //asdf = r10 - (sp0 - sp4);
- r10 -= asdf;
- r5 = gActiveBattler;
- gActiveBattler = r7;
- BtlController_EmitTwoReturnValues(1, 11, r10);
- gActiveBattler = r5;
+ u8 savedActiveBattler;
+
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl);
+ CalculateMonStats(&gPlayerParty[monId]);
+ gainedExp -= expOnNextLvl - currExp;
+ savedActiveBattler = gActiveBattler;
+ gActiveBattler = battlerId;
+ BtlController_EmitTwoReturnValues(1, 11, gainedExp);
+ gActiveBattler = savedActiveBattler;
gTasks[taskId].func = sub_802DCB0;
}
else
{
- //u32 asdf = sp4 + r10;
- sp4 += r10;
- SetMonData(pkmn, MON_DATA_EXP, &sp4);
- gBattlerControllerFuncs[r7] = sub_802D90C;
+ currExp += gainedExp;
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp);
+ gBattlerControllerFuncs[battlerId] = sub_802D90C;
DestroyTask(taskId);
}
}
}
}
-#else
-NAKED
-void sub_802DB6C(u8 taskId)
-{
- 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, 0x8\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- ldr r1, _0802DB98 @ =gTasks\n\
- lsls r0, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r6, r0, r1\n\
- ldrh r1, [r6, 0x1C]\n\
- movs r2, 0x1C\n\
- ldrsh r0, [r6, r2]\n\
- cmp r0, 0xC\n\
- bgt _0802DB9C\n\
- adds r0, r1, 0x1\n\
- strh r0, [r6, 0x1C]\n\
- b _0802DC98\n\
- .align 2, 0\n\
-_0802DB98: .4byte gTasks\n\
-_0802DB9C:\n\
- ldrb r0, [r6, 0x8]\n\
- mov r9, r0\n\
- ldrh r2, [r6, 0xA]\n\
- mov r10, r2\n\
- ldrb r7, [r6, 0xC]\n\
- ldr r5, _0802DC64 @ =gHealthboxSpriteIds\n\
- adds r5, r7, r5\n\
- ldrb r1, [r5]\n\
- adds r0, r7, 0\n\
- movs r2, 0x1\n\
- movs r3, 0\n\
- bl sub_8045C78\n\
- adds r4, r0, 0\n\
- lsls r4, 16\n\
- lsrs r4, 16\n\
- ldrb r0, [r5]\n\
- bl sub_8043DFC\n\
- lsls r4, 16\n\
- asrs r4, 16\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- cmp r4, r0\n\
- bne _0802DC98\n\
- movs r0, 0x21\n\
- bl m4aSongNumStop\n\
- movs r0, 0x64\n\
- mov r1, r9\n\
- muls r1, r0\n\
- ldr r0, _0802DC68 @ =gPlayerParty\n\
- adds r5, r1, r0\n\
- adds r0, r5, 0\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- adds r4, r0, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- adds r0, r5, 0\n\
- movs r1, 0x19\n\
- bl GetMonData\n\
- str r0, [sp, 0x4]\n\
- adds r0, r5, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- ldr r3, _0802DC6C @ =gExperienceTables\n\
- adds r4, 0x1\n\
- lsls r4, 2\n\
- ldr r2, _0802DC70 @ =gBaseStats\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 2\n\
- adds r1, r2\n\
- ldrb r1, [r1, 0x13]\n\
- movs r0, 0xCA\n\
- lsls r0, 1\n\
- muls r0, r1\n\
- adds r4, r0\n\
- adds r4, r3\n\
- ldr r1, [r4]\n\
- str r1, [sp]\n\
- mov r2, r10\n\
- lsls r0, r2, 16\n\
- asrs r4, r0, 16\n\
- ldr r0, [sp, 0x4]\n\
- adds r0, r4\n\
- cmp r0, r1\n\
- blt _0802DC7C\n\
- adds r0, r5, 0\n\
- movs r1, 0x19\n\
- mov r2, sp\n\
- bl SetMonData\n\
- adds r0, r5, 0\n\
- bl CalculateMonStats\n\
- ldr r2, [sp]\n\
- add r0, sp, 0x4\n\
- ldrh r0, [r0]\n\
- subs r2, r0\n\
- subs r2, r4, r2\n\
- ldr r4, _0802DC74 @ =gActiveBattler\n\
- ldrb r5, [r4]\n\
- strb r7, [r4]\n\
- lsls r2, 16\n\
- lsrs r2, 16\n\
- movs r0, 0x1\n\
- movs r1, 0xB\n\
- bl BtlController_EmitTwoReturnValues\n\
- strb r5, [r4]\n\
- ldr r0, _0802DC78 @ =sub_802DCB0\n\
- str r0, [r6]\n\
- b _0802DC98\n\
- .align 2, 0\n\
-_0802DC64: .4byte gHealthboxSpriteIds\n\
-_0802DC68: .4byte gPlayerParty\n\
-_0802DC6C: .4byte gExperienceTables\n\
-_0802DC70: .4byte gBaseStats\n\
-_0802DC74: .4byte gActiveBattler\n\
-_0802DC78: .4byte sub_802DCB0\n\
-_0802DC7C:\n\
- str r0, [sp, 0x4]\n\
- add r2, sp, 0x4\n\
- adds r0, r5, 0\n\
- movs r1, 0x19\n\
- bl SetMonData\n\
- ldr r1, _0802DCA8 @ =gBattlerControllerFuncs\n\
- lsls r0, r7, 2\n\
- adds r0, r1\n\
- ldr r1, _0802DCAC @ =sub_802D90C\n\
- str r1, [r0]\n\
- mov r0, r8\n\
- bl DestroyTask\n\
-_0802DC98:\n\
- add sp, 0x8\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\
- .align 2, 0\n\
-_0802DCA8: .4byte gBattlerControllerFuncs\n\
-_0802DCAC: .4byte sub_802D90C\n");
-}
-#endif
void sub_802DCB0(u8 taskId)
{
diff --git a/src/battle_main.c b/src/battle_main.c
index 66140133c..061d1f102 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -1382,7 +1382,7 @@ void debug_sub_8011EA0(u8);
void debug_sub_8012294(void);
void debug_sub_80123D8(u8);
void debug_sub_8012540(void);
-void debug_nullsub_3(void);
+void debug_ShowCurrentAnimAudioOptions(void);
void debug_sub_80125A0(void);
void debug_sub_80125E4(void);
void debug_sub_8012628(void);
@@ -1482,7 +1482,7 @@ void debug_sub_80108B8(void)
debug_sub_8012294();
debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
debug_sub_8012540();
- debug_nullsub_3();
+ debug_ShowCurrentAnimAudioOptions();
gUnknown_Debug_030043A8 = 0;
debug_sub_80125A0();
if (gUnknown_Debug_2023A76[0][0x22] == 8)
@@ -1616,7 +1616,7 @@ void debug_sub_8010CAC(void)
gSaveBlock2.optionsBattleSceneOff = (r5 & 1);
gSaveBlock2.optionsSound = (r5 & 2) >> 1;
SetPokemonCryStereo(gSaveBlock2.optionsSound);
- debug_nullsub_3();
+ debug_ShowCurrentAnimAudioOptions();
}
}
if (gMain.newKeysRaw == START_BUTTON)
@@ -1694,7 +1694,7 @@ void debug_sub_8010CAC(void)
debug_sub_8011E5C();
debug_sub_8011E74();
debug_sub_8012540();
- debug_nullsub_3();
+ debug_ShowCurrentAnimAudioOptions();
debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
break;
case 32:
@@ -1702,7 +1702,7 @@ void debug_sub_8010CAC(void)
debug_sub_8011E5C();
debug_sub_8011E74();
debug_sub_8012540();
- debug_nullsub_3();
+ debug_ShowCurrentAnimAudioOptions();
debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
break;
case 33:
@@ -1755,7 +1755,7 @@ void debug_sub_8010CAC(void)
debug_sub_8011E5C();
debug_sub_8011E74();
debug_sub_8012540();
- debug_nullsub_3();
+ debug_ShowCurrentAnimAudioOptions();
debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
break;
case 32:
@@ -1763,7 +1763,7 @@ void debug_sub_8010CAC(void)
debug_sub_8011E5C();
debug_sub_8011E74();
debug_sub_8012540();
- debug_nullsub_3();
+ debug_ShowCurrentAnimAudioOptions();
debug_sub_80123D8(gUnknown_Debug_030043A4 * 5);
break;
case 33:
@@ -2218,7 +2218,12 @@ void debug_sub_8011EA0(u8 a)
case 15:
case 20:
case 25:
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ debug_sub_8010A7C(0, 8);
+#else
debug_sub_8010A7C(0, 20);
+#endif
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2227,6 +2232,8 @@ void debug_sub_8011EA0(u8 a)
gUnknown_Debug_821F424[a][2]);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
ConvertIntToDecimalStringN(gBattleTextBuff1, gUnknown_Debug_2023A76[gUnknown_Debug_03004360][a], 2, 3);
+// TODO: check other revisions
+#if !(ENGLISH && REVISION == 0)
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2235,6 +2242,7 @@ void debug_sub_8011EA0(u8 a)
0);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
gBattleTextBuff1[0] = EOS;
+#endif
StringAppend(gBattleTextBuff1, gSpeciesNames[gUnknown_Debug_2023A76[gUnknown_Debug_03004360][a]]);
Text_InitWindow(
&gUnknown_Debug_03004370,
@@ -2266,7 +2274,12 @@ void debug_sub_8011EA0(u8 a)
case 17:
case 22:
case 27:
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ debug_sub_8010A7C(0, 11);
+#else
debug_sub_8010A7C(0, 24);
+#endif
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2275,6 +2288,8 @@ void debug_sub_8011EA0(u8 a)
gUnknown_Debug_821F424[a][2]);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
ConvertIntToDecimalStringN(gBattleTextBuff1, gUnknown_Debug_2023A76[gUnknown_Debug_03004360][a], 2, 3);
+// TODO: check other revisions
+#if !(ENGLISH && REVISION == 0)
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2283,6 +2298,7 @@ void debug_sub_8011EA0(u8 a)
0);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
gBattleTextBuff1[0] = EOS;
+#endif
if (gUnknown_Debug_2023A76[gUnknown_Debug_03004360][a] != 0)
StringAppend(gBattleTextBuff1, ItemId_GetName(gUnknown_Debug_2023A76[gUnknown_Debug_03004360][a]));
else
@@ -2301,7 +2317,12 @@ void debug_sub_8011EA0(u8 a)
case 19:
case 24:
case 29:
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ debug_sub_8010A7C(0, 2);
+#else
debug_sub_8010A7C(0, 4);
+#endif
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2374,7 +2395,12 @@ void debug_sub_8012294(void)
if (r5 < 30)
{
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ debug_sub_8010A7C(0, 10);
+#else
debug_sub_8010A7C(0, 24);
+#endif
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2383,6 +2409,8 @@ void debug_sub_8012294(void)
gUnknown_Debug_821F564[gUnknown_Debug_030043A8][2]);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
ConvertIntToDecimalStringN(gBattleTextBuff1, gUnknown_Debug_2023B02[gUnknown_Debug_03004360][r5 / 5][gUnknown_Debug_030043A8], 2, 3);
+// TODO: check other revisions
+#if !(ENGLISH && REVISION == 0)
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2391,6 +2419,7 @@ void debug_sub_8012294(void)
0);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
gBattleTextBuff1[0] = EOS;
+#endif
StringAppend(gBattleTextBuff1, gMoveNames[gUnknown_Debug_2023B02[gUnknown_Debug_03004360][r5 / 5][gUnknown_Debug_030043A8]]);
Text_InitWindow(
&gUnknown_Debug_03004370,
@@ -2408,7 +2437,12 @@ void debug_sub_80123D8(u8 a)
{
if (a < 30)
{
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ debug_sub_8010A7C(0, 7);
+#else
debug_sub_8010A7C(0, 18);
+#endif
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2424,7 +2458,12 @@ void debug_sub_80123D8(u8 a)
gUnknown_Debug_821F58C[1],
gUnknown_Debug_821F58C[2]);
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ debug_sub_8010A7C(0, 7);
+#else
debug_sub_8010A7C(0, 18);
+#endif
Text_InitWindow(
&gUnknown_Debug_03004370,
gBattleTextBuff1,
@@ -2473,8 +2512,50 @@ void debug_sub_8012540(void)
Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
}
-void debug_nullsub_3(void)
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+extern const u8 Str_821F64D[];
+extern const u8 Str_821F652[];
+extern const u8 Str_821F655[];
+extern const u8 Str_821F65A[];
+#endif
+
+void debug_ShowCurrentAnimAudioOptions(void)
{
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ if (gSaveBlock2.optionsBattleSceneOff)
+ Text_InitWindow(
+ &gUnknown_Debug_03004370,
+ Str_821F652,
+ 418,
+ gUnknown_Debug_03004360 * 32 + 21,
+ 0);
+ else
+ Text_InitWindow(
+ &gUnknown_Debug_03004370,
+ Str_821F64D,
+ 418,
+ gUnknown_Debug_03004360 * 32 + 21,
+ 0);
+ Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
+
+ if (gSaveBlock2.optionsSound)
+ Text_InitWindow(
+ &gUnknown_Debug_03004370,
+ Str_821F65A,
+ 422,
+ gUnknown_Debug_03004360 * 32 + 24,
+ 0);
+ else
+ Text_InitWindow(
+ &gUnknown_Debug_03004370,
+ Str_821F655,
+ 422,
+ gUnknown_Debug_03004360 * 32 + 24,
+ 0);
+ Text_PrintWindow8002F44(&gUnknown_Debug_03004370);
+#endif
}
extern const u32 gUnknown_Debug_821F680[][0x23];
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 32887efc1..db2e1af12 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -5342,7 +5342,7 @@ static void atk23_getexp(void)
u16 calculatedExp;
s32 viaSentIn;
- for (viaSentIn = 0, i = 0; i < 6; i++)
+ for (viaSentIn = 0, i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
continue;
@@ -5572,288 +5572,68 @@ static void atk23_getexp(void)
}
}
-#ifdef NONMATCHING
static void atk24(void)
{
u16 HP_count = 0;
- int i;
- if (gBattleControllerExecFlags) {return;}
-
- for (i = 0; i < 6; i++)
- {
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
- HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP);
- }
-
- if (HP_count == 0)
- gBattleOutcome |= B_OUTCOME_LOST;
-
- for (HP_count = 0, i = 0; i < 6; i++)
- {
- if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG))
- HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP);
- }
-
- if (!HP_count)
- gBattleOutcome |= B_OUTCOME_WON;
+ s32 i;
+ s32 found1;
+ s32 found2;
- if (!gBattleOutcome && (gBattleTypeFlags & BATTLE_TYPE_LINK))
+ if (gBattleControllerExecFlags == 0)
{
- register int found1 asm("r2");
- register int found2 asm("r4");
-
- //I can't for the love of god decompile that part
-
- for (found1 = 0, i = 0; i < gBattlersCount; i += 2)
+ for (i = 0; i < PARTY_SIZE; i++)
{
- if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40)
- found1++;
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP);
}
- for (found2 = 0, i = 1; i < gBattlersCount; i += 2)
+ if (HP_count == 0)
+ gBattleOutcome |= B_OUTCOME_LOST;
+
+ for (HP_count = 0, i = 0; i < PARTY_SIZE; i++)
{
- if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40)
- found2++;
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG))
+ HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP);
}
- if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ if (HP_count == 0)
+ gBattleOutcome |= B_OUTCOME_WON;
+
+ if (!gBattleOutcome && (gBattleTypeFlags & BATTLE_TYPE_LINK))
{
- if (found2 + found1 > 1)
- gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ for (found1 = 0, i = 0; i < gBattlersCount; i += 2)
+ {
+ if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40)
+ found1++;
+ }
+
+ for (found2 = 0, i = 1; i < gBattlersCount; i += 2)
+ {
+ if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40)
+ found2++;
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (found2 + found1 > 1)
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+ }
else
- gBattlescriptCurrInstr += 5;
+ {
+ if (found2 != 0 && found1 != 0)
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+ }
}
else
{
- if (found2 != 0 && found1 != 0)
- gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
- else
- gBattlescriptCurrInstr += 5;
+ gBattlescriptCurrInstr += 5;
}
}
- else
- gBattlescriptCurrInstr += 5;
-
}
-#else
-NAKED
-static void atk24(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- movs r6, 0\n\
- ldr r0, _08020AF0 @ =gBattleControllerExecFlags\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- beq _080209C6\n\
- b _08020B46\n\
-_080209C6:\n\
- movs r5, 0\n\
-_080209C8:\n\
- movs r0, 0x64\n\
- adds r1, r5, 0\n\
- muls r1, r0\n\
- ldr r0, _08020AF4 @ =gPlayerParty\n\
- adds r4, r1, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _080209F8\n\
- adds r0, r4, 0\n\
- movs r1, 0x2D\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _080209F8\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- adds r0, r6, r0\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
-_080209F8:\n\
- adds r5, 0x1\n\
- cmp r5, 0x5\n\
- ble _080209C8\n\
- cmp r6, 0\n\
- bne _08020A0C\n\
- ldr r0, _08020AF8 @ =gBattleOutcome\n\
- ldrb r1, [r0]\n\
- movs r2, 0x2\n\
- orrs r1, r2\n\
- strb r1, [r0]\n\
-_08020A0C:\n\
- movs r6, 0\n\
- movs r5, 0\n\
-_08020A10:\n\
- movs r0, 0x64\n\
- adds r1, r5, 0\n\
- muls r1, r0\n\
- ldr r0, _08020AFC @ =gEnemyParty\n\
- adds r4, r1, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08020A40\n\
- adds r0, r4, 0\n\
- movs r1, 0x2D\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _08020A40\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- adds r0, r6, r0\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
-_08020A40:\n\
- adds r5, 0x1\n\
- cmp r5, 0x5\n\
- ble _08020A10\n\
- ldr r2, _08020AF8 @ =gBattleOutcome\n\
- cmp r6, 0\n\
- bne _08020A54\n\
- ldrb r0, [r2]\n\
- movs r1, 0x1\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
-_08020A54:\n\
- ldrb r0, [r2]\n\
- cmp r0, 0\n\
- bne _08020B3E\n\
- ldr r2, _08020B00 @ =gBattleTypeFlags\n\
- ldrh r1, [r2]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- mov r8, r2\n\
- cmp r0, 0\n\
- beq _08020B3E\n\
- movs r2, 0\n\
- movs r5, 0\n\
- ldr r0, _08020B04 @ =gBattlersCount\n\
- ldrb r3, [r0]\n\
- mov r12, r0\n\
- ldr r7, _08020B08 @ =gBattlescriptCurrInstr\n\
- cmp r2, r3\n\
- bge _08020AA0\n\
- ldr r0, _08020B0C @ =gHitMarker\n\
- movs r1, 0x80\n\
- lsls r1, 21\n\
- ldr r6, [r0]\n\
- adds r4, r3, 0\n\
- ldr r3, _08020B10 @ =gSpecialStatuses\n\
-_08020A84:\n\
- adds r0, r1, 0\n\
- lsls r0, r5\n\
- ands r0, r6\n\
- cmp r0, 0\n\
- beq _08020A98\n\
- ldrb r0, [r3]\n\
- lsls r0, 25\n\
- cmp r0, 0\n\
- blt _08020A98\n\
- adds r2, 0x1\n\
-_08020A98:\n\
- adds r3, 0x28\n\
- adds r5, 0x2\n\
- cmp r5, r4\n\
- blt _08020A84\n\
-_08020AA0:\n\
- movs r4, 0\n\
- movs r5, 0x1\n\
- mov r0, r12\n\
- ldrb r3, [r0]\n\
- cmp r5, r3\n\
- bge _08020ADA\n\
- ldr r0, _08020B0C @ =gHitMarker\n\
- movs r1, 0x80\n\
- lsls r1, 21\n\
- mov r12, r1\n\
- ldr r1, [r0]\n\
- ldr r0, _08020B10 @ =gSpecialStatuses\n\
- adds r6, r3, 0\n\
- adds r3, r0, 0\n\
- adds r3, 0x14\n\
-_08020ABE:\n\
- mov r0, r12\n\
- lsls r0, r5\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08020AD2\n\
- ldrb r0, [r3]\n\
- lsls r0, 25\n\
- cmp r0, 0\n\
- blt _08020AD2\n\
- adds r4, 0x1\n\
-_08020AD2:\n\
- adds r3, 0x28\n\
- adds r5, 0x2\n\
- cmp r5, r6\n\
- blt _08020ABE\n\
-_08020ADA:\n\
- mov r0, r8\n\
- ldrh r1, [r0]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08020B14\n\
- adds r0, r4, r2\n\
- cmp r0, 0x1\n\
- bgt _08020B1C\n\
- b _08020B36\n\
- .align 2, 0\n\
-_08020AF0: .4byte gBattleControllerExecFlags\n\
-_08020AF4: .4byte gPlayerParty\n\
-_08020AF8: .4byte gBattleOutcome\n\
-_08020AFC: .4byte gEnemyParty\n\
-_08020B00: .4byte gBattleTypeFlags\n\
-_08020B04: .4byte gBattlersCount\n\
-_08020B08: .4byte gBattlescriptCurrInstr\n\
-_08020B0C: .4byte gHitMarker\n\
-_08020B10: .4byte gSpecialStatuses\n\
-_08020B14:\n\
- cmp r4, 0\n\
- beq _08020B36\n\
- cmp r2, 0\n\
- beq _08020B36\n\
-_08020B1C:\n\
- ldr r2, [r7]\n\
- ldrb r1, [r2, 0x1]\n\
- ldrb r0, [r2, 0x2]\n\
- lsls r0, 8\n\
- adds r1, r0\n\
- ldrb r0, [r2, 0x3]\n\
- lsls r0, 16\n\
- adds r1, r0\n\
- ldrb r0, [r2, 0x4]\n\
- lsls r0, 24\n\
- adds r1, r0\n\
- str r1, [r7]\n\
- b _08020B46\n\
-_08020B36:\n\
- ldr r0, [r7]\n\
- adds r0, 0x5\n\
- str r0, [r7]\n\
- b _08020B46\n\
-_08020B3E:\n\
- ldr r1, _08020B50 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r1]\n\
- adds r0, 0x5\n\
- str r0, [r1]\n\
-_08020B46:\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08020B50: .4byte gBattlescriptCurrInstr\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
static void MoveValuesCleanUp(void)
{
@@ -7213,7 +6993,7 @@ static void atk4F_jumpifcantswitch(void)
to_cmp = r7;
party = gPlayerParty;
}
- for (val = 0; val < 6; val++)
+ for (val = 0; val < PARTY_SIZE; val++)
{
if (GetMonData(&party[val], MON_DATA_HP) != 0
&& GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
@@ -9083,7 +8863,7 @@ static void atk61_drawpartystatussummary(void)
else
party = gEnemyParty;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&party[i], MON_DATA_SPECIES2) == 0 || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
{
@@ -10569,7 +10349,7 @@ static void atk8F_forcerandomswitch(void)
else
{
valid = 0;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
&& !GetMonData(&party[i], MON_DATA_IS_EGG)
@@ -11607,107 +11387,34 @@ static void atk9E_metronome(void)
.word gBattlerTarget");
}
#else
-#ifdef NONMATCHING
static void atk9E_metronome(void)
{
- // sMovesForbiddenToCopy
- int i;
- do
+ while (1)
{
- while ((gCurrentMove = (Random() & 0x1FF) + 1) > 0x162);
- for (i = 0; sMovesForbiddenToCopy[i] != gCurrentMove && sMovesForbiddenToCopy[i] != 0xFFFF; i++);
- } while (sMovesForbiddenToCopy[i] != 0xFFFF);
+ s32 i;
- gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
- gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
- gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
-}
-
-#else
-NAKED
-static void atk9E_metronome(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- ldr r7, _08027938 @ =gCurrentMove\n\
- movs r6, 0xB1\n\
- lsls r6, 1\n\
- ldr r5, _0802793C @ =sMovesForbiddenToCopy\n\
- ldr r0, _08027940 @ =gBattlescriptCurrInstr\n\
- mov r8, r0\n\
-_080278CA:\n\
- bl Random\n\
- ldr r2, _08027944 @ =0x000001ff\n\
- adds r1, r2, 0\n\
- ands r0, r1\n\
- adds r0, 0x1\n\
- strh r0, [r7]\n\
- cmp r0, r6\n\
- bhi _080278CA\n\
- movs r0, 0x3\n\
-_080278DE:\n\
- subs r0, 0x1\n\
- cmp r0, 0\n\
- bge _080278DE\n\
- ldr r4, _08027938 @ =gCurrentMove\n\
- ldrh r2, [r4]\n\
- ldr r3, _08027948 @ =0x0000ffff\n\
- subs r0, r5, 0x2\n\
-_080278EC:\n\
- adds r0, 0x2\n\
- ldrh r1, [r0]\n\
- cmp r1, r2\n\
- beq _080278F8\n\
- cmp r1, r3\n\
- bne _080278EC\n\
-_080278F8:\n\
- ldr r0, _08027948 @ =0x0000ffff\n\
- cmp r1, r0\n\
- bne _080278CA\n\
- ldr r2, _0802794C @ =gHitMarker\n\
- ldr r0, [r2]\n\
- ldr r1, _08027950 @ =0xfffffbff\n\
- ands r0, r1\n\
- str r0, [r2]\n\
- ldr r3, _08027954 @ =gBattleScriptsForMoveEffects\n\
- ldr r2, _08027958 @ =gBattleMoves\n\
- ldrh r1, [r4]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- ldr r0, [r0]\n\
- mov r1, r8\n\
- str r0, [r1]\n\
- ldrh r0, [r4]\n\
- movs r1, 0\n\
- bl GetMoveTarget\n\
- ldr r1, _0802795C @ =gBattlerTarget\n\
- strb r0, [r1]\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08027938: .4byte gCurrentMove\n\
-_0802793C: .4byte sMovesForbiddenToCopy\n\
-_08027940: .4byte gBattlescriptCurrInstr\n\
-_08027944: .4byte 0x000001ff\n\
-_08027948: .4byte 0x0000ffff\n\
-_0802794C: .4byte gHitMarker\n\
-_08027950: .4byte 0xfffffbff\n\
-_08027954: .4byte gBattleScriptsForMoveEffects\n\
-_08027958: .4byte gBattleMoves\n\
-_0802795C: .4byte gBattlerTarget\n\
- .syntax divided");
+ gCurrentMove = (Random() & 0x1FF) + 1;
+ if (gCurrentMove >= 355)
+ continue;
+ for (i = 0; i < MAX_MON_MOVES; ++i); // redundant
+ i = -1;
+ while (1)
+ {
+ ++i;
+ if (sMovesForbiddenToCopy[i] == gCurrentMove)
+ break;
+ if (sMovesForbiddenToCopy[i] == METRONOME_FORBIDDEN_END)
+ break;
+ }
+ if (sMovesForbiddenToCopy[i] == METRONOME_FORBIDDEN_END)
+ {
+ gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
+ gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
+ gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
+ return;
+ }
+ }
}
-#endif // NONMATCHING
#endif
static void atk9F_dmgtolevel(void)
@@ -12379,7 +12086,7 @@ static void atkAE_healpartystatus(void)
}
}
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
u16 species = GetMonData(&party[i], MON_DATA_SPECIES2);
u8 abilityBit = GetMonData(&party[i], MON_DATA_ALT_ABILITY);
@@ -12852,27 +12559,31 @@ static void atkC3_trysetfutureattack(void)
}
}
-#ifdef NONMATCHING
static void atkC4_trydobeatup(void)
{
- register struct Pokemon* party asm("r7");
- if (GetBattlerSide(gBattlerAttacker) == 0)
+ struct Pokemon *party;
+
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
-
if (gBattleMons[gBattlerTarget].hp == 0)
+ {
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
else
{
- while (gBattleCommunication[0] < 6)
+ u8 beforeLoop = gBattleCommunication[0];
+
+ for (;gBattleCommunication[0] < PARTY_SIZE; ++gBattleCommunication[0])
{
- if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP) && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2)
- && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS))
- break;
- gBattleCommunication[0]++;
+ if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP)
+ && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2)
+ && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG
+ && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS))
+ break;
}
- if (gBattleCommunication[0] < 6)
+ if (gBattleCommunication[0] < PARTY_SIZE)
{
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 4;
@@ -12888,269 +12599,14 @@ static void atkC4_trydobeatup(void)
gBattleMoveDamage = (gBattleMoveDamage / 50) + 2;
if (gProtectStructs[gBattlerAttacker].helpingHand)
gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
-
- gBattleCommunication[0]++;
+ ++gBattleCommunication[0];
}
- else if (gBattleCommunication[0] != 0)
+ else if (beforeLoop != 0)
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5);
}
}
-#else
-NAKED
-static void atkC4_trydobeatup(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- ldr r0, _08029A8C @ =gBattlerAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- ldr r7, _08029A90 @ =gEnemyParty\n\
- cmp r0, 0\n\
- bne _08029A62\n\
- ldr r7, _08029A94 @ =gPlayerParty\n\
-_08029A62:\n\
- ldr r2, _08029A98 @ =gBattleMons\n\
- ldr r0, _08029A9C @ =gBattlerTarget\n\
- ldrb r1, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r0, r2\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _08029AA4\n\
- ldr r3, _08029AA0 @ =gBattlescriptCurrInstr\n\
- ldr r2, [r3]\n\
- ldrb r1, [r2, 0x1]\n\
- ldrb r0, [r2, 0x2]\n\
- lsls r0, 8\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x3]\n\
- lsls r0, 16\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x4]\n\
- b _08029C40\n\
- .align 2, 0\n\
-_08029A8C: .4byte gBattlerAttacker\n\
-_08029A90: .4byte gEnemyParty\n\
-_08029A94: .4byte gPlayerParty\n\
-_08029A98: .4byte gBattleMons\n\
-_08029A9C: .4byte gBattlerTarget\n\
-_08029AA0: .4byte gBattlescriptCurrInstr\n\
-_08029AA4:\n\
- ldr r6, _08029BE0 @ =gBattleCommunication\n\
- ldrb r0, [r6]\n\
- mov r8, r0\n\
- cmp r0, 0x5\n\
- bls _08029AB0\n\
- b _08029C0C\n\
-_08029AB0:\n\
- adds r4, r6, 0\n\
- movs r5, 0x64\n\
-_08029AB4:\n\
- ldrb r0, [r4]\n\
- muls r0, r5\n\
- adds r0, r7, r0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08029AF8\n\
- ldrb r0, [r6]\n\
- muls r0, r5\n\
- adds r0, r7, r0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08029AF8\n\
- ldrb r0, [r4]\n\
- muls r0, r5\n\
- adds r0, r7, r0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- movs r1, 0xCE\n\
- lsls r1, 1\n\
- cmp r0, r1\n\
- beq _08029AF8\n\
- ldrb r0, [r4]\n\
- muls r0, r5\n\
- adds r0, r7, r0\n\
- movs r1, 0x37\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08029B08\n\
-_08029AF8:\n\
- ldrb r0, [r4]\n\
- adds r0, 0x1\n\
- strb r0, [r4]\n\
- adds r6, r4, 0\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x5\n\
- bls _08029AB4\n\
-_08029B08:\n\
- ldr r1, _08029BE0 @ =gBattleCommunication\n\
- mov r9, r1\n\
- ldrb r2, [r1]\n\
- cmp r2, 0x5\n\
- bhi _08029C0C\n\
- ldr r1, _08029BE4 @ =gBattleTextBuff1\n\
- movs r0, 0xFD\n\
- strb r0, [r1]\n\
- movs r0, 0x4\n\
- strb r0, [r1, 0x1]\n\
- ldr r6, _08029BE8 @ =gBattlerAttacker\n\
- ldrb r0, [r6]\n\
- strb r0, [r1, 0x2]\n\
- strb r2, [r1, 0x3]\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x4]\n\
- ldr r1, _08029BEC @ =gBattlescriptCurrInstr\n\
- ldr r0, [r1]\n\
- adds r0, 0x9\n\
- str r0, [r1]\n\
- ldr r2, _08029BF0 @ =gBattleMoveDamage\n\
- mov r8, r2\n\
- ldr r5, _08029BF4 @ =gBaseStats\n\
- mov r1, r9\n\
- ldrb r0, [r1]\n\
- movs r4, 0x64\n\
- muls r0, r4\n\
- adds r0, r7, r0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 2\n\
- adds r1, r5\n\
- ldrb r3, [r1, 0x1]\n\
- mov r2, r8\n\
- str r3, [r2]\n\
- ldr r2, _08029BF8 @ =gBattleMoves\n\
- ldr r0, _08029BFC @ =gCurrentMove\n\
- ldrh r1, [r0]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- ldrb r0, [r0, 0x1]\n\
- muls r0, r3\n\
- mov r1, r8\n\
- str r0, [r1]\n\
- mov r2, r9\n\
- ldrb r0, [r2]\n\
- muls r0, r4\n\
- adds r0, r7, r0\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- lsls r0, 1\n\
- movs r1, 0x5\n\
- bl __udivsi3\n\
- adds r0, 0x2\n\
- mov r2, r8\n\
- ldr r1, [r2]\n\
- muls r0, r1\n\
- str r0, [r2]\n\
- ldr r3, _08029C00 @ =gBattleMons\n\
- ldr r1, _08029C04 @ =gBattlerTarget\n\
- ldrb r2, [r1]\n\
- movs r1, 0x58\n\
- muls r1, r2\n\
- adds r1, r3\n\
- ldrh r2, [r1]\n\
- lsls r1, r2, 3\n\
- subs r1, r2\n\
- lsls r1, 2\n\
- adds r1, r5\n\
- ldrb r1, [r1, 0x2]\n\
- bl __divsi3\n\
- mov r1, r8\n\
- str r0, [r1]\n\
- movs r1, 0x32\n\
- bl __divsi3\n\
- adds r2, r0, 0x2\n\
- mov r0, r8\n\
- str r2, [r0]\n\
- ldr r1, _08029C08 @ =gProtectStructs\n\
- ldrb r0, [r6]\n\
- lsls r0, 4\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08029BD4\n\
- lsls r0, r2, 4\n\
- subs r0, r2\n\
- movs r1, 0xA\n\
- bl __divsi3\n\
- mov r1, r8\n\
- str r0, [r1]\n\
-_08029BD4:\n\
- mov r2, r9\n\
- ldrb r0, [r2]\n\
- adds r0, 0x1\n\
- strb r0, [r2]\n\
- b _08029C46\n\
- .align 2, 0\n\
-_08029BE0: .4byte gBattleCommunication\n\
-_08029BE4: .4byte gBattleTextBuff1\n\
-_08029BE8: .4byte gBattlerAttacker\n\
-_08029BEC: .4byte gBattlescriptCurrInstr\n\
-_08029BF0: .4byte gBattleMoveDamage\n\
-_08029BF4: .4byte gBaseStats\n\
-_08029BF8: .4byte gBattleMoves\n\
-_08029BFC: .4byte gCurrentMove\n\
-_08029C00: .4byte gBattleMons\n\
-_08029C04: .4byte gBattlerTarget\n\
-_08029C08: .4byte gProtectStructs\n\
-_08029C0C:\n\
- mov r0, r8\n\
- cmp r0, 0\n\
- beq _08029C2C\n\
- ldr r3, _08029C28 @ =gBattlescriptCurrInstr\n\
- ldr r2, [r3]\n\
- ldrb r1, [r2, 0x1]\n\
- ldrb r0, [r2, 0x2]\n\
- lsls r0, 8\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x3]\n\
- lsls r0, 16\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x4]\n\
- b _08029C40\n\
- .align 2, 0\n\
-_08029C28: .4byte gBattlescriptCurrInstr\n\
-_08029C2C:\n\
- ldr r3, _08029C54 @ =gBattlescriptCurrInstr\n\
- ldr r2, [r3]\n\
- ldrb r1, [r2, 0x5]\n\
- ldrb r0, [r2, 0x6]\n\
- lsls r0, 8\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x7]\n\
- lsls r0, 16\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x8]\n\
-_08029C40:\n\
- lsls r0, 24\n\
- orrs r1, r0\n\
- str r1, [r3]\n\
-_08029C46:\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08029C54: .4byte gBattlescriptCurrInstr\n\
- .syntax divided");
-}
-#endif // NONMATCHING
static void atkC5_setsemiinvulnerablebit(void)
{
@@ -13565,248 +13021,50 @@ static void atkDD_weightdamagecalculation(void)
gBattlescriptCurrInstr++;
}
-#ifdef NONMATCHING
static void atkDE_assistattackselect(void)
{
- u32 chooseable_moves_no = 0;
- struct Pokemon* party;
- int i, j;
- u16* chooseable_moves;
- if (GetBattlerPosition(gBattlerAttacker) & 1)
+ s32 chooseableMovesNo = 0;
+ struct Pokemon *party;
+ s32 monId, moveId;
+ u16 *movesArray = (u16 *)&gBattleStruct->assistMove;
+
+ if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER)
party = gEnemyParty;
else
party = gPlayerParty;
-
- for (i = 0; i < 6; i++)
+ for (monId = 0; monId < PARTY_SIZE; ++monId)
{
- if (i == gBattlerPartyIndexes[gBattlerAttacker])
- break;
- if (!GetMonData(&party[i], MON_DATA_SPECIES2) || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
- break;
- chooseable_moves = &gBattleStruct->assistMove[chooseable_moves_no];
- for (j = 0; j < 4; j++)
+ if (monId == gBattlerPartyIndexes[gBattlerAttacker]
+ || GetMonData(&party[monId], MON_DATA_SPECIES2) == SPECIES_NONE
+ || GetMonData(&party[monId], MON_DATA_SPECIES2) == SPECIES_EGG)
+ continue;
+ for (moveId = 0; moveId < MAX_MON_MOVES; ++moveId)
{
- int k;
- u16 move = GetMonData(&party[i], MON_DATA_MOVE1 + i);
+ s32 i = 0;
+ u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId);
+
if (IsMoveUnchoosable(move))
- break;
- //sMovesForbiddenToCopy[k]
- for (k = 0; ;k++)
- {
- if (sMovesForbiddenToCopy[k] == 0xFFFF)
- {
- if (move)
- {
- *chooseable_moves = move;
- chooseable_moves++;
- chooseable_moves_no++;
- }
- break;
- }
- if (sMovesForbiddenToCopy[k] == move)
- break;
- }
+ continue;
+ for (; sMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END && move != sMovesForbiddenToCopy[i]; ++i);
+ if (sMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END || move == MOVE_NONE)
+ continue;
+ movesArray[chooseableMovesNo] = move;
+ ++chooseableMovesNo;
}
}
- if (chooseable_moves_no)
+ if (chooseableMovesNo)
{
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
- gRandomMove = gBattleStruct->assistMove[Random() % chooseable_moves_no];
+ gRandomMove = movesArray[((Random() & 0xFF) * chooseableMovesNo) >> 8];
gBattlerTarget = GetMoveTarget(gRandomMove, 0);
gBattlescriptCurrInstr += 5;
}
else
+ {
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
}
-#else
-NAKED
-static void atkDE_assistattackselect(void)
-{
- asm(".syntax 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, 0x8\n\
- movs r0, 0\n\
- mov r10, r0\n\
- ldr r0, _0802AB9C @ =gBattlerAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerPosition\n\
- movs r1, 0x1\n\
- ands r1, r0\n\
- ldr r0, _0802ABA0 @ =gPlayerParty\n\
- str r0, [sp]\n\
- cmp r1, 0\n\
- beq _0802AAAC\n\
- ldr r1, _0802ABA4 @ =gEnemyParty\n\
- str r1, [sp]\n\
-_0802AAAC:\n\
- movs r2, 0\n\
-_0802AAAE:\n\
- ldr r1, _0802ABA8 @ =gBattlerPartyIndexes\n\
- ldr r0, _0802AB9C @ =gBattlerAttacker\n\
- ldrb r0, [r0]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- adds r1, r2, 0x1\n\
- str r1, [sp, 0x4]\n\
- ldrh r0, [r0]\n\
- cmp r2, r0\n\
- beq _0802AB54\n\
- movs r0, 0x64\n\
- adds r6, r2, 0\n\
- muls r6, r0\n\
- ldr r0, [sp]\n\
- adds r4, r0, r6\n\
- adds r0, r4, 0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _0802AB54\n\
- adds r0, r4, 0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- movs r1, 0xCE\n\
- lsls r1, 1\n\
- cmp r0, r1\n\
- beq _0802AB54\n\
- movs r5, 0\n\
- ldr r1, _0802ABAC @ =0x0000ffff\n\
- mov r8, r1\n\
- mov r9, r6\n\
- mov r1, r10\n\
- lsls r0, r1, 1\n\
- ldr r1, _0802ABB0 @ =gSharedMem + 0x16024\n\
- adds r6, r0, r1\n\
-_0802AAF8:\n\
- movs r7, 0\n\
- adds r1, r5, 0\n\
- adds r1, 0xD\n\
- ldr r0, [sp]\n\
- add r0, r9\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- adds r0, r4, 0\n\
- bl IsMoveUnchoosable\n\
- lsls r0, 24\n\
- adds r1, r5, 0x1\n\
- cmp r0, 0\n\
- bne _0802AB4E\n\
- ldr r0, _0802ABB4 @ =sMovesForbiddenToCopy\n\
- ldrh r2, [r0]\n\
- adds r3, r0, 0\n\
- cmp r2, r8\n\
- beq _0802AB42\n\
- cmp r4, r2\n\
- beq _0802AB38\n\
- ldr r5, _0802ABAC @ =0x0000ffff\n\
- adds r2, r3, 0\n\
-_0802AB2A:\n\
- adds r2, 0x2\n\
- adds r7, 0x1\n\
- ldrh r0, [r2]\n\
- cmp r0, r5\n\
- beq _0802AB42\n\
- cmp r4, r0\n\
- bne _0802AB2A\n\
-_0802AB38:\n\
- lsls r0, r7, 1\n\
- adds r0, r3\n\
- ldrh r0, [r0]\n\
- cmp r0, r8\n\
- bne _0802AB4E\n\
-_0802AB42:\n\
- cmp r4, 0\n\
- beq _0802AB4E\n\
- strh r4, [r6]\n\
- adds r6, 0x2\n\
- movs r0, 0x1\n\
- add r10, r0\n\
-_0802AB4E:\n\
- adds r5, r1, 0\n\
- cmp r5, 0x3\n\
- ble _0802AAF8\n\
-_0802AB54:\n\
- ldr r2, [sp, 0x4]\n\
- cmp r2, 0x5\n\
- ble _0802AAAE\n\
- mov r1, r10\n\
- cmp r1, 0\n\
- beq _0802ABCC\n\
- ldr r2, _0802ABB8 @ =gHitMarker\n\
- ldr r0, [r2]\n\
- ldr r1, _0802ABBC @ =0xfffffbff\n\
- ands r0, r1\n\
- str r0, [r2]\n\
- ldr r4, _0802ABC0 @ =gRandomMove\n\
- bl Random\n\
- movs r1, 0xFF\n\
- ands r1, r0\n\
- mov r0, r10\n\
- muls r0, r1\n\
- asrs r0, 8\n\
- lsls r0, 1\n\
- ldr r1, _0802ABB0 @ =gSharedMem + 0x16024\n\
- adds r0, r1\n\
- ldrh r0, [r0]\n\
- strh r0, [r4]\n\
- ldrh r0, [r4]\n\
- movs r1, 0\n\
- bl GetMoveTarget\n\
- ldr r1, _0802ABC4 @ =gBattlerTarget\n\
- strb r0, [r1]\n\
- ldr r1, _0802ABC8 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r1]\n\
- adds r0, 0x5\n\
- str r0, [r1]\n\
- b _0802ABE6\n\
- .align 2, 0\n\
-_0802AB9C: .4byte gBattlerAttacker\n\
-_0802ABA0: .4byte gPlayerParty\n\
-_0802ABA4: .4byte gEnemyParty\n\
-_0802ABA8: .4byte gBattlerPartyIndexes\n\
-_0802ABAC: .4byte 0x0000ffff\n\
-_0802ABB0: .4byte gSharedMem + 0x16024\n\
-_0802ABB4: .4byte sMovesForbiddenToCopy\n\
-_0802ABB8: .4byte gHitMarker\n\
-_0802ABBC: .4byte 0xfffffbff\n\
-_0802ABC0: .4byte gRandomMove\n\
-_0802ABC4: .4byte gBattlerTarget\n\
-_0802ABC8: .4byte gBattlescriptCurrInstr\n\
-_0802ABCC:\n\
- ldr r3, _0802ABF8 @ =gBattlescriptCurrInstr\n\
- ldr r2, [r3]\n\
- ldrb r1, [r2, 0x1]\n\
- ldrb r0, [r2, 0x2]\n\
- lsls r0, 8\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x3]\n\
- lsls r0, 16\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x4]\n\
- lsls r0, 24\n\
- orrs r1, r0\n\
- str r1, [r3]\n\
-_0802ABE6:\n\
- add sp, 0x8\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\
- .align 2, 0\n\
-_0802ABF8: .4byte gBattlescriptCurrInstr\n\
- .syntax divided");
-}
-
-#endif // NONMATCHING
-
static void atkDF_trysetmagiccoat(void)
{
gBattlerTarget = gBattlerAttacker;
@@ -13918,7 +13176,7 @@ static void atkE4_getsecretpowereffect(void)
static void atkE5_pickup(void)
{
int i;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
u16 held_item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 52669a316..c86b707b3 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -3277,7 +3277,7 @@ void debug_sub_80524BC(void)
}
// Partially fixes the clipping on longer names.
-#if DEBUG_TRANSLATE && DEBUG
+#if DEBUG_FIX
# define BLENDER_DEBUG_BERRY_LEN 12
#else
# define BLENDER_DEBUG_BERRY_LEN 6
diff --git a/src/contest_painting.c b/src/contest_painting.c
index e3cc6cdae..af5eddf76 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -101,40 +101,18 @@ static void ContestPaintingPrintCaption(u8 arg0, u8 arg1);
static void ContestPaintingInitBG(void);
static void ContestPaintingInitVars(u8 arg0);
static void VBlankCB_ContestPainting(void);
-void sub_8106B90(); //should be static
+static void sub_8106B90(u8 *a, u16 *b, u16 *c);
static void sub_8107090(u8 arg0, u8 arg1);
-NAKED
-void sub_8106630(u32 arg0)
+void sub_8106630(u32 contestWinnerId)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- ldr r2, _0810665C @ =gSharedMem + 0x15DE0\n\
- subs r4, r2, 0x2\n\
- subs r5, r2, 0x1\n\
- ldr r3, _08106660 @ =gSaveBlock1\n\
- subs r0, 0x1\n\
- lsls r1, r0, 5\n\
- adds r1, r3\n\
- ldr r3, _08106664 @ =0x00002dfc\n\
- adds r1, r3\n\
- ldm r1!, {r3,r6,r7}\n\
- stm r2!, {r3,r6,r7}\n\
- ldm r1!, {r3,r6,r7}\n\
- stm r2!, {r3,r6,r7}\n\
- ldm r1!, {r6,r7}\n\
- stm r2!, {r6,r7}\n\
- strb r0, [r4]\n\
- movs r0, 0\n\
- strb r0, [r5]\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0810665C: .4byte gSharedMem + 0x15DE0\n\
-_08106660: .4byte gSaveBlock1\n\
-_08106664: .4byte 0x00002dfc\n\
- .syntax divided\n");
+ // probably fakematching
+ struct ContestWinner *ptr1 = (struct ContestWinner*)&ewram15DE0; // TODO: resolve messy struct duplicates
+ u8 *ptr2 = (u8*)&ewram15DDE;
+ u8 *ptr3 = (u8*)&ewram15DDF;
+ *ptr1 = gSaveBlock1.contestWinners[contestWinnerId - 1];
+ *ptr2 = contestWinnerId - 1;
+ *ptr3 = 0;
}
void CB2_ContestPainting(void)
@@ -346,7 +324,7 @@ static void sub_8106AC4(u16 species, u8 arg1)
species,
(u32)gUnknown_03005E8C->personality
);
- sub_8106B90(gUnknown_081FAF4C[1], gUnknown_03005E90, gUnknown_03005E10);
+ sub_8106B90((u8*)gUnknown_081FAF4C[1], (u16*)gUnknown_03005E90, (u16*)gUnknown_03005E10);
}
else
{
@@ -359,18 +337,26 @@ static void sub_8106AC4(u16 species, u8 arg1)
species,
(u32)gUnknown_03005E8C->personality
);
- sub_8106B90(gUnknown_081FAF4C[0], gUnknown_03005E90, gUnknown_03005E10);
+ sub_8106B90((u8*)gUnknown_081FAF4C[0], (u16*)gUnknown_03005E90, (u16*)gUnknown_03005E10);
}
}
-#ifdef NONMATCHING
-void sub_8106B90(u8 a[][8][8][4], u16 b[], u16 c[][8][8][8])
+
+static void sub_8106B90(u8 *a, u16 *b, u16 *c)
{
u16 i;
u16 j;
u16 k;
u16 l;
+ /*
+ Raw arithmetics are required to match this function.
+ At least it's the first known way to match it. The extreme
+ sensitivity of this match and Game Freak proving to not have
+ been a fan of C's advanced array features, preferring to
+ calculate dimensions manually (as seen in other functions),
+ tell that it may have been this way in the original code.
+ */
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
@@ -379,128 +365,38 @@ void sub_8106B90(u8 a[][8][8][4], u16 b[], u16 c[][8][8][8])
{
for (l = 0; l < 8; l++)
{
- //u8 *arr = a[i][j][k];
- //u8 r1 = arr[l / 2];
- u8 r1 = a[i][j][k][l / 2];
+ /*
+ Parenthesis/group hack absolutely required to match regalloc. Remove any
+ unneeded parentheses and the function gets thrown off. See the comments
+ in CopyWallpaperTilemap for documentation on a similar behavior.
+ */
+ u8 temp = ((u8*)a + ((((i << 3) + j) << 5) + (k << 2) + (l >> 1)))[0];
+ /*
+ The shifts have to be there to match r0 and r2's order in one instruction:
+ add r5, r2, r0
+ This also makes agbcc's expression order parsing even more super sensitive
+ and obscene when it comes to parentheses affecting regalloc regardless if
+ unnecessary, requiring j must be placed in the front to match, or else
+ regalloc breaks again and does this a few instructions above:
+ add r0, r3, r7 <- regswap
+ */
if (l & 1)
- r1 /= 16;
+ temp /= 16;
else
- r1 %= 16;
- //_08106BEA
- if (r1 == 0)
- c[i][k][j][l] = 0x8000;
+ temp %= 16;
+
+ // Same order as above needs to be written here, or else this happens:
+ // add r0, r7, r1 <- regswap
+ if (temp == 0)
+ ((u16*)c + (((i << 3) + k) << 6) + ((j << 3)+l))[0] = 0x8000;
else
- c[i][k][j][l] = b[r1];
+ ((u16*)c + (((i << 3) + k) << 6) + ((j << 3)+l))[0] = b[temp];
}
}
}
}
}
-#else
-NAKED
-void sub_8106B90()
-{
- asm(".syntax 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, 0xC\n\
- mov r10, r0\n\
- mov r9, r1\n\
- str r2, [sp]\n\
- movs r0, 0\n\
-_08106BA4:\n\
- movs r3, 0\n\
- adds r1, r0, 0x1\n\
- str r1, [sp, 0x4]\n\
- lsls r0, 3\n\
- str r0, [sp, 0x8]\n\
-_08106BAE:\n\
- movs r1, 0\n\
- adds r2, r3, 0x1\n\
- mov r8, r2\n\
- ldr r7, [sp, 0x8]\n\
- adds r0, r7, r3\n\
- lsls r0, 5\n\
- mov r12, r0\n\
- lsls r4, r3, 3\n\
-_08106BBE:\n\
- movs r3, 0\n\
- lsls r0, r1, 2\n\
- adds r6, r1, 0x1\n\
- mov r2, r12\n\
- adds r5, r2, r0\n\
- ldr r7, [sp, 0x8]\n\
- adds r0, r7, r1\n\
- lsls r0, 7\n\
- ldr r1, [sp]\n\
- adds r2, r0, r1\n\
-_08106BD2:\n\
- lsrs r0, r3, 1\n\
- adds r0, r5, r0\n\
- add r0, r10\n\
- ldrb r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r3\n\
- cmp r0, 0\n\
- beq _08106BE6\n\
- lsrs r1, 4\n\
- b _08106BEA\n\
-_08106BE6:\n\
- movs r0, 0xF\n\
- ands r1, r0\n\
-_08106BEA:\n\
- cmp r1, 0\n\
- bne _08106BFC\n\
- adds r0, r4, r3\n\
- lsls r0, 1\n\
- adds r0, r2\n\
- movs r7, 0x80\n\
- lsls r7, 8\n\
- adds r1, r7, 0\n\
- b _08106C08\n\
-_08106BFC:\n\
- adds r0, r4, r3\n\
- lsls r0, 1\n\
- adds r0, r2\n\
- lsls r1, 1\n\
- add r1, r9\n\
- ldrh r1, [r1]\n\
-_08106C08:\n\
- strh r1, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x7\n\
- bls _08106BD2\n\
- lsls r0, r6, 16\n\
- lsrs r1, r0, 16\n\
- cmp r1, 0x7\n\
- bls _08106BBE\n\
- mov r1, r8\n\
- lsls r0, r1, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x7\n\
- bls _08106BAE\n\
- ldr r2, [sp, 0x4]\n\
- lsls r0, r2, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x7\n\
- bls _08106BA4\n\
- add sp, 0xC\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\
- .syntax divided\n");
-}
-#endif
static void sub_8106C40(u8 arg0, u8 arg1)
{
diff --git a/src/data/graphics.c b/src/data/graphics.c
index 9cb0a83d6..0e98195cd 100644
--- a/src/data/graphics.c
+++ b/src/data/graphics.c
@@ -10,10 +10,10 @@ const u8 gMonBackPic_CircledQuestionMark[] = INCBIN_U8("graphics/pokemon/circled
const u16 gMonPalette_CircledQuestionMark[] = INCBIN_U16("graphics/pokemon/circled_question_mark/normal.gbapal.lz");
const u16 gMonShinyPalette_CircledQuestionMark[] = INCBIN_U16("graphics/pokemon/circled_question_mark/shiny.gbapal.lz");
-// The test menu debug battle tileset. This uses the old Crystal charmap and
-// rendering method (it uses tiles instead of text).
-// Oddly, the English version is in Japanese and the German version is in English.
-#if DEBUG_TRANSLATE || GERMAN
+// The test menu debug battle tileset. This uses the old Crystal
+// charmap and rendering method (it uses tiles instead of text).
+// The non-English releases use translated graphics.
+#if DEBUG_FIX || !ENGLISH
const u8 gDebugBattleCharmap_Gfx_lz[] = INCBIN_U8("graphics/debug/debug_battle_charmap_en.4bpp.lz");
const u8 gDebugBattleCharmap_Tilemap_lz[] = INCBIN_U8("graphics/debug/debug_battle_charmap_en.bin.lz");
const u8 gDebugBattleCharmap_Pal_lz[] = INCBIN_U8("graphics/debug/debug_battle_charmap_en.gbapal.lz");
diff --git a/src/debug/mori_debug_menu.c b/src/debug/mori_debug_menu.c
index dfa2487a5..d5cae8352 100644
--- a/src/debug/mori_debug_menu.c
+++ b/src/debug/mori_debug_menu.c
@@ -42,10 +42,10 @@ const u8 Text_39B28B[] = _("10000 steps");
const u8 Text_39B297[] = _("MOVE TUTOR");
const u8 Text_39B2A2[] = _("Breed an egg");
const u8 Text_39B2AF[] = _("Long name");
-#ifdef GERMAN
-const u8 Text_39B2B9[] = _("Delete {POKEBLOCK}");
+#if (ENGLISH && !DEBUG_FIX)
+const u8 Text_39B2B9[] = _("ポロックけす");
#else
-const u8 Text_39B2B9[] = DTR("ポロックけす", "Delete {POKEBLOCK}");
+const u8 Text_39B2B9[] = _("Delete {POKEBLOCK}");
#endif
const struct MenuAction gMoriDebugMenuActions[] =
diff --git a/src/debug/nakamura_debug_menu.c b/src/debug/nakamura_debug_menu.c
index 32ac57dc2..e8f40f08e 100644
--- a/src/debug/nakamura_debug_menu.c
+++ b/src/debug/nakamura_debug_menu.c
@@ -100,7 +100,9 @@ static bool8 TopMenu_HandleJoypad(void)
if (gMain.newKeys & A_BUTTON)
{
MenuFunc func = sNakamuraTopMenuActions[Menu_GetCursorPos()].func;
+#if !(ENGLISH && REVISION == 0)
Menu_DestroyCursor();
+#endif
return func();
}
@@ -739,6 +741,17 @@ static bool8 GiveAllDecorations(void)
// FISHING POINTS (Feebas)
// =======================================================
+#if (ENGLISH && REVISION == 0)
+static const u8 Str_843E58D[] = _(
+ "つりばしょ R119\n"
+ " Y1\n"
+ " Y2\n"
+ " Y3\n"
+ "エンカウントばしょ\n"
+ "\n"
+ "\n"
+ "じぶんのまえ");
+#else
static const u8 Str_843E58D[] = _(
"Fishing location R119\n"
" Y1\n"
@@ -748,6 +761,7 @@ static const u8 Str_843E58D[] = _(
"\n"
"\n"
"front of you");
+#endif
static u16 FishingPoints_CountFishingTilesInMapThird(u8 a0)
{
@@ -974,7 +988,13 @@ static void NakaGenderTest_AdjustLevel(u8 i, s8 dirn)
if (sNakaGenderTestData[i].level < 1)
sNakaGenderTestData[i].level = 100;
SetMonData(gPlayerParty + i, MON_DATA_EXP, gExperienceTables[gBaseStats[sNakaGenderTestData[i].species].growthRate] + sNakaGenderTestData[i].level);
+// TODO: check other revisions
+#if (ENGLISH && REVISION == 0)
+ CalculateMonStats(gPlayerParty + i);
+#else
+ // Same function, but without the Shedninja specific code.
Nakamura_NakaGenderTest_RecalcStats(gPlayerParty + i);
+#endif
}
}
@@ -1266,6 +1286,7 @@ static u8 SetPokeblock_CalcColor(u8 * dest, struct Pokeblock * pokeblock)
}
}
if (pkblk[firstNonzeroFlavor] >= pkblk[lastNonzeroFlavor])
+ // Suspiciously looks like a temp could've been here.
lastNonzeroFlavor = firstNonzeroFlavor;
if (lastNonzeroFlavor == 0)
diff --git a/src/debug/nohara_debug_menu.c b/src/debug/nohara_debug_menu.c
index 53501a52b..80527ad42 100644
--- a/src/debug/nohara_debug_menu.c
+++ b/src/debug/nohara_debug_menu.c
@@ -104,8 +104,13 @@ bool8 debug_sub_808F414(void)
}
}
+#if (ENGLISH && REVISION == 0)
+const u8 gUnknown_Debug_083C4980[] = _("ひみつがたを すぐみれるように ひだりキーで\n"
+ "データタイプを へんこうしますか? きりかえ");
+#else
const u8 gUnknown_Debug_083C4980[] = _("Want to change data type{CLEAR_TO 143}Press Left\n"
"to see secret type now?{CLEAR_TO 143}to switch");
+#endif
const u8 gUnknown_Debug_083C49CA[] = _("Choose the TV data you wish to\n"
"create to check a transmission。");
@@ -470,6 +475,11 @@ void debug_sub_808FA88(u8 a0, u8 a1)
u8 leadMonIndex = GetLeadMonIndex();
u8 channel;
+// This is garbage.
+#define GF_ACCESS(x) ((struct x*)(&(gSaveBlock1.tvShows[a0])))
+#define TERU_ACCESS(x) show->x
+#define DECLARE_TERU_POINTER TVShow * show = gSaveBlock1.tvShows + a0
+
gSaveBlock1.tvShows[a0].common.kind = a1;
gSaveBlock1.tvShows[a0].common.active = TRUE;
for (i = 0; i < 0x22; i++)
@@ -480,34 +490,135 @@ void debug_sub_808FA88(u8 a0, u8 a1)
{
case 2:
case 4:
- sub_80BE160(gSaveBlock1.tvShows + a0);
+ sub_80BE160(&gSaveBlock1.tvShows[a0]);
break;
case 3:
- sub_80BE138(gSaveBlock1.tvShows + a0);
+ sub_80BE138(&gSaveBlock1.tvShows[a0]);
break;
}
+#if (ENGLISH && REVISION == 0)
switch (a1)
{
case TVSHOW_FAN_CLUB_LETTER:
case TVSHOW_RECENT_HAPPENINGS:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ GF_ACCESS(TVShowFanClubLetter)->species = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowFanClubLetter)->playerName, gSaveBlock2.playerName);
+ GF_ACCESS(TVShowFanClubLetter)->language = GAME_LANGUAGE;
+ break;
+ }
+ case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
+ {
+ GF_ACCESS(TVShowFanclubOpinions)->var02 = 1;
+ StringCopy(GF_ACCESS(TVShowFanclubOpinions)->playerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowFanclubOpinions)->var10);
+ GF_ACCESS(TVShowFanclubOpinions)->language = GAME_LANGUAGE;
+ GF_ACCESS(TVShowFanclubOpinions)->var0E = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
+ break;
+ }
+ case TVSHOW_UNKN_SHOWTYPE_04:
+ {
+ break;
+ }
+ case TVSHOW_NAME_RATER_SHOW:
+ {
+ GF_ACCESS(TVShowNameRaterShow)->species = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_SPECIES);
+ GF_ACCESS(TVShowNameRaterShow)->var1C = 1;
+ StringCopy(GF_ACCESS(TVShowNameRaterShow)->trainerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowNameRaterShow)->pokemonName);
+ GF_ACCESS(TVShowNameRaterShow)->language = GAME_LANGUAGE;
+ GF_ACCESS(TVShowNameRaterShow)->pokemonNameLanguage = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
+ break;
+ }
+ case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
+ {
+ GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->species = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->playerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->pokemonNickname);
+ GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->language = GAME_LANGUAGE;
+ GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->var1f = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
+ break;
+ }
+ case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
+ {
+ GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->species = SPECIES_BULBASAUR;
+ GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->defeatedSpecies = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->trainerName, gSaveBlock2.playerName);
+ StringCopy(GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->enemyTrainerName, gSaveBlock2.playerName);
+ GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->language = GAME_LANGUAGE;
+ break;
+ }
+ case TVSHOW_MASS_OUTBREAK:
+ {
+ GF_ACCESS(TVShowMassOutbreak)->species = SPECIES_BULBASAUR;
+ GF_ACCESS(TVShowMassOutbreak)->daysLeft = 1;
+ break;
+ }
+ case TVSHOW_POKEMON_TODAY_CAUGHT:
+ {
+ GF_ACCESS(TVShowPokemonToday)->species = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowPokemonToday)->playerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowPokemonToday)->nickname);
+ GF_ACCESS(TVShowPokemonToday)->language = GAME_LANGUAGE;
+ GF_ACCESS(TVShowPokemonToday)->language2 = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
+ break;
+ }
+ case TVSHOW_SMART_SHOPPER:
+ {
+ StringCopy(GF_ACCESS(TVShowSmartShopper)->playerName, gSaveBlock2.playerName);
+ GF_ACCESS(TVShowSmartShopper)->language = GAME_LANGUAGE;
+ break;
+ }
+ case TVSHOW_POKEMON_TODAY_FAILED:
+ {
+ GF_ACCESS(TVShowPokemonTodayFailed)->species = SPECIES_BULBASAUR;
+ GF_ACCESS(TVShowPokemonTodayFailed)->species2 = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowPokemonTodayFailed)->playerName, gSaveBlock2.playerName);
+ GF_ACCESS(TVShowPokemonTodayFailed)->language = GAME_LANGUAGE;
+ break;
+ }
+ case TVSHOW_FISHING_ADVICE:
+ {
+ GF_ACCESS(TVShowPokemonAngler)->var04 = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowPokemonAngler)->playerName, gSaveBlock2.playerName);
+ GF_ACCESS(TVShowPokemonAngler)->language = GAME_LANGUAGE;
+ break;
+ }
+ case TVSHOW_WORLD_OF_MASTERS:
+ {
+ GF_ACCESS(TVShowWorldOfMasters)->var04 = SPECIES_BULBASAUR;
+ GF_ACCESS(TVShowWorldOfMasters)->var08 = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowWorldOfMasters)->playerName, gSaveBlock2.playerName);
+ GF_ACCESS(TVShowWorldOfMasters)->language = GAME_LANGUAGE;
+ break;
+ }
+ }
+#else
+// Murakawa must have really hated working with GF code. He devised his own, less complicated
+// access method after US rev0. Also, this iteration of the code has his self inserts: TERUKUN,
+// TERU, and TERUDA. Who all love Wigglytuff.
+ switch (a1)
+ {
+ case TVSHOW_FAN_CLUB_LETTER:
+ case TVSHOW_RECENT_HAPPENINGS:
+ {
+ DECLARE_TERU_POINTER;
- show->fanclubLetter.species = SPECIES_BULBASAUR;
- StringCopy(gSaveBlock1.tvShows[a0].fanclubLetter.playerName, gSaveBlock2.playerName);
- show->fanclubLetter.language = GAME_LANGUAGE;
+ GF_ACCESS(TVShowFanClubLetter)->species = SPECIES_BULBASAUR; // Yet he didn't change Game Freak's lines.
+ StringCopy(GF_ACCESS(TVShowFanClubLetter)->playerName, gSaveBlock2.playerName);
+ TERU_ACCESS(fanclubLetter).language = GAME_LANGUAGE;
break;
}
case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
- show->fanclubOpinions.var02 = 1;
- StringCopy(gSaveBlock1.tvShows[a0].fanclubOpinions.playerName, gSaveBlock2.playerName);
- GetMonData(gPlayerParty + leadMonIndex, MON_DATA_NICKNAME, gSaveBlock1.tvShows[a0].fanclubOpinions.var10);
- show->fanclubOpinions.language = GAME_LANGUAGE;
- show->fanclubOpinions.var0E = GetMonData(gPlayerParty + leadMonIndex, MON_DATA_LANGUAGE);
+ GF_ACCESS(TVShowFanclubOpinions)->var02 = 1;
+ StringCopy(GF_ACCESS(TVShowFanclubOpinions)->playerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowFanclubOpinions)->var10);
+ TERU_ACCESS(fanclubOpinions).language = GAME_LANGUAGE;
+ TERU_ACCESS(fanclubOpinions).var0E = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
break;
}
case TVSHOW_UNKN_SHOWTYPE_04:
@@ -516,120 +627,118 @@ void debug_sub_808FA88(u8 a0, u8 a1)
}
case TVSHOW_NAME_RATER_SHOW:
{
- u16 species = GetMonData(gPlayerParty + leadMonIndex, MON_DATA_SPECIES);
- TVShow * show = gSaveBlock1.tvShows + a0;
+ u16 species = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_SPECIES);
+ DECLARE_TERU_POINTER;
- show->nameRaterShow.species = species;
- show->nameRaterShow.var1C = 1;
- StringCopy(gSaveBlock1.tvShows[a0].nameRaterShow.trainerName, gSaveBlock2.playerName);
- GetMonData(gPlayerParty + leadMonIndex, MON_DATA_NICKNAME, gSaveBlock1.tvShows[a0].nameRaterShow.pokemonName);
- show->nameRaterShow.language = GAME_LANGUAGE;
- show->nameRaterShow.pokemonNameLanguage = GetMonData(gPlayerParty + leadMonIndex, MON_DATA_LANGUAGE);
+ GF_ACCESS(TVShowNameRaterShow)->species = species;
+ GF_ACCESS(TVShowNameRaterShow)->var1C = 1;
+ StringCopy(GF_ACCESS(TVShowNameRaterShow)->trainerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowNameRaterShow)->pokemonName);
+ TERU_ACCESS(nameRaterShow).language = GAME_LANGUAGE;
+ TERU_ACCESS(nameRaterShow).pokemonNameLanguage = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
break;
}
case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
- show->bravoTrainer.species = SPECIES_BULBASAUR;
- StringCopy(gSaveBlock1.tvShows[a0].bravoTrainer.playerName, gSaveBlock2.playerName);
- GetMonData(gPlayerParty + leadMonIndex, MON_DATA_NICKNAME, gSaveBlock1.tvShows[a0].bravoTrainer.pokemonNickname);
- show->bravoTrainer.language = GAME_LANGUAGE;
- show->bravoTrainer.var1f = GetMonData(gPlayerParty + leadMonIndex, MON_DATA_LANGUAGE);
+ GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->species = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->playerName, gSaveBlock2.playerName);
+ GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_NICKNAME, GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->pokemonNickname);
+ TERU_ACCESS(bravoTrainer).language = GAME_LANGUAGE;
+ TERU_ACCESS(bravoTrainer).var1f = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
break;
}
case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
- show->bravoTrainerTower.species = SPECIES_BULBASAUR;
- show->bravoTrainerTower.defeatedSpecies = SPECIES_BULBASAUR;
- StringCopy(gSaveBlock1.tvShows[a0].bravoTrainerTower.trainerName, gSaveBlock2.playerName);
- StringCopy(gSaveBlock1.tvShows[a0].bravoTrainerTower.enemyTrainerName, gSaveBlock2.playerName);
- show->bravoTrainerTower.language = GAME_LANGUAGE;
+ GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->species = SPECIES_BULBASAUR;
+ GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->defeatedSpecies = SPECIES_BULBASAUR;
+ StringCopy(GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->trainerName, gSaveBlock2.playerName);
+ StringCopy(GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->enemyTrainerName, gSaveBlock2.playerName);
+ TERU_ACCESS(bravoTrainerTower).language = GAME_LANGUAGE;
break;
}
case TVSHOW_MASS_OUTBREAK:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
-
- show->massOutbreak.species = SPECIES_BULBASAUR;
- show->massOutbreak.daysLeft = 1;
+ GF_ACCESS(TVShowMassOutbreak)->species = SPECIES_BULBASAUR;
+ GF_ACCESS(TVShowMassOutbreak)->daysLeft = 1;
break;
}
case TVSHOW_POKEMON_TODAY_CAUGHT:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
u8 gUnknown_Debug_083C4C6C[] = _("TERUTERUDA");
- show->pokemonToday.var12 = 255;
- StringCopy(show->pokemonToday.playerName, gUnknown_Debug_083C4C64);
- StringCopy(show->pokemonToday.nickname, gUnknown_Debug_083C4C6C);
- show->pokemonToday.ball = ITEM_PREMIER_BALL;
- show->pokemonToday.species = SPECIES_WIGGLYTUFF;
- show->pokemonToday.language = GAME_LANGUAGE;
- show->pokemonToday.language2 = GAME_LANGUAGE;
+ TERU_ACCESS(pokemonToday).var12 = 255;
+ StringCopy(TERU_ACCESS(pokemonToday).playerName, gUnknown_Debug_083C4C64);
+ StringCopy(TERU_ACCESS(pokemonToday).nickname, gUnknown_Debug_083C4C6C);
+ TERU_ACCESS(pokemonToday).ball = ITEM_PREMIER_BALL;
+ TERU_ACCESS(pokemonToday).species = SPECIES_WIGGLYTUFF;
+ TERU_ACCESS(pokemonToday).language = GAME_LANGUAGE;
+ TERU_ACCESS(pokemonToday).language2 = GAME_LANGUAGE;
break;
}
case TVSHOW_SMART_SHOPPER:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
int ii;
for (ii = 0; ii < 3; ii++)
- show->smartshopperShow.itemAmounts[ii] = 254;
- show->smartshopperShow.priceReduced = TRUE;
- show->smartshopperShow.shopLocation = 40;
+ TERU_ACCESS(smartshopperShow).itemAmounts[ii] = 254;
+ TERU_ACCESS(smartshopperShow).priceReduced = TRUE;
+ TERU_ACCESS(smartshopperShow).shopLocation = 40;
for (ii = 0; ii < 3; ii++)
- show->smartshopperShow.itemIds[ii] = ITEM_ENERGY_POWDER;
- StringCopy(show->smartshopperShow.playerName, gUnknown_Debug_083C4C64);
- show->smartshopperShow.language = GAME_LANGUAGE;
+ TERU_ACCESS(smartshopperShow).itemIds[ii] = ITEM_ENERGY_POWDER;
+ StringCopy(TERU_ACCESS(smartshopperShow).playerName, gUnknown_Debug_083C4C64);
+ TERU_ACCESS(smartshopperShow).language = GAME_LANGUAGE;
break;
}
case TVSHOW_POKEMON_TODAY_FAILED:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
- show->pokemonTodayFailed.species = SPECIES_WIGGLYTUFF;
- show->pokemonTodayFailed.species2 = SPECIES_WIGGLYTUFF;
- show->pokemonTodayFailed.var12 = 3;
- show->pokemonTodayFailed.var10 = 0xff;
- show->pokemonTodayFailed.var11 = 1;
- StringCopy(show->pokemonTodayFailed.playerName, gUnknown_Debug_083C4C64);
- show->pokemonTodayFailed.language = GAME_LANGUAGE;
+ TERU_ACCESS(pokemonTodayFailed).species = SPECIES_WIGGLYTUFF;
+ TERU_ACCESS(pokemonTodayFailed).species2 = SPECIES_WIGGLYTUFF;
+ TERU_ACCESS(pokemonTodayFailed).var12 = 3;
+ TERU_ACCESS(pokemonTodayFailed).var10 = 0xff;
+ TERU_ACCESS(pokemonTodayFailed).var11 = 1;
+ StringCopy(TERU_ACCESS(pokemonTodayFailed).playerName, gUnknown_Debug_083C4C64);
+ TERU_ACCESS(pokemonTodayFailed).language = GAME_LANGUAGE;
break;
}
case TVSHOW_FISHING_ADVICE:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
- show->pokemonAngler.var02 = 0xff;
- show->pokemonAngler.var03 = 0;
- show->pokemonAngler.var04 = 40;
- StringCopy(show->pokemonAngler.playerName, gUnknown_Debug_083C4C64);
- show->pokemonAngler.language = GAME_LANGUAGE;
+ TERU_ACCESS(pokemonAngler).var02 = 0xff;
+ TERU_ACCESS(pokemonAngler).var03 = 0;
+ TERU_ACCESS(pokemonAngler).var04 = 40;
+ StringCopy(TERU_ACCESS(pokemonAngler).playerName, gUnknown_Debug_083C4C64);
+ TERU_ACCESS(pokemonAngler).language = GAME_LANGUAGE;
break;
}
case TVSHOW_WORLD_OF_MASTERS:
{
- TVShow * show = gSaveBlock1.tvShows + a0;
+ DECLARE_TERU_POINTER;
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
- show->worldOfMasters.var02 = 0xffff;
- show->worldOfMasters.var06 = 0xffff;
- show->worldOfMasters.var04 = 40;
- show->worldOfMasters.var08 = 40;
- show->worldOfMasters.var0a = 3;
- StringCopy(show->worldOfMasters.playerName, gUnknown_Debug_083C4C64);
- show->worldOfMasters.language = GAME_LANGUAGE;
+ TERU_ACCESS(worldOfMasters).var02 = 0xffff;
+ TERU_ACCESS(worldOfMasters).var06 = 0xffff;
+ TERU_ACCESS(worldOfMasters).var04 = 40;
+ TERU_ACCESS(worldOfMasters).var08 = 40;
+ TERU_ACCESS(worldOfMasters).var0a = 3;
+ StringCopy(TERU_ACCESS(worldOfMasters).playerName, gUnknown_Debug_083C4C64);
+ TERU_ACCESS(worldOfMasters).language = GAME_LANGUAGE;
break;
}
-
}
+#endif
}
bool8 debug_sub_808FEBC(void)
diff --git a/src/debug/start_menu_debug.c b/src/debug/start_menu_debug.c
index 940f21ac7..ef83fc3f0 100644
--- a/src/debug/start_menu_debug.c
+++ b/src/debug/start_menu_debug.c
@@ -51,7 +51,8 @@ extern void Debug_SetUpFieldMove_Cut(void);
extern void Debug_SetUpFieldMove_SecretPower(void);
void debug_sub_8076BB4(u8);
-void debug_sub_8077CF4(u8 x, u8 y);
+void DebugMenu_DisplayBuildDate(u8 x, u8 y);
+void DebugMenu_DisplayContinuousDate(u8 x, u8 y);
u8 DebugMenu_807706C(void);
u8 DebugMenu_807709C(void);
void DebugMenu_807719C(void);
@@ -133,7 +134,9 @@ u8 DebugMenu_EndSequenceDemo(void);
u8 DebugMenu_RandomNumberTest(void);
u8 DebugMenu_MeTooBackupMan(void);
u8 DebugMenu_OpenMurakawa(void);
+#if !(ENGLISH && REVISION == 0)
u8 DebugMenu_OpenKiwa(void);
+#endif
u8 DebugMenu_8076CBC(void);
u8 DebugMenu_8076CC0(void);
u8 DebugMenu_8076CD4(void);
@@ -204,7 +207,9 @@ const u8 Str_839B972[] = _("End sequence demo");
const u8 Str_839B984[] = _("Random number test");
const u8 Str_839B997[] = _("Me-too BackupMan");
const u8 Str_839B9A8[] = _("MURAKAWA");
+#if !(ENGLISH && REVISION == 0)
const u8 Str_839B9B1[] = _("KINA(FONT)");
+#endif
const struct MenuAction gDebug0x839B9BC[] =
{
@@ -260,18 +265,34 @@ const struct MenuAction gDebug0x839B9BC[] =
{ Str_839B984, DebugMenu_RandomNumberTest },
{ Str_839B997, DebugMenu_MeTooBackupMan },
{ Str_839B9A8, DebugMenu_OpenMurakawa },
+#if !(ENGLISH && REVISION == 0)
{ Str_839B9B1, DebugMenu_OpenKiwa },
+#endif
};
+#if (ENGLISH && REVISION == 0)
+const u8 gUnknown_Debug_839BB64[] =
+{
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x00, 0x0b, 0x0c, 0x0d, 0x0e, 0x1f, 0x12, 0x13, 0x00, 0x08, 0x09, 0x0a, 0x1e, 0x10, 0x24, 0x0f, 0x00, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x00,
+ 0x1c, 0x1d, 0x14, 0x20, 0x21, 0x22, 0x23, 0x00, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x00, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x00, 0x11, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+#else
const u8 gUnknown_Debug_839BB64[] =
{
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x00, 0x0b, 0x0c, 0x0d, 0x0e, 0x1f, 0x12, 0x13, 0x00, 0x08, 0x09, 0x0a, 0x1e, 0x10, 0x24, 0x0f, 0x00, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x00,
0x1c, 0x1d, 0x14, 0x20, 0x21, 0x22, 0x23, 0x00, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x00, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x00, 0x11, 0x33, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
};
+#endif
-const u8 gUnknown_Debug_0839BBA4[] = _("Debugging Version");
-const u8 gUnknown_Debug_0839BBB6[] = _("{VERSION} Version");
-const u8 gUnknown_Debug_0839BBC1[] = _("Normal RTC compatible");
+#if ENGLISH
+const u8 gDebugCreatedString[] = _("Created");
+const u8 gDebugContinuousString[] = _("Continuous play\n"
+ "available from");
+#else
+const u8 gDebugRomString[] = _("Debugging Version");
+#endif
+const u8 gDebugVersionString[] = _("{VERSION} Version");
+const u8 gDebugRTCString[] = _("Normal RTC compatible");
const u8 gTestMenu_TestMenuHeaderText[] = DTR("か の じっけん", "TEST MENU"); // 科の実験 (Test section)
const u8 gTestMenu_Test2Text[] = DTR("じっけん2", "Test2");
@@ -345,6 +366,7 @@ extern const u8 Str_839BD4C[];
static u8 gUnknown_030006B8;
+#ifndef ENGLISH
struct DebugBuildDateInfo {
s32 max;
s32 digitMultiplier;
@@ -353,6 +375,7 @@ struct DebugBuildDateInfo {
};
static const struct DebugBuildDateInfo *gDebugBuildDate;
+#endif
static u8 gUnknown_030006C0;
static u8 gUnknown_030006C1;
static const u8 * gUnknown_030006C4;
@@ -382,10 +405,17 @@ void debug_sub_8076B4C(void)
// Initializes test menu
void debug_sub_8076B68(void)
{
- Menu_PrintText(gUnknown_Debug_0839BBB6, 1, 1);
- Menu_PrintText(gUnknown_Debug_0839BBC1, 1, 3);
- Menu_PrintText(gUnknown_Debug_0839BBA4, 1, 9);
- debug_sub_8077CF4(4, 11);
+ Menu_PrintText(gDebugVersionString, 1, 1);
+ Menu_PrintText(gDebugRTCString, 1, 3);
+#if ENGLISH
+ Menu_PrintText(gDebugCreatedString, 1, 7);
+ DebugMenu_DisplayBuildDate(3, 9);
+ Menu_PrintText(gDebugContinuousString, 1, 12);
+ DebugMenu_DisplayContinuousDate(3, 16);
+#else
+ Menu_PrintText(gDebugRomString, 1, 9);
+ DebugMenu_DisplayBuildDate(4, 11);
+#endif
debug_sub_8076AC8(0);
CreateTask(debug_sub_8076BB4, 1);
}
@@ -699,6 +729,9 @@ void DebugMenu_8077048(void)
u8 DebugMenu_807706C(void)
{
+#if (ENGLISH && REVISION == 0)
+ gUnknown_Debug_Murakawa2 = 1;
+#endif
InitMenuWindow(&gMenuTextWindowTemplate);
DebugMenu_8077004();
DebugMenu_807719C();
@@ -710,6 +743,8 @@ u8 DebugMenu_807706C(void)
u8 DebugMenu_807709C(void)
{
+ u8 actionRet;
+
if (gMain.newKeys & DPAD_UP)
{
PlaySE(SE_SELECT);
@@ -743,11 +778,21 @@ u8 DebugMenu_807709C(void)
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- return gDebug0x839B9BC[gUnknown_030006C4[gUnknown_030006C0]].func();
+ actionRet = gDebug0x839B9BC[gUnknown_030006C4[gUnknown_030006C0]].func();
+// TODO: see if this is in rev1+
+#if (ENGLISH && REVISION == 0)
+ if (actionRet == 1)
+ gUnknown_Debug_Murakawa2 = 0;
+#endif
+ return actionRet;
}
if (gMain.newKeys & (B_BUTTON | START_BUTTON))
{
CloseMenu();
+// TODO: see if this is in rev1+
+#if (ENGLISH && REVISION == 0)
+ gUnknown_Debug_Murakawa2 = 0;
+#endif
return TRUE;
}
return FALSE;
@@ -1389,15 +1434,47 @@ u8 DebugMenu_8077C14(void)
const u8 Str_839BFDC[] = DTR(" じかん ふん びょう", " HOURS MINUTES SECONDS");
+#if ENGLISH
+const u8 ContinousDateTime[] = "2002 08 01 20:25";
+#else
static const struct DebugBuildDateInfo gDebugBuildDateInfo[] = {
{ 99, 10, 2, 23 },
{ 99, 10, 2, 26 }
};
+#endif
// Parses the version code in a highly inefficient and unsafe way.
-void DebugMenu_ConvertBuildDate(const char *buildDateStr, u8 *out)
+void DebugMenu_ConvertBuildDate(const u8 *buildDateStr, u8 *out)
{
- int i;
+ s32 i;
+#if ENGLISH
+ u16 year;
+ u16 month;
+ u16 day;
+ u16 hour;
+ u16 minutes;
+
+ for (year = 0, i = 0; i < 2; i++)
+ {
+ year *= 10;
+ year += (buildDateStr[i+2] - '0');
+ }
+
+ month = (buildDateStr[5] - '0') * 10 + (buildDateStr[6] - '0');
+ day = (buildDateStr[8] - '0') * 10 + (buildDateStr[9] - '0');
+ hour = (buildDateStr[11] - '0') * 10 + (buildDateStr[12] - '0');
+ minutes = (buildDateStr[14] - '0') * 10 + (buildDateStr[15] - '0');
+
+ out = ConvertIntToDecimalStringN(out, year, STR_CONV_MODE_LEADING_ZEROS, 2);
+ *out++ = CHAR_SLASH;
+ out = ConvertIntToDecimalStringN(out, month, STR_CONV_MODE_LEADING_ZEROS, 2);
+ *out++ = CHAR_SLASH;
+ out = ConvertIntToDecimalStringN(out, day, STR_CONV_MODE_LEADING_ZEROS, 2);
+ *out++ = CHAR_SPACE;
+ out = ConvertIntToDecimalStringN(out, hour, STR_CONV_MODE_LEADING_ZEROS, 2);
+ *out++ = CHAR_COLON;
+ out = ConvertIntToDecimalStringN(out, minutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+#else
// Prevents register allocation swap
// Intended: r7 = out, r6 = gDebugBuildDate->numDigits
// Observed: r6 = out, r7 = gDebugBuildDate->numDigits
@@ -1408,8 +1485,8 @@ void DebugMenu_ConvertBuildDate(const char *buildDateStr, u8 *out)
*out++ = CHAR_SPACE;
for (i = 0; i < 2; i++, gDebugBuildDate++)
{
- int j;
- int mul;
+ s32 j;
+ s32 mul;
u32 date = 0;
for (mul = gDebugBuildDate->digitMultiplier, j = 0; j < gDebugBuildDate->numDigits; j++, mul /= 10)
date += (buildDateStr[gDebugBuildDate->offset + j] - '0') * mul;
@@ -1421,14 +1498,23 @@ void DebugMenu_ConvertBuildDate(const char *buildDateStr, u8 *out)
if (out[0] > 0xf6) // prevent special characters
out[0] = 0xf6;
out[1] = EOS;
+#endif
}
-void debug_sub_8077CF4(u8 x, u8 y)
+void DebugMenu_DisplayBuildDate(u8 x, u8 y)
{
DebugMenu_ConvertBuildDate(BuildDateTime, gStringVar4);
Menu_PrintText(gStringVar4, x, y);
}
+#if ENGLISH
+void DebugMenu_DisplayContinuousDate(u8 x, u8 y)
+{
+ DebugMenu_ConvertBuildDate(ContinousDateTime, gStringVar4);
+ Menu_PrintText(gStringVar4, x, y);
+}
+#endif
+
void DebugMenu_8077D24(const struct MenuAction *menuAction, u8 width, u8 itemCount)
{
Menu_EraseScreen();
@@ -2591,14 +2677,22 @@ u8 DebugMenu_PTime(void)
return TRUE;
}
+#if (ENGLISH && REVISION == 0)
+const u8 gDebug0x839C60C[] = _("switch DISP mode");
+#else
const u8 gDebug0x839C60C[] = _("Set FLASH ERR");
+#endif
void DebugMenu_8079058(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
case 0:
+#if (ENGLISH && REVISION == 0)
+ gUnknown_Debug_Murakawa2 = 1;
+#else
gUnknown_Debug_03004BD0 = 0;
+#endif
Menu_DisplayDialogueFrame();
gTasks[taskId].data[0]++;
break;
@@ -2619,6 +2713,9 @@ void DebugMenu_8079058(u8 taskId)
gUnknown_Debug_03004BD0 = 0;
break;
}
+#if (ENGLISH && REVISION == 0)
+ gUnknown_Debug_Murakawa2 = 0;
+#endif
Menu_EraseScreen();
ScriptContext2_Disable();
DestroyTask(taskId);
@@ -2634,13 +2731,17 @@ u8 DebugMenu_OpenMurakawa(void)
return TRUE;
}
-const u8 Str_839C61A[] = _("abcde; abcde: ABCDE; ABCDE:\p"
- "Tableaux des verbes du 2{SUPER_E} groupe.\p"
- "La1{SUPER_RE} chose à apprendre c'est de lire.\p"
- "Tableaux des verbes du 1{SUPER_ER} groupe.\p"
- "“あいうえおかきくけコさしすせそたちつてとな”\n"
- "<にぬネのはひふへほマみむめもやゆよらりるれろわャッ>\p"
- "をんゃゅょアイウエオカキクケサシスルレロワ,");
+#if !(ENGLISH && REVISION == 0)
+const u8 Str_839C61A[] = _(
+#if GERMAN
+ "abcde; abcde: ABCDE; ABCDE:\p"
+#endif
+ "Tableaux des verbes du 2{SUPER_E} groupe.\p"
+ "La1{SUPER_RE} chose à apprendre c'est de lire.\p"
+ "Tableaux des verbes du 1{SUPER_ER} groupe.\p"
+ "“あいうえおかきくけコさしすせそたちつてとな”\n"
+ "<にぬネのはひふへほマみむめもやゆよらりるれろわャッ>\p"
+ "をんゃゅょアイウエオカキクケサシスルレロワ,");
void DebugMenu_8079110(u8 taskId)
{
@@ -2672,5 +2773,6 @@ u8 DebugMenu_OpenKiwa(void)
ScriptContext2_Enable();
// return TRUE;
}
+#endif
#endif
diff --git a/src/debug/taya_debug_window.c b/src/debug/taya_debug_window.c
index 0b3afa28d..b76e5f794 100644
--- a/src/debug/taya_debug_window.c
+++ b/src/debug/taya_debug_window.c
@@ -439,37 +439,37 @@ void debug_sub_8090C44(void)
Menu_PrintText(eTayaLuckyNumber.charbuf, 1, 3);
}
-#ifdef NONMATCHING
-// mayday mayday
bool8 debug_sub_8090C88(void)
{
bool8 r8 = TRUE;
- if (gMain.newKeys & DPAD_LEFT && eTayaLuckyNumber.digit != 0)
- {
- eTayaLuckyNumber.digit--;
- }
- else if (gMain.newKeys & DPAD_RIGHT && eTayaLuckyNumber.digit < 4)
- {
- eTayaLuckyNumber.digit++;
- }
- else
+ do
{
+ if (gMain.newKeys & DPAD_LEFT && eTayaLuckyNumber.digit != 0)
+ {
+ eTayaLuckyNumber.digit--;
+ break;
+ }
+ if (gMain.newKeys & DPAD_RIGHT && eTayaLuckyNumber.digit < 4)
+ {
+ eTayaLuckyNumber.digit++;
+ break;
+ }
if (gMain.newAndRepeatedKeys & DPAD_UP)
{
u8 r4;
eTayaLuckyNumber.tempLuckyId = eTayaLuckyNumber.curLuckyId;
- eTayaLuckyNumber.charbuf0 = 10000;
+ eTayaLuckyNumber.digitDeltaMagnitude = 10000;
for (r4 = 0; r4 < eTayaLuckyNumber.digit; r4++)
- eTayaLuckyNumber.charbuf0 /= 10;
- eTayaLuckyNumber.tempLuckyId += eTayaLuckyNumber.charbuf0;
+ eTayaLuckyNumber.digitDeltaMagnitude /= 10;
+ eTayaLuckyNumber.tempLuckyId += eTayaLuckyNumber.digitDeltaMagnitude;
if (eTayaLuckyNumber.tempLuckyId > 0xFFFF)
eTayaLuckyNumber.tempLuckyId = 0xFFFF;
if (eTayaLuckyNumber.curLuckyId != eTayaLuckyNumber.tempLuckyId)
{
eTayaLuckyNumber.curLuckyId = eTayaLuckyNumber.tempLuckyId;
- goto check;
+ break;
}
}
if (gMain.newAndRepeatedKeys & DPAD_DOWN)
@@ -477,16 +477,16 @@ bool8 debug_sub_8090C88(void)
u8 r4;
eTayaLuckyNumber.tempLuckyId = eTayaLuckyNumber.curLuckyId;
- eTayaLuckyNumber.charbuf0 = 10000;
+ eTayaLuckyNumber.digitDeltaMagnitude = 10000;
for (r4 = 0; r4 < eTayaLuckyNumber.digit; r4++)
- eTayaLuckyNumber.charbuf0 /= 10;
- eTayaLuckyNumber.tempLuckyId -= eTayaLuckyNumber.charbuf0;
+ eTayaLuckyNumber.digitDeltaMagnitude /= 10;
+ eTayaLuckyNumber.tempLuckyId -= eTayaLuckyNumber.digitDeltaMagnitude;
if (eTayaLuckyNumber.tempLuckyId < 0)
eTayaLuckyNumber.tempLuckyId = 0;
if (eTayaLuckyNumber.curLuckyId != eTayaLuckyNumber.tempLuckyId)
{
eTayaLuckyNumber.curLuckyId = eTayaLuckyNumber.tempLuckyId;
- goto check;
+ break;
}
}
if (gMain.newKeys & B_BUTTON)
@@ -501,193 +501,12 @@ bool8 debug_sub_8090C88(void)
return TRUE;
}
r8 = FALSE;
- }
+ } while (0);
-check:
if (r8)
debug_sub_8090C44();
return FALSE;
}
-#else
-NAKED bool8 debug_sub_8090C88(void)
-{
- asm("\tpush\t{r4, r5, r6, r7, lr}\n"
- "\tmov\tr7, r8\n"
- "\tpush\t{r7}\n"
- "\tadd\tsp, sp, #0xfffffffc\n"
- "\tmov\tr0, #0x1\n"
- "\tmov\tr8, r0\n"
- "\tldr\tr2, ._59 @ gMain\n"
- "\tldrh\tr1, [r2, #0x2e]\n"
- "\tmov\tr0, #0x20\n"
- "\tand\tr0, r0, r1\n"
- "\tadd\tr3, r2, #0\n"
- "\tcmp\tr0, #0\n"
- "\tbeq\t._57\t@cond_branch\n"
- "\tldr\tr1, ._59 + 4 @ gSharedMem\n"
- "\tldrb\tr0, [r1]\n"
- "\tcmp\tr0, #0\n"
- "\tbeq\t._57\t@cond_branch\n"
- "\tsub\tr0, r0, #0x1\n"
- "\tstrb\tr0, [r1]\n"
- "\tb\t._62\n"
- "._60:\n"
- "\t.align\t2, 0\n"
- "._59:\n"
- "\t.word\tgMain\n"
- "\t.word\tgSharedMem\n"
- "._67:\n"
- "\tadd\tr0, r0, #0x1\n"
- "\tstrb\tr0, [r1]\n"
- "\tb\t._62\n"
- "._77:\n"
- "\tstrh\tr1, [r7, #0x8]\n"
- "\tb\t._62\n"
- "._79:\n"
- "\tldr\tr0, ._64 @ gSharedMem\n"
- "\tldrh\tr0, [r0, #0x8]\n"
- "\tbl\tSetLotteryNumber16_Unused\n"
- "._78:\n"
- "\tbl\tCloseMenu\n"
- "\tmov\tr0, #0x1\n"
- "\tb\t._63\n"
- "._65:\n"
- "\t.align\t2, 0\n"
- "._64:\n"
- "\t.word\tgSharedMem\n"
- "._57:\n"
- "\tldrh\tr1, [r3, #0x2e]\n"
- "\tmov\tr0, #0x10\n"
- "\tand\tr0, r0, r1\n"
- "\tcmp\tr0, #0\n"
- "\tbeq\t._66\t@cond_branch\n"
- "\tldr\tr1, ._81 @ gSharedMem\n"
- "\tldrb\tr0, [r1]\n"
- "\tcmp\tr0, #0x3\n"
- "\tbls\t._67\t@cond_branch\n"
- "._66:\n"
- "\tldrh\tr1, [r3, #0x30]\n"
- "\tmov\tr0, #0x40\n"
- "\tand\tr0, r0, r1\n"
- "\tcmp\tr0, #0\n"
- "\tbeq\t._68\t@cond_branch\n"
- "\tldr\tr0, ._81 @ gSharedMem\n"
- "\tldrh\tr1, [r0, #0x8]\n"
- "\tstr\tr1, [r0, #0xc]\n"
- "\tldr\tr1, ._81 + 4 @ 0x2710\n"
- "\tstrh\tr1, [r0, #0x10]\n"
- "\tmov\tr4, #0x0\n"
- "\tldrb\tr1, [r0]\n"
- "\tadd\tr7, r0, #0\n"
- "\tcmp\tr4, r1\n"
- "\tbcs\t._69\t@cond_branch\n"
- "\tadd\tr5, r7, #0\n"
- "\tadd\tr6, r1, #0\n"
- "._70:\n"
- "\tldrh\tr0, [r5, #0x10]\n"
- "\tmov\tr1, #0xa\n"
- "\tstr\tr3, [sp]\n"
- "\tbl\t__udivsi3\n"
- "\tstrh\tr0, [r5, #0x10]\n"
- "\tadd\tr0, r4, #1\n"
- "\tlsl\tr0, r0, #0x18\n"
- "\tlsr\tr4, r0, #0x18\n"
- "\tldr\tr3, [sp]\n"
- "\tcmp\tr4, r6\n"
- "\tbcc\t._70\t@cond_branch\n"
- "._69:\n"
- "\tldrh\tr1, [r7, #0x10]\n"
- "\tldr\tr0, [r7, #0xc]\n"
- "\tadd\tr0, r0, r1\n"
- "\tstr\tr0, [r7, #0xc]\n"
- "\tldr\tr1, ._81 + 8 @ 0xffff\n"
- "\tcmp\tr0, r1\n"
- "\tble\t._71\t@cond_branch\n"
- "\tstr\tr1, [r7, #0xc]\n"
- "._71:\n"
- "\tldrh\tr0, [r7, #0x8]\n"
- "\tldr\tr1, [r7, #0xc]\n"
- "\tcmp\tr0, r1\n"
- "\tbne\t._77\t@cond_branch\n"
- "._68:\n"
- "\tldrh\tr1, [r3, #0x30]\n"
- "\tmov\tr0, #0x80\n"
- "\tand\tr0, r0, r1\n"
- "\tcmp\tr0, #0\n"
- "\tbeq\t._73\t@cond_branch\n"
- "\tldr\tr0, ._81 @ gSharedMem\n"
- "\tldrh\tr1, [r0, #0x8]\n"
- "\tstr\tr1, [r0, #0xc]\n"
- "\tldr\tr1, ._81 + 4 @ 0x2710\n"
- "\tstrh\tr1, [r0, #0x10]\n"
- "\tmov\tr4, #0x0\n"
- "\tldrb\tr1, [r0]\n"
- "\tadd\tr7, r0, #0\n"
- "\tcmp\tr4, r1\n"
- "\tbcs\t._74\t@cond_branch\n"
- "\tadd\tr5, r7, #0\n"
- "\tadd\tr6, r1, #0\n"
- "._75:\n"
- "\tldrh\tr0, [r5, #0x10]\n"
- "\tmov\tr1, #0xa\n"
- "\tstr\tr3, [sp]\n"
- "\tbl\t__udivsi3\n"
- "\tstrh\tr0, [r5, #0x10]\n"
- "\tadd\tr0, r4, #1\n"
- "\tlsl\tr0, r0, #0x18\n"
- "\tlsr\tr4, r0, #0x18\n"
- "\tldr\tr3, [sp]\n"
- "\tcmp\tr4, r6\n"
- "\tbcc\t._75\t@cond_branch\n"
- "._74:\n"
- "\tadd\tr2, r7, #0\n"
- "\tldrh\tr1, [r2, #0x10]\n"
- "\tldr\tr0, [r2, #0xc]\n"
- "\tsub\tr0, r0, r1\n"
- "\tstr\tr0, [r2, #0xc]\n"
- "\tcmp\tr0, #0\n"
- "\tbge\t._76\t@cond_branch\n"
- "\tmov\tr0, #0x0\n"
- "\tstr\tr0, [r2, #0xc]\n"
- "._76:\n"
- "\tldrh\tr0, [r2, #0x8]\n"
- "\tldr\tr1, [r2, #0xc]\n"
- "\tcmp\tr0, r1\n"
- "\tbne\t._77\t@cond_branch\n"
- "._73:\n"
- "\tldrh\tr2, [r3, #0x2e]\n"
- "\tmov\tr0, #0x2\n"
- "\tand\tr0, r0, r2\n"
- "\tcmp\tr0, #0\n"
- "\tbne\t._78\t@cond_branch\n"
- "\tmov\tr0, #0x1\n"
- "\tand\tr0, r0, r2\n"
- "\tcmp\tr0, #0\n"
- "\tbne\t._79\t@cond_branch\n"
- "\tmov\tr0, #0x0\n"
- "\tmov\tr8, r0\n"
- "._62:\n"
- "\tmov\tr0, r8\n"
- "\tcmp\tr0, #0\n"
- "\tbeq\t._80\t@cond_branch\n"
- "\tbl\tdebug_sub_8090C44\n"
- "._80:\n"
- "\tmov\tr0, #0x0\n"
- "._63:\n"
- "\tadd\tsp, sp, #0x4\n"
- "\tpop\t{r3}\n"
- "\tmov\tr8, r3\n"
- "\tpop\t{r4, r5, r6, r7}\n"
- "\tpop\t{r1}\n"
- "\tbx\tr1\n"
- "._82:\n"
- "\t.align\t2, 0\n"
- "._81:\n"
- "\t.word\tgSharedMem\n"
- "\t.word\t0x2710\n"
- "\t.word\t0xffff");
-}
-#endif // NONMATCHING
bool8 TayaDebugMenu_PKMNLottery(void)
{
diff --git a/src/debug/tomomichi_debug_menu.c b/src/debug/tomomichi_debug_menu.c
index 5d30cf2c6..64da15dc7 100644
--- a/src/debug/tomomichi_debug_menu.c
+++ b/src/debug/tomomichi_debug_menu.c
@@ -245,12 +245,21 @@ static const struct MenuAction sMenuActions_TopMenu[] = {
{sString_ControlWORK, ControlWorks},
};
+#if (ENGLISH && REVISION == 0)
+static const u8 sString_ContestMenuTitle[] = _("コンテスト");
+
+static const u8 sString_Contest_PokemonNo[] = _("ポケモンナンバー");
+static const u8 sString_Contest_Personality[] = _("こせいらんすう");
+static const u8 sString_Contest_Type[] = _("コンテストしゅるい");
+static const u8 sString_Contest_PokeArt[] = _("ひょうじ");
+#else
static const u8 sString_ContestMenuTitle[] = _("Contest");
static const u8 sString_Contest_PokemonNo[] = _("Pokémon No.");
static const u8 sString_Contest_Personality[] = _("ID rnd. digit");
static const u8 sString_Contest_Type[] = _("Contest Type");
static const u8 sString_Contest_PokeArt[] = _("Poké Art");
+#endif
static const struct MenuAction sMenuActions_ContestPicTest[] = {
{sString_Contest_PokemonNo, DummyMenuAction},
@@ -259,12 +268,21 @@ static const struct MenuAction sMenuActions_ContestPicTest[] = {
{sString_Contest_PokeArt, ContestGraphics_Show}
};
+#if (ENGLISH && REVISION == 0)
+static const u8 sString_Contest_ArtMuseumTitle[] = _("びじゅつかん");
+
+static const u8 sString_Contest_ArtMuseum_PokemonNo[] = _("ポケモンナンバー");
+static const u8 sString_Contest_ArtMuseum_Personality[] = _("こせいらんすう");
+static const u8 sString_Contest_ArtMuseum_Type[] = _("タイトルしゅるい");
+static const u8 sString_Contest_ArtMuseum_PokeArt[] = _("ひょうじ");
+#else
static const u8 sString_Contest_ArtMuseumTitle[] = _("Art Mus.");
static const u8 sString_Contest_ArtMuseum_PokemonNo[] = _("Pokémon No.");
static const u8 sString_Contest_ArtMuseum_Personality[] = _("ID rnd. digit");
static const u8 sString_Contest_ArtMuseum_Type[] = _("Title Type");
static const u8 sString_Contest_ArtMuseum_PokeArt[] = _("Poké Art");
+#endif
static const struct MenuAction sMenuActions_ArtMuseumPicTest[] = {
{sString_Contest_ArtMuseum_PokemonNo, DummyMenuAction},
@@ -273,12 +291,21 @@ static const struct MenuAction sMenuActions_ArtMuseumPicTest[] = {
{sString_Contest_ArtMuseum_PokeArt, MuseumGraphics_Show}
};
+#if (ENGLISH && REVISION == 0)
+static const u8 sString_Contest_PreviewTitle[] = _("プレビュー");
+
+static const u8 sString_Contest_Preview_PokemonNo[] = _("ポケモンナンバー");
+static const u8 sString_Contest_Preview_Personality[] = _("こせいらんすう");
+static const u8 sString_Contest_Preview_Type[] = _("しゅるい");
+static const u8 sString_Contest_Preview_PokeArt[] = _("ひょうじ");
+#else
static const u8 sString_Contest_PreviewTitle[] = _("Preview");
static const u8 sString_Contest_Preview_PokemonNo[] = _("Pokémon No.");
static const u8 sString_Contest_Preview_Personality[] = _("ID rnd. digit");
static const u8 sString_Contest_Preview_Type[] = _("Type");
static const u8 sString_Contest_Preview_PokeArt[] = _("Poké Art");
+#endif
static const struct MenuAction sMenuActions_PreviewPicTest[] = {
{sString_Contest_Preview_PokemonNo, DummyMenuAction},
@@ -287,10 +314,19 @@ static const struct MenuAction sMenuActions_PreviewPicTest[] = {
{sString_Contest_Preview_PokeArt, PreviewGraphics_Show}
};
+#if (ENGLISH && REVISION == 0)
+static const u8 sString_TrickRelated[] = _("カラクリかんれん");
+#else
static const u8 sString_TrickRelated[] = _("Trick related");
+#endif
static const u8 sString_TrickRelated_Level[] = _("Level");
+
+#if (ENGLISH && REVISION == 0)
+static const u8 sString_TrickRelated_TrickMaster[] = _("MASTER");
+#else
static const u8 sString_TrickRelated_TrickMaster[] = _("Trick Master");
+#endif
static const struct MenuAction sMenuActions_TrickRelated[] = {
{sString_TrickRelated_Level, TrickRelated_Level_InitSubmenu},
@@ -1841,6 +1877,17 @@ static const u16 gUnknown_Debug_083C478E[][9] = {
{VAR_TEMP_9, VAR_TEMP_A, VAR_TEMP_B, VAR_TEMP_C, VAR_TEMP_D, VAR_TEMP_E, VAR_TEMP_F}
};
+#if (ENGLISH && REVISION == 0)
+static const u8 gUnknown_Debug_083C47B2[] = _("レベル");
+static const u8 gUnknown_Debug_083C47B8[] = _("シーン1");
+static const u8 gUnknown_Debug_083C47BF[] = _("シーン2");
+static const u8 gUnknown_Debug_083C47C6[] = _("シーン3");
+static const u8 gUnknown_Debug_083C47CD[] = _("シーン4");
+static const u8 gUnknown_Debug_083C47D4[] = _("シーン5");
+static const u8 gUnknown_Debug_083C47DB[] = _("シーン6");
+static const u8 gUnknown_Debug_083C47E2[] = _("シーン7");
+static const u8 gUnknown_Debug_083C47E9[] = _("シーン8");
+#else
static const u8 gUnknown_Debug_083C47B2[] = _("Level");
static const u8 gUnknown_Debug_083C47B8[] = _("Scene1");
static const u8 gUnknown_Debug_083C47BF[] = _("Scene2");
@@ -1850,6 +1897,7 @@ static const u8 gUnknown_Debug_083C47D4[] = _("Scene5");
static const u8 gUnknown_Debug_083C47DB[] = _("Scene6");
static const u8 gUnknown_Debug_083C47E2[] = _("Scene7");
static const u8 gUnknown_Debug_083C47E9[] = _("Scene8");
+#endif
static const struct MenuAction gUnknown_Debug_083C47F0[] = {
{gUnknown_Debug_083C47B8, DummyMenuAction},
@@ -1862,7 +1910,11 @@ static const struct MenuAction gUnknown_Debug_083C47F0[] = {
{gUnknown_Debug_083C47E9, DummyMenuAction}
};
+#if (ENGLISH && REVISION == 0)
+static const u8 gUnknown_Debug_083C4830[] = _("カラクリだいおう");
+#else
static const u8 gUnknown_Debug_083C4830[] = _("Trick Master");
+#endif
static const u8 gUnknown_Debug_083C483D[] = _("Hidden MASTER");
static const u8 gUnknown_Debug_083C484B[] = _("Inside the HOUSE");
@@ -1878,8 +1930,13 @@ static const struct MenuAction gUnknown_Debug_083C4888[] = {
{gUnknown_Debug_083C4876, DummyMenuAction}
};
+#if (ENGLISH && REVISION == 0)
+static const u8 sDummyNickname[] = _("ポケモンめい");
+static const u8 sDummyTrainerName[] = _("ブリーダーめい");
+#else
static const u8 sDummyNickname[] = _("PMNICKNAME");
static const u8 sDummyTrainerName[] = _("BREEDER");
+#endif
bool8 InitTomomichiDebugWindow(void)
{
diff --git a/src/debug/watanabe_debug_menu.c b/src/debug/watanabe_debug_menu.c
index c055781fb..205d4d5e3 100644
--- a/src/debug/watanabe_debug_menu.c
+++ b/src/debug/watanabe_debug_menu.c
@@ -1812,6 +1812,15 @@ const struct WatanabeDebugMenuItem gUnknown_Debug_083F8698[] = {
{gUnknown_Debug_083F868F, {.type3 = 0x6}}
};
+#if (ENGLISH && REVISION == 0)
+const u8 gUnknown_Debug_083F86C8[] = _("ふつう");
+const u8 gUnknown_Debug_083F86CC[] = _("ねむり");
+const u8 gUnknown_Debug_083F86D0[] = _("どく");
+const u8 gUnknown_Debug_083F86D4[] = _("やけど");
+const u8 gUnknown_Debug_083F86D8[] = _("こおり");
+const u8 gUnknown_Debug_083F86DC[] = _("まひ");
+const u8 gUnknown_Debug_083F86E0[] = _("どくどく");
+#else
const u8 gUnknown_Debug_083F86C8[] = _("ーーー");
const u8 gUnknown_Debug_083F86CC[] = _("SLP");
const u8 gUnknown_Debug_083F86D0[] = _("PSN");
@@ -1819,6 +1828,7 @@ const u8 gUnknown_Debug_083F86D4[] = _("BRN");
const u8 gUnknown_Debug_083F86D8[] = _("FRZ");
const u8 gUnknown_Debug_083F86DC[] = _("PAR");
const u8 gUnknown_Debug_083F86E0[] = _("PSN2");
+#endif
const struct WatanabeDebugMenuItem gUnknown_Debug_083F86E8[] = {
{gUnknown_Debug_083F86C8, {.type3 = 0x0}},
@@ -1830,8 +1840,13 @@ const struct WatanabeDebugMenuItem gUnknown_Debug_083F86E8[] = {
{gUnknown_Debug_083F86E0, {.type3 = 0x80}}
};
+#if (ENGLISH && REVISION == 0)
+const u8 gUnknown_Debug_083F8720[] = _("ポケモンを てもちに くわえました");
+const u8 gUnknown_Debug_083F872A[] = _("ポケモンを ボックスに くわえました");
+#else
const u8 gUnknown_Debug_083F8720[] = _("PKMN{RIGHT_ARROW}LIST");
const u8 gUnknown_Debug_083F872A[] = _("PKMN{RIGHT_ARROW}BOX");
+#endif
void InitCreatePokemon(void)
{
u8 sp04[] = _("Create POKéMON LR:Shift START:Add");
@@ -2196,7 +2211,11 @@ void debug_80C5FFC(void)
{
u32 ivs;
u8 sp10[] = DTR("たまご", "EGG");
+#if (ENGLISH && REVISION == 0)
+ u8 sp14[] = _("デバッグポケ1");
+#else
u8 sp14[] = _("DebugーG");
+#endif
u8 one;
u16 ff;
diff --git a/src/decoration.c b/src/decoration.c
index 4dd7e0f12..1c6c4e18d 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -2403,8 +2403,6 @@ bool8 sub_80FFBDC(u16 metatileBehavior, const struct Decoration *decoration)
return FALSE;
}
-// When behaviorBy is set, it is masked by 0xf000. This is the step that fails to match when built.
-#ifdef NONMATCHING
bool8 sub_80FFC24(u8 taskId, const struct Decoration *decoration)
{
u8 i;
@@ -2536,540 +2534,6 @@ bool8 sub_80FFC24(u8 taskId, const struct Decoration *decoration)
}
return TRUE;
}
-#else
-NAKED
-bool8 sub_80FFC24(u8 taskId, const struct Decoration *decoration)
-{
- asm(".syntax unified\n"
- "\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 0x24\n"
- "\tstr r1, [sp]\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r10, r0\n"
- "\tldr r1, _080FFC60 @ =gTasks\n"
- "\tlsls r0, 2\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r1\n"
- "\tldrb r2, [r0, 0x14]\n"
- "\tstr r2, [sp, 0x4]\n"
- "\tldrb r0, [r0, 0x12]\n"
- "\tstr r0, [sp, 0x8]\n"
- "\tldr r3, [sp]\n"
- "\tldrb r0, [r3, 0x11]\n"
- "\tadds r2, r1, 0\n"
- "\tcmp r0, 0x4\n"
- "\tbls _080FFC56\n"
- "\tb _08100024\n"
- "_080FFC56:\n"
- "\tlsls r0, 2\n"
- "\tldr r1, _080FFC64 @ =_080FFC68\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.align 2, 0\n"
- "_080FFC60: .4byte gTasks\n"
- "_080FFC64: .4byte _080FFC68\n"
- "\t.align 2, 0\n"
- "_080FFC68:\n"
- "\t.4byte _080FFC7C\n"
- "\t.4byte _080FFC7C\n"
- "\t.4byte _080FFD68\n"
- "\t.4byte _080FFF1C\n"
- "\t.4byte _080FFFA0\n"
- "_080FFC7C:\n"
- "\tmovs r6, 0\n"
- "\tldr r0, [sp, 0x4]\n"
- "\tcmp r6, r0\n"
- "\tbcc _080FFC86\n"
- "\tb _08100024\n"
- "_080FFC86:\n"
- "\tmov r1, r10\n"
- "\tlsls r1, 2\n"
- "\tstr r1, [sp, 0x1C]\n"
- "_080FFC8C:\n"
- "\tmov r2, r10\n"
- "\tlsls r0, r2, 2\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tldr r3, _080FFD64 @ =gTasks\n"
- "\tadds r0, r3\n"
- "\tldrh r0, [r0, 0xA]\n"
- "\tsubs r0, r6\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0\n"
- "\tadds r6, 0x1\n"
- "\tstr r6, [sp, 0x14]\n"
- "\tldr r0, [sp, 0x8]\n"
- "\tcmp r7, r0\n"
- "\tbcs _080FFD56\n"
- "\tmov r1, r9\n"
- "\tlsls r1, 16\n"
- "\tstr r1, [sp, 0xC]\n"
- "\tasrs r1, 16\n"
- "\tmov r9, r1\n"
- "_080FFCB8:\n"
- "\tldr r0, [sp, 0x1C]\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tldr r2, _080FFD64 @ =gTasks\n"
- "\tadds r0, r2\n"
- "\tldrh r0, [r0, 0x8]\n"
- "\tadds r0, r7\n"
- "\tlsls r0, 16\n"
- "\tmov r8, r0\n"
- "\tasrs r6, r0, 16\n"
- "\tadds r0, r6, 0\n"
- "\tmov r1, r9\n"
- "\tbl MapGridGetMetatileBehaviorAt\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r1, [sp, 0x14]\n"
- "\tsubs r0, r3, r1\n"
- "\tldr r2, [sp, 0x8]\n"
- "\tadds r1, r0, 0\n"
- "\tmuls r1, r2\n"
- "\tadds r1, r7\n"
- "\tldr r3, [sp]\n"
- "\tldr r0, [r3, 0x1C]\n"
- "\tlsls r1, 1\n"
- "\tadds r1, r0\n"
- "\tmovs r2, 0x80\n"
- "\tlsls r2, 2\n"
- "\tadds r0, r2, 0\n"
- "\tldrh r1, [r1]\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tbl GetBehaviorByMetatileId\n"
- "\tmovs r3, 0xF0\n"
- "\tlsls r3, 8\n"
- "\tadds r1, r3, 0\n"
- "\tadds r5, r1, 0\n"
- "\tands r5, r0\n"
- "\tadds r0, r4, 0\n"
- "\tldr r1, [sp]\n"
- "\tbl sub_80FFBDC\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFD1A\n"
- "\tb _080FFFF4\n"
- "_080FFD1A:\n"
- "\tmov r0, r10\n"
- "\tadds r1, r6, 0\n"
- "\tmov r2, r9\n"
- "\tadds r3, r5, 0\n"
- "\tbl sub_80FFB94\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFD2E\n"
- "\tb _080FFFF4\n"
- "_080FFD2E:\n"
- "\tmov r1, r8\n"
- "\tlsrs r0, r1, 16\n"
- "\tldr r2, [sp, 0xC]\n"
- "\tlsrs r1, r2, 16\n"
- "\tmovs r2, 0\n"
- "\tbl GetObjectEventIdByXYZ\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tcmp r4, 0\n"
- "\tbeq _080FFD4A\n"
- "\tcmp r4, 0x10\n"
- "\tbeq _080FFD4A\n"
- "\tb _080FFFF4\n"
- "_080FFD4A:\n"
- "\tadds r0, r7, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcc _080FFCB8\n"
- "_080FFD56:\n"
- "\tldr r1, [sp, 0x14]\n"
- "\tlsls r0, r1, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r2, [sp, 0x4]\n"
- "\tcmp r6, r2\n"
- "\tbcc _080FFC8C\n"
- "\tb _08100024\n"
- "\t.align 2, 0\n"
- "_080FFD64: .4byte gTasks\n"
- "_080FFD68:\n"
- "\tmovs r6, 0\n"
- "\tmov r3, r10\n"
- "\tlsls r3, 2\n"
- "\tstr r3, [sp, 0x1C]\n"
- "\tldr r0, [sp, 0x4]\n"
- "\tsubs r0, 0x1\n"
- "\tstr r0, [sp, 0x18]\n"
- "\tcmp r6, r0\n"
- "\tbge _080FFE54\n"
- "\tadds r0, r3, 0\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tstr r0, [sp, 0x10]\n"
- "_080FFD82:\n"
- "\tldr r1, [sp, 0x10]\n"
- "\tadds r0, r1, r2\n"
- "\tldrh r0, [r0, 0xA]\n"
- "\tsubs r0, r6\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0\n"
- "\tadds r6, 0x1\n"
- "\tstr r6, [sp, 0x14]\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcs _080FFE48\n"
- "\tlsls r0, 16\n"
- "\tstr r0, [sp, 0x20]\n"
- "_080FFDA0:\n"
- "\tldr r1, [sp, 0x10]\n"
- "\tadds r0, r1, r2\n"
- "\tldrh r0, [r0, 0x8]\n"
- "\tadds r0, r7\n"
- "\tlsls r0, 16\n"
- "\tmov r8, r0\n"
- "\tasrs r6, r0, 16\n"
- "\tmov r2, r9\n"
- "\tlsls r1, r2, 16\n"
- "\tadds r0, r6, 0\n"
- "\tasrs r1, 16\n"
- "\tbl MapGridGetMetatileBehaviorAt\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tldr r1, [sp, 0x14]\n"
- "\tsubs r0, r3, r1\n"
- "\tldr r2, [sp, 0x8]\n"
- "\tadds r1, r0, 0\n"
- "\tmuls r1, r2\n"
- "\tadds r1, r7\n"
- "\tldr r3, [sp]\n"
- "\tldr r0, [r3, 0x1C]\n"
- "\tlsls r1, 1\n"
- "\tadds r1, r0\n"
- "\tmovs r2, 0x80\n"
- "\tlsls r2, 2\n"
- "\tadds r0, r2, 0\n"
- "\tldrh r1, [r1]\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tbl GetBehaviorByMetatileId\n"
- "\tmovs r3, 0xF0\n"
- "\tlsls r3, 8\n"
- "\tadds r1, r3, 0\n"
- "\tadds r5, r1, 0\n"
- "\tands r5, r0\n"
- "\tadds r0, r4, 0\n"
- "\tbl MetatileBehavior_IsNormal\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFE0C\n"
- "\tadds r0, r4, 0\n"
- "\tadds r1, r5, 0\n"
- "\tbl sub_80FFB6C\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFE0C\n"
- "\tb _080FFFF4\n"
- "_080FFE0C:\n"
- "\tmov r0, r10\n"
- "\tadds r1, r6, 0\n"
- "\tldr r3, [sp, 0x20]\n"
- "\tasrs r2, r3, 16\n"
- "\tadds r3, r5, 0\n"
- "\tbl sub_80FFB94\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFE22\n"
- "\tb _080FFFF4\n"
- "_080FFE22:\n"
- "\tmov r1, r8\n"
- "\tlsrs r0, r1, 16\n"
- "\tldr r2, [sp, 0x20]\n"
- "\tlsrs r1, r2, 16\n"
- "\tmovs r2, 0\n"
- "\tbl GetObjectEventIdByXYZ\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x10\n"
- "\tbeq _080FFE3A\n"
- "\tb _080FFFF4\n"
- "_080FFE3A:\n"
- "\tadds r0, r7, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tldr r2, _080FFF18 @ =gTasks\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcc _080FFDA0\n"
- "_080FFE48:\n"
- "\tldr r1, [sp, 0x14]\n"
- "\tlsls r0, r1, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r3, [sp, 0x18]\n"
- "\tcmp r6, r3\n"
- "\tblt _080FFD82\n"
- "_080FFE54:\n"
- "\tldr r0, [sp, 0x1C]\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r2\n"
- "\tldrh r0, [r0, 0xA]\n"
- "\tldr r1, [sp, 0x4]\n"
- "\tsubs r0, r1\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcc _080FFE74\n"
- "\tb _08100024\n"
- "_080FFE74:\n"
- "\tlsls r0, 16\n"
- "\tstr r0, [sp, 0x20]\n"
- "_080FFE78:\n"
- "\tldr r0, [sp, 0x1C]\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tldr r1, _080FFF18 @ =gTasks\n"
- "\tadds r0, r1\n"
- "\tldrh r0, [r0, 0x8]\n"
- "\tadds r0, r7\n"
- "\tlsls r0, 16\n"
- "\tmov r8, r0\n"
- "\tasrs r6, r0, 16\n"
- "\tmov r2, r9\n"
- "\tlsls r1, r2, 16\n"
- "\tadds r0, r6, 0\n"
- "\tasrs r1, 16\n"
- "\tbl MapGridGetMetatileBehaviorAt\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tldr r3, [sp]\n"
- "\tldr r0, [r3, 0x1C]\n"
- "\tlsls r1, r7, 1\n"
- "\tadds r1, r0\n"
- "\tmovs r2, 0x80\n"
- "\tlsls r2, 2\n"
- "\tadds r0, r2, 0\n"
- "\tldrh r1, [r1]\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tbl GetBehaviorByMetatileId\n"
- "\tmovs r3, 0xF0\n"
- "\tlsls r3, 8\n"
- "\tadds r1, r3, 0\n"
- "\tadds r5, r1, 0\n"
- "\tands r5, r0\n"
- "\tadds r0, r4, 0\n"
- "\tbl MetatileBehavior_IsNormal\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFEDA\n"
- "\tadds r0, r4, 0\n"
- "\tbl MetatileBehavior_IsSecretBaseNorthWall\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFEDA\n"
- "\tb _080FFFF4\n"
- "_080FFEDA:\n"
- "\tmov r0, r10\n"
- "\tadds r1, r6, 0\n"
- "\tldr r3, [sp, 0x20]\n"
- "\tasrs r2, r3, 16\n"
- "\tadds r3, r5, 0\n"
- "\tbl sub_80FFB94\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _080FFEF0\n"
- "\tb _080FFFF4\n"
- "_080FFEF0:\n"
- "\tmov r1, r8\n"
- "\tlsrs r0, r1, 16\n"
- "\tldr r2, [sp, 0x20]\n"
- "\tlsrs r1, r2, 16\n"
- "\tmovs r2, 0\n"
- "\tbl GetObjectEventIdByXYZ\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tcmp r4, 0\n"
- "\tbeq _080FFF0A\n"
- "\tcmp r4, 0x10\n"
- "\tbne _080FFFF4\n"
- "_080FFF0A:\n"
- "\tadds r0, r7, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcc _080FFE78\n"
- "\tb _08100024\n"
- "\t.align 2, 0\n"
- "_080FFF18: .4byte gTasks\n"
- "_080FFF1C:\n"
- "\tmovs r6, 0\n"
- "\tldr r0, [sp, 0x4]\n"
- "\tcmp r6, r0\n"
- "\tbcc _080FFF26\n"
- "\tb _08100024\n"
- "_080FFF26:\n"
- "\tmov r1, r10\n"
- "\tlsls r0, r1, 2\n"
- "\tadd r0, r10\n"
- "\tlsls r1, r0, 3\n"
- "\tldr r2, _080FFF9C @ =gTasks\n"
- "\tadds r0, r1, r2\n"
- "\tldrh r0, [r0, 0xA]\n"
- "\tsubs r0, r6\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcs _080FFF8C\n"
- "\tadds r0, r2, 0\n"
- "\tadds r1, r0\n"
- "\tmov r8, r1\n"
- "\tmov r1, r9\n"
- "\tlsls r0, r1, 16\n"
- "\tasrs r5, r0, 16\n"
- "_080FFF50:\n"
- "\tmov r2, r8\n"
- "\tldrh r0, [r2, 0x8]\n"
- "\tadds r0, r7\n"
- "\tlsls r0, 16\n"
- "\tasrs r4, r0, 16\n"
- "\tadds r0, r4, 0\n"
- "\tadds r1, r5, 0\n"
- "\tbl MapGridGetMetatileBehaviorAt\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tbl MetatileBehavior_IsSecretBaseNorthWall\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _080FFFF4\n"
- "\tadds r0, r4, 0\n"
- "\tadds r1, r5, 0x1\n"
- "\tbl MapGridGetMetatileIdAt\n"
- "\tmovs r1, 0xA3\n"
- "\tlsls r1, 2\n"
- "\tcmp r0, r1\n"
- "\tbeq _080FFFF4\n"
- "\tadds r0, r7, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcc _080FFF50\n"
- "_080FFF8C:\n"
- "\tadds r0, r6, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r0, [sp, 0x4]\n"
- "\tcmp r6, r0\n"
- "\tbcc _080FFF26\n"
- "\tb _08100024\n"
- "\t.align 2, 0\n"
- "_080FFF9C: .4byte gTasks\n"
- "_080FFFA0:\n"
- "\tmov r3, r10\n"
- "\tlsls r1, r3, 2\n"
- "\tadds r0, r1, r3\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r2\n"
- "\tldrh r0, [r0, 0xA]\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0\n"
- "\tstr r1, [sp, 0x1C]\n"
- "\tldr r0, [sp, 0x8]\n"
- "\tcmp r7, r0\n"
- "\tbcs _08100024\n"
- "\tadds r6, r2, 0\n"
- "\tmov r1, r9\n"
- "\tlsls r1, 16\n"
- "\tstr r1, [sp, 0x20]\n"
- "_080FFFC0:\n"
- "\tldr r0, [sp, 0x1C]\n"
- "\tadd r0, r10\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r6\n"
- "\tldrh r0, [r0, 0x8]\n"
- "\tadds r0, r7\n"
- "\tlsls r0, 16\n"
- "\tlsrs r5, r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmov r2, r9\n"
- "\tlsls r1, r2, 16\n"
- "\tasrs r1, 16\n"
- "\tbl MapGridGetMetatileBehaviorAt\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tldr r3, [sp]\n"
- "\tldrb r0, [r3, 0x12]\n"
- "\tcmp r0, 0x5\n"
- "\tbne _080FFFF8\n"
- "_080FFFE8:\n"
- "\tadds r0, r4, 0\n"
- "\tbl MetatileBehavior_IsLargeMatCenter\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _08100004\n"
- "_080FFFF4:\n"
- "\tmovs r0, 0\n"
- "\tb _08100026\n"
- "_080FFFF8:\n"
- "\tadds r0, r4, 0\n"
- "\tbl MetatileBehavior_IsSecretBaseLargeMatEdge\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _080FFFE8\n"
- "_08100004:\n"
- "\tadds r0, r5, 0\n"
- "\tldr r2, [sp, 0x20]\n"
- "\tlsrs r1, r2, 16\n"
- "\tmovs r2, 0\n"
- "\tbl GetObjectEventIdByXYZ\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x10\n"
- "\tbne _080FFFF4\n"
- "\tadds r0, r7, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tldr r3, [sp, 0x8]\n"
- "\tcmp r7, r3\n"
- "\tbcc _080FFFC0\n"
- "_08100024:\n"
- "\tmovs r0, 0x1\n"
- "_08100026:\n"
- "\tadd sp, 0x24\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1\n"
- ".syntax divided\n");
-}
-#endif
void sub_8100038(u8 taskId)
{
@@ -3967,131 +3431,42 @@ void sub_81013B8(u8 a0, u8 a1, u8 a2, u8 a3)
}
}
-#ifdef NONMATCHING
void sub_8101460(u8 taskId)
{
u8 i;
u8 xOff;
u8 yOff;
+ u8 var1;
+ u32 var2;
+
gUnknown_02039234 = 0;
if (sub_8101340(taskId) != TRUE)
{
- for (i=0; i<ewram_1f000.size; i++)
+ for (i = 0; i < ewram_1f000.size; i++)
{
- if (ewram_1f000.items[i] == 0) // This is using the wrong register!
- {
- continue;
- }
- sub_8101118(ewram_1f000.items[i], gUnknown_020391B4);
- if (sub_8101200(taskId, i, gUnknown_020391B4) == TRUE)
+ var1 = ewram_1f000.items[i];
+ if (var1 != 0)
{
- gUnknown_020391B4[0].decorId = i;
- gUnknown_02039234++;
- break;
+ sub_8101118(var1, gUnknown_020391B4);
+ if (sub_8101200(taskId, i, gUnknown_020391B4) == TRUE)
+ {
+ gUnknown_020391B4[0].decorId = i;
+ gUnknown_02039234++;
+ break;
+ }
}
}
if (gUnknown_02039234 != 0)
{
xOff = ewram_1f000.pos[gUnknown_020391B4[0].decorId] >> 4;
yOff = ewram_1f000.pos[gUnknown_020391B4[0].decorId] & 0xf;
- sub_81013B8(xOff, yOff - gUnknown_020391B4[0].height + 1, xOff + gUnknown_020391B4[0].width - 1, yOff);
+ var1 = yOff - gUnknown_020391B4[0].height + 1;
+ var2 = gUnknown_020391B4[0].width + xOff - 1;
+
+ sub_81013B8(xOff, var1, var2, yOff);
}
}
}
-#else
-NAKED
-void sub_8101460(u8 taskId)
-{
- asm(".syntax unified\n"
- "\tpush {r4-r7,lr}\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r4, _081014B8 @ =gUnknown_02039234\n"
- "\tmovs r0, 0\n"
- "\tstrb r0, [r4]\n"
- "\tadds r0, r6, 0\n"
- "\tbl sub_8101340\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x1\n"
- "\tbeq _08101504\n"
- "\tmovs r5, 0\n"
- "\tldr r0, _081014BC @ =ewram_1f000\n"
- "\tldrb r1, [r0, 0x8]\n"
- "\tcmp r5, r1\n"
- "\tbcs _081014D2\n"
- "\tadds r7, r4, 0\n"
- "_08101486:\n"
- "\tldr r0, [r0]\n"
- "\tadds r0, r5\n"
- "\tldrb r1, [r0] @ compiler incorrectly uses r0 for this and the next instruction\n"
- "\tcmp r1, 0\n"
- "\tbeq _081014C4\n"
- "\tldr r4, _081014C0 @ =gUnknown_020391B4\n"
- "\tadds r0, r1, 0\n"
- "\tadds r1, r4, 0\n"
- "\tbl sub_8101118\n"
- "\tadds r0, r6, 0\n"
- "\tadds r1, r5, 0\n"
- "\tadds r2, r4, 0\n"
- "\tbl sub_8101200\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x1\n"
- "\tbne _081014C4\n"
- "\tstrb r5, [r4]\n"
- "\tldrb r0, [r7]\n"
- "\tadds r0, 0x1\n"
- "\tstrb r0, [r7]\n"
- "\tb _081014D2\n"
- "\t.align 2, 0\n"
- "_081014B8: .4byte gUnknown_02039234\n"
- "_081014BC: .4byte 0x201f000\n"
- "_081014C0: .4byte gUnknown_020391B4\n"
- "_081014C4:\n"
- "\tadds r0, r5, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tldr r0, _0810150C @ =ewram_1f000\n"
- "\tldrb r1, [r0, 0x8]\n"
- "\tcmp r5, r1\n"
- "\tbcc _08101486\n"
- "_081014D2:\n"
- "\tldr r0, _08101510 @ =gUnknown_02039234\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbeq _08101504\n"
- "\tldr r0, _0810150C @ =ewram_1f000\n"
- "\tldr r2, _08101514 @ =gUnknown_020391B4\n"
- "\tldrb r1, [r2]\n"
- "\tldr r0, [r0, 0x4]\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tlsrs r0, r1, 4\n"
- "\tmovs r3, 0xF\n"
- "\tands r3, r1\n"
- "\tldrb r1, [r2, 0x2]\n"
- "\tsubs r1, r3, r1\n"
- "\tadds r1, 0x1\n"
- "\tlsls r1, 24\n"
- "\tlsrs r1, 24\n"
- "\tldrb r2, [r2, 0x1]\n"
- "\tadds r2, r0\n"
- "\tsubs r2, 0x1\n"
- "\tlsls r2, 24\n"
- "\tlsrs r2, 24\n"
- "\tbl sub_81013B8\n"
- "_08101504:\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_0810150C: .4byte 0x201f000\n"
- "_08101510: .4byte gUnknown_02039234\n"
- "_08101514: .4byte gUnknown_020391B4\n"
- ".syntax divided\n");
-}
-#endif
void sub_8101518(u8 taskId)
{
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index cd6e67c8c..cb0bf760f 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -681,24 +681,16 @@ void SetPlayerAvatarTransitionFlags(u16 a)
static void DoPlayerAvatarTransition(void)
{
u8 i;
- u32 flags = gPlayerAvatar.unk1;
+ u8 flags = gPlayerAvatar.unk1;
if (flags != 0)
{
- for (i = 0; i < 8; i++, flags >>= 1)
+ for (i = 0; i < ARRAY_COUNT(gUnknown_0830FC14); i++, flags >>= 1)
{
-#ifdef NONMATCHING
if (flags & 1)
{
gUnknown_0830FC14[i](&gObjectEvents[gPlayerAvatar.objectEventId]);
}
-#else
- if (flags & 1)
- {
- register void (*const *funcs)(struct ObjectEvent *) asm("r0") = gUnknown_0830FC14;
- funcs[i](&gObjectEvents[gPlayerAvatar.objectEventId]);
- }
-#endif
}
gPlayerAvatar.unk1 = 0;
}
diff --git a/src/field_tasks.c b/src/field_tasks.c
index a56de5746..abc4e1505 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -147,46 +147,46 @@ void ResetFieldTasksArgs(void)
}
}
-const struct MetatileOffset gUnknown_08376384[][2] = {
- {{ 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, { 0, 1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)}},
- {{ 0, -1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)}},
- {{ 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, { 1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)}},
- {{ -1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)}}
+const struct MetatileOffset gUnknown_08376384[] = {
+ { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)},
+ { 0, -1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)},
+ { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)},
+ {-1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)}
};
-const struct MetatileOffset gUnknown_083763A4[][2] = {
- {{ 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, { 0, 1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)}},
- {{ 0, -1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)}},
- {{ 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, { 1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)}},
- {{ -1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)}}
+const struct MetatileOffset gUnknown_083763A4[] = {
+ { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)},
+ { 0, -1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)},
+ { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)},
+ {-1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)}
};
-const struct MetatileOffset gUnknown_083763C4[][2] = {
- {{ 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, { 0, 1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)}},
- {{ 0, -1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)}},
- {{ 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, { 1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)}},
- {{ -1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)}}
+const struct MetatileOffset gUnknown_083763C4[] = {
+ { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)},
+ { 0, -1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)},
+ { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)},
+ {-1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)}
};
void DummyPerStepCallback(u8 taskId) {}
-const struct MetatileOffset *sub_80695E0(const struct MetatileOffset a0[][2], s8 a1)
+const struct MetatileOffset *sub_80695E0(const struct MetatileOffset *a0, u16 a1)
{
if (MetatileBehavior_IsPacifidlogVerticalLog1(a1))
{
- return a0[0];
+ return &a0[0 * 2];
}
else if (MetatileBehavior_IsPacifidlogVerticalLog2(a1))
{
- return a0[1];
+ return &a0[1 * 2];
}
else if (MetatileBehavior_IsPacifidlogHorizontalLog1(a1))
{
- return a0[2];
+ return &a0[2 * 2];
}
else if (MetatileBehavior_IsPacifidlogHorizontalLog2(a1))
{
- return a0[3];
+ return &a0[3 * 2];
}
else
{
@@ -194,95 +194,23 @@ const struct MetatileOffset *sub_80695E0(const struct MetatileOffset a0[][2], s8
}
}
-#ifdef NONMATCHING
-void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag)
+void sub_8069638(const struct MetatileOffset *offsets, s16 x, s16 y, bool32 flag)
{
- const struct MetatileOffset *offsetData = sub_80695E0(offsets, MapGridGetMetatileBehaviorAt(x, y));
- const struct MetatileOffset *offsetdata2 = offsetData;
- if (offsetData != NULL)
+ offsets = sub_80695E0(offsets, MapGridGetMetatileBehaviorAt(x, y));
+ if (offsets)
{
- MapGridSetMetatileIdAt(x + offsetData[0].x, y + offsetData[0].y, offsetData[0].tileId);
+ MapGridSetMetatileIdAt(x + offsets[0].x, y + offsets[0].y, offsets[0].tileId);
if (flag)
{
- CurrentMapDrawMetatileAt(x + offsetData[0].x, y + offsetData[0].y);
+ CurrentMapDrawMetatileAt(x + offsets[0].x, y + offsets[0].y);
}
- MapGridSetMetatileIdAt(x + offsetdata2[1].x, y + offsetdata2[1].y, offsetdata2[1].tileId);
+ MapGridSetMetatileIdAt(x + offsets[1].x, y + offsets[1].y, offsets[1].tileId);
if (flag)
{
- CurrentMapDrawMetatileAt(x + offsetdata2[1].x, y + offsetdata2[1].y);
+ CurrentMapDrawMetatileAt(x + offsets[1].x, y + offsets[1].y);
}
}
}
-#else
-NAKED
-void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r8\n"
- "\tpush {r7}\n"
- "\tadds r5, r0, 0\n"
- "\tmov r8, r3\n"
- "\tlsls r1, 16\n"
- "\tasrs r6, r1, 16\n"
- "\tlsls r2, 16\n"
- "\tasrs r7, r2, 16\n"
- "\tadds r0, r6, 0\n"
- "\tadds r1, r7, 0\n"
- "\tbl MapGridGetMetatileBehaviorAt\n"
- "\tadds r1, r0, 0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r1, 16\n"
- "\tadds r0, r5, 0\n"
- "\tbl sub_80695E0\n"
- "\tadds r4, r0, 0\n"
- "\tadds r5, r4, 0\n"
- "\tcmp r4, 0\n"
- "\tbeq _080696B6\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r4, r0]\n"
- "\tadds r0, r6, r0\n"
- "\tmovs r1, 0x1\n"
- "\tldrsb r1, [r4, r1]\n"
- "\tadds r1, r7, r1\n"
- "\tldrh r2, [r4, 0x2]\n"
- "\tbl MapGridSetMetatileIdAt\n"
- "\tmov r0, r8\n"
- "\tcmp r0, 0\n"
- "\tbeq _0806968E\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r4, r0]\n"
- "\tadds r0, r6, r0\n"
- "\tmovs r1, 0x1\n"
- "\tldrsb r1, [r4, r1]\n"
- "\tadds r1, r7, r1\n"
- "\tbl CurrentMapDrawMetatileAt\n"
- "_0806968E:\n"
- "\tmovs r0, 0x4\n"
- "\tldrsb r0, [r5, r0]\n"
- "\tadds r0, r6, r0\n"
- "\tmovs r1, 0x5\n"
- "\tldrsb r1, [r5, r1]\n"
- "\tadds r1, r7, r1\n"
- "\tldrh r2, [r5, 0x6]\n"
- "\tbl MapGridSetMetatileIdAt\n"
- "\tmov r0, r8\n"
- "\tcmp r0, 0\n"
- "\tbeq _080696B6\n"
- "\tmovs r0, 0x4\n"
- "\tldrsb r0, [r5, r0]\n"
- "\tadds r0, r6, r0\n"
- "\tmovs r1, 0x5\n"
- "\tldrsb r1, [r5, r1]\n"
- "\tadds r1, r7, r1\n"
- "\tbl CurrentMapDrawMetatileAt\n"
- "_080696B6:\n"
- "\tpop {r3}\n"
- "\tmov r8, r3\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0");
-}
-#endif
void sub_80696C0(s16 x, s16 y, bool32 flag)
{
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 6ba284810..8be4b217c 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -460,7 +460,7 @@ void MapGridSetMetatileEntryAt(int x, int y, u16 metatile)
}
}
-u32 GetBehaviorByMetatileId(u16 metatile)
+u16 GetBehaviorByMetatileId(u16 metatile)
{
u16 *attributes;
if (metatile < NUM_METATILES_IN_PRIMARY)
diff --git a/src/libs/agb_flash_mx.c b/src/libs/agb_flash_mx.c
index b4f710f36..5e2b0bce1 100644
--- a/src/libs/agb_flash_mx.c
+++ b/src/libs/agb_flash_mx.c
@@ -26,7 +26,7 @@ const struct FlashSetupInfo MX29L010 =
0 // appears to be unused
},
{ 3, 1 }, // wait state setup data
-#if defined(GERMAN) && defined(SAPPHIRE)
+#if (GERMAN && SAPPHIRE && !DEBUG) // OK, why !DEBUG?
{ { 0xBF, 0xD4 } } // ID
#else
{ { 0xC2, 0x09 } } // ID
diff --git a/src/main.c b/src/main.c
index 433143b38..d8779b90c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -27,12 +27,11 @@ static void IntrDummy(void);
const u8 gGameVersion = GAME_VERSION;
const u8 gGameLanguage = GAME_LANGUAGE;
-// The debug menu expects this exact format. With the English build string, it
-// will overflow on the title debug menu, outputting '9999ィ'.
-#if defined(GERMAN) || DEBUG
-const char BuildDateTime[] = "$Name: debug-Euro-2003-05-09-A $";
-#elif defined(ENGLISH)
-const char BuildDateTime[] = "2002 10 15 20:34";
+// International versions of the debug menu use a different format.
+#if defined(ENGLISH)
+const u8 BuildDateTime[] = "2002 10 15 20:34";
+#elif defined(GERMAN)
+const u8 BuildDateTime[] = "$Name: debug-Euro-2003-05-09-A $";
#endif
const IntrFunc gIntrTableTemplate[] =
diff --git a/src/mauville_man.c b/src/mauville_man.c
index 6fa00b19e..96de37c79 100644
--- a/src/mauville_man.c
+++ b/src/mauville_man.c
@@ -707,9 +707,6 @@ static void Task_BardSong(u8 taskId)
struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard;
u8 *str = gStringVar4 + task->tCharIndex;
u16 wordLen = 0;
- // Can't get it to match without hacking
- u32 temp;
- register s16 zero asm("r1");
while (*str != CHAR_SPACE
&& *str != CHAR_NEWLINE
@@ -723,17 +720,20 @@ static void Task_BardSong(u8 taskId)
gUnknown_020388BC = MACRO1(bard->songLyrics[task->tCurrWord]);
else
gUnknown_020388BC = MACRO1(bard->temporaryLyrics[task->tCurrWord]);
- temp = gUnknown_03005DA0.var04 / wordLen;
- zero = 0;
- gUnknown_03005DA0.var04 = temp;
+ gUnknown_03005DA0.var04 /= wordLen;
if (gUnknown_03005DA0.var04 <= 0)
gUnknown_03005DA0.var04 = 1;
task->tCurrWord++;
if (task->data[2] == 0)
+ {
task->tState = 3;
+ task->data[1] = 0;
+ }
else
+ {
task->tState = 5;
- task->data[1] = zero;
+ task->data[1] = 0;
+ }
}
break;
case 5:
diff --git a/src/money.c b/src/money.c
index 53800f854..bf93f6dd1 100644
--- a/src/money.c
+++ b/src/money.c
@@ -176,8 +176,32 @@ void sub_80B7AEC(u32 arg0, u8 right, u8 top)
#endif
}
+#ifdef NONMATCHING
+void Draw10000Sprite(u8 var1, u8 var2, s32 var3)
+{
+ // 2D/3D array manipulation off the wazoo.
+ // Converting to 2D/3D array casts makes it match less!
+ u16 i;
+
+ CpuFastSet(
+ (void*)&gDecoration10000_Gfx[var3 * 0x100],
+ (void*)(VRAM + 0x8000 + (var2 * 0x3c0) + ((var1 + 1) * 0x20)),
+ 32);
+ CpuFastSet(
+ (void*)&gDecoration10000_Gfx[var3 * 0x100 + 0x80],
+ (void*)(VRAM + 0x8000 + ((var2 + 1) * 0x3c0) + ((var1 + 1) * 0x20)),
+ 32);
+
+ for (i = 0; i < 4; i++)
+ {
+ u32 base = var2 * 0x20 + var1 + i;
+ ((u16 *)(VRAM + 0xF800))[base] = var2 * 0x1e + 1 + var1 + (u16)-4096;
+ ((u16 *)(VRAM + 0xF840))[base] = (var2 + 1) * 0x1e + 1 + var1 + (u16)-4096;
+ };
+}
+#else
NAKED
-void Draw10000Sprite(u8 var1, u8 var2, int var3)
+void Draw10000Sprite(u8 var1, u8 var2, s32 var3)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -269,6 +293,7 @@ _080B7BE4: .4byte 0x0600f800\n\
_080B7BE8: .4byte 0x0600f840\n\
.syntax divided\n");
}
+#endif
void UpdateMoneyWindow(u32 amount, u8 x, u8 y)
{
diff --git a/src/pokemon_1.c b/src/pokemon_1.c
index 1883c8754..aeeb6080d 100644
--- a/src/pokemon_1.c
+++ b/src/pokemon_1.c
@@ -1764,6 +1764,8 @@ void CalculateMonStats(struct Pokemon *mon)
}
#if DEBUG
+// TODO: check other revisions
+#if !(ENGLISH && REVISION == 0)
void Nakamura_NakaGenderTest_RecalcStats(struct Pokemon *mon)
{
s32 currentHP = GetMonData(mon, MON_DATA_HP, NULL);
@@ -1809,6 +1811,7 @@ void Nakamura_NakaGenderTest_RecalcStats(struct Pokemon *mon)
SetMonData(mon, MON_DATA_HP, &currentHP);
}
#endif
+#endif
void ExpandBoxMon(const struct BoxPokemon *src, struct Pokemon *dest)
{
diff --git a/src/pokemon_storage_system_4.c b/src/pokemon_storage_system_4.c
index db35d60ea..6a1b78192 100644
--- a/src/pokemon_storage_system_4.c
+++ b/src/pokemon_storage_system_4.c
@@ -46,8 +46,8 @@ EWRAM_DATA struct UnkStruct_2000020 *gUnknown_020384EC = NULL;
void sub_809900C(u8 boxId, s8 a1);
s8 sub_8099D90(u8 boxId);
void sub_8099EB0(u8 boxId, s8 a1);
-void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3);
-void sub_809A14C(u16 *vdest);
+void CopyWallpaperTilemap(u16 *buffer, const u16 *tilemap, s8 direction, u8 offset);
+void ClearLowestWallpaperTiles(u16 *buffer);
void sub_809A23C(u8 boxId);
void sub_809A3D0(u8 boxId, s8 a1);
void sub_809A598(void);
@@ -444,448 +444,169 @@ void sub_8099EB0(u8 boxId, s8 a1)
if (a1)
{
gPokemonStorageSystemPtr->unk_08ba = gPokemonStorageSystemPtr->unk_08ba ? FALSE : TRUE;
- sub_809A14C(BG_SCREEN_ADDR(26));
+ ClearLowestWallpaperTiles(BG_SCREEN_ADDR(26));
}
wallpaperTable = gWallpaperTable +gPokemonStorage.wallpaper[boxId];
LoadPalette(wallpaperTable->palettes, gPokemonStorageSystemPtr->unk_08ba * 0x30 + 0x40, 0x60);
LZ77UnCompWram(wallpaperTable->tileMap, gPokemonStorageSystemPtr->unk_0d62);
- sub_8099F58(BG_SCREEN_ADDR(26), gPokemonStorageSystemPtr->unk_0d62, a1, gPokemonStorageSystemPtr->unk_08ba);
+ CopyWallpaperTilemap(BG_SCREEN_ADDR(26), gPokemonStorageSystemPtr->unk_0d62, a1, gPokemonStorageSystemPtr->unk_08ba);
LZ77UnCompVram(wallpaperTable->tiles, BG_CHAR_ADDR(2) + (gPokemonStorageSystemPtr->unk_08ba << 13));
}
-#ifdef NONMATCHING
-void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3)
+/*
+ Copies the wallpaper rectangle tilemap to a buffer,
+ depending on the wallpaper type.
+
+ - buffer : Where to copy the wallpaper to.
+ - tilemap : The wallpaper tilemap to copy.
+ - direction : The direction of the wallpaper.
+ - offset : The offset of the wallpaper tilemap.
+
+ Also depends on stored BG2 X variable in PSS.
+*/
+void CopyWallpaperTilemap(u16 *buffer, const u16 *tilemap, s8 direction, u8 offset)
{
- s16 r6;
- s16 r3;
- u16 sp0 = a3 << 8;
- u16 sp4 = (a3 * 3 + 4) << 12;
- u16 *r4;
- u16 *r7;
- u16 i;
- u16 j;
- s16 sp8 = ((gPokemonStorageSystemPtr->unk_08b4 >> 3) + 10 + a2 * 24) & 0x3f;
- if (sp8 < 13)
+ u16 *dest; // For either all of the wallpaper tilemap, or the first half of it.
+ u16 *dest2; // The second half of wallpaper tilemap; used in case of two halves.
+ u16 *fillDest; // For blanking; used when direction is set.
+
+ u16 x, y; // Temps for copying the tilemap.
+
+ // Temps for copying the tile and palette metadata of the wallpaper.
+ u16 tileMeta;
+ u16 tileOffset = offset * 256;
+ u16 paletteMeta;
+ u16 paletteOffset = (offset * 3 + 4) << 12;
+
+ s16 rectWidth; // The width of the wallpaper, or it's first half.
+ s16 rectWidth2; // Used in case of two halves.
+ s16 rectX = ((gPokemonStorageSystemPtr->unk_08b4 / 8 + 10) + (direction * 24)) & 0x3F;
+
+ s16 fillX; // For blanking; used when direction is set.
+
+ /*
+ Bull**** agbcc behavior discovered here
+ while attempting to match this function:
+ x + (y + z) is NOT the same as x + y + z.
+ Even though it SHOULDN'T make a difference.
+
+ Rather, it's the same as x + z + y. That's
+ old codegen for you.
+ */
+ if (rectX < 13)
{
- r6 = 20;
- r3 = 0;
- r4 = vdest + sp8 + 0x40;
- r7 = NULL;
+ // Copy the wallpaper in full.
+ rectWidth = 20;
+ rectWidth2 = 0;
+ dest = buffer + (rectX + 64);
+ dest2 = NULL;
}
- else if (sp8 < 32)
+ else if (rectX < 32)
{
- r6 = 32 - sp8;
- r3 = 20 - r6;
- r4 = vdest + sp8 + 0x40;
- r7 = vdest + 0x440;
+ // Split copying the wallpaper into two operations.
+ rectWidth = 32 - rectX;
+ rectWidth2 = 20 - rectWidth;
+ dest = buffer + (rectX + 64);
+ dest2 = buffer + 0x440;
}
- else if (sp8 < 45)
+ else if (rectX < 45)
{
- r6 = 20;
- r3 = 0;
- r4 = vdest + sp8 + 0x420;
- r7 = NULL;
+ // Copy the wallpaper in full.
+ rectWidth = 20;
+ rectWidth2 = 0;
+ dest = buffer + (rectX + 0x420);
+ dest2 = NULL;
}
else
{
- r6 = 64 - sp8;
- r3 = 20 - r6;
- r4 = vdest + sp8 + 0x420;
- r7 = vdest + 0x40;
+ // Split copying the wallpaper into two operations.
+ rectWidth = 64 - rectX;
+ rectWidth2 = 20 - rectWidth;
+ dest = buffer + (rectX + 0x420);
+ dest2 = buffer + 0x40;
}
- for (i = 0; i < 18; i++)
+
+ for (y = 0; y < 18; y++)
{
- for (j = 0; j < r6; j++)
+ for(x = 0; x < rectWidth; x++)
{
- u16 tile = ((*src & 0xfff) + sp0) | ((*src & 0xf000) + sp4);
- r4[j] = tile;
- src++;
+ // Get the tile and palette metadata for each
+ // 2 bytes, and copy over into the buffer.
+ tileMeta = (*tilemap & 0xfff) + tileOffset;
+ paletteMeta = (*tilemap & 0xf000) + paletteOffset;
+ dest[x] = paletteMeta | tileMeta;
+ tilemap++;
}
- for (j = 0; j < r3; j++)
+ for(x = 0; x < rectWidth2; x++)
{
- u16 tile = ((*src & 0xfff) + sp0) | ((*src & 0xf000) + sp4);
- r7[j] = tile;
- src++;
+ // Repeat the same process again in case we need
+ // to copy halves.
+ tileMeta = (*tilemap & 0xfff) + tileOffset;
+ paletteMeta = (*tilemap & 0xf000) + paletteOffset;
+ dest2[x] = paletteMeta | tileMeta;
+ tilemap++;
}
- r4 += 0x20;
- r7 += 0x20;
+ dest += 0x20;
+ dest2 += 0x20;
}
- if (a2)
+
+ if (direction != 0)
{
- s16 r4_2;
- u16 *r2;
- if (a2 > 0)
- r4_2 = (sp8 + 20) & 0x3f;
+ fillX = (direction > 0 ? rectX + 20 : rectX - 4) & 0x3F;
+
+ if(fillX < 32)
+ fillDest = buffer + (fillX + 0x40);
else
- r4_2 = (sp8 - 4) & 0x3f;
- r2 = r4_2 < 0x20 ? vdest + r4_2 + 0x40 : vdest + r4_2 + 0x420;
- for (i = 0; i < 4; i++)
+ fillDest = buffer + (fillX + 0x420);
+
+ for(x = 0; x < 4; x++)
{
- for (j = 0; j < 18; j++)
+ for(y = 0; y < 18; y++)
{
- *r2 = 0;
- r2 += 0x20;
+ *fillDest = 0; // Blank the buffer.
+ fillDest += 0x20;
}
- r4_2++;
- r4_2 &= 0x3f;
- r2 = r4_2 < 0x20 ? vdest + r4_2 + 0x40 : vdest + r4_2 + 0x420;
+ // Needs to be one statement, or else it won't match.
+ // fillX = ++fillX & 0x3F; matches, but to have consistency
+ // with ClearLowestWallpaperTiles, which requires var + 1
+ // instead for a similar operation, we'll use that.
+ fillX = (fillX + 1) & 0x3F;
+
+ if (fillX < 32)
+ fillDest = buffer + (fillX + 0x40);
+ else
+ fillDest = buffer + (fillX + 0x420);
}
}
}
-#else
-NAKED void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3)
-{
- 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, 0x20\n"
- "\tmov r9, r0\n"
- "\tadds r5, r1, 0\n"
- "\tlsls r2, 24\n"
- "\tlsls r3, 24\n"
- "\tlsrs r3, 24\n"
- "\tlsls r0, r3, 8\n"
- "\tstr r0, [sp]\n"
- "\tlsls r0, r3, 1\n"
- "\tadds r0, r3\n"
- "\tadds r0, 0x4\n"
- "\tlsls r0, 28\n"
- "\tlsrs r0, 16\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tldr r0, _08099FB8 @ =gPokemonStorageSystemPtr\n"
- "\tldr r0, [r0]\n"
- "\tldr r1, _08099FBC @ =0x000008b4\n"
- "\tadds r0, r1\n"
- "\tldrh r1, [r0]\n"
- "\tlsrs r1, 3\n"
- "\tadds r1, 0xA\n"
- "\tlsrs r0, r2, 24\n"
- "\tmov r8, r0\n"
- "\tasrs r2, 24\n"
- "\tlsls r0, r2, 1\n"
- "\tadds r0, r2\n"
- "\tlsls r0, 3\n"
- "\tadds r1, r0\n"
- "\tmovs r0, 0x3F\n"
- "\tands r1, r0\n"
- "\tstr r1, [sp, 0x8]\n"
- "\tadds r2, r1, 0\n"
- "\tcmp r2, 0xC\n"
- "\tbgt _08099FC0\n"
- "\tmovs r6, 0x14\n"
- "\tmovs r3, 0\n"
- "\tlsls r0, r2, 1\n"
- "\tadds r0, 0x80\n"
- "\tmov r1, r9\n"
- "\tadds r4, r1, r0\n"
- "\tmovs r7, 0\n"
- "\tb _0809A020\n"
- "\t.align 2, 0\n"
- "_08099FB8: .4byte gPokemonStorageSystemPtr\n"
- "_08099FBC: .4byte 0x000008b4\n"
- "_08099FC0:\n"
- "\tcmp r2, 0x1F\n"
- "\tbgt _08099FE6\n"
- "\tmovs r0, 0x20\n"
- "\tsubs r0, r2\n"
- "\tlsls r0, 16\n"
- "\tmovs r1, 0x14\n"
- "\tlsrs r6, r0, 16\n"
- "\tasrs r0, 16\n"
- "\tsubs r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r3, r1, 16\n"
- "\tlsls r0, r2, 1\n"
- "\tadds r0, 0x80\n"
- "\tmov r2, r9\n"
- "\tadds r4, r2, r0\n"
- "\tmovs r7, 0x88\n"
- "\tlsls r7, 4\n"
- "\tadd r7, r9\n"
- "\tb _0809A020\n"
- "_08099FE6:\n"
- "\tcmp r2, 0x2C\n"
- "\tbgt _08099FFE\n"
- "\tmovs r6, 0x14\n"
- "\tmovs r3, 0\n"
- "\tlsls r0, r2, 1\n"
- "\tmovs r1, 0x84\n"
- "\tlsls r1, 4\n"
- "\tadds r0, r1\n"
- "\tmov r2, r9\n"
- "\tadds r4, r2, r0\n"
- "\tmovs r7, 0\n"
- "\tb _0809A020\n"
- "_08099FFE:\n"
- "\tmovs r0, 0x40\n"
- "\tsubs r0, r2\n"
- "\tlsls r0, 16\n"
- "\tmovs r1, 0x14\n"
- "\tlsrs r6, r0, 16\n"
- "\tasrs r0, 16\n"
- "\tsubs r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r3, r1, 16\n"
- "\tlsls r0, r2, 1\n"
- "\tmovs r1, 0x84\n"
- "\tlsls r1, 4\n"
- "\tadds r0, r1\n"
- "\tmov r2, r9\n"
- "\tadds r4, r2, r0\n"
- "\tmov r7, r9\n"
- "\tadds r7, 0x80\n"
- "_0809A020:\n"
- "\tmovs r1, 0\n"
- "\tmov r0, r8\n"
- "\tlsls r0, 24\n"
- "\tstr r0, [sp, 0x14]\n"
- "\tlsls r0, r6, 16\n"
- "\tasrs r0, 16\n"
- "\tmov r8, r0\n"
- "\tlsls r3, 16\n"
- "\tstr r3, [sp, 0xC]\n"
- "\tasrs r2, r3, 16\n"
- "\tstr r2, [sp, 0x10]\n"
- "_0809A036:\n"
- "\tmovs r3, 0\n"
- "\tadds r0, r4, 0\n"
- "\tadds r0, 0x40\n"
- "\tstr r0, [sp, 0x18]\n"
- "\tadds r2, r7, 0\n"
- "\tadds r2, 0x40\n"
- "\tstr r2, [sp, 0x1C]\n"
- "\tadds r1, 0x1\n"
- "\tmov r10, r1\n"
- "\tcmp r3, r8\n"
- "\tbge _0809A07A\n"
- "\tldr r0, _0809A0D4 @ =0x00000fff\n"
- "\tmov r12, r0\n"
- "\tmovs r6, 0xF0\n"
- "\tlsls r6, 8\n"
- "_0809A054:\n"
- "\tldrh r2, [r5]\n"
- "\tmov r0, r12\n"
- "\tands r0, r2\n"
- "\tldr r1, [sp]\n"
- "\tadds r0, r1, r0\n"
- "\tadds r1, r6, 0\n"
- "\tands r1, r2\n"
- "\tldr r2, [sp, 0x4]\n"
- "\tadds r1, r2, r1\n"
- "\torrs r1, r0\n"
- "\tlsls r0, r3, 1\n"
- "\tadds r0, r4\n"
- "\tstrh r1, [r0]\n"
- "\tadds r5, 0x2\n"
- "\tadds r0, r3, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r3, r0, 16\n"
- "\tcmp r3, r8\n"
- "\tblt _0809A054\n"
- "_0809A07A:\n"
- "\tmovs r3, 0\n"
- "\tldr r0, [sp, 0x10]\n"
- "\tcmp r3, r0\n"
- "\tbge _0809A0B4\n"
- "\tldr r1, _0809A0D4 @ =0x00000fff\n"
- "\tmov r12, r1\n"
- "\tmovs r6, 0xF0\n"
- "\tlsls r6, 8\n"
- "\tldr r2, [sp, 0xC]\n"
- "\tasrs r4, r2, 16\n"
- "_0809A08E:\n"
- "\tldrh r2, [r5]\n"
- "\tmov r0, r12\n"
- "\tands r0, r2\n"
- "\tldr r1, [sp]\n"
- "\tadds r0, r1, r0\n"
- "\tadds r1, r6, 0\n"
- "\tands r1, r2\n"
- "\tldr r2, [sp, 0x4]\n"
- "\tadds r1, r2, r1\n"
- "\torrs r1, r0\n"
- "\tlsls r0, r3, 1\n"
- "\tadds r0, r7\n"
- "\tstrh r1, [r0]\n"
- "\tadds r5, 0x2\n"
- "\tadds r0, r3, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r3, r0, 16\n"
- "\tcmp r3, r4\n"
- "\tblt _0809A08E\n"
- "_0809A0B4:\n"
- "\tldr r4, [sp, 0x18]\n"
- "\tldr r7, [sp, 0x1C]\n"
- "\tmov r1, r10\n"
- "\tlsls r0, r1, 16\n"
- "\tlsrs r1, r0, 16\n"
- "\tcmp r1, 0x11\n"
- "\tbls _0809A036\n"
- "\tldr r0, [sp, 0x14]\n"
- "\tasrs r2, r0, 24\n"
- "\tcmp r2, 0\n"
- "\tbeq _0809A13A\n"
- "\tcmp r2, 0\n"
- "\tble _0809A0D8\n"
- "\tldr r1, [sp, 0x8]\n"
- "\tadds r1, 0x14\n"
- "\tb _0809A0DC\n"
- "\t.align 2, 0\n"
- "_0809A0D4: .4byte 0x00000fff\n"
- "_0809A0D8:\n"
- "\tldr r1, [sp, 0x8]\n"
- "\tsubs r1, 0x4\n"
- "_0809A0DC:\n"
- "\tmovs r0, 0x3F\n"
- "\tands r1, r0\n"
- "\tadds r4, r1, 0\n"
- "\tadds r0, r4, 0\n"
- "\tcmp r0, 0x1F\n"
- "\tbgt _0809A0EE\n"
- "\tlsls r0, 1\n"
- "\tadds r0, 0x80\n"
- "\tb _0809A0F6\n"
- "_0809A0EE:\n"
- "\tlsls r0, 1\n"
- "\tmovs r2, 0x84\n"
- "\tlsls r2, 4\n"
- "\tadds r0, r2\n"
- "_0809A0F6:\n"
- "\tmov r1, r9\n"
- "\tadds r2, r1, r0\n"
- "\tmovs r3, 0\n"
- "\tmovs r6, 0\n"
- "_0809A0FE:\n"
- "\tmovs r1, 0\n"
- "\tadds r5, r3, 0x1\n"
- "\tlsls r3, r4, 16\n"
- "_0809A104:\n"
- "\tstrh r6, [r2]\n"
- "\tadds r2, 0x40\n"
- "\tadds r0, r1, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r1, r0, 16\n"
- "\tcmp r1, 0x11\n"
- "\tbls _0809A104\n"
- "\tasrs r0, r3, 16\n"
- "\tadds r4, r0, 0x1\n"
- "\tmovs r0, 0x3F\n"
- "\tands r4, r0\n"
- "\tadds r0, r4, 0\n"
- "\tcmp r0, 0x1F\n"
- "\tbgt _0809A126\n"
- "\tlsls r0, 1\n"
- "\tadds r0, 0x80\n"
- "\tb _0809A12E\n"
- "_0809A126:\n"
- "\tlsls r0, 1\n"
- "\tmovs r2, 0x84\n"
- "\tlsls r2, 4\n"
- "\tadds r0, r2\n"
- "_0809A12E:\n"
- "\tmov r1, r9\n"
- "\tadds r2, r1, r0\n"
- "\tlsls r0, r5, 16\n"
- "\tlsrs r3, r0, 16\n"
- "\tcmp r3, 0x3\n"
- "\tbls _0809A0FE\n"
- "_0809A13A:\n"
- "\tadd sp, 0x20\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");
-}
-#endif
-#ifdef NONMATCHING
-void sub_809A14C(u16 *vdest)
+/*
+ Clears the lowest line of a wallpaper buffer.
+ Depends on stored BG2 X variable in PSS.
+
+ - buffer : Wallpaper buffer.
+*/
+void ClearLowestWallpaperTiles(u16 *buffer)
{
- u16 *r2;
- u16 i;
- int r3 = ((gPokemonStorageSystemPtr->unk_08b4 >> 3) + 30) & 0x3f;
- r2 = vdest + (r3 < 0x20 ? r3 + 0x260 : r3 + 0x640);
- for (i = 0; i < 0x2b; i++)
- {
- *r2++ = 0;
- r3++;
- r3 &= 0x3f;
- if (r3 == 0)
- r2 -= 0x420;
- if (r3 == 0x20)
- r2 += 0x3e0;
- }
-}
-#else
-NAKED void sub_809A14C(u16 *vdest)
-{
- asm_unified("\tpush {r4-r6,lr}\n"
- "\tadds r2, r0, 0\n"
- "\tldr r0, _0809A174 @ =gPokemonStorageSystemPtr\n"
- "\tldr r0, [r0]\n"
- "\tldr r1, _0809A178 @ =0x000008b4\n"
- "\tadds r0, r1\n"
- "\tldrh r0, [r0]\n"
- "\tlsrs r0, 3\n"
- "\tadds r3, r0, 0\n"
- "\tadds r3, 0x1E\n"
- "\tmovs r0, 0x3F\n"
- "\tands r3, r0\n"
- "\tadds r0, r3, 0\n"
- "\tcmp r0, 0x1F\n"
- "\tbgt _0809A17C\n"
- "\tlsls r0, 1\n"
- "\tmovs r6, 0x98\n"
- "\tlsls r6, 3\n"
- "\tadds r0, r6\n"
- "\tb _0809A184\n"
- "\t.align 2, 0\n"
- "_0809A174: .4byte gPokemonStorageSystemPtr\n"
- "_0809A178: .4byte 0x000008b4\n"
- "_0809A17C:\n"
- "\tlsls r0, 1\n"
- "\tmovs r1, 0xC8\n"
- "\tlsls r1, 4\n"
- "\tadds r0, r1\n"
- "_0809A184:\n"
- "\tadds r2, r0\n"
- "\tmovs r0, 0\n"
- "\tmovs r5, 0\n"
- "\tmovs r4, 0x3F\n"
- "_0809A18C:\n"
- "\tstrh r5, [r2]\n"
- "\tadds r2, 0x2\n"
- "\tadds r3, 0x1\n"
- "\tands r3, r4\n"
- "\tadds r1, r3, 0\n"
- "\tcmp r1, 0\n"
- "\tbne _0809A19E\n"
- "\tldr r6, _0809A1B8 @ =0xfffff7c0\n"
- "\tadds r2, r6\n"
- "_0809A19E:\n"
- "\tcmp r1, 0x20\n"
- "\tbne _0809A1A8\n"
- "\tmovs r1, 0xF8\n"
- "\tlsls r1, 3\n"
- "\tadds r2, r1\n"
- "_0809A1A8:\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0x2B\n"
- "\tbls _0809A18C\n"
- "\tpop {r4-r6}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_0809A1B8: .4byte 0xfffff7c0");
+ u16 x;
+ s16 rectX = ((gPokemonStorageSystemPtr->unk_08b4 / 8) + 30) & 0x3F;
+
+ if (rectX < 32)
+ buffer += rectX + 0x260;
+ else
+ buffer += rectX + 0x640;
+
+ for (x = 0; x < 44; x++)
+ {
+ *buffer++ = 0;
+ // Needs to be one statement in order to match.
+ rectX = (rectX + 1) & 0x3F;
+ if (rectX == 0)
+ buffer -= 0x420;
+ if (rectX == 32)
+ buffer += 0x3e0;
+ }
}
-#endif
void sub_809A1BC(const u8 *a0, const u8 *text)
{
@@ -2234,73 +1955,79 @@ u8 sub_809C464(void)
return r9;
}
-#ifdef NONMATCHING
u8 sub_809C664(void)
{
- s8 r10 = sBoxCursorArea;
- s8 r4 = sBoxCursorPosition;
- u8 r8;
- u8 r9;
+ u8 retVal;
+ bool8 gotoBox;
+ s8 cursorArea;
+ s8 cursorPosition;
do
{
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
gPokemonStorageSystemPtr->unk_11df = 0;
gPokemonStorageSystemPtr->unk_11de = 0;
gPokemonStorageSystemPtr->unk_11e3 = 0;
- r9 = FALSE;
- r8 = 0;
+ gotoBox = FALSE;
+ retVal = 0;
+
if (JOY_REPT(DPAD_UP))
{
- r4--;
- if (r4 < 0)
- r4 = 6;
- if (r4 != sBoxCursorPosition)
- r8 = 1;
+ if (--cursorPosition < 0)
+ cursorPosition = 6;
+ if (cursorPosition != sBoxCursorPosition)
+ retVal = 1;
break;
}
+
if (JOY_REPT(DPAD_DOWN))
{
- r4++;
- if (r4 > 6)
- r4 = 0;
- if (r4 != sBoxCursorPosition)
- r8 = 1;
+ if (++cursorPosition > 6)
+ cursorPosition = 0;
+ if (cursorPosition != sBoxCursorPosition)
+ retVal = 1;
break;
}
- if ((JOY_REPT(DPAD_LEFT)) && sBoxCursorPosition != 0)
+
+ if (JOY_REPT(DPAD_LEFT) && sBoxCursorPosition != 0)
{
- r8 = 1;
+ retVal = 1;
gPokemonStorageSystemPtr->unk_11e2 = sBoxCursorPosition;
- r4 = 0;
+ cursorPosition = 0;
break;
}
+
if (JOY_REPT(DPAD_RIGHT))
{
if (sBoxCursorPosition == 0)
{
- r8 = 1;
- r4 = gPokemonStorageSystemPtr->unk_11e2;
+ retVal = 1;
+ cursorPosition = gPokemonStorageSystemPtr->unk_11e2;
}
else
{
- r8 = 6;
- r10 = 0;
- r4 = 0;
+ retVal = 6;
+ cursorArea = 0;
+ cursorPosition = 0;
}
break;
}
+
if (JOY_NEW(A_BUTTON))
{
if (sBoxCursorPosition == 6)
{
if (gPokemonStorageSystemPtr->unk_0005 == 1)
return 4;
- r9 = TRUE;
+
+ gotoBox = TRUE;
}
else if (sub_809CAB0())
{
- if (gUnknown_020384E9 == 0)
+ if (!gUnknown_020384E9)
return 8;
+
switch (sub_809CE4C(0))
{
case 1:
@@ -2316,575 +2043,187 @@ u8 sub_809C664(void)
}
}
}
+
if (JOY_NEW(B_BUTTON))
{
if (gPokemonStorageSystemPtr->unk_0005 == 1)
return 16;
- r9 = TRUE;
+
+ gotoBox = TRUE;
}
- if (r9)
+
+ if (gotoBox)
{
- r8 = 6;
- r10 = 0;
- r4 = 0;
+ retVal = 6;
+ cursorArea = 0;
+ cursorPosition = 0;
break;
}
+
if (JOY_NEW(SELECT_BUTTON))
{
sub_809CD88();
return 0;
}
} while (0);
- if (r8)
- sub_809AF18(r10, r4);
- return r8;
-}
-#else
-NAKED u8 sub_809C664(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 r0, _0809C6D8 @ =sBoxCursorArea\n"
- "\tldrb r0, [r0]\n"
- "\tmov r10, r0\n"
- "\tldr r7, _0809C6DC @ =sBoxCursorPosition\n"
- "\tldrb r4, [r7]\n"
- "\tldr r2, _0809C6E0 @ =gPokemonStorageSystemPtr\n"
- "\tldr r5, [r2]\n"
- "\tldr r1, _0809C6E4 @ =0x000011df\n"
- "\tadds r0, r5, r1\n"
- "\tmovs r1, 0\n"
- "\tstrb r1, [r0]\n"
- "\tldr r3, _0809C6E8 @ =0x000011de\n"
- "\tadds r0, r5, r3\n"
- "\tstrb r1, [r0]\n"
- "\tadds r3, 0x5\n"
- "\tadds r0, r5, r3\n"
- "\tstrb r1, [r0]\n"
- "\tmov r9, r1\n"
- "\tmov r8, r1\n"
- "\tldr r1, _0809C6EC @ =gMain\n"
- "\tldrh r3, [r1, 0x30]\n"
- "\tmovs r0, 0x40\n"
- "\tands r0, r3\n"
- "\tadds r6, r7, 0\n"
- "\tmov r12, r2\n"
- "\tadds r2, r1, 0\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C6A8\n"
- "\tb _0809C81C\n"
- "_0809C6A8:\n"
- "\tmovs r0, 0x80\n"
- "\tands r0, r3\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C6F0\n"
- "\tlsls r0, r4, 24\n"
- "\tmovs r1, 0x80\n"
- "\tlsls r1, 17\n"
- "\tadds r0, r1\n"
- "\tlsrs r4, r0, 24\n"
- "\tasrs r0, 24\n"
- "\tcmp r0, 0x6\n"
- "\tble _0809C6C2\n"
- "\tmovs r4, 0\n"
- "_0809C6C2:\n"
- "\tlsls r0, r4, 24\n"
- "\tasrs r0, 24\n"
- "\tmovs r1, 0\n"
- "\tldrsb r1, [r6, r1]\n"
- "\tcmp r0, r1\n"
- "\tbne _0809C6D0\n"
- "\tb _0809C83C\n"
- "_0809C6D0:\n"
- "\tmovs r2, 0x1\n"
- "\tmov r8, r2\n"
- "\tb _0809C842\n"
- "\t.align 2, 0\n"
- "_0809C6D8: .4byte sBoxCursorArea\n"
- "_0809C6DC: .4byte sBoxCursorPosition\n"
- "_0809C6E0: .4byte gPokemonStorageSystemPtr\n"
- "_0809C6E4: .4byte 0x000011df\n"
- "_0809C6E8: .4byte 0x000011de\n"
- "_0809C6EC: .4byte gMain\n"
- "_0809C6F0:\n"
- "\tmovs r0, 0x20\n"
- "\tands r0, r3\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C714\n"
- "\tldrb r1, [r6]\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r6, r0]\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C714\n"
- "\tmovs r3, 0x1\n"
- "\tmov r8, r3\n"
- "\tldr r2, _0809C710 @ =0x000011e2\n"
- "\tadds r0, r5, r2\n"
- "\tstrb r1, [r0]\n"
- "\tmovs r4, 0\n"
- "\tb _0809C83C\n"
- "\t.align 2, 0\n"
- "_0809C710: .4byte 0x000011e2\n"
- "_0809C714:\n"
- "\tldrh r1, [r2, 0x30]\n"
- "\tmovs r0, 0x10\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C748\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r6, r0]\n"
- "\tcmp r0, 0\n"
- "\tbne _0809C73C\n"
- "\tmovs r3, 0x1\n"
- "\tmov r8, r3\n"
- "\tmov r1, r12\n"
- "\tldr r0, [r1]\n"
- "\tldr r2, _0809C738 @ =0x000011e2\n"
- "\tadds r0, r2\n"
- "\tldrb r4, [r0]\n"
- "\tb _0809C83C\n"
- "\t.align 2, 0\n"
- "_0809C738: .4byte 0x000011e2\n"
- "_0809C73C:\n"
- "\tmovs r3, 0x6\n"
- "\tmov r8, r3\n"
- "\tmovs r0, 0\n"
- "\tmov r10, r0\n"
- "\tmovs r4, 0\n"
- "\tb _0809C83C\n"
- "_0809C748:\n"
- "\tldrh r1, [r2, 0x2E]\n"
- "\tmovs r0, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C7D0\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r6, r0]\n"
- "\tcmp r0, 0x6\n"
- "\tbne _0809C76E\n"
- "\tmov r1, r12\n"
- "\tldr r0, [r1]\n"
- "\tldrb r0, [r0, 0x5]\n"
- "\tcmp r0, 0x1\n"
- "\tbne _0809C768\n"
- "\tmovs r0, 0x4\n"
- "\tb _0809C84C\n"
- "_0809C768:\n"
- "\tmovs r2, 0x1\n"
- "\tmov r9, r2\n"
- "\tb _0809C7D0\n"
- "_0809C76E:\n"
- "\tbl sub_809CAB0\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C7D0\n"
- "\tldr r0, _0809C784 @ =gUnknown_020384E9\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbne _0809C788\n"
- "\tmovs r0, 0x8\n"
- "\tb _0809C84C\n"
- "\t.align 2, 0\n"
- "_0809C784: .4byte gUnknown_020384E9\n"
- "_0809C788:\n"
- "\tmovs r0, 0\n"
- "\tbl sub_809CE4C\n"
- "\tsubs r0, 0x1\n"
- "\tlsls r0, 24\n"
- "\tasrs r0, 24\n"
- "\tcmp r0, 0x4\n"
- "\tbhi _0809C7D0\n"
- "\tlsls r0, 2\n"
- "\tldr r1, _0809C7A4 @ =_0809C7A8\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.align 2, 0\n"
- "_0809C7A4: .4byte _0809C7A8\n"
- "\t.align 2, 0\n"
- "_0809C7A8:\n"
- "\t.4byte _0809C7BC\n"
- "\t.4byte _0809C7C0\n"
- "\t.4byte _0809C7C4\n"
- "\t.4byte _0809C7C8\n"
- "\t.4byte _0809C7CC\n"
- "_0809C7BC:\n"
- "\tmovs r0, 0xB\n"
- "\tb _0809C84C\n"
- "_0809C7C0:\n"
- "\tmovs r0, 0xC\n"
- "\tb _0809C84C\n"
- "_0809C7C4:\n"
- "\tmovs r0, 0xD\n"
- "\tb _0809C84C\n"
- "_0809C7C8:\n"
- "\tmovs r0, 0xE\n"
- "\tb _0809C84C\n"
- "_0809C7CC:\n"
- "\tmovs r0, 0xF\n"
- "\tb _0809C84C\n"
- "_0809C7D0:\n"
- "\tldr r2, _0809C7EC @ =gMain\n"
- "\tldrh r1, [r2, 0x2E]\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C7F8\n"
- "\tldr r0, _0809C7F0 @ =gPokemonStorageSystemPtr\n"
- "\tldr r0, [r0]\n"
- "\tldrb r0, [r0, 0x5]\n"
- "\tcmp r0, 0x1\n"
- "\tbne _0809C7F4\n"
- "\tmovs r0, 0x10\n"
- "\tb _0809C84C\n"
- "\t.align 2, 0\n"
- "_0809C7EC: .4byte gMain\n"
- "_0809C7F0: .4byte gPokemonStorageSystemPtr\n"
- "_0809C7F4:\n"
- "\tmovs r3, 0x1\n"
- "\tmov r9, r3\n"
- "_0809C7F8:\n"
- "\tmov r0, r9\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C80A\n"
- "\tmovs r1, 0x6\n"
- "\tmov r8, r1\n"
- "\tmovs r2, 0\n"
- "\tmov r10, r2\n"
- "\tmovs r4, 0\n"
- "\tb _0809C83C\n"
- "_0809C80A:\n"
- "\tldrh r1, [r2, 0x2E]\n"
- "\tmovs r0, 0x4\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C83C\n"
- "\tbl sub_809CD88\n"
- "\tmovs r0, 0\n"
- "\tb _0809C84C\n"
- "_0809C81C:\n"
- "\tlsls r0, r4, 24\n"
- "\tmovs r3, 0xFF\n"
- "\tlsls r3, 24\n"
- "\tadds r0, r3\n"
- "\tlsrs r4, r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbge _0809C82C\n"
- "\tmovs r4, 0x6\n"
- "_0809C82C:\n"
- "\tlsls r0, r4, 24\n"
- "\tasrs r0, 24\n"
- "\tmovs r1, 0\n"
- "\tldrsb r1, [r7, r1]\n"
- "\tcmp r0, r1\n"
- "\tbeq _0809C83C\n"
- "\tmovs r0, 0x1\n"
- "\tmov r8, r0\n"
- "_0809C83C:\n"
- "\tmov r1, r8\n"
- "\tcmp r1, 0\n"
- "\tbeq _0809C84A\n"
- "_0809C842:\n"
- "\tmov r0, r10\n"
- "\tadds r1, r4, 0\n"
- "\tbl sub_809AF18\n"
- "_0809C84A:\n"
- "\tmov r0, r8\n"
- "_0809C84C:\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1");
+
+ if (retVal != 0)
+ {
+ sub_809AF18(cursorArea, cursorPosition);
+ }
+
+ return retVal;
}
-#endif
u8 sub_809C85C(void)
{
u8 retVal;
- s8 var0;
- register s8 var1 asm("r5"); // FAKEMATCHING: r5 and r6 become swapped without this register hack
-
- gPokemonStorageSystemPtr->unk_11df = 0;
- gPokemonStorageSystemPtr->unk_11de = 0;
- gPokemonStorageSystemPtr->unk_11e3 = 0;
+ s8 cursorArea;
+ s8 cursorPosition;
- if (!(gMain.newAndRepeatedKeys & DPAD_UP))
+ do
{
- if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ gPokemonStorageSystemPtr->unk_11df = 0;
+ gPokemonStorageSystemPtr->unk_11de = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 0;
+
+ if (JOY_REPT(DPAD_UP))
{
retVal = 1;
- var0 = 0;
- var1 = 2;
+ cursorArea = 3;
+ cursorPosition = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 1;
+ break;
}
- else
+ else if (JOY_REPT(DPAD_DOWN))
{
- if (gMain.heldKeys & DPAD_LEFT)
+ retVal = 1;
+ cursorArea = 0;
+ cursorPosition = 2;
+ break;
+ }
+
+ if (gMain.heldKeys & DPAD_LEFT)
+ return 10;
+ if (gMain.heldKeys & DPAD_RIGHT)
+ return 9;
+
+ if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
+ {
+ if (gMain.heldKeys & L_BUTTON)
return 10;
- if (gMain.heldKeys & DPAD_RIGHT)
+ if (gMain.heldKeys & R_BUTTON)
return 9;
- if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
- {
- if (gMain.heldKeys & L_BUTTON)
- return 10;
- if (gMain.heldKeys & R_BUTTON)
- return 9;
- }
-
- if (gMain.newKeys & A_BUTTON)
- {
- sub_809A860(0);
- sub_809CA8C();
- return 7;
- }
+ }
- if (gMain.newKeys & B_BUTTON)
- return 16;
+ if (JOY_NEW(A_BUTTON))
+ {
+ sub_809A860(FALSE);
+ sub_809CA8C();
+ return 7;
+ }
- if (gMain.newKeys & SELECT_BUTTON)
- {
- sub_809CD88();
- return 0;
- }
+ if (JOY_NEW(B_BUTTON))
+ return 16;
- retVal = 0;
+ if (JOY_NEW(SELECT_BUTTON))
+ {
+ sub_809CD88();
+ return 0;
}
- }
- else
- {
- retVal = 1;
- var0 = 3;
- var1 = 0;
- gPokemonStorageSystemPtr->unk_11e3 = 1;
- }
- if (retVal)
+ retVal = 0;
+ } while (0);
+
+ if (retVal != 0)
{
- if (var0 != 2)
- sub_809A860(0);
- sub_809AF18(var0, var1);
- return retVal;
+ if (cursorArea != 2)
+ sub_809A860(FALSE);
+ sub_809AF18(cursorArea, cursorPosition);
}
return retVal;
}
-#ifdef NONMATCHING
u8 sub_809C944(void)
{
- u8 r6;
- s8 var0 = sBoxCursorArea;
- s8 var1 = sBoxCursorPosition;
-
- gPokemonStorageSystemPtr->unk_11df = 0;
- gPokemonStorageSystemPtr->unk_11de = 0;
- gPokemonStorageSystemPtr->unk_11e3 = 0;
+ u8 retVal;
+ s8 cursorArea;
+ s8 cursorPosition;
- if (!(gMain.newAndRepeatedKeys & DPAD_UP))
+ do
{
- if (gMain.newAndRepeatedKeys & (DPAD_DOWN | START_BUTTON))
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
+ gPokemonStorageSystemPtr->unk_11df = 0;
+ gPokemonStorageSystemPtr->unk_11de = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 0;
+
+ if (JOY_REPT(DPAD_UP))
{
- r6 = 1;
- var0 = 2;
- var1 = 0;
+ retVal = 1;
+ cursorArea = 0;
+ gPokemonStorageSystemPtr->unk_11de = -1;
+ if (sBoxCursorPosition == 0)
+ cursorPosition = 24;
+ else
+ cursorPosition = 29;
+ gPokemonStorageSystemPtr->unk_11e3 = 1;
+ break;
+ }
+
+ if (JOY_REPT(DPAD_DOWN | START_BUTTON))
+ {
+ retVal = 1;
+ cursorArea = 2;
+ cursorPosition = 0;
gPokemonStorageSystemPtr->unk_11e3 = 1;
+ break;
}
- else if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+
+ if (JOY_REPT(DPAD_LEFT))
{
- r6 = 1;
- var1 -= 1;
- if (var1 < 0)
+ retVal = 1;
+ if (--cursorPosition < 0)
{
gPokemonStorageSystemPtr->unk_11df = -1;
- var1 = 1;
+ cursorPosition = 1;
}
+ break;
}
- else if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+
+ if (JOY_REPT(DPAD_RIGHT))
{
- r6 = 1;
- var1 += 1;
- if (var1 > 1)
+ retVal = 1;
+ if (++cursorPosition > 1)
{
gPokemonStorageSystemPtr->unk_11df = 1;
- var1 = 0;
+ cursorPosition = 0;
}
+ break;
}
- else if (gMain.newKeys & A_BUTTON)
- {
- return var1 == 0 ? 5 : 4;
- }
- else if (gMain.newKeys & B_BUTTON)
- {
+
+ if (JOY_NEW(A_BUTTON))
+ return (cursorPosition == 0) ? 5 : 4;
+ if (JOY_NEW(B_BUTTON))
return 16;
- }
- else if (gMain.newKeys & SELECT_BUTTON)
+
+ if (JOY_NEW(SELECT_BUTTON))
{
sub_809CD88();
return 0;
}
- else
- {
- r6 = 0;
- }
- }
- else
- {
- r6 = 1;
- var0 = 0;
- gPokemonStorageSystemPtr->unk_11de = -1;
- var1 = !sBoxCursorPosition ? 24 : 29;
- gPokemonStorageSystemPtr->unk_11e3 = 1;
- }
- if (r6)
+ retVal = 0;
+ } while (0);
+
+ if (retVal != 0)
{
- sub_809AF18(var0, var1);
+ sub_809AF18(cursorArea, cursorPosition);
}
- return r6;
+ return retVal;
}
-#else
-NAKED
-u8 sub_809C944(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- ldr r0, _0809C988 @ =sBoxCursorArea\n\
- ldrb r0, [r0]\n\
- mov r12, r0\n\
- ldr r7, _0809C98C @ =sBoxCursorPosition\n\
- ldrb r3, [r7]\n\
- ldr r0, _0809C990 @ =gPokemonStorageSystemPtr\n\
- ldr r1, [r0]\n\
- ldr r0, _0809C994 @ =0x000011df\n\
- adds r5, r1, r0\n\
- movs r0, 0\n\
- strb r0, [r5]\n\
- ldr r2, _0809C998 @ =0x000011de\n\
- adds r4, r1, r2\n\
- strb r0, [r4]\n\
- adds r2, 0x5\n\
- adds r1, r2\n\
- strb r0, [r1]\n\
- ldr r6, _0809C99C @ =gMain\n\
- ldrh r2, [r6, 0x30]\n\
- movs r0, 0x40\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- bne _0809CA14\n\
- movs r0, 0x88\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0809C9A0\n\
- movs r6, 0x1\n\
- movs r0, 0x2\n\
- mov r12, r0\n\
- movs r3, 0\n\
- b _0809CA2A\n\
- .align 2, 0\n\
-_0809C988: .4byte sBoxCursorArea\n\
-_0809C98C: .4byte sBoxCursorPosition\n\
-_0809C990: .4byte gPokemonStorageSystemPtr\n\
-_0809C994: .4byte 0x000011df\n\
-_0809C998: .4byte 0x000011de\n\
-_0809C99C: .4byte gMain\n\
-_0809C9A0:\n\
- movs r0, 0x20\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0809C9C0\n\
- movs r6, 0x1\n\
- lsls r0, r3, 24\n\
- movs r1, 0xFF\n\
- lsls r1, 24\n\
- adds r0, r1\n\
- lsrs r3, r0, 24\n\
- cmp r0, 0\n\
- bge _0809CA2C\n\
- movs r0, 0xFF\n\
- strb r0, [r5]\n\
- movs r3, 0x1\n\
- b _0809CA2C\n\
-_0809C9C0:\n\
- movs r0, 0x10\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0809C9E0\n\
- movs r6, 0x1\n\
- lsls r0, r3, 24\n\
- movs r2, 0x80\n\
- lsls r2, 17\n\
- adds r0, r2\n\
- lsrs r3, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x1\n\
- ble _0809CA2C\n\
- strb r6, [r5]\n\
- movs r3, 0\n\
- b _0809CA2C\n\
-_0809C9E0:\n\
- ldrh r1, [r6, 0x2E]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809C9F4\n\
- movs r0, 0x4\n\
- cmp r3, 0\n\
- bne _0809CA3A\n\
- movs r0, 0x5\n\
- b _0809CA3A\n\
-_0809C9F4:\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CA00\n\
- movs r0, 0x10\n\
- b _0809CA3A\n\
-_0809CA00:\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CA10\n\
- bl sub_809CD88\n\
- movs r0, 0\n\
- b _0809CA3A\n\
-_0809CA10:\n\
- movs r6, 0\n\
- b _0809CA38\n\
-_0809CA14:\n\
- movs r6, 0x1\n\
- movs r0, 0\n\
- mov r12, r0\n\
- movs r0, 0xFF\n\
- strb r0, [r4]\n\
- movs r0, 0\n\
- ldrsb r0, [r7, r0]\n\
- movs r3, 0x1D\n\
- cmp r0, 0\n\
- bne _0809CA2A\n\
- movs r3, 0x18\n\
-_0809CA2A:\n\
- strb r6, [r1]\n\
-_0809CA2C:\n\
- cmp r6, 0\n\
- beq _0809CA38\n\
- mov r0, r12\n\
- adds r1, r3, 0\n\
- bl sub_809AF18\n\
-_0809CA38:\n\
- adds r0, r6, 0\n\
-_0809CA3A:\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
u8 sub_809CA40(void)
{
@@ -3113,44 +2452,46 @@ void sub_809CE84(void)
gPokemonStorageSystemPtr->unk_11b9);
}
-#ifdef NONMATCHING // r4 and r5 are swapped throughout the entire function.
s16 sub_809CF30(void)
{
int textId = -2;
- if (!(gMain.newKeys & A_BUTTON))
+ do
{
- if (gMain.newKeys & B_BUTTON)
+ if (!(JOY_NEW(A_BUTTON)))
{
- PlaySE(SE_SELECT);
- textId++;
- }
+ if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ textId++;
+ }
- if (gMain.newKeys & DPAD_UP)
- {
- PlaySE(SE_SELECT);
- Menu_MoveCursor(-1);
+ if (JOY_NEW(DPAD_UP))
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(-1);
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(1);
+ }
}
- else if (gMain.newKeys & DPAD_DOWN)
+ else
{
- PlaySE(SE_SELECT);
- Menu_MoveCursor(1);
+ textId = Menu_GetCursorPos();
}
- }
- else
- {
- textId = Menu_GetCursorPos();
- }
- if (textId != -2)
- {
- Menu_DestroyCursor();
- Menu_EraseWindowRect(
- gPokemonStorageSystemPtr->unk_11ba,
- gPokemonStorageSystemPtr->unk_11bc,
- 29,
- 15);
- }
+ if (textId != -2)
+ {
+ Menu_DestroyCursor();
+ Menu_EraseWindowRect(
+ gPokemonStorageSystemPtr->unk_11ba,
+ gPokemonStorageSystemPtr->unk_11bc,
+ 29,
+ 15);
+ }
+ } while (0);
if (textId >= 0)
{
@@ -3159,95 +2500,6 @@ s16 sub_809CF30(void)
return textId;
}
-#else
-NAKED
-s16 sub_809CF30(void)
-{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- movs r5, 0x2\n\
- negs r5, r5\n\
- ldr r4, _0809CF6C @ =gMain\n\
- ldrh r1, [r4, 0x2E]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0809CF86\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CF52\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- adds r5, 0x1\n\
-_0809CF52:\n\
- ldrh r1, [r4, 0x2E]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CF70\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- bl Menu_MoveCursor\n\
- b _0809CF8E\n\
- .align 2, 0\n\
-_0809CF6C: .4byte gMain\n\
-_0809CF70:\n\
- movs r0, 0x80\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CF8E\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- movs r0, 0x1\n\
- bl Menu_MoveCursor\n\
- b _0809CF8E\n\
-_0809CF86:\n\
- bl Menu_GetCursorPos\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
-_0809CF8E:\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- cmp r5, r0\n\
- beq _0809CFB2\n\
- bl Menu_DestroyCursor\n\
- ldr r0, _0809CFD0 @ =gPokemonStorageSystemPtr\n\
- ldr r1, [r0]\n\
- ldr r2, _0809CFD4 @ =0x000011ba\n\
- adds r0, r1, r2\n\
- ldrb r0, [r0]\n\
- adds r2, 0x2\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- movs r2, 0x1D\n\
- movs r3, 0xF\n\
- bl Menu_EraseWindowRect\n\
-_0809CFB2:\n\
- cmp r5, 0\n\
- blt _0809CFC4\n\
- ldr r0, _0809CFD0 @ =gPokemonStorageSystemPtr\n\
- ldr r0, [r0]\n\
- lsls r1, r5, 3\n\
- ldr r2, _0809CFD8 @ =0x00001184\n\
- adds r0, r2\n\
- adds r0, r1\n\
- ldr r5, [r0]\n\
-_0809CFC4:\n\
- lsls r0, r5, 16\n\
- asrs r0, 16\n\
- pop {r4,r5}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_0809CFD0: .4byte gPokemonStorageSystemPtr\n\
-_0809CFD4: .4byte 0x000011ba\n\
-_0809CFD8: .4byte 0x00001184\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
void sub_809CFDC(struct UnkStruct_2000020 *arg0, struct UnkStruct_2000028 *arg1, u8 arg2)
{
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 1079ec20b..ef4ee6c9e 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -97,12 +97,13 @@ static void DrawPokerusSurvivorDot(struct Pokemon *);
static void sub_80A12D0(s8);
static void sub_809FAC8(struct Pokemon *);
static void SummaryScreenHandleLeftRightInput(u8, s8);
-static void sub_809E8F0();
+static void sub_809E8F0(u8 taskId, s8 direction, u8 *moveIndexPtr);
static void sub_80A1654(s8, u8);
static void sub_80A1488(s8, u8);
static void SummaryScreen_PrintPokemonInfo(struct Pokemon *);
static void SummaryScreen_PrintPokemonSkills(struct Pokemon *);
static void sub_80A1918(u8, u8);
+static void sub_80A1C30(u8 a);
static void SummaryScreen_DrawTypeIcon(u8, u8, u8, u8);
static u16 GetMonMove(struct Pokemon *, u8);
static void sub_80A04CC(u16);
@@ -1208,184 +1209,57 @@ static void sub_809E83C(u8 taskId, s8 b)
sub_80A2078(taskId);
}
-NAKED
-static void sub_809E8F0(/*u8 taskId, s8 direction, u8 *c*/)
+static void sub_809E8F0(u8 taskId, s8 direction, u8 *moveIndexPtr)
{
- asm(".syntax 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, 0x8\n\
- adds r4, r1, 0\n\
- mov r9, r2\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- movs r0, 0x1\n\
- str r0, [sp]\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- mov r1, r9\n\
- ldrb r6, [r1]\n\
- ldr r1, _0809E944 @ =gTasks\n\
- mov r2, r8\n\
- lsls r0, r2, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x8]\n\
- movs r2, 0\n\
- lsls r4, 24\n\
- asrs r4, 24\n\
- mov r10, r4\n\
- lsls r7, r0, 24\n\
-_0809E930:\n\
- lsls r0, r6, 24\n\
- asrs r0, 24\n\
- add r0, r10\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- asrs r1, r0, 24\n\
- cmp r0, r7\n\
- ble _0809E948\n\
- movs r6, 0\n\
- b _0809E94E\n\
- .align 2, 0\n\
-_0809E944: .4byte gTasks\n\
-_0809E948:\n\
- cmp r1, 0\n\
- bge _0809E94E\n\
- lsrs r6, r7, 24\n\
-_0809E94E:\n\
- lsls r4, r6, 24\n\
- lsrs r1, r4, 24\n\
- ldr r0, _0809EA10 @ =gSharedMem + 0x18010\n\
- str r2, [sp, 0x4]\n\
- bl GetMonMove\n\
- lsls r0, 16\n\
- adds r5, r4, 0\n\
- ldr r2, [sp, 0x4]\n\
- cmp r0, 0\n\
- bne _0809E97A\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x4\n\
- beq _0809E97A\n\
- lsls r0, r2, 24\n\
- movs r3, 0x80\n\
- lsls r3, 17\n\
- adds r0, r3\n\
- lsrs r2, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x3\n\
- ble _0809E930\n\
-_0809E97A:\n\
- mov r1, r9\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x4\n\
- bne _0809E996\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x4\n\
- beq _0809E996\n\
- ldr r0, _0809EA14 @ =gSharedMem + 0x18000\n\
- adds r0, 0x7C\n\
- ldrh r0, [r0]\n\
- mov r2, r8\n\
- lsls r7, r2, 2\n\
- cmp r0, 0\n\
- beq _0809E9AC\n\
-_0809E996:\n\
- ldr r2, _0809EA18 @ =gTasks\n\
- mov r3, r8\n\
- lsls r1, r3, 2\n\
- adds r0, r1, r3\n\
- lsls r0, 3\n\
- adds r0, r2\n\
- movs r2, 0x22\n\
- ldrsh r0, [r0, r2]\n\
- adds r7, r1, 0\n\
- cmp r0, 0x1\n\
- bne _0809E9D0\n\
-_0809E9AC:\n\
- lsrs r4, r5, 24\n\
- movs r0, 0x2\n\
- adds r1, r4, 0\n\
- bl sub_80A1488\n\
- movs r0, 0x2\n\
- adds r1, r4, 0\n\
- bl sub_80A1654\n\
- ldr r1, _0809EA18 @ =gTasks\n\
- mov r3, r8\n\
- adds r0, r7, r3\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- movs r1, 0\n\
- strh r1, [r0, 0x22]\n\
- movs r0, 0\n\
- str r0, [sp]\n\
-_0809E9D0:\n\
- mov r1, r9\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x4\n\
- beq _0809E9FE\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x4\n\
- bne _0809E9FE\n\
- ldr r0, _0809EA14 @ =gSharedMem + 0x18000\n\
- adds r0, 0x7C\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- bne _0809E9FE\n\
- movs r4, 0x2\n\
- negs r4, r4\n\
- lsrs r5, 24\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl sub_80A1488\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl sub_80A1654\n\
-_0809E9FE:\n\
- mov r2, r9\n\
- strb r6, [r2]\n\
- ldr r0, _0809EA1C @ =gSharedMem + 0x18079\n\
- cmp r9, r0\n\
- bne _0809EA20\n\
- movs r0, 0\n\
- bl sub_80A1C30\n\
- b _0809EA26\n\
- .align 2, 0\n\
-_0809EA10: .4byte gSharedMem + 0x18010\n\
-_0809EA14: .4byte gSharedMem + 0x18000\n\
-_0809EA18: .4byte gTasks\n\
-_0809EA1C: .4byte gSharedMem + 0x18079\n\
-_0809EA20:\n\
- movs r0, 0x1\n\
- bl sub_80A1C30\n\
-_0809EA26:\n\
- ldr r3, [sp]\n\
- cmp r3, 0\n\
- beq _0809EA34\n\
- ldr r0, _0809EA4C @ =gSharedMem + 0x18010\n\
- mov r1, r9\n\
- bl sub_80A0428\n\
-_0809EA34:\n\
- mov r0, r8\n\
- bl sub_80A2078\n\
- add sp, 0x8\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\
- .align 2, 0\n\
-_0809EA4C: .4byte gSharedMem + 0x18010\n\
- .syntax divided\n");
+ s8 i;
+ s8 newMoveIndex;
+ s8 var;
+ bool8 bln;
+
+ bln = TRUE;
+ PlaySE(SE_SELECT);
+ newMoveIndex = *moveIndexPtr;
+ var = (s8)gTasks[taskId].data[0];
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ newMoveIndex += direction;
+ if (newMoveIndex > var)
+ newMoveIndex = 0;
+ else if (newMoveIndex < 0)
+ newMoveIndex = var;
+
+ if (GetMonMove(&pssData.loadedMon, newMoveIndex) != 0 || newMoveIndex == MAX_MON_MOVES)
+ break;
+ }
+
+ if ((*moveIndexPtr == MAX_MON_MOVES
+ && newMoveIndex != MAX_MON_MOVES
+ && pssData.moveToLearn == 0)
+ || gTasks[taskId].data[13] == 1)
+ {
+ sub_80A1488(2, newMoveIndex);
+ sub_80A1654(2, newMoveIndex);
+ gTasks[taskId].data[13] = 0;
+ bln = FALSE;
+ }
+ if (*moveIndexPtr != MAX_MON_MOVES
+ && newMoveIndex == MAX_MON_MOVES
+ && pssData.moveToLearn == 0)
+ {
+ sub_80A1488(-2, newMoveIndex);
+ sub_80A1654(-2, newMoveIndex);
+ }
+
+ *moveIndexPtr = newMoveIndex;
+ // Get rid of the 'flicker' effect(while idle) when scrolling.
+ if (moveIndexPtr == &pssData.selectedMoveIndex)
+ sub_80A1C30(0);
+ else
+ sub_80A1C30(1);
+
+ if (bln)
+ sub_80A0428(&pssData.loadedMon, moveIndexPtr);
+ sub_80A2078(taskId);
}
static void SummaryScreenHandleAButton(u8 taskId)
@@ -1702,35 +1576,38 @@ static void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction)
}
}
-// direction should be implicitly casted to a u8 during the var1 assign but it is not in this code
-#ifdef NONMATCHING
void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction)
{
s8 var3;
- u8 var1 = direction;
if (pssData.usingPC == TRUE)
{
if (pssData.page != PSS_PAGE_INFO)
{
- var1 = (direction == 1) ? 0 : 1;
+ if (direction == 1)
+ direction = 0;
+ else
+ direction = 1;
}
else
{
- var1 = (direction == 1) ? 2 : 3;
+ if (direction == 1)
+ direction = 2;
+ else
+ direction = 3;
}
- var3 = StorageSystemGetNextMonIndex(pssData.monList.boxMons, pssData.monIndex, pssData.maxMonIndex, var1);
+ var3 = StorageSystemGetNextMonIndex(pssData.monList.boxMons, pssData.monIndex, pssData.maxMonIndex, direction);
}
else
{
if (sub_80F9344() == TRUE && IsLinkDoubleBattle() == TRUE)
{
- var3 = sub_809F3CC(var1);
+ var3 = sub_809F3CC(direction);
}
else
{
- var3 = sub_809F284(var1);
+ var3 = sub_809F284(direction);
}
}
@@ -1747,113 +1624,7 @@ void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction)
gTasks[taskId].func = sub_809F43C;
}
}
-#else
-NAKED
-void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- lsls r1, 24\n\
- lsrs r4, r1, 24\n\
- ldr r0, _0809F1E4 @ =gSharedMem + 0x18000\n\
- ldrb r1, [r0, 0xE]\n\
- adds r2, r0, 0\n\
- cmp r1, 0x1\n\
- bne _0809F202\n\
- ldrb r0, [r2, 0xB]\n\
- cmp r0, 0\n\
- beq _0809F1E8\n\
- lsls r1, r4, 24\n\
- asrs r1, 24\n\
- movs r4, 0x1\n\
- eors r1, r4\n\
- negs r0, r1\n\
- orrs r0, r1\n\
- lsrs r4, r0, 31\n\
- b _0809F1F4\n\
- .align 2, 0\n\
-_0809F1E4: .4byte gSharedMem + 0x18000\n\
-_0809F1E8:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- movs r4, 0x3\n\
- cmp r0, 0x1\n\
- bne _0809F1F4\n\
- movs r4, 0x2\n\
-_0809F1F4:\n\
- ldr r0, [r2]\n\
- ldrb r1, [r2, 0x9]\n\
- ldrb r2, [r2, 0xA]\n\
- adds r3, r4, 0\n\
- bl StorageSystemGetNextMonIndex\n\
- b _0809F22C\n\
-_0809F202:\n\
- bl sub_80F9344\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _0809F224\n\
- bl IsLinkDoubleBattle\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _0809F224\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- bl sub_809F3CC\n\
- b _0809F22C\n\
-_0809F224:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- bl sub_809F284\n\
-_0809F22C:\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- movs r1, 0x1\n\
- negs r1, r1\n\
- cmp r0, r1\n\
- beq _0809F270\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- ldr r5, _0809F278 @ =gSharedMem + 0x18010\n\
- adds r0, r5, 0\n\
- bl GetMonStatusAndPokerus\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0809F258\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- bl sub_80A12D0\n\
-_0809F258:\n\
- adds r0, r5, 0\n\
- subs r0, 0x10\n\
- strb r4, [r0, 0x9]\n\
- ldr r1, _0809F27C @ =gTasks\n\
- lsls r0, r6, 2\n\
- adds r0, r6\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- ldr r1, [r0]\n\
- str r1, [r5, 0x74]\n\
- ldr r1, _0809F280 @ =sub_809F43C\n\
- str r1, [r0]\n\
-_0809F270:\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0809F278: .4byte gSharedMem + 0x18010\n\
-_0809F27C: .4byte gTasks\n\
-_0809F280: .4byte sub_809F43C\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-#ifdef NONMATCHING
s8 sub_809F284(s8 a)
{
struct Pokemon *mons = pssData.monList.partyMons;
@@ -1867,100 +1638,17 @@ s8 sub_809F284(s8 a)
return -1;
return pssData.monIndex + a;
}
- else
+
+ // unlike Emerald, the do while needs to be inversed in order to match
+ while (1)
{
- do
- {
- r6 += a;
- if (pssData.monIndex + r6 < 0 || pssData.monIndex + r6 > pssData.maxMonIndex)
- return -1;
- } while (GetMonData(&mons[pssData.monIndex + r6], MON_DATA_IS_EGG) != 0);
- return pssData.monIndex + r6;
+ r6 += a;
+ if (pssData.monIndex + r6 < 0 || pssData.monIndex + r6 > pssData.maxMonIndex)
+ return -1;
+ if (GetMonData(&mons[pssData.monIndex + r6], MON_DATA_IS_EGG) == 0)
+ return pssData.monIndex + r6;
}
}
-#else
-NAKED
-s8 sub_809F284(s8 a)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- ldr r0, _0809F2C0 @ =gSharedMem + 0x18000\n\
- ldr r7, [r0]\n\
- movs r6, 0\n\
- ldrb r1, [r0, 0xB]\n\
- adds r4, r0, 0\n\
- cmp r1, 0\n\
- bne _0809F2C4\n\
- lsls r0, r3, 24\n\
- asrs r2, r0, 24\n\
- movs r1, 0x1\n\
- negs r1, r1\n\
- adds r5, r0, 0\n\
- cmp r2, r1\n\
- bne _0809F2AC\n\
- ldrb r0, [r4, 0x9]\n\
- cmp r0, 0\n\
- beq _0809F2E4\n\
-_0809F2AC:\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x1\n\
- bne _0809F2BA\n\
- ldrb r0, [r4, 0x9]\n\
- ldrb r1, [r4, 0xA]\n\
- cmp r0, r1\n\
- bcs _0809F2E4\n\
-_0809F2BA:\n\
- ldrb r0, [r4, 0x9]\n\
- adds r0, r3\n\
- b _0809F304\n\
- .align 2, 0\n\
-_0809F2C0: .4byte gSharedMem + 0x18000\n\
-_0809F2C4:\n\
- lsls r5, r3, 24\n\
-_0809F2C6:\n\
- lsls r0, r6, 24\n\
- asrs r0, 24\n\
- asrs r1, r5, 24\n\
- adds r0, r1\n\
- lsls r0, 24\n\
- ldr r4, _0809F2EC @ =gSharedMem + 0x18000\n\
- lsrs r6, r0, 24\n\
- asrs r0, 24\n\
- ldrb r2, [r4, 0x9]\n\
- adds r1, r0, r2\n\
- cmp r1, 0\n\
- blt _0809F2E4\n\
- ldrb r0, [r4, 0xA]\n\
- cmp r1, r0\n\
- ble _0809F2F0\n\
-_0809F2E4:\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- b _0809F308\n\
- .align 2, 0\n\
-_0809F2EC: .4byte gSharedMem + 0x18000\n\
-_0809F2F0:\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- adds r0, r7, r0\n\
- movs r1, 0x2D\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _0809F2C6\n\
- ldrb r0, [r4, 0x9]\n\
- adds r0, r6\n\
-_0809F304:\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
-_0809F308:\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
bool8 sub_809F310(struct Pokemon *mon)
{
@@ -2740,175 +2428,51 @@ static void sub_80A04CC(u16 move)
}
}
-#ifdef NONMATCHING // The two vramAddr lines are non-matching.
void sub_80A057C(u16 move)
{
- u8 appeal;
- u8 jam;
u8 i;
- u16 *vramAddr = (u16 *)(VRAM + 0x6800);
+ u8 effectValue;
+ u16 *tilemap = (u16 *)(VRAM + 0x6800);
+ u16 tile;
- if (move == 0xFFFF) return;
-
- appeal = gContestEffects[gContestMoves[move].effect].appeal;
- if (appeal != 0xFF)
- appeal = appeal / 10;
-
- for (i = 0; i < 8; i++)
+ // The function didn't change much between Ruby and Emerald, but unlike
+ // Emerald, shifts are oddly an absolute requirement to match.
+ if (move != 0xFFFF)
{
- u16 tile = 0x1039;
- int and = 3;
- int offset = 0x3CC / 2;
- if (appeal != 0xFF && i < appeal)
- tile = 0x103A;
+ effectValue = gContestEffects[gContestMoves[move].effect].appeal;
+ if (effectValue != 0xFF)
+ effectValue /= 10;
- *(&vramAddr[((i >> 2) << 5) + (i & and)] + offset) = tile;
- }
-
- if (move == 0xFFFF) return;
+ for (i = 0; i < 8; i++)
+ {
+ if (effectValue != 0xFF && i < effectValue)
+ tile = 0x103A;
+ else
+ tile = 0x1039;
- jam = gContestEffects[gContestMoves[move].effect].jam;
- if (jam != 0xFF)
- {
- jam = jam / 10;
+ // The offset number has to go first, or else, r1 gets swapped with r0.
+ tilemap[0x1E6 + ((i >> 2) << 5) + (i & 3)] = tile;
+ }
}
- for (i = 0; i < 8; i++)
+ if (move != 0xFFFF)
{
- u16 tile = 0x103D;
- int and = 3;
- int offset = 0x226;
- if (jam != 0xFF && i < jam)
+ effectValue = gContestEffects[gContestMoves[move].effect].jam;
+ if (effectValue != 0xFF)
+ effectValue /= 10;
+
+ for (i = 0; i < 8; i++)
{
- tile = 0x103C;
- }
+ if (effectValue != 0xFF && i < effectValue)
+ tile = 0x103C;
+ else
+ tile = 0x103D;
- *(&vramAddr[((i >> 2) << 5) + (i & and)] + offset) = tile;
+ // match order above
+ tilemap[0x226 + ((i >> 2) << 5) + (i & 3)] = tile;
+ }
}
}
-#else
-NAKED
-void sub_80A057C(u16 move)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- ldr r0, _080A0648 @ =0x06006800\n\
- mov r8, r0\n\
- ldr r0, _080A064C @ =0x0000ffff\n\
- cmp r5, r0\n\
- beq _080A063A\n\
- ldr r1, _080A0650 @ =gContestEffects\n\
- ldr r2, _080A0654 @ =gContestMoves\n\
- lsls r3, r5, 3\n\
- adds r0, r3, r2\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r4, [r0, 0x1]\n\
- mov r10, r2\n\
- mov r9, r3\n\
- cmp r4, 0xFF\n\
- beq _080A05B8\n\
- adds r0, r4, 0\n\
- movs r1, 0xA\n\
- bl __udivsi3\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
-_080A05B8:\n\
- movs r2, 0\n\
- movs r7, 0x3\n\
- movs r6, 0xF3\n\
- lsls r6, 2\n\
-_080A05C0:\n\
- ldr r3, _080A0658 @ =0x00001039\n\
- cmp r4, 0xFF\n\
- beq _080A05CC\n\
- cmp r2, r4\n\
- bcs _080A05CC\n\
- adds r3, 0x1\n\
-_080A05CC:\n\
- lsrs r0, r2, 2\n\
- lsls r0, 5\n\
- adds r1, r2, 0\n\
- ands r1, r7\n\
- adds r1, r0\n" // start of nonmatching
- "lsls r1, 1\n\
- add r1, r8\n\
- adds r1, r6\n\
- strh r3, [r1]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- cmp r2, 0x7\n\
- bls _080A05C0\n\
- ldr r0, _080A064C @ =0x0000ffff\n\
- cmp r5, r0\n\
- beq _080A063A\n\
- mov r0, r9\n\
- add r0, r10\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- ldr r1, _080A0650 @ =gContestEffects\n\
- adds r0, r1\n\
- ldrb r4, [r0, 0x2]\n\
- cmp r4, 0xFF\n\
- beq _080A060C\n\
- adds r0, r4, 0\n\
- movs r1, 0xA\n\
- bl __udivsi3\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
-_080A060C:\n\
- movs r2, 0\n\
- movs r6, 0x3\n\
- ldr r5, _080A065C @ =0x0000044c\n\
-_080A0612:\n\
- ldr r3, _080A0660 @ =0x0000103d\n\
- cmp r4, 0xFF\n\
- beq _080A061E\n\
- cmp r2, r4\n\
- bcs _080A061E\n\
- subs r3, 0x1\n\
-_080A061E:\n\
- lsrs r0, r2, 2\n\
- lsls r0, 5\n\
- adds r1, r2, 0\n\
- ands r1, r6\n\
- adds r1, r0\n\
- lsls r1, 1\n\
- add r1, r8\n\
- adds r1, r5\n\
- strh r3, [r1]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- cmp r2, 0x7\n\
- bls _080A0612\n\
-_080A063A:\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\
- .align 2, 0\n\
-_080A0648: .4byte 0x06006800\n\
-_080A064C: .4byte 0x0000ffff\n\
-_080A0650: .4byte gContestEffects\n\
-_080A0654: .4byte gContestMoves\n\
-_080A0658: .4byte 0x00001039\n\
-_080A065C: .4byte 0x0000044c\n\
-_080A0660: .4byte 0x0000103d\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon)
{
@@ -3340,60 +2904,57 @@ static void DrawPokerusSurvivorDot(struct Pokemon *mon)
}
// Draws the 4 small navigation circles at the top of the pokemon summary screen.
-// complex nonmatching
-#ifdef NONMATCHING
void DrawSummaryScreenNavigationDots(void)
{
u16 arr[8];
- u8 i = 0;
- struct PokemonSummaryScreenStruct *SS = &pssData;
- u16 var1 = 0x4040;
- u16 var2 = 0x404A;
+ u8 i;
+
+ // Shifting 1 bit instead of multiplying by 2 is required to match.
for (i = 0; i < 4; i++)
{
- if (i < SS->firstPage)
+ if (i < pssData.firstPage)
{
- arr[i * 2] = var1;
- arr[(i * 2) + 1] = var1 + 1;
+ arr[i << 1] = 0x4040;
+ arr[(i << 1) + 1] = 0x4040;
}
- else if (i > SS->lastPage)
+ else if (i > pssData.lastPage)
{
- arr[i * 2] = var2;
- arr[(i * 2) + 1] = var2 + 1;
+ arr[i << 1] = 0x404A;
+ arr[(i << 1) + 1] = 0x404A;
}
else
{
- if (i < SS->page)
+ if (i < pssData.page)
{
- arr[i * 2] = 0x4046;
- arr[(i * 2) + 1] = 0x4046 + 1;
+ arr[i << 1] = 0x4046;
+ arr[(i << 1) + 1] = 0x4046 + 1;
}
- if (i == SS->page)
+ if (i == pssData.page)
{
- if (i != SS->lastPage)
+ if (i != pssData.lastPage)
{
- arr[i * 2] = 0x4041;
- arr[(i * 2) + 1] = 0x4041 + 1;
+ arr[i << 1] = 0x4041;
+ arr[(i << 1) + 1] = 0x4041 + 1;
}
else
{
- arr[i * 2] = 0x404B;
- arr[(i * 2) + 1] = 0x404B + 1;
+ arr[i << 1] = 0x404B;
+ arr[(i << 1) + 1] = 0x404B + 1;
}
}
- if (i > SS->page)
+ if (i > pssData.page)
{
- if (i != SS->lastPage)
+ if (i != pssData.lastPage)
{
- arr[i * 2] = 0x4043;
- arr[(i * 2) + 1] = 0x4043 + 1;
+ arr[i << 1] = 0x4043;
+ arr[(i << 1) + 1] = 0x4043 + 1;
}
else
{
- arr[i * 2] = 0x4048;
- arr[(i * 2) + 1] = 0x4048 + 1;
+ arr[i << 1] = 0x4048;
+ arr[(i << 1) + 1] = 0x4048 + 1;
}
}
}
@@ -3408,189 +2969,6 @@ void DrawSummaryScreenNavigationDots(void)
DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xE056), 16);
}
-#else
-NAKED
-void DrawSummaryScreenNavigationDots(void)
-{
- asm(".syntax 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, 0x10\n\
- movs r3, 0\n\
- ldr r6, _080A0F24 @ =gSharedMem + 0x18000\n\
- adds r5, r6, 0\n\
- ldr r1, _080A0F28 @ =0x00004040\n\
- mov r8, r1\n\
- ldr r2, _080A0F2C @ =0x0000404a\n\
- mov r10, r2\n\
-_080A0F02:\n\
- adds r0, r5, 0\n\
- adds r0, 0x75\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- bcs _080A0F30\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- add r0, sp\n\
- mov r4, r8\n\
- strh r4, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- mov r7, sp\n\
- adds r0, r7, r1\n\
- strh r4, [r0]\n\
- b _080A0FE2\n\
- .align 2, 0\n\
-_080A0F24: .4byte gSharedMem + 0x18000\n\
-_080A0F28: .4byte 0x00004040\n\
-_080A0F2C: .4byte 0x0000404a\n\
-_080A0F30:\n\
- movs r0, 0x76\n\
- adds r0, r6\n\
- mov r12, r0\n\
- ldrb r1, [r0]\n\
- cmp r3, r1\n\
- bls _080A0F52\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- add r0, sp\n\
- mov r2, r10\n\
- strh r2, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- mov r4, sp\n\
- adds r0, r4, r1\n\
- strh r2, [r0]\n\
- b _080A0FE2\n\
-_080A0F52:\n\
- ldrb r4, [r5, 0xB]\n\
- cmp r3, r4\n\
- bcs _080A0F6E\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r7, sp\n\
- adds r2, r7, r0\n\
- ldr r0, _080A0F88 @ =0x00004046\n\
- strh r0, [r2]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- add r1, sp\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080A0F6E:\n\
- cmp r3, r4\n\
- bne _080A0FA6\n\
- mov r0, r12\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- beq _080A0F90\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r4, sp\n\
- adds r2, r4, r0\n\
- ldr r0, _080A0F8C @ =0x00004041\n\
- b _080A0F9A\n\
- .align 2, 0\n\
-_080A0F88: .4byte 0x00004046\n\
-_080A0F8C: .4byte 0x00004041\n\
-_080A0F90:\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r7, sp\n\
- adds r2, r7, r0\n\
- ldr r0, _080A0FC4 @ =0x0000404b\n\
-_080A0F9A:\n\
- strh r0, [r2]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- add r1, sp\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080A0FA6:\n\
- ldrb r0, [r5, 0xB]\n\
- cmp r3, r0\n\
- bls _080A0FE2\n\
- adds r0, r6, 0\n\
- adds r0, 0x76\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- beq _080A0FCC\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r4, sp\n\
- adds r2, r4, r0\n\
- ldr r0, _080A0FC8 @ =0x00004043\n\
- b _080A0FD6\n\
- .align 2, 0\n\
-_080A0FC4: .4byte 0x0000404b\n\
-_080A0FC8: .4byte 0x00004043\n\
-_080A0FCC:\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r7, sp\n\
- adds r2, r7, r0\n\
- ldr r0, _080A1034 @ =0x00004048\n\
-_080A0FD6:\n\
- strh r0, [r2]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- add r1, sp\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080A0FE2:\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x3\n\
- bls _080A0F02\n\
- ldr r1, _080A1038 @ =0x0600e016\n\
- ldr r0, _080A103C @ =0x040000d4\n\
- mov r2, sp\n\
- str r2, [r0]\n\
- str r1, [r0, 0x4]\n\
- ldr r1, _080A1040 @ =0x80000008\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- movs r3, 0\n\
-_080A0FFE:\n\
- lsls r0, r3, 1\n\
- mov r4, sp\n\
- adds r1, r4, r0\n\
- ldrh r0, [r1]\n\
- adds r0, 0x10\n\
- strh r0, [r1]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x7\n\
- bls _080A0FFE\n\
- ldr r1, _080A1044 @ =0x0600e056\n\
- ldr r0, _080A103C @ =0x040000d4\n\
- str r4, [r0]\n\
- str r1, [r0, 0x4]\n\
- ldr r1, _080A1040 @ =0x80000008\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- add sp, 0x10\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\
- .align 2, 0\n\
-_080A1034: .4byte 0x00004048\n\
-_080A1038: .4byte 0x0600e016\n\
-_080A103C: .4byte 0x040000d4\n\
-_080A1040: .4byte 0x80000008\n\
-_080A1044: .4byte 0x0600e056\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
NAKED
void sub_80A1048(u8 taskId)
@@ -4758,7 +4136,7 @@ static void sub_80A1BC0(struct Sprite *sprite)
#define shared1A009 ((u8 *)(gSharedMem + 0x1A009))
-void sub_80A1C30(u8 a)
+static void sub_80A1C30(u8 a)
{
u8 r3;
@@ -4805,7 +4183,6 @@ u8 GetMonStatusAndPokerus(struct Pokemon *mon)
return statusAilment;
}
-#ifdef NONMATCHING
void sub_80A1D18(void)
{
struct Pokemon mon;
@@ -4818,9 +4195,6 @@ void sub_80A1D18(void)
if (statusAndPkrs)
{
statusAndPkrs2 = statusAndPkrs - 1;
-
- if (ewram1A000[29] == 0xFF)
- ewram1A000[29] = CreateSprite(&sSpriteTemplate_StatusCondition, 64, 152, 0);
}
else
{
@@ -4828,65 +4202,10 @@ void sub_80A1D18(void)
return;
}
+ if (ewram1A000[29] == 0xFF)
+ ewram1A000[29] = CreateSprite(&sSpriteTemplate_StatusCondition, 64, 152, 0);
StartSpriteAnim(&gSprites[ewram1A000[29]], statusAndPkrs2);
}
-#else
-NAKED
-void sub_80A1D18(void)
-{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- sub sp, 0x64\n\
- mov r0, sp\n\
- bl SummaryScreen_GetPokemon\n\
- mov r0, sp\n\
- bl GetMonStatusAndPokerus\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0\n\
- beq _080A1D58\n\
- subs r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- ldr r4, _080A1D50 @ =gSharedMem + 0x1A01D\n\
- ldrb r0, [r4]\n\
- cmp r0, 0xFF\n\
- bne _080A1D60\n\
- ldr r0, _080A1D54 @ =sSpriteTemplate_StatusCondition\n\
- movs r1, 0x40\n\
- movs r2, 0x98\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- strb r0, [r4]\n\
- b _080A1D60\n\
- .align 2, 0\n\
-_080A1D50: .4byte gSharedMem + 0x1A01D\n\
-_080A1D54: .4byte sSpriteTemplate_StatusCondition\n\
-_080A1D58:\n\
- movs r0, 0x1D\n\
- bl sub_80A18E4\n\
- b _080A1D74\n\
-_080A1D60:\n\
- ldr r0, _080A1D7C @ =gSharedMem + 0x1A01D\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- ldr r1, _080A1D80 @ =gSprites\n\
- adds r0, r1\n\
- adds r1, r5, 0\n\
- bl StartSpriteAnim\n\
-_080A1D74:\n\
- add sp, 0x64\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A1D7C: .4byte gSharedMem + 0x1A01D\n\
-_080A1D80: .4byte gSprites\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
static void sub_80A1D84(struct Pokemon *mon)
{
diff --git a/src/roulette.c b/src/roulette.c
index c4f6067a1..40acd41c8 100644
--- a/src/roulette.c
+++ b/src/roulette.c
@@ -1661,16 +1661,31 @@ void Task_Roulette_0(u8 taskid)
#if DEBUG
+#if (ENGLISH && REVISION == 0)
+ static const u8 gUnknown_Debug_0842510D[] = _("コインの かず STARTで きめて\nAーp1 Bーm1 R:Lー×10");
+#else
+ static const u8 gUnknown_Debug_0842510D[] = _("Set COIN and Press START\nAーp1 Bーm1 R:Lー×10");
+#endif
+
void debug_sub_812CDE4(u8 taskId)
{
+#if (ENGLISH && REVISION == 0)
+ u8 coinText[] = {0xFD, 0x02, 0xFF};
+#endif
+
if (gMain.newKeys & A_BUTTON)
{
gTasks[taskId].data[13]++;
if (gTasks[taskId].data[13] == 10000)
gTasks[taskId].data[13] = 0;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
+#if (ENGLISH && REVISION == 0)
+ StringExpandPlaceholders(gStringVar4, coinText);
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
}
else if (gMain.newKeys & B_BUTTON)
{
@@ -1678,8 +1693,13 @@ void debug_sub_812CDE4(u8 taskId)
if (gTasks[taskId].data[13] == -1)
gTasks[taskId].data[13] = 9999;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
+#if (ENGLISH && REVISION == 0)
+ StringExpandPlaceholders(gStringVar4, coinText);
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
}
else if (gMain.newKeys & R_BUTTON)
{
@@ -1687,8 +1707,13 @@ void debug_sub_812CDE4(u8 taskId)
if (gTasks[taskId].data[13] > 9999)
gTasks[taskId].data[13] -= 9999;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
+#if (ENGLISH && REVISION == 0)
+ StringExpandPlaceholders(gStringVar4, coinText);
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
}
else if (gMain.newKeys & L_BUTTON)
{
@@ -1696,16 +1721,26 @@ void debug_sub_812CDE4(u8 taskId)
if (gTasks[taskId].data[13] < 0)
gTasks[taskId].data[13] += 9999;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
+#if (ENGLISH && REVISION == 0)
+ StringExpandPlaceholders(gStringVar4, coinText);
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
}
else if (gMain.newKeys & START_BUTTON)
{
gSaveBlock1.coins = gTasks[taskId].data[13];
gTasks[taskId].func = Task_Roulette_0;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
+#if (ENGLISH && REVISION == 0)
+ StringExpandPlaceholders(gStringVar4, coinText);
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
unk_2039560 = 0;
}
else if (gMain.newKeys & SELECT_BUTTON)
@@ -1713,22 +1748,30 @@ void debug_sub_812CDE4(u8 taskId)
gSaveBlock1.coins = gTasks[taskId].data[13];
gTasks[taskId].func = Task_Roulette_0;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
+#if (ENGLISH && REVISION == 0)
+ StringExpandPlaceholders(gStringVar4, coinText);
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
unk_2039560 = 1;
}
}
void debug_sub_812CFE8(u8 taskId)
{
- static const u8 gUnknown_Debug_0842510D[] = _("Set COIN and Press START\nAーp1 Bーm1 R:Lー×10");
gTasks[taskId].data[13] = gSaveBlock1.coins;
if (Random() & 1)
gSpecialVar_0x8004 |= 128;
ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[13], 1, 4);
StringExpandPlaceholders(gStringVar4, gOtherText_Coins);
Menu_DrawStdWindowFrame(0, 0, 9, 3);
+#if (ENGLISH && REVISION == 0)
+ Menu_PrintText(gStringVar4, 2, 1);
+#else
MenuPrint_RightAligned(gStringVar4, 9, 1);
+#endif
Menu_DrawStdWindowFrame(0, 14, 29, 19);
Menu_PrintText(gUnknown_Debug_0842510D, 1, 15);
gTasks[taskId].func = debug_sub_812CDE4;
diff --git a/src/roulette_gfx.c b/src/roulette_gfx.c
index 83e5fb149..46188123b 100644
--- a/src/roulette_gfx.c
+++ b/src/roulette_gfx.c
@@ -1626,32 +1626,33 @@ void sub_81193D4(struct Sprite *sprite)
eRoulette->var38 = sprite;
}
-#ifdef NONMATCHING
void sub_811952C(struct Sprite *sprite)
{
- u8 i;
u8 z;
u16 o;
- u8 h = 0; // r10 (sp+12)
- u8 j = 5; // r9 (r9)
- u8 p = 0; // sp+12 (sp+16)
- u8 s[10] = {}; // sp+0 (sp+0)
- u16 t = Random(); // sp+16 (r10)
+ u8 h = 0;
+ u8 j = 5;
+ u8 p = 0;
+ u8 i = 0;
+ u8 val;
+ u8 s[10] = {};
+ u16 rand = Random();
- eRoulette->var7D = 1;
+ eRoulette->var7D = 1;
eRoulette->var03_5 = TRUE;
eRoulette->var03_6 = FALSE;
- eRoulette->var7E = 255;
- eRoulette->var88 = sprite->data[3];
- eRoulette->var98 = 0.0f;
- eRoulette->var8C = gUnknown_083F8DF4[eRoulette->var04_0].var1C;
- o = (eRoulette->var04_0 * 30 + 33) + (1 - eRoulette->var03_0) * 15;
+ eRoulette->var7E = 0xFF;
+ eRoulette->var88 = sprite->data[3];
+ eRoulette->var98 = 0.0f;
+ eRoulette->var8C = gUnknown_083F8DF4[eRoulette->var04_0].var1C;
+
+ o = (eRoulette->var04_0 * 30 + 33) + (0x1 - eRoulette->var03_0) * 15;
for (i = 0; i < 4; i++)
{
if (o < sprite->data[3] && sprite->data[3] <= o + 90)
{
- sprite->data[0] = i << 1;
- eRoulette->var03_0 = i & 1;
+ sprite->data[0] = i / 2;
+ eRoulette->var03_0 = i % 2;
break;
}
if (i == 3)
@@ -1662,358 +1663,52 @@ void sub_811952C(struct Sprite *sprite)
}
o += 90;
}
+
if (eRoulette->var03_0)
{
if (sprite->data[0])
- {
PlayCry1(SPECIES_TAILLOW, -63);
- }
else
- {
PlayCry1(SPECIES_TAILLOW, 63);
- }
}
else
{
PlayCry1(SPECIES_SHROOMISH, -63);
}
- i = 2;
+
+ val = 2;
z = (eRoulette->var7F + 2) % 12;
+
if (eRoulette->var03_0 == 1 && eRoulette->var04_0 == 1)
j += 6;
else
- j += i;
- for (; i < j; i++)
+ j += val;
+
+ for (i = val; i < j; i++)
{
if (!(eRoulette->var08 & gUnknown_083F8D90[z].var04))
{
s[h++] = i;
- if (!p && (gUnknown_083F8D90[z].var04 & gUnknown_083F8C00[eRoulette->var1B[eRoulette->var1A_0]].var00))
- {
+ if (p == 0 && (gUnknown_083F8D90[z].var04 & gUnknown_083F8C00[eRoulette->var1B[eRoulette->var1A_0]].var0C))
p = i;
- }
}
- z = (z + 1) % 12;
+ z = (z + 1) % 0xC;
}
+
if ((eRoulette->var03_0 + 1) & eRoulette->var02)
{
- if (p && (t & 0xFF) < 192)
- {
+ if (p && (rand & 0xFF) < 0xc0)
sprite->data[7] = p;
- }
else
- {
- sprite->data[7] = s[t % h];
- }
+ sprite->data[7] = s[rand % h];
}
else
{
- sprite->data[7] = s[t % h];
+ sprite->data[7] = s[rand % h];
}
+
sprite->callback = sub_8118CEC;
}
-#else
-NAKED
-void sub_811952C(struct Sprite *sprite)
-{
- asm_unified("push {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 20\n"
- "\tmov r8, r0\n"
- "\tmovs r0, 0\n"
- "\tmov r10, r0\n"
- "\tmovs r1, 5\n"
- "\tmov r9, r1\n"
- "\tmovs r2, 0\n"
- "\tstr r2, [sp, 12]\n"
- "\tmov r0, sp\n"
- "\tmovs r1, 0\n"
- "\tmovs r2, 10\n"
- "\tbl memset\n"
- "\tbl Random\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tstr r0, [sp, 16]\n"
- "\tldr r7, _08119610 @ =gSharedMem + 0x19000\n"
- "\tadds r0, r7, 0\n"
- "\tadds r0, 125\n"
- "\tmovs r6, 1\n"
- "\tstrb r6, [r0]\n"
- "\tldrb r4, [r7, 3]\n"
- "\tmovs r0, 32\n"
- "\torrs r4, r0\n"
- "\tmovs r0, 65\n"
- "\tnegs r0, r0\n"
- "\tands r4, r0\n"
- "\tstrb r4, [r7, 3]\n"
- "\tadds r1, r7, 0\n"
- "\tadds r1, 126\n"
- "\tmovs r0, 255\n"
- "\tstrb r0, [r1]\n"
- "\tadds r5, r7, 0\n"
- "\tadds r5, 136\n"
- "\tmov r3, r8\n"
- "\tmovs r1, 52\n"
- "\tldrsh r0, [r3, r1]\n"
- "\tbl __floatsisf\n"
- "\tstr r0, [r5]\n"
- "\tadds r1, r7, 0\n"
- "\tadds r1, 152\n"
- "\tldr r0, _08119614 @ =0\n"
- "\tstr r0, [r1]\n"
- "\tadds r3, r7, 0\n"
- "\tadds r3, 140\n"
- "\tldr r2, _08119618 @ =gUnknown_083F8DF4\n"
- "\tldrb r0, [r7, 4]\n"
- "\tlsls r0, 30\n"
- "\tlsrs r1, r0, 25\n"
- "\tadds r2, 28\n"
- "\tadds r1, r2\n"
- "\tldr r1, [r1]\n"
- "\tstr r1, [r3]\n"
- "\tlsrs r0, 30\n"
- "\tlsls r1, r0, 4\n"
- "\tsubs r1, r0\n"
- "\tlsls r1, 1\n"
- "\tadds r1, 33\n"
- "\tlsls r4, 27\n"
- "\tlsrs r4, 27\n"
- "\tsubs r6, r4\n"
- "\tlsls r0, r6, 4\n"
- "\tsubs r0, r6\n"
- "\tadds r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r1, 16\n"
- "\tmov r5, r10\n"
- "\tmov r3, r8\n"
- "\tmovs r0, 52\n"
- "\tldrsh r2, [r3, r0]\n"
- "_081195C8:\n"
- "\tcmp r1, r2\n"
- "\tbge _081195D4\n"
- "\tadds r0, r1, 0\n"
- "\tadds r0, 90\n"
- "\tcmp r2, r0\n"
- "\tble _08119638\n"
- "_081195D4:\n"
- "\tcmp r5, 3\n"
- "\tbeq _0811961C\n"
- "\tadds r0, r1, 0\n"
- "\tadds r0, 90\n"
- "\tlsls r0, 16\n"
- "\tlsrs r1, r0, 16\n"
- "\tadds r0, r5, 1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tcmp r5, 3\n"
- "\tbls _081195C8\n"
- "_081195EA:\n"
- "\tldr r0, _08119610 @ =gSharedMem + 0x19000\n"
- "\tldrb r1, [r0, 3]\n"
- "\tmovs r0, 31\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _08119664\n"
- "\tmov r1, r8\n"
- "\tmovs r2, 46\n"
- "\tldrsh r0, [r1, r2]\n"
- "\tcmp r0, 0\n"
- "\tbeq _08119658\n"
- "\tmovs r0, 152\n"
- "\tlsls r0, 1\n"
- "\tmovs r1, 63\n"
- "\tnegs r1, r1\n"
- "\tbl PlayCry1\n"
- "\tb _08119670\n"
- "\t.align 2, 0\n"
- "_08119610: .4byte gSharedMem + 0x19000\n"
- "_08119614: .4byte 0\n"
- "_08119618: .4byte gUnknown_083F8DF4\n"
- "_0811961C:\n"
- "\tmovs r0, 1\n"
- "\tmov r3, r8\n"
- "\tstrh r0, [r3, 46]\n"
- "\tldr r2, _08119634 @ =gSharedMem + 0x19000\n"
- "\tldrb r1, [r2, 3]\n"
- "\tsubs r0, 33\n"
- "\tands r0, r1\n"
- "\tmovs r1, 1\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r2, 3]\n"
- "\tb _081195EA\n"
- "\t.align 2, 0\n"
- "_08119634: .4byte gSharedMem + 0x19000\n"
- "_08119638:\n"
- "\tlsrs r0, r5, 1\n"
- "\tmov r1, r8\n"
- "\tstrh r0, [r1, 46]\n"
- "\tldr r3, _08119654 @ =gSharedMem + 0x19000\n"
- "\tmovs r1, 1\n"
- "\tands r1, r5\n"
- "\tldrb r2, [r3, 3]\n"
- "\tmovs r0, 32\n"
- "\tnegs r0, r0\n"
- "\tands r0, r2\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r3, 3]\n"
- "\tb _081195EA\n"
- "\t.align 2, 0\n"
- "_08119654: .4byte gSharedMem + 0x19000\n"
- "_08119658:\n"
- "\tmovs r0, 152\n"
- "\tlsls r0, 1\n"
- "\tmovs r1, 63\n"
- "\tbl PlayCry1\n"
- "\tb _08119670\n"
- "_08119664:\n"
- "\tmovs r0, 153\n"
- "\tlsls r0, 1\n"
- "\tmovs r1, 63\n"
- "\tnegs r1, r1\n"
- "\tbl PlayCry1\n"
- "_08119670:\n"
- "\tmovs r5, 2\n"
- "\tldr r4, _081196A0 @ =gSharedMem + 0x19000\n"
- "\tadds r0, r4, 0\n"
- "\tadds r0, 127\n"
- "\tldrb r0, [r0]\n"
- "\tadds r0, 2\n"
- "\tmovs r1, 12\n"
- "\tbl __modsi3\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tldrb r1, [r4, 3]\n"
- "\tmovs r0, 31\n"
- "\tands r0, r1\n"
- "\tcmp r0, 1\n"
- "\tbne _081196A4\n"
- "\tldrb r1, [r4, 4]\n"
- "\tmovs r0, 3\n"
- "\tands r0, r1\n"
- "\tcmp r0, 1\n"
- "\tbne _081196A4\n"
- "\tmov r0, r9\n"
- "\tadds r0, 6\n"
- "\tb _081196A8\n"
- "\t.align 2, 0\n"
- "_081196A0: .4byte gSharedMem + 0x19000\n"
- "_081196A4:\n"
- "\tmov r2, r9\n"
- "\tadds r0, r2, r5\n"
- "_081196A8:\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r9, r0\n"
- "\tcmp r5, r9\n"
- "\tbcs _0811970E\n"
- "\tldr r6, _08119734 @ =gSharedMem + 0x19000\n"
- "\tldr r7, _08119738 @ =gUnknown_083F8C00 + 12\n"
- "_081196B6:\n"
- "\tlsls r0, r3, 3\n"
- "\tldr r1, _0811973C @ =gUnknown_083F8D90 + 4\n"
- "\tadds r0, r1\n"
- "\tldr r1, [r6, 8]\n"
- "\tldr r2, [r0]\n"
- "\tands r1, r2\n"
- "\tcmp r1, 0\n"
- "\tbne _081196F8\n"
- "\tmov r0, r10\n"
- "\tadds r1, r0, 1\n"
- "\tlsls r1, 24\n"
- "\tlsrs r1, 24\n"
- "\tmov r10, r1\n"
- "\tadd r0, sp\n"
- "\tstrb r5, [r0]\n"
- "\tldr r0, [sp, 12]\n"
- "\tcmp r0, 0\n"
- "\tbne _081196F8\n"
- "\tldrb r0, [r6, 26]\n"
- "\tlsls r0, 28\n"
- "\tlsrs r0, 28\n"
- "\tldr r1, _08119740 @ =gSharedMem + 0x1901b\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tlsls r0, r1, 2\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 2\n"
- "\tadds r0, r7\n"
- "\tldr r0, [r0]\n"
- "\tands r2, r0\n"
- "\tcmp r2, 0\n"
- "\tbeq _081196F8\n"
- "\tstr r5, [sp, 12]\n"
- "_081196F8:\n"
- "\tadds r0, r3, 1\n"
- "\tmovs r1, 12\n"
- "\tbl __modsi3\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tadds r0, r5, 1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tcmp r5, r9\n"
- "\tbcc _081196B6\n"
- "_0811970E:\n"
- "\tldrb r0, [r4, 3]\n"
- "\tlsls r0, 27\n"
- "\tlsrs r0, 27\n"
- "\tadds r0, 1\n"
- "\tldrb r1, [r4, 2]\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _08119756\n"
- "\tldr r2, [sp, 12]\n"
- "\tcmp r2, 0\n"
- "\tbeq _08119744\n"
- "\tmovs r0, 255\n"
- "\tldr r3, [sp, 16]\n"
- "\tands r0, r3\n"
- "\tcmp r0, 191\n"
- "\tbhi _08119744\n"
- "\tmov r0, r8\n"
- "\tstrh r2, [r0, 60]\n"
- "\tb _08119766\n"
- "\t.align 2, 0\n"
- "_08119734: .4byte gSharedMem + 0x19000\n"
- "_08119738: .4byte gUnknown_083F8C00 + 12\n"
- "_0811973C: .4byte gUnknown_083F8D90 + 4\n"
- "_08119740: .4byte gSharedMem + 0x1901b\n"
- "_08119744:\n"
- "\tldr r0, [sp, 16]\n"
- "\tmov r1, r10\n"
- "\tbl __modsi3\n"
- "\tadd r0, sp\n"
- "\tldrb r0, [r0]\n"
- "\tmov r1, r8\n"
- "\tstrh r0, [r1, 60]\n"
- "\tb _08119766\n"
- "_08119756:\n"
- "\tldr r0, [sp, 16]\n"
- "\tmov r1, r10\n"
- "\tbl __modsi3\n"
- "\tadd r0, sp\n"
- "\tldrb r0, [r0]\n"
- "\tmov r2, r8\n"
- "\tstrh r0, [r2, 60]\n"
- "_08119766:\n"
- "\tldr r3, _0811977C @ =sub_8118CEC\n"
- "\tmov r0, r8\n"
- "\tstr r3, [r0, 28]\n"
- "\tadd sp, 20\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.align 2, 0\n"
- "_0811977C: .4byte sub_8118CEC");
-}
-#endif
const u16 gUnknown_083FA61E[] = {
BLDALPHA_BLEND( 7, 9),
diff --git a/src/save.c b/src/save.c
index 3eeea88de..3b6cabe6a 100644
--- a/src/save.c
+++ b/src/save.c
@@ -738,7 +738,7 @@ u8 Save_WriteDataInternal(u8 saveType)
return 0;
}
-#if DEBUG
+#if (DEBUG && GERMAN)
extern u32 gUnknown_Debug_03004BD0;
#endif
@@ -749,7 +749,7 @@ u8 Save_WriteData(u8 saveType) // TrySave
Save_WriteDataInternal(saveType);
if (!gDamagedSaveSectors
-#if DEBUG
+#if (DEBUG && GERMAN)
&& gUnknown_Debug_03004BD0 == 0
#endif
)
diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c
index f5544bc65..9ef5f541c 100644
--- a/src/save_failed_screen.c
+++ b/src/save_failed_screen.c
@@ -155,7 +155,7 @@ static void CB2_WipeSave(void)
gSaveFailedClockInfo[0] = TRUE;
-#if DEBUG
+#if (DEBUG && !(ENGLISH && REVISION == 0))
if (gUnknown_Debug_03004BD0 != 0)
gDamagedSaveSectors = 1;
#endif
@@ -277,7 +277,7 @@ static bool8 IsSectorNonEmpty(u16 sector)
ReadFlash(sector, 0, ptr, 4096);
-#if DEBUG // Don't verify the sector wipe?
+#if (DEBUG && !(ENGLISH && REVISION == 0)) // Don't verify the sector wipe?
for (i = 0; i < 0x400; i++, ptr++)
;
return gUnknown_Debug_03004BD0;
diff --git a/src/secret_base.c b/src/secret_base.c
index 21dd83dd2..b37da51d1 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -872,7 +872,11 @@ void sub_80BC6B0(u8 taskId)
Menu_PrintText(gOtherText_Exit, 18, 2 * n + 2);
DestroyVerticalScrollIndicator(BOTTOM_ARROW);
if (n != 7)
- Menu_BlankWindowRect(18, ((n << 25) + (1 << 26)) >> 24, 28, 18); // the shifts are needed to match
+ {
+ n++;
+ n--;
+ Menu_BlankWindowRect(18, n * 2 + 4, 28, 18);
+ }
}
else
{
diff --git a/src/slot_machine.c b/src/slot_machine.c
index c03ae0dfa..c6cbdb1c8 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -5677,7 +5677,7 @@ void debug_sub_811B310(void)
PRINT_NUMBER(eSlotMachine->unk6C, 10, 5);
PRINT_NUMBER(eSlotMachine->unk10, 10, 7);
-#if DEBUG_TRANSLATE
+#if DEBUG_FIX
#define OFFSET 24 // wider window
#else
#define OFFSET 20
@@ -5785,7 +5785,7 @@ static void debug_sub_811B654(u8 taskId)
switch (task->data[0])
{
case 0:
-#if DEBUG_TRANSLATE
+#if DEBUG_FIX
Menu_DrawStdWindowFrame(0, 0, 28, 19); // wider window
#else
Menu_DrawStdWindowFrame(0, 0, 24, 19);
diff --git a/src/text.c b/src/text.c
index dbf74ab61..d963045df 100644
--- a/src/text.c
+++ b/src/text.c
@@ -6,6 +6,7 @@
#include "constants/songs.h"
#include "sound.h"
#include "string_util.h"
+#include "start_menu.h"
enum
{
@@ -2078,7 +2079,7 @@ static u8 sub_8002FA0(struct Window *win, const u8 *text)
static u8 PrintNextChar(struct Window *win)
{
- u8 c = win->text[win->textIndex++];
+ u32 c = win->text[win->textIndex++];
// Handle special control characters
switch (c)
@@ -2106,6 +2107,12 @@ static u8 PrintNextChar(struct Window *win)
return HandleExtCtrlCode(win);
}
+// TODO: see if this is in rev1+
+#if (DEBUG && ENGLISH && REVISION == 0)
+ // Code related to the Murakawa task.
+ if ((gUnknown_Debug_03004BD0) && (!gUnknown_Debug_Murakawa2))
+ c = win->textMode + CHAR_0;
+#endif
sPrintGlyphFuncs[win->textMode](win, c);
return 1;
}
diff --git a/src/trade.c b/src/trade.c
index 424a503bf..8d57cd60b 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -454,46 +454,38 @@ const u8 gTradeMonSpriteCoords[][2] = {
{23, 18} // CANCEL
};
-const u8 gTradeLevelDisplayCoords[2][6][2] = {
- {
- // Your party
- {5, 4},
- {12, 4},
- {5, 9},
- {12, 9},
- {5, 14},
- {12, 14},
- },
- {
- // Friend's party
- {20, 4},
- {27, 4},
- {20, 9},
- {27, 9},
- {20, 14},
- {27, 14}
- }
+const u8 gTradeLevelDisplayCoords[][2] = {
+ // Your party
+ {5, 4},
+ {12, 4},
+ {5, 9},
+ {12, 9},
+ {5, 14},
+ {12, 14},
+ // Friend's party
+ {20, 4},
+ {27, 4},
+ {20, 9},
+ {27, 9},
+ {20, 14},
+ {27, 14}
};
-const u8 gTradeMonBoxCoords[2][6][2] = {
- {
- // Your party
- {1, 3},
- {8, 3},
- {1, 8},
- {8, 8},
- {1, 13},
- {8, 13},
- },
- {
- // Friend's party
- {16, 3},
- {23, 3},
- {16, 8},
- {23, 8},
- {16, 13},
- {23, 13}
- }
+const u8 gTradeMonBoxCoords[][2] = {
+ // Your party
+ {1, 3},
+ {8, 3},
+ {1, 8},
+ {8, 8},
+ {1, 13},
+ {8, 13},
+ // Friend's party
+ {16, 3},
+ {23, 3},
+ {16, 8},
+ {23, 8},
+ {16, 13},
+ {23, 13}
};
const u8 gTradeUnknownSpriteCoords[][2][2] = {
@@ -3054,71 +3046,15 @@ void sub_804A51C(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4, u8 a5)
#endif
}
-// simple nonmatching, supposedly from a CSE optimization
-#ifdef NONMATCHING
static void sub_804A6DC(u8 whichParty)
{
int i;
- for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i ++)
+ for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i++)
{
- sub_804A51C(whichParty, i, gTradeLevelDisplayCoords[whichParty][i][0], gTradeLevelDisplayCoords[whichParty][i][1], gTradeMonBoxCoords[whichParty][i][0], gTradeMonBoxCoords[whichParty][i][1]);
+ int loc = i + whichParty * 6;
+ sub_804A51C(whichParty, i, gTradeLevelDisplayCoords[loc][0], gTradeLevelDisplayCoords[loc][1], gTradeMonBoxCoords[loc][0], gTradeMonBoxCoords[loc][1]);
}
}
-#else
-NAKED
-static void sub_804A6DC(u8 whichParty)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tsub sp, 0x8\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tmovs r7, 0\n"
- "\tldr r0, _0804A734 @ =gUnknown_03004824\n"
- "\tldr r0, [r0]\n"
- "\tadds r0, 0x42\n"
- "\tadds r0, r6\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r7, r0\n"
- "\tbge _0804A72C\n"
- "\tlsls r0, r6, 1\n"
- "\tadds r0, r6\n"
- "\tldr r1, _0804A738 @ =gTradeLevelDisplayCoords\n"
- "\tlsls r0, 2\n"
- "\tadds r5, r0, r1\n"
- "\tldr r1, _0804A73C @ =gTradeMonBoxCoords\n"
- "\tadds r4, r0, r1\n"
- "_0804A702:\n"
- "\tlsls r1, r7, 24\n"
- "\tlsrs r1, 24\n"
- "\tldrb r2, [r5]\n"
- "\tldrb r3, [r5, 0x1]\n"
- "\tldrb r0, [r4]\n"
- "\tstr r0, [sp]\n"
- "\tldrb r0, [r4, 0x1]\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tadds r0, r6, 0\n"
- "\tbl sub_804A51C\n"
- "\tadds r5, 0x2\n"
- "\tadds r4, 0x2\n"
- "\tadds r7, 0x1\n"
- "\tldr r0, _0804A734 @ =gUnknown_03004824\n"
- "\tldr r0, [r0]\n"
- "\tadds r0, 0x42\n"
- "\tadds r0, r6\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r7, r0\n"
- "\tblt _0804A702\n"
- "_0804A72C:\n"
- "\tadd sp, 0x8\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_0804A734: .4byte gUnknown_03004824\n"
- "_0804A738: .4byte gTradeLevelDisplayCoords\n"
- "_0804A73C: .4byte gTradeMonBoxCoords");
-}
-#endif
static void sub_804A740(u8 whichParty)
{
@@ -3495,68 +3431,31 @@ static void sub_804B128(void)
REG_BG2Y = dest.dy;
}
-// register swap with volatile, wtf !how
-#ifdef NONMATCHING
static void sub_804B1BC(void)
{
- REG_BG1VOFS = gUnknown_03004828->bg1vofs, REG_BG1HOFS = gUnknown_03004828->bg1hofs;
- //temp = ;
- //asm(""::"r"(gUnknown_03004828->bg2vofs));
- if (REG_DISPCNT % 8 == 0)
+ u16 dispcnt;
+
+ REG_BG1VOFS = gUnknown_03004828->bg1vofs;
+ REG_BG1HOFS = gUnknown_03004828->bg1hofs;
+
+ /*
+ A u16 cast allows for REG_DISPCNT storage to be swapped.
+ This is required for the function to match.
+
+ You can see this less obfuscated in FireRed and Emerald,
+ since they use gflib's GPU manager for this instead.
+ */
+ dispcnt = (*(u16 *)REG_ADDR_DISPCNT);
+ if ((dispcnt & 7) == DISPCNT_MODE_0)
{
- REG_BG2VOFS = gUnknown_03004828->bg2vofs, REG_BG2HOFS = gUnknown_03004828->bg2hofs;
+ REG_BG2VOFS = gUnknown_03004828->bg2vofs;
+ REG_BG2HOFS = gUnknown_03004828->bg2hofs;
}
else
{
sub_804B128();
}
}
-#else
-NAKED static void sub_804B1BC(void)
-{
- asm_unified("\tpush {lr}\n"
- "\tldr r1, _0804B1FC @ =REG_BG1VOFS\n"
- "\tldr r0, _0804B200 @ =gUnknown_03004828\n"
- "\tldr r2, [r0]\n"
- "\tmovs r3, 0x88\n"
- "\tlsls r3, 1\n"
- "\tadds r0, r2, r3\n"
- "\tldrh r0, [r0]\n"
- "\tstrh r0, [r1]\n"
- "\tsubs r1, 0x2\n"
- "\tadds r3, 0x2\n"
- "\tadds r0, r2, r3\n"
- "\tldrh r0, [r0]\n"
- "\tstrh r0, [r1]\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 19\n"
- "\tldrh r0, [r0]\n"
- "\tmovs r1, 0x7\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbne _0804B208\n"
- "\tldr r1, _0804B204 @ =REG_BG2VOFS\n"
- "\tadds r3, 0x2\n"
- "\tadds r0, r2, r3\n"
- "\tldrh r0, [r0]\n"
- "\tstrh r0, [r1]\n"
- "\tsubs r1, 0x2\n"
- "\tadds r3, 0x2\n"
- "\tadds r0, r2, r3\n"
- "\tldrh r0, [r0]\n"
- "\tstrh r0, [r1]\n"
- "\tb _0804B20C\n"
- "\t.align 2, 0\n"
- "_0804B1FC: .4byte REG_BG1VOFS\n"
- "_0804B200: .4byte gUnknown_03004828\n"
- "_0804B204: .4byte REG_BG2VOFS\n"
- "_0804B208:\n"
- "\tbl sub_804B128\n"
- "_0804B20C:\n"
- "\tpop {r0}\n"
- "\tbx r0");
-}
-#endif
static void sub_804B210(void)
{
diff --git a/src/trainer_card.c b/src/trainer_card.c
index b6eb28005..0e44c7cfc 100644
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -816,19 +816,12 @@ bool8 TrainerCard_InitFlipAnimation(struct Task *task)
return FALSE;
}
-/*
bool8 TrainerCard_ScaleDownFlipAnimation(struct Task *task)
{
- u32 r7;
- u16 r9;
- u32 r6;
- u32 r5;
- u32 r4;
- u32 r10;
- u32 sp0;
s16 i;
+ u32 r4, r5, r10, r7, r6, var_24, r9, var;
- ewram0_2.var_4 = 0;
+ ewram0_2.var_4 = FALSE;
task->data[1] += 3;
if (task->data[1] > 79)
task->data[1] = 79;
@@ -837,183 +830,33 @@ bool8 TrainerCard_ScaleDownFlipAnimation(struct Task *task)
r9 = 160 - r7;
r4 = r9 - r7;
r6 = -r7 << 16;
- r5 = (160 << 16) / r4;
- r5 -= 1 << 16;
- r10 = r5 * r4 + r6;
- sp0 = r5 / r4;
+ r5 = 0xA00000 / r4;
+ r5 += 0xFFFF0000;
+ var_24 = r6 + r5 * r4;
+ r10 = r5 / r4;
r5 *= 2;
- for (i = 0; i < r7; i++)
- {
- gScanlineEffectRegBuffers.filler0[i] = -4 - (u32)i;
- }
- //_08093B74
- for (; i < r9; i++)
+ for (i = 0; i < r7;
+ // WHAT?!
+ gScanlineEffectRegBuffers[0][i] = (u32)-i + -4,
+ i++);
+ for (; i < (s16)r9; i++)
{
- u16 var = r6 >> 16;
+ var = r6 >> 16;
r6 += r5;
- r5 -= sp0;
- gScanlineEffectRegBuffers.filler0[i] = -4 + var;
+ r5 -= r10;
+ gScanlineEffectRegBuffers[0][i] = var + -4;
}
- for (; i < 160; i++)
- gScanlineEffectRegBuffers.filler0[i] = -4 + (u16)(r10 >> 16);
- ewram0_2.var_4 = 1;
- if (task->data[1] > 0x4A)
+ for (var = var_24 >> 16; i < 160;
+ // WHAT?!
+ gScanlineEffectRegBuffers[0][i] = var + -4,
+ i++);
+
+ ewram0_2.var_4 = TRUE;
+ if (task->data[1] > 74)
task->data[0]++;
- return FALSE;
-}
-*/
-NAKED
-bool8 TrainerCard_ScaleDownFlipAnimation(struct Task *task)
-{
- asm(".syntax 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\
- mov r8, r0\n\
- ldr r1, _08093BFC @ =gSharedMem\n\
- movs r0, 0\n\
- strb r0, [r1, 0x4]\n\
- mov r2, r8\n\
- ldrh r0, [r2, 0xA]\n\
- adds r0, 0x3\n\
- strh r0, [r2, 0xA]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x4F\n\
- ble _08093B18\n\
- movs r0, 0x4F\n\
- strh r0, [r2, 0xA]\n\
-_08093B18:\n\
- mov r4, r8\n\
- movs r0, 0xA\n\
- ldrsh r7, [r4, r0]\n\
- movs r0, 0xA0\n\
- subs r0, r7\n\
- mov r9, r0\n\
- subs r4, r0, r7\n\
- negs r0, r7\n\
- lsls r6, r0, 16\n\
- movs r0, 0xA0\n\
- lsls r0, 16\n\
- adds r1, r4, 0\n\
- bl __udivsi3\n\
- adds r5, r0, 0\n\
- ldr r1, _08093C00 @ =0xffff0000\n\
- adds r5, r1\n\
- adds r0, r5, 0\n\
- muls r0, r4\n\
- adds r0, r6\n\
- mov r10, r0\n\
- adds r0, r5, 0\n\
- adds r1, r4, 0\n\
- bl __udivsi3\n\
- str r0, [sp]\n\
- lsls r5, 1\n\
- movs r3, 0\n\
- cmp r3, r7\n\
- bcs _08093B74\n\
- ldr r2, _08093C04 @ =gScanlineEffectRegBuffers\n\
- mov r12, r2\n\
- ldr r0, _08093C08 @ =0x0000fffc\n\
- adds r4, r0, 0\n\
-_08093B5C:\n\
- lsls r0, r3, 16\n\
- asrs r0, 16\n\
- lsls r1, r0, 1\n\
- add r1, r12\n\
- subs r2, r4, r0\n\
- strh r2, [r1]\n\
- adds r0, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- asrs r0, 16\n\
- cmp r0, r7\n\
- bcc _08093B5C\n\
-_08093B74:\n\
- lsls r2, r3, 16\n\
- mov r1, r9\n\
- lsls r0, r1, 16\n\
- asrs r1, r0, 16\n\
- mov r4, r10\n\
- lsrs r7, r4, 16\n\
- cmp r2, r0\n\
- bge _08093BAE\n\
- ldr r0, _08093C04 @ =gScanlineEffectRegBuffers\n\
- mov r9, r0\n\
- ldr r4, _08093C08 @ =0x0000fffc\n\
- mov r12, r4\n\
- adds r4, r1, 0\n\
-_08093B8E:\n\
- lsrs r1, r6, 16\n\
- adds r6, r5\n\
- ldr r0, [sp]\n\
- subs r5, r0\n\
- asrs r2, 16\n\
- lsls r0, r2, 1\n\
- add r0, r9\n\
- add r1, r12\n\
- strh r1, [r0]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- lsrs r3, r2, 16\n\
- lsls r2, r3, 16\n\
- asrs r0, r2, 16\n\
- cmp r0, r4\n\
- blt _08093B8E\n\
-_08093BAE:\n\
- adds r1, r7, 0\n\
- lsls r0, r3, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x9F\n\
- bgt _08093BD4\n\
- ldr r4, _08093C04 @ =gScanlineEffectRegBuffers\n\
- ldr r0, _08093C08 @ =0x0000fffc\n\
- adds r2, r1, r0\n\
-_08093BBE:\n\
- lsls r1, r3, 16\n\
- asrs r1, 16\n\
- lsls r0, r1, 1\n\
- adds r0, r4\n\
- strh r2, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 16\n\
- lsrs r3, r1, 16\n\
- asrs r1, 16\n\
- cmp r1, 0x9F\n\
- ble _08093BBE\n\
-_08093BD4:\n\
- movs r0, 0x1\n\
- ldr r1, _08093BFC @ =gSharedMem\n\
- strb r0, [r1, 0x4]\n\
- mov r2, r8\n\
- movs r4, 0xA\n\
- ldrsh r0, [r2, r4]\n\
- cmp r0, 0x4A\n\
- ble _08093BEA\n\
- ldrh r0, [r2, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r2, 0x8]\n\
-_08093BEA:\n\
- movs r0, 0\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 {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_08093BFC: .4byte gSharedMem\n\
-_08093C00: .4byte 0xffff0000\n\
-_08093C04: .4byte gScanlineEffectRegBuffers\n\
-_08093C08: .4byte 0x0000fffc\n\
- .syntax divided\n");
+ return FALSE;
}
bool8 TrainerCard_SwitchToNewSide(struct Task *task)
@@ -1028,154 +871,47 @@ bool8 TrainerCard_SwitchToNewSide(struct Task *task)
return TRUE;
}
-NAKED
bool8 TrainerCard_ScaleUpFlipAnimation(struct Task *task)
{
- asm(".syntax 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\
- mov r8, r0\n\
- ldr r1, _08093D40 @ =gSharedMem\n\
- movs r2, 0\n\
- strb r2, [r1, 0x4]\n\
- ldrh r0, [r0, 0xA]\n\
- subs r0, 0x3\n\
- mov r3, r8\n\
- strh r0, [r3, 0xA]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bgt _08093C5C\n\
- strh r2, [r3, 0xA]\n\
-_08093C5C:\n\
- mov r4, r8\n\
- movs r0, 0xA\n\
- ldrsh r7, [r4, r0]\n\
- movs r0, 0xA0\n\
- subs r0, r7\n\
- mov r9, r0\n\
- subs r4, r0, r7\n\
- negs r0, r7\n\
- lsls r6, r0, 16\n\
- movs r0, 0xA0\n\
- lsls r0, 16\n\
- adds r1, r4, 0\n\
- bl __udivsi3\n\
- adds r5, r0, 0\n\
- ldr r1, _08093D44 @ =0xffff0000\n\
- adds r5, r1\n\
- adds r0, r5, 0\n\
- muls r0, r4\n\
- adds r0, r6\n\
- mov r10, r0\n\
- adds r0, r5, 0\n\
- adds r1, r4, 0\n\
- bl __udivsi3\n\
- str r0, [sp]\n\
- lsrs r5, 1\n\
- movs r3, 0\n\
- cmp r3, r7\n\
- bcs _08093CB8\n\
- ldr r2, _08093D48 @ =gScanlineEffectRegBuffers\n\
- mov r12, r2\n\
- ldr r0, _08093D4C @ =0x0000fffc\n\
- adds r4, r0, 0\n\
-_08093CA0:\n\
- lsls r0, r3, 16\n\
- asrs r0, 16\n\
- lsls r1, r0, 1\n\
- add r1, r12\n\
- subs r2, r4, r0\n\
- strh r2, [r1]\n\
- adds r0, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- asrs r0, 16\n\
- cmp r0, r7\n\
- bcc _08093CA0\n\
-_08093CB8:\n\
- lsls r2, r3, 16\n\
- mov r1, r9\n\
- lsls r0, r1, 16\n\
- asrs r1, r0, 16\n\
- mov r4, r10\n\
- lsrs r7, r4, 16\n\
- cmp r2, r0\n\
- bge _08093CF2\n\
- ldr r0, _08093D48 @ =gScanlineEffectRegBuffers\n\
- mov r9, r0\n\
- ldr r3, _08093D4C @ =0x0000fffc\n\
- mov r12, r3\n\
- adds r4, r1, 0\n\
-_08093CD2:\n\
- lsrs r1, r6, 16\n\
- adds r6, r5\n\
- ldr r0, [sp]\n\
- adds r5, r0\n\
- asrs r2, 16\n\
- lsls r0, r2, 1\n\
- add r0, r9\n\
- add r1, r12\n\
- strh r1, [r0]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- lsrs r3, r2, 16\n\
- lsls r2, r3, 16\n\
- asrs r0, r2, 16\n\
- cmp r0, r4\n\
- blt _08093CD2\n\
-_08093CF2:\n\
- adds r1, r7, 0\n\
- lsls r0, r3, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x9F\n\
- bgt _08093D18\n\
- ldr r4, _08093D48 @ =gScanlineEffectRegBuffers\n\
- ldr r0, _08093D4C @ =0x0000fffc\n\
- adds r2, r1, r0\n\
-_08093D02:\n\
- lsls r1, r3, 16\n\
- asrs r1, 16\n\
- lsls r0, r1, 1\n\
- adds r0, r4\n\
- strh r2, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 16\n\
- lsrs r3, r1, 16\n\
- asrs r1, 16\n\
- cmp r1, 0x9F\n\
- ble _08093D02\n\
-_08093D18:\n\
- movs r0, 0x1\n\
- ldr r1, _08093D40 @ =gSharedMem\n\
- strb r0, [r1, 0x4]\n\
- mov r2, r8\n\
- movs r3, 0xA\n\
- ldrsh r0, [r2, r3]\n\
- cmp r0, 0\n\
- bgt _08093D2E\n\
- ldrh r0, [r2, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r2, 0x8]\n\
-_08093D2E:\n\
- movs r0, 0\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 {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_08093D40: .4byte gSharedMem\n\
-_08093D44: .4byte 0xffff0000\n\
-_08093D48: .4byte gScanlineEffectRegBuffers\n\
-_08093D4C: .4byte 0x0000fffc\n\
- .syntax divided\n");
+ s16 i;
+ u32 r4, r5, r10, r7, r6, var_24, r9, var;
+
+ ewram0_2.var_4 = FALSE;
+ task->data[1] -= 3;
+ if (task->data[1] <= 0)
+ task->data[1] = 0;
+
+ r7 = task->data[1];
+ r9 = 160 - r7;
+ r4 = r9 - r7;
+ r6 = -r7 << 16;
+ r5 = 0xA00000 / r4;
+ r5 += 0xFFFF0000;
+ var_24 = r6 + r5 * r4;
+ r10 = r5 / r4;
+ r5 /= 2;
+
+ for (i = 0; i < r7;
+ // WHAT?!
+ gScanlineEffectRegBuffers[0][i] = (u32)-i + -4,
+ i++);
+ for (; i < (s16)r9; i++)
+ {
+ var = r6 >> 16;
+ r6 += r5;
+ r5 += r10;
+ gScanlineEffectRegBuffers[0][i] = var + -4;
+ }
+ for (var = var_24 >> 16; i < 160;
+ // WHAT?!
+ gScanlineEffectRegBuffers[0][i] = var + -4,
+ i++);
+
+ ewram0_2.var_4 = TRUE;
+ if (task->data[1] <= 0)
+ task->data[0]++;
+
+ return FALSE;
}
bool8 TrainerCard_FinishFlipAnimation(struct Task *task)
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index e13369c0b..8fff9edee 100644
--- a/src/use_pokeblock.c
+++ b/src/use_pokeblock.c
@@ -40,7 +40,7 @@ static const u8 gUnknown_0840612C[] = {
0, 4, 3, 2, 1
};
-static const u8 *const sContextStatNames[] = {
+static const u8 *const sContestStatNames[] = {
OtherText_Coolness,
OtherText_Toughness,
OtherText_Smartness,
@@ -683,12 +683,19 @@ static void Pokeblock_MenuWindowTextPrint(const u8 *message)
Menu_PrintText(message, 1, 17);
}
-#ifdef NONMATCHING
-static void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2)
+void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 enhanced)
{
- if (a2 != 0)
+ if (enhanced)
{
- StringCopy(dest, sContextStatNames[statID]);
+ // This is a joke.
+ if (enhanced > 0)
+ enhanced = 0;
+
+ if (enhanced < 0)
+ // matches, but can also be a variety of values too
+ { u8 unk = -unk; } // see water.c for a similar behavior
+
+ StringCopy(dest, sContestStatNames[statId]);
StringAppend(dest, gOtherText_WasEnhanced);
}
else
@@ -696,49 +703,6 @@ static void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2)
StringCopy(dest, gOtherText_NothingChanged);
}
}
-#else
-NAKED
-static void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 a1, s16 a2)
-{
- asm_unified("\tpush {r4,lr}\n"
- "\tadds r4, r0, 0\n"
- "\tlsls r1, 24\n"
- "\tlsrs r3, r1, 24\n"
- "\tlsls r2, 16\n"
- "\tlsrs r0, r2, 16\n"
- "\tasrs r2, 16\n"
- "\tcmp r2, 0\n"
- "\tbeq _08136DFC\n"
- "\tcmp r2, 0\n"
- "\tble _08136DD8\n"
- "\tmovs r0, 0\n"
- "_08136DD8:\n"
- "\tlsls r0, 16\n"
- "\tldr r1, _08136DF4 @ =sContextStatNames\n"
- "\tlsls r0, r3, 2\n"
- "\tadds r0, r1\n"
- "\tldr r1, [r0]\n"
- "\tadds r0, r4, 0\n"
- "\tbl StringCopy\n"
- "\tldr r1, _08136DF8 @ =gOtherText_WasEnhanced\n"
- "\tadds r0, r4, 0\n"
- "\tbl StringAppend\n"
- "\tb _08136E04\n"
- "\t.align 2, 0\n"
- "_08136DF4: .4byte sContextStatNames\n"
- "_08136DF8: .4byte gOtherText_WasEnhanced\n"
- "_08136DFC:\n"
- "\tldr r1, _08136E0C @ =gOtherText_NothingChanged\n"
- "\tadds r0, r4, 0\n"
- "\tbl StringCopy\n"
- "_08136E04:\n"
- "\tpop {r4}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_08136E0C: .4byte gOtherText_NothingChanged");
-}
-#endif
static void Pokeblock_GetMonContestStats(struct Pokemon *pokemon, u8 *data)
{
diff --git a/src/util.c b/src/util.c
index 2e76cf4de..ed59ac241 100644
--- a/src/util.c
+++ b/src/util.c
@@ -152,10 +152,6 @@ void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s
BgAffineSet(&src, dest, 1);
}
-#ifdef NONMATCHING
-
-// Functionally equivalent.
-// Only the two yflip loops don't match.
void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
{
u8 x, y;
@@ -170,27 +166,22 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
for (x = 0; x < w; x++)
{
- int tile = (*tilemap & 0x3ff) * 32;
+ u16 tile = (*tilemap & 0x3ff) * 32;
int attr = *tilemap & 0xc00;
if (attr == 0)
{
- void *src = tiles + tile;
- void *dest = output;
- int length = 32;
- DmaCopy32(3, src, dest, length);
+ DmaCopy32Defvars(3, tiles + tile, output, 32);
}
else if (attr == 0x800) // yflip
{
for (i = 0; i < 8; i++)
{
- void *src = tiles;
- void *dest = output;
- int length = 4;
- // this is likely wrong, but makes it closer to matching
- src += tile + (7 - i) * 4;
- dest += i * 4;
- DmaCopy32(3, src, dest, length);
+ u8 requiredForMatching = 0;
+
+ ++requiredForMatching;
+ --requiredForMatching;
+ DmaCopy32Defvars(3, tile + (7 - i) * 4 + tiles, output + i * 4, 4);
}
}
else // xflip
@@ -200,26 +191,22 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
for (j = 0; j < 4; j++)
{
u8 i2 = i * 4;
- xflip[i2 + (3-j)] = (tiles[tile + i2 + j] & 0xf) << 4;
- xflip[i2 + (3-j)] |= tiles[tile + i2 + j] >> 4;
+ xflip[i2 + (3 - j)] = (tiles[tile + i2 + j] & 0xf) << 4;
+ xflip[i2 + (3 - j)] |= tiles[tile + i2 + j] >> 4;
}
}
if (*tilemap & 0x800) // yflip
{
for (i = 0; i < 8; i++)
{
- void *src = xflip + (7-i) * 4;
- void *dest = output + i*4;
- int length = 4;
- DmaCopy32(3, src, dest, length);
+ ++tile;
+ --tile;
+ DmaCopy32Defvars(3, (7 - i) * 4 + xflip, output + i * 4, 4);
}
}
else
{
- void *src = xflip;
- void *dest = output;
- int length = 32;
- DmaCopy32(3, src, dest, length);
+ DmaCopy32Defvars(3, xflip, output, 32);
}
}
tilemap++;
@@ -229,253 +216,6 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
}
}
-#else
-
-NAKED void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
-{
- asm("\n"
- " .syntax 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, 0x3C\n"
- " str r2, [sp, 0x20]\n"
- " adds r4, r3, 0\n"
- " ldr r7, [sp, 0x5C]\n"
- " lsls r0, 24\n"
- " lsls r1, 24\n"
- " ldr r2, _08041008 @ =gSpriteDimensions\n"
- " lsrs r1, 23\n"
- " lsrs r0, 21\n"
- " adds r1, r0\n"
- " adds r0, r2, 0x1\n"
- " adds r0, r1, r0\n"
- " ldrb r0, [r0]\n"
- " str r0, [sp, 0x24]\n"
- " adds r1, r2\n"
- " ldrb r1, [r1]\n"
- " str r1, [sp, 0x28]\n"
- " movs r1, 0\n"
- " cmp r1, r0\n"
- " bcc _08040FB4\n"
- " b _08041136\n"
- "_08040FB4:\n"
- " movs r0, 0x20\n"
- " ldr r2, [sp, 0x28]\n"
- " subs r0, r2\n"
- " lsls r0, 1\n"
- " str r0, [sp, 0x2C]\n"
- "_08040FBE:\n"
- " movs r2, 0\n"
- " adds r1, 0x1\n"
- " str r1, [sp, 0x34]\n"
- " ldr r3, [sp, 0x28]\n"
- " cmp r2, r3\n"
- " bcc _08040FCC\n"
- " b _08041124\n"
- "_08040FCC:\n"
- " ldr r0, _0804100C @ =0x040000d4\n"
- " mov r8, r0\n"
- "_08040FD0:\n"
- " ldrh r1, [r4]\n"
- " ldr r0, _08041010 @ =0x000003ff\n"
- " ands r0, r1\n"
- " lsls r0, 5\n"
- " mov r12, r0\n"
- " movs r0, 0xC0\n"
- " lsls r0, 4\n"
- " ands r0, r1\n"
- " mov r3, sp\n"
- " strh r1, [r3, 0x38]\n"
- " cmp r0, 0\n"
- " bne _08041018\n"
- " ldr r0, [sp, 0x20]\n"
- " add r0, r12\n"
- " mov r1, r8\n"
- " str r0, [r1]\n"
- " str r7, [r1, 0x4]\n"
- " ldr r3, _08041014 @ =0x84000008\n"
- " str r3, [r1, 0x8]\n"
- " ldr r0, [r1, 0x8]\n"
- " adds r4, 0x2\n"
- " str r4, [sp, 0x30]\n"
- " adds r7, 0x20\n"
- " mov r10, r7\n"
- " adds r2, 0x1\n"
- " mov r9, r2\n"
- " b _08041112\n"
- " .align 2, 0\n"
- "_08041008: .4byte gSpriteDimensions\n"
- "_0804100C: .4byte 0x040000d4\n"
- "_08041010: .4byte 0x000003ff\n"
- "_08041014: .4byte 0x84000008\n"
- "_08041018:\n"
- " movs r1, 0x80\n"
- " lsls r1, 4\n"
- " cmp r0, r1\n"
- " bne _08041068\n"
- " movs r3, 0\n"
- " adds r4, 0x2\n"
- " str r4, [sp, 0x30]\n"
- " movs r0, 0x20\n"
- " adds r0, r7\n"
- " mov r10, r0\n"
- " adds r2, 0x1\n"
- " mov r9, r2\n"
- " ldr r4, _08041060 @ =0x040000d4\n"
- " ldr r6, _08041064 @ =0x84000001\n"
- " movs r5, 0x7\n"
- "_08041036:\n"
- " lsls r2, r3, 24\n"
- " asrs r2, 24\n"
- " subs r0, r5, r2\n"
- " lsls r0, 2\n"
- " add r0, r12\n"
- " ldr r1, [sp, 0x20]\n"
- " adds r0, r1, r0\n"
- " lsls r1, r2, 2\n"
- " adds r1, r7, r1\n"
- " str r0, [r4]\n"
- " str r1, [r4, 0x4]\n"
- " str r6, [r4, 0x8]\n"
- " ldr r0, [r4, 0x8]\n"
- " adds r2, 0x1\n"
- " lsls r2, 24\n"
- " lsrs r3, r2, 24\n"
- " asrs r2, 24\n"
- " cmp r2, 0x7\n"
- " ble _08041036\n"
- " b _08041112\n"
- " .align 2, 0\n"
- "_08041060: .4byte 0x040000d4\n"
- "_08041064: .4byte 0x84000001\n"
- "_08041068:\n"
- " movs r3, 0\n"
- " adds r4, 0x2\n"
- " str r4, [sp, 0x30]\n"
- " movs r0, 0x20\n"
- " adds r0, r7\n"
- " mov r10, r0\n"
- " adds r2, 0x1\n"
- " mov r9, r2\n"
- "_08041078:\n"
- " movs r2, 0\n"
- " lsls r4, r3, 24\n"
- " lsls r0, r4, 2\n"
- " lsrs r0, 24\n"
- " adds r6, r0, 0x3\n"
- " mov r1, r12\n"
- " adds r5, r1, r0\n"
- "_08041086:\n"
- " lsls r1, r2, 24\n"
- " asrs r1, 24\n"
- " subs r0, r6, r1\n"
- " mov r2, sp\n"
- " adds r3, r2, r0\n"
- " adds r0, r5, r1\n"
- " ldr r2, [sp, 0x20]\n"
- " adds r0, r2, r0\n"
- " ldrb r2, [r0]\n"
- " movs r0, 0xF\n"
- " ands r0, r2\n"
- " lsls r0, 4\n"
- " lsrs r2, 4\n"
- " orrs r0, r2\n"
- " strb r0, [r3]\n"
- " adds r1, 0x1\n"
- " lsls r1, 24\n"
- " lsrs r2, r1, 24\n"
- " asrs r1, 24\n"
- " cmp r1, 0x3\n"
- " ble _08041086\n"
- " movs r3, 0x80\n"
- " lsls r3, 17\n"
- " adds r0, r4, r3\n"
- " lsrs r3, r0, 24\n"
- " asrs r0, 24\n"
- " cmp r0, 0x7\n"
- " ble _08041078\n"
- " movs r0, 0x80\n"
- " lsls r0, 4\n"
- " mov r1, sp\n"
- " ldrh r1, [r1, 0x38]\n"
- " ands r0, r1\n"
- " cmp r0, 0\n"
- " beq _08041104\n"
- " movs r3, 0\n"
- " ldr r4, _080410FC @ =0x040000d4\n"
- " ldr r6, _08041100 @ =0x84000001\n"
- " movs r5, 0x7\n"
- "_080410D4:\n"
- " lsls r1, r3, 24\n"
- " asrs r1, 24\n"
- " subs r0, r5, r1\n"
- " lsls r0, 2\n"
- " mov r3, sp\n"
- " adds r2, r3, r0\n"
- " lsls r0, r1, 2\n"
- " adds r0, r7, r0\n"
- " str r2, [r4]\n"
- " str r0, [r4, 0x4]\n"
- " str r6, [r4, 0x8]\n"
- " ldr r0, [r4, 0x8]\n"
- " adds r1, 0x1\n"
- " lsls r1, 24\n"
- " lsrs r3, r1, 24\n"
- " asrs r1, 24\n"
- " cmp r1, 0x7\n"
- " ble _080410D4\n"
- " b _08041112\n"
- " .align 2, 0\n"
- "_080410FC: .4byte 0x040000d4\n"
- "_08041100: .4byte 0x84000001\n"
- "_08041104:\n"
- " mov r0, sp\n"
- " mov r1, r8\n"
- " str r0, [r1]\n"
- " str r7, [r1, 0x4]\n"
- " ldr r2, _08041148 @ =0x84000008\n"
- " str r2, [r1, 0x8]\n"
- " ldr r0, [r1, 0x8]\n"
- "_08041112:\n"
- " ldr r4, [sp, 0x30]\n"
- " mov r7, r10\n"
- " mov r3, r9\n"
- " lsls r0, r3, 24\n"
- " lsrs r2, r0, 24\n"
- " ldr r0, [sp, 0x28]\n"
- " cmp r2, r0\n"
- " bcs _08041124\n"
- " b _08040FD0\n"
- "_08041124:\n"
- " ldr r1, [sp, 0x2C]\n"
- " adds r4, r1\n"
- " ldr r2, [sp, 0x34]\n"
- " lsls r0, r2, 24\n"
- " lsrs r1, r0, 24\n"
- " ldr r3, [sp, 0x24]\n"
- " cmp r1, r3\n"
- " bcs _08041136\n"
- " b _08040FBE\n"
- "_08041136:\n"
- " add sp, 0x3C\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"
- " .align 2, 0\n"
- "_08041148: .4byte 0x84000008\n"
- " .syntax divided\n"
- );
-}
-
-#endif
-
int CountTrailingZeroBits(u32 value)
{
u8 i;
diff --git a/sym_common.txt b/sym_common.txt
index 2660de51b..6caee9e16 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -6,12 +6,12 @@
// main.c
-#if DEBUG
-/*. += 0x18;*/
+#if (DEBUG && ENGLISH && REVISION == 0)
+. += 0x8;
#endif
SYMBOL(gKeyRepeatStartDelay, 4)
SYMBOL(gLinkTransferringData, 4)
-#if DEBUG
+#if (DEBUG && !(ENGLISH && REVISION == 0))
. += 0x8;
#endif
SYMBOL(gMain, 1088)
@@ -197,6 +197,10 @@ SYMBOL(gMenuCallback, 4)
#if DEBUG
SYMBOL(gUnknown_Debug_03004BD0, 4)
+// TODO: see if this is in rev1+
+#if (ENGLISH && REVISION == 0)
+SYMBOL(gUnknown_Debug_Murakawa2, 4)
+#endif
#endif
// sound.c
@@ -204,8 +208,12 @@ SYMBOL(gDisableMusic, 4)
#if DEBUG
unk_debug_common_2 = .;
+#if (ENGLISH && REVISION == 0)
+. += 0x4;
+#else
. += 0x8;
#endif
+#endif
// battle_anim.c
SYMBOL(gSoundAnimFramesToWait, 4)