mirror of
https://github.com/pret/pokeruby.git
synced 2026-04-26 00:13:40 -05:00
Merge pull request #788 from kazblox/master
Fix NONMATCHINGs and actual English Debug support
This commit is contained in:
commit
5d6e7a31da
26
INSTALL.md
26
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.
|
||||
|
|
|
|||
75
Makefile
75
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
|
||||
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_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
|
||||
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
|
||||
|
||||
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
|
||||
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 ####
|
||||
|
||||
|
|
|
|||
13
config.mk
13
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
|
||||
|
||||
|
|
|
|||
|
|
@ -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 " "
|
||||
|
||||
@ 0x821F652
|
||||
Str_821F64D::
|
||||
.string "ON$"
|
||||
|
||||
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 " "
|
||||
|
||||
@ 0x821F652
|
||||
Str_821F64D::
|
||||
.string "オン$"
|
||||
|
||||
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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
1
ruby_debug.sha1
Normal file
1
ruby_debug.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
1d03a9128288a7076f6b4517e7602b29f76218a1 pokeruby_debug.gba
|
||||
1
sapphire_de_debug.sha1
Normal file
1
sapphire_de_debug.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
261bec8dbd7159790cd5126bd47df5b5cef61ac1 pokesapphire_de_debug.gba
|
||||
1
sapphire_debug.sha1
Normal file
1
sapphire_debug.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
e96e268b802aaa3e9215afeada21a2498dd2a9c5 pokesapphire_debug.gba
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 = t1 / gOamMatrices[matrixNum].d + 1;
|
||||
|
||||
t1 = 15616;
|
||||
t2 = gOamMatrices[matrixNum].d;
|
||||
t3 = t1 / t2 + 1;
|
||||
if (t2 > 128)
|
||||
t2 = 128;
|
||||
|
||||
if (t3 > 128)
|
||||
{
|
||||
t3 = 128;
|
||||
}
|
||||
t2 = (64 - t2) / 2;
|
||||
sprite->pos2.y = t2;
|
||||
|
||||
/* 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;
|
||||
|
||||
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)
|
||||
{
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
if(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
return FALSE;
|
||||
|
||||
if (gBattleMons[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)].ability != ABILITY_WONDER_GUARD)
|
||||
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
|
||||
return FALSE; // There is not a single Pokemon in the party that has a super effective move against a mon 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");
|
||||
}
|
||||
#endif // NONMATCHING
|
||||
|
||||
static bool8 FindMonThatAbsorbsOpponentsMove(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
else if (IsContest())
|
||||
{
|
||||
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 (pan == SOUND_PAN_TARGET)
|
||||
pan = SOUND_PAN_ATTACKER_NEG;
|
||||
else if (pan != SOUND_PAN_ATTACKER_NEG)
|
||||
pan *= -1;
|
||||
}
|
||||
}
|
||||
else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
|
||||
{
|
||||
if (pan == SOUND_PAN_ATTACKER_NEG)
|
||||
pan = SOUND_PAN_TARGET;
|
||||
}
|
||||
//_08076FDC
|
||||
else
|
||||
{
|
||||
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 (GetBattlerSide(gBattleAnimAttacker) == 0)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimTarget) == 0)
|
||||
}
|
||||
//_08077042
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
//_0807706C
|
||||
}
|
||||
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");
|
||||
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
u8 r5;
|
||||
u32 asdf;
|
||||
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];
|
||||
|
||||
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;
|
||||
if (currExp + gainedExp >= expOnNextLvl)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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[] =
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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,31 @@ 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;
|
||||
|
||||
show->fanclubLetter.species = SPECIES_BULBASAUR;
|
||||
StringCopy(gSaveBlock1.tvShows[a0].fanclubLetter.playerName, gSaveBlock2.playerName);
|
||||
show->fanclubLetter.language = GAME_LANGUAGE;
|
||||
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:
|
||||
{
|
||||
TVShow * show = gSaveBlock1.tvShows + a0;
|
||||
|
||||
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);
|
||||
GF_ACCESS(TVShowFanclubOpinions)->language = GAME_LANGUAGE;
|
||||
GF_ACCESS(TVShowFanclubOpinions)->var0E = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
|
||||
break;
|
||||
}
|
||||
case TVSHOW_UNKN_SHOWTYPE_04:
|
||||
|
|
@ -516,120 +523,222 @@ 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;
|
||||
|
||||
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 = 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:
|
||||
{
|
||||
TVShow * show = gSaveBlock1.tvShows + a0;
|
||||
|
||||
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);
|
||||
GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->language = GAME_LANGUAGE;
|
||||
GF_ACCESS(TVShowBravoTrainerPokemonProfiles)->var1f = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_LANGUAGE);
|
||||
break;
|
||||
}
|
||||
case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
|
||||
{
|
||||
TVShow * show = gSaveBlock1.tvShows + a0;
|
||||
|
||||
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);
|
||||
GF_ACCESS(TVShowBravoTrainerBattleTowerSpotlight)->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;
|
||||
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;
|
||||
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:
|
||||
{
|
||||
TVShow * show = gSaveBlock1.tvShows + a0;
|
||||
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;
|
||||
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;
|
||||
StringCopy(GF_ACCESS(TVShowSmartShopper)->playerName, gSaveBlock2.playerName);
|
||||
GF_ACCESS(TVShowSmartShopper)->language = GAME_LANGUAGE;
|
||||
break;
|
||||
}
|
||||
case TVSHOW_POKEMON_TODAY_FAILED:
|
||||
{
|
||||
TVShow * show = gSaveBlock1.tvShows + a0;
|
||||
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;
|
||||
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:
|
||||
{
|
||||
TVShow * show = gSaveBlock1.tvShows + a0;
|
||||
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;
|
||||
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:
|
||||
{
|
||||
TVShow * show = gSaveBlock1.tvShows + a0;
|
||||
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;
|
||||
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;
|
||||
|
||||
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:
|
||||
{
|
||||
DECLARE_TERU_POINTER;
|
||||
|
||||
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:
|
||||
{
|
||||
break;
|
||||
}
|
||||
case TVSHOW_NAME_RATER_SHOW:
|
||||
{
|
||||
u16 species = GetMonData(&gPlayerParty[leadMonIndex], MON_DATA_SPECIES);
|
||||
DECLARE_TERU_POINTER;
|
||||
|
||||
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:
|
||||
{
|
||||
DECLARE_TERU_POINTER;
|
||||
|
||||
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:
|
||||
{
|
||||
DECLARE_TERU_POINTER;
|
||||
|
||||
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:
|
||||
{
|
||||
GF_ACCESS(TVShowMassOutbreak)->species = SPECIES_BULBASAUR;
|
||||
GF_ACCESS(TVShowMassOutbreak)->daysLeft = 1;
|
||||
break;
|
||||
}
|
||||
case TVSHOW_POKEMON_TODAY_CAUGHT:
|
||||
{
|
||||
DECLARE_TERU_POINTER;
|
||||
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
|
||||
u8 gUnknown_Debug_083C4C6C[] = _("TERUTERUDA");
|
||||
|
||||
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:
|
||||
{
|
||||
DECLARE_TERU_POINTER;
|
||||
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
|
||||
int ii;
|
||||
|
||||
for (ii = 0; ii < 3; ii++)
|
||||
TERU_ACCESS(smartshopperShow).itemAmounts[ii] = 254;
|
||||
TERU_ACCESS(smartshopperShow).priceReduced = TRUE;
|
||||
TERU_ACCESS(smartshopperShow).shopLocation = 40;
|
||||
for (ii = 0; ii < 3; ii++)
|
||||
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:
|
||||
{
|
||||
DECLARE_TERU_POINTER;
|
||||
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
|
||||
|
||||
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:
|
||||
{
|
||||
DECLARE_TERU_POINTER;
|
||||
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
|
||||
|
||||
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:
|
||||
{
|
||||
DECLARE_TERU_POINTER;
|
||||
u8 gUnknown_Debug_083C4C64[] = _("TERUKUN");
|
||||
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
659
src/decoration.c
659
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!
|
||||
var1 = ewram_1f000.items[i];
|
||||
if (var1 != 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
sub_8101118(ewram_1f000.items[i], gUnknown_020391B4);
|
||||
if (sub_8101200(taskId, i, gUnknown_020391B4) == TRUE)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
11
src/main.c
11
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[] =
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
27
src/money.c
27
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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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, ¤tHP);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void ExpandBoxMon(const struct BoxPokemon *src, struct Pokemon *dest)
|
||||
{
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
199
src/trade.c
199
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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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++)
|
||||
for (i = 0; i < r7;
|
||||
// WHAT?!
|
||||
gScanlineEffectRegBuffers[0][i] = (u32)-i + -4,
|
||||
i++);
|
||||
for (; i < (s16)r9; i++)
|
||||
{
|
||||
gScanlineEffectRegBuffers.filler0[i] = -4 - (u32)i;
|
||||
}
|
||||
//_08093B74
|
||||
for (; i < 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)
|
||||
task->data[0]++;
|
||||
return FALSE;
|
||||
}
|
||||
*/
|
||||
for (var = var_24 >> 16; i < 160;
|
||||
// WHAT?!
|
||||
gScanlineEffectRegBuffers[0][i] = var + -4,
|
||||
i++);
|
||||
|
||||
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");
|
||||
ewram0_2.var_4 = TRUE;
|
||||
if (task->data[1] > 74)
|
||||
task->data[0]++;
|
||||
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
286
src/util.c
286
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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user