summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2017-05-09 02:36:30 -0400
committerProjectRevoTPP <projectrevotpp@hotmail.com>2017-05-09 02:36:30 -0400
commitfc761599b412206f80d961a6052dce49b9998689 (patch)
tree1f3eb8f01ae005b8b509d1f120ce5d7bce230992
parentd343d1f19a74657489d987dbd97b84e7389ae295 (diff)
parent4b4f716ae0c582068928a4ae7b31d9d10ac89eb5 (diff)
Merge branch 'master' of https://github.com/pret/pokeruby
-rw-r--r--.travis.yml2
-rw-r--r--Makefile33
-rw-r--r--asm/battle_10.s8
-rw-r--r--asm/battle_2.s16
-rw-r--r--asm/battle_3.s2
-rw-r--r--asm/battle_4.s4
-rw-r--r--asm/battle_6.s103
-rw-r--r--asm/battle_7.s32
-rw-r--r--asm/battle_8.s8
-rw-r--r--asm/battle_811DA74.s8
-rw-r--r--asm/battle_anim_80CA710.s4
-rw-r--r--asm/battle_anim_81258BC.s101
-rw-r--r--asm/battle_anim_812C144.s4
-rw-r--r--asm/battle_anim_8137220.s4
-rw-r--r--asm/battle_interface.s5500
-rw-r--r--asm/battle_records.s42
-rw-r--r--asm/birch_pc.s265
-rw-r--r--asm/contest.s10
-rw-r--r--asm/crt0.s82
-rw-r--r--asm/daycare.s4
-rw-r--r--asm/easy_chat.s444
-rw-r--r--asm/egg_hatch.s158
-rw-r--r--asm/evolution_scene.s8
-rw-r--r--asm/field_specials.s369
-rw-r--r--asm/learn_move.s2
-rw-r--r--asm/mail_data.s574
-rw-r--r--asm/pokedex_cry_screen.s149
-rw-r--r--asm/pokemon_3.s2826
-rw-r--r--asm/pokemon_storage_system.s2
-rw-r--r--asm/pokemon_summary_screen.s2
-rw-r--r--asm/roamer.s451
-rw-r--r--asm/rom5.s8
-rw-r--r--common_syms/link.txt4
-rw-r--r--data/pokemon.s25
-rw-r--r--data/roamer.s28
-rw-r--r--data/specials.inc2
-rw-r--r--data/text/battle_strings.inc10
-rw-r--r--include/asm.h9
-rw-r--r--include/asm.inc.h43
-rw-r--r--include/battle.h3
-rw-r--r--include/config.h16
-rw-r--r--include/easy_chat.h32
-rw-r--r--include/field_message_box.h8
-rw-r--r--include/global.h25
-rw-r--r--include/m4a.h1
-rw-r--r--include/pokemon.h9
-rw-r--r--include/roamer.h11
-rw-r--r--include/songs.h6
-rw-r--r--include/string_util.h3
-rw-r--r--include/text.h7
-rw-r--r--ld_script.txt23
-rw-r--r--src/battle_6.c57
-rw-r--r--src/battle_ai.c4
-rw-r--r--src/battle_anim_81258BC.c50
-rw-r--r--src/battle_interface.c3082
-rw-r--r--src/battle_records.c27
-rw-r--r--src/berry.c263
-rw-r--r--src/birch_pc.c114
-rw-r--r--src/credits.c424
-rw-r--r--src/dewford_trend.c7
-rw-r--r--src/easy_chat.c262
-rw-r--r--src/egg_hatch.c52
-rw-r--r--src/field_message_box.c12
-rw-r--r--src/field_specials.c189
-rw-r--r--src/fldeff_softboiled.c12
-rw-r--r--src/intro.c10
-rw-r--r--src/link.c48
-rw-r--r--src/mail.c416
-rw-r--r--src/mail_data.c207
-rw-r--r--src/main.c6
-rw-r--r--src/main_menu.c11
-rw-r--r--src/mauville_old_man.c270
-rw-r--r--src/money.c2
-rw-r--r--src/new_game.c5
-rw-r--r--src/pokedex.c28
-rw-r--r--src/pokedex_cry_screen.c85
-rw-r--r--src/pokemon_1.c6
-rw-r--r--src/pokemon_2.c10
-rw-r--r--src/pokemon_3.c955
-rw-r--r--src/roamer.c226
-rw-r--r--src/rom3.c4
-rw-r--r--src/rom4.c13
-rw-r--r--src/rom_800D42C.c46
-rw-r--r--src/rom_8077ABC.c1
-rw-r--r--src/string_util.c15
-rw-r--r--src/strings.c923
-rw-r--r--src/text.c10
-rw-r--r--src/trainer_card.c735
-rw-r--r--src/wild_encounter.c9
-rw-r--r--sym_ewram.txt11
-rw-r--r--tools/ramscrgen/main.cpp26
-rw-r--r--tools/ramscrgen/sym_file.cpp67
-rw-r--r--tools/ramscrgen/sym_file.h3
-rwxr-xr-xwhitespace.sh6
94 files changed, 7470 insertions, 12729 deletions
diff --git a/.travis.yml b/.travis.yml
index 1c1114e49..ca2b5a12a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -21,6 +21,7 @@ install:
- cd agbcc && ./build.sh && ./install.sh $TRAVIS_BUILD_DIR
script:
- cd $TRAVIS_BUILD_DIR
+ - ./whitespace.sh
- ./build_tools.sh
- make -j2 compare_ruby
- make -j2 compare_ruby_rev1
@@ -28,3 +29,4 @@ script:
- make -j2 compare_sapphire
- make -j2 compare_sapphire_rev1
- make -j2 compare_sapphire_rev2
+ - make -j2 ruby_de
diff --git a/Makefile b/Makefile
index 073bab0ee..f656b86b6 100644
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,7 @@ RAMSCRGEN := tools/ramscrgen/ramscrgen
REVISION := 0
-VERSIONS := ruby sapphire ruby_rev1 sapphire_rev1 ruby_rev2 sapphire_rev2
+VERSIONS := ruby sapphire ruby_rev1 sapphire_rev1 ruby_rev2 sapphire_rev2 ruby_de
# Clear the default suffixes.
.SUFFIXES:
@@ -123,30 +123,36 @@ $1_OBJS_REL := $$($1_OBJS_REL:sound/%=../../sound/%)
$$($1_C_OBJS): VERSION := $2
$$($1_C_OBJS): REVISION := $3
+$$($1_C_OBJS): LANGUAGE := $4
build/$1/%.o : %.c $$$$(c_dep)
- @$$(CPP) $$(CPPFLAGS) -D $$(VERSION) -D REVISION=$$(REVISION) $$< -o build/$1/$$*.i
+ @$$(CPP) $$(CPPFLAGS) -D $$(VERSION) -D REVISION=$$(REVISION) -D $$(LANGUAGE) $$< -o build/$1/$$*.i
@$$(PREPROC) build/$1/$$*.i charmap.txt | $$(CC1) $$(CFLAGS) -o build/$1/$$*.s
@printf ".text\n\t.align\t2, 0\n" >> build/$1/$$*.s
$$(AS) $$(ASFLAGS) -o $$@ build/$1/$$*.s
$$($1_ASM_OBJS): VERSION := $2
$$($1_ASM_OBJS): REVISION := $3
+$$($1_ASM_OBJS): LANGUAGE := $4
build/$1/asm/%.o: asm/%.s $$$$(asm_dep)
- $$(AS) $$(ASFLAGS) --defsym $$(VERSION)=1 --defsym REVISION=$$(REVISION) -o $$@ $$<
+ $$(AS) $$(ASFLAGS) --defsym $$(VERSION)=1 --defsym REVISION=$$(REVISION) --defsym $$(LANGUAGE)=1 -o $$@ $$<
$$($1_DATA_ASM_OBJS): VERSION := $2
$$($1_DATA_ASM_OBJS): REVISION := $3
+$$($1_DATA_ASM_OBJS): LANGUAGE := $4
build/$1/data/%.o: data/%.s $$$$(asm_dep)
- $$(PREPROC) $$< charmap.txt | $$(AS) $$(ASFLAGS) --defsym $$(VERSION)=1 --defsym REVISION=$$(REVISION) -o $$@
+ $$(PREPROC) $$< charmap.txt | $$(AS) $$(ASFLAGS) --defsym $$(VERSION)=1 --defsym REVISION=$$(REVISION) --defsym $$(LANGUAGE)=1 -o $$@
+build/$1/sym_bss.ld: LANGUAGE := $4
build/$1/sym_bss.ld: sym_bss.txt
- cd build/$1 && ../../$$(RAMSCRGEN) .bss ../../sym_bss.txt >sym_bss.ld
+ cd build/$1 && ../../$$(RAMSCRGEN) .bss ../../sym_bss.txt $$(LANGUAGE) >sym_bss.ld
+build/$1/sym_common.ld: LANGUAGE := $4
build/$1/sym_common.ld: sym_common.txt $$($1_C_OBJS) $$(wildcard common_syms/*.txt)
- cd build/$1 && ../../$$(RAMSCRGEN) COMMON ../../sym_common.txt -c src,../../common_syms >sym_common.ld
+ cd build/$1 && ../../$$(RAMSCRGEN) COMMON ../../sym_common.txt $$(LANGUAGE) -c src,../../common_syms >sym_common.ld
+build/$1/sym_ewram.ld: LANGUAGE := $4
build/$1/sym_ewram.ld: sym_ewram.txt
- cd build/$1 && ../../$$(RAMSCRGEN) ewram_data ../../sym_ewram.txt >sym_ewram.ld
+ cd build/$1 && ../../$$(RAMSCRGEN) ewram_data ../../sym_ewram.txt $$(LANGUAGE) >sym_ewram.ld
build/$1/ld_script.ld: ld_script.txt build/$1/sym_bss.ld build/$1/sym_common.ld build/$1/sym_ewram.ld
cd build/$1 && sed -f ../../ld_script.sed ../../ld_script.txt | sed "s#tools/#../../tools/#g" | sed "s#sound/#../../sound/#g" >ld_script.ld
@@ -164,9 +170,10 @@ $1: poke$1.gba
@:
endef
-$(eval $(call VERSION_RULES,ruby,RUBY,0))
-$(eval $(call VERSION_RULES,ruby_rev1,RUBY,1))
-$(eval $(call VERSION_RULES,ruby_rev2,RUBY,2))
-$(eval $(call VERSION_RULES,sapphire,SAPPHIRE,0))
-$(eval $(call VERSION_RULES,sapphire_rev1,SAPPHIRE,1))
-$(eval $(call VERSION_RULES,sapphire_rev2,SAPPHIRE,2))
+$(eval $(call VERSION_RULES,ruby,RUBY,0,ENGLISH))
+$(eval $(call VERSION_RULES,ruby_rev1,RUBY,1,ENGLISH))
+$(eval $(call VERSION_RULES,ruby_rev2,RUBY,2,ENGLISH))
+$(eval $(call VERSION_RULES,sapphire,SAPPHIRE,0,ENGLISH))
+$(eval $(call VERSION_RULES,sapphire_rev1,SAPPHIRE,1,ENGLISH))
+$(eval $(call VERSION_RULES,sapphire_rev2,SAPPHIRE,2,ENGLISH))
+$(eval $(call VERSION_RULES,ruby_de,RUBY,0,GERMAN))
diff --git a/asm/battle_10.s b/asm/battle_10.s
index f4a9aa486..f7844a25a 100644
--- a/asm/battle_10.s
+++ b/asm/battle_10.s
@@ -2257,7 +2257,7 @@ sub_8039294: @ 8039294
adds r0, r1
lsls r0, 2
adds r0, r5
- ldr r1, _080393D8 @ =gUnknown_02024E84
+ ldr r1, _080393D8 @ =gBattleMonForms
adds r2, r1
ldrb r1, [r2]
bl StartSpriteAnim
@@ -2297,7 +2297,7 @@ _080393C8: .4byte gUnknown_02024E8C
_080393CC: .4byte gUnknown_02024BE0
_080393D0: .4byte gSprites
_080393D4: .4byte 0x0000ff10
-_080393D8: .4byte gUnknown_02024E84
+_080393D8: .4byte gBattleMonForms
_080393DC: .4byte gUnknown_03004330
_080393E0: .4byte sub_8037A74
thumb_func_end sub_8039294
@@ -2460,7 +2460,7 @@ sub_8039430: @ 8039430
adds r0, r1
lsls r0, 2
adds r0, r5
- ldr r1, _080395AC @ =gUnknown_02024E84
+ ldr r1, _080395AC @ =gBattleMonForms
adds r6, r1
ldrb r1, [r6]
bl StartSpriteAnim
@@ -2511,7 +2511,7 @@ _0803959C: .4byte gUnknown_0300434C
_080395A0: .4byte gUnknown_02024E8C
_080395A4: .4byte gUnknown_02024BE0
_080395A8: .4byte gSprites
-_080395AC: .4byte gUnknown_02024E84
+_080395AC: .4byte gBattleMonForms
_080395B0: .4byte SpriteCallbackDummy
thumb_func_end sub_8039430
diff --git a/asm/battle_2.s b/asm/battle_2.s
index ecfb58ae8..004d1eadf 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -196,7 +196,7 @@ _0800E97E:
ldr r1, _0800E9D8 @ =gTrainerBattleOpponent
ldrh r1, [r1]
bl sub_800F8E8
- bl sub_8040C38
+ bl SetWildMonHeldItem
_0800E998:
ldr r0, _0800E9DC @ =gMain
ldr r1, _0800E9E0 @ =0x0000043d
@@ -3528,7 +3528,7 @@ _08010430:
cmp r4, r0 @ Check if pokemon species is Castform
bne _08010454
ldr r0, _0801044C @ =gUnknownCastformCoords_0837F598
- ldr r1, _08010450 @ =gUnknown_02024E84
+ ldr r1, _08010450 @ =gBattleMonForms
adds r1, r6, r1
ldrb r1, [r1]
lsls r1, 2
@@ -3538,7 +3538,7 @@ _08010430:
.align 2, 0
_08010448: .4byte SPECIES_CASTFORM
_0801044C: .4byte gUnknownCastformCoords_0837F598
-_08010450: .4byte gUnknown_02024E84
+_08010450: .4byte gBattleMonForms
_08010454:
movs r0, 0xCE
lsls r0, 1
@@ -3611,7 +3611,7 @@ _080104C8:
lsls r0, 24
lsrs r0, 22
adds r0, r1
- ldr r2, _0801051C @ =gUnknown_02024E84
+ ldr r2, _0801051C @ =gBattleMonForms
movs r3, 0x2E
ldrsh r1, [r4, r3]
adds r1, r2
@@ -3631,7 +3631,7 @@ _080104F6:
subs r0, 0x1
cmp r0, 0
bge _080104F6
- ldr r0, _0801051C @ =gUnknown_02024E84
+ ldr r0, _0801051C @ =gBattleMonForms
movs r2, 0x2E
ldrsh r1, [r4, r2]
adds r1, r0
@@ -3644,7 +3644,7 @@ _08010510:
bx r0
.align 2, 0
_08010518: .4byte gUnknown_081FAF4C
-_0801051C: .4byte gUnknown_02024E84
+_0801051C: .4byte gBattleMonForms
thumb_func_end sub_8010494
thumb_func_start sub_8010520
@@ -10752,14 +10752,14 @@ _08013EE0:
cmp r0, 0
beq _08013F1C
ldr r0, _08013F50 @ =gEnemyParty
- bl sub_8134504
+ bl UpdateRoamerHPStatus
ldrb r0, [r5]
cmp r0, 0x1
beq _08013F18
cmp r0, 0x7
bne _08013F1C
_08013F18:
- bl sub_813452C
+ bl SetRoamerInactive
_08013F1C:
movs r0, 0x5A
bl m4aSongNumStop
diff --git a/asm/battle_3.s b/asm/battle_3.s
index 7805bd722..4252e7222 100644
--- a/asm/battle_3.s
+++ b/asm/battle_3.s
@@ -11669,7 +11669,7 @@ sub_801B928: @ 801B928
adds r2, r5, 0
adds r2, 0x3C
adds r1, r2
- bl sub_8040AD0
+ bl IsOtherTrainer
lsls r0, 24
cmp r0, 0
beq _0801B9DA
diff --git a/asm/battle_4.s b/asm/battle_4.s
index 6b89e2b6a..c1a6513be 100644
--- a/asm/battle_4.s
+++ b/asm/battle_4.s
@@ -8832,7 +8832,7 @@ _080203B8:
muls r0, r1
ldr r1, _08020400 @ =gPlayerParty
adds r0, r1
- bl sub_8040AA4
+ bl IsTradedMon
lsls r0, 24
cmp r0, 0
beq _08020404
@@ -15948,7 +15948,7 @@ _08023CC8:
lsls r0, 16
lsrs r4, r0, 16
adds r0, r4, 0
- bl sub_8040A00
+ bl IsHMMove2
cmp r0, 0
beq _08023D20
ldr r0, _08023D14 @ =0x0000013f
diff --git a/asm/battle_6.s b/asm/battle_6.s
index fbd1db0bc..f277fb7f2 100644
--- a/asm/battle_6.s
+++ b/asm/battle_6.s
@@ -2530,7 +2530,7 @@ sub_802F934: @ 802F934
adds r0, r1
lsls r0, 2
adds r0, r5
- ldr r1, _0802FA98 @ =gUnknown_02024E84
+ ldr r1, _0802FA98 @ =gBattleMonForms
adds r6, r1
ldrb r1, [r6]
bl StartSpriteAnim
@@ -2581,7 +2581,7 @@ _0802FA88: .4byte gUnknown_0300434C
_0802FA8C: .4byte gUnknown_02024E8C
_0802FA90: .4byte gUnknown_02024BE0
_0802FA94: .4byte gSprites
-_0802FA98: .4byte gUnknown_02024E84
+_0802FA98: .4byte gBattleMonForms
_0802FA9C: .4byte SpriteCallbackDummy
thumb_func_end sub_802F934
@@ -3673,104 +3673,7 @@ _08030378:
bx r0
thumb_func_end dp01t_11_1_message_for_player_only
- thumb_func_start sub_803037C
-sub_803037C: @ 803037C
- push {r4,lr}
- sub sp, 0x8
- ldr r1, _08030434 @ =gUnknown_030042A4
- movs r0, 0
- strh r0, [r1]
- ldr r1, _08030438 @ =gUnknown_030042A0
- movs r0, 0xA0
- strh r0, [r1]
- ldr r4, _0803043C @ =gUnknown_03004210
- movs r0, 0x1B
- str r0, [sp]
- movs r0, 0x12
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r1, 0xA
- movs r2, 0x2
- movs r3, 0xF
- bl FillWindowRect
- movs r0, 0x10
- str r0, [sp]
- movs r0, 0x26
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r1, 0xA
- movs r2, 0x2
- movs r3, 0x23
- bl FillWindowRect
- ldr r1, _08030440 @ =gUnknown_03004330
- ldr r0, _08030444 @ =gUnknown_02024A60
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08030448 @ =sub_802C098
- str r1, [r0]
- ldr r1, _0803044C @ =gUnknown_08400CF3
- movs r2, 0xC8
- lsls r2, 1
- movs r0, 0x23
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0x12
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- ldr r1, _08030450 @ =0x0000ffff
- ldr r3, _08030454 @ =0x00002d9f
- movs r0, 0
- str r0, [sp]
- movs r2, 0xC
- bl sub_814A5C0
- movs r4, 0
-_080303EC:
- lsls r0, r4, 24
- lsrs r0, 24
- bl nullsub_8
- adds r4, 0x1
- cmp r4, 0x3
- ble _080303EC
- ldr r1, _08030458 @ =gUnknown_02024E60
- ldr r0, _08030444 @ =gUnknown_02024A60
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl sub_802E3E4
- ldr r0, _0803045C @ =gUnknown_08400CA8
- bl get_battle_strings_
- ldr r4, _0803043C @ =gUnknown_03004210
- ldr r1, _08030460 @ =gUnknown_020238CC
- movs r2, 0xDC
- lsls r2, 1
- movs r0, 0x23
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0x2
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08030434: .4byte gUnknown_030042A4
-_08030438: .4byte gUnknown_030042A0
-_0803043C: .4byte gUnknown_03004210
-_08030440: .4byte gUnknown_03004330
-_08030444: .4byte gUnknown_02024A60
-_08030448: .4byte sub_802C098
-_0803044C: .4byte gUnknown_08400CF3
-_08030450: .4byte 0x0000ffff
-_08030454: .4byte 0x00002d9f
-_08030458: .4byte gUnknown_02024E60
-_0803045C: .4byte gUnknown_08400CA8
-_08030460: .4byte gUnknown_020238CC
- thumb_func_end sub_803037C
+.section .text_8030464
thumb_func_start nullsub_42
nullsub_42: @ 8030464
diff --git a/asm/battle_7.s b/asm/battle_7.s
index 79a0bca2b..593a5bbb1 100644
--- a/asm/battle_7.s
+++ b/asm/battle_7.s
@@ -280,7 +280,7 @@ move_anim_start_t3: @ 80314C8
ands r0, r7
cmp r0, 0
beq _0803150C
- ldr r0, _08031508 @ =gUnknown_02024E84
+ ldr r0, _08031508 @ =gBattleMonForms
adds r0, r6, r0
movs r2, 0x7F
adds r1, r7, 0
@@ -289,7 +289,7 @@ move_anim_start_t3: @ 80314C8
movs r0, 0x1
b _080315C2
.align 2, 0
-_08031508: .4byte gUnknown_02024E84
+_08031508: .4byte gBattleMonForms
_0803150C:
lsls r1, r6, 2
ldr r0, _08031530 @ =0x02017800
@@ -732,7 +732,7 @@ _08031856:
adds r0, r5, 0
adds r1, r4, 0
bl sub_800D238
- ldr r0, _080318E8 @ =gUnknown_02024E84
+ ldr r0, _080318E8 @ =gBattleMonForms
add r0, r9
ldrb r0, [r0]
lsls r0, 5
@@ -773,7 +773,7 @@ _080318CE:
.align 2, 0
_080318E0: .4byte 0x02000000
_080318E4: .4byte SPECIES_CASTFORM
-_080318E8: .4byte gUnknown_02024E84
+_080318E8: .4byte gBattleMonForms
_080318EC: .4byte 0x00007fff
_080318F0: .4byte gPlttBufferFaded
_080318F4: .4byte gPlttBufferUnfaded
@@ -896,7 +896,7 @@ _080319BE:
adds r0, r5, 0
adds r1, r4, 0
bl sub_800D238
- ldr r0, _08031A50 @ =gUnknown_02024E84
+ ldr r0, _08031A50 @ =gBattleMonForms
add r0, r9
ldrb r0, [r0]
lsls r0, 5
@@ -937,7 +937,7 @@ _08031A36:
.align 2, 0
_08031A48: .4byte 0x02000000
_08031A4C: .4byte SPECIES_CASTFORM
-_08031A50: .4byte gUnknown_02024E84
+_08031A50: .4byte gBattleMonForms
_08031A54: .4byte 0x00007fff
_08031A58: .4byte gPlttBufferFaded
_08031A5C: .4byte gPlttBufferUnfaded
@@ -1675,7 +1675,7 @@ sub_8031FC4: @ 8031FC4
adds r1, r5, 0
movs r2, 0x20
bl LoadPalette
- ldr r0, _08032074 @ =gUnknown_02024E84
+ ldr r0, _08032074 @ =gBattleMonForms
add r0, r8
ldrh r1, [r4]
strb r1, [r0]
@@ -1715,7 +1715,7 @@ _08032064: .4byte gUnknown_02024BE0
_08032068: .4byte gSprites
_0803206C: .4byte 0x02017840
_08032070: .4byte 0xffffebc0
-_08032074: .4byte gUnknown_02024E84
+_08032074: .4byte gBattleMonForms
_08032078: .4byte 0x00007fff
_0803207C: .4byte gPlttBufferFaded
_08032080: .4byte gPlttBufferUnfaded
@@ -1949,7 +1949,7 @@ _08032202:
adds r0, r6, 0
adds r1, r4, 0
bl sub_800D238
- ldr r0, _0803233C @ =gUnknown_02024E84
+ ldr r0, _0803233C @ =gBattleMonForms
ldr r1, [sp, 0xC]
adds r0, r1, r0
ldrb r0, [r0]
@@ -1982,7 +1982,7 @@ _08032288:
add r1, r9
adds r0, r1
strh r7, [r0, 0x2]
- ldr r0, _0803233C @ =gUnknown_02024E84
+ ldr r0, _0803233C @ =gBattleMonForms
adds r1, r2, r0
ldr r4, [sp, 0xC]
adds r0, r4, r0
@@ -2006,7 +2006,7 @@ _080322C8:
adds r0, r1
lsls r0, 2
adds r0, r2
- ldr r1, _0803233C @ =gUnknown_02024E84
+ ldr r1, _0803233C @ =gBattleMonForms
add r1, r8
ldrb r1, [r1]
bl StartSpriteAnim
@@ -2033,7 +2033,7 @@ _0803232C: .4byte 0x040000d4
_08032330: .4byte 0x84000200
_08032334: .4byte 0x02000000
_08032338: .4byte SPECIES_CASTFORM
-_0803233C: .4byte gUnknown_02024E84
+_0803233C: .4byte gBattleMonForms
_08032340: .4byte 0x00007fff
_08032344: .4byte gPlttBufferFaded
_08032348: .4byte gPlttBufferUnfaded
@@ -2192,7 +2192,7 @@ refresh_graphics_maybe: @ 8032464
lsls r0, 2
ldr r1, _080324A0 @ =gSprites
adds r4, r0, r1
- ldr r0, _080324A4 @ =gUnknown_02024E84
+ ldr r0, _080324A4 @ =gBattleMonForms
adds r0, r6, r0
ldrb r1, [r0]
adds r0, r4, 0
@@ -2204,7 +2204,7 @@ refresh_graphics_maybe: @ 8032464
b _080324AE
.align 2, 0
_080324A0: .4byte gSprites
-_080324A4: .4byte gUnknown_02024E84
+_080324A4: .4byte gBattleMonForms
_080324A8:
adds r0, r6, 0
bl sub_8077F68
@@ -3001,7 +3001,7 @@ sub_8032AA8: @ 8032AA8
movs r3, 0
movs r0, 0
strh r0, [r2, 0x2]
- ldr r0, _08032AD8 @ =gUnknown_02024E84
+ ldr r0, _08032AD8 @ =gBattleMonForms
adds r0, r4, r0
strb r3, [r0]
cmp r1, 0
@@ -3014,7 +3014,7 @@ _08032ACC:
bx r0
.align 2, 0
_08032AD4: .4byte 0x02017800
-_08032AD8: .4byte gUnknown_02024E84
+_08032AD8: .4byte gBattleMonForms
thumb_func_end sub_8032AA8
thumb_func_start nullsub_45
diff --git a/asm/battle_8.s b/asm/battle_8.s
index c0a33970f..0e4925dfb 100644
--- a/asm/battle_8.s
+++ b/asm/battle_8.s
@@ -2323,7 +2323,7 @@ sub_80347B8: @ 80347B8
adds r0, r1
lsls r0, 2
adds r0, r5
- ldr r1, _08034904 @ =gUnknown_02024E84
+ ldr r1, _08034904 @ =gBattleMonForms
adds r2, r1
ldrb r1, [r2]
bl StartSpriteAnim
@@ -2362,7 +2362,7 @@ _080348F4: .4byte gUnknown_02024E8C
_080348F8: .4byte gUnknown_02024BE0
_080348FC: .4byte gSprites
_08034900: .4byte 0x0000ff10
-_08034904: .4byte gUnknown_02024E84
+_08034904: .4byte gBattleMonForms
_08034908: .4byte gUnknown_03004330
_0803490C: .4byte sub_8033018
thumb_func_end sub_80347B8
@@ -2525,7 +2525,7 @@ sub_803495C: @ 803495C
adds r0, r1
lsls r0, 2
adds r0, r5
- ldr r1, _08034AD8 @ =gUnknown_02024E84
+ ldr r1, _08034AD8 @ =gBattleMonForms
adds r6, r1
ldrb r1, [r6]
bl StartSpriteAnim
@@ -2576,7 +2576,7 @@ _08034AC8: .4byte gUnknown_0300434C
_08034ACC: .4byte gUnknown_02024E8C
_08034AD0: .4byte gUnknown_02024BE0
_08034AD4: .4byte gSprites
-_08034AD8: .4byte gUnknown_02024E84
+_08034AD8: .4byte gBattleMonForms
_08034ADC: .4byte SpriteCallbackDummy
thumb_func_end sub_803495C
diff --git a/asm/battle_811DA74.s b/asm/battle_811DA74.s
index 3bdc8e243..4190b2400 100644
--- a/asm/battle_811DA74.s
+++ b/asm/battle_811DA74.s
@@ -1301,7 +1301,7 @@ sub_811F6D8: @ 811F6D8
adds r0, r1
lsls r0, 2
adds r0, r5
- ldr r1, _0811F7E8 @ =gUnknown_02024E84
+ ldr r1, _0811F7E8 @ =gBattleMonForms
adds r2, r1
ldrb r1, [r2]
bl StartSpriteAnim
@@ -1324,7 +1324,7 @@ _0811F7D8: .4byte gUnknown_02024E8C
_0811F7DC: .4byte gUnknown_02024BE0
_0811F7E0: .4byte gSprites
_0811F7E4: .4byte 0x0000ff10
-_0811F7E8: .4byte gUnknown_02024E84
+_0811F7E8: .4byte gBattleMonForms
_0811F7EC: .4byte gUnknown_03004330
_0811F7F0: .4byte sub_811DDE8
thumb_func_end sub_811F6D8
@@ -1492,7 +1492,7 @@ sub_811F864: @ 811F864
adds r0, r1
lsls r0, 2
adds r0, r5
- ldr r1, _0811F9C8 @ =gUnknown_02024E84
+ ldr r1, _0811F9C8 @ =gBattleMonForms
adds r6, r1
ldrb r1, [r6]
bl StartSpriteAnim
@@ -1543,7 +1543,7 @@ _0811F9B8: .4byte gUnknown_0300434C
_0811F9BC: .4byte gUnknown_02024E8C
_0811F9C0: .4byte gUnknown_02024BE0
_0811F9C4: .4byte gSprites
-_0811F9C8: .4byte gUnknown_02024E84
+_0811F9C8: .4byte gBattleMonForms
_0811F9CC: .4byte SpriteCallbackDummy
thumb_func_end sub_811F864
diff --git a/asm/battle_anim_80CA710.s b/asm/battle_anim_80CA710.s
index e0e92a074..be80cc44f 100644
--- a/asm/battle_anim_80CA710.s
+++ b/asm/battle_anim_80CA710.s
@@ -54891,7 +54891,7 @@ sub_80E4EF8: @ 80E4EF8
ldr r1, _080E4FD0 @ =gUnknown_081FAF4C
lsls r4, 2
adds r4, r1
- ldr r1, _080E4FD4 @ =gUnknown_02024E84
+ ldr r1, _080E4FD4 @ =gBattleMonForms
adds r0, r1
ldrb r1, [r0]
lsls r1, 11
@@ -54962,7 +54962,7 @@ _080E4FBC:
.align 2, 0
_080E4FCC: .4byte 0x040000d4
_080E4FD0: .4byte gUnknown_081FAF4C
-_080E4FD4: .4byte gUnknown_02024E84
+_080E4FD4: .4byte gBattleMonForms
_080E4FD8: .4byte 0x80000400
thumb_func_end sub_80E4EF8
diff --git a/asm/battle_anim_81258BC.s b/asm/battle_anim_81258BC.s
index 8293435d0..86abad6f3 100644
--- a/asm/battle_anim_81258BC.s
+++ b/asm/battle_anim_81258BC.s
@@ -1595,106 +1595,7 @@ _0812BB0C:
bx r0
thumb_func_end dp01t_11_6_message_for_player_only
- thumb_func_start sub_812BB10
-sub_812BB10: @ 812BB10
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r0, _0812BBCC @ =gUnknown_030042A4
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0812BBD0 @ =gUnknown_030042A0
- movs r0, 0xA0
- strh r0, [r1]
- ldr r4, _0812BBD4 @ =gUnknown_03004210
- movs r5, 0
- strb r2, [r4, 0x6]
- movs r0, 0x1B
- str r0, [sp]
- movs r0, 0x12
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r1, 0xA
- movs r2, 0x2
- movs r3, 0xF
- bl FillWindowRect_DefaultPalette
- movs r0, 0x10
- str r0, [sp]
- movs r0, 0x24
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r1, 0xA
- movs r2, 0x2
- movs r3, 0x23
- bl FillWindowRect_DefaultPalette
- ldr r1, _0812BBD8 @ =gUnknown_03004330
- ldr r0, _0812BBDC @ =gUnknown_02024A60
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812BBE0 @ =bx_battle_menu_t6_2
- str r1, [r0]
- ldr r1, _0812BBE4 @ =gUnknown_08400D15
- movs r2, 0xC8
- lsls r2, 1
- movs r0, 0x23
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0x12
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- ldr r1, _0812BBE8 @ =0x0000ffff
- ldr r3, _0812BBEC @ =0x00002d9f
- str r5, [sp]
- movs r0, 0
- movs r2, 0xC
- bl sub_814A5C0
- movs r4, 0
-_0812BB84:
- lsls r0, r4, 24
- lsrs r0, 24
- bl nullsub_8
- adds r4, 0x1
- cmp r4, 0x3
- ble _0812BB84
- ldr r1, _0812BBF0 @ =gUnknown_02024E60
- ldr r0, _0812BBDC @ =gUnknown_02024A60
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl sub_802E3E4
- ldr r0, _0812BBF4 @ =gUnknown_08400CBB
- bl get_battle_strings_
- ldr r4, _0812BBD4 @ =gUnknown_03004210
- ldr r1, _0812BBF8 @ =gUnknown_020238CC
- movs r2, 0xDC
- lsls r2, 1
- movs r0, 0x23
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0x2
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BBCC: .4byte gUnknown_030042A4
-_0812BBD0: .4byte gUnknown_030042A0
-_0812BBD4: .4byte gUnknown_03004210
-_0812BBD8: .4byte gUnknown_03004330
-_0812BBDC: .4byte gUnknown_02024A60
-_0812BBE0: .4byte bx_battle_menu_t6_2
-_0812BBE4: .4byte gUnknown_08400D15
-_0812BBE8: .4byte 0x0000ffff
-_0812BBEC: .4byte 0x00002d9f
-_0812BBF0: .4byte gUnknown_02024E60
-_0812BBF4: .4byte gUnknown_08400CBB
-_0812BBF8: .4byte gUnknown_020238CC
- thumb_func_end sub_812BB10
+.section .text_812BBFC
thumb_func_start sub_812BBFC
sub_812BBFC: @ 812BBFC
diff --git a/asm/battle_anim_812C144.s b/asm/battle_anim_812C144.s
index e89de30c1..28f6f9ada 100644
--- a/asm/battle_anim_812C144.s
+++ b/asm/battle_anim_812C144.s
@@ -3144,7 +3144,7 @@ _0812D906:
ldr r0, _0812D9CC @ =gUnknown_081FAF4C
lsls r1, 2
adds r1, r0
- ldr r2, _0812D9D0 @ =gUnknown_02024E84
+ ldr r2, _0812D9D0 @ =gBattleMonForms
ldr r0, _0812D9D4 @ =gBattleAnimPlayerMonIndex
ldrb r0, [r0]
adds r0, r2
@@ -3243,7 +3243,7 @@ _0812D9A2:
b _0812DA0A
.align 2, 0
_0812D9CC: .4byte gUnknown_081FAF4C
-_0812D9D0: .4byte gUnknown_02024E84
+_0812D9D0: .4byte gBattleMonForms
_0812D9D4: .4byte gBattleAnimPlayerMonIndex
_0812D9D8: .4byte 0x040000d4
_0812D9DC: .4byte 0x84000200
diff --git a/asm/battle_anim_8137220.s b/asm/battle_anim_8137220.s
index 016548a1f..134e18e6f 100644
--- a/asm/battle_anim_8137220.s
+++ b/asm/battle_anim_8137220.s
@@ -4812,7 +4812,7 @@ sub_81398BC: @ 81398BC
adds r0, r1
lsls r0, 2
adds r0, r5
- ldr r1, _08139A24 @ =gUnknown_02024E84
+ ldr r1, _08139A24 @ =gBattleMonForms
adds r6, r1
ldrb r1, [r6]
bl StartSpriteAnim
@@ -4864,7 +4864,7 @@ _08139A14: .4byte gUnknown_0300434C
_08139A18: .4byte gUnknown_02024E8C
_08139A1C: .4byte gUnknown_02024BE0
_08139A20: .4byte gSprites
-_08139A24: .4byte gUnknown_02024E84
+_08139A24: .4byte gBattleMonForms
_08139A28: .4byte SpriteCallbackDummy
thumb_func_end sub_81398BC
diff --git a/asm/battle_interface.s b/asm/battle_interface.s
deleted file mode 100644
index b84342e18..000000000
--- a/asm/battle_interface.s
+++ /dev/null
@@ -1,5500 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_804373C
-sub_804373C: @ 804373C
- movs r0, 0x9
- bx lr
- thumb_func_end sub_804373C
-
- thumb_func_start sub_8043740
-sub_8043740: @ 8043740
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r7, r1, 0
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r2, 24
- lsrs r2, 24
- mov r10, r2
- movs r3, 0
- movs r2, 0
-_0804375C:
- lsls r0, r3, 24
- asrs r0, 24
- mov r3, sp
- adds r1, r3, r0
- strb r2, [r1]
- adds r0, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- asrs r0, 24
- cmp r0, 0x3
- ble _0804375C
- movs r3, 0x3
- movs r0, 0x1
- negs r0, r0
- mov r9, r0
- mov r8, sp
-_0804377C:
- lsls r0, r5, 16
- asrs r6, r0, 16
- cmp r6, 0
- ble _080437AA
- lsls r4, r3, 24
- asrs r4, 24
- mov r1, sp
- adds r5, r1, r4
- adds r0, r6, 0
- movs r1, 0xA
- bl __modsi3
- strb r0, [r5]
- adds r0, r6, 0
- movs r1, 0xA
- bl __divsi3
- lsls r0, 16
- lsrs r5, r0, 16
- subs r4, 0x1
- lsls r4, 24
- lsrs r3, r4, 24
- b _0804377C
-_080437AA:
- lsls r1, r3, 24
- asrs r0, r1, 24
- cmp r0, r9
- ble _080437CE
- movs r4, 0xFF
- movs r3, 0x1
- negs r3, r3
-_080437B8:
- asrs r2, r1, 24
- mov r5, sp
- adds r1, r5, r2
- ldrb r0, [r1]
- orrs r0, r4
- strb r0, [r1]
- subs r2, 0x1
- lsls r1, r2, 24
- asrs r0, r1, 24
- cmp r0, r3
- bgt _080437B8
-_080437CE:
- mov r1, r8
- ldrb r0, [r1, 0x3]
- cmp r0, 0xFF
- bne _080437DA
- movs r0, 0
- strb r0, [r1, 0x3]
-_080437DA:
- mov r2, r10
- cmp r2, 0
- bne _0804386A
- movs r3, 0
- movs r1, 0
- movs r6, 0xFC
- lsls r6, 8
- movs r5, 0x1E
- mov r12, r5
-_080437EC:
- lsls r1, 24
- asrs r2, r1, 24
- mov r0, sp
- adds r5, r0, r2
- ldrb r0, [r5]
- mov r8, r1
- cmp r0, 0xFF
- bne _08043822
- lsls r1, r2, 1
- adds r1, r7
- ldrh r2, [r1]
- adds r0, r6, 0
- ands r0, r2
- mov r2, r12
- orrs r0, r2
- strh r0, [r1]
- lsls r3, 24
- asrs r1, r3, 23
- adds r1, r7
- adds r1, 0x40
- ldrh r2, [r1]
- adds r0, r6, 0
- ands r0, r2
- mov r5, r12
- orrs r0, r5
- strh r0, [r1]
- b _08043852
-_08043822:
- lsls r2, 1
- adds r2, r7
- ldrh r0, [r2]
- adds r1, r6, 0
- ands r1, r0
- ldrb r0, [r5]
- adds r0, 0x14
- orrs r1, r0
- strh r1, [r2]
- lsls r4, r3, 24
- asrs r3, r4, 24
- lsls r2, r3, 1
- adds r2, r7
- adds r2, 0x40
- ldrh r0, [r2]
- adds r1, r6, 0
- ands r1, r0
- mov r5, sp
- adds r0, r5, r3
- ldrb r0, [r0]
- adds r0, 0x34
- orrs r1, r0
- strh r1, [r2]
- adds r3, r4, 0
-_08043852:
- movs r0, 0x80
- lsls r0, 17
- add r0, r8
- lsrs r1, r0, 24
- movs r2, 0x80
- lsls r2, 17
- adds r0, r3, r2
- lsrs r3, r0, 24
- asrs r0, 24
- cmp r0, 0x3
- ble _080437EC
- b _080438CE
-_0804386A:
- movs r3, 0
- movs r4, 0xFC
- lsls r4, 8
- movs r6, 0x1E
-_08043872:
- lsls r1, r3, 24
- asrs r2, r1, 24
- mov r3, sp
- adds r5, r3, r2
- ldrb r0, [r5]
- adds r3, r1, 0
- cmp r0, 0xFF
- bne _0804389E
- lsls r1, r2, 1
- adds r1, r7
- ldrh r2, [r1]
- adds r0, r4, 0
- ands r0, r2
- orrs r0, r6
- strh r0, [r1]
- adds r1, 0x40
- ldrh r2, [r1]
- adds r0, r4, 0
- ands r0, r2
- orrs r0, r6
- strh r0, [r1]
- b _080438C0
-_0804389E:
- lsls r2, 1
- adds r2, r7
- ldrh r0, [r2]
- adds r1, r4, 0
- ands r1, r0
- ldrb r0, [r5]
- adds r0, 0x14
- orrs r1, r0
- strh r1, [r2]
- adds r2, 0x40
- ldrh r0, [r2]
- adds r1, r4, 0
- ands r1, r0
- ldrb r0, [r5]
- adds r0, 0x34
- orrs r1, r0
- strh r1, [r2]
-_080438C0:
- movs r5, 0x80
- lsls r5, 17
- adds r0, r3, r5
- lsrs r3, r0, 24
- asrs r0, 24
- cmp r0, 0x3
- ble _08043872
-_080438CE:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8043740
-
- thumb_func_start unref_sub_80438E0
-unref_sub_80438E0: @ 80438E0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r0, r1, 0
- adds r5, r2, 0
- lsls r4, 16
- lsrs r4, 16
- movs r1, 0x1E
- strh r1, [r5, 0x8]
- lsls r0, 16
- asrs r0, 16
- adds r1, r5, 0
- movs r2, 0
- bl sub_8043740
- lsls r4, 16
- asrs r4, 16
- adds r5, 0xA
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x1
- bl sub_8043740
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end unref_sub_80438E0
-
- thumb_func_start battle_make_oam_normal_battle
-battle_make_oam_normal_battle: @ 8043914
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- movs r0, 0
- str r0, [sp]
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _08043A28
- mov r0, r10
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080439AC
- ldr r4, _0804399C @ =gSpriteTemplate_820A4EC
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r4, _080439A0 @ =gSprites
- lsls r1, r6, 4
- adds r1, r6
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1, 0x1]
- movs r3, 0x3F
- adds r0, r3, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- lsls r2, r7, 4
- adds r2, r7
- lsls r2, 2
- adds r2, r4
- ldrb r0, [r2, 0x1]
- ands r3, r0
- strb r3, [r2, 0x1]
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x40
- ldr r4, _080439A4 @ =0x000003ff
- adds r0, r4, 0
- ands r1, r0
- ldr r0, _080439A8 @ =0xfffffc00
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x4]
- b _080439F2
- .align 2, 0
-_0804399C: .4byte gSpriteTemplate_820A4EC
-_080439A0: .4byte gSprites
-_080439A4: .4byte 0x000003ff
-_080439A8: .4byte 0xfffffc00
-_080439AC:
- ldr r4, _08043A14 @ =gSpriteTemplate_820A51C
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _08043A18 @ =gSprites
- lsls r2, r7, 4
- adds r2, r7
- lsls r2, 2
- adds r2, r0
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x20
- ldr r5, _08043A1C @ =0x000003ff
- adds r0, r5, 0
- ands r1, r0
- ldr r0, _08043A20 @ =0xfffffc00
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x4]
- movs r0, 0x2
- str r0, [sp]
-_080439F2:
- ldr r2, _08043A18 @ =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r2
- strh r7, [r0, 0x6]
- lsls r0, r7, 4
- adds r0, r7
- lsls r0, 2
- adds r1, r0, r2
- strh r6, [r1, 0x38]
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _08043A24 @ =sub_8043D5C
- str r1, [r0]
- b _08043B50
- .align 2, 0
-_08043A14: .4byte gSpriteTemplate_820A51C
-_08043A18: .4byte gSprites
-_08043A1C: .4byte 0x000003ff
-_08043A20: .4byte 0xfffffc00
-_08043A24: .4byte sub_8043D5C
-_08043A28:
- mov r0, r10
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _08043ACC
- mov r0, r10
- bl battle_get_per_side_status
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 25
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- ldr r4, _08043AB8 @ =gSpriteTemplate_820A4EC
- adds r0, r4
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- mov r0, r10
- bl battle_get_per_side_status
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 25
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r4, _08043ABC @ =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r4
- strh r7, [r0, 0x6]
- lsls r2, r7, 4
- adds r2, r7
- lsls r2, 2
- adds r3, r2, r4
- strh r6, [r3, 0x38]
- ldrh r1, [r3, 0x4]
- mov r8, r1
- mov r5, r8
- lsls r1, r5, 22
- lsrs r1, 22
- adds r1, 0x20
- ldr r5, _08043AC0 @ =0x000003ff
- adds r0, r5, 0
- ands r1, r0
- ldr r0, _08043AC4 @ =0xfffffc00
- mov r5, r8
- ands r0, r5
- orrs r0, r1
- strh r0, [r3, 0x4]
- adds r4, 0x1C
- adds r2, r4
- ldr r0, _08043AC8 @ =sub_8043D5C
- str r0, [r2]
- movs r0, 0x1
- b _08043B4E
- .align 2, 0
-_08043AB8: .4byte gSpriteTemplate_820A4EC
-_08043ABC: .4byte gSprites
-_08043AC0: .4byte 0x000003ff
-_08043AC4: .4byte 0xfffffc00
-_08043AC8: .4byte sub_8043D5C
-_08043ACC:
- mov r0, r10
- bl battle_get_per_side_status
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 25
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- ldr r4, _08043C14 @ =gSpriteTemplate_820A51C
- adds r0, r4
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- mov r0, r10
- bl battle_get_per_side_status
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 25
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r4, _08043C18 @ =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r4
- strh r7, [r0, 0x6]
- lsls r2, r7, 4
- adds r2, r7
- lsls r2, 2
- adds r3, r2, r4
- strh r6, [r3, 0x38]
- ldrh r1, [r3, 0x4]
- mov r8, r1
- mov r5, r8
- lsls r1, r5, 22
- lsrs r1, 22
- adds r1, 0x20
- ldr r5, _08043C1C @ =0x000003ff
- adds r0, r5, 0
- ands r1, r0
- ldr r0, _08043C20 @ =0xfffffc00
- mov r5, r8
- ands r0, r5
- orrs r0, r1
- strh r0, [r3, 0x4]
- adds r4, 0x1C
- adds r2, r4
- ldr r0, _08043C24 @ =sub_8043D5C
- str r0, [r2]
- movs r0, 0x2
-_08043B4E:
- str r0, [sp]
-_08043B50:
- ldr r0, _08043C28 @ =gUnknown_02024A72
- add r0, r10
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- ldr r1, _08043C2C @ =gSpriteTemplate_820A56C
- adds r0, r1
- movs r1, 0x8C
- movs r2, 0x3C
- movs r3, 0
- bl CreateSpriteAtEnd
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r5, 4
- adds r4, r5
- lsls r4, 2
- ldr r1, _08043C18 @ =gSprites
- mov r8, r1
- add r4, r8
- mov r0, r10
- bl battle_side_get_owner
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 21
- ldr r0, _08043C30 @ =gSubspriteTables_820A684
- adds r1, r0
- adds r0, r4, 0
- bl SetSubspriteTables
- adds r2, r4, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldrb r1, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r2, 0x4
- mov r9, r2
- mov r1, r9
- orrs r0, r1
- strb r0, [r4, 0x5]
- movs r0, 0x1
- bl sub_8043CDC
- ldrh r1, [r4, 0x4]
- lsls r1, 22
- lsrs r1, 17
- ldr r2, _08043C34 @ =0x06010000
- adds r1, r2
- ldr r2, _08043C38 @ =REG_BG0HOFS
- bl CpuSet
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- add r0, r8
- strh r5, [r0, 0x38]
- mov r2, r10
- strh r2, [r0, 0x3A]
- adds r0, 0x3E
- ldrb r1, [r0]
- mov r5, r9
- orrs r1, r5
- strb r1, [r0]
- lsls r0, r7, 4
- adds r0, r7
- lsls r0, 2
- add r0, r8
- adds r0, 0x3E
- ldrb r1, [r0]
- orrs r1, r5
- strb r1, [r0]
- strh r6, [r4, 0x38]
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r4, 0x3A]
- adds r4, 0x3E
- ldrb r0, [r4]
- orrs r0, r5
- strb r0, [r4]
- adds r0, r6, 0
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08043C14: .4byte gSpriteTemplate_820A51C
-_08043C18: .4byte gSprites
-_08043C1C: .4byte 0x000003ff
-_08043C20: .4byte 0xfffffc00
-_08043C24: .4byte sub_8043D5C
-_08043C28: .4byte gUnknown_02024A72
-_08043C2C: .4byte gSpriteTemplate_820A56C
-_08043C30: .4byte gSubspriteTables_820A684
-_08043C34: .4byte 0x06010000
-_08043C38: .4byte REG_BG0HOFS
- thumb_func_end battle_make_oam_normal_battle
-
- thumb_func_start battle_make_oam_safari_battle
-battle_make_oam_safari_battle: @ 8043C3C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r4, _08043CC8 @ =gSpriteTemplate_820A54C
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSprite
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08043CCC @ =gSprites
- mov r9, r1
- lsls r4, r6, 4
- adds r4, r6
- lsls r4, 2
- add r4, r9
- ldrb r3, [r4, 0x1]
- movs r2, 0x3F
- adds r1, r2, 0
- ands r1, r3
- strb r1, [r4, 0x1]
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- mov r7, r9
- adds r5, r3, r7
- ldrb r1, [r5, 0x1]
- ands r2, r1
- strb r2, [r5, 0x1]
- ldrh r1, [r5, 0x4]
- mov r8, r1
- mov r7, r8
- lsls r2, r7, 22
- lsrs r2, 22
- adds r2, 0x40
- ldr r7, _08043CD0 @ =0x000003ff
- adds r1, r7, 0
- ands r2, r1
- ldr r1, _08043CD4 @ =0xfffffc00
- mov r7, r8
- ands r1, r7
- orrs r1, r2
- strh r1, [r5, 0x4]
- strh r0, [r4, 0x6]
- strh r6, [r5, 0x38]
- movs r0, 0x1C
- add r9, r0
- add r3, r9
- ldr r0, _08043CD8 @ =sub_8043D5C
- str r0, [r3]
- adds r0, r6, 0
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08043CC8: .4byte gSpriteTemplate_820A54C
-_08043CCC: .4byte gSprites
-_08043CD0: .4byte 0x000003ff
-_08043CD4: .4byte 0xfffffc00
-_08043CD8: .4byte sub_8043D5C
- thumb_func_end battle_make_oam_safari_battle
-
- thumb_func_start sub_8043CDC
-sub_8043CDC: @ 8043CDC
- lsls r0, 24
- lsrs r0, 19
- ldr r1, _08043CE8 @ =gUnknown_08D1216C
- adds r0, r1
- bx lr
- .align 2, 0
-_08043CE8: .4byte gUnknown_08D1216C
- thumb_func_end sub_8043CDC
-
- thumb_func_start sub_8043CEC
-sub_8043CEC: @ 8043CEC
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x38]
- lsls r0, 24
- lsrs r5, r0, 24
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _08043D1C
- cmp r0, 0x1
- bgt _08043D30
- cmp r0, 0
- bne _08043D30
- ldr r2, _08043D18 @ =gSprites
- lsls r3, r5, 4
- adds r1, r3, r5
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r1, 0x20]
- adds r0, 0x10
- b _08043D3E
- .align 2, 0
-_08043D18: .4byte gSprites
-_08043D1C:
- ldr r2, _08043D2C @ =gSprites
- lsls r3, r5, 4
- adds r1, r3, r5
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r1, 0x20]
- adds r0, 0x10
- b _08043D3E
- .align 2, 0
-_08043D2C: .4byte gSprites
-_08043D30:
- ldr r2, _08043D58 @ =gSprites
- lsls r3, r5, 4
- adds r1, r3, r5
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r1, 0x20]
- adds r0, 0x8
-_08043D3E:
- strh r0, [r4, 0x20]
- ldrh r0, [r1, 0x22]
- strh r0, [r4, 0x22]
- adds r0, r3, r5
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x24]
- strh r1, [r4, 0x24]
- ldrh r0, [r0, 0x26]
- strh r0, [r4, 0x26]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08043D58: .4byte gSprites
- thumb_func_end sub_8043CEC
-
- thumb_func_start sub_8043D5C
-sub_8043D5C: @ 8043D5C
- ldrh r1, [r0, 0x38]
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08043D80 @ =gSprites
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- adds r2, r3
- ldrh r1, [r2, 0x20]
- adds r1, 0x40
- strh r1, [r0, 0x20]
- ldrh r1, [r2, 0x22]
- strh r1, [r0, 0x22]
- ldrh r1, [r2, 0x24]
- strh r1, [r0, 0x24]
- ldrh r1, [r2, 0x26]
- strh r1, [r0, 0x26]
- bx lr
- .align 2, 0
-_08043D80: .4byte gSprites
- thumb_func_end sub_8043D5C
-
- thumb_func_start sub_8043D84
-sub_8043D84: @ 8043D84
- push {r4,r5,lr}
- ldr r5, [sp, 0xC]
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 2
- ldr r0, _08043DA8 @ =0x02017850
- adds r4, r0
- strb r1, [r4]
- str r2, [r4, 0x4]
- str r3, [r4, 0x8]
- str r5, [r4, 0xC]
- ldr r0, _08043DAC @ =0xffff8000
- str r0, [r4, 0x10]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08043DA8: .4byte 0x02017850
-_08043DAC: .4byte 0xffff8000
- thumb_func_end sub_8043D84
-
- thumb_func_start sub_8043DB0
-sub_8043DB0: @ 8043DB0
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08043DF8 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r4
- adds r1, r2, 0
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r1]
- movs r0, 0x38
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r0, 0x3E
- ldrb r1, [r0]
- orrs r1, r3
- strb r1, [r0]
- ldrh r1, [r2, 0x6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r0, 0x3E
- ldrb r1, [r0]
- orrs r1, r3
- strb r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08043DF8: .4byte gSprites
- thumb_func_end sub_8043DB0
-
- thumb_func_start sub_8043DFC
-sub_8043DFC: @ 8043DFC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _08043E4C @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r5
- adds r4, r2, 0
- adds r4, 0x3E
- ldrb r1, [r4]
- movs r3, 0x5
- negs r3, r3
- adds r0, r3, 0
- ands r0, r1
- strb r0, [r4]
- movs r0, 0x38
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r4, [r0]
- adds r1, r3, 0
- ands r1, r4
- strb r1, [r0]
- ldrh r1, [r2, 0x6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- ands r3, r1
- strb r3, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08043E4C: .4byte gSprites
- thumb_func_end sub_8043DFC
-
- thumb_func_start sub_8043E50
-sub_8043E50: @ 8043E50
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08043E6C @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r3, r4
- strh r1, [r3, 0x20]
- strh r2, [r3, 0x22]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08043E6C: .4byte gSprites
- thumb_func_end sub_8043E50
-
- thumb_func_start unref_sub_8043E70
-unref_sub_8043E70: @ 8043E70
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _08043EAC @ =gSprites
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r4, r5
- ldrh r1, [r4, 0x6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- bl DestroySprite
- movs r0, 0x38
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- bl DestroySprite
- adds r0, r4, 0
- bl DestroySprite
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08043EAC: .4byte gSprites
- thumb_func_end unref_sub_8043E70
-
- thumb_func_start nullsub_11
-nullsub_11: @ 8043EB0
- bx lr
- thumb_func_end nullsub_11
-
- thumb_func_start sub_8043EB4
-sub_8043EB4: @ 8043EB4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- movs r6, 0
- ldr r1, _08043F38 @ =gUnknown_02024A68
- mov r8, r1
- ldrb r2, [r1]
- cmp r6, r2
- bge _08043F2C
- ldr r1, _08043F3C @ =gSprites
- mov r12, r1
- movs r1, 0x3
- ands r0, r1
- lsls r5, r0, 2
- movs r7, 0xD
- negs r7, r7
- ldr r2, _08043F40 @ =gUnknown_03004340
- mov r9, r2
-_08043EDE:
- mov r1, r9
- adds r0, r6, r1
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- add r1, r12
- ldrb r4, [r1, 0x6]
- ldrh r3, [r1, 0x38]
- lsls r3, 24
- lsrs r3, 24
- ldrb r2, [r1, 0x5]
- adds r0, r7, 0
- ands r0, r2
- orrs r0, r5
- strb r0, [r1, 0x5]
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- add r1, r12
- ldrb r2, [r1, 0x5]
- adds r0, r7, 0
- ands r0, r2
- orrs r0, r5
- strb r0, [r1, 0x5]
- lsls r1, r3, 4
- adds r1, r3
- lsls r1, 2
- add r1, r12
- ldrb r2, [r1, 0x5]
- adds r0, r7, 0
- ands r0, r2
- orrs r0, r5
- strb r0, [r1, 0x5]
- adds r6, 0x1
- mov r2, r8
- ldrb r2, [r2]
- cmp r6, r2
- blt _08043EDE
-_08043F2C:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08043F38: .4byte gUnknown_02024A68
-_08043F3C: .4byte gSprites
-_08043F40: .4byte gUnknown_03004340
- thumb_func_end sub_8043EB4
-
- thumb_func_start sub_8043F44
-sub_8043F44: @ 8043F44
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- movs r4, 0
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _08043F70
- adds r0, r6, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- beq _08043F6A
- movs r5, 0x2C
- movs r4, 0x1E
- b _08043FA8
-_08043F6A:
- movs r5, 0x9E
- movs r4, 0x58
- b _08043FA8
-_08043F70:
- adds r0, r6, 0
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08043F9E
- cmp r0, 0x1
- bgt _08043F88
- cmp r0, 0
- beq _08043F92
- b _08043FA8
-_08043F88:
- cmp r0, 0x2
- beq _08043F98
- cmp r0, 0x3
- beq _08043FA4
- b _08043FA8
-_08043F92:
- movs r5, 0x9F
- movs r4, 0x4D
- b _08043FA8
-_08043F98:
- movs r5, 0xAB
- movs r4, 0x66
- b _08043FA8
-_08043F9E:
- movs r5, 0x2C
- movs r4, 0x13
- b _08043FA8
-_08043FA4:
- movs r5, 0x20
- movs r4, 0x2C
-_08043FA8:
- ldr r0, _08043FBC @ =gUnknown_03004340
- adds r0, r6, r0
- ldrb r0, [r0]
- adds r1, r5, 0
- adds r2, r4, 0
- bl sub_8043E50
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08043FBC: .4byte gUnknown_03004340
- thumb_func_end sub_8043F44
-
- thumb_func_start sub_8043FC0
-sub_8043FC0: @ 8043FC0
- push {r4-r7,lr}
- sub sp, 0x20
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- ldr r1, _08044000 @ =gUnknown_0820A81C
- mov r0, sp
- movs r2, 0x1E
- bl memcpy
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _08044010
- ldr r1, _08044004 @ =gSprites
- lsls r4, r5, 4
- adds r0, r4, r5
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- ldr r7, _08044008 @ =gUnknown_0820A80C
- cmp r0, 0
- bne _0804402E
- ldr r7, _0804400C @ =gUnknown_0820A804
- b _0804402E
- .align 2, 0
-_08044000: .4byte gUnknown_0820A81C
-_08044004: .4byte gSprites
-_08044008: .4byte gUnknown_0820A80C
-_0804400C: .4byte gUnknown_0820A804
-_08044010:
- ldr r1, _08044040 @ =gSprites
- lsls r4, r5, 4
- adds r0, r4, r5
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- ldr r7, _08044044 @ =gUnknown_0820A80C
- cmp r0, 0
- bne _0804402E
- ldr r7, _08044048 @ =gUnknown_0820A814
-_0804402E:
- mov r3, sp
- adds r3, 0x6
- cmp r6, 0x64
- bne _0804404C
- adds r0, r3, 0
- movs r1, 0x64
- movs r2, 0
- movs r3, 0x3
- b _0804408C
- .align 2, 0
-_08044040: .4byte gSprites
-_08044044: .4byte gUnknown_0820A80C
-_08044048: .4byte gUnknown_0820A814
-_0804404C:
- movs r1, 0xFC
- strb r1, [r3]
- mov r3, sp
- adds r3, 0x7
- movs r0, 0x11
- strb r0, [r3]
- adds r3, 0x1
- movs r0, 0x1
- strb r0, [r3]
- adds r3, 0x1
- strb r1, [r3]
- adds r3, 0x1
- movs r2, 0x14
- strb r2, [r3]
- adds r3, 0x1
- movs r0, 0x4
- strb r0, [r3]
- adds r3, 0x1
- movs r0, 0xF0
- strb r0, [r3]
- adds r3, 0x1
- strb r1, [r3]
- adds r3, 0x1
- strb r2, [r3]
- adds r3, 0x1
- movs r0, 0
- strb r0, [r3]
- adds r3, 0x1
- adds r0, r3, 0
- adds r1, r6, 0
- movs r2, 0
- movs r3, 0x2
-_0804408C:
- bl ConvertIntToDecimalStringN
- adds r3, r0, 0
- movs r0, 0xFC
- strb r0, [r3]
- adds r3, 0x1
- movs r0, 0x13
- strb r0, [r3]
- adds r3, 0x1
- movs r0, 0xF
- strb r0, [r3]
- movs r0, 0xFF
- strb r0, [r3, 0x1]
- movs r0, 0x80
- lsls r0, 18
- mov r1, sp
- bl sub_80034D4
- ldr r1, _080440E0 @ =gSprites
- adds r0, r4, r5
- lsls r0, 2
- adds r6, r0, r1
- ldr r5, _080440E4 @ =0x02000020
- movs r4, 0x2
-_080440BC:
- ldrh r0, [r6, 0x4]
- lsls r0, 22
- lsrs r0, 17
- ldm r7!, {r1}
- adds r1, r0
- adds r0, r5, 0
- ldr r2, _080440E8 @ =REG_BG0CNT
- bl CpuSet
- adds r5, 0x40
- subs r4, 0x1
- cmp r4, 0
- bne _080440BC
- add sp, 0x20
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080440E0: .4byte gSprites
-_080440E4: .4byte 0x02000020
-_080440E8: .4byte REG_BG0CNT
- thumb_func_end sub_8043FC0
-
- thumb_func_start sub_80440EC
-sub_80440EC: @ 80440EC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x14
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- ldr r1, _08044144 @ =gUnknown_0820A864
- mov r0, sp
- movs r2, 0x14
- bl memcpy
- ldr r1, _08044148 @ =gSprites
- lsls r0, r7, 4
- adds r0, r7
- lsls r0, 2
- adds r4, r0, r1
- movs r0, 0x3A
- ldrsh r5, [r4, r0]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08044136
- lsls r0, r5, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0804414C
-_08044136:
- lsls r1, r6, 16
- asrs r1, 16
- adds r0, r7, 0
- mov r2, r8
- bl sub_8044210
- b _080441F0
- .align 2, 0
-_08044144: .4byte gUnknown_0820A864
-_08044148: .4byte gSprites
-_0804414C:
- mov r5, sp
- adds r5, 0x6
- mov r0, r8
- cmp r0, 0
- bne _08044190
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- ldr r4, _08044188 @ =gUnknown_0820A848
- cmp r0, 0
- bne _0804416A
- ldr r4, _0804418C @ =gUnknown_0820A83C
-_0804416A:
- movs r0, 0x3
- mov r8, r0
- lsls r1, r6, 16
- asrs r1, 16
- adds r0, r5, 0
- movs r2, 0x13
- movs r3, 0x1
- bl sub_8003504
- adds r5, r0, 0
- movs r0, 0xBA
- strb r0, [r5]
- movs r0, 0xFF
- strb r0, [r5, 0x1]
- b _080441B6
- .align 2, 0
-_08044188: .4byte gUnknown_0820A848
-_0804418C: .4byte gUnknown_0820A83C
-_08044190:
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- ldr r4, _080441FC @ =gUnknown_0820A85C
- cmp r0, 0
- bne _080441A4
- ldr r4, _08044200 @ =gUnknown_0820A854
-_080441A4:
- movs r0, 0x2
- mov r8, r0
- lsls r1, r6, 16
- asrs r1, 16
- adds r0, r5, 0
- movs r2, 0xF
- movs r3, 0x1
- bl sub_8003504
-_080441B6:
- movs r0, 0x80
- lsls r0, 18
- mov r1, sp
- bl sub_80034D4
- mov r0, r8
- cmp r0, 0
- beq _080441F0
- ldr r1, _08044204 @ =gSprites
- lsls r0, r7, 4
- adds r0, r7
- lsls r0, 2
- adds r6, r0, r1
- adds r7, r4, 0
- ldr r5, _08044208 @ =0x02000020
- mov r4, r8
-_080441D6:
- ldrh r0, [r6, 0x4]
- lsls r0, 22
- lsrs r0, 17
- ldm r7!, {r1}
- adds r1, r0
- adds r0, r5, 0
- ldr r2, _0804420C @ =REG_BG0CNT
- bl CpuSet
- adds r5, 0x40
- subs r4, 0x1
- cmp r4, 0
- bne _080441D6
-_080441F0:
- add sp, 0x14
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080441FC: .4byte gUnknown_0820A85C
-_08044200: .4byte gUnknown_0820A854
-_08044204: .4byte gSprites
-_08044208: .4byte 0x02000020
-_0804420C: .4byte REG_BG0CNT
- thumb_func_end sub_80440EC
-
- thumb_func_start sub_8044210
-sub_8044210: @ 8044210
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 16
- lsrs r6, r1, 16
- mov r9, r6
- lsls r2, 24
- lsrs r7, r2, 24
- ldr r1, _0804427C @ =gUnknown_0820A89C
- mov r0, sp
- movs r2, 0x14
- bl memcpy
- ldr r1, _08044280 @ =gSprites
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- mov r8, r0
- movs r1, 0x3A
- ldrsh r4, [r0, r1]
- lsls r0, r4, 2
- ldr r1, _08044284 @ =0x02017800
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08044312
- mov r2, sp
- adds r2, 0x6
- cmp r7, 0
- bne _0804428C
- ldr r7, _08044288 @ =gUnknown_0820A87C
- movs r0, 0x6
- mov r10, r0
- lsls r1, r6, 16
- asrs r1, 16
- adds r0, r2, 0
- movs r2, 0x2B
- movs r3, 0x1
- bl sub_8003504
- adds r2, r0, 0
- movs r0, 0xBA
- strb r0, [r2]
- movs r0, 0xFF
- strb r0, [r2, 0x1]
- b _080442CE
- .align 2, 0
-_0804427C: .4byte gUnknown_0820A89C
-_08044280: .4byte gSprites
-_08044284: .4byte 0x02017800
-_08044288: .4byte gUnknown_0820A87C
-_0804428C:
- ldr r7, _08044324 @ =gUnknown_0820A894
- movs r1, 0x2
- mov r10, r1
- mov r0, r9
- lsls r1, r0, 16
- asrs r1, 16
- adds r0, r2, 0
- movs r2, 0xF
- movs r3, 0x1
- bl sub_8003504
- lsls r0, r4, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080442CE
- movs r0, 0x74
- bl sub_8043CDC
- mov r2, r8
- ldrh r1, [r2, 0x4]
- lsls r1, 22
- lsrs r1, 17
- movs r2, 0xD0
- lsls r2, 3
- adds r1, r2
- ldr r2, _08044328 @ =0x06010000
- adds r1, r2
- ldr r2, _0804432C @ =REG_BG0CNT
- bl CpuSet
-_080442CE:
- ldr r6, _08044330 @ =gSprites
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r0, r6
- movs r1, 0x38
- ldrsh r4, [r0, r1]
- movs r0, 0x80
- lsls r0, 18
- mov r1, sp
- bl sub_80034D4
- mov r2, r10
- cmp r2, 0
- beq _08044312
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r6, r0, r6
- ldr r5, _08044334 @ =0x02000020
- mov r4, r10
-_080442F8:
- ldrh r0, [r6, 0x4]
- lsls r0, 22
- lsrs r0, 17
- ldm r7!, {r1}
- adds r1, r0
- adds r0, r5, 0
- ldr r2, _0804432C @ =REG_BG0CNT
- bl CpuSet
- adds r5, 0x40
- subs r4, 0x1
- cmp r4, 0
- bne _080442F8
-_08044312:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08044324: .4byte gUnknown_0820A894
-_08044328: .4byte 0x06010000
-_0804432C: .4byte REG_BG0CNT
-_08044330: .4byte gSprites
-_08044334: .4byte 0x02000020
- thumb_func_end sub_8044210
-
- thumb_func_start sub_8044338
-sub_8044338: @ 8044338
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x14]
- ldr r1, _080443CC @ =gUnknown_0820A864
- mov r0, sp
- movs r2, 0x14
- bl memcpy
- ldr r1, _080443D0 @ =gSprites
- ldr r2, [sp, 0x14]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 7
- ldr r3, _080443D4 @ =0x02000520
- adds r6, r1, r3
- movs r0, 0x5
- mov r8, r0
- adds r0, r4, 0
- bl GetNature
- lsls r0, 24
- mov r4, sp
- adds r4, 0x6
- ldr r1, _080443D8 @ =gNatureNames
- lsrs r0, 22
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl StringCopy
- adds r0, r6, 0
- mov r1, sp
- bl sub_80034D4
- movs r7, 0x6
- movs r5, 0
- mov r1, sp
- adds r1, 0x9
- str r1, [sp, 0x1C]
-_080443AA:
- mov r2, sp
- adds r0, r2, r7
- ldrb r1, [r0]
- adds r0, r1, 0
- subs r0, 0x37
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bls _080443C8
- adds r0, r1, 0
- adds r0, 0x79
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bhi _080443DC
-_080443C8:
- movs r0, 0x2C
- b _080443FA
- .align 2, 0
-_080443CC: .4byte gUnknown_0820A864
-_080443D0: .4byte gSprites
-_080443D4: .4byte 0x02000520
-_080443D8: .4byte gNatureNames
-_080443DC:
- adds r0, r1, 0
- subs r0, 0x4B
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bls _080443F4
- adds r0, r1, 0
- adds r0, 0x65
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bhi _080443F8
-_080443F4:
- movs r0, 0x2D
- b _080443FA
-_080443F8:
- movs r0, 0x2B
-_080443FA:
- bl sub_8043CDC
- lsls r1, r5, 6
- adds r1, r6, r1
- ldr r2, _080444F8 @ =REG_BG0CNT
- bl CpuSet
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r7, 0x1
- cmp r5, r8
- bcc _080443AA
- movs r7, 0x1
- ldr r3, [sp, 0x14]
- lsls r3, 4
- str r3, [sp, 0x18]
- movs r0, 0x1
- add r0, r8
- mov r9, r0
- cmp r7, r9
- bge _08044486
- ldr r1, _080444FC @ =gSprites
- ldr r2, _080444F8 @ =REG_BG0CNT
- mov r10, r2
- ldr r2, [sp, 0x14]
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- mov r8, r0
-_08044436:
- mov r3, r8
- ldrh r0, [r3, 0x4]
- lsls r0, 22
- lsrs r0, 22
- adds r5, r7, 0
- cmp r7, 0
- bge _08044446
- adds r5, r7, 0x7
-_08044446:
- asrs r5, 3
- lsls r4, r5, 3
- subs r4, r7, r4
- adds r0, r4
- lsls r5, 6
- adds r0, r5
- lsls r0, 5
- ldr r2, _08044500 @ =0x06010000
- adds r1, r0, r2
- adds r0, r6, 0
- mov r2, r10
- bl CpuSet
- adds r6, 0x20
- mov r3, r8
- ldrh r0, [r3, 0x4]
- lsls r0, 22
- lsrs r0, 22
- adds r4, 0x8
- adds r0, r4
- adds r0, r5
- lsls r0, 5
- ldr r2, _08044500 @ =0x06010000
- adds r1, r0, r2
- adds r0, r6, 0
- mov r2, r10
- bl CpuSet
- adds r6, 0x20
- adds r7, 0x1
- cmp r7, r9
- blt _08044436
-_08044486:
- ldr r6, _080444FC @ =gSprites
- ldr r3, [sp, 0x18]
- ldr r1, [sp, 0x14]
- adds r0, r3, r1
- lsls r0, 2
- adds r0, r6
- ldrh r5, [r0, 0x38]
- lsls r5, 24
- lsrs r5, 24
- ldr r4, _08044504 @ =0x02000000
- ldr r2, _08044508 @ =0x00016089
- adds r0, r4, r2
- ldrb r1, [r0]
- mov r0, sp
- adds r0, 0x6
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r3, _0804450C @ =0x00016088
- adds r4, r3
- ldrb r1, [r4]
- ldr r0, [sp, 0x1C]
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- mov r1, sp
- movs r0, 0
- strb r0, [r1, 0x5]
- movs r0, 0xBA
- strb r0, [r1, 0x8]
- movs r0, 0x80
- lsls r0, 18
- bl sub_80034D4
- movs r7, 0
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r5, r0, r6
- ldr r4, _08044510 @ =0x02000020
-_080444DA:
- cmp r7, 0x1
- bgt _08044514
- ldrh r1, [r5, 0x4]
- lsls r1, 22
- lsrs r1, 22
- adds r0, r7, 0x2
- adds r1, r0
- lsls r1, 5
- ldr r0, _08044500 @ =0x06010000
- adds r1, r0
- adds r0, r4, 0
- ldr r2, _080444F8 @ =REG_BG0CNT
- bl CpuSet
- b _0804452A
- .align 2, 0
-_080444F8: .4byte REG_BG0CNT
-_080444FC: .4byte gSprites
-_08044500: .4byte 0x06010000
-_08044504: .4byte 0x02000000
-_08044508: .4byte 0x00016089
-_0804450C: .4byte 0x00016088
-_08044510: .4byte 0x02000020
-_08044514:
- ldrh r1, [r5, 0x4]
- lsls r1, 22
- lsrs r1, 22
- adds r1, r7, r1
- lsls r1, 5
- ldr r2, _08044544 @ =0x060100c0
- adds r1, r2
- adds r0, r4, 0
- ldr r2, _08044548 @ =REG_BG0CNT
- bl CpuSet
-_0804452A:
- adds r4, 0x40
- adds r7, 0x1
- cmp r7, 0x4
- ble _080444DA
- add sp, 0x20
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08044544: .4byte 0x060100c0
-_08044548: .4byte REG_BG0CNT
- thumb_func_end sub_8044338
-
- thumb_func_start sub_804454C
-sub_804454C: @ 804454C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r0, 0
- mov r8, r0
- ldr r0, _0804466C @ =gUnknown_02024A68
- ldrb r0, [r0]
- cmp r8, r0
- blt _08044566
- b _080447E4
-_08044566:
- ldr r1, _08044670 @ =gSprites
- mov r9, r1
- movs r2, 0x64
- mov r10, r2
- ldr r7, _08044674 @ =gUnknown_02024A6A
-_08044570:
- ldr r0, _08044678 @ =gUnknown_03004340
- mov r6, r8
- adds r5, r6, r0
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- mov r1, r9
- adds r1, 0x1C
- adds r0, r1
- ldr r1, [r0]
- ldr r0, _0804467C @ =SpriteCallbackDummy
- cmp r1, r0
- beq _0804458E
- b _080447D4
-_0804458E:
- lsls r0, r6, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl battle_side_get_owner
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080445A2
- b _080447D4
-_080445A2:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _080445BA
- adds r0, r4, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080445BA
- b _080447D4
-_080445BA:
- mov r0, r8
- lsls r3, r0, 2
- ldr r0, _08044680 @ =0x02017800
- adds r3, r0
- ldr r0, [r3]
- lsls r0, 27
- lsrs r0, 31
- movs r2, 0x1
- eors r2, r0
- lsls r2, 4
- ldrb r0, [r3]
- movs r6, 0x11
- negs r6, r6
- adds r1, r6, 0
- ands r0, r1
- orrs r0, r2
- strb r0, [r3]
- ldr r0, [r3]
- lsls r0, 27
- lsrs r6, r0, 31
- adds r0, r4, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080446DC
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _080445FA
- b _080447D4
-_080445FA:
- ldr r0, _08044684 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0
- beq _0804460C
- b _080447D4
-_0804460C:
- cmp r6, 0x1
- bne _08044694
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrh r0, [r0, 0x38]
- lsls r0, 24
- lsrs r1, r0, 24
- str r2, [sp]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrh r1, [r0, 0x4]
- lsls r1, 22
- lsrs r1, 17
- ldr r0, _08044688 @ =0x06010000
- adds r1, r0
- mov r0, sp
- ldr r2, _0804468C @ =0x05000040
- bl CpuSet
- ldrb r4, [r5]
- ldrh r0, [r7]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- ldr r2, _08044690 @ =gPlayerParty
- adds r0, r2
- movs r1, 0x39
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- asrs r1, 16
- adds r0, r4, 0
- movs r2, 0
- bl sub_8044210
- ldrb r4, [r5]
- ldrh r0, [r7]
- mov r6, r10
- muls r6, r0
- adds r0, r6, 0
- ldr r1, _08044690 @ =gPlayerParty
- b _08044766
- .align 2, 0
-_0804466C: .4byte gUnknown_02024A68
-_08044670: .4byte gSprites
-_08044674: .4byte gUnknown_02024A6A
-_08044678: .4byte gUnknown_03004340
-_0804467C: .4byte SpriteCallbackDummy
-_08044680: .4byte 0x02017800
-_08044684: .4byte gBattleTypeFlags
-_08044688: .4byte 0x06010000
-_0804468C: .4byte 0x05000040
-_08044690: .4byte gPlayerParty
-_08044694:
- ldrb r0, [r5]
- bl draw_status_ailment_maybe
- ldrb r0, [r5]
- ldrh r1, [r7]
- mov r2, r10
- muls r2, r1
- adds r1, r2, 0
- ldr r6, _080446D0 @ =gPlayerParty
- adds r1, r6
- movs r2, 0x5
- bl sub_8045A5C
- movs r0, 0x75
- bl sub_8043CDC
- ldrb r2, [r5]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r9
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 17
- ldr r2, _080446D4 @ =0x06010680
- adds r1, r2
- ldr r2, _080446D8 @ =REG_BG0CNT
- bl CpuSet
- b _080447BE
- .align 2, 0
-_080446D0: .4byte gPlayerParty
-_080446D4: .4byte 0x06010680
-_080446D8: .4byte REG_BG0CNT
-_080446DC:
- cmp r6, 0x1
- bne _0804478C
- ldr r0, _08044704 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0
- beq _0804470C
- ldrb r0, [r5]
- ldrh r1, [r7]
- mov r6, r10
- muls r6, r1
- adds r1, r6, 0
- ldr r2, _08044708 @ =gEnemyParty
- adds r1, r2
- bl sub_8044338
- b _080447BE
- .align 2, 0
-_08044704: .4byte gBattleTypeFlags
-_08044708: .4byte gEnemyParty
-_0804470C:
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrh r0, [r0, 0x38]
- lsls r0, 24
- lsrs r1, r0, 24
- str r2, [sp]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrh r1, [r0, 0x4]
- lsls r1, 22
- lsrs r1, 17
- ldr r6, _08044780 @ =0x06010000
- adds r1, r6
- mov r0, sp
- ldr r2, _08044784 @ =0x05000040
- bl CpuSet
- ldrb r4, [r5]
- ldrh r0, [r7]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- ldr r2, _08044788 @ =gEnemyParty
- adds r0, r2
- movs r1, 0x39
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- asrs r1, 16
- adds r0, r4, 0
- movs r2, 0
- bl sub_8044210
- ldrb r4, [r5]
- ldrh r0, [r7]
- mov r6, r10
- muls r6, r0
- adds r0, r6, 0
- ldr r1, _08044788 @ =gEnemyParty
-_08044766:
- adds r0, r1
- movs r1, 0x3A
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- asrs r1, 16
- adds r0, r4, 0
- movs r2, 0x1
- bl sub_8044210
- b _080447BE
- .align 2, 0
-_08044780: .4byte 0x06010000
-_08044784: .4byte 0x05000040
-_08044788: .4byte gEnemyParty
-_0804478C:
- ldrb r0, [r5]
- bl draw_status_ailment_maybe
- ldrb r0, [r5]
- ldrh r1, [r7]
- movs r6, 0x64
- muls r1, r6
- ldr r4, _080447F4 @ =gEnemyParty
- adds r1, r4
- movs r2, 0x5
- bl sub_8045A5C
- ldr r0, _080447F8 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080447BE
- ldrb r0, [r5]
- ldrh r1, [r7]
- muls r1, r6
- adds r1, r4
- movs r2, 0x4
- bl sub_8045A5C
-_080447BE:
- ldr r0, _080447FC @ =gUnknown_03004340
- add r0, r8
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrh r1, [r0, 0x3C]
- movs r2, 0x1
- eors r1, r2
- strh r1, [r0, 0x3C]
-_080447D4:
- adds r7, 0x2
- movs r2, 0x1
- add r8, r2
- ldr r0, _08044800 @ =gUnknown_02024A68
- ldrb r0, [r0]
- cmp r8, r0
- bge _080447E4
- b _08044570
-_080447E4:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080447F4: .4byte gEnemyParty
-_080447F8: .4byte gBattleTypeFlags
-_080447FC: .4byte gUnknown_03004340
-_08044800: .4byte gUnknown_02024A68
- thumb_func_end sub_804454C
-
- thumb_func_start sub_8044804
-sub_8044804: @ 8044804
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x28
- str r1, [sp, 0xC]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x8]
- lsls r2, 24
- lsrs r2, 24
- adds r4, r2, 0
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x10]
- cmp r4, 0
- beq _08044834
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _08044878
-_08044834:
- ldr r0, [sp, 0x8]
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _08044854
- movs r7, 0
- movs r1, 0x88
- movs r2, 0x60
- movs r0, 0x64
- mov r8, r0
- ldr r5, _08044850 @ =0x0000fffb
- b _08044884
- .align 2, 0
-_08044850: .4byte 0x0000fffb
-_08044854:
- movs r7, 0x1
- cmp r4, 0
- beq _08044864
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _0804486A
-_08044864:
- movs r1, 0x68
- movs r2, 0x28
- b _0804486E
-_0804486A:
- movs r1, 0x68
- movs r2, 0x10
-_0804486E:
- ldr r3, _08044874 @ =0x0000ff9c
- mov r8, r3
- b _08044882
- .align 2, 0
-_08044874: .4byte 0x0000ff9c
-_08044878:
- movs r7, 0x1
- movs r1, 0x68
- movs r2, 0x28
- ldr r5, _08044930 @ =0x0000ff9c
- mov r8, r5
-_08044882:
- movs r5, 0x5
-_08044884:
- movs r6, 0
- str r6, [sp, 0x14]
- lsls r4, r7, 3
- ldr r0, _08044934 @ =gUnknown_0820A754
- mov r10, r0
- lsls r3, r7, 1
- mov r9, r3
- lsls r1, 16
- str r1, [sp, 0x20]
- lsls r2, 16
- str r2, [sp, 0x24]
- ldr r2, _08044938 @ =0x0000ffff
- ldr r1, [sp, 0xC]
- movs r6, 0x5
-_080448A0:
- ldrh r0, [r1]
- cmp r0, r2
- beq _080448B4
- ldr r3, [sp, 0x14]
- lsls r0, r3, 24
- movs r3, 0x80
- lsls r3, 17
- adds r0, r3
- lsrs r0, 24
- str r0, [sp, 0x14]
-_080448B4:
- adds r1, 0x8
- subs r6, 0x1
- cmp r6, 0
- bge _080448A0
- mov r6, r10
- adds r0, r4, r6
- bl LoadCompressedObjectPic
- ldr r0, _0804493C @ =gUnknown_0820A784
- adds r0, r4, r0
- bl LoadSpriteSheet
- ldr r0, _08044940 @ =gUnknown_0820A764
- adds r0, r4, r0
- bl LoadSpritePalette
- ldr r0, _08044944 @ =gUnknown_0820A774
- adds r0, r4, r0
- bl LoadSpritePalette
- mov r1, r9
- adds r0, r1, r7
- lsls r0, 3
- ldr r1, _08044948 @ =gSpriteTemplate_820A7A4
- adds r0, r1
- ldr r2, [sp, 0x20]
- asrs r1, r2, 16
- ldr r3, [sp, 0x24]
- asrs r2, r3, 16
- movs r3, 0xA
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x18]
- lsls r0, 4
- ldr r6, [sp, 0x18]
- adds r0, r6
- lsls r0, 2
- ldr r1, _0804494C @ =gSprites
- adds r4, r0, r1
- ldr r1, _08044950 @ =gSubspriteTables_820A6E4
- adds r0, r4, 0
- bl SetSubspriteTables
- mov r0, r8
- strh r0, [r4, 0x24]
- strh r5, [r4, 0x2E]
- cmp r7, 0
- beq _08044954
- ldrh r0, [r4, 0x20]
- subs r0, 0x60
- strh r0, [r4, 0x20]
- ldrb r1, [r4, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- movs r1, 0x10
- orrs r0, r1
- strb r0, [r4, 0x3]
- b _0804495A
- .align 2, 0
-_08044930: .4byte 0x0000ff9c
-_08044934: .4byte gUnknown_0820A754
-_08044938: .4byte 0x0000ffff
-_0804493C: .4byte gUnknown_0820A784
-_08044940: .4byte gUnknown_0820A764
-_08044944: .4byte gUnknown_0820A774
-_08044948: .4byte gSpriteTemplate_820A7A4
-_0804494C: .4byte gSprites
-_08044950: .4byte gSubspriteTables_820A6E4
-_08044954:
- ldrh r0, [r4, 0x20]
- adds r0, 0x60
- strh r0, [r4, 0x20]
-_0804495A:
- movs r6, 0
- ldr r1, _08044A04 @ =gSprites
- mov r10, r1
- mov r4, sp
- mov r2, r9
- adds r0, r2, r7
- lsls r0, 3
- str r0, [sp, 0x1C]
- movs r3, 0xA
- mov r9, r3
- mov r8, r6
-_08044970:
- ldr r0, _08044A08 @ =gSpriteTemplate_820A7D4
- ldr r5, [sp, 0x24]
- ldr r1, _08044A0C @ =0xfffc0000
- adds r2, r5, r1
- ldr r3, [sp, 0x1C]
- adds r0, r3, r0
- ldr r5, [sp, 0x20]
- asrs r1, r5, 16
- asrs r2, 16
- movs r3, 0x9
- bl CreateSpriteAtEnd
- strb r0, [r4]
- ldr r0, [sp, 0x10]
- cmp r0, 0
- bne _080449A0
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r2, _08044A10 @ =gSprites + 0x1C
- adds r1, r2
- ldr r0, _08044A14 @ =sub_8045180
- str r0, [r1]
-_080449A0:
- ldr r5, _08044A04 @ =gSprites
- cmp r7, 0
- bne _080449BE
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r10
- strh r7, [r0, 0x24]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r10
- strh r7, [r0, 0x26]
-_080449BE:
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0
- mov r3, sp
- ldrh r3, [r3, 0x18]
- strh r3, [r0, 0x2E]
- cmp r7, 0
- bne _08044A18
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r0, [r1, 0x20]
- adds r0, 0x18
- add r0, r8
- strh r0, [r1, 0x20]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r9
- strh r1, [r0, 0x30]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x78
- b _08044A56
- .align 2, 0
-_08044A04: .4byte gSprites
-_08044A08: .4byte gSpriteTemplate_820A7D4
-_08044A0C: .4byte 0xfffc0000
-_08044A10: .4byte gSprites + 0x1C
-_08044A14: .4byte sub_8045180
-_08044A18:
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r5
- ldrh r3, [r2, 0x20]
- subs r3, 0x18
- movs r1, 0x5
- subs r1, r6
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- subs r3, r0
- strh r3, [r2, 0x20]
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r5
- movs r1, 0x6
- subs r1, r6
- lsls r0, r1, 3
- subs r0, r1
- adds r0, 0xA
- strh r0, [r2, 0x30]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _08044AC4 @ =0x0000ff88
-_08044A56:
- strh r1, [r0, 0x24]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r7, [r0, 0x32]
- adds r4, 0x1
- movs r2, 0x7
- add r9, r2
- movs r3, 0xA
- add r8, r3
- adds r6, 0x1
- cmp r6, 0x5
- bgt _08044A76
- b _08044970
-_08044A76:
- ldr r0, [sp, 0x8]
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _08044B5E
- movs r6, 0
- ldr r5, _08044AC8 @ =gBattleTypeFlags
- mov r10, r5
- ldr r0, _08044ACC @ =0x0000ffff
- mov r9, r0
- ldr r7, _08044AD0 @ =gSprites
- ldr r1, _08044AD4 @ =0x000003ff
- mov r12, r1
- ldr r2, _08044AD8 @ =0xfffffc00
- mov r8, r2
- mov r4, sp
- ldr r5, [sp, 0xC]
-_08044A9A:
- mov r3, r10
- ldrh r1, [r3]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08044ADC
- ldrh r0, [r5]
- cmp r0, r9
- beq _08044AE6
- cmp r0, 0
- bne _08044B2E
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x3
- b _08044B46
- .align 2, 0
-_08044AC4: .4byte 0x0000ff88
-_08044AC8: .4byte gBattleTypeFlags
-_08044ACC: .4byte 0x0000ffff
-_08044AD0: .4byte gSprites
-_08044AD4: .4byte 0x000003ff
-_08044AD8: .4byte 0xfffffc00
-_08044ADC:
- ldr r1, [sp, 0x14]
- lsls r0, r1, 24
- asrs r0, 24
- cmp r6, r0
- blt _08044B14
-_08044AE6:
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x1
- mov r0, r12
- ands r1, r0
- mov r0, r8
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x4]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- movs r1, 0x1
- strh r1, [r0, 0x3C]
- b _08044B52
-_08044B14:
- ldrh r0, [r5]
- cmp r0, 0
- bne _08044B2E
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x3
- b _08044B46
-_08044B2E:
- ldr r0, [r5, 0x4]
- cmp r0, 0
- beq _08044B52
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x2
-_08044B46:
- mov r0, r12
- ands r1, r0
- mov r0, r8
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x4]
-_08044B52:
- adds r4, 0x1
- adds r5, 0x8
- adds r6, 0x1
- cmp r6, 0x5
- ble _08044A9A
- b _08044C38
-_08044B5E:
- movs r6, 0
- ldr r1, _08044BA4 @ =gBattleTypeFlags
- mov r10, r1
- ldr r2, _08044BA8 @ =0x0000ffff
- mov r9, r2
- ldr r7, _08044BAC @ =gSprites
- ldr r3, _08044BB0 @ =0x000003ff
- mov r12, r3
- ldr r5, _08044BB4 @ =0xfffffc00
- mov r8, r5
- ldr r5, [sp, 0xC]
- mov r4, sp
- adds r4, 0x5
-_08044B78:
- mov r0, r10
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08044BB8
- ldrh r0, [r5]
- cmp r0, r9
- beq _08044BC2
- cmp r0, 0
- bne _08044C0A
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x3
- b _08044C22
- .align 2, 0
-_08044BA4: .4byte gBattleTypeFlags
-_08044BA8: .4byte 0x0000ffff
-_08044BAC: .4byte gSprites
-_08044BB0: .4byte 0x000003ff
-_08044BB4: .4byte 0xfffffc00
-_08044BB8:
- ldr r1, [sp, 0x14]
- lsls r0, r1, 24
- asrs r0, 24
- cmp r6, r0
- blt _08044BF0
-_08044BC2:
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x1
- mov r0, r12
- ands r1, r0
- mov r0, r8
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x4]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- movs r1, 0x1
- strh r1, [r0, 0x3C]
- b _08044C2E
-_08044BF0:
- ldrh r0, [r5]
- cmp r0, 0
- bne _08044C0A
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x3
- b _08044C22
-_08044C0A:
- ldr r0, [r5, 0x4]
- cmp r0, 0
- beq _08044C2E
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x2
-_08044C22:
- mov r0, r12
- ands r1, r0
- mov r0, r8
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x4]
-_08044C2E:
- subs r4, 0x1
- adds r5, 0x8
- adds r6, 0x1
- cmp r6, 0x5
- ble _08044B78
-_08044C38:
- ldr r0, _08044C98 @ =TaskDummy
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r2, _08044C9C @ =gTasks
- lsls r3, r4, 2
- adds r1, r3, r4
- lsls r1, 3
- adds r0, r1, r2
- mov r5, sp
- ldrh r5, [r5, 0x8]
- strh r5, [r0, 0x8]
- mov r6, sp
- ldrh r6, [r6, 0x18]
- strh r6, [r0, 0xA]
- movs r6, 0
- adds r0, r2, 0
- adds r0, 0xE
- adds r1, r0
-_08044C62:
- mov r5, sp
- adds r0, r5, r6
- ldrb r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- adds r6, 0x1
- cmp r6, 0x5
- ble _08044C62
- adds r0, r3, r4
- lsls r0, 3
- adds r0, r2
- ldrh r6, [r5, 0x10]
- strh r6, [r0, 0x1C]
- movs r0, 0x72
- movs r1, 0
- bl PlaySE12WithPanning
- adds r0, r4, 0
- add sp, 0x28
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08044C98: .4byte TaskDummy
-_08044C9C: .4byte gTasks
- thumb_func_end sub_8044804
-
- thumb_func_start sub_8044CA0
-sub_8044CA0: @ 8044CA0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r2, _08044DB4 @ =gTasks
- lsls r3, r0, 2
- adds r1, r3, r0
- lsls r1, 3
- adds r0, r1, r2
- ldrb r4, [r0, 0x1C]
- mov r9, r4
- ldrb r4, [r0, 0xA]
- mov r10, r4
- ldrb r0, [r0, 0x8]
- str r0, [sp, 0x8]
- movs r5, 0
- adds r7, r2, 0
- ldr r0, _08044DB8 @ =gSprites
- mov r12, r0
- str r3, [sp, 0xC]
- adds r0, r7, 0
- adds r0, 0xE
- adds r2, r1, r0
-_08044CD8:
- mov r4, sp
- adds r1, r4, r5
- ldrh r0, [r2]
- strb r0, [r1]
- adds r2, 0x2
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044CD8
- ldr r1, _08044DBC @ =REG_BLDCNT
- movs r2, 0xFD
- lsls r2, 6
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- movs r0, 0x10
- strh r0, [r1]
- ldr r0, [sp, 0xC]
- add r0, r8
- lsls r0, 3
- adds r0, r7
- movs r1, 0x10
- strh r1, [r0, 0x26]
- movs r5, 0
- mov r4, r10
- lsls r4, 4
- str r4, [sp, 0x10]
- ldr r4, _08044DB8 @ =gSprites
- movs r6, 0xD
- negs r6, r6
- movs r3, 0x4
-_08044D14:
- mov r1, sp
- adds r0, r1, r5
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1, 0x1]
- adds r0, r6, 0
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x1]
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044D14
- ldr r2, [sp, 0x10]
- add r2, r10
- lsls r2, 2
- add r2, r12
- ldrb r1, [r2, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x1]
- mov r2, r9
- cmp r2, 0
- bne _08044D50
- b _08044E54
-_08044D50:
- movs r5, 0
- mov r6, r12
- mov r9, r5
- adds r3, r6, 0
- adds r3, 0x1C
- mov r4, sp
- movs r7, 0
-_08044D5E:
- ldr r0, [sp, 0x8]
- str r3, [sp, 0x14]
- bl battle_side_get_owner
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r3, [sp, 0x14]
- cmp r2, 0
- beq _08044DC4
- movs r0, 0x5
- subs r0, r5
- mov r1, sp
- adds r2, r1, r0
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r7, [r0, 0x30]
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- mov r1, r9
- strh r1, [r0, 0x34]
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- mov r1, r9
- strh r1, [r0, 0x36]
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldr r1, _08044DC0 @ =sub_8045110
- str r1, [r0]
- ldr r2, _08044DB8 @ =gSprites
- mov r12, r2
- b _08044DFA
- .align 2, 0
-_08044DB4: .4byte gTasks
-_08044DB8: .4byte gSprites
-_08044DBC: .4byte REG_BLDCNT
-_08044DC0: .4byte sub_8045110
-_08044DC4:
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r7, [r0, 0x30]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r2, [r0, 0x34]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r2, [r0, 0x36]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldr r1, _08044E3C @ =sub_8045110
- str r1, [r0]
- ldr r0, _08044E40 @ =gSprites
- mov r12, r0
-_08044DFA:
- adds r4, 0x1
- adds r7, 0x7
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044D5E
- ldr r3, [sp, 0x10]
- add r3, r10
- lsls r3, 2
- mov r1, r12
- adds r0, r3, r1
- movs r2, 0x2E
- ldrsh r1, [r0, r2]
- lsrs r2, r1, 31
- adds r1, r2
- asrs r1, 1
- movs r2, 0
- strh r1, [r0, 0x2E]
- strh r2, [r0, 0x30]
- mov r1, r12
- adds r1, 0x1C
- adds r3, r1
- ldr r1, _08044E44 @ =sub_8045048
- str r1, [r3]
- ldr r1, _08044E48 @ =gSubspriteTables_820A6EC
- bl SetSubspriteTables
- ldr r1, _08044E4C @ =gTasks
- ldr r0, [sp, 0xC]
- add r0, r8
- lsls r0, 3
- adds r0, r1
- ldr r1, _08044E50 @ =sub_8044E74
- b _08044E5E
- .align 2, 0
-_08044E3C: .4byte sub_8045110
-_08044E40: .4byte gSprites
-_08044E44: .4byte sub_8045048
-_08044E48: .4byte gSubspriteTables_820A6EC
-_08044E4C: .4byte gTasks
-_08044E50: .4byte sub_8044E74
-_08044E54:
- ldr r0, [sp, 0xC]
- add r0, r8
- lsls r0, 3
- adds r0, r7
- ldr r1, _08044E70 @ =sub_8044F70
-_08044E5E:
- str r1, [r0]
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08044E70: .4byte sub_8044F70
- thumb_func_end sub_8044CA0
-
- thumb_func_start sub_8044E74
-sub_8044E74: @ 8044E74
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08044EC0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r3, r1, r2
- ldrh r0, [r3, 0x1E]
- adds r1, r0, 0x1
- strh r1, [r3, 0x1E]
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08044EAE
- ldrh r0, [r3, 0x26]
- subs r2, r0, 0x1
- strh r2, [r3, 0x26]
- lsls r0, r2, 16
- cmp r0, 0
- blt _08044EBA
- ldr r1, _08044EC4 @ =REG_BLDALPHA
- movs r0, 0x10
- subs r0, r2
- lsls r0, 8
- orrs r2, r0
- strh r2, [r1]
-_08044EAE:
- movs r1, 0x26
- ldrsh r0, [r3, r1]
- cmp r0, 0
- bne _08044EBA
- ldr r0, _08044EC8 @ =sub_8044ECC
- str r0, [r3]
-_08044EBA:
- pop {r0}
- bx r0
- .align 2, 0
-_08044EC0: .4byte gTasks
-_08044EC4: .4byte REG_BLDALPHA
-_08044EC8: .4byte sub_8044ECC
- thumb_func_end sub_8044E74
-
- thumb_func_start sub_8044ECC
-sub_8044ECC: @ 8044ECC
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r6, _08044F44 @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r4, r0, 3
- adds r1, r4, r6
- ldrh r0, [r1, 0x26]
- subs r0, 0x1
- movs r5, 0
- strh r0, [r1, 0x26]
- lsls r0, 16
- asrs r2, r0, 16
- movs r0, 0x1
- negs r0, r0
- cmp r2, r0
- bne _08044F4C
- ldrb r3, [r1, 0xA]
- adds r0, r6, 0
- adds r0, 0xE
- adds r2, r4, r0
-_08044EFA:
- mov r0, sp
- adds r1, r0, r5
- ldrh r0, [r2]
- strb r0, [r1]
- adds r2, 0x2
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044EFA
- lsls r0, r3, 4
- adds r0, r3
- lsls r0, 2
- ldr r4, _08044F48 @ =gSprites
- adds r0, r4
- bl DestroySpriteAndFreeResources
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySpriteAndFreeResources
- movs r5, 0x1
-_08044F2A:
- mov r1, sp
- adds r0, r1, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044F2A
- b _08044F62
- .align 2, 0
-_08044F44: .4byte gTasks
-_08044F48: .4byte gSprites
-_08044F4C:
- movs r0, 0x3
- negs r0, r0
- cmp r2, r0
- bne _08044F62
- ldr r0, _08044F6C @ =REG_BLDCNT
- strh r5, [r0]
- adds r0, 0x2
- strh r5, [r0]
- adds r0, r3, 0
- bl DestroyTask
-_08044F62:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08044F6C: .4byte REG_BLDCNT
- thumb_func_end sub_8044ECC
-
- thumb_func_start sub_8044F70
-sub_8044F70: @ 8044F70
- push {r4-r7,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- ldr r7, _08044FA4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r6, r0, 3
- adds r3, r6, r7
- ldrh r0, [r3, 0x26]
- subs r2, r0, 0x1
- movs r5, 0
- strh r2, [r3, 0x26]
- lsls r0, r2, 16
- asrs r1, r0, 16
- cmp r1, 0
- blt _08044FAC
- ldr r1, _08044FA8 @ =REG_BLDALPHA
- movs r0, 0x10
- subs r0, r2
- lsls r0, 8
- orrs r2, r0
- strh r2, [r1]
- b _08045022
- .align 2, 0
-_08044FA4: .4byte gTasks
-_08044FA8: .4byte REG_BLDALPHA
-_08044FAC:
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0804500C
- ldrb r3, [r3, 0xA]
- movs r5, 0
- adds r0, r7, 0
- adds r0, 0xE
- adds r2, r6, r0
-_08044FBE:
- mov r0, sp
- adds r1, r0, r5
- ldrh r0, [r2]
- strb r0, [r1]
- adds r2, 0x2
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044FBE
- lsls r0, r3, 4
- adds r0, r3
- lsls r0, 2
- ldr r4, _08045008 @ =gSprites
- adds r0, r4
- bl DestroySpriteAndFreeResources
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySpriteAndFreeResources
- movs r5, 0x1
-_08044FEE:
- mov r1, sp
- adds r0, r1, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044FEE
- b _08045022
- .align 2, 0
-_08045008: .4byte gSprites
-_0804500C:
- movs r0, 0x3
- negs r0, r0
- cmp r1, r0
- bne _08045022
- ldr r0, _0804502C @ =REG_BLDCNT
- strh r5, [r0]
- adds r0, 0x2
- strh r5, [r0]
- adds r0, r4, 0
- bl DestroyTask
-_08045022:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804502C: .4byte REG_BLDCNT
- thumb_func_end sub_8044F70
-
- thumb_func_start sub_8045030
-sub_8045030: @ 8045030
- push {lr}
- adds r1, r0, 0
- ldrh r2, [r1, 0x24]
- movs r3, 0x24
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _08045044
- ldrh r0, [r1, 0x2E]
- adds r0, r2, r0
- strh r0, [r1, 0x24]
-_08045044:
- pop {r0}
- bx r0
- thumb_func_end sub_8045030
-
- thumb_func_start sub_8045048
-sub_8045048: @ 8045048
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x30]
- adds r1, r0, 0
- adds r1, 0x20
- strh r1, [r2, 0x30]
- movs r3, 0x2E
- ldrsh r0, [r2, r3]
- cmp r0, 0
- ble _08045066
- lsls r0, r1, 16
- asrs r0, 20
- ldrh r1, [r2, 0x24]
- adds r0, r1
- b _0804506E
-_08045066:
- lsls r1, 16
- asrs r1, 20
- ldrh r0, [r2, 0x24]
- subs r0, r1
-_0804506E:
- strh r0, [r2, 0x24]
- ldrh r1, [r2, 0x30]
- movs r0, 0xF
- ands r0, r1
- strh r0, [r2, 0x30]
- pop {r0}
- bx r0
- thumb_func_end sub_8045048
-
- thumb_func_start sub_804507C
-sub_804507C: @ 804507C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x30]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- cmp r0, 0
- ble _08045090
- subs r0, r1, 0x1
- strh r0, [r4, 0x30]
- b _08045106
-_08045090:
- ldrh r0, [r4, 0x32]
- lsls r0, 24
- lsrs r3, r0, 24
- ldrh r2, [r4, 0x34]
- adds r0, r2, 0
- adds r0, 0x38
- lsls r1, r0, 16
- lsrs r2, r1, 16
- ldr r0, _080450C0 @ =0x0000fff0
- ands r2, r0
- strh r2, [r4, 0x34]
- cmp r3, 0
- beq _080450C4
- lsrs r0, r1, 20
- ldrh r1, [r4, 0x24]
- adds r0, r1
- strh r0, [r4, 0x24]
- lsls r0, 16
- cmp r0, 0
- ble _080450D4
- movs r0, 0
- strh r0, [r4, 0x24]
- b _080450D4
- .align 2, 0
-_080450C0: .4byte 0x0000fff0
-_080450C4:
- lsrs r1, 20
- ldrh r0, [r4, 0x24]
- subs r0, r1
- strh r0, [r4, 0x24]
- lsls r0, 16
- cmp r0, 0
- bge _080450D4
- strh r3, [r4, 0x24]
-_080450D4:
- movs r2, 0x24
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _08045106
- movs r1, 0x3F
- cmp r3, 0
- beq _080450E4
- movs r1, 0xC0
-_080450E4:
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080450F8
- lsls r1, 24
- asrs r1, 24
- movs r0, 0x74
- bl PlaySE2WithPanning
- b _08045102
-_080450F8:
- lsls r1, 24
- asrs r1, 24
- movs r0, 0x73
- bl PlaySE1WithPanning
-_08045102:
- ldr r0, _0804510C @ =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_08045106:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0804510C: .4byte SpriteCallbackDummy
- thumb_func_end sub_804507C
-
- thumb_func_start sub_8045110
-sub_8045110: @ 8045110
- push {r4,lr}
- adds r3, r0, 0
- ldrh r1, [r3, 0x30]
- movs r2, 0x30
- ldrsh r0, [r3, r2]
- cmp r0, 0
- ble _08045124
- subs r0, r1, 0x1
- strh r0, [r3, 0x30]
- b _08045174
-_08045124:
- ldrh r0, [r3, 0x32]
- lsls r0, 24
- ldrh r2, [r3, 0x34]
- adds r1, r2, 0
- adds r1, 0x38
- lsls r4, r1, 16
- lsrs r2, r4, 16
- ldr r1, _08045144 @ =0x0000fff0
- ands r2, r1
- strh r2, [r3, 0x34]
- cmp r0, 0
- beq _08045148
- lsrs r0, r4, 20
- ldrh r1, [r3, 0x24]
- adds r0, r1
- b _0804514E
- .align 2, 0
-_08045144: .4byte 0x0000fff0
-_08045148:
- lsrs r1, r4, 20
- ldrh r0, [r3, 0x24]
- subs r0, r1
-_0804514E:
- strh r0, [r3, 0x24]
- movs r2, 0x24
- ldrsh r0, [r3, r2]
- movs r2, 0x20
- ldrsh r1, [r3, r2]
- adds r0, r1
- adds r0, 0x8
- movs r1, 0x80
- lsls r1, 1
- cmp r0, r1
- bls _08045174
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0804517C @ =SpriteCallbackDummy
- str r0, [r3, 0x1C]
-_08045174:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0804517C: .4byte SpriteCallbackDummy
- thumb_func_end sub_8045110
-
- thumb_func_start sub_8045180
-sub_8045180: @ 8045180
- ldrh r2, [r0, 0x2E]
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _0804519C @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r3
- ldrh r2, [r1, 0x24]
- strh r2, [r0, 0x24]
- ldrh r1, [r1, 0x26]
- strh r1, [r0, 0x26]
- bx lr
- .align 2, 0
-_0804519C: .4byte gSprites
- thumb_func_end sub_8045180
-
- thumb_func_start sub_80451A0
-sub_80451A0: @ 80451A0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- adds r7, r1, 0
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r4, _08045238 @ =gUnknown_020238CC
- ldr r1, _0804523C @ =gUnknown_0820A8B0
- adds r0, r4, 0
- bl StringCopy
- adds r0, r7, 0
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, sp
- bl StringGetEnd10
- adds r4, 0x3
- adds r0, r4, 0
- mov r1, sp
- bl StringCopy
- adds r5, r0, 0
- movs r1, 0xFC
- strb r1, [r5]
- movs r0, 0x3
- strb r0, [r5, 0x1]
- movs r0, 0x2
- strb r0, [r5, 0x2]
- strb r1, [r5, 0x3]
- movs r0, 0x1
- strb r0, [r5, 0x4]
- adds r5, 0x5
- adds r0, r7, 0
- bl GetMonGender
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r7, 0
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r7, 0
- movs r1, 0x3
- bl GetMonData
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- mov r1, sp
- bl sub_8040D3C
- cmp r0, 0
- beq _08045222
- movs r6, 0x64
-_08045222:
- cmp r6, 0
- beq _08045240
- cmp r6, 0xFE
- beq _08045248
- movs r0, 0xB
- strb r0, [r5]
- movs r0, 0xFF
- strb r0, [r5, 0x1]
- adds r5, 0x1
- b _08045256
- .align 2, 0
-_08045238: .4byte gUnknown_020238CC
-_0804523C: .4byte gUnknown_0820A8B0
-_08045240:
- movs r0, 0xB
- strb r0, [r5]
- movs r0, 0xB5
- b _0804524E
-_08045248:
- movs r0, 0xA
- strb r0, [r5]
- movs r0, 0xB6
-_0804524E:
- strb r0, [r5, 0x1]
- movs r0, 0xFF
- strb r0, [r5, 0x2]
- adds r5, 0x2
-_08045256:
- movs r0, 0xFC
- strb r0, [r5]
- movs r0, 0x13
- strb r0, [r5, 0x1]
- movs r0, 0x37
- strb r0, [r5, 0x2]
- movs r0, 0xFF
- strb r0, [r5, 0x3]
- ldr r1, _080452D8 @ =gSprites
- mov r0, r9
- lsls r4, r0, 4
- adds r0, r4, r0
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 7
- ldr r2, _080452DC @ =0x02000520
- adds r5, r1, r2
- ldr r0, _080452E0 @ =gUnknown_020238CC
- mov r8, r0
- adds r0, r5, 0
- mov r1, r8
- bl sub_80034D4
- movs r6, 0
- movs r1, 0x7
- mov r10, r1
- adds r0, r7, 0
- movs r1, 0x3
- bl GetMonData
- str r4, [sp, 0xC]
- cmp r0, 0x1
- bne _08045338
- adds r0, r7, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _08045338
- mov r4, r8
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- beq _08045338
- adds r7, r5, 0
-_080452C2:
- cmp r1, 0xFC
- bne _080452E4
- ldrb r0, [r4, 0x1]
- bl GetExtCtrlCodeLength
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1
- adds r4, r0
- b _08045330
- .align 2, 0
-_080452D8: .4byte gSprites
-_080452DC: .4byte 0x02000520
-_080452E0: .4byte gUnknown_020238CC
-_080452E4:
- adds r0, r1, 0
- subs r0, 0x37
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bls _080452FC
- adds r0, r1, 0
- adds r0, 0x79
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bhi _08045300
-_080452FC:
- movs r0, 0x2C
- b _0804531E
-_08045300:
- adds r0, r1, 0
- subs r0, 0x4B
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bls _08045318
- adds r0, r1, 0
- adds r0, 0x65
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bhi _0804531C
-_08045318:
- movs r0, 0x2D
- b _0804531E
-_0804531C:
- movs r0, 0x2B
-_0804531E:
- bl sub_8043CDC
- adds r1, r7, 0
- ldr r2, _080453C8 @ =REG_BG0CNT
- bl CpuSet
- adds r7, 0x40
- adds r6, 0x1
- adds r4, 0x1
-_08045330:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _080452C2
-_08045338:
- cmp r6, r10
- bge _0804535A
- lsls r0, r6, 6
- adds r4, r0, r5
- mov r2, r10
- subs r6, r2, r6
-_08045344:
- movs r0, 0x2B
- bl sub_8043CDC
- adds r1, r4, 0
- ldr r2, _080453C8 @ =REG_BG0CNT
- bl CpuSet
- adds r4, 0x40
- subs r6, 0x1
- cmp r6, 0
- bne _08045344
-_0804535A:
- ldr r1, _080453CC @ =gSprites
- ldr r0, [sp, 0xC]
- add r0, r9
- lsls r0, 2
- adds r6, r0, r1
- ldrh r0, [r6, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080453D4
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _080453D4
- ldr r1, _080453D0 @ =gUnknown_0820A8B4
- mov r0, r10
- cmp r0, 0
- beq _08045438
- mov r8, r6
- mov r9, r1
- ldr r7, _080453C8 @ =REG_BG0CNT
- mov r6, r10
-_0804538E:
- mov r1, r9
- adds r1, 0x4
- mov r9, r1
- subs r1, 0x4
- ldm r1!, {r4}
- mov r2, r8
- ldrh r0, [r2, 0x4]
- lsls r0, 22
- lsrs r0, 17
- adds r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- adds r2, r7, 0
- bl CpuSet
- adds r5, 0x20
- movs r0, 0x80
- lsls r0, 1
- adds r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- adds r2, r7, 0
- bl CpuSet
- adds r5, 0x20
- subs r6, 0x1
- cmp r6, 0
- bne _0804538E
- b _08045438
- .align 2, 0
-_080453C8: .4byte REG_BG0CNT
-_080453CC: .4byte gSprites
-_080453D0: .4byte gUnknown_0820A8B4
-_080453D4:
- ldr r1, _08045448 @ =gSprites
- ldr r0, [sp, 0xC]
- add r0, r9
- lsls r0, 2
- adds r4, r0, r1
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- ldr r1, _0804544C @ =gUnknown_0820A8DC
- cmp r0, 0
- bne _080453F2
- ldr r1, _08045450 @ =gUnknown_0820A904
-_080453F2:
- mov r2, r10
- cmp r2, 0
- beq _08045438
- mov r8, r4
- mov r9, r1
- ldr r7, _08045454 @ =REG_BG0CNT
- mov r6, r10
-_08045400:
- mov r0, r9
- adds r0, 0x4
- mov r9, r0
- subs r0, 0x4
- ldm r0!, {r4}
- mov r1, r8
- ldrh r0, [r1, 0x4]
- lsls r0, 22
- lsrs r0, 17
- adds r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- adds r2, r7, 0
- bl CpuSet
- adds r5, 0x20
- movs r2, 0x80
- lsls r2, 1
- adds r4, r2
- adds r0, r5, 0
- adds r1, r4, 0
- adds r2, r7, 0
- bl CpuSet
- adds r5, 0x20
- subs r6, 0x1
- cmp r6, 0
- bne _08045400
-_08045438:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08045448: .4byte gSprites
-_0804544C: .4byte gUnknown_0820A8DC
-_08045450: .4byte gUnknown_0820A904
-_08045454: .4byte REG_BG0CNT
- thumb_func_end sub_80451A0
-
- thumb_func_start sub_8045458
-sub_8045458: @ 8045458
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- ldr r0, _080454F4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- bne _0804552E
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _0804552E
- ldr r6, _080454F8 @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r5, r0, r6
- ldrh r0, [r5, 0x3A]
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- beq _0804552E
- ldr r1, _080454FC @ =gUnknown_02024A6A
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08045500 @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl sub_8090D90
- lsls r0, 24
- cmp r0, 0
- beq _0804552E
- ldrh r0, [r5, 0x38]
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r7, 0
- beq _0804550C
- movs r0, 0x46
- bl sub_8043CDC
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- adds r1, r6
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 17
- movs r2, 0x80
- lsls r2, 1
- adds r1, r2
- ldr r2, _08045504 @ =0x06010000
- adds r1, r2
- ldr r2, _08045508 @ =REG_BG0CNT
- bl CpuSet
- b _0804552E
- .align 2, 0
-_080454F4: .4byte gBattleTypeFlags
-_080454F8: .4byte gSprites
-_080454FC: .4byte gUnknown_02024A6A
-_08045500: .4byte gEnemyParty
-_08045504: .4byte 0x06010000
-_08045508: .4byte REG_BG0CNT
-_0804550C:
- str r7, [sp]
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r0, r6
- ldrh r1, [r0, 0x4]
- lsls r1, 22
- lsrs r1, 17
- movs r0, 0x80
- lsls r0, 1
- adds r1, r0
- ldr r0, _08045538 @ =0x06010000
- adds r1, r0
- ldr r2, _0804553C @ =0x05000008
- mov r0, sp
- bl CpuSet
-_0804552E:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08045538: .4byte 0x06010000
-_0804553C: .4byte 0x05000008
- thumb_func_end sub_8045458
-
- thumb_func_start draw_status_ailment_maybe
-draw_status_ailment_maybe: @ 8045540
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, _080455A4 @ =gSprites
- mov r2, r9
- lsls r1, r2, 4
- add r1, r9
- lsls r1, 2
- adds r1, r0
- ldrh r0, [r1, 0x3A]
- lsls r0, 24
- lsrs r7, r0, 24
- ldrh r0, [r1, 0x38]
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- adds r0, r7, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080455B0
- ldr r1, _080455A8 @ =gUnknown_02024A6A
- lsls r0, r7, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080455AC @ =gPlayerParty
- adds r0, r1
- movs r1, 0x37
- bl GetMonData
- adds r4, r0, 0
- bl IsDoubleBattle
- lsls r0, 24
- movs r3, 0x12
- mov r8, r3
- cmp r0, 0
- bne _080455CC
- movs r0, 0x1A
- mov r8, r0
- b _080455CC
- .align 2, 0
-_080455A4: .4byte gSprites
-_080455A8: .4byte gUnknown_02024A6A
-_080455AC: .4byte gPlayerParty
-_080455B0:
- ldr r1, _080455EC @ =gUnknown_02024A6A
- lsls r0, r7, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080455F0 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x37
- bl GetMonData
- adds r4, r0, 0
- movs r1, 0x11
- mov r8, r1
-_080455CC:
- movs r0, 0x7
- ands r0, r4
- cmp r0, 0
- beq _080455F4
- movs r0, 0x1B
- adds r1, r7, 0
- bl sub_80457E8
- lsls r0, 24
- lsrs r0, 24
- bl sub_8043CDC
- adds r6, r0, 0
- movs r0, 0x2
- b _080456FC
- .align 2, 0
-_080455EC: .4byte gUnknown_02024A6A
-_080455F0: .4byte gEnemyParty
-_080455F4:
- movs r0, 0x88
- ands r0, r4
- cmp r0, 0
- beq _08045612
- movs r0, 0x15
- adds r1, r7, 0
- bl sub_80457E8
- lsls r0, 24
- lsrs r0, 24
- bl sub_8043CDC
- adds r6, r0, 0
- movs r0, 0
- b _080456FC
-_08045612:
- movs r0, 0x10
- ands r0, r4
- cmp r0, 0
- beq _08045630
- movs r0, 0x21
- adds r1, r7, 0
- bl sub_80457E8
- lsls r0, 24
- lsrs r0, 24
- bl sub_8043CDC
- adds r6, r0, 0
- movs r0, 0x4
- b _080456FC
-_08045630:
- movs r0, 0x20
- ands r0, r4
- cmp r0, 0
- beq _0804564E
- movs r0, 0x1E
- adds r1, r7, 0
- bl sub_80457E8
- lsls r0, 24
- lsrs r0, 24
- bl sub_8043CDC
- adds r6, r0, 0
- movs r0, 0x3
- b _080456FC
-_0804564E:
- movs r0, 0x40
- ands r0, r4
- cmp r0, 0
- beq _0804566C
- movs r0, 0x18
- adds r1, r7, 0
- bl sub_80457E8
- lsls r0, 24
- lsrs r0, 24
- bl sub_8043CDC
- adds r6, r0, 0
- movs r0, 0x1
- b _080456FC
-_0804566C:
- movs r0, 0x27
- bl sub_8043CDC
- adds r6, r0, 0
- movs r4, 0
- mov r2, r9
- lsls r0, r2, 4
- mov r3, r8
- lsls r3, 16
- mov r8, r3
- lsls r7, 2
- ldr r1, _080456E8 @ =gSprites
- add r0, r9
- lsls r0, 2
- adds r5, r0, r1
-_0804568A:
- ldrh r1, [r5, 0x4]
- lsls r1, 22
- lsrs r1, 22
- mov r2, r8
- asrs r0, r2, 16
- adds r1, r0
- adds r1, r4
- lsls r1, 5
- ldr r3, _080456EC @ =0x06010000
- adds r1, r3
- adds r0, r6, 0
- ldr r2, _080456F0 @ =REG_BG0CNT
- bl CpuSet
- adds r4, 0x1
- cmp r4, 0x2
- ble _0804568A
- ldr r0, _080456F4 @ =0x02017800
- adds r0, r7, r0
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _080456DC
- movs r0, 0x1
- bl sub_8043CDC
- ldr r2, _080456E8 @ =gSprites
- mov r3, r10
- lsls r1, r3, 4
- add r1, r10
- lsls r1, 2
- adds r1, r2
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 17
- ldr r2, _080456EC @ =0x06010000
- adds r1, r2
- ldr r2, _080456F8 @ =REG_BG0HOFS
- bl CpuSet
-_080456DC:
- mov r0, r9
- movs r1, 0x1
- bl sub_8045458
- b _080457BA
- .align 2, 0
-_080456E8: .4byte gSprites
-_080456EC: .4byte 0x06010000
-_080456F0: .4byte REG_BG0CNT
-_080456F4: .4byte 0x02017800
-_080456F8: .4byte REG_BG0HOFS
-_080456FC:
- mov r1, r9
- lsls r5, r1, 4
- add r5, r9
- lsls r5, 2
- ldr r2, _080457C8 @ =gSprites
- adds r5, r2
- ldrb r4, [r5, 0x5]
- lsrs r4, 4
- lsls r4, 4
- adds r4, 0xC
- adds r4, r7
- lsls r0, 1
- ldr r1, _080457CC @ =gBattleInterfaceStatusIcons_DynPal
- adds r0, r1
- ldrh r0, [r0]
- movs r3, 0x80
- lsls r3, 1
- adds r1, r4, r3
- movs r2, 0x2
- bl FillPalette
- lsls r4, 1
- ldr r0, _080457D0 @ =gPlttBufferUnfaded + 0x200
- adds r0, r4, r0
- ldr r1, _080457D4 @ =0x05000200
- adds r4, r1
- adds r1, r4, 0
- movs r2, 0x1
- bl CpuSet
- ldrh r1, [r5, 0x4]
- lsls r1, 22
- lsrs r1, 22
- add r1, r8
- lsls r1, 5
- ldr r2, _080457D8 @ =0x06010000
- mov r8, r2
- add r1, r8
- ldr r2, _080457DC @ =REG_BG2HOFS
- adds r0, r6, 0
- bl CpuSet
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0804576A
- adds r0, r7, 0
- bl battle_side_get_owner
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080457B2
-_0804576A:
- lsls r0, r7, 2
- ldr r1, _080457E0 @ =0x02017800
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _080457B2
- movs r0, 0
- bl sub_8043CDC
- mov r3, r10
- lsls r4, r3, 4
- add r4, r10
- lsls r4, 2
- ldr r1, _080457C8 @ =gSprites
- adds r4, r1
- ldrh r1, [r4, 0x4]
- lsls r1, 22
- lsrs r1, 17
- add r1, r8
- ldr r5, _080457E4 @ =REG_BG0CNT
- adds r2, r5, 0
- bl CpuSet
- movs r0, 0x41
- bl sub_8043CDC
- ldrh r1, [r4, 0x4]
- lsls r1, 22
- lsrs r1, 17
- adds r1, 0x20
- add r1, r8
- adds r2, r5, 0
- bl CpuSet
-_080457B2:
- mov r0, r9
- movs r1, 0
- bl sub_8045458
-_080457BA:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080457C8: .4byte gSprites
-_080457CC: .4byte gBattleInterfaceStatusIcons_DynPal
-_080457D0: .4byte gPlttBufferUnfaded + 0x200
-_080457D4: .4byte 0x05000200
-_080457D8: .4byte 0x06010000
-_080457DC: .4byte REG_BG2HOFS
-_080457E0: .4byte 0x02017800
-_080457E4: .4byte REG_BG0CNT
- thumb_func_end draw_status_ailment_maybe
-
- thumb_func_start sub_80457E8
-sub_80457E8: @ 80457E8
- push {lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r3, r1, 24
- lsrs r2, r0, 24
- adds r0, r2, 0
- subs r0, 0x15
- cmp r0, 0xC
- bhi _080458A8
- lsls r0, 2
- ldr r1, _08045804 @ =_08045808
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08045804: .4byte _08045808
- .align 2, 0
-_08045808:
- .4byte _0804583C
- .4byte _080458A8
- .4byte _080458A8
- .4byte _08045852
- .4byte _080458A8
- .4byte _080458A8
- .4byte _08045868
- .4byte _080458A8
- .4byte _080458A8
- .4byte _0804587E
- .4byte _080458A8
- .4byte _080458A8
- .4byte _08045894
-_0804583C:
- movs r2, 0x15
- cmp r3, 0
- beq _080458A8
- movs r2, 0x47
- cmp r3, 0x1
- beq _080458A8
- movs r2, 0x65
- cmp r3, 0x2
- bne _080458A8
- movs r2, 0x56
- b _080458A8
-_08045852:
- movs r2, 0x18
- cmp r3, 0
- beq _080458A8
- movs r2, 0x4A
- cmp r3, 0x1
- beq _080458A8
- movs r2, 0x68
- cmp r3, 0x2
- bne _080458A8
- movs r2, 0x59
- b _080458A8
-_08045868:
- movs r2, 0x1B
- cmp r3, 0
- beq _080458A8
- movs r2, 0x4D
- cmp r3, 0x1
- beq _080458A8
- movs r2, 0x6B
- cmp r3, 0x2
- bne _080458A8
- movs r2, 0x5C
- b _080458A8
-_0804587E:
- movs r2, 0x1E
- cmp r3, 0
- beq _080458A8
- movs r2, 0x50
- cmp r3, 0x1
- beq _080458A8
- movs r2, 0x6E
- cmp r3, 0x2
- bne _080458A8
- movs r2, 0x5F
- b _080458A8
-_08045894:
- movs r2, 0x21
- cmp r3, 0
- beq _080458A8
- movs r2, 0x53
- cmp r3, 0x1
- beq _080458A8
- movs r2, 0x71
- cmp r3, 0x2
- bne _080458A8
- movs r2, 0x62
-_080458A8:
- adds r0, r2, 0
- pop {r1}
- bx r1
- thumb_func_end sub_80457E8
-
- thumb_func_start sub_80458B0
-sub_80458B0: @ 80458B0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08045984 @ =gSprites
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 7
- ldr r0, _08045988 @ =0x02000520
- adds r6, r1, r0
- movs r1, 0x7
- mov r8, r1
- ldr r1, _0804598C @ =gUnknown_08400DD6
- adds r0, r6, 0
- bl sub_80034D4
- movs r4, 0
-_080458EE:
- movs r0, 0x2B
- bl sub_8043CDC
- lsls r1, r4, 6
- adds r1, r6, r1
- ldr r2, _08045990 @ =REG_BG0CNT
- bl CpuSet
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, r8
- bcc _080458EE
- movs r7, 0x3
- movs r2, 0x3
- add r2, r8
- mov r9, r2
- cmp r7, r9
- bge _08045974
- ldr r1, _08045984 @ =gSprites
- ldr r0, _08045990 @ =REG_BG0CNT
- mov r10, r0
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- mov r8, r0
-_08045924:
- mov r1, r8
- ldrh r0, [r1, 0x4]
- lsls r0, 22
- lsrs r0, 22
- adds r5, r7, 0
- cmp r7, 0
- bge _08045934
- adds r5, r7, 0x7
-_08045934:
- asrs r5, 3
- lsls r4, r5, 3
- subs r4, r7, r4
- adds r0, r4
- lsls r5, 6
- adds r0, r5
- lsls r0, 5
- ldr r2, _08045994 @ =0x06010000
- adds r1, r0, r2
- adds r0, r6, 0
- mov r2, r10
- bl CpuSet
- adds r6, 0x20
- mov r1, r8
- ldrh r0, [r1, 0x4]
- lsls r0, 22
- lsrs r0, 22
- adds r4, 0x8
- adds r0, r4
- adds r0, r5
- lsls r0, 5
- ldr r2, _08045994 @ =0x06010000
- adds r1, r0, r2
- adds r0, r6, 0
- mov r2, r10
- bl CpuSet
- adds r6, 0x20
- adds r7, 0x1
- cmp r7, r9
- blt _08045924
-_08045974:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08045984: .4byte gSprites
-_08045988: .4byte 0x02000520
-_0804598C: .4byte gUnknown_08400DD6
-_08045990: .4byte REG_BG0CNT
-_08045994: .4byte 0x06010000
- thumb_func_end sub_80458B0
-
- thumb_func_start sub_8045998
-sub_8045998: @ 8045998
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08045A38 @ =gUnknown_020238CC
- mov r8, r0
- ldr r1, _08045A3C @ =gUnknown_08400DE6
- bl StringCopy
- adds r7, r0, 0
- ldr r0, _08045A40 @ =gNumSafariBalls
- ldrb r1, [r0]
- adds r0, r7, 0
- movs r2, 0xA
- movs r3, 0x1
- bl sub_8003504
- adds r7, r0, 0
- ldr r1, _08045A44 @ =gUnknown_08400DF0
- bl StringAppend
- ldr r0, _08045A48 @ =gSprites
- lsls r5, r4, 4
- adds r5, r4
- lsls r5, 2
- adds r5, r0
- ldrh r0, [r5, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 1
- adds r4, r0
- lsls r4, 7
- ldr r0, _08045A4C @ =0x02000520
- adds r7, r4, r0
- movs r6, 0x5
- adds r0, r7, 0
- mov r1, r8
- bl sub_80034D4
- ldr r0, _08045A50 @ =0x02000540
- adds r7, r4, r0
- movs r4, 0x6
-_080459F8:
- ldrh r0, [r5, 0x4]
- lsls r0, 22
- lsrs r2, r0, 22
- adds r0, r4, 0
- cmp r4, 0
- bge _08045A06
- adds r0, r4, 0x7
-_08045A06:
- asrs r0, 3
- lsls r1, r0, 3
- subs r1, r4, r1
- adds r1, 0x18
- adds r1, r2, r1
- lsls r0, 6
- adds r1, r0
- lsls r1, 5
- ldr r0, _08045A54 @ =0x06010000
- adds r1, r0
- adds r0, r7, 0
- ldr r2, _08045A58 @ =REG_BG0CNT
- bl CpuSet
- adds r7, 0x40
- adds r4, 0x1
- adds r0, r6, 0x6
- cmp r4, r0
- blt _080459F8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08045A38: .4byte gUnknown_020238CC
-_08045A3C: .4byte gUnknown_08400DE6
-_08045A40: .4byte gNumSafariBalls
-_08045A44: .4byte gUnknown_08400DF0
-_08045A48: .4byte gSprites
-_08045A4C: .4byte 0x02000520
-_08045A50: .4byte 0x02000540
-_08045A54: .4byte 0x06010000
-_08045A58: .4byte REG_BG0CNT
- thumb_func_end sub_8045998
-
- thumb_func_start sub_8045A5C
-sub_8045A5C: @ 8045A5C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r1
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r2, 24
- lsrs r7, r2, 24
- ldr r1, _08045BE4 @ =gSprites
- lsls r0, 4
- add r0, r8
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- beq _08045A92
- b _08045BF0
-_08045A92:
- cmp r7, 0x3
- beq _08045A9A
- cmp r7, 0
- bne _08045AAE
-_08045A9A:
- mov r0, r9
- movs r1, 0x38
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl sub_8043FC0
-_08045AAE:
- cmp r7, 0x1
- bhi _08045AC8
- mov r0, r9
- movs r1, 0x39
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- asrs r1, 16
- mov r0, r8
- movs r2, 0
- bl sub_80440EC
-_08045AC8:
- cmp r7, 0x2
- beq _08045AD0
- cmp r7, 0
- bne _08045AE6
-_08045AD0:
- mov r0, r9
- movs r1, 0x3A
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- asrs r1, 16
- mov r0, r8
- movs r2, 0x1
- bl sub_80440EC
-_08045AE6:
- cmp r7, 0x5
- beq _08045AEE
- cmp r7, 0
- bne _08045B22
-_08045AEE:
- movs r0, 0
- bl load_gfxc_health_bar
- mov r0, r9
- movs r1, 0x3A
- bl GetMonData
- adds r4, r0, 0
- mov r0, r9
- movs r1, 0x39
- bl GetMonData
- adds r3, r0, 0
- movs r0, 0
- str r0, [sp]
- mov r0, r10
- mov r1, r8
- adds r2, r4, 0
- bl sub_8043D84
- mov r0, r10
- mov r1, r8
- movs r2, 0
- movs r3, 0
- bl sub_8045C78
-_08045B22:
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- cmp r0, 0
- bne _08045BA6
- cmp r7, 0x6
- beq _08045B38
- cmp r7, 0
- bne _08045BA6
-_08045B38:
- movs r0, 0x3
- bl load_gfxc_health_bar
- mov r0, r9
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- mov r0, r9
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- mov r0, r9
- movs r1, 0x19
- bl GetMonData
- adds r3, r0, 0
- ldr r6, _08045BE8 @ =gExperienceTables
- lsls r1, r4, 2
- ldr r2, _08045BEC @ =gBaseStats
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- adds r0, r2
- ldrb r2, [r0, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r2
- adds r1, r0
- adds r1, r6
- ldr r1, [r1]
- subs r3, r1
- adds r4, 0x1
- lsls r4, 2
- adds r4, r0
- adds r4, r6
- ldr r2, [r4]
- subs r2, r1
- ldr r0, [sp, 0x4]
- str r0, [sp]
- mov r0, r10
- mov r1, r8
- bl sub_8043D84
- mov r0, r10
- mov r1, r8
- movs r2, 0x1
- movs r3, 0
- bl sub_8045C78
-_08045BA6:
- cmp r7, 0x4
- beq _08045BAE
- cmp r7, 0
- bne _08045BB6
-_08045BAE:
- mov r0, r8
- mov r1, r9
- bl sub_80451A0
-_08045BB6:
- cmp r7, 0x9
- beq _08045BBE
- cmp r7, 0
- bne _08045BC4
-_08045BBE:
- mov r0, r8
- bl draw_status_ailment_maybe
-_08045BC4:
- cmp r7, 0xA
- bne _08045BCE
- mov r0, r8
- bl sub_80458B0
-_08045BCE:
- adds r0, r7, 0
- subs r0, 0xA
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08045C66
- mov r0, r8
- bl sub_8045998
- b _08045C66
- .align 2, 0
-_08045BE4: .4byte gSprites
-_08045BE8: .4byte gExperienceTables
-_08045BEC: .4byte gBaseStats
-_08045BF0:
- cmp r7, 0x3
- beq _08045BF8
- cmp r7, 0
- bne _08045C0C
-_08045BF8:
- mov r0, r9
- movs r1, 0x38
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl sub_8043FC0
-_08045C0C:
- cmp r7, 0x5
- beq _08045C14
- cmp r7, 0
- bne _08045C48
-_08045C14:
- movs r0, 0
- bl load_gfxc_health_bar
- mov r0, r9
- movs r1, 0x3A
- bl GetMonData
- adds r4, r0, 0
- mov r0, r9
- movs r1, 0x39
- bl GetMonData
- adds r3, r0, 0
- movs r0, 0
- str r0, [sp]
- mov r0, r10
- mov r1, r8
- adds r2, r4, 0
- bl sub_8043D84
- mov r0, r10
- mov r1, r8
- movs r2, 0
- movs r3, 0
- bl sub_8045C78
-_08045C48:
- cmp r7, 0x4
- beq _08045C50
- cmp r7, 0
- bne _08045C58
-_08045C50:
- mov r0, r8
- mov r1, r9
- bl sub_80451A0
-_08045C58:
- cmp r7, 0x9
- beq _08045C60
- cmp r7, 0
- bne _08045C66
-_08045C60:
- mov r0, r8
- bl draw_status_ailment_maybe
-_08045C66:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8045A5C
-
- thumb_func_start sub_8045C78
-sub_8045C78: @ 8045C78
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- cmp r2, 0
- bne _08045CBC
- lsls r5, r7, 2
- adds r3, r5, r7
- lsls r3, 2
- ldr r4, _08045CB8 @ =0x02017850
- adds r2, r3, r4
- ldr r0, [r2, 0x4]
- ldr r1, [r2, 0x8]
- ldr r2, [r2, 0xC]
- adds r4, 0x10
- adds r3, r4
- movs r4, 0x6
- str r4, [sp]
- movs r4, 0x1
- str r4, [sp, 0x4]
- bl sub_8045F58
- adds r6, r0, 0
- adds r4, r5, 0
- b _08045D0A
- .align 2, 0
-_08045CB8: .4byte 0x02017850
-_08045CBC:
- lsls r4, r7, 2
- adds r0, r4, r7
- lsls r0, 2
- mov r10, r0
- ldr r6, _08045D50 @ =0x02017850
- add r6, r10
- ldr r0, [r6, 0x8]
- ldr r1, [r6, 0xC]
- ldr r2, [r6, 0x4]
- movs r3, 0x8
- bl GetScaledExpFraction
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _08045CDE
- movs r5, 0x1
-_08045CDE:
- ldr r0, [r6, 0xC]
- mov r8, r0
- adds r1, r5, 0
- bl __divsi3
- cmp r0, 0
- bge _08045CEE
- negs r0, r0
-_08045CEE:
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, [r6, 0x4]
- ldr r1, [r6, 0x8]
- ldr r3, _08045D50 @ =0x02017850
- adds r3, 0x10
- add r3, r10
- movs r2, 0x8
- str r2, [sp]
- str r5, [sp, 0x4]
- mov r2, r8
- bl sub_8045F58
- adds r6, r0, 0
-_08045D0A:
- mov r0, r9
- cmp r0, 0x1
- beq _08045D22
- cmp r0, 0
- bne _08045D2A
- ldr r0, _08045D54 @ =0x02017800
- adds r0, r4, r0
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _08045D2A
-_08045D22:
- adds r0, r7, 0
- mov r1, r9
- bl sub_8045D58
-_08045D2A:
- movs r0, 0x1
- negs r0, r0
- cmp r6, r0
- bne _08045D3E
- adds r0, r4, r7
- lsls r0, 2
- ldr r1, _08045D50 @ =0x02017850
- adds r0, r1
- movs r1, 0
- str r1, [r0, 0x10]
-_08045D3E:
- adds r0, r6, 0
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08045D50: .4byte 0x02017850
-_08045D54: .4byte 0x02017800
- thumb_func_end sub_8045C78
-
- thumb_func_start sub_8045D58
-sub_8045D58: @ 8045D58
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0
- beq _08045D72
- cmp r1, 0x1
- beq _08045E54
- b _08045F42
-_08045D72:
- lsls r5, r6, 2
- adds r3, r5, r6
- lsls r3, 2
- ldr r4, _08045E00 @ =0x02017850
- adds r2, r3, r4
- ldr r0, [r2, 0x4]
- ldr r1, [r2, 0x8]
- ldr r2, [r2, 0xC]
- adds r4, 0x10
- adds r3, r4
- add r4, sp, 0x8
- str r4, [sp]
- movs r4, 0x6
- str r4, [sp, 0x4]
- bl sub_804602C
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3
- mov r8, r1
- adds r1, r5, 0
- cmp r0, 0x18
- bhi _08045DAC
- movs r2, 0x38
- mov r8, r2
- cmp r0, 0x9
- bls _08045DAC
- movs r4, 0x2F
- mov r8, r4
-_08045DAC:
- movs r5, 0
- ldr r7, _08045E04 @ =gSprites
- adds r0, r1, r6
- lsls r6, r0, 2
-_08045DB4:
- ldr r0, _08045E00 @ =0x02017850
- adds r0, r6, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- ldrh r0, [r0, 0x38]
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r5, 0x1
- bhi _08045E10
- mov r0, r8
- bl sub_8043CDC
- mov r1, sp
- adds r1, r5
- adds r1, 0x8
- ldrb r1, [r1]
- lsls r1, 5
- adds r0, r1
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- adds r1, r7
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 22
- adds r2, r5, 0x2
- adds r1, r2
- lsls r1, 5
- ldr r2, _08045E08 @ =0x06010000
- adds r1, r2
- ldr r2, _08045E0C @ =REG_BG0CNT
- bl CpuSet
- b _08045E3E
- .align 2, 0
-_08045E00: .4byte 0x02017850
-_08045E04: .4byte gSprites
-_08045E08: .4byte 0x06010000
-_08045E0C: .4byte REG_BG0CNT
-_08045E10:
- mov r0, r8
- bl sub_8043CDC
- mov r1, sp
- adds r1, r5
- adds r1, 0x8
- ldrb r1, [r1]
- lsls r1, 5
- adds r0, r1
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- adds r1, r7
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 22
- adds r1, r5, r1
- lsls r1, 5
- ldr r4, _08045E4C @ =0x06010040
- adds r1, r4
- ldr r2, _08045E50 @ =REG_BG0CNT
- bl CpuSet
-_08045E3E:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _08045DB4
- b _08045F42
- .align 2, 0
-_08045E4C: .4byte 0x06010040
-_08045E50: .4byte REG_BG0CNT
-_08045E54:
- lsls r5, r6, 2
- adds r3, r5, r6
- lsls r3, 2
- ldr r4, _08045EF0 @ =0x02017850
- adds r2, r3, r4
- ldr r0, [r2, 0x4]
- ldr r1, [r2, 0x8]
- ldr r2, [r2, 0xC]
- adds r4, 0x10
- adds r3, r4
- add r4, sp, 0x8
- str r4, [sp]
- movs r4, 0x8
- str r4, [sp, 0x4]
- bl sub_804602C
- ldr r1, _08045EF4 @ =gUnknown_02024A6A
- lsls r0, r6, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08045EF8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- adds r1, r5, 0
- cmp r0, 0x64
- bne _08045EAA
- movs r5, 0
- movs r2, 0
-_08045E98:
- mov r0, sp
- adds r0, r5
- adds r0, 0x8
- strb r2, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x7
- bls _08045E98
-_08045EAA:
- movs r5, 0
- ldr r7, _08045EFC @ =gSprites
- adds r0, r1, r6
- lsls r0, 2
- ldr r1, _08045EF0 @ =0x02017850
- adds r4, r0, r1
-_08045EB6:
- cmp r5, 0x3
- bhi _08045F08
- movs r0, 0xC
- bl sub_8043CDC
- mov r1, sp
- adds r1, r5
- adds r1, 0x8
- ldrb r1, [r1]
- lsls r1, 5
- adds r0, r1
- ldrb r2, [r4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r7
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 22
- adds r2, r5, 0
- adds r2, 0x24
- adds r1, r2
- lsls r1, 5
- ldr r2, _08045F00 @ =0x06010000
- adds r1, r2
- ldr r2, _08045F04 @ =REG_BG0CNT
- bl CpuSet
- b _08045F38
- .align 2, 0
-_08045EF0: .4byte 0x02017850
-_08045EF4: .4byte gUnknown_02024A6A
-_08045EF8: .4byte gPlayerParty
-_08045EFC: .4byte gSprites
-_08045F00: .4byte 0x06010000
-_08045F04: .4byte REG_BG0CNT
-_08045F08:
- movs r0, 0xC
- bl sub_8043CDC
- mov r1, sp
- adds r1, r5
- adds r1, 0x8
- ldrb r1, [r1]
- lsls r1, 5
- adds r0, r1
- ldrb r2, [r4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r7
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 22
- adds r1, r5, r1
- lsls r1, 5
- ldr r2, _08045F50 @ =0x06010b80
- adds r1, r2
- ldr r2, _08045F54 @ =REG_BG0CNT
- bl CpuSet
-_08045F38:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x7
- bls _08045EB6
-_08045F42:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08045F50: .4byte 0x06010b80
-_08045F54: .4byte REG_BG0CNT
- thumb_func_end sub_8045D58
-
- thumb_func_start sub_8045F58
-sub_8045F58: @ 8045F58
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- adds r4, r1, 0
- mov r8, r2
- adds r5, r3, 0
- ldr r1, [sp, 0x18]
- ldr r0, [sp, 0x1C]
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, 27
- lsrs r2, r1, 24
- ldr r1, [r5]
- ldr r0, _08045F84 @ =0xffff8000
- cmp r1, r0
- bne _08045F8A
- cmp r7, r2
- bge _08045F88
- lsls r0, r4, 8
- str r0, [r5]
- b _08045F8A
- .align 2, 0
-_08045F84: .4byte 0xffff8000
-_08045F88:
- str r4, [r5]
-_08045F8A:
- mov r0, r8
- subs r4, r0
- cmp r4, 0
- bge _08045F96
- movs r4, 0
- b _08045F9C
-_08045F96:
- cmp r4, r7
- ble _08045F9C
- adds r4, r7, 0
-_08045F9C:
- cmp r7, r2
- bge _08045FB8
- ldr r0, [r5]
- asrs r1, r0, 8
- adds r6, r0, 0
- cmp r4, r1
- bne _08045FC4
- movs r0, 0xFF
- ands r0, r6
- cmp r0, 0
- bne _08045FC4
- movs r0, 0x1
- negs r0, r0
- b _08046020
-_08045FB8:
- ldr r6, [r5]
- cmp r4, r6
- bne _08045FC4
- movs r0, 0x1
- negs r0, r0
- b _08046020
-_08045FC4:
- cmp r7, r2
- bge _08045FFE
- lsls r0, r7, 8
- adds r1, r2, 0
- bl __divsi3
- mov r1, r8
- cmp r1, 0
- bge _08045FE2
- adds r0, r6, r0
- str r0, [r5]
- asrs r2, r0, 8
- cmp r2, r4
- blt _0804601E
- b _08045FF6
-_08045FE2:
- subs r0, r6, r0
- str r0, [r5]
- asrs r2, r0, 8
- movs r1, 0xFF
- ands r0, r1
- cmp r0, 0
- ble _08045FF2
- adds r2, 0x1
-_08045FF2:
- cmp r2, r4
- bgt _0804601E
-_08045FF6:
- lsls r0, r4, 8
- str r0, [r5]
- adds r2, r4, 0
- b _0804601E
-_08045FFE:
- mov r0, r8
- cmp r0, 0
- bge _08046010
- ldr r0, [r5]
- adds r0, r3
- str r0, [r5]
- cmp r0, r4
- ble _0804601C
- b _0804601A
-_08046010:
- ldr r0, [r5]
- subs r0, r3
- str r0, [r5]
- cmp r0, r4
- bge _0804601C
-_0804601A:
- str r4, [r5]
-_0804601C:
- ldr r2, [r5]
-_0804601E:
- adds r0, r2, 0
-_08046020:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8045F58
-
- thumb_func_start sub_804602C
-sub_804602C: @ 804602C
- push {r4-r7,lr}
- adds r4, r0, 0
- mov r12, r3
- ldr r7, [sp, 0x14]
- ldr r0, [sp, 0x18]
- lsls r0, 24
- lsrs r6, r0, 24
- subs r5, r1, r2
- cmp r5, 0
- bge _08046044
- movs r5, 0
- b _0804604A
-_08046044:
- cmp r5, r4
- ble _0804604A
- adds r5, r4, 0
-_0804604A:
- lsls r0, r6, 27
- lsrs r3, r0, 24
- movs r1, 0
- cmp r1, r6
- bcs _08046064
- movs r2, 0
-_08046056:
- adds r0, r7, r1
- strb r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r6
- bcc _08046056
-_08046064:
- cmp r4, r3
- bge _08046078
- mov r1, r12
- ldr r0, [r1]
- muls r0, r3
- adds r1, r4, 0
- bl __divsi3
- asrs r0, 8
- b _08046084
-_08046078:
- mov r1, r12
- ldr r0, [r1]
- muls r0, r3
- adds r1, r4, 0
- bl __divsi3
-_08046084:
- lsls r0, 24
- lsrs r2, r0, 24
- adds r3, r2, 0
- cmp r3, 0
- bne _0804609A
- cmp r5, 0
- ble _0804609A
- movs r0, 0x1
- strb r0, [r7]
- movs r3, 0x1
- b _080460BE
-_0804609A:
- movs r1, 0
- movs r4, 0x8
-_0804609E:
- cmp r1, r6
- bcs _080460BE
- cmp r2, 0x7
- bls _080460BA
- adds r0, r7, r1
- strb r4, [r0]
- adds r0, r2, 0
- subs r0, 0x8
- lsls r0, 24
- lsrs r2, r0, 24
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- b _0804609E
-_080460BA:
- adds r0, r7, r1
- strb r2, [r0]
-_080460BE:
- adds r0, r3, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_804602C
-
- thumb_func_start sub_80460C8
-sub_80460C8: @ 80460C8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r5, r0, 0
- adds r6, r1, 0
- adds r4, r2, 0
- mov r8, r3
- ldr r0, [r5]
- ldr r1, [r5, 0x4]
- ldr r2, [r5, 0x8]
- movs r3, 0x6
- str r3, [sp]
- movs r3, 0x1
- str r3, [sp, 0x4]
- adds r3, r6, 0
- bl sub_8045F58
- lsls r0, 16
- lsrs r7, r0, 16
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- bl sub_8046128
- ldr r0, [r5]
- cmp r0, 0x2F
- bgt _08046108
- ldr r0, [r6]
- lsls r0, 8
- lsrs r1, r0, 16
- b _0804610A
-_08046108:
- ldrh r1, [r6]
-_0804610A:
- movs r2, 0
- ldrsh r0, [r5, r2]
- lsls r1, 16
- asrs r1, 16
- mov r2, r8
- bl sub_804373C
- lsls r0, r7, 16
- asrs r0, 16
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80460C8
-
- thumb_func_start sub_8046128
-sub_8046128: @ 8046128
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x1C
- adds r5, r0, 0
- adds r3, r1, 0
- mov r8, r2
- ldr r0, [r5]
- ldr r1, [r5, 0x4]
- ldr r2, [r5, 0x8]
- add r4, sp, 0x8
- str r4, [sp]
- movs r4, 0x6
- str r4, [sp, 0x4]
- bl sub_804602C
- movs r3, 0
- add r7, sp, 0x10
- mov r12, r7
- ldrb r0, [r5, 0xC]
- lsls r6, r0, 27
- ldr r4, [r5, 0x10]
-_08046154:
- lsls r2, r3, 1
- add r2, r12
- lsrs r1, r6, 15
- mov r0, sp
- adds r0, r3
- adds r0, 0x8
- ldrb r0, [r0]
- adds r0, r4, r0
- orrs r1, r0
- strh r1, [r2]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x5
- bls _08046154
- adds r0, r7, 0
- mov r1, r8
- movs r2, 0x6
- bl CpuSet
- add sp, 0x1C
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8046128
-
- thumb_func_start GetScaledExpFraction
-GetScaledExpFraction: @ 8046188
- push {r4-r7,lr}
- adds r6, r2, 0
- lsls r3, 27
- lsrs r7, r3, 24
- subs r5, r0, r1
- cmp r5, 0
- bge _0804619A
- movs r5, 0
- b _080461A0
-_0804619A:
- cmp r5, r6
- ble _080461A0
- adds r5, r6, 0
-_080461A0:
- muls r0, r7
- adds r1, r6, 0
- bl __divsi3
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- muls r0, r7
- adds r1, r6, 0
- bl __divsi3
- lsls r4, 24
- asrs r4, 24
- lsls r0, 24
- asrs r0, 24
- subs r0, r4, r0
- cmp r0, 0
- bge _080461C8
- negs r0, r0
-_080461C8:
- lsls r0, 24
- lsrs r0, 24
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetScaledExpFraction
-
- thumb_func_start GetScaledHPFraction
-GetScaledHPFraction: @ 80461D4
- push {r4,lr}
- lsls r2, 24
- lsrs r2, 24
- lsls r0, 16
- asrs r4, r0, 16
- adds r0, r4, 0
- muls r0, r2
- lsls r1, 16
- asrs r1, 16
- bl __divsi3
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080461F8
- cmp r4, 0
- ble _080461F8
- movs r0, 0x1
-_080461F8:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetScaledHPFraction
-
- thumb_func_start GetHPBarLevel
-GetHPBarLevel: @ 8046200
- push {lr}
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- cmp r0, r1
- bne _08046212
- movs r0, 0x4
- b _0804622E
-_08046212:
- movs r2, 0x30
- bl GetScaledHPFraction
- lsls r0, 24
- lsrs r1, r0, 24
- movs r0, 0x3
- cmp r1, 0x18
- bhi _0804622E
- movs r0, 0x2
- cmp r1, 0x9
- bhi _0804622E
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
-_0804622E:
- pop {r1}
- bx r1
- thumb_func_end GetHPBarLevel
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_records.s b/asm/battle_records.s
index 60d7b9b2b..e10f2f4e5 100644
--- a/asm/battle_records.s
+++ b/asm/battle_records.s
@@ -635,47 +635,7 @@ _0811042E:
_08110438: .4byte gStringVar1
thumb_func_end PrintLinkBattleRecord
- thumb_func_start ShowLinkBattleRecords
-ShowLinkBattleRecords: @ 811043C
- push {r4,lr}
- movs r0, 0x1
- movs r1, 0
- movs r2, 0x1C
- movs r3, 0x12
- bl MenuDrawTextWindow
- ldr r0, _08110488 @ =gOtherText_BattleResults
- movs r1, 0
- movs r2, 0x1
- movs r3, 0xF0
- bl sub_8072BD8
- ldr r0, _0811048C @ =gSaveBlock1 + 0x30B8
- bl PrintLinkBattleWinsLossesDraws
- ldr r0, _08110490 @ =gOtherText_WinLoseDraw
- movs r1, 0xC
- movs r2, 0x6
- bl MenuPrint
- movs r4, 0
-_08110468:
- lsls r0, r4, 4
- ldr r1, _0811048C @ =gSaveBlock1 + 0x30B8
- adds r0, r1
- adds r4, 0x1
- lsls r1, r4, 25
- movs r2, 0xC0
- lsls r2, 19
- adds r1, r2
- lsrs r1, 24
- bl PrintLinkBattleRecord
- cmp r4, 0x4
- ble _08110468
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08110488: .4byte gOtherText_BattleResults
-_0811048C: .4byte gSaveBlock1 + 0x30B8
-_08110490: .4byte gOtherText_WinLoseDraw
- thumb_func_end ShowLinkBattleRecords
+.section .text_8110494
thumb_func_start sub_8110494
sub_8110494: @ 8110494
diff --git a/asm/birch_pc.s b/asm/birch_pc.s
deleted file mode 100644
index 2687f29b5..000000000
--- a/asm/birch_pc.s
+++ /dev/null
@@ -1,265 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start ScriptGetPokedexInfo
-ScriptGetPokedexInfo: @ 810D43C
- push {lr}
- ldr r0, _0810D458 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- bne _0810D460
- movs r0, 0
- bl GetHoennPokedexCount
- ldr r1, _0810D45C @ =gSpecialVar_0x8005
- strh r0, [r1]
- movs r0, 0x1
- bl GetHoennPokedexCount
- b _0810D470
- .align 2, 0
-_0810D458: .4byte gSpecialVar_0x8004
-_0810D45C: .4byte gSpecialVar_0x8005
-_0810D460:
- movs r0, 0
- bl GetNationalPokedexCount
- ldr r1, _0810D480 @ =gSpecialVar_0x8005
- strh r0, [r1]
- movs r0, 0x1
- bl GetNationalPokedexCount
-_0810D470:
- ldr r1, _0810D484 @ =gSpecialVar_0x8006
- strh r0, [r1]
- bl IsNationalPokedexEnabled
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_0810D480: .4byte gSpecialVar_0x8005
-_0810D484: .4byte gSpecialVar_0x8006
- thumb_func_end ScriptGetPokedexInfo
-
- thumb_func_start GetPokedexRatingText
-GetPokedexRatingText: @ 810D488
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x9
- bhi _0810D494
- b _0810D5EC
-_0810D494:
- cmp r0, 0x13
- bhi _0810D4A0
- ldr r0, _0810D49C @ =gUnknown_081C456A
- b _0810D5F6
- .align 2, 0
-_0810D49C: .4byte gUnknown_081C456A
-_0810D4A0:
- cmp r0, 0x1D
- bhi _0810D4AC
- ldr r0, _0810D4A8 @ =gUnknown_081C45B0
- b _0810D5F6
- .align 2, 0
-_0810D4A8: .4byte gUnknown_081C45B0
-_0810D4AC:
- cmp r0, 0x27
- bhi _0810D4B8
- ldr r0, _0810D4B4 @ =gUnknown_081C45F9
- b _0810D5F6
- .align 2, 0
-_0810D4B4: .4byte gUnknown_081C45F9
-_0810D4B8:
- cmp r0, 0x31
- bhi _0810D4C4
- ldr r0, _0810D4C0 @ =gUnknown_081C4648
- b _0810D5F6
- .align 2, 0
-_0810D4C0: .4byte gUnknown_081C4648
-_0810D4C4:
- cmp r0, 0x3B
- bhi _0810D4D0
- ldr r0, _0810D4CC @ =gUnknown_081C467E
- b _0810D5F6
- .align 2, 0
-_0810D4CC: .4byte gUnknown_081C467E
-_0810D4D0:
- cmp r0, 0x45
- bhi _0810D4DC
- ldr r0, _0810D4D8 @ =gUnknown_081C46B9
- b _0810D5F6
- .align 2, 0
-_0810D4D8: .4byte gUnknown_081C46B9
-_0810D4DC:
- cmp r0, 0x4F
- bhi _0810D4E8
- ldr r0, _0810D4E4 @ =gUnknown_081C46FE
- b _0810D5F6
- .align 2, 0
-_0810D4E4: .4byte gUnknown_081C46FE
-_0810D4E8:
- cmp r0, 0x59
- bhi _0810D4F4
- ldr r0, _0810D4F0 @ =gUnknown_081C4747
- b _0810D5F6
- .align 2, 0
-_0810D4F0: .4byte gUnknown_081C4747
-_0810D4F4:
- cmp r0, 0x63
- bhi _0810D500
- ldr r0, _0810D4FC @ =gUnknown_081C4780
- b _0810D5F6
- .align 2, 0
-_0810D4FC: .4byte gUnknown_081C4780
-_0810D500:
- cmp r0, 0x6D
- bhi _0810D50C
- ldr r0, _0810D508 @ =gUnknown_081C47DF
- b _0810D5F6
- .align 2, 0
-_0810D508: .4byte gUnknown_081C47DF
-_0810D50C:
- cmp r0, 0x77
- bhi _0810D518
- ldr r0, _0810D514 @ =gUnknown_081C4828
- b _0810D5F6
- .align 2, 0
-_0810D514: .4byte gUnknown_081C4828
-_0810D518:
- cmp r0, 0x81
- bhi _0810D524
- ldr r0, _0810D520 @ =gUnknown_081C4863
- b _0810D5F6
- .align 2, 0
-_0810D520: .4byte gUnknown_081C4863
-_0810D524:
- cmp r0, 0x8B
- bhi _0810D530
- ldr r0, _0810D52C @ =gUnknown_081C489C
- b _0810D5F6
- .align 2, 0
-_0810D52C: .4byte gUnknown_081C489C
-_0810D530:
- cmp r0, 0x95
- bhi _0810D53C
- ldr r0, _0810D538 @ =gUnknown_081C48EB
- b _0810D5F6
- .align 2, 0
-_0810D538: .4byte gUnknown_081C48EB
-_0810D53C:
- cmp r0, 0x9F
- bhi _0810D548
- ldr r0, _0810D544 @ =gUnknown_081C4936
- b _0810D5F6
- .align 2, 0
-_0810D544: .4byte gUnknown_081C4936
-_0810D548:
- cmp r0, 0xA9
- bhi _0810D554
- ldr r0, _0810D550 @ =gUnknown_081C49A2
- b _0810D5F6
- .align 2, 0
-_0810D550: .4byte gUnknown_081C49A2
-_0810D554:
- cmp r0, 0xB3
- bhi _0810D560
- ldr r0, _0810D55C @ =gUnknown_081C4A06
- b _0810D5F6
- .align 2, 0
-_0810D55C: .4byte gUnknown_081C4A06
-_0810D560:
- cmp r0, 0xBD
- bhi _0810D56C
- ldr r0, _0810D568 @ =gUnknown_081C4A4F
- b _0810D5F6
- .align 2, 0
-_0810D568: .4byte gUnknown_081C4A4F
-_0810D56C:
- cmp r0, 0xC7
- bls _0810D5DA
- cmp r0, 0xC8
- bne _0810D5A8
- ldr r0, _0810D5A4 @ =0x00000199
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl sub_8090D90
- lsls r0, 24
- cmp r0, 0
- bne _0810D5DA
- movs r0, 0xCD
- lsls r0, 1
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl sub_8090D90
- lsls r0, 24
- cmp r0, 0
- bne _0810D5DA
- b _0810D5F4
- .align 2, 0
-_0810D5A4: .4byte 0x00000199
-_0810D5A8:
- cmp r0, 0xC9
- bne _0810D5E8
- ldr r0, _0810D5E0 @ =0x00000199
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl sub_8090D90
- lsls r0, 24
- cmp r0, 0
- beq _0810D5F4
- movs r0, 0xCD
- lsls r0, 1
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl sub_8090D90
- lsls r0, 24
- cmp r0, 0
- beq _0810D5F4
-_0810D5DA:
- ldr r0, _0810D5E4 @ =gUnknown_081C4A91
- b _0810D5F6
- .align 2, 0
-_0810D5E0: .4byte 0x00000199
-_0810D5E4: .4byte gUnknown_081C4A91
-_0810D5E8:
- cmp r0, 0xCA
- beq _0810D5F4
-_0810D5EC:
- ldr r0, _0810D5F0 @ =gUnknown_081C4520
- b _0810D5F6
- .align 2, 0
-_0810D5F0: .4byte gUnknown_081C4520
-_0810D5F4:
- ldr r0, _0810D5FC @ =gUnknown_081C4ADA
-_0810D5F6:
- pop {r1}
- bx r1
- .align 2, 0
-_0810D5FC: .4byte gUnknown_081C4ADA
- thumb_func_end GetPokedexRatingText
-
- thumb_func_start ShowPokedexRatingMessage
-ShowPokedexRatingMessage: @ 810D600
- push {lr}
- ldr r0, _0810D614 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- bl GetPokedexRatingText
- bl ShowFieldMessage
- pop {r0}
- bx r0
- .align 2, 0
-_0810D614: .4byte gSpecialVar_0x8004
- thumb_func_end ShowPokedexRatingMessage
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/contest.s b/asm/contest.s
index fe3536218..3f53a31e9 100644
--- a/asm/contest.s
+++ b/asm/contest.s
@@ -420,7 +420,7 @@ _080AB4E0:
adds r0, r1
movs r1, 0
strb r1, [r0]
- bl sub_8040710
+ bl ClearBattleMonForms
bl sub_80AB398
ldr r1, _080AB54C @ =gMain
ldr r0, _080AB550 @ =0x0000043c
@@ -2294,7 +2294,7 @@ _080AC534:
lsls r4, 2
mov r9, r4
ldr r4, _080AC5C4 @ =0x02019348
- ldr r1, _080AC5C8 @ =gUnknown_02024E84
+ ldr r1, _080AC5C8 @ =gBattleMonForms
movs r2, 0
adds r0, r1, 0x3
_080AC542:
@@ -2358,7 +2358,7 @@ _080AC542:
bl _080AD8CA
.align 2, 0
_080AC5C4: .4byte 0x02019348
-_080AC5C8: .4byte gUnknown_02024E84
+_080AC5C8: .4byte gBattleMonForms
_080AC5CC: .4byte 0xfffffebc
_080AC5D0: .4byte gContestMons
_080AC5D4: .4byte gSprites
@@ -15035,7 +15035,7 @@ sub_80B2790: @ 80B2790
movs r2, 0x14
bl memset
bl battle_anim_clear_some_data
- ldr r1, _080B27F8 @ =gUnknown_02024E84
+ ldr r1, _080B27F8 @ =gBattleMonForms
movs r2, 0
adds r0, r1, 0x3
_080B27D0:
@@ -15057,7 +15057,7 @@ _080B27D0:
.align 2, 0
_080B27F0: .4byte 0x02019260
_080B27F4: .4byte gContestMons
-_080B27F8: .4byte gUnknown_02024E84
+_080B27F8: .4byte gBattleMonForms
_080B27FC:
cmp r5, 0x82
beq _080B2898
diff --git a/asm/crt0.s b/asm/crt0.s
index 7a492ff17..121b11744 100644
--- a/asm/crt0.s
+++ b/asm/crt0.s
@@ -30,10 +30,88 @@ GPIOPortReadEnable: @ 80000C8
.space 6
+@ 80000D0
+
+@ TODO: figure out what this data is
+
+ .ifdef GERMAN
+ .4byte 0xFFFFFFFF
+ .4byte 0xFFFFFFFF
+ .4byte 0xFFFFFFFF
+ .4byte 0xFFFFFFFF
+ .4byte 0xFFFFFFFF
+ .4byte 0xFFFFFFFF
+ .4byte 0xFFFFFFFF
+ .4byte 0xFFFFFFFF
+ .4byte 0xFFFFFFFF
+ .4byte 0xFFFFFFFF
+ .4byte 0xFFFFFFFF
+ .4byte 0xFFFFFFFF
+ .4byte 2
+ .4byte 5
+ .ascii "pokemon ruby version"
+ .space 12
+ .4byte gMonFrontPicTable
+ .4byte gMonBackPicTable
+ .4byte gMonPaletteTable
+ .4byte gMonShinyPaletteTable
+ .4byte gMonIconTable
+ .4byte gMonIconPaletteIndices
+ .4byte gMonIconPaletteTable
+ .4byte gSpeciesNames
+ .4byte gMoveNames
+ .4byte gDecorations
+ .4byte 0x1220
+ .4byte 0x1340
+ .4byte 0x18
+ .4byte 0x938
+ .4byte 0x3A8C
+ .4byte 0x46
+ .4byte 0x836
+ .4byte 0x84C
+ .4byte 0x182
+ .4byte 0xA0A0A07
+ .4byte 0xC060C0C
+ .4byte 0xC121006
+ .4byte 0x8010B0F
+ .4byte 0xC
+ .4byte 0x890
+ .4byte 0x3AC0
+ .4byte 0x234
+ .4byte 0x238
+ .4byte 9
+ .4byte 0xA
+ .4byte 0
+ .4byte 8
+ .4byte 0x556
+ .4byte 0x557
+ .4byte 0x312F
+ .4byte 0x311B
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0
+ .4byte 0xFFFFFFFF
+ .endif
+
.arm
.align 2, 0
.global Init
-Init: @ 80000D0
+Init:
mov r0, PSR_IRQ_MODE
msr cpsr_cf, r0
ldr sp, sp_irq
@@ -55,7 +133,7 @@ sp_irq: .word IWRAM_END - 0x60
.arm
.align 2, 0
.global IntrMain
-IntrMain: @ 800010C
+IntrMain:
mov r3, REG_BASE
add r3, r3, 0x200
ldr r2, [r3, OFFSET_REG_IE - 0x200]
diff --git a/asm/daycare.s b/asm/daycare.s
index 886643fce..0e8a796d9 100644
--- a/asm/daycare.s
+++ b/asm/daycare.s
@@ -170,7 +170,7 @@ _0804144A:
movs r2, 0x50
bl memcpy
adds r0, r4, 0
- bl pokemon_restore_pp
+ bl BoxMonRestorePP
movs r0, 0x88
lsls r0, 1
add r0, r8
@@ -1202,7 +1202,7 @@ _08041C18:
lsls r0, 16
lsrs r0, 16
ldr r1, _08041CD8 @ =gUnknown_03000470
- bl sub_804051C
+ bl GetLevelUpMovesBySpecies
lsls r0, 24
lsrs r0, 24
str r0, [sp, 0x4]
diff --git a/asm/easy_chat.s b/asm/easy_chat.s
index 8000e9029..b8bfaac18 100644
--- a/asm/easy_chat.s
+++ b/asm/easy_chat.s
@@ -11193,448 +11193,4 @@ _080EB724: .4byte 0xffff0000
_080EB728: .4byte 0x0000ffff
thumb_func_end sub_80EB6FC
- thumb_func_start sub_80EB72C
-sub_80EB72C: @ 80EB72C
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- bl Random
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _080EB778 @ =gEasyChatGroupSizes
- adds r1, r4, r1
- ldrb r1, [r1]
- bl __modsi3
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r4, 0
- beq _080EB758
- cmp r4, 0x15
- beq _080EB758
- cmp r4, 0x12
- beq _080EB758
- cmp r4, 0x13
- bne _080EB766
-_080EB758:
- ldr r1, _080EB77C @ =gEasyChatGroupWords
- lsls r0, r4, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r2, [r0]
-_080EB766:
- movs r0, 0x7F
- ands r0, r4
- lsls r0, 9
- ldr r1, _080EB780 @ =0x000001ff
- ands r2, r1
- orrs r0, r2
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080EB778: .4byte gEasyChatGroupSizes
-_080EB77C: .4byte gEasyChatGroupWords
-_080EB780: .4byte 0x000001ff
- thumb_func_end sub_80EB72C
-
- thumb_func_start sub_80EB784
-sub_80EB784: @ 80EB784
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_80EAD7C
- lsls r0, 24
- cmp r0, 0
- bne _080EB7A0
- ldr r0, _080EB79C @ =0x0000ffff
- b _080EB7BE
- .align 2, 0
-_080EB79C: .4byte 0x0000ffff
-_080EB7A0:
- cmp r4, 0
- beq _080EB7AE
- cmp r4, 0x14
- bne _080EB7B4
- bl sub_80EB960
- b _080EB7BA
-_080EB7AE:
- bl sub_80EB9D8
- b _080EB7BA
-_080EB7B4:
- adds r0, r4, 0
- bl sub_80EB72C
-_080EB7BA:
- lsls r0, 16
- lsrs r0, 16
-_080EB7BE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80EB784
-
- thumb_func_start sub_80EB7C4
-sub_80EB7C4: @ 80EB7C4
- push {r4,r5,lr}
- ldr r0, _080EB7D8 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0x1
- beq _080EB7F0
- cmp r0, 0x1
- bgt _080EB7DC
- cmp r0, 0
- beq _080EB7E6
- b _080EB82E
- .align 2, 0
-_080EB7D8: .4byte gSpecialVar_0x8004
-_080EB7DC:
- cmp r0, 0x2
- beq _080EB810
- cmp r0, 0x3
- beq _080EB818
- b _080EB82E
-_080EB7E6:
- ldr r5, _080EB7EC @ =gSaveBlock1 + 0x2B1C
- movs r2, 0x2
- b _080EB81C
- .align 2, 0
-_080EB7EC: .4byte gSaveBlock1 + 0x2B1C
-_080EB7F0:
- ldr r5, _080EB80C @ =gSaveBlock1 + 0x2B28
- adds r0, r5, 0
- movs r1, 0x3
- movs r2, 0x2
- movs r3, 0x14
- bl sub_80EB680
- lsls r0, 24
- cmp r0, 0
- beq _080EB81A
- movs r2, 0x2
- movs r3, 0x3
- b _080EB81E
- .align 2, 0
-_080EB80C: .4byte gSaveBlock1 + 0x2B28
-_080EB810:
- ldr r5, _080EB814 @ =gSaveBlock1 + 0x2B34
- b _080EB81A
- .align 2, 0
-_080EB814: .4byte gSaveBlock1 + 0x2B34
-_080EB818:
- ldr r5, _080EB834 @ =gSaveBlock1 + 0x2B40
-_080EB81A:
- movs r2, 0x3
-_080EB81C:
- movs r3, 0x2
-_080EB81E:
- ldr r4, _080EB838 @ =gStringVar4
- adds r0, r4, 0
- adds r1, r5, 0
- bl ConvertEasyChatWordsToString
- adds r0, r4, 0
- bl ShowFieldAutoScrollMessage
-_080EB82E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080EB834: .4byte gSaveBlock1 + 0x2B40
-_080EB838: .4byte gStringVar4
- thumb_func_end sub_80EB7C4
-
- thumb_func_start sub_80EB83C
-sub_80EB83C: @ 80EB83C
- push {lr}
- bl Random
- movs r1, 0x1
- ands r1, r0
- movs r0, 0xC
- cmp r1, 0
- beq _080EB84E
- movs r0, 0xD
-_080EB84E:
- bl sub_80EB784
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r0, _080EB864 @ =gStringVar2
- bl sub_80EB3FC
- pop {r0}
- bx r0
- .align 2, 0
-_080EB864: .4byte gStringVar2
- thumb_func_end sub_80EB83C
-
- thumb_func_start sub_80EB868
-sub_80EB868: @ 80EB868
- lsls r0, 24
- lsrs r2, r0, 27
- movs r1, 0xE0
- lsls r1, 19
- ands r1, r0
- lsrs r1, 24
- ldr r0, _080EB888 @ =gSaveBlock1
- ldr r3, _080EB88C @ =0x00002d8c
- adds r0, r3
- adds r2, r0
- ldrb r0, [r2]
- asrs r0, r1
- movs r1, 0x1
- ands r0, r1
- bx lr
- .align 2, 0
-_080EB888: .4byte gSaveBlock1
-_080EB88C: .4byte 0x00002d8c
- thumb_func_end sub_80EB868
-
- thumb_func_start sub_80EB890
-sub_80EB890: @ 80EB890
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x20
- bhi _080EB8B2
- lsrs r2, r0, 27
- movs r1, 0x7
- ands r1, r3
- ldr r0, _080EB8B8 @ =gSaveBlock1
- ldr r3, _080EB8BC @ =0x00002d8c
- adds r0, r3
- adds r2, r0
- movs r0, 0x1
- lsls r0, r1
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
-_080EB8B2:
- pop {r0}
- bx r0
- .align 2, 0
-_080EB8B8: .4byte gSaveBlock1
-_080EB8BC: .4byte 0x00002d8c
- thumb_func_end sub_80EB890
-
- thumb_func_start sub_80EB8C0
-sub_80EB8C0: @ 80EB8C0
- push {r4,r5,lr}
- movs r4, 0
- movs r5, 0
-_080EB8C6:
- adds r0, r4, 0
- bl sub_80EB868
- lsls r0, 24
- cmp r0, 0
- beq _080EB8D8
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_080EB8D8:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x20
- bls _080EB8C6
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80EB8C0
-
- thumb_func_start sub_80EB8EC
-sub_80EB8EC: @ 80EB8EC
- push {r4-r6,lr}
- bl sub_80EB8C0
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x21
- bne _080EB918
- b _080EB952
-_080EB8FC:
- adds r0, r5, 0
- bl sub_80EB890
- ldr r0, _080EB914 @ =0x000001ff
- ands r4, r0
- movs r1, 0xA0
- lsls r1, 6
- adds r0, r1, 0
- orrs r4, r0
- adds r0, r4, 0
- b _080EB954
- .align 2, 0
-_080EB914: .4byte 0x000001ff
-_080EB918:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x21
- subs r1, r4
- bl __modsi3
- lsls r0, 16
- lsrs r6, r0, 16
- movs r4, 0
-_080EB92E:
- lsls r0, r4, 24
- lsrs r5, r0, 24
- adds r0, r5, 0
- bl sub_80EB868
- lsls r0, 24
- cmp r0, 0
- bne _080EB948
- cmp r6, 0
- beq _080EB8FC
- subs r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_080EB948:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x20
- bls _080EB92E
-_080EB952:
- ldr r0, _080EB95C @ =0x0000ffff
-_080EB954:
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080EB95C: .4byte 0x0000ffff
- thumb_func_end sub_80EB8EC
-
- thumb_func_start sub_80EB960
-sub_80EB960: @ 80EB960
- push {r4,r5,lr}
- bl sub_80EB8C0
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _080EB984
- b _080EB9BA
-_080EB970:
- ldr r0, _080EB980 @ =0x000001ff
- ands r4, r0
- movs r1, 0xA0
- lsls r1, 6
- adds r0, r1, 0
- orrs r4, r0
- adds r0, r4, 0
- b _080EB9BC
- .align 2, 0
-_080EB980: .4byte 0x000001ff
-_080EB984:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r5, 0
- bl __umodsi3
- lsls r0, 16
- lsrs r5, r0, 16
- movs r4, 0
-_080EB998:
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_80EB868
- lsls r0, 24
- cmp r0, 0
- beq _080EB9B0
- cmp r5, 0
- beq _080EB970
- subs r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
-_080EB9B0:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x20
- bls _080EB998
-_080EB9BA:
- ldr r0, _080EB9C4 @ =0x0000ffff
-_080EB9BC:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080EB9C4: .4byte 0x0000ffff
- thumb_func_end sub_80EB960
-
- thumb_func_start sub_80EB9C8
-sub_80EB9C8: @ 80EB9C8
- push {lr}
- bl IsNationalPokedexEnabled
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_80EB9C8
-
- thumb_func_start sub_80EB9D8
-sub_80EB9D8: @ 80EB9D8
- push {r4-r7,lr}
- movs r0, 0
- bl sub_80EAE88
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- bne _080EB9F8
- b _080EBA46
-_080EB9EA:
- ldrh r1, [r5]
- ldr r0, _080EB9F4 @ =0x000001ff
- ands r0, r1
- b _080EBA48
- .align 2, 0
-_080EB9F4: .4byte 0x000001ff
-_080EB9F8:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r4, 0
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, _080EBA50 @ =gEasyChatGroupWords
- ldr r5, [r0]
- movs r6, 0
- ldr r0, _080EBA54 @ =gEasyChatGroupSizes
- ldrb r0, [r0]
- cmp r6, r0
- bcs _080EBA46
- adds r7, r0, 0
-_080EBA1A:
- ldrh r0, [r5]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0
- bl sub_8090D90
- lsls r0, 24
- cmp r0, 0
- beq _080EBA3A
- cmp r4, 0
- beq _080EB9EA
- subs r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
-_080EBA3A:
- adds r5, 0x2
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, r7
- bcc _080EBA1A
-_080EBA46:
- ldr r0, _080EBA58 @ =0x0000ffff
-_080EBA48:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080EBA50: .4byte gEasyChatGroupWords
-_080EBA54: .4byte gEasyChatGroupSizes
-_080EBA58: .4byte 0x0000ffff
- thumb_func_end sub_80EB9D8
-
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/egg_hatch.s b/asm/egg_hatch.s
index 95737cae6..90ae6aaf7 100644
--- a/asm/egg_hatch.s
+++ b/asm/egg_hatch.s
@@ -6,162 +6,6 @@
.text
- thumb_func_start CreatedHatchedMon
-CreatedHatchedMon: @ 80428A4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x48
- adds r6, r0, 0
- adds r5, r1, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- movs r4, 0
- add r7, sp, 0x18
- mov r0, sp
- adds r0, 0x31
- str r0, [sp, 0x38]
- mov r1, sp
- adds r1, 0x32
- str r1, [sp, 0x3C]
- add r0, sp, 0x30
- mov r9, r0
- adds r1, 0x1
- str r1, [sp, 0x40]
- mov r0, sp
- adds r0, 0x34
- str r0, [sp, 0x44]
-_080428DE:
- adds r1, r4, 0
- adds r1, 0xD
- adds r0, r6, 0
- bl GetMonData
- lsls r1, r4, 1
- add r1, sp
- adds r1, 0x10
- strh r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _080428DE
- adds r0, r6, 0
- movs r1, 0
- bl GetMonData
- mov r8, r0
- movs r4, 0
-_08042906:
- adds r1, r4, 0
- adds r1, 0x27
- adds r0, r6, 0
- bl GetMonData
- lsls r1, r4, 2
- adds r1, r7, r1
- str r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _08042906
- adds r0, r6, 0
- movs r1, 0x25
- bl GetMonData
- ldr r1, [sp, 0x38]
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x8
- bl GetMonData
- ldr r1, [sp, 0x3C]
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x22
- bl GetMonData
- str r0, [sp, 0x34]
- movs r0, 0x1
- str r0, [sp]
- mov r0, r8
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- adds r0, r5, 0
- mov r1, r10
- movs r2, 0x5
- movs r3, 0x20
- bl CreateMon
- movs r4, 0
-_0804295E:
- adds r1, r4, 0
- adds r1, 0xD
- lsls r0, r4, 1
- mov r2, sp
- adds r2, r0
- adds r2, 0x10
- adds r0, r5, 0
- bl SetMonData
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _0804295E
- movs r4, 0
-_0804297C:
- adds r1, r4, 0
- adds r1, 0x27
- lsls r2, r4, 2
- adds r2, r7, r2
- adds r0, r5, 0
- bl SetMonData
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _0804297C
- movs r0, 0x2
- mov r1, r9
- strb r0, [r1]
- adds r0, r5, 0
- movs r1, 0x3
- mov r2, r9
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0x25
- ldr r2, [sp, 0x38]
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0x8
- ldr r2, [sp, 0x3C]
- bl SetMonData
- movs r0, 0x78
- ldr r1, [sp, 0x40]
- strb r0, [r1]
- adds r0, r5, 0
- movs r1, 0x20
- ldr r2, [sp, 0x40]
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0x22
- ldr r2, [sp, 0x44]
- bl SetMonData
- adds r0, r6, 0
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- add sp, 0x48
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end CreatedHatchedMon
-
thumb_func_start AddHatchedMonToParty
AddHatchedMonToParty: @ 80429EC
push {r4-r6,lr}
@@ -229,7 +73,7 @@ AddHatchedMonToParty: @ 80429EC
movs r1, 0x23
bl SetMonData
adds r0, r5, 0
- bl sub_8040B1C
+ bl MonRestorePP
adds r0, r5, 0
bl CalculateMonStats
add sp, 0x14
diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s
index 6ecd355c3..404270195 100644
--- a/asm/evolution_scene.s
+++ b/asm/evolution_scene.s
@@ -1733,7 +1733,7 @@ _081127BE:
ldrh r1, [r4, 0xE]
ldrh r2, [r4, 0x10]
mov r0, r9
- bl sub_803FB68
+ bl EvolutionRenameMon
ldrh r0, [r4, 0x10]
bl SpeciesToNationalPokedexNum
lsls r0, 16
@@ -2408,7 +2408,7 @@ _08112DCC:
lsls r0, 16
lsrs r4, r0, 16
adds r0, r4, 0
- bl sub_8040A00
+ bl IsHMMove2
cmp r0, 0
beq _08112E24
ldr r0, _08112E10 @ =gUnknown_08400F8C
@@ -3041,7 +3041,7 @@ _08113316:
ldrh r1, [r4, 0xE]
ldrh r2, [r4, 0x10]
mov r0, r8
- bl sub_803FB68
+ bl EvolutionRenameMon
ldrh r0, [r4, 0x10]
bl SpeciesToNationalPokedexNum
lsls r0, 16
@@ -3701,7 +3701,7 @@ _08113910:
lsls r0, 16
lsrs r4, r0, 16
adds r0, r4, 0
- bl sub_8040A00
+ bl IsHMMove2
cmp r0, 0
beq _08113970
ldr r0, _0811395C @ =gUnknown_08400F8C
diff --git a/asm/field_specials.s b/asm/field_specials.s
index e97bdfe80..684ab248b 100644
--- a/asm/field_specials.s
+++ b/asm/field_specials.s
@@ -5,375 +5,6 @@
.syntax unified
.text
-
- thumb_func_start sub_810D6A4
-sub_810D6A4: @ 810D6A4
- push {lr}
- ldr r0, _0810D6B4 @ =sub_8145D88
- bl SetMainCallback2
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .align 2, 0
-_0810D6B4: .4byte sub_8145D88
- thumb_func_end sub_810D6A4
-
- thumb_func_start sub_810D6B8
-sub_810D6B8: @ 810D6B8
- push {lr}
- ldr r0, _0810D6D0 @ =gMain
- ldr r1, _0810D6D4 @ =c2_exit_to_overworld_2_switch
- str r1, [r0, 0x8]
- ldr r0, _0810D6D8 @ =CB2_ViewWallClock
- bl SetMainCallback2
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .align 2, 0
-_0810D6D0: .4byte gMain
-_0810D6D4: .4byte c2_exit_to_overworld_2_switch
-_0810D6D8: .4byte CB2_ViewWallClock
- thumb_func_end sub_810D6B8
-
- thumb_func_start ResetCyclingRoadChallengeData
-ResetCyclingRoadChallengeData: @ 810D6DC
- ldr r0, _0810D6F0 @ =gUnknown_02039250
- movs r1, 0
- strb r1, [r0]
- ldr r0, _0810D6F4 @ =gUnknown_02039251
- strb r1, [r0]
- ldr r1, _0810D6F8 @ =gUnknown_02039254
- movs r0, 0
- str r0, [r1]
- bx lr
- .align 2, 0
-_0810D6F0: .4byte gUnknown_02039250
-_0810D6F4: .4byte gUnknown_02039251
-_0810D6F8: .4byte gUnknown_02039254
- thumb_func_end ResetCyclingRoadChallengeData
-
- thumb_func_start BeginCyclingRoadChallenge
-BeginCyclingRoadChallenge: @ 810D6FC
- ldr r1, _0810D714 @ =gUnknown_02039250
- movs r0, 0x1
- strb r0, [r1]
- ldr r1, _0810D718 @ =gUnknown_02039251
- movs r0, 0
- strb r0, [r1]
- ldr r1, _0810D71C @ =gUnknown_02039254
- ldr r0, _0810D720 @ =gMain
- ldr r0, [r0, 0x20]
- str r0, [r1]
- bx lr
- .align 2, 0
-_0810D714: .4byte gUnknown_02039250
-_0810D718: .4byte gUnknown_02039251
-_0810D71C: .4byte gUnknown_02039254
-_0810D720: .4byte gMain
- thumb_func_end BeginCyclingRoadChallenge
-
- thumb_func_start GetPlayerAvatarBike
-GetPlayerAvatarBike: @ 810D724
- push {lr}
- movs r0, 0x4
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _0810D736
- movs r0, 0x1
- b _0810D748
-_0810D736:
- movs r0, 0x2
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- bne _0810D746
- movs r0, 0
- b _0810D748
-_0810D746:
- movs r0, 0x2
-_0810D748:
- pop {r1}
- bx r1
- thumb_func_end GetPlayerAvatarBike
-
- thumb_func_start DetermineCyclingRoadResults
-DetermineCyclingRoadResults: @ 810D74C
- push {r4-r7,lr}
- adds r7, r0, 0
- lsls r1, 24
- lsrs r6, r1, 24
- cmp r6, 0x63
- bhi _0810D778
- ldr r4, _0810D770 @ =gStringVar1
- adds r0, r4, 0
- adds r1, r6, 0
- movs r2, 0
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r1, _0810D774 @ =gOtherText_Times
- adds r0, r4, 0
- bl StringAppend
- b _0810D780
- .align 2, 0
-_0810D770: .4byte gStringVar1
-_0810D774: .4byte gOtherText_Times
-_0810D778:
- ldr r0, _0810D7CC @ =gStringVar1
- ldr r1, _0810D7D0 @ =gOtherText_99Times
- bl StringCopy
-_0810D780:
- ldr r0, _0810D7D4 @ =0x00000e0f
- cmp r7, r0
- bhi _0810D7E0
- ldr r4, _0810D7D8 @ =gStringVar2
- adds r0, r7, 0
- movs r1, 0x3C
- bl __udivsi3
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- movs r0, 0xAD
- strb r0, [r4, 0x2]
- adds r5, r4, 0x3
- adds r0, r7, 0
- movs r1, 0x3C
- bl __umodsi3
- movs r1, 0x64
- muls r0, r1
- movs r1, 0x3C
- bl __udivsi3
- adds r1, r0, 0
- adds r0, r5, 0
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r1, _0810D7DC @ =gOtherText_Seconds
- adds r0, r4, 0
- bl StringAppend
- b _0810D7E8
- .align 2, 0
-_0810D7CC: .4byte gStringVar1
-_0810D7D0: .4byte gOtherText_99Times
-_0810D7D4: .4byte 0x00000e0f
-_0810D7D8: .4byte gStringVar2
-_0810D7DC: .4byte gOtherText_Seconds
-_0810D7E0:
- ldr r0, _0810D7F4 @ =gStringVar2
- ldr r1, _0810D7F8 @ =gOtherText_1Minute
- bl StringCopy
-_0810D7E8:
- movs r4, 0
- cmp r6, 0
- bne _0810D7FC
- movs r4, 0x5
- b _0810D81A
- .align 2, 0
-_0810D7F4: .4byte gStringVar2
-_0810D7F8: .4byte gOtherText_1Minute
-_0810D7FC:
- cmp r6, 0x3
- bhi _0810D804
- movs r4, 0x4
- b _0810D81A
-_0810D804:
- cmp r6, 0x9
- bhi _0810D80C
- movs r4, 0x3
- b _0810D81A
-_0810D80C:
- cmp r6, 0x13
- bhi _0810D814
- movs r4, 0x2
- b _0810D81A
-_0810D814:
- cmp r6, 0x63
- bhi _0810D81A
- movs r4, 0x1
-_0810D81A:
- adds r0, r7, 0
- movs r1, 0x3C
- bl __udivsi3
- cmp r0, 0xA
- bhi _0810D82A
- adds r0, r4, 0x5
- b _0810D848
-_0810D82A:
- cmp r0, 0xF
- bhi _0810D832
- adds r0, r4, 0x4
- b _0810D848
-_0810D832:
- cmp r0, 0x14
- bhi _0810D83A
- adds r0, r4, 0x3
- b _0810D848
-_0810D83A:
- cmp r0, 0x28
- bhi _0810D842
- adds r0, r4, 0x2
- b _0810D848
-_0810D842:
- cmp r0, 0x3B
- bhi _0810D84C
- adds r0, r4, 0x1
-_0810D848:
- lsls r0, 24
- lsrs r4, r0, 24
-_0810D84C:
- ldr r0, _0810D858 @ =gScriptResult
- strh r4, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0810D858: .4byte gScriptResult
- thumb_func_end DetermineCyclingRoadResults
-
- thumb_func_start FinishCyclingRoadChallenge
-FinishCyclingRoadChallenge: @ 810D85C
- push {r4,r5,lr}
- ldr r0, _0810D880 @ =gMain
- ldr r1, _0810D884 @ =gUnknown_02039254
- ldr r4, [r0, 0x20]
- ldr r0, [r1]
- subs r4, r0
- ldr r5, _0810D888 @ =gUnknown_02039251
- ldrb r1, [r5]
- adds r0, r4, 0
- bl DetermineCyclingRoadResults
- ldrb r1, [r5]
- adds r0, r4, 0
- bl RecordCyclingRoadResults
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0810D880: .4byte gMain
-_0810D884: .4byte gUnknown_02039254
-_0810D888: .4byte gUnknown_02039251
- thumb_func_end FinishCyclingRoadChallenge
-
- thumb_func_start RecordCyclingRoadResults
-RecordCyclingRoadResults: @ 810D88C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- ldr r6, _0810D8E0 @ =0x00004028
- adds r0, r6, 0
- bl VarGet
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r7, _0810D8E4 @ =0x00004029
- adds r0, r7, 0
- bl VarGet
- lsls r0, 16
- adds r4, r0
- cmp r4, r5
- bhi _0810D8BC
- cmp r4, 0
- bne _0810D8D6
-_0810D8BC:
- lsls r1, r5, 16
- lsrs r1, 16
- adds r0, r6, 0
- bl VarSet
- lsrs r1, r5, 16
- adds r0, r7, 0
- bl VarSet
- ldr r0, _0810D8E8 @ =0x00004027
- mov r1, r8
- bl VarSet
-_0810D8D6:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0810D8E0: .4byte 0x00004028
-_0810D8E4: .4byte 0x00004029
-_0810D8E8: .4byte 0x00004027
- thumb_func_end RecordCyclingRoadResults
-
- thumb_func_start GetRecordedCyclingRoadResults
-GetRecordedCyclingRoadResults: @ 810D8EC
- push {r4,lr}
- ldr r0, _0810D920 @ =0x00004028
- bl VarGet
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _0810D924 @ =0x00004029
- bl VarGet
- lsls r0, 16
- adds r4, r0
- cmp r4, 0
- beq _0810D92C
- ldr r0, _0810D928 @ =0x00004027
- bl VarGet
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl DetermineCyclingRoadResults
- movs r0, 0x1
- b _0810D92E
- .align 2, 0
-_0810D920: .4byte 0x00004028
-_0810D924: .4byte 0x00004029
-_0810D928: .4byte 0x00004027
-_0810D92C:
- movs r0, 0
-_0810D92E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetRecordedCyclingRoadResults
-
- thumb_func_start UpdateCyclingRoadState
-UpdateCyclingRoadState: @ 810D934
- push {r4,lr}
- ldr r0, _0810D974 @ =gUnknown_020297F0
- ldrh r1, [r0]
- ldr r0, _0810D978 @ =0x00000c1d
- cmp r1, r0
- beq _0810D96C
- ldr r4, _0810D97C @ =0x000040a9
- adds r0, r4, 0
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- beq _0810D95E
- adds r0, r4, 0
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x3
- bne _0810D96C
-_0810D95E:
- adds r0, r4, 0
- movs r1, 0
- bl VarSet
- movs r0, 0
- bl sav1_set_battle_music_maybe
-_0810D96C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0810D974: .4byte gUnknown_020297F0
-_0810D978: .4byte 0x00000c1d
-_0810D97C: .4byte 0x000040a9
- thumb_func_end UpdateCyclingRoadState
thumb_func_start SetSSTidalFlag
SetSSTidalFlag: @ 810D980
diff --git a/asm/learn_move.s b/asm/learn_move.s
index d10cc5cd5..84d244fe8 100644
--- a/asm/learn_move.s
+++ b/asm/learn_move.s
@@ -1815,7 +1815,7 @@ sub_8133558: @ 8133558
ldr r2, _081335FC @ =gPlayerParty
adds r0, r2
adds r1, 0x20
- bl sub_80403CC
+ bl GetMoveRelearnerMoves
ldr r1, [r5]
strb r0, [r1, 0x1A]
movs r4, 0
diff --git a/asm/mail_data.s b/asm/mail_data.s
deleted file mode 100644
index 4dff0a12b..000000000
--- a/asm/mail_data.s
+++ /dev/null
@@ -1,574 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80A2B18
-sub_80A2B18: @ 80A2B18
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _080A2B3C @ =gSaveBlock1 + 0x2B4C
-_080A2B1E:
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- adds r0, r5
- bl sub_80A2B40
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _080A2B1E
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080A2B3C: .4byte gSaveBlock1 + 0x2B4C
- thumb_func_end sub_80A2B18
-
- thumb_func_start sub_80A2B40
-sub_80A2B40: @ 80A2B40
- push {r4-r6,lr}
- adds r3, r0, 0
- ldr r0, _080A2B90 @ =0x0000ffff
- adds r4, r0, 0
- adds r1, r3, 0
- movs r2, 0x8
-_080A2B4C:
- ldrh r0, [r1]
- orrs r0, r4
- strh r0, [r1]
- adds r1, 0x2
- subs r2, 0x1
- cmp r2, 0
- bge _080A2B4C
- movs r2, 0
- adds r6, r3, 0
- adds r6, 0x1A
- adds r4, r3, 0
- adds r4, 0x12
- movs r5, 0xFF
-_080A2B66:
- adds r1, r4, r2
- ldrb r0, [r1]
- orrs r0, r5
- strb r0, [r1]
- adds r2, 0x1
- cmp r2, 0x7
- ble _080A2B66
- adds r1, r6, 0
- movs r2, 0
- adds r0, r1, 0x3
-_080A2B7A:
- strb r2, [r0]
- subs r0, 0x1
- cmp r0, r1
- bge _080A2B7A
- movs r1, 0
- movs r0, 0x1
- strh r0, [r3, 0x1E]
- strh r1, [r3, 0x20]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080A2B90: .4byte 0x0000ffff
- thumb_func_end sub_80A2B40
-
- thumb_func_start sub_80A2B94
-sub_80A2B94: @ 80A2B94
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl itemid_is_mail
- lsls r0, 24
- cmp r0, 0
- beq _080A2BBC
- adds r0, r4, 0
- movs r1, 0x40
- bl GetMonData
- cmp r0, 0xFF
- beq _080A2BBC
- movs r0, 0x1
- b _080A2BBE
-_080A2BBC:
- movs r0, 0
-_080A2BBE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80A2B94
-
- thumb_func_start sub_80A2BC4
-sub_80A2BC4: @ 80A2BC4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- adds r7, r0, 0
- lsls r1, 16
- lsrs r0, r1, 16
- str r0, [sp, 0x8]
- mov r0, sp
- movs r2, 0
- ldrb r3, [r0, 0x8]
- strb r3, [r0]
- lsrs r1, 24
- strb r1, [r0, 0x1]
- add r3, sp, 0x4
- strb r2, [r3]
- mov r10, r3
- ldr r4, _080A2D00 @ =gSaveBlock1
- mov r9, r4
- mov r8, r3
- adds r2, r3, 0
-_080A2BF2:
- ldrb r1, [r2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldr r5, _080A2D04 @ =0x00002b6c
- adds r0, r5
- ldrh r0, [r0]
- cmp r0, 0
- beq _080A2C08
- b _080A2D24
-_080A2C08:
- movs r3, 0
- ldr r0, _080A2D08 @ =gSaveBlock2
- mov r12, r0
- mov r4, r10
- ldr r6, _080A2D0C @ =gSaveBlock1 + 0x2B4C
- ldr r1, _080A2D10 @ =0x0000ffff
- adds r5, r1, 0
-_080A2C16:
- lsls r2, r3, 1
- ldrb r1, [r4]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r2, r0
- adds r2, r6
- ldrh r0, [r2]
- orrs r0, r5
- strh r0, [r2]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x8
- bls _080A2C16
- movs r3, 0
- mov r2, r10
- ldr r4, _080A2D14 @ =gSaveBlock1 + 0x2B5E
-_080A2C3A:
- ldrb r1, [r2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r3, r0
- adds r0, r4
- mov r5, r12
- adds r1, r3, r5
- ldrb r1, [r1]
- strb r1, [r0]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x6
- bls _080A2C3A
- mov r0, r8
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r3, r0
- ldr r1, _080A2D14 @ =gSaveBlock1 + 0x2B5E
- adds r0, r1
- movs r1, 0xFF
- strb r1, [r0]
- mov r2, r8
- ldrb r1, [r2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r3, _080A2D14 @ =gSaveBlock1 + 0x2B5E
- adds r0, r3
- movs r1, 0
- bl PadNameString
- movs r3, 0
- mov r2, r10
- ldr r5, _080A2D18 @ =gSaveBlock1 + 0x2B66
- ldr r4, _080A2D1C @ =gSaveBlock2 + 0xA
-_080A2C88:
- ldrb r1, [r2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r3, r0
- adds r0, r5
- adds r1, r3, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _080A2C88
- adds r0, r7, 0
- movs r1, 0xB
- bl GetBoxMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r7, 0
- movs r1, 0
- bl GetBoxMonData
- adds r1, r0, 0
- adds r0, r4, 0
- bl sub_80A2D44
- mov r4, r8
- ldrb r2, [r4]
- lsls r1, r2, 3
- adds r1, r2
- lsls r1, 2
- add r1, r9
- ldr r5, _080A2D20 @ =0x00002b6a
- adds r1, r5
- strh r0, [r1]
- ldrb r1, [r4]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldr r1, _080A2D04 @ =0x00002b6c
- adds r0, r1
- mov r2, sp
- ldrh r2, [r2, 0x8]
- strh r2, [r0]
- adds r0, r7, 0
- movs r1, 0x40
- mov r2, r8
- bl SetMonData
- adds r0, r7, 0
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- ldrb r0, [r4]
- b _080A2D32
- .align 2, 0
-_080A2D00: .4byte gSaveBlock1
-_080A2D04: .4byte 0x00002b6c
-_080A2D08: .4byte gSaveBlock2
-_080A2D0C: .4byte gSaveBlock1 + 0x2B4C
-_080A2D10: .4byte 0x0000ffff
-_080A2D14: .4byte gSaveBlock1 + 0x2B5E
-_080A2D18: .4byte gSaveBlock1 + 0x2B66
-_080A2D1C: .4byte gSaveBlock2 + 0xA
-_080A2D20: .4byte 0x00002b6a
-_080A2D24:
- adds r0, r1, 0x1
- strb r0, [r3]
- ldrb r0, [r2]
- cmp r0, 0x5
- bhi _080A2D30
- b _080A2BF2
-_080A2D30:
- movs r0, 0xFF
-_080A2D32:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80A2BC4
-
- thumb_func_start sub_80A2D44
-sub_80A2D44: @ 80A2D44
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xC9
- bne _080A2D5C
- adds r0, r1, 0
- bl sub_809D474
- lsls r0, 16
- ldr r1, _080A2D60 @ =0x75300000
- adds r0, r1
- lsrs r0, 16
-_080A2D5C:
- pop {r1}
- bx r1
- .align 2, 0
-_080A2D60: .4byte 0x75300000
- thumb_func_end sub_80A2D44
-
- thumb_func_start sub_80A2D64
-sub_80A2D64: @ 80A2D64
- push {lr}
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r0, _080A2D7C @ =0xffff8ad0
- adds r2, r3, r0
- lsls r0, r2, 16
- lsrs r0, 16
- cmp r0, 0x1B
- bhi _080A2D80
- movs r0, 0xC9
- strh r2, [r1]
- b _080A2D82
- .align 2, 0
-_080A2D7C: .4byte 0xffff8ad0
-_080A2D80:
- adds r0, r3, 0
-_080A2D82:
- pop {r1}
- bx r1
- thumb_func_end sub_80A2D64
-
- thumb_func_start sub_80A2D88
-sub_80A2D88: @ 80A2D88
- push {r4-r7,lr}
- sub sp, 0x8
- adds r6, r0, 0
- adds r7, r1, 0
- ldrh r5, [r7, 0x20]
- adds r1, r5, 0
- bl sub_80A2BC4
- add r4, sp, 0x4
- strb r0, [r4]
- ldrb r2, [r4]
- cmp r2, 0xFF
- beq _080A2DE8
- ldr r0, _080A2DE0 @ =gSaveBlock1
- lsls r1, r2, 3
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldr r0, _080A2DE4 @ =0x00002b4c
- adds r1, r0
- adds r0, r7, 0
- ldm r0!, {r2,r3,r7}
- stm r1!, {r2,r3,r7}
- ldm r0!, {r2,r3,r7}
- stm r1!, {r2,r3,r7}
- ldm r0!, {r2,r3,r7}
- stm r1!, {r2,r3,r7}
- adds r0, r6, 0
- movs r1, 0x40
- adds r2, r4, 0
- bl SetMonData
- mov r0, sp
- strb r5, [r0]
- mov r1, sp
- lsrs r0, r5, 8
- strb r0, [r1, 0x1]
- adds r0, r6, 0
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- ldrb r0, [r4]
- b _080A2DEA
- .align 2, 0
-_080A2DE0: .4byte gSaveBlock1
-_080A2DE4: .4byte 0x00002b4c
-_080A2DE8:
- movs r0, 0xFF
-_080A2DEA:
- add sp, 0x8
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80A2D88
-
- thumb_func_start unref_sub_80A2DF4
-unref_sub_80A2DF4: @ 80A2DF4
- movs r0, 0
- bx lr
- thumb_func_end unref_sub_80A2DF4
-
- thumb_func_start sub_80A2DF8
-sub_80A2DF8: @ 80A2DF8
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- bl sub_80A2B94
- lsls r0, 24
- cmp r0, 0
- beq _080A2E46
- adds r0, r4, 0
- movs r1, 0x40
- bl GetMonData
- add r2, sp, 0x4
- strb r0, [r2]
- ldr r3, _080A2E50 @ =gSaveBlock1
- ldrb r1, [r2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldr r1, _080A2E54 @ =0x00002b6c
- adds r0, r1
- movs r3, 0
- movs r1, 0
- strh r1, [r0]
- movs r0, 0xFF
- strb r0, [r2]
- mov r0, sp
- strb r3, [r0]
- strb r3, [r0, 0x1]
- adds r0, r4, 0
- movs r1, 0x40
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
-_080A2E46:
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080A2E50: .4byte gSaveBlock1
-_080A2E54: .4byte 0x00002b6c
- thumb_func_end sub_80A2DF8
-
- thumb_func_start unref_sub_80A2E58
-unref_sub_80A2E58: @ 80A2E58
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080A2E70 @ =gSaveBlock1
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldr r0, _080A2E74 @ =0x00002b6c
- adds r1, r0
- movs r0, 0
- strh r0, [r1]
- bx lr
- .align 2, 0
-_080A2E70: .4byte gSaveBlock1
-_080A2E74: .4byte 0x00002b6c
- thumb_func_end unref_sub_80A2E58
-
- thumb_func_start sub_80A2E78
-sub_80A2E78: @ 80A2E78
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0xC
- adds r5, r0, 0
- mov r0, sp
- movs r1, 0
- strb r1, [r0]
- strb r1, [r0, 0x1]
- add r1, sp, 0x4
- movs r0, 0xFF
- strb r0, [r1]
- movs r7, 0x6
- mov r9, r1
- ldr r0, _080A2F04 @ =gSaveBlock1
- mov r8, r0
- ldr r2, _080A2F08 @ =0x00002b4c
- add r2, r8
-_080A2E9E:
- lsls r0, r7, 3
- adds r0, r7
- lsls r4, r0, 2
- mov r1, r8
- adds r0, r4, r1
- ldr r3, _080A2F0C @ =0x00002b6c
- adds r0, r3
- ldrh r6, [r0]
- cmp r6, 0
- bne _080A2F10
- adds r4, r2
- adds r0, r5, 0
- movs r1, 0x40
- str r2, [sp, 0x8]
- bl GetMonData
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r2, [sp, 0x8]
- adds r1, r2
- ldm r1!, {r0,r2,r3}
- stm r4!, {r0,r2,r3}
- ldm r1!, {r0,r2,r3}
- stm r4!, {r0,r2,r3}
- ldm r1!, {r0,r2,r3}
- stm r4!, {r0,r2,r3}
- adds r0, r5, 0
- movs r1, 0x40
- bl GetMonData
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- add r1, r8
- ldr r0, _080A2F0C @ =0x00002b6c
- adds r1, r0
- strh r6, [r1]
- adds r0, r5, 0
- movs r1, 0x40
- mov r2, r9
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- adds r0, r7, 0
- b _080A2F1C
- .align 2, 0
-_080A2F04: .4byte gSaveBlock1
-_080A2F08: .4byte 0x00002b4c
-_080A2F0C: .4byte 0x00002b6c
-_080A2F10:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0xF
- bls _080A2E9E
- movs r0, 0xFF
-_080A2F1C:
- add sp, 0xC
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80A2E78
-
- thumb_func_start itemid_is_mail
-itemid_is_mail: @ 80A2F2C
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x84
- bgt _080A2F3E
- cmp r0, 0x79
- blt _080A2F3E
- movs r0, 0x1
- b _080A2F40
-_080A2F3E:
- movs r0, 0
-_080A2F40:
- pop {r1}
- bx r1
- thumb_func_end itemid_is_mail
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokedex_cry_screen.s b/asm/pokedex_cry_screen.s
index bded77228..da52c84d4 100644
--- a/asm/pokedex_cry_screen.s
+++ b/asm/pokedex_cry_screen.s
@@ -737,154 +737,7 @@ _0811A3C4:
_0811A3C8: .4byte REG_BG3HOFS
thumb_func_end sub_811A350
- thumb_func_start ShowPokedexCryScreen
-ShowPokedexCryScreen: @ 811A3CC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r4, r0, 0
- movs r0, 0
- str r0, [sp]
- ldr r0, _0811A3F4 @ =gUnknown_03005E98
- ldrb r1, [r0]
- mov r10, r0
- cmp r1, 0x1
- beq _0811A42C
- cmp r1, 0x1
- bgt _0811A3F8
- cmp r1, 0
- beq _0811A3FE
- b _0811A4D6
- .align 2, 0
-_0811A3F4: .4byte gUnknown_03005E98
-_0811A3F8:
- cmp r1, 0x2
- beq _0811A494
- b _0811A4D6
-_0811A3FE:
- ldr r0, _0811A424 @ =gUnknown_083FAF3C
- ldrh r1, [r4]
- movs r2, 0xC0
- lsls r2, 19
- adds r1, r2
- bl LZ77UnCompVram
- ldr r0, _0811A428 @ =gUnknown_083FAF1C
- ldrb r1, [r4, 0x3]
- lsls r1, 4
- movs r2, 0x20
- bl LoadPalette
- mov r1, r10
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0811A4D6
- .align 2, 0
-_0811A424: .4byte gUnknown_083FAF3C
-_0811A428: .4byte gUnknown_083FAF1C
-_0811A42C:
- ldrb r0, [r4, 0x2]
- lsls r0, 11
- movs r1, 0xC0
- lsls r1, 19
- adds r0, r1
- mov r8, r0
- ldrh r0, [r4]
- lsls r0, 18
- lsrs r0, 23
- mov r12, r0
- movs r5, 0
- ldr r2, _0811A490 @ =gUnknown_083FAE7C
- mov r9, r2
-_0811A446:
- movs r3, 0
- lsls r0, r5, 2
- adds r7, r5, 0x1
- adds r0, r5
- lsls r6, r0, 1
-_0811A450:
- ldrb r0, [r4, 0x5]
- adds r0, r5, r0
- ldrb r2, [r4, 0x4]
- adds r2, r3, r2
- lsls r2, 1
- lsls r0, 6
- adds r2, r0
- add r2, r8
- adds r1, r6, r3
- lsls r1, 1
- add r1, r9
- ldrb r0, [r4, 0x3]
- lsls r0, 12
- ldrh r1, [r1]
- orrs r0, r1
- add r0, r12
- strh r0, [r2]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x9
- bls _0811A450
- lsls r0, r7, 24
- lsrs r5, r0, 24
- cmp r5, 0x7
- bls _0811A446
- mov r3, r10
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- b _0811A4D6
- .align 2, 0
-_0811A490: .4byte gUnknown_083FAE7C
-_0811A494:
- ldr r0, _0811A4E8 @ =gCryMeterNeedleSpriteSheets
- bl LoadSpriteSheets
- ldr r0, _0811A4EC @ =gCryMeterNeedleSpritePalettes
- bl LoadSpritePalettes
- ldr r0, _0811A4F0 @ =gSpriteTemplate_83FB774
- ldrb r1, [r4, 0x4]
- lsls r1, 19
- movs r2, 0xA0
- lsls r2, 14
- adds r1, r2
- asrs r1, 16
- ldrb r2, [r4, 0x5]
- lsls r2, 19
- movs r3, 0xE0
- lsls r3, 14
- adds r2, r3
- asrs r2, 16
- movs r3, 0x1
- bl CreateSprite
- ldr r1, _0811A4F4 @ =0x0201c800
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0
- strh r0, [r1, 0x4]
- movs r0, 0x20
- strb r0, [r1]
- strb r0, [r1, 0x1]
- strb r2, [r1, 0x2]
- movs r0, 0x1
- str r0, [sp]
-_0811A4D6:
- ldr r0, [sp]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811A4E8: .4byte gCryMeterNeedleSpriteSheets
-_0811A4EC: .4byte gCryMeterNeedleSpritePalettes
-_0811A4F0: .4byte gSpriteTemplate_83FB774
-_0811A4F4: .4byte 0x0201c800
- thumb_func_end ShowPokedexCryScreen
+.section .text_811A4F8
thumb_func_start DestroyCryMeterNeedleSprite
DestroyCryMeterNeedleSprite: @ 811A4F8
diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s
deleted file mode 100644
index d4bb815b3..000000000
--- a/asm/pokemon_3.s
+++ /dev/null
@@ -1,2826 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start unref_sub_803F938
-unref_sub_803F938: @ 803F938
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- adds r5, r1, 0
- mov r10, r2
- lsls r0, 16
- movs r1, 0x9A
- lsls r1, 17
- cmp r0, r1
- bne _0803FA42
- ldr r1, _0803FA04 @ =gUnknown_081FAF4C
- ldr r0, [r1]
- cmp r10, r0
- beq _0803FA42
- ldr r0, [r1, 0x8]
- cmp r10, r0
- beq _0803FA42
- movs r6, 0
-_0803F962:
- lsls r3, r6, 3
- adds r3, r6
- lsls r3, 2
- ldr r0, _0803FA08 @ =gSpindaSpotGraphics
- adds r4, r3, r0
- ldrb r1, [r4]
- adds r1, 0xF8
- movs r2, 0xF
- adds r0, r5, 0
- ands r0, r2
- adds r1, r0
- lsls r1, 24
- lsrs r1, 24
- mov r12, r1
- ldrb r1, [r4, 0x1]
- adds r1, 0xF8
- movs r0, 0xF0
- ands r0, r5
- lsrs r0, 4
- adds r1, r0
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0
- lsrs r5, 8
- str r5, [sp, 0x4]
- adds r6, 0x1
- str r6, [sp]
- mov r9, r3
-_0803F99A:
- lsls r0, r2, 1
- add r0, r9
- ldr r3, _0803FA0C @ =gSpindaSpotGraphics + 0x2
- adds r0, r3
- ldrh r3, [r0]
- mov r4, r12
- adds r0, r4, 0
- adds r0, 0x10
- adds r7, r1, 0x1
- adds r2, 0x1
- mov r8, r2
- cmp r4, r0
- bge _0803FA30
- lsrs r0, r1, 3
- lsls r6, r0, 8
- movs r0, 0x7
- ands r1, r0
- lsls r5, r1, 2
-_0803F9BE:
- adds r0, r4, 0
- cmp r4, 0
- bge _0803F9C6
- adds r0, r4, 0x7
-_0803F9C6:
- asrs r0, 3
- lsls r2, r0, 5
- add r2, r10
- lsls r0, 3
- subs r0, r4, r0
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- adds r2, r0
- adds r2, r6
- adds r2, r5
- movs r1, 0x1
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0803FA24
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _0803FA10
- ldrb r1, [r2]
- movs r0, 0xF0
- ands r0, r1
- subs r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x20
- bhi _0803FA24
- adds r0, r1, 0
- adds r0, 0x40
- b _0803FA22
- .align 2, 0
-_0803FA04: .4byte gUnknown_081FAF4C
-_0803FA08: .4byte gSpindaSpotGraphics
-_0803FA0C: .4byte gSpindaSpotGraphics + 0x2
-_0803FA10:
- ldrb r1, [r2]
- movs r0, 0xF
- ands r0, r1
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bhi _0803FA24
- adds r0, r1, 0x4
-_0803FA22:
- strb r0, [r2]
-_0803FA24:
- asrs r3, 1
- adds r4, 0x1
- mov r0, r12
- adds r0, 0x10
- cmp r4, r0
- blt _0803F9BE
-_0803FA30:
- lsls r0, r7, 24
- lsrs r1, r0, 24
- mov r2, r8
- cmp r2, 0xF
- ble _0803F99A
- ldr r5, [sp, 0x4]
- ldr r6, [sp]
- cmp r6, 0x3
- ble _0803F962
-_0803FA42:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end unref_sub_803F938
-
- thumb_func_start DrawSpindaSpots
-DrawSpindaSpots: @ 803FA54
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- adds r5, r1, 0
- str r2, [sp]
- lsls r0, 16
- lsls r3, 24
- lsrs r3, 24
- movs r1, 0x9A
- lsls r1, 17
- cmp r0, r1
- bne _0803FB56
- cmp r3, 0
- beq _0803FB56
- movs r6, 0
-_0803FA78:
- lsls r3, r6, 3
- adds r3, r6
- lsls r3, 2
- ldr r0, _0803FB1C @ =gSpindaSpotGraphics
- adds r4, r3, r0
- ldrb r1, [r4]
- adds r1, 0xF8
- movs r2, 0xF
- adds r0, r5, 0
- ands r0, r2
- adds r1, r0
- lsls r1, 24
- lsrs r1, 24
- mov r12, r1
- ldrb r1, [r4, 0x1]
- adds r1, 0xF8
- movs r0, 0xF0
- ands r0, r5
- lsrs r0, 4
- adds r1, r0
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0
- lsrs r5, 8
- str r5, [sp, 0x4]
- adds r6, 0x1
- mov r10, r6
- mov r9, r3
-_0803FAB0:
- lsls r0, r2, 1
- add r0, r9
- ldr r3, _0803FB20 @ =gSpindaSpotGraphics + 0x2
- adds r0, r3
- ldrh r3, [r0]
- mov r4, r12
- adds r0, r4, 0
- adds r0, 0x10
- adds r7, r1, 0x1
- adds r2, 0x1
- mov r8, r2
- cmp r4, r0
- bge _0803FB44
- lsrs r0, r1, 3
- lsls r6, r0, 8
- movs r0, 0x7
- ands r1, r0
- lsls r5, r1, 2
-_0803FAD4:
- adds r0, r4, 0
- cmp r4, 0
- bge _0803FADC
- adds r0, r4, 0x7
-_0803FADC:
- asrs r0, 3
- lsls r2, r0, 5
- ldr r1, [sp]
- adds r2, r1, r2
- lsls r0, 3
- subs r0, r4, r0
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- adds r2, r0
- adds r2, r6
- adds r2, r5
- movs r1, 0x1
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0803FB38
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _0803FB24
- ldrb r1, [r2]
- movs r0, 0xF0
- ands r0, r1
- subs r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x20
- bhi _0803FB38
- adds r0, r1, 0
- adds r0, 0x40
- b _0803FB36
- .align 2, 0
-_0803FB1C: .4byte gSpindaSpotGraphics
-_0803FB20: .4byte gSpindaSpotGraphics + 0x2
-_0803FB24:
- ldrb r1, [r2]
- movs r0, 0xF
- ands r0, r1
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bhi _0803FB38
- adds r0, r1, 0x4
-_0803FB36:
- strb r0, [r2]
-_0803FB38:
- asrs r3, 1
- adds r4, 0x1
- mov r0, r12
- adds r0, 0x10
- cmp r4, r0
- blt _0803FAD4
-_0803FB44:
- lsls r0, r7, 24
- lsrs r1, r0, 24
- mov r2, r8
- cmp r2, 0xF
- ble _0803FAB0
- ldr r5, [sp, 0x4]
- mov r6, r10
- cmp r6, 0x3
- ble _0803FA78
-_0803FB56:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end DrawSpindaSpots
-
- .if REVISION >= 1
- thumb_func_start sub_803FB68
-sub_803FB68: @ 803FB68
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r2, 16
- lsrs r2, 16
- mov r8, r2
- ldr r0, =gStringVar1
- mov r9, r0
- adds r0, r5, 0
- movs r1, 0x2
- mov r2, r9
- bl GetMonData
- mov r4, sp
- adds r0, r5, 0
- movs r1, 0x3
- mov r2, sp
- bl GetMonData
- strb r0, [r4, 0x0]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0803FBC4
- movs r6, 0xB
- adds r0, r7, 0
- muls r0, r6
- ldr r4, =gSpeciesNames
- adds r0, r4
- mov r1, r9
- bl StringCompareWithoutExtCtrlCodes
- cmp r0, 0
- bne _0803FBC4
- mov r2, r8
- muls r2, r6
- adds r2, r4
- adds r0, r5, 0
- movs r1, 0x2
- bl SetMonData
-_0803FBC4:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_803FB68
- .else
- thumb_func_start sub_803FB68
-sub_803FB68: @ 803FB68
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- adds r4, r1, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r2, 16
- lsrs r2, 16
- mov r8, r2
- ldr r5, _0803FBB4 @ =gStringVar1
- movs r1, 0x2
- adds r2, r5, 0
- bl GetMonData
- movs r6, 0xB
- adds r0, r4, 0
- muls r0, r6
- ldr r4, _0803FBB8 @ =gSpeciesNames
- adds r0, r4
- adds r1, r5, 0
- bl StringCompareWithoutExtCtrlCodes
- cmp r0, 0
- bne _0803FBA8
- mov r2, r8
- muls r2, r6
- adds r2, r4
- adds r0, r7, 0
- movs r1, 0x2
- bl SetMonData
-_0803FBA8:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803FBB4: .4byte gStringVar1
-_0803FBB8: .4byte gSpeciesNames
- thumb_func_end sub_803FB68
- .endif
-
- thumb_func_start sub_803FBBC
-sub_803FBBC: @ 803FBBC
- push {r4,r5,lr}
- movs r5, 0
- ldr r4, _0803FBE4 @ =gLinkPlayers
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r0, [r1, 0x18]
- cmp r0, 0x2
- bgt _0803FBE8
- cmp r0, 0x1
- bge _0803FBF0
- cmp r0, 0
- beq _0803FBEC
- b _0803FBF2
- .align 2, 0
-_0803FBE4: .4byte gLinkPlayers
-_0803FBE8:
- cmp r0, 0x3
- bne _0803FBF2
-_0803FBEC:
- movs r5, 0
- b _0803FBF2
-_0803FBF0:
- movs r5, 0x1
-_0803FBF2:
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_803FBBC
-
- thumb_func_start sub_803FBFC
-sub_803FBFC: @ 803FBFC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- movs r3, 0
- ldr r2, _0803FC20 @ =gLinkPlayers
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r1, 0x18]
- cmp r0, 0x2
- bgt _0803FC24
- cmp r0, 0x1
- bge _0803FC2C
- cmp r0, 0
- beq _0803FC28
- b _0803FC2E
- .align 2, 0
-_0803FC20: .4byte gLinkPlayers
-_0803FC24:
- cmp r0, 0x3
- bne _0803FC2E
-_0803FC28:
- movs r3, 0
- b _0803FC2E
-_0803FC2C:
- movs r3, 0x1
-_0803FC2E:
- adds r0, r3, 0
- pop {r1}
- bx r1
- thumb_func_end sub_803FBFC
-
- thumb_func_start sub_803FC34
-sub_803FC34: @ 803FC34
- push {lr}
- lsls r0, 16
- lsrs r3, r0, 16
- movs r2, 0
- ldr r1, _0803FC40 @ =gLinkPlayers
- b _0803FC4C
- .align 2, 0
-_0803FC40: .4byte gLinkPlayers
-_0803FC44:
- adds r1, 0x1C
- adds r2, 0x1
- cmp r2, 0x3
- bgt _0803FC52
-_0803FC4C:
- ldrh r0, [r1, 0x18]
- cmp r0, r3
- bne _0803FC44
-_0803FC52:
- adds r0, r2, 0
- pop {r1}
- bx r1
- thumb_func_end sub_803FC34
-
- thumb_func_start sub_803FC58
-sub_803FC58: @ 803FC58
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _0803FC70 @ =gTrainers
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrb r1, [r1, 0x2]
- movs r0, 0x7F
- ands r0, r1
- bx lr
- .align 2, 0
-_0803FC70: .4byte gTrainers
- thumb_func_end sub_803FC58
-
- thumb_func_start nature_stat_mod
-nature_stat_mod: @ 803FC74
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- lsrs r3, r1, 16
- lsls r2, 24
- lsrs r5, r2, 24
- movs r0, 0xFF
- lsls r0, 24
- adds r2, r0
- lsrs r2, 24
- cmp r2, 0x4
- bls _0803FC92
- adds r0, r3, 0
- b _0803FCCE
-_0803FC92:
- ldr r0, _0803FCB4 @ =gNatureStatTable
- lsls r1, r4, 2
- adds r1, r4
- subs r1, 0x1
- adds r1, r5, r1
- adds r1, r0
- ldrb r1, [r1]
- lsls r1, 24
- asrs r1, 24
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0803FCB8
- cmp r1, 0x1
- bne _0803FCCC
- movs r0, 0x6E
- b _0803FCBA
- .align 2, 0
-_0803FCB4: .4byte gNatureStatTable
-_0803FCB8:
- movs r0, 0x5A
-_0803FCBA:
- muls r0, r3
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __udivsi3
- lsls r0, 16
- lsrs r0, 16
- b _0803FCCE
-_0803FCCC:
- adds r0, r3, 0
-_0803FCCE:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end nature_stat_mod
-
- thumb_func_start AdjustFriendship
-AdjustFriendship: @ 803FCD4
- push {r4-r7,lr}
- sub sp, 0x4
- adds r7, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- movs r1, 0x41
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r7, 0
- movs r1, 0xC
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _0803FD34
- ldr r0, _0803FD14 @ =gMain
- ldr r1, _0803FD18 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803FD20
- ldr r0, _0803FD1C @ =gEnigmaBerries
- ldrb r4, [r0, 0x7]
- b _0803FD3C
- .align 2, 0
-_0803FD14: .4byte gMain
-_0803FD18: .4byte 0x0000043d
-_0803FD1C: .4byte gEnigmaBerries
-_0803FD20:
- ldr r0, _0803FD2C @ =gSaveBlock1
- ldr r1, _0803FD30 @ =0x00003688
- adds r0, r1
- ldrb r4, [r0]
- b _0803FD3C
- .align 2, 0
-_0803FD2C: .4byte gSaveBlock1
-_0803FD30: .4byte 0x00003688
-_0803FD34:
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
-_0803FD3C:
- cmp r6, 0
- bne _0803FD42
- b _0803FE56
-_0803FD42:
- movs r0, 0xCE
- lsls r0, 1
- cmp r6, r0
- bne _0803FD4C
- b _0803FE56
-_0803FD4C:
- movs r6, 0
- adds r0, r7, 0
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r1, sp
- strh r0, [r1]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x63
- ble _0803FD6A
- movs r6, 0x1
-_0803FD6A:
- cmp r0, 0xC7
- ble _0803FD74
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0803FD74:
- cmp r5, 0x5
- bne _0803FD84
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- bne _0803FE56
-_0803FD84:
- cmp r5, 0x3
- bne _0803FDB4
- ldr r0, _0803FE60 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0803FE56
- ldr r2, _0803FE64 @ =gTrainers
- ldr r0, _0803FE68 @ =gTrainerBattleOpponent
- ldrh r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r1, [r0, 0x1]
- adds r0, r1, 0
- subs r0, 0x18
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _0803FDB4
- cmp r1, 0x20
- bne _0803FE56
-_0803FDB4:
- ldr r1, _0803FE6C @ =gUnknown_082082FE
- lsls r0, r5, 1
- adds r0, r5
- adds r0, r6, r0
- adds r0, r1
- ldrb r2, [r0]
- movs r1, 0
- ldrsb r1, [r0, r1]
- cmp r1, 0
- ble _0803FDDA
- cmp r4, 0x1B
- bne _0803FDDA
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- lsls r0, 24
- lsrs r2, r0, 24
-_0803FDDA:
- lsls r2, 24
- asrs r2, 24
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- adds r0, r2
- mov r1, sp
- strh r0, [r1]
- cmp r2, 0
- ble _0803FE2C
- adds r0, r7, 0
- movs r1, 0x26
- movs r2, 0
- bl GetMonData
- cmp r0, 0xB
- bne _0803FE08
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- adds r0, 0x1
- mov r1, sp
- strh r0, [r1]
-_0803FE08:
- adds r0, r7, 0
- movs r1, 0x23
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- bl sav1_map_get_name
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bne _0803FE2C
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- adds r0, 0x1
- mov r1, sp
- strh r0, [r1]
-_0803FE2C:
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bge _0803FE3C
- movs r1, 0
- mov r0, sp
- strh r1, [r0]
-_0803FE3C:
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0xFF
- ble _0803FE4C
- movs r1, 0xFF
- mov r0, sp
- strh r1, [r0]
-_0803FE4C:
- adds r0, r7, 0
- movs r1, 0x20
- mov r2, sp
- bl SetMonData
-_0803FE56:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803FE60: .4byte gBattleTypeFlags
-_0803FE64: .4byte gTrainers
-_0803FE68: .4byte gTrainerBattleOpponent
-_0803FE6C: .4byte gUnknown_082082FE
- thumb_func_end AdjustFriendship
-
- thumb_func_start MonGainEVs
-MonGainEVs: @ 803FE70
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- mov r8, r0
- lsls r1, 16
- lsrs r5, r1, 16
- movs r4, 0
- movs r7, 0
- movs r6, 0
-_0803FE84:
- adds r1, r6, 0
- adds r1, 0x1A
- mov r0, r8
- movs r2, 0
- bl GetMonData
- mov r2, sp
- adds r1, r2, r6
- strb r0, [r1]
- ldrb r0, [r1]
- adds r0, r7, r0
- lsls r0, 16
- lsrs r7, r0, 16
- adds r6, 0x1
- cmp r6, 0x5
- ble _0803FE84
- movs r6, 0
- b _08040006
-_0803FEA8:
- mov r0, r8
- movs r1, 0
- bl CheckPartyHasHadPokerus
- lsls r0, 24
- movs r2, 0x1
- cmp r0, 0
- beq _0803FEBA
- movs r2, 0x2
-_0803FEBA:
- cmp r6, 0x5
- bhi _0803FF5C
- lsls r0, r6, 2
- ldr r1, _0803FEC8 @ =_0803FECC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0803FEC8: .4byte _0803FECC
- .align 2, 0
-_0803FECC:
- .4byte _0803FEE4
- .4byte _0803FEF8
- .4byte _0803FF0C
- .4byte _0803FF20
- .4byte _0803FF34
- .4byte _0803FF48
-_0803FEE4:
- ldr r0, _0803FEF4 @ =gBaseStats
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- lsls r0, 30
- b _0803FF56
- .align 2, 0
-_0803FEF4: .4byte gBaseStats
-_0803FEF8:
- ldr r0, _0803FF08 @ =gBaseStats
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- b _0803FF54
- .align 2, 0
-_0803FF08: .4byte gBaseStats
-_0803FF0C:
- ldr r0, _0803FF1C @ =gBaseStats
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- lsls r0, 26
- b _0803FF56
- .align 2, 0
-_0803FF1C: .4byte gBaseStats
-_0803FF20:
- ldr r0, _0803FF30 @ =gBaseStats
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- lsrs r0, 6
- b _0803FF58
- .align 2, 0
-_0803FF30: .4byte gBaseStats
-_0803FF34:
- ldr r0, _0803FF44 @ =gBaseStats
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xB]
- lsls r0, 30
- b _0803FF56
- .align 2, 0
-_0803FF44: .4byte gBaseStats
-_0803FF48:
- ldr r0, _0803FF84 @ =gBaseStats
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xB]
-_0803FF54:
- lsls r0, 28
-_0803FF56:
- lsrs r0, 30
-_0803FF58:
- adds r4, r0, 0
- muls r4, r2
-_0803FF5C:
- mov r0, r8
- movs r1, 0xC
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _0803FFA8
- ldr r0, _0803FF88 @ =gMain
- ldr r1, _0803FF8C @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803FF94
- ldr r0, _0803FF90 @ =gEnigmaBerries
- ldrb r0, [r0, 0x7]
- b _0803FFB0
- .align 2, 0
-_0803FF84: .4byte gBaseStats
-_0803FF88: .4byte gMain
-_0803FF8C: .4byte 0x0000043d
-_0803FF90: .4byte gEnigmaBerries
-_0803FF94:
- ldr r0, _0803FFA0 @ =gSaveBlock1
- ldr r2, _0803FFA4 @ =0x00003688
- adds r0, r2
- ldrb r0, [r0]
- b _0803FFB0
- .align 2, 0
-_0803FFA0: .4byte gSaveBlock1
-_0803FFA4: .4byte 0x00003688
-_0803FFA8:
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r0, 24
-_0803FFB0:
- cmp r0, 0x18
- bne _0803FFB8
- lsls r0, r4, 17
- lsrs r4, r0, 16
-_0803FFB8:
- lsls r0, r4, 16
- asrs r2, r0, 16
- adds r1, r7, r2
- movs r0, 0xFF
- lsls r0, 1
- cmp r1, r0
- ble _0803FFD0
- adds r0, r2, r0
- adds r1, r7, r4
- subs r0, r1
- lsls r0, 16
- lsrs r4, r0, 16
-_0803FFD0:
- mov r0, sp
- adds r2, r0, r6
- ldrb r3, [r2]
- lsls r0, r4, 16
- asrs r1, r0, 16
- adds r0, r3, r1
- cmp r0, 0xFF
- ble _0803FFEC
- adds r0, r1, 0
- adds r0, 0xFF
- adds r1, r3, r4
- subs r0, r1
- lsls r0, 16
- lsrs r4, r0, 16
-_0803FFEC:
- adds r0, r3, r4
- strb r0, [r2]
- adds r0, r7, r4
- lsls r0, 16
- lsrs r7, r0, 16
- adds r1, r6, 0
- adds r1, 0x1A
- mov r0, r8
- bl SetMonData
- adds r6, 0x1
- cmp r6, 0x5
- bgt _0804000E
-_08040006:
- ldr r0, _0804001C @ =0x000001fd
- cmp r7, r0
- bhi _0804000E
- b _0803FEA8
-_0804000E:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804001C: .4byte 0x000001fd
- thumb_func_end MonGainEVs
-
- thumb_func_start GetMonEVCount
-GetMonEVCount: @ 8040020
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r5, 0
- movs r4, 0
-_08040028:
- adds r1, r4, 0
- adds r1, 0x1A
- adds r0, r6, 0
- movs r2, 0
- bl GetMonData
- adds r0, r5, r0
- lsls r0, 16
- lsrs r5, r0, 16
- adds r4, 0x1
- cmp r4, 0x5
- ble _08040028
- adds r0, r5, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end GetMonEVCount
-
- thumb_func_start RandomlyGivePartyPokerus
-RandomlyGivePartyPokerus: @ 8040048
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- bl Random
- lsls r0, 16
- lsrs r5, r0, 16
- movs r0, 0x80
- lsls r0, 7
- cmp r5, r0
- beq _0804006E
- movs r0, 0x80
- lsls r0, 8
- cmp r5, r0
- beq _0804006E
- movs r0, 0xC0
- lsls r0, 8
- cmp r5, r0
- bne _08040104
-_0804006E:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x6
- bl __umodsi3
- lsls r0, 16
- lsrs r5, r0, 16
- movs r0, 0x64
- muls r0, r5
- adds r4, r6, r0
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _0804006E
- adds r0, r4, 0
- movs r1, 0x2D
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0804006E
- ldr r1, _0804010C @ =gBitTable
- lsls r0, r5, 2
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r6, 0
- bl CheckPartyHasHadPokerus
- lsls r0, 24
- cmp r0, 0
- bne _08040104
- mov r4, sp
-_080400B8:
- bl Random
- lsls r0, 24
- lsrs r0, 24
- strb r0, [r4]
- cmp r0, 0
- beq _080400B8
- movs r0, 0xF0
- mov r1, sp
- ldrb r1, [r1]
- ands r0, r1
- cmp r0, 0
- beq _080400DA
- movs r0, 0x7
- ands r1, r0
- mov r0, sp
- strb r1, [r0]
-_080400DA:
- mov r0, sp
- ldrb r0, [r0]
- lsls r1, r0, 4
- orrs r0, r1
- lsls r0, 24
- lsrs r0, 24
- mov r1, sp
- strb r0, [r1]
- movs r1, 0xF3
- ands r1, r0
- mov r0, sp
- strb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- movs r0, 0x64
- muls r0, r5
- adds r0, r6, r0
- movs r1, 0x22
- mov r2, sp
- bl SetMonData
-_08040104:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0804010C: .4byte gBitTable
- thumb_func_end RandomlyGivePartyPokerus
-
- thumb_func_start CheckPartyPokerus
-CheckPartyPokerus: @ 8040110
- push {r4-r7,lr}
- sub sp, 0x4
- adds r7, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- movs r3, 0
- movs r6, 0x1
- movs r5, 0
- cmp r4, 0
- beq _08040158
-_08040124:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0804014C
- movs r0, 0x64
- muls r0, r3
- adds r0, r7, r0
- movs r1, 0x22
- movs r2, 0
- str r3, [sp]
- bl GetMonData
- movs r1, 0xF
- ands r1, r0
- ldr r3, [sp]
- cmp r1, 0
- beq _0804014C
- orrs r5, r6
- lsls r0, r5, 24
- lsrs r5, r0, 24
-_0804014C:
- adds r3, 0x1
- lsls r6, 1
- lsrs r4, 1
- cmp r4, 0
- bne _08040124
- b _0804016C
-_08040158:
- adds r0, r7, 0
- movs r1, 0x22
- movs r2, 0
- bl GetMonData
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0
- beq _0804016C
- movs r5, 0x1
-_0804016C:
- adds r0, r5, 0
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end CheckPartyPokerus
-
- thumb_func_start CheckPartyHasHadPokerus
-CheckPartyHasHadPokerus: @ 8040178
- push {r4-r7,lr}
- sub sp, 0x4
- adds r7, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- movs r3, 0
- movs r6, 0x1
- movs r5, 0
- cmp r4, 0
- beq _080401BC
-_0804018C:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _080401B0
- movs r0, 0x64
- muls r0, r3
- adds r0, r7, r0
- movs r1, 0x22
- movs r2, 0
- str r3, [sp]
- bl GetMonData
- ldr r3, [sp]
- cmp r0, 0
- beq _080401B0
- orrs r5, r6
- lsls r0, r5, 24
- lsrs r5, r0, 24
-_080401B0:
- adds r3, 0x1
- lsls r6, 1
- lsrs r4, 1
- cmp r4, 0
- bne _0804018C
- b _080401CC
-_080401BC:
- adds r0, r7, 0
- movs r1, 0x22
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _080401CC
- movs r5, 0x1
-_080401CC:
- adds r0, r5, 0
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end CheckPartyHasHadPokerus
-
- thumb_func_start UpdatePartyPokerusTime
-UpdatePartyPokerusTime: @ 80401D8
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r7, r0, 16
- movs r5, 0
- mov r6, sp
-_080401E4:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08040224 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _0804023C
- adds r0, r4, 0
- movs r1, 0x22
- movs r2, 0
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- strb r0, [r6]
- movs r1, 0xF
- adds r2, r0, 0
- ands r1, r2
- cmp r1, 0
- beq _0804023C
- cmp r1, r7
- bcc _0804021E
- cmp r7, 0x4
- bls _08040228
-_0804021E:
- movs r0, 0xF0
- ands r0, r2
- b _0804022A
- .align 2, 0
-_08040224: .4byte gPlayerParty
-_08040228:
- subs r0, r2, r7
-_0804022A:
- strb r0, [r6]
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0804024C @ =gPlayerParty
- adds r0, r1
- movs r1, 0x22
- mov r2, sp
- bl SetMonData
-_0804023C:
- adds r5, 0x1
- cmp r5, 0x5
- ble _080401E4
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804024C: .4byte gPlayerParty
- thumb_func_end UpdatePartyPokerusTime
-
- thumb_func_start PartySpreadPokerus
-PartySpreadPokerus: @ 8040250
- push {r4-r7,lr}
- sub sp, 0x4
- adds r7, r0, 0
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- bne _080402F6
- movs r5, 0
-_0804026C:
- movs r0, 0x64
- adds r6, r5, 0
- muls r6, r0
- adds r4, r7, r6
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _080402F0
- adds r0, r4, 0
- movs r1, 0x22
- movs r2, 0
- bl GetMonData
- lsls r0, 24
- lsrs r1, r0, 24
- mov r0, sp
- strb r1, [r0]
- cmp r1, 0
- beq _080402F0
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0
- beq _080402F0
- cmp r5, 0
- beq _080402C6
- adds r0, r6, 0
- subs r0, 0x64
- adds r4, r7, r0
- adds r0, r4, 0
- movs r1, 0x22
- movs r2, 0
- bl GetMonData
- movs r1, 0xF0
- ands r1, r0
- cmp r1, 0
- bne _080402C6
- adds r0, r4, 0
- movs r1, 0x22
- mov r2, sp
- bl SetMonData
-_080402C6:
- cmp r5, 0x5
- beq _080402F0
- movs r0, 0x64
- muls r0, r5
- adds r0, 0x64
- adds r4, r7, r0
- adds r0, r4, 0
- movs r1, 0x22
- movs r2, 0
- bl GetMonData
- movs r1, 0xF0
- ands r1, r0
- cmp r1, 0
- bne _080402F0
- adds r0, r4, 0
- movs r1, 0x22
- mov r2, sp
- bl SetMonData
- adds r5, 0x1
-_080402F0:
- adds r5, 0x1
- cmp r5, 0x5
- ble _0804026C
-_080402F6:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end PartySpreadPokerus
-
- thumb_func_start TryIncrementMonLevel
-TryIncrementMonLevel: @ 8040300
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r6, 0
- movs r1, 0x38
- movs r2, 0
- bl GetMonData
- adds r0, 0x1
- mov r1, sp
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x19
- movs r2, 0
- bl GetMonData
- ldr r5, _08040358 @ =gExperienceTables
- mov r1, sp
- ldrb r2, [r1]
- lsls r2, 2
- ldr r3, _0804035C @ =gBaseStats
- lsls r1, r4, 3
- subs r1, r4
- lsls r1, 2
- adds r1, r3
- ldrb r3, [r1, 0x13]
- movs r1, 0xCA
- lsls r1, 1
- muls r1, r3
- adds r2, r1
- adds r2, r5
- ldr r1, [r2]
- cmp r0, r1
- bhi _08040360
- movs r0, 0
- b _0804036C
- .align 2, 0
-_08040358: .4byte gExperienceTables
-_0804035C: .4byte gBaseStats
-_08040360:
- adds r0, r6, 0
- movs r1, 0x38
- mov r2, sp
- bl SetMonData
- movs r0, 0x1
-_0804036C:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end TryIncrementMonLevel
-
- thumb_func_start CanMonLearnTMHM
-CanMonLearnTMHM: @ 8040374
- push {r4,r5,lr}
- lsls r1, 24
- lsrs r4, r1, 24
- adds r5, r4, 0
- movs r1, 0x41
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r1, r0, 16
- adds r3, r1, 0
- movs r0, 0xCE
- lsls r0, 1
- cmp r1, r0
- bne _08040396
- movs r0, 0
- b _080403C2
-_08040396:
- cmp r4, 0x1F
- bls _080403B4
- adds r0, r4, 0
- subs r0, 0x20
- movs r2, 0x1
- lsls r2, r0
- ldr r0, _080403B0 @ =gTMHMLearnsets
- lsls r1, 3
- adds r0, 0x4
- adds r1, r0
- ldr r0, [r1]
- ands r0, r2
- b _080403C2
- .align 2, 0
-_080403B0: .4byte gTMHMLearnsets
-_080403B4:
- movs r1, 0x1
- lsls r1, r5
- ldr r2, _080403C8 @ =gTMHMLearnsets
- lsls r0, r3, 3
- adds r0, r2
- ldr r0, [r0]
- ands r0, r1
-_080403C2:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080403C8: .4byte gTMHMLearnsets
- thumb_func_end CanMonLearnTMHM
-
- thumb_func_start sub_80403CC
-sub_80403CC: @ 80403CC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- adds r6, r0, 0
- str r1, [sp, 0x8]
- movs r0, 0
- mov r10, r0
- adds r0, r6, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- adds r0, r6, 0
- movs r1, 0x38
- movs r2, 0
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0xC]
- movs r5, 0
- mov r4, sp
-_08040402:
- adds r1, r5, 0
- adds r1, 0xD
- adds r0, r6, 0
- movs r2, 0
- bl GetMonData
- strh r0, [r4]
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _08040402
- movs r5, 0
- ldr r6, _08040510 @ =gLevelUpLearnsets
- lsls r1, r7, 2
- adds r2, r1, r6
- ldr r3, [r2]
- ldrh r0, [r3]
- ldr r4, _08040514 @ =0x0000ffff
- str r1, [sp, 0x14]
- cmp r0, r4
- beq _080404FC
- mov r9, r2
- str r3, [sp, 0x10]
-_08040430:
- lsls r2, r5, 1
- ldr r1, [sp, 0x10]
- adds r0, r2, r1
- ldrh r3, [r0]
- movs r0, 0xFE
- lsls r0, 8
- ands r0, r3
- ldr r4, [sp, 0xC]
- lsls r1, r4, 9
- adds r7, r2, 0
- adds r5, 0x1
- mov r12, r5
- cmp r0, r1
- bgt _080404E6
- movs r4, 0
- mov r0, sp
- ldrh r1, [r0]
- ldr r0, _08040518 @ =0x000001ff
- ands r0, r3
- cmp r1, r0
- beq _08040480
- ldr r0, [sp, 0x14]
- ldr r1, _08040510 @ =gLevelUpLearnsets
- adds r6, r0, r1
- ldr r2, _08040518 @ =0x000001ff
- mov r8, r2
- mov r3, sp
- adds r5, r7, 0
-_08040468:
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- bgt _08040480
- ldr r0, [r6]
- adds r0, r5, r0
- ldrh r1, [r0]
- ldrh r2, [r3]
- mov r0, r8
- ands r0, r1
- cmp r2, r0
- bne _08040468
-_08040480:
- cmp r4, 0x4
- bne _080404E6
- movs r4, 0
- cmp r4, r10
- bge _080404C4
- mov r1, r9
- ldr r0, [r1]
- adds r0, r7, r0
- ldrh r1, [r0]
- ldr r0, [sp, 0x8]
- ldrh r2, [r0]
- ldr r0, _08040518 @ =0x000001ff
- ands r0, r1
- cmp r2, r0
- beq _080404C4
- ldr r1, [sp, 0x14]
- ldr r2, _08040510 @ =gLevelUpLearnsets
- adds r6, r1, r2
- ldr r0, _08040518 @ =0x000001ff
- mov r8, r0
- ldr r3, [sp, 0x8]
- adds r5, r7, 0
-_080404AC:
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, r10
- bge _080404C4
- ldr r0, [r6]
- adds r0, r5, r0
- ldrh r1, [r0]
- ldrh r2, [r3]
- mov r0, r8
- ands r0, r1
- cmp r2, r0
- bne _080404AC
-_080404C4:
- cmp r4, r10
- bne _080404E6
- mov r0, r10
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- lsls r2, r4, 1
- ldr r1, [sp, 0x8]
- adds r2, r1
- mov r4, r9
- ldr r0, [r4]
- adds r0, r7, r0
- ldrh r1, [r0]
- ldr r0, _08040518 @ =0x000001ff
- ands r0, r1
- strh r0, [r2]
-_080404E6:
- mov r5, r12
- cmp r5, 0x13
- bgt _080404FC
- mov r1, r9
- ldr r0, [r1]
- lsls r1, r5, 1
- adds r1, r0
- ldrh r0, [r1]
- ldr r2, _08040514 @ =0x0000ffff
- cmp r0, r2
- bne _08040430
-_080404FC:
- mov r0, r10
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08040510: .4byte gLevelUpLearnsets
-_08040514: .4byte 0x0000ffff
-_08040518: .4byte 0x000001ff
- thumb_func_end sub_80403CC
-
- thumb_func_start sub_804051C
-sub_804051C: @ 804051C
- push {r4-r7,lr}
- adds r6, r1, 0
- lsls r0, 16
- movs r5, 0
- movs r4, 0
- ldr r1, _08040568 @ =gLevelUpLearnsets
- lsrs r0, 14
- adds r0, r1
- ldr r2, [r0]
- ldrh r0, [r2]
- ldr r1, _0804056C @ =0x0000ffff
- cmp r0, r1
- beq _08040560
- ldr r0, _08040570 @ =0x000001ff
- mov r12, r0
- adds r7, r1, 0
- adds r3, r2, 0
-_0804053E:
- adds r1, r5, 0
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 1
- adds r1, r6
- ldrh r2, [r3]
- mov r0, r12
- ands r0, r2
- strh r0, [r1]
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x13
- bgt _08040560
- ldrh r0, [r3]
- cmp r0, r7
- bne _0804053E
-_08040560:
- adds r0, r5, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08040568: .4byte gLevelUpLearnsets
-_0804056C: .4byte 0x0000ffff
-_08040570: .4byte 0x000001ff
- thumb_func_end sub_804051C
-
- thumb_func_start sub_8040574
-sub_8040574: @ 8040574
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x3C
- adds r6, r0, 0
- movs r0, 0
- mov r10, r0
- adds r0, r6, 0
- movs r1, 0x41
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r6, 0
- movs r1, 0x38
- movs r2, 0
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x30]
- movs r0, 0xCE
- lsls r0, 1
- cmp r4, r0
- bne _080405B0
- movs r0, 0
- b _080406BA
-_080405B0:
- movs r5, 0
- lsls r4, 2
- str r4, [sp, 0x38]
- mov r4, sp
-_080405B8:
- adds r1, r5, 0
- adds r1, 0xD
- adds r0, r6, 0
- movs r2, 0
- bl GetMonData
- strh r0, [r4]
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _080405B8
- movs r5, 0
- ldr r3, _080406CC @ =gLevelUpLearnsets
- ldr r2, [sp, 0x38]
- adds r1, r2, r3
- ldr r0, [r1]
- ldrh r0, [r0]
- ldr r2, _080406D0 @ =0x0000ffff
- cmp r0, r2
- beq _080406B8
- mov r9, r1
- mov r4, sp
- adds r4, 0x8
- str r4, [sp, 0x34]
-_080405E8:
- mov r1, r9
- ldr r0, [r1]
- lsls r2, r5, 1
- adds r0, r2, r0
- ldrh r3, [r0]
- movs r0, 0xFE
- lsls r0, 8
- ands r0, r3
- ldr r4, [sp, 0x30]
- lsls r1, r4, 9
- adds r7, r2, 0
- adds r5, 0x1
- mov r12, r5
- cmp r0, r1
- bgt _080406A2
- movs r4, 0
- mov r0, sp
- ldrh r1, [r0]
- ldr r0, _080406D4 @ =0x000001ff
- ands r0, r3
- cmp r1, r0
- beq _0804063A
- ldr r0, [sp, 0x38]
- ldr r1, _080406CC @ =gLevelUpLearnsets
- adds r6, r0, r1
- ldr r2, _080406D4 @ =0x000001ff
- mov r8, r2
- mov r3, sp
- adds r5, r7, 0
-_08040622:
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- bgt _0804063A
- ldr r0, [r6]
- adds r0, r5, r0
- ldrh r1, [r0]
- ldrh r2, [r3]
- mov r0, r8
- ands r0, r1
- cmp r2, r0
- bne _08040622
-_0804063A:
- cmp r4, 0x4
- bne _080406A2
- movs r4, 0
- cmp r4, r10
- bge _08040680
- mov r1, r9
- ldr r0, [r1]
- adds r0, r7, r0
- ldrh r1, [r0]
- ldr r0, [sp, 0x34]
- ldrh r2, [r0]
- ldr r0, _080406D4 @ =0x000001ff
- ands r0, r1
- add r1, sp, 0x8
- cmp r2, r0
- beq _08040680
- ldr r2, [sp, 0x38]
- ldr r0, _080406CC @ =gLevelUpLearnsets
- adds r6, r2, r0
- ldr r2, _080406D4 @ =0x000001ff
- mov r8, r2
- adds r3, r1, 0
- adds r5, r7, 0
-_08040668:
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, r10
- bge _08040680
- ldr r0, [r6]
- adds r0, r5, r0
- ldrh r1, [r0]
- ldrh r2, [r3]
- mov r0, r8
- ands r0, r1
- cmp r2, r0
- bne _08040668
-_08040680:
- cmp r4, r10
- bne _080406A2
- mov r0, r10
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- lsls r2, r4, 1
- ldr r4, [sp, 0x34]
- adds r2, r4, r2
- mov r1, r9
- ldr r0, [r1]
- adds r0, r7, r0
- ldrh r1, [r0]
- ldr r0, _080406D4 @ =0x000001ff
- ands r0, r1
- strh r0, [r2]
-_080406A2:
- mov r5, r12
- cmp r5, 0x13
- bgt _080406B8
- mov r2, r9
- ldr r0, [r2]
- lsls r1, r5, 1
- adds r1, r0
- ldrh r0, [r1]
- ldr r4, _080406D0 @ =0x0000ffff
- cmp r0, r4
- bne _080405E8
-_080406B8:
- mov r0, r10
-_080406BA:
- add sp, 0x3C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080406CC: .4byte gLevelUpLearnsets
-_080406D0: .4byte 0x0000ffff
-_080406D4: .4byte 0x000001ff
- thumb_func_end sub_8040574
-
- thumb_func_start SpeciesToPokedexNum
-SpeciesToPokedexNum: @ 80406D8
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- bl IsNationalPokedexEnabled
- cmp r0, 0
- beq _080406F2
- adds r0, r4, 0
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- b _0804070A
-_080406F2:
- adds r0, r4, 0
- bl SpeciesToHoennPokedexNum
- adds r4, r0, 0
- cmp r4, 0xCA
- bls _08040708
- ldr r0, _08040704 @ =0x0000ffff
- b _0804070A
- .align 2, 0
-_08040704: .4byte 0x0000ffff
-_08040708:
- adds r0, r4, 0
-_0804070A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end SpeciesToPokedexNum
-
- thumb_func_start sub_8040710
-sub_8040710: @ 8040710
- push {lr}
- ldr r1, _08040724 @ =gUnknown_02024E84
- movs r2, 0
- adds r0, r1, 0x3
-_08040718:
- strb r2, [r0]
- subs r0, 0x1
- cmp r0, r1
- bge _08040718
- pop {r0}
- bx r0
- .align 2, 0
-_08040724: .4byte gUnknown_02024E84
- thumb_func_end sub_8040710
-
- thumb_func_start sub_8040728
-sub_8040728: @ 8040728
- push {lr}
- ldr r0, _0804073C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 5
- ands r0, r1
- cmp r0, 0
- beq _08040744
- ldr r0, _08040740 @ =0x000001cf
- b _080408B2
- .align 2, 0
-_0804073C: .4byte gBattleTypeFlags
-_08040740: .4byte 0x000001cf
-_08040744:
- movs r0, 0x80
- lsls r0, 7
- ands r0, r1
- cmp r0, 0
- beq _08040754
- movs r0, 0xE7
- lsls r0, 1
- b _080408B2
-_08040754:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0804075E
- b _080408A8
-_0804075E:
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _08040768
- b _080408B0
-_08040768:
- ldr r3, _0804078C @ =gTrainers
- ldr r2, _08040790 @ =gTrainerBattleOpponent
- ldrh r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r3
- ldrb r0, [r0, 0x1]
- subs r0, 0x2
- cmp r0, 0x31
- bls _08040780
- b _080408A8
-_08040780:
- lsls r0, 2
- ldr r1, _08040794 @ =_08040798
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0804078C: .4byte gTrainers
-_08040790: .4byte gTrainerBattleOpponent
-_08040794: .4byte _08040798
- .align 2, 0
-_08040798:
- .4byte _08040860
- .4byte _08040866
- .4byte _08040866
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A0
- .4byte _0804086C
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _08040872
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _080408A8
- .4byte _0804087C
- .4byte _080408A8
- .4byte _080408A8
- .4byte _08040860
- .4byte _08040866
- .4byte _08040866
-_08040860:
- movs r0, 0xE9
- lsls r0, 1
- b _080408B2
-_08040866:
- movs r0, 0xE5
- lsls r0, 1
- b _080408B2
-_0804086C:
- movs r0, 0xE6
- lsls r0, 1
- b _080408B2
-_08040872:
- ldr r0, _08040878 @ =0x000001cd
- b _080408B2
- .align 2, 0
-_08040878: .4byte 0x000001cd
-_0804087C:
- ldrh r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- ldr r1, _08040898 @ =gTrainers + 0x4
- adds r0, r1
- ldr r1, _0804089C @ =gUnknown_08400E42
- bl StringCompare
- cmp r0, 0
- beq _080408A8
- movs r0, 0xE8
- lsls r0, 1
- b _080408B2
- .align 2, 0
-_08040898: .4byte gTrainers + 0x4
-_0804089C: .4byte gUnknown_08400E42
-_080408A0:
- ldr r0, _080408A4 @ =0x000001d1
- b _080408B2
- .align 2, 0
-_080408A4: .4byte 0x000001d1
-_080408A8:
- ldr r0, _080408AC @ =0x000001cb
- b _080408B2
- .align 2, 0
-_080408AC: .4byte 0x000001cb
-_080408B0:
- ldr r0, _080408B8 @ =0x000001c9
-_080408B2:
- pop {r1}
- bx r1
- .align 2, 0
-_080408B8: .4byte 0x000001c9
- thumb_func_end sub_8040728
-
- thumb_func_start sub_80408BC
-sub_80408BC: @ 80408BC
- push {lr}
- bl ResetMapMusic
- bl m4aMPlayAllStop
- bl sub_8040728
- lsls r0, 16
- lsrs r0, 16
- bl PlayBGM
- pop {r0}
- bx r0
- thumb_func_end sub_80408BC
-
- thumb_func_start current_map_music_set__default_for_battle
-current_map_music_set__default_for_battle: @ 80408D8
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- bl ResetMapMusic
- bl m4aMPlayAllStop
- cmp r4, 0
- beq _080408F2
- adds r0, r4, 0
- bl PlayNewMapMusic
- b _080408FE
-_080408F2:
- bl sub_8040728
- lsls r0, 16
- lsrs r0, 16
- bl PlayNewMapMusic
-_080408FE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end current_map_music_set__default_for_battle
-
- thumb_func_start pokemon_get_pal
-pokemon_get_pal: @ 8040904
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r1, 0x41
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0
- bl GetMonData
- adds r6, r0, 0
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- bl GetMonData
- adds r2, r0, 0
- adds r0, r4, 0
- adds r1, r6, 0
- bl species_and_otid_get_pal
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end pokemon_get_pal
-
- thumb_func_start species_and_otid_get_pal
-species_and_otid_get_pal: @ 804093C
- push {r4,r5,lr}
- adds r3, r2, 0
- lsls r0, 16
- lsrs r4, r0, 16
- adds r5, r4, 0
- movs r0, 0xCE
- lsls r0, 1
- cmp r4, r0
- bls _08040958
- ldr r0, _08040954 @ =gMonPaletteTable
- ldr r0, [r0]
- b _08040984
- .align 2, 0
-_08040954: .4byte gMonPaletteTable
-_08040958:
- lsrs r0, r1, 16
- ldr r2, _08040974 @ =0x0000ffff
- ands r1, r2
- eors r0, r1
- lsrs r1, r3, 16
- eors r0, r1
- ands r3, r2
- eors r0, r3
- cmp r0, 0x7
- bls _0804097C
- ldr r0, _08040978 @ =gMonPaletteTable
- lsls r1, r4, 3
- b _08040980
- .align 2, 0
-_08040974: .4byte 0x0000ffff
-_08040978: .4byte gMonPaletteTable
-_0804097C:
- ldr r0, _0804098C @ =gMonShinyPaletteTable
- lsls r1, r5, 3
-_08040980:
- adds r1, r0
- ldr r0, [r1]
-_08040984:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0804098C: .4byte gMonShinyPaletteTable
- thumb_func_end species_and_otid_get_pal
-
- thumb_func_start sub_8040990
-sub_8040990: @ 8040990
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r1, 0x41
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0
- bl GetMonData
- adds r6, r0, 0
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- bl GetMonData
- adds r2, r0, 0
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_80409C8
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8040990
-
- thumb_func_start sub_80409C8
-sub_80409C8: @ 80409C8
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- lsrs r0, r1, 16
- ldr r3, _080409E8 @ =0x0000ffff
- ands r1, r3
- eors r0, r1
- lsrs r1, r2, 16
- eors r0, r1
- ands r2, r3
- eors r0, r2
- cmp r0, 0x7
- bls _080409F0
- lsls r0, r4, 3
- ldr r1, _080409EC @ =gMonPaletteTable
- b _080409F4
- .align 2, 0
-_080409E8: .4byte 0x0000ffff
-_080409EC: .4byte gMonPaletteTable
-_080409F0:
- lsls r0, r4, 3
- ldr r1, _080409FC @ =gMonShinyPaletteTable
-_080409F4:
- adds r0, r1
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080409FC: .4byte gMonShinyPaletteTable
- thumb_func_end sub_80409C8
-
- thumb_func_start sub_8040A00
-sub_8040A00: @ 8040A00
- push {r4,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r2, _08040A24 @ =gUnknown_0820831A
- ldrh r0, [r2]
- ldr r1, _08040A28 @ =0x0000ffff
- cmp r0, r1
- beq _08040A32
- adds r4, r1, 0
- adds r1, r2, 0
-_08040A14:
- ldrh r0, [r2]
- adds r1, 0x2
- adds r2, 0x2
- cmp r0, r3
- bne _08040A2C
- movs r0, 0x1
- b _08040A34
- .align 2, 0
-_08040A24: .4byte gUnknown_0820831A
-_08040A28: .4byte 0x0000ffff
-_08040A2C:
- ldrh r0, [r1]
- cmp r0, r4
- bne _08040A14
-_08040A32:
- movs r0, 0
-_08040A34:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8040A00
-
- thumb_func_start sub_8040A3C
-sub_8040A3C: @ 8040A3C
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _08040A50 @ =gBaseStats
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x19]
- lsrs r0, 7
- bx lr
- .align 2, 0
-_08040A50: .4byte gBaseStats
- thumb_func_end sub_8040A3C
-
- thumb_func_start sub_8040A54
-sub_8040A54: @ 8040A54
- push {r4,lr}
- lsls r4, r1, 24
- lsrs r4, 24
- bl GetNature
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08040A78 @ =gUnknown_083F7E28
- lsls r1, r0, 2
- adds r1, r0
- adds r1, r4
- adds r1, r2
- movs r0, 0
- ldrsb r0, [r1, r0]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08040A78: .4byte gUnknown_083F7E28
- thumb_func_end sub_8040A54
-
- thumb_func_start sub_8040A7C
-sub_8040A7C: @ 8040A7C
- push {r4,lr}
- lsls r4, r1, 24
- lsrs r4, 24
- bl GetNatureFromPersonality
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08040AA0 @ =gUnknown_083F7E28
- lsls r1, r0, 2
- adds r1, r0
- adds r1, r4
- adds r1, r2
- movs r0, 0
- ldrsb r0, [r1, r0]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08040AA0: .4byte gUnknown_083F7E28
- thumb_func_end sub_8040A7C
-
- thumb_func_start sub_8040AA4
-sub_8040AA4: @ 8040AA4
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- movs r1, 0x7
- mov r2, sp
- bl GetMonData
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0
- bl GetMonData
- mov r1, sp
- bl sub_8040AD0
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x8
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8040AA4
-
- thumb_func_start sub_8040AD0
-sub_8040AD0: @ 8040AD0
- push {r4,r5,lr}
- adds r5, r1, 0
- ldr r3, _08040B10 @ =gSaveBlock2
- ldrb r2, [r3, 0xA]
- ldrb r1, [r3, 0xB]
- lsls r1, 8
- orrs r2, r1
- ldrb r1, [r3, 0xC]
- lsls r1, 16
- orrs r2, r1
- ldrb r1, [r3, 0xD]
- lsls r1, 24
- orrs r2, r1
- cmp r0, r2
- bne _08040B14
- movs r4, 0
- ldrb r0, [r5]
- cmp r0, 0xFF
- beq _08040B0C
- adds r2, r5, 0
-_08040AF8:
- adds r1, r4, r3
- ldrb r0, [r2]
- ldrb r1, [r1]
- cmp r0, r1
- bne _08040B14
- adds r2, 0x1
- adds r4, 0x1
- ldrb r0, [r2]
- cmp r0, 0xFF
- bne _08040AF8
-_08040B0C:
- movs r0, 0
- b _08040B16
- .align 2, 0
-_08040B10: .4byte gSaveBlock2
-_08040B14:
- movs r0, 0x1
-_08040B16:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8040AD0
-
- thumb_func_start sub_8040B1C
-sub_8040B1C: @ 8040B1C
- push {lr}
- bl pokemon_restore_pp
- pop {r0}
- bx r0
- thumb_func_end sub_8040B1C
-
- thumb_func_start pokemon_restore_pp
-pokemon_restore_pp: @ 8040B28
- push {r4-r6,lr}
- sub sp, 0x4
- adds r5, r0, 0
- movs r6, 0
-_08040B30:
- adds r4, r6, 0
- adds r4, 0xD
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0
- bl GetBoxMonData
- cmp r0, 0
- beq _08040B7C
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0
- bl GetBoxMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x15
- movs r2, 0
- bl GetBoxMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r2, r6, 24
- lsrs r2, 24
- adds r0, r4, 0
- bl CalculatePPWithBonus
- mov r1, sp
- strb r0, [r1]
- adds r1, r6, 0
- adds r1, 0x11
- adds r0, r5, 0
- mov r2, sp
- bl SetBoxMonData
-_08040B7C:
- adds r6, 0x1
- cmp r6, 0x3
- ble _08040B30
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end pokemon_restore_pp
-
- thumb_func_start sub_8040B8C
-sub_8040B8C: @ 8040B8C
- push {r4,r5,lr}
- ldr r1, _08040BCC @ =byte_2024C06
- ldr r2, _08040BD0 @ =0x02000000
- ldr r3, _08040BD4 @ =0x000160c0
- adds r0, r2, r3
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r5, _08040BD8 @ =gUnknown_030041C0
- movs r0, 0xFD
- strb r0, [r5]
- movs r0, 0x4
- strb r0, [r5, 0x1]
- ldr r0, _08040BDC @ =0x00016054
- adds r4, r2, r0
- ldrb r0, [r4]
- strb r0, [r5, 0x2]
- movs r0, 0xFF
- strb r0, [r5, 0x4]
- ldrb r0, [r4]
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _08040BE4
- ldr r1, _08040BE0 @ =gUnknown_02024A6A
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrb r0, [r0]
- bl pokemon_order_func
- b _08040BEE
- .align 2, 0
-_08040BCC: .4byte byte_2024C06
-_08040BD0: .4byte 0x02000000
-_08040BD4: .4byte 0x000160c0
-_08040BD8: .4byte gUnknown_030041C0
-_08040BDC: .4byte 0x00016054
-_08040BE0: .4byte gUnknown_02024A6A
-_08040BE4:
- ldr r0, _08040C24 @ =gUnknown_02024A6A
- ldrb r1, [r4]
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
-_08040BEE:
- strb r0, [r5, 0x3]
- ldr r4, _08040C28 @ =gUnknown_03004290
- movs r0, 0xFD
- strb r0, [r4]
- movs r0, 0x4
- strb r0, [r4, 0x1]
- ldr r1, _08040C2C @ =gUnknown_02024E6C
- ldrb r0, [r1]
- strb r0, [r4, 0x2]
- ldr r2, _08040C24 @ =gUnknown_02024A6A
- ldrb r0, [r1]
- lsls r0, 1
- adds r0, r2
- ldrb r0, [r0]
- bl pokemon_order_func
- strb r0, [r4, 0x3]
- movs r0, 0xFF
- strb r0, [r4, 0x4]
- ldr r0, _08040C30 @ =gUnknown_083FFCCA
- ldr r1, _08040C34 @ =gStringVar4
- bl sub_8120FFC
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08040C24: .4byte gUnknown_02024A6A
-_08040C28: .4byte gUnknown_03004290
-_08040C2C: .4byte gUnknown_02024E6C
-_08040C30: .4byte gUnknown_083FFCCA
-_08040C34: .4byte gStringVar4
- thumb_func_end sub_8040B8C
-
- thumb_func_start sub_8040C38
-sub_8040C38: @ 8040C38
- push {r4,r5,lr}
- ldr r0, _08040C90 @ =gBattleTypeFlags
- ldrh r1, [r0]
- ldr r0, _08040C94 @ =0x00002008
- ands r0, r1
- cmp r0, 0
- bne _08040CAC
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r4, _08040C98 @ =gEnemyParty
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _08040C9C @ =gBaseStats
- lsls r1, r0, 3
- subs r1, r0
- lsls r3, r1, 2
- adds r1, r3, r2
- ldrh r0, [r1, 0xC]
- ldrh r1, [r1, 0xE]
- cmp r0, r1
- beq _08040C82
- cmp r5, 0x2C
- bls _08040CAC
- cmp r5, 0x5E
- bhi _08040CA0
-_08040C82:
- adds r2, 0xC
- adds r2, r3, r2
- adds r0, r4, 0
- movs r1, 0xC
- bl SetMonData
- b _08040CAC
- .align 2, 0
-_08040C90: .4byte gBattleTypeFlags
-_08040C94: .4byte 0x00002008
-_08040C98: .4byte gEnemyParty
-_08040C9C: .4byte gBaseStats
-_08040CA0:
- adds r2, 0xE
- adds r2, r3, r2
- adds r0, r4, 0
- movs r1, 0xC
- bl SetMonData
-_08040CAC:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8040C38
-
- thumb_func_start sub_8040CB4
-sub_8040CB4: @ 8040CB4
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x1
- movs r2, 0
- bl GetMonData
- adds r5, r0, 0
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- adds r0, r5, 0
- bl sub_8040CE0
- lsls r0, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8040CB4
-
- thumb_func_start sub_8040CE0
-sub_8040CE0: @ 8040CE0
- push {r4,lr}
- movs r4, 0
- lsrs r2, r0, 16
- ldr r3, _08040D04 @ =0x0000ffff
- ands r0, r3
- eors r2, r0
- lsrs r0, r1, 16
- eors r2, r0
- ands r1, r3
- eors r2, r1
- cmp r2, 0x7
- bhi _08040CFA
- movs r4, 0x1
-_08040CFA:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08040D04: .4byte 0x0000ffff
- thumb_func_end sub_8040CE0
-
- thumb_func_start sub_8040D08
-sub_8040D08: @ 8040D08
- push {r4,lr}
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08040D38 @ =gLinkPlayers
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x18]
- movs r0, 0x2
- eors r0, r1
- bl sub_803FC34
- adds r1, r0, 0
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r4, 0x8
- adds r0, r4
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08040D38: .4byte gLinkPlayers
- thumb_func_end sub_8040D08
-
- thumb_func_start sub_8040D3C
-sub_8040D3C: @ 8040D3C
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 16
- lsrs r1, r0, 16
- adds r0, r1, 0
- lsls r2, 24
- lsrs r2, 24
- movs r3, 0
- cmp r1, 0x20
- beq _08040D54
- cmp r1, 0x1D
- bne _08040D7E
-_08040D54:
- cmp r2, 0x2
- bne _08040D68
- movs r0, 0xB
- muls r1, r0
- ldr r0, _08040D64 @ =gSpeciesNames
- adds r1, r0
- b _08040D70
- .align 2, 0
-_08040D64: .4byte gSpeciesNames
-_08040D68:
- ldr r1, _08040D88 @ =gUnknown_08208337
- cmp r0, 0x20
- bne _08040D70
- subs r1, 0xB
-_08040D70:
- adds r0, r4, 0
- bl StringCompareWithoutExtCtrlCodes
- movs r3, 0
- cmp r0, 0
- bne _08040D7E
- movs r3, 0x1
-_08040D7E:
- adds r0, r3, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08040D88: .4byte gUnknown_08208337
- thumb_func_end sub_8040D3C
-
- thumb_func_start sub_8040D8C
-sub_8040D8C: @ 8040D8C
- push {lr}
- lsls r0, 16
- lsrs r3, r0, 16
- movs r2, 0x2
- ldrb r0, [r1]
- cmp r0, 0xFC
- bne _08040DA2
- ldrb r0, [r1, 0x1]
- cmp r0, 0x15
- bne _08040DA2
- movs r2, 0x1
-_08040DA2:
- adds r0, r3, 0
- bl sub_8040D3C
- pop {r1}
- bx r1
- thumb_func_end sub_8040D8C
-
- thumb_func_start unref_sub_8040DAC
-unref_sub_8040DAC: @ 8040DAC
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x3
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- adds r0, r5, 0
- mov r1, sp
- adds r2, r4, 0
- bl sub_8040D3C
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end unref_sub_8040DAC
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
index bcf005f2f..89f0e2865 100644
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -11660,7 +11660,7 @@ _0809B508:
ldr r0, _0809B540 @ =0x000025b4
adds r4, r0
adds r0, r4, 0
- bl pokemon_restore_pp
+ bl BoxMonRestorePP
ldr r3, _0809B544 @ =gPokemonStorage
lsls r0, r5, 2
adds r0, r5
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index 25144558d..20231a0bb 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -4311,7 +4311,7 @@ GetStringCenterAlignXOffset: @ 809FA74
thumb_func_start sub_809FA94
sub_809FA94: @ 809FA94
push {lr}
- bl sub_8040CB4
+ bl IsShiny
lsls r0, 24
cmp r0, 0
beq _0809FAB4
diff --git a/asm/roamer.s b/asm/roamer.s
deleted file mode 100644
index 404405a3f..000000000
--- a/asm/roamer.s
+++ /dev/null
@@ -1,451 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81341F8
-sub_81341F8: @ 81341F8
- push {lr}
- ldr r0, _08134208 @ =gSaveBlock1 + 0x3144
- movs r1, 0
- movs r2, 0x1C
- bl memset
- pop {r0}
- bx r0
- .align 2, 0
-_08134208: .4byte gSaveBlock1 + 0x3144
- thumb_func_end sub_81341F8
-
- thumb_func_start sub_813420C
-sub_813420C: @ 813420C
- push {r4-r6,lr}
- movs r2, 0
- ldr r6, _08134238 @ =gRoamerLocation
- ldr r4, _0813423C @ =gUnknown_020392FC
- movs r3, 0
- adds r5, r4, 0x1
-_08134218:
- lsls r1, r2, 1
- adds r0, r1, r4
- strb r3, [r0]
- adds r1, r5
- strb r3, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x2
- bls _08134218
- movs r0, 0
- strb r0, [r6]
- strb r0, [r6, 0x1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08134238: .4byte gRoamerLocation
-_0813423C: .4byte gUnknown_020392FC
- thumb_func_end sub_813420C
-
- thumb_func_start sub_8134240
-sub_8134240: @ 8134240
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x10
- ldr r5, _081342FC @ =gEnemyParty
- .ifdef SAPPHIRE
- ldr r6, _sub_8134240_Latias @ =407
- .else
- movs r6, 0xCC
- lsls r6, 1
- .endif
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- adds r0, r5, 0
- adds r1, r6, 0
- movs r2, 0x28
- movs r3, 0x20
- bl CreateMon
- ldr r4, _08134300 @ =gSaveBlock1 + 0x3144
- movs r0, 0
- mov r8, r0
- strh r6, [r4, 0x8]
- movs r0, 0x28
- strb r0, [r4, 0xC]
- mov r0, r8
- strb r0, [r4, 0xD]
- movs r0, 0x1
- strb r0, [r4, 0x13]
- adds r0, r5, 0
- movs r1, 0x42
- bl GetMonData
- str r0, [r4]
- adds r0, r5, 0
- movs r1, 0
- bl GetMonData
- str r0, [r4, 0x4]
- adds r0, r5, 0
- movs r1, 0x3A
- bl GetMonData
- strh r0, [r4, 0xA]
- adds r0, r5, 0
- movs r1, 0x16
- bl GetMonData
- strb r0, [r4, 0xE]
- adds r0, r5, 0
- movs r1, 0x17
- bl GetMonData
- strb r0, [r4, 0xF]
- adds r0, r5, 0
- movs r1, 0x18
- bl GetMonData
- strb r0, [r4, 0x10]
- adds r0, r5, 0
- movs r1, 0x21
- bl GetMonData
- strb r0, [r4, 0x11]
- adds r0, r5, 0
- movs r1, 0x2F
- bl GetMonData
- strb r0, [r4, 0x12]
- ldr r4, _08134304 @ =gRoamerLocation
- mov r0, r8
- strb r0, [r4]
- bl Random
- ldr r5, _08134308 @ =gRoamerLocations
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x14
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 1
- adds r1, r5
- ldrb r0, [r1]
- strb r0, [r4, 0x1]
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081342FC: .4byte gEnemyParty
- .ifdef SAPPHIRE
-_sub_8134240_Latias: .4byte 407
- .endif
-_08134300: .4byte gSaveBlock1 + 0x3144
-_08134304: .4byte gRoamerLocation
-_08134308: .4byte gRoamerLocations
- thumb_func_end sub_8134240
-
- thumb_func_start sub_813430C
-sub_813430C: @ 813430C
- push {lr}
- bl sub_81341F8
- bl sub_813420C
- bl sub_8134240
- pop {r0}
- bx r0
- thumb_func_end sub_813430C
-
- thumb_func_start mapnumbers_history_shift_sav1_0_2_4_out
-mapnumbers_history_shift_sav1_0_2_4_out: @ 8134320
- ldr r0, _08134340 @ =gUnknown_020392FC
- ldrb r1, [r0, 0x2]
- strb r1, [r0, 0x4]
- ldrb r1, [r0, 0x3]
- strb r1, [r0, 0x5]
- ldrb r1, [r0]
- strb r1, [r0, 0x2]
- ldrb r1, [r0, 0x1]
- strb r1, [r0, 0x3]
- ldr r2, _08134344 @ =gSaveBlock1
- ldrb r1, [r2, 0x4]
- strb r1, [r0]
- ldrb r1, [r2, 0x5]
- strb r1, [r0, 0x1]
- bx lr
- .align 2, 0
-_08134340: .4byte gUnknown_020392FC
-_08134344: .4byte gSaveBlock1
- thumb_func_end mapnumbers_history_shift_sav1_0_2_4_out
-
- thumb_func_start sub_8134348
-sub_8134348: @ 8134348
- push {r4,r5,lr}
- movs r1, 0
- ldr r0, _08134388 @ =gSaveBlock1 + 0x3144
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _08134380
- ldr r0, _0813438C @ =gRoamerLocation
- strb r1, [r0]
- ldr r5, _08134390 @ =gRoamerLocations
- adds r4, r0, 0
-_0813435C:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x14
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 1
- adds r1, r5
- ldrb r1, [r1]
- ldrb r0, [r4, 0x1]
- cmp r0, r1
- beq _0813435C
- strb r1, [r4, 0x1]
-_08134380:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08134388: .4byte gSaveBlock1 + 0x3144
-_0813438C: .4byte gRoamerLocation
-_08134390: .4byte gRoamerLocations
- thumb_func_end sub_8134348
-
- thumb_func_start sub_8134394
-sub_8134394: @ 8134394
- push {r4-r7,lr}
- movs r4, 0
- bl Random
- lsls r0, 16
- movs r1, 0xF0
- lsls r1, 12
- ands r1, r0
- cmp r1, 0
- bne _081343AE
- bl sub_8134348
- b _08134416
-_081343AE:
- ldr r0, _081343FC @ =gSaveBlock1 + 0x3144
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _08134416
- ldr r7, _08134400 @ =gRoamerLocation
- ldr r3, _08134404 @ =gRoamerLocations
-_081343BA:
- lsls r0, r4, 1
- adds r0, r4
- lsls r2, r0, 1
- adds r1, r2, r3
- ldrb r0, [r7, 0x1]
- ldrb r1, [r1]
- cmp r0, r1
- bne _0813440C
- ldr r6, _08134404 @ =gRoamerLocations
- adds r5, r2, 0x1
- ldr r4, _08134408 @ =gUnknown_020392FC
-_081343D0:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x5
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- adds r0, r5
- adds r0, r6
- ldrb r1, [r0]
- ldrb r0, [r4, 0x4]
- cmp r0, 0
- bne _081343F4
- ldrb r0, [r4, 0x5]
- cmp r0, r1
- beq _081343D0
-_081343F4:
- cmp r1, 0xFF
- beq _081343D0
- strb r1, [r7, 0x1]
- b _08134416
- .align 2, 0
-_081343FC: .4byte gSaveBlock1 + 0x3144
-_08134400: .4byte gRoamerLocation
-_08134404: .4byte gRoamerLocations
-_08134408: .4byte gUnknown_020392FC
-_0813440C:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x13
- bls _081343BA
-_08134416:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8134394
-
- thumb_func_start sub_813441C
-sub_813441C: @ 813441C
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _08134440 @ =gSaveBlock1 + 0x3144
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _08134448
- ldr r0, _08134444 @ =gRoamerLocation
- ldrb r3, [r0]
- cmp r2, r3
- bne _08134448
- ldrb r0, [r0, 0x1]
- cmp r1, r0
- bne _08134448
- movs r0, 0x1
- b _0813444A
- .align 2, 0
-_08134440: .4byte gSaveBlock1 + 0x3144
-_08134444: .4byte gRoamerLocation
-_08134448:
- movs r0, 0
-_0813444A:
- pop {r1}
- bx r1
- thumb_func_end sub_813441C
-
- thumb_func_start sub_8134450
-sub_8134450: @ 8134450
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r4, _081344C4 @ =gEnemyParty
- ldr r5, _081344C8 @ =gSaveBlock1 + 0x3144
- ldrh r1, [r5, 0x8]
- ldrb r2, [r5, 0xC]
- ldr r3, [r5]
- ldr r0, [r5, 0x4]
- str r0, [sp]
- adds r0, r4, 0
- bl CreateMonWithIVsPersonality
- adds r2, r5, 0
- adds r2, 0xD
- adds r0, r4, 0
- movs r1, 0x37
- bl SetMonData
- adds r2, r5, 0
- adds r2, 0xA
- adds r0, r4, 0
- movs r1, 0x39
- bl SetMonData
- adds r2, r5, 0
- adds r2, 0xE
- adds r0, r4, 0
- movs r1, 0x16
- bl SetMonData
- adds r2, r5, 0
- adds r2, 0xF
- adds r0, r4, 0
- movs r1, 0x17
- bl SetMonData
- adds r2, r5, 0
- adds r2, 0x10
- adds r0, r4, 0
- movs r1, 0x18
- bl SetMonData
- adds r2, r5, 0
- adds r2, 0x11
- adds r0, r4, 0
- movs r1, 0x21
- bl SetMonData
- adds r2, r5, 0
- adds r2, 0x12
- adds r0, r4, 0
- movs r1, 0x2F
- bl SetMonData
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081344C4: .4byte gEnemyParty
-_081344C8: .4byte gSaveBlock1 + 0x3144
- thumb_func_end sub_8134450
-
- thumb_func_start sub_81344CC
-sub_81344CC: @ 81344CC
- push {lr}
- ldr r1, _081344F8 @ =gSaveBlock1
- ldrb r0, [r1, 0x4]
- ldrb r1, [r1, 0x5]
- bl sub_813441C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081344FC
- bl Random
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- cmp r1, 0
- bne _081344FC
- bl sub_8134450
- movs r0, 0x1
- b _081344FE
- .align 2, 0
-_081344F8: .4byte gSaveBlock1
-_081344FC:
- movs r0, 0
-_081344FE:
- pop {r1}
- bx r1
- thumb_func_end sub_81344CC
-
- thumb_func_start sub_8134504
-sub_8134504: @ 8134504
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0x39
- bl GetMonData
- ldr r4, _08134528 @ =gSaveBlock1 + 0x3144
- strh r0, [r4, 0xA]
- adds r0, r5, 0
- movs r1, 0x37
- bl GetMonData
- strb r0, [r4, 0xD]
- bl sub_8134348
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08134528: .4byte gSaveBlock1 + 0x3144
- thumb_func_end sub_8134504
-
- thumb_func_start sub_813452C
-sub_813452C: @ 813452C
- ldr r1, _08134534 @ =gSaveBlock1 + 0x3144
- movs r0, 0
- strb r0, [r1, 0x13]
- bx lr
- .align 2, 0
-_08134534: .4byte gSaveBlock1 + 0x3144
- thumb_func_end sub_813452C
-
- thumb_func_start GetRoamerLocation
-GetRoamerLocation: @ 8134538
- ldr r3, _08134544 @ =gRoamerLocation
- ldrb r2, [r3]
- strb r2, [r0]
- ldrb r0, [r3, 0x1]
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08134544: .4byte gRoamerLocation
- thumb_func_end GetRoamerLocation
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/rom5.s b/asm/rom5.s
index 3e0ebe208..93f73dca8 100644
--- a/asm/rom5.s
+++ b/asm/rom5.s
@@ -636,7 +636,7 @@ _0807B1FE:
adds r0, r1
lsls r0, 2
adds r0, r5
- ldr r1, _0807B2D4 @ =gUnknown_02024E84
+ ldr r1, _0807B2D4 @ =gBattleMonForms
adds r1, r7, r1
ldrb r1, [r1]
bl StartSpriteAnim
@@ -648,7 +648,7 @@ _0807B2C4: .4byte gUnknown_02024E8C
_0807B2C8: .4byte gUnknown_02024BE0
_0807B2CC: .4byte gSprites
_0807B2D0: .4byte SpriteCallbackDummy
-_0807B2D4: .4byte gUnknown_02024E84
+_0807B2D4: .4byte gBattleMonForms
_0807B2D8:
ldr r2, _0807B328 @ =gBattleTypeFlags
ldrh r1, [r2]
@@ -860,7 +860,7 @@ _0807B3D0:
adds r0, r1
lsls r0, 2
adds r0, r5
- ldr r1, _0807B500 @ =gUnknown_02024E84
+ ldr r1, _0807B500 @ =gBattleMonForms
adds r1, r7, r1
ldrb r1, [r1]
bl StartSpriteAnim
@@ -903,7 +903,7 @@ _0807B4F0: .4byte gUnknown_02024E8C
_0807B4F4: .4byte gUnknown_02024BE0
_0807B4F8: .4byte gSprites
_0807B4FC: .4byte SpriteCallbackDummy
-_0807B500: .4byte gUnknown_02024E84
+_0807B500: .4byte gBattleMonForms
_0807B504: .4byte 0x02017800
thumb_func_end sub_807B184
diff --git a/common_syms/link.txt b/common_syms/link.txt
index bca63a8d2..faafda4d0 100644
--- a/common_syms/link.txt
+++ b/common_syms/link.txt
@@ -5,6 +5,10 @@ gLinkErrorOccurred
4
gLinkDebugValue2
4
+#begin GERMAN
+deUnkValue1
+deUnkValue2
+#end
gLinkPlayerPending
gLinkPlayers
gBlockReceived
diff --git a/data/pokemon.s b/data/pokemon.s
index 758e6c77e..2229512a4 100644
--- a/data/pokemon.s
+++ b/data/pokemon.s
@@ -115,20 +115,17 @@ gUnknown_082082FE:: @ 82082FE
.byte -5, -5, -10
.align 1
-gUnknown_0820831A:: @ 820831A
- .2byte 0xF
- .2byte 0x13
- .2byte 0x39
- .2byte 0x46
- .2byte 0x94
- .2byte 0xF9
- .2byte 0x7F
- .2byte 0x123
+gHMMoves:: @ 820831A
+ .2byte MOVE_CUT
+ .2byte MOVE_FLY
+ .2byte MOVE_SURF
+ .2byte MOVE_STRENGTH
+ .2byte MOVE_FLASH
+ .2byte MOVE_ROCK_SMASH
+ .2byte MOVE_WATERFALL
+ .2byte MOVE_DIVE
.2byte 0xFFFF
-@ "Nidoran♂" Japanese name
+gJapaneseNidoranNames:: @ 820832C
.string "ニドラン♂$", 11
-
-@ "Nidoran♀" Japanese name
-gUnknown_08208337:: @ 8208337
- .string "ニドラン♀$", 13
+ .string "ニドラン♀$", 11
diff --git a/data/roamer.s b/data/roamer.s
deleted file mode 100644
index e7c03c617..000000000
--- a/data/roamer.s
+++ /dev/null
@@ -1,28 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gRoamerLocations:: @ 8402E80
- .byte 0x19,0x1A,0x20,0x21,0x31,0xFF
- .byte 0x1A,0x19,0x20,0x21,0xFF,0xFF
- .byte 0x20,0x1A,0x19,0x21,0xFF,0xFF
- .byte 0x21,0x20,0x19,0x1A,0x22,0x26
- .byte 0x22,0x21,0x23,0xFF,0xFF,0xFF
- .byte 0x23,0x22,0x24,0xFF,0xFF,0xFF
- .byte 0x24,0x23,0x25,0x26,0xFF,0xFF
- .byte 0x25,0x24,0x26,0xFF,0xFF,0xFF
- .byte 0x26,0x25,0x21,0xFF,0xFF,0xFF
- .byte 0x27,0x24,0x28,0x29,0xFF,0xFF
- .byte 0x28,0x27,0x2A,0xFF,0xFF,0xFF
- .byte 0x29,0x27,0x2A,0xFF,0xFF,0xFF
- .byte 0x2A,0x28,0x29,0x2B,0xFF,0xFF
- .byte 0x2B,0x2A,0x2C,0xFF,0xFF,0xFF
- .byte 0x2C,0x2B,0x2D,0xFF,0xFF,0xFF
- .byte 0x2D,0x2C,0x2E,0xFF,0xFF,0xFF
- .byte 0x2E,0x2D,0x2F,0xFF,0xFF,0xFF
- .byte 0x2F,0x2E,0x30,0xFF,0xFF,0xFF
- .byte 0x30,0x2F,0x31,0xFF,0xFF,0xFF
- .byte 0x31,0x30,0x19,0xFF,0xFF,0xFF
- .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
diff --git a/data/specials.inc b/data/specials.inc
index 76763781d..941fd12a8 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -297,7 +297,7 @@ gSpecials::
.4byte GetLeadMonEVCount
.4byte sub_8064EAC
.4byte sub_8064ED4
- .4byte sub_813430C
+ .4byte InitRoamer
.4byte sub_810F5BC
.4byte IsGrassTypeInParty
.4byte sub_8081334
diff --git a/data/text/battle_strings.inc b/data/text/battle_strings.inc
index 12ccf0fad..d0c8f74d5 100644
--- a/data/text/battle_strings.inc
+++ b/data/text/battle_strings.inc
@@ -480,7 +480,7 @@ BattleText_TookAttack2:
.string "{DEFENDING_MON}’s {STRING 22}\ntook the attack!$"
gUnknown_083FFCCA:: @ 83FFCCA
-BattleText_PreventedSwitch:
+BattleText_PreventedSwitch::
.string "{STRING 0}’s {STRING 20}\nprevents switching!\p$"
BattleText_PreventedOther:
.string "{DEFENDING_MON}’s {STRING 22}\nprevented {STRING 16}’s\l{STRING 0} from working!$"
@@ -1043,15 +1043,15 @@ BattleText_SpDef:
.string "SP. DEF$"
gUnknown_08400DD6:: @ 8400DD6
-BattleText_SafariBalls:
+BattleText_SafariBalls::
.string "{HIGHLIGHT RED}SAFARI BALLS$"
gUnknown_08400DE6:: @ 8400DE6
-BattleText_SafariBallsLeft:
+BattleText_SafariBallsLeft::
.string "{HIGHLIGHT RED}Left: $"
gUnknown_08400DF0:: @ 8400DF0
-BattleText_HighlightRed:
+BattleText_HighlightRed::
.string "{HIGHLIGHT RED}$"
BattleText_Sleep::
@@ -1101,7 +1101,7 @@ gBadEggNickname:: @ 8400E3A
.string "Bad EGG$"
gUnknown_08400E42:: @ 8400E42
-BattleText_Wally:
+BattleText_Wally::
.string "WALLY$"
BattleText_Win:: @ 8400E48
diff --git a/include/asm.h b/include/asm.h
index fe1b3139f..e72683e45 100644
--- a/include/asm.h
+++ b/include/asm.h
@@ -45,6 +45,15 @@ struct UnknownStruct_FPA
u16 unk14;
};
+struct CryRelatedStruct
+{
+ u16 unk0;
+ u8 unk2;
+ u8 paletteNo;
+ u8 xPos;
+ u8 yPos;
+};
+
#include "asm.inc.h"
#endif //PROJECT_ASM_H
diff --git a/include/asm.inc.h b/include/asm.inc.h
index 416917fa6..eb3cec985 100644
--- a/include/asm.inc.h
+++ b/include/asm.inc.h
@@ -10,20 +10,23 @@ void sub_80157C4(u8 index);
u8 sub_8015A98(u8, u8, u8);
u8 sub_8018324(u8, u8, u8, u8, u16);
+// asm/battle_5.o
+void sub_802C098();
+void sub_802E3E4(u8, int);
+void nullsub_8(u8);
+
// asm/battle_7.o
void sub_8032AA8(u8 index, int i);
// src/pokemon_3.o
u16 SpeciesToNationalPokedexNum(u16);
-
-// asm/pokemon_3.o
-void DrawSpindaSpots(u16, u32, void *, u8);
+void DrawSpindaSpots(u16, u32, u8 *, u8);
u8 sub_803FC58(u16);
void AdjustFriendship(struct Pokemon *, u8);
void sub_80408BC();
void current_map_music_set__default_for_battle(u16);
-// asm/util.o
+// src/util.o
void StoreWordInTwoHalfwords(u16 *, u32);
void LoadWordFromTwoHalfwords(u16 *, u32 *);
@@ -157,7 +160,7 @@ void sub_806FA18(u8 taskId);
// src/party_menu.o
void sub_806E834();
-// asm/rom_8077ABC.o
+// src/rom_8077ABC.o
u8 battle_side_get_owner(u8);
u8 battle_get_per_side_status(u8);
u8 battle_get_side_with_given_state(u8);
@@ -211,6 +214,9 @@ void sub_8089A70(void);
void sub_808A004();
void sub_808AB90(void);
+// asm/rom_8094928.o
+u8 pokemon_order_func(u8);
+
// asm/pokemon_storage_system.o
void sub_80961D8(void);
@@ -321,9 +327,8 @@ void sub_80C8F34(u8);
// asm/easy_chat.o
void sub_80E6764(void);
-void sub_80EB3FC(u8 *, u16);
+u8* sub_80EB3FC(u8 *, u16);
u8 ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16, u16);
-u16 sub_80EB72C(u16);
// asm/pokenav.o
void sub_80EBA5C(void);
@@ -355,7 +360,7 @@ s16 sub_810CAE4(u8, struct Pokeblock *);
// asm/fldeff_flash.o
void sub_810CC80(void);
-// asm/time_events.o
+// src/time_events.o
u8 IsMirageIslandPresent(void);
// asm/field_specials.o
@@ -370,11 +375,22 @@ void sub_810FA54(void);
// asm/battle_records.o
void InitLinkBattleRecords(void);
+// asm/pokedex_cry_screen.o
+u8 sub_8119E3C(struct CryRelatedStruct *, u8);
+void sub_8119F88(u8 a);
+void sub_811A050(u16 species);
+u8 ShowPokedexCryScreen(struct CryRelatedStruct *, u8);
+void DestroyCryMeterNeedleSprite();
+
// asm/battle_transition.o
void sub_811AABC(u8);
void sub_811AAD8(u8);
u8 sub_811AAE8(void);
+// asm/battle_message.o
+void get_battle_strings_(u8 *);
+void sub_8120FFC(const u8 *, u8 *);
+
// src/mystery_event_script.o
u32 sub_812613C(u8 *);
void sub_8126160(u8);
@@ -400,20 +416,15 @@ u8 IsThereStorageSpaceForDecoration(u8);
u8 sub_8134074(u8);
s8 sub_81340A8(u8);
-// asm/roamer.o
-void sub_81341F8(void);
-void sub_813420C(void);
-void mapnumbers_history_shift_sav1_0_2_4_out(void);
-void sub_8134348(void);
-void sub_8134394();
-u8 sub_81344CC(void);
-
// asm/battle_tower.o
void sub_8134AC0(void *);
// src/player_pc.o
void NewGameInitPCItems(void);
+// src/diploma.o
+void sub_8145D88(void);
+
// asm/intro_credits_graphics.o
void load_intro_part2_graphics(/*TODO: arg types*/);
void sub_8148C78(/*TODO: arg types*/);
diff --git a/include/battle.h b/include/battle.h
index 4b9144721..8f7141803 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -51,8 +51,7 @@ struct Trainer
{
/*0x00*/ u8 partyFlags;
/*0x01*/ u8 trainerClass;
- /*0x02*/ u8 encounterMusic:7;
- /*0x02*/ u8 gender:1;
+ /*0x02*/ u8 encounterMusic_gender;
/*0x03*/ u8 trainerPic;
/*0x04*/ u8 trainerName[12];
/*0x10*/ u16 items[4];
diff --git a/include/config.h b/include/config.h
index 5ee062006..205f53f16 100644
--- a/include/config.h
+++ b/include/config.h
@@ -5,19 +5,27 @@
#define REVISION 0
#endif
-#if REVISION == 2
+#if (ENGLISH && REVISION == 2) || (GERMAN && REVISION == 1)
#define BUGFIX_BERRY
#endif
-#if REVISION >= 1
+#if (ENGLISH && REVISION >= 1) || GERMAN
#define BUGFIX_GLYPHWIDTH
#define BUGFIX_SAVEFAILEDSCREEN1
#endif
-// #define BUGFIX_SAVEFAILEDSCREEN2
+#if GERMAN
+#define BUGFIX_SAVEFAILEDSCREEN2
+#endif
// European editions of Ruby/Sapphire and all editions of Emerald have this fix.
-// #define BUGFIX_TRAINERAPPROACH
+#if GERMAN
+#define BUGFIX_TRAINERAPPROACH
+#endif
+
+#if (ENGLISH && REVISION >= 1) || GERMAN
+#define BUGFIX_EVO_NAME
+#endif
// Fixed in Emerald.
// #define BUGFIX_SETMONIVS
diff --git a/include/easy_chat.h b/include/easy_chat.h
new file mode 100644
index 000000000..ee5ac4138
--- /dev/null
+++ b/include/easy_chat.h
@@ -0,0 +1,32 @@
+#ifndef GUARD_EASYCHAT_H
+#define GUARD_EASYCHAT_H
+
+enum {
+ EC_GROUP_POKEMON,
+ EC_GROUP_TRAINER,
+ EC_GROUP_STATUS,
+ EC_GROUP_BATTLE,
+ EC_GROUP_GREETINGS,
+ EC_GROUP_PEOPLE,
+ EC_GROUP_VOICES,
+ EC_GROUP_SPEECH,
+ EC_GROUP_ENDINGS,
+ EC_GROUP_FEELINGS,
+ EC_GROUP_CONDITIONS,
+ EC_GROUP_ACTIONS,
+ EC_GROUP_LIFESTYLE,
+ EC_GROUP_HOBBIES,
+ EC_GROUP_TIME,
+ EC_GROUP_MISC,
+ EC_GROUP_ADJECTIVES,
+ EC_GROUP_EVENTS,
+ EC_GROUP_MOVE_1,
+ EC_GROUP_MOVE_2,
+ EC_GROUP_TRENDY_SAYING,
+ EC_GROUP_POKEMON_2,
+};
+
+
+u16 sub_80EB72C(u16 group);
+
+#endif // GUARD_EASYCHAT_H
diff --git a/include/field_message_box.h b/include/field_message_box.h
index 50d96ccd1..c35aaf595 100644
--- a/include/field_message_box.h
+++ b/include/field_message_box.h
@@ -10,10 +10,10 @@ enum
};
void InitFieldMessageBox(void);
-bool8 ShowFieldMessage(u8 *message);
-bool8 ShowFieldAutoScrollMessage(u8 *message);
-bool8 unref_sub_8064BB8(u8 *message);
-bool8 unref_sub_8064BD0(u8 *message);
+bool8 ShowFieldMessage(const u8 *message);
+bool8 ShowFieldAutoScrollMessage(const u8 *message);
+bool8 unref_sub_8064BB8(const u8 *message);
+bool8 unref_sub_8064BD0(const u8 *message);
void HideFieldMessageBox(void);
u8 GetFieldMessageBoxMode(void);
bool8 IsFieldMessageBoxHidden(void);
diff --git a/include/global.h b/include/global.h
index 62e557ef4..4cbbef5cc 100644
--- a/include/global.h
+++ b/include/global.h
@@ -28,7 +28,11 @@ enum LanguageId {
LANGUAGE_GERMAN = 5,
};
+#if defined(ENGLISH)
#define GAME_LANGUAGE (LANGUAGE_ENGLISH)
+#elif defined(GERMAN)
+#define GAME_LANGUAGE (LANGUAGE_GERMAN)
+#endif
enum
{
@@ -152,7 +156,8 @@ struct Roamer
/*0x10*/ u8 cute;
/*0x11*/ u8 smart;
/*0x12*/ u8 tough;
- /*0x13*/ u8 active;
+ /*0x13*/ bool8 active;
+ /*0x14*/ u8 filler[0x8];
};
struct RamScriptData
@@ -291,7 +296,7 @@ struct UnkMauvilleOldManStruct2
u8 unk1;
u8 unk2;
u16 mauvilleOldMan_ecArray[10];
- u16 mauvilleOldMan_ecArray2[6];
+ u8 mauvilleOldMan_ecArray2[12];
u8 fillerF[0x2];
/* size = 0x2C */
};
@@ -382,10 +387,13 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2B0D*/ u8 outbreakPokemonProbability;
/*0x2B0E*/ u16 outbreakUnk5;
/*0x2B10*/ u8 filler_2B0E[0xC];
- /*0x2B1C*/ u16 unk2B1C[4];
- /*0x2B24*/ u8 filler_2B24[0x28];
+ /*0x2B1C*/ u16 unk2B1C[6];
+ /*0x2B28*/ u16 unk2B28[6];
+ /*0x2B34*/ u16 unk2B34[6];
+ /*0x2B40*/ u16 unk2B40[6];
/*0x2B4C*/ struct MailStruct mail[16];
- /*0x2D8C*/ u8 filler_2D8C[0x8];
+ /*0x2D8C*/ u8 unk2D8C[4];
+ /*0x2D90*/ u8 filler_2D90[0x4];
/*0x2D94*/ OldMan oldMan;
/*0x2DC0*/ u8 unk_2DC0[0x14];
/*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff
@@ -395,11 +403,12 @@ struct SaveBlock1 /* 0x02025734 */
/*0x303C*/ u8 filler_303C[0x38];
/*0x3074*/ u8 filler_3074[0x42];
/*0x30B6*/ u8 filler_30B6;
- /*0x30B7*/ u8 filler_30B7[0x59];
+ /*0x30B7*/ u8 filler_30B7[1];
+ /*0x30B8*/ u8 linkBattleRecords[5][16];
+ /*0x3108*/ u8 filler_3108[8];
/*0x3110*/ u8 giftRibbons[7];
/*0x3117*/ u8 filler_311B[0x2D];
/*0x3144*/ struct Roamer roamer;
- /*0x3158*/ u8 filler_3158[0x8];
/*0x3160*/ struct EnigmaBerry enigmaBerry;
/*0x3690*/ struct RamScript ramScript;
/*0x3A7C*/ u8 filler_3A7C[0x10];
@@ -488,7 +497,7 @@ struct UnkStruct_8054FF8
// wasnt defined so I had to define it
struct HallOfFame
{
- u8 filler[0x1F00];
+ u8 filler[0x1F00];
};
extern struct HallOfFame gHallOfFame;
diff --git a/include/m4a.h b/include/m4a.h
index 949403885..b6c8f9072 100644
--- a/include/m4a.h
+++ b/include/m4a.h
@@ -9,6 +9,7 @@ void m4aSoundInit(void);
void m4aSoundMain(void);
void m4aSongNumStart(u16);
void m4aSongNumStop(u16 n);
+void m4aMPlayAllStop(void);
void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo);
void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed);
void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed);
diff --git a/include/pokemon.h b/include/pokemon.h
index 39bde80cb..ae02de8ca 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -65,7 +65,7 @@
#define MON_DATA_SPD 61
#define MON_DATA_SPATK 62
#define MON_DATA_SPDEF 63
-#define MON_DATA_64 64
+#define MON_DATA_MAIL 64
#define MON_DATA_SPECIES2 65
#define MON_DATA_IVS 66
#define MON_DATA_CHAMPION_RIBBON 67
@@ -115,6 +115,9 @@
#define TYPE_DARK 0x11
#define PARTY_SIZE 6
+#define MAX_TOTAL_EVS 510
+#define NUM_STATS 6
+#define UNOWN_FORM_COUNT 28
enum {
NATURE_HARDY,
@@ -250,7 +253,7 @@ struct Pokemon
struct BoxPokemon box;
u32 status;
u8 level;
- u8 pokerus;
+ u8 mail;
u16 hp;
u16 maxHP;
u16 attack;
@@ -455,7 +458,7 @@ u8 GetNatureFromPersonality(u32 personality);
u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex);
-void sub_8040B1C(void *);
+void MonRestorePP(struct Pokemon *);
u8 *sub_803F378(u16 itemId);
diff --git a/include/roamer.h b/include/roamer.h
new file mode 100644
index 000000000..9d5f3c4ed
--- /dev/null
+++ b/include/roamer.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_ROAMER_H
+#define GUARD_ROAMER_H
+
+void ClearRoamerData(void);
+void ClearRoamerLocationData(void);
+void UpdateLocationHistoryForRoamer(void);
+void RoamerMoveToOtherLocationSet(void);
+void RoamerMove();
+u8 TryStartRoamerEncounter(void);
+
+#endif
diff --git a/include/songs.h b/include/songs.h
index 01ecf9fe0..244bb9808 100644
--- a/include/songs.h
+++ b/include/songs.h
@@ -117,9 +117,9 @@ enum
SE_PN_OFF,
SE_Z_SEARCH,
SE_TAMAGO,
- SE_TB_START,
- SE_TB_KON,
- SE_TB_KARA,
+ /*0x72*/ SE_TB_START,
+ /*0x73*/ SE_TB_KON,
+ /*0x74*/ SE_TB_KARA,
SE_BIDORO,
SE_W085,
SE_W085B,
diff --git a/include/string_util.h b/include/string_util.h
index c20965380..f45c2741f 100644
--- a/include/string_util.h
+++ b/include/string_util.h
@@ -16,6 +16,9 @@ u8 *StringAppend(u8 *dest, const u8 *src);
u8 *StringCopyN(u8 *dest, const u8 *src, u8 n);
u8 *StringAppendN(u8 *dest, const u8 *src, u8 n);
u16 StringLength(const u8 *str);
+#ifdef GERMAN
+s32 StringLengthN(const u8 *str, s32 n);
+#endif
s32 StringCompare(const u8 *str1, const u8 *str2);
s32 StringCompareN(const u8 *str1, const u8 *str2, u32 n);
u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n);
diff --git a/include/text.h b/include/text.h
index 4f52e3cdd..ba4ccb4b2 100644
--- a/include/text.h
+++ b/include/text.h
@@ -3,8 +3,13 @@
#define CHAR_SPACE 0x00
#define CHAR_QUESTION_MARK 0xAC
+#define CHAR_PERIOD 0xAD
#define CHAR_HYPHEN 0xAE
+#define CHAR_MALE 0xB5
+#define CHAR_FEMALE 0xB6
+#define CHAR_COMMA 0xB8
#define CHAR_CURRENCY 0xB7
+#define CHAR_SLASH 0xBA
#define CHAR_COLON 0xF0
#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
#define PLACEHOLDER_BEGIN 0xFD // string placeholder
@@ -155,7 +160,7 @@ u8 sub_8002F44(struct Window *win);
u8 sub_8003418(struct Window *win);
u8 sub_8003460(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top);
u8 sub_8003490(struct Window *win, u8 c, u16 tileDataStartOffset, u8 left, u8 top);
-void sub_80034D4(u8 *tileData, u8 *text);
+void sub_80034D4(u8 *tileData, const u8 *text);
u8 sub_80034EC(u8 *str);
u8 *sub_8003504(u8 *dest, s32 value, u8 alignAmount, u8 alignType);
u8 *sub_8003558(u8 *dest, const u8 *src, u8 alignAmount, u8 alignType);
diff --git a/ld_script.txt b/ld_script.txt
index 76d8d7c8e..eda6f8061 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -56,6 +56,8 @@ SECTIONS {
asm/battle_4.o(.text);
asm/battle_5.o(.text);
asm/battle_6.o(.text);
+ src/battle_6.o(.text);
+ asm/battle_6.o(.text_8030464);
asm/battle_7.o(.text);
asm/battle_8.o(.text);
asm/battle_9.o(.text);
@@ -65,15 +67,15 @@ SECTIONS {
src/pokemon_2.o(.text);
asm/pokemon_item_effect.o(.text);
src/pokemon_3.o(.text);
- asm/pokemon_3.o(.text);
src/trig.o(.text);
src/rng.o(.text);
src/util.o(.text);
src/blend_palette.o(.text);
src/daycare.o(.text);
asm/daycare.o(.text);
+ src/egg_hatch.o(.text);
asm/egg_hatch.o(.text);
- asm/battle_interface.o(.text);
+ src/battle_interface.o(.text);
src/smokescreen.o(.text);
asm/pokeball.o(.text);
src/load_save.o(.text);
@@ -150,7 +152,7 @@ SECTIONS {
asm/pokemon_summary_screen.o(.text_80A0958);
src/script_movement.o(.text);
src/fldeff_cut.o(.text);
- asm/mail_data.o(.text);
+ src/mail_data.o(.text);
src/map_name_popup.o(.text);
asm/item_menu.o(.text);
src/battle_anim_80A7E7C.o(.text);
@@ -189,6 +191,7 @@ SECTIONS {
asm/battle_anim_80CA710.o(.text);
src/bike.o(.text);
asm/easy_chat.o(.text);
+ src/easy_chat.o(.text);
asm/pokenav.o(.text);
asm/mon_markings.o(.text);
src/mauville_old_man.o(.text);
@@ -214,14 +217,19 @@ SECTIONS {
asm/fldeff_flash.o(.text);
src/post_battle_event_funcs.o(.text);
src/time_events.o(.text);
- asm/birch_pc.o(.text);
+ src/birch_pc.o(.text);
src/hof_pc.o(.text);
+ src/field_specials.o(.text);
asm/field_specials.o(.text);
asm/battle_records.o(.text);
+ src/battle_records.o(.text);
+ asm/battle_records.o(.text_8110494);
asm/pokedex_area_screen.o(.text);
asm/evolution_scene.o(.text);
asm/roulette.o(.text);
asm/pokedex_cry_screen.o(.text);
+ src/pokedex_cry_screen.o(.text);
+ asm/pokedex_cry_screen.o(.text_811A4F8);
src/coins.o(.text);
src/landmark.o(.text);
src/fldeff_strength.o(.text);
@@ -240,12 +248,14 @@ SECTIONS {
asm/field_effect_helpers.o(.text);
asm/contest_ai.o(.text);
asm/battle_anim_81258BC.o(.text);
+ src/battle_anim_81258BC.o(.text);
+ asm/battle_anim_81258BC.o(.text_812BBFC);
src/fldeff_sweetscent.o(.text);
asm/battle_anim_812C144.o(.text);
asm/learn_move.o(.text);
src/fldeff_softboiled.o(.text);
asm/decoration_inventory.o(.text);
- asm/roamer.o(.text);
+ src/roamer.o(.text);
asm/battle_tower.o(.text);
asm/use_pokeblock.o(.text);
asm/battle_anim_8137220.o(.text);
@@ -330,6 +340,7 @@ SECTIONS {
data/main_menu.o(.rodata);
data/data2.o(.rodata);
data/pokemon.o(.rodata);
+ . = ALIGN(4);
data/trig.o(.rodata);
data/util.o(.rodata);
data/daycare.o(.rodata);
@@ -452,7 +463,7 @@ SECTIONS {
data/battle_anim_812C144.o(.rodata);
data/learn_move.o(.rodata);
data/decoration_inventory.o(.rodata);
- data/roamer.o(.rodata);
+ src/roamer.o(.rodata);
data/battle_tower.o(.rodata);
data/use_pokeblock.o(.rodata);
data/battle_anim_8137220.o(.rodata);
diff --git a/src/battle_6.c b/src/battle_6.c
new file mode 100644
index 000000000..bc540ce72
--- /dev/null
+++ b/src/battle_6.c
@@ -0,0 +1,57 @@
+#include "global.h"
+#include "asm.h"
+#include "menu_cursor.h"
+#include "text.h"
+
+extern u16 gUnknown_030042A4;
+extern u16 gUnknown_030042A0;
+
+extern struct Window gUnknown_03004210;
+
+extern void (*gUnknown_03004330[])(void);
+
+extern u8 gUnknown_02024A60;
+extern u8 gUnknown_02024E60[];
+extern u8 gUnknown_020238CC[];
+
+extern u16 gUnknown_030042C0;
+extern u16 gUnknown_030041B4;
+extern u16 gUnknown_03004288;
+extern u16 gUnknown_03004280;
+extern u16 gUnknown_030041B0;
+extern u16 gUnknown_030041B8;
+
+extern const u8 gUnknown_08400CA8[];
+extern const u8 gUnknown_08400CF3[];
+
+#if ENGLISH
+#define SUB_803037C_TILE_DATA_OFFSET 440
+#elif GERMAN
+#define SUB_803037C_TILE_DATA_OFFSET 444
+#endif
+
+void sub_803037C(void) {
+ int r4;
+
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 160;
+ FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18);
+ FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38);
+
+ gUnknown_03004330[gUnknown_02024A60] = sub_802C098;
+
+ InitWindow(&gUnknown_03004210, gUnknown_08400CF3, 400, 18, 35);
+ sub_8002F44(&gUnknown_03004210);
+ sub_814A5C0(0, 0xFFFF, 12, 11679, 0);
+
+ for (r4 = 0; r4 < 4; r4++)
+ {
+ nullsub_8(r4);
+ }
+
+ sub_802E3E4(gUnknown_02024E60[gUnknown_02024A60], 0);
+
+ get_battle_strings_((u8 *) gUnknown_08400CA8);
+ InitWindow(&gUnknown_03004210, gUnknown_020238CC, SUB_803037C_TILE_DATA_OFFSET, 2, 35);
+ sub_8002F44(&gUnknown_03004210);
+}
diff --git a/src/battle_ai.c b/src/battle_ai.c
index bd320904f..9bbaf908e 100644
--- a/src/battle_ai.c
+++ b/src/battle_ai.c
@@ -334,6 +334,10 @@ void BattleAI_SetupAIData(void)
AI_THINKING_STRUCT->aiFlags = 0x20000000;
else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
AI_THINKING_STRUCT->aiFlags = 0x80000000;
+#ifdef GERMAN
+ else if (gBattleTypeFlags & 0x900 || gTrainerBattleOpponent == 0x400)
+ AI_THINKING_STRUCT->aiFlags = 7;
+#endif
else // otherwise, just set aiFlags to whatever flags the trainer has set in their data.
AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent].aiFlags;
}
diff --git a/src/battle_anim_81258BC.c b/src/battle_anim_81258BC.c
new file mode 100644
index 000000000..42a685f4a
--- /dev/null
+++ b/src/battle_anim_81258BC.c
@@ -0,0 +1,50 @@
+#include "global.h"
+#include "asm.h"
+#include "text.h"
+#include "menu_cursor.h"
+
+extern struct Window gUnknown_03004210;
+extern u8 gUnknown_020238CC[];
+extern u8 gUnknown_02024E60[];
+
+extern const u8 gUnknown_08400CBB[];
+extern u8 gUnknown_02024A60;
+extern const u8 gUnknown_08400D15[];
+
+extern void* gUnknown_03004330[];
+extern u16 gUnknown_030042A0;
+extern u16 gUnknown_030042A4;
+
+void bx_battle_menu_t6_2(void);
+
+#if ENGLISH
+#define SUB_812BB10_TILE_DATA_OFFSET 440
+#elif GERMAN
+#define SUB_812BB10_TILE_DATA_OFFSET 444
+#endif
+
+void sub_812BB10(void) {
+ int i;
+
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 160;
+ gUnknown_03004210.paletteNum = 0;
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18);
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36);
+ gUnknown_03004330[gUnknown_02024A60] = bx_battle_menu_t6_2;
+
+ InitWindow(&gUnknown_03004210, gUnknown_08400D15, 400, 18, 35);
+ sub_8002F44(&gUnknown_03004210);
+ sub_814A5C0(0, 0xFFFF, 12, 11679, 0);
+
+ for (i = 0; i < 4; i++)
+ {
+ nullsub_8(i);
+ }
+
+ sub_802E3E4(gUnknown_02024E60[gUnknown_02024A60], 0);
+ get_battle_strings_((u8 *) gUnknown_08400CBB);
+
+ InitWindow(&gUnknown_03004210, gUnknown_020238CC, SUB_812BB10_TILE_DATA_OFFSET, 2, 35);
+ sub_8002F44(&gUnknown_03004210);
+} \ No newline at end of file
diff --git a/src/battle_interface.c b/src/battle_interface.c
new file mode 100644
index 000000000..d097598b5
--- /dev/null
+++ b/src/battle_interface.c
@@ -0,0 +1,3082 @@
+#include "global.h"
+#include "asm.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "text.h"
+#include "decompress.h"
+#include "sound.h"
+#include "songs.h"
+#include "battle.h"
+#include "palette.h"
+
+struct UnknownStruct5
+{
+ u8 unk0;
+ u32 unk4;
+ u32 unk8;
+ u32 unkC;
+ u32 unk10;
+};
+
+struct UnknownStruct6
+{
+ u8 bit_0:1;
+ u8 bit_1:1;
+ u8 bit_2:1;
+ u8 bit_3:1;
+ u8 bit_4:1;
+ u8 bit_5:1;
+ u8 bit_6:1;
+ u8 bit_7:1;
+};
+
+struct UnknownStruct7
+{
+ u8 filler0[0x180];
+};
+
+struct UnknownStruct9
+{
+ s32 unk0;
+ u32 unk4;
+ u32 unk8;
+ u32 unkC_0:5;
+ u32 unk10;
+};
+
+extern u8 ewram[];
+#define ewram520 ((struct UnknownStruct7 *)(ewram + 0x00520))
+#define ewram16088 (*(u8 *) (ewram + 0x16088))
+#define ewram16089 (*(u8 *) (ewram + 0x16089))
+#define ewram17800 ((struct UnknownStruct6 *)(ewram + 0x17800))
+#define ewram17850 ((struct UnknownStruct5 *)(ewram + 0x17850))
+
+extern u8 gUnknown_020238CC[];
+extern u8 gUnknown_02024A68;
+extern u16 gUnknown_02024A6A[];
+extern u8 gUnknown_02024A72[];
+extern u8 gUnknown_03004340[];
+
+extern u16 gBattleTypeFlags;
+extern u8 gNumSafariBalls;
+
+extern u32 gExperienceTables[8][101];
+extern const struct SpriteTemplate gSpriteTemplate_820A4EC[];
+extern const struct SpriteTemplate gSpriteTemplate_820A51C[];
+extern const struct SpriteTemplate gSpriteTemplate_820A54C;
+extern const struct SpriteTemplate gSpriteTemplate_820A56C[];
+extern const struct SubspriteTable gSubspriteTables_820A684[];
+extern const struct SubspriteTable gSubspriteTables_820A6E4[];
+extern const struct SubspriteTable gSubspriteTables_820A6EC[];
+extern const struct SpriteSheet gUnknown_0820A754[];
+extern const struct SpritePalette gUnknown_0820A764[];
+extern const struct SpritePalette gUnknown_0820A774[];
+extern const struct SpriteSheet gUnknown_0820A784[];
+extern const struct SpriteTemplate gSpriteTemplate_820A7A4[];
+extern const struct SpriteTemplate gSpriteTemplate_820A7D4[];
+extern void *const gUnknown_0820A804[];
+extern void *const gUnknown_0820A80C[];
+extern void *const gUnknown_0820A814[];
+extern void *const gUnknown_0820A83C[];
+extern void *const gUnknown_0820A848[];
+extern void *const gUnknown_0820A854[];
+extern void *const gUnknown_0820A85C[];
+extern void *const gUnknown_0820A87C[];
+extern void *const gUnknown_0820A894[];
+extern void *const gUnknown_0820A8B4[];
+extern void *const gUnknown_0820A8DC[];
+extern void *const gUnknown_0820A904[];
+extern const u8 gUnknown_0820A81C[];
+extern const u8 gUnknown_0820A864[];
+extern const u8 gUnknown_0820A89C[];
+extern const u8 gUnknown_0820A8B0[];
+extern const struct BaseStats gBaseStats[];
+extern const u8 BattleText_SafariBalls[];
+extern const u8 BattleText_SafariBallsLeft[];
+extern const u8 BattleText_HighlightRed[];
+extern const u8 gUnknown_08D1216C[][32];
+
+extern const u8 *const gNatureNames[];
+extern const u16 gBattleInterfaceStatusIcons_DynPal[];
+
+#define ABS(n) ((n) >= 0 ? (n) : -(n))
+// Used for computing copy destination addresses
+#define MACRO1(n) ((n) - (n) / 8 * 8) + 64 * ((n) / 8)
+
+extern int sub_8040D3C();
+extern u8 sub_8090D90();
+extern void load_gfxc_health_bar();
+
+static void sub_8043D5C(struct Sprite *);
+static const void *sub_8043CDC(u8);
+void sub_8044210(u8, s16, u8);
+static void draw_status_ailment_maybe(u8);
+void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c);
+extern void sub_8045180(struct Sprite *);
+static void sub_8045110(struct Sprite *);
+static void sub_8045048(struct Sprite *);
+static void sub_8044F70(u8 taskId);
+static void sub_8044E74(u8 taskId);
+static void sub_8044ECC(u8 taskId);
+static u8 sub_80457E8(u8, u8);
+s32 sub_8045C78(u8, u8, u8, u8);
+static int sub_8045F58(s32, s32, int, int *, u8, u16);
+static u8 GetScaledExpFraction(int, int, int, u8);
+static void sub_8045D58(u8, u8);
+static u8 sub_804602C(int, int, int, int *, u8 *, u8);
+static void sub_8046128(struct UnknownStruct9 *a, int *b, void *c);
+
+static int do_nothing(s16 unused1, s16 unused2, int unused3)
+{
+ return 9;
+}
+
+#ifdef NONMATCHING
+void sub_8043740(s16 a, u16 *b, u8 c)
+{
+ u8 sp0[4];
+ s8 i;
+ s8 j;
+ s32 r9;
+
+ for (i = 0; i < 4; i++)
+ sp0[i] = 0;
+
+ //_0804377C
+ //i = 3;
+ //r9 = -1;
+ for (i = 3, r9 = -1;;)
+ {
+ if (a > 0)
+ {
+ sp0[i] = a % 10;
+ a /= 10;
+ i--;
+ }
+ else
+ break;
+ asm(""::"r"(r9));
+ }
+
+ //_080437AA
+ for (; i > r9; i--)
+ {
+ //asm("":"=r"(r9));
+ sp0[i] = -1;
+ }
+ //_080437CE
+ if (sp0[3] == 0xFF)
+ sp0[3] = 0;
+
+ //_080437DA
+ if (c == 0)
+ {
+ for (i = 0, j = 0; i < 4; i++)
+ {
+ if (sp0[j] == 0xFF)
+ {
+ b[j] = (b[j] & 0xFC00) | 0x1E;
+ b[i + 0x20] = (b[i + 0x20] & 0xFC00) | 0x1E;
+ }
+ else
+ {
+ b[j] = (b[j] & 0xFC00) | (sp0[j] + 0x14);
+ b[i + 0x20] = (b[i + 0x20] & 0xFC00) | (sp0[i] + 0x34);
+ }
+ j++;
+ }
+
+ }
+ //_0804386A
+ else
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if (sp0[i] == 0xFF)
+ {
+ b[i] = (b[i] & 0xFC00) | 0x1E;
+ b[i + 0x20] = (b[i + 0x20] & 0xFC00) | 0x1E;
+ }
+ else
+ {
+ b[i] = (b[i] & 0xFC00) | (sp0[i] + 0x14);
+ b[i + 0x20] = (b[i + 0x20] & 0xFC00) | (sp0[i] + 0x34);
+ }
+ }
+ }
+ asm(""::"r"(r9));
+}
+#else
+__attribute__((naked))
+void sub_8043740(s16 a, u16 *b, u8 c)
+{
+ 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\
+ adds r7, r1, 0\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ mov r10, r2\n\
+ movs r3, 0\n\
+ movs r2, 0\n\
+_0804375C:\n\
+ lsls r0, r3, 24\n\
+ asrs r0, 24\n\
+ mov r3, sp\n\
+ adds r1, r3, r0\n\
+ strb r2, [r1]\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0x3\n\
+ ble _0804375C\n\
+ movs r3, 0x3\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ mov r9, r0\n\
+ mov r8, sp\n\
+_0804377C:\n\
+ lsls r0, r5, 16\n\
+ asrs r6, r0, 16\n\
+ cmp r6, 0\n\
+ ble _080437AA\n\
+ lsls r4, r3, 24\n\
+ asrs r4, 24\n\
+ mov r1, sp\n\
+ adds r5, r1, r4\n\
+ adds r0, r6, 0\n\
+ movs r1, 0xA\n\
+ bl __modsi3\n\
+ strb r0, [r5]\n\
+ adds r0, r6, 0\n\
+ movs r1, 0xA\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ subs r4, 0x1\n\
+ lsls r4, 24\n\
+ lsrs r3, r4, 24\n\
+ b _0804377C\n\
+_080437AA:\n\
+ lsls r1, r3, 24\n\
+ asrs r0, r1, 24\n\
+ cmp r0, r9\n\
+ ble _080437CE\n\
+ movs r4, 0xFF\n\
+ movs r3, 0x1\n\
+ negs r3, r3\n\
+_080437B8:\n\
+ asrs r2, r1, 24\n\
+ mov r5, sp\n\
+ adds r1, r5, r2\n\
+ ldrb r0, [r1]\n\
+ orrs r0, r4\n\
+ strb r0, [r1]\n\
+ subs r2, 0x1\n\
+ lsls r1, r2, 24\n\
+ asrs r0, r1, 24\n\
+ cmp r0, r3\n\
+ bgt _080437B8\n\
+_080437CE:\n\
+ mov r1, r8\n\
+ ldrb r0, [r1, 0x3]\n\
+ cmp r0, 0xFF\n\
+ bne _080437DA\n\
+ movs r0, 0\n\
+ strb r0, [r1, 0x3]\n\
+_080437DA:\n\
+ mov r2, r10\n\
+ cmp r2, 0\n\
+ bne _0804386A\n\
+ movs r3, 0\n\
+ movs r1, 0\n\
+ movs r6, 0xFC\n\
+ lsls r6, 8\n\
+ movs r5, 0x1E\n\
+ mov r12, r5\n\
+_080437EC:\n\
+ lsls r1, 24\n\
+ asrs r2, r1, 24\n\
+ mov r0, sp\n\
+ adds r5, r0, r2\n\
+ ldrb r0, [r5]\n\
+ mov r8, r1\n\
+ cmp r0, 0xFF\n\
+ bne _08043822\n\
+ lsls r1, r2, 1\n\
+ adds r1, r7\n\
+ ldrh r2, [r1]\n\
+ adds r0, r6, 0\n\
+ ands r0, r2\n\
+ mov r2, r12\n\
+ orrs r0, r2\n\
+ strh r0, [r1]\n\
+ lsls r3, 24\n\
+ asrs r1, r3, 23\n\
+ adds r1, r7\n\
+ adds r1, 0x40\n\
+ ldrh r2, [r1]\n\
+ adds r0, r6, 0\n\
+ ands r0, r2\n\
+ mov r5, r12\n\
+ orrs r0, r5\n\
+ strh r0, [r1]\n\
+ b _08043852\n\
+_08043822:\n\
+ lsls r2, 1\n\
+ adds r2, r7\n\
+ ldrh r0, [r2]\n\
+ adds r1, r6, 0\n\
+ ands r1, r0\n\
+ ldrb r0, [r5]\n\
+ adds r0, 0x14\n\
+ orrs r1, r0\n\
+ strh r1, [r2]\n\
+ lsls r4, r3, 24\n\
+ asrs r3, r4, 24\n\
+ lsls r2, r3, 1\n\
+ adds r2, r7\n\
+ adds r2, 0x40\n\
+ ldrh r0, [r2]\n\
+ adds r1, r6, 0\n\
+ ands r1, r0\n\
+ mov r5, sp\n\
+ adds r0, r5, r3\n\
+ ldrb r0, [r0]\n\
+ adds r0, 0x34\n\
+ orrs r1, r0\n\
+ strh r1, [r2]\n\
+ adds r3, r4, 0\n\
+_08043852:\n\
+ movs r0, 0x80\n\
+ lsls r0, 17\n\
+ add r0, r8\n\
+ lsrs r1, r0, 24\n\
+ movs r2, 0x80\n\
+ lsls r2, 17\n\
+ adds r0, r3, r2\n\
+ lsrs r3, r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0x3\n\
+ ble _080437EC\n\
+ b _080438CE\n\
+_0804386A:\n\
+ movs r3, 0\n\
+ movs r4, 0xFC\n\
+ lsls r4, 8\n\
+ movs r6, 0x1E\n\
+_08043872:\n\
+ lsls r1, r3, 24\n\
+ asrs r2, r1, 24\n\
+ mov r3, sp\n\
+ adds r5, r3, r2\n\
+ ldrb r0, [r5]\n\
+ adds r3, r1, 0\n\
+ cmp r0, 0xFF\n\
+ bne _0804389E\n\
+ lsls r1, r2, 1\n\
+ adds r1, r7\n\
+ ldrh r2, [r1]\n\
+ adds r0, r4, 0\n\
+ ands r0, r2\n\
+ orrs r0, r6\n\
+ strh r0, [r1]\n\
+ adds r1, 0x40\n\
+ ldrh r2, [r1]\n\
+ adds r0, r4, 0\n\
+ ands r0, r2\n\
+ orrs r0, r6\n\
+ strh r0, [r1]\n\
+ b _080438C0\n\
+_0804389E:\n\
+ lsls r2, 1\n\
+ adds r2, r7\n\
+ ldrh r0, [r2]\n\
+ adds r1, r4, 0\n\
+ ands r1, r0\n\
+ ldrb r0, [r5]\n\
+ adds r0, 0x14\n\
+ orrs r1, r0\n\
+ strh r1, [r2]\n\
+ adds r2, 0x40\n\
+ ldrh r0, [r2]\n\
+ adds r1, r4, 0\n\
+ ands r1, r0\n\
+ ldrb r0, [r5]\n\
+ adds r0, 0x34\n\
+ orrs r1, r0\n\
+ strh r1, [r2]\n\
+_080438C0:\n\
+ movs r5, 0x80\n\
+ lsls r5, 17\n\
+ adds r0, r3, r5\n\
+ lsrs r3, r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0x3\n\
+ ble _08043872\n\
+_080438CE:\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif
+
+void unref_sub_80438E0(s16 a, s16 b, u16 *c)
+{
+ c[4] = 0x1E;
+ sub_8043740(b, c, 0);
+ sub_8043740(a, c + 5, 1);
+}
+
+u8 battle_make_oam_normal_battle(u8 a)
+{
+ int sp0 = 0;
+ u8 spriteId1;
+ u8 spriteId2;
+ u8 spriteId3;
+ struct Sprite *sprite;
+
+ if (!IsDoubleBattle())
+ {
+ if (battle_side_get_owner(a) == 0)
+ {
+ spriteId1 = CreateSprite(&gSpriteTemplate_820A4EC[0], 240, 160, 1);
+ spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[0], 240, 160, 1);
+
+ gSprites[spriteId1].oam.shape = 0;
+ gSprites[spriteId2].oam.shape = 0;
+ gSprites[spriteId2].oam.tileNum += 64;
+ }
+ else
+ {
+ spriteId1 = CreateSprite(&gSpriteTemplate_820A51C[0], 240, 160, 1);
+ spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[0], 240, 160, 1);
+
+ gSprites[spriteId2].oam.tileNum += 32;
+ sp0 = 2;
+ }
+ //_080439F2
+
+ gSprites[spriteId1].oam.affineParam = spriteId2;
+ gSprites[spriteId2].data5 = spriteId1;
+ gSprites[spriteId2].callback = sub_8043D5C;
+ }
+ //_08043A28
+ else
+ {
+ if (battle_side_get_owner(a) == 0)
+ {
+ spriteId1 = CreateSprite(&gSpriteTemplate_820A4EC[battle_get_per_side_status(a) / 2], 240, 160, 1);
+ spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[battle_get_per_side_status(a) / 2], 240, 160, 1);
+
+ gSprites[spriteId1].oam.affineParam = spriteId2;
+ gSprites[spriteId2].data5 = spriteId1;
+ gSprites[spriteId2].oam.tileNum += 32;
+ gSprites[spriteId2].callback = sub_8043D5C;
+ sp0 = 1;
+ }
+ //_08043ACC
+ else
+ {
+ spriteId1 = CreateSprite(&gSpriteTemplate_820A51C[battle_get_per_side_status(a) / 2], 240, 160, 1);
+ spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[battle_get_per_side_status(a) / 2], 240, 160, 1);
+
+ gSprites[spriteId1].oam.affineParam = spriteId2;
+ gSprites[spriteId2].data5 = spriteId1;
+ gSprites[spriteId2].oam.tileNum += 32;
+ gSprites[spriteId2].callback = sub_8043D5C;
+ sp0 = 2;
+ }
+ //_08043B4E
+ }
+ //_08043B50
+
+ spriteId3 = CreateSpriteAtEnd(&gSpriteTemplate_820A56C[gUnknown_02024A72[a]], 140, 60, 0);
+ sprite = &gSprites[spriteId3];
+ SetSubspriteTables(sprite, &gSubspriteTables_820A684[battle_side_get_owner(a)]);
+ sprite->subspriteMode = 2;
+ sprite->oam.priority = 1;
+ CpuCopy32(sub_8043CDC(1), (void *)(OBJ_VRAM0 + sprite->oam.tileNum * 32), 64);
+
+ gSprites[spriteId1].data5 = spriteId3;
+ gSprites[spriteId1].data6 = a;
+ gSprites[spriteId1].invisible = TRUE;
+ gSprites[spriteId2].invisible = TRUE;
+ sprite->data5 = spriteId1;
+ sprite->data6 = sp0;
+ sprite->invisible = TRUE;
+
+ return spriteId1;
+}
+
+u8 battle_make_oam_safari_battle(void)
+{
+ u8 spriteId1 = CreateSprite(&gSpriteTemplate_820A54C, 240, 160, 1);
+ u8 spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A54C, 240, 160, 1);
+
+ gSprites[spriteId1].oam.shape = 0;
+ gSprites[spriteId2].oam.shape = 0;
+ gSprites[spriteId2].oam.tileNum += 0x40;
+ gSprites[spriteId1].oam.affineParam = spriteId2;
+ gSprites[spriteId2].data5 = spriteId1;
+ gSprites[spriteId2].callback = sub_8043D5C;
+ return spriteId1;
+}
+
+static const void *sub_8043CDC(u8 a)
+{
+ return gUnknown_08D1216C[a];
+}
+
+void sub_8043CEC(struct Sprite *sprite)
+{
+ u8 r5 = sprite->data5;
+
+ switch (sprite->data6)
+ {
+ case 0:
+ sprite->pos1.x = gSprites[r5].pos1.x + 16;
+ sprite->pos1.y = gSprites[r5].pos1.y;
+ break;
+ case 1:
+ sprite->pos1.x = gSprites[r5].pos1.x + 16;
+ sprite->pos1.y = gSprites[r5].pos1.y;
+ break;
+ default:
+ case 2:
+ sprite->pos1.x = gSprites[r5].pos1.x + 8;
+ sprite->pos1.y = gSprites[r5].pos1.y;
+ break;
+ }
+ sprite->pos2.x = gSprites[r5].pos2.x;
+ sprite->pos2.y = gSprites[r5].pos2.y;
+}
+
+static void sub_8043D5C(struct Sprite *sprite)
+{
+ u8 data5 = sprite->data5;
+
+ sprite->pos1.x = gSprites[data5].pos1.x + 64;
+ sprite->pos1.y = gSprites[data5].pos1.y;
+ sprite->pos2.x = gSprites[data5].pos2.x;
+ sprite->pos2.y = gSprites[data5].pos2.y;
+}
+
+void sub_8043D84(u8 a, u8 b, u32 c, u32 d, u32 e)
+{
+ ewram17850[a].unk0 = b;
+ ewram17850[a].unk4 = c;
+ ewram17850[a].unk8 = d;
+ ewram17850[a].unkC = e;
+ ewram17850[a].unk10 = 0xFFFF8000;
+}
+
+void sub_8043DB0(u8 a)
+{
+ gSprites[a].invisible = TRUE;
+ gSprites[gSprites[a].data5].invisible = TRUE;
+ gSprites[gSprites[a].oam.affineParam].invisible = TRUE;
+}
+
+void sub_8043DFC(u8 a)
+{
+ gSprites[a].invisible = FALSE;
+ gSprites[gSprites[a].data5].invisible = FALSE;
+ gSprites[gSprites[a].oam.affineParam].invisible = FALSE;
+}
+
+static void sub_8043E50(u8 spriteId, s16 x, s16 y)
+{
+ gSprites[spriteId].pos1.x = x;
+ gSprites[spriteId].pos1.y = y;
+}
+
+void unref_sub_8043E70(u8 a)
+{
+ DestroySprite(&gSprites[gSprites[a].oam.affineParam]);
+ DestroySprite(&gSprites[gSprites[a].data5]);
+ DestroySprite(&gSprites[a]);
+}
+
+void nullsub_11()
+{
+}
+
+void sub_8043EB4(u8 priority)
+{
+ s32 i;
+
+ for (i = 0; i < gUnknown_02024A68; i++)
+ {
+ u8 spriteId1;
+ u8 spriteId2;
+ u8 spriteId3;
+
+ spriteId1 = gUnknown_03004340[i];
+ spriteId2 = gSprites[spriteId1].oam.affineParam;
+ spriteId3 = gSprites[spriteId1].data5;
+ gSprites[spriteId1].oam.priority = priority;
+ gSprites[spriteId2].oam.priority = priority;
+ gSprites[spriteId3].oam.priority = priority;
+ }
+}
+
+void sub_8043F44(u8 a)
+{
+ s16 x = 0;
+ s16 y = 0;
+
+ if (!IsDoubleBattle())
+ {
+ if (battle_side_get_owner(a) != 0)
+ {
+ x = 44;
+ y = 30;
+ }
+ else
+ {
+ x = 158;
+ y = 88;
+ }
+ }
+ else
+ {
+ switch (battle_get_per_side_status(a))
+ {
+ case 0:
+ x = 159;
+ y = 77;
+ break;
+ case 2:
+ x = 171;
+ y = 102;
+ break;
+ case 1:
+ x = 44;
+ y = 19;
+ break;
+ case 3:
+ x = 32;
+ y = 44;
+ break;
+ }
+ }
+ sub_8043E50(gUnknown_03004340[a], x, y);
+}
+
+#if ENGLISH
+#define CHAR_LV_SEPARATOR CHAR_COLON
+#elif GERMAN
+#define CHAR_LV_SEPARATOR CHAR_PERIOD
+#endif
+
+static void sub_8043FC0(u8 a, u8 b)
+{
+ u8 str[30];
+ void *const *r7;
+ u8 *ptr;
+ s32 i;
+ s32 two;
+
+ // TODO: Make this a local variable
+ memcpy(str, gUnknown_0820A81C, sizeof(str));
+ if (!IsDoubleBattle())
+ {
+ if (battle_side_get_owner(gSprites[a].data6) == 0)
+ r7 = gUnknown_0820A804;
+ else
+ r7 = gUnknown_0820A80C;
+ }
+ else
+ {
+ if (battle_side_get_owner(gSprites[a].data6) == 0)
+ r7 = gUnknown_0820A814;
+ else
+ r7 = gUnknown_0820A80C;
+ }
+
+ ptr = str + 6;
+ if (b == 100)
+ {
+ ptr = ConvertIntToDecimalStringN(ptr, 100, 0, 3);
+ }
+ else
+ {
+ *(ptr++) = EXT_CTRL_CODE_BEGIN;
+ *(ptr++) = 0x11;
+ *(ptr++) = 1;
+ *(ptr++) = EXT_CTRL_CODE_BEGIN;
+ *(ptr++) = 0x14;
+ *(ptr++) = 4;
+ *(ptr++) = CHAR_LV_SEPARATOR;
+ *(ptr++) = EXT_CTRL_CODE_BEGIN;
+ *(ptr++) = 0x14;
+ *(ptr++) = 0;
+ ptr = ConvertIntToDecimalStringN(ptr, b, 0, 2);
+ }
+
+ *(ptr++) = EXT_CTRL_CODE_BEGIN;
+ *(ptr++) = 0x13;
+ *(ptr++) = 0xF;
+ *(ptr++) = EOS;
+ sub_80034D4((u8 *)0x02000000, str);
+
+ two = 2;
+ for (i = 0; i < two; i++)
+ CpuCopy32((void *)(0x02000020 + i * 64), r7[i] + gSprites[a].oam.tileNum * 32, 32);
+}
+
+#ifdef NONMATCHING
+void sub_80440EC(u8 a, s16 b, u8 c)
+{
+ u8 str[0x14];
+ u8 *ptr;
+ s32 foo;
+ void *const *r4;
+ s32 i;
+
+ // TODO: make this a local variable
+ memcpy(str, gUnknown_0820A864, sizeof(str));
+ foo = gSprites[a].data6;
+
+ if (IsDoubleBattle() == TRUE || battle_side_get_owner(foo) == 1)
+ {
+ //_08044136
+ sub_8044210(a, b, c);
+ return;
+ }
+ //
+ ptr = str + 6;
+ if (c == 0)
+ {
+ if (battle_side_get_owner(gSprites[a].data6) == 0)
+ r4 = gUnknown_0820A83C;
+ else
+ r4 = gUnknown_0820A848;
+ c = 3;
+ ptr = sub_8003504(ptr, b, 0x13, 1);
+ *(ptr++) = 0xBA;
+ *(ptr++) = 0xFF;
+ sub_80034D4((u8 *)0x02000000, str);
+ }
+ else
+ {
+ if (battle_side_get_owner(gSprites[a].data6) == 0)
+ r4 = gUnknown_0820A854;
+ else
+ r4 = gUnknown_0820A85C;
+ c = 2;
+ sub_8003504(ptr, b, 0xF, 1);
+ sub_80034D4((u8 *)0x02000000, str);
+ }
+ //asm(""::"r"(a));
+ //_080441B6
+ for (i = 0; i < c; i++) // _080440BC
+ {
+ void *temp = r4[i] + gSprites[a].oam.tileNum * 32;
+ CpuCopy32((void *)(0x02000020 + i * 0x40), temp, 0x20);
+ }
+}
+#else
+__attribute__((naked))
+void sub_80440EC(u8 a, s16 b, u8 c)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ sub sp, 0x14\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ lsls r1, 16\n\
+ lsrs r6, r1, 16\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ mov r8, r2\n\
+ ldr r1, _08044144 @ =gUnknown_0820A864\n\
+ mov r0, sp\n\
+ movs r2, 0x14\n\
+ bl memcpy\n\
+ ldr r1, _08044148 @ =gSprites\n\
+ lsls r0, r7, 4\n\
+ adds r0, r7\n\
+ lsls r0, 2\n\
+ adds r4, r0, r1\n\
+ movs r0, 0x3A\n\
+ ldrsh r5, [r4, r0]\n\
+ bl IsDoubleBattle\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ beq _08044136\n\
+ lsls r0, r5, 24\n\
+ lsrs r0, 24\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _0804414C\n\
+_08044136:\n\
+ lsls r1, r6, 16\n\
+ asrs r1, 16\n\
+ adds r0, r7, 0\n\
+ mov r2, r8\n\
+ bl sub_8044210\n\
+ b _080441F0\n\
+ .align 2, 0\n\
+_08044144: .4byte gUnknown_0820A864\n\
+_08044148: .4byte gSprites\n\
+_0804414C:\n\
+ mov r5, sp\n\
+ adds r5, 0x6\n\
+ mov r0, r8\n\
+ cmp r0, 0\n\
+ bne _08044190\n\
+ ldrh r0, [r4, 0x3A]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ ldr r4, _08044188 @ =gUnknown_0820A848\n\
+ cmp r0, 0\n\
+ bne _0804416A\n\
+ ldr r4, _0804418C @ =gUnknown_0820A83C\n\
+_0804416A:\n\
+ movs r0, 0x3\n\
+ mov r8, r0\n\
+ lsls r1, r6, 16\n\
+ asrs r1, 16\n\
+ adds r0, r5, 0\n\
+ movs r2, 0x13\n\
+ movs r3, 0x1\n\
+ bl sub_8003504\n\
+ adds r5, r0, 0\n\
+ movs r0, 0xBA\n\
+ strb r0, [r5]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r5, 0x1]\n\
+ b _080441B6\n\
+ .align 2, 0\n\
+_08044188: .4byte gUnknown_0820A848\n\
+_0804418C: .4byte gUnknown_0820A83C\n\
+_08044190:\n\
+ ldrh r0, [r4, 0x3A]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ ldr r4, _080441FC @ =gUnknown_0820A85C\n\
+ cmp r0, 0\n\
+ bne _080441A4\n\
+ ldr r4, _08044200 @ =gUnknown_0820A854\n\
+_080441A4:\n\
+ movs r0, 0x2\n\
+ mov r8, r0\n\
+ lsls r1, r6, 16\n\
+ asrs r1, 16\n\
+ adds r0, r5, 0\n\
+ movs r2, 0xF\n\
+ movs r3, 0x1\n\
+ bl sub_8003504\n\
+_080441B6:\n\
+ movs r0, 0x80\n\
+ lsls r0, 18\n\
+ mov r1, sp\n\
+ bl sub_80034D4\n\
+ mov r0, r8\n\
+ cmp r0, 0\n\
+ beq _080441F0\n\
+ ldr r1, _08044204 @ =gSprites\n\
+ lsls r0, r7, 4\n\
+ adds r0, r7\n\
+ lsls r0, 2\n\
+ adds r6, r0, r1\n\
+ adds r7, r4, 0\n\
+ ldr r5, _08044208 @ =0x02000020\n\
+ mov r4, r8\n\
+_080441D6:\n\
+ ldrh r0, [r6, 0x4]\n\
+ lsls r0, 22\n\
+ lsrs r0, 17\n\
+ ldm r7!, {r1}\n\
+ adds r1, r0\n\
+ adds r0, r5, 0\n\
+ ldr r2, _0804420C @ =REG_BG0CNT\n\
+ bl CpuSet\n\
+ adds r5, 0x40\n\
+ subs r4, 0x1\n\
+ cmp r4, 0\n\
+ bne _080441D6\n\
+_080441F0:\n\
+ add sp, 0x14\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080441FC: .4byte gUnknown_0820A85C\n\
+_08044200: .4byte gUnknown_0820A854\n\
+_08044204: .4byte gSprites\n\
+_08044208: .4byte 0x02000020\n\
+_0804420C: .4byte 0x04000008\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_8044210(u8 a, s16 b, u8 c)
+{
+ u8 str[0x14];
+ u8 *ptr;
+ void *const *r7;
+ int r10;
+ int r4;
+ int i;
+
+ // TODO: make this a local variable
+ memcpy(str, gUnknown_0820A89C, sizeof(str));
+ r4 = gSprites[a].data6;
+ if ((ewram17800[r4].bit_4) == 0)
+ return;
+ ptr = str + 6;
+ if (c == 0)
+ {
+ r7 = gUnknown_0820A87C;
+ r10 = 6;
+ ptr = sub_8003504(ptr, b, 0x2B, 1);
+ *(ptr++) = CHAR_SLASH;
+ *(ptr++) = EOS;
+ }
+ else
+ {
+ r7 = gUnknown_0820A894;
+ r10 = 2;
+ sub_8003504(ptr, b, 0xF, 1);
+ if (battle_side_get_owner(r4) == 0)
+ {
+ CpuCopy32(sub_8043CDC(0x74), (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x34) * 32), 32);
+ }
+ }
+ r4 = gSprites[a].data5;
+ sub_80034D4((u8 *)0x02000000, str);
+ for (i = 0; i < r10; i++)
+ {
+ CpuCopy32((void *)(0x02000020 + i * 0x40), r7[i] + gSprites[r4].oam.tileNum * 32, 0x20);
+ }
+}
+
+#ifdef NONMATCHING
+void sub_8044338(u8 a, struct Pokemon *pkmn)
+{
+ u8 str[0x14];
+ u8 *r6;
+ s32 r8;
+ u8 nature; // = GetNature(pkmn);
+ s32 r7;
+ u8 i;
+ u8 r5;
+
+ // TODO: make this a local variable
+ memcpy(str, gUnknown_0820A864, sizeof(str));
+ r6 = ewram520[battle_get_per_side_status(gSprites[a].data6)].filler0;
+ r8 = 5;
+ nature = GetNature(pkmn);
+ StringCopy(str + 6, gNatureNames[nature]);
+ sub_80034D4(r6, str);
+ r7 = 6;
+ for (i = 0; i < (u32)r8; i++, r7++) //_080443AA
+ {
+ u8 val;
+
+ if ((u8)(str[r7] - 0x37) <= 0x13 || (u8)(str[r7] + 0x79) <= 0x13)
+ val = 0x2C;
+ //_080443DC
+ else if ((u8)(str[r7] - 0x4B) <= 4 || (u8)(str[r7] + 0x65) <= 4)
+ val = 0x2D;
+ else
+ val = 0x2B;
+
+ CpuCopy32(sub_8043CDC(val), r6 + i * 64, 32);
+ }
+ //r7 = 1;
+ //sp18 = a * 16;
+ for (r7 = 1; r7 < r8 + 1; r7++)
+ {
+ int foo;
+
+ foo = gSprites[a].oam.tileNum + MACRO1(r7);
+ CpuCopy32(r6, (u8 *)0x06010000 + foo * 32, 32);
+ r6 += 32;
+
+ foo = gSprites[a].oam.tileNum + 8 + MACRO1(r7);
+ CpuCopy32(r6, (u8 *)0x06010000 + foo * 32, 32);
+ r6 += 32;
+ }
+ //_08044486
+ r5 = gSprites[a].data5;
+ ConvertIntToDecimalStringN(str + 6, ewram[0x16089], 1, 2);
+ ConvertIntToDecimalStringN(str + 9, ewram[0x16088], 1, 2);
+ str[5] = 0;
+ str[8] = 0xBA;
+ sub_80034D4((u8 *)0x02000000, str);
+
+ for (r7 = 0; r7 < 5; r7++)
+ {
+ if (r7 <= 1)
+ {
+ int foo = (gSprites[r5].oam.tileNum + 2 + r7);
+ CpuCopy32((u8 *)0x02000020 + r7 * 0x40, (u8 *)0x06010000 + foo * 32, 32);
+ }
+ else
+ {
+ int foo = (r7 + gSprites[r5].oam.tileNum);
+ CpuCopy32((u8 *)0x02000020 + r7 * 0x40, (u8 *)0x060100C0 + foo * 32, 32);
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_8044338(u8 a, struct Pokemon *pkmn)
+{
+ 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, 0x20\n\
+ adds r4, r1, 0\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x14]\n\
+ ldr r1, _080443CC @ =gUnknown_0820A864\n\
+ mov r0, sp\n\
+ movs r2, 0x14\n\
+ bl memcpy\n\
+ ldr r1, _080443D0 @ =gSprites\n\
+ ldr r2, [sp, 0x14]\n\
+ lsls r0, r2, 4\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x3A]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ bl battle_get_per_side_status\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r1, r0, 1\n\
+ adds r1, r0\n\
+ lsls r1, 7\n\
+ ldr r3, _080443D4 @ =0x02000520\n\
+ adds r6, r1, r3\n\
+ movs r0, 0x5\n\
+ mov r8, r0\n\
+ adds r0, r4, 0\n\
+ bl GetNature\n\
+ lsls r0, 24\n\
+ mov r4, sp\n\
+ adds r4, 0x6\n\
+ ldr r1, _080443D8 @ =gNatureNames\n\
+ lsrs r0, 22\n\
+ adds r0, r1\n\
+ ldr r1, [r0]\n\
+ adds r0, r4, 0\n\
+ bl StringCopy\n\
+ adds r0, r6, 0\n\
+ mov r1, sp\n\
+ bl sub_80034D4\n\
+ movs r7, 0x6\n\
+ movs r5, 0\n\
+ mov r1, sp\n\
+ adds r1, 0x9\n\
+ str r1, [sp, 0x1C]\n\
+_080443AA:\n\
+ mov r2, sp\n\
+ adds r0, r2, r7\n\
+ ldrb r1, [r0]\n\
+ adds r0, r1, 0\n\
+ subs r0, 0x37\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x13\n\
+ bls _080443C8\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x79\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x13\n\
+ bhi _080443DC\n\
+_080443C8:\n\
+ movs r0, 0x2C\n\
+ b _080443FA\n\
+ .align 2, 0\n\
+_080443CC: .4byte gUnknown_0820A864\n\
+_080443D0: .4byte gSprites\n\
+_080443D4: .4byte 0x02000520\n\
+_080443D8: .4byte gNatureNames\n\
+_080443DC:\n\
+ adds r0, r1, 0\n\
+ subs r0, 0x4B\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x4\n\
+ bls _080443F4\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x65\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x4\n\
+ bhi _080443F8\n\
+_080443F4:\n\
+ movs r0, 0x2D\n\
+ b _080443FA\n\
+_080443F8:\n\
+ movs r0, 0x2B\n\
+_080443FA:\n\
+ bl sub_8043CDC\n\
+ lsls r1, r5, 6\n\
+ adds r1, r6, r1\n\
+ ldr r2, _080444F8 @ =REG_BG0CNT\n\
+ bl CpuSet\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ adds r7, 0x1\n\
+ cmp r5, r8\n\
+ bcc _080443AA\n\
+ movs r7, 0x1\n\
+ ldr r3, [sp, 0x14]\n\
+ lsls r3, 4\n\
+ str r3, [sp, 0x18]\n\
+ movs r0, 0x1\n\
+ add r0, r8\n\
+ mov r9, r0\n\
+ cmp r7, r9\n\
+ bge _08044486\n\
+ ldr r1, _080444FC @ =gSprites\n\
+ ldr r2, _080444F8 @ =REG_BG0CNT\n\
+ mov r10, r2\n\
+ ldr r2, [sp, 0x14]\n\
+ adds r0, r3, r2\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ mov r8, r0\n\
+_08044436:\n\
+ mov r3, r8\n\
+ ldrh r0, [r3, 0x4]\n\
+ lsls r0, 22\n\
+ lsrs r0, 22\n\
+ adds r5, r7, 0\n\
+ cmp r7, 0\n\
+ bge _08044446\n\
+ adds r5, r7, 0x7\n\
+_08044446:\n\
+ asrs r5, 3\n\
+ lsls r4, r5, 3\n\
+ subs r4, r7, r4\n\
+ adds r0, r4\n\
+ lsls r5, 6\n\
+ adds r0, r5\n\
+ lsls r0, 5\n\
+ ldr r2, _08044500 @ =0x06010000\n\
+ adds r1, r0, r2\n\
+ adds r0, r6, 0\n\
+ mov r2, r10\n\
+ bl CpuSet\n\
+ adds r6, 0x20\n\
+ mov r3, r8\n\
+ ldrh r0, [r3, 0x4]\n\
+ lsls r0, 22\n\
+ lsrs r0, 22\n\
+ adds r4, 0x8\n\
+ adds r0, r4\n\
+ adds r0, r5\n\
+ lsls r0, 5\n\
+ ldr r2, _08044500 @ =0x06010000\n\
+ adds r1, r0, r2\n\
+ adds r0, r6, 0\n\
+ mov r2, r10\n\
+ bl CpuSet\n\
+ adds r6, 0x20\n\
+ adds r7, 0x1\n\
+ cmp r7, r9\n\
+ blt _08044436\n\
+_08044486:\n\
+ ldr r6, _080444FC @ =gSprites\n\
+ ldr r3, [sp, 0x18]\n\
+ ldr r1, [sp, 0x14]\n\
+ adds r0, r3, r1\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldrh r5, [r0, 0x38]\n\
+ lsls r5, 24\n\
+ lsrs r5, 24\n\
+ ldr r4, _08044504 @ =0x02000000\n\
+ ldr r2, _08044508 @ =0x00016089\n\
+ adds r0, r4, r2\n\
+ ldrb r1, [r0]\n\
+ mov r0, sp\n\
+ adds r0, 0x6\n\
+ movs r2, 0x1\n\
+ movs r3, 0x2\n\
+ bl ConvertIntToDecimalStringN\n\
+ ldr r3, _0804450C @ =0x00016088\n\
+ adds r4, r3\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp, 0x1C]\n\
+ movs r2, 0x1\n\
+ movs r3, 0x2\n\
+ bl ConvertIntToDecimalStringN\n\
+ mov r1, sp\n\
+ movs r0, 0\n\
+ strb r0, [r1, 0x5]\n\
+ movs r0, 0xBA\n\
+ strb r0, [r1, 0x8]\n\
+ movs r0, 0x80\n\
+ lsls r0, 18\n\
+ bl sub_80034D4\n\
+ movs r7, 0\n\
+ lsls r0, r5, 4\n\
+ adds r0, r5\n\
+ lsls r0, 2\n\
+ adds r5, r0, r6\n\
+ ldr r4, _08044510 @ =0x02000020\n\
+_080444DA:\n\
+ cmp r7, 0x1\n\
+ bgt _08044514\n\
+ ldrh r1, [r5, 0x4]\n\
+ lsls r1, 22\n\
+ lsrs r1, 22\n\
+ adds r0, r7, 0x2\n\
+ adds r1, r0\n\
+ lsls r1, 5\n\
+ ldr r0, _08044500 @ =0x06010000\n\
+ adds r1, r0\n\
+ adds r0, r4, 0\n\
+ ldr r2, _080444F8 @ =REG_BG0CNT\n\
+ bl CpuSet\n\
+ b _0804452A\n\
+ .align 2, 0\n\
+_080444F8: .4byte 0x04000008\n\
+_080444FC: .4byte gSprites\n\
+_08044500: .4byte 0x06010000\n\
+_08044504: .4byte 0x02000000\n\
+_08044508: .4byte 0x00016089\n\
+_0804450C: .4byte 0x00016088\n\
+_08044510: .4byte 0x02000020\n\
+_08044514:\n\
+ ldrh r1, [r5, 0x4]\n\
+ lsls r1, 22\n\
+ lsrs r1, 22\n\
+ adds r1, r7, r1\n\
+ lsls r1, 5\n\
+ ldr r2, _08044544 @ =0x060100c0\n\
+ adds r1, r2\n\
+ adds r0, r4, 0\n\
+ ldr r2, _08044548 @ =REG_BG0CNT\n\
+ bl CpuSet\n\
+_0804452A:\n\
+ adds r4, 0x40\n\
+ adds r7, 0x1\n\
+ cmp r7, 0x4\n\
+ ble _080444DA\n\
+ add sp, 0x20\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08044544: .4byte 0x060100c0\n\
+_08044548: .4byte 0x04000008\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_804454C(void)
+{
+ s32 i;
+ u8 spriteId;
+
+ for (i = 0; i < gUnknown_02024A68; i++)
+ {
+ if (gSprites[gUnknown_03004340[i]].callback == SpriteCallbackDummy
+ && battle_side_get_owner(i) != 1
+ && (IsDoubleBattle() || battle_side_get_owner(i) != 0))
+ {
+ u8 r6;
+
+ ewram17800[i].bit_4 ^= 1;
+ r6 = ewram17800[i].bit_4;
+ if (battle_side_get_owner(i) == 0)
+ {
+
+ if (!IsDoubleBattle())
+ continue;
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ continue;
+
+ if (r6 == 1)
+ {
+ spriteId = gSprites[gUnknown_03004340[i]].data5;
+
+ CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100);
+ sub_8044210(gUnknown_03004340[i], GetMonData(&gPlayerParty[gUnknown_02024A6A[i]], MON_DATA_HP), 0);
+ sub_8044210(gUnknown_03004340[i], GetMonData(&gPlayerParty[gUnknown_02024A6A[i]], MON_DATA_MAX_HP), 1);
+ }
+ else
+ {
+ draw_status_ailment_maybe(gUnknown_03004340[i]);
+ sub_8045A5C(gUnknown_03004340[i], &gPlayerParty[gUnknown_02024A6A[i]], 5);
+ CpuCopy32(sub_8043CDC(0x75), (void *)(OBJ_VRAM0 + 0x680 + gSprites[gUnknown_03004340[i]].oam.tileNum * 32), 32);
+ }
+ }
+ else
+ {
+ if (r6 == 1)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ {
+ sub_8044338(gUnknown_03004340[i], &gEnemyParty[gUnknown_02024A6A[i]]);
+ }
+ else
+ {
+ spriteId = gSprites[gUnknown_03004340[i]].data5;
+
+ CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100);
+ sub_8044210(gUnknown_03004340[i], GetMonData(&gEnemyParty[gUnknown_02024A6A[i]], MON_DATA_HP), 0);
+ sub_8044210(gUnknown_03004340[i], GetMonData(&gEnemyParty[gUnknown_02024A6A[i]], MON_DATA_MAX_HP), 1);
+ }
+ }
+ else
+ {
+ draw_status_ailment_maybe(gUnknown_03004340[i]);
+ sub_8045A5C(gUnknown_03004340[i], &gEnemyParty[gUnknown_02024A6A[i]], 5);
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ sub_8045A5C(gUnknown_03004340[i], &gEnemyParty[gUnknown_02024A6A[i]], 4);
+ }
+ }
+ gSprites[gUnknown_03004340[i]].data7 ^= 1;
+ }
+ }
+}
+
+struct UnknownStruct8
+{
+ u16 unk0;
+ u32 unk4;
+};
+
+// This function almost matches except for just two instructions around 0x08044B52 that are swapped.
+#ifdef NONMATCHING
+u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d)
+{
+ u8 r7;
+ s16 x;
+ s16 y;
+ s16 r8;
+ s16 r5;
+
+ int i;
+ u8 sp[6];
+ s8 sp14;
+ u8 sp18;
+ u8 taskId;
+
+ if (c == 0 || battle_get_per_side_status(a) != 3)
+ {
+ if (battle_side_get_owner(a) == 0)
+ {
+ r7 = 0;
+ x = 136;
+ y = 96;
+ r8 = 100;
+ r5 = -5;
+ }
+ else
+ {
+ r7 = 1;
+ if (c == 0 || !IsDoubleBattle())
+ {
+ x = 104;
+ y = 40;
+ }
+ else
+ {
+ x = 104;
+ y = 16;
+ }
+ r8 = -100;
+ r5 = 5;
+ }
+ }
+ else
+ {
+ r7 = 1;
+ x = 104;
+ y = 40;
+ r8 = -100;
+ r5 = 5;
+ }
+ //_08044884
+
+ sp14 = 0;
+ for (i = 0; i < 6; i++) //_080448A0
+ {
+ if (b[i].unk0 != 0xFFFF)
+ sp14++;
+ }
+
+ LoadCompressedObjectPic(&gUnknown_0820A754[r7]);
+ LoadSpriteSheet(&gUnknown_0820A784[r7]);
+ LoadSpritePalette(&gUnknown_0820A764[r7]);
+ LoadSpritePalette(&gUnknown_0820A774[r7]);
+
+ sp18 = CreateSprite(&gSpriteTemplate_820A7A4[r7], x, y, 10);
+ SetSubspriteTables(&gSprites[sp18], gSubspriteTables_820A6E4);
+ gSprites[sp18].pos2.x = r8;
+ gSprites[sp18].data0 = r5;
+ if (r7 != 0)
+ {
+ gSprites[sp18].pos1.x -= 96;
+ gSprites[sp18].oam.matrixNum = 8;
+ }
+ else
+ {
+ gSprites[sp18].pos1.x += 0x60;
+ }
+ //_0804495A
+ for (i = 0; i < 6; i++) //_08044970
+ {
+ sp[i] = CreateSpriteAtEnd(&gSpriteTemplate_820A7D4[r7], x, y - 4, 9);
+ if (d == 0)
+ {
+ gSprites[sp[i]].callback = sub_8045180;
+ }
+ //_080449A0
+ if (r7 == 0)
+ {
+ gSprites[sp[i]].pos2.x = 0;
+ gSprites[sp[i]].pos2.y = 0;
+ }
+ //_080449BE
+ gSprites[sp[i]].data0 = sp18;
+ if (r7 == 0)
+ {
+ gSprites[sp[i]].pos1.x += 10 * i + 24;
+ gSprites[sp[i]].data1 = i * 7 + 10;
+ gSprites[sp[i]].pos2.x = 120;
+ }
+ //_08044A18
+ else
+ {
+ gSprites[sp[i]].pos1.x -= 10 * (5 - i) + 24;
+ gSprites[sp[i]].data1 = (6 - i) * 7 + 10;
+ gSprites[sp[i]].pos2.x = -120;
+ }
+ //_08044A56
+ gSprites[sp[i]].data2 = r7;
+ }
+ //_08044A76
+ if (battle_side_get_owner(a) == 0)
+ {
+ for (i = 0; i < 6; i++) //_08044A9A
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_40) // && b[i] != 0xFFFF && b[i]
+ {
+ if (b[i].unk0 == 0xFFFF)
+ {
+ //_08044AE6
+ gSprites[sp[i]].oam.tileNum += 1;
+ gSprites[sp[i]].data7 = 1;
+ // to _08044B52
+ }
+ else if (b[i].unk0 == 0)
+ {
+ gSprites[sp[i]].oam.tileNum += 3;
+ // to _08044B46
+ }
+ else if (b[i].unk4 != 0)
+ {
+ gSprites[sp[i]].oam.tileNum += 2;
+ }
+ }
+ //_08044ADC
+ else
+ {
+ if (i >= sp14)
+ {
+ //_08044AE6
+ gSprites[sp[i]].oam.tileNum += 1;
+ gSprites[sp[i]].data7 = 1;
+ // to _08044B52
+ }
+ else if (b[i].unk0 == 0)
+ {
+ //_08044B14
+ gSprites[sp[i]].oam.tileNum += 3;
+ // to _08044B46
+ }
+ else if (b[i].unk4 != 0)
+ {
+ gSprites[sp[i]].oam.tileNum += 2;
+ }
+ }
+ }
+ }
+ //_08044B5E
+ else
+ {
+ // Mismatch occurrs in this loop initialization
+ for (i = 0; i < 6; i++)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_40)
+ {
+ if (b[i].unk0 == 0xFFFF)
+ {
+ gSprites[sp[5 - i]].oam.tileNum += 1;
+ gSprites[sp[5 - i]].data7 = 1;
+ }
+ else if (b[i].unk0 == 0)
+ {
+ gSprites[sp[5 - i]].oam.tileNum += 3;
+ }
+ else if (b[i].unk4 != 0)
+ {
+ gSprites[sp[5 - i]].oam.tileNum += 2;
+ }
+ }
+ else
+ {
+ if (i >= sp14)
+ {
+ gSprites[sp[5 - i]].oam.tileNum += 1;
+ gSprites[sp[5 - i]].data7 = 1;
+ }
+ else if (b[i].unk0 == 0)
+ {
+ gSprites[sp[5 - i]].oam.tileNum += 3;
+ }
+ else if (b[i].unk4 != 0)
+ {
+ gSprites[sp[5 - i]].oam.tileNum += 2;
+ }
+ }
+ // This corrects the initialization order, but messes up the counter update order
+ asm(""::"r"(&b[i]));
+ }
+ }
+ //_08044C38
+ taskId = CreateTask(TaskDummy, 5);
+ gTasks[taskId].data[0] = a;
+ gTasks[taskId].data[1] = sp18;
+ for (i = 0; i < 6; i++)
+ gTasks[taskId].data[3 + i] = sp[i];
+ gTasks[taskId].data[10] = d;
+ PlaySE12WithPanning(SE_TB_START, 0);
+ return taskId;
+}
+#else
+__attribute__((naked))
+u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d)
+{
+ 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, 0x28\n\
+ str r1, [sp, 0xC]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x8]\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ adds r4, r2, 0\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ str r3, [sp, 0x10]\n\
+ cmp r4, 0\n\
+ beq _08044834\n\
+ bl battle_get_per_side_status\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x3\n\
+ beq _08044878\n\
+_08044834:\n\
+ ldr r0, [sp, 0x8]\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08044854\n\
+ movs r7, 0\n\
+ movs r1, 0x88\n\
+ movs r2, 0x60\n\
+ movs r0, 0x64\n\
+ mov r8, r0\n\
+ ldr r5, _08044850 @ =0x0000fffb\n\
+ b _08044884\n\
+ .align 2, 0\n\
+_08044850: .4byte 0x0000fffb\n\
+_08044854:\n\
+ movs r7, 0x1\n\
+ cmp r4, 0\n\
+ beq _08044864\n\
+ bl IsDoubleBattle\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _0804486A\n\
+_08044864:\n\
+ movs r1, 0x68\n\
+ movs r2, 0x28\n\
+ b _0804486E\n\
+_0804486A:\n\
+ movs r1, 0x68\n\
+ movs r2, 0x10\n\
+_0804486E:\n\
+ ldr r3, _08044874 @ =0x0000ff9c\n\
+ mov r8, r3\n\
+ b _08044882\n\
+ .align 2, 0\n\
+_08044874: .4byte 0x0000ff9c\n\
+_08044878:\n\
+ movs r7, 0x1\n\
+ movs r1, 0x68\n\
+ movs r2, 0x28\n\
+ ldr r5, _08044930 @ =0x0000ff9c\n\
+ mov r8, r5\n\
+_08044882:\n\
+ movs r5, 0x5\n\
+_08044884:\n\
+ movs r6, 0\n\
+ str r6, [sp, 0x14]\n\
+ lsls r4, r7, 3\n\
+ ldr r0, _08044934 @ =gUnknown_0820A754\n\
+ mov r10, r0\n\
+ lsls r3, r7, 1\n\
+ mov r9, r3\n\
+ lsls r1, 16\n\
+ str r1, [sp, 0x20]\n\
+ lsls r2, 16\n\
+ str r2, [sp, 0x24]\n\
+ ldr r2, _08044938 @ =0x0000ffff\n\
+ ldr r1, [sp, 0xC]\n\
+ movs r6, 0x5\n\
+_080448A0:\n\
+ ldrh r0, [r1]\n\
+ cmp r0, r2\n\
+ beq _080448B4\n\
+ ldr r3, [sp, 0x14]\n\
+ lsls r0, r3, 24\n\
+ movs r3, 0x80\n\
+ lsls r3, 17\n\
+ adds r0, r3\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x14]\n\
+_080448B4:\n\
+ adds r1, 0x8\n\
+ subs r6, 0x1\n\
+ cmp r6, 0\n\
+ bge _080448A0\n\
+ mov r6, r10\n\
+ adds r0, r4, r6\n\
+ bl LoadCompressedObjectPic\n\
+ ldr r0, _0804493C @ =gUnknown_0820A784\n\
+ adds r0, r4, r0\n\
+ bl LoadSpriteSheet\n\
+ ldr r0, _08044940 @ =gUnknown_0820A764\n\
+ adds r0, r4, r0\n\
+ bl LoadSpritePalette\n\
+ ldr r0, _08044944 @ =gUnknown_0820A774\n\
+ adds r0, r4, r0\n\
+ bl LoadSpritePalette\n\
+ mov r1, r9\n\
+ adds r0, r1, r7\n\
+ lsls r0, 3\n\
+ ldr r1, _08044948 @ =gSpriteTemplate_820A7A4\n\
+ adds r0, r1\n\
+ ldr r2, [sp, 0x20]\n\
+ asrs r1, r2, 16\n\
+ ldr r3, [sp, 0x24]\n\
+ asrs r2, r3, 16\n\
+ movs r3, 0xA\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x18]\n\
+ lsls r0, 4\n\
+ ldr r6, [sp, 0x18]\n\
+ adds r0, r6\n\
+ lsls r0, 2\n\
+ ldr r1, _0804494C @ =gSprites\n\
+ adds r4, r0, r1\n\
+ ldr r1, _08044950 @ =gSubspriteTables_820A6E4\n\
+ adds r0, r4, 0\n\
+ bl SetSubspriteTables\n\
+ mov r0, r8\n\
+ strh r0, [r4, 0x24]\n\
+ strh r5, [r4, 0x2E]\n\
+ cmp r7, 0\n\
+ beq _08044954\n\
+ ldrh r0, [r4, 0x20]\n\
+ subs r0, 0x60\n\
+ strh r0, [r4, 0x20]\n\
+ ldrb r1, [r4, 0x3]\n\
+ movs r0, 0x3F\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ movs r1, 0x10\n\
+ orrs r0, r1\n\
+ strb r0, [r4, 0x3]\n\
+ b _0804495A\n\
+ .align 2, 0\n\
+_08044930: .4byte 0x0000ff9c\n\
+_08044934: .4byte gUnknown_0820A754\n\
+_08044938: .4byte 0x0000ffff\n\
+_0804493C: .4byte gUnknown_0820A784\n\
+_08044940: .4byte gUnknown_0820A764\n\
+_08044944: .4byte gUnknown_0820A774\n\
+_08044948: .4byte gSpriteTemplate_820A7A4\n\
+_0804494C: .4byte gSprites\n\
+_08044950: .4byte gSubspriteTables_820A6E4\n\
+_08044954:\n\
+ ldrh r0, [r4, 0x20]\n\
+ adds r0, 0x60\n\
+ strh r0, [r4, 0x20]\n\
+_0804495A:\n\
+ movs r6, 0\n\
+ ldr r1, _08044A04 @ =gSprites\n\
+ mov r10, r1\n\
+ mov r4, sp\n\
+ mov r2, r9\n\
+ adds r0, r2, r7\n\
+ lsls r0, 3\n\
+ str r0, [sp, 0x1C]\n\
+ movs r3, 0xA\n\
+ mov r9, r3\n\
+ mov r8, r6\n\
+_08044970:\n\
+ ldr r0, _08044A08 @ =gSpriteTemplate_820A7D4\n\
+ ldr r5, [sp, 0x24]\n\
+ ldr r1, _08044A0C @ =0xfffc0000\n\
+ adds r2, r5, r1\n\
+ ldr r3, [sp, 0x1C]\n\
+ adds r0, r3, r0\n\
+ ldr r5, [sp, 0x20]\n\
+ asrs r1, r5, 16\n\
+ asrs r2, 16\n\
+ movs r3, 0x9\n\
+ bl CreateSpriteAtEnd\n\
+ strb r0, [r4]\n\
+ ldr r0, [sp, 0x10]\n\
+ cmp r0, 0\n\
+ bne _080449A0\n\
+ ldrb r0, [r4]\n\
+ lsls r1, r0, 4\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ ldr r2, _08044A10 @ =gSprites + 0x1C\n\
+ adds r1, r2\n\
+ ldr r0, _08044A14 @ =sub_8045180\n\
+ str r0, [r1]\n\
+_080449A0:\n\
+ ldr r5, _08044A04 @ =gSprites\n\
+ cmp r7, 0\n\
+ bne _080449BE\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ add r0, r10\n\
+ strh r7, [r0, 0x24]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ add r0, r10\n\
+ strh r7, [r0, 0x26]\n\
+_080449BE:\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ movs r1, 0\n\
+ mov r3, sp\n\
+ ldrh r3, [r3, 0x18]\n\
+ strh r3, [r0, 0x2E]\n\
+ cmp r7, 0\n\
+ bne _08044A18\n\
+ ldrb r0, [r4]\n\
+ lsls r1, r0, 4\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r5\n\
+ ldrh r0, [r1, 0x20]\n\
+ adds r0, 0x18\n\
+ add r0, r8\n\
+ strh r0, [r1, 0x20]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ mov r1, r9\n\
+ strh r1, [r0, 0x30]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ movs r1, 0x78\n\
+ b _08044A56\n\
+ .align 2, 0\n\
+_08044A04: .4byte gSprites\n\
+_08044A08: .4byte gSpriteTemplate_820A7D4\n\
+_08044A0C: .4byte 0xfffc0000\n\
+_08044A10: .4byte gSprites + 0x1C\n\
+_08044A14: .4byte sub_8045180\n\
+_08044A18:\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r5\n\
+ ldrh r3, [r2, 0x20]\n\
+ subs r3, 0x18\n\
+ movs r1, 0x5\n\
+ subs r1, r6\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 1\n\
+ subs r3, r0\n\
+ strh r3, [r2, 0x20]\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r5\n\
+ movs r1, 0x6\n\
+ subs r1, r6\n\
+ lsls r0, r1, 3\n\
+ subs r0, r1\n\
+ adds r0, 0xA\n\
+ strh r0, [r2, 0x30]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ ldr r1, _08044AC4 @ =0x0000ff88\n\
+_08044A56:\n\
+ strh r1, [r0, 0x24]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ strh r7, [r0, 0x32]\n\
+ adds r4, 0x1\n\
+ movs r2, 0x7\n\
+ add r9, r2\n\
+ movs r3, 0xA\n\
+ add r8, r3\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ bgt _08044A76\n\
+ b _08044970\n\
+_08044A76:\n\
+ ldr r0, [sp, 0x8]\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08044B5E\n\
+ movs r6, 0\n\
+ ldr r5, _08044AC8 @ =gBattleTypeFlags\n\
+ mov r10, r5\n\
+ ldr r0, _08044ACC @ =0x0000ffff\n\
+ mov r9, r0\n\
+ ldr r7, _08044AD0 @ =gSprites\n\
+ ldr r1, _08044AD4 @ =0x000003ff\n\
+ mov r12, r1\n\
+ ldr r2, _08044AD8 @ =0xfffffc00\n\
+ mov r8, r2\n\
+ mov r4, sp\n\
+ ldr r5, [sp, 0xC]\n\
+_08044A9A:\n\
+ mov r3, r10\n\
+ ldrh r1, [r3]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08044ADC\n\
+ ldrh r0, [r5]\n\
+ cmp r0, r9\n\
+ beq _08044AE6\n\
+ cmp r0, 0\n\
+ bne _08044B2E\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x3\n\
+ b _08044B46\n\
+ .align 2, 0\n\
+_08044AC4: .4byte 0x0000ff88\n\
+_08044AC8: .4byte gBattleTypeFlags\n\
+_08044ACC: .4byte 0x0000ffff\n\
+_08044AD0: .4byte gSprites\n\
+_08044AD4: .4byte 0x000003ff\n\
+_08044AD8: .4byte 0xfffffc00\n\
+_08044ADC:\n\
+ ldr r1, [sp, 0x14]\n\
+ lsls r0, r1, 24\n\
+ asrs r0, 24\n\
+ cmp r6, r0\n\
+ blt _08044B14\n\
+_08044AE6:\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x1\n\
+ mov r0, r12\n\
+ ands r1, r0\n\
+ mov r0, r8\n\
+ ands r0, r3\n\
+ orrs r0, r1\n\
+ strh r0, [r2, 0x4]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r7\n\
+ movs r1, 0x1\n\
+ strh r1, [r0, 0x3C]\n\
+ b _08044B52\n\
+_08044B14:\n\
+ ldrh r0, [r5]\n\
+ cmp r0, 0\n\
+ bne _08044B2E\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x3\n\
+ b _08044B46\n\
+_08044B2E:\n\
+ ldr r0, [r5, 0x4]\n\
+ cmp r0, 0\n\
+ beq _08044B52\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x2\n\
+_08044B46:\n\
+ mov r0, r12\n\
+ ands r1, r0\n\
+ mov r0, r8\n\
+ ands r0, r3\n\
+ orrs r0, r1\n\
+ strh r0, [r2, 0x4]\n\
+_08044B52:\n\
+ adds r4, 0x1\n\
+ adds r5, 0x8\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _08044A9A\n\
+ b _08044C38\n\
+_08044B5E:\n\
+ movs r6, 0\n\
+ ldr r1, _08044BA4 @ =gBattleTypeFlags\n\
+ mov r10, r1\n\
+ ldr r2, _08044BA8 @ =0x0000ffff\n\
+ mov r9, r2\n\
+ ldr r7, _08044BAC @ =gSprites\n\
+ ldr r3, _08044BB0 @ =0x000003ff\n\
+ mov r12, r3\n\
+ ldr r5, _08044BB4 @ =0xfffffc00\n\
+ mov r8, r5\n\
+ ldr r5, [sp, 0xC]\n\
+ mov r4, sp\n\
+ adds r4, 0x5\n\
+_08044B78:\n\
+ mov r0, r10\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08044BB8\n\
+ ldrh r0, [r5]\n\
+ cmp r0, r9\n\
+ beq _08044BC2\n\
+ cmp r0, 0\n\
+ bne _08044C0A\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x3\n\
+ b _08044C22\n\
+ .align 2, 0\n\
+_08044BA4: .4byte gBattleTypeFlags\n\
+_08044BA8: .4byte 0x0000ffff\n\
+_08044BAC: .4byte gSprites\n\
+_08044BB0: .4byte 0x000003ff\n\
+_08044BB4: .4byte 0xfffffc00\n\
+_08044BB8:\n\
+ ldr r1, [sp, 0x14]\n\
+ lsls r0, r1, 24\n\
+ asrs r0, 24\n\
+ cmp r6, r0\n\
+ blt _08044BF0\n\
+_08044BC2:\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x1\n\
+ mov r0, r12\n\
+ ands r1, r0\n\
+ mov r0, r8\n\
+ ands r0, r3\n\
+ orrs r0, r1\n\
+ strh r0, [r2, 0x4]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r7\n\
+ movs r1, 0x1\n\
+ strh r1, [r0, 0x3C]\n\
+ b _08044C2E\n\
+_08044BF0:\n\
+ ldrh r0, [r5]\n\
+ cmp r0, 0\n\
+ bne _08044C0A\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x3\n\
+ b _08044C22\n\
+_08044C0A:\n\
+ ldr r0, [r5, 0x4]\n\
+ cmp r0, 0\n\
+ beq _08044C2E\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x2\n\
+_08044C22:\n\
+ mov r0, r12\n\
+ ands r1, r0\n\
+ mov r0, r8\n\
+ ands r0, r3\n\
+ orrs r0, r1\n\
+ strh r0, [r2, 0x4]\n\
+_08044C2E:\n\
+ subs r4, 0x1\n\
+ adds r5, 0x8\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _08044B78\n\
+_08044C38:\n\
+ ldr r0, _08044C98 @ =TaskDummy\n\
+ movs r1, 0x5\n\
+ bl CreateTask\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ ldr r2, _08044C9C @ =gTasks\n\
+ lsls r3, r4, 2\n\
+ adds r1, r3, r4\n\
+ lsls r1, 3\n\
+ adds r0, r1, r2\n\
+ mov r5, sp\n\
+ ldrh r5, [r5, 0x8]\n\
+ strh r5, [r0, 0x8]\n\
+ mov r6, sp\n\
+ ldrh r6, [r6, 0x18]\n\
+ strh r6, [r0, 0xA]\n\
+ movs r6, 0\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xE\n\
+ adds r1, r0\n\
+_08044C62:\n\
+ mov r5, sp\n\
+ adds r0, r5, r6\n\
+ ldrb r0, [r0]\n\
+ strh r0, [r1]\n\
+ adds r1, 0x2\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _08044C62\n\
+ adds r0, r3, r4\n\
+ lsls r0, 3\n\
+ adds r0, r2\n\
+ ldrh r6, [r5, 0x10]\n\
+ strh r6, [r0, 0x1C]\n\
+ movs r0, 0x72\n\
+ movs r1, 0\n\
+ bl PlaySE12WithPanning\n\
+ adds r0, r4, 0\n\
+ add sp, 0x28\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_08044C98: .4byte TaskDummy\n\
+_08044C9C: .4byte gTasks\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_8044CA0(u8 taskId)
+{
+ u8 sp[6];
+ u8 r9;
+ u8 r10;
+ u8 sp8;
+ s32 i;
+
+ r9 = gTasks[taskId].data[10];
+ r10 = gTasks[taskId].data[1];
+ sp8 = gTasks[taskId].data[0];
+ for (i = 0; i < 6; i++)
+ sp[i] = gTasks[taskId].data[3 + i];
+
+ REG_BLDCNT = 0x3F40;
+ REG_BLDALPHA = 0x10;
+ gTasks[taskId].data[15] = 16;
+ for (i = 0; i < 6; i++)
+ gSprites[sp[i]].oam.objMode = 1;
+ gSprites[r10].oam.objMode = 1;
+ if (r9 != 0)
+ {
+ for (i = 0; i < 6; i++)
+ {
+ if (battle_side_get_owner(sp8) != 0)
+ {
+ gSprites[sp[5 - i]].data1 = 7 * i;
+ gSprites[sp[5 - i]].data3 = 0;
+ gSprites[sp[5 - i]].data4 = 0;
+ gSprites[sp[5 - i]].callback = sub_8045110;
+ }
+ else
+ {
+ gSprites[sp[i]].data1 = 7 * i;
+ gSprites[sp[i]].data3 = 0;
+ gSprites[sp[i]].data4 = 0;
+ gSprites[sp[i]].callback = sub_8045110;
+ }
+ }
+ gSprites[r10].data0 /= 2;
+ gSprites[r10].data1 = 0;
+ gSprites[r10].callback = sub_8045048;
+ SetSubspriteTables(&gSprites[r10], gSubspriteTables_820A6EC);
+ gTasks[taskId].func = sub_8044E74;
+ }
+ else
+ {
+ gTasks[taskId].func = sub_8044F70;
+ }
+}
+
+static void sub_8044E74(u8 taskId)
+{
+ u16 temp = gTasks[taskId].data[11]++;
+
+ if ((temp & 1) == 0)
+ {
+ gTasks[taskId].data[15]--;
+ if (gTasks[taskId].data[15] < 0)
+ return;
+ REG_BLDALPHA = (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8);
+ }
+ if (gTasks[taskId].data[15] == 0)
+ gTasks[taskId].func = sub_8044ECC;
+}
+
+static void sub_8044ECC(u8 taskId)
+{
+ u8 sp[6];
+ s32 i;
+
+ gTasks[taskId].data[15]--;
+ if (gTasks[taskId].data[15] == -1)
+ {
+ u8 var = gTasks[taskId].data[1];
+
+ for (i = 0; i < 6; i++)
+ sp[i] = gTasks[taskId].data[3 + i];
+ DestroySpriteAndFreeResources(&gSprites[var]);
+ DestroySpriteAndFreeResources(&gSprites[sp[0]]);
+ for (i = 1; i < 6; i++)
+ DestroySprite(&gSprites[sp[i]]);
+ }
+ else if (gTasks[taskId].data[15] == -3)
+ {
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_8044F70(u8 taskId)
+{
+ u8 sp[6];
+ s32 i;
+
+ gTasks[taskId].data[15]--;
+ // Same as above function except with this check.
+ if (gTasks[taskId].data[15] >= 0)
+ {
+ REG_BLDALPHA = (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8);
+ }
+ else if (gTasks[taskId].data[15] == -1)
+ {
+ u8 var = gTasks[taskId].data[1];
+
+ for (i = 0; i < 6; i++)
+ sp[i] = gTasks[taskId].data[3 + i];
+ DestroySpriteAndFreeResources(&gSprites[var]);
+ DestroySpriteAndFreeResources(&gSprites[sp[0]]);
+ for (i = 1; i < 6; i++)
+ DestroySprite(&gSprites[sp[i]]);
+ }
+ else if (gTasks[taskId].data[15] == -3)
+ {
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ DestroyTask(taskId);
+ }
+}
+
+void sub_8045030(struct Sprite *sprite)
+{
+ if (sprite->pos2.x != 0)
+ sprite->pos2.x += sprite->data0;
+}
+
+static void sub_8045048(struct Sprite *sprite)
+{
+ sprite->data1 += 32;
+ if (sprite->data0 > 0)
+ sprite->pos2.x += sprite->data1 >> 4;
+ else
+ sprite->pos2.x -= sprite->data1 >> 4;
+ sprite->data1 &= 0xF;
+}
+
+void sub_804507C(struct Sprite *sprite)
+{
+ u8 r3;
+ u16 r2;
+ s8 pan;
+
+ if (sprite->data1 > 0)
+ {
+ sprite->data1--;
+ return;
+ }
+ r3 = sprite->data2;
+ r2 = sprite->data3;
+ r2 += 56;
+ sprite->data3 = r2 & 0xFFF0;
+ if (r3 != 0)
+ {
+ sprite->pos2.x += r2 >> 4;
+ if (sprite->pos2.x > 0)
+ sprite->pos2.x = 0;
+ }
+ else
+ {
+ sprite->pos2.x -= r2 >> 4;
+ if (sprite->pos2.x < 0)
+ sprite->pos2.x = 0;
+ }
+ if (sprite->pos2.x == 0)
+ {
+ pan = 63;
+ if (r3 != 0)
+ pan = -64;
+ if (sprite->data7 != 0)
+ PlaySE2WithPanning(SE_TB_KARA, pan);
+ else
+ PlaySE1WithPanning(SE_TB_KON, pan);
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+static void sub_8045110(struct Sprite *sprite)
+{
+ u8 r0;
+ u16 r2;
+
+ if (sprite->data1 > 0)
+ {
+ sprite->data1--;
+ return;
+ }
+ r0 = sprite->data2;
+ r2 = sprite->data3;
+ r2 += 56;
+ sprite->data3 = r2 & 0xFFF0;
+ if (r0 != 0)
+ sprite->pos2.x += r2 >> 4;
+ else
+ sprite->pos2.x -= r2 >> 4;
+ if (sprite->pos2.x + sprite->pos1.x > 248
+ || sprite->pos2.x + sprite->pos1.x < -8)
+ {
+ sprite->invisible = TRUE;
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void sub_8045180(struct Sprite *sprite)
+{
+ u8 spriteId = sprite->data0;
+
+ sprite->pos2.x = gSprites[spriteId].pos2.x;
+ sprite->pos2.y = gSprites[spriteId].pos2.y;
+}
+
+static void sub_80451A0(u8 a, struct Pokemon *pkmn)
+{
+ u8 nickname[POKEMON_NAME_LENGTH];
+ u8 gender;
+ u16 species;
+ u8 language;
+ u8 *ptr;
+ s32 i;
+ s32 _7;
+ u8 *const *r1;
+
+ StringCopy(gUnknown_020238CC, gUnknown_0820A8B0);
+ GetMonData(pkmn, MON_DATA_NICKNAME, nickname);
+ StringGetEnd10(nickname);
+ ptr = StringCopy(gUnknown_020238CC + 3, nickname);
+ ptr[0] = EXT_CTRL_CODE_BEGIN;
+ ptr[1] = 3;
+ ptr[2] = 2;
+ ptr[3] = EXT_CTRL_CODE_BEGIN;
+ ptr[4] = 1;
+ ptr += 5;
+ gender = GetMonGender(pkmn);
+ species = GetMonData(pkmn, MON_DATA_SPECIES);
+ language = GetMonData(pkmn, MON_DATA_LANGUAGE);
+ if (sub_8040D3C(species, nickname, language))
+ gender = 100;
+ switch (gender)
+ {
+ default:
+ ptr[0] = 0xB;
+ ptr[1] = EOS;
+ ptr += 1;
+ break;
+ case MON_MALE:
+ ptr[0] = 0xB;
+ ptr[1] = CHAR_MALE;
+ ptr[2] = EOS;
+ ptr += 2;
+ break;
+ case MON_FEMALE:
+ ptr[0] = 0xA;
+ ptr[1] = CHAR_FEMALE;
+ ptr[2] = EOS;
+ ptr += 2;
+ break;
+ }
+ ptr[0] = EXT_CTRL_CODE_BEGIN;
+ ptr[1] = 0x13;
+ ptr[2] = 0x37;
+ ptr[3] = EOS;
+ ptr = (u8 *)0x02000520 + battle_get_per_side_status(gSprites[a].data6) * 0x180;
+ sub_80034D4(ptr, gUnknown_020238CC);
+
+ i = 0;
+ _7 = 7;
+ if (GetMonData(pkmn, MON_DATA_LANGUAGE) == 1
+ && GetMonData(pkmn, MON_DATA_IS_EGG) == 0)
+ {
+ u8 *p = gUnknown_020238CC;
+
+ while (*p != EOS)
+ {
+ if (*p == EXT_CTRL_CODE_BEGIN)
+ {
+ p += GetExtCtrlCodeLength(p[1]) + 1;
+ }
+ else
+ {
+ u8 r0;
+
+ if ((*p >= 0x37 && *p <= 0x4A) || (*p >= 0x87 && *p <= 0x9A))
+ r0 = 0x2C;
+ else if ((*p >= 0x4B && *p <= 0x4F) || (*p >= 0x9B && *p <= 0x9F))
+ r0 = 0x2D;
+ else
+ r0 = 0x2B;
+
+ CpuCopy32(sub_8043CDC(r0), ptr + 0x40 * i, 32);
+ i++;
+ p++;
+ }
+ }
+ }
+
+ for (; i < _7; i++)
+ CpuCopy32(sub_8043CDC(0x2B), ptr + 64 * i, 32);
+
+ if (battle_side_get_owner(gSprites[a].data6) == 0 && !IsDoubleBattle())
+ {
+ r1 = (u8 *const *)gUnknown_0820A8B4;
+ for (i = 0; i < _7; i++)
+ {
+ u8 *r4 = r1[i];
+
+ r4 += gSprites[a].oam.tileNum * 32;
+ CpuCopy32(ptr, r4, 32);
+ ptr += 32;
+
+ r4 += 0x100;
+ CpuCopy32(ptr, r4, 32);
+ ptr += 32;
+ }
+ }
+ else
+ {
+ if (battle_side_get_owner(gSprites[a].data6) == 0)
+ r1 = (u8 *const *)gUnknown_0820A904;
+ else
+ r1 = (u8 *const *)gUnknown_0820A8DC;
+ for (i = 0; i < _7; i++)
+ {
+ u8 *r4 = r1[i];
+
+ r4 += gSprites[a].oam.tileNum * 32;
+ CpuCopy32(ptr, r4, 32);
+ ptr += 32;
+
+ r4 += 0x100;
+ CpuCopy32(ptr, r4, 32);
+ ptr += 32;
+ }
+ }
+}
+
+static void sub_8045458(u8 a, u8 b)
+{
+ u8 r4;
+
+ if (gBattleTypeFlags & 0x200)
+ return;
+ if (gBattleTypeFlags & 8)
+ return;
+
+ r4 = gSprites[a].data6;
+ if (battle_side_get_owner(r4) != 0)
+ {
+ u16 species = GetMonData(&gEnemyParty[gUnknown_02024A6A[r4]], MON_DATA_SPECIES);
+ if (sub_8090D90(SpeciesToNationalPokedexNum(species), 1) != 0)
+ {
+ r4 = gSprites[a].data5;
+ if (b != 0)
+ CpuCopy32(sub_8043CDC(0x46), (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32), 32);
+ else
+ CpuFill32(0, (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32), 32);
+ }
+ }
+}
+
+static void draw_status_ailment_maybe(u8 a)
+{
+ s32 r4;
+ s32 r4_2;
+ u8 r7;
+ u8 r10;
+ s16 r8;
+ const u8 *r6;
+ u8 r0;
+ s32 i;
+
+ r7 = gSprites[a].data6;
+ r10 = gSprites[a].data5;
+ if (battle_side_get_owner(r7) == 0)
+ {
+ r4 = GetMonData(&gPlayerParty[gUnknown_02024A6A[r7]], MON_DATA_STATUS);
+ if (!IsDoubleBattle())
+ r8 = 0x1A;
+ else
+ r8 = 0x12;
+ }
+ else
+ {
+ r4 = GetMonData(&gEnemyParty[gUnknown_02024A6A[r7]], MON_DATA_STATUS);
+ r8 = 0x11;
+ }
+ if (r4 & 7)
+ {
+ r6 = sub_8043CDC(sub_80457E8(0x1B, r7));
+ r0 = 2;
+ }
+ else if (r4 & 0x88)
+ {
+ r6 = sub_8043CDC(sub_80457E8(0x15, r7));
+ r0 = 0;
+ }
+ else if (r4 & 0x10)
+ {
+ r6 = sub_8043CDC(sub_80457E8(0x21, r7));
+ r0 = 4;
+ }
+ else if (r4 & 0x20)
+ {
+ r6 = sub_8043CDC(sub_80457E8(0x1E, r7));
+ r0 = 3;
+ }
+ else if (r4 & 0x40)
+ {
+ r6 = sub_8043CDC(sub_80457E8(0x18, r7));
+ r0 = 1;
+ }
+ else
+ {
+ r6 = sub_8043CDC(0x27);
+
+ for (i = 0; i < 3; i++)
+ CpuCopy32(r6, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8 + i) * 32), 32);
+
+ if (!ewram17800[r7].bit_4)
+ CpuCopy32(sub_8043CDC(1), (void *)(OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32), 64);
+
+ sub_8045458(a, 1);
+ return;
+ }
+
+ r4_2 = gSprites[a].oam.paletteNum * 16;
+ r4_2 += r7 + 12;
+ // I don't like writing the array index like this, but I can't get it to match otherwise.
+ FillPalette(r0[gBattleInterfaceStatusIcons_DynPal], r4_2 + 0x100, 2);
+ CpuCopy16(gPlttBufferUnfaded + 0x100 + r4_2, (void *)(OBJ_PLTT + r4_2 * 2), 2);
+ CpuCopy32(r6, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8) * 32), 96);
+ if (IsDoubleBattle() == TRUE || battle_side_get_owner(r7) == TRUE)
+ {
+ if (!ewram17800[r7].bit_4)
+ {
+ CpuCopy32(sub_8043CDC(0), (void *)(OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32), 32);
+ CpuCopy32(sub_8043CDC(0x41), (void *)(OBJ_VRAM0 + (gSprites[r10].oam.tileNum + 1) * 32), 32);
+ }
+ }
+ sub_8045458(a, 0);
+}
+
+static u8 sub_80457E8(u8 a, u8 b)
+{
+ u8 ret = a;
+
+ switch (a)
+ {
+ case 21:
+ if (b == 0)
+ ret = 21;
+ else if (b == 1)
+ ret = 71;
+ else if (b == 2)
+ ret = 86;
+ else
+ ret = 101;
+ break;
+ case 24:
+ if (b == 0)
+ ret = 24;
+ else if (b == 1)
+ ret = 74;
+ else if (b == 2)
+ ret = 89;
+ else
+ ret = 104;
+ break;
+ case 27:
+ if (b == 0)
+ ret = 27;
+ else if (b == 1)
+ ret = 77;
+ else if (b == 2)
+ ret = 92;
+ else
+ ret = 107;
+ break;
+ case 30:
+ if (b == 0)
+ ret = 30;
+ else if (b == 1)
+ ret = 80;
+ else if (b == 2)
+ ret = 95;
+ else
+ ret = 110;
+ break;
+ case 33:
+ if (b == 0)
+ ret = 33;
+ else if (b == 1)
+ ret = 83;
+ else if (b == 2)
+ ret = 98;
+ else
+ ret = 113;
+ break;
+ }
+ return ret;
+}
+
+static void sub_80458B0(u8 a)
+{
+ u8 *r6;
+ u8 r8;
+ u8 i;
+ s32 r7;
+ u8 *addr;
+
+ r6 = (u8 *)0x02000520 + battle_get_per_side_status(gSprites[a].data6) * 0x180;
+ r8 = 7;
+ sub_80034D4(r6, BattleText_SafariBalls);
+ for (i = 0; i < r8; i++)
+ CpuCopy32(sub_8043CDC(0x2B), r6 + i * 64, 32);
+ for (r7 = 3; r7 < 3 + r8; r7++)
+ {
+ addr = (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + MACRO1(r7)) * 32);
+ CpuCopy32(r6, addr, 32);
+ r6 += 32;
+
+ addr = (void *)(OBJ_VRAM0 + (8 + gSprites[a].oam.tileNum + MACRO1(r7)) * 32);
+ CpuCopy32(r6, addr, 32);
+ r6 += 32;
+ }
+
+}
+
+static void sub_8045998(u8 a)
+{
+ u8 *r7;
+ u8 status;
+ s32 r6;
+ s32 i;
+
+ r7 = StringCopy(gUnknown_020238CC, BattleText_SafariBallsLeft);
+ r7 = sub_8003504(r7, gNumSafariBalls, 10, 1);
+ StringAppend(r7, BattleText_HighlightRed);
+ status = battle_get_per_side_status(gSprites[a].data6);
+ r7 = (u8 *)0x02000520 + status * 0x180;
+ r6 = 5;
+ sub_80034D4(r7, gUnknown_020238CC);
+ r7 = (u8 *)0x02000520 + status * 0x180 + 32;
+ for (i = 6; i < 6 + r6; i++)
+ {
+ CpuCopy32(r7, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x18 + MACRO1(i)) * 32), 32);
+ r7 += 64;
+ }
+}
+
+void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c)
+{
+ u8 r10;
+ u32 maxhp;
+ u32 currhp;
+
+ r10 = gSprites[a].data6;
+ if (battle_side_get_owner(r10) == 0)
+ {
+ if (c == 3 || c == 0)
+ sub_8043FC0(a, GetMonData(pkmn, MON_DATA_LEVEL));
+ if (c == 1 || c == 0)
+ sub_80440EC(a, GetMonData(pkmn, MON_DATA_HP), 0);
+ if (c == 2 || c == 0)
+ sub_80440EC(a, GetMonData(pkmn, MON_DATA_MAX_HP), 1);
+ if (c == 5 || c == 0)
+ {
+ load_gfxc_health_bar(0);
+ maxhp = GetMonData(pkmn, MON_DATA_MAX_HP);
+ currhp = GetMonData(pkmn, MON_DATA_HP);
+ sub_8043D84(r10, a, maxhp, currhp, 0);
+ sub_8045C78(r10, a, 0, 0);
+ }
+ if (!IsDoubleBattle() && (c == 6 || c == 0))
+ {
+ u16 species;
+ u8 level;
+ u32 exp;
+ u32 var1;
+ u32 var2;
+ u32 currLevelExp;
+
+ load_gfxc_health_bar(3);
+ species = GetMonData(pkmn, MON_DATA_SPECIES);
+ level = GetMonData(pkmn, MON_DATA_LEVEL);
+ exp = GetMonData(pkmn, MON_DATA_EXP);
+ currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level];
+ var1 = exp - currLevelExp;
+ var2 = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp;
+ sub_8043D84(r10, a, var2, var1, 0);
+ sub_8045C78(r10, a, 1, 0);
+ }
+ if (c == 4 || c == 0)
+ sub_80451A0(a, pkmn);
+ if (c == 9 || c == 0)
+ draw_status_ailment_maybe(a);
+ if (c == 10)
+ sub_80458B0(a);
+ if (c == 10 || c == 11)
+ sub_8045998(a);
+ }
+ else
+ {
+ if (c == 3 || c == 0)
+ sub_8043FC0(a, GetMonData(pkmn, MON_DATA_LEVEL));
+ if (c == 5 || c == 0)
+ {
+ load_gfxc_health_bar(0);
+ maxhp = GetMonData(pkmn, MON_DATA_MAX_HP);
+ currhp = GetMonData(pkmn, MON_DATA_HP);
+ sub_8043D84(r10, a, maxhp, currhp, 0);
+ sub_8045C78(r10, a, 0, 0);
+ }
+ if (c == 4 || c == 0)
+ sub_80451A0(a, pkmn);
+ if (c == 9 || c == 0)
+ draw_status_ailment_maybe(a);
+ }
+}
+
+s32 sub_8045C78(u8 a, u8 unused1, u8 c, u8 unused2)
+{
+ s32 r6;
+
+ if (c == 0)
+ {
+ r6 = sub_8045F58(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, 6, 1);
+ }
+ else
+ {
+ u16 r5;
+ s32 r8;
+
+ r5 = GetScaledExpFraction(ewram17850[a].unk8, ewram17850[a].unkC, ewram17850[a].unk4, 8);
+ if (r5 == 0)
+ r5 = 1;
+ r8 = ewram17850[a].unkC;
+ r5 = ABS(r8 / r5);
+ r6 = sub_8045F58(ewram17850[a].unk4, ewram17850[a].unk8, r8, &ewram17850[a].unk10, 8, r5);
+ }
+ if (c == 1 || (c == 0 && (!ewram17800[a].bit_4)))
+ sub_8045D58(a, c);
+ if (r6 == -1)
+ ewram17850[a].unk10 = 0;
+ return r6;
+}
+
+static void sub_8045D58(u8 a, u8 b)
+{
+ u8 sp8[7];
+ u8 r0;
+ u8 r8;
+ u8 i;
+
+ switch (b)
+ {
+ case 0:
+ r0 = sub_804602C(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, sp8, 6);
+ r8 = 3;
+ if (r0 <= 0x18)
+ {
+ r8 = 0x38;
+ if (r0 > 9)
+ r8 = 0x2F;
+ }
+ for (i = 0; i < 6; i++)
+ {
+ u8 r4 = gSprites[ewram17850[a].unk0].data5;
+ if (i < 2)
+ CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 2 + i) * 32), 32);
+ else
+ CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, (void *)(OBJ_VRAM0 + 64 + (i + gSprites[r4].oam.tileNum) * 32), 32);
+ }
+ break;
+ case 1:
+ sub_804602C(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, sp8, 8);
+ r0 = GetMonData(&gPlayerParty[gUnknown_02024A6A[a]], MON_DATA_LEVEL);
+ if (r0 == 100)
+ {
+ for (i = 0; i < 8; i++)
+ sp8[i] = 0;
+ }
+ for (i = 0; i < 8; i++)
+ {
+ if (i < 4)
+ CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, (void *)(OBJ_VRAM0 + (gSprites[ewram17850[a].unk0].oam.tileNum + 0x24 + i) * 32), 32);
+ else
+ CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, (void *)(OBJ_VRAM0 + 0xB80 + (i + gSprites[ewram17850[a].unk0].oam.tileNum) * 32), 32);
+ }
+ break;
+ }
+}
+
+static int sub_8045F58(s32 a, s32 b, int c, int *d, u8 e, u16 f)
+{
+ u8 r2 = e << 3;
+ int r6;
+ int ret;
+
+ if (*d == -32768)
+ {
+ if (a < r2)
+ *d = b << 8;
+ else
+ *d = b;
+ }
+ //_08045F8A
+ b -= c;
+ if (b < 0)
+ b = 0;
+ else if (b > a)
+ b = a;
+ if (a < r2)
+ {
+ int var = *d >> 8;
+
+ r6 = *d;
+ if (b == var && (r6 & 0xFF) == 0)
+ return -1;
+ }
+ else
+ {
+ r6 = *d;
+ if (b == r6)
+ return -1;
+ }
+ //_08045FC4
+ if (a < r2)
+ {
+ int r0 = (a << 8) / r2;
+
+ if (c < 0)
+ {
+ *d = r6 + r0;
+ ret = *d >> 8;
+ if (ret >= b)
+ {
+ *d = b << 8;
+ ret = b;
+ }
+ }
+ //_08045FE2
+ else
+ {
+ *d = r6 - r0;
+ ret = *d >> 8;
+ if ((*d & 0xFF) > 0)
+ ret++;
+ if (ret <= b)
+ {
+ *d = b << 8;
+ ret = b;
+ }
+ }
+ }
+ else
+ {
+ //_08045FFE
+ if (c < 0)
+ {
+ *d += f;
+ if (*d > b)
+ *d = b;
+ ret = *d;
+ }
+ //_08046010
+ else
+ {
+ *d -= f;
+ if (*d < b)
+ *d = b;
+ ret = *d;
+ }
+ }
+ return ret;
+}
+
+static u8 sub_804602C(int a, int b, int c, int *d, u8 *e, u8 f)
+{
+ s32 r5 = b - c;
+ u8 r3;
+ u8 i;
+ u8 r2;
+
+ if (r5 < 0)
+ r5 = 0;
+ else if (r5 > a)
+ r5 = a;
+ r3 = f << 3;
+ for (i = 0; i < f; i++)
+ e[i] = 0;
+ if (a < r3)
+ r2 = *d * r3 / a >> 8;
+ else
+ r2 = *d * r3 / a;
+ r3 = r2;
+ if (r3 == 0 && r5 > 0)
+ {
+ e[0] = 1;
+ r3 = 1;
+ }
+ else
+ {
+ for (i = 0; i < f; i++)
+ {
+ if (r2 >= 8)
+ {
+ e[i] = 8;
+ }
+ else
+ {
+ e[i] = r2;
+ break;
+ }
+ r2 -= 8;
+ }
+ }
+ return r3;
+}
+
+s16 sub_80460C8(struct UnknownStruct9 *a, int *b, void *c, int d)
+{
+ u16 r7;
+ s16 r1;
+
+ r7 = sub_8045F58(a->unk0, a->unk4, a->unk8, b, 6, 1);
+ sub_8046128(a, b, c);
+ if (a->unk0 < 0x30)
+ r1 = *b >> 8;
+ else
+ r1 = *b;
+ do_nothing(a->unk0, r1, d);
+ return r7;
+}
+
+static void sub_8046128(struct UnknownStruct9 *a, int *b, void *c)
+{
+ u8 sp8[6];
+ u16 sp10[6];
+ u8 i;
+
+ sub_804602C(a->unk0, a->unk4, a->unk8, b, (u8 *)sp8, 6);
+ for (i = 0; i < 6; i++)
+ sp10[i] = (a->unkC_0 << 12) | (a->unk10 + sp8[i]);
+ CpuCopy16(sp10, c, sizeof(sp10));
+}
+
+static u8 GetScaledExpFraction(int a, int b, int c, u8 d)
+{
+ u8 r7 = d * 8;
+ int r5 = a - b;
+ s8 r4;
+ s8 r0;
+ s32 result;
+
+ if (r5 < 0)
+ r5 = 0;
+ else if (r5 > c)
+ r5 = c;
+
+ r4 = a * r7 / c;
+ r0 = r5 * r7 / c;
+ result = r4 - r0;
+ return ABS(result);
+}
+
+u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale)
+{
+ u8 result = hp * scale / maxhp;
+
+ if (result == 0 && hp > 0)
+ return 1;
+ return result;
+}
+
+int GetHPBarLevel(s16 hp, s16 maxhp)
+{
+ int result;
+
+ if (hp == maxhp)
+ result = 4;
+ else
+ {
+ u8 fraction = GetScaledHPFraction(hp, maxhp, 48);
+ if (fraction > 24)
+ result = 3;
+ else if (fraction > 9)
+ result = 2;
+ else if (fraction > 0)
+ result = 1;
+ else
+ result = 0;
+ }
+ return result;
+}
diff --git a/src/battle_records.c b/src/battle_records.c
new file mode 100644
index 000000000..3290bbebe
--- /dev/null
+++ b/src/battle_records.c
@@ -0,0 +1,27 @@
+#include "global.h"
+#include "menu.h"
+
+extern const u8 gOtherText_BattleResults[];
+extern const u8 gOtherText_WinLoseDraw[];
+
+void PrintLinkBattleWinsLossesDraws(void *);
+
+void PrintLinkBattleRecord(void *, u8);
+
+void ShowLinkBattleRecords(void) {
+ s32 i;
+ MenuDrawTextWindow(1, 0, 28, 18);
+ sub_8072BD8((u8 *) gOtherText_BattleResults, 0, 1, 240);
+
+ PrintLinkBattleWinsLossesDraws(gSaveBlock1.linkBattleRecords);
+#if ENGLISH
+ MenuPrint(gOtherText_WinLoseDraw, 12, 6);
+#elif GERMAN
+ MenuPrint_PixelCoords((u8 *) gOtherText_WinLoseDraw, 88, 48, 1);
+#endif
+
+ for (i = 0; i < 5; i++)
+ {
+ PrintLinkBattleRecord(gSaveBlock1.linkBattleRecords[i], 6 + (i + 1) * 2);
+ }
+}
diff --git a/src/berry.c b/src/berry.c
index 636028adf..6c12af053 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -13,6 +13,51 @@
#define FIRST_BERRY ITEM_CHERI_BERRY
#define LAST_BERRY ITEM_ENIGMA_BERRY
+#ifdef ENGLISH
+#define NAME_CHERI_BERRY _("CHERI")
+#define NAME_CHESTO_BERRY _("CHESTO")
+#define NAME_PECHA_BERRY _("PECHA")
+#define NAME_RAWST_BERRY _("RAWST")
+#define NAME_ASPEAR_BERRY _("ASPEAR")
+#define NAME_LEPPA_BERRY _("LEPPA")
+#define NAME_ORAN_BERRY _("ORAN")
+#define NAME_PERSIM_BERRY _("PERSIM")
+#define NAME_LUM_BERRY _("LUM")
+#define NAME_SITRUS_BERRY _("SITRUS")
+#define NAME_FIGY_BERRY _("FIGY")
+#define NAME_WIKI_BERRY _("WIKI")
+#define NAME_MAGO_BERRY _("MAGO")
+#define NAME_AGUAV_BERRY _("AGUAV")
+#define NAME_IAPAPA_BERRY _("IAPAPA")
+#define NAME_RAZZ_BERRY _("RAZZ")
+#define NAME_BLUK_BERRY _("BLUK")
+#define NAME_NANAB_BERRY _("NANAB")
+#define NAME_WEPEAR_BERRY _("WEPEAR")
+#define NAME_PINAP_BERRY _("PINAP")
+#define NAME_POMEG_BERRY _("POMEG")
+#define NAME_KELPSY_BERRY _("KELPSY")
+#define NAME_QUALOT_BERRY _("QUALOT")
+#define NAME_HONDEW_BERRY _("HONDEW")
+#define NAME_GREPA_BERRY _("GREPA")
+#define NAME_TAMATO_BERRY _("TAMATO")
+#define NAME_CORNN_BERRY _("CORNN")
+#define NAME_MAGOST_BERRY _("MAGOST")
+#define NAME_RABUTA_BERRY _("RABUTA")
+#define NAME_NOMEL_BERRY _("NOMEL")
+#define NAME_SPELON_BERRY _("SPELON")
+#define NAME_PAMTRE_BERRY _("PAMTRE")
+#define NAME_WATMEL_BERRY _("WATMEL")
+#define NAME_DURIN_BERRY _("DURIN")
+#define NAME_BELUE_BERRY _("BELUE")
+#define NAME_LIECHI_BERRY _("LIECHI")
+#define NAME_GANLON_BERRY _("GANLON")
+#define NAME_SALAC_BERRY _("SALAC")
+#define NAME_PETAYA_BERRY _("PETAYA")
+#define NAME_APICOT_BERRY _("APICOT")
+#define NAME_LANSAT_BERRY _("LANSAT")
+#define NAME_STARF_BERRY _("STARF")
+#define NAME_ENIGMA_BERRY _("ENIGMA")
+
const u8 gBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers.");
const u8 gBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy.");
const u8 gBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are");
@@ -99,11 +144,143 @@ const u8 gBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the"
const u8 gBerryDescriptionPart2_Starf[] = _("world’s edge. Considered a mirage.");
const u8 gBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY.");
const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars.");
+#elif defined(GERMAN)
+#define NAME_CHERI_BERRY _("AMRENA")
+#define NAME_CHESTO_BERRY _("MARON")
+#define NAME_PECHA_BERRY _("PIRSIF")
+#define NAME_RAWST_BERRY _("FRAGIA")
+#define NAME_ASPEAR_BERRY _("WILBIR")
+#define NAME_LEPPA_BERRY _("JONAGO")
+#define NAME_ORAN_BERRY _("SINEL")
+#define NAME_PERSIM_BERRY _("PERSIM")
+#define NAME_LUM_BERRY _("PRUNUS")
+#define NAME_SITRUS_BERRY _("TSITRU")
+#define NAME_FIGY_BERRY _("GIEFE")
+#define NAME_WIKI_BERRY _("WIKI")
+#define NAME_MAGO_BERRY _("MAGO")
+#define NAME_AGUAV_BERRY _("GAUVE")
+#define NAME_IAPAPA_BERRY _("YAPA")
+#define NAME_RAZZ_BERRY _("HIMMIH")
+#define NAME_BLUK_BERRY _("MORB")
+#define NAME_NANAB_BERRY _("NANAB")
+#define NAME_WEPEAR_BERRY _("NIRBE")
+#define NAME_PINAP_BERRY _("SANANA")
+#define NAME_POMEG_BERRY _("GRANA")
+#define NAME_KELPSY_BERRY _("SETANG")
+#define NAME_QUALOT_BERRY _("QUALOT")
+#define NAME_HONDEW_BERRY _("HONMEL")
+#define NAME_GREPA_BERRY _("LABRUS")
+#define NAME_TAMATO_BERRY _("TAMOT")
+#define NAME_CORNN_BERRY _("SAIM")
+#define NAME_MAGOST_BERRY _("MAGOST")
+#define NAME_RABUTA_BERRY _("RABUTA")
+#define NAME_NOMEL_BERRY _("TRONZI")
+#define NAME_SPELON_BERRY _("KIWAN")
+#define NAME_PAMTRE_BERRY _("PALLM")
+#define NAME_WATMEL_BERRY _("WASMEL")
+#define NAME_DURIN_BERRY _("DURIN")
+#define NAME_BELUE_BERRY _("MYRTIL")
+#define NAME_LIECHI_BERRY _("LYDZI")
+#define NAME_GANLON_BERRY _("LINGAN")
+#define NAME_SALAC_BERRY _("SALKA")
+#define NAME_PETAYA_BERRY _("TAHAY")
+#define NAME_APICOT_BERRY _("APIKO")
+#define NAME_LANSAT_BERRY _("LANSAT")
+#define NAME_STARF_BERRY _("KRAMBO")
+#define NAME_ENIGMA_BERRY _("ENIGMA")
+
+const u8 gBerryDescriptionPart1_Cheri[] = _("Erblüht mit hübschen, zarten Blumen.");
+const u8 gBerryDescriptionPart2_Cheri[] = _("Diese knallrote BEERE ist sehr scharf.");
+const u8 gBerryDescriptionPart1_Chesto[] = _("Diese BEERE hat eine dicke Haut und");
+const u8 gBerryDescriptionPart2_Chesto[] = _("hartes Fruchtfleisch. Trocken!");
+const u8 gBerryDescriptionPart1_Pecha[] = _("Sehr süß und delikat.");
+const u8 gBerryDescriptionPart2_Pecha[] = _("Sehr zart. Vorsichtig anfassen!");
+const u8 gBerryDescriptionPart1_Rawst[] = _("Wenn die Blätter lang und wellig sind,");
+const u8 gBerryDescriptionPart2_Rawst[] = _("wird die BEERE sehr bitter.");
+const u8 gBerryDescriptionPart1_Aspear[] = _("Diese harte BEERE ist sehr");
+const u8 gBerryDescriptionPart2_Aspear[] = _("saftig und sauer im Geschmack!");
+const u8 gBerryDescriptionPart1_Leppa[] = _("Wächst langsamer als AMRENA und");
+const u8 gBerryDescriptionPart2_Leppa[] = _("andere. Je kleiner, desto delikater.");
+const u8 gBerryDescriptionPart1_Oran[] = _("Eine BEERE unterschiedlichsten Ge-");
+const u8 gBerryDescriptionPart2_Oran[] = _("schmacks. Wächst an einem halben Tag.");
+const u8 gBerryDescriptionPart1_Persim[] = _("Liebt Sonnenlicht. Die BEERE");
+const u8 gBerryDescriptionPart2_Persim[] = _("wächst im Sonnenlicht sehr schnell.");
+const u8 gBerryDescriptionPart1_Lum[] = _("Langsamer Wuchs. Wird sie liebevoll ge-");
+const u8 gBerryDescriptionPart2_Lum[] = _("pflegt, kann sie 2 BEEREN tragen.");
+const u8 gBerryDescriptionPart1_Sitrus[] = _("Eng verwandt mit SINEL. Diese große");
+const u8 gBerryDescriptionPart2_Sitrus[] = _("BEERE ist von rundem Geschmack.");
+const u8 gBerryDescriptionPart1_Figy[] = _("Die BEERE sieht angekaut aus. Sie ist");
+const u8 gBerryDescriptionPart2_Figy[] = _("voller scharfer Substanzen.");
+const u8 gBerryDescriptionPart1_Wiki[] = _("Die BEERE wächst unförmig,");
+const u8 gBerryDescriptionPart2_Wiki[] = _("damit PKMN sie besser greifen können.");
+const u8 gBerryDescriptionPart1_Mago[] = _("Die BEERE hat Ausbeulungen. Je mehr");
+const u8 gBerryDescriptionPart2_Mago[] = _("Beulen, desto schmackhafter ist sie.");
+const u8 gBerryDescriptionPart1_Aguav[] = _("Die Blume ist zart. Sie ist fähig,");
+const u8 gBerryDescriptionPart2_Aguav[] = _("ohne Licht wachsen zu können.");
+const u8 gBerryDescriptionPart1_Iapapa[] = _("Die BEERE ist groß und sauer.");
+const u8 gBerryDescriptionPart2_Iapapa[] = _("Sie braucht einen Tag zum Wachsen.");
+const u8 gBerryDescriptionPart1_Razz[] = _("Diese rote BEERE schmeckt etwas");
+const u8 gBerryDescriptionPart2_Razz[] = _("scharf. Sie wächst in nur 4 Stunden.");
+const u8 gBerryDescriptionPart1_Bluk[] = _("Die BEERE ist außen blau, verfärbt");
+const u8 gBerryDescriptionPart2_Bluk[] = _("sich im Mund aber schwarz.");
+const u8 gBerryDescriptionPart1_Nanab[] = _("Diese BEERE war die 7., die auf der");
+const u8 gBerryDescriptionPart2_Nanab[] = _("Welt entdeckt wurde. Sie ist süß.");
+const u8 gBerryDescriptionPart1_Wepear[] = _("Die Blume ist klein und weiß. Angenehm");
+const u8 gBerryDescriptionPart2_Wepear[] = _("bitter und sauer zugleich.");
+const u8 gBerryDescriptionPart1_Pinap[] = _("Wind und Kälte verträgt sie nicht.");
+const u8 gBerryDescriptionPart2_Pinap[] = _("Fruchtfleisch: Scharf. Haut: Sauer.");
+const u8 gBerryDescriptionPart1_Pomeg[] = _("Egal wie viel Wasser sie bekommt, sie");
+const u8 gBerryDescriptionPart2_Pomeg[] = _("trägt immer bis zu 6 BEEREN.");
+const u8 gBerryDescriptionPart1_Kelpsy[] = _("Eine Seltenheit. Geformt wie eine");
+const u8 gBerryDescriptionPart2_Kelpsy[] = _("Wurzel. Hat eine große Blume.");
+const u8 gBerryDescriptionPart1_Qualot[] = _("Liebt das Wasser. Wächst besonders");
+const u8 gBerryDescriptionPart2_Qualot[] = _("gut in regenreichen Gegenden.");
+const u8 gBerryDescriptionPart1_Hondew[] = _("Eine wertvolle und seltene BEERE.");
+const u8 gBerryDescriptionPart2_Hondew[] = _("Sie ist sehr schmackhaft.");
+const u8 gBerryDescriptionPart1_Grepa[] = _("Die BEERE ist zart und von runder");
+const u8 gBerryDescriptionPart2_Grepa[] = _("Form. Aber sie ist unglaublich sauer!");
+const u8 gBerryDescriptionPart1_Tamato[] = _("Die Schärfe der BEERE verbrennt die");
+const u8 gBerryDescriptionPart2_Tamato[] = _("Lippen. Sie braucht Zeit zum Wachsen.");
+const u8 gBerryDescriptionPart1_Cornn[] = _("Eine BEERE aus alten Zeiten. Wächst");
+const u8 gBerryDescriptionPart2_Cornn[] = _("nur, wenn in großen Mengen gepflanzt.");
+const u8 gBerryDescriptionPart1_Magost[] = _("Eine BEERE, die für ihren feinen, aus-");
+const u8 gBerryDescriptionPart2_Magost[] = _("gewogenen Geschmack bekannt ist.");
+const u8 gBerryDescriptionPart1_Rabuta[] = _("Eine Seltenheit, die über und über mit");
+const u8 gBerryDescriptionPart2_Rabuta[] = _("Haaren bewachsen ist. Sehr bitter!");
+const u8 gBerryDescriptionPart1_Nomel[] = _("Sehr sauer. Ein Biss betäubt die");
+const u8 gBerryDescriptionPart2_Nomel[] = _("Geschmacksnerven für 3 Tage!");
+const u8 gBerryDescriptionPart1_Spelon[] = _("Die leuchtend rote BEERE ist sehr");
+const u8 gBerryDescriptionPart2_Spelon[] = _("scharf. Gibt scharfe Substanzen ab!");
+const u8 gBerryDescriptionPart1_Pamtre[] = _("Wird vom Meer angespült. Sie wächst");
+const u8 gBerryDescriptionPart2_Pamtre[] = _("an einem anderen Ort.");
+const u8 gBerryDescriptionPart1_Watmel[] = _("Eine große BEERE, 25 cm groß.");
+const u8 gBerryDescriptionPart2_Watmel[] = _("Außergewöhnlich süß.");
+const u8 gBerryDescriptionPart1_Durin[] = _("Bitter schon ihr Anblick! Sie ist so");
+const u8 gBerryDescriptionPart2_Durin[] = _("bitter, dass niemand sie pur isst.");
+const u8 gBerryDescriptionPart1_Belue[] = _("Sie glänzt, sieht zart aus, ist extrem");
+const u8 gBerryDescriptionPart2_Belue[] = _("sauer und braucht Zeit zum Wachsen.");
+const u8 gBerryDescriptionPart1_Liechi[] = _("Eine geheimnisvolle BEERE. Man sagt,");
+const u8 gBerryDescriptionPart2_Liechi[] = _("sie enthalte die Kraft des Meeres.");
+const u8 gBerryDescriptionPart1_Ganlon[] = _("Eine geheimnisvolle BEERE. Man sagt,");
+const u8 gBerryDescriptionPart2_Ganlon[] = _("sie enthalte die Kraft des Landes.");
+const u8 gBerryDescriptionPart1_Salac[] = _("Eine geheimnisvolle BEERE. Man sagt,");
+const u8 gBerryDescriptionPart2_Salac[] = _("sie enthalte die Kraft des Himmels.");
+const u8 gBerryDescriptionPart1_Petaya[] = _("Eine geheimnisvolle BEERE. Man sagt,");
+const u8 gBerryDescriptionPart2_Petaya[] = _("sie enthalte die Kraft allen Lebens.");
+const u8 gBerryDescriptionPart1_Apicot[] = _("Eine rätselhafte BEERE. Man kann");
+const u8 gBerryDescriptionPart2_Apicot[] = _("nicht sagen, wie und was sie ist.");
+const u8 gBerryDescriptionPart1_Lansat[] = _("Eine legendäre BEERE. Sie zu");
+const u8 gBerryDescriptionPart2_Lansat[] = _("tragen bringt Freude.");
+const u8 gBerryDescriptionPart1_Starf[] = _("So stark, dass sie an den Rand der");
+const u8 gBerryDescriptionPart2_Starf[] = _("Welt verbannt wurde. Ein Märchen?");
+const u8 gBerryDescriptionPart1_Enigma[] = _("Eine enigmatische BEERE. Sie scheint");
+const u8 gBerryDescriptionPart2_Enigma[] = _("die Macht der Sterne zu besitzen.");
+#endif
const struct Berry gBerries[] =
{
{
- .name = _("CHERI"),
+ .name = NAME_CHERI_BERRY,
.firmness = BERRY_FIRMNESS_SOFT,
.size = 20,
.maxYield = 3,
@@ -119,7 +296,7 @@ const struct Berry gBerries[] =
.smoothness = 25,
},
{
- .name = _("CHESTO"),
+ .name = NAME_CHESTO_BERRY,
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 80,
.maxYield = 3,
@@ -135,7 +312,7 @@ const struct Berry gBerries[] =
.smoothness = 25,
},
{
- .name = _("PECHA"),
+ .name = NAME_PECHA_BERRY,
.firmness = BERRY_FIRMNESS_VERY_SOFT,
.size = 40,
.maxYield = 3,
@@ -151,7 +328,7 @@ const struct Berry gBerries[] =
.smoothness = 25,
},
{
- .name = _("RAWST"),
+ .name = NAME_RAWST_BERRY,
.firmness = BERRY_FIRMNESS_HARD,
.size = 32,
.maxYield = 3,
@@ -167,7 +344,7 @@ const struct Berry gBerries[] =
.smoothness = 25,
},
{
- .name = _("ASPEAR"),
+ .name = NAME_ASPEAR_BERRY,
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 50,
.maxYield = 3,
@@ -183,7 +360,7 @@ const struct Berry gBerries[] =
.smoothness = 25,
},
{
- .name = _("LEPPA"),
+ .name = NAME_LEPPA_BERRY,
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 28,
.maxYield = 3,
@@ -199,7 +376,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("ORAN"),
+ .name = NAME_ORAN_BERRY,
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 35,
.maxYield = 3,
@@ -215,7 +392,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("PERSIM"),
+ .name = NAME_PERSIM_BERRY,
.firmness = BERRY_FIRMNESS_HARD,
.size = 47,
.maxYield = 3,
@@ -231,7 +408,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("LUM"),
+ .name = NAME_LUM_BERRY,
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 34,
.maxYield = 2,
@@ -247,7 +424,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("SITRUS"),
+ .name = NAME_SITRUS_BERRY,
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 95,
.maxYield = 3,
@@ -263,7 +440,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("FIGY"),
+ .name = NAME_FIGY_BERRY,
.firmness = BERRY_FIRMNESS_SOFT,
.size = 100,
.maxYield = 3,
@@ -279,7 +456,7 @@ const struct Berry gBerries[] =
.smoothness = 25,
},
{
- .name = _("WIKI"),
+ .name = NAME_WIKI_BERRY,
.firmness = BERRY_FIRMNESS_HARD,
.size = 115,
.maxYield = 3,
@@ -295,7 +472,7 @@ const struct Berry gBerries[] =
.smoothness = 25,
},
{
- .name = _("MAGO"),
+ .name = NAME_MAGO_BERRY,
.firmness = BERRY_FIRMNESS_HARD,
.size = 126,
.maxYield = 3,
@@ -311,7 +488,7 @@ const struct Berry gBerries[] =
.smoothness = 25,
},
{
- .name = _("AGUAV"),
+ .name = NAME_AGUAV_BERRY,
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 64,
.maxYield = 3,
@@ -327,7 +504,7 @@ const struct Berry gBerries[] =
.smoothness = 25,
},
{
- .name = _("IAPAPA"),
+ .name = NAME_IAPAPA_BERRY,
.firmness = BERRY_FIRMNESS_SOFT,
.size = 223,
.maxYield = 3,
@@ -343,7 +520,7 @@ const struct Berry gBerries[] =
.smoothness = 25,
},
{
- .name = _("RAZZ"),
+ .name = NAME_RAZZ_BERRY,
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 120,
.maxYield = 6,
@@ -359,7 +536,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("BLUK"),
+ .name = NAME_BLUK_BERRY,
.firmness = BERRY_FIRMNESS_SOFT,
.size = 108,
.maxYield = 6,
@@ -375,7 +552,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("NANAB"),
+ .name = NAME_NANAB_BERRY,
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 77,
.maxYield = 6,
@@ -391,7 +568,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("WEPEAR"),
+ .name = NAME_WEPEAR_BERRY,
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 74,
.maxYield = 6,
@@ -407,7 +584,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("PINAP"),
+ .name = NAME_PINAP_BERRY,
.firmness = BERRY_FIRMNESS_HARD,
.size = 80,
.maxYield = 6,
@@ -423,7 +600,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("POMEG"),
+ .name = NAME_POMEG_BERRY,
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 135,
.maxYield = 6,
@@ -439,7 +616,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("KELPSY"),
+ .name = NAME_KELPSY_BERRY,
.firmness = BERRY_FIRMNESS_HARD,
.size = 150,
.maxYield = 6,
@@ -455,7 +632,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("QUALOT"),
+ .name = NAME_QUALOT_BERRY,
.firmness = BERRY_FIRMNESS_HARD,
.size = 110,
.maxYield = 6,
@@ -471,7 +648,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("HONDEW"),
+ .name = NAME_HONDEW_BERRY,
.firmness = BERRY_FIRMNESS_HARD,
.size = 162,
.maxYield = 6,
@@ -487,7 +664,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("GREPA"),
+ .name = NAME_GREPA_BERRY,
.firmness = BERRY_FIRMNESS_SOFT,
.size = 149,
.maxYield = 6,
@@ -503,7 +680,7 @@ const struct Berry gBerries[] =
.smoothness = 20,
},
{
- .name = _("TAMATO"),
+ .name = NAME_TAMATO_BERRY,
.firmness = BERRY_FIRMNESS_SOFT,
.size = 200,
.maxYield = 4,
@@ -519,7 +696,7 @@ const struct Berry gBerries[] =
.smoothness = 30,
},
{
- .name = _("CORNN"),
+ .name = NAME_CORNN_BERRY,
.firmness = BERRY_FIRMNESS_HARD,
.size = 75,
.maxYield = 4,
@@ -535,7 +712,7 @@ const struct Berry gBerries[] =
.smoothness = 30,
},
{
- .name = _("MAGOST"),
+ .name = NAME_MAGOST_BERRY,
.firmness = BERRY_FIRMNESS_HARD,
.size = 140,
.maxYield = 4,
@@ -551,7 +728,7 @@ const struct Berry gBerries[] =
.smoothness = 30,
},
{
- .name = _("RABUTA"),
+ .name = NAME_RABUTA_BERRY,
.firmness = BERRY_FIRMNESS_SOFT,
.size = 226,
.maxYield = 4,
@@ -567,7 +744,7 @@ const struct Berry gBerries[] =
.smoothness = 30,
},
{
- .name = _("NOMEL"),
+ .name = NAME_NOMEL_BERRY,
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 285,
.maxYield = 4,
@@ -583,7 +760,7 @@ const struct Berry gBerries[] =
.smoothness = 30,
},
{
- .name = _("SPELON"),
+ .name = NAME_SPELON_BERRY,
.firmness = BERRY_FIRMNESS_SOFT,
.size = 133,
.maxYield = 2,
@@ -599,7 +776,7 @@ const struct Berry gBerries[] =
.smoothness = 70,
},
{
- .name = _("PAMTRE"),
+ .name = NAME_PAMTRE_BERRY,
.firmness = BERRY_FIRMNESS_VERY_SOFT,
.size = 244,
.maxYield = 2,
@@ -615,7 +792,7 @@ const struct Berry gBerries[] =
.smoothness = 70,
},
{
- .name = _("WATMEL"),
+ .name = NAME_WATMEL_BERRY,
.firmness = BERRY_FIRMNESS_SOFT,
.size = 250,
.maxYield = 2,
@@ -631,7 +808,7 @@ const struct Berry gBerries[] =
.smoothness = 70,
},
{
- .name = _("DURIN"),
+ .name = NAME_DURIN_BERRY,
.firmness = BERRY_FIRMNESS_HARD,
.size = 280,
.maxYield = 2,
@@ -647,7 +824,7 @@ const struct Berry gBerries[] =
.smoothness = 70,
},
{
- .name = _("BELUE"),
+ .name = NAME_BELUE_BERRY,
.firmness = BERRY_FIRMNESS_VERY_SOFT,
.size = 300,
.maxYield = 2,
@@ -663,7 +840,7 @@ const struct Berry gBerries[] =
.smoothness = 70,
},
{
- .name = _("LIECHI"),
+ .name = NAME_LIECHI_BERRY,
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 111,
.maxYield = 2,
@@ -679,7 +856,7 @@ const struct Berry gBerries[] =
.smoothness = 80,
},
{
- .name = _("GANLON"),
+ .name = NAME_GANLON_BERRY,
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 33,
.maxYield = 2,
@@ -695,7 +872,7 @@ const struct Berry gBerries[] =
.smoothness = 80,
},
{
- .name = _("SALAC"),
+ .name = NAME_SALAC_BERRY,
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 95,
.maxYield = 2,
@@ -711,7 +888,7 @@ const struct Berry gBerries[] =
.smoothness = 80,
},
{
- .name = _("PETAYA"),
+ .name = NAME_PETAYA_BERRY,
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 237,
.maxYield = 2,
@@ -727,7 +904,7 @@ const struct Berry gBerries[] =
.smoothness = 80,
},
{
- .name = _("APICOT"),
+ .name = NAME_APICOT_BERRY,
.firmness = BERRY_FIRMNESS_HARD,
.size = 75,
.maxYield = 2,
@@ -743,7 +920,7 @@ const struct Berry gBerries[] =
.smoothness = 80,
},
{
- .name = _("LANSAT"),
+ .name = NAME_LANSAT_BERRY,
.firmness = BERRY_FIRMNESS_SOFT,
.size = 97,
.maxYield = 2,
@@ -759,7 +936,7 @@ const struct Berry gBerries[] =
.smoothness = 30,
},
{
- .name = _("STARF"),
+ .name = NAME_STARF_BERRY,
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 153,
.maxYield = 2,
@@ -775,7 +952,7 @@ const struct Berry gBerries[] =
.smoothness = 30,
},
{
- .name = _("ENIGMA"),
+ .name = NAME_ENIGMA_BERRY,
.firmness = BERRY_FIRMNESS_UNKNOWN,
.size = 0,
.maxYield = 2,
diff --git a/src/birch_pc.c b/src/birch_pc.c
new file mode 100644
index 000000000..89eafc0ce
--- /dev/null
+++ b/src/birch_pc.c
@@ -0,0 +1,114 @@
+#include "global.h"
+#include "asm.h"
+#include "event_data.h"
+#include "field_message_box.h"
+#include "pokedex.h"
+#include "species.h"
+
+extern u16 gSpecialVar_0x8004;
+extern u16 gSpecialVar_0x8005;
+extern u16 gSpecialVar_0x8006;
+
+extern const u8 gUnknown_081C4520[];
+extern const u8 gUnknown_081C456A[];
+extern const u8 gUnknown_081C45B0[];
+extern const u8 gUnknown_081C45F9[];
+extern const u8 gUnknown_081C4648[];
+extern const u8 gUnknown_081C467E[];
+extern const u8 gUnknown_081C46B9[];
+extern const u8 gUnknown_081C46FE[];
+extern const u8 gUnknown_081C4747[];
+extern const u8 gUnknown_081C4780[];
+extern const u8 gUnknown_081C47DF[];
+extern const u8 gUnknown_081C4828[];
+extern const u8 gUnknown_081C4863[];
+extern const u8 gUnknown_081C489C[];
+extern const u8 gUnknown_081C48EB[];
+extern const u8 gUnknown_081C4936[];
+extern const u8 gUnknown_081C49A2[];
+extern const u8 gUnknown_081C4A06[];
+extern const u8 gUnknown_081C4A4F[];
+extern const u8 gUnknown_081C4A91[];
+extern const u8 gUnknown_081C4ADA[];
+
+bool16 ScriptGetPokedexInfo(void)
+{
+ if (!gSpecialVar_0x8004)
+ {
+ gSpecialVar_0x8005 = GetHoennPokedexCount(0);
+ gSpecialVar_0x8006 = GetHoennPokedexCount(1);
+ }
+ else
+ {
+ gSpecialVar_0x8005 = GetNationalPokedexCount(0);
+ gSpecialVar_0x8006 = GetNationalPokedexCount(1);
+ }
+
+ return IsNationalPokedexEnabled();
+}
+
+const u8 *GetPokedexRatingText(u16 count)
+{
+ if (count < 10)
+ return gUnknown_081C4520;
+ if (count < 20)
+ return gUnknown_081C456A;
+ if (count < 30)
+ return gUnknown_081C45B0;
+ if (count < 40)
+ return gUnknown_081C45F9;
+ if (count < 50)
+ return gUnknown_081C4648;
+ if (count < 60)
+ return gUnknown_081C467E;
+ if (count < 70)
+ return gUnknown_081C46B9;
+ if (count < 80)
+ return gUnknown_081C46FE;
+ if (count < 90)
+ return gUnknown_081C4747;
+ if (count < 100)
+ return gUnknown_081C4780;
+ if (count < 110)
+ return gUnknown_081C47DF;
+ if (count < 120)
+ return gUnknown_081C4828;
+ if (count < 130)
+ return gUnknown_081C4863;
+ if (count < 140)
+ return gUnknown_081C489C;
+ if (count < 150)
+ return gUnknown_081C48EB;
+ if (count < 160)
+ return gUnknown_081C4936;
+ if (count < 170)
+ return gUnknown_081C49A2;
+ if (count < 180)
+ return gUnknown_081C4A06;
+ if (count < 190)
+ return gUnknown_081C4A4F;
+ if (count < 200)
+ return gUnknown_081C4A91;
+ if (count == 200)
+ {
+ if (sub_8090D90(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
+ || sub_8090D90(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1))
+ return gUnknown_081C4A91;
+ return gUnknown_081C4ADA;
+ }
+ if (count == 201)
+ {
+ if (sub_8090D90(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
+ && sub_8090D90(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1))
+ return gUnknown_081C4A91;
+ return gUnknown_081C4ADA;
+ }
+ if (count == 202)
+ return gUnknown_081C4ADA;
+ return gUnknown_081C4520;
+}
+
+void ShowPokedexRatingMessage(void)
+{
+ ShowFieldMessage(GetPokedexRatingText(gSpecialVar_0x8004));
+}
diff --git a/src/credits.c b/src/credits.c
index 7685a033d..17d3507aa 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -7,6 +7,7 @@
#include "palette.h"
#include "songs.h"
#include "sound.h"
+#include "trig.h"
asm(".set REG_BASE, 0x4000000");
asm(".set OFFSET_REG_BLDCNT, 0x50");
@@ -141,14 +142,13 @@ struct CreditsEntry
u8 *text;
};
-extern u8 unk_2000000[];
+extern u8 ewram[];
-#define EWRAM_1F800 ((u16 *)(unk_2000000 + 0x1F800))
-#define HALL_OF_FAME_SHEET_0 ((u8 *)(unk_2000000 + 0x1E000))
-#define HALL_OF_FAME_SHEET_1 ((u8 *)(unk_2000000 + 0x1E800))
-#define HALL_OF_FAME_SHEET_2 ((u8 *)(unk_2000000 + 0x1F000))
-
-extern struct Unk201C000 unk_201C000;
+#define EWRAM_1F800 ((u16 *)(ewram + 0x1F800))
+#define HALL_OF_FAME_SHEET_0 ((u8 *)(ewram + 0x1E000))
+#define HALL_OF_FAME_SHEET_1 ((u8 *)(ewram + 0x1E800))
+#define HALL_OF_FAME_SHEET_2 ((u8 *)(ewram + 0x1F000))
+#define ewram1c000 (*(struct Unk201C000 *)(ewram + 0x1C000))
extern struct HallOfFame gHallOfFame;
extern u8 unk_201e800[0x800];
@@ -162,7 +162,7 @@ extern u16 gUnknown_02039322; // TASK A
extern u8 gUnknown_02039324;
extern u8 gUnknown_02039325;
extern u16 gUnknown_02039358;
-extern u16 gUnknown_0203935A;
+extern s16 gUnknown_0203935A;
extern s16 gUnknown_0203935C;
extern u8 gReservedSpritePaletteCount;
@@ -328,7 +328,7 @@ void sub_81439D0(void)
SetMainCallback2(sub_814395C);
gUnknown_02039325 = 0;
- c000 = &unk_201C000;
+ c000 = &ewram1c000;
sub_81458DC();
@@ -818,11 +818,9 @@ static u8 sub_8144454(u8 page, u8 taskIdA)
#define UNK_DEFINE_44 (0x44)
-#define EWRAM_1C000 (*(struct Unk201C000 *)(unk_2000000 + 0x1C000))
-
static void task_d_8144514(u8 taskIdD)
{
- struct Unk201C000 *r6 = &EWRAM_1C000;
+ struct Unk201C000 *r6 = &ewram1c000;
u8 r2;
switch (gTasks[taskIdD].data[TDD_STATE])
@@ -866,331 +864,87 @@ static void task_d_8144514(u8 taskIdD)
}
}
-__attribute__((naked))
void task_c_8144664(u8 taskIdC)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- ldr r1, _0814468C @ =gTasks\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- movs r2, 0x8\n\
- ldrsh r0, [r0, r2]\n\
- adds r6, r1, 0\n\
- cmp r0, 0x32\n\
- bls _08144680\n\
- b _0814492C\n\
-_08144680:\n\
- lsls r0, 2\n\
- ldr r1, _08144690 @ =_08144694\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_0814468C: .4byte gTasks\n\
-_08144690: .4byte _08144694\n\
- .align 2, 0\n\
-_08144694:\n\
- .4byte _08144760\n\
- .4byte _08144784\n\
- .4byte _081447D8\n\
- .4byte _081447F0\n\
- .4byte _0814482C\n\
- .4byte _08144850\n\
- .4byte _0814489C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _081448A8\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _081448C8\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _081448EC\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _0814492C\n\
- .4byte _08144920\n\
-_08144760:\n\
- lsls r4, r5, 2\n\
- adds r4, r5\n\
- lsls r4, 3\n\
- adds r4, r6\n\
- ldrh r0, [r4, 0x12]\n\
- lsls r0, 16\n\
- asrs r0, 17\n\
- movs r1, 0x7F\n\
- ands r0, r1\n\
- movs r1, 0xC\n\
- bl Sin\n\
- ldr r1, _08144780 @ =gUnknown_0203935A\n\
- strh r0, [r1]\n\
- b _081447A8\n\
- .align 2, 0\n\
-_08144780: .4byte gUnknown_0203935A\n\
-_08144784:\n\
- ldr r7, _081447B0 @ =gUnknown_0203935A\n\
- movs r3, 0\n\
- ldrsh r4, [r7, r3]\n\
- cmp r4, 0\n\
- beq _081447B4\n\
- lsls r4, r5, 2\n\
- adds r4, r5\n\
- lsls r4, 3\n\
- adds r4, r6\n\
- ldrh r0, [r4, 0x12]\n\
- lsls r0, 16\n\
- asrs r0, 17\n\
- movs r1, 0x7F\n\
- ands r0, r1\n\
- movs r1, 0xC\n\
- bl Sin\n\
- strh r0, [r7]\n\
-_081447A8:\n\
- ldrh r0, [r4, 0x12]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x12]\n\
- b _0814492C\n\
- .align 2, 0\n\
-_081447B0: .4byte gUnknown_0203935A\n\
-_081447B4:\n\
- ldr r3, _081447D4 @ =gSprites\n\
- lsls r1, r5, 2\n\
- adds r1, r5\n\
- lsls r1, 3\n\
- adds r1, r6\n\
- movs r0, 0xC\n\
- ldrsh r2, [r1, r0]\n\
- lsls r0, r2, 4\n\
- adds r0, r2\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- movs r2, 0x2\n\
- strh r2, [r0, 0x2E]\n\
- strh r4, [r1, 0x12]\n\
- b _08144848\n\
- .align 2, 0\n\
-_081447D4: .4byte gSprites\n\
-_081447D8:\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r1, r0, r6\n\
- ldrh r2, [r1, 0x12]\n\
- movs r3, 0x12\n\
- ldrsh r0, [r1, r3]\n\
- cmp r0, 0x3F\n\
- bgt _08144848\n\
- adds r0, r2, 0x1\n\
- strh r0, [r1, 0x12]\n\
- b _08144866\n\
-_081447F0:\n\
- ldr r3, _08144828 @ =gSprites\n\
- lsls r2, r5, 2\n\
- adds r2, r5\n\
- lsls r2, 3\n\
- adds r2, r6\n\
- movs r0, 0xC\n\
- ldrsh r1, [r2, r0]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- movs r1, 0x3\n\
- strh r1, [r0, 0x2E]\n\
- movs r0, 0xE\n\
- ldrsh r1, [r2, r0]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- movs r1, 0x1\n\
- strh r1, [r0, 0x2E]\n\
- movs r0, 0x78\n\
- strh r0, [r2, 0x10]\n\
- ldrh r0, [r2, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r2, 0x8]\n\
- b _0814492C\n\
- .align 2, 0\n\
-_08144828: .4byte gSprites\n\
-_0814482C:\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r1, r0, r6\n\
- ldrh r2, [r1, 0x10]\n\
- movs r3, 0x10\n\
- ldrsh r0, [r1, r3]\n\
- cmp r0, 0\n\
- beq _08144844\n\
- subs r0, r2, 0x1\n\
- strh r0, [r1, 0x10]\n\
- b _0814492C\n\
-_08144844:\n\
- movs r0, 0x40\n\
- strh r0, [r1, 0x12]\n\
-_08144848:\n\
- ldrh r0, [r1, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r1, 0x8]\n\
- b _0814492C\n\
-_08144850:\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r4, r0, r6\n\
- ldrh r1, [r4, 0x12]\n\
- movs r2, 0x12\n\
- ldrsh r0, [r4, r2]\n\
- cmp r0, 0\n\
- ble _0814487C\n\
- subs r0, r1, 0x1\n\
- strh r0, [r4, 0x12]\n\
-_08144866:\n\
- movs r1, 0x7F\n\
- ands r0, r1\n\
- movs r1, 0x14\n\
- bl Sin\n\
- ldr r1, _08144878 @ =gUnknown_0203935A\n\
- strh r0, [r1]\n\
- b _0814492C\n\
- .align 2, 0\n\
-_08144878: .4byte gUnknown_0203935A\n\
-_0814487C:\n\
- ldr r2, _08144898 @ =gSprites\n\
- movs r3, 0xC\n\
- ldrsh r1, [r4, r3]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- movs r1, 0x1\n\
- strh r1, [r0, 0x2E]\n\
- ldrh r0, [r4, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x8]\n\
- b _0814492C\n\
- .align 2, 0\n\
-_08144898: .4byte gSprites\n\
-_0814489C:\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r0, r6\n\
- movs r1, 0x32\n\
- b _0814492A\n\
-_081448A8:\n\
- ldr r3, _081448C4 @ =gSprites\n\
- lsls r1, r5, 2\n\
- adds r1, r5\n\
- lsls r1, 3\n\
- adds r1, r6\n\
- movs r0, 0xE\n\
- ldrsh r2, [r1, r0]\n\
- lsls r0, r2, 4\n\
- adds r0, r2\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- movs r2, 0x2\n\
- b _081448E0\n\
- .align 2, 0\n\
-_081448C4: .4byte gSprites\n\
-_081448C8:\n\
- ldr r3, _081448E8 @ =gSprites\n\
- lsls r1, r5, 2\n\
- adds r1, r5\n\
- lsls r1, 3\n\
- adds r1, r6\n\
- movs r0, 0xC\n\
- ldrsh r2, [r1, r0]\n\
- lsls r0, r2, 4\n\
- adds r0, r2\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- movs r2, 0x4\n\
-_081448E0:\n\
- strh r2, [r0, 0x2E]\n\
- movs r0, 0x32\n\
- strh r0, [r1, 0x8]\n\
- b _0814492C\n\
- .align 2, 0\n\
-_081448E8: .4byte gSprites\n\
-_081448EC:\n\
- ldr r3, _0814491C @ =gSprites\n\
- lsls r2, r5, 2\n\
- adds r2, r5\n\
- lsls r2, 3\n\
- adds r2, r6\n\
- movs r0, 0xC\n\
- ldrsh r1, [r2, r0]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- movs r1, 0x5\n\
- strh r1, [r0, 0x2E]\n\
- movs r0, 0xE\n\
- ldrsh r1, [r2, r0]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- movs r1, 0x3\n\
- strh r1, [r0, 0x2E]\n\
- movs r0, 0x32\n\
- strh r0, [r2, 0x8]\n\
- b _0814492C\n\
- .align 2, 0\n\
-_0814491C: .4byte gSprites\n\
-_08144920:\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r0, r6\n\
- movs r1, 0\n\
-_0814492A:\n\
- strh r1, [r0, 0x8]\n\
-_0814492C:\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
+ switch (gTasks[taskIdC].data[0])
+ {
+ case 0:
+ gUnknown_0203935A = Sin((gTasks[taskIdC].data[5] >> 1) & 0x7F, 12);
+ gTasks[taskIdC].data[5]++;
+ break;
+ case 1:
+ if (gUnknown_0203935A != 0)
+ {
+ gUnknown_0203935A = Sin((gTasks[taskIdC].data[5] >> 1) & 0x7F, 12);
+ gTasks[taskIdC].data[5]++;
+ }
+ else
+ {
+ gSprites[gTasks[taskIdC].data[2]].data0 = 2;
+ gTasks[taskIdC].data[5] = 0;
+ gTasks[taskIdC].data[0]++;
+ }
+ break;
+ case 2:
+ if (gTasks[taskIdC].data[5] < 64)
+ {
+ gTasks[taskIdC].data[5]++;
+ gUnknown_0203935A = Sin(gTasks[taskIdC].data[5] & 0x7F, 20);
+ }
+ else
+ {
+ gTasks[taskIdC].data[0]++;
+ }
+ break;
+ case 3:
+ gSprites[gTasks[taskIdC].data[2]].data0 = 3;
+ gSprites[gTasks[taskIdC].data[3]].data0 = 1;
+ gTasks[taskIdC].data[4] = 120;
+ gTasks[taskIdC].data[0]++;
+ break;
+ case 4:
+ if (gTasks[taskIdC].data[4] != 0)
+ {
+ gTasks[taskIdC].data[4]--;
+ }
+ else
+ {
+ gTasks[taskIdC].data[5] = 64;
+ gTasks[taskIdC].data[0]++;
+ }
+ break;
+ case 5:
+ if (gTasks[taskIdC].data[5] > 0)
+ {
+ gTasks[taskIdC].data[5]--;
+ gUnknown_0203935A = Sin(gTasks[taskIdC].data[5] & 0x7F, 20);
+ }
+ else
+ {
+ gSprites[gTasks[taskIdC].data[2]].data0 = 1;
+ gTasks[taskIdC].data[0]++;
+ }
+ break;
+ case 6:
+ gTasks[taskIdC].data[0] = 50;
+ break;
+ case 10:
+ gSprites[gTasks[taskIdC].data[3]].data0 = 2;
+ gTasks[taskIdC].data[0] = 50;
+ break;
+ case 20:
+ gSprites[gTasks[taskIdC].data[2]].data0 = 4;
+ gTasks[taskIdC].data[0] = 50;
+ break;
+ case 30:
+ gSprites[gTasks[taskIdC].data[2]].data0 = 5;
+ gSprites[gTasks[taskIdC].data[3]].data0 = 3;
+ gTasks[taskIdC].data[0] = 50;
+ break;
+ case 50:
+ gTasks[taskIdC].data[0] = 0;
+ break;
+ }
}
#define UNK_DEF_1F3 (499)
diff --git a/src/dewford_trend.c b/src/dewford_trend.c
index 55314b1c6..b90100d90 100644
--- a/src/dewford_trend.c
+++ b/src/dewford_trend.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "dewford_trend.h"
#include "asm.h"
+#include "easy_chat.h"
#include "event_data.h"
#include "link.h"
#include "rng.h"
@@ -24,12 +25,12 @@ void sub_80FA17C(void)
for (i = 0; i < 5; i++)
{
- gSaveBlock1.easyChatPairs[i].words[0] = sub_80EB72C(10);
+ gSaveBlock1.easyChatPairs[i].words[0] = sub_80EB72C(EC_GROUP_CONDITIONS);
if (Random() & 1)
- gSaveBlock1.easyChatPairs[i].words[1] = sub_80EB72C(12);
+ gSaveBlock1.easyChatPairs[i].words[1] = sub_80EB72C(EC_GROUP_LIFESTYLE);
else
- gSaveBlock1.easyChatPairs[i].words[1] = sub_80EB72C(13);
+ gSaveBlock1.easyChatPairs[i].words[1] = sub_80EB72C(EC_GROUP_HOBBIES);
gSaveBlock1.easyChatPairs[i].unk1_6 = Random() & 1;
sub_80FA740(&gSaveBlock1.easyChatPairs[i]);
diff --git a/src/easy_chat.c b/src/easy_chat.c
new file mode 100644
index 000000000..380fe6e4d
--- /dev/null
+++ b/src/easy_chat.c
@@ -0,0 +1,262 @@
+#include "global.h"
+#include "easy_chat.h"
+#include "asm.h"
+#include "event_data.h"
+#include "field_message_box.h"
+#include "pokedex.h"
+#include "rng.h"
+#include "text.h"
+
+u8 sub_80EB8C0(void);
+u8 sub_80EB868(u8);
+u16 sub_80EAE88(u8);
+void sub_80EB890(u8);
+u16 sub_80EB784(u16 group);
+u8 sub_80EAD7C(u8 group);
+u8 sub_80EB680(u16 *, u16, u16, u16);
+static u16 sub_80EB9D8(void);
+static u16 sub_80EB960(void);
+u16 sub_80EB72C(u16);
+
+extern void *gEasyChatGroupWords[];
+extern const u8 gEasyChatGroupSizes[];
+
+extern u16 gSpecialVar_0x8004;
+
+u16 sub_80EB72C(u16 group) {
+ u16 local1;
+
+ local1 = Random() % gEasyChatGroupSizes[group];
+
+ if (group == EC_GROUP_POKEMON ||
+ group == EC_GROUP_POKEMON_2 ||
+ group == EC_GROUP_MOVE_1 ||
+ group == EC_GROUP_MOVE_2)
+ {
+ local1 = ((u16 *) gEasyChatGroupWords[group])[local1];
+ }
+
+
+ return ((group & 0x7F) << 9) | (local1 & 0x1FF);
+}
+
+u16 sub_80EB784(u16 group) {
+ if (!sub_80EAD7C(group))
+ {
+ return -1;
+ }
+
+ if (group != EC_GROUP_POKEMON)
+ {
+ if (group == EC_GROUP_TRENDY_SAYING)
+ {
+ return sub_80EB960();
+ }
+ }
+ else
+ {
+ return sub_80EB9D8();
+ }
+
+ return sub_80EB72C(group);
+}
+
+void sub_80EB7C4(void) {
+ u16 *words;
+ u16 arg1, arg2;
+
+
+ switch (gSpecialVar_0x8004)
+ {
+ case 0:
+ words = gSaveBlock1.unk2B1C;
+ arg1 = 2;
+ arg2 = 2;
+ break;
+
+ case 1:
+ words = gSaveBlock1.unk2B28;
+ if (sub_80EB680(gSaveBlock1.unk2B28, 3, 2, 20))
+ {
+ arg1 = 2;
+ arg2 = 3;
+ }
+ else
+ {
+ arg1 = 3;
+ arg2 = 2;
+ }
+ break;
+
+ case 2:
+ words = gSaveBlock1.unk2B34;
+ arg1 = 3;
+ arg2 = 2;
+ break;
+
+ case 3:
+ words = gSaveBlock1.unk2B40;
+ arg1 = 3;
+ arg2 = 2;
+ break;
+
+ default:
+ return;
+ }
+
+ ConvertEasyChatWordsToString(gStringVar4, words, arg1, arg2);
+ ShowFieldAutoScrollMessage(gStringVar4);
+}
+
+void sub_80EB83C(void) {
+ u16 group, local2;
+
+ if (Random() & 1)
+ {
+ group = EC_GROUP_HOBBIES;
+ }
+ else
+ {
+ group = EC_GROUP_LIFESTYLE;
+ }
+
+ local2 = sub_80EB784(group);
+ sub_80EB3FC(gStringVar2, local2);
+}
+
+u8 sub_80EB868(u8 arg0) {
+ int offset;
+ int index;
+
+ index = arg0 / 8;
+ offset = arg0 & 7;
+ return (gSaveBlock1.unk2D8C[index] >> offset) & 1;
+}
+
+void sub_80EB890(u8 arg0) {
+ int offset;
+ int index;
+
+ if (arg0 > 32)
+ {
+ return;
+ }
+
+ index = arg0 / 8;
+ offset = arg0 & 7;
+ gSaveBlock1.unk2D8C[index] |= 1 << offset;
+}
+
+u8 sub_80EB8C0(void) {
+ u8 i, retval;
+
+ i = 0;
+ retval = 0;
+ for (; i < 33; i++)
+ {
+ if (sub_80EB868(i))
+ {
+ retval += 1;
+ }
+ }
+
+ return retval;
+}
+
+u16 sub_80EB8EC(void) {
+ u16 i;
+ u16 local1, local2;
+
+ local1 = sub_80EB8C0();
+ if (local1 == 33)
+ {
+ return -1;
+ }
+
+ local2 = Random() % (33 - local1);
+
+ for (i = 0; i <= 0x20; i++)
+ {
+ if (sub_80EB868(i) == 0)
+ {
+ if (local2 == 0)
+ {
+ sub_80EB890(i);
+ return (i & 0x1FF) | 0x2800;
+ }
+
+ local2--;
+ }
+ }
+
+ return -1;
+}
+
+static u16 sub_80EB960(void) {
+ u16 i;
+ u16 local1;
+
+ local1 = sub_80EB8C0();
+ if (local1 == 0)
+ {
+ return -1;
+ }
+
+ local1 = Random() % local1;
+
+ for (i = 0; i <= 0x20; i++)
+ {
+ if (sub_80EB868(i))
+ {
+ if (local1 == 0)
+ {
+ return (i & 0x1FF) | 0x2800;
+ }
+
+ local1--;
+ }
+ }
+
+ return -1;
+}
+
+u8 sub_80EB9C8(void) {
+ return IsNationalPokedexEnabled();
+}
+
+static u16 sub_80EB9D8(void) {
+ u16 *speciesList;
+ u16 local1;
+ u16 i;
+
+ local1 = sub_80EAE88(0);
+
+ if (local1 == 0)
+ {
+ return -1;
+ }
+
+ local1 = Random() % local1;
+ speciesList = (u16 *) gEasyChatGroupWords[EC_GROUP_POKEMON];
+
+ for (i = 0; i < gEasyChatGroupSizes[EC_GROUP_POKEMON]; i++)
+ {
+ const u16 dexNum = SpeciesToNationalPokedexNum(*speciesList);
+
+ const u8 local2 = sub_8090D90(dexNum, 0);
+
+ if (local2)
+ {
+ if (local1 == 0)
+ {
+ return *speciesList & 0x1FF;
+ }
+
+ local1--;
+ }
+
+ speciesList++;
+ }
+
+ return -1;
+}
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
new file mode 100644
index 000000000..32fbe1547
--- /dev/null
+++ b/src/egg_hatch.c
@@ -0,0 +1,52 @@
+#include "global.h"
+#include "pokemon.h"
+
+void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) {
+ u16 species;
+ u32 personality, pokerus;
+ u8 i, friendship, language, gameMet, markings;
+ u16 moves[4];
+ u32 ivs[6];
+
+
+ species = GetMonData(egg, MON_DATA_SPECIES);
+
+ for (i = 0; i < 4; i++)
+ {
+ moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i);
+ }
+
+ personality = GetMonData(egg, MON_DATA_PERSONALITY);
+
+ for (i = 0; i < 6; i++)
+ {
+ ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i);
+ }
+
+ gameMet = GetMonData(egg, MON_DATA_MET_GAME);
+ markings = GetMonData(egg, MON_DATA_MARKINGS);
+ pokerus = GetMonData(egg, MON_DATA_POKERUS);
+
+ CreateMon(temp, species, 5, 32, TRUE, personality, 0, 0);
+
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(temp, MON_DATA_MOVE1 + i, (const u8 *) &moves[i]);
+ }
+
+ for (i = 0; i < 6; i++)
+ {
+ SetMonData(temp, MON_DATA_HP_IV + i, (const u8 *) &ivs[i]);
+ }
+
+ language = GAME_LANGUAGE;
+ SetMonData(temp, MON_DATA_LANGUAGE, &language);
+ SetMonData(temp, MON_DATA_MET_GAME, &gameMet);
+ SetMonData(temp, MON_DATA_MARKINGS, &markings);
+
+ friendship = 120;
+ SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship);
+ SetMonData(temp, MON_DATA_POKERUS, (const u8 *) &pokerus);
+
+ *egg = *temp;
+}
diff --git a/src/field_message_box.c b/src/field_message_box.c
index 2a5f90d15..798725540 100644
--- a/src/field_message_box.c
+++ b/src/field_message_box.c
@@ -15,7 +15,7 @@ static u8 sMessageBoxMode;
static void Task_FieldMessageBox(u8 taskId);
static void CreateFieldMessageBoxTask(void);
static void DestroyFieldMessageBoxTask(void);
-static void PrintFieldMessage(u8 *message);
+static void PrintFieldMessage(const u8 *message);
static void PrintFieldMessageFromStringVar4(void);
void InitFieldMessageBox(void)
@@ -67,7 +67,7 @@ static void DestroyFieldMessageBoxTask(void)
DestroyTask(taskId);
}
-bool8 ShowFieldMessage(u8 *message)
+bool8 ShowFieldMessage(const u8 *message)
{
if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN)
{
@@ -81,7 +81,7 @@ bool8 ShowFieldMessage(u8 *message)
}
}
-bool8 ShowFieldAutoScrollMessage(u8 *message)
+bool8 ShowFieldAutoScrollMessage(const u8 *message)
{
if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN)
{
@@ -95,14 +95,14 @@ bool8 ShowFieldAutoScrollMessage(u8 *message)
}
}
-bool8 unref_sub_8064BB8(u8 *message)
+bool8 unref_sub_8064BB8(const u8 *message)
{
sMessageBoxMode = FIELD_MESSAGE_BOX_AUTO_SCROLL;
PrintFieldMessage(message);
return TRUE;
}
-bool8 unref_sub_8064BD0(u8 *message)
+bool8 unref_sub_8064BD0(const u8 *message)
{
if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN)
{
@@ -116,7 +116,7 @@ bool8 unref_sub_8064BD0(u8 *message)
}
}
-static void PrintFieldMessage(u8 *message)
+static void PrintFieldMessage(const u8 *message)
{
StringExpandPlaceholders(gStringVar4, message);
sub_8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15);
diff --git a/src/field_specials.c b/src/field_specials.c
new file mode 100644
index 000000000..9f5a314e2
--- /dev/null
+++ b/src/field_specials.c
@@ -0,0 +1,189 @@
+#include "global.h"
+#include "asm.h"
+#include "event_data.h"
+#include "field_player_avatar.h"
+#include "main.h"
+#include "map_constants.h"
+#include "rom4.h"
+#include "script.h"
+#include "songs.h"
+#include "string_util.h"
+#include "strings.h"
+#include "text.h"
+#include "wallclock.h"
+
+#if ENGLISH
+#define CHAR_DECIMAL_SEPARATOR CHAR_PERIOD
+#elif GERMAN
+#define CHAR_DECIMAL_SEPARATOR CHAR_COMMA
+#endif
+
+extern struct WarpData gUnknown_020297F0;
+extern u16 gScriptResult;
+extern u8 gUnknown_02039250;
+extern u8 gUnknown_02039251;
+extern u32 gUnknown_02039254;
+
+static void RecordCyclingRoadResults(u32, u8);
+
+void sub_810D6A4(void) {
+ SetMainCallback2(sub_8145D88);
+ ScriptContext2_Enable();
+}
+
+void sub_810D6B8(void) {
+ gMain.savedCallback = c2_exit_to_overworld_2_switch;
+ SetMainCallback2(CB2_ViewWallClock);
+ ScriptContext2_Enable();
+}
+
+void ResetCyclingRoadChallengeData(void) {
+ gUnknown_02039250 = 0;
+ gUnknown_02039251 = 0;
+ gUnknown_02039254 = 0;
+}
+
+void BeginCyclingRoadChallenge(void) {
+ gUnknown_02039250 = 1;
+ gUnknown_02039251 = 0;
+ gUnknown_02039254 = gMain.vblankCounter1;
+}
+
+u16 GetPlayerAvatarBike(void) {
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ {
+ return 1;
+ }
+
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE))
+ {
+ return 2;
+ }
+
+ return 0;
+}
+
+void DetermineCyclingRoadResults(u32 arg0, u8 arg1) {
+ u8 result;
+
+ if (arg1 <= 99)
+ {
+ ConvertIntToDecimalStringN(gStringVar1, arg1, STR_CONV_MODE_LEFT_ALIGN, 2);
+ StringAppend(gStringVar1, gOtherText_Times);
+ }
+ else
+ {
+ StringCopy(gStringVar1, gOtherText_99Times);
+ }
+
+ if (arg0 < 3600)
+ {
+ ConvertIntToDecimalStringN(gStringVar2, arg0 / 60, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ gStringVar2[2] = CHAR_DECIMAL_SEPARATOR;
+ ConvertIntToDecimalStringN(&gStringVar2[3], ((arg0 % 60) * 100) / 60, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringAppend(gStringVar2, gOtherText_Seconds);
+ }
+ else
+ {
+ StringCopy(gStringVar2, gOtherText_1Minute);
+ }
+
+ result = 0;
+ if (arg1 == 0)
+ {
+ result = 5;
+ }
+ else if (arg1 < 4)
+ {
+ result = 4;
+ }
+ else if (arg1 < 10)
+ {
+ result = 3;
+ }
+ else if (arg1 < 20)
+ {
+ result = 2;
+ }
+ else if (arg1 < 100)
+ {
+ result = 1;
+ }
+
+ if (arg0 / 60 <= 10)
+ {
+ result += 5;
+ }
+ else if (arg0 / 60 <= 15)
+ {
+ result += 4;
+ }
+ else if (arg0 / 60 <= 20)
+ {
+ result += 3;
+ }
+ else if (arg0 / 60 <= 40)
+ {
+ result += 2;
+ }
+ else if (arg0 / 60 < 60)
+ {
+ result += 1;
+ }
+
+
+ gScriptResult = result;
+}
+
+void FinishCyclingRoadChallenge(void) {
+ const u32 time = gMain.vblankCounter1 - gUnknown_02039254;
+
+ DetermineCyclingRoadResults(time, gUnknown_02039251);
+ RecordCyclingRoadResults(time, gUnknown_02039251);
+}
+
+static void RecordCyclingRoadResults(u32 arg0, u8 arg1) {
+ u16 high, low;
+ u32 record;
+
+ high = VarGet(0x4028);
+ low = VarGet(0x4029);
+ record = high + (low << 16);
+
+ if (record > arg0 || record == 0)
+ {
+ VarSet(0x4028, arg0);
+ VarSet(0x4029, arg0 >> 16);
+ VarSet(0x4027, arg1);
+ }
+}
+
+u16 GetRecordedCyclingRoadResults(void) {
+ u16 high, low;
+ u32 record;
+
+ high = VarGet(0x4028);
+ low = VarGet(0x4029);
+ record = high + (low << 16);
+
+ if (record == 0)
+ {
+ return FALSE;
+ }
+
+ DetermineCyclingRoadResults(record, VarGet(0x4027));
+ return TRUE;
+}
+
+void UpdateCyclingRoadState(void) {
+ if (gUnknown_020297F0.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE && gUnknown_020297F0.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE)
+ {
+ return;
+ }
+
+ if (VarGet(0x40a9) == 2 || VarGet(0x40a9) == 3)
+ {
+ VarSet(0x40a9, 0);
+ sav1_set_battle_music_maybe(SE_STOP);
+ }
+}
diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c
index 712bb8be9..d0ee712af 100644
--- a/src/fldeff_softboiled.c
+++ b/src/fldeff_softboiled.c
@@ -43,6 +43,13 @@ struct UnknownStruct3 {
s16 unk2E;
};
+#if ENGLISH
+#define WINDOW_LEFT 3
+#define WINDOW_RIGHT 26
+#elif GERMAN
+#define WINDOW_LEFT 0
+#define WINDOW_RIGHT 29
+#endif
#define EWRAM_1000 (*(struct UnknownStruct2 *)(unk_2000000 + 0x1000))
#define EWRAM_1B000 (*(struct UnknownStruct1 *)(unk_2000000 + 0x1B000))
@@ -141,7 +148,7 @@ static void sub_8133E74(u8 taskId) {
return;
}
- MenuZeroFillWindowRect(3, 14, 26, 19);
+ MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19);
sub_806D538(3, 0);
gTasks[taskId].func = sub_806CB74;
}
@@ -153,9 +160,6 @@ static void sub_8133EB8(u8 taskId) {
gTasks[taskId].func = sub_8133E74;
}
-#define WINDOW_LEFT 3
-#define WINDOW_RIGHT 26
-
static void sub_8133EF8(void) {
sub_806CCE4();
EWRAM_1B000.unk261 = 2;
diff --git a/src/intro.c b/src/intro.c
index a6b6b2734..ea6edba3d 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -310,6 +310,13 @@ static const union AnimCmd gSpriteAnim_840AF10[] =
ANIMCMD_FRAME(128, 8),
ANIMCMD_END,
};
+#if GERMAN
+static const union AnimCmd gSpriteAnim_8416DA4[] =
+{
+ ANIMCMD_FRAME(118, 8),
+ ANIMCMD_END,
+};
+#endif
static const union AnimCmd *const gSpriteAnimTable_840AF18[] =
{
gSpriteAnim_840AEA8,
@@ -328,6 +335,9 @@ static const union AnimCmd *const gSpriteAnimTable_840AF34[] =
gSpriteAnim_840AEF8,
gSpriteAnim_840AF00,
gSpriteAnim_840AF08,
+#if GERMAN
+ gSpriteAnim_8416DA4,
+#endif
};
static const union AnimCmd *const gSpriteAnimTable_840AF4C[] =
{
diff --git a/src/link.c b/src/link.c
index 783f6aecd..336616f1a 100644
--- a/src/link.c
+++ b/src/link.c
@@ -149,6 +149,11 @@ struct Link gLink;
u8 gLastRecvQueueCount;
u16 gLinkSavedIme;
+#ifdef GERMAN
+u8 deUnkValue1;
+u8 deUnkValue2;
+#endif
+
EWRAM_DATA bool8 gLinkTestDebugValuesEnabled = {0};
EWRAM_DATA bool8 gLinkTestDummyBool = {0};
EWRAM_DATA u32 gFiller_20238B8 = {0};
@@ -479,6 +484,9 @@ static void ProcessRecvCmds(u8 unusedParam)
memcpy(localLinkPlayerBlock.magic2, sMagic, sizeof(localLinkPlayerBlock.magic2) - 1);
InitBlockSend(&localLinkPlayerBlock, sizeof(localLinkPlayerBlock));
break;
+ case 0x4444:
+ word_3002910[i] = gRecvCmds[1][i];
+ break;
case 0x5555:
byte_3002A68 = 1;
break;
@@ -549,23 +557,28 @@ static void ProcessRecvCmds(u8 unusedParam)
sub_80516C4(i, gRecvCmds[1][i]);
break;
case 0xCCCC:
- {
- const u32 *addresses;
- const u32 *sizes;
- void *data;
- u16 size;
-
- addresses = sBlockRequestLookupTable;
- data = (void *)addresses[gRecvCmds[1][i] * 2];
-
- sizes = addresses + 1;
- size = sizes[gRecvCmds[1][i] * 2];
+#if defined(ENGLISH)
+ SendBlock(0, (void *)(sBlockRequestLookupTable)[gRecvCmds[1][i] * 2], (sBlockRequestLookupTable + 1)[gRecvCmds[1][i] * 2]);
+#elif defined(GERMAN)
+ if (deUnkValue2 == 1)
+ {
+ deUnkValue2 = 2;
+ deUnkValue1 = gRecvCmds[1][i];
+ }
+ else if (deUnkValue2 == 2 || deUnkValue2 == 3)
+ {
+ SendBlock(0, (void *)(sBlockRequestLookupTable)[gRecvCmds[1][i] * 2], (sBlockRequestLookupTable + 1)[gRecvCmds[1][i] * 2]);
- SendBlock(0, data, size);
- break;
- }
- case 0x4444:
- word_3002910[i] = gRecvCmds[1][i];
+ if (deUnkValue2 == 2)
+ deUnkValue2 = 1;
+ else
+ deUnkValue2 = 0;
+ }
+ else
+ {
+ SendBlock(0, (void *)(sBlockRequestLookupTable)[gRecvCmds[1][i] * 2], (sBlockRequestLookupTable + 1)[gRecvCmds[1][i] * 2]);
+ }
+#endif
break;
case 0xCAFE:
word_3002910[i] = gRecvCmds[1][i];
@@ -676,6 +689,9 @@ void OpenLinkTimed(void)
{
sPlayerDataExchangeStatus = EXCHANGE_NOT_STARTED;
gLinkTimeOutCounter = 0;
+#if defined(GERMAN)
+ ResetBlockSend();
+#endif
OpenLink();
}
diff --git a/src/mail.c b/src/mail.c
index a0a47e98f..1bd4e73dc 100644
--- a/src/mail.c
+++ b/src/mail.c
@@ -31,10 +31,10 @@ struct MailLayout
struct Unk2000000
{
/* 0x00*/ u8 words[8][27];
- /* 0xEC*/ u8 varD8[20];
+ /* 0xD8*/ u8 varD8[20];
/* 0xEC*/ MainCallback varEC;
/* 0xF0*/ MainCallback varF0;
- /* 0xFF*/ struct MailStruct *varF4;
+ /* 0xF4*/ struct MailStruct *varF4;
/* 0xF8*/ u8 varF8;
/* 0xF9*/ u8 varF9;
/* 0xFA*/ u8 varFA;
@@ -61,7 +61,9 @@ struct MailGraphics
u16 color12;
};
-extern struct Unk2000000 unk_2000000;
+extern u8 ewram[];
+#define ewram0 (*(struct Unk2000000 *)(ewram))
+
extern struct MailGraphics gMailGraphicsTable[];
extern u16 gUnknown_083E562C[][2];
@@ -71,8 +73,7 @@ extern struct MailLayout gUnknown_083E57A4[];
extern u8 gOtherText_From[];
static u8 sub_80F8A28(void);
-// static void sub_80F8D50(void);
-// static u8 *sub_80F8D7C(u8 *dest, u8 *src);
+static void sub_80F8D50(void);
static void sub_80F8DA0(void);
static void sub_80F8E80(void);
static void sub_80F8F18(void);
@@ -81,222 +82,69 @@ static void sub_80F8F58(void);
static void sub_80F8F78(void);
static void sub_80F8FB4(void);
-#ifdef NONMATCHING
void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2)
{
u16 mailDesign;
u8 buffer[4];
- u8 local1;
-
- unk_2000000.varFF = GAME_LANGUAGE;
- // Compiler uses [sub 1], while asm uses [ptr + FE]
- unk_2000000.varFE = 1;
- unk_2000000.var104 = (MainCallback)sub_80EB3FC;
- unk_2000000.var108 = (MainCallback)ConvertEasyChatWordsToString;
+ ewram0.varFF = GAME_LANGUAGE;
+ ewram0.var100 = 1;
+ ewram0.var104 = (MainCallback)sub_80EB3FC;
+ ewram0.var108 = (MainCallback)ConvertEasyChatWordsToString;
mailDesign = arg0->itemId - ITEM_ORANGE_MAIL;
if (mailDesign <= 11)
{
- unk_2000000.varFA = arg0->itemId - ITEM_ORANGE_MAIL;
+ ewram0.varFA = arg0->itemId - ITEM_ORANGE_MAIL;
}
else
{
- unk_2000000.varFA = 0;
+ ewram0.varFA = 0;
arg2 = FALSE;
}
- switch (unk_2000000.var100)
+ switch (ewram0.var100)
{
case 0:
default:
- unk_2000000.var10C = &gUnknown_083E5730[unk_2000000.varFA];
+ ewram0.var10C = &gUnknown_083E5730[ewram0.varFA];
break;
case 1:
- unk_2000000.var10C = &gUnknown_083E57A4[unk_2000000.varFA];
+ ewram0.var10C = &gUnknown_083E57A4[ewram0.varFA];
break;
}
if (((sub_80A2D64(arg0->species, buffer) << 16) + 0xFFFF0000) <= (410 << 16))
{
- switch (unk_2000000.varFA)
+ switch (ewram0.varFA)
{
case 6:
- unk_2000000.varFB = 1;
+ ewram0.varFB = 1;
break;
case 9:
- unk_2000000.varFB = 2;
+ ewram0.varFB = 2;
break;
default:
- unk_2000000.varFB = 0;
+ ewram0.varFB = 0;
break;
}
}
else
{
- unk_2000000.varFB = 0;
+ ewram0.varFB = 0;
}
- unk_2000000.varF4 = arg0;
- unk_2000000.varEC = arg1;
- unk_2000000.varF8 = arg2;
+ ewram0.varF4 = arg0;
+ ewram0.varEC = arg1;
+ ewram0.varF8 = arg2;
SetMainCallback2(sub_80F8D50);
}
-#else
-__attribute__((naked))
-void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- sub sp, 0x4\n\
- adds r4, r0, 0\n\
- adds r6, r1, 0\n\
- lsls r2, 24\n\
- lsrs r5, r2, 24\n\
- ldr r2, _080F8958 @ =0x02000000\n\
- adds r1, r2, 0\n\
- adds r1, 0xFF\n\
- movs r0, 0x2\n\
- strb r0, [r1]\n\
- adds r0, 0xFE\n\
- adds r1, r2, r0\n\
- movs r0, 0x1\n\
- strb r0, [r1]\n\
- movs r0, 0x82\n\
- lsls r0, 1\n\
- adds r1, r2, r0\n\
- ldr r0, _080F895C @ =sub_80EB3FC\n\
- str r0, [r1]\n\
- movs r0, 0x84\n\
- lsls r0, 1\n\
- adds r1, r2, r0\n\
- ldr r0, _080F8960 @ =ConvertEasyChatWordsToString\n\
- str r0, [r1]\n\
- ldrh r1, [r4, 0x20]\n\
- adds r0, r1, 0\n\
- subs r0, 0x79\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0xB\n\
- bhi _080F8964\n\
- subs r1, 0x79\n\
- adds r0, r2, 0\n\
- adds r0, 0xFA\n\
- strb r1, [r0]\n\
- b _080F896E\n\
- .align 2, 0\n\
-_080F8958: .4byte 0x02000000\n\
-_080F895C: .4byte sub_80EB3FC\n\
-_080F8960: .4byte ConvertEasyChatWordsToString\n\
-_080F8964:\n\
- adds r1, r2, 0\n\
- adds r1, 0xFA\n\
- movs r0, 0\n\
- strb r0, [r1]\n\
- movs r5, 0\n\
-_080F896E:\n\
- ldr r1, _080F8994 @ =0x02000000\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- adds r0, r1, r2\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _080F8980\n\
- cmp r0, 0x1\n\
- beq _080F899C\n\
-_080F8980:\n\
- movs r0, 0x86\n\
- lsls r0, 1\n\
- adds r2, r1, r0\n\
- adds r0, r1, 0\n\
- adds r0, 0xFA\n\
- ldrb r0, [r0]\n\
- lsls r0, 3\n\
- ldr r1, _080F8998 @ =gUnknown_083E5730\n\
- b _080F89AC\n\
- .align 2, 0\n\
-_080F8994: .4byte 0x02000000\n\
-_080F8998: .4byte gUnknown_083E5730\n\
-_080F899C:\n\
- movs r0, 0x86\n\
- lsls r0, 1\n\
- adds r2, r1, r0\n\
- adds r0, r1, 0\n\
- adds r0, 0xFA\n\
- ldrb r0, [r0]\n\
- lsls r0, 3\n\
- ldr r1, _080F89DC @ =gUnknown_083E57A4\n\
-_080F89AC:\n\
- adds r0, r1\n\
- str r0, [r2]\n\
- ldrh r0, [r4, 0x1E]\n\
- mov r1, sp\n\
- bl sub_80A2D64\n\
- lsls r0, 16\n\
- ldr r1, _080F89E0 @ =0xffff0000\n\
- adds r0, r1\n\
- movs r1, 0xCD\n\
- lsls r1, 17\n\
- cmp r0, r1\n\
- bhi _080F89F8\n\
- ldr r0, _080F89E4 @ =0x02000000\n\
- adds r1, r0, 0\n\
- adds r1, 0xFA\n\
- ldrb r2, [r1]\n\
- adds r1, r0, 0\n\
- cmp r2, 0x6\n\
- beq _080F89E8\n\
- cmp r2, 0x9\n\
- beq _080F89F0\n\
- b _080F89FA\n\
- .align 2, 0\n\
-_080F89DC: .4byte gUnknown_083E57A4\n\
-_080F89E0: .4byte 0xffff0000\n\
-_080F89E4: .4byte 0x02000000\n\
-_080F89E8:\n\
- adds r2, r1, 0\n\
- adds r2, 0xFB\n\
- movs r0, 0x1\n\
- b _080F8A00\n\
-_080F89F0:\n\
- adds r2, r1, 0\n\
- adds r2, 0xFB\n\
- movs r0, 0x2\n\
- b _080F8A00\n\
-_080F89F8:\n\
- ldr r1, _080F8A20 @ =0x02000000\n\
-_080F89FA:\n\
- adds r2, r1, 0\n\
- adds r2, 0xFB\n\
- movs r0, 0\n\
-_080F8A00:\n\
- strb r0, [r2]\n\
- adds r0, r1, 0\n\
- adds r0, 0xF4\n\
- str r4, [r0]\n\
- subs r0, 0x8\n\
- str r6, [r0]\n\
- adds r0, 0xC\n\
- strb r5, [r0]\n\
- ldr r0, _080F8A24 @ =sub_80F8D50\n\
- bl SetMainCallback2\n\
- add sp, 0x4\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080F8A20: .4byte 0x02000000\n\
-_080F8A24: .4byte sub_80F8D50\n\
- .syntax divided\n");
-}
-
-#endif
#define RETURN_UP_STATE break
#define RETURN_SKIP_STATE return FALSE
@@ -363,31 +211,31 @@ static u8 sub_80F8A28(void)
RETURN_UP_STATE;
case 11:
- LoadPalette(gMailGraphicsTable[unk_2000000.varFA].palette, 0, 16 * 2);
+ LoadPalette(gMailGraphicsTable[ewram0.varFA].palette, 0, 16 * 2);
RETURN_UP_STATE;
case 12:
- LZ77UnCompVram(gMailGraphicsTable[unk_2000000.varFA].tileMap, (void *)(VRAM + 0x4000));
+ LZ77UnCompVram(gMailGraphicsTable[ewram0.varFA].tileMap, (void *)(VRAM + 0x4000));
RETURN_UP_STATE;
case 13:
- LZ77UnCompVram(gMailGraphicsTable[unk_2000000.varFA].tiles, (void *)(VRAM));
+ LZ77UnCompVram(gMailGraphicsTable[ewram0.varFA].tiles, (void *)(VRAM));
- gPlttBufferUnfaded[241] = gMailGraphicsTable[unk_2000000.varFA].color10;
- gPlttBufferUnfaded[248] = gMailGraphicsTable[unk_2000000.varFA].color12;
+ gPlttBufferUnfaded[241] = gMailGraphicsTable[ewram0.varFA].color10;
+ gPlttBufferUnfaded[248] = gMailGraphicsTable[ewram0.varFA].color12;
gPlttBufferUnfaded[10] = gUnknown_083E562C[gSaveBlock2.playerGender][0];
gPlttBufferUnfaded[11] = gUnknown_083E562C[gSaveBlock2.playerGender][1];
RETURN_UP_STATE;
case 14:
- if (unk_2000000.varF8 != 0)
+ if (ewram0.varF8 != 0)
{
sub_80F8DA0();
}
RETURN_UP_STATE;
case 15:
- if (unk_2000000.varF8 != 0)
+ if (ewram0.varF8 != 0)
{
sub_80F8E80();
}
@@ -400,18 +248,18 @@ static u8 sub_80F8A28(void)
{
u16 local1;
- local1 = sub_809D4A8(unk_2000000.varF4->species);
+ local1 = sub_809D4A8(ewram0.varF4->species);
- switch (unk_2000000.varFB)
+ switch (ewram0.varFB)
{
case 1:
sub_809D580(local1);
- unk_2000000.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 96, 128, 0);
+ ewram0.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 96, 128, 0);
break;
case 2:
sub_809D580(local1);
- unk_2000000.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 40, 128, 0);
+ ewram0.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 40, 128, 0);
break;
}
RETURN_UP_STATE;
@@ -432,7 +280,7 @@ static u8 sub_80F8A28(void)
REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
BeginNormalPaletteFade(-1, 0, 16, 0, 0);
gPaletteFade.bufferTransferDisabled = 0;
- unk_2000000.varF0 = sub_80F8F58;
+ ewram0.varF0 = sub_80F8F58;
return TRUE;
default:
@@ -443,7 +291,7 @@ static u8 sub_80F8A28(void)
return FALSE;
}
-void sub_80F8D50(void)
+static void sub_80F8D50(void)
{
do
{
@@ -455,7 +303,7 @@ void sub_80F8D50(void)
} while (sub_80F9344() != 1);
}
-u8 *sub_80F8D7C(u8 *dest, u8 *src)
+static u8 *sub_80F8D7C(u8 *dest, u8 *src)
{
u16 length;
@@ -467,163 +315,33 @@ u8 *sub_80F8D7C(u8 *dest, u8 *src)
return dest + length;
}
-#ifdef NONMATCHING
static void sub_80F8DA0(void)
{
- u8 local0;
-
- local0 = unk_2000000.var10C->var0;
+ u16 i;
+ u8 r6;
+ u8 *ptr;
- // No idea what's happening in this loop.
- if (local0 <= 0)
+ r6 = 0;
+ for (i = 0; i < ewram0.var10C->var0; i++)
{
- u8 i;
- u8 i2 = 0;
-
- for (i = 0; i < unk_2000000.var10C->var0; i++)
- {
- ConvertEasyChatWordsToString(unk_2000000.words[i], &unk_2000000.varF4->words[i2],
- ((*unk_2000000.var10C->var4)[i] << 28) >> 30, 1);
- i2 += ((*unk_2000000.var10C->var4)[i] << 28) >> 30;
- }
+ ConvertEasyChatWordsToString(ewram0.words[i], &ewram0.varF4->words[r6], ewram0.var10C->var4[i].unk_0_2, 1);
+ r6 += ewram0.var10C->var4[i].unk_0_2;
}
-
- if (unk_2000000.var100 == 0)
+ ptr = ewram0.varD8;
+ if (ewram0.var100 == 0)
{
- u8 *ptr;
- u16 length;
-
- ptr = sub_80F8D7C(unk_2000000.varD8, unk_2000000.varF4->playerName);
+ ptr = sub_80F8D7C(ptr, ewram0.varF4->playerName);
StringCopy(ptr, gOtherText_From);
+ ewram0.varF9 = ewram0.var10C->var2 - StringLength(ewram0.varD8);
- length = StringLength(unk_2000000.varD8);
-
- unk_2000000.varF9 = unk_2000000.var10C->var2 - length;
}
else
{
- u8 *ptr;
-
- ptr = StringCopy(unk_2000000.varD8, gOtherText_From);
- sub_80F8D7C(ptr, unk_2000000.varF4->playerName);
-
- unk_2000000.varF9 = unk_2000000.var10C->var2;
+ ptr = StringCopy(ptr, gOtherText_From);
+ sub_80F8D7C(ptr, ewram0.varF4->playerName);
+ ewram0.varF9 = ewram0.var10C->var2;
}
}
-#else
-__attribute__((naked))
-static void sub_80F8DA0(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- movs r6, 0\n\
- movs r5, 0\n\
- ldr r2, _080F8E3C @ =0x02000000\n\
- movs r0, 0x86\n\
- lsls r0, 1\n\
- adds r1, r2, r0\n\
- ldr r0, [r1]\n\
- ldrb r0, [r0]\n\
- cmp r5, r0\n\
- bcs _080F8E04\n\
- mov r8, r2\n\
- adds r7, r1, 0\n\
-_080F8DBE:\n\
- lsls r0, r5, 3\n\
- subs r0, r5\n\
- lsls r0, 2\n\
- subs r0, r5\n\
- add r0, r8\n\
- mov r1, r8\n\
- adds r1, 0xF4\n\
- lsls r2, r6, 1\n\
- ldr r1, [r1]\n\
- adds r1, r2\n\
- ldr r2, [r7]\n\
- ldr r2, [r2, 0x4]\n\
- lsls r4, r5, 2\n\
- adds r2, r4, r2\n\
- ldr r2, [r2]\n\
- lsls r2, 28\n\
- lsrs r2, 30\n\
- movs r3, 0x1\n\
- bl ConvertEasyChatWordsToString\n\
- ldr r1, [r7]\n\
- ldr r0, [r1, 0x4]\n\
- adds r4, r0\n\
- ldr r0, [r4]\n\
- lsls r0, 28\n\
- lsrs r0, 30\n\
- adds r0, r6, r0\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- ldrb r1, [r1]\n\
- cmp r5, r1\n\
- bcc _080F8DBE\n\
-_080F8E04:\n\
- ldr r2, _080F8E40 @ =0x020000d8\n\
- adds r4, r2, 0\n\
- subs r4, 0xD8\n\
- adds r0, r2, 0\n\
- adds r0, 0x28\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _080F8E48\n\
- ldr r1, [r2, 0x1C]\n\
- adds r1, 0x12\n\
- adds r0, r2, 0\n\
- bl sub_80F8D7C\n\
- adds r2, r0, 0\n\
- ldr r1, _080F8E44 @ =gOtherText_From\n\
- bl StringCopy\n\
- ldr r0, _080F8E40 @ =0x020000d8\n\
- bl StringLength\n\
- movs r2, 0x86\n\
- lsls r2, 1\n\
- adds r1, r4, r2\n\
- ldr r1, [r1]\n\
- ldrb r1, [r1, 0x2]\n\
- subs r1, r0\n\
- b _080F8E6A\n\
- .align 2, 0\n\
-_080F8E3C: .4byte 0x02000000\n\
-_080F8E40: .4byte 0x020000d8\n\
-_080F8E44: .4byte gOtherText_From\n\
-_080F8E48:\n\
- ldr r1, _080F8E7C @ =gOtherText_From\n\
- adds r0, r2, 0\n\
- bl StringCopy\n\
- adds r2, r0, 0\n\
- adds r0, r4, 0\n\
- adds r0, 0xF4\n\
- ldr r1, [r0]\n\
- adds r1, 0x12\n\
- adds r0, r2, 0\n\
- bl sub_80F8D7C\n\
- movs r1, 0x86\n\
- lsls r1, 1\n\
- adds r0, r4, r1\n\
- ldr r0, [r0]\n\
- ldrb r1, [r0, 0x2]\n\
-_080F8E6A:\n\
- adds r0, r4, 0\n\
- adds r0, 0xF9\n\
- strb r1, [r0]\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080F8E7C: .4byte gOtherText_From\n\
- .syntax divided\n");
-}
-#endif
static void sub_80F8E80(void)
{
@@ -631,25 +349,25 @@ static void sub_80F8E80(void)
u8 x;
u8 y = 0;
- for (pos = 0; pos < unk_2000000.var10C->var0; pos++)
+ for (pos = 0; pos < ewram0.var10C->var0; pos++)
{
- if (unk_2000000.words[pos][0] == 0xFF)
+ if (ewram0.words[pos][0] == 0xFF)
{
continue;
}
- if (unk_2000000.words[pos][0] == 0x00)
+ if (ewram0.words[pos][0] == 0x00)
{
continue;
}
- x = unk_2000000.var10C->var4[pos].unk_0_4;
- y += unk_2000000.var10C->var4[pos].unk_0_0;
- MenuPrint(unk_2000000.words[pos], unk_2000000.var10C->var3_4 + x, unk_2000000.var10C->var3_0 + y);
+ x = ewram0.var10C->var4[pos].unk_0_4;
+ y += ewram0.var10C->var4[pos].unk_0_0;
+ MenuPrint(ewram0.words[pos], ewram0.var10C->var3_4 + x, ewram0.var10C->var3_0 + y);
y += 2;
}
- MenuPrint(unk_2000000.varD8, unk_2000000.varF9, unk_2000000.var10C->var1);
+ MenuPrint(ewram0.varD8, ewram0.varF9, ewram0.var10C->var1);
}
static void sub_80F8F18(void)
@@ -661,13 +379,13 @@ static void sub_80F8F18(void)
static void sub_80F8F2C(void)
{
- if (unk_2000000.varFB != 0)
+ if (ewram0.varFB != 0)
{
AnimateSprites();
BuildOamBuffer();
}
- unk_2000000.varF0();
+ ewram0.varF0();
}
static void sub_80F8F58(void)
@@ -677,7 +395,7 @@ static void sub_80F8F58(void)
local0 = UpdatePaletteFade();
if (local0 == 0)
{
- unk_2000000.varF0 = sub_80F8F78;
+ ewram0.varF0 = sub_80F8F78;
}
}
@@ -686,7 +404,7 @@ static void sub_80F8F78(void)
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
- unk_2000000.varF0 = sub_80F8FB4;
+ ewram0.varF0 = sub_80F8FB4;
}
}
@@ -699,18 +417,18 @@ static void sub_80F8FB4(void)
return;
}
- SetMainCallback2(unk_2000000.varEC);
- switch (unk_2000000.varFB)
+ SetMainCallback2(ewram0.varEC);
+ switch (ewram0.varFB)
{
case 2:
case 1:
- local1 = sub_809D4A8(unk_2000000.varF4->species);
+ local1 = sub_809D4A8(ewram0.varF4->species);
sub_809D608(local1);
- sub_809D510(&gSprites[unk_2000000.varFC]);
+ sub_809D510(&gSprites[ewram0.varFC]);
break;
}
- memset(&unk_2000000, 0, 0x110);
+ memset(&ewram0, 0, 0x110);
ResetPaletteFade();
}
diff --git a/src/mail_data.c b/src/mail_data.c
new file mode 100644
index 000000000..f83484346
--- /dev/null
+++ b/src/mail_data.c
@@ -0,0 +1,207 @@
+#include "global.h"
+#include "items.h"
+#include "name_string_util.h"
+#include "pokemon.h"
+#include "species.h"
+#include "text.h"
+
+void sub_80A2B40(struct MailStruct *);
+u16 sub_80A2D44(u16, u32);
+bool8 itemid_is_mail(u16);
+u16 sub_809D474(u32);
+
+void sub_80A2B18(void)
+{
+ u8 i;
+
+ for (i = 0; i < 16; i++)
+ sub_80A2B40(&gSaveBlock1.mail[i]);
+}
+
+void sub_80A2B40(struct MailStruct *mail)
+{
+ int i;
+
+ for (i = 0; i < 9; i++)
+ mail->words[i] = -1;
+
+ for (i = 0; i < 8; i++)
+ mail->playerName[i] = -1;
+
+ for (i = 0; i < 4; i++)
+ mail->trainerId[i] = 0;
+
+ mail->species = 1;
+ mail->itemId = 0;
+}
+
+bool8 sub_80A2B94(struct Pokemon *mon)
+{
+ u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM);
+ if (itemid_is_mail(heldItem) && GetMonData(mon, MON_DATA_MAIL) != 0xFF)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+u8 sub_80A2BC4(struct Pokemon *mon, u16 itemId)
+{
+ u16 _itemId;
+ u8 heldItem[2];
+ u8 id;
+ u8 i;
+ u16 species;
+ u32 personality;
+
+ _itemId = itemId;
+ heldItem[0] = _itemId;
+ heldItem[1] = _itemId >> 8;
+ id = 0;
+
+ while (id < 6)
+ {
+ if (gSaveBlock1.mail[id].itemId == 0)
+ {
+ for (i = 0; i < 9; i++)
+ gSaveBlock1.mail[id].words[i] = -1;
+
+ for (i = 0; i < 7; i++)
+ gSaveBlock1.mail[id].playerName[i] = gSaveBlock2.playerName[i];
+ gSaveBlock1.mail[id].playerName[i] = EOS;
+ PadNameString(gSaveBlock1.mail[id].playerName, 0);
+
+ for (i = 0; i < 4; i++)
+ gSaveBlock1.mail[id].trainerId[i] = gSaveBlock2.playerTrainerId[i];
+
+ species = GetBoxMonData(&mon->box, MON_DATA_SPECIES);
+ personality = GetBoxMonData(&mon->box, MON_DATA_PERSONALITY);
+ gSaveBlock1.mail[id].species = sub_80A2D44(species, personality);
+ gSaveBlock1.mail[id].itemId = _itemId;
+ SetMonData(mon, MON_DATA_MAIL, &id);
+ SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
+ return id;
+ }
+ id++;
+ }
+
+ return -1;
+}
+
+u16 sub_80A2D44(u16 species, u32 personality)
+{
+ if (species != SPECIES_UNOWN)
+ return species;
+ return ((sub_809D474(personality) << 16) + (30000 << 16)) >> 16;
+}
+
+u16 sub_80A2D64(u16 a1, u16 *a2)
+{
+ u16 result;
+
+ if (a1 >= 30000 && a1 < (30000 + UNOWN_FORM_COUNT))
+ {
+ result = SPECIES_UNOWN;
+ *a2 = a1 - 30000;
+ }
+ else
+ {
+ result = a1;
+ }
+
+ return result;
+}
+
+u8 sub_80A2D88(struct Pokemon *mon, struct MailStruct *mail)
+{
+ u8 heldItem[2];
+ u16 itemId = mail->itemId;
+ u8 mailId = sub_80A2BC4(mon, itemId);
+
+ if (mailId == 0xFF)
+ return 0xFF;
+
+ gSaveBlock1.mail[mailId] = *mail;
+
+ SetMonData(mon, MON_DATA_MAIL, &mailId);
+
+ heldItem[0] = itemId;
+ heldItem[1] = itemId >> 8;
+
+ SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
+
+ return mailId;
+}
+
+int unref_sub_80A2DF4(void)
+{
+ return 0;
+}
+
+void sub_80A2DF8(struct Pokemon *mon)
+{
+ u8 heldItem[2];
+ u8 mailId;
+
+ if (sub_80A2B94(mon))
+ {
+ mailId = GetMonData(mon, MON_DATA_MAIL);
+ gSaveBlock1.mail[mailId].itemId = 0;
+ mailId = 0xFF;
+ heldItem[0] = 0;
+ heldItem[1] = 0;
+ SetMonData(mon, MON_DATA_MAIL, &mailId);
+ SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
+ }
+}
+
+void unref_sub_80A2E58(u8 mailId)
+{
+ gSaveBlock1.mail[mailId].itemId = 0;
+}
+
+u8 sub_80A2E78(struct Pokemon *mon)
+{
+ u8 i;
+ u8 newHeldItem[2];
+ u8 newMailId;
+
+ newHeldItem[0] = 0;
+ newHeldItem[1] = 0;
+ newMailId = 0xFF;
+
+ for (i = 6; i < 16; i++)
+ {
+ if (gSaveBlock1.mail[i].itemId == 0)
+ {
+ memcpy(&gSaveBlock1.mail[i], &gSaveBlock1.mail[GetMonData(mon, MON_DATA_MAIL)], sizeof(struct MailStruct));
+ gSaveBlock1.mail[GetMonData(mon, MON_DATA_MAIL)].itemId = 0;
+ SetMonData(mon, MON_DATA_MAIL, &newMailId);
+ SetMonData(mon, MON_DATA_HELD_ITEM, newHeldItem);
+ return i;
+ }
+ }
+
+ return 0xFF;
+}
+
+bool8 itemid_is_mail(u16 itemId)
+{
+ switch (itemId)
+ {
+ case ITEM_ORANGE_MAIL:
+ case ITEM_HARBOR_MAIL:
+ case ITEM_GLITTER_MAIL:
+ case ITEM_MECH_MAIL:
+ case ITEM_WOOD_MAIL:
+ case ITEM_WAVE_MAIL:
+ case ITEM_BEAD_MAIL:
+ case ITEM_SHADOW_MAIL:
+ case ITEM_TROPIC_MAIL:
+ case ITEM_DREAM_MAIL:
+ case ITEM_FAB_MAIL:
+ case ITEM_RETRO_MAIL:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
diff --git a/src/main.c b/src/main.c
index 3275c817e..114fc171f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -31,9 +31,13 @@ static void IntrDummy(void);
const u8 gGameVersion = GAME_VERSION;
-const u8 gGameLanguage = GAME_LANGUAGE; // English
+const u8 gGameLanguage = GAME_LANGUAGE;
+#if defined(ENGLISH)
const char BuildDateTime[] = "2002 10 15 20:34";
+#elif defined(GERMAN)
+const char BuildDateTime[] = "$Name: debug-Euro-2003-05-09-A $";
+#endif
const IntrFunc gIntrTableTemplate[] =
{
diff --git a/src/main_menu.c b/src/main_menu.c
index 284fbac52..294d33620 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -692,10 +692,17 @@ void PrintPlayTime(void)
u8 playTime[16];
u8 alignedPlayTime[32];
+#if defined(ENGLISH)
MenuPrint(gMainMenuString_Time, 16, 3);
FormatPlayTime(playTime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1);
sub_8072C74(alignedPlayTime, playTime, 48, 1);
MenuPrint(alignedPlayTime, 22, 3);
+#elif defined(GERMAN)
+ MenuPrint_PixelCoords(gMainMenuString_Time, 124, 24, TRUE);
+ FormatPlayTime(playTime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1);
+ sub_8072C74(alignedPlayTime, playTime, 40, 1);
+ MenuPrint(alignedPlayTime, 23, 3);
+#endif
}
void PrintPokedexCount(void)
@@ -711,7 +718,11 @@ void PrintBadgeCount(void)
{
u8 buffer[16];
+#if defined(ENGLISH)
MenuPrint(gMainMenuString_Badges, 16, 5);
+#elif defined(GERMAN)
+ MenuPrint_PixelCoords(gMainMenuString_Badges, 124, 40, TRUE);
+#endif
ConvertIntToDecimalString(buffer, GetBadgeCount());
MenuPrint_PixelCoords(buffer, 205, 40, 1);
}
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index 25651702d..11dadf380 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -121,109 +121,54 @@ void sub_80F7B40(void)
oldMan->oldMan1.unk_2DBD = 1;
}
-// too mathy
-__attribute__((naked))
void sub_80F7BA0(void)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- ldr r1, _080F7C48 @ =gSaveBlock1 + 0x2D94\n\
- ldr r0, _080F7C4C @ =gSpecialVar_0x8004\n\
- ldrh r0, [r0]\n\
- adds r5, r1, 0\n\
- adds r5, 0xE\n\
- cmp r0, 0\n\
- bne _080F7BB2\n\
- adds r5, r1, 0x2\n\
-_080F7BB2:\n\
- ldr r2, _080F7C50 @ =gStringVar4\n\
- adds r4, r2, 0\n\
- movs r6, 0\n\
-_080F7BB8:\n\
- ldrh r1, [r5]\n\
- adds r5, 0x2\n\
- adds r0, r2, 0\n\
- bl sub_80EB3FC\n\
- adds r2, r0, 0\n\
- adds r7, r6, 0x1\n\
- cmp r2, r4\n\
- beq _080F7BDA\n\
- movs r1, 0x37\n\
-_080F7BCC:\n\
- ldrb r0, [r4]\n\
- cmp r0, 0\n\
- bne _080F7BD4\n\
- strb r1, [r4]\n\
-_080F7BD4:\n\
- adds r4, 0x1\n\
- cmp r2, r4\n\
- bne _080F7BCC\n\
-_080F7BDA:\n\
- adds r4, 0x1\n\
- movs r0, 0\n\
- strb r0, [r2]\n\
- adds r2, 0x1\n\
- ldrh r1, [r5]\n\
- adds r5, 0x2\n\
- adds r0, r2, 0\n\
- bl sub_80EB3FC\n\
- adds r2, r0, 0\n\
- cmp r2, r4\n\
- beq _080F7C02\n\
- movs r1, 0x37\n\
-_080F7BF4:\n\
- ldrb r0, [r4]\n\
- cmp r0, 0\n\
- bne _080F7BFC\n\
- strb r1, [r4]\n\
-_080F7BFC:\n\
- adds r4, 0x1\n\
- cmp r2, r4\n\
- bne _080F7BF4\n\
-_080F7C02:\n\
- adds r4, 0x1\n\
- movs r0, 0xFE\n\
- strb r0, [r2]\n\
- adds r2, 0x1\n\
- ldrh r1, [r5]\n\
- adds r5, 0x2\n\
- adds r0, r2, 0\n\
- bl sub_80EB3FC\n\
- adds r2, r0, 0\n\
- cmp r2, r4\n\
- beq _080F7C2A\n\
- movs r1, 0x37\n\
-_080F7C1C:\n\
- ldrb r0, [r4]\n\
- cmp r0, 0\n\
- bne _080F7C24\n\
- strb r1, [r4]\n\
-_080F7C24:\n\
- adds r4, 0x1\n\
- cmp r2, r4\n\
- bne _080F7C1C\n\
-_080F7C2A:\n\
- cmp r6, 0\n\
- bne _080F7C3A\n\
- movs r0, 0xFC\n\
- strb r0, [r2]\n\
- adds r2, 0x1\n\
- movs r0, 0xF\n\
- strb r0, [r2]\n\
- adds r2, 0x1\n\
-_080F7C3A:\n\
- lsls r0, r7, 16\n\
- lsrs r6, r0, 16\n\
- cmp r6, 0x1\n\
- bls _080F7BB8\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080F7C48: .4byte gSaveBlock1 + 0x2D94\n\
-_080F7C4C: .4byte gSpecialVar_0x8004\n\
-_080F7C50: .4byte gStringVar4\n\
- .syntax divided");
+ struct UnkMauvilleOldManStruct *oldMan = &gSaveBlock1.oldMan.oldMan1;
+ u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match.
+ u16 *r5;
+ u16 i;
+ u8 *ptr;
+ u8 *r4;
+
+ r5 = oldMan->mauvilleOldMan_ecArray2;
+ if (specialVar == 0)
+ r5 = oldMan->mauvilleOldMan_ecArray;
+ ptr = gStringVar4;
+ r4 = ptr;
+ for (i = 0; i < 2; i++)
+ {
+ ptr = sub_80EB3FC(ptr, *(r5++));
+ while (ptr != r4)
+ {
+ if (*r4 == 0)
+ *r4 = 0x37;
+ r4++;
+ }
+ r4++;
+ *(ptr++) = 0;
+ ptr = sub_80EB3FC(ptr, *(r5++));
+ while (ptr != r4)
+ {
+ if (*r4 == 0)
+ *r4 = 0x37;
+ r4++;
+ }
+ r4++;
+ *(ptr++) = 0xFE;
+ ptr = sub_80EB3FC(ptr, *(r5++));
+ while (ptr != r4)
+ {
+ if (*r4 == 0)
+ *r4 = 0x37;
+ r4++;
+ }
+ //_080F7C2A
+ if (i == 0)
+ {
+ *(ptr++) = EXT_CTRL_CODE_BEGIN;
+ *(ptr++) = 0xF;
+ }
+ }
}
void sub_80F7C54(void)
@@ -276,131 +221,32 @@ void sub_80F7CC8(void)
gScriptResult = TRUE;
}
-// someone fix this
-#ifdef NONMATCHING
void sub_80F7CF4(void)
{
- u8 *stringPtr;
- OldMan *oldMan = &gSaveBlock1.oldMan;
+ struct UnkMauvilleOldManStruct2 *oldMan = &gSaveBlock1.oldMan.oldMan2;
- if(oldMan->oldMan2.unk1 == 0)
+ if(oldMan->unk1 == 0)
sub_80F7DC0();
- if(oldMan->oldMan2.mauvilleOldMan_ecArray[oldMan->oldMan2.unk1] != 0xFFFF) // is not the last element of the array?
+ if(oldMan->mauvilleOldMan_ecArray[oldMan->unk1] != 0xFFFF) // is not the last element of the array?
{
- u16 random = 7 % Random(); // this is a little bit closer, but the compiler prefers an AND instead of division. i assume its because the compiler wants to avoid division by zero, however using an & causes this order to not be close anymore.
- sub_80EB3FC(gStringVar4, oldMan->oldMan2.mauvilleOldMan_ecArray[oldMan->oldMan2.unk1]);
- stringPtr = StringCopy(gStringVar4, gOtherText_Is);
+ u8 *stringPtr;
+ u32 random = Random();
+
+ random %= 8;
+ stringPtr = sub_80EB3FC(gStringVar4, oldMan->mauvilleOldMan_ecArray[oldMan->unk1]);
+ stringPtr = StringCopy(stringPtr, gOtherText_Is);
stringPtr = StringCopy(stringPtr, (u8 *)gUnknown_083E5388[random]);
StringCopy(stringPtr, gOtherText_DontYouAgree);
}
else
{
- StringCopy(gStringVar4, (u8 *)gUnknown_083E53A8[oldMan->oldMan2.mauvilleOldMan_ecArray2[oldMan->oldMan2.unk2++]]);
+ StringCopy(gStringVar4, (u8 *)gUnknown_083E53A8[oldMan->mauvilleOldMan_ecArray2[oldMan->unk2++]]);
}
if(!(Random() % 10))
- oldMan->oldMan2.unk1 = 10;
+ oldMan->unk1 = 10;
else
- oldMan->oldMan2.unk1++;
+ oldMan->unk1++;
gScriptResult = TRUE;
}
-#else
-__attribute__((naked))
-void sub_80F7CF4(void)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- ldr r5, _080F7D50 @ =gSaveBlock1 + 0x2D94\n\
- ldrb r0, [r5, 0x1]\n\
- cmp r0, 0\n\
- bne _080F7D02\n\
- bl sub_80F7DC0\n\
-_080F7D02:\n\
- ldrb r0, [r5, 0x1]\n\
- lsls r0, 1\n\
- adds r6, r5, 0x4\n\
- adds r0, r6\n\
- ldrh r1, [r0]\n\
- ldr r0, _080F7D54 @ =0x0000ffff\n\
- cmp r1, r0\n\
- beq _080F7D68\n\
- bl Random\n\
- adds r4, r0, 0\n\
- lsls r4, 16\n\
- lsrs r4, 16\n\
- movs r0, 0x7\n\
- ands r4, r0\n\
- ldr r0, _080F7D58 @ =gStringVar4\n\
- ldrb r1, [r5, 0x1]\n\
- lsls r1, 1\n\
- adds r1, r6\n\
- ldrh r1, [r1]\n\
- bl sub_80EB3FC\n\
- adds r2, r0, 0\n\
- ldr r1, _080F7D5C @ =gOtherText_Is\n\
- bl StringCopy\n\
- adds r2, r0, 0\n\
- ldr r0, _080F7D60 @ =gUnknown_083E5388\n\
- lsls r4, 2\n\
- adds r4, r0\n\
- ldr r1, [r4]\n\
- adds r0, r2, 0\n\
- bl StringCopy\n\
- adds r2, r0, 0\n\
- ldr r1, _080F7D64 @ =gOtherText_DontYouAgree\n\
- bl StringCopy\n\
- b _080F7D88\n\
- .align 2, 0\n\
-_080F7D50: .4byte gSaveBlock1 + 0x2D94\n\
-_080F7D54: .4byte 0x0000ffff\n\
-_080F7D58: .4byte gStringVar4\n\
-_080F7D5C: .4byte gOtherText_Is\n\
-_080F7D60: .4byte gUnknown_083E5388\n\
-_080F7D64: .4byte gOtherText_DontYouAgree\n\
-_080F7D68:\n\
- ldr r0, _080F7DA0 @ =gStringVar4\n\
- ldr r3, _080F7DA4 @ =gUnknown_083E53A8\n\
- ldrb r1, [r5, 0x2]\n\
- adds r2, r1, 0x1\n\
- strb r2, [r5, 0x2]\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- adds r2, r5, 0\n\
- adds r2, 0x18\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- lsls r1, 2\n\
- adds r1, r3\n\
- ldr r1, [r1]\n\
- bl StringCopy\n\
-_080F7D88:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _080F7DA8\n\
- movs r0, 0xA\n\
- b _080F7DAC\n\
- .align 2, 0\n\
-_080F7DA0: .4byte gStringVar4\n\
-_080F7DA4: .4byte gUnknown_083E53A8\n\
-_080F7DA8:\n\
- ldrb r0, [r5, 0x1]\n\
- adds r0, 0x1\n\
-_080F7DAC:\n\
- strb r0, [r5, 0x1]\n\
- ldr r1, _080F7DBC @ =gScriptResult\n\
- movs r0, 0x1\n\
- strh r0, [r1]\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080F7DBC: .4byte gScriptResult\n\
- .syntax divided");
-}
-#endif
diff --git a/src/money.c b/src/money.c
index e73ee506a..de0730951 100644
--- a/src/money.c
+++ b/src/money.c
@@ -138,10 +138,12 @@ void sub_80B7AEC(u32 arg0, u8 left, u8 top)
MenuPrint_RightAligned(buffer, left, top);
+#ifdef ENGLISH
ptr[0] = 0xFC;
ptr[1] = 0x14;
ptr[2] = 0x00;
ptr[3] = 0xFF;
+#endif
}
__attribute__((naked))
diff --git a/src/new_game.c b/src/new_game.c
index e058280af..3b93d37cc 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -9,6 +9,7 @@
#include "pokedex.h"
#include "pokemon_size_record.h"
#include "rng.h"
+#include "roamer.h"
#include "rom4.h"
#include "rtc.h"
#include "script.h"
@@ -135,8 +136,8 @@ void NewGameInitData(void)
gPlayerPartyCount = 0;
ZeroPlayerPartyMons();
sub_80961D8();
- sub_81341F8();
- sub_813420C();
+ ClearRoamerData();
+ ClearRoamerLocationData();
gSaveBlock1.registeredItem = 0;
sub_80A3714();
NewGameInitPCItems();
diff --git a/src/pokedex.c b/src/pokedex.c
index a5dcfe049..3ef1de51e 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -51,15 +51,6 @@ struct PokedexEntry
/*0x20*/ u16 trainerOffset;
}; /*size = 0x24*/
-struct CryRelatedStruct
-{
- u16 unk0;
- u8 unk2;
- u8 unk3;
- u8 unk4;
- u8 unk5;
-};
-
extern struct MusicPlayerInfo gMPlay_BGM;
extern u8 gReservedSpritePaletteCount;
extern struct PokedexView *gPokedexView;
@@ -124,13 +115,6 @@ u16 NationalPokedexNumToSpecies(u16);
// asm/pokedex_area_screen
void ShowPokedexAreaScreen(u16 species, u8 *string);
-// asm/pokedex_cry_screen
-u8 sub_8119E3C(struct CryRelatedStruct *, u8);
-void sub_8119F88(u8 a);
-void sub_811A050(u16 species);
-u8 ShowPokedexCryScreen(struct CryRelatedStruct *, u8);
-void DestroyCryMeterNeedleSprite();
-
void sub_808C02C(void)
{
u16 i;
@@ -2526,9 +2510,9 @@ void Task_InitCryScreenMultistep(u8 taskId)
sp8.unk0 = 0x4020;
sp8.unk2 = 0x1F;
- sp8.unk3 = 8;
- sp8.unk5 = 0x1E;
- sp8.unk4 = 0xC;
+ sp8.paletteNo = 8;
+ sp8.yPos = 0x1E;
+ sp8.xPos = 0xC;
if (sub_8119E3C(&sp8, 0) != 0)
{
gMain.state++;
@@ -2542,9 +2526,9 @@ void Task_InitCryScreenMultistep(u8 taskId)
sp10.unk0 = 0x3000;
sp10.unk2 = 0xE;
- sp10.unk3 = 9;
- sp10.unk4 = 0x12;
- sp10.unk5 = 3;
+ sp10.paletteNo = 9;
+ sp10.xPos = 0x12;
+ sp10.yPos = 3;
if (ShowPokedexCryScreen(&sp10, 1) != 0)
{
gMain.state++;
diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c
new file mode 100644
index 000000000..53807befc
--- /dev/null
+++ b/src/pokedex_cry_screen.c
@@ -0,0 +1,85 @@
+#include "global.h"
+#include "asm.h"
+#include "palette.h"
+#include "sprite.h"
+
+struct Unk201C800 {
+ u8 unk_0;
+ u8 unk_1;
+ u8 unk_2;
+ u8 filler_3;
+ u16 unk_4;
+};
+
+#define EWRAM_1C800 (*(struct Unk201C800 *)(unk_201C000 + 0x800))
+
+extern u8 unk_201C000[];
+
+extern u8 gUnknown_03005E98;
+
+// data/pokedex_cry_screen.o
+extern const u16 gUnknown_083FAE7C[];
+extern const u16 gUnknown_083FAF1C[];
+extern const u8 gUnknown_083FAF3C[];
+extern struct SpriteTemplate gSpriteTemplate_83FB774;
+extern const struct SpriteSheet gCryMeterNeedleSpriteSheets[];
+extern const struct SpritePalette gCryMeterNeedleSpritePalettes[];
+
+#if ENGLISH
+#define CRY_METER_MAP_WIDTH 10
+#elif GERMAN
+#define CRY_METER_MAP_WIDTH 32
+#endif
+
+u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) {
+ int returnVal = FALSE;
+
+ switch (gUnknown_03005E98)
+ {
+ case 0:
+ LZ77UnCompVram(gUnknown_083FAF3C, (void *) (VRAM + cry->unk0));
+ LoadPalette(&gUnknown_083FAF1C, cry->paletteNo * 16, 0x20);
+ gUnknown_03005E98 += 1;
+ break;
+
+ case 1:
+ {
+ void *vram;
+ u8 row, col;
+ u32 r12;
+ int x, y;
+
+ vram = (void *) BG_SCREEN_ADDR(cry->unk2);
+
+ r12 = (u32) (cry->unk0 << 18) >> 23;
+
+ for (row = 0; row < 8; row++)
+ {
+ for (col = 0; col < 10; col++)
+ {
+ y = row + cry->yPos;
+ x = col + cry->xPos;
+ *(u16 *) (vram + (y * 64 + x * 2)) = (gUnknown_083FAE7C[row * CRY_METER_MAP_WIDTH + col] | (cry->paletteNo << 12)) + r12;
+ }
+ }
+
+ gUnknown_03005E98 += 1;
+ break;
+ }
+
+ case 2:
+ {
+ LoadSpriteSheets(gCryMeterNeedleSpriteSheets);
+ LoadSpritePalettes(gCryMeterNeedleSpritePalettes);
+ EWRAM_1C800.unk_4 = CreateSprite(&gSpriteTemplate_83FB774, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1);
+ EWRAM_1C800.unk_0 = 0x20;
+ EWRAM_1C800.unk_1 = 0x20;
+ EWRAM_1C800.unk_2 = 0;
+
+ returnVal = TRUE;
+ break;
+ }
+ }
+
+ return returnVal;
+}
diff --git a/src/pokemon_1.c b/src/pokemon_1.c
index 1c11449c3..204fa7b9a 100644
--- a/src/pokemon_1.c
+++ b/src/pokemon_1.c
@@ -51,7 +51,7 @@ void ZeroMonData(struct Pokemon *mon)
SetMonData(mon, MON_DATA_SPATK, (u8 *)&arg);
SetMonData(mon, MON_DATA_SPDEF, (u8 *)&arg);
arg = 255;
- SetMonData(mon, MON_DATA_64, (u8 *)&arg);
+ SetMonData(mon, MON_DATA_MAIL, (u8 *)&arg);
}
void ZeroPlayerPartyMons(void)
@@ -75,7 +75,7 @@ void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFix
CreateBoxMon(&mon->box, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId);
SetMonData(mon, MON_DATA_LEVEL, &level);
arg = 255;
- SetMonData(mon, MON_DATA_64, (u8 *)&arg);
+ SetMonData(mon, MON_DATA_MAIL, (u8 *)&arg);
CalculateMonStats(mon);
}
@@ -478,7 +478,7 @@ void sub_803B4B4(struct Pokemon *src, struct Pokemon *dest)
SetMonData(dest, MON_DATA_HP, (u8 *)&value);
SetMonData(dest, MON_DATA_MAX_HP, (u8 *)&value);
value = 255;
- SetMonData(dest, MON_DATA_64, (u8 *)&value);
+ SetMonData(dest, MON_DATA_MAIL, (u8 *)&value);
CalculateMonStats(dest);
}
diff --git a/src/pokemon_2.c b/src/pokemon_2.c
index 9030fe096..3be11f453 100644
--- a/src/pokemon_2.c
+++ b/src/pokemon_2.c
@@ -383,8 +383,8 @@ u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data)
return mon->spAttack;
case MON_DATA_SPDEF:
return mon->spDefense;
- case MON_DATA_64:
- return mon->pokerus;
+ case MON_DATA_MAIL:
+ return mon->mail;
default:
return GetBoxMonData(&mon->box, field, data);
}
@@ -761,8 +761,8 @@ void SetMonData(struct Pokemon *mon, s32 field, const u8 *data)
case MON_DATA_SPDEF:
SET16(mon->spDefense);
break;
- case MON_DATA_64:
- SET8(mon->pokerus);
+ case MON_DATA_MAIL:
+ SET8(mon->mail);
break;
case MON_DATA_SPECIES2:
break;
@@ -1079,7 +1079,7 @@ u8 SendMonToPC(struct Pokemon *mon)
{
if (GetBoxMonData(&gPokemonStorage.boxes[i][j], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
{
- sub_8040B1C(mon);
+ MonRestorePP(mon);
CopyMon(&gPokemonStorage.boxes[i][j], &mon->box, sizeof(mon->box));
return 1;
}
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index 5f186292f..270a52ad5 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -1,12 +1,19 @@
#include "global.h"
#include "asm.h"
+#include "battle.h"
#include "event_data.h"
+#include "hold_effects.h"
#include "item.h"
#include "items.h"
+#include "link.h"
#include "main.h"
+#include "m4a.h"
#include "pokemon.h"
#include "rng.h"
+#include "rom4.h"
#include "rtc.h"
+#include "songs.h"
+#include "sound.h"
#include "species.h"
#include "sprite.h"
#include "string_util.h"
@@ -40,7 +47,11 @@ struct EvolutionData
struct Evolution evolutions[5];
};
-extern void get_battle_strings_(u8 *);
+struct SpindaSpot
+{
+ u8 x, y;
+ u16 image[16];
+};
extern u8 gPlayerPartyCount;
extern struct Pokemon gPlayerParty[6];
@@ -62,6 +73,29 @@ extern u8 gPlayerMonIndex;
extern u8 gEnemyMonIndex;
extern u8 gUnknown_02024C0B;
extern u8 gUnknown_02024E6C;
+extern struct SpindaSpot gSpindaSpotGraphics[];
+extern void *gUnknown_081FAF4C[];
+extern u8 gSpeciesNames[][11];
+extern struct Trainer gTrainers[];
+extern s8 gNatureStatTable[][5];
+extern s8 gUnknown_082082FE[][3];
+extern u16 gTrainerBattleOpponent;
+extern u16 gBattleTypeFlags;
+extern struct BaseStats gBaseStats[];
+extern u32 gBitTable[];
+extern u32 gExperienceTables[8][101];
+extern u32 gTMHMLearnsets[][2];
+extern const u16 *gLevelUpLearnsets[];
+extern u8 gBattleMonForms[];
+extern const u8 BattleText_Wally[];
+extern const struct SpritePalette gMonPaletteTable[];
+extern const struct SpritePalette gMonShinyPaletteTable[];
+extern const u16 gHMMoves[];
+extern s8 gUnknown_083F7E28[];
+extern u8 byte_2024C06;
+extern const u8 BattleText_PreventedSwitch[];
+extern u16 gUnknown_02024A6A[];
+extern u8 gJapaneseNidoranNames[][11];
extern u8 gUnknown_082082F8[];
extern u8 gUnknown_083FFDB3[];
@@ -70,6 +104,8 @@ extern u8 gUnknown_083FEE5D[];
extern u8 gUnknown_083FEE92[];
extern u8 *gUnknown_08400F58[];
+u8 CheckPartyHasHadPokerus(struct Pokemon *, u8);
+
bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId)
{
u32 status = GetMonData(mon, MON_DATA_STATUS, 0);
@@ -476,3 +512,920 @@ u32 SpeciesToCryId(u16 species)
return gSpeciesIdToCryId[species - 276];
}
+
+void unref_sub_803F938(u16 species, u32 personality, u8 *dest)
+{
+ if (species == SPECIES_SPINDA && dest != gUnknown_081FAF4C[0] && dest != gUnknown_081FAF4C[2])
+ {
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ int j;
+ u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
+ u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
+
+ for (j = 0; j < 16; j++)
+ {
+ int k;
+ s32 row = gSpindaSpotGraphics[i].image[j];
+
+ for (k = x; k < x + 16; k++)
+ {
+ u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
+
+ if (row & 1)
+ {
+ if (k & 1)
+ {
+ if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
+ *val += 0x40;
+ }
+ else
+ {
+ if ((u8)((*val & 0xF) - 0x01) <= 0x02)
+ *val += 0x04;
+ }
+ }
+
+ row >>= 1;
+ }
+
+ y++;
+ }
+
+ personality >>= 8;
+ }
+ }
+}
+
+void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4)
+{
+ if (species == SPECIES_SPINDA && a4)
+ {
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ int j;
+ u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
+ u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
+
+ for (j = 0; j < 16; j++)
+ {
+ int k;
+ s32 row = gSpindaSpotGraphics[i].image[j];
+
+ for (k = x; k < x + 16; k++)
+ {
+ u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
+
+ if (row & 1)
+ {
+ if (k & 1)
+ {
+ if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
+ *val += 0x40;
+ }
+ else
+ {
+ if ((u8)((*val & 0xF) - 0x01) <= 0x02)
+ *val += 0x04;
+ }
+ }
+
+ row >>= 1;
+ }
+
+ y++;
+ }
+
+ personality >>= 8;
+ }
+ }
+}
+
+void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
+{
+#ifdef BUGFIX_EVO_NAME
+ u8 language;
+ GetMonData(mon, MON_DATA_NICKNAME, gStringVar1);
+ language = GetMonData(mon, MON_DATA_LANGUAGE, &language);
+ if (language == GAME_LANGUAGE && !StringCompareWithoutExtCtrlCodes(gSpeciesNames[oldSpecies], gStringVar1))
+ SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]);
+#else
+ GetMonData(mon, MON_DATA_NICKNAME, gStringVar1);
+ if (!StringCompareWithoutExtCtrlCodes(gSpeciesNames[oldSpecies], gStringVar1))
+ SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]);
+#endif
+}
+
+bool8 sub_803FBBC(void)
+{
+ bool8 retVal = FALSE;
+ switch (gLinkPlayers[GetMultiplayerId()].lp_field_18)
+ {
+ case 0:
+ case 3:
+ retVal = FALSE;
+ break;
+ case 1:
+ case 2:
+ retVal = TRUE;
+ break;
+ }
+ return retVal;
+}
+
+bool8 sub_803FBFC(u8 id)
+{
+ bool8 retVal = FALSE;
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ retVal = FALSE;
+ break;
+ case 1:
+ case 2:
+ retVal = TRUE;
+ break;
+ }
+ return retVal;
+}
+
+s32 sub_803FC34(u16 a1)
+{
+ s32 id;
+ for (id = 0; id < MAX_LINK_PLAYERS; id++)
+ if (gLinkPlayers[id].lp_field_18 == a1)
+ break;
+ return id;
+}
+
+u8 sub_803FC58(u16 trainer)
+{
+ return gTrainers[trainer].encounterMusic_gender & 0x7F;
+}
+
+u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex)
+{
+ if (statIndex < 1 || statIndex > 5)
+ {
+ // should just be "return n", but it wouldn't match without this
+ u16 retVal = n;
+ retVal++;
+ retVal--;
+ return retVal;
+ }
+
+ switch (gNatureStatTable[nature][statIndex - 1])
+ {
+ case 1:
+ return (u16)(n * 110) / 100;
+ case -1:
+ return (u16)(n * 90) / 100;
+ }
+
+ return n;
+}
+
+void AdjustFriendship(struct Pokemon *mon, u8 event)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
+ u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
+ u8 holdEffect;
+
+ if (heldItem == ITEM_ENIGMA_BERRY)
+ {
+ if (gMain.inBattle)
+ {
+ holdEffect = gEnigmaBerries[0].holdEffect;
+ }
+ else
+ {
+ holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
+ }
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(heldItem);
+ }
+
+ if (species && species != SPECIES_EGG)
+ {
+ u8 friendshipLevel = 0;
+ s16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
+ if (friendship > 99)
+ friendshipLevel++;
+ if (friendship > 199)
+ friendshipLevel++;
+ if ((event != 5 || !(Random() & 1))
+ && (event != 3
+ || ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ && (gTrainers[gTrainerBattleOpponent].trainerClass == 24
+ || gTrainers[gTrainerBattleOpponent].trainerClass == 25
+ || gTrainers[gTrainerBattleOpponent].trainerClass == 32))))
+ {
+ s8 mod = gUnknown_082082FE[event][friendshipLevel];
+ if (mod > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ mod = (150 * mod) / 100;
+ friendship += mod;
+ if (mod > 0)
+ {
+ if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL)
+ friendship++;
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == sav1_map_get_name())
+ friendship++;
+ }
+ if (friendship < 0)
+ friendship = 0;
+ if (friendship > 255)
+ friendship = 255;
+ SetMonData(mon, MON_DATA_FRIENDSHIP, (u8 *)&friendship);
+ }
+ }
+}
+
+void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
+{
+ u8 evs[NUM_STATS];
+ u16 evIncrease = 0;
+ u16 totalEVs = 0;
+ u16 heldItem;
+ u8 holdEffect;
+ int i;
+
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ evs[i] = GetMonData(mon, MON_DATA_HP_EV + i, 0);
+ totalEVs += evs[i];
+ }
+
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ u8 hasHadPokerus;
+ int multiplier;
+
+ if (totalEVs >= MAX_TOTAL_EVS)
+ break;
+
+ hasHadPokerus = CheckPartyHasHadPokerus(mon, 0);
+
+ if (hasHadPokerus)
+ multiplier = 2;
+ else
+ multiplier = 1;
+
+ switch (i)
+ {
+ case 0:
+ evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier;
+ break;
+ case 1:
+ evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier;
+ break;
+ case 2:
+ evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier;
+ break;
+ case 3:
+ evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier;
+ break;
+ case 4:
+ evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier;
+ break;
+ case 5:
+ evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier;
+ break;
+ }
+
+ heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
+
+ if (heldItem == ITEM_ENIGMA_BERRY)
+ {
+ if (gMain.inBattle)
+ {
+ holdEffect = gEnigmaBerries[0].holdEffect;
+ }
+ else
+ {
+ holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
+ }
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(heldItem);
+ }
+
+ if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
+ evIncrease *= 2;
+
+ if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS)
+ evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease);
+
+ if (evs[i] + (s16)evIncrease > 255)
+ {
+ int val1 = (s16)evIncrease + 255;
+ int val2 = evs[i] + evIncrease;
+ evIncrease = val1 - val2;
+ }
+
+ evs[i] += evIncrease;
+ totalEVs += evIncrease;
+ SetMonData(mon, MON_DATA_HP_EV + i, &evs[i]);
+ }
+}
+
+u16 GetMonEVCount(struct Pokemon *mon)
+{
+ int i;
+ u16 count = 0;
+
+ for (i = 0; i < NUM_STATS; i++)
+ count += GetMonData(mon, MON_DATA_HP_EV + i, 0);
+
+ return count;
+}
+
+void RandomlyGivePartyPokerus(struct Pokemon *party)
+{
+ u16 rnd = Random();
+ if (rnd == 0x4000 || rnd == 0x8000 || rnd == 0xC000)
+ {
+ struct Pokemon *mon;
+
+ do
+ {
+ do
+ {
+ rnd = Random() % PARTY_SIZE;
+ mon = &party[rnd];
+ }
+ while (!GetMonData(mon, MON_DATA_SPECIES, 0));
+ }
+ while (GetMonData(mon, MON_DATA_IS_EGG, 0));
+
+ if (!(CheckPartyHasHadPokerus(party, gBitTable[rnd])))
+ {
+ u8 rnd2;
+
+ do
+ {
+ rnd2 = Random();
+ }
+ while (rnd2 == 0);
+
+ if (rnd2 & 0xF0)
+ rnd2 &= 0x07;
+
+ rnd2 |= (rnd2 << 4);
+ rnd2 &= 0xF3;
+ rnd2++;
+
+ SetMonData(&party[rnd], MON_DATA_POKERUS, &rnd2);
+ }
+ }
+}
+
+u8 CheckPartyPokerus(struct Pokemon *party, u8 selection)
+{
+ u8 retVal;
+
+ int partyIndex = 0;
+ unsigned curBit = 1;
+ retVal = 0;
+
+ if (selection)
+ {
+ do
+ {
+ if ((selection & 1) && (GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0) & 0xF))
+ retVal |= curBit;
+ partyIndex++;
+ curBit <<= 1;
+ selection >>= 1;
+ }
+ while (selection);
+ }
+ else if (GetMonData(&party[0], MON_DATA_POKERUS, 0) & 0xF)
+ {
+ retVal = 1;
+ }
+
+ return retVal;
+}
+
+u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection)
+{
+ u8 retVal;
+
+ int partyIndex = 0;
+ unsigned curBit = 1;
+ retVal = 0;
+
+ if (selection)
+ {
+ do
+ {
+ if ((selection & 1) && GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0))
+ retVal |= curBit;
+ partyIndex++;
+ curBit <<= 1;
+ selection >>= 1;
+ }
+ while (selection);
+ }
+ else if (GetMonData(&party[0], MON_DATA_POKERUS, 0))
+ {
+ retVal = 1;
+ }
+
+ return retVal;
+}
+
+void UpdatePartyPokerusTime(u16 days)
+{
+ int i;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, 0))
+ {
+ u8 pokerus = GetMonData(&gPlayerParty[i], MON_DATA_POKERUS, 0);
+ if (pokerus & 0xF)
+ {
+ if ((pokerus & 0xF) < days || days > 4)
+ pokerus &= 0xF0;
+ else
+ pokerus -= days;
+
+ SetMonData(&gPlayerParty[i], MON_DATA_POKERUS, &pokerus);
+ }
+ }
+ }
+}
+
+void PartySpreadPokerus(struct Pokemon *party)
+{
+ if ((Random() % 3) == 0)
+ {
+ int i;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&party[i], MON_DATA_SPECIES, 0))
+ {
+ u8 pokerus = GetMonData(&party[i], MON_DATA_POKERUS, 0);
+ u8 curPokerus = pokerus;
+ if (pokerus)
+ {
+ if (pokerus & 0xF)
+ {
+ // spread to adjacent party members
+ if (i != 0 && !(GetMonData(&party[i - 1], MON_DATA_POKERUS, 0) & 0xF0))
+ SetMonData(&party[i - 1], MON_DATA_POKERUS, &curPokerus);
+ if (i != (PARTY_SIZE - 1) && !(GetMonData(&party[i + 1], MON_DATA_POKERUS, 0) & 0xF0))
+ {
+ SetMonData(&party[i + 1], MON_DATA_POKERUS, &curPokerus);
+ i++;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+bool8 TryIncrementMonLevel(struct Pokemon *mon)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
+ u8 nextLevel = GetMonData(mon, MON_DATA_LEVEL, 0) + 1;
+ if (GetMonData(mon, MON_DATA_EXP, 0) > gExperienceTables[gBaseStats[species].growthRate][nextLevel])
+ {
+ SetMonData(mon, MON_DATA_LEVEL, &nextLevel);
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
+ if (species == SPECIES_EGG)
+ {
+ return 0;
+ }
+ else if (tm < 32)
+ {
+ u32 mask = 1 << tm;
+ return gTMHMLearnsets[species][0] & mask;
+ }
+ else
+ {
+ u32 mask = 1 << (tm - 32);
+ return gTMHMLearnsets[species][1] & mask;
+ }
+}
+
+u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves)
+{
+ u16 learnedMoves[4];
+ u8 numMoves = 0;
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
+ int i, j, k;
+
+ for (i = 0; i < 4; i++)
+ learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
+
+ for (i = 0; i < 20; i++)
+ {
+ u16 moveLevel;
+
+ if (gLevelUpLearnsets[species][i] == 0xFFFF)
+ break;
+
+ moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
+
+ if (moveLevel <= (level << 9))
+ {
+ for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
+ ;
+
+ if (j == 4)
+ {
+ for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
+ ;
+
+ if (k == numMoves)
+ moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
+ }
+ }
+ }
+
+ return numMoves;
+}
+
+u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves)
+{
+ u8 numMoves = 0;
+ int i;
+
+ for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != 0xFFFF; i++)
+ moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
+
+ return numMoves;
+}
+
+u8 sub_8040574(struct Pokemon *mon)
+{
+ u16 learnedMoves[4];
+ u16 moves[20];
+ u8 numMoves = 0;
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
+ int i, j, k;
+
+ if (species == SPECIES_EGG)
+ return 0;
+
+ for (i = 0; i < 4; i++)
+ learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
+
+ for (i = 0; i < 20; i++)
+ {
+ u16 moveLevel;
+
+ if (gLevelUpLearnsets[species][i] == 0xFFFF)
+ break;
+
+ moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
+
+ if (moveLevel <= (level << 9))
+ {
+ for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
+ ;
+
+ if (j == 4)
+ {
+ for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
+ ;
+
+ if (k == numMoves)
+ moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
+ }
+ }
+ }
+
+ return numMoves;
+}
+
+u16 SpeciesToPokedexNum(u16 species)
+{
+ if (IsNationalPokedexEnabled())
+ {
+ return SpeciesToNationalPokedexNum(species);
+ }
+ else
+ {
+ species = SpeciesToHoennPokedexNum(species);
+ if (species <= 202)
+ return species;
+ return 0xFFFF;
+ }
+}
+
+void ClearBattleMonForms(void)
+{
+ int i;
+ for (i = 0; i < 4; i++)
+ gBattleMonForms[i] = 0;
+}
+
+u16 sub_8040728(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
+ return BGM_BATTLE34;
+ if (gBattleTypeFlags & BATTLE_TYPE_REGI)
+ return BGM_BATTLE36;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ return BGM_BATTLE20;
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ switch (gTrainers[gTrainerBattleOpponent].trainerClass)
+ {
+ case 2:
+ case 0x31:
+ return BGM_BATTLE30;
+ case 3:
+ case 4:
+ case 0x32:
+ case 0x33:
+ return BGM_BATTLE31;
+ case 0x19:
+ return BGM_BATTLE32;
+ case 0x20:
+ return BGM_BATTLE33;
+ case 0x2E:
+ if (!StringCompare(gTrainers[gTrainerBattleOpponent].trainerName, BattleText_Wally))
+ return BGM_BATTLE20;
+ return BGM_BATTLE35;
+ case 0x18:
+ return BGM_BATTLE38;
+ default:
+ return BGM_BATTLE20;
+ }
+ }
+ return BGM_BATTLE27;
+}
+
+void sub_80408BC(void)
+{
+ ResetMapMusic();
+ m4aMPlayAllStop();
+ PlayBGM(sub_8040728());
+}
+
+void current_map_music_set__default_for_battle(u16 song)
+{
+ ResetMapMusic();
+ m4aMPlayAllStop();
+ if (song)
+ PlayNewMapMusic(song);
+ else
+ PlayNewMapMusic(sub_8040728());
+}
+
+const u16 *species_and_otid_get_pal(u16, u32, u32);
+
+const u16 *pokemon_get_pal(struct Pokemon *mon)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
+ u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
+ u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
+ return species_and_otid_get_pal(species, otId, personality);
+}
+
+//Extracts the upper 16 bits of a 32-bit number
+#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
+
+//Extracts the lower 16 bits of a 32-bit number
+#define LOHALF(n) ((n) & 0xFFFF)
+
+const u16 *species_and_otid_get_pal(u16 species, u32 otId , u32 personality)
+{
+ u32 shinyValue;
+
+ if (species > SPECIES_EGG)
+ return gMonPaletteTable[0].data;
+
+ shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
+ if (shinyValue < 8)
+ return gMonShinyPaletteTable[species].data;
+ else
+ return gMonPaletteTable[species].data;
+}
+
+const struct SpritePalette *sub_80409C8(u16, u32, u32);
+
+const struct SpritePalette *sub_8040990(struct Pokemon *mon)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
+ u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
+ u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
+ return sub_80409C8(species, otId, personality);
+}
+
+const struct SpritePalette *sub_80409C8(u16 species, u32 otId , u32 personality)
+{
+ u32 shinyValue;
+
+ shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
+ if (shinyValue < 8)
+ return &gMonShinyPaletteTable[species];
+ else
+ return &gMonPaletteTable[species];
+}
+
+bool8 IsHMMove2(u16 move)
+{
+ int i = 0;
+ while (gHMMoves[i] != 0xFFFF)
+ {
+ if (gHMMoves[i++] == move)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_8040A3C(u16 species)
+{
+ return gBaseStats[species].bodyColor >> 7; // XXX: should this be a bitfield instead?
+}
+
+s8 sub_8040A54(struct Pokemon *mon, u8 a2)
+{
+ u8 nature = GetNature(mon);
+ return gUnknown_083F7E28[nature * 5 + a2];
+}
+
+s8 sub_8040A7C(u32 personality, u8 a2)
+{
+ u8 nature = GetNatureFromPersonality(personality);
+ return gUnknown_083F7E28[nature * 5 + a2];
+}
+
+bool8 IsOtherTrainer(u32, u8 *);
+
+bool8 IsTradedMon(struct Pokemon *mon)
+{
+ u8 otName[8];
+ u32 otId;
+ GetMonData(mon, MON_DATA_OT_NAME, otName);
+ otId = GetMonData(mon, MON_DATA_OT_ID, 0);
+ return IsOtherTrainer(otId, otName);
+}
+
+bool8 IsOtherTrainer(u32 otId, u8 *otName)
+{
+ if (otId == (gSaveBlock2.playerTrainerId[0] | (gSaveBlock2.playerTrainerId[1] << 8) | (gSaveBlock2.playerTrainerId[2] << 16) | (gSaveBlock2.playerTrainerId[3] << 24)))
+ {
+ int i;
+
+ for (i = 0; otName[i] != EOS; i++)
+ if (otName[i] != gSaveBlock2.playerName[i])
+ return TRUE;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void BoxMonRestorePP(struct BoxPokemon *);
+
+void MonRestorePP(struct Pokemon *mon)
+{
+ BoxMonRestorePP(&mon->box);
+}
+
+void BoxMonRestorePP(struct BoxPokemon *boxMon)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0))
+ {
+ u16 move = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0);
+ u16 bonus = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, 0);
+ u8 pp = CalculatePPWithBonus(move, bonus, i);
+ SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp);
+ }
+ }
+}
+
+void sub_8040B8C(void)
+{
+ byte_2024C06 = BATTLE_STRUCT->filler1_2[0x37];
+ gUnknown_030041C0[0] = 0xFD;
+ gUnknown_030041C0[1] = 4;
+ gUnknown_030041C0[2] = BATTLE_STRUCT->filler1[0x34];
+ gUnknown_030041C0[4] = EOS;
+ if (!battle_side_get_owner(BATTLE_STRUCT->filler1[0x34]))
+ gUnknown_030041C0[3] = pokemon_order_func(gUnknown_02024A6A[BATTLE_STRUCT->filler1[0x34]]);
+ else
+ gUnknown_030041C0[3] = gUnknown_02024A6A[BATTLE_STRUCT->filler1[0x34]];
+ gUnknown_03004290[0] = 0xFD;
+ gUnknown_03004290[1] = 4;
+ gUnknown_03004290[2] = gUnknown_02024E6C;
+ gUnknown_03004290[3] = pokemon_order_func(gUnknown_02024A6A[gUnknown_02024E6C]);
+ gUnknown_03004290[4] = EOS;
+ sub_8120FFC(BattleText_PreventedSwitch, gStringVar4);
+}
+
+void SetWildMonHeldItem(void)
+{
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER)))
+ {
+ u16 rnd = Random() % 100;
+ u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0);
+ if (gBaseStats[species].item1 == gBaseStats[species].item2)
+ {
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item1);
+ return;
+ }
+
+ if (rnd > 44)
+ {
+ if (rnd <= 94)
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item1);
+ else
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item2);
+ }
+ }
+}
+
+bool8 IsShinyOtIdPersonality(u32, u32);
+
+bool8 IsShiny(struct Pokemon *mon)
+{
+ u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
+ u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
+ return IsShinyOtIdPersonality(otId, personality);
+}
+
+bool8 IsShinyOtIdPersonality(u32 otId, u32 personality)
+{
+ bool8 retVal = FALSE;
+ u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
+ if (shinyValue < 8)
+ retVal = TRUE;
+ return retVal;
+}
+
+u8 *sub_8040D08(void)
+{
+ u8 id = GetMultiplayerId();
+ return gLinkPlayers[sub_803FC34(gLinkPlayers[id].lp_field_18 ^ 2)].name;
+}
+
+bool32 sub_8040D3C(u16 species, u8 *name, u8 language)
+{
+ bool32 retVal = FALSE;
+ if (species == SPECIES_NIDORAN_M || species == SPECIES_NIDORAN_F)
+ {
+ u8 *speciesName;
+ if (language == GAME_LANGUAGE)
+ {
+ speciesName = gSpeciesNames[species];
+ }
+ else
+ {
+ if (species == SPECIES_NIDORAN_M)
+ speciesName = gJapaneseNidoranNames[0];
+ else
+ speciesName = gJapaneseNidoranNames[1];
+ }
+ if (!StringCompareWithoutExtCtrlCodes(name, speciesName))
+ retVal = TRUE;
+ else
+ retVal = FALSE;
+ }
+ return retVal;
+}
+
+bool32 sub_8040D8C(u16 species, u8 *name)
+{
+ u8 language = GAME_LANGUAGE;
+ if (name[0] == 0xFC && name[1] == 21)
+ language = LANGUAGE_JAPANESE;
+ return sub_8040D3C(species, name, language);
+}
+
+bool32 unref_sub_8040DAC(struct Pokemon *mon)
+{
+ u8 name[12];
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
+ u8 language = GetMonData(mon, MON_DATA_LANGUAGE, 0);
+ GetMonData(mon, MON_DATA_NICKNAME, name);
+ return sub_8040D3C(species, name, language);
+}
diff --git a/src/roamer.c b/src/roamer.c
new file mode 100644
index 000000000..394f81c75
--- /dev/null
+++ b/src/roamer.c
@@ -0,0 +1,226 @@
+#include "global.h"
+#include "pokemon.h"
+#include "rng.h"
+#include "roamer.h"
+#include "species.h"
+
+#ifdef SAPPHIRE
+#define ROAMER_SPECIES SPECIES_LATIAS
+#else
+#define ROAMER_SPECIES SPECIES_LATIOS
+#endif
+
+enum
+{
+ MAP_GRP = 0, // map group
+ MAP_NUM = 1, // map number
+};
+
+EWRAM_DATA static u8 sLocationHistory[3][2] = {0};
+EWRAM_DATA static u8 sRoamerLocation[2] = {0};
+
+static const u8 sRoamerLocations[][6] =
+{
+ { 0x19, 0x1A, 0x20, 0x21, 0x31, 0xFF },
+ { 0x1A, 0x19, 0x20, 0x21, 0xFF, 0xFF },
+ { 0x20, 0x1A, 0x19, 0x21, 0xFF, 0xFF },
+ { 0x21, 0x20, 0x19, 0x1A, 0x22, 0x26 },
+ { 0x22, 0x21, 0x23, 0xFF, 0xFF, 0xFF },
+ { 0x23, 0x22, 0x24, 0xFF, 0xFF, 0xFF },
+ { 0x24, 0x23, 0x25, 0x26, 0xFF, 0xFF },
+ { 0x25, 0x24, 0x26, 0xFF, 0xFF, 0xFF },
+ { 0x26, 0x25, 0x21, 0xFF, 0xFF, 0xFF },
+ { 0x27, 0x24, 0x28, 0x29, 0xFF, 0xFF },
+ { 0x28, 0x27, 0x2A, 0xFF, 0xFF, 0xFF },
+ { 0x29, 0x27, 0x2A, 0xFF, 0xFF, 0xFF },
+ { 0x2A, 0x28, 0x29, 0x2B, 0xFF, 0xFF },
+ { 0x2B, 0x2A, 0x2C, 0xFF, 0xFF, 0xFF },
+ { 0x2C, 0x2B, 0x2D, 0xFF, 0xFF, 0xFF },
+ { 0x2D, 0x2C, 0x2E, 0xFF, 0xFF, 0xFF },
+ { 0x2E, 0x2D, 0x2F, 0xFF, 0xFF, 0xFF },
+ { 0x2F, 0x2E, 0x30, 0xFF, 0xFF, 0xFF },
+ { 0x30, 0x2F, 0x31, 0xFF, 0xFF, 0xFF },
+ { 0x31, 0x30, 0x19, 0xFF, 0xFF, 0xFF },
+ { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+};
+
+void ClearRoamerData(void)
+{
+ memset(&gSaveBlock1.roamer, 0, sizeof(gSaveBlock1.roamer));
+}
+
+void ClearRoamerLocationData(void)
+{
+ u8 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ sLocationHistory[i][MAP_GRP] = 0;
+ sLocationHistory[i][MAP_NUM] = 0;
+ }
+
+ sRoamerLocation[MAP_GRP] = 0;
+ sRoamerLocation[MAP_NUM] = 0;
+}
+
+void CreateInitialRoamerMon(void)
+{
+ struct Roamer *roamer;
+ CreateMon(&gEnemyParty[0], ROAMER_SPECIES, 40, 0x20, 0, 0, 0, 0);
+ roamer = &gSaveBlock1.roamer;
+ roamer->species = ROAMER_SPECIES;
+ roamer->level = 40;
+ roamer->status = 0;
+ roamer->active = TRUE;
+ roamer->ivs = GetMonData(&gEnemyParty[0], MON_DATA_IVS);
+ roamer->personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY);
+ roamer->hp = GetMonData(&gEnemyParty[0], MON_DATA_MAX_HP);
+ roamer->cool = GetMonData(&gEnemyParty[0], MON_DATA_COOL);
+ roamer->beauty = GetMonData(&gEnemyParty[0], MON_DATA_BEAUTY);
+ roamer->cute = GetMonData(&gEnemyParty[0], MON_DATA_CUTE);
+ roamer->smart = GetMonData(&gEnemyParty[0], MON_DATA_SMART);
+ roamer->tough = GetMonData(&gEnemyParty[0], MON_DATA_TOUGH);
+ sRoamerLocation[MAP_GRP] = 0;
+ sRoamerLocation[MAP_NUM] = sRoamerLocations[Random() % 20][0];
+}
+
+void InitRoamer(void)
+{
+ ClearRoamerData();
+ ClearRoamerLocationData();
+ CreateInitialRoamerMon();
+}
+
+void UpdateLocationHistoryForRoamer(void)
+{
+ sLocationHistory[2][MAP_GRP] = sLocationHistory[1][MAP_GRP];
+ sLocationHistory[2][MAP_NUM] = sLocationHistory[1][MAP_NUM];
+
+ sLocationHistory[1][MAP_GRP] = sLocationHistory[0][MAP_GRP];
+ sLocationHistory[1][MAP_NUM] = sLocationHistory[0][MAP_NUM];
+
+ sLocationHistory[0][MAP_GRP] = gSaveBlock1.location.mapGroup;
+ sLocationHistory[0][MAP_NUM] = gSaveBlock1.location.mapNum;
+}
+
+void RoamerMoveToOtherLocationSet(void)
+{
+ u8 val = 0;
+ struct Roamer *roamer = &gSaveBlock1.roamer;
+
+ if (!roamer->active)
+ return;
+
+ sRoamerLocation[MAP_GRP] = val;
+
+ while (1)
+ {
+ val = sRoamerLocations[Random() % 20][0];
+ if (sRoamerLocation[MAP_NUM] != val)
+ {
+ sRoamerLocation[MAP_NUM] = val;
+ return;
+ }
+ }
+}
+
+void RoamerMove(void)
+{
+ u8 locSet = 0;
+
+ if ((Random() % 16) == 0)
+ {
+ RoamerMoveToOtherLocationSet();
+ }
+ else
+ {
+ struct Roamer *roamer = &gSaveBlock1.roamer;
+
+ if (!roamer->active)
+ return;
+
+ while (locSet < 20)
+ {
+ if (sRoamerLocation[MAP_NUM] == sRoamerLocations[locSet][0])
+ {
+ u8 mapNum;
+ while (1)
+ {
+ mapNum = sRoamerLocations[locSet][(Random() % 5) + 1];
+ if (!(sLocationHistory[2][MAP_GRP] == 0 && sLocationHistory[2][MAP_NUM] == mapNum) && mapNum != 0xFF)
+ break;
+ }
+ sRoamerLocation[MAP_NUM] = mapNum;
+ return;
+ }
+ locSet++;
+ }
+ }
+}
+
+bool8 IsRoamerAt(u8 mapGroup, u8 mapNum)
+{
+ struct Roamer *roamer = &gSaveBlock1.roamer;
+
+ if (roamer->active && mapGroup == sRoamerLocation[MAP_GRP] && mapNum == sRoamerLocation[MAP_NUM])
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void CreateRoamerMonInstance(void)
+{
+ struct Pokemon *mon = &gEnemyParty[0];
+ struct Roamer *roamer = &gSaveBlock1.roamer;
+ CreateMonWithIVsPersonality(mon, roamer->species, roamer->level, roamer->ivs, roamer->personality);
+ SetMonData(mon, MON_DATA_STATUS, (u8 *)&roamer->status);
+ SetMonData(mon, MON_DATA_HP, (u8 *)&roamer->hp);
+ SetMonData(mon, MON_DATA_COOL, (u8 *)&roamer->cool);
+ SetMonData(mon, MON_DATA_BEAUTY, (u8 *)&roamer->beauty);
+ SetMonData(mon, MON_DATA_CUTE, (u8 *)&roamer->cute);
+ SetMonData(mon, MON_DATA_SMART, (u8 *)&roamer->smart);
+ SetMonData(mon, MON_DATA_TOUGH, (u8 *)&roamer->tough);
+}
+
+bool8 TryStartRoamerEncounter(void)
+{
+ if (IsRoamerAt(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) == TRUE && (Random() % 4) == 0)
+ {
+ CreateRoamerMonInstance();
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+void UpdateRoamerHPStatus(struct Pokemon *mon)
+{
+ struct Roamer *roamer;
+ u16 hp;
+ u8 status;
+
+ hp = GetMonData(mon, MON_DATA_HP);
+
+ roamer = &gSaveBlock1.roamer;
+ roamer->hp = hp;
+
+ status = GetMonData(mon, MON_DATA_STATUS);
+
+ roamer->status = status;
+
+ RoamerMoveToOtherLocationSet();
+}
+
+void SetRoamerInactive(void)
+{
+ struct Roamer *roamer = &gSaveBlock1.roamer;
+ roamer->active = FALSE;
+}
+
+void GetRoamerLocation(u8 *mapGroup, u8 *mapNum)
+{
+ *mapGroup = sRoamerLocation[MAP_GRP];
+ *mapNum = sRoamerLocation[MAP_NUM];
+}
diff --git a/src/rom3.c b/src/rom3.c
index 351d5d44b..b0ef7f088 100644
--- a/src/rom3.c
+++ b/src/rom3.c
@@ -56,7 +56,7 @@ extern void sub_8083C50(u8);
extern void nullsub_41(void);
extern void nullsub_91(void);
extern void battle_anim_clear_some_data(void);
-extern void sub_8040710(void);
+extern void ClearBattleMonForms(void);
extern void BattleAI_HandleItemUseBeforeAISetup(void);
extern void sub_8094978(u8, int);
extern void sub_800BA78(void);
@@ -102,7 +102,7 @@ void setup_poochyena_battle(void)
sub_800B858();
gUnknown_02024A64 = 0;
battle_anim_clear_some_data();
- sub_8040710();
+ ClearBattleMonForms();
BattleAI_HandleItemUseBeforeAISetup();
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{
diff --git a/src/rom4.c b/src/rom4.c
index 39c182731..5beb698ab 100644
--- a/src/rom4.c
+++ b/src/rom4.c
@@ -25,6 +25,7 @@
#include "palette.h"
#include "play_time.h"
#include "rng.h"
+#include "roamer.h"
#include "safari_zone.h"
#include "script.h"
#include "script_pokemon_80C4.h"
@@ -164,8 +165,8 @@ void sub_805308C(void)
FlagReset(SYS_SAFARI_MODE);
sub_8054164();
ResetCyclingRoadChallengeData();
- mapnumbers_history_shift_sav1_0_2_4_out();
- sub_8134348();
+ UpdateLocationHistoryForRoamer();
+ RoamerMoveToOtherLocationSet();
}
void ResetGameStats(void)
@@ -531,8 +532,8 @@ void sub_80538F0(u8 mapGroup, u8 mapNum)
sub_807D874(i);
sub_8072ED0();
- mapnumbers_history_shift_sav1_0_2_4_out();
- sub_8134394();
+ UpdateLocationHistoryForRoamer();
+ RoamerMove();
DoCurrentWeather();
ResetFieldTasksArgs();
mapheader_run_script_with_tag_x5();
@@ -561,8 +562,8 @@ void sub_8053994(u32 a1)
sub_8053C98();
sav1_reset_battle_music_maybe();
mapheader_run_script_with_tag_x3();
- mapnumbers_history_shift_sav1_0_2_4_out();
- sub_8134348();
+ UpdateLocationHistoryForRoamer();
+ RoamerMoveToOtherLocationSet();
not_trainer_hill_battle_pyramid();
if (a1 != 1 && v3)
{
diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c
index 7b572ba73..93fbce556 100644
--- a/src/rom_800D42C.c
+++ b/src/rom_800D42C.c
@@ -12,8 +12,16 @@ extern u8 BattleText_Win[];
extern u8 BattleText_Loss[];
extern u8 BattleText_Tie[];
+#if ENGLISH
#define LEFT_MESSAGE_X 6
#define RIGHT_MESSAGE_X 21
+#define TILE_OFFSET_LOSS 168
+#elif GERMAN
+#define LEFT_MESSAGE_X 5
+#define RIGHT_MESSAGE_X 20
+#define TILE_OFFSET_LOSS 172
+#endif
+#define TILE_OFFSET_WIN 160
#define CENTER_MESSAGE_X 13
#define MESSAGE_Y 2
@@ -31,7 +39,7 @@ void sub_800DC24(void)
if (gUnknown_02024D26 == 3)
{
- PRINT_MESSAGE(BattleText_Tie, 160, CENTER_MESSAGE_X);
+ PRINT_MESSAGE(BattleText_Tie, TILE_OFFSET_WIN, CENTER_MESSAGE_X);
return;
}
@@ -46,13 +54,15 @@ void sub_800DC24(void)
switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18)
{
case 0:
- case 2: PRINT_MESSAGE_LEFT(BattleText_Win, 160);
- PRINT_MESSAGE_RIGHT(BattleText_Loss, 168);
+ case 2:
+ PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN);
+ PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS);
return;
case 1:
- case 3: PRINT_MESSAGE_RIGHT(BattleText_Win, 160)
- PRINT_MESSAGE_LEFT(BattleText_Loss, 168)
+ case 3:
+ PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN)
+ PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS)
return;
}
}
@@ -62,13 +72,15 @@ void sub_800DC24(void)
switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18)
{
case 1:
- case 3: PRINT_MESSAGE_LEFT(BattleText_Win, 160);
- PRINT_MESSAGE_RIGHT(BattleText_Loss, 168);
+ case 3:
+ PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN);
+ PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS);
return;
case 0:
- case 2: PRINT_MESSAGE_RIGHT(BattleText_Win, 160);
- PRINT_MESSAGE_LEFT(BattleText_Loss, 168);
+ case 2:
+ PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN);
+ PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS);
return;
}
}
@@ -81,26 +93,26 @@ void sub_800DC24(void)
{
if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0)
{
- PRINT_MESSAGE_RIGHT(BattleText_Win, 160);
- PRINT_MESSAGE_LEFT(BattleText_Loss, 168);
+ PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN);
+ PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS);
}
else
{
- PRINT_MESSAGE_LEFT(BattleText_Win, 160);
- PRINT_MESSAGE_RIGHT(BattleText_Loss, 168);
+ PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN);
+ PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS);
}
}
else
{
if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0)
{
- PRINT_MESSAGE_LEFT(BattleText_Win, 160);
- PRINT_MESSAGE_RIGHT(BattleText_Loss, 168);
+ PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN);
+ PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS);
}
else
{
- PRINT_MESSAGE_RIGHT(BattleText_Win, 160);
- PRINT_MESSAGE_LEFT(BattleText_Loss, 168);
+ PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN);
+ PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS);
}
}
}
diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c
index 2d7691033..b216bbe97 100644
--- a/src/rom_8077ABC.c
+++ b/src/rom_8077ABC.c
@@ -20,7 +20,6 @@
#define NUM_BATTLE_SLOTS 4
#define gBattleMonPartyPositions gUnknown_02024A6A
-#define gBattleMonForms gUnknown_02024E84
#define gCastformFrontSpriteCoords gUnknownCastformCoords_0837F598
#define gCastformElevations gUnknownCastformData_0837F5A8
#define gCastformBackSpriteYCoords gUnknown_0837F5AC
diff --git a/src/string_util.c b/src/string_util.c
index e537cff3a..957d70153 100644
--- a/src/string_util.c
+++ b/src/string_util.c
@@ -137,6 +137,21 @@ u16 StringLength(const u8 *str)
return length;
}
+#ifdef GERMAN
+s32 StringLengthN(const u8 *str, s32 n)
+{
+ s32 i;
+
+ for (i = 0; i < n && str[i] != EOS; i++)
+ ;
+
+ if (i == n)
+ i = 0;
+
+ return i;
+}
+#endif
+
s32 StringCompare(const u8 *str1, const u8 *str2)
{
while (*str1 == *str2)
diff --git a/src/strings.c b/src/strings.c
index 54c9bdc6a..f41af082c 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1,5 +1,6 @@
#include "global.h"
+#if ENGLISH
// placeholder strings
const u8 gExpandedPlaceholder_Empty[] = _("");
const u8 gExpandedPlaceholder_Kun[] = _("");
@@ -921,3 +922,925 @@ const u8 gSystemText_SaveFailed[] = _("Save failed...");
const u8 gSystemText_NoSaveFileNoTime[] = _("There is no save file, so the time\ncan’t be set.");
const u8 gSystemText_ClockAdjustmentUsable[] = _("The in-game clock adjustment system\nis now useable.");
const u8 gSystemText_Saving[] = _("SAVING...\nDON’T TURN OFF THE POWER.");
+#elif GERMAN
+#include "global.h"
+
+// placeholder strings
+const u8 gExpandedPlaceholder_Empty[] = _("");
+const u8 gExpandedPlaceholder_Kun[] = _("");
+const u8 gExpandedPlaceholder_Chan[] = _("");
+const u8 gExpandedPlaceholder_Sapphire[] = _("SAPHIR");
+const u8 gExpandedPlaceholder_Ruby[] = _("RUBIN");
+const u8 gExpandedPlaceholder_Aqua[] = _("AQUA");
+const u8 gExpandedPlaceholder_Magma[] = _("MAGMA");
+const u8 gExpandedPlaceholder_Archie[] = _("ADRIAN");
+const u8 gExpandedPlaceholder_Maxie[] = _("MARC");
+const u8 gExpandedPlaceholder_Kyogre[] = _("KYOGRE");
+const u8 gExpandedPlaceholder_Groudon[] = _("GROUDON");
+const u8 gExpandedPlaceholder_Brendan[] = _("BRIX");
+const u8 gExpandedPlaceholder_May[] = _("MAIKE");
+
+// system text
+const u8 gSystemText_Egg[] = _("EI");
+const u8 gSystemText_Pokemon2[] = _("POKéMON");
+
+// main menu text
+const u8 gMainMenuString_NewGame[] = _("NEUES SPIEL");
+const u8 gMainMenuString_Continue[] = _("WEITER");
+const u8 gMainMenuString_Option[] = _("OPTIONEN");
+const u8 gMainMenuString_MysteryEvents[] = _("GEHEIMGESCHEHEN");
+
+// system text 2
+const u8 SystemText_UpdatingSaveExternal[] = _("Neuer Spielstand mittels Übertra-\ngung externer Daten. Bitte warten.");
+const u8 SystemText_SaveUpdated[] = _("Der Spielstand wurde erneuert.");
+const u8 SystemText_SaveUpdatedExchangeBackup[] = _("Der Spielstand wurde gespeichert.\pDas Backup Memory kann keine \nweiteren Spieldaten sichern.\pBitte Backup Memory austauschen.\pBei Fragen bitte an die Nintendo\nKonsumentenberatung wenden.");
+const u8 SystemText_SaveNotUpdated[] = _("Spielstand wurde nicht gesichert.\pBitte Backup Memory \naustauschen.\pBei Fragen bitte an die Nintendo\nKonsumentenberatung wenden.");
+
+// save file text
+const u8 gSaveFileCorruptMessage[] = _("Der Spielstand ist beschädigt. Der\nvorherige Spielstand wird geladen.");
+const u8 gSaveFileDeletedMessage[] = _("Der Spielstand wurde gelöscht.");
+
+// system text 3
+const u8 gBoardNotInstalledMessage[] = _("Das ‘1M Sub-circuit Board’\nist nicht installiert.");
+const u8 gBatteryDryMessage[] = _("Interne Batterie ist verbraucht.\nSpiel kann fortgesetzt werden.\pAber zeitbasierende Spiel-Events\nwerden nicht mehr initiiert.");
+
+// main menu text 2
+const u8 gMainMenuString_Player[] = _("SPIELER");
+const u8 gMainMenuString_Pokedex[] = _("POKéDEX");
+const u8 gMainMenuString_Time[] = _("SPIELZEIT");
+const u8 gMainMenuString_Badges[] = _("ORDEN");
+
+// birch text
+const u8 gBirchText_Boy[] = _("JUNGE");
+const u8 gBirchText_Girl[] = _("MÄDEL");
+const u8 gBirchText_NewName[] = _("NEUER NAME");
+
+#ifdef SAPPHIRE
+const u8 gDefaultBoyName1[] = _("SEAN");
+#else
+const u8 gDefaultBoyName1[] = _("ROLAND");
+#endif
+const u8 gDefaultBoyName2[] = _("DANIEL");
+const u8 gDefaultBoyName3[] = _("HELGE");
+const u8 gDefaultBoyName4[] = _("JAN");
+
+#ifdef SAPPHIRE
+const u8 gDefaultGirlName1[] = _("MARINA");
+#else
+const u8 gDefaultGirlName1[] = _("PETRA");
+#endif
+const u8 gDefaultGirlName2[] = _("TANJA");
+const u8 gDefaultGirlName3[] = _("ANDREA");
+const u8 gDefaultGirlName4[] = _("SARA");
+
+const u8 gSystemText_IntroWeCall[] = _("Dies ist ein so genanntes\n“POKéMON”.");
+const u8 gSystemText_NewPara[] = _("\p");
+
+const u8 gDexText_UnknownPoke[] = _("?????");
+const u8 gDexText_UnknownHeight[] = _("???,? m");
+const u8 gDexText_UnknownWeight[] = _("???,? kg$");
+const u8 gDexText_CryOf[] = _("{CLEAR_TO 2}RUF VON$");
+const u8 gDexText_SizeComparedTo[] = _("GRÖSSE IM VERGLEICH ZU ");
+const u8 gDexText_RegisterComplete[] = _("Neuer Eintrag aufgenommen.");
+const u8 gDexText_Searching[] = _("Suche läuft.\nBitte warten...");
+const u8 gDexText_SearchComplete[] = _("Suche beendet.");
+const u8 gDexText_NoMatching[] = _("Es wurde keine Übereinstimmung ermittelt.");
+
+const u8 DexText_SearchForPoke[] = _("Suche nach POKéMON anhand\nausgewählter Parameter.");
+const u8 DexText_SwitchDex[] = _("Ordnungssystem des POKéDEX ändern.");
+const u8 DexText_ReturnToDex[] = _("Kehre zurück zum POKéDEX.");
+const u8 DexText_SelectDexMode[] = _("Wähle einen POKéDEX.");
+const u8 DexText_SelectDexList[] = _("Wähle ein Ordnungssystem des POKéDEX.");
+const u8 DexText_ListByABC[] = _("Nach Anfangsbuchstaben suchen.\n(Alle gesehenen POKéMON.)");
+const u8 DexText_ListByColor[] = _("Nach Körperfarbe suchen.\n(Alle gesehenen POKéMON.)");
+const u8 DexText_ListByType[] = _("Nach Elementklasse suchen.\n(Nur gefangene POKéMON.)");
+const u8 DexText_ExecuteSearchSwitch[] = _("Suche/Ändern ausführen.");
+const u8 DexText_HoennDex[] = _("HOENN DEX");
+const u8 DexText_NationalDex[] = _("NATIONALER DEX");
+const u8 DexText_NumericalMode[] = _("NUMERISCH");
+const u8 DexText_ABCMode[] = _("VON A BIS Z");
+const u8 DexText_HeaviestMode[] = _("NACH GEWICHT {0x86}");
+const u8 DexText_LightestMode[] = _("NACH GEWICHT {0x85}");
+const u8 DexText_TallestMode[] = _("NACH GRÖSSE {0x86}");
+const u8 DexText_SmallestMode[] = _("NACH GRÖSSE {0x85}");
+const u8 DexText_ABC[] = _("ABC");
+const u8 DexText_DEF[] = _("DEF");
+const u8 DexText_GHI[] = _("GHI");
+const u8 DexText_JKL[] = _("JKL");
+const u8 DexText_MNO[] = _("MNO");
+const u8 DexText_PQR[] = _("PQR");
+const u8 DexText_STU[] = _("STU");
+const u8 DexText_VWX[] = _("VWX");
+const u8 DexText_YZ[] = _("YZ");
+const u8 DexText_Red[] = _("ROT");
+const u8 DexText_Blue[] = _("BLAU");
+const u8 DexText_Yellow[] = _("GELB");
+const u8 DexText_Green[] = _("GRÜN");
+const u8 DexText_Black[] = _("SCHWARZ");
+const u8 DexText_Brown[] = _("BRAUN");
+const u8 DexText_Purple[] = _("LILA");
+const u8 DexText_Gray[] = _("GRAU");
+const u8 DexText_White[] = _("WEISS");
+const u8 DexText_Pink[] = _("ROSA");
+const u8 DexText_HoennDex2[] = _("POKéDEX von HOENN");
+const u8 DexText_NationalDex2[] = _("POKéDEX, erweiterte Edition");
+const u8 DexText_ListByNumber[] = _("POKéMON werden anhand ihrer\nNummer sortiert.");
+const u8 DexText_ListByABC2[] = _("Gesehene und gefangene POKéMON\nwerden alphabetisch geordnet.");
+const u8 DexText_ListByHeavyToLightest[] = _("Gefangene POKéMON werden nach Gewicht\nsortiert, beginnend mit dem schwersten.");
+const u8 DexText_ListByLightToHeaviest[] = _("Gefangene POKéMON werden nach Gewicht\nsortiert, beginnend mit dem leichtesten.");
+const u8 DexText_ListByTallToSmallest[] = _("Gefangene POKéMON werden nach Größe\nsortiert, beginnend mit dem größten.");
+const u8 DexText_ListBySmallToTallest[] = _("Gefangene POKéMON werden nach Größe\nsortiert, beginnend mit dem kleinsten.");
+const u8 DexText_Terminator5[] = _("");
+const u8 DexText_DontSpecify[] = _("KEINE ANGABE");
+const u8 DexText_None[] = _("KEINER");
+const u8 DexText_RightPointingTriangle[] = _("▶");
+const u8 DexText_Terminator6[] = _(" ");
+
+const u8 gMenuText_WelcomeToHOFAndDexRating[] = _("Willkommen in der RUHMESHALLE!$Gesehene POKéMON: {STR_VAR_1}!\nGefangene POKéMON: {STR_VAR_2}!\pPROF. BIRKs POKéDEX-Bewertung!\pPROF. BIRK: Sehen wir mal...\p");
+const u8 gMenuText_HOFSaving[] = _("SPEICHERVORGANG...\nDAS GERÄT NICHT AUSSCHALTEN!");
+const u8 gMenuText_HOFCorrupt[] = _("Die RH-Daten sind beschädigt.");
+const u8 gMenuText_HOFNumber[] = _("RUHMESHALLE, Nr. ");
+const u8 gMenuText_HOFCongratulations[] = _("CHAMP der POKéMON LIGA!\nHerzlichen Glückwunsch!");
+
+const u8 gOtherText_Number2[] = _("Nr.");
+const u8 gOtherText_Level3[] = _("Lv.");
+const u8 gOtherText_IDNumber[] = _("ID.Nr. /");
+const u8 gOtherText_Name[] = _("NAME /");
+const u8 gOtherText_IDNumber2[] = _("ID.Nr. /");
+const u8 gOtherText_BirchInTrouble[] = _("{HIGHLIGHT WHITE2}{COLOR DARK_GREY}PROF. BIRK ist in Schwierigkeiten!\nSchnapp’ dir ein POKéMON und hilf ihm!");
+const u8 gOtherText_DoYouChoosePoke[] = _("{HIGHLIGHT WHITE2}{COLOR DARK_GREY}Wählst du dieses POKéMON?");
+const u8 gOtherText_Poke[] = _("POKéMON");
+
+const u8 gSystemText_SaveErrorExchangeBackup[] = _("Fehler beim Speichern!\pBitte Backup Memory\naustauschen.");
+const u8 gOtherText_FlyToWhere[] = _("Wohin willst du FLIEGEN?");
+
+const u8 OtherText_Use[] = _("O.K.");
+const u8 OtherText_Toss[] = _("MÜLL");
+const u8 OtherText_Register[] = _("WÄHLEN");
+const u8 OtherText_Give2[] = _("GEBEN");
+const u8 OtherText_CheckTag[] = _("PRÜFEN");
+const u8 OtherText_Confirm[] = _("O.K.");
+const u8 gOtherText_Walk[] = _("LAUFEN");
+
+const u8 gUnknownText_Exit[] = _("BEENDEN");
+const u8 gOtherText_CancelNoTerminator[] = _("ZURÜCK");
+const u8 gOtherText_CancelWithTerminator[] = _("$ZURÜCK");
+
+const u8 OtherText_Item[] = _("ITEM");
+const u8 OtherText_Mail[] = _("BRIEF");
+const u8 OtherText_Take2[] = _("NEHMEN");
+const u8 OtherText_Store[] = _("GEBEN");
+
+const u8 gOtherText_Check[] = _("PRÜFEN");
+const u8 gOtherText_None[] = _("KEINES");
+
+const u8 gOtherText_ThreeQuestions2[] = _("???");
+
+const u8 gOtherText_FiveQuestionsAndSlash[] = _("?????$/");
+
+const u8 gOtherText_OneDash[] = _("-");
+const u8 gOtherText_TwoDashes[] = _("--");
+const u8 gOtherText_ThreeDashes2[] = _("---");
+const u8 gOtherText_MaleSymbol2[] = _("♂");
+const u8 gOtherText_FemaleSymbolAndLv[] = _("♀$Lv.");
+const u8 gOtherText_TallPlusAndRightArrow[] = _("{TALL_PLUS}${RIGHT_ARROW}");
+const u8 gMenuText_GoBackToPrev[] = _("Kehre zurück zum\nvorherigen Menü.");
+const u8 gOtherText_WhatWillYouDo[] = _("Was möchtest du tun?");
+
+const u8 gOtherText_xString1[] = _("×{STR_VAR_1}");
+const u8 gOtherText_Berry2[] = _("BEERE");
+const u8 gOtherText_Coins2[] = _("{STR_VAR_1} MÜNZ.");
+const u8 gOtherText_CloseBag[] = _("BEUTEL SCHLIESSEN");
+
+const u8 OtherText_TheField3[] = _("zum Hauptmenü.");
+const u8 OtherText_TheBattle[] = _("zum Kampf.");
+const u8 OtherText_ThePokeList[] = _("zur POKéMON-LISTE.");
+const u8 OtherText_TheShop[] = _("zum Geschäft.");
+const u8 OtherText_TheField[] = _("zum Hauptmenü.");
+const u8 OtherText_TheField2[] = _("zum Hauptmenü.");
+const u8 OtherText_ThePC[] = _("zum PC.");
+
+const struct TextStruct gUnknown_0840E740[7] =
+{
+ OtherText_TheField3,
+ OtherText_TheBattle,
+ OtherText_ThePokeList,
+ OtherText_TheShop,
+ OtherText_TheField,
+ OtherText_TheField2,
+ OtherText_ThePC,
+};
+
+const u8 gOtherText_ReturnTo[] = _("Zurück ");
+const u8 gOtherText_WhatWillYouDo2[] = _("Was möchtest\ndu tun?");
+const u8 gOtherText_CantWriteMail[] = _("Du kannst keinen\nBRIEF schreiben.");
+const u8 gOtherText_NoPokemon[] = _("Hier ist kein\nPOKéMON.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_SwitchWhichItem[] = _("Gegen welches Item\naustauschen?");
+const u8 gOtherText_CantBeHeld[] = _("{STR_VAR_1} ist nicht zu geben.");
+const u8 gOtherText_CantBeHeldHere[] = _("{STR_VAR_1} ist hier nicht zu geben.");
+const u8 gOtherText_HowManyToDeposit[] = _("Wie viele möchtest\ndu ablegen?");
+const u8 gOtherText_DepositedItems[] = _("{STR_VAR_2}× {STR_VAR_1}\nwurde abgelegt.");
+const u8 gOtherText_NoRoomForItems[] = _("Kein Platz für\nweitere Items.");
+const u8 gOtherText_CantStoreSomeoneItem[] = _("Du kannst kein\nItem eines anderen\nauf dem PC lagern.");
+const u8 gOtherText_TooImportant[] = _("Das ist viel zu\nwichtig, um es\nwegzuwerfen!");
+const u8 gOtherText_HowManyToToss[] = _("Wie viel in den Müll?");
+const u8 gOtherText_ThrewAwayItem[] = _("{STR_VAR_2} × {STR_VAR_1}\nweggeworfen.");
+const u8 gOtherText_OkayToThrowAwayPrompt[] = _("Willst du wirklich\n{STR_VAR_2} × {STR_VAR_1}\nwegwerfen?");
+const u8 gOtherText_DadsAdvice[] = _("VATI sagt immer...\n{PLAYER}, dies ist weder der rechte\lOrt noch der rechte Zeitpunkt dafür!{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_CantGetOffBike[] = _("Du kannst hier nicht vom RAD steigen.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_ItemfinderResponding[] = _("Oh!\nDas Gerät zeigt etwas an!\pHier muss ein Item vergraben sein!{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_ItemfinderItemUnderfoot[] = _("Das Gerät macht direkt unter\ndeinen Füßen etwas aus!{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_NoResponse[] = _("... ... ... ... Nichts!\nKeine Anzeige.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_Coins3[] = _("Deine MÜNZEN:\n{STR_VAR_1}{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_BootedTM[] = _("Eine TM wurde aktiviert.");
+const u8 gOtherText_BootedHM[] = _("Eine VM wurde aktiviert.");
+const u8 gOtherText_ContainsMove[] = _("Sie enthält\n{STR_VAR_1}.\p{STR_VAR_1} einem\nPOKéMON beibringen?");
+const u8 gOtherText_UsedItem[] = _("{PLAYER} setzt\n{STR_VAR_2} ein.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_RepelLingers[] = _("Aber SCHUTZ wirkt doch\nnoch!{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_UsedFlute[] = _("{PLAYER} setzt\n{STR_VAR_2} ein.\pWilde POKéMON werden angezogen.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_UsedRepel[] = _("{PLAYER} setzt\n{STR_VAR_2} ein.\pWilde POKéMON werden abgehalten.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_BoxIsFull[] = _("Die BOXEN sind voll.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_Size[] = _("MASS:");
+const u8 gOtherText_Firm[] = _("GÜTE:");
+
+const u8 gContestStatsText_Unknown1[] = _("{STR_VAR_1},{STR_VAR_2} cm");
+
+const u8 ContestStatsText_VerySoft[] = _("Sehr weich");
+const u8 ContestStatsText_Soft[] = _("Weich");
+const u8 ContestStatsText_Hard[] = _("Hart");
+const u8 ContestStatsText_VeryHard[] = _("Sehr hart");
+const u8 ContestStatsText_SuperHard[] = _("Steinhart");
+
+const u8 ContestStatsText_RedPokeBlock[] = _("{POKEBLOCK} ROT");
+const u8 ContestStatsText_BluePokeBlock[] = _("{POKEBLOCK} BLAU");
+const u8 ContestStatsText_PinkPokeBlock[] = _("{POKEBLOCK} ROSA");
+const u8 ContestStatsText_GreenPokeBlock[] = _("{POKEBLOCK} GRÜN");
+const u8 ContestStatsText_YellowPokeBlock[] = _("{POKEBLOCK} GELB");
+const u8 ContestStatsText_PurplePokeBlock[] = _("{POKEBLOCK} LILA");
+const u8 ContestStatsText_IndigoPokeBlock[] = _("{POKEBLOCK} INDIGO");
+const u8 ContestStatsText_BrownPokeBlock[] = _("{POKEBLOCK} BRAUN");
+const u8 ContestStatsText_LiteBluePokeBlock[] = _("{POKEBLOCK} CYAN");
+const u8 ContestStatsText_OlivePokeBlock[] = _("{POKEBLOCK} OLIV");
+const u8 ContestStatsText_GrayPokeBlock[] = _("{POKEBLOCK} GRAU");
+const u8 ContestStatsText_BlackPokeBlock[] = _("{POKEBLOCK} SCHWARZ");
+const u8 ContestStatsText_WhitePokeBlock[] = _("{POKEBLOCK} WEISS");
+const u8 ContestStatsText_GoldPokeBlock[] = _("{POKEBLOCK} GOLD");
+
+const u8 gContestStatsText_Spicy[] = _("SCHARF");
+const u8 gContestStatsText_Dry[] = _("TROCKEN");
+const u8 gContestStatsText_Sweet[] = _("SÜSS");
+const u8 gContestStatsText_Bitter[] = _("BITTER");
+const u8 gContestStatsText_Sour[] = _("SAUER$LECKER$WÜRZE");
+
+const u8 gContestStatsText_StowCase[] = _("BOX verstauen.");
+const u8 gContestStatsText_ThrowAwayPrompt[] = _("{STR_VAR_1}\nwegwerfen?");
+const u8 gContestStatsText_WasThrownAway[] = _("{STR_VAR_1}\nwurde weggeworfen.");
+const u8 gContestStatsText_NormallyAte[] = _("{STR_VAR_1} aß den\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
+const u8 gContestStatsText_HappilyAte[] = _("{STR_VAR_1} aß gerne den\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
+const u8 gContestStatsText_DisdainfullyAte[] = _("{STR_VAR_1} aß ungern den\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
+
+const u8 MartText_Buy[] = _("KAUFEN");
+const u8 MartText_Sell[] = _("VERKAUFEN");
+const u8 MartText_Quit2[] = _("TSCHÜSS!");
+
+const u8 gOtherText_QuitShopping[] = _("Einkauf beenden.");
+
+const u8 gOtherText_HowManyYouWant[] = _("{STR_VAR_1}? Aber gerne.\nWie viele möchtest du?");
+const u8 gOtherText_ThatWillBe[] = _("{STR_VAR_1}? Und du möchtest {STR_VAR_2}?\nDas macht dann ¥{STR_VAR_3}.");
+const u8 gOtherText_ThatWillBe2[] = _("{STR_VAR_1} soll es sein?\nDas kostet ¥{STR_VAR_2}. Einverstanden?");
+const u8 gOtherText_ThatWillBe3[] = _("Du wolltest {STR_VAR_1}?\nDas kostet ¥{STR_VAR_2}. Einverstanden?");
+const u8 gOtherText_HereYouGo[] = _("Bitte sehr!\nUnd vielen Dank.");
+const u8 gOtherText_HereYouGo2[] = _("Vielen Dank!\nEs wird auf deinen PC übertragen.");
+const u8 gOtherText_HereYouGo3[] = _("Danke!\nEs wird auf deinen PC übertragen.");
+const u8 gOtherText_NotEnoughMoney[] = _("Du hast nicht genug Geld.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_NoRoomFor[] = _("Du hast keinen Platz für weitere Items.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_SpaceForIsFull[] = _("Es ist kein Platz für {STR_VAR_1}.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_AnythingElse[] = _("Gibt es noch etwas, womit\nich dienen kann?");
+const u8 gOtherText_CanIHelpYou[] = _("Kann ich dir sonst noch dienlich sein?");
+const u8 gOtherText_FreePremierBall[] = _("Ich gebe dir noch einen PREMIERBALL.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_CantBuyThat[] = _("{STR_VAR_2}? Es tut mir Leid, aber\ndas kann ich nicht kaufen.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_HowManyToSell[] = _("{STR_VAR_2}?\nWie viele möchtest du verkaufen?");
+const u8 gOtherText_CanPay[] = _("Ich gebe dir ¥{STR_VAR_1}.\nBist du damit einverstanden?");
+const u8 gOtherText_SoldItem[] = _("{STR_VAR_2} wurde übergeben\nim Tausch gegen ¥{STR_VAR_1}.");
+
+const u8 OtherText_Money[] = _("¥{STR_VAR_1}");
+const u8 OtherText_Shift[] = _("TAUSCH");
+const u8 OtherText_SendOut[] = _("AUSSENDEN");
+const u8 OtherText_Switch2[] = _("TAUSCH");
+const u8 OtherText_Summary[] = _("BERICHT");
+const u8 OtherText_Moves[] = _("ATTACKEN");
+const u8 OtherText_Enter2[] = _("EINTRAGEN");
+const u8 OtherText_NoEntry[] = _("AUSTRAGEN");
+const u8 OtherText_Take[] = _("NEHMEN");
+const u8 OtherText_Read2[] = _("LESEN");
+
+const u8 gOtherText_Hp2[] = _("KP");
+const u8 gOtherText_SpAtk2[] = _("SP. ANG.");
+const u8 gOtherText_SpDef2[] = _("SP. VER.");
+const u8 gOtherText_WontHaveAnyEffect[] = _("Es wird keine Wirkung haben.{PAUSE_UNTIL_PRESS}");
+
+const u8 gOtherText_CantUseOnPoke[] = _("Das kann nicht bei diesem\nPOKéMON eingesetzt werden.{PAUSE_UNTIL_PRESS}");
+
+const u8 gOtherText_CantBeSwitched[] = _("{STR_VAR_1} kann nicht ausge-\ntauscht werden!{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_AlreadyBattle[] = _("{STR_VAR_1}\nkämpft bereits!{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_AlreadySelected[] = _("{STR_VAR_1} ist\nbereits ausgewählt.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_NoEnergyLeft[] = _("{STR_VAR_1} kann\nnicht kämpfen!{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_CantSwitchPokeWithYours[] = _("Ein POKéMON von {STR_VAR_1} ist\nnicht gegen deins eintauschbar!{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_EGGCantBattle[] = _("Ein EI kann nicht kämpfen!{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_CantBeUsedBadge[] = _("Das ist erst einsetzbar, wenn\nein neuer ORDEN errungen wurde.");
+const u8 gOtherText_NoMoreThreePoke[] = _("Es können nicht mehr als\ndrei POKéMON teilnehmen.");
+const u8 gOtherText_SendRemovedMailPrompt[] = _("Den abgenommenen BRIEF\nauf deinen PC übertragen?");
+const u8 gOtherText_MailWasSent[] = _("Der BRIEF wurde auf deinen\nPC übertragen.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_MailboxIsFull[] = _("Du kannst keine weiteren BRIEFE\nauf deinen PC übertragen.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_MailRemovedMessageLost[] = _("Wird der BRIEF entfernt, geht\nder Inhalt verloren, okay?");
+const u8 gOtherText_MailMustBeRemoved[] = _("Der BRIEF muss entfernt werden,\num ein Item tragen zu können.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_WasGivenToHold[] = _("{STR_VAR_1} erhält\n{STR_VAR_2} zum Tragen.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_AlreadyHolding[] = _("{STR_VAR_1} trägt bereits\n{STR_VAR_2}.\pSollen die Items ausge-\ntauscht werden?");
+const u8 gOtherText_NotHoldingAnything[] = _("{STR_VAR_1} trägt\nkein Item.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_ReceivedTheThingFrom[] = _("{STR_VAR_2} von\n{STR_VAR_1} erhalten.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_MailTaken[] = _("Der BRIEF wurde dem\nPOKéMON abgenommen.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_TakenAndReplaced[] = _("{STR_VAR_2} wurde gegen\n{STR_VAR_1} ausgetauscht.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_PokeHoldingItemCantMail[] = _("Dieses POKéMON trägt ein Item.\nEs kann keinen BRIEF tragen.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_MailTransferredMailbox[] = _("Der BRIEF wurde von deinem\nPC heruntergeladen.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_BagFullCannotRemoveItem[] = _("Der BEUTEL ist voll. Das Item des\nPOKéMON wurde nicht entfernt.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_LearnedMove[] = _("{STR_VAR_1} erlernt\n{STR_VAR_2}!");
+const u8 gOtherText_NotCompatible[] = _("{STR_VAR_1} und {STR_VAR_2}\nsind nicht kompatibel.\p{STR_VAR_2} kann nicht \nerlernt werden.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_WantsToLearn[] = _("{STR_VAR_1} versucht,\n{STR_VAR_2} zu erlernen.\pAber {STR_VAR_1} kann maximal\nvier Attacken erlernen.\pSoll eine andere Attacke durch\n{STR_VAR_2} ersetzt werden?");
+const u8 gOtherText_StopTryingTo[] = _("{STR_VAR_2} nicht\nerlernen?");
+const u8 gOtherText_DidNotLearnMove2[] = _("{STR_VAR_1} hat {STR_VAR_2}\nnicht erlernt.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_WhichMoveToForget2[] = _("Welche Attacke soll vergessen\nwerden?{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_ForgetMove123_2[] = _("{PAUSE 32}1, {PAUSE 15}2 und{PAUSE 15}... {PAUSE 15}... {PAUSE 15}... {PAUSE 15}{PLAY_SE 0x38 0x00} Schwupp!\p{STR_VAR_1} hat\n{STR_VAR_2} vergessen.\pUnd...{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_AlreadyKnows[] = _("{STR_VAR_1} kennt\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_HPRestoredBy[] = _("Die KP von {STR_VAR_1} wurden\num {STR_VAR_2} Punkte aufgefüllt.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_CuredPoisoning[] = _("Die Vergiftung von {STR_VAR_1}\nwurde geheilt.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_CuredParalysis[] = _("Die Paralyse von {STR_VAR_1}\nwurde aufgehoben.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_WokeUp[] = _("{STR_VAR_1} ist aufgewacht.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_BurnHealed[] = _("Verbrennung von {STR_VAR_1}\nwurde geheilt.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_ThawedOut[] = _("{STR_VAR_1} wurde aufgetaut.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_PPRestored[] = _("AP wurden aufgefüllt.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_RegainedHealth[] = _("{STR_VAR_1} erholte sich.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_BecameHealthy[] = _("{STR_VAR_1} erholte sich.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_PPIncreased[] = _("AP von {STR_VAR_1}\nwurden angehoben.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_ElevatedTo[] = _("{STR_VAR_1} erreicht\nLv. {STR_VAR_2}.");
+const u8 gOtherText_WasRaised[] = _("{STR_VAR_2} von\n{STR_VAR_1} wurde angehoben.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_SnapConfusion[] = _("{STR_VAR_1} ist nicht\nmehr verwirrt.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_GotOverLove[] = _("{STR_VAR_1} fühlt sich nicht\nmehr angezogen.{PAUSE_UNTIL_PRESS}");
+const u8 OtherText_ChoosePoke[] = _("Wähle ein POKéMON.");
+const u8 OtherText_MovePokeTo[] = _("An wessen Stelle setzen?");
+const u8 OtherText_TeachWhat[] = _("Welches POKéMON lehren?");
+const u8 OtherText_UseWhat[] = _("Welches POKéMON?");
+const u8 OtherText_GiveWhat[] = _("Welchem POKéMON geben?");
+const u8 OtherText_DoWhat[] = _("Was tun mit {STR_VAR_1}?");
+const u8 OtherText_NothingToCut[] = _("Hier nicht einsetzbar.");
+const u8 OtherText_CantSurf[] = _("SURFER nicht einsetzbar.");
+const u8 OtherText_AlreadySurfing[] = _("SURFER ist eingesetzt.");
+const u8 OtherText_CantUseThatHere[] = _("Hier nicht einsetzbar.");
+const u8 OtherText_RestoreWhatMove[] = _("Welche Attacke auffüllen?");
+const u8 OtherText_BoostPP[] = _("AP welcher Attacke heben?");
+const u8 OtherText_DoWhatWithItem[] = _("Was willst du mit dem Item?");
+const u8 OtherText_NoPokeForBattle[] = _("Kein POKéMON kampfbereit!");
+const u8 OtherText_ChoosePoke2[] = _("Wähle ein POKéMON.");
+const u8 OtherText_NotEnoughHP[] = _("Nicht genügend KP...");
+const u8 OtherText_ThreePokeNeeded[] = _("Drei POKéMON sind nötig.");
+const u8 OtherText_PokeCantBeSame[] = _("Nicht dieselben POKéMON!");
+const u8 OtherText_NoIdenticalHoldItems[] = _("Nicht dieselben Items!");
+const u8 OtherText_TeachWhichPoke[] = _("Welches POKéMON lehren?");
+const u8 gOtherText_Attack[] = _("ANGRIFF");
+const u8 gOtherText_Defense[] = _("VERT.");
+const u8 gOtherText_SpAtk[] = _("SP.ANG.");
+const u8 gOtherText_SpDef[] = _("SP.VER.");
+const u8 gOtherText_Speed[] = _("INIT.");
+const u8 gOtherText_HP[] = _("KP");
+const u8 gOtherText_Terminator18[] = _("");
+const u8 gOtherText_OriginalTrainer[] = _("OT:");
+const u8 gOtherText_Type2[] = _("TYP:");
+const u8 gOtherText_Power2[] = _("STÄRKE");
+const u8 gOtherText_Accuracy2[] = _("GENAU.");
+const u8 gOtherText_Appeal2[] = _("AUSDR.");
+const u8 gOtherText_Jam2[] = _("EINDR.");
+const u8 gOtherText_Status[] = _("STATUS");
+const u8 gOtherText_ExpPoints[] = _("E.-PUNKTE");
+const u8 gOtherText_NextLv[] = _("NÄCHST. Lv.");
+const u8 gOtherText_Ribbons00[] = _("BÄNDER: 00");
+
+const u8 OtherText_Event[] = _("GESCHEHEN");
+const u8 OtherText_Switch[] = _("TAUSCH");
+const u8 OtherText_PokeInfo[] = _("POKéMON-INFO");
+const u8 OtherText_PokeSkills[] = _("POKéMON-FÄHIG.");
+const u8 OtherText_BattleMoves[] = _("ATTACKEN");
+const u8 OtherText_ContestMoves[] = _("WETT.-ATTACKEN");
+const u8 OtherText_Info[] = _("INFO");
+
+const u8 gOtherText_EggLongTime[] = _("Dieses EI braucht sicher\nnoch lange, bis es schlüpft.");
+const u8 gOtherText_EggSomeTime[] = _("Was da wohl schlüpfen wird?\nEs wird sicher lange dauern.");
+const u8 gOtherText_EggSoon[] = _("Es bewegt sich manchmal.\nVielleicht schlüpft es bald?");
+const u8 gOtherText_EggAbout[] = _("Es macht Geräusche.\nSicher schlüpft es bald!");
+const u8 gOtherText_CantForgetHMs[] = _("VM-Attacken können jetzt\nnicht vergessen werden.");
+const u8 gOtherText_PlayersBase[] = _("BASIS v. {PLAYER}");
+const u8 gOtherText_OkayToDeleteFromRegistry[] = _("Soll {STR_VAR_1} aus dem GRUNDBUCH\ngelöscht werden?");
+const u8 gOtherText_RegisteredDataDeleted[] = _("Eingetragene Daten wurden gelöscht.{PAUSE_UNTIL_PRESS}");
+
+const u8 gSecretBaseText_NoRegistry[] = _("Es gibt kein GRUNDBUCH.{PAUSE_UNTIL_PRESS}");
+const u8 SecretBaseText_DelRegist[] = _("EINTR. LÖSCHEN");
+const u8 SecretBaseText_Decorate[] = _("DEKORIEREN");
+const u8 SecretBaseText_PutAway[] = _("WEGNEHMEN");
+const u8 SecretBaseText_Toss[] = _("WEGWERFEN");
+const u8 SecretBaseText_PutOutDecor[] = _("Wähle eine Dekoration \nund stelle sie auf.");
+const u8 SecretBaseText_StoreChosenDecor[] = _("Wähle eine Dekoration und \nübertrage sie auf deinen PC.");
+const u8 SecretBaseText_ThrowAwayDecor[] = _("Wähle eine Dekoration\nund wirf sie weg.");
+const u8 gSecretBaseText_NoDecors[] = _("Es gibt keine Dekoration.{PAUSE_UNTIL_PRESS}");
+const u8 SecretBaseText_Desk[] = _("TISCH");
+const u8 SecretBaseText_Chair[] = _("STUHL");
+const u8 SecretBaseText_Plant[] = _("PFLANZE");
+const u8 SecretBaseText_Ornament[] = _("ORNAMENT");
+const u8 SecretBaseText_Mat[] = _("MATTE");
+const u8 SecretBaseText_Poster[] = _("POSTER");
+const u8 SecretBaseText_Doll[] = _("PUPPE");
+const u8 SecretBaseText_Cushion[] = _("KISSEN");
+const u8 gSecretBaseText_GoldRank[] = _("GOLD");
+const u8 gSecretBaseText_SilverRank[] = _("SILBER");
+const u8 gSecretBaseText_PlaceItHere[] = _("Hierhin platzieren?");
+const u8 gSecretBaseText_CantBePlacedHere[] = _("Kann hier nicht platziert werden.");
+const u8 gSecretBaseText_CancelDecorating[] = _("Dekorieren beenden?");
+const u8 gSecretBaseText_InUseAlready[] = _("Das wurde bereits platziert.");
+const u8 gSecretBaseText_NoMoreDecor[] = _("Mehr kann nicht dekoriert werden. Es\nist nur Platz für {STR_VAR_1} Dekorationen.");
+const u8 gSecretBaseText_NoMoreDecor2[] = _("Mehr kann nicht dekoriert werden. Es\nist nur Platz für {STR_VAR_1} Dekorationen.");
+const u8 gSecretBaseText_DecorMustPlaceOnTable[] = _("Das geht nicht. Es muss auf einem\nTISCH oder Ähnlichem stehen.");
+const u8 gSecretBaseText_DecorCantPlace[] = _("Die Dekoration kann nicht in deinem\neigenen Zimmer aufgestellt werden.");
+const u8 gSecretBaseText_DecorInUse[] = _("Diese Dekoration wurde platziert.\nDu kannst sie nicht wegwerfen.");
+const u8 gSecretBaseText_WillBeDiscarded[] = _("{STR_VAR_1} wird weggeworfen.\nEinverstanden?");
+const u8 gSecretBaseText_DecorThrownAway[] = _("Die Dekoration wurde weggeworfen.");
+const u8 gSecretBaseText_StopPuttingAwayDecor[] = _("Wegnehmen von Dekoration beenden?");
+const u8 gSecretBaseText_NoDecor[] = _("Hier ist keine Dekoration.");
+const u8 gSecretBaseText_ReturnDecor[] = _("Diese Dekoration auf \nden PC übertragen?");
+const u8 gSecretBaseText_DecorReturned[] = _("Die Dekoration wurde auf\nden PC übertragen.");
+const u8 gSecretBaseText_NoDecorInUse[] = _("Es sind keine Dekorationen platziert.{PAUSE_UNTIL_PRESS}");
+const u8 SecretBaseText_Tristan[] = _("TATIAN");
+const u8 SecretBaseText_Philip[] = _("LARS");
+const u8 SecretBaseText_Dennis[] = _("KLAAS");
+const u8 SecretBaseText_Roberto[] = _("HAINER");
+const u8 SecretBaseText_TurnOff[] = _("AUSSCHALTEN");
+const u8 SecretBaseText_Decoration[] = _("DEKORATION");
+const u8 SecretBaseText_ItemStorage[] = _("ITEM-LAGER");
+
+const u8 gPCText_Mailbox[] = _("BRIEFBOX");
+const u8 PCText_DepositItem[] = _("ITEM ABLEGEN");
+const u8 PCText_WithdrawItem[] = _("ITEM NEHMEN");
+const u8 PCText_TossItem[] = _("ITEM IN MÜLL");
+const u8 PCText_StoreItems[] = _("Lagere Items auf deinem PC.");
+const u8 PCText_TakeOutItems[] = _("Nimm Items von deinem PC.");
+const u8 PCText_ThrowAwayItems[] = _("Wirf gelagerte Items weg.");
+
+const u8 gOtherText_NoItems[] = _("Es gibt keine Items.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_NoMoreRoom[] = _("In deinem BEUTEL\nist kein Platz mehr.");
+const u8 gOtherText_HowManyToWithdraw[] = _("Wie viele möchtest\ndu aufnehmen?");
+const u8 gOtherText_WithdrewThing[] = _("{STR_VAR_2} × {STR_VAR_1}\naufgenommen.");
+const u8 OtherText_Read[] = _("LESEN");
+const u8 gOtherText_MoveToBag[] = _("IN BEUTEL GEBEN");
+const u8 OtherText_Give[] = _("GEBEN");
+const u8 gOtherText_NoMailHere[] = _("Hier ist kein BRIEF.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_WhatWillYouDoMail[] = _("Was soll mit dem BRIEF von\n{STR_VAR_1} geschehen?");
+const u8 gOtherText_MessageWillBeLost[] = _("Der Inhalt geht verloren.\nIst das in Ordnung für dich?");
+const u8 gOtherText_BagIsFull[] = _("Der BEUTEL ist voll.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_MailWasReturned[] = _("Der BRIEF, dessen Inhalt gelöscht\nist, wurde im BEUTEL gelagert.{PAUSE_UNTIL_PRESS}");
+const u8 gOtherText_Dad[] = _("VATI");
+const u8 gOtherText_Mom[] = _("MUTTI");
+const u8 gOtherText_Wallace[] = _("WASSILI");
+const u8 gOtherText_Steven[] = _("TROY");
+const u8 gOtherText_Brawly[] = _("KAMILLO");
+const u8 gOtherText_Winona[] = _("WIBKE");
+const u8 gOtherText_Phoebe[] = _("ANTONIA");
+const u8 gOtherText_Glacia[] = _("FROSINA");
+const u8 gContestText_ContestWinner[] = _("-WETTBEWERBSSIEGER\n");
+const u8 gOtherText_Unknown1[] = _(" von ");
+const u8 OtherText_Cool[] = _("COOL.");
+const u8 OtherText_Beauty2[] = _("SCHÖN.");
+const u8 OtherText_Cute[] = _("ANMUT");
+const u8 OtherText_Smart[] = _("KLUG.");
+const u8 OtherText_Tough[] = _("STÄRKE");
+const u8 OtherText_NonstopSuperCool[] = _("Super-mega-cool ist\ndieses umwerfende ");
+const u8 OtherText_Terminator6[] = _("");
+const u8 OtherText_GoodLookingPoke[] = _("Das anbetungswürdige\nPOKéMON: ");
+const u8 OtherText_Terminator7[] = _("");
+const u8 OtherText_MarvelousGreat[] = _("Phantastisch, großartig -\nschlicht brillant: ");
+const u8 OtherText_Terminator8[] = _("");
+const u8 OtherText_CenturyLastVenus[] = _("Ein Bild von einem POKéMON!\nDas wunderschöne ");
+const u8 OtherText_Terminator9[] = _("");
+const u8 OtherText_Terminator10[] = _("Einfach umwerfend, das strahlende\nLächeln von ");
+const u8 OtherText_DazzlingSmile[] = _("");
+const u8 OtherText_PokeCenterIdol[] = _("Superstar des POKéMON-CENTERs -\ndas unvergleichliche ");
+const u8 OtherText_Terminator11[] = _("");
+const u8 OtherText_LovelyAndSweet[] = _("Das liebliche, zuckersüße ");
+const u8 OtherText_Terminator12[] = _("");
+const u8 OtherText_ThePretty[] = _("Das Gewinner-Portrait\nvon dem hübschen ");
+const u8 OtherText_WinningPortrait[] = _("");
+const u8 OtherText_GiveUsWink[] = _("Winke uns zu, du\ngoldiges ");
+const u8 OtherText_Terminator13[] = _("");
+const u8 OtherText_SmartnessMaestro[] = _("Der Gelehrte unter den\nPOKéMON! Das weise ");
+const u8 OtherText_Terminator14[] = _("");
+const u8 OtherText_ChosenPokeAmong[] = _("Das auserwählte und\neinzigartige POKéMON: ");
+const u8 OtherText_Terminator15[] = _("");
+const u8 OtherText_TheExcellent[] = _("Das grandiose ");
+const u8 OtherText_ItsMomentOfElegance[] = _(" -\nder Inbegriff von Eleganz und Stil");
+const u8 OtherText_PowerfullyMuscular[] = _("Der energische, kraftstrotzende\nÜberflieger: ");
+const u8 OtherText_Terminator16[] = _("");
+const u8 OtherText_StrongErEst[] = _("Stark, stärker, am stärksten -\ndas allerstärkste ");
+const u8 OtherText_Terminator17[] = _("");
+const u8 OtherText_MightyTough[] = _("Das mächtige, prächtige - das\nstärkste POKéMON: ");
+const u8 OtherText_Exclamation[] = _("");
+const u8 OtherText_Petalburg[] = _("BLÜTENBURG CITY");
+const u8 OtherText_Slateport[] = _("GRAPHITPORT CITY");
+const u8 OtherText_Littleroot[] = _("WURZELHEIM");
+const u8 OtherText_Lilycove[] = _("SEEGRASULB CITY");
+const u8 OtherText_Dewford[] = _("FAUSTAUHAVEN");
+const u8 OtherText_Enter[] = _("JA");
+const u8 OtherText_Info3[] = _("INFO");
+const u8 OtherText_WhatsAContest[] = _("Der WETTBEWERB");
+const u8 OtherText_TypesOfContest[] = _("WETTBEWERB-Arten");
+const u8 OtherText_Ranks[] = _("Klassen");
+const u8 OtherText_Judging[] = _("Bewertung");
+const u8 OtherText_CoolContest[] = _("COOL.-WETTB.");
+const u8 OtherText_BeautyContest[] = _("SCHÖN.-WETTB.");
+const u8 OtherText_CuteContest[] = _("ANMUT-WETTB.");
+const u8 OtherText_SmartContest[] = _("KLUG.-WETTB.");
+const u8 OtherText_ToughContest[] = _("STÄRKE-WETTB.");
+const u8 OtherText_Decoration[] = _("DEKORATION");
+const u8 OtherText_PackUp[] = _("EINPACKEN");
+const u8 OtherText_Count[] = _("ZÄHLEN");
+const u8 OtherText_Registry[] = _("GRUNDBUCH");
+const u8 OtherText_Information[] = _("INFORMATION");
+const u8 OtherText_Mach[] = _("EIL");
+const u8 OtherText_Acro[] = _("KUNST");
+const u8 OtherText_Poison[] = _("GIF");
+const u8 OtherText_Paralysis[] = _("PAR");
+const u8 OtherText_Sleep[] = _("SLF");
+const u8 OtherText_Burn[] = _("BRT");
+const u8 OtherText_Frozen[] = _("GFR");
+const u8 OtherText_Quit[] = _("ZURÜCK");
+const u8 OtherText_SawIt[] = _("Gesehen");
+const u8 OtherText_NotYet[] = _("Noch nicht");
+const u8 OtherText_Yes[] = _("JA");
+const u8 OtherText_No[] = _("NEIN");
+const u8 OtherText_Info2[] = _("INFO");
+const u8 OtherText_SingleBattle[] = _("EINZELKAMPF");
+const u8 OtherText_DoubleBattle[] = _("DOPPELKAMPF");
+const u8 OtherText_MultiBattle[] = _("MULTIKAMPF");
+const u8 OtherText_MrBriney[] = _("MR. BRACK");
+const u8 OtherText_MakeAChallenge[] = _("Zum Kampf fordern");
+const u8 OtherText_ObtainInformation[] = _("Information dazu");
+const u8 OtherText_Lv50_2[] = _("Lv. 50");
+const u8 OtherText_Lv100_2[] = _("Lv. 100");
+const u8 OtherText_Zigzagoon[] = _("ZIGZACHS");
+const u8 OtherText_Nincada[] = _("NINCADA");
+const u8 OtherText_Poochyena[] = _("FIFFYEN");
+const u8 OtherText_Nincada2[] = _("NINCADA");
+const u8 OtherText_Lotad[] = _("LOTURZEL");
+const u8 OtherText_Roselia[] = _("ROSELIA");
+const u8 OtherText_Shroomish[] = _("KNILZ");
+const u8 OtherText_Nincada3[] = _("NINCADA");
+const u8 OtherText_Surskit[] = _("GEHWEIHER");
+const u8 OtherText_Treecko[] = _("GECKARBOR");
+const u8 OtherText_Torchic[] = _("FLEMMLI");
+const u8 OtherText_Mudkip[] = _("HYDROPI");
+const u8 OtherText_Seedot[] = _("SAMURZEL");
+const u8 OtherText_Shroomish2[] = _("KNILZ");
+const u8 OtherText_Spinda[] = _("PANDIR");
+const u8 OtherText_Shroomish3[] = _("KNILZ");
+const u8 OtherText_Zigzagoon2[] = _("ZIGZACHS");
+const u8 OtherText_Wurmple[] = _("WAUMPEL");
+const u8 OtherText_PokeBall[] = _("POKéBALL");
+const u8 OtherText_SuperPotion[] = _("SUPERTRANK");
+const u8 OtherText_SamePrice[] = _("Zum selben Preis");
+const u8 OtherText_Yen135[] = _("¥135");
+const u8 OtherText_Yen155[] = _("¥155");
+const u8 OtherText_Yen175[] = _("¥175");
+const u8 OtherText_CostMore[] = _("Sie kosten mehr.");
+const u8 OtherText_CostLess[] = _("Sie kosten weniger.");
+const u8 OtherText_SamePrice2[] = _("Gleicher Preis");
+const u8 OtherText_MaleSymbol[] = _("♂");
+const u8 OtherText_FemaleSymbol[] = _("♀");
+const u8 OtherText_Neither[] = _("Weder noch");
+const u8 OtherText_Males[] = _("Männer");
+const u8 OtherText_Females[] = _("Frauen");
+const u8 OtherText_SameNumber[] = _("Gleich viele");
+const u8 OtherText_Male[] = _("Männlich");
+const u8 OtherText_Female[] = _("Weiblich");
+const u8 OtherText_ItDepends[] = _("Ansichtssache");
+const u8 OtherText_Six2[] = _("6");
+const u8 OtherText_Eight2[] = _("8");
+const u8 OtherText_Ten[] = _("10");
+const u8 OtherText_One[] = _("1");
+const u8 OtherText_Two[] = _("2");
+const u8 OtherText_Three[] = _("3");
+const u8 OtherText_Six[] = _("6");
+const u8 OtherText_Seven[] = _("7");
+const u8 OtherText_Eight[] = _("8");
+const u8 OtherText_FreshWater[] = _("TAFELWASSER{CLEAR_TO 72}¥200");
+const u8 OtherText_SodaPop[] = _("SPRUDEL{CLEAR_TO 72}¥300");
+const u8 OtherText_Lemonade[] = _("LIMONADE{CLEAR_TO 72}¥350");
+const u8 OtherText_HowToRide[] = _("RAD FAHREN");
+const u8 OtherText_HowToTurn[] = _("KURVEN FAHREN");
+const u8 OtherText_SandySlopes[] = _("SANDHÜGEL");
+const u8 OtherText_Wheelies[] = _("WHEELIES");
+const u8 OtherText_BunnyHops[] = _("HOPPELN");
+const u8 OtherText_Jumping[] = _("SPRINGEN");
+const u8 OtherText_Satisfied[] = _("Zufrieden");
+const u8 OtherText_Dissatisfied[] = _("Unzufrieden");
+const u8 OtherText_Deepseatooth[] = _("ABYSSZAHN");
+const u8 OtherText_Deepseascale[] = _("ABYSSPLATTE");
+const u8 OtherText_BlueFlute2[] = _("BLAUE FLÖTE");
+const u8 OtherText_YellowFlute2[] = _("GELBE FLÖTE");
+const u8 OtherText_RedFlute2[] = _("ROTE FLÖTE");
+const u8 OtherText_WhiteFlute2[] = _("WEISSE FLÖTE");
+const u8 OtherText_BlackFlute2[] = _("SCHWRZ. FLÖTE");
+const u8 OtherText_GlassChair[] = _("GLASSTUHL");
+const u8 OtherText_GlassDesk[] = _("GLASTISCH");
+const u8 OtherText_TreeckoDoll[] = _("GECKARBOR-PUPPE 1.000 M.");
+const u8 OtherText_TorchicDoll[] = _("FLEMMLI-PUPPE 1.000 M.");
+const u8 OtherText_MudkipDoll[] = _("HYDROPI-PUPPE 1.000 M.");
+const u8 OtherText_50Coins[] = _(" 50 MÜNZEN ¥1.000");
+const u8 OtherText_500Coins[] = _("500 MÜNZEN ¥10.000");
+const u8 OtherText_Excellent[] = _("Klasse!");
+const u8 OtherText_NotSoHot[] = _("Naja...");
+const u8 OtherText_RedShard[] = _("PURPURSTÜCK");
+const u8 OtherText_YellowShard[] = _("GELBSTÜCK");
+const u8 OtherText_BlueShard[] = _("INDIGOSTÜCK");
+const u8 OtherText_GreenShard[] = _("GRÜNSTÜCK");
+const u8 OtherText_BattleTower[] = _("DUELLTURM");
+const u8 OtherText_Right[] = _("Rechts");
+const u8 OtherText_Left[] = _("Links");
+const u8 OtherText_TM32[] = _("TM32 1.500 MÜNZEN");
+const u8 OtherText_TM29[] = _("TM29 3.500 MÜNZEN");
+const u8 OtherText_TM35[] = _("TM35 4.000 MÜNZEN");
+const u8 OtherText_TM24[] = _("TM24 4.000 MÜNZEN");
+const u8 OtherText_TM13[] = _("TM13 4.000 MÜNZEN");
+const u8 OtherText_1F_2[] = _("EG");
+const u8 OtherText_2F_2[] = _("1S");
+const u8 OtherText_3F_2[] = _("2S");
+const u8 OtherText_4F_2[] = _("3S");
+const u8 OtherText_5F_2[] = _("4S");
+const u8 OtherText_Cool2[] = _("COOL.");
+const u8 OtherText_Beauty3[] = _("SCHÖN.");
+const u8 OtherText_Cute2[] = _("ANMUT");
+const u8 OtherText_Smart2[] = _("KLUG.");
+const u8 OtherText_Tough2[] = _("STÄRKE");
+const u8 OtherText_Normal[] = _("NORMAL");
+const u8 OtherText_Super[] = _("SUPER");
+const u8 OtherText_Hyper[] = _("HYPER");
+const u8 OtherText_Master[] = _("MASTER");
+const u8 OtherText_Cool3[] = _("COOL.");
+const u8 OtherText_Beauty4[] = _("SCHÖN.");
+const u8 OtherText_Cute3[] = _("ANMUT");
+const u8 OtherText_Smart3[] = _("KLUG.");
+const u8 OtherText_Tough3[] = _("STÄRKE");
+const u8 OtherText_Items[] = _("ITEM");
+const u8 OtherText_KeyItems[] = _("BASIS-ITEM");
+const u8 OtherText_Balls[] = _("BALL");
+const u8 OtherText_TMsHMs[] = _("TM/VM");
+const u8 OtherText_Berries[] = _("BEEREN");
+
+const u8 gPCText_SomeonesPC[] = _("JEMANDES PC");
+const u8 gPCText_LanettesPC[] = _("LANETTES PC");
+const u8 gPCText_PlayersPC[] = _("PC von {PLAYER}");
+const u8 gPCText_HallOfFame[] = _("RUHMESHALLE");
+const u8 gPCText_LogOff[] = _("AUSLOGGEN");
+
+const u8 gOtherText_99Times[] = _("99-mal +");
+const u8 gOtherText_1Minute[] = _("1 Minute +");
+const u8 gOtherText_Seconds[] = _(" Sekunden");
+const u8 gOtherText_Times[] = _("-mal$.");
+const u8 gOtherText_BigGuy[] = _("");
+const u8 gOtherText_BigGirl[] = _("");
+const u8 gOtherText_Son[] = _("Sohn");
+const u8 gOtherText_Daughter[] = _("Tochter");
+const u8 OtherText_BlueFlute[] = _("BLAUE FLÖTE");
+const u8 OtherText_YellowFlute[] = _("GELBE FLÖTE");
+const u8 OtherText_RedFlute[] = _("ROTE FLÖTE");
+const u8 OtherText_WhiteFlute[] = _("WEISSE FLÖTE");
+const u8 OtherText_BlackFlute[] = _("SCHWRZ. FLÖTE");
+const u8 OtherText_PrettyChair[] = _("EDLER STUHL");
+const u8 OtherText_PrettyDesk[] = _("EDLER TISCH");
+const u8 OtherText_1F[] = _("EG");
+const u8 OtherText_2F[] = _("1S");
+const u8 OtherText_3F[] = _("2S");
+const u8 OtherText_4F[] = _("3S");
+const u8 OtherText_5F[] = _("4S");
+const u8 OtherText_6F[] = _("5S");
+const u8 OtherText_7F[] = _("6S");
+const u8 OtherText_8F[] = _("7S");
+const u8 OtherText_9F[] = _("8S");
+const u8 OtherText_10F[] = _("9S");
+const u8 OtherText_11F[] = _("10S");
+const u8 OtherText_B1F[] = _("U1S");
+const u8 OtherText_B2F[] = _("U2S");
+const u8 OtherText_B3F[] = _("U3S");
+const u8 OtherText_B4F[] = _("U4S");
+const u8 OtherText_Rooftop[] = _("DACH");
+
+const u8 gOtherText_NowOn[] = _("Momentan im");
+
+const u8 gPCText_Cancel[] = _("ZURÜCK");
+
+const u8 PCText_ExitBox[] = _("Die BOX verlassen?");
+const u8 PCText_WhatYouDo[] = _("Was möchtest du tun?");
+const u8 PCText_PickATheme[] = _("Wähle eine Motivsammlung.");
+const u8 PCText_PickAWallpaper[] = _("Wähle ein Hintergrundmotiv.");
+const u8 PCText_IsSelected[] = _(" ist ausgewählt.");
+const u8 PCText_JumpToWhichBox[] = _("Zu welcher BOX wechseln?");
+const u8 PCText_DepositInWhichBox[] = _("In welche BOX ablegen?");
+const u8 PCText_WasDeposited[] = _(" wurde abgelegt.");
+const u8 PCText_BoxIsFull[] = _("Die BOX ist voll.");
+const u8 PCText_ReleasePoke[] = _("Dieses POKéMON freilassen?");
+const u8 PCText_WasReleased[] = _("{STR_VAR_1} ist wieder frei.");
+const u8 PCText_ByeBye[] = _("Tschüss, !");
+const u8 PCText_MarkPoke[] = _("Markiere dein POKéMON.");
+const u8 PCText_LastPoke[] = _("Dein letztes POKéMON!");
+const u8 PCText_PartyFull[] = _("Dein Team ist voll!");
+const u8 PCText_HoldingPoke[] = _("Du hältst ein POKéMON!");
+const u8 PCText_WhichOneWillTake[] = _("Welches wählst du aus?");
+const u8 PCText_CantReleaseEgg[] = _("Du kannst kein EI freilass.!");
+const u8 PCText_ContinueBox[] = _("Die BOX weiter bearbeiten?");
+const u8 PCText_CameBack[] = _(" kam zurück!");
+const u8 PCText_Worried[] = _("War es in Sorge um dich?");
+const u8 PCText_Surprise[] = _("... ... ... ... ...!");
+const u8 PCText_PleaseRemoveMail[] = _("BRIEF bitte entfernen.");
+const u8 PCText_Cancel2[] = _("ZURÜCK");
+const u8 PCText_Deposit[] = _("ABLEGEN");
+const u8 PCText_Withdraw[] = _("NEHMEN");
+const u8 PCText_Switch[] = _("TAUSCHEN");
+const u8 PCText_Move[] = _("BEWEGEN");
+const u8 PCText_Place[] = _("ABSETZEN");
+const u8 PCText_Summary[] = _("BERICHT");
+const u8 PCText_Release[] = _("ENTLASS.");
+const u8 PCText_Mark[] = _("MARKIER.");
+const u8 PCText_Name[] = _("BENENNEN");
+const u8 PCText_Jump[] = _("WECHSELN");
+const u8 PCText_Wallpaper[] = _("MOTIV");
+const u8 PCText_Scenery1[] = _("LISTE 1");
+const u8 PCText_Scenery2[] = _("LISTE 2");
+const u8 PCText_Scenery3[] = _("LISTE 3");
+const u8 PCText_Etc[] = _("SONSTIGES");
+const u8 PCText_Forest[] = _("WALD");
+const u8 PCText_City[] = _("MAUER");
+const u8 PCText_Desert[] = _("WÜSTE");
+const u8 PCText_Savanna[] = _("STEPPE");
+const u8 PCText_Crag[] = _("GERÖLL");
+const u8 PCText_Volcano[] = _("VULKAN");
+const u8 PCText_Snow[] = _("SCHNEE");
+const u8 PCText_Cave[] = _("HÖHLE");
+const u8 PCText_Beach[] = _("STRAND");
+const u8 PCText_Seafloor[] = _("TIEFSEE");
+const u8 PCText_River[] = _("FLUSS");
+const u8 PCText_Sky[] = _("HIMMEL");
+const u8 PCText_Polka[] = _("PUNKTE");
+const u8 PCText_PokeCenter[] = _("POKéCENTER");
+const u8 PCText_Machine[] = _("MASCHINE");
+const u8 PCText_Plain[] = _("WEISS");
+const u8 PCText_WhatDoYouWant[] = _("Was willst du tun?");
+const u8 PCText_WithdrawPoke[] = _("POKéMON NEHMEN");
+const u8 PCText_DepositPoke[] = _("POKéMON ABLEGEN");
+const u8 PCText_MovePoke[] = _("POKéMON BEWEGEN");
+const u8 PCText_SeeYa[] = _("TSCHÜSSI!");
+const u8 PCText_MovePokeToParty[] = _("Nimm POKéMON aus einer\nBOX in dein Team auf.");
+const u8 PCText_StorePokeInBox[] = _("Lagere POKéMON aus deinem\nTeam in einer BOX.");
+const u8 PCText_OrganizeBoxesParty[] = _("Ordne POKéMON in den BOXEN\nund/oder in deinem Team.");
+const u8 PCText_ReturnToPrevMenu[] = _("Zurück zum vorherigen Menü.");
+
+const u8 gPCText_OnlyOne[] = _("Du führst nur ein POKéMON mit dir.");
+const u8 gPCText_PartyFull2[] = _("Dein Team ist voll!");
+const u8 gPCText_BOX[] = _("BOX ");
+
+// pokenav
+const u8 PCText_CheckMap[] = _("{CLEAR 0}Karte der HOENN-Region");
+const u8 PCText_CheckPoke[] = _("{CLEAR 0}POKéMON-Daten im Detail");
+const u8 PCText_CheckTrainer[] = _("{CLEAR 0}TRAINER-Daten im Detail");
+const u8 PCText_CheckRibbons[] = _("{CLEAR 0}Einsicht über BÄNDER");
+const u8 PCText_PutAwayNav[] = _("{CLEAR 0}POKéNAV schließen");
+const u8 PCText_NoRibbonWin[] = _("{CLEAR 0}Es gibt keine BÄNDER.");
+const u8 PCText_NoTrainers[] = _("{CLEAR 0}Keine TRAINER-Daten aufgenommen");
+const u8 PCText_CheckParty[] = _("{CLEAR 0}Daten über POKéMON des Teams");
+const u8 PCText_CheckPokeAll[] = _("{CLEAR 0}Daten über alle POKéMON");
+const u8 PCText_ReturnToNav[] = _("{CLEAR 0}Zurück zum POKéNAV-Menü");
+const u8 PCText_FindCool[] = _("{CLEAR 0}Nach coolen POKéMON suchen.");
+const u8 PCText_FindBeauty[] = _("{CLEAR 0}Nach schönen POKéMON suchen.");
+const u8 PCText_FindCute[] = _("{CLEAR 0}Nach anmutigen POKéMON suchen.");
+const u8 PCText_FindSmart[] = _("{CLEAR 0}Nach klugen POKéMON suchen.");
+const u8 PCText_FindTough[] = _("{CLEAR 0}Nach starken POKéMON suchen.");
+const u8 PCText_ReturnToCondition[] = _("{CLEAR 0}Zurück zum Menüpunkt ZUSTAND");
+
+const u8 gOtherText_NumberRegistered[] = _("Registrierte:");
+const u8 gOtherText_NumberBattles[] = _("Kämpfe:");
+const u8 gOtherText_Strategy[] = _("{PALETTE 5}TAKTIK:");
+const u8 gOtherText_TrainersPokemon[] = _("{PALETTE 5}POKéMON:");
+const u8 gOtherText_SelfIntroduction[] = _("{PALETTE 5}MOTTO:");
+const u8 gOtherText_Nature2[] = _("NATUR/");
+const u8 gOtherText_InParty[] = _("IM TEAM");
+const u8 gOtherText_Number[] = _("Nr. ");
+const u8 gOtherText_Ribbons[] = _("BÄNDER");
+const u8 OtherText_MakeProfilePage1[] = _("Erstelle dein eigenes Profil:");
+const u8 OtherText_MakeProfilePage2[] = _("Kombiniere 4 Wörter/Ausdrücke.");
+const u8 OtherText_MakeMessagePage1[] = _("Verwende 6 Ausdrücke.");
+const u8 OtherText_MakeMessagePage2[] = _("Max. pro Zeile 2-mal 12 Buchstaben");
+const u8 OtherText_DescribeFeelingsPage1[] = _("Finde Worte, die deine momentanen");
+const u8 OtherText_DescribeFeelingsPage2[] = _("Empfindungen beschreiben.");
+const u8 OtherText_WithFourPhrases[] = _("Verwende 4 Ausdrücke und");
+const u8 OtherText_CombineNinePhrasesPage1[] = _("Kombiniere 9 Ausdrücke und");
+const u8 OtherText_CombineNinePhrasesPage2[] = _("erstelle eine Nachricht.");
+const u8 OtherText_ImproveBardSongPage1[] = _("Ändere nur 1 Wort/Ausdruck");
+const u8 OtherText_ImproveBardSongPage2[] = _("und verbessere das BARDEN-Lied.");
+const u8 OtherText_YourProfile[] = _("Dein Profil");
+const u8 OtherText_YourFeelingBattle[] = _("Deine Gefühle zum Kampfbeginn");
+const u8 OtherText_SetWinMessage[] = _("Deine Worte im Fall des Sieges");
+const u8 OtherText_SetLossMessage[] = _("Deine Worte im Fall der Niederlage");
+const u8 OtherText_TheAnswer[] = _("Die Antwort");
+const u8 OtherText_MailMessage[] = _("Der Inhalt des BRIEFES");
+const u8 OtherText_MailSalutation[] = _("Der Gruß des BRIEFES");
+const u8 OtherText_NewSong[] = _("Das neue Lied");
+const u8 OtherText_CombineTwoPhrasesPage1[] = _("Kombiniere 2 Ausdrücke und");
+const u8 OtherText_CombineTwoPhrasesPage2[] = _("schaffe einen hippen Spruch.");
+const u8 OtherText_ConfirmTrendyPage1[] = _("Der hippe Spruch");
+const u8 OtherText_ConfirmTrendyPage2[] = _("lautet also so. O.K.?");
+const u8 OtherText_HipsterPage1[] = _("Kombiniere 2 Ausdrücke und");
+const u8 OtherText_HipsterPage2[] = _("bringe ihr einen guten Spruch bei.");
+
+const u8 gOtherText_TextDeletedConfirmPage1[] = _("Der gesamte verfasste Text wird");
+const u8 gOtherText_TextDeletedConfirmPage2[] = _("gelöscht. Einverstanden?");
+const u8 gOtherText_QuitEditing[] = _("Das Textverfassen beenden?");
+const u8 gOtherText_EditedTextNoSavePage1[] = _("Der Text wird nicht gespeichert.");
+const u8 gOtherText_EditedTextNoSavePage2[] = _("Ist das in Ordnung?");
+const u8 gOtherText_EnterAPhraseOrWord[] = _("Bitte Wort/Ausdruck eingeben.");
+const u8 gOtherText_TextNoDelete[] = _("Gesamter Text ist nicht löschbar.");
+const u8 gOtherText_OnlyOnePhrase[] = _("Nur ein Ausdruck ist änderbar.");
+const u8 gOtherText_OriginalSongRestored[] = _("Das Lied wird wiederhergestellt.");
+const u8 gOtherText_TrendyAlready[] = _("Das ist bereits hip.");
+const u8 gOtherText_CombineTwoPhrases[] = _("Kombiniere 2 Wörter/Ausdrücke.");
+const u8 gOtherText_QuitGivingInfo[] = _("Keine weiteren Infos liefern?");
+const u8 gOtherText_StopGivingMail[] = _("POKéMON keinen BRIEF geben?");
+const u8 gOtherText_Profile[] = _("PROFIL");
+const u8 gOtherText_AtBattleStart[] = _("Zum Kampfbeginn");
+const u8 gOtherText_UponWinningBattle[] = _("Über den Sieg");
+const u8 gOtherText_UponLosingBattle[] = _("Über die Niederlage");
+
+// mauville_old_man?
+const u8 gOtherText_TheBardsSong[] = _("Das BARDEN-Lied");
+const u8 gOtherText_WhatsHipHappening[] = _("Was ist hip? Was ist top?");
+const u8 gOtherText_Interview[] = _("Interview");
+const u8 gOtherText_GoodSaying[] = _("Guter Spruch");
+const u8 OtherText_SoPretty[] = _(" so hübsch!");
+const u8 OtherText_SoDarling[] = _(" so reizend!");
+const u8 OtherText_SoRelaxed[] = _(" so lässig!");
+const u8 OtherText_SoSunny[] = _(" so überwältigend!");
+const u8 OtherText_SoDesirable[] = _(" so erstrebenswert!");
+const u8 OtherText_SoExciting[] = _(" so aufregend!");
+const u8 OtherText_SoAmusing[] = _(" so amüsant!");
+const u8 OtherText_SoMagical[] = _(" so zauberhaft!");
+
+const u8 gOtherText_Is[] = _(" klingt");
+const u8 gOtherText_DontYouAgree[] = _("\nFindest du nicht auch?");
+
+const u8 OtherText_WantVacationNicePlace[] = _("Ich will unbedingt verreisen!\nKennst du ein hübsches Reiseziel?");
+const u8 OtherText_BoughtCrayonsIsNice[] = _("Ich habe 120 verschiedene Farbstifte\ngekauft! Das ist doch toll, oder?");
+const u8 OtherText_IfWeCouldFloat[] = _("Wäre es nicht herrlich, wir könnten auf\neiner Luftblasenwolke davonschweben?");
+const u8 OtherText_SandWashesAwayMakeSad[] = _("Eine Botschaft in Sand geschrieben\nwird weggespült. Das ist traurig.");
+const u8 OtherText_WhatsBottomSeaLike[] = _("Wie der Meeresgrund wohl ist? Ich\nwürde ihn so gerne einmal erleben!");
+const u8 OtherText_SeeSettingSun[] = _("Sehnst du dich beim Anblick der unter-\ngehenden Sonne nach deinem Zuhause?");
+const u8 OtherText_LyingInGreenGrass[] = _("Einfach so im grünen Gras liegen...\nOh, das ist so was von angenehm!");
+const u8 OtherText_SecretBasesWonderful[] = _("GEHEIMBASEN sind superklasse!\nFindest du das nicht auch aufregend?");
+
+const u8 OtherText_PokeLeague[] = _("POKéMON LIGA");
+const u8 OtherText_PokeCenter[] = _("POKéMON-CENTER");
+
+const u8 gOtherText_GetsAPokeBlock[] = _(" erhält einen {POKEBLOCK}?");
+
+const u8 OtherText_Coolness[] = _("Coolness ");
+const u8 OtherText_Beauty[] = _("Schönheit ");
+const u8 OtherText_Cuteness[] = _("Anmut ");
+const u8 OtherText_Smartness[] = _("Klugheit ");
+const u8 OtherText_Toughness[] = _("Stärke ");
+
+const u8 gOtherText_WasEnhanced[] = _("wurde erhöht!");
+const u8 gOtherText_NothingChanged[] = _("Keine Veränderung eingetreten!");
+const u8 gOtherText_WontEat[] = _("Es will nicht mehr essen.");
+
+const u8 gSystemText_SaveFailedBackupCheck[] = _("Speicherfehler\nBackup Memory wird geprüft.\nBitte warten...\n{COLOR RED}“Benötigte Zeit: 1 Minute”");
+const u8 gSystemText_BackupDamagedGameContinue[] = _("Backup Memory defekt oder\ninterne Batterie verbraucht!\nSpiel kann fortgesetzt werden.\nWeiteres Speichern nicht möglich.");
+const u8 gSystemText_GameplayEnded[] = _("{COLOR RED}“Spiel fortsetzen nicht möglich.\nZurück zum Titelbildschirm...”");
+const u8 gSystemText_CheckCompleteSaveAttempt[] = _("Überprüfung beendet.\nNeuer Speicherversuch erfolgt.\nBitte warten...");
+const u8 gSystemText_SaveCompletedGameEnd[] = _("Speichern beendet.\n{COLOR RED}“Spiel fortsetzen nicht möglich.\nZurück zum Titelbildschirm.”");
+const u8 gSystemText_SaveCompletedPressA[] = _("Speichern beendet.\n{COLOR RED}“Bitte A-Knopf drücken.”");
+
+const u8 gOtherText_Ferry[] = _("FÄHRE");
+const u8 gOtherText_SecretBase[] = _("GEHEIMBASIS");
+const u8 gOtherText_Hideout[] = _("VERSTECK");
+
+const u8 gSystemText_ResetRTCPrompt[] = _("Echtzeituhr zurücksetzen?\nA: Bestätigen, B: Zurück");
+const u8 gSystemText_PresentTime[] = _("Aktuelle Uhrzeit im Spiel");
+const u8 gSystemText_PreviousTime[] = _("Vorherige Uhrzeit im Spiel");
+const u8 gSystemText_PleaseResetTime[] = _("Bitte die Zeit zurückstellen.");
+const u8 gSystemText_ClockResetDataSave[] = _("Die Uhr wurde zurückgestellt. Daten\nwerden gesichert. Bitte warten...");
+const u8 gSystemText_SaveCompleted[] = _("Speichern beendet.");
+const u8 gSystemText_SaveFailed[] = _("Speichern fehlgeschlagen.");
+const u8 gSystemText_NoSaveFileNoTime[] = _("Es existiert kein Speicherstand. Uhr-\nzeit kann nicht eingestellt werden.");
+const u8 gSystemText_ClockAdjustmentUsable[] = _("Das spielinterne Zeiteingabe-\nSystem ist jetzt verfügbar.");
+const u8 gSystemText_Saving[] = _("SPEICHERVORGANG...\nGERÄT NICHT AUSSCHALTEN!");
+#endif
diff --git a/src/text.c b/src/text.c
index cc3dab547..7be72833a 100644
--- a/src/text.c
+++ b/src/text.c
@@ -2338,7 +2338,7 @@ u8 sub_8003490(struct Window *win, u8 c, u16 tileDataStartOffset, u8 left, u8 to
return retVal;
}
-void sub_80034D4(u8 *tileData, u8 *text)
+void sub_80034D4(u8 *tileData, const u8 *text)
{
sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6C74, tileData, text);
}
@@ -2474,12 +2474,18 @@ static u8 UpdateWindowText(struct Window *win)
return 0;
}
+#if defined(ENGLISH)
+#define SUB_800374C_LINE_LENGTH 26
+#elif defined(GERMAN)
+#define SUB_800374C_LINE_LENGTH 27
+#endif
+
u8 sub_800374C(struct Window *win)
{
u8 retVal;
sWaitType = 1;
- sLineLength = 26;
+ sLineLength = SUB_800374C_LINE_LENGTH;
retVal = UpdateWindowText(win);
sLineLength = 26;
sWaitType = 0;
diff --git a/src/trainer_card.c b/src/trainer_card.c
index a0b1cf6d1..e6ed79c15 100644
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -42,11 +42,18 @@ struct Struct2000000
/*0x9C*/ u8 language; // 0x9C
};
-extern struct Struct2000000 unk_2000000;
+extern u8 ewram[];
+#define ewram0 (*(struct Struct2000000 *)(ewram))
+
extern struct LinkPlayerMapObject gLinkPlayerMapObjects[];
extern struct TrainerCard gTrainerCards[4];
-extern u8 gUnknown_03004DE0[]; // TODO: find out correct type
+struct UnknownStruct1
+{
+ u8 filler0[0x780];
+ u16 unk780[160];
+};
+extern struct UnknownStruct1 gUnknown_03004DE0;
extern u8 gUnknown_083B5EF4[];
extern u16 *gUnknown_083B5EF8[5];
@@ -67,6 +74,9 @@ extern u8 gOtherText_TradeRecord[];
extern u8 gOtherText_Boy[];
extern u8 gOtherText_Girl[];
+extern bool8 (*const gUnknown_083B5EBC[])(struct Task *);
+extern bool8 (*const gUnknown_083B5ED8[])(struct Task *);
+
// Other signature than on save_menu_util.h
void FormatPlayTime(u8 *playtime, u16 hours, u16 minutes, s16 colon);
@@ -151,29 +161,16 @@ void sub_8093110(Callback arg1)
{
sub_80932AC(arg1);
SetMainCallback2(sub_8093174);
- unk_2000000.language = GAME_LANGUAGE;
+ ewram0.language = GAME_LANGUAGE;
}
void sub_8093130(u8 playerIndex, Callback arg2)
{
- struct Struct2000000* r2;
- struct LinkPlayer* r3;
- struct LinkPlayerMapObject* r4;
- u8 linkPlayerId;
-
sub_80932E4(playerIndex, arg2);
SetMainCallback2(sub_8093174);
-
- r2 = &unk_2000000;
- r3 = gLinkPlayers;
- r4 = gLinkPlayerMapObjects;
-
- linkPlayerId = r4[playerIndex].linkPlayerId;
-
- r2->language = r3[linkPlayerId].language;
+ ewram0.language = gLinkPlayers[gLinkPlayerMapObjects[playerIndex].linkPlayerId].language;
}
-
static void sub_8093174(void)
{
switch (gMain.state)
@@ -236,14 +233,14 @@ static void sub_8093254(void)
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
- unk_2000000.var_6++;
- if (unk_2000000.var_6 >= 60)
+ ewram0.var_6++;
+ if (ewram0.var_6 >= 60)
{
- unk_2000000.var_6 = 0;
- unk_2000000.var_5 ^= 1;
+ ewram0.var_6 = 0;
+ ewram0.var_5 ^= 1;
}
- if (unk_2000000.var_4)
- DmaCopy16(3, gUnknown_03004DE0, gUnknown_03004DE0 + 0x780, 320);
+ if (ewram0.var_4)
+ DmaCopy16(3, gUnknown_03004DE0.filler0, gUnknown_03004DE0.unk780, sizeof(gUnknown_03004DE0.unk780));
}
static void sub_80932AC(Callback callBack)
@@ -268,20 +265,20 @@ void sub_8093324(void)
{
u8 taskId = FindTaskIdByFunc(nullsub_60);
struct Task *task = &gTasks[taskId];
- unk_2000000.var_1 = task->data[TD_0];
+ ewram0.var_1 = task->data[TD_0];
- LoadWordFromTwoHalfwords((u16 *)&task->data[TD_CALLBACK], (u32 *)&unk_2000000.var_60);
+ LoadWordFromTwoHalfwords((u16 *)&task->data[TD_CALLBACK], (u32 *)&ewram0.var_60);
- if (unk_2000000.var_1)
+ if (ewram0.var_1)
{
struct TrainerCard(*trainerCards)[4] = &gTrainerCards;
s16 var = task->data[TD_1];
struct TrainerCard *dest = &(*trainerCards)[var];
- memcpy(&unk_2000000.var_64, dest, sizeof(struct TrainerCard));
+ memcpy(&ewram0.var_64, dest, sizeof(struct TrainerCard));
}
else
{
- sub_8093390(&unk_2000000.var_64);
+ sub_8093390(&ewram0.var_64);
}
}
@@ -426,271 +423,138 @@ static void sub_8093550(void)
REG_IME = backup;
REG_DISPSTAT |= DISPSTAT_VBLANK_INTR | DISPSTAT_HBLANK_INTR;
- REG_DISPCNT = 0x1f40;
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
}
-__attribute__((naked))
-void sub_8093598()
+void sub_8093598(void)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- sub sp, 0x4\n\
- movs r2, 0xC0\n\
- lsls r2, 19\n\
- movs r3, 0x80\n\
- lsls r3, 9\n\
- mov r4, sp\n\
- movs r6, 0\n\
- ldr r1, _080935E4 @ =0x040000d4\n\
- movs r5, 0x80\n\
- lsls r5, 5\n\
- ldr r7, _080935E8 @ =0x81000800\n\
- movs r0, 0x81\n\
- lsls r0, 24\n\
- mov r12, r0\n\
-_080935B6:\n\
- strh r6, [r4]\n\
- mov r0, sp\n\
- str r0, [r1]\n\
- str r2, [r1, 0x4]\n\
- str r7, [r1, 0x8]\n\
- ldr r0, [r1, 0x8]\n\
- adds r2, r5\n\
- subs r3, r5\n\
- cmp r3, r5\n\
- bhi _080935B6\n\
- strh r6, [r4]\n\
- mov r0, sp\n\
- str r0, [r1]\n\
- str r2, [r1, 0x4]\n\
- lsrs r0, r3, 1\n\
- mov r2, r12\n\
- orrs r0, r2\n\
- str r0, [r1, 0x8]\n\
- ldr r0, [r1, 0x8]\n\
- add sp, 0x4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080935E4: .4byte 0x040000d4\n\
-_080935E8: .4byte 0x81000800\n\
- .syntax divided\n");
+ u8 *addr = (void *)VRAM;
+ u32 size = 0x10000;
+
+ while (1)
+ {
+ DmaFill16(3, 0, addr, 0x1000);
+ addr += 0x1000;
+ size -= 0x1000;
+ if (size <= 0x1000)
+ {
+ DmaFill16(3, 0, addr, size);
+ break;
+ }
+ }
}
-__attribute__((naked))
-void sub_80935EC()
+void sub_80935EC(void)
{
- asm(".syntax unified\n\
- sub sp, 0x4\n\
- movs r2, 0xE0\n\
- lsls r2, 19\n\
- mov r1, sp\n\
- movs r0, 0\n\
- strh r0, [r1]\n\
- ldr r0, _08093608 @ =0x040000d4\n\
- str r1, [r0]\n\
- str r2, [r0, 0x4]\n\
- ldr r1, _0809360C @ =0x81000200\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- add sp, 0x4\n\
- bx lr\n\
- .align 2, 0\n\
-_08093608: .4byte 0x040000d4\n\
-_0809360C: .4byte 0x81000200\n\
- .syntax divided\n");
+ void *addr = (void *)OAM;
+
+ DmaFill16(3, 0, addr, 0x400);
}
-__attribute__((naked))
-void sub_8093610()
+void sub_8093610(void)
{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- ldr r5, _08093664 @ =REG_BG0CNT\n\
- movs r1, 0\n\
- strh r1, [r5]\n\
- ldr r2, _08093668 @ =REG_BG1CNT\n\
- strh r1, [r2]\n\
- ldr r3, _0809366C @ =REG_BG2CNT\n\
- strh r1, [r3]\n\
- ldr r4, _08093670 @ =REG_BG3CNT\n\
- strh r1, [r4]\n\
- ldr r0, _08093674 @ =REG_BG0HOFS\n\
- strh r1, [r0]\n\
- adds r0, 0x2\n\
- strh r1, [r0]\n\
- adds r0, 0x2\n\
- strh r1, [r0]\n\
- adds r0, 0x2\n\
- strh r1, [r0]\n\
- adds r0, 0x2\n\
- strh r1, [r0]\n\
- adds r0, 0x2\n\
- strh r1, [r0]\n\
- adds r0, 0x2\n\
- strh r1, [r0]\n\
- adds r0, 0x2\n\
- strh r1, [r0]\n\
- ldr r1, _08093678 @ =0x00001e08\n\
- adds r0, r1, 0\n\
- strh r0, [r5]\n\
- ldr r1, _0809367C @ =0x00000801\n\
- adds r0, r1, 0\n\
- strh r0, [r2]\n\
- ldr r1, _08093680 @ =0x00000902\n\
- adds r0, r1, 0\n\
- strh r0, [r3]\n\
- ldr r1, _08093684 @ =0x00000a03\n\
- adds r0, r1, 0\n\
- strh r0, [r4]\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08093664: .4byte 0x4000008 @ REG_BG0CNT\n\
-_08093668: .4byte 0x400000A @ REG_BG1CNT\n\
-_0809366C: .4byte 0x400000C @ REG_BG2CNT\n\
-_08093670: .4byte 0x400000E @ REG_BG3CNT\n\
-_08093674: .4byte 0x4000010 @ REG_BG0HOFS\n\
-_08093678: .4byte 0x00001e08\n\
-_0809367C: .4byte 0x00000801\n\
-_08093680: .4byte 0x00000902\n\
-_08093684: .4byte 0x00000a03\n\
- .syntax divided\n");
+ REG_BG0CNT = 0;
+ REG_BG1CNT = 0;
+ REG_BG2CNT = 0;
+ REG_BG3CNT = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+
+ REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(30) | BGCNT_16COLOR | BGCNT_TXT256x256;
+ REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(8) | BGCNT_16COLOR | BGCNT_TXT256x256;
+ REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(9) | BGCNT_16COLOR | BGCNT_TXT256x256;
+ REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(10) | BGCNT_16COLOR | BGCNT_TXT256x256;
}
-#ifdef NONMATCHING
static void sub_8093688(void)
{
- int i;
+ u8 i;
- asm_comment("WIP");
sub_8093324();
- unk_2000000.var_0 = FALSE;
- unk_2000000.var_3 = FALSE;
- unk_2000000.var_4 = FALSE;
+ ewram0.var_0 = FALSE;
+ ewram0.var_3 = FALSE;
+ ewram0.var_4 = FALSE;
- unk_2000000.var_2 = unk_2000000.var_64.stars;
+ ewram0.var_2 = ewram0.var_64.stars;
- unk_2000000.var_5 = FALSE;
- unk_2000000.var_6 = FALSE;
+ ewram0.var_5 = FALSE;
+ ewram0.var_6 = FALSE;
for (i = 0; i < 4; i++)
{
- sub_80EB3FC(unk_2000000.var_20[i], unk_2000000.var_64.var_28[i]);
+ sub_80EB3FC(ewram0.var_20[i], ewram0.var_64.var_28[i]);
}
sub_80936D4();
}
-#else
-
-__attribute__((naked))
-static void sub_8093688(void)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- bl sub_8093324\n\
- ldr r2, _080936D0 @ =0x02000000\n\
- movs r1, 0\n\
- strb r1, [r2]\n\
- strb r1, [r2, 0x3]\n\
- strb r1, [r2, 0x4]\n\
- adds r0, r2, 0\n\
- adds r0, 0x65\n\
- ldrb r0, [r0]\n\
- strb r0, [r2, 0x2]\n\
- strb r1, [r2, 0x5]\n\
- strb r1, [r2, 0x6]\n\
- movs r4, 0\n\
- adds r6, r2, 0\n\
- adds r6, 0x20\n\
- adds r5, r2, 0\n\
- adds r5, 0x8C\n\
-_080936AE:\n\
- lsls r0, r4, 4\n\
- adds r0, r6\n\
- lsls r1, r4, 1\n\
- adds r1, r5, r1\n\
- ldrh r1, [r1]\n\
- bl sub_80EB3FC\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x3\n\
- bls _080936AE\n\
- bl sub_80936D4\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080936D0: .4byte 0x02000000\n\
- .syntax divided\n");
-}
-
-#endif
void sub_80936D4(void)
{
- unk_2000000.var_7 = FALSE;
- unk_2000000.var_8 = FALSE;
- unk_2000000.var_9 = FALSE;
- unk_2000000.var_a = FALSE;
- unk_2000000.var_b = FALSE;
- unk_2000000.var_c = FALSE;
- unk_2000000.var_d = FALSE;
+ ewram0.var_7 = 0;
+ ewram0.var_8 = 0;
+ ewram0.var_9 = 0;
+ ewram0.var_a = 0;
+ ewram0.var_b = 0;
+ ewram0.var_c = 0;
+ ewram0.var_d = 0;
- memset(unk_2000000.var_e, 0, sizeof(unk_2000000.var_e));
+ memset(ewram0.var_e, 0, sizeof(ewram0.var_e));
- if (unk_2000000.var_64.hasPokedex)
+ if (ewram0.var_64.hasPokedex)
{
- unk_2000000.var_7 += TRUE;
+ ewram0.var_7 += 1;
}
- if (unk_2000000.var_64.firstHallOfFameA != 0 || unk_2000000.var_64.firstHallOfFameB != 0 ||
- unk_2000000.var_64.firstHallOfFameC != 0)
+ if (ewram0.var_64.firstHallOfFameA != 0 || ewram0.var_64.firstHallOfFameB != 0 ||
+ ewram0.var_64.firstHallOfFameC != 0)
{
- unk_2000000.var_8 += TRUE;
+ ewram0.var_8 += 1;
}
- if (unk_2000000.var_64.linkBattleWins != 0 || unk_2000000.var_64.linkBattleLosses != 0)
+ if (ewram0.var_64.linkBattleWins != 0 || ewram0.var_64.linkBattleLosses != 0)
{
- unk_2000000.var_9 += TRUE;
+ ewram0.var_9 += 1;
}
- if (unk_2000000.var_64.battleTowerWins != 0 || unk_2000000.var_64.battleTowerLosses != 0)
+ if (ewram0.var_64.battleTowerWins != 0 || ewram0.var_64.battleTowerLosses != 0)
{
- unk_2000000.var_a += TRUE;
+ ewram0.var_a += 1;
}
- if (unk_2000000.var_64.contestsWithFriends != 0)
+ if (ewram0.var_64.contestsWithFriends != 0)
{
- unk_2000000.var_b += TRUE;
+ ewram0.var_b += 1;
}
- if (unk_2000000.var_64.pokeblocksWithFriends != 0)
+ if (ewram0.var_64.pokeblocksWithFriends != 0)
{
- unk_2000000.var_c += TRUE;
+ ewram0.var_c += 1;
}
- if (unk_2000000.var_64.pokemonTrades != 0)
+ if (ewram0.var_64.pokemonTrades != 0)
{
- unk_2000000.var_d += TRUE;
+ ewram0.var_d += 1;
}
- if (!unk_2000000.var_1)
+ if (!ewram0.var_1)
{
u32 badgeFlag;
int i;
i = 0;
badgeFlag = BADGE01_GET;
- while (TRUE)
+ while (1)
{
if (FlagGet(badgeFlag))
{
- unk_2000000.var_e[i] += TRUE;
+ ewram0.var_e[i] += 1;
}
badgeFlag += 1;
@@ -747,202 +611,87 @@ static void sub_809380C()
sub_809382C(taskId);
}
-__attribute__((naked))
static void sub_809382C(u8 taskId)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- ldr r7, _08093858 @ =gUnknown_083B5EBC\n\
- lsls r1, r0, 2\n\
- adds r1, r0\n\
- lsls r4, r1, 3\n\
- ldr r6, _0809385C @ =0x02000000\n\
- ldr r5, _08093860 @ =gTasks\n\
-_0809383E:\n\
- ldrb r0, [r6]\n\
- lsls r0, 2\n\
- adds r0, r7\n\
- ldr r1, [r0]\n\
- adds r0, r4, r5\n\
- bl _call_via_r1\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0809383E\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08093858: .4byte gUnknown_083B5EBC\n\
-_0809385C: .4byte 0x02000000\n\
-_08093860: .4byte gTasks\n\
- .syntax divided\n");
+ while (gUnknown_083B5EBC[ewram0.var_0](&gTasks[taskId]) != 0)
+ ;
}
-__attribute__((naked))
-bool8 sub_8093864()
+bool8 sub_8093864(struct Task *task)
{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- sub sp, 0x4\n\
- ldr r4, _080938A0 @ =0x02000000\n\
- ldr r2, _080938A4 @ =gSaveBlock2\n\
- ldrb r1, [r2, 0x11]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- movs r5, 0\n\
- strb r0, [r4, 0x5]\n\
- ldrb r0, [r2, 0x12]\n\
- strb r0, [r4, 0x6]\n\
- bl sub_80939A4\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- str r5, [sp]\n\
- movs r1, 0\n\
- movs r2, 0x10\n\
- movs r3, 0\n\
- bl BeginNormalPaletteFade\n\
- ldrb r0, [r4]\n\
- adds r0, 0x1\n\
- strb r0, [r4]\n\
- movs r0, 0\n\
- add sp, 0x4\n\
- pop {r4,r5}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_080938A0: .4byte 0x02000000\n\
-_080938A4: .4byte gSaveBlock2\n\
- .syntax divided\n");
+ ewram0.var_5 = gSaveBlock2.playTimeSeconds & 1;
+ ewram0.var_6 = gSaveBlock2.playTimeVBlanks;
+ sub_80939A4();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ ewram0.var_0 += 1;
+ return FALSE;
}
-__attribute__((naked))
-bool8 sub_80938A8()
+bool8 sub_80938A8(struct Task *task)
{
- asm(".syntax unified\n\
- push {lr}\n\
- ldr r0, _080938C4 @ =gPaletteFade\n\
- ldrb r1, [r0, 0x7]\n\
- movs r0, 0x80\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080938BE\n\
- ldr r1, _080938C8 @ =0x02000000\n\
- ldrb r0, [r1]\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
-_080938BE:\n\
- movs r0, 0\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_080938C4: .4byte gPaletteFade\n\
-_080938C8: .4byte 0x02000000\n\
- .syntax divided\n");
+ if (!gPaletteFade.active)
+ ewram0.var_0 += 1;
+ return FALSE;
}
-__attribute__((naked))
-bool8 sub_80938CC()
+bool8 sub_80938CC(struct Task *task)
{
- asm(".syntax unified\n\
- push {lr}\n\
- ldr r0, _080938E4 @ =gMain\n\
- ldrh r1, [r0, 0x2E]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080938EC\n\
- ldr r1, _080938E8 @ =0x02000000\n\
- movs r0, 0x5\n\
- strb r0, [r1]\n\
- movs r0, 0x1\n\
- b _08093914\n\
- .align 2, 0\n\
-_080938E4: .4byte gMain\n\
-_080938E8: .4byte 0x02000000\n\
-_080938EC:\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08093912\n\
- ldr r2, _08093900 @ =0x02000000\n\
- ldrb r1, [r2, 0x3]\n\
- cmp r1, 0\n\
- beq _08093904\n\
- movs r0, 0x5\n\
- b _0809390C\n\
- .align 2, 0\n\
-_08093900: .4byte 0x02000000\n\
-_08093904:\n\
- movs r0, 0x1\n\
- eors r0, r1\n\
- strb r0, [r2, 0x3]\n\
- movs r0, 0x3\n\
-_0809390C:\n\
- strb r0, [r2]\n\
- movs r0, 0x1\n\
- b _08093914\n\
-_08093912:\n\
- movs r0, 0\n\
-_08093914:\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
+ if (gMain.newKeys & B_BUTTON)
+ {
+ ewram0.var_0 = 5;
+ return TRUE;
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ if (ewram0.var_3 != 0)
+ {
+ ewram0.var_0 = 5;
+ return TRUE;
+ }
+ else
+ {
+ ewram0.var_3 ^= 1;
+ ewram0.var_0 = 3;
+ return TRUE;
+ }
+ }
+
+ return FALSE;
}
-bool8 sub_8093918()
+bool8 sub_8093918(struct Task *task)
{
sub_8093A28();
PlaySE(SE_CARD);
- unk_2000000.var_0 += TRUE;
+ ewram0.var_0 += 1;
return FALSE;
}
-bool8 sub_8093938()
+bool8 sub_8093938(struct Task *task)
{
if (sub_8093A48())
{
- unk_2000000.var_0 = 2;
+ ewram0.var_0 = 2;
}
return FALSE;
}
-__attribute__((naked))
-bool8 sub_8093954()
+bool8 sub_8093954(struct Task *task)
{
- asm(".syntax unified\n\
- push {lr}\n\
- sub sp, 0x4\n\
- bl sub_80939C0\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- movs r1, 0\n\
- str r1, [sp]\n\
- movs r2, 0\n\
- movs r3, 0x10\n\
- bl BeginNormalPaletteFade\n\
- ldr r1, _0809397C @ =0x02000000\n\
- ldrb r0, [r1]\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
- movs r0, 0\n\
- add sp, 0x4\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_0809397C: .4byte 0x02000000\n\
- .syntax divided\n");
+ sub_80939C0();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ ewram0.var_0 += 1;
+ return FALSE;
}
-bool8 sub_8093980()
+bool8 sub_8093980(struct Task *task)
{
if (!gPaletteFade.active)
{
- SetMainCallback2((MainCallback)unk_2000000.var_60);
+ SetMainCallback2((MainCallback)ewram0.var_60);
}
return FALSE;
@@ -972,9 +721,9 @@ static void sub_80939DC(u8 taskId)
struct Task *task;
task = &gTasks[taskId];
- if (unk_2000000.var_5 != task->data[TD_1])
+ if (ewram0.var_5 != task->data[TD_1])
{
- task->data[TD_1] = unk_2000000.var_5;
+ task->data[TD_1] = ewram0.var_5;
task->data[TD_0] ^= TRUE;
}
@@ -990,102 +739,32 @@ static void sub_8093A28(void)
sub_8093A68(taskId);
}
-__attribute__((naked))
-static u8 sub_8093A48()
+static u8 sub_8093A48(void)
{
- asm(".syntax unified\n\
- push {lr}\n\
- ldr r0, _08093A5C @ =sub_8093A68\n\
- bl FindTaskIdByFunc\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0xFF\n\
- beq _08093A60\n\
- movs r0, 0\n\
- b _08093A62\n\
- .align 2, 0\n\
-_08093A5C: .4byte sub_8093A68\n\
-_08093A60:\n\
- movs r0, 0x1\n\
-_08093A62:\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
+ if (FindTaskIdByFunc(sub_8093A68) == 0xFF)
+ return TRUE;
+ else
+ return FALSE;
}
-__attribute__((naked))
static void sub_8093A68(u8 taskId)
{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- ldr r5, _08093A98 @ =gUnknown_083B5ED8\n\
- ldr r2, _08093A9C @ =gTasks\n\
- lsls r1, r0, 2\n\
- adds r1, r0\n\
- lsls r1, 3\n\
- adds r4, r1, r2\n\
-_08093A7A:\n\
- movs r1, 0x8\n\
- ldrsh r0, [r4, r1]\n\
- lsls r0, 2\n\
- adds r0, r5\n\
- ldr r1, [r0]\n\
- adds r0, r4, 0\n\
- bl _call_via_r1\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _08093A7A\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08093A98: .4byte gUnknown_083B5ED8\n\
-_08093A9C: .4byte gTasks\n\
- .syntax divided\n");
+ while (gUnknown_083B5ED8[gTasks[taskId].data[0]](&gTasks[taskId]) != 0)
+ ;
}
-__attribute__((naked))
-bool8 sub_8093AA0()
+bool8 sub_8093AA0(struct Task *task)
{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- adds r4, r0, 0\n\
- ldr r0, _08093AE0 @ =0x02000000\n\
- movs r1, 0\n\
- strb r1, [r0, 0x4]\n\
- bl dp12_8087EA4\n\
- movs r1, 0\n\
- ldr r0, _08093AE4 @ =gUnknown_03004DE0\n\
- ldr r2, _08093AE8 @ =0x0000fffc\n\
- movs r3, 0xF0\n\
- lsls r3, 3\n\
- adds r0, r3\n\
-_08093ABA:\n\
- strh r2, [r0]\n\
- adds r0, 0x2\n\
- adds r1, 0x1\n\
- cmp r1, 0x9F\n\
- bls _08093ABA\n\
- ldr r0, _08093AEC @ =sub_8093D7C\n\
- bl SetHBlankCallback\n\
- ldr r1, _08093AE0 @ =0x02000000\n\
- movs r0, 0x1\n\
- strb r0, [r1, 0x4]\n\
- ldrh r0, [r4, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x8]\n\
- movs r0, 0\n\
- pop {r4}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_08093AE0: .4byte 0x02000000\n\
-_08093AE4: .4byte gUnknown_03004DE0\n\
-_08093AE8: .4byte 0x0000fffc\n\
-_08093AEC: .4byte sub_8093D7C\n\
- .syntax divided\n");
+ s32 i;
+
+ ewram0.var_4 = 0;
+ dp12_8087EA4();
+ for (i = 0; i < ARRAY_COUNT(gUnknown_03004DE0.unk780); i++)
+ gUnknown_03004DE0.unk780[i] = -4;
+ SetHBlankCallback(sub_8093D7C);
+ ewram0.var_4 = 1;
+ task->data[0]++;
+ return FALSE;
}
__attribute__((naked))
@@ -1245,7 +924,7 @@ bool8 sub_8093C0C(struct TrainerCard *trainerCard)
sub_80939C0();
sub_8093DAC();
- if (!unk_2000000.var_3)
+ if (!ewram0.var_3)
{
sub_80939A4();
}
@@ -1409,7 +1088,7 @@ bool8 sub_8093D50(void)
{
u8 taskId;
- unk_2000000.var_4 = FALSE;
+ ewram0.var_4 = FALSE;
SetHBlankCallback(NULL);
sub_8093E04();
@@ -1450,7 +1129,7 @@ _08093DA8: .4byte 0x4000012 @ REG_BG0VOFS\n\
static void sub_8093DAC(void)
{
- if (unk_2000000.var_3)
+ if (ewram0.var_3)
{
sub_8093DEC();
}
@@ -1564,11 +1243,11 @@ _08093E9C: .4byte 0x80000200\n\
void sub_8093EA0(void)
{
- LoadPalette(gUnknown_083B5EF8[unk_2000000.var_2], 0, 48 * 2);
+ LoadPalette(gUnknown_083B5EF8[ewram0.var_2], 0, 48 * 2);
LoadPalette(gBadgesPalette, 48, 16 * 2);
LoadPalette(gUnknown_083B5F4C, 64, 16 * 2);
- if (unk_2000000.var_64.gender != MALE)
+ if (ewram0.var_64.gender != MALE)
{
LoadPalette(gUnknown_083B5F0C, 16, 16 * 2);
}
@@ -1576,7 +1255,7 @@ void sub_8093EA0(void)
static void sub_8093EF8(void)
{
- LoadTrainerGfx_TrainerCard(unk_2000000.var_64.gender, 80, (void *)(VRAM + 0x1880));
+ LoadTrainerGfx_TrainerCard(ewram0.var_64.gender, 80, (void *)(VRAM + 0x1880));
}
__attribute__((naked))
@@ -1887,8 +1566,8 @@ static void sub_8094140(void)
BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Values);
buffer = gStringVar1;
- StringCopy(buffer, unk_2000000.var_64.playerName);
- ConvertInternationalString(buffer, unk_2000000.language);
+ StringCopy(buffer, ewram0.var_64.playerName);
+ ConvertInternationalString(buffer, ewram0.language);
MenuPrint(buffer, 7, 5);
TrainerCard_Front_PrintTrainerID();
@@ -1921,26 +1600,26 @@ static void TrainerCard_Front_PrintTrainerID(void)
{
u8 buffer[8];
- ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5);
+ ConvertIntToDecimalStringN(buffer, ewram0.var_64.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5);
MenuPrint(buffer, 20, 2);
}
static void TrainerCard_Front_PrintMoney(void)
{
- sub_80B7AEC(unk_2000000.var_64.money, 16, 8);
+ sub_80B7AEC(ewram0.var_64.money, 16, 8);
}
static void TrainerCard_Front_PrintPokedexCount(void)
{
u8 buffer[16];
- if (unk_2000000.var_7 == FALSE)
+ if (ewram0.var_7 == FALSE)
{
sub_8094110();
return;
}
- ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.pokedexSeen, STR_CONV_MODE_LEFT_ALIGN, 3);
+ ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokedexSeen, STR_CONV_MODE_LEFT_ALIGN, 3);
MenuPrint_RightAligned(buffer, 16, 10);
}
@@ -1953,10 +1632,10 @@ static void TrainerCard_Front_PrintPlayTime(u8 *arg1, s16 colon)
playTimeHours = gSaveBlock2.playTimeHours;
playTimeMinutes = gSaveBlock2.playTimeMinutes;
- if (unk_2000000.var_1 != 0)
+ if (ewram0.var_1 != 0)
{
- playTimeHours = unk_2000000.var_64.playTimeHours;
- playTimeMinutes = unk_2000000.var_64.playTimeMinutes;
+ playTimeHours = ewram0.var_64.playTimeHours;
+ playTimeMinutes = ewram0.var_64.playTimeMinutes;
}
FormatPlayTime(buffer, playTimeHours, playTimeMinutes, colon);
@@ -1967,23 +1646,23 @@ static void sub_809429C(void)
{
u8 *str;
- if (unk_2000000.var_1 == FALSE)
+ if (ewram0.var_1 == FALSE)
{
return;
}
str = gStringVar1;
- str = StringCopy(str, unk_2000000.var_20[0]);
+ str = StringCopy(str, ewram0.var_20[0]);
str[0] = 00;
str++;
- str = StringCopy(str, unk_2000000.var_20[1]);
+ str = StringCopy(str, ewram0.var_20[1]);
MenuPrint(gStringVar1, 2, 14);
str = gStringVar1;
- str = StringCopy(str, unk_2000000.var_20[2]);
+ str = StringCopy(str, ewram0.var_20[2]);
str[0] = 00;
str++;
- str = StringCopy(str, unk_2000000.var_20[3]);
+ str = StringCopy(str, ewram0.var_20[3]);
MenuPrint(gStringVar1, 2, 16);
}
@@ -1992,8 +1671,8 @@ static void TrainerCard_Back_PrintName(void)
u8 *str;
str = gStringVar1;
- StringCopy(str, unk_2000000.var_64.playerName);
- ConvertInternationalString(str, unk_2000000.language);
+ StringCopy(str, ewram0.var_64.playerName);
+ ConvertInternationalString(str, ewram0.language);
StringAppend(str, gOtherText_TrainersTrainerCard);
@@ -2002,7 +1681,7 @@ static void TrainerCard_Back_PrintName(void)
static void TrainerCard_Back_PrintHallOfFameTime_Label(void)
{
- if (unk_2000000.var_8 == FALSE)
+ if (ewram0.var_8 == FALSE)
{
return;
}
@@ -2014,24 +1693,24 @@ static void TrainerCard_Back_PrintHallOfFameTime(void)
{
u8 *str;
- if (unk_2000000.var_8 == FALSE)
+ if (ewram0.var_8 == FALSE)
{
return;
}
str = gStringVar1;
- str = ConvertIntToDecimalStringN(str, unk_2000000.var_64.firstHallOfFameA, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameA, STR_CONV_MODE_RIGHT_ALIGN, 3);
str = StringCopy(str, gUnknown_083B5EF4);
- str = ConvertIntToDecimalStringN(str, unk_2000000.var_64.firstHallOfFameB, STR_CONV_MODE_LEADING_ZEROS, 2);
+ str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameB, STR_CONV_MODE_LEADING_ZEROS, 2);
str = StringCopy(str, gUnknown_083B5EF4);
- str = ConvertIntToDecimalStringN(str, unk_2000000.var_64.firstHallOfFameC, STR_CONV_MODE_LEADING_ZEROS, 2);
+ str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameC, STR_CONV_MODE_LEADING_ZEROS, 2);
MenuPrint_RightAligned(gStringVar1, 28, 5);
}
static void TrainerCard_Back_PrintLinkBattlesLabel(void)
{
- if (unk_2000000.var_9 == FALSE)
+ if (ewram0.var_9 == FALSE)
{
return;
}
@@ -2043,21 +1722,21 @@ static void TrainerCard_Back_PrintLinkBattles(void)
{
u8 buffer[16];
- if (unk_2000000.var_9 == FALSE)
+ if (ewram0.var_9 == FALSE)
{
return;
}
- ConvertIntToDecimalString(buffer, unk_2000000.var_64.linkBattleWins);
+ ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleWins);
MenuPrint_RightAligned(buffer, 22, 7);
- ConvertIntToDecimalString(buffer, unk_2000000.var_64.linkBattleLosses);
+ ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleLosses);
MenuPrint_RightAligned(buffer, 28, 7);
}
static void TrainerCard_Back_PrintBattleTower_Label(void)
{
- if (unk_2000000.var_a == FALSE)
+ if (ewram0.var_a == FALSE)
{
return;
}
@@ -2069,21 +1748,21 @@ static void TrainerCard_Back_PrintBattleTower(void)
{
u8 buffer[16];
- if (unk_2000000.var_a == FALSE)
+ if (ewram0.var_a == FALSE)
{
return;
}
- sub_8072C44(buffer, unk_2000000.var_64.battleTowerWins, 24, 1);
+ sub_8072C44(buffer, ewram0.var_64.battleTowerWins, 24, 1);
MenuPrint_PixelCoords(buffer, 112, 120, 0);
- sub_8072C44(buffer, unk_2000000.var_64.battleTowerLosses, 24, 1);
+ sub_8072C44(buffer, ewram0.var_64.battleTowerLosses, 24, 1);
MenuPrint_PixelCoords(buffer, 149, 120, 0);
}
static void TrainerCard_Back_PrintLinkContests_Label(void)
{
- if (unk_2000000.var_b == FALSE)
+ if (ewram0.var_b == FALSE)
{
return;
}
@@ -2095,18 +1774,18 @@ static void TrainerCard_Back_PrintLinkContests(void)
{
u8 buffer[8];
- if (unk_2000000.var_b == FALSE)
+ if (ewram0.var_b == FALSE)
{
return;
}
- ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ ConvertIntToDecimalStringN(buffer, ewram0.var_64.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 3);
MenuPrint_RightAligned(buffer, 28, 13);
}
static void TrainerCard_Back_PrintLinkPokeblocks_Label(void)
{
- if (unk_2000000.var_c == FALSE)
+ if (ewram0.var_c == FALSE)
{
return;
}
@@ -2118,18 +1797,18 @@ static void TrainerCard_Back_PrintLinkPokeblocks(void)
{
u8 buffer[8];
- if (unk_2000000.var_c == FALSE)
+ if (ewram0.var_c == FALSE)
{
return;
}
- ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5);
MenuPrint_RightAligned(buffer, 28, 11);
}
static void TrainerCard_Back_PrintPokemonTrades_Label(void)
{
- if (unk_2000000.var_d == FALSE)
+ if (ewram0.var_d == FALSE)
{
return;
}
@@ -2141,12 +1820,12 @@ static void TrainerCard_Back_PrintPokemonTrades(void)
{
u8 buffer[8];
- if (unk_2000000.var_d == FALSE)
+ if (ewram0.var_d == FALSE)
{
return;
}
- ConvertIntToDecimalStringN(buffer, unk_2000000.var_64.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5);
MenuPrint_RightAligned(buffer, 28, 9);
}
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 408dc69ce..9dfcf0e5c 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -7,6 +7,7 @@
#include "field_player_avatar.h"
#include "metatile_behavior.h"
#include "rng.h"
+#include "roamer.h"
#include "rom4.h"
#include "safari_zone.h"
#include "script.h"
@@ -3323,7 +3324,7 @@ bool8 StandardWildEncounter(u16 a, u16 b)
if (DoWildEncounterTest(gWildMonHeaders[headerNum].landMonsInfo->encounterRate, 0) == TRUE)
{
- if (sub_81344CC() == TRUE)
+ if (TryStartRoamerEncounter() == TRUE)
{
roamer = &gSaveBlock1.roamer;
if (RepelCheck(roamer->level))
@@ -3357,7 +3358,7 @@ bool8 StandardWildEncounter(u16 a, u16 b)
if (DoWildEncounterTest(gWildMonHeaders[headerNum].waterMonsInfo->encounterRate, 0) == TRUE)
{
- if (sub_81344CC() == TRUE)
+ if (TryStartRoamerEncounter() == TRUE)
{
roamer = &gSaveBlock1.roamer;
if (RepelCheck(roamer->level))
@@ -3425,7 +3426,7 @@ bool8 SweetScentWildEncounter(void)
wildPokemonInfo = gWildMonHeaders[headerNum].landMonsInfo;
if (wildPokemonInfo == NULL)
return FALSE;
- if (sub_81344CC() == TRUE)
+ if (TryStartRoamerEncounter() == TRUE)
{
StartBattle_Roamer();
return TRUE;
@@ -3442,7 +3443,7 @@ bool8 SweetScentWildEncounter(void)
wildPokemonInfo = gWildMonHeaders[headerNum].waterMonsInfo;
if (wildPokemonInfo == NULL)
return FALSE;
- if (sub_81344CC() == TRUE)
+ if (TryStartRoamerEncounter() == TRUE)
{
StartBattle_Roamer();
return TRUE;
diff --git a/sym_ewram.txt b/sym_ewram.txt
index f4a688968..bf976e5dd 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -296,7 +296,7 @@ gBattleMovePower: @ 2024E80
word_2024E82: @ 2024E82
.space 0x2
-gUnknown_02024E84: @ 2024E84
+gBattleMonForms: @ 2024E84
.space 0x4
byte_2024E88: @ 2024E88
@@ -958,14 +958,9 @@ gLastSaveSectorStatus: @ 2039284
gUnknown_02039288: @ 2039288
.space 0x74
-gUnknown_020392FC: @ 20392FC
- .space 0x6
-
-@ Latios/Latias location
-@ map group, map num.
-gRoamerLocation: @ 2039302
- .space 0x2
+ .include "src/roamer.o"
+ .align 2
gUnknown_02039304: @ 2039304
.space 0x4
diff --git a/tools/ramscrgen/main.cpp b/tools/ramscrgen/main.cpp
index 5c803c31f..6c4f4bbd7 100644
--- a/tools/ramscrgen/main.cpp
+++ b/tools/ramscrgen/main.cpp
@@ -25,7 +25,7 @@
#include "sym_file.h"
#include "elf.h"
-void HandleCommonInclude(std::string filename, std::string sourcePath, std::string symOrderPath)
+void HandleCommonInclude(std::string filename, std::string sourcePath, std::string symOrderPath, std::string lang)
{
auto commonSymbols = GetCommonSymbols(sourcePath + "/" + filename);
@@ -40,6 +40,8 @@ void HandleCommonInclude(std::string filename, std::string sourcePath, std::stri
while (!symFile.IsAtEnd())
{
+ symFile.HandleLangConditional(lang);
+
std::string label = symFile.GetLabel(false);
if (label.length() == 0)
@@ -71,12 +73,14 @@ void HandleCommonInclude(std::string filename, std::string sourcePath, std::stri
}
}
-void ConvertSymFile(std::string filename, std::string sectionName, bool common, std::string sourcePath, std::string commonSymPath)
+void ConvertSymFile(std::string filename, std::string sectionName, std::string lang, bool common, std::string sourcePath, std::string commonSymPath)
{
SymFile symFile(filename);
while (!symFile.IsAtEnd())
{
+ symFile.HandleLangConditional(lang);
+
Directive directive = symFile.GetDirective();
switch (directive)
@@ -87,10 +91,9 @@ void ConvertSymFile(std::string filename, std::string sectionName, bool common,
symFile.ExpectEmptyRestOfLine();
printf(". = ALIGN(4);\n");
if (common)
- HandleCommonInclude(incFilename, sourcePath, commonSymPath);
+ HandleCommonInclude(incFilename, sourcePath, commonSymPath, lang);
else
printf("%s(%s);\n", incFilename.c_str(), sectionName.c_str());
- printf(". = ALIGN(4);\n");
break;
}
case Directive::Space:
@@ -133,28 +136,29 @@ void ConvertSymFile(std::string filename, std::string sectionName, bool common,
int main(int argc, char **argv)
{
- if (argc < 3)
+ if (argc < 4)
{
- fprintf(stderr, "Usage: %s SECTION_NAME SYM_FILE [-c SRC_PATH,COMMON_SYM_PATH]", argv[0]);
+ fprintf(stderr, "Usage: %s SECTION_NAME SYM_FILE LANG [-c SRC_PATH,COMMON_SYM_PATH]", argv[0]);
return 1;
}
bool common = false;
std::string sectionName = std::string(argv[1]);
std::string symFileName = std::string(argv[2]);
+ std::string lang = std::string(argv[3]);
std::string sourcePath;
std::string commonSymPath;
- if (argc > 3)
+ if (argc > 4)
{
- if (std::strcmp(argv[3], "-c") != 0)
+ if (std::strcmp(argv[4], "-c") != 0)
FATAL_ERROR("error: unrecognized argument \"%s\"\n", argv[4]);
- if (argc < 5)
+ if (argc < 6)
FATAL_ERROR("error: missing SRC_PATH,COMMON_SYM_PATH after \"-c\"\n");
common = true;
- std::string paths = std::string(argv[4]);
+ std::string paths = std::string(argv[5]);
std::size_t commaPos = paths.find(',');
if (commaPos == std::string::npos)
@@ -164,6 +168,6 @@ int main(int argc, char **argv)
commonSymPath = paths.substr(commaPos + 1);
}
- ConvertSymFile(symFileName, sectionName, common, sourcePath, commonSymPath);
+ ConvertSymFile(symFileName, sectionName, lang, common, sourcePath, commonSymPath);
return 0;
}
diff --git a/tools/ramscrgen/sym_file.cpp b/tools/ramscrgen/sym_file.cpp
index 9d9e4a064..5379bd93f 100644
--- a/tools/ramscrgen/sym_file.cpp
+++ b/tools/ramscrgen/sym_file.cpp
@@ -53,6 +53,7 @@ SymFile::SymFile(std::string filename) : m_filename(filename)
m_pos = 0;
m_lineNum = 1;
m_lineStart = 0;
+ m_inLangConditional = false;
RemoveComments();
}
@@ -387,12 +388,78 @@ void SymFile::ExpectEmptyRestOfLine()
}
}
+
+void SymFile::SkipLine()
+{
+ while (m_buffer[m_pos] != 0 && m_buffer[m_pos] != '\n')
+ m_pos++;
+
+ if (m_buffer[m_pos] == '\n')
+ m_pos++;
+}
+
// Checks if we're at the end of the file.
bool SymFile::IsAtEnd()
{
return (m_pos >= m_size);
}
+void SymFile::HandleLangConditional(std::string lang)
+{
+ if (m_buffer[m_pos] != '#')
+ return;
+
+ m_pos++;
+
+ if (CheckForDirective("begin"))
+ {
+ if (m_inLangConditional)
+ RaiseError("already inside language conditional");
+
+ SkipWhitespace();
+
+ std::string label = GetLabel(false);
+
+ if (label.length() == 0)
+ RaiseError("no language name after #begin");
+
+ ExpectEmptyRestOfLine();
+
+ if (lang == label)
+ {
+ m_inLangConditional = true;
+ }
+ else
+ {
+ while (!IsAtEnd() && m_buffer[m_pos] != '#')
+ SkipLine();
+
+ if (m_buffer[m_pos] != '#')
+ RaiseError("unterminated language conditional");
+
+ m_pos++;
+
+ if (!CheckForDirective("end"))
+ RaiseError("expected #end");
+
+ ExpectEmptyRestOfLine();
+ }
+ }
+ else if (CheckForDirective("end"))
+ {
+ if (!m_inLangConditional)
+ RaiseError("not inside language conditional");
+
+ m_inLangConditional = false;
+
+ ExpectEmptyRestOfLine();
+ }
+ else
+ {
+ RaiseError("unknown # directive");
+ }
+}
+
// Reports a diagnostic message.
void SymFile::ReportDiagnostic(const char* type, const char* format, std::va_list args)
{
diff --git a/tools/ramscrgen/sym_file.h b/tools/ramscrgen/sym_file.h
index 5b3cedb3b..bb0c8038d 100644
--- a/tools/ramscrgen/sym_file.h
+++ b/tools/ramscrgen/sym_file.h
@@ -46,7 +46,9 @@ public:
std::string ReadPath();
bool ReadInteger(unsigned long& value);
void ExpectEmptyRestOfLine();
+ void SkipLine();
bool IsAtEnd();
+ void HandleLangConditional(std::string lang);
void RaiseError(const char* format, ...);
void RaiseWarning(const char* format, ...);
@@ -57,6 +59,7 @@ private:
long m_lineNum;
long m_lineStart;
std::string m_filename;
+ bool m_inLangConditional;
bool ConsumeComma();
void RemoveComments();
diff --git a/whitespace.sh b/whitespace.sh
new file mode 100755
index 000000000..7075fbd4e
--- /dev/null
+++ b/whitespace.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+if grep -Enr "\s+\$" src; then
+ # Trailing whitespace detected
+ exit 1
+fi